aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorRussell King <rmk@dyn-67.arm.linux.org.uk>2007-04-21 04:59:44 -0400
committerRussell King <rmk+kernel@arm.linux.org.uk>2007-04-21 15:35:44 -0400
commit2497f0a8125e307cf1fd4222bab53f66305eba27 (patch)
tree44973e86c9b5c4f471586acf0207ab13ccb1f6d8 /arch
parent235b185ce47ce64793362bd3ae4bcd8afc6b57b8 (diff)
[ARM] mm 1: Combine mem_type domain into prot_* at init time
Rather than combining the domain for a particular memory type with the protection information each time we want to use it, do so when we fix up the mem_type array at initialisation time. Rename struct mem_types to be mem_type - each structure is one memory type description, not several. Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch')
-rw-r--r--arch/arm/mm/mmu.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c
index 94fd4bf5cb9e..6178be0242f2 100644
--- a/arch/arm/mm/mmu.c
+++ b/arch/arm/mm/mmu.c
@@ -176,14 +176,14 @@ void adjust_cr(unsigned long mask, unsigned long set)
176} 176}
177#endif 177#endif
178 178
179struct mem_types { 179struct mem_type {
180 unsigned int prot_pte; 180 unsigned int prot_pte;
181 unsigned int prot_l1; 181 unsigned int prot_l1;
182 unsigned int prot_sect; 182 unsigned int prot_sect;
183 unsigned int domain; 183 unsigned int domain;
184}; 184};
185 185
186static struct mem_types mem_types[] __initdata = { 186static struct mem_type mem_types[] __initdata = {
187 [MT_DEVICE] = { 187 [MT_DEVICE] = {
188 .prot_pte = L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_DIRTY | 188 .prot_pte = L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_DIRTY |
189 L_PTE_WRITE, 189 L_PTE_WRITE,
@@ -368,6 +368,14 @@ static void __init build_mem_type_table(void)
368 } 368 }
369 printk("Memory policy: ECC %sabled, Data cache %s\n", 369 printk("Memory policy: ECC %sabled, Data cache %s\n",
370 ecc_mask ? "en" : "dis", cp->policy); 370 ecc_mask ? "en" : "dis", cp->policy);
371
372 for (i = 0; i < ARRAY_SIZE(mem_types); i++) {
373 struct mem_type *t = &mem_types[i];
374 if (t->prot_l1)
375 t->prot_l1 |= PMD_DOMAIN(t->domain);
376 if (t->prot_sect)
377 t->prot_sect |= PMD_DOMAIN(t->domain);
378 }
371} 379}
372 380
373#define vectors_base() (vectors_high() ? 0xffff0000 : 0) 381#define vectors_base() (vectors_high() ? 0xffff0000 : 0)
@@ -458,8 +466,8 @@ void __init create_mapping(struct map_desc *md)
458 466
459 domain = mem_types[md->type].domain; 467 domain = mem_types[md->type].domain;
460 prot_pte = __pgprot(mem_types[md->type].prot_pte); 468 prot_pte = __pgprot(mem_types[md->type].prot_pte);
461 prot_l1 = mem_types[md->type].prot_l1 | PMD_DOMAIN(domain); 469 prot_l1 = mem_types[md->type].prot_l1;
462 prot_sect = mem_types[md->type].prot_sect | PMD_DOMAIN(domain); 470 prot_sect = mem_types[md->type].prot_sect;
463 471
464 /* 472 /*
465 * Catch 36-bit addresses 473 * Catch 36-bit addresses