On Sat, Sep 26, 2015 at 12:31:08AM -0700, John Youn wrote: > Add a quirk to clear the GUSB2PHYCFG.ENBLSLPM bit, which controls > whether the PHY receives the suspend signal from the controller. > > Certain Synopsys prototyping PHY boards are not able to meet timings > constraints for LPM. This allows the PHY to meet those timings by > leaving the PHY clock running during suspend. > > Cc: <stable@xxxxxxxxxxxxxxx> # v3.18+ > Signed-off-by: John Youn <johnyoun@xxxxxxxxxxxx> let's split this patch up. First we add the flag, and on a separate patch you use it in dwc3-pci.c > --- > Documentation/devicetree/bindings/usb/dwc3.txt | 2 ++ > drivers/usb/dwc3/core.c | 6 ++++++ > drivers/usb/dwc3/core.h | 4 ++++ > drivers/usb/dwc3/dwc3-pci.c | 1 + > drivers/usb/dwc3/platform_data.h | 1 + > 5 files changed, 14 insertions(+) > > diff --git a/Documentation/devicetree/bindings/usb/dwc3.txt b/Documentation/devicetree/bindings/usb/dwc3.txt > index 8c7d585..9ff48e0 100644 > --- a/Documentation/devicetree/bindings/usb/dwc3.txt > +++ b/Documentation/devicetree/bindings/usb/dwc3.txt > @@ -35,6 +35,8 @@ Optional properties: > LTSSM during USB3 Compliance mode. > - snps,dis_u3_susphy_quirk: when set core will disable USB3 suspend phy. > - snps,dis_u2_susphy_quirk: when set core will disable USB2 suspend phy. > + - snps,dis_enblslpm_quirk: when set clears the enblslpm in GUSB2PHYCFG, > + disabling the suspend signal to the PHY. > - snps,is-utmi-l1-suspend: true when DWC3 asserts output signal > utmi_l1_suspend_n, false when asserts utmi_sleep_n > - snps,hird-threshold: HIRD threshold > diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c > index 566cca1..ca19027 100644 > --- a/drivers/usb/dwc3/core.c > +++ b/drivers/usb/dwc3/core.c > @@ -515,6 +515,9 @@ static int dwc3_phy_setup(struct dwc3 *dwc) > if (dwc->dis_u2_susphy_quirk) > reg &= ~DWC3_GUSB2PHYCFG_SUSPHY; > > + if (dwc->dis_enblslpm_quirk) > + reg &= ~DWC3_GUSB2PHYCFG_ENBLSLPM; > + > dwc3_writel(dwc->regs, DWC3_GUSB2PHYCFG(0), reg); > > return 0; > @@ -911,6 +914,8 @@ static int dwc3_probe(struct platform_device *pdev) > "snps,dis_u3_susphy_quirk"); > dwc->dis_u2_susphy_quirk = device_property_read_bool(dev, > "snps,dis_u2_susphy_quirk"); > + dwc->dis_enblslpm_quirk = device_property_read_bool(dev, > + "snps,dis_enblslpm_quirk"); > > dwc->tx_de_emphasis_quirk = device_property_read_bool(dev, > "snps,tx_de_emphasis_quirk"); > @@ -944,6 +949,7 @@ static int dwc3_probe(struct platform_device *pdev) > dwc->rx_detect_poll_quirk = pdata->rx_detect_poll_quirk; > dwc->dis_u3_susphy_quirk = pdata->dis_u3_susphy_quirk; > dwc->dis_u2_susphy_quirk = pdata->dis_u2_susphy_quirk; > + dwc->dis_enblslpm_quirk = pdata->dis_enblslpm_quirk; > > dwc->tx_de_emphasis_quirk = pdata->tx_de_emphasis_quirk; > if (pdata->tx_de_emphasis) > diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h > index 7446467..a87ef34 100644 > --- a/drivers/usb/dwc3/core.h > +++ b/drivers/usb/dwc3/core.h > @@ -179,6 +179,7 @@ > #define DWC3_GUSB2PHYCFG_PHYSOFTRST (1 << 31) > #define DWC3_GUSB2PHYCFG_SUSPHY (1 << 6) > #define DWC3_GUSB2PHYCFG_ULPI_UTMI (1 << 4) > +#define DWC3_GUSB2PHYCFG_ENBLSLPM (1 << 8) > > /* Global USB2 PHY Vendor Control Register */ > #define DWC3_GUSB2PHYACC_NEWREGREQ (1 << 25) > @@ -721,6 +722,8 @@ struct dwc3_scratchpad_array { > * @rx_detect_poll_quirk: set if we enable rx_detect to polling lfps quirk > * @dis_u3_susphy_quirk: set if we disable usb3 suspend phy > * @dis_u2_susphy_quirk: set if we disable usb2 suspend phy > + * @dis_enblslpm_quirk: set if we clear enblslpm in GUSB2PHYCFG, > + * disabling the suspend signal to the PHY. > * @tx_de_emphasis_quirk: set if we enable Tx de-emphasis quirk > * @tx_de_emphasis: Tx de-emphasis value > * 0 - -6dB de-emphasis > @@ -862,6 +865,7 @@ struct dwc3 { > unsigned rx_detect_poll_quirk:1; > unsigned dis_u3_susphy_quirk:1; > unsigned dis_u2_susphy_quirk:1; > + unsigned dis_enblslpm_quirk:1; > > unsigned tx_de_emphasis_quirk:1; > unsigned tx_de_emphasis:2; > diff --git a/drivers/usb/dwc3/dwc3-pci.c b/drivers/usb/dwc3/dwc3-pci.c > index 4479a41..b34bd79 100644 > --- a/drivers/usb/dwc3/dwc3-pci.c > +++ b/drivers/usb/dwc3/dwc3-pci.c > @@ -118,6 +118,7 @@ static int dwc3_pci_quirks(struct pci_dev *pdev) > memset(&pdata, 0, sizeof(pdata)); > pdata.usb3_lpm_capable = true; > pdata.has_lpm_erratum = true; > + pdata.dis_enblslpm_quirk = true; > > return platform_device_add_data(pci_get_drvdata(pdev), &pdata, > sizeof(pdata)); > diff --git a/drivers/usb/dwc3/platform_data.h b/drivers/usb/dwc3/platform_data.h > index 400b197..2bb4d3a 100644 > --- a/drivers/usb/dwc3/platform_data.h > +++ b/drivers/usb/dwc3/platform_data.h > @@ -42,6 +42,7 @@ struct dwc3_platform_data { > unsigned rx_detect_poll_quirk:1; > unsigned dis_u3_susphy_quirk:1; > unsigned dis_u2_susphy_quirk:1; > + unsigned dis_enblslpm_quirk:1; > > unsigned tx_de_emphasis_quirk:1; > unsigned tx_de_emphasis:2; > -- > 2.5.0.GIT > -- balbi
Attachment:
signature.asc
Description: PGP signature