Skip to content

Commit

Permalink
powerpc/machdep: Define 'compatibles' property in ppc_md and use it
Browse files Browse the repository at this point in the history
Most probe functions that do not use the 'compatible' string do
nothing else than checking whether the machine is compatible with
one of the strings in a NULL terminated table of strings.

Define that table of strings 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.

All .compatible could be replaced with a single element NULL
terminated list but that's not worth the churn. Can be do incrementaly
in follow-up patches.

Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
  • Loading branch information
chleroy committed Dec 6, 2023
1 parent ea64ede commit 9da7989
Show file tree
Hide file tree
Showing 11 changed files with 14 additions and 64 deletions.
1 change: 1 addition & 0 deletions arch/powerpc/include/asm/machdep.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ struct pci_host_bridge;
struct machdep_calls {
const char *name;
const char *compatible;
const char * const *compatibles;
#ifdef CONFIG_PPC64
#ifdef CONFIG_PM
void (*iommu_restore)(void);
Expand Down
2 changes: 2 additions & 0 deletions arch/powerpc/kernel/setup-common.c
Original file line number Diff line number Diff line change
Expand Up @@ -616,6 +616,8 @@ static __init void probe_machine(void)
DBG(" %s ...\n", machine_id->name);
if (machine_id->compatible && !of_machine_is_compatible(machine_id->compatible))
continue;
if (machine_id->compatibles && !of_machine_compatible_match(machine_id->compatibles))
continue;
memcpy(&ppc_md, machine_id, sizeof(struct machdep_calls));
if (ppc_md.probe && !ppc_md.probe())
continue;
Expand Down
9 changes: 3 additions & 6 deletions arch/powerpc/platforms/40x/ppc40x_simple.c
Original file line number Diff line number Diff line change
Expand Up @@ -59,16 +59,13 @@ static const char * const board[] __initconst = {

static int __init ppc40x_probe(void)
{
if (of_device_compatible_match(of_root, board)) {
pci_set_flags(PCI_REASSIGN_ALL_RSRC);
return 1;
}

return 0;
pci_set_flags(PCI_REASSIGN_ALL_RSRC);
return 1;
}

define_machine(ppc40x_simple) {
.name = "PowerPC 40x Platform",
.compatibles = board,
.probe = ppc40x_probe,
.progress = udbg_progress,
.init_IRQ = uic_init_tree,
Expand Down
4 changes: 1 addition & 3 deletions arch/powerpc/platforms/512x/mpc512x_generic.c
Original file line number Diff line number Diff line change
Expand Up @@ -32,16 +32,14 @@ static const char * const board[] __initconst = {
*/
static int __init mpc512x_generic_probe(void)
{
if (!of_device_compatible_match(of_root, board))
return 0;

mpc512x_init_early();

return 1;
}

define_machine(mpc512x_generic) {
.name = "MPC512x generic",
.compatibles = board,
.probe = mpc512x_generic_probe,
.init = mpc512x_init,
.setup_arch = mpc512x_setup_arch,
Expand Down
10 changes: 1 addition & 9 deletions arch/powerpc/platforms/52xx/lite5200.c
Original file line number Diff line number Diff line change
Expand Up @@ -172,17 +172,9 @@ static const char * const board[] __initconst = {
NULL,
};

/*
* Called very early, MMU is off, device-tree isn't unflattened
*/
static int __init lite5200_probe(void)
{
return of_device_compatible_match(of_root, board);
}

define_machine(lite5200) {
.name = "lite5200",
.probe = lite5200_probe,
.compatibles = board,
.setup_arch = lite5200_setup_arch,
.discover_phbs = mpc52xx_setup_pci,
.init = mpc52xx_declare_of_platform_devices,
Expand Down
10 changes: 1 addition & 9 deletions arch/powerpc/platforms/52xx/mpc5200_simple.c
Original file line number Diff line number Diff line change
Expand Up @@ -59,17 +59,9 @@ static const char *board[] __initdata = {
NULL
};

/*
* Called very early, MMU is off, device-tree isn't unflattened
*/
static int __init mpc5200_simple_probe(void)
{
return of_device_compatible_match(of_root, board);
}

define_machine(mpc5200_simple_platform) {
.name = "mpc5200-simple-platform",
.probe = mpc5200_simple_probe,
.compatibles = board,
.setup_arch = mpc5200_simple_setup_arch,
.discover_phbs = mpc52xx_setup_pci,
.init = mpc52xx_declare_of_platform_devices,
Expand Down
10 changes: 1 addition & 9 deletions arch/powerpc/platforms/83xx/mpc830x_rdb.c
Original file line number Diff line number Diff line change
Expand Up @@ -34,19 +34,11 @@ static const char *board[] __initdata = {
NULL
};

/*
* Called very early, MMU is off, device-tree isn't unflattened
*/
static int __init mpc830x_rdb_probe(void)
{
return of_device_compatible_match(of_root, board);
}

machine_device_initcall(mpc830x_rdb, mpc83xx_declare_of_platform_devices);

define_machine(mpc830x_rdb) {
.name = "MPC830x RDB",
.probe = mpc830x_rdb_probe,
.compatibles = board,
.setup_arch = mpc830x_rdb_setup_arch,
.discover_phbs = mpc83xx_setup_pci,
.init_IRQ = mpc83xx_ipic_init_IRQ,
Expand Down
10 changes: 1 addition & 9 deletions arch/powerpc/platforms/83xx/mpc831x_rdb.c
Original file line number Diff line number Diff line change
Expand Up @@ -34,19 +34,11 @@ static const char *board[] __initdata = {
NULL
};

/*
* Called very early, MMU is off, device-tree isn't unflattened
*/
static int __init mpc831x_rdb_probe(void)
{
return of_device_compatible_match(of_root, board);
}

machine_device_initcall(mpc831x_rdb, mpc83xx_declare_of_platform_devices);

define_machine(mpc831x_rdb) {
.name = "MPC831x RDB",
.probe = mpc831x_rdb_probe,
.compatibles = board,
.setup_arch = mpc831x_rdb_setup_arch,
.discover_phbs = mpc83xx_setup_pci,
.init_IRQ = mpc83xx_ipic_init_IRQ,
Expand Down
10 changes: 1 addition & 9 deletions arch/powerpc/platforms/83xx/mpc837x_rdb.c
Original file line number Diff line number Diff line change
Expand Up @@ -61,17 +61,9 @@ static const char * const board[] __initconst = {
NULL
};

/*
* Called very early, MMU is off, device-tree isn't unflattened
*/
static int __init mpc837x_rdb_probe(void)
{
return of_device_compatible_match(of_root, board);
}

define_machine(mpc837x_rdb) {
.name = "MPC837x RDB/WLAN",
.probe = mpc837x_rdb_probe,
.compatibles = board,
.setup_arch = mpc837x_rdb_setup_arch,
.discover_phbs = mpc83xx_setup_pci,
.init_IRQ = mpc83xx_ipic_init_IRQ,
Expand Down
2 changes: 1 addition & 1 deletion arch/powerpc/platforms/85xx/corenet_generic.c
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ static int __init corenet_generic_probe(void)
extern struct smp_ops_t smp_85xx_ops;
#endif

if (of_device_compatible_match(of_root, boards))
if (of_machine_compatible_match(boards))
return 1;

/* Check if we're running under the Freescale hypervisor */
Expand Down
10 changes: 1 addition & 9 deletions arch/powerpc/platforms/85xx/tqm85xx.c
Original file line number Diff line number Diff line change
Expand Up @@ -112,17 +112,9 @@ static const char * const board[] __initconst = {
NULL
};

/*
* Called very early, device-tree isn't unflattened
*/
static int __init tqm85xx_probe(void)
{
return of_device_compatible_match(of_root, board);
}

define_machine(tqm85xx) {
.name = "TQM85xx",
.probe = tqm85xx_probe,
.compatibles = board,
.setup_arch = tqm85xx_setup_arch,
.init_IRQ = tqm85xx_pic_init,
.show_cpuinfo = tqm85xx_show_cpuinfo,
Expand Down

0 comments on commit 9da7989

Please sign in to comment.