]> git.karo-electronics.de Git - linux-beck.git/commitdiff
usb: dwc3: core: introduce dwc3_core_is_valid()
authorFelipe Balbi <felipe.balbi@linux.intel.com>
Fri, 14 Oct 2016 13:19:01 +0000 (16:19 +0300)
committerFelipe Balbi <felipe.balbi@linux.intel.com>
Thu, 3 Nov 2016 08:38:34 +0000 (10:38 +0200)
This little helper will be used to make sure we're
dealing with a valid Synopsys DWC3 or DWC3.1 core.

Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
drivers/usb/dwc3/core.c

index fe1ecae7308622d624758e8288ac74e0b12ca15b..3e9515073e0528f12a8ebf40f506332ad4aca462 100644 (file)
@@ -594,19 +594,12 @@ static void dwc3_core_exit(struct dwc3 *dwc)
        phy_power_off(dwc->usb3_generic_phy);
 }
 
-/**
- * dwc3_core_init - Low-level initialization of DWC3 Core
- * @dwc: Pointer to our controller context structure
- *
- * Returns 0 on success otherwise negative errno.
- */
-static int dwc3_core_init(struct dwc3 *dwc)
+static bool dwc3_core_is_valid(struct dwc3 *dwc)
 {
-       u32                     hwparams4 = dwc->hwparams.hwparams4;
-       u32                     reg;
-       int                     ret;
+       u32 reg;
 
        reg = dwc3_readl(dwc->regs, DWC3_GSNPSID);
+
        /* This should read as U3 followed by revision number */
        if ((reg & DWC3_GSNPSID_MASK) == 0x55330000) {
                /* Detected DWC_usb3 IP */
@@ -616,6 +609,25 @@ static int dwc3_core_init(struct dwc3 *dwc)
                dwc->revision = dwc3_readl(dwc->regs, DWC3_VER_NUMBER);
                dwc->revision |= DWC3_REVISION_IS_DWC31;
        } else {
+               return false;
+       }
+
+       return true;
+}
+
+/**
+ * dwc3_core_init - Low-level initialization of DWC3 Core
+ * @dwc: Pointer to our controller context structure
+ *
+ * Returns 0 on success otherwise negative errno.
+ */
+static int dwc3_core_init(struct dwc3 *dwc)
+{
+       u32                     hwparams4 = dwc->hwparams.hwparams4;
+       u32                     reg;
+       int                     ret;
+
+       if (!dwc3_core_is_valid(dwc)) {
                dev_err(dwc->dev, "this is not a DesignWare USB3 DRD Core\n");
                ret = -ENODEV;
                goto err0;