Message ID | 20200825021120.4926-1-peter.chen@nxp.com |
---|---|
Headers | show |
Series | usb: cdns3: add runtime pm support | expand |
B > > > > > Add imx glue layer runtime pm implementation, and the runtime > > > pm is default off. > > > > > > Reviewed-by: Pawel Laszczak <pawell@cadence.com> > > > Signed-off-by: Peter Chen <peter.chen@nxp.com> > > > --- > > > drivers/usb/cdns3/cdns3-imx.c | 203 ++++++++++++++++++++++++++++++++-- > > > 1 file changed, 192 insertions(+), 11 deletions(-) > > > > > > diff --git a/drivers/usb/cdns3/cdns3-imx.c b/drivers/usb/cdns3/cdns3-imx.c > > > index aba988e71958..a413df26e948 100644 > > > --- a/drivers/usb/cdns3/cdns3-imx.c > > > +++ b/drivers/usb/cdns3/cdns3-imx.c > > > @@ -15,6 +15,8 @@ > > > #include <linux/io.h> > > > #include <linux/of_platform.h> > > > #include <linux/iopoll.h> > > > +#include <linux/pm_runtime.h> > > > +#include "core.h" > > > > > > #define USB3_CORE_CTRL1 0x00 > > > #define USB3_CORE_CTRL2 0x04 > > > @@ -32,7 +34,7 @@ > > > /* Register bits definition */ > > > > > > /* USB3_CORE_CTRL1 */ > > > -#define SW_RESET_MASK (0x3f << 26) > > > +#define SW_RESET_MASK GENMASK(31, 26) > > > > why is this part of adding imx runtime pm? > > Sorry, will delete this improvement > > > > > @@ -44,17 +46,17 @@ > > > #define OC_DISABLE BIT(9) > > > #define MDCTRL_CLK_SEL BIT(7) > > > #define MODE_STRAP_MASK (0x7) > > > -#define DEV_MODE (1 << 2) > > > -#define HOST_MODE (1 << 1) > > > -#define OTG_MODE (1 << 0) > > > +#define DEV_MODE BIT(2) > > > +#define HOST_MODE BIT(1) > > > +#define OTG_MODE BIT(0) > > > > and these? > > Sorry, will delete this improvement > > > > > > > > > /* USB3_INT_REG */ > > > #define CLK_125_REQ BIT(29) > > > #define LPM_CLK_REQ BIT(28) > > > #define DEVU3_WAEKUP_EN BIT(14) > > > #define OTG_WAKEUP_EN BIT(12) > > > -#define DEV_INT_EN (3 << 8) /* DEV INT b9:8 */ > > > -#define HOST_INT1_EN (1 << 0) /* HOST INT b7:0 */ > > > +#define DEV_INT_EN GENMASK(9, 8) /* DEV INT b9:8 */ > > > +#define HOST_INT1_EN BIT(0) /* HOST INT b7:0 */ > > > Sorry, will delete this improvement > > > > > > @@ -62,15 +64,34 @@ > > > #define HOST_POWER_ON_READY BIT(12) > > > > > > /* USB3_SSPHY_STATUS */ > > > -#define CLK_VALID_MASK (0x3f << 26) > > > -#define CLK_VALID_COMPARE_BITS (0xf << 28) > > > -#define PHY_REFCLK_REQ (1 << 0) > > > +#define CLK_VALID_MASK GENMASK(31, 26) > > > +#define CLK_VALID_COMPARE_BITS GENMASK(31, 28) > > > +#define PHY_REFCLK_REQ BIT(0) > > > > Sorry, will delete this improvement > > > > > > +/* OTG registers definition */ > > > +#define OTGSTS 0x4 > > > +/* OTGSTS */ > > > +#define OTG_NRDY BIT(11) > > > + > > > +/* xHCI registers definition */ > > > +#define XECP_PM_PMCSR 0x8018 > > > +#define XECP_AUX_CTRL_REG1 0x8120 > > > + > > > +/* Register bits definition */ > > > +/* XECP_AUX_CTRL_REG1 */ > > > +#define CFG_RXDET_P3_EN BIT(15) > > > + > > > +/* XECP_PM_PMCSR */ > > > +#define PS_MASK GENMASK(1, 0) > > > +#define PS_D0 0 > > > +#define PS_D1 1 > > > > I think only these are part of $subject > > Yes, you are right. > > > > > > struct cdns_imx { > > > struct device *dev; > > > void __iomem *noncore; > > > struct clk_bulk_data *clks; > > > int num_clks; > > > + struct platform_device *cdns3_pdev; > > > }; > > > > > > static inline u32 cdns_imx_readl(struct cdns_imx *data, u32 offset) > > > @@ -126,6 +147,20 @@ static int cdns_imx_noncore_init(struct cdns_imx *data) > > > return ret; > > > } > > > > > > +static int cdns_imx_platform_suspend(struct device *dev, > > > + bool suspend, bool wakeup); > > > +static struct cdns3_platform_data cdns_imx_pdata = { > > > > make it const? > > Will change After thinking more, the platform data may be different for different glue layer platforms. I will keep this unchanging. Peter