]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blob - arch/arm/mach-omap2/mmu.h
ARM:OMAP: Add initial TWL support for non-MPU MMU framework
[linux-2.6-omap-h63xx.git] / arch / arm / mach-omap2 / mmu.h
1 #ifndef __MACH_OMAP2_MMU_H
2 #define __MACH_OMAP2_MMU_H
3
4 #include "prcm-regs.h"
5 #include <asm/arch/mmu.h>
6 #include <asm/io.h>
7
8 #define MMU_LOCK_BASE_MASK              (0x1f << 10)
9 #define MMU_LOCK_VICTIM_MASK            (0x1f << 4)
10
11 #define OMAP_MMU_IRQ_MULTIHITFAULT      0x00000010
12 #define OMAP_MMU_IRQ_TABLEWALKFAULT     0x00000008
13 #define OMAP_MMU_IRQ_EMUMISS            0x00000004
14 #define OMAP_MMU_IRQ_TRANSLATIONFAULT   0x00000002
15 #define OMAP_MMU_IRQ_TLBMISS            0x00000001
16
17 #define OMAP_MMU_CAM_VATAG_MASK         0xfffff000
18 #define OMAP_MMU_CAM_P                  0x00000008
19 #define OMAP_MMU_CAM_V                  0x00000004
20 #define OMAP_MMU_CAM_PAGESIZE_MASK      0x00000003
21 #define OMAP_MMU_CAM_PAGESIZE_1MB       0x00000000
22 #define OMAP_MMU_CAM_PAGESIZE_64KB      0x00000001
23 #define OMAP_MMU_CAM_PAGESIZE_4KB       0x00000002
24 #define OMAP_MMU_CAM_PAGESIZE_16MB      0x00000003
25
26 #define OMAP_MMU_RAM_PADDR_MASK         0xfffff000
27 #define OMAP_MMU_RAM_ENDIANNESS         0x00000200
28 #define OMAP_MMU_RAM_ENDIANNESS_BIG     0x00000200
29 #define OMAP_MMU_RAM_ENDIANNESS_LITTLE  0x00000000
30 #define OMAP_MMU_RAM_ELEMENTSIZE_MASK   0x00000180
31 #define OMAP_MMU_RAM_ELEMENTSIZE_8      0x00000000
32 #define OMAP_MMU_RAM_ELEMENTSIZE_16     0x00000080
33 #define OMAP_MMU_RAM_ELEMENTSIZE_32     0x00000100
34 #define OMAP_MMU_RAM_ELEMENTSIZE_NONE   0x00000180
35 #define OMAP_MMU_RAM_MIXED              0x00000040
36
37 #define IOMAP_VAL       0x3f
38
39 #define omap_dsp_request_mem()  do { } while (0)
40 #define omap_dsp_release_mem()  do { } while (0)
41
42 #define INIT_TLB_ENTRY(ent,v,p,ps)                              \
43 do {                                                            \
44         (ent)->va       = (v);                                  \
45         (ent)->pa       = (p);                                  \
46         (ent)->pgsz     = (ps);                                 \
47         (ent)->prsvd    = 0;                                    \
48         (ent)->endian   = OMAP_MMU_RAM_ENDIANNESS_LITTLE;       \
49         (ent)->elsz     = OMAP_MMU_RAM_ELEMENTSIZE_16;          \
50         (ent)->mixed    = 0;                                    \
51         (ent)->tlb      = 1;                                    \
52 } while (0)
53
54 #define INIT_TLB_ENTRY_4KB_PRESERVED(ent,v,p) \
55 do {                                                            \
56         (ent)->va       = (v);                                  \
57         (ent)->pa       = (p);                                  \
58         (ent)->pgsz     = OMAP_MMU_CAM_PAGESIZE_4KB;            \
59         (ent)->prsvd    = OMAP_MMU_CAM_P;                       \
60         (ent)->endian   = OMAP_MMU_RAM_ENDIANNESS_LITTLE;       \
61         (ent)->elsz     = OMAP_MMU_RAM_ELEMENTSIZE_16;          \
62         (ent)->mixed    = 0;                                    \
63 } while (0)
64
65 #define INIT_TLB_ENTRY_4KB_ES32_PRESERVED(ent,v,p)              \
66 do {                                                            \
67         (ent)->va       = (v);                                  \
68         (ent)->pa       = (p);                                  \
69         (ent)->pgsz     = OMAP_MMU_CAM_PAGESIZE_4KB;            \
70         (ent)->prsvd    = OMAP_MMU_CAM_P;                       \
71         (ent)->endian   = OMAP_MMU_RAM_ENDIANNESS_LITTLE;       \
72         (ent)->elsz     = OMAP_MMU_RAM_ELEMENTSIZE_32;          \
73         (ent)->mixed    = 0;                                    \
74 } while (0)
75
76 extern struct omap_mmu_ops omap2_mmu_ops;
77
78 struct omap_mmu_tlb_entry {
79         unsigned long va;
80         unsigned long pa;
81         unsigned int pgsz, prsvd, valid;
82
83         u32 endian, elsz, mixed;
84         unsigned int tlb;
85 };
86
87 static inline unsigned long
88 omap_mmu_read_reg(struct omap_mmu *mmu, unsigned long reg)
89 {
90         return __raw_readl(mmu->base + reg);
91 }
92
93 static inline void omap_mmu_write_reg(struct omap_mmu *mmu,
94                                unsigned long val, unsigned long reg)
95 {
96         __raw_writel(val, mmu->base + reg);
97 }
98 static inline void omap_mmu_itack(struct omap_mmu *mmu)
99 {
100 }
101 #endif /* __MACH_OMAP2_MMU_H */