Re: [PATCH v8 6/6] phy: fsl-imx8mq-usb: keep PHY power domain runtime always-on for i.MX8MP
Frank Li <[email protected]> Fri, 31 Jul 2026 09:44:00 -0500
| Newsgroups | dev.linux.lists.imx,org.infradead.lists.linux-arm-kernel,org.infradead.lists.linux-phy,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <amy0sBg9QT-3v__p@SMW015318> |
On Fri, Jul 31, 2026 at 04:11:24PM +0800, Xu Yang wrote: > From: Xu Yang <[email protected]> > > On i.MX8MP, the USB PHY has a dedicated power domain that was previously > never powered off at runtime. With the introduction of runtime PM support, > the power domain will be powered off if the device is runtime suspended, > which breaks USB wakeup functionality. > > To preserve wakeup functionality, mark the PHY power domain as runtime > always-on for i.MX8MP platform. To limit the behavior to i.MX8MP, add a > need_genpd_rpm_on to imx8mq_usb_phy_drvdata and set it as true for i.MX8MP. > > Signed-off-by: Xu Yang <[email protected]> Reviewed-by: Frank Li <[email protected]> > > --- > Changes in v8: > - no changes > Changes in v7: > - replace dev_err_probe() with dev_warn() > Changes in v6: > - set need_genpd_rpm_on flag for i.MX8MP and call dev_pm_genpd_rpm_always_on() > if the flag is true > Changes in v5: > - no changes > Changes in v4: > - no changes > Changes in v3: > - new patch > --- > drivers/phy/freescale/phy-fsl-imx8mq-usb.c | 9 +++++++++ > 1 file changed, 9 insertions(+) > > diff --git a/drivers/phy/freescale/phy-fsl-imx8mq-usb.c b/drivers/phy/freescale/phy-fsl-imx8mq-usb.c > index ba7603a008d8..8859835541b1 100644 > --- a/drivers/phy/freescale/phy-fsl-imx8mq-usb.c > +++ b/drivers/phy/freescale/phy-fsl-imx8mq-usb.c > @@ -9,6 +9,7 @@ > #include <linux/of.h> > #include <linux/phy/phy.h> > #include <linux/platform_device.h> > +#include <linux/pm_domain.h> > #include <linux/pm_runtime.h> > #include <linux/regulator/consumer.h> > #include <linux/regmap.h> > @@ -134,6 +135,7 @@ struct imx8mq_usb_phy { > > struct imx8mq_usb_phy_drvdata { > const struct phy_ops *ops; > + bool need_genpd_rpm_on; > }; > > static void tca_blk_orientation_set(struct tca_blk *tca, > @@ -669,6 +671,7 @@ static const struct imx8mq_usb_phy_drvdata imx8mq_usb_phy_data = { > > static const struct imx8mq_usb_phy_drvdata imx8mp_usb_phy_data = { > .ops = &imx8mp_usb_phy_ops, > + .need_genpd_rpm_on = true, > }; > > static const struct imx8mq_usb_phy_drvdata imx95_usb_phy_data = { > @@ -738,6 +741,12 @@ static int imx8mq_usb_phy_probe(struct platform_device *pdev) > if (!phy_data) > return -EINVAL; > > + if (phy_data->need_genpd_rpm_on) { > + ret = dev_pm_genpd_rpm_always_on(dev, true); > + if (ret && ret != -EOPNOTSUPP) > + dev_warn(dev, "failed to set genpd rpm always on\n"); > + } > + > pm_runtime_set_active(dev); > pm_runtime_enable(dev); > > > -- > 2.34.1 > >