diff options
Diffstat (limited to 'arch/arm/mm/mmu.c')
| -rw-r--r-- | arch/arm/mm/mmu.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c index 25d9a11eb617..a713e40e1f1a 100644 --- a/arch/arm/mm/mmu.c +++ b/arch/arm/mm/mmu.c | |||
| @@ -211,6 +211,12 @@ static struct mem_type mem_types[] = { | |||
| 211 | PMD_SECT_TEX(1), | 211 | PMD_SECT_TEX(1), |
| 212 | .domain = DOMAIN_IO, | 212 | .domain = DOMAIN_IO, |
| 213 | }, | 213 | }, |
| 214 | [MT_DEVICE_WC] = { /* ioremap_wc */ | ||
| 215 | .prot_pte = PROT_PTE_DEVICE, | ||
| 216 | .prot_l1 = PMD_TYPE_TABLE, | ||
| 217 | .prot_sect = PROT_SECT_DEVICE, | ||
| 218 | .domain = DOMAIN_IO, | ||
| 219 | }, | ||
| 214 | [MT_CACHECLEAN] = { | 220 | [MT_CACHECLEAN] = { |
| 215 | .prot_sect = PMD_TYPE_SECT | PMD_SECT_XN, | 221 | .prot_sect = PMD_TYPE_SECT | PMD_SECT_XN, |
| 216 | .domain = DOMAIN_KERNEL, | 222 | .domain = DOMAIN_KERNEL, |
| @@ -273,6 +279,20 @@ static void __init build_mem_type_table(void) | |||
| 273 | } | 279 | } |
| 274 | 280 | ||
| 275 | /* | 281 | /* |
| 282 | * On non-Xscale3 ARMv5-and-older systems, use CB=01 | ||
| 283 | * (Uncached/Buffered) for ioremap_wc() mappings. On XScale3 | ||
| 284 | * and ARMv6+, use TEXCB=00100 mappings (Inner/Outer Uncacheable | ||
| 285 | * in xsc3 parlance, Uncached Normal in ARMv6 parlance). | ||
| 286 | */ | ||
| 287 | if (cpu_is_xsc3() || cpu_arch >= CPU_ARCH_ARMv6) { | ||
| 288 | mem_types[MT_DEVICE_WC].prot_pte_ext |= PTE_EXT_TEX(1); | ||
| 289 | mem_types[MT_DEVICE_WC].prot_sect |= PMD_SECT_TEX(1); | ||
| 290 | } else { | ||
| 291 | mem_types[MT_DEVICE_WC].prot_pte |= L_PTE_BUFFERABLE; | ||
| 292 | mem_types[MT_DEVICE_WC].prot_sect |= PMD_SECT_BUFFERABLE; | ||
| 293 | } | ||
| 294 | |||
| 295 | /* | ||
| 276 | * ARMv5 and lower, bit 4 must be set for page tables. | 296 | * ARMv5 and lower, bit 4 must be set for page tables. |
| 277 | * (was: cache "update-able on write" bit on ARM610) | 297 | * (was: cache "update-able on write" bit on ARM610) |
| 278 | * However, Xscale cores require this bit to be cleared. | 298 | * However, Xscale cores require this bit to be cleared. |
