[ARM] Set bit 4 on section mappings correctly depending on CPU
[linux-3.10.git] / include / asm-arm / pgtable-hwdef.h
1 /*
2  *  linux/include/asm-arm/pgtable-hwdef.h
3  *
4  *  Copyright (C) 1995-2002 Russell King
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License version 2 as
8  * published by the Free Software Foundation.
9  */
10 #ifndef _ASMARM_PGTABLE_HWDEF_H
11 #define _ASMARM_PGTABLE_HWDEF_H
12
13 /*
14  * Hardware page table definitions.
15  *
16  * + Level 1 descriptor (PMD)
17  *   - common
18  */
19 #define PMD_TYPE_MASK           (3 << 0)
20 #define PMD_TYPE_FAULT          (0 << 0)
21 #define PMD_TYPE_TABLE          (1 << 0)
22 #define PMD_TYPE_SECT           (2 << 0)
23 #define PMD_BIT4                (1 << 4)
24 #define PMD_DOMAIN(x)           ((x) << 5)
25 #define PMD_PROTECTION          (1 << 9)        /* v5 */
26 /*
27  *   - section
28  */
29 #define PMD_SECT_BUFFERABLE     (1 << 2)
30 #define PMD_SECT_CACHEABLE      (1 << 3)
31 #define PMD_SECT_XN             (1 << 4)        /* v6 */
32 #define PMD_SECT_AP_WRITE       (1 << 10)
33 #define PMD_SECT_AP_READ        (1 << 11)
34 #define PMD_SECT_TEX(x)         ((x) << 12)     /* v5 */
35 #define PMD_SECT_APX            (1 << 15)       /* v6 */
36 #define PMD_SECT_S              (1 << 16)       /* v6 */
37 #define PMD_SECT_nG             (1 << 17)       /* v6 */
38 #define PMD_SECT_SUPER          (1 << 18)       /* v6 */
39
40 #define PMD_SECT_UNCACHED       (0)
41 #define PMD_SECT_BUFFERED       (PMD_SECT_BUFFERABLE)
42 #define PMD_SECT_WT             (PMD_SECT_CACHEABLE)
43 #define PMD_SECT_WB             (PMD_SECT_CACHEABLE | PMD_SECT_BUFFERABLE)
44 #define PMD_SECT_MINICACHE      (PMD_SECT_TEX(1) | PMD_SECT_CACHEABLE)
45 #define PMD_SECT_WBWA           (PMD_SECT_TEX(1) | PMD_SECT_CACHEABLE | PMD_SECT_BUFFERABLE)
46 #define PMD_SECT_NONSHARED_DEV  (PMD_SECT_TEX(2))
47
48 /*
49  *   - coarse table (not used)
50  */
51
52 /*
53  * + Level 2 descriptor (PTE)
54  *   - common
55  */
56 #define PTE_TYPE_MASK           (3 << 0)
57 #define PTE_TYPE_FAULT          (0 << 0)
58 #define PTE_TYPE_LARGE          (1 << 0)
59 #define PTE_TYPE_SMALL          (2 << 0)
60 #define PTE_TYPE_EXT            (3 << 0)        /* v5 */
61 #define PTE_BUFFERABLE          (1 << 2)
62 #define PTE_CACHEABLE           (1 << 3)
63
64 /*
65  *   - extended small page/tiny page
66  */
67 #define PTE_EXT_XN              (1 << 0)        /* v6 */
68 #define PTE_EXT_AP_MASK         (3 << 4)
69 #define PTE_EXT_AP0             (1 << 4)
70 #define PTE_EXT_AP1             (2 << 4)
71 #define PTE_EXT_AP_UNO_SRO      (0 << 4)
72 #define PTE_EXT_AP_UNO_SRW      (PTE_EXT_AP0)
73 #define PTE_EXT_AP_URO_SRW      (PTE_EXT_AP1)
74 #define PTE_EXT_AP_URW_SRW      (PTE_EXT_AP1|PTE_EXT_AP0)
75 #define PTE_EXT_TEX(x)          ((x) << 6)      /* v5 */
76 #define PTE_EXT_APX             (1 << 9)        /* v6 */
77 #define PTE_EXT_COHERENT        (1 << 9)        /* XScale3 */
78 #define PTE_EXT_SHARED          (1 << 10)       /* v6 */
79 #define PTE_EXT_NG              (1 << 11)       /* v6 */
80
81 /*
82  *   - small page
83  */
84 #define PTE_SMALL_AP_MASK       (0xff << 4)
85 #define PTE_SMALL_AP_UNO_SRO    (0x00 << 4)
86 #define PTE_SMALL_AP_UNO_SRW    (0x55 << 4)
87 #define PTE_SMALL_AP_URO_SRW    (0xaa << 4)
88 #define PTE_SMALL_AP_URW_SRW    (0xff << 4)
89
90 #endif