linux-usb.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 0/5] usb: dwc3-am62: module removal and errata fixes
@ 2024-02-05 14:12 Roger Quadros
  2024-02-05 14:12 ` [PATCH v2 1/5] usb: dwc3-am62: call of_platform_depopulate in .remove() Roger Quadros
                   ` (4 more replies)
  0 siblings, 5 replies; 11+ messages in thread
From: Roger Quadros @ 2024-02-05 14:12 UTC (permalink / raw)
  To: Thinh.Nguyen
  Cc: gregkh, r-gunasekaran, b-liu, afd, nm, srk, linux-usb,
	linux-kernel, Roger Quadros

Hi,

This series fixes errors during module removal. It also
implements PHY core voltage selection as per TI recommendation
and workaround for Errata i2409 [1].

The workaround needs PHY2 region to be present in device node.
The device tree patch will be sent later after the DT binding doc
is merged.

[1] - https://www.ti.com/lit/er/sprz487d/sprz487d.pdf

Changelog in each file

v1: https://lore.kernel.org/all/20240201121220.5523-1-rogerq@kernel.org/

cheers,
-roger


Roger Quadros (5):
  usb: dwc3-am62: call of_platform_depopulate in .remove()
  usb: dwc3-am62: fix error on module removal
  usb: dwc3-am62: Fix PHY core voltage selection
  dt-bindings: usb/ti,am62-usb.yaml: Add PHY2 register space
  usb: dwc3-am62: add workaround for Errata i2409

 .../devicetree/bindings/usb/ti,am62-usb.yaml  |  8 +++-
 drivers/usb/dwc3/dwc3-am62.c                  | 47 ++++++++++++++-----
 2 files changed, 41 insertions(+), 14 deletions(-)


base-commit: 6613476e225e090cc9aad49be7fa504e290dd33d
-- 
2.34.1


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH v2 1/5] usb: dwc3-am62: call of_platform_depopulate in .remove()
  2024-02-05 14:12 [PATCH v2 0/5] usb: dwc3-am62: module removal and errata fixes Roger Quadros
@ 2024-02-05 14:12 ` Roger Quadros
  2024-02-05 14:12 ` [PATCH v2 2/5] usb: dwc3-am62: fix error on module removal Roger Quadros
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 11+ messages in thread
From: Roger Quadros @ 2024-02-05 14:12 UTC (permalink / raw)
  To: Thinh.Nguyen
  Cc: gregkh, r-gunasekaran, b-liu, afd, nm, srk, linux-usb,
	linux-kernel, Roger Quadros

We called of_platform_populate() in .probe() so call the
cleanup function of_platform_depopulate() in .remove().

Get rid of the now unnnecessary dwc3_ti_remove_core().

Signed-off-by: Roger Quadros <rogerq@kernel.org>
---

Notes:
    Changelog:
    
    v2: no change
    
    v1: https://lore.kernel.org/all/20240201121220.5523-2-rogerq@kernel.org/

 drivers/usb/dwc3/dwc3-am62.c | 10 +---------
 1 file changed, 1 insertion(+), 9 deletions(-)

diff --git a/drivers/usb/dwc3/dwc3-am62.c b/drivers/usb/dwc3/dwc3-am62.c
index 90a587bc29b7..1bfc9e67614f 100644
--- a/drivers/usb/dwc3/dwc3-am62.c
+++ b/drivers/usb/dwc3/dwc3-am62.c
@@ -267,21 +267,13 @@ static int dwc3_ti_probe(struct platform_device *pdev)
 	return ret;
 }
 
-static int dwc3_ti_remove_core(struct device *dev, void *c)
-{
-	struct platform_device *pdev = to_platform_device(dev);
-
-	platform_device_unregister(pdev);
-	return 0;
-}
-
 static void dwc3_ti_remove(struct platform_device *pdev)
 {
 	struct device *dev = &pdev->dev;
 	struct dwc3_am62 *am62 = platform_get_drvdata(pdev);
 	u32 reg;
 
-	device_for_each_child(dev, NULL, dwc3_ti_remove_core);
+	of_platform_depopulate(dev);
 
 	/* Clear mode valid bit */
 	reg = dwc3_ti_readl(am62, USBSS_MODE_CONTROL);
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH v2 2/5] usb: dwc3-am62: fix error on module removal
  2024-02-05 14:12 [PATCH v2 0/5] usb: dwc3-am62: module removal and errata fixes Roger Quadros
  2024-02-05 14:12 ` [PATCH v2 1/5] usb: dwc3-am62: call of_platform_depopulate in .remove() Roger Quadros
@ 2024-02-05 14:12 ` Roger Quadros
  2024-02-05 14:12 ` [PATCH v2 3/5] usb: dwc3-am62: Fix PHY core voltage selection Roger Quadros
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 11+ messages in thread
From: Roger Quadros @ 2024-02-05 14:12 UTC (permalink / raw)
  To: Thinh.Nguyen
  Cc: gregkh, r-gunasekaran, b-liu, afd, nm, srk, linux-usb,
	linux-kernel, Roger Quadros

As runtime PM is enabled, the module can be runtime
suspended when .remove() is called.

Do a pm_runtime_get_sync() to make sure module is active
before doing any register operations.

Doing a pm_runtime_put_sync() should disable the refclk
so no need to disable it again.

Fixes the below warning at module removel.

[   39.705310] ------------[ cut here ]------------
[   39.710004] clk:162:3 already disabled
[   39.713941] WARNING: CPU: 0 PID: 921 at drivers/clk/clk.c:1090 clk_core_disable+0xb0/0xb8

Signed-off-by: Roger Quadros <rogerq@kernel.org>
---

Notes:
    Changelog:
    
    v2: no change
    
    v1: https://lore.kernel.org/all/20240201121220.5523-3-rogerq@kernel.org/

 drivers/usb/dwc3/dwc3-am62.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/drivers/usb/dwc3/dwc3-am62.c b/drivers/usb/dwc3/dwc3-am62.c
index 1bfc9e67614f..600ba9cfefea 100644
--- a/drivers/usb/dwc3/dwc3-am62.c
+++ b/drivers/usb/dwc3/dwc3-am62.c
@@ -273,6 +273,11 @@ static void dwc3_ti_remove(struct platform_device *pdev)
 	struct dwc3_am62 *am62 = platform_get_drvdata(pdev);
 	u32 reg;
 
+	pm_runtime_get_sync(dev);
+
+	device_wakeup_disable(dev);
+	device_set_wakeup_capable(dev, false);
+
 	of_platform_depopulate(dev);
 
 	/* Clear mode valid bit */
@@ -281,7 +286,6 @@ static void dwc3_ti_remove(struct platform_device *pdev)
 	dwc3_ti_writel(am62, USBSS_MODE_CONTROL, reg);
 
 	pm_runtime_put_sync(dev);
-	clk_disable_unprepare(am62->usb2_refclk);
 	pm_runtime_disable(dev);
 	pm_runtime_set_suspended(dev);
 }
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH v2 3/5] usb: dwc3-am62: Fix PHY core voltage selection
  2024-02-05 14:12 [PATCH v2 0/5] usb: dwc3-am62: module removal and errata fixes Roger Quadros
  2024-02-05 14:12 ` [PATCH v2 1/5] usb: dwc3-am62: call of_platform_depopulate in .remove() Roger Quadros
  2024-02-05 14:12 ` [PATCH v2 2/5] usb: dwc3-am62: fix error on module removal Roger Quadros
@ 2024-02-05 14:12 ` Roger Quadros
  2024-02-05 14:12 ` [PATCH v2 4/5] dt-bindings: usb/ti,am62-usb.yaml: Add PHY2 register space Roger Quadros
  2024-02-05 14:12 ` [PATCH v2 5/5] usb: dwc3-am62: add workaround for Errata i2409 Roger Quadros
  4 siblings, 0 replies; 11+ messages in thread
From: Roger Quadros @ 2024-02-05 14:12 UTC (permalink / raw)
  To: Thinh.Nguyen
  Cc: gregkh, r-gunasekaran, b-liu, afd, nm, srk, linux-usb,
	linux-kernel, Roger Quadros

