mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-11-01 00:48:50 +00:00
powerpc/machdep: Define 'compatibles' property in ppc_md and use it
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> Reviewed-by: Rob Herring <robh@kernel.org> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://msgid.link/20231214103152.12269-4-mpe@ellerman.id.au
This commit is contained in:
parent
1ac8205f90
commit
28da734d58
11 changed files with 14 additions and 64 deletions
|
@ -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);
|
||||
|
|
|
@ -640,6 +640,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;
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -32,9 +32,6 @@ 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;
|
||||
|
@ -42,6 +39,7 @@ static int __init mpc512x_generic_probe(void)
|
|||
|
||||
define_machine(mpc512x_generic) {
|
||||
.name = "MPC512x generic",
|
||||
.compatibles = board,
|
||||
.probe = mpc512x_generic_probe,
|
||||
.init = mpc512x_init,
|
||||
.setup_arch = mpc512x_setup_arch,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Reference in a new issue