tizen 2.4 release
[profile/mobile/platform/kernel/u-boot-tm1.git] / arch / arm / include / asm / arch-sc8800g / mmu_drvapi.h
1 /******************************************************************************
2  ** File Name:    mmu_drvapi.h                                                    *
3  ** Author:       Daniel.Ding                                                 *
4  ** DATE:         8/16/2010                                                    *
5  ** Copyright:    2010 Spreatrum, Incoporated. All Rights Reserved.           *
6  ** Description:                                                              *
7  ******************************************************************************/
8 /******************************************************************************
9  **                   Edit    History                                         *
10  **---------------------------------------------------------------------------*
11  ** DATE          NAME            DESCRIPTION                                 *
12  ** 8/16/2010     steve.zhan      Create.                                     *
13  ******************************************************************************/
14 #ifndef _MMU_DRVAPI_H_
15 #define _MMU_DRVAPI_H_
16 /*----------------------------------------------------------------------------*
17  **                         Dependencies                                      *
18  **-------------------------------------------------------------------------- */
19
20 /**---------------------------------------------------------------------------*
21  **                             Compiler Flag                                 *
22  **---------------------------------------------------------------------------*/
23 #ifdef   __cplusplus
24 extern   "C"
25 {
26 #endif
27 /**----------------------------------------------------------------------------*
28 **                               Micro Define                                 **
29 **----------------------------------------------------------------------------*/
30 #define  MMU_PGD_ITEM_NUM    0x1000
31
32 typedef uint32   PGD_T;
33 typedef uint32   PTE_T;
34 typedef unsigned long pgdir_t;
35
36
37 /**----------------------------------------------------------------------------*
38 **                             Data Prototype                                 **
39 **----------------------------------------------------------------------------*/
40
41 typedef enum
42 {
43     MMU_SECTION_MAPPING = 0x00002,
44     MMU_LARGE_PAGE_MAPPING_COARSE = 0x11,
45     MMU_SMALL_PAGE_MAPPING_COARSE = 0x21,
46
47     MMU_LARGE_PAGE_MAPPING_FINE = 0x13,
48     MMU_SMALL_PAGE_MAPPING_FINE =0x23,
49     MMU_TINY_PAGE_MAPPING_FINE = 0x33,
50
51     MMU_FAULT_PAGE = 0x0000
52 } MMU_MapType_E;
53
54 #define PTE_TYPE_MASK2(x) ((x & 0xf0)>>4)
55 #define GET_PGTABLE_TYPE(x)     (x&0x3)
56
57 /* access permission */
58 typedef enum
59 {
60     MMU_AP_NO_ACCESS  =0,//control by S, R bits
61     MMU_AP_SVC_R      =0,
62     MMU_AP_SVC_RW     =0x1,
63     MMU_AP_NO_USR_W   =0x2,
64     MMU_AP_ALL_ACCESS =0x3,
65     MMU_AP_INVALID_PG =0x4
66 } MMU_AccessP_E;
67
68
69 /* cache and buffer */
70 typedef enum
71 {
72     PAGE_CB_UNCACHED = 0,         /* uncached/unbuffered */
73     PAGE_CB_BUFFERED = 0x1,       /* uncached/buffered */
74     PAGE_CB_WT = 0x2,             /* write through */
75     PAGE_CB_WB =0x3               /* write back */
76 } MMU_CacheAttr_E;
77
78 typedef enum
79 {
80     MMU_DOMAIN_CLIENT_ACCESS = 0,
81     MMU_DOMAIN_ALL_ACCESS    = 1 ,
82     MMU_DOMAIN_NO_ACCESS = 2 ,
83     MMU_DOMAIN_3 ,
84     MMU_DOMAIN_4 ,
85     MMU_DOMAIN_5 ,
86     MMU_DOMAIN_6 ,
87     MMU_DOMAIN_7 ,
88     MMU_DOMAIN_8 ,
89     MMU_DOMAIN_9 ,
90     MMU_DOMAIN_10 ,
91     MMU_DOMAIN_11 ,
92     MMU_DOMAIN_12 ,
93     MMU_DOMAIN_13 ,
94     MMU_DOMAIN_14 ,
95     MMU_DOMAIN_15 ,
96     MMU_NUM_DOMAINS
97 } MMU_Domain_E;
98
99 typedef struct  MMU_MMAP_CFG_Tag
100 {
101     uint32    vm_addr;
102     uint32    phy_addr;
103     uint32    size_kbytes;
104     MMU_MapType_E   map_type;
105
106     MMU_AccessP_E   ap[4];
107
108     MMU_CacheAttr_E  cache_attr;
109     MMU_Domain_E  domain;
110 } MMU_MMAP_CFG_T;
111
112
113 /**----------------------------------------------------------------------------*
114 **                         Local Function Prototype                           **
115 **----------------------------------------------------------------------------*/
116
117 PUBLIC void VM_Init (void);
118 PUBLIC BOOLEAN VM_IsDPSection (uint32 addr);
119 /*****************************************************************************/
120 //  Description:   Change MMU setting in assert mode
121 //  Global resource dependence:
122 //  Author:         Liangwen.zhen
123 //  Note:
124 /*****************************************************************************/
125 PUBLIC void MMU_AlignFaultDisable (void);
126 PUBLIC void MMU_AlignFaultEnable (void);
127
128
129 typedef BOOLEAN (* MMU_FAULT_CALLBACK) (uint32, void *);
130 typedef enum
131 {
132     PREFETCH_FAULT,
133     I_ABORT_FAULT,
134     MMU_FAULT_MAX//Pls don't modify this.
135 } MMU_FAULT_TYPE_E;
136
137 BOOLEAN MMU_HandlePrefetch (uint32 r14_abt);
138 BOOLEAN MMU_HandleAbort (uint32 dfsr_reg, uint32 far_reg);
139 PUBLIC BOOLEAN MMU_FaultRegCallback (MMU_FAULT_TYPE_E type, MMU_FAULT_CALLBACK func);
140
141
142 typedef struct
143 {
144     uint32 map_item_cnt;
145     MMU_MMAP_CFG_T *map_p;
146
147 } MMU_CFG_TABLE_T;
148
149
150 /*****************************************************************************/
151 //  Description : Set mmu tlb address before using mmu any api.
152 //  Note:   if ony MMU SECTION is specified, you can specify NULL and 0 for "PageTableEntery"
153 //          and "PageTableSize"
154 //  Global resource dependence :
155 //  Author: steve.zhan
156 //  Note:
157 /*****************************************************************************/
158 PUBLIC void MMU_SetPageAddr (uint32 *PageTlbAddr, uint32 *PageTableEntery, uint32 PageTableSize);
159
160
161 /*****************************************************************************/
162 //  Description : Set memory region Area. According to the compiler generates
163 //  Note:   if no data is specified, you can specify NULL and 0.
164 //  Global resource dependence :
165 //  Author: steve.zhan
166 //  Note:
167 /*****************************************************************************/
168 PUBLIC void MMU_PHY_SetMemRegionMap (MMU_MMAP_CFG_T *pM,uint32 item_num);
169
170
171 /*****************************************************************************/
172 //  Description : Special area. For example, if need ro area IN RW section(come
173 //                from compiler linking) Or need rw area IN RO section(come from
174 //                compiler linking), you can list in the table, as a special
175 //                section dealing with.
176 //  Note:   if no data is specified, you can specify NULL and 0.
177 //  Global resource dependence :
178 //  Author: steve.zhan
179 //  Note:
180 /*****************************************************************************/
181 PUBLIC void MMU_PHY_SetSpecialRegionMap (MMU_MMAP_CFG_T *pS,uint32 item_num);
182
183
184
185 /*****************************************************************************/
186 //  Description : Set Read Only Region. If you need to make an Ro section, changing
187 //                between in the RO and RW, you can specify in the table.
188 //  Note:   if no data is specified, you can specify NULL and 0.
189 //  Global resource dependence :
190 //  Author: steve.zhan
191 //  Note:
192 /*****************************************************************************/
193 PUBLIC void MMU_PHY_SetProtectRoRegion (MMU_MMAP_CFG_T *pP,uint32 item_num);
194
195 PUBLIC void MMU_Init (void);
196 PUBLIC void MMU_Enable (void);
197 PUBLIC void MMU_Disable (void);
198 PUBLIC uint32  MMU_Map_Section_Page (MMU_MMAP_CFG_T *map_cfg);
199 PUBLIC uint32  MMU_Map_Page (MMU_MMAP_CFG_T *map_cfg, MMU_MapType_E PageType);
200 PUBLIC void MMU_ProtectRoRegion (uint32 isprotected);
201 PUBLIC void MMU_IcacheSync (void);
202 PUBLIC void MMU_DcacheSync (void);
203 PUBLIC void MMU_CacheOn (uint32 i, uint32 d);
204 PUBLIC void MMU_CacheOff (uint32 i, uint32 d);
205 PUBLIC void MMU_InvalideDCACHE (void);
206 PUBLIC void MMU_EnableICacheOnly(void);
207
208 /*****************************************************************************/
209 // Description :    This function delay some ticks .
210 // // Global resource dependence :
211 // // Author :         Daniel.ding
212 // // Note :
213 // /*****************************************************************************/
214 PUBLIC void MMU_InvalideDCACHE (void);
215
216
217 /**----------------------------------------------------------------------------*
218 **                         Compiler Flag                                      **
219 **----------------------------------------------------------------------------*/
220 #ifdef   __cplusplus
221 }
222 #endif
223 /**---------------------------------------------------------------------------*/
224 #endif // _MMU_DRVAPI_H_