All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/6] MHI fixes for v5.7
@ 2020-04-30 19:05 Manivannan Sadhasivam
  2020-04-30 19:05 ` [PATCH 1/6] bus: mhi: Fix parsing of mhi_flags Manivannan Sadhasivam
                   ` (5 more replies)
  0 siblings, 6 replies; 7+ messages in thread
From: Manivannan Sadhasivam @ 2020-04-30 19:05 UTC (permalink / raw)
  To: gregkh; +Cc: hemantk, jhugo, linux-arm-msm, linux-kernel, Manivannan Sadhasivam

Hi Greg,

Here is the set of MHI bus fixes patches for v5.7. These patches are
reviewed by Hemant and me and also tested with couple of MHI client devices.

There are a couple of changes which affect the controller interface but since
we don't have any controller in mainline, it doesn't hurt doing.

Please consider merging.

Thanks,
Mani

Jeffrey Hugo (5):
  bus: mhi: core: Make sure to powerdown if mhi_sync_power_up fails
  bus: mhi: core: Remove link_status() callback
  bus: mhi: core: Offload register accesses to the controller
  bus: mhi: core: Fix typo in comment
  bus: mhi: core: Fix channel device name conflict

Manivannan Sadhasivam (1):
  bus: mhi: Fix parsing of mhi_flags

 drivers/bus/mhi/core/init.c     |  7 +++----
 drivers/bus/mhi/core/internal.h |  3 ---
 drivers/bus/mhi/core/main.c     | 16 ++++------------
 drivers/bus/mhi/core/pm.c       |  6 +++++-
 include/linux/mhi.h             | 16 ++++++++++------
 5 files changed, 22 insertions(+), 26 deletions(-)

-- 
2.17.1


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH 1/6] bus: mhi: Fix parsing of mhi_flags
  2020-04-30 19:05 [PATCH 0/6] MHI fixes for v5.7 Manivannan Sadhasivam
@ 2020-04-30 19:05 ` Manivannan Sadhasivam
  2020-04-30 19:05 ` [PATCH 2/6] bus: mhi: core: Make sure to powerdown if mhi_sync_power_up fails Manivannan Sadhasivam
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: Manivannan Sadhasivam @ 2020-04-30 19:05 UTC (permalink / raw)
  To: gregkh; +Cc: hemantk, jhugo, linux-arm-msm, linux-kernel, Manivannan Sadhasivam

With the current parsing of mhi_flags, the following statement always
return false:

eob = !!(flags & MHI_EOB);

This is due to the fact that 'enum mhi_flags' starts with index 0 and we
are using direct AND operation to extract each bit. Fix this by using
BIT() macros for defining the flags so that the reset of the code need not
be touched.

Fixes: 189ff97cca53 ("bus: mhi: core: Add support for data transfer")
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
---
 include/linux/mhi.h | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/include/linux/mhi.h b/include/linux/mhi.h
