1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- From 0d4749abb6f7d042643ba1aa27a7388e8290b6f5 Mon Sep 17 00:00:00 2001
- From: Li Jun <[email protected]>
- Date: Tue, 16 Apr 2019 14:02:38 +0800
- Subject: [PATCH] usb: dwc3: use suspend clock from dt to set power down scale
- Since the new dwc3 use bulk clks including the suspend clk, so we can
- use it to calculate the power down scale value.
- Acked-by: Peter Chen <[email protected]>
- Signed-off-by: Li Jun <[email protected]>
- ---
- drivers/usb/dwc3/core.c | 21 +++++++++++++++++++++
- drivers/usb/dwc3/core.h | 1 +
- 2 files changed, 22 insertions(+)
- --- a/drivers/usb/dwc3/core.c
- +++ b/drivers/usb/dwc3/core.c
- @@ -900,6 +900,25 @@ static void dwc3_set_incr_burst_type(str
- dwc3_writel(dwc->regs, DWC3_GSBUSCFG0, cfg);
- }
-
- +static void dwc3_set_power_down_clk_scale(struct dwc3 *dwc)
- +{
- + u32 reg, scale;
- +
- + if (dwc->num_clks == 0)
- + return;
- +
- + /*
- + * The power down scale field specifies how many suspend_clk
- + * periods fit into a 16KHz clock period. When performing
- + * the division, round up the remainder.
- + */
- + scale = DIV_ROUND_UP(clk_get_rate(dwc->clks[2].clk), 16384);
- + reg = dwc3_readl(dwc->regs, DWC3_GCTL);
- + reg &= ~(DWC3_GCTL_PWRDNSCALE_MASK);
- + reg |= DWC3_GCTL_PWRDNSCALE(scale);
- + dwc3_writel(dwc->regs, DWC3_GCTL, reg);
- +}
- +
- /**
- * dwc3_core_init - Low-level initialization of DWC3 Core
- * @dwc: Pointer to our controller context structure
- @@ -924,6 +943,8 @@ static int dwc3_core_init(struct dwc3 *d
- dwc->maximum_speed = USB_SPEED_HIGH;
- }
-
- + dwc3_set_power_down_clk_scale(dwc);
- +
- ret = dwc3_phy_setup(dwc);
- if (ret)
- goto err0;
- --- a/drivers/usb/dwc3/core.h
- +++ b/drivers/usb/dwc3/core.h
- @@ -224,6 +224,7 @@
-
- /* Global Configuration Register */
- #define DWC3_GCTL_PWRDNSCALE(n) ((n) << 19)
- +#define DWC3_GCTL_PWRDNSCALE_MASK DWC3_GCTL_PWRDNSCALE(0x1fff)
- #define DWC3_GCTL_U2RSTECN BIT(16)
- #define DWC3_GCTL_RAMCLKSEL(x) (((x) & DWC3_GCTL_CLK_MASK) << 6)
- #define DWC3_GCTL_CLK_BUS (0)
|