]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blob - arch/arm/mach-omap2/mmu.h
6e721fdabe7373f4ee86b2b23e54b0544d205eae
[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 } while (0)
52
53 #define INIT_TLB_ENTRY_4KB_PRESERVED(ent,v,p) \
54 do {                                                            \
55         (ent)->va       = (v);                                  \
56         (ent)->pa       = (p);                                  \
57         (ent)->pgsz     = OMAP_MMU_CAM_PAGESIZE_4KB;            \
58         (ent)->prsvd    = OMAP_MMU_CAM_P;                       \
59         (ent)->endian   = OMAP_MMU_RAM_ENDIANNESS_LITTLE;       \
60         (ent)->elsz     = OMAP_MMU_RAM_ELEMENTSIZE_16;          \
61         (ent)->mixed    = 0;                                    \
62 } while (0)
63
64 #define INIT_TLB_ENTRY_4KB_ES32_PRESERVED(ent,v,p)              \
65 do {                                                            \
66         (ent)->va       = (v);                                  \
67         (ent)->pa       = (p);                                  \
68         (ent)->pgsz     = OMAP_MMU_CAM_PAGESIZE_4KB;            \
69         (ent)->prsvd    = OMAP_MMU_CAM_P;                       \
70         (ent)->endian   = OMAP_MMU_RAM_ENDIANNESS_LITTLE;       \
71         (ent)->elsz     = OMAP_MMU_RAM_ELEMENTSIZE_32;          \
72         (ent)->mixed    = 0;                                    \
73 } while (0)
74
75 extern struct omap_mmu_ops omap2_mmu_ops;
76
77 struct omap_mmu_tlb_entry {
78         unsigned long va;
79         unsigned long pa;
80         unsigned int pgsz, prsvd, valid;
81
82         u32 endian, elsz, mixed;
83 };
84
85 static inline unsigned long
86 omap_mmu_read_reg(struct omap_mmu *mmu, unsigned long reg)
87 {
88         return __raw_readl(mmu->base + reg);
89 }
90
91 static inline void omap_mmu_write_reg(struct omap_mmu *mmu,
92                                unsigned long val, unsigned long reg)
93 {
94         __raw_writel(val, mmu->base + reg);
95 }
96 static inline void omap_mmu_itack(struct omap_mmu *mmu)
97 {
98 }
99 #endif /* __MACH_OMAP2_MMU_H */