TRM information is outdated and design team has confirmed
that PHY_CORE_VOLTAGE should be 0 irrespective of
VDD_CORE voltage.

Signed-off-by: Roger Quadros <rogerq@kernel.org>
---

Notes:
    Changelog:
    
    v2: no change
    
    v1: https://lore.kernel.org/all/20240201121220.5523-4-rogerq@kernel.org/

 drivers/usb/dwc3/dwc3-am62.c | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/drivers/usb/dwc3/dwc3-am62.c b/drivers/usb/dwc3/dwc3-am62.c
index 600ba9cfefea..af1ce934e7fb 100644
--- a/drivers/usb/dwc3/dwc3-am62.c
+++ b/drivers/usb/dwc3/dwc3-am62.c
@@ -97,7 +97,8 @@
 #define USBSS_VBUS_STAT_SESSVALID	BIT(2)
 #define USBSS_VBUS_STAT_VBUSVALID	BIT(0)
 
-/* Mask for PHY PLL REFCLK */
+/* USB_PHY_CTRL register bits in CTRL_MMR */
+#define PHY_CORE_VOLTAGE_MASK	BIT(31)
 #define PHY_PLL_REFCLK_MASK	GENMASK(3, 0)
 
 #define DWC3_AM62_AUTOSUSPEND_DELAY	100
@@ -162,6 +163,13 @@ static int phy_syscon_pll_refclk(struct dwc3_am62 *am62)
 
 	am62->offset = args.args[0];
 
+	/* Core voltage. PHY_CORE_VOLTAGE bit Recommended to be 0 always */
+	ret = regmap_update_bits(am62->syscon, am62->offset, PHY_CORE_VOLTAGE_MASK, 0);
+	if (ret) {
+		dev_err(dev, "failed to set phy core voltage\n");
+		return ret;
+	}
+
 	ret = regmap_update_bits(am62->syscon, am62->offset, PHY_PLL_REFCLK_MASK, am62->rate_code);
 	if (ret) {
 		dev_err(dev, "failed to set phy pll reference clock rate\n");
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH v2 4/5] dt-bindings: usb/ti,am62-usb.yaml: Add PHY2 register space
  2024-02-05 14:12 [PATCH v2 0/5] usb: dwc3-am62: module removal and errata fixes Roger Quadros
                   ` (2 preceding siblings ...)
  2024-02-05 14:12 ` [PATCH v2 3/5] usb: dwc3-am62: Fix PHY core voltage selection Roger Quadros
@ 2024-02-05 14:12 ` Roger Quadros
  2024-02-06  7:58   ` Krzysztof Kozlowski
  2024-02-05 14:12 ` [PATCH v2 5/5] usb: dwc3-am62: add workaround for Errata i2409 Roger Quadros
  4 siblings, 1 reply; 11+ messages in thread
From: Roger Quadros @ 2024-02-05 14:12 UTC (permalink / raw)
  To: Thinh.Nguyen
  Cc: gregkh, r-gunasekaran, b-liu, afd, nm, srk, linux-usb,
	linux-kernel, Roger Quadros, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley

Add PHY2 register space to DT binding documentation.

We use minItems: 1 as DT update will come later and we don't
want warnings for existing DTs.

So far this register space was not required but due to the
newly identified Errata i2409 [1] we need to poke this
register space.

[1] https://www.ti.com/lit/er/sprz487d/sprz487d.pdf

Cc: Rob Herring <robh+dt@kernel.org>
Cc: Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>
Cc: Conor Dooley <conor+dt@kernel.org>
Signed-off-by: Roger Quadros <rogerq@kernel.org>
---

Notes:
    Changelog:
    
    v2: add minItems and update commit log
    
    v1: was sent as part of different series
        https://lore.kernel.org/all/20240201120332.4811-5-rogerq@kernel.org/

 Documentation/devicetree/bindings/usb/ti,am62-usb.yaml | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/Documentation/devicetree/bindings/usb/ti,am62-usb.yaml b/Documentation/devicetree/bindings/usb/ti,am62-usb.yaml
index fec5651f5602..f6e6d084d1c5 100644
--- a/Documentation/devicetree/bindings/usb/ti,am62-usb.yaml
+++ b/Documentation/devicetree/bindings/usb/ti,am62-usb.yaml
@@ -14,7 +14,10 @@ properties:
     const: ti,am62-usb
 
   reg:
-    maxItems: 1
+    minItems: 1
+    items:
+      - description: USB CFG register space
+      - description: USB PHY2 register space
 
   ranges: true
 
@@ -82,7 +85,8 @@ examples:
 
       usbss1: usb@f910000 {
         compatible = "ti,am62-usb";
-        reg = <0x00 0x0f910000 0x00 0x800>;
+        reg = <0x00 0x0f910000 0x00 0x800>,
+              <0x00 0x0f918000 0x00 0x400>;
         clocks = <&k3_clks 162 3>;
         clock-names = "ref";
         ti,syscon-phy-pll-refclk = <&wkup_conf 0x4018>;
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH v2 5/5] usb: dwc3-am62: add workaround for Errata i2409
  2024-02-05 14:12 [PATCH v2 0/5] usb: dwc3-am62: module removal and errata fixes Roger Quadros
                   ` (3 preceding siblings ...)
  2024-02-05 14:12 ` [PATCH v2 4/5] dt-bindings: usb/ti,am62-usb.yaml: Add PHY2 register space Roger Quadros
@ 2024-02-05 14:12 ` Roger Quadros
  2024-02-05 18:07   ` Andrew Davis
  2024-02-11 16:18   ` Francesco Dolcini
  4 siblings, 2 replies; 11+ messages in thread
