linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
To: gregkh@linuxfoundation.org
Cc: hemantk@codeaurora.org, bbhatt@codeaurora.org,
	linux-arm-msm@vger.kernel.org, jhugo@codeaurora.org,
	linux-kernel@vger.kernel.org, loic.poulain@linaro.org,
	Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
Subject: [PATCH 26/29] bus: mhi: core: Indexed MHI controller name
Date: Wed,  2 Dec 2020 15:11:56 +0530	[thread overview]
Message-ID: <20201202094159.107075-27-manivannan.sadhasivam@linaro.org> (raw)
In-Reply-To: <20201202094159.107075-1-manivannan.sadhasivam@linaro.org>

From: Loic Poulain <loic.poulain@linaro.org>

Today the MHI controller name is simply cloned from the underlying
bus device (its parent), that gives the following device structure
for e.g. a MHI/PCI controller:
devices/pci0000:00/0000:00:01.2/0000:02:00.0/0000:02:00.0
devices/pci0000:00/0000:00:01.2/0000:02:00.0/0000:02:00.0/0000:02:00.0_IPCR
...

That's quite misleading/confusing and can cause device registering
issues because of duplicate dev name (e.g. if a PCI device register
two different MHI instances).

This patch changes MHI core to create indexed mhi controller names
(mhi0, mhi1...) in the same way as other busses (i2c0, usb0...).

The previous example becomes:
devices/pci0000:00/0000:00:01.2/0000:02:00.0/mhi0
devices/pci0000:00/0000:00:01.2/0000:02:00.0/mhi0/mhi0_IPCR
...
 v2: move index field at the end of mhi_controller struct (before bool)
     to avoid breaking well packed alignment.

Signed-off-by: Loic Poulain <loic.poulain@linaro.org>
Reviewed-by: Jeffrey Hugo <jhugo@codeaurora.org>
Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
---
 drivers/bus/mhi/core/init.c | 18 ++++++++++++++++--
 drivers/bus/mhi/core/main.c |  2 +-
 include/linux/mhi.h         |  2 ++
 3 files changed, 19 insertions(+), 3 deletions(-)

diff --git a/drivers/bus/mhi/core/init.c b/drivers/bus/mhi/core/init.c
index 655d539c6808..1d6f7b6c1fcd 100644
--- a/drivers/bus/mhi/core/init.c
+++ b/drivers/bus/mhi/core/init.c
@@ -8,6 +8,7 @@
 #include <linux/device.h>
 #include <linux/dma-direction.h>
 #include <linux/dma-mapping.h>
+#include <linux/idr.h>
 #include <linux/interrupt.h>
 #include <linux/list.h>
 #include <linux/mhi.h>
@@ -18,6 +19,8 @@
 #include <linux/wait.h>
 #include "internal.h"
 
