diff options
author | Albert Herranz <albert_herranz@yahoo.es> | 2009-12-12 01:31:54 -0500 |
---|---|---|
committer | Grant Likely <grant.likely@secretlab.ca> | 2009-12-13 00:24:32 -0500 |
commit | c5df7f775148723de39274537a886e9502eef336 (patch) | |
tree | 548acbcef58b1d60308f7e7cd894d514583895a2 /arch/powerpc/mm/pgtable_32.c | |
parent | de32400dd26e743c5d500aa42d8d6818b79edb73 (diff) |
powerpc: allow ioremap within reserved memory regions
Add a flag to let a platform ioremap memory regions marked as reserved.
This flag will be used later by the Nintendo Wii support code to allow
ioremapping the I/O region sitting between MEM1 and MEM2 and marked
as reserved RAM in the patch "wii: use both mem1 and mem2 as ram".
This will no longer be needed when proper discontig memory support
for 32-bit PowerPC is added to the kernel.
Signed-off-by: Albert Herranz <albert_herranz@yahoo.es>
Acked-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
Diffstat (limited to 'arch/powerpc/mm/pgtable_32.c')
-rw-r--r-- | arch/powerpc/mm/pgtable_32.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/arch/powerpc/mm/pgtable_32.c b/arch/powerpc/mm/pgtable_32.c index b55bbe87acb8..177e4038b43c 100644 --- a/arch/powerpc/mm/pgtable_32.c +++ b/arch/powerpc/mm/pgtable_32.c | |||
@@ -26,6 +26,7 @@ | |||
26 | #include <linux/vmalloc.h> | 26 | #include <linux/vmalloc.h> |
27 | #include <linux/init.h> | 27 | #include <linux/init.h> |
28 | #include <linux/highmem.h> | 28 | #include <linux/highmem.h> |
29 | #include <linux/lmb.h> | ||
29 | 30 | ||
30 | #include <asm/pgtable.h> | 31 | #include <asm/pgtable.h> |
31 | #include <asm/pgalloc.h> | 32 | #include <asm/pgalloc.h> |
@@ -191,7 +192,8 @@ __ioremap_caller(phys_addr_t addr, unsigned long size, unsigned long flags, | |||
191 | * Don't allow anybody to remap normal RAM that we're using. | 192 | * Don't allow anybody to remap normal RAM that we're using. |
192 | * mem_init() sets high_memory so only do the check after that. | 193 | * mem_init() sets high_memory so only do the check after that. |
193 | */ | 194 | */ |
194 | if (mem_init_done && (p < virt_to_phys(high_memory))) { | 195 | if (mem_init_done && (p < virt_to_phys(high_memory)) && |
196 | !(__allow_ioremap_reserved && lmb_is_region_reserved(p, size))) { | ||
195 | printk("__ioremap(): phys addr 0x%llx is RAM lr %p\n", | 197 | printk("__ioremap(): phys addr 0x%llx is RAM lr %p\n", |
196 | (unsigned long long)p, __builtin_return_address(0)); | 198 | (unsigned long long)p, __builtin_return_address(0)); |
197 | return NULL; | 199 | return NULL; |