diff mbox series

arm: mach-k3: am642: Fix reset for workaround errata ID i2331

Message ID 20240418175828.84548-1-afd@ti.com
State Accepted
Commit 4b3706607c0015ba99a86d8631446564c117e06a
Delegated to: Tom Rini
Headers show
Series arm: mach-k3: am642: Fix reset for workaround errata ID i2331 | expand

Commit Message

Andrew Davis April 18, 2024, 5:58 p.m. UTC
To workaround an issue in AM642 we reset the SoC in early boot. For that
we first probed the sysreset driver by calling uclass_get_device(). The
ti-sci sysreset driver is now probed during the ti-sci firmware probe.
Update this call to probe the firmware driver which will then probe
the sysreset driver allowing do_reset() to again function as expected.

Reported-by: Jonathan Humphreys <j-humphreys@ti.com>
Fixes: fc5d40283483 ("firmware: ti_sci: Bind sysreset driver when enabled")
Signed-off-by: Andrew Davis <afd@ti.com>
---
 arch/arm/mach-k3/am642_init.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Wadim Egorov April 23, 2024, 1:52 p.m. UTC | #1
Am 18.04.24 um 19:58 schrieb Andrew Davis:
> To workaround an issue in AM642 we reset the SoC in early boot. For that
> we first probed the sysreset driver by calling uclass_get_device(). The
> ti-sci sysreset driver is now probed during the ti-sci firmware probe.
> Update this call to probe the firmware driver which will then probe
> the sysreset driver allowing do_reset() to again function as expected.
> 
> Reported-by: Jonathan Humphreys <j-humphreys@ti.com>
> Fixes: fc5d40283483 ("firmware: ti_sci: Bind sysreset driver when enabled")
> Signed-off-by: Andrew Davis <afd@ti.com>

Tested-by: Wadim Egorov <w.egorov@phytec.de>

on phycore-am64x

> ---
>   arch/arm/mach-k3/am642_init.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/arch/arm/mach-k3/am642_init.c b/arch/arm/mach-k3/am642_init.c
> index ddf47ef0a9b..80c3cb3479f 100644
> --- a/arch/arm/mach-k3/am642_init.c
> +++ b/arch/arm/mach-k3/am642_init.c
> @@ -226,7 +226,7 @@ void board_init_f(ulong dummy)
>   	 * The warm reset realigns internal clocks and prevents the lockup from
>   	 * happening.
>   	 */
> -	ret = uclass_first_device_err(UCLASS_SYSRESET, &dev);
> +	ret = uclass_get_device_by_driver(UCLASS_FIRMWARE, DM_DRIVER_GET(ti_sci), &dev);
>   	if (ret)
>   		printf("\n%s:uclass device error [%d]\n",__func__,ret);
>
Kamlesh Gurudasani April 25, 2024, 6:30 p.m. UTC | #2
Andrew Davis <afd@ti.com> writes:

> To workaround an issue in AM642 we reset the SoC in early boot. For that
> we first probed the sysreset driver by calling uclass_get_device(). The
> ti-sci sysreset driver is now probed during the ti-sci firmware probe.
> Update this call to probe the firmware driver which will then probe
> the sysreset driver allowing do_reset() to again function as expected.
>
> Reported-by: Jonathan Humphreys <j-humphreys@ti.com>
> Fixes: fc5d40283483 ("firmware: ti_sci: Bind sysreset driver when enabled")
> Signed-off-by: Andrew Davis <afd@ti.com>
> ---
>  arch/arm/mach-k3/am642_init.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/arch/arm/mach-k3/am642_init.c b/arch/arm/mach-k3/am642_init.c
> index ddf47ef0a9b..80c3cb3479f 100644
> --- a/arch/arm/mach-k3/am642_init.c
> +++ b/arch/arm/mach-k3/am642_init.c
> @@ -226,7 +226,7 @@ void board_init_f(ulong dummy)
>  	 * The warm reset realigns internal clocks and prevents the lockup from
>  	 * happening.
>  	 */
> -	ret = uclass_first_device_err(UCLASS_SYSRESET, &dev);
> +	ret = uclass_get_device_by_driver(UCLASS_FIRMWARE, DM_DRIVER_GET(ti_sci), &dev);
>  	if (ret)
>  		printf("\n%s:uclass device error [%d]\n",__func__,ret);
>  
> -- 
> 2.39.2
Tested-by: Kamlesh Gurudasani <kamlesh@ti.com>

on am64x-evm
Tom Rini April 29, 2024, 11:04 p.m. UTC | #3
On Thu, 18 Apr 2024 12:58:28 -0500, Andrew Davis wrote:

> To workaround an issue in AM642 we reset the SoC in early boot. For that
> we first probed the sysreset driver by calling uclass_get_device(). The
> ti-sci sysreset driver is now probed during the ti-sci firmware probe.
> Update this call to probe the firmware driver which will then probe
> the sysreset driver allowing do_reset() to again function as expected.
> 
> 
> [...]

Applied to u-boot/master, thanks!
diff mbox series

Patch

diff --git a/arch/arm/mach-k3/am642_init.c b/arch/arm/mach-k3/am642_init.c
index ddf47ef0a9b..80c3cb3479f 100644
--- a/arch/arm/mach-k3/am642_init.c
+++ b/arch/arm/mach-k3/am642_init.c
@@ -226,7 +226,7 @@  void board_init_f(ulong dummy)
 	 * The warm reset realigns internal clocks and prevents the lockup from
 	 * happening.
 	 */
-	ret = uclass_first_device_err(UCLASS_SYSRESET, &dev);
+	ret = uclass_get_device_by_driver(UCLASS_FIRMWARE, DM_DRIVER_GET(ti_sci), &dev);
 	if (ret)
 		printf("\n%s:uclass device error [%d]\n",__func__,ret);