From: Vinod Koul <vkoul@kernel.org>
To: Frank Li <Frank.Li@nxp.com>
Cc: devicetree@vger.kernel.org, fushi.peng@nxp.com,
imx@lists.linux.dev, kernel@pengutronix.de, kishon@kernel.org,
krzysztof.kozlowski+dt@linaro.org,
linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org, linux-phy@lists.infradead.org,
robh+dt@kernel.org, s.hauer@pengutronix.de, shawnguo@kernel.org
Subject: Re: [PATCH v4 4/6] phy: cadence: salvo: add .set_mode API
Date: Tue, 16 May 2023 22:05:06 +0530 [thread overview]
Message-ID: <ZGOwukxGLdRHNL0l@matsya> (raw)
In-Reply-To: <20230516154329.3155031-5-Frank.Li@nxp.com>
On 16-05-23, 11:43, Frank Li wrote:
> From: Peter Chen <peter.chen@nxp.com>
>
> For NXP platform design, the PHY can't know VBUS well, it causes the FSM
> in controller seeing the disconnection at L1 use case. With .set_mode API
> introduced, the controller driver could force PHY seeing B Session VALID
> when it is at the device mode (VBUS is there), and keep FSM working well.
>
> Signed-off-by: Peter Chen <peter.chen@nxp.com>
> Signed-off-by: Frank Li <Frank.Li@nxp.com>
> ---
> drivers/phy/cadence/phy-cadence-salvo.c | 29 +++++++++++++++++++++++++
> 1 file changed, 29 insertions(+)
>
> diff --git a/drivers/phy/cadence/phy-cadence-salvo.c b/drivers/phy/cadence/phy-cadence-salvo.c
> index b9866dc146ce..41616f786321 100644
> --- a/drivers/phy/cadence/phy-cadence-salvo.c
> +++ b/drivers/phy/cadence/phy-cadence-salvo.c
> @@ -92,6 +92,7 @@
> /* USB2 PHY register definition */
> #define UTMI_REG15 0xaf
> #define UTMI_AFE_RX_REG5 0x12
> +#define UTMI_AFE_BC_REG4 0x29
>
> /* TB_ADDR_TX_RCVDETSC_CTRL */
> #define RXDET_IN_P3_32KHZ BIT(0)
> @@ -105,6 +106,9 @@
> /* 0us, txvalid is ready just after HS/FS transmitters have powered up */
> #define TXVALID_GATE_THRESHOLD_HS_0US (BIT(4) | BIT(5))
>
> +#define SET_B_SESSION_VALID (BIT(6) | BIT(5))
> +#define CLR_B_SESSION_VALID (BIT(6))
> +
> struct cdns_reg_pairs {
> u16 val;
> u32 off;
> @@ -124,6 +128,13 @@ struct cdns_salvo_phy {
> };
>
> static const struct of_device_id cdns_salvo_phy_of_match[];
> +static const struct cdns_salvo_data cdns_nxp_salvo_data;
> +
> +static bool cdns_is_nxp_phy(struct cdns_salvo_phy *salvo_phy)
> +{
> + return salvo_phy->data == &cdns_nxp_salvo_data;
> +}
> +
> static u16 cdns_salvo_read(struct cdns_salvo_phy *salvo_phy, u32 offset, u32 reg)
> {
> return (u16)readl(salvo_phy->base + offset +
> @@ -273,11 +284,29 @@ static int cdns_salvo_phy_power_off(struct phy *phy)
> return 0;
> }
>
> +static int cdns_salvo_set_mode(struct phy *phy, enum phy_mode mode, int submode)
> +{
> + struct cdns_salvo_phy *salvo_phy = phy_get_drvdata(phy);
> +
> + if (!cdns_is_nxp_phy(salvo_phy))
> + return 0;
> +
> + if (mode == PHY_MODE_INVALID)
> + cdns_salvo_write(salvo_phy, USB2_PHY_OFFSET, UTMI_AFE_BC_REG4,
> + CLR_B_SESSION_VALID);
> + else if (mode == PHY_MODE_USB_DEVICE)
> + cdns_salvo_write(salvo_phy, USB2_PHY_OFFSET, UTMI_AFE_BC_REG4,
> + SET_B_SESSION_VALID);
no else?
> +
> + return 0;
return success even when mode is not handled?
> +}
> +
> static const struct phy_ops cdns_salvo_phy_ops = {
> .init = cdns_salvo_phy_init,
> .power_on = cdns_salvo_phy_power_on,
> .power_off = cdns_salvo_phy_power_off,
> .owner = THIS_MODULE,
> + .set_mode = cdns_salvo_set_mode,
> };
>
> static int cdns_salvo_phy_probe(struct platform_device *pdev)
> --
> 2.34.1
--
~Vinod
WARNING: multiple messages have this Message-ID (diff)
From: Vinod Koul <vkoul@kernel.org>
To: Frank Li <Frank.Li@nxp.com>
Cc: devicetree@vger.kernel.org, fushi.peng@nxp.com,
imx@lists.linux.dev, kernel@pengutronix.de, kishon@kernel.org,
krzysztof.kozlowski+dt@linaro.org,
linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org, linux-phy@lists.infradead.org,
robh+dt@kernel.org, s.hauer@pengutronix.de, shawnguo@kernel.org
Subject: Re: [PATCH v4 4/6] phy: cadence: salvo: add .set_mode API
Date: Tue, 16 May 2023 22:05:06 +0530 [thread overview]
Message-ID: <ZGOwukxGLdRHNL0l@matsya> (raw)
In-Reply-To: <20230516154329.3155031-5-Frank.Li@nxp.com>
On 16-05-23, 11:43, Frank Li wrote:
> From: Peter Chen <peter.chen@nxp.com>
>
> For NXP platform design, the PHY can't know VBUS well, it causes the FSM
> in controller seeing the disconnection at L1 use case. With .set_mode API
> introduced, the controller driver could force PHY seeing B Session VALID
> when it is at the device mode (VBUS is there), and keep FSM working well.
>
> Signed-off-by: Peter Chen <peter.chen@nxp.com>
> Signed-off-by: Frank Li <Frank.Li@nxp.com>
> ---
> drivers/phy/cadence/phy-cadence-salvo.c | 29 +++++++++++++++++++++++++
> 1 file changed, 29 insertions(+)
>
> diff --git a/drivers/phy/cadence/phy-cadence-salvo.c b/drivers/phy/cadence/phy-cadence-salvo.c
> index b9866dc146ce..41616f786321 100644
> --- a/drivers/phy/cadence/phy-cadence-salvo.c
> +++ b/drivers/phy/cadence/phy-cadence-salvo.c
> @@ -92,6 +92,7 @@
> /* USB2 PHY register definition */
> #define UTMI_REG15 0xaf
> #define UTMI_AFE_RX_REG5 0x12
> +#define UTMI_AFE_BC_REG4 0x29
>
> /* TB_ADDR_TX_RCVDETSC_CTRL */
> #define RXDET_IN_P3_32KHZ BIT(0)
> @@ -105,6 +106,9 @@
> /* 0us, txvalid is ready just after HS/FS transmitters have powered up */
> #define TXVALID_GATE_THRESHOLD_HS_0US (BIT(4) | BIT(5))
>
> +#define SET_B_SESSION_VALID (BIT(6) | BIT(5))
> +#define CLR_B_SESSION_VALID (BIT(6))
> +
> struct cdns_reg_pairs {
> u16 val;
> u32 off;
> @@ -124,6 +128,13 @@ struct cdns_salvo_phy {
> };
>
> static const struct of_device_id cdns_salvo_phy_of_match[];
> +static const struct cdns_salvo_data cdns_nxp_salvo_data;
> +
> +static bool cdns_is_nxp_phy(struct cdns_salvo_phy *salvo_phy)
> +{
> + return salvo_phy->data == &cdns_nxp_salvo_data;
> +}
> +
> static u16 cdns_salvo_read(struct cdns_salvo_phy *salvo_phy, u32 offset, u32 reg)
> {
> return (u16)readl(salvo_phy->base + offset +
> @@ -273,11 +284,29 @@ static int cdns_salvo_phy_power_off(struct phy *phy)
> return 0;
> }
>
> +static int cdns_salvo_set_mode(struct phy *phy, enum phy_mode mode, int submode)
> +{
> + struct cdns_salvo_phy *salvo_phy = phy_get_drvdata(phy);
> +
> + if (!cdns_is_nxp_phy(salvo_phy))
> + return 0;
> +
> + if (mode == PHY_MODE_INVALID)
> + cdns_salvo_write(salvo_phy, USB2_PHY_OFFSET, UTMI_AFE_BC_REG4,
> + CLR_B_SESSION_VALID);
> + else if (mode == PHY_MODE_USB_DEVICE)
> + cdns_salvo_write(salvo_phy, USB2_PHY_OFFSET, UTMI_AFE_BC_REG4,
> + SET_B_SESSION_VALID);
no else?
> +
> + return 0;
return success even when mode is not handled?
> +}
> +
> static const struct phy_ops cdns_salvo_phy_ops = {
> .init = cdns_salvo_phy_init,
> .power_on = cdns_salvo_phy_power_on,
> .power_off = cdns_salvo_phy_power_off,
> .owner = THIS_MODULE,
> + .set_mode = cdns_salvo_set_mode,
> };
>
> static int cdns_salvo_phy_probe(struct platform_device *pdev)
> --
> 2.34.1
--
~Vinod
--
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy
WARNING: multiple messages have this Message-ID (diff)
From: Vinod Koul <vkoul@kernel.org>
To: Frank Li <Frank.Li@nxp.com>
Cc: devicetree@vger.kernel.org, fushi.peng@nxp.com,
imx@lists.linux.dev, kernel@pengutronix.de, kishon@kernel.org,
krzysztof.kozlowski+dt@linaro.org,
linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org, linux-phy@lists.infradead.org,
robh+dt@kernel.org, s.hauer@pengutronix.de, shawnguo@kernel.org
Subject: Re: [PATCH v4 4/6] phy: cadence: salvo: add .set_mode API
Date: Tue, 16 May 2023 22:05:06 +0530 [thread overview]
Message-ID: <ZGOwukxGLdRHNL0l@matsya> (raw)
In-Reply-To: <20230516154329.3155031-5-Frank.Li@nxp.com>
On 16-05-23, 11:43, Frank Li wrote:
> From: Peter Chen <peter.chen@nxp.com>
>
> For NXP platform design, the PHY can't know VBUS well, it causes the FSM
> in controller seeing the disconnection at L1 use case. With .set_mode API
> introduced, the controller driver could force PHY seeing B Session VALID
> when it is at the device mode (VBUS is there), and keep FSM working well.
>
> Signed-off-by: Peter Chen <peter.chen@nxp.com>
> Signed-off-by: Frank Li <Frank.Li@nxp.com>
> ---
> drivers/phy/cadence/phy-cadence-salvo.c | 29 +++++++++++++++++++++++++
> 1 file changed, 29 insertions(+)
>
> diff --git a/drivers/phy/cadence/phy-cadence-salvo.c b/drivers/phy/cadence/phy-cadence-salvo.c
> index b9866dc146ce..41616f786321 100644
> --- a/drivers/phy/cadence/phy-cadence-salvo.c
> +++ b/drivers/phy/cadence/phy-cadence-salvo.c
> @@ -92,6 +92,7 @@
> /* USB2 PHY register definition */
> #define UTMI_REG15 0xaf
> #define UTMI_AFE_RX_REG5 0x12
> +#define UTMI_AFE_BC_REG4 0x29
>
> /* TB_ADDR_TX_RCVDETSC_CTRL */
> #define RXDET_IN_P3_32KHZ BIT(0)
> @@ -105,6 +106,9 @@
> /* 0us, txvalid is ready just after HS/FS transmitters have powered up */
> #define TXVALID_GATE_THRESHOLD_HS_0US (BIT(4) | BIT(5))
>
> +#define SET_B_SESSION_VALID (BIT(6) | BIT(5))
> +#define CLR_B_SESSION_VALID (BIT(6))
> +
> struct cdns_reg_pairs {
> u16 val;
> u32 off;
> @@ -124,6 +128,13 @@ struct cdns_salvo_phy {
> };
>
> static const struct of_device_id cdns_salvo_phy_of_match[];
> +static const struct cdns_salvo_data cdns_nxp_salvo_data;
> +
> +static bool cdns_is_nxp_phy(struct cdns_salvo_phy *salvo_phy)
> +{
> + return salvo_phy->data == &cdns_nxp_salvo_data;
> +}
> +
> static u16 cdns_salvo_read(struct cdns_salvo_phy *salvo_phy, u32 offset, u32 reg)
> {
> return (u16)readl(salvo_phy->base + offset +
> @@ -273,11 +284,29 @@ static int cdns_salvo_phy_power_off(struct phy *phy)
> return 0;
> }
>
> +static int cdns_salvo_set_mode(struct phy *phy, enum phy_mode mode, int submode)
> +{
> + struct cdns_salvo_phy *salvo_phy = phy_get_drvdata(phy);
> +
> + if (!cdns_is_nxp_phy(salvo_phy))
> + return 0;
> +
> + if (mode == PHY_MODE_INVALID)
> + cdns_salvo_write(salvo_phy, USB2_PHY_OFFSET, UTMI_AFE_BC_REG4,
> + CLR_B_SESSION_VALID);
> + else if (mode == PHY_MODE_USB_DEVICE)
> + cdns_salvo_write(salvo_phy, USB2_PHY_OFFSET, UTMI_AFE_BC_REG4,
> + SET_B_SESSION_VALID);
no else?
> +
> + return 0;
return success even when mode is not handled?
> +}
> +
> static const struct phy_ops cdns_salvo_phy_ops = {
> .init = cdns_salvo_phy_init,
> .power_on = cdns_salvo_phy_power_on,
> .power_off = cdns_salvo_phy_power_off,
> .owner = THIS_MODULE,
> + .set_mode = cdns_salvo_set_mode,
> };
>
> static int cdns_salvo_phy_probe(struct platform_device *pdev)
> --
> 2.34.1
--
~Vinod
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2023-05-16 16:35 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-05-16 15:43 [PATCH v4 0/6] phy: cadence: salvo: some fixes and workarounds Frank Li
2023-05-16 15:43 ` Frank Li
2023-05-16 15:43 ` Frank Li
2023-05-16 15:43 ` [PATCH v4 1/6] phy: cadence: salvo: add access for USB2PHY Frank Li
2023-05-16 15:43 ` Frank Li
2023-05-16 15:43 ` Frank Li
2023-05-16 15:43 ` [PATCH v4 2/6] phy: cadence: salvo: decrease delay value to zero for txvalid Frank Li
2023-05-16 15:43 ` Frank Li
2023-05-16 15:43 ` Frank Li
2023-05-16 15:43 ` [PATCH v4 3/6] phy: cadence: salvo: add bist fix Frank Li
2023-05-16 15:43 ` Frank Li
2023-05-16 15:43 ` Frank Li
2023-05-16 16:34 ` Vinod Koul
2023-05-16 16:34 ` Vinod Koul
2023-05-16 16:34 ` Vinod Koul
2023-05-16 15:43 ` [PATCH v4 4/6] phy: cadence: salvo: add .set_mode API Frank Li
2023-05-16 15:43 ` Frank Li
2023-05-16 15:43 ` Frank Li
2023-05-16 16:35 ` Vinod Koul [this message]
2023-05-16 16:35 ` Vinod Koul
2023-05-16 16:35 ` Vinod Koul
2023-05-16 15:43 ` [PATCH v4 5/6] phy: cadence: salvo: Add cdns,usb2-disconnect-threshold-microvolt property Frank Li
2023-05-16 15:43 ` Frank Li
2023-05-16 15:43 ` Frank Li
2023-05-16 15:43 ` [PATCH v4 6/6] dt-bindings: phy: cdns,salvo: add property cdns,usb2-disconnect-threshold-microvolt Frank Li
2023-05-16 15:43 ` Frank Li
2023-05-16 15:43 ` Frank Li
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=ZGOwukxGLdRHNL0l@matsya \
--to=vkoul@kernel.org \
--cc=Frank.Li@nxp.com \
--cc=devicetree@vger.kernel.org \
--cc=fushi.peng@nxp.com \
--cc=imx@lists.linux.dev \
--cc=kernel@pengutronix.de \
--cc=kishon@kernel.org \
--cc=krzysztof.kozlowski+dt@linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-phy@lists.infradead.org \
--cc=robh+dt@kernel.org \
--cc=s.hauer@pengutronix.de \
--cc=shawnguo@kernel.org \
/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.