diff mbox series

bus: ti-sysc: mark AM62 wkup_uart0 as non deferrable

Message ID 20250109175211.113945-2-francesco@valla.it
State New
Headers show
Series bus: ti-sysc: mark AM62 wkup_uart0 as non deferrable | expand

Commit Message

Francesco Valla Jan. 9, 2025, 5:52 p.m. UTC
The ti-sysc driver implements a probe deferral logic to be sure to probe
the parent interconnects before their children, postponing the probe of
interconnects not marked as "early" instances until one of these is
found.

Since the driver is alse used for the wkup_uart0 block found on the AM62
SoC, but not for other devices on the same platform, this logic forces
the probe for it to be artificially deferred 10 times and can lead to
the device not being probed at all. The missed probe was seen on a
BeaglePlay with the kernel configuration stripped to bare minimum and
no module support.

Add the ranges for wkup_uart0 to the list of "early" interconnect
instances, forcing the driver to skip the defer logic entirely for this
device.

Signed-off-by: Francesco Valla <francesco@valla.it>
---
 drivers/bus/ti-sysc.c | 2 ++
 1 file changed, 2 insertions(+)

Comments

Roger Quadros Jan. 13, 2025, 6:08 p.m. UTC | #1
On 09/01/2025 19:52, Francesco Valla wrote:
> The ti-sysc driver implements a probe deferral logic to be sure to probe
> the parent interconnects before their children, postponing the probe of
> interconnects not marked as "early" instances until one of these is
> found.
> 
> Since the driver is alse used for the wkup_uart0 block found on the AM62

alse/also

> SoC, but not for other devices on the same platform, this logic forces
> the probe for it to be artificially deferred 10 times and can lead to
> the device not being probed at all. The missed probe was seen on a
> BeaglePlay with the kernel configuration stripped to bare minimum and
> no module support.
> 
> Add the ranges for wkup_uart0 to the list of "early" interconnect
> instances, forcing the driver to skip the defer logic entirely for this
> device.
> 
> Signed-off-by: Francesco Valla <francesco@valla.it>
> ---
>  drivers/bus/ti-sysc.c | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/drivers/bus/ti-sysc.c b/drivers/bus/ti-sysc.c
> index f67b927ae4ca..917b7168fbd0 100644
> --- a/drivers/bus/ti-sysc.c
> +++ b/drivers/bus/ti-sysc.c
> @@ -687,6 +687,8 @@ static struct resource early_bus_ranges[] = {
>  	{ .start = 0x4a300000, .end = 0x4a300000 + 0x30000,  },
>  	/* omap5 and dra7 l4_wkup without dra7 dcan segment */
>  	{ .start = 0x4ae00000, .end = 0x4ae00000 + 0x30000,  },
> +	/* am62 wkup_uart0 */
> +	{ .start = 0x2b300000, .end = 0x2b300000 + 0x100000, },
>  };
>  
>  static atomic_t sysc_defer = ATOMIC_INIT(10);

While this is probably OK for now, we need to ensure that sysc_defer_non_critical()
is not called for such devices that don't have an interconnect managed by
the sysc driver (i.e. non OMAP based systems).

Maybe this calls for a new compatible for AM62 sysc?

Reviewed-by: Roger Quadros <rogerq@kernel.org>
diff mbox series

Patch

diff --git a/drivers/bus/ti-sysc.c b/drivers/bus/ti-sysc.c
index f67b927ae4ca..917b7168fbd0 100644
--- a/drivers/bus/ti-sysc.c
+++ b/drivers/bus/ti-sysc.c
@@ -687,6 +687,8 @@  static struct resource early_bus_ranges[] = {
 	{ .start = 0x4a300000, .end = 0x4a300000 + 0x30000,  },
 	/* omap5 and dra7 l4_wkup without dra7 dcan segment */
 	{ .start = 0x4ae00000, .end = 0x4ae00000 + 0x30000,  },
+	/* am62 wkup_uart0 */
+	{ .start = 0x2b300000, .end = 0x2b300000 + 0x100000, },
 };
 
 static atomic_t sysc_defer = ATOMIC_INIT(10);