index a4288f4d656f..3e76dc9cba5d 100644
--- a/include/linux/mhi.h
+++ b/include/linux/mhi.h
@@ -53,9 +53,9 @@ enum mhi_callback {
  * @MHI_CHAIN: Linked transfer
  */
 enum mhi_flags {
-	MHI_EOB,
-	MHI_EOT,
-	MHI_CHAIN,
+	MHI_EOB = BIT(0),
+	MHI_EOT = BIT(1),
+	MHI_CHAIN = BIT(2),
 };
 
 /**
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 2/6] bus: mhi: core: Make sure to powerdown if mhi_sync_power_up fails
  2020-04-30 19:05 [PATCH 0/6] MHI fixes for v5.7 Manivannan Sadhasivam
  2020-04-30 19:05 ` [PATCH 1/6] bus: mhi: Fix parsing of mhi_flags Manivannan Sadhasivam
@ 2020-04-30 19:05 ` Manivannan Sadhasivam
  2020-04-30 19:05 ` [PATCH 3/6] bus: mhi: core: Remove link_status() callback Manivannan Sadhasivam
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: Manivannan Sadhasivam @ 2020-04-30 19:05 UTC (permalink / raw)
  To: gregkh; +Cc: hemantk, jhugo, linux-arm-msm, linux-kernel, Manivannan Sadhasivam

From: Jeffrey Hugo <jhugo@codeaurora.org>

Powerdown is necessary if mhi_sync_power_up fails due to a timeout, to
clean up the resources.  Otherwise a BUG could be triggered when
attempting to clean up MSIs because the IRQ is still active from a
request_irq().

Signed-off-by: Jeffrey Hugo <jhugo@codeaurora.org>
Reviewed-by: Hemant Kumar <hemantk@codeaurora.org>
Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
---
 drivers/bus/mhi/core/pm.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/drivers/bus/mhi/core/pm.c b/drivers/bus/mhi/core/pm.c
index 3529419d076b..e7c831867a23 100644
--- a/drivers/bus/mhi/core/pm.c
+++ b/drivers/bus/mhi/core/pm.c
@@ -1045,7 +1045,11 @@ int mhi_sync_power_up(struct mhi_controller *mhi_cntrl)
 			   MHI_PM_IN_ERROR_STATE(mhi_cntrl->pm_state),
 			   msecs_to_jiffies(mhi_cntrl->timeout_ms));
 
-	return (MHI_IN_MISSION_MODE(mhi_cntrl->ee)) ? 0 : -EIO;
+	ret = (MHI_IN_MISSION_MODE(mhi_cntrl->ee)) ? 0 : -ETIMEDOUT;
+	if (ret)
+		mhi_power_down(mhi_cntrl, false);
+
+	return ret;
 }
 EXPORT_SYMBOL(mhi_sync_power_up);
 
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 3/6] bus: mhi: core: Remove link_status() callback
  2020-04-30 19:05 [PATCH 0/6] MHI fixes for v5.7 Manivannan Sadhasivam
  2020-04-30 19:05 ` [PATCH 1/6] bus: mhi: Fix parsing of mhi_flags Manivannan Sadhasivam
  2020-04-30 19:05 ` [PATCH 2/6] bus: mhi: core: Make sure to powerdown if mhi_sync_power_up fails Manivannan Sadhasivam
@ 2020-04-30 19:05 ` Manivannan Sadhasivam
  2020-04-30 19:05 ` [PATCH 4/6] bus: mhi: core: Offload register accesses to the controller Manivannan Sadhasivam
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: Manivannan Sadhasivam @ 2020-04-30 19:05 UTC (permalink / raw)
  To: gregkh; +Cc: hemantk, jhugo, linux-arm-msm, linux-kernel, Manivannan Sadhasivam

From: Jeffrey Hugo <jhugo@codeaurora.org>

If the MHI core detects invalid data due to a PCI read, it calls into
the controller via link_status() to double check that the link is infact
down.  All in all, this is pretty pointless, and racy.  There are no good
reasons for this, and only drawbacks.

Its pointless because chances are, the controller is going to do the same
thing to determine if the link is down - attempt a PCI access and compare
the result.  This does not make the link status decision any smarter.

Its racy because its possible that the link was down at the time of the
MHI core access, but then recovered before the controller access.  In this
case, the controller will indicate the link is not down, and the MHI core
will precede to use a bad value as the MHI core does not attempt to retry
the access.

Retrying the access in the MHI core is a bad idea because again, it is
racy - what if the link is down again?  Furthermore, there may be some
higher level state associated with the link status, that is now invalid
because the link went down.

The only reason why the MHI core could see "invalid" data when doing a PCI
access, that is actually valid, is if the register actually contained the
PCI spec defined sentinel for an invalid access.  In this case, it is
arguable that the MHI implementation broken, and should be fixed, not
worked around.

Therefore, remove the link_status() callback before anyone attempts to
implement it.

Signed-off-by: Jeffrey Hugo <jhugo@codeaurora.org>
Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
Reviewed-by: Hemant Kumar <hemantk@codeaurora.org>
Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
---
 drivers/bus/mhi/core/init.c | 6 ++----
 drivers/bus/mhi/core/main.c | 5 ++---
 include/linux/mhi.h         | 2 --
 3 files changed, 4 insertions(+), 9 deletions(-)

diff --git a/drivers/bus/mhi/core/init.c b/drivers/bus/mhi/core/init.c
index b38359c480ea..2af08d57ec28 100644
--- a/drivers/bus/mhi/core/init.c
+++ b/drivers/bus/mhi/core/init.c
@@ -812,10 +812,8 @@ int mhi_register_controller(struct mhi_controller *mhi_cntrl,
 	if (!mhi_cntrl)
 		return -EINVAL;
 
-	if (!mhi_cntrl->runtime_get || !mhi_cntrl->runtime_put)
-		return -EINVAL;
-
-	if (!mhi_cntrl->status_cb || !mhi_cntrl->link_status)
+	if (!mhi_cntrl->runtime_get || !mhi_cntrl->runtime_put ||
+	    !mhi_cntrl->status_cb)
 		return -EINVAL;
 
 	ret = parse_config(mhi_cntrl, config);
diff --git a/drivers/bus/mhi/core/main.c b/drivers/bus/mhi/core/main.c
index 3e9aa3b2da77..374e3db31ab7 100644
--- a/drivers/bus/mhi/core/main.c
+++ b/drivers/bus/mhi/core/main.c
@@ -20,9 +20,8 @@ int __must_check mhi_read_reg(struct mhi_controller *mhi_cntrl,
 {
 	u32 tmp = readl(base + offset);
 
-	/* If there is any unexpected value, query the link status */
-	if (PCI_INVALID_READ(tmp) &&
-	    mhi_cntrl->link_status(mhi_cntrl))
+	/* If the value is invalid, the link is down */
+	if (PCI_INVALID_READ(tmp))
 		return -EIO;
 
 	*out = tmp;
diff --git a/include/linux/mhi.h b/include/linux/mhi.h
index 3e76dc9cba5d..0794483b9a18 100644
--- a/include/linux/mhi.h
+++ b/include/linux/mhi.h
@@ -335,7 +335,6 @@ struct mhi_controller_config {
  * @syserr_worker: System error worker
  * @state_event: State change event
  * @status_cb: CB function to notify power states of the device (required)
- * @link_status: CB function to query link status of the device (required)
  * @wake_get: CB function to assert device wake (optional)
  * @wake_put: CB function to de-assert device wake (optional)
  * @wake_toggle: CB function to assert and de-assert device wake (optional)
@@ -417,7 +416,6 @@ struct mhi_controller {
 
 	void (*status_cb)(struct mhi_controller *mhi_cntrl,
 			  enum mhi_callback cb);
-	int (*link_status)(struct mhi_controller *mhi_cntrl);
 	void (*wake_get)(struct mhi_controller *mhi_cntrl, bool override);
 	void (*wake_put)(struct mhi_controller *mhi_cntrl, bool override);
 	void (*wake_toggle)(struct mhi_controller *mhi_cntrl);
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 4/6] bus: mhi: core: Offload register accesses to the controller
  2020-04-30 19:05 [PATCH 0/6] MHI fixes for v5.7 Manivannan Sadhasivam
                   ` (2 preceding siblings ...)
  2020-04-30 19:05 ` [PATCH 3/6] bus: mhi: core: Remove link_status() callback Manivannan Sadhasivam
@ 2020-04-30 19:05 ` Manivannan Sadhasivam
  2020-04-30 19:05 ` [PATCH 5/6] bus: mhi: core: Fix typo in comment Manivannan Sadhasivam
  2020-04-30 19:05 ` [PATCH 6/6] bus: mhi: core: Fix channel device name conflict Manivannan Sadhasivam
  5 siblings, 0 replies; 7+ messages in thread
From: Manivannan Sadhasivam @ 2020-04-30 19:05 UTC (permalink / raw)
  To: gregkh; +Cc: hemantk, jhugo, linux-arm-msm, linux-kernel, Manivannan Sadhasivam

From: Jeffrey Hugo <jhugo@codeaurora.org>

When reading or writing MHI registers, the core assumes that the physical
link is a memory mapped PCI link.  This assumption may not hold for all
MHI devices.  The controller knows what is the physical link (ie PCI, I2C,
SPI, etc), and therefore knows the proper methods to access that link.
The controller can also handle link specific error scenarios, such as
reading -1 when the PCI link went down.

Therefore, it is appropriate that the MHI core requests the controller to
make register accesses on behalf of the core, which abstracts the core
from link specifics, and end up removing an unnecessary assumption.

Signed-off-by: Jeffrey Hugo <jhugo@codeaurora.org>
Reviewed-by: Hemant Kumar <hemantk@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     |  3 ++-
 drivers/bus/mhi/core/internal.h |  3 ---
 drivers/bus/mhi/core/main.c     | 12 ++----------
 include/linux/mhi.h             |  6 ++++++
 4 files changed, 10 insertions(+), 14 deletions(-)

diff --git a/drivers/bus/mhi/core/init.c b/drivers/bus/mhi/core/init.c
index 2af08d57ec28..eb2ab058a01d 100644
--- a/drivers/bus/mhi/core/init.c
+++ b/drivers/bus/mhi/core/init.c
@@ -813,7 +813,8 @@ int mhi_register_controller(struct mhi_controller *mhi_cntrl,
 		return -EINVAL;
 
 	if (!mhi_cntrl->runtime_get || !mhi_cntrl->runtime_put ||
-	    !mhi_cntrl->status_cb)
+	    !mhi_cntrl->status_cb || !mhi_cntrl->read_reg ||
+	    !mhi_cntrl->write_reg)
 		return -EINVAL;
 
 	ret = parse_config(mhi_cntrl, config);
diff --git a/drivers/bus/mhi/core/internal.h b/drivers/bus/mhi/core/internal.h
index 5deadfaa053a..095d95bc0e37 100644
--- a/drivers/bus/mhi/core/internal.h
+++ b/drivers/bus/mhi/core/internal.h
@@ -11,9 +11,6 @@
 
 extern struct bus_type mhi_bus_type;
 
-/* MHI MMIO register mapping */
-#define PCI_INVALID_READ(val) (val == U32_MAX)
-
 #define MHIREGLEN (0x0)
 #define MHIREGLEN_MHIREGLEN_MASK (0xFFFFFFFF)
 #define MHIREGLEN_MHIREGLEN_SHIFT (0)
diff --git a/drivers/bus/mhi/core/main.c b/drivers/bus/mhi/core/main.c
index 374e3db31ab7..0cc85753d9d6 100644
--- a/drivers/bus/mhi/core/main.c
+++ b/drivers/bus/mhi/core/main.c
@@ -18,15 +18,7 @@
 int __must_check mhi_read_reg(struct mhi_controller *mhi_cntrl,
 			      void __iomem *base, u32 offset, u32 *out)
 {
-	u32 tmp = readl(base + offset);
-
-	/* If the value is invalid, the link is down */
-	if (PCI_INVALID_READ(tmp))
-		return -EIO;
-
-	*out = tmp;
-
-	return 0;
+	return mhi_cntrl->read_reg(mhi_cntrl, base + offset, out);
 }
 
 int __must_check mhi_read_reg_field(struct mhi_controller *mhi_cntrl,
@@ -48,7 +40,7 @@ int __must_check mhi_read_reg_field(struct mhi_controller *mhi_cntrl,
 void mhi_write_reg(struct mhi_controller *mhi_cntrl, void __iomem *base,
 		   u32 offset, u32 val)
 {
-	writel(val, base + offset);
+	mhi_cntrl->write_reg(mhi_cntrl, base + offset, val);
 }
 
 void mhi_write_reg_field(struct mhi_controller *mhi_cntrl, void __iomem *base,
diff --git a/include/linux/mhi.h b/include/linux/mhi.h
index 0794483b9a18..ab737821ab89 100644
--- a/include/linux/mhi.h
+++ b/include/linux/mhi.h
@@ -342,6 +342,8 @@ struct mhi_controller_config {
  * @runtimet_put: CB function to decrement pm usage (required)
  * @map_single: CB function to create TRE buffer
  * @unmap_single: CB function to destroy TRE buffer
+ * @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
  * @bounce_buf: Use of bounce buffer
  * @fbc_download: MHI host needs to do complete image transfer (optional)
@@ -425,6 +427,10 @@ struct mhi_controller {
 			  struct mhi_buf_info *buf);
 	void (*unmap_single)(struct mhi_controller *mhi_cntrl,
 			     struct mhi_buf_info *buf);
+	int (*read_reg)(struct mhi_controller *mhi_cntrl, void __iomem *addr,
+			u32 *out);
+	void (*write_reg)(struct mhi_controller *mhi_cntrl, void __iomem *addr,
+			  u32 val);
 
 	size_t buffer_len;
 	bool bounce_buf;
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 5/6] bus: mhi: core: Fix typo in comment
  2020-04-30 19:05 [PATCH 0/6] MHI fixes for v5.7 Manivannan Sadhasivam
                   ` (3 preceding siblings ...)
  2020-04-30 19:05 ` [PATCH 4/6] bus: mhi: core: Offload register accesses to the controller Manivannan Sadhasivam
@ 2020-04-30 19:05 ` Manivannan Sadhasivam
  2020-04-30 19:05 ` [PATCH 6/6] bus: mhi: core: Fix channel device name conflict Manivannan Sadhasivam
  5 siblings, 0 replies; 7+ messages in thread
From: Manivannan Sadhasivam @ 2020-04-30 19:05 UTC (permalink / raw)
  To: gregkh; +Cc: hemantk, jhugo, linux-arm-msm, linux-kernel, Manivannan Sadhasivam

From: Jeffrey Hugo <jhugo@codeaurora.org>

There is a typo - "runtimet" should be "runtime".  Fix it.

Signed-off-by: Jeffrey Hugo <jhugo@codeaurora.org>
Reviewed-by: Hemant Kumar <hemantk@codeaurora.org>
Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
---
 include/linux/mhi.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/include/linux/mhi.h b/include/linux/mhi.h
index ab737821ab89..b0739ad1bae4 100644
--- a/include/linux/mhi.h
+++ b/include/linux/mhi.h
@@ -339,7 +339,7 @@ struct mhi_controller_config {
  * @wake_put: CB function to de-assert device wake (optional)
  * @wake_toggle: CB function to assert and de-assert device wake (optional)
  * @runtime_get: CB function to controller runtime resume (required)
- * @runtimet_put: CB function to decrement pm usage (required)
+ * @runtime_put: CB function to decrement pm usage (required)
  * @map_single: CB function to create TRE buffer
  * @unmap_single: CB function to destroy TRE buffer
  * @read_reg: Read a MHI register via the physical link (required)
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 6/6] bus: mhi: core: Fix channel device name conflict
  2020-04-30 19:05 [PATCH 0/6] MHI fixes for v5.7 Manivannan Sadhasivam
                   ` (4 preceding siblings ...)
  2020-04-30 19:05 ` [PATCH 5/6] bus: mhi: core: Fix typo in comment Manivannan Sadhasivam
@ 2020-04-30 19:05 ` Manivannan Sadhasivam
  5 siblings, 0 replies; 7+ messages in thread
From: Manivannan Sadhasivam @ 2020-04-30 19:05 UTC (permalink / raw)
  To: gregkh; +Cc: hemantk, jhugo, linux-arm-msm, linux-kernel, Manivannan Sadhasivam

From: Jeffrey Hugo <jhugo@codeaurora.org>

When multiple instances of the same MHI product are present in a system,
we can see a splat from mhi_create_devices() - "sysfs: cannot create
duplicate filename".

This is because the device names assigned to the MHI channel devices are
non-unique.  They consist of the channel's name, and the channel's pipe
id.  For identical products, each instance is going to have the same
set of channel (both in name and pipe id).

To fix this, we prepend the device name of the parent device that the
MHI channels belong to.  Since different instances of the same product
should have unique device names, this makes the MHI channel devices for
each product also unique.

Additionally, remove the pipe id from the MHI channel device name.  This
is an internal detail to the MHI product that provides little value, and
imposes too much device specific internal details to userspace.  It is
expected that channel with a specific name (ie "SAHARA") has a specific
client, and it does not matter what pipe id that channel is enumerated on.
The pipe id is an internal detail between the MHI bus, and the hardware.
The client is not expected to make decisions based on the pipe id, and to
do so would require the client to have intimate knowledge of the hardware,
which is inappropiate as it may violate the layering provided by the MHI
bus.  The limitation of doing this is that each product may only have one
instance of a channel by a unique name.  This limitation is appropriate
given the usecases of MHI channels.

Signed-off-by: Jeffrey Hugo <jhugo@codeaurora.org>
Reviewed-by: Hemant Kumar <hemantk@codeaurora.org>
Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
---
 drivers/bus/mhi/core/main.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/bus/mhi/core/main.c b/drivers/bus/mhi/core/main.c
index 0cc85753d9d6..a8b5c4846e1c 100644
--- a/drivers/bus/mhi/core/main.c
+++ b/drivers/bus/mhi/core/main.c
@@ -328,7 +328,8 @@ void mhi_create_devices(struct mhi_controller *mhi_cntrl)
 
 		/* Channel name is same for both UL and DL */
 		mhi_dev->chan_name = mhi_chan->name;
-		dev_set_name(&mhi_dev->dev, "%04x_%s", mhi_chan->chan,
+		dev_set_name(&mhi_dev->dev, "%s_%s",
+			     dev_name(mhi_cntrl->cntrl_dev),
 			     mhi_dev->chan_name);
 
 		/* Init wakeup source if available */
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2020-04-30 19:06 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-04-30 19:05 [PATCH 0/6] MHI fixes for v5.7 Manivannan Sadhasivam
2020-04-30 19:05 ` [PATCH 1/6] bus: mhi: Fix parsing of mhi_flags Manivannan Sadhasivam
2020-04-30 19:05 ` [PATCH 2/6] bus: mhi: core: Make sure to powerdown if mhi_sync_power_up fails Manivannan Sadhasivam
2020-04-30 19:05 ` [PATCH 3/6] bus: mhi: core: Remove link_status() callback Manivannan Sadhasivam
2020-04-30 19:05 ` [PATCH 4/6] bus: mhi: core: Offload register accesses to the controller Manivannan Sadhasivam
2020-04-30 19:05 ` [PATCH 5/6] bus: mhi: core: Fix typo in comment Manivannan Sadhasivam
2020-04-30 19:05 ` [PATCH 6/6] bus: mhi: core: Fix channel device name conflict Manivannan Sadhasivam

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.