diff options
-rw-r--r-- | arch/mips/cavium-octeon/setup.c | 67 |
1 files changed, 1 insertions, 66 deletions
diff --git a/arch/mips/cavium-octeon/setup.c b/arch/mips/cavium-octeon/setup.c index b321d3b16877..26a9699db426 100644 --- a/arch/mips/cavium-octeon/setup.c +++ b/arch/mips/cavium-octeon/setup.c | |||
@@ -186,54 +186,6 @@ void octeon_check_cpu_bist(void) | |||
186 | write_octeon_c0_dcacheerr(0); | 186 | write_octeon_c0_dcacheerr(0); |
187 | } | 187 | } |
188 | 188 | ||
189 | #ifdef CONFIG_CAVIUM_RESERVE32_USE_WIRED_TLB | ||
190 | /** | ||
191 | * Called on every core to setup the wired tlb entry needed | ||
192 | * if CONFIG_CAVIUM_RESERVE32_USE_WIRED_TLB is set. | ||
193 | * | ||
194 | */ | ||
195 | static void octeon_hal_setup_per_cpu_reserved32(void *unused) | ||
196 | { | ||
197 | /* | ||
198 | * The config has selected to wire the reserve32 memory for all | ||
199 | * userspace applications. We need to put a wired TLB entry in for each | ||
200 | * 512MB of reserve32 memory. We only handle double 256MB pages here, | ||
201 | * so reserve32 must be multiple of 512MB. | ||
202 | */ | ||
203 | uint32_t size = CONFIG_CAVIUM_RESERVE32; | ||
204 | uint32_t entrylo0 = | ||
205 | 0x7 | ((octeon_reserve32_memory & ((1ul << 40) - 1)) >> 6); | ||
206 | uint32_t entrylo1 = entrylo0 + (256 << 14); | ||
207 | uint32_t entryhi = (0x80000000UL - (CONFIG_CAVIUM_RESERVE32 << 20)); | ||
208 | while (size >= 512) { | ||
209 | #if 0 | ||
210 | pr_info("CPU%d: Adding double wired TLB entry for 0x%lx\n", | ||
211 | smp_processor_id(), entryhi); | ||
212 | #endif | ||
213 | add_wired_entry(entrylo0, entrylo1, entryhi, PM_256M); | ||
214 | entrylo0 += 512 << 14; | ||
215 | entrylo1 += 512 << 14; | ||
216 | entryhi += 512 << 20; | ||
217 | size -= 512; | ||
218 | } | ||
219 | } | ||
220 | #endif /* CONFIG_CAVIUM_RESERVE32_USE_WIRED_TLB */ | ||
221 | |||
222 | /** | ||
223 | * Called to release the named block which was used to made sure | ||
224 | * that nobody used the memory for something else during | ||
225 | * init. Now we'll free it so userspace apps can use this | ||
226 | * memory region with bootmem_alloc. | ||
227 | * | ||
228 | * This function is called only once from prom_free_prom_memory(). | ||
229 | */ | ||
230 | void octeon_hal_setup_reserved32(void) | ||
231 | { | ||
232 | #ifdef CONFIG_CAVIUM_RESERVE32_USE_WIRED_TLB | ||
233 | on_each_cpu(octeon_hal_setup_per_cpu_reserved32, NULL, 0, 1); | ||
234 | #endif | ||
235 | } | ||
236 | |||
237 | /** | 189 | /** |
238 | * Reboot Octeon | 190 | * Reboot Octeon |
239 | * | 191 | * |
@@ -502,25 +454,13 @@ void __init prom_init(void) | |||
502 | * memory when it is getting memory from the | 454 | * memory when it is getting memory from the |
503 | * bootloader. Later, after the memory allocations are | 455 | * bootloader. Later, after the memory allocations are |
504 | * complete, the reserve32 will be freed. | 456 | * complete, the reserve32 will be freed. |
505 | */ | 457 | * |
506 | #ifdef CONFIG_CAVIUM_RESERVE32_USE_WIRED_TLB | ||
507 | if (CONFIG_CAVIUM_RESERVE32 & 0x1ff) | ||
508 | pr_err("CAVIUM_RESERVE32 isn't a multiple of 512MB. " | ||
509 | "This is required if CAVIUM_RESERVE32_USE_WIRED_TLB " | ||
510 | "is set\n"); | ||
511 | else | ||
512 | addr = cvmx_bootmem_phy_named_block_alloc(CONFIG_CAVIUM_RESERVE32 << 20, | ||
513 | 0, 0, 512 << 20, | ||
514 | "CAVIUM_RESERVE32", 0); | ||
515 | #else | ||
516 | /* | ||
517 | * Allocate memory for RESERVED32 aligned on 2MB boundary. This | 458 | * Allocate memory for RESERVED32 aligned on 2MB boundary. This |
518 | * is in case we later use hugetlb entries with it. | 459 | * is in case we later use hugetlb entries with it. |
519 | */ | 460 | */ |
520 | addr = cvmx_bootmem_phy_named_block_alloc(CONFIG_CAVIUM_RESERVE32 << 20, | 461 | addr = cvmx_bootmem_phy_named_block_alloc(CONFIG_CAVIUM_RESERVE32 << 20, |
521 | 0, 0, 2 << 20, | 462 | 0, 0, 2 << 20, |
522 | "CAVIUM_RESERVE32", 0); | 463 | "CAVIUM_RESERVE32", 0); |
523 | #endif | ||
524 | if (addr < 0) | 464 | if (addr < 0) |
525 | pr_err("Failed to allocate CAVIUM_RESERVE32 memory area\n"); | 465 | pr_err("Failed to allocate CAVIUM_RESERVE32 memory area\n"); |
526 | else | 466 | else |
@@ -817,9 +757,4 @@ void prom_free_prom_memory(void) | |||
817 | panic("Unable to request_irq(OCTEON_IRQ_RML)\n"); | 757 | panic("Unable to request_irq(OCTEON_IRQ_RML)\n"); |
818 | } | 758 | } |
819 | #endif | 759 | #endif |
820 | |||
821 | /* This call is here so that it is performed after any TLB | ||
822 | initializations. It needs to be after these in case the | ||
823 | CONFIG_CAVIUM_RESERVE32_USE_WIRED_TLB option is set */ | ||
824 | octeon_hal_setup_reserved32(); | ||
825 | } | 760 | } |