mips: smp-bmips: fix CPU mappings
authorÁlvaro Fernández Rojas <noltari@gmail.com>
Wed, 24 Feb 2021 07:33:36 +0000 (08:33 +0100)
committerThomas Bogendoerfer <tsbogend@alpha.franken.de>
Sat, 6 Mar 2021 07:43:39 +0000 (08:43 +0100)
When booting bmips with SMP enabled on a BCM6358 running on CPU #1 instead of
CPU #0, the current CPU mapping code produces the following:
- smp_processor_id(): 0
- cpu_logical_map(0): 1
- cpu_number_map(0): 1

This is because SMP isn't supported on BCM6358 since it has a shared TLB, so
it is disabled and max_cpus is decreased from 2 to 1.

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
arch/mips/kernel/smp-bmips.c

index 359b176b665fd5fd538e89a423b75c9ef01f4cb5..b6ef5f7312cfaf6b0d784bd822cc79eb70190ab5 100644 (file)
@@ -134,17 +134,24 @@ static void __init bmips_smp_setup(void)
        if (!board_ebase_setup)
                board_ebase_setup = &bmips_ebase_setup;
 
-       __cpu_number_map[boot_cpu] = 0;
-       __cpu_logical_map[0] = boot_cpu;
-
-       for (i = 0; i < max_cpus; i++) {
-               if (i != boot_cpu) {
-                       __cpu_number_map[i] = cpu;
-                       __cpu_logical_map[cpu] = i;
-                       cpu++;
+       if (max_cpus > 1) {
+               __cpu_number_map[boot_cpu] = 0;
+               __cpu_logical_map[0] = boot_cpu;
+
+               for (i = 0; i < max_cpus; i++) {
+                       if (i != boot_cpu) {
+                               __cpu_number_map[i] = cpu;
+                               __cpu_logical_map[cpu] = i;
+                               cpu++;
+                       }
+                       set_cpu_possible(i, 1);
+                       set_cpu_present(i, 1);
                }
-               set_cpu_possible(i, 1);
-               set_cpu_present(i, 1);
+       } else {
+               __cpu_number_map[0] = boot_cpu;
+               __cpu_logical_map[0] = 0;
+               set_cpu_possible(0, 1);
+               set_cpu_present(0, 1);
        }
 }