aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorDeepak Saxena <dsaxena@plexity.net>2005-08-29 22:54:53 +0100
committerRussell King <rmk+kernel@arm.linux.org.uk>2005-08-29 22:54:53 +0100
commit083bc6b3c9b52b5998cc49d4aa2f8f15c2e84e6b (patch)
tree935852aa0f2bee2d68d704d8007a2524189a3f4f /arch
parent3e88a579d05e1bb6c51d88f0936e372895edb8ff (diff)
downloadkernel_samsung_crespo-083bc6b3c9b52b5998cc49d4aa2f8f15c2e84e6b.zip
kernel_samsung_crespo-083bc6b3c9b52b5998cc49d4aa2f8f15c2e84e6b.tar.gz
kernel_samsung_crespo-083bc6b3c9b52b5998cc49d4aa2f8f15c2e84e6b.tar.bz2
[ARM] 2853/1: Make alloc_init_supersection() work with 36-bit mappings
Patch from Deepak Saxena Working on adding support for 36-bit static mappings for ARMv6 and Intel's XSC3 core and noticed that alloc_init_supersection currently increments the phys addr by 1MB on each of the 16 iterations and then forces alignment to supersection size (16MB). This is really uneeded b/c we have already forced the phys address to be 16MB aligned in create_mapping(). Furthermore, this breaks 36-bit addressing b/c bits [23:20] of the PMD contain bits [35:32] of the physical address and the masking causes us to loose those bits thus ending up with an incorrect virt -> phys translation. The other option is to have an alloc_init_supersection36. Tested on Intel IXP2350 CPU with 36-bit static I/O mappings. Signed-off-by: Deepak Saxena <dsaxena@plexity.net> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch')
-rw-r--r--arch/arm/mm/mm-armv.c4
1 files changed, 1 insertions, 3 deletions
diff --git a/arch/arm/mm/mm-armv.c b/arch/arm/mm/mm-armv.c
index 3c655c5..4dae00b 100644
--- a/arch/arm/mm/mm-armv.c
+++ b/arch/arm/mm/mm-armv.c
@@ -275,11 +275,9 @@ alloc_init_supersection(unsigned long virt, unsigned long phys, int prot)
int i;
for (i = 0; i < 16; i += 1) {
- alloc_init_section(virt, phys & SUPERSECTION_MASK,
- prot | PMD_SECT_SUPER);
+ alloc_init_section(virt, phys, prot | PMD_SECT_SUPER);
virt += (PGDIR_SIZE / 2);
- phys += (PGDIR_SIZE / 2);
}
}