Registering mbus driver as platform driver is a little late for some register accesses to work. We have to make sure boot-up mbus windows are disabled early, so call mbus driver directly from SoC init. Signed-off-by: Sebastian Hesselbarth <sebastian.hesselbarth@xxxxxxxxx> --- Cc: barebox@xxxxxxxxxxxxxxxxxxx Cc: Ezequiel Garcia <ezequiel.garcia@xxxxxxxxxxxxxxxxxx> Cc: Thomas Petazzoni <thomas.petazzoni@xxxxxxxxxxxxxxxxxx> --- arch/arm/mach-mvebu/armada-370-xp.c | 1 + arch/arm/mach-mvebu/dove.c | 1 + arch/arm/mach-mvebu/kirkwood.c | 1 + drivers/bus/mvebu-mbus.c | 14 +------------- include/linux/mbus.h | 2 ++ 5 files changed, 6 insertions(+), 13 deletions(-) diff --git a/arch/arm/mach-mvebu/armada-370-xp.c b/arch/arm/mach-mvebu/armada-370-xp.c index 244f8cdd81a5..ae458b4433b3 100644 --- a/arch/arm/mach-mvebu/armada-370-xp.c +++ b/arch/arm/mach-mvebu/armada-370-xp.c @@ -73,6 +73,7 @@ static int armada_370_xp_init_soc(struct device_node *root, void *context) armada_370_xp_memory_find(&phys_base, &phys_size); mvebu_set_memory(phys_base, phys_size); + mvebu_mbus_init(); /* Enable peripherals PUP */ reg = readl(ARMADA_XP_PUP_ENABLE_BASE); diff --git a/arch/arm/mach-mvebu/dove.c b/arch/arm/mach-mvebu/dove.c index c2852f8986ae..a7284fd33a63 100644 --- a/arch/arm/mach-mvebu/dove.c +++ b/arch/arm/mach-mvebu/dove.c @@ -93,6 +93,7 @@ static int dove_init_soc(struct device_node *root, void *context) dove_memory_find(&phys_base, &phys_size); mvebu_set_memory(phys_base, phys_size); + mvebu_mbus_init(); return 0; } diff --git a/arch/arm/mach-mvebu/kirkwood.c b/arch/arm/mach-mvebu/kirkwood.c index d7903f732eac..19c6f0730332 100644 --- a/arch/arm/mach-mvebu/kirkwood.c +++ b/arch/arm/mach-mvebu/kirkwood.c @@ -66,6 +66,7 @@ static int kirkwood_init_soc(struct device_node *root, void *context) kirkwood_memory_find(&phys_base, &phys_size); mvebu_set_memory(phys_base, phys_size); + mvebu_mbus_init(); return 0; } diff --git a/drivers/bus/mvebu-mbus.c b/drivers/bus/mvebu-mbus.c index 077d7ccb83ca..e1898103540b 100644 --- a/drivers/bus/mvebu-mbus.c +++ b/drivers/bus/mvebu-mbus.c @@ -673,7 +673,7 @@ static void mvebu_mbus_get_pcie_resources(struct device_node *np, } } -static int mvebu_mbus_probe(struct device_d *dev) +int mvebu_mbus_init(void) { struct device_node *np, *controller; const struct of_device_id *match; @@ -725,18 +725,6 @@ static int mvebu_mbus_probe(struct device_d *dev) return mbus_dt_setup(&mbus_state); } -static struct driver_d mvebu_mbus_driver = { - .probe = mvebu_mbus_probe, - .name = "mvebu-mbus", - .of_compatible = DRV_OF_COMPAT(mvebu_mbus_dt_ids), -}; - -static int mvebu_mbus_init(void) -{ - return platform_driver_register(&mvebu_mbus_driver); -} -postcore_initcall(mvebu_mbus_init); - struct mbus_range { const char *compatible; u32 mbusid; diff --git a/include/linux/mbus.h b/include/linux/mbus.h index b90fabbfb7e5..bcc5949219cf 100644 --- a/include/linux/mbus.h +++ b/include/linux/mbus.h @@ -61,4 +61,6 @@ int mvebu_mbus_del_window(phys_addr_t base, size_t size); void mvebu_mbus_add_range(const char *compatible, u8 target, u8 attr, u32 remap); +int mvebu_mbus_init(void); + #endif /* __LINUX_MBUS_H */ -- 2.1.0 _______________________________________________ barebox mailing list barebox@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox