powerpc/machdep: Define 'compatible' property in ppc_md and use it
authorChristophe Leroy <christophe.leroy@csgroup.eu>
Sat, 18 Feb 2023 09:15:45 +0000 (10:15 +0100)
committerMichael Ellerman <mpe@ellerman.id.au>
Tue, 14 Mar 2023 13:52:10 +0000 (00:52 +1100)
Most probe functions do nothing else than checking whether
the machine is compatible to a given string.

Define that string in ppc_md structure and check it directly from
probe_machine() instead of using ppc_md.probe() for that.

Keep checking in ppc_md.probe() only for more complex probing.

Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://msgid.link/6cb9865d916231c38401ba34ad1a98c249fae135.1676711562.git.christophe.leroy@csgroup.eu
arch/powerpc/include/asm/machdep.h
arch/powerpc/kernel/setup-common.c

index 4181516..4f6e7d7 100644 (file)
@@ -21,6 +21,7 @@ struct pci_host_bridge;
 
 struct machdep_calls {
        const char      *name;
+       const char      *compatible;
 #ifdef CONFIG_PPC64
 #ifdef CONFIG_PM
        void            (*iommu_restore)(void);
index e77734e..d2a4462 100644 (file)
@@ -630,13 +630,14 @@ static __init void probe_machine(void)
        for (machine_id = &__machine_desc_start;
             machine_id < &__machine_desc_end;
             machine_id++) {
-               DBG("  %s ...", machine_id->name);
+               DBG("  %s ...\n", machine_id->name);
+               if (machine_id->compatible && !of_machine_is_compatible(machine_id->compatible))
+                       continue;
                memcpy(&ppc_md, machine_id, sizeof(struct machdep_calls));
-               if (ppc_md.probe()) {
-                       DBG(" match !\n");
-                       break;
-               }
-               DBG("\n");
+               if (ppc_md.probe && !ppc_md.probe())
+                       continue;
+               DBG("   %s match !\n", machine_id->name);
+               break;
        }
        /* What can we do if we didn't find ? */
        if (machine_id >= &__machine_desc_end) {