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>
This commit is contained in:

zatwierdzone przez
Grant Likely

rodzic
de32400dd2
commit
c5df7f7751
@@ -82,6 +82,11 @@ extern struct task_struct *current_set[NR_CPUS];
|
||||
int __map_without_bats;
|
||||
int __map_without_ltlbs;
|
||||
|
||||
/*
|
||||
* This tells the system to allow ioremapping memory marked as reserved.
|
||||
*/
|
||||
int __allow_ioremap_reserved;
|
||||
|
||||
/* max amount of low RAM to map in */
|
||||
unsigned long __max_low_memory = MAX_LOW_MEM;
|
||||
|
||||
|
@@ -115,6 +115,7 @@ extern void settlbcam(int index, unsigned long virt, phys_addr_t phys,
|
||||
extern void invalidate_tlbcam_entry(int index);
|
||||
|
||||
extern int __map_without_bats;
|
||||
extern int __allow_ioremap_reserved;
|
||||
extern unsigned long ioremap_base;
|
||||
extern unsigned int rtas_data, rtas_size;
|
||||
|
||||
|
@@ -26,6 +26,7 @@
|
||||
#include <linux/vmalloc.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/highmem.h>
|
||||
#include <linux/lmb.h>
|
||||
|
||||
#include <asm/pgtable.h>
|
||||
#include <asm/pgalloc.h>
|
||||
@@ -191,7 +192,8 @@ __ioremap_caller(phys_addr_t addr, unsigned long size, unsigned long flags,
|
||||
* Don't allow anybody to remap normal RAM that we're using.
|
||||
* mem_init() sets high_memory so only do the check after that.
|
||||
*/
|
||||
if (mem_init_done && (p < virt_to_phys(high_memory))) {
|
||||
if (mem_init_done && (p < virt_to_phys(high_memory)) &&
|
||||
!(__allow_ioremap_reserved && lmb_is_region_reserved(p, size))) {
|
||||
printk("__ioremap(): phys addr 0x%llx is RAM lr %p\n",
|
||||
(unsigned long long)p, __builtin_return_address(0));
|
||||
return NULL;
|
||||
|
Reference in New Issue
Block a user