}
        dwc->revision = reg;
 
+       /* Handle USB2.0-only core configuration */
+       if (DWC3_GHWPARAMS3_SSPHY_IFC(dwc->hwparams.hwparams3) ==
+                       DWC3_GHWPARAMS3_SSPHY_IFC_DIS) {
+               if (dwc->maximum_speed == USB_SPEED_SUPER)
+                       dwc->maximum_speed = USB_SPEED_HIGH;
+       }
+
        /* issue device SoftReset too */
        timeout = jiffies + msecs_to_jiffies(500);
        dwc3_writel(dwc->regs, DWC3_DCTL, DWC3_DCTL_CSFTRST);
 
 #define DWC3_GHWPARAMS1_PWROPT(n)      ((n) << 24)
 #define DWC3_GHWPARAMS1_PWROPT_MASK    DWC3_GHWPARAMS1_PWROPT(3)
 
+/* Global HWPARAMS3 Register */
+#define DWC3_GHWPARAMS3_SSPHY_IFC(n)           ((n) & 3)
+#define DWC3_GHWPARAMS3_SSPHY_IFC_DIS          0
+#define DWC3_GHWPARAMS3_SSPHY_IFC_ENA          1
+#define DWC3_GHWPARAMS3_HSPHY_IFC(n)           (((n) & (3 << 2)) >> 2)
+#define DWC3_GHWPARAMS3_HSPHY_IFC_DIS          0
+#define DWC3_GHWPARAMS3_HSPHY_IFC_UTMI         1
+#define DWC3_GHWPARAMS3_HSPHY_IFC_ULPI         2
+#define DWC3_GHWPARAMS3_HSPHY_IFC_UTMI_ULPI    3
+#define DWC3_GHWPARAMS3_FSPHY_IFC(n)           (((n) & (3 << 4)) >> 4)
+#define DWC3_GHWPARAMS3_FSPHY_IFC_DIS          0
+#define DWC3_GHWPARAMS3_FSPHY_IFC_ENA          1
+
 /* Global HWPARAMS4 Register */
 #define DWC3_GHWPARAMS4_HIBER_SCRATCHBUFS(n)   (((n) & (0x0f << 13)) >> 13)
 #define DWC3_MAX_HIBER_SCRATCHBUFS             15