diff options
Diffstat (limited to 'target/linux/mvebu/patches-3.10/0029-arm-mvebu-don-t-hardcode-the-physical-address-for-mv.patch')
-rw-r--r-- | target/linux/mvebu/patches-3.10/0029-arm-mvebu-don-t-hardcode-the-physical-address-for-mv.patch | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/target/linux/mvebu/patches-3.10/0029-arm-mvebu-don-t-hardcode-the-physical-address-for-mv.patch b/target/linux/mvebu/patches-3.10/0029-arm-mvebu-don-t-hardcode-the-physical-address-for-mv.patch new file mode 100644 index 0000000000..62c6bcbead --- /dev/null +++ b/target/linux/mvebu/patches-3.10/0029-arm-mvebu-don-t-hardcode-the-physical-address-for-mv.patch @@ -0,0 +1,109 @@ +From 070469397154c87b14fab48d2fc231ba83007c1b Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> +Date: Wed, 5 Jun 2013 09:04:59 +0200 +Subject: [PATCH 029/203] arm: mvebu: don't hardcode the physical address for + mvebu-mbus + +Since the mvebu-mbus driver doesn't yet have a DT binding (and this DT +binding may not necessarily be ready for 3.11), the physical address +of the mvebu-mbus registers are currently hardcoded. This doesn't play +well with the fact that the internal registers base address may be +different depending on the bootloader. + +In order to have only one central place for the physical address of +the internal registers, we now use of_translate_address() to translate +the mvebu-mbus register offsets into the real physical address, by +using DT-based address translation. This will go away once the +mvebu-mbus driver gains a proper DT binding. + +Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> +Acked-by: Arnd Bergmann <arnd@arndb.de> +Signed-off-by: Jason Cooper <jason@lakedaemon.net> +--- + arch/arm/mach-mvebu/armada-370-xp.c | 38 ++++++++++++++++++++++++++----------- + arch/arm/mach-mvebu/armada-370-xp.h | 8 -------- + 2 files changed, 27 insertions(+), 19 deletions(-) + +--- a/arch/arm/mach-mvebu/armada-370-xp.c ++++ b/arch/arm/mach-mvebu/armada-370-xp.c +@@ -14,6 +14,7 @@ + + #include <linux/kernel.h> + #include <linux/init.h> ++#include <linux/of_address.h> + #include <linux/of_platform.h> + #include <linux/io.h> + #include <linux/time-armada-370-xp.h> +@@ -34,29 +35,44 @@ static void __init armada_370_xp_map_io( + debug_ll_io_init(); + } + +-static void __init armada_370_xp_timer_and_clk_init(void) ++/* ++ * This initialization will be replaced by a DT-based ++ * initialization once the mvebu-mbus driver gains DT support. ++ */ ++ ++#define ARMADA_370_XP_MBUS_WINS_OFFS 0x20000 ++#define ARMADA_370_XP_MBUS_WINS_SIZE 0x100 ++#define ARMADA_370_XP_SDRAM_WINS_OFFS 0x20180 ++#define ARMADA_370_XP_SDRAM_WINS_SIZE 0x20 ++ ++static void __init armada_370_xp_mbus_init(void) + { + char *mbus_soc_name; ++ struct device_node *dn; ++ const __be32 mbus_wins_offs = cpu_to_be32(ARMADA_370_XP_MBUS_WINS_OFFS); ++ const __be32 sdram_wins_offs = cpu_to_be32(ARMADA_370_XP_SDRAM_WINS_OFFS); + +- mvebu_clocks_init(); +- armada_370_xp_timer_init(); +- coherency_init(); +- +- /* +- * This initialization will be replaced by a DT-based +- * initialization once the mvebu-mbus driver gains DT support. +- */ + if (of_machine_is_compatible("marvell,armada370")) + mbus_soc_name = "marvell,armada370-mbus"; + else + mbus_soc_name = "marvell,armadaxp-mbus"; + ++ dn = of_find_node_by_name(NULL, "internal-regs"); ++ BUG_ON(!dn); ++ + mvebu_mbus_init(mbus_soc_name, +- ARMADA_370_XP_MBUS_WINS_BASE, ++ of_translate_address(dn, &mbus_wins_offs), + ARMADA_370_XP_MBUS_WINS_SIZE, +- ARMADA_370_XP_SDRAM_WINS_BASE, ++ of_translate_address(dn, &sdram_wins_offs), + ARMADA_370_XP_SDRAM_WINS_SIZE); ++} + ++static void __init armada_370_xp_timer_and_clk_init(void) ++{ ++ mvebu_clocks_init(); ++ armada_370_xp_timer_init(); ++ coherency_init(); ++ armada_370_xp_mbus_init(); + #ifdef CONFIG_CACHE_L2X0 + l2x0_of_init(0, ~0UL); + #endif +--- a/arch/arm/mach-mvebu/armada-370-xp.h ++++ b/arch/arm/mach-mvebu/armada-370-xp.h +@@ -15,14 +15,6 @@ + #ifndef __MACH_ARMADA_370_XP_H + #define __MACH_ARMADA_370_XP_H + +-#define ARMADA_370_XP_REGS_PHYS_BASE 0xd0000000 +- +-/* These defines can go away once mvebu-mbus has a DT binding */ +-#define ARMADA_370_XP_MBUS_WINS_BASE (ARMADA_370_XP_REGS_PHYS_BASE + 0x20000) +-#define ARMADA_370_XP_MBUS_WINS_SIZE 0x100 +-#define ARMADA_370_XP_SDRAM_WINS_BASE (ARMADA_370_XP_REGS_PHYS_BASE + 0x20180) +-#define ARMADA_370_XP_SDRAM_WINS_SIZE 0x20 +- + #ifdef CONFIG_SMP + #include <linux/cpumask.h> + |