From: Peter Chen <peter.chen@kernel.org>
To: Xu Yang <xu.yang_2@nxp.com>
Cc: vkoul@kernel.org, kishon@kernel.org, robh@kernel.org,
krzk+dt@kernel.org, conor+dt@kernel.org, shawnguo@kernel.org,
s.hauer@pengutronix.de, kernel@pengutronix.de,
festevam@gmail.com, gregkh@linuxfoundation.org,
herve.codina@bootlin.com, linux-phy@lists.infradead.org,
devicetree@vger.kernel.org, imx@lists.linux.dev,
linux-arm-kernel@lists.infradead.org, linux-usb@vger.kernel.org,
jun.li@nxp.com
Subject: Re: [PATCH v2 5/6] usb: phy: mxs: enable weak 1p1 regulator for imx6ul during suspend
Date: Fri, 9 Aug 2024 09:33:25 +0800 [thread overview]
Message-ID: <20240809013325.GD2673490@nchen-desktop> (raw)
In-Reply-To: <20240726113207.3393247-5-xu.yang_2@nxp.com>
On 24-07-26 19:32:06, Xu Yang wrote:
> 1p1 is off when the system enters suspend at i.MX6UL. It cause the PHY
> get wrong USB DP/DM value, then unexpected wakeup may occur if USB wakeup
> enabled. This will enable weak 1p1 during PHY suspend if vbus exist. So
> USB DP/DM is correct when system suspend.
>
> Signed-off-by: Xu Yang <xu.yang_2@nxp.com>
>
> ---
> Changes in v2:
> - modify commit message
> ---
> drivers/usb/phy/phy-mxs-usb.c | 32 ++++++++++++++++++++++++++++----
> 1 file changed, 28 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/usb/phy/phy-mxs-usb.c b/drivers/usb/phy/phy-mxs-usb.c
> index acaae22df3ba..cc4156c1b148 100644
> --- a/drivers/usb/phy/phy-mxs-usb.c
> +++ b/drivers/usb/phy/phy-mxs-usb.c
> @@ -71,6 +71,9 @@
> #define BM_USBPHY_PLL_EN_USB_CLKS BIT(6)
>
> /* Anatop Registers */
> +#define ANADIG_REG_1P1_SET 0x114
> +#define ANADIG_REG_1P1_CLR 0x118
> +
> #define ANADIG_ANA_MISC0 0x150
> #define ANADIG_ANA_MISC0_SET 0x154
> #define ANADIG_ANA_MISC0_CLR 0x158
> @@ -123,6 +126,9 @@
>
> #define USB_PHY_VLLS_WAKEUP_EN BIT(0)
>
> +#define BM_ANADIG_REG_1P1_ENABLE_WEAK_LINREG BIT(18)
> +#define BM_ANADIG_REG_1P1_TRACK_VDD_SOC_CAP BIT(19)
> +
> #define to_mxs_phy(p) container_of((p), struct mxs_phy, phy)
>
> /* Do disconnection between PHY and controller without vbus */
> @@ -196,7 +202,8 @@ static const struct mxs_phy_data imx6sx_phy_data = {
> };
>
> static const struct mxs_phy_data imx6ul_phy_data = {
> - .flags = MXS_PHY_DISCONNECT_LINE_WITHOUT_VBUS,
> + .flags = MXS_PHY_DISCONNECT_LINE_WITHOUT_VBUS |
> + MXS_PHY_HARDWARE_CONTROL_PHY2_CLK,
> };
>
> static const struct mxs_phy_data imx7ulp_phy_data = {
> @@ -241,6 +248,11 @@ static inline bool is_imx7ulp_phy(struct mxs_phy *mxs_phy)
> return mxs_phy->data == &imx7ulp_phy_data;
> }
>
> +static inline bool is_imx6ul_phy(struct mxs_phy *mxs_phy)
> +{
> + return mxs_phy->data == &imx6ul_phy_data;
> +}
> +
> /*
> * PHY needs some 32K cycles to switch from 32K clock to
> * bus (such as AHB/AXI, etc) clock.
> @@ -884,18 +896,30 @@ static void mxs_phy_wakeup_enable(struct mxs_phy *mxs_phy, bool on)
>
> static void mxs_phy_enable_ldo_in_suspend(struct mxs_phy *mxs_phy, bool on)
> {
> - unsigned int reg = on ? ANADIG_ANA_MISC0_SET : ANADIG_ANA_MISC0_CLR;
> + unsigned int reg;
> + u32 value;
>
> /* If the SoCs don't have anatop, quit */
> if (!mxs_phy->regmap_anatop)
> return;
>
> - if (is_imx6q_phy(mxs_phy))
> + if (is_imx6q_phy(mxs_phy)) {
> + reg = on ? ANADIG_ANA_MISC0_SET : ANADIG_ANA_MISC0_CLR;
> regmap_write(mxs_phy->regmap_anatop, reg,
> BM_ANADIG_ANA_MISC0_STOP_MODE_CONFIG);
> - else if (is_imx6sl_phy(mxs_phy))
> + } else if (is_imx6sl_phy(mxs_phy)) {
> + reg = on ? ANADIG_ANA_MISC0_SET : ANADIG_ANA_MISC0_CLR;
> regmap_write(mxs_phy->regmap_anatop,
> reg, BM_ANADIG_ANA_MISC0_STOP_MODE_CONFIG_SL);
> + } else if (is_imx6ul_phy(mxs_phy)) {
> + reg = on ? ANADIG_REG_1P1_SET : ANADIG_REG_1P1_CLR;
> + value = BM_ANADIG_REG_1P1_ENABLE_WEAK_LINREG |
> + BM_ANADIG_REG_1P1_TRACK_VDD_SOC_CAP;
> + if (mxs_phy_get_vbus_status(mxs_phy) && on)
> + regmap_write(mxs_phy->regmap_anatop, reg, value);
> + else if (!on)
> + regmap_write(mxs_phy->regmap_anatop, reg, value);
Please check if vbus is not there but wakeup is enabled, and see the
behaviour is expected or not.
Peter
> + }
> }
>
> static int mxs_phy_system_suspend(struct device *dev)
> --
> 2.34.1
>
WARNING: multiple messages have this Message-ID (diff)
From: Peter Chen <peter.chen@kernel.org>
To: Xu Yang <xu.yang_2@nxp.com>
Cc: vkoul@kernel.org, kishon@kernel.org, robh@kernel.org,
krzk+dt@kernel.org, conor+dt@kernel.org, shawnguo@kernel.org,
s.hauer@pengutronix.de, kernel@pengutronix.de,
festevam@gmail.com, gregkh@linuxfoundation.org,
herve.codina@bootlin.com, linux-phy@lists.infradead.org,
devicetree@vger.kernel.org, imx@lists.linux.dev,
linux-arm-kernel@lists.infradead.org, linux-usb@vger.kernel.org,
jun.li@nxp.com
Subject: Re: [PATCH v2 5/6] usb: phy: mxs: enable weak 1p1 regulator for imx6ul during suspend
Date: Fri, 9 Aug 2024 09:33:25 +0800 [thread overview]
Message-ID: <20240809013325.GD2673490@nchen-desktop> (raw)
In-Reply-To: <20240726113207.3393247-5-xu.yang_2@nxp.com>
On 24-07-26 19:32:06, Xu Yang wrote:
> 1p1 is off when the system enters suspend at i.MX6UL. It cause the PHY
> get wrong USB DP/DM value, then unexpected wakeup may occur if USB wakeup
> enabled. This will enable weak 1p1 during PHY suspend if vbus exist. So
> USB DP/DM is correct when system suspend.
>
> Signed-off-by: Xu Yang <xu.yang_2@nxp.com>
>
> ---
> Changes in v2:
> - modify commit message
> ---
> drivers/usb/phy/phy-mxs-usb.c | 32 ++++++++++++++++++++++++++++----
> 1 file changed, 28 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/usb/phy/phy-mxs-usb.c b/drivers/usb/phy/phy-mxs-usb.c
> index acaae22df3ba..cc4156c1b148 100644
> --- a/drivers/usb/phy/phy-mxs-usb.c
> +++ b/drivers/usb/phy/phy-mxs-usb.c
> @@ -71,6 +71,9 @@
> #define BM_USBPHY_PLL_EN_USB_CLKS BIT(6)
>
> /* Anatop Registers */
> +#define ANADIG_REG_1P1_SET 0x114
> +#define ANADIG_REG_1P1_CLR 0x118
> +
> #define ANADIG_ANA_MISC0 0x150
> #define ANADIG_ANA_MISC0_SET 0x154
> #define ANADIG_ANA_MISC0_CLR 0x158
> @@ -123,6 +126,9 @@
>
> #define USB_PHY_VLLS_WAKEUP_EN BIT(0)
>
> +#define BM_ANADIG_REG_1P1_ENABLE_WEAK_LINREG BIT(18)
> +#define BM_ANADIG_REG_1P1_TRACK_VDD_SOC_CAP BIT(19)
> +
> #define to_mxs_phy(p) container_of((p), struct mxs_phy, phy)
>
> /* Do disconnection between PHY and controller without vbus */
> @@ -196,7 +202,8 @@ static const struct mxs_phy_data imx6sx_phy_data = {
> };
>
> static const struct mxs_phy_data imx6ul_phy_data = {
> - .flags = MXS_PHY_DISCONNECT_LINE_WITHOUT_VBUS,
> + .flags = MXS_PHY_DISCONNECT_LINE_WITHOUT_VBUS |
> + MXS_PHY_HARDWARE_CONTROL_PHY2_CLK,
> };
>
> static const struct mxs_phy_data imx7ulp_phy_data = {
> @@ -241,6 +248,11 @@ static inline bool is_imx7ulp_phy(struct mxs_phy *mxs_phy)
> return mxs_phy->data == &imx7ulp_phy_data;
> }
>
> +static inline bool is_imx6ul_phy(struct mxs_phy *mxs_phy)
> +{
> + return mxs_phy->data == &imx6ul_phy_data;
> +}
> +
> /*
> * PHY needs some 32K cycles to switch from 32K clock to
> * bus (such as AHB/AXI, etc) clock.
> @@ -884,18 +896,30 @@ static void mxs_phy_wakeup_enable(struct mxs_phy *mxs_phy, bool on)
>
> static void mxs_phy_enable_ldo_in_suspend(struct mxs_phy *mxs_phy, bool on)
> {
> - unsigned int reg = on ? ANADIG_ANA_MISC0_SET : ANADIG_ANA_MISC0_CLR;
> + unsigned int reg;
> + u32 value;
>
> /* If the SoCs don't have anatop, quit */
> if (!mxs_phy->regmap_anatop)
> return;
>
> - if (is_imx6q_phy(mxs_phy))
> + if (is_imx6q_phy(mxs_phy)) {
> + reg = on ? ANADIG_ANA_MISC0_SET : ANADIG_ANA_MISC0_CLR;
> regmap_write(mxs_phy->regmap_anatop, reg,
> BM_ANADIG_ANA_MISC0_STOP_MODE_CONFIG);
> - else if (is_imx6sl_phy(mxs_phy))
> + } else if (is_imx6sl_phy(mxs_phy)) {
> + reg = on ? ANADIG_ANA_MISC0_SET : ANADIG_ANA_MISC0_CLR;
> regmap_write(mxs_phy->regmap_anatop,
> reg, BM_ANADIG_ANA_MISC0_STOP_MODE_CONFIG_SL);
> + } else if (is_imx6ul_phy(mxs_phy)) {
> + reg = on ? ANADIG_REG_1P1_SET : ANADIG_REG_1P1_CLR;
> + value = BM_ANADIG_REG_1P1_ENABLE_WEAK_LINREG |
> + BM_ANADIG_REG_1P1_TRACK_VDD_SOC_CAP;
> + if (mxs_phy_get_vbus_status(mxs_phy) && on)
> + regmap_write(mxs_phy->regmap_anatop, reg, value);
> + else if (!on)
> + regmap_write(mxs_phy->regmap_anatop, reg, value);
Please check if vbus is not there but wakeup is enabled, and see the
behaviour is expected or not.
Peter
> + }
> }
>
> static int mxs_phy_system_suspend(struct device *dev)
> --
> 2.34.1
>
--
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy
next prev parent reply other threads:[~2024-08-09 1:33 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-07-26 11:32 [PATCH v2 1/6] usb: phy: mxs: enable regulator phy-3p0 to improve signal qualilty Xu Yang
2024-07-26 11:32 ` Xu Yang
2024-07-26 11:32 ` [PATCH v2 2/6] usb: phy: mxs: keep USBPHY2's clk always on Xu Yang
2024-07-26 11:32 ` Xu Yang
2024-08-09 1:36 ` Peter Chen
2024-08-09 1:36 ` Peter Chen
2024-07-26 11:32 ` [PATCH v2 3/6] dt-bindings: phy: mxs-usb-phy: add nxp,sim property Xu Yang
2024-07-26 11:32 ` Xu Yang
2024-07-29 1:03 ` Peng Fan
2024-07-29 1:03 ` Peng Fan
2024-07-29 6:16 ` Krzysztof Kozlowski
2024-07-29 6:16 ` Krzysztof Kozlowski
2024-07-29 6:26 ` Peng Fan
2024-07-29 6:26 ` Peng Fan
2024-08-22 10:42 ` Xu Yang
2024-08-22 10:42 ` Xu Yang
2024-08-22 11:41 ` Krzysztof Kozlowski
2024-08-22 11:41 ` Krzysztof Kozlowski
2024-08-29 9:09 ` Xu Yang
2024-08-29 9:09 ` Xu Yang
2024-09-03 7:08 ` Greg KH
2024-09-03 7:08 ` Greg KH
2024-09-03 7:35 ` Xu Yang
2024-09-03 7:35 ` Xu Yang
2024-07-26 11:32 ` [PATCH v2 4/6] usb: phy: mxs: add wakeup enable for imx7ulp Xu Yang
2024-07-26 11:32 ` Xu Yang
2024-08-09 1:34 ` Peter Chen
2024-08-09 1:34 ` Peter Chen
2024-07-26 11:32 ` [PATCH v2 5/6] usb: phy: mxs: enable weak 1p1 regulator for imx6ul during suspend Xu Yang
2024-07-26 11:32 ` Xu Yang
2024-08-09 1:33 ` Peter Chen [this message]
2024-08-09 1:33 ` Peter Chen
2024-07-26 11:32 ` [PATCH v2 6/6] ARM: dts: imx7ulp: add "nxp,sim" property for usbphy1 Xu Yang
2024-07-26 11:32 ` Xu Yang
2024-08-26 6:56 ` Xu Yang
2024-08-26 6:56 ` Xu Yang
2024-08-28 1:44 ` Shawn Guo
2024-08-28 1:44 ` Shawn Guo
2024-08-29 8:54 ` Xu Yang
2024-08-29 8:54 ` Xu Yang
2024-08-09 1:26 ` [PATCH v2 1/6] usb: phy: mxs: enable regulator phy-3p0 to improve signal qualilty Peter Chen
2024-08-09 1:26 ` Peter Chen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240809013325.GD2673490@nchen-desktop \
--to=peter.chen@kernel.org \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=festevam@gmail.com \
--cc=gregkh@linuxfoundation.org \
--cc=herve.codina@bootlin.com \
--cc=imx@lists.linux.dev \
--cc=jun.li@nxp.com \
--cc=kernel@pengutronix.de \
--cc=kishon@kernel.org \
--cc=krzk+dt@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-phy@lists.infradead.org \
--cc=linux-usb@vger.kernel.org \
--cc=robh@kernel.org \
--cc=s.hauer@pengutronix.de \
--cc=shawnguo@kernel.org \
--cc=vkoul@kernel.org \
--cc=xu.yang_2@nxp.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.