From: Grant Likely <[EMAIL PROTECTED]> Add a device_initcall hook to machdep_calls so that platform code doesn't need to register device_initcalls that must first check what platform it is running on.
This should (slightly) speed boot time on kernels that support a lot of boards and make device_initcall hooks slightly simpler to implement because the platform doesn't need to be tested when called. Signed-off-by: Grant Likely <[EMAIL PROTECTED]> --- Please comment; I think this is a good change, but I'd like some feedback. Cheers, g. arch/powerpc/kernel/setup-common.c | 11 +++++++++++ arch/powerpc/platforms/40x/kilauea.c | 5 +---- arch/powerpc/platforms/40x/virtex.c | 5 +---- arch/powerpc/platforms/40x/walnut.c | 5 +---- arch/powerpc/platforms/44x/bamboo.c | 5 +---- arch/powerpc/platforms/44x/ebony.c | 5 +---- arch/powerpc/platforms/44x/sequoia.c | 5 +---- arch/powerpc/platforms/82xx/mpc8272_ads.c | 6 ++---- arch/powerpc/platforms/82xx/pq2fads.c | 5 +---- arch/powerpc/platforms/83xx/mpc832x_mds.c | 5 +---- arch/powerpc/platforms/83xx/mpc832x_rdb.c | 14 +++----------- arch/powerpc/platforms/83xx/mpc834x_itx.c | 5 +---- arch/powerpc/platforms/83xx/mpc836x_mds.c | 5 +---- arch/powerpc/platforms/85xx/mpc85xx_ads.c | 5 +---- arch/powerpc/platforms/85xx/mpc85xx_cds.c | 9 +++------ arch/powerpc/platforms/85xx/mpc85xx_mds.c | 5 +---- arch/powerpc/platforms/8xx/ep88xc.c | 5 ++--- arch/powerpc/platforms/8xx/mpc885ads_setup.c | 5 ++--- arch/powerpc/platforms/cell/setup.c | 5 +---- arch/powerpc/platforms/celleb/setup.c | 5 +---- arch/powerpc/platforms/pasemi/setup.c | 11 ++--------- arch/powerpc/platforms/powermac/setup.c | 9 +-------- include/asm-powerpc/machdep.h | 1 + 23 files changed, 41 insertions(+), 100 deletions(-) diff --git a/arch/powerpc/kernel/setup-common.c b/arch/powerpc/kernel/setup-common.c index 2de00f8..6fef005 100644 --- a/arch/powerpc/kernel/setup-common.c +++ b/arch/powerpc/kernel/setup-common.c @@ -610,3 +610,14 @@ static int powerpc_debugfs_init(void) } arch_initcall(powerpc_debugfs_init); #endif + +/* device init hook. Allow platforms to provide a device init function */ +static int __init ppc_init_device(void) +{ + /* call platform device init */ + if (ppc_md.init_device) + return ppc_md.init_device(); + return 0; +} +device_initcall(ppc_init_device); + diff --git a/arch/powerpc/platforms/40x/kilauea.c b/arch/powerpc/platforms/40x/kilauea.c index 1bffdbd..f2bb028 100644 --- a/arch/powerpc/platforms/40x/kilauea.c +++ b/arch/powerpc/platforms/40x/kilauea.c @@ -29,14 +29,10 @@ static struct of_device_id kilauea_of_bus[] = { static int __init kilauea_device_probe(void) { - if (!machine_is(kilauea)) - return 0; - of_platform_bus_probe(NULL, kilauea_of_bus, NULL); return 0; } -device_initcall(kilauea_device_probe); static int __init kilauea_probe(void) { @@ -52,6 +48,7 @@ define_machine(kilauea) { .name = "Kilauea", .probe = kilauea_probe, .progress = udbg_progress, + .init_device = kilauea_device_probe, .init_IRQ = uic_init_tree, .get_irq = uic_get_irq, .calibrate_decr = generic_calibrate_decr, diff --git a/arch/powerpc/platforms/40x/virtex.c b/arch/powerpc/platforms/40x/virtex.c index 14bbc32..76403f8 100644 --- a/arch/powerpc/platforms/40x/virtex.c +++ b/arch/powerpc/platforms/40x/virtex.c @@ -17,14 +17,10 @@ static int __init virtex_device_probe(void) { - if (!machine_is(virtex)) - return 0; - of_platform_bus_probe(NULL, NULL, NULL); return 0; } -device_initcall(virtex_device_probe); static int __init virtex_probe(void) { @@ -39,6 +35,7 @@ static int __init virtex_probe(void) define_machine(virtex) { .name = "Xilinx Virtex", .probe = virtex_probe, + .init_device = virtex_device_probe, .init_IRQ = xilinx_intc_init_tree, .get_irq = xilinx_intc_get_irq, .calibrate_decr = generic_calibrate_decr, diff --git a/arch/powerpc/platforms/40x/walnut.c b/arch/powerpc/platforms/40x/walnut.c index ff6db24..3786aeb 100644 --- a/arch/powerpc/platforms/40x/walnut.c +++ b/arch/powerpc/platforms/40x/walnut.c @@ -34,15 +34,11 @@ static struct of_device_id walnut_of_bus[] = { static int __init walnut_device_probe(void) { - if (!machine_is(walnut)) - return 0; - /* FIXME: do bus probe here */ of_platform_bus_probe(NULL, walnut_of_bus, NULL); return 0; } -device_initcall(walnut_device_probe); static int __init walnut_probe(void) { @@ -58,6 +54,7 @@ define_machine(walnut) { .name = "Walnut", .probe = walnut_probe, .progress = udbg_progress, + .init_device = walnut_device_probe, .init_IRQ = uic_init_tree, .get_irq = uic_get_irq, .calibrate_decr = generic_calibrate_decr, diff --git a/arch/powerpc/platforms/44x/bamboo.c b/arch/powerpc/platforms/44x/bamboo.c index be23f11..1aa3c3f 100644 --- a/arch/powerpc/platforms/44x/bamboo.c +++ b/arch/powerpc/platforms/44x/bamboo.c @@ -32,14 +32,10 @@ static struct of_device_id bamboo_of_bus[] = { static int __init bamboo_device_probe(void) { - if (!machine_is(bamboo)) - return 0; - of_platform_bus_probe(NULL, bamboo_of_bus, NULL); return 0; } -device_initcall(bamboo_device_probe); static int __init bamboo_probe(void) { @@ -55,6 +51,7 @@ define_machine(bamboo) { .name = "Bamboo", .probe = bamboo_probe, .progress = udbg_progress, + .init_device = bamboo_device_probe, .init_IRQ = uic_init_tree, .get_irq = uic_get_irq, .restart = ppc44x_reset_system, diff --git a/arch/powerpc/platforms/44x/ebony.c b/arch/powerpc/platforms/44x/ebony.c index 6cd3476..d32065a 100644 --- a/arch/powerpc/platforms/44x/ebony.c +++ b/arch/powerpc/platforms/44x/ebony.c @@ -36,14 +36,10 @@ static struct of_device_id ebony_of_bus[] = { static int __init ebony_device_probe(void) { - if (!machine_is(ebony)) - return 0; - of_platform_bus_probe(NULL, ebony_of_bus, NULL); return 0; } -device_initcall(ebony_device_probe); /* * Called very early, MMU is off, device-tree isn't unflattened @@ -62,6 +58,7 @@ define_machine(ebony) { .name = "Ebony", .probe = ebony_probe, .progress = udbg_progress, + .init_device = ebony_device_probe, .init_IRQ = uic_init_tree, .get_irq = uic_get_irq, .restart = ppc44x_reset_system, diff --git a/arch/powerpc/platforms/44x/sequoia.c b/arch/powerpc/platforms/44x/sequoia.c index 21a9dd1..9166a3d 100644 --- a/arch/powerpc/platforms/44x/sequoia.c +++ b/arch/powerpc/platforms/44x/sequoia.c @@ -32,14 +32,10 @@ static struct of_device_id sequoia_of_bus[] = { static int __init sequoia_device_probe(void) { - if (!machine_is(sequoia)) - return 0; - of_platform_bus_probe(NULL, sequoia_of_bus, NULL); return 0; } -device_initcall(sequoia_device_probe); static int __init sequoia_probe(void) { @@ -55,6 +51,7 @@ define_machine(sequoia) { .name = "Sequoia", .probe = sequoia_probe, .progress = udbg_progress, + .init_device = sequioa_device_probe, .init_IRQ = uic_init_tree, .get_irq = uic_get_irq, .restart = ppc44x_reset_system, diff --git a/arch/powerpc/platforms/82xx/mpc8272_ads.c b/arch/powerpc/platforms/82xx/mpc8272_ads.c index fd83440..044a215 100644 --- a/arch/powerpc/platforms/82xx/mpc8272_ads.c +++ b/arch/powerpc/platforms/82xx/mpc8272_ads.c @@ -165,14 +165,11 @@ static struct of_device_id __initdata of_bus_ids[] = { static int __init declare_of_platform_devices(void) { - if (!machine_is(mpc8272_ads)) - return 0; - /* Publish the QE devices */ of_platform_bus_probe(NULL, of_bus_ids, NULL); + return 0; } -device_initcall(declare_of_platform_devices); /* * Called very early, device-tree isn't unflattened @@ -188,6 +185,7 @@ define_machine(mpc8272_ads) .name = "Freescale MPC8272 ADS", .probe = mpc8272_ads_probe, .setup_arch = mpc8272_ads_setup_arch, + .init_device = declare_of_platform_devices, .init_IRQ = mpc8272_ads_pic_init, .get_irq = cpm2_get_irq, .calibrate_decr = generic_calibrate_decr, diff --git a/arch/powerpc/platforms/82xx/pq2fads.c b/arch/powerpc/platforms/82xx/pq2fads.c index 4f457a9..9535a37 100644 --- a/arch/powerpc/platforms/82xx/pq2fads.c +++ b/arch/powerpc/platforms/82xx/pq2fads.c @@ -176,20 +176,17 @@ static struct of_device_id __initdata of_bus_ids[] = { static int __init declare_of_platform_devices(void) { - if (!machine_is(pq2fads)) - return 0; - /* Publish the QE devices */ of_platform_bus_probe(NULL, of_bus_ids, NULL); return 0; } -device_initcall(declare_of_platform_devices); define_machine(pq2fads) { .name = "Freescale PQ2FADS", .probe = pq2fads_probe, .setup_arch = pq2fads_setup_arch, + .init_device = declare_of_platform_devices, .init_IRQ = pq2fads_pic_init, .get_irq = cpm2_get_irq, .calibrate_decr = generic_calibrate_decr, diff --git a/arch/powerpc/platforms/83xx/mpc832x_mds.c b/arch/powerpc/platforms/83xx/mpc832x_mds.c index a19d9b6..f45046a 100644 --- a/arch/powerpc/platforms/83xx/mpc832x_mds.c +++ b/arch/powerpc/platforms/83xx/mpc832x_mds.c @@ -110,15 +110,11 @@ static struct of_device_id mpc832x_ids[] = { static int __init mpc832x_declare_of_platform_devices(void) { - if (!machine_is(mpc832x_mds)) - return 0; - /* Publish the QE devices */ of_platform_bus_probe(NULL, mpc832x_ids, NULL); return 0; } -device_initcall(mpc832x_declare_of_platform_devices); static void __init mpc832x_sys_init_IRQ(void) { @@ -150,6 +146,7 @@ define_machine(mpc832x_mds) { .name = "MPC832x MDS", .probe = mpc832x_sys_probe, .setup_arch = mpc832x_sys_setup_arch, + .init_device = mpc832x_declare_of_platform_devices, .init_IRQ = mpc832x_sys_init_IRQ, .get_irq = ipic_get_irq, .restart = mpc83xx_restart, diff --git a/arch/powerpc/platforms/83xx/mpc832x_rdb.c b/arch/powerpc/platforms/83xx/mpc832x_rdb.c index 8e7492e..0f30372 100644 --- a/arch/powerpc/platforms/83xx/mpc832x_rdb.c +++ b/arch/powerpc/platforms/83xx/mpc832x_rdb.c @@ -63,9 +63,6 @@ static struct spi_board_info mpc832x_spi_boardinfo = { static int __init mpc832x_spi_init(void) { - if (!machine_is(mpc832x_rdb)) - return 0; - par_io_config_pin(3, 0, 3, 0, 1, 0); /* SPI1 MOSI, I/O */ par_io_config_pin(3, 1, 3, 0, 1, 0); /* SPI1 MISO, I/O */ par_io_config_pin(3, 2, 3, 0, 1, 0); /* SPI1 CLK, I/O */ @@ -80,8 +77,6 @@ static int __init mpc832x_spi_init(void) mpc83xx_spi_deactivate_cs); } -device_initcall(mpc832x_spi_init); - /* ************************************************************************ * * Setup the architecture @@ -121,17 +116,13 @@ static struct of_device_id mpc832x_ids[] = { {}, }; -static int __init mpc832x_declare_of_platform_devices(void) +static int __init mpc832x_rdb_init_device(void) { - if (!machine_is(mpc832x_rdb)) - return 0; - /* Publish the QE devices */ of_platform_bus_probe(NULL, mpc832x_ids, NULL); - return 0; + return mpc832x_spi_init(); } -device_initcall(mpc832x_declare_of_platform_devices); void __init mpc832x_rdb_init_IRQ(void) { @@ -163,6 +154,7 @@ define_machine(mpc832x_rdb) { .name = "MPC832x RDB", .probe = mpc832x_rdb_probe, .setup_arch = mpc832x_rdb_setup_arch, + .init_device = mpc832x_rdb_init_device, .init_IRQ = mpc832x_rdb_init_IRQ, .get_irq = ipic_get_irq, .restart = mpc83xx_restart, diff --git a/arch/powerpc/platforms/83xx/mpc834x_itx.c b/arch/powerpc/platforms/83xx/mpc834x_itx.c index 909f9a9..4312240 100644 --- a/arch/powerpc/platforms/83xx/mpc834x_itx.c +++ b/arch/powerpc/platforms/83xx/mpc834x_itx.c @@ -64,14 +64,10 @@ static void __init mpc834x_itx_setup_arch(void) static int __init mpc834x_itx_declare_of_platform_devices(void) { - if (!machine_is(mpc834x_itx)) - return 0; - of_platform_bus_probe(NULL, NULL, NULL); return 0; } -device_initcall(mpc834x_itx_declare_of_platform_devices); /* * Called very early, MMU is off, device-tree isn't unflattened @@ -87,6 +83,7 @@ define_machine(mpc834x_itx) { .name = "MPC834x ITX", .probe = mpc834x_itx_probe, .setup_arch = mpc834x_itx_setup_arch, + .init_device = mpc834x_itx_declare_of_platform_devices, .init_IRQ = mpc83xx_init_IRQ, .get_irq = ipic_get_irq, .restart = mpc83xx_restart, diff --git a/arch/powerpc/platforms/83xx/mpc836x_mds.c b/arch/powerpc/platforms/83xx/mpc836x_mds.c index 67a61ac..2fd7d6a 100644 --- a/arch/powerpc/platforms/83xx/mpc836x_mds.c +++ b/arch/powerpc/platforms/83xx/mpc836x_mds.c @@ -141,15 +141,11 @@ static struct of_device_id mpc836x_ids[] = { static int __init mpc836x_declare_of_platform_devices(void) { - if (!machine_is(mpc836x_mds)) - return 0; - /* Publish the QE devices */ of_platform_bus_probe(NULL, mpc836x_ids, NULL); return 0; } -device_initcall(mpc836x_declare_of_platform_devices); static void __init mpc836x_mds_init_IRQ(void) { @@ -181,6 +177,7 @@ define_machine(mpc836x_mds) { .name = "MPC836x MDS", .probe = mpc836x_mds_probe, .setup_arch = mpc836x_mds_setup_arch, + .init_device = mpc836x_declare_of_platform_devices, .init_IRQ = mpc836x_mds_init_IRQ, .get_irq = ipic_get_irq, .restart = mpc83xx_restart, diff --git a/arch/powerpc/platforms/85xx/mpc85xx_ads.c b/arch/powerpc/platforms/85xx/mpc85xx_ads.c index bccdc25..9fdfed5 100644 --- a/arch/powerpc/platforms/85xx/mpc85xx_ads.c +++ b/arch/powerpc/platforms/85xx/mpc85xx_ads.c @@ -233,13 +233,9 @@ static struct of_device_id __initdata of_bus_ids[] = { static int __init declare_of_platform_devices(void) { - if (!machine_is(mpc85xx_ads)) - return 0; - of_platform_bus_probe(NULL, of_bus_ids, NULL); return 0; } -device_initcall(declare_of_platform_devices); /* * Called very early, device-tree isn't unflattened @@ -255,6 +251,7 @@ define_machine(mpc85xx_ads) { .name = "MPC85xx ADS", .probe = mpc85xx_ads_probe, .setup_arch = mpc85xx_ads_setup_arch, + .init_device = declare_of_platform_device, .init_IRQ = mpc85xx_ads_pic_init, .show_cpuinfo = mpc85xx_ads_show_cpuinfo, .get_irq = mpic_get_irq, diff --git a/arch/powerpc/platforms/85xx/mpc85xx_cds.c b/arch/powerpc/platforms/85xx/mpc85xx_cds.c index 4d063ee..35a2ec4 100644 --- a/arch/powerpc/platforms/85xx/mpc85xx_cds.c +++ b/arch/powerpc/platforms/85xx/mpc85xx_cds.c @@ -222,9 +222,6 @@ static int mpc85xx_cds_8259_attach(void) struct device_node *cascade_node = NULL; int cascade_irq; - if (!machine_is(mpc85xx_cds)) - return 0; - /* Initialize the i8259 controller */ for_each_node_by_type(np, "interrupt-controller") if (of_device_is_compatible(np, "chrp,iic")) { @@ -262,9 +259,6 @@ static int mpc85xx_cds_8259_attach(void) return 0; } - -device_initcall(mpc85xx_cds_8259_attach); - #endif /* CONFIG_PPC_I8259 */ /* @@ -343,6 +337,9 @@ define_machine(mpc85xx_cds) { .name = "MPC85xx CDS", .probe = mpc85xx_cds_probe, .setup_arch = mpc85xx_cds_setup_arch, +#if defined(CONFIG_PPC_I8259) && defined(CONFIG_PCI) + .init_device = mpc85xx_cds_8259_attach, +#endif .init_IRQ = mpc85xx_cds_pic_init, .show_cpuinfo = mpc85xx_cds_show_cpuinfo, .get_irq = mpic_get_irq, diff --git a/arch/powerpc/platforms/85xx/mpc85xx_mds.c b/arch/powerpc/platforms/85xx/mpc85xx_mds.c index 61b3eed..b759387 100644 --- a/arch/powerpc/platforms/85xx/mpc85xx_mds.c +++ b/arch/powerpc/platforms/85xx/mpc85xx_mds.c @@ -144,15 +144,11 @@ static struct of_device_id mpc85xx_ids[] = { static int __init mpc85xx_publish_devices(void) { - if (!machine_is(mpc85xx_mds)) - return 0; - /* Publish the QE devices */ of_platform_bus_probe(NULL,mpc85xx_ids,NULL); return 0; } -device_initcall(mpc85xx_publish_devices); static void __init mpc85xx_mds_pic_init(void) { @@ -199,6 +195,7 @@ define_machine(mpc85xx_mds) { .name = "MPC85xx MDS", .probe = mpc85xx_mds_probe, .setup_arch = mpc85xx_mds_setup_arch, + .init_device = mpc85xx_publish_devices, .init_IRQ = mpc85xx_mds_pic_init, .get_irq = mpic_get_irq, .restart = fsl_rstcr_restart, diff --git a/arch/powerpc/platforms/8xx/ep88xc.c b/arch/powerpc/platforms/8xx/ep88xc.c index c518b6c..0d49e1c 100644 --- a/arch/powerpc/platforms/8xx/ep88xc.c +++ b/arch/powerpc/platforms/8xx/ep88xc.c @@ -155,17 +155,16 @@ static struct of_device_id __initdata of_bus_ids[] = { static int __init declare_of_platform_devices(void) { /* Publish the QE devices */ - if (machine_is(ep88xc)) - of_platform_bus_probe(NULL, of_bus_ids, NULL); + of_platform_bus_probe(NULL, of_bus_ids, NULL); return 0; } -device_initcall(declare_of_platform_devices); define_machine(ep88xc) { .name = "Embedded Planet EP88xC", .probe = ep88xc_probe, .setup_arch = ep88xc_setup_arch, + .init_device = declare_of_platform_devices, .init_IRQ = m8xx_pic_init, .get_irq = mpc8xx_get_irq, .restart = mpc8xx_restart, diff --git a/arch/powerpc/platforms/8xx/mpc885ads_setup.c b/arch/powerpc/platforms/8xx/mpc885ads_setup.c index 2cf1b6a..9f88fe6 100644 --- a/arch/powerpc/platforms/8xx/mpc885ads_setup.c +++ b/arch/powerpc/platforms/8xx/mpc885ads_setup.c @@ -264,17 +264,16 @@ static struct of_device_id __initdata of_bus_ids[] = { static int __init declare_of_platform_devices(void) { /* Publish the QE devices */ - if (machine_is(mpc885_ads)) - of_platform_bus_probe(NULL, of_bus_ids, NULL); + of_platform_bus_probe(NULL, of_bus_ids, NULL); return 0; } -device_initcall(declare_of_platform_devices); define_machine(mpc885_ads) { .name = "Freescale MPC885 ADS", .probe = mpc885ads_probe, .setup_arch = mpc885ads_setup_arch, + .init_device = declare_of_platform_devices, .init_IRQ = m8xx_pic_init, .get_irq = mpc8xx_get_irq, .restart = mpc8xx_restart, diff --git a/arch/powerpc/platforms/cell/setup.c b/arch/powerpc/platforms/cell/setup.c index 98e7ef8..b0579c8 100644 --- a/arch/powerpc/platforms/cell/setup.c +++ b/arch/powerpc/platforms/cell/setup.c @@ -85,9 +85,6 @@ static int __init cell_publish_devices(void) { int node; - if (!machine_is(cell)) - return 0; - /* Publish OF platform devices for southbridge IOs */ of_platform_bus_probe(NULL, NULL, NULL); @@ -101,7 +98,6 @@ static int __init cell_publish_devices(void) } return 0; } -device_initcall(cell_publish_devices); static void cell_mpic_cascade(unsigned int irq, struct irq_desc *desc) { @@ -208,6 +204,7 @@ define_machine(cell) { .set_rtc_time = rtas_set_rtc_time, .calibrate_decr = generic_calibrate_decr, .progress = cell_progress, + .init_device = cell_publish_devices, .init_IRQ = cell_init_irq, .pci_setup_phb = rtas_setup_phb, #ifdef CONFIG_KEXEC diff --git a/arch/powerpc/platforms/celleb/setup.c b/arch/powerpc/platforms/celleb/setup.c index ddfb35a..9d7a993 100644 --- a/arch/powerpc/platforms/celleb/setup.c +++ b/arch/powerpc/platforms/celleb/setup.c @@ -127,9 +127,6 @@ static struct of_device_id celleb_bus_ids[] __initdata = { static int __init celleb_publish_devices(void) { - if (!machine_is(celleb)) - return 0; - /* Publish OF platform devices for southbridge IOs */ of_platform_bus_probe(NULL, celleb_bus_ids, NULL); @@ -137,7 +134,6 @@ static int __init celleb_publish_devices(void) return 0; } -device_initcall(celleb_publish_devices); define_machine(celleb) { .name = "Cell Reference Set", @@ -156,6 +152,7 @@ define_machine(celleb) { .nvram_read = beat_nvram_read, .nvram_write = beat_nvram_write, .set_dabr = beat_set_xdabr, + .init_device = celleb_publish_devices, .init_IRQ = beatic_init_IRQ, .get_irq = beatic_get_irq, .pci_probe_mode = celleb_pci_probe_mode, diff --git a/arch/powerpc/platforms/pasemi/setup.c b/arch/powerpc/platforms/pasemi/setup.c index 3d62060..5bd2325 100644 --- a/arch/powerpc/platforms/pasemi/setup.c +++ b/arch/powerpc/platforms/pasemi/setup.c @@ -126,9 +126,6 @@ static int __init pas_setup_mce_regs(void) struct pci_dev *dev; int reg; - if (!machine_is(pasemi)) - return -ENODEV; - /* Remap various SoC status registers for use by the MCE handler */ reg = 0; @@ -172,7 +169,6 @@ static int __init pas_setup_mce_regs(void) return 0; } -device_initcall(pas_setup_mce_regs); static __init void pas_init_IRQ(void) { @@ -369,9 +365,7 @@ static struct of_device_id pasemi_bus_ids[] = { static int __init pasemi_publish_devices(void) { - if (!machine_is(pasemi)) - return 0; - + pas_setup_mce_regs(); pasemi_pcmcia_init(); /* Publish OF platform devices for SDC and other non-PCI devices */ @@ -379,8 +373,6 @@ static int __init pasemi_publish_devices(void) return 0; } -device_initcall(pasemi_publish_devices); - /* * Called very early, MMU is off, device-tree isn't unflattened @@ -404,6 +396,7 @@ define_machine(pasemi) { .probe = pas_probe, .setup_arch = pas_setup_arch, .init_early = pas_init_early, + .init_device = pasemi_publish_devices, .init_IRQ = pas_init_IRQ, .get_irq = mpic_get_irq, .restart = pas_restart, diff --git a/arch/powerpc/platforms/powermac/setup.c b/arch/powerpc/platforms/powermac/setup.c index 02c5330..a0c5a6c 100644 --- a/arch/powerpc/platforms/powermac/setup.c +++ b/arch/powerpc/platforms/powermac/setup.c @@ -532,12 +532,6 @@ static int __init pmac_declare_of_platform_devices(void) { struct device_node *np; - if (machine_is(chrp)) - return -1; - - if (!machine_is(powermac)) - return 0; - np = of_find_node_by_name(NULL, "valkyrie"); if (np) of_platform_device_create(np, "valkyrie", NULL); @@ -553,8 +547,6 @@ static int __init pmac_declare_of_platform_devices(void) return 0; } -device_initcall(pmac_declare_of_platform_devices); - /* * Called very early, MMU is off, device-tree isn't unflattened */ @@ -672,6 +664,7 @@ define_machine(powermac) { .setup_arch = pmac_setup_arch, .init_early = pmac_init_early, .show_cpuinfo = pmac_show_cpuinfo, + .init_device = pmac_declare_of_platform_devices, .init_IRQ = pmac_pic_init, .get_irq = NULL, /* changed later */ .pci_irq_fixup = pmac_pci_irq_fixup, diff --git a/include/asm-powerpc/machdep.h b/include/asm-powerpc/machdep.h index 6968f43..39532c0 100644 --- a/include/asm-powerpc/machdep.h +++ b/include/asm-powerpc/machdep.h @@ -101,6 +101,7 @@ struct machdep_calls { int (*probe)(void); void (*setup_arch)(void); /* Optional, may be NULL */ void (*init_early)(void); + int (*init_device)(void); /* Optional, may be NULL */ /* Optional, may be NULL. */ void (*show_cpuinfo)(struct seq_file *m); void (*show_percpuinfo)(struct seq_file *m, int i); _______________________________________________ Linuxppc-dev mailing list Linuxppc-dev@ozlabs.org https://ozlabs.org/mailman/listinfo/linuxppc-dev