From: Roger Quadros @ 2024-02-05 14:12 UTC (permalink / raw)
  To: Thinh.Nguyen
  Cc: gregkh, r-gunasekaran, b-liu, afd, nm, srk, linux-usb,
	linux-kernel, Roger Quadros, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley

All AM62 devices have Errata i2409 [1] due to which
USB2 PHY may lock up due to short suspend.

Workaround involves setting bit 5 and 4 PLL_REG12
in PHY2 register space after USB controller is brought
out of LPSC reset but before controller initialization.

Handle this workaround.

[1] - https://www.ti.com/lit/er/sprz487d/sprz487d.pdf

Cc: Rob Herring <robh+dt@kernel.org>
Cc: Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>
Cc: Conor Dooley <conor+dt@kernel.org>
Signed-off-by: Roger Quadros <rogerq@kernel.org>
---

Notes:
    Changelog:
    
    v2:
    - don't add phy read/write helpers or add phy to private data
    
    v1: https://lore.kernel.org/all/20240201121220.5523-5-rogerq@kernel.org/

 drivers/usb/dwc3/dwc3-am62.c | 21 ++++++++++++++++++++-
 1 file changed, 20 insertions(+), 1 deletion(-)

diff --git a/drivers/usb/dwc3/dwc3-am62.c b/drivers/usb/dwc3/dwc3-am62.c
index af1ce934e7fb..5ae5c3087b0f 100644
--- a/drivers/usb/dwc3/dwc3-am62.c
+++ b/drivers/usb/dwc3/dwc3-am62.c
@@ -101,6 +101,11 @@
 #define PHY_CORE_VOLTAGE_MASK	BIT(31)
 #define PHY_PLL_REFCLK_MASK	GENMASK(3, 0)
 
+/* USB PHY2 register offsets */
+#define	USB_PHY_PLL_REG12		0x130
+#define	USB_PHY_PLL_LDO_REF_EN		BIT(5)
+#define	USB_PHY_PLL_LDO_REF_EN_EN	BIT(4)
+
 #define DWC3_AM62_AUTOSUSPEND_DELAY	100
 
 struct dwc3_am62 {
@@ -184,8 +189,9 @@ static int dwc3_ti_probe(struct platform_device *pdev)
 	struct device *dev = &pdev->dev;
 	struct device_node *node = pdev->dev.of_node;
 	struct dwc3_am62 *am62;
-	int i, ret;
 	unsigned long rate;
+	void __iomem *phy;
+	int i, ret;
 	u32 reg;
 
 	am62 = devm_kzalloc(dev, sizeof(*am62), GFP_KERNEL);
@@ -201,6 +207,12 @@ static int dwc3_ti_probe(struct platform_device *pdev)
 		return PTR_ERR(am62->usbss);
 	}
 
