From: Deepak Saxena Date: Mon, 29 Aug 2005 21:54:53 +0000 (+0100) Subject: [ARM] 2853/1: Make alloc_init_supersection() work with 36-bit mappings X-Git-Tag: v2.6.14-rc1~1020^2~4 X-Git-Url: http://pilppa.com/gitweb/?a=commitdiff_plain;h=083bc6b3c9b52b5998cc49d4aa2f8f15c2e84e6b;p=linux-2.6-omap-h63xx.git [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 Signed-off-by: Russell King --- diff --git a/arch/arm/mm/mm-armv.c b/arch/arm/mm/mm-armv.c index 3c655c54e23..4dae00bf7a5 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); } }