usb: dwc3: core: introduce dwc3_core_is_valid()
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>
This commit is contained in:
parent
0bb39ca1ad
commit
0759956f8a
|
@ -594,6 +594,27 @@ static void dwc3_core_exit(struct dwc3 *dwc)
|
||||||
phy_power_off(dwc->usb3_generic_phy);
|
phy_power_off(dwc->usb3_generic_phy);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool dwc3_core_is_valid(struct dwc3 *dwc)
|
||||||
|
{
|
||||||
|
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 */
|
||||||
|
dwc->revision = reg;
|
||||||
|
} else if ((reg & DWC3_GSNPSID_MASK) == 0x33310000) {
|
||||||
|
/* Detected DWC_usb31 IP */
|
||||||
|
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
|
* dwc3_core_init - Low-level initialization of DWC3 Core
|
||||||
* @dwc: Pointer to our controller context structure
|
* @dwc: Pointer to our controller context structure
|
||||||
|
@ -606,16 +627,7 @@ static int dwc3_core_init(struct dwc3 *dwc)
|
||||||
u32 reg;
|
u32 reg;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
reg = dwc3_readl(dwc->regs, DWC3_GSNPSID);
|
if (!dwc3_core_is_valid(dwc)) {
|
||||||
/* This should read as U3 followed by revision number */
|
|
||||||
if ((reg & DWC3_GSNPSID_MASK) == 0x55330000) {
|
|
||||||
/* Detected DWC_usb3 IP */
|
|
||||||
dwc->revision = reg;
|
|
||||||
} else if ((reg & DWC3_GSNPSID_MASK) == 0x33310000) {
|
|
||||||
/* Detected DWC_usb31 IP */
|
|
||||||
dwc->revision = dwc3_readl(dwc->regs, DWC3_VER_NUMBER);
|
|
||||||
dwc->revision |= DWC3_REVISION_IS_DWC31;
|
|
||||||
} else {
|
|
||||||
dev_err(dwc->dev, "this is not a DesignWare USB3 DRD Core\n");
|
dev_err(dwc->dev, "this is not a DesignWare USB3 DRD Core\n");
|
||||||
ret = -ENODEV;
|
ret = -ENODEV;
|
||||||
goto err0;
|
goto err0;
|
||||||
|
|
Loading…
Reference in a new issue