Revert "bus: mhi: core: Add support for reading MHI info from device"
authorJeffrey Hugo <quic_jhugo@quicinc.com>
Mon, 19 Feb 2024 18:07:48 +0000 (11:07 -0700)
committerManivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
Wed, 21 Feb 2024 05:52:25 +0000 (11:22 +0530)
This reverts commit 3316ab2b45f6bf4797d8d65b22fda3cc13318890.

The MHI spec owner pointed out that the SOC_HW_VERSION register is part
of the BHIe segment, and only valid on devices which implement BHIe.
Only a small subset of MHI devices implement BHIe so blindly accessing
the register for all devices is not correct. Also, since the BHIe
segment offset is not used when accessing the register, any
implementation which moves the BHIe segment will result in accessing
some other register.  We've seen that accessing this register on AIC100
which does not support BHIe can result in initialization failures.

We could try to put checks into the code to address these issues, but in
the roughly 4 years this functionality has existed, no one has used it.
Easier to drop this dead code and address the issues if anyone comes up
with a real world use for it.

Signed-off-by: Jeffrey Hugo <quic_jhugo@quicinc.com>
Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
Link: https://lore.kernel.org/r/20240219180748.1591527-1-quic_jhugo@quicinc.com
Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
drivers/bus/mhi/host/init.c
drivers/bus/mhi/host/internal.h
include/linux/mhi.h

index 944da46..44f9349 100644 (file)
@@ -914,7 +914,6 @@ int mhi_register_controller(struct mhi_controller *mhi_cntrl,
        struct mhi_chan *mhi_chan;
        struct mhi_cmd *mhi_cmd;
        struct mhi_device *mhi_dev;
-       u32 soc_info;
        int ret, i;
 
        if (!mhi_cntrl || !mhi_cntrl->cntrl_dev || !mhi_cntrl->regs ||
@@ -989,17 +988,6 @@ int mhi_register_controller(struct mhi_controller *mhi_cntrl,
                mhi_cntrl->unmap_single = mhi_unmap_single_no_bb;
        }
 
-       /* Read the MHI device info */
-       ret = mhi_read_reg(mhi_cntrl, mhi_cntrl->regs,
-                          SOC_HW_VERSION_OFFS, &soc_info);
-       if (ret)
-               goto err_destroy_wq;
-
-       mhi_cntrl->family_number = FIELD_GET(SOC_HW_VERSION_FAM_NUM_BMSK, soc_info);
-       mhi_cntrl->device_number = FIELD_GET(SOC_HW_VERSION_DEV_NUM_BMSK, soc_info);
-       mhi_cntrl->major_version = FIELD_GET(SOC_HW_VERSION_MAJOR_VER_BMSK, soc_info);
-       mhi_cntrl->minor_version = FIELD_GET(SOC_HW_VERSION_MINOR_VER_BMSK, soc_info);
-
        mhi_cntrl->index = ida_alloc(&mhi_controller_ida, GFP_KERNEL);
        if (mhi_cntrl->index < 0) {
                ret = mhi_cntrl->index;
index 091244c..5fe4931 100644 (file)
@@ -15,12 +15,6 @@ extern struct bus_type mhi_bus_type;
 #define MHI_SOC_RESET_REQ_OFFSET                       0xb0
 #define MHI_SOC_RESET_REQ                              BIT(0)
 
-#define SOC_HW_VERSION_OFFS                            0x224
-#define SOC_HW_VERSION_FAM_NUM_BMSK                    GENMASK(31, 28)
-#define SOC_HW_VERSION_DEV_NUM_BMSK                    GENMASK(27, 16)
-#define SOC_HW_VERSION_MAJOR_VER_BMSK                  GENMASK(15, 8)
-#define SOC_HW_VERSION_MINOR_VER_BMSK                  GENMASK(7, 0)
-
 struct mhi_ctxt {
        struct mhi_event_ctxt *er_ctxt;
        struct mhi_chan_ctxt *chan_ctxt;
index 474d32c..77b8c0a 100644 (file)
@@ -320,10 +320,6 @@ struct mhi_controller_config {
  * @hw_ev_rings: Number of hardware event rings
  * @sw_ev_rings: Number of software event rings
  * @nr_irqs: Number of IRQ allocated by bus master (required)
- * @family_number: MHI controller family number
- * @device_number: MHI controller device number
- * @major_version: MHI controller major revision number
- * @minor_version: MHI controller minor revision number
  * @serial_number: MHI controller serial number obtained from BHI
  * @mhi_event: MHI event ring configurations table
  * @mhi_cmd: MHI command ring configurations table
@@ -368,15 +364,6 @@ struct mhi_controller_config {
  * Fields marked as (required) need to be populated by the controller driver
  * before calling mhi_register_controller(). For the fields marked as (optional)
  * they can be populated depending on the usecase.
- *
- * The following fields are present for the purpose of implementing any device
- * specific quirks or customizations for specific MHI revisions used in device
- * by the controller drivers. The MHI stack will just populate these fields
- * during mhi_register_controller():
- *  family_number
- *  device_number
- *  major_version
- *  minor_version
  */
 struct mhi_controller {
        struct device *cntrl_dev;
@@ -407,10 +394,6 @@ struct mhi_controller {
        u32 hw_ev_rings;
        u32 sw_ev_rings;
        u32 nr_irqs;
-       u32 family_number;
-       u32 device_number;
-       u32 major_version;
-       u32 minor_version;
        u32 serial_number;
 
        struct mhi_event *mhi_event;