OSDN Git Service

usb: dwc2: Remove version check in GSNPSID
authorGevorg Sahakyan <sahakyan@synopsys.com>
Tue, 16 Jan 2018 12:21:46 +0000 (16:21 +0400)
committerFelipe Balbi <felipe.balbi@linux.intel.com>
Tue, 13 Mar 2018 08:47:39 +0000 (10:47 +0200)
Only check the ID portion of the GSNPSID register and don’t check
the version. This will allow the driver to work with version 4.00a
and later of the DWC_hsotg IP.

Acked-by: John Youn <johnyoun@synopsys.com>
Signed-off-by: Gevorg Sahakyan <sahakyan@synopsys.com>
Signed-off-by: Minas Harutyunyan <hminas@synopsys.com>
Signed-off-by: Grigor Tovmasyan <tovmasya@synopsys.com>
Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
drivers/usb/dwc2/core.h
drivers/usb/dwc2/hw.h
drivers/usb/dwc2/params.c

index 8f77034..679a2e0 100644 (file)
@@ -956,6 +956,11 @@ struct dwc2_hsotg {
 #define DWC2_FS_IOT_REV_1_00a  0x5531100a
 #define DWC2_HS_IOT_REV_1_00a  0x5532100a
 
+       /* DWC OTG HW Core ID */
+#define DWC2_OTG_ID            0x4f540000
+#define DWC2_FS_IOT_ID         0x55310000
+#define DWC2_HS_IOT_ID         0x55320000
+
 #if IS_ENABLED(CONFIG_USB_DWC2_HOST) || IS_ENABLED(CONFIG_USB_DWC2_DUAL_ROLE)
        union dwc2_hcd_internal_flags {
                u32 d32;
index 2c906d8..43a3fb0 100644 (file)
 #define GUID                           HSOTG_REG(0x003c)
 #define GSNPSID                                HSOTG_REG(0x0040)
 #define GHWCFG1                                HSOTG_REG(0x0044)
+#define GSNPSID_ID_MASK                        GENMASK(31, 16)
 
 #define GHWCFG2                                HSOTG_REG(0x0048)
 #define GHWCFG2_OTG_ENABLE_IC_USB              BIT(31)
index 03fd20f..82f5846 100644 (file)
@@ -646,14 +646,13 @@ int dwc2_get_hwparams(struct dwc2_hsotg *hsotg)
        /*
         * Attempt to ensure this device is really a DWC_otg Controller.
         * Read and verify the GSNPSID register contents. The value should be
-        * 0x45f42xxx or 0x45f43xxx, which corresponds to either "OT2" or "OT3",
-        * as in "OTG version 2.xx" or "OTG version 3.xx".
+        * 0x45f4xxxx, 0x5531xxxx or 0x5532xxxx
         */
+
        hw->snpsid = dwc2_readl(hsotg->regs + GSNPSID);
-       if ((hw->snpsid & 0xfffff000) != 0x4f542000 &&
-           (hw->snpsid & 0xfffff000) != 0x4f543000 &&
-           (hw->snpsid & 0xffff0000) != 0x55310000 &&
-           (hw->snpsid & 0xffff0000) != 0x55320000) {
+       if ((hw->snpsid & GSNPSID_ID_MASK) != DWC2_OTG_ID &&
+           (hw->snpsid & GSNPSID_ID_MASK) != DWC2_FS_IOT_ID &&
+           (hw->snpsid & GSNPSID_ID_MASK) != DWC2_HS_IOT_ID) {
                dev_err(hsotg->dev, "Bad value for GSNPSID: 0x%08x\n",
                        hw->snpsid);
                return -ENODEV;