You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
2.2 KiB
80 lines
2.2 KiB
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);
|
|
|