Commits "mvebu: {armada-370-xp,dove,kirkwood}: simplify soc init code flow" simplified too much. The problem is that if the dtb used for probing doesn't use the same mbus window address as barebox (i.e. 0xf1000000) the fixup fails because above commits moved the information about the real position to a postcore initcall which is too late because the fixup happens in of_arm_init which runs as core initcall. Signed-off-by: Uwe Kleine-König <u.kleine-koenig@xxxxxxxxxxxxxx> --- arch/arm/mach-mvebu/armada-370-xp.c | 3 --- arch/arm/mach-mvebu/dove.c | 5 ----- arch/arm/mach-mvebu/kirkwood.c | 2 -- drivers/bus/mvebu-mbus.c | 22 +++++++++++++++++++++- 4 files changed, 21 insertions(+), 11 deletions(-) diff --git a/arch/arm/mach-mvebu/armada-370-xp.c b/arch/arm/mach-mvebu/armada-370-xp.c index 196b770277f3..93ad955a6e49 100644 --- a/arch/arm/mach-mvebu/armada-370-xp.c +++ b/arch/arm/mach-mvebu/armada-370-xp.c @@ -90,9 +90,6 @@ static int armada_370_xp_init_soc(void) if (!of_machine_is_compatible("marvell,armada-370-xp")) return 0; - mvebu_mbus_add_range("marvell,armada-370-xp", 0xf0, 0x01, - MVEBU_REMAP_INT_REG_BASE); - restart_handler_register_fn(armada_370_xp_restart_soc); barebox_set_model("Marvell Armada 370/XP"); diff --git a/arch/arm/mach-mvebu/dove.c b/arch/arm/mach-mvebu/dove.c index 54da0d785490..1cdb7e1b8296 100644 --- a/arch/arm/mach-mvebu/dove.c +++ b/arch/arm/mach-mvebu/dove.c @@ -57,11 +57,6 @@ static int dove_init_soc(void) if (!of_machine_is_compatible("marvell,dove")) return 0; - mvebu_mbus_add_range("marvell,dove", 0xf0, 0x01, - MVEBU_REMAP_INT_REG_BASE); - mvebu_mbus_add_range("marvell,dove", 0xf0, 0x02, - DOVE_REMAP_MC_REGS); - restart_handler_register_fn(dove_restart_soc); barebox_set_model("Marvell Dove"); diff --git a/arch/arm/mach-mvebu/kirkwood.c b/arch/arm/mach-mvebu/kirkwood.c index 36cd2a84a6f5..59fb95ff4adf 100644 --- a/arch/arm/mach-mvebu/kirkwood.c +++ b/arch/arm/mach-mvebu/kirkwood.c @@ -34,8 +34,6 @@ static int kirkwood_init_soc(void) if (!of_machine_is_compatible("marvell,kirkwood")) return 0; - mvebu_mbus_add_range("marvell,kirkwood", 0xf0, 0x01, - MVEBU_REMAP_INT_REG_BASE); restart_handler_register_fn(kirkwood_restart_soc); barebox_set_model("Marvell Kirkwood"); diff --git a/drivers/bus/mvebu-mbus.c b/drivers/bus/mvebu-mbus.c index df5f7a32d346..79c80cf52115 100644 --- a/drivers/bus/mvebu-mbus.c +++ b/drivers/bus/mvebu-mbus.c @@ -59,6 +59,7 @@ #include <of.h> #include <of_address.h> #include <linux/mbus.h> +#include <mach/common.h> /* DDR target is the same on all platforms */ #define TARGET_DDR 0 @@ -810,7 +811,26 @@ static int mvebu_mbus_of_fixup(struct device_node *root, void *context) return 0; } -static int mvebu_mbus_fixup_register(void) { +#define DOVE_REMAP_MC_REGS 0xf1800000 + +static int mvebu_mbus_fixup_register(void) +{ + if (IS_ENABLED(CONFIG_ARCH_DOVE)) { + mvebu_mbus_add_range("marvell,dove", 0xf0, 0x01, + MVEBU_REMAP_INT_REG_BASE); + mvebu_mbus_add_range("marvell,dove", 0xf0, 0x02, + DOVE_REMAP_MC_REGS); + } + + if (IS_ENABLED(CONFIG_ARCH_KIRKWOOD)) + mvebu_mbus_add_range("marvell,kirkwood", 0xf0, 0x01, + MVEBU_REMAP_INT_REG_BASE); + + if (IS_ENABLED(CONFIG_ARCH_ARMADA_370) || + IS_ENABLED(CONFIG_ARCH_ARMADA_XP)) + mvebu_mbus_add_range("marvell,armada-370-xp", 0xf0, 0x01, + MVEBU_REMAP_INT_REG_BASE); + return of_register_fixup(mvebu_mbus_of_fixup, NULL); } pure_initcall(mvebu_mbus_fixup_register); -- 2.11.0 _______________________________________________ barebox mailing list barebox@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox