|
@@ -247,6 +247,9 @@ static struct mem_type mem_types[] = {
|
|
|
.domain = DOMAIN_USER,
|
|
|
},
|
|
|
[MT_MEMORY] = {
|
|
|
+ .prot_pte = L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_DIRTY |
|
|
|
+ L_PTE_USER | L_PTE_EXEC,
|
|
|
+ .prot_l1 = PMD_TYPE_TABLE,
|
|
|
.prot_sect = PMD_TYPE_SECT | PMD_SECT_AP_WRITE,
|
|
|
.domain = DOMAIN_KERNEL,
|
|
|
},
|
|
@@ -255,6 +258,9 @@ static struct mem_type mem_types[] = {
|
|
|
.domain = DOMAIN_KERNEL,
|
|
|
},
|
|
|
[MT_MEMORY_NONCACHED] = {
|
|
|
+ .prot_pte = L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_DIRTY |
|
|
|
+ L_PTE_USER | L_PTE_EXEC | L_PTE_MT_BUFFERABLE,
|
|
|
+ .prot_l1 = PMD_TYPE_TABLE,
|
|
|
.prot_sect = PMD_TYPE_SECT | PMD_SECT_AP_WRITE,
|
|
|
.domain = DOMAIN_KERNEL,
|
|
|
},
|
|
@@ -412,9 +418,12 @@ static void __init build_mem_type_table(void)
|
|
|
* Enable CPU-specific coherency if supported.
|
|
|
* (Only available on XSC3 at the moment.)
|
|
|
*/
|
|
|
- if (arch_is_coherent() && cpu_is_xsc3())
|
|
|
+ if (arch_is_coherent() && cpu_is_xsc3()) {
|
|
|
mem_types[MT_MEMORY].prot_sect |= PMD_SECT_S;
|
|
|
-
|
|
|
+ mem_types[MT_MEMORY].prot_pte |= L_PTE_SHARED;
|
|
|
+ mem_types[MT_MEMORY_NONCACHED].prot_sect |= PMD_SECT_S;
|
|
|
+ mem_types[MT_MEMORY_NONCACHED].prot_pte |= L_PTE_SHARED;
|
|
|
+ }
|
|
|
/*
|
|
|
* ARMv6 and above have extended page tables.
|
|
|
*/
|
|
@@ -439,7 +448,9 @@ static void __init build_mem_type_table(void)
|
|
|
mem_types[MT_DEVICE_CACHED].prot_sect |= PMD_SECT_S;
|
|
|
mem_types[MT_DEVICE_CACHED].prot_pte |= L_PTE_SHARED;
|
|
|
mem_types[MT_MEMORY].prot_sect |= PMD_SECT_S;
|
|
|
+ mem_types[MT_MEMORY].prot_pte |= L_PTE_SHARED;
|
|
|
mem_types[MT_MEMORY_NONCACHED].prot_sect |= PMD_SECT_S;
|
|
|
+ mem_types[MT_MEMORY_NONCACHED].prot_pte |= L_PTE_SHARED;
|
|
|
#endif
|
|
|
}
|
|
|
|
|
@@ -476,6 +487,8 @@ static void __init build_mem_type_table(void)
|
|
|
mem_types[MT_LOW_VECTORS].prot_l1 |= ecc_mask;
|
|
|
mem_types[MT_HIGH_VECTORS].prot_l1 |= ecc_mask;
|
|
|
mem_types[MT_MEMORY].prot_sect |= ecc_mask | cp->pmd;
|
|
|
+ mem_types[MT_MEMORY].prot_pte |= kern_pgprot;
|
|
|
+ mem_types[MT_MEMORY_NONCACHED].prot_sect |= ecc_mask;
|
|
|
mem_types[MT_ROM].prot_sect |= cp->pmd;
|
|
|
|
|
|
switch (cp->pmd) {
|