diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2008-07-14 19:06:58 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-07-14 19:06:58 -0400 |
commit | 85082fd7cbe3173198aac0eb5e85ab1edcc6352c (patch) | |
tree | edbc09b7945994f78668d218fa02e991c3b3b365 /arch/arm/mach-orion5x/addr-map.c | |
parent | 666484f0250db2e016948d63b3ef33e202e3b8d0 (diff) | |
parent | 53ffe3b440aa85af6fc4eda09b2d44bcdd312d4d (diff) |
Merge branch 'for-linus' of master.kernel.org:/home/rmk/linux-2.6-arm
* 'for-linus' of master.kernel.org:/home/rmk/linux-2.6-arm: (241 commits)
[ARM] 5171/1: ep93xx: fix compilation of modules using clocks
[ARM] 5133/2: at91sam9g20 defconfig file
[ARM] 5130/4: Support for the at91sam9g20
[ARM] 5160/1: IOP3XX: gpio/gpiolib support
[ARM] at91: Fix NAND FLASH timings for at91sam9x evaluation kits.
[ARM] 5084/1: zylonite: Register AC97 device
[ARM] 5085/2: PXA: Move AC97 over to the new central device declaration model
[ARM] 5120/1: pxa: correct platform driver names for PXA25x and PXA27x UDC drivers
[ARM] 5147/1: pxaficp_ir: drop pxa_gpio_mode calls, as pin setting
[ARM] 5145/1: PXA2xx: provide api to control IrDA pins state
[ARM] 5144/1: pxaficp_ir: cleanup includes
[ARM] pxa: remove pxa_set_cken()
[ARM] pxa: allow clk aliases
[ARM] Feroceon: don't disable BPU on boot
[ARM] Orion: LED support for HP mv2120
[ARM] Orion: add RD88F5181L-FXO support
[ARM] Orion: add RD88F5181L-GE support
[ARM] Orion: add Netgear WNR854T support
[ARM] s3c2410_defconfig: update for current build
[ARM] Acer n30: Minor style and indentation fixes.
...
Diffstat (limited to 'arch/arm/mach-orion5x/addr-map.c')
-rw-r--r-- | arch/arm/mach-orion5x/addr-map.c | 45 |
1 files changed, 29 insertions, 16 deletions
diff --git a/arch/arm/mach-orion5x/addr-map.c b/arch/arm/mach-orion5x/addr-map.c index e63fb05dc893..6f0dbda6c44c 100644 --- a/arch/arm/mach-orion5x/addr-map.c +++ b/arch/arm/mach-orion5x/addr-map.c | |||
@@ -70,6 +70,7 @@ | |||
70 | 70 | ||
71 | 71 | ||
72 | struct mbus_dram_target_info orion5x_mbus_dram_info; | 72 | struct mbus_dram_target_info orion5x_mbus_dram_info; |
73 | static int __initdata win_alloc_count; | ||
73 | 74 | ||
74 | static int __init orion5x_cpu_win_can_remap(int win) | 75 | static int __init orion5x_cpu_win_can_remap(int win) |
75 | { | 76 | { |
@@ -87,16 +88,22 @@ static int __init orion5x_cpu_win_can_remap(int win) | |||
87 | static void __init setup_cpu_win(int win, u32 base, u32 size, | 88 | static void __init setup_cpu_win(int win, u32 base, u32 size, |
88 | u8 target, u8 attr, int remap) | 89 | u8 target, u8 attr, int remap) |
89 | { | 90 | { |
90 | orion5x_write(CPU_WIN_BASE(win), base & 0xffff0000); | 91 | if (win >= 8) { |
91 | orion5x_write(CPU_WIN_CTRL(win), | 92 | printk(KERN_ERR "setup_cpu_win: trying to allocate " |
92 | ((size - 1) & 0xffff0000) | (attr << 8) | (target << 4) | 1); | 93 | "window %d\n", win); |
94 | return; | ||
95 | } | ||
96 | |||
97 | writel(base & 0xffff0000, CPU_WIN_BASE(win)); | ||
98 | writel(((size - 1) & 0xffff0000) | (attr << 8) | (target << 4) | 1, | ||
99 | CPU_WIN_CTRL(win)); | ||
93 | 100 | ||
94 | if (orion5x_cpu_win_can_remap(win)) { | 101 | if (orion5x_cpu_win_can_remap(win)) { |
95 | if (remap < 0) | 102 | if (remap < 0) |
96 | remap = base; | 103 | remap = base; |
97 | 104 | ||
98 | orion5x_write(CPU_WIN_REMAP_LO(win), remap & 0xffff0000); | 105 | writel(remap & 0xffff0000, CPU_WIN_REMAP_LO(win)); |
99 | orion5x_write(CPU_WIN_REMAP_HI(win), 0); | 106 | writel(0, CPU_WIN_REMAP_HI(win)); |
100 | } | 107 | } |
101 | } | 108 | } |
102 | 109 | ||
@@ -109,11 +116,11 @@ void __init orion5x_setup_cpu_mbus_bridge(void) | |||
109 | * First, disable and clear windows. | 116 | * First, disable and clear windows. |
110 | */ | 117 | */ |
111 | for (i = 0; i < 8; i++) { | 118 | for (i = 0; i < 8; i++) { |
112 | orion5x_write(CPU_WIN_BASE(i), 0); | 119 | writel(0, CPU_WIN_BASE(i)); |
113 | orion5x_write(CPU_WIN_CTRL(i), 0); | 120 | writel(0, CPU_WIN_CTRL(i)); |
114 | if (orion5x_cpu_win_can_remap(i)) { | 121 | if (orion5x_cpu_win_can_remap(i)) { |
115 | orion5x_write(CPU_WIN_REMAP_LO(i), 0); | 122 | writel(0, CPU_WIN_REMAP_LO(i)); |
116 | orion5x_write(CPU_WIN_REMAP_HI(i), 0); | 123 | writel(0, CPU_WIN_REMAP_HI(i)); |
117 | } | 124 | } |
118 | } | 125 | } |
119 | 126 | ||
@@ -128,6 +135,7 @@ void __init orion5x_setup_cpu_mbus_bridge(void) | |||
128 | TARGET_PCIE, ATTR_PCIE_MEM, -1); | 135 | TARGET_PCIE, ATTR_PCIE_MEM, -1); |
129 | setup_cpu_win(3, ORION5X_PCI_MEM_PHYS_BASE, ORION5X_PCI_MEM_SIZE, | 136 | setup_cpu_win(3, ORION5X_PCI_MEM_PHYS_BASE, ORION5X_PCI_MEM_SIZE, |
130 | TARGET_PCI, ATTR_PCI_MEM, -1); | 137 | TARGET_PCI, ATTR_PCI_MEM, -1); |
138 | win_alloc_count = 4; | ||
131 | 139 | ||
132 | /* | 140 | /* |
133 | * Setup MBUS dram target info. | 141 | * Setup MBUS dram target info. |
@@ -147,8 +155,8 @@ void __init orion5x_setup_cpu_mbus_bridge(void) | |||
147 | w = &orion5x_mbus_dram_info.cs[cs++]; | 155 | w = &orion5x_mbus_dram_info.cs[cs++]; |
148 | w->cs_index = i; | 156 | w->cs_index = i; |
149 | w->mbus_attr = 0xf & ~(1 << i); | 157 | w->mbus_attr = 0xf & ~(1 << i); |
150 | w->base = base & 0xff000000; | 158 | w->base = base & 0xffff0000; |
151 | w->size = (size | 0x00ffffff) + 1; | 159 | w->size = (size | 0x0000ffff) + 1; |
152 | } | 160 | } |
153 | } | 161 | } |
154 | orion5x_mbus_dram_info.num_cs = cs; | 162 | orion5x_mbus_dram_info.num_cs = cs; |
@@ -156,25 +164,30 @@ void __init orion5x_setup_cpu_mbus_bridge(void) | |||
156 | 164 | ||
157 | void __init orion5x_setup_dev_boot_win(u32 base, u32 size) | 165 | void __init orion5x_setup_dev_boot_win(u32 base, u32 size) |
158 | { | 166 | { |
159 | setup_cpu_win(4, base, size, TARGET_DEV_BUS, ATTR_DEV_BOOT, -1); | 167 | setup_cpu_win(win_alloc_count++, base, size, |
168 | TARGET_DEV_BUS, ATTR_DEV_BOOT, -1); | ||
160 | } | 169 | } |
161 | 170 | ||
162 | void __init orion5x_setup_dev0_win(u32 base, u32 size) | 171 | void __init orion5x_setup_dev0_win(u32 base, u32 size) |
163 | { | 172 | { |
164 | setup_cpu_win(5, base, size, TARGET_DEV_BUS, ATTR_DEV_CS0, -1); | 173 | setup_cpu_win(win_alloc_count++, base, size, |
174 | TARGET_DEV_BUS, ATTR_DEV_CS0, -1); | ||
165 | } | 175 | } |
166 | 176 | ||
167 | void __init orion5x_setup_dev1_win(u32 base, u32 size) | 177 | void __init orion5x_setup_dev1_win(u32 base, u32 size) |
168 | { | 178 | { |
169 | setup_cpu_win(6, base, size, TARGET_DEV_BUS, ATTR_DEV_CS1, -1); | 179 | setup_cpu_win(win_alloc_count++, base, size, |
180 | TARGET_DEV_BUS, ATTR_DEV_CS1, -1); | ||
170 | } | 181 | } |
171 | 182 | ||
172 | void __init orion5x_setup_dev2_win(u32 base, u32 size) | 183 | void __init orion5x_setup_dev2_win(u32 base, u32 size) |
173 | { | 184 | { |
174 | setup_cpu_win(7, base, size, TARGET_DEV_BUS, ATTR_DEV_CS2, -1); | 185 | setup_cpu_win(win_alloc_count++, base, size, |
186 | TARGET_DEV_BUS, ATTR_DEV_CS2, -1); | ||
175 | } | 187 | } |
176 | 188 | ||
177 | void __init orion5x_setup_pcie_wa_win(u32 base, u32 size) | 189 | void __init orion5x_setup_pcie_wa_win(u32 base, u32 size) |
178 | { | 190 | { |
179 | setup_cpu_win(7, base, size, TARGET_PCIE, ATTR_PCIE_WA, -1); | 191 | setup_cpu_win(win_alloc_count++, base, size, |
192 | TARGET_PCIE, ATTR_PCIE_WA, -1); | ||
180 | } | 193 | } |