summaryrefslogtreecommitdiffstats
path: root/target/linux/mvebu/patches-3.8/031-arm_plat_orion_refactor.patch
diff options
context:
space:
mode:
authorflorian <florian@3c298f89-4303-0410-b956-a3cf2f4a3e73>2013-01-17 22:29:13 +0000
committerflorian <florian@3c298f89-4303-0410-b956-a3cf2f4a3e73>2013-01-17 22:29:13 +0000
commit0356f8631af0de5023269a7073b52ad6f98debd9 (patch)
tree28aaf81b887b4bcd8212e99aee3297f411265556 /target/linux/mvebu/patches-3.8/031-arm_plat_orion_refactor.patch
parent47411308694ea2ad590808f778b5736e4ebd58b1 (diff)
mvebu: add preliminary support for PCI express
Signed-off-by: Florian Fainelli <florian@openwrt.org> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@35211 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'target/linux/mvebu/patches-3.8/031-arm_plat_orion_refactor.patch')
-rw-r--r--target/linux/mvebu/patches-3.8/031-arm_plat_orion_refactor.patch80
1 files changed, 80 insertions, 0 deletions
diff --git a/target/linux/mvebu/patches-3.8/031-arm_plat_orion_refactor.patch b/target/linux/mvebu/patches-3.8/031-arm_plat_orion_refactor.patch
new file mode 100644
index 000000000..fe9f6285f
--- /dev/null
+++ b/target/linux/mvebu/patches-3.8/031-arm_plat_orion_refactor.patch
@@ -0,0 +1,80 @@
+In the address decoding code, the orion_disable_wins() function is
+used at boot time to disable all address decoding windows, before
+configuring only the ones that are needed. This allows to make sure
+that no configuration is left from the bootloader.
+
+As a preparation for the introduction of address decoding window
+allocation/deallocation function, we refactor this function into an
+orion_disable_cpu_win() which disables a single window.
+
+The orion_config_wins() function is changed to call
+orion_disable_cpu_win() in a loop, to preserve an identical behavior.
+
+Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+---
+ arch/arm/plat-orion/addr-map.c | 35 +++++++++++++++++------------------
+ 1 file changed, 17 insertions(+), 18 deletions(-)
+
+--- a/arch/arm/plat-orion/addr-map.c
++++ b/arch/arm/plat-orion/addr-map.c
+@@ -95,6 +95,19 @@ void __init orion_setup_cpu_win(const st
+ }
+ }
+
++static void __init orion_disable_cpu_win(const struct orion_addr_map_cfg *cfg,
++ const int win)
++{
++ void __iomem *addr = cfg->win_cfg_base(cfg, win);
++
++ writel(0, addr + WIN_BASE_OFF);
++ writel(0, addr + WIN_CTRL_OFF);
++ if (cfg->cpu_win_can_remap(cfg, win)) {
++ writel(0, addr + WIN_REMAP_LO_OFF);
++ writel(0, addr + WIN_REMAP_HI_OFF);
++ }
++}
++
+ /*
+ * Configure a number of windows.
+ */
+@@ -108,36 +121,22 @@ static void __init orion_setup_cpu_wins(
+ }
+ }
+
+-static void __init orion_disable_wins(const struct orion_addr_map_cfg * cfg)
+-{
+- void __iomem *addr;
+- int i;
+-
+- for (i = 0; i < cfg->num_wins; i++) {
+- addr = cfg->win_cfg_base(cfg, i);
+-
+- writel(0, addr + WIN_BASE_OFF);
+- writel(0, addr + WIN_CTRL_OFF);
+- if (cfg->cpu_win_can_remap(cfg, i)) {
+- writel(0, addr + WIN_REMAP_LO_OFF);
+- writel(0, addr + WIN_REMAP_HI_OFF);
+- }
+- }
+-}
+-
+ /*
+ * Disable, clear and configure windows.
+ */
+ void __init orion_config_wins(struct orion_addr_map_cfg * cfg,
+ const struct orion_addr_map_info *info)
+ {
++ int win;
++
+ if (!cfg->cpu_win_can_remap)
+ cfg->cpu_win_can_remap = orion_cpu_win_can_remap;
+
+ if (!cfg->win_cfg_base)
+ cfg->win_cfg_base = orion_win_cfg_base;
+
+- orion_disable_wins(cfg);
++ for (win = 0; win < cfg->num_wins; win++)
++ orion_disable_cpu_win(cfg, win);
+
+ if (info)
+ orion_setup_cpu_wins(cfg, info);