mach-omap2: fix more arch_initcall() breakage
Subsystems (3)
PATCH 1/1 mach-omap2: fix more arch_initcall() breakage
From: David Brownell <[email protected]>
Remove more bogus arch_initcall() logic in mach-omap2/board-xyx.c files. They broke a multi-OMAP build I did, at *RUN TIME* not build time, since it tried to do the i2c init for every board linked in the kernel.
Remember, init_machine() entries run at arch_initcall() time; that's where any board-specific init logic should normally go. Any initcalls in the mach-*/*c files should normally be guarded by tests to make sure they only run on the relevant hardware (board, cpu). Better yet, get rid of the initcalls; init_machine() can *explicitly* call the right version of that code, and pass in board-specific config data; and there are hooks that can handle cpu-specific stuff too.
A quick glance suggests most of the remaining initcall logic in the mach-omap2 directory is similarly broken... this patch gets rid of one frequently-cloned idiom, it should help.
--- arch/arm/mach-omap2/board-2430sdp.c | 4 ++-- arch/arm/mach-omap2/board-3430sdp.c | 2 +- arch/arm/mach-omap2/board-ldp.c | 2 +- arch/arm/mach-omap2/board-omap2evm.c | 4 ++-- arch/arm/mach-omap2/board-omap3evm.c | 4 ++-- 5 files changed, 8 insertions(+), 8 deletions(-)
arch/arm/mach-omap2/board-2430sdp.c +2 -2
@@ -392,6 +392,8 @@ static int __init omap2430_i2c_init(voidstatic void __init omap_2430sdp_init (void ) { +omap2430_i2c_init (); +platform_add_devices (sdp2430_devices,ARRAY_SIZE (sdp2430_devices)); omap_board_config = sdp2430_config; omap_board_config_size =ARRAY_SIZE (sdp2430_config);
@@ -416,8 +418,6 @@ static void __init omap_2430sdp_map_io(vomap2_map_common_io (); } -arch_initcall (omap2430_i2c_init); -MACHINE_START (OMAP_2430SDP ,"OMAP2430 sdp2430 board" )/* Maintainer: Syed Khasim - Texas Instruments Inc */ .phys_io = 0x48000000,
arch/arm/mach-omap2/board-3430sdp.c +1 -1
@@ -354,6 +354,7 @@ extern void __init sdp3430_flash_init(vostatic void __init omap_3430sdp_init (void ) { +omap3430_i2c_init ();platform_add_devices (sdp3430_devices,ARRAY_SIZE (sdp3430_devices)); omap_board_config = sdp3430_config; omap_board_config_size =ARRAY_SIZE (sdp3430_config);
@@ -378,7 +379,6 @@ static void __init omap_3430sdp_map_io(vomap2_set_globals_343x ();omap2_map_common_io (); } -arch_initcall (omap3430_i2c_init);MACHINE_START (OMAP_3430SDP ,"OMAP3430 3430SDP board" )/* Maintainer: Syed Khasim - Texas Instruments Inc */
arch/arm/mach-omap2/board-ldp.c +1 -1
@@ -223,6 +223,7 @@ static int __init omap_i2c_init(void)static void __init omap_ldp_init (void ) { +omap_i2c_init ();platform_add_devices (ldp_devices,ARRAY_SIZE (ldp_devices)); omap_board_config = ldp_config; omap_board_config_size =ARRAY_SIZE (ldp_config);
@@ -242,7 +243,6 @@ static void __init omap_ldp_map_io(void)omap2_set_globals_343x ();omap2_map_common_io (); } -arch_initcall (omap_i2c_init);MACHINE_START (OMAP_LDP ,"OMAP LDP board" ) .phys_io = 0x48000000,
arch/arm/mach-omap2/board-omap2evm.c +2 -2
@@ -261,6 +261,8 @@ static struct platform_device *omap2_evmstatic void __init omap2_evm_init (void ) { +omap2_evm_i2c_init (); +platform_add_devices (omap2_evm_devices,ARRAY_SIZE (omap2_evm_devices)); omap_board_config = omap2_evm_config; omap_board_config_size =ARRAY_SIZE (omap2_evm_config);
@@ -275,8 +277,6 @@ static void __init omap2_evm_map_io(voidomap2_map_common_io (); } -arch_initcall (omap2_evm_i2c_init); -MACHINE_START (OMAP2EVM ,"OMAP2EVM Board" )/* Maintainer: Arun KS <[email protected]> */ .phys_io = 0x48000000,
arch/arm/mach-omap2/board-omap3evm.c +2 -2
@@ -223,6 +223,8 @@ static struct platform_device *omap3_evmstatic void __init omap3_evm_init (void ) { +omap3_evm_i2c_init (); +platform_add_devices (omap3_evm_devices,ARRAY_SIZE (omap3_evm_devices)); omap_board_config = omap3_evm_config; omap_board_config_size =ARRAY_SIZE (omap3_evm_config);
@@ -238,8 +240,6 @@ static void __init omap3_evm_init(void)ads7846_dev_init (); } -arch_initcall (omap3_evm_i2c_init); -static void __init omap3_evm_map_io (void ) {omap2_set_globals_343x ();
Tony Lindgren
maintainerQuoted 14 lines · David Brownell
From: David Brownell <[email protected]>
Remove more bogus
arch_initcall()logic inmach-omap2/board-xyx.cfiles. They broke a multi-OMAP build I did, at *RUN TIME* not build time, since it tried to do the i2c init for every board linked in the kernel.Remember,
init_machine()entries run atarch_initcall()time; that's where any board-specific init logic should normally go. Any initcalls in the mach-*/*c files should normally be guarded by tests to make sure they only run on the relevant hardware (board, cpu). Better yet, get rid of the initcalls;init_machine()can *explicitly* call the right version of that code, and pass in board-specific config data; and there are hooks that can handle cpu-specific stuff too.
Quoted 3 lines
A quick glance suggests most of the remaining initcall logic in the mach-omap2 directory is similarly broken... this patch gets rid of one frequently-cloned idiom, it should help.
Thanks, one step closer to getting the multi-omap properly working for mach-omap2. Will push today.
Tony
Quoted 109 lines
Signed-off-by David Brownell <[email protected]>--- arch/arm/mach-omap2/board-2430sdp.c | 4 ++-- arch/arm/mach-omap2/board-3430sdp.c | 2 +- arch/arm/mach-omap2/board-ldp.c | 2 +- arch/arm/mach-omap2/board-omap2evm.c | 4 ++-- arch/arm/mach-omap2/board-omap3evm.c | 4 ++-- 5 files changed, 8 insertions(+), 8 deletions(-)arch/arm/mach-omap2/board-2430sdp.c +2
-2@@ -392,6 +392,8 @@ static int __init omap2430_i2c_init(voidstatic void __init omap_2430sdp_init (void ) { +omap2430_i2c_init (); +platform_add_devices (sdp2430_devices,ARRAY_SIZE (sdp2430_devices)); omap_board_config = sdp2430_config; omap_board_config_size =ARRAY_SIZE (sdp2430_config);@@ -416,8 +418,6 @@ static void __init omap_2430sdp_map_io(vomap2_map_common_io (); } -arch_initcall (omap2430_i2c_init); -MACHINE_START (OMAP_2430SDP ,"OMAP2430 sdp2430 board" )/* Maintainer: Syed Khasim - Texas Instruments Inc */ .phys_io = 0x48000000,arch/arm/mach-omap2/board-3430sdp.c +1
-1@@ -354,6 +354,7 @@ extern void __init sdp3430_flash_init(vostatic void __init omap_3430sdp_init (void ) { +omap3430_i2c_init ();platform_add_devices (sdp3430_devices,ARRAY_SIZE (sdp3430_devices)); omap_board_config = sdp3430_config; omap_board_config_size =ARRAY_SIZE (sdp3430_config);@@ -378,7 +379,6 @@ static void __init omap_3430sdp_map_io(vomap2_set_globals_343x ();omap2_map_common_io (); } -arch_initcall (omap3430_i2c_init);MACHINE_START (OMAP_3430SDP ,"OMAP3430 3430SDP board" )/* Maintainer: Syed Khasim - Texas Instruments Inc */ arch/arm/mach-omap2/board-ldp.c +1
-1@@ -223,6 +223,7 @@ static int __init omap_i2c_init(void)static void __init omap_ldp_init (void ) { +omap_i2c_init ();platform_add_devices (ldp_devices,ARRAY_SIZE (ldp_devices)); omap_board_config = ldp_config; omap_board_config_size =ARRAY_SIZE (ldp_config);@@ -242,7 +243,6 @@ static void __init omap_ldp_map_io(void)omap2_set_globals_343x ();omap2_map_common_io (); } -arch_initcall (omap_i2c_init);MACHINE_START (OMAP_LDP ,"OMAP LDP board" ) .phys_io = 0x48000000,arch/arm/mach-omap2/board-omap2evm.c +2
-2@@ -261,6 +261,8 @@ static struct platform_device *omap2_evmstatic void __init omap2_evm_init (void ) { +omap2_evm_i2c_init (); +platform_add_devices (omap2_evm_devices,ARRAY_SIZE (omap2_evm_devices)); omap_board_config = omap2_evm_config; omap_board_config_size =ARRAY_SIZE (omap2_evm_config);@@ -275,8 +277,6 @@ static void __init omap2_evm_map_io(voidomap2_map_common_io (); } -arch_initcall (omap2_evm_i2c_init); -MACHINE_START (OMAP2EVM ,"OMAP2EVM Board" )/* Maintainer: Arun KS <[email protected]> */ .phys_io = 0x48000000,arch/arm/mach-omap2/board-omap3evm.c +2
-3@@ -223,6 +223,8 @@ static struct platform_device *omap3_evmstatic void __init omap3_evm_init (void ) { +omap3_evm_i2c_init (); +platform_add_devices (omap3_evm_devices,ARRAY_SIZE (omap3_evm_devices)); omap_board_config = omap3_evm_config; omap_board_config_size =ARRAY_SIZE (omap3_evm_config);@@ -238,8 +240,6 @@ static void __init omap3_evm_init(void)ads7846_dev_init (); } -arch_initcall (omap3_evm_i2c_init); -static void __init omap3_evm_map_io (void ) {omap2_set_globals_343x (); --To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html