summaryrefslogtreecommitdiffstats
path: root/drivers/bus/mhi/core/main.c
diff options
context:
space:
mode:
authorJeffrey Hugo <jhugo@codeaurora.org>2020-05-01 00:35:53 +0530
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2020-05-05 16:58:35 +0200
commit45723a44845c90c8e859fd0e2b0bb492322b5d0b (patch)
treeb9fd0cfdff20f193b82fa010fbb41d70eea0304b /drivers/bus/mhi/core/main.c
parent85a087df4a719ebab940efa3c79625e68161f57b (diff)
downloadlinux-stable-45723a44845c90c8e859fd0e2b0bb492322b5d0b.tar.gz
linux-stable-45723a44845c90c8e859fd0e2b0bb492322b5d0b.tar.bz2
linux-stable-45723a44845c90c8e859fd0e2b0bb492322b5d0b.zip
bus: mhi: core: Offload register accesses to the controller
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> Link: https://lore.kernel.org/r/20200430190555.32741-5-manivannan.sadhasivam@linaro.org Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/bus/mhi/core/main.c')
-rw-r--r--drivers/bus/mhi/core/main.c12
1 files changed, 2 insertions, 10 deletions
diff --git a/drivers/bus/mhi/core/main.c b/drivers/bus/mhi/core/main.c
index f8401535e61a..2aceb69f6ce8 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,