]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
Revert "bus: ti-sysc: Probe for l4_wkup and l4_cfg interconnect devices first"
authorAlexander Sverdlin <alexander.sverdlin@siemens.com>
Tue, 1 Apr 2025 09:06:34 +0000 (11:06 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 27 Jun 2025 10:05:33 +0000 (11:05 +0100)
[ Upstream commit 36305857b1ead8f6ca033a913162ebc09bee0b43 ]

This reverts commit 4700a00755fb5a4bb5109128297d6fd2d1272ee6.

It breaks target-module@2b300050 ("ti,sysc-omap2") probe on AM62x in a case
when minimally-configured system tries to network-boot:

[    6.888776] probe of 2b300050.target-module returned 517 after 258 usecs
[   17.129637] probe of 2b300050.target-module returned 517 after 708 usecs
[   17.137397] platform 2b300050.target-module: deferred probe pending: (reason unknown)
[   26.878471] Waiting up to 100 more seconds for network.

There are minimal configurations possible when the deferred device is not
being probed any more (because everything else has been successfully
probed) and deferral lists are not processed any more.

Stable mmc enumeration can be achieved by filling /aliases node properly
(4700a00755fb commit's rationale).

After revert:

[    9.006816] IP-Config: Complete:
[    9.010058]      device=lan0, ...

Tested-by: Andreas Kemnade <andreas@kemnade.info> # GTA04, Panda, BT200
Reviewed-by: Tony Lindgren <tony@atomide.com>
Signed-off-by: Alexander Sverdlin <alexander.sverdlin@siemens.com>
Link: https://lore.kernel.org/r/20250401090643.2776793-1-alexander.sverdlin@siemens.com
Signed-off-by: Kevin Hilman <khilman@baylibre.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/bus/ti-sysc.c

index 05ae57775853967c011129eee3681accc3bcc389..20e09072348558be3eae4b2aec7571e80961405c 100644 (file)
@@ -687,51 +687,6 @@ static int sysc_parse_and_check_child_range(struct sysc *ddata)
        return 0;
 }
 
-/* Interconnect instances to probe before l4_per instances */
-static struct resource early_bus_ranges[] = {
-       /* am3/4 l4_wkup */
-       { .start = 0x44c00000, .end = 0x44c00000 + 0x300000, },
-       /* omap4/5 and dra7 l4_cfg */
-       { .start = 0x4a000000, .end = 0x4a000000 + 0x300000, },
-       /* omap4 l4_wkup */
-       { .start = 0x4a300000, .end = 0x4a300000 + 0x30000,  },
-       /* omap5 and dra7 l4_wkup without dra7 dcan segment */
-       { .start = 0x4ae00000, .end = 0x4ae00000 + 0x30000,  },
-};
-
-static atomic_t sysc_defer = ATOMIC_INIT(10);
-
-/**
- * sysc_defer_non_critical - defer non_critical interconnect probing
- * @ddata: device driver data
- *
- * We want to probe l4_cfg and l4_wkup interconnect instances before any
- * l4_per instances as l4_per instances depend on resources on l4_cfg and
- * l4_wkup interconnects.
- */
-static int sysc_defer_non_critical(struct sysc *ddata)
-{
-       struct resource *res;
-       int i;
-
-       if (!atomic_read(&sysc_defer))
-               return 0;
-
-       for (i = 0; i < ARRAY_SIZE(early_bus_ranges); i++) {
-               res = &early_bus_ranges[i];
-               if (ddata->module_pa >= res->start &&
-                   ddata->module_pa <= res->end) {
-                       atomic_set(&sysc_defer, 0);
-
-                       return 0;
-               }
-       }
-
-       atomic_dec_if_positive(&sysc_defer);
-
-       return -EPROBE_DEFER;
-}
-
 static struct device_node *stdout_path;
 
 static void sysc_init_stdout_path(struct sysc *ddata)
@@ -957,10 +912,6 @@ static int sysc_map_and_check_registers(struct sysc *ddata)
        if (error)
                return error;
 
-       error = sysc_defer_non_critical(ddata);
-       if (error)
-               return error;
-
        sysc_check_children(ddata);
 
        if (!of_get_property(np, "reg", NULL))