+	phy = devm_platform_ioremap_resource(pdev, 1);
+	if (IS_ERR(phy)) {
+		dev_err(dev, "can't map PHY IOMEM resource. Won't apply i2409 fix.\n");
+		phy = NULL;
+	}
+
 	am62->usb2_refclk = devm_clk_get(dev, "ref");
 	if (IS_ERR(am62->usb2_refclk)) {
 		dev_err(dev, "can't get usb2_refclk\n");
@@ -227,6 +239,13 @@ static int dwc3_ti_probe(struct platform_device *pdev)
 	if (ret)
 		return ret;
 
+	/* Workaround Errata i2409 */
+	if (phy) {
+		reg = readl(phy + USB_PHY_PLL_REG12);
+		reg |= USB_PHY_PLL_LDO_REF_EN | USB_PHY_PLL_LDO_REF_EN_EN;
+		writel(reg, phy + USB_PHY_PLL_REG12);
+	}
+
 	/* VBUS divider select */
 	am62->vbus_divider = device_property_read_bool(dev, "ti,vbus-divider");
 	reg = dwc3_ti_readl(am62, USBSS_PHY_CONFIG);
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: [PATCH v2 5/5] usb: dwc3-am62: add workaround for Errata i2409
  2024-02-05 14:12 ` [PATCH v2 5/5] usb: dwc3-am62: add workaround for Errata i2409 Roger Quadros
@ 2024-02-05 18:07   ` Andrew Davis
  2024-02-08 12:20     ` Roger Quadros
  2024-02-11 16:18   ` Francesco Dolcini
  1 sibling, 1 reply; 11+ messages in thread
From: Andrew Davis @ 2024-02-05 18:07 UTC (permalink / raw)
  To: Roger Quadros, Thinh.Nguyen
  Cc: gregkh, r-gunasekaran, b-liu, nm, srk, linux-usb, linux-kernel,
	Rob Herring, Krzysztof Kozlowski, Conor Dooley

On 2/5/24 8:12 AM, Roger Quadros wrote:
> All AM62 devices have Errata i2409 [1] due to which
> USB2 PHY may lock up due to short suspend.
> 
> Workaround involves setting bit 5 and 4 PLL_REG12
> in PHY2 register space after USB controller is brought
> out of LPSC reset but before controller initialization.
> 
> Handle this workaround.
> 
> [1] - https://www.ti.com/lit/er/sprz487d/sprz487d.pdf
> 
> Cc: Rob Herring <robh+dt@kernel.org>
> Cc: Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>
> Cc: Conor Dooley <conor+dt@kernel.org>
> Signed-off-by: Roger Quadros <rogerq@kernel.org>
> ---
> 
> Notes:
>      Changelog:
>      
>      v2:
>      - don't add phy read/write helpers or add phy to private data
>      
>      v1: https://lore.kernel.org/all/20240201121220.5523-5-rogerq@kernel.org/
> 
>   drivers/usb/dwc3/dwc3-am62.c | 21 ++++++++++++++++++++-
>   1 file changed, 20 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/usb/dwc3/dwc3-am62.c b/drivers/usb/dwc3/dwc3-am62.c
> index af1ce934e7fb..5ae5c3087b0f 100644
> --- a/drivers/usb/dwc3/dwc3-am62.c
> +++ b/drivers/usb/dwc3/dwc3-am62.c
> @@ -101,6 +101,11 @@
>   #define PHY_CORE_VOLTAGE_MASK	BIT(31)
>   #define PHY_PLL_REFCLK_MASK	GENMASK(3, 0)
>   
> +/* USB PHY2 register offsets */
> +#define	USB_PHY_PLL_REG12		0x130
> +#define	USB_PHY_PLL_LDO_REF_EN		BIT(5)
> +#define	USB_PHY_PLL_LDO_REF_EN_EN	BIT(4)
> +
>   #define DWC3_AM62_AUTOSUSPEND_DELAY	100
>   
>   struct dwc3_am62 {
> @@ -184,8 +189,9 @@ static int dwc3_ti_probe(struct platform_device *pdev)
>   	struct device *dev = &pdev->dev;
>   	struct device_node *node = pdev->dev.of_node;
>   	struct dwc3_am62 *am62;
> -	int i, ret;
>   	unsigned long rate;
> +	void __iomem *phy;
> +	int i, ret;
>   	u32 reg;
>   
>   	am62 = devm_kzalloc(dev, sizeof(*am62), GFP_KERNEL);
> @@ -201,6 +207,12 @@ static int dwc3_ti_probe(struct platform_device *pdev)
>   		return PTR_ERR(am62->usbss);
>   	}
>   
> +	phy = devm_platform_ioremap_resource(pdev, 1);
> +	if (IS_ERR(phy)) {
> +		dev_err(dev, "can't map PHY IOMEM resource. Won't apply i2409 fix.\n");
> +		phy = NULL;
> +	}

Why not move this down to where you use it below, then just have
it be an if/else with the work around in the if (!IS_ERR(phy))
and the warning in the else.

Andrew

> +
>   	am62->usb2_refclk = devm_clk_get(dev, "ref");
>   	if (IS_ERR(am62->usb2_refclk)) {
>   		dev_err(dev, "can't get usb2_refclk\n");
> @@ -227,6 +239,13 @@ static int dwc3_ti_probe(struct platform_device *pdev)
>   	if (ret)
>   		return ret;
>   
> +	/* Workaround Errata i2409 */
> +	if (phy) {
> +		reg = readl(phy + USB_PHY_PLL_REG12);
> +		reg |= USB_PHY_PLL_LDO_REF_EN | USB_PHY_PLL_LDO_REF_EN_EN;
> +		writel(reg, phy + USB_PHY_PLL_REG12);
> +	}
> +
>   	/* VBUS divider select */
>   	am62->vbus_divider = device_property_read_bool(dev, "ti,vbus-divider");
>   	reg = dwc3_ti_readl(am62, USBSS_PHY_CONFIG);

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v2 4/5] dt-bindings: usb/ti,am62-usb.yaml: Add PHY2 register space
  2024-02-05 14:12 ` [PATCH v2 4/5] dt-bindings: usb/ti,am62-usb.yaml: Add PHY2 register space Roger Quadros
@ 2024-02-06  7:58   ` Krzysztof Kozlowski
  0 siblings, 0 replies; 11+ messages in thread
From: Krzysztof Kozlowski @ 2024-02-06  7:58 UTC (permalink / raw)
  To: Roger Quadros, Thinh.Nguyen
  Cc: gregkh, r-gunasekaran, b-liu, afd, nm, srk, linux-usb,
	linux-kernel, Rob Herring, Krzysztof Kozlowski, Conor Dooley

On 05/02/2024 15:12, Roger Quadros wrote:
> Add PHY2 register space to DT binding documentation.
> 
> We use minItems: 1 as DT update will come later and we don't
> want warnings for existing DTs.
> 
> So far this register space was not required but due to the
> newly identified Errata i2409 [1] we need to poke this
> register space.
> 
> [1] https://www.ti.com/lit/er/sprz487d/sprz487d.pdf
> 
> Cc: Rob Herring <robh+dt@kernel.org>
> Cc: Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>
> Cc: Conor Dooley <conor+dt@kernel.org>
> Signed-off-by: Roger Quadros <rogerq@kernel.org>

Not much improved. Still not tested. :(

Please use scripts/get_maintainers.pl to get a list of necessary people
and lists to CC. It might happen, that command when run on an older
kernel, gives you outdated entries. Therefore please be sure you base
your patches on recent Linux kernel.

Tools like b4 or scripts/get_maintainer.pl provide you proper list of
people, so fix your workflow. Tools might also fail if you work on some
ancient tree (don't, instead use mainline), work on fork of kernel
(don't, instead use mainline) or you ignore some maintainers (really
don't). Just use b4 and everything should be fine, although remember
about `b4 prep --auto-to-cc` if you added new patches to the patchset.

You missed at least devicetree list (maybe more), so this won't be
tested by automated tooling. Performing review on untested code might be
a waste of time, thus I will skip this patch entirely till you follow
the process allowing the patch to be tested.

Please kindly resend and include all necessary To/Cc entries.


Best regards,
Krzysztof


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v2 5/5] usb: dwc3-am62: add workaround for Errata i2409
  2024-02-05 18:07   ` Andrew Davis
@ 2024-02-08 12:20     ` Roger Quadros
  0 siblings, 0 replies; 11+ messages in thread
From: Roger Quadros @ 2024-02-08 12:20 UTC (permalink / raw)
  To: Andrew Davis, Thinh.Nguyen
  Cc: gregkh, r-gunasekaran, b-liu, nm, srk, linux-usb, linux-kernel,
	Rob Herring, Krzysztof Kozlowski, Conor Dooley



On 05/02/2024 20:07, Andrew Davis wrote:
> On 2/5/24 8:12 AM, Roger Quadros wrote:
>> All AM62 devices have Errata i2409 [1] due to which
>> USB2 PHY may lock up due to short suspend.
>>
>> Workaround involves setting bit 5 and 4 PLL_REG12
>> in PHY2 register space after USB controller is brought
>> out of LPSC reset but before controller initialization.
>>
>> Handle this workaround.
>>
>> [1] - https://www.ti.com/lit/er/sprz487d/sprz487d.pdf
>>
>> Cc: Rob Herring <robh+dt@kernel.org>
>> Cc: Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>
>> Cc: Conor Dooley <conor+dt@kernel.org>
>> Signed-off-by: Roger Quadros <rogerq@kernel.org>
>> ---
>>
>> Notes:
>>      Changelog:
>>           v2:
>>      - don't add phy read/write helpers or add phy to private data
>>           v1: https://lore.kernel.org/all/20240201121220.5523-5-rogerq@kernel.org/
>>
>>   drivers/usb/dwc3/dwc3-am62.c | 21 ++++++++++++++++++++-
>>   1 file changed, 20 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/usb/dwc3/dwc3-am62.c b/drivers/usb/dwc3/dwc3-am62.c
>> index af1ce934e7fb..5ae5c3087b0f 100644
>> --- a/drivers/usb/dwc3/dwc3-am62.c
>> +++ b/drivers/usb/dwc3/dwc3-am62.c
>> @@ -101,6 +101,11 @@
>>   #define PHY_CORE_VOLTAGE_MASK    BIT(31)
>>   #define PHY_PLL_REFCLK_MASK    GENMASK(3, 0)
>>   +/* USB PHY2 register offsets */
>> +#define    USB_PHY_PLL_REG12        0x130
>> +#define    USB_PHY_PLL_LDO_REF_EN        BIT(5)
>> +#define    USB_PHY_PLL_LDO_REF_EN_EN    BIT(4)
>> +
>>   #define DWC3_AM62_AUTOSUSPEND_DELAY    100
>>     struct dwc3_am62 {
>> @@ -184,8 +189,9 @@ static int dwc3_ti_probe(struct platform_device *pdev)
>>       struct device *dev = &pdev->dev;
>>       struct device_node *node = pdev->dev.of_node;
>>       struct dwc3_am62 *am62;
>> -    int i, ret;
>>       unsigned long rate;
>> +    void __iomem *phy;
>> +    int i, ret;
>>       u32 reg;
>>         am62 = devm_kzalloc(dev, sizeof(*am62), GFP_KERNEL);
>> @@ -201,6 +207,12 @@ static int dwc3_ti_probe(struct platform_device *pdev)
>>           return PTR_ERR(am62->usbss);
>>       }
>>   +    phy = devm_platform_ioremap_resource(pdev, 1);
>> +    if (IS_ERR(phy)) {
>> +        dev_err(dev, "can't map PHY IOMEM resource. Won't apply i2409 fix.\n");
>> +        phy = NULL;
>> +    }
> 
> Why not move this down to where you use it below, then just have
> it be an if/else with the work around in the if (!IS_ERR(phy))
> and the warning in the else.

Seems reasonable. Will fix.

> 
> Andrew
> 
>> +
>>       am62->usb2_refclk = devm_clk_get(dev, "ref");
>>       if (IS_ERR(am62->usb2_refclk)) {
>>           dev_err(dev, "can't get usb2_refclk\n");
>> @@ -227,6 +239,13 @@ static int dwc3_ti_probe(struct platform_device *pdev)
>>       if (ret)
>>           return ret;
>>   +    /* Workaround Errata i2409 */
>> +    if (phy) {
>> +        reg = readl(phy + USB_PHY_PLL_REG12);
>> +        reg |= USB_PHY_PLL_LDO_REF_EN | USB_PHY_PLL_LDO_REF_EN_EN;
>> +        writel(reg, phy + USB_PHY_PLL_REG12);
>> +    }
>> +
>>       /* VBUS divider select */
>>       am62->vbus_divider = device_property_read_bool(dev, "ti,vbus-divider");
>>       reg = dwc3_ti_readl(am62, USBSS_PHY_CONFIG);

-- 
cheers,
-roger

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v2 5/5] usb: dwc3-am62: add workaround for Errata i2409
  2024-02-05 14:12 ` [PATCH v2 5/5] usb: dwc3-am62: add workaround for Errata i2409 Roger Quadros
  2024-02-05 18:07   ` Andrew Davis
@ 2024-02-11 16:18   ` Francesco Dolcini
  2024-02-14  9:40     ` Roger Quadros
  1 sibling, 1 reply; 11+ messages in thread
From: Francesco Dolcini @ 2024-02-11 16:18 UTC (permalink / raw)
  To: Roger Quadros
  Cc: Thinh.Nguyen, gregkh, r-gunasekaran, b-liu, afd, nm, srk,
	linux-usb, linux-kernel, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Marcel Ziswiler, Andrejs Cainikovs

On Mon, Feb 05, 2024 at 04:12:21PM +0200, Roger Quadros wrote:
> All AM62 devices have Errata i2409 [1] due to which
> USB2 PHY may lock up due to short suspend.

Is there any visible log trace when we have this phy lock up situation?
Eventually it would be nice to have this in the commit message.

Francesco



^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v2 5/5] usb: dwc3-am62: add workaround for Errata i2409
  2024-02-11 16:18   ` Francesco Dolcini
@ 2024-02-14  9:40     ` Roger Quadros
  0 siblings, 0 replies; 11+ messages in thread
From: Roger Quadros @ 2024-02-14  9:40 UTC (permalink / raw)
  To: Francesco Dolcini
  Cc: Thinh.Nguyen, gregkh, r-gunasekaran, b-liu, afd, nm, srk,
	linux-usb, linux-kernel, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Marcel Ziswiler, Andrejs Cainikovs


On 11/02/2024 18:18, Francesco Dolcini wrote:
> On Mon, Feb 05, 2024 at 04:12:21PM +0200, Roger Quadros wrote:
>> All AM62 devices have Errata i2409 [1] due to which
>> USB2 PHY may lock up due to short suspend.
> 
> Is there any visible log trace when we have this phy lock up situation?
> Eventually it would be nice to have this in the commit message.
> 

I have not been able to reproduce this issue here so no log trace.

-- 
cheers,
-roger

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2024-02-14  9:40 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-02-05 14:12 [PATCH v2 0/5] usb: dwc3-am62: module removal and errata fixes Roger Quadros
2024-02-05 14:12 ` [PATCH v2 1/5] usb: dwc3-am62: call of_platform_depopulate in .remove() Roger Quadros
2024-02-05 14:12 ` [PATCH v2 2/5] usb: dwc3-am62: fix error on module removal Roger Quadros
2024-02-05 14:12 ` [PATCH v2 3/5] usb: dwc3-am62: Fix PHY core voltage selection Roger Quadros
2024-02-05 14:12 ` [PATCH v2 4/5] dt-bindings: usb/ti,am62-usb.yaml: Add PHY2 register space Roger Quadros
2024-02-06  7:58   ` Krzysztof Kozlowski
2024-02-05 14:12 ` [PATCH v2 5/5] usb: dwc3-am62: add workaround for Errata i2409 Roger Quadros
2024-02-05 18:07   ` Andrew Davis
2024-02-08 12:20     ` Roger Quadros
2024-02-11 16:18   ` Francesco Dolcini
2024-02-14  9:40     ` Roger Quadros

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).