+static DEFINE_IDA(mhi_controller_ida);
+
 const char * const mhi_ee_str[MHI_EE_MAX] = {
 	[MHI_EE_PBL] = "PBL",
 	[MHI_EE_SBL] = "SBL",
@@ -940,6 +943,12 @@ int mhi_register_controller(struct mhi_controller *mhi_cntrl,
 	mhi_cntrl->minor_version = (soc_info & SOC_HW_VERSION_MINOR_VER_BMSK) >>
 					SOC_HW_VERSION_MINOR_VER_SHFT;
 
+	mhi_cntrl->index = ida_alloc(&mhi_controller_ida, GFP_KERNEL);
+	if (mhi_cntrl->index < 0) {
+		ret = mhi_cntrl->index;
+		goto error_ida_alloc;
+	}
+
 	/* Register controller with MHI bus */
 	mhi_dev = mhi_alloc_device(mhi_cntrl);
 	if (IS_ERR(mhi_dev)) {
@@ -950,8 +959,8 @@ int mhi_register_controller(struct mhi_controller *mhi_cntrl,
 
 	mhi_dev->dev_type = MHI_DEVICE_CONTROLLER;
 	mhi_dev->mhi_cntrl = mhi_cntrl;
-	dev_set_name(&mhi_dev->dev, "%s", dev_name(mhi_cntrl->cntrl_dev));
-	mhi_dev->name = dev_name(mhi_cntrl->cntrl_dev);
+	dev_set_name(&mhi_dev->dev, "mhi%d", mhi_cntrl->index);
+	mhi_dev->name = dev_name(&mhi_dev->dev);
 
 	/* Init wakeup source */
 	device_init_wakeup(&mhi_dev->dev, true);
@@ -970,6 +979,9 @@ int mhi_register_controller(struct mhi_controller *mhi_cntrl,
 	put_device(&mhi_dev->dev);
 
 error_alloc_dev:
+	ida_free(&mhi_controller_ida, mhi_cntrl->index);
+
+error_ida_alloc:
 	kfree(mhi_cntrl->mhi_cmd);
 
 error_alloc_cmd:
@@ -1004,6 +1016,8 @@ void mhi_unregister_controller(struct mhi_controller *mhi_cntrl)
 
 	device_del(&mhi_dev->dev);
 	put_device(&mhi_dev->dev);
+
+	ida_free(&mhi_controller_ida, mhi_cntrl->index);
 }
 EXPORT_SYMBOL_GPL(mhi_unregister_controller);
 
diff --git a/drivers/bus/mhi/core/main.c b/drivers/bus/mhi/core/main.c
index 4eb93d8bea1d..702c31b6aefa 100644
--- a/drivers/bus/mhi/core/main.c
+++ b/drivers/bus/mhi/core/main.c
@@ -331,7 +331,7 @@ void mhi_create_devices(struct mhi_controller *mhi_cntrl)
 		/* Channel name is same for both UL and DL */
 		mhi_dev->name = mhi_chan->name;
 		dev_set_name(&mhi_dev->dev, "%s_%s",
-			     dev_name(mhi_cntrl->cntrl_dev),
+			     dev_name(&mhi_cntrl->mhi_dev->dev),
 			     mhi_dev->name);
 
 		/* Init wakeup source if available */
diff --git a/include/linux/mhi.h b/include/linux/mhi.h
index d31efcf02ae7..aa9757e71f1f 100644
--- a/include/linux/mhi.h
+++ b/include/linux/mhi.h
@@ -348,6 +348,7 @@ struct mhi_controller_config {
  * @read_reg: Read a MHI register via the physical link (required)
  * @write_reg: Write a MHI register via the physical link (required)
  * @buffer_len: Bounce buffer length
+ * @index: Index of the MHI controller instance
  * @bounce_buf: Use of bounce buffer
  * @fbc_download: MHI host needs to do complete image transfer (optional)
  * @pre_init: MHI host needs to do pre-initialization before power up
@@ -438,6 +439,7 @@ struct mhi_controller {
 			  u32 val);
 
 	size_t buffer_len;
+	int index;
 	bool bounce_buf;
 	bool fbc_download;
 	bool pre_init;
-- 
2.25.1


  parent reply	other threads:[~2020-12-02  9:45 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-12-02  9:41 [PATCH 00/29] MHI changes for v5.11 Manivannan Sadhasivam
2020-12-02  9:41 ` [PATCH 01/29] bus: mhi: Remove auto-start option Manivannan Sadhasivam
2020-12-02 16:00   ` Kalle Valo
2020-12-02 16:27     ` Manivannan Sadhasivam
2020-12-02 16:57       ` Kalle Valo
2020-12-02 17:48         ` Greg KH
2020-12-02  9:41 ` [PATCH 02/29] net: qrtr: Start MHI channels during init Manivannan Sadhasivam
2020-12-02  9:41 ` [PATCH 03/29] bus: mhi: core: fix potential operator-precedence with BHI macros Manivannan Sadhasivam
2020-12-02  9:41 ` [PATCH 04/29] bus: mhi: Add MHI PCI support for WWAN modems Manivannan Sadhasivam
2020-12-02  9:41 ` [PATCH 05/29] bus: mhi: core: Fix null pointer access when parsing MHI configuration Manivannan Sadhasivam
2020-12-02  9:41 ` [PATCH 06/29] bus: mhi: Fix channel close issue on driver remove Manivannan Sadhasivam
2020-12-02  9:41 ` [PATCH 07/29] bus: mhi: core: Remove unnecessary counter from mhi_firmware_copy() Manivannan Sadhasivam
2020-12-02  9:41 ` [PATCH 08/29] bus: mhi: core: Add missing EXPORT_SYMBOL for mhi_get_mhi_state() Manivannan Sadhasivam
2020-12-02  9:41 ` [PATCH 09/29] bus: mhi: core: Expose mhi_get_exec_env() API for controllers Manivannan Sadhasivam
2020-12-02  9:41 ` [PATCH 10/29] bus: mhi: core: Remove unused mhi_fw_load_worker() declaration Manivannan Sadhasivam
2020-12-02  9:41 ` [PATCH 11/29] bus: mhi: core: Rename RDDM download function to use proper words Manivannan Sadhasivam
2020-12-02  9:41 ` [PATCH 12/29] bus: mhi: core: Skip RDDM download for unknown execution environment Manivannan Sadhasivam
2020-12-02  9:41 ` [PATCH 13/29] bus: mhi: core: Use appropriate names for firmware load functions Manivannan Sadhasivam
2020-12-02  9:41 ` [PATCH 14/29] bus: mhi: core: Move to using high priority workqueue Manivannan Sadhasivam
2020-12-02  9:41 ` [PATCH 15/29] bus: mhi: core: Skip device wake in error or shutdown states Manivannan Sadhasivam
2020-12-02  9:41 ` [PATCH 16/29] bus: mhi: core: Move to SYS_ERROR regardless of RDDM capability Manivannan Sadhasivam
2020-12-02  9:41 ` [PATCH 17/29] bus: mhi: core: Prevent sending multiple RDDM entry callbacks Manivannan Sadhasivam
2020-12-02  9:41 ` [PATCH 18/29] bus: mhi: core: Move to an error state on any firmware load failure Manivannan Sadhasivam
2020-12-02  9:41 ` [PATCH 19/29] bus: mhi: core: Use appropriate label in firmware load handler API Manivannan Sadhasivam
2020-12-02  9:41 ` [PATCH 20/29] bus: mhi: core: Move to an error state on mission mode failure Manivannan Sadhasivam
2020-12-02  9:41 ` [PATCH 21/29] bus: mhi: core: Check for IRQ availability during registration Manivannan Sadhasivam
2020-12-02  9:41 ` [PATCH 22/29] bus: mhi: core: Separate system error and power down handling Manivannan Sadhasivam
2020-12-02  9:41 ` [PATCH 23/29] bus: mhi: core: Mark and maintain device states early on after power down Manivannan Sadhasivam
2020-12-02  9:41 ` [PATCH 24/29] bus: mhi: core: Remove MHI event ring IRQ handlers when powering down Manivannan Sadhasivam
2020-12-02  9:41 ` [PATCH 25/29] net: qrtr: Unprepare MHI channels during remove Manivannan Sadhasivam
2020-12-02  9:41 ` Manivannan Sadhasivam [this message]
2020-12-02  9:41 ` [PATCH 27/29] bus: mhi: core: Fix device hierarchy Manivannan Sadhasivam
2020-12-02  9:41 ` [PATCH 28/29] bus: mhi: core: Fix error handling in mhi_register_controller() Manivannan Sadhasivam
2020-12-02  9:41 ` [PATCH 29/29] mhi: pci_generic: Fix implicit conversion warning Manivannan Sadhasivam
2020-12-02 16:29 ` [PATCH 00/29] MHI changes for v5.11 Manivannan Sadhasivam

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20201202094159.107075-27-manivannan.sadhasivam@linaro.org \
    --to=manivannan.sadhasivam@linaro.org \
    --cc=bbhatt@codeaurora.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=hemantk@codeaurora.org \
    --cc=jhugo@codeaurora.org \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=loic.poulain@linaro.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).