tizen 2.4 release
[profile/mobile/platform/kernel/linux-3.10-sc7730.git] / drivers / media / sprd_gsp / gsp_config_if.h
1 /*\r
2  * Copyright (C) 2012 Spreadtrum Communications Inc.\r
3  *\r
4  * This software is licensed under the terms of the GNU General Public\r
5  * License version 2, as published by the Free Software Foundation, and\r
6  * may be copied, distributed, and modified under those terms.\r
7  *\r
8  * This program is distributed in the hope that it will be useful,\r
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
11  * GNU General Public License for more details.\r
12  */\r
13 \r
14 #ifndef __GSP_CONFIG_IF_H_\r
15 #define __GSP_CONFIG_IF_H_\r
16 \r
17 #ifdef __cplusplus\r
18 extern   "C"\r
19 {\r
20 #endif\r
21 \r
22     /**---------------------------------------------------------------------------*\r
23      **                         Dependencies                                      *\r
24      **---------------------------------------------------------------------------*/\r
25 \r
26 \r
27 #include <video/gsp_types_shark.h>\r
28 #include <soc/sprd/hardware.h>\r
29 #include <soc/sprd/sci_glb_regs.h>\r
30 #include <soc/sprd/globalregs.h> //define IRQ_GSP_INT\r
31 #include <soc/sprd/sci.h>\r
32 #include <linux/delay.h>\r
33 #include <linux/clk.h>\r
34 #include "gsp_drv_common.h"\r
35 \r
36 //#include "shark_reg_int.h" //for INT1_IRQ_EN\r
37 \r
38 \r
39 \r
40     /**---------------------------------------------------------------------------*\r
41      **                         struct Definition                              *\r
42      **---------------------------------------------------------------------------*/\r
43 \r
44     typedef struct _GSP_LAYER1_REG_T_TAG_\r
45     {\r
46         union _GSP_LAYER1_CFG_TAG gsp_layer1_cfg_u;\r
47         union _GSP_LAYER1_Y_ADDR_TAG gsp_layer1_y_addr_u;\r
48         union _GSP_LAYER1_UV_ADDR_TAG gsp_layer1_uv_addr_u;\r
49         union _GSP_LAYER1_VA_ADDR_TAG gsp_layer1_va_addr_u;\r
50         union _GSP_LAYER1_PITCH_TAG gsp_layer1_pitch_u;\r
51         union _GSP_LAYER1_CLIP_START_TAG gsp_layer1_clip_start_u;\r
52         union _GSP_LAYER1_CLIP_SIZE_TAG gsp_layer1_clip_size_u;\r
53         union _GSP_LAYER1_DES_START_TAG gsp_layer1_des_start_u;\r
54         union _GSP_LAYER1_GREY_RGB_TAG gsp_layer1_grey_rgb_u;\r
55         union _GSP_LAYER1_ENDIAN_TAG gsp_layer1_endian_u;\r
56         union _GSP_LAYER1_ALPHA_TAG gsp_layer1_alpha_u;\r
57         union _GSP_LAYER1_CK_TAG gsp_layer1_ck_u;\r
58     }\r
59     GSP_LAYER1_REG_T;\r
60 \r
61     typedef struct _GSP_CMDQ_REG_T_TAG_\r
62     {\r
63         union _GSP_CMD_ADDR_TAG gsp_cmd_addr_u;\r
64         union _GSP_CMD_CFG_TAG gsp_cmd_cfg_u;\r
65     }\r
66     GSP_CMDQ_REG_T;\r
67 \r
68 #define GSP_L1_CMDQ_SET(cfg)\\r
69                 *(GSP_CMDQ_REG_T*)(&((volatile GSP_REG_T*)GSP_REG_BASE)->gsp_cmd_addr_u) = (cfg)\r
70 \r
71 \r
72     /**---------------------------------------------------------------------------*\r
73      **                         Macro Definition                              *\r
74      **---------------------------------------------------------------------------*/\r
75 \r
76 \r
77 #ifdef CONFIG_FPGA\r
78 //GSP job config relative\r
79 #define GSP_MOD_EN          (SPRD_AHB_BASE)\r
80 #define GSP_SOFT_RESET      (SPRD_AHB_BASE + 0x04)\r
81 \r
82 //GSP DDR access relative\r
83 //#define SPRD_AONAPB_PHYS              0X402E0000\r
84 #define GSP_EMC_MATRIX_BASE             (SPRD_AONAPB_BASE + 0x04) // GSP access DDR through matrix to AXI, must enable gsp-gate on this matrix\r
85 #define GSP_EMC_MATRIX_BIT              (1<<11) // [11] gsp-gate bit on matrix , EMC is DDR controller, should always enabled\r
86 \r
87 //GSP inner work loggy clock ctl\r
88 //#define SPRD_APBCKG_PHYS              0X71200000\r
89 #define GSP_CLOCK_BASE          (SPRD_APBCKG_BASE + 0x28)\r
90 #define GSP_CLOCK_256M_BIT  (3)// div form  PLL clock, use[1:0] 2bit,  0:96M 1:153.6M 2:192M 3:256M\r
91 \r
92 //force enable GSP inner work loggy clock, used for debug\r
93 //#define SPRD_AHB_PHYS                 0X20D00000\r
94 #define GSP_AUTO_GATE_ENABLE_BASE               (SPRD_AHB_BASE + 0x40)\r
95 #define GSP_AUTO_GATE_ENABLE_BIT                (1<<8)//[8] is gate switch, 1:GSP work clk enable by busy signal, 0:force enable, control by busy will save power\r
96 \r
97 //GSP register set clock , through AHB bus\r
98 //#define SPRD_APBCKG_PHYS      0X71200000\r
99 #define GSP_AHB_CLOCK_BASE      (SPRD_APBCKG_BASE + 0x20)\r
100 #define GSP_AHB_CLOCK_26M_BIT   (0)// [1:0] is used by GSP, 0:26M\r
101 #define GSP_AHB_CLOCK_192M_BIT  (3)// [1:0] is used by GSP, 0:26M 1:76M 2:128M 3:192M\r
102 \r
103 \r
104 //interrupt relative\r
105 #define TB_GSP_INT                      (0x33)  //gsp hardware irq number\r
106 #define GSP_IRQ_BIT                     (1<<19) //gsp hardware irq bit, == (TB_GSP_INT % 32)\r
107 #define GSP_SOFT_RST_BIT    (1<<3) //gsp chip module soft reset bit\r
108 #define GSP_MOD_EN_BIT      (1<<3) //gsp chip module enable bit\r
109 \r
110 #else\r
111 //GSP job config relative\r
112 #define GSP_MOD_EN          (REG_AP_AHB_AHB_EB)\r
113 #define GSP_SOFT_RESET      (REG_AP_AHB_AHB_RST)\r
114 \r
115 //GSP DDR access relative\r
116 //#define SPRD_AONAPB_PHYS              0X402E0000\r
117 #define GSP_EMC_MATRIX_BASE             (REG_AON_APB_APB_EB1) // GSP access DDR through matrix to AXI, must enable gsp-gate on this matrix\r
118 #define GSP_EMC_MATRIX_BIT              (BIT_GSP_EMC_EB) // [13] gsp-gate bit on matrix , EMC is DDR controller, should always enabled\r
119 #define GSP_CLK_SEL_BIT_MASK            (0x3)\r
120 \r
121 //GSP inner work loggy clock ctl\r
122 //#define SPRD_APBCKG_PHYS              0X71200000\r
123 #define GSP_CLOCK_BASE          (REG_AP_CLK_GSP_CFG)\r
124 typedef enum _GSP_core_freq_\r
125 {\r
126         GSP_CLOCK_96M_BIT,\r
127         GSP_CLOCK_153P6M_BIT,\r
128         GSP_CLOCK_192M_BIT,\r
129         GSP_CLOCK_256M_BIT\r
130 }\r
131 GSP_CORE_GREQ;\r
132 \r
133 \r
134 //force enable GSP inner work loggy clock, used for debug\r
135 //#define SPRD_AHB_PHYS                 0X20D00000\r
136 #define GSP_AUTO_GATE_ENABLE_BASE               (REG_AP_AHB_AP_SYS_AUTO_SLEEP_CFG)\r
137 #define GSP_AUTO_GATE_ENABLE_BIT                (BIT_GSP_AUTO_GATE_EN)//[8] is gate switch, 1:GSP work clk enable by busy signal, 0:force enable, control by busy will save power\r
138 #define GSP_CKG_FORCE_ENABLE_BIT                (BIT_GSP_CKG_FORCE_EN)\r
139 \r
140 //GSP register set clock , through AHB bus\r
141 //#define SPRD_APBCKG_PHYS      0X71200000\r
142 #define GSP_AHB_CLOCK_BASE      (REG_AP_CLK_AP_AHB_CFG)\r
143 #define GSP_AHB_CLOCK_26M_BIT   (0)// [1:0] is used by GSP, 0:26M\r
144 #define GSP_AHB_CLOCK_192M_BIT  (3)// [1:0] is used by GSP, 0:26M 1:76M 2:128M 3:192M\r
145 \r
146 //interrupt relative\r
147 #ifndef CONFIG_OF\r
148 #define TB_GSP_INT                      (IRQ_GSP_INT)  //gsp hardware irq number\r
149 #define GSP_IRQ_BIT                     SCI_INTC_IRQ_BIT(TB_GSP_INT) //gsp hardware irq bit, == (TB_GSP_INT % 32)\r
150 #endif\r
151 #define GSP_SOFT_RST_BIT    (BIT_GSP_SOFT_RST) //gsp chip module soft reset bit\r
152 #define GSP_MOD_EN_BIT      (BIT_GSP_EB) //gsp chip module enable bit\r
153 \r
154 #endif\r
155 \r
156 #ifdef CONFIG_OF\r
157 #define GSP_REG_BASE        (g_gsp_base_addr)\r
158 #else\r
159 #define GSP_REG_BASE        (SPRD_GSP_BASE)\r
160 #endif\r
161 #define GSP_HOR_COEF_BASE   (GSP_REG_BASE + 0x90)\r
162 #define GSP_VER_COEF_BASE   (GSP_REG_BASE + 0x110)\r
163 #define GSP_L1_BASE                     (GSP_REG_BASE + 0x60)\r
164 \r
165 \r
166 #ifdef CONFIG_OF\r
167 #define GSP_CLOCK_PARENT3               ("clk_gsp_parent")\r
168 #else\r
169 #define GSP_CLOCK_PARENT3               ("clk_256m")\r
170 #define GSP_CLOCK_PARENT2               ("clk_192m")\r
171 #define GSP_CLOCK_PARENT1               ("clk_153m6")\r
172 #define GSP_CLOCK_PARENT0               ("clk_96m")\r
173 #endif\r
174 #define GSP_CLOCK_NAME                  ("clk_gsp")\r
175 #define GSP_EMC_CLOCK_PARENT_NAME               ("clk_aon_apb")\r
176 #define GSP_EMC_CLOCK_NAME                              ("clk_gsp_emc")\r
177 \r
178 \r
179 #ifdef CONFIG_FPGA\r
180 #define GSP_EMC_MATRIX_ENABLE() (*(volatile uint32_t*)(GSP_EMC_MATRIX_BASE) |= GSP_EMC_MATRIX_BIT)\r
181 #define GSP_CLOCK_SET(sel)\\r
182 {\\r
183     *(volatile uint32_t*)(GSP_CLOCK_BASE) &= ~3;\\r
184     *(volatile uint32_t*)(GSP_CLOCK_BASE) |= (sel);\\r
185 }\r
186 #define GSP_AUTO_GATE_ENABLE()  (*(volatile uint32_t*)(GSP_AUTO_GATE_ENABLE_BASE) |= GSP_AUTO_GATE_ENABLE_BIT)\r
187 #define GSP_AHB_CLOCK_SET(sel)\\r
188 {\\r
189     *(volatile uint32_t*)(GSP_AHB_CLOCK_BASE) &= ~3;\\r
190     *(volatile uint32_t*)(GSP_AHB_CLOCK_BASE) |= (sel);\\r
191 }\r
192 #define GSP_AHB_CLOCK_GET(sel)  (*(volatile uint32_t*)(GSP_AHB_CLOCK_BASE)&0x3)\r
193 \r
194 \r
195 //0x402B001C multi-media force shutdown [25]\r
196 //0x402E0000 MM enable\r
197 #define GSP_ENABLE_MM(addr)\\r
198 {\\r
199     *(volatile unsigned long *)(SPRD_PMU_BASE+0x1c) &= ~(1<<25);\\r
200     *(volatile unsigned long *)(SPRD_AONAPB_BASE) |= (1<<25);\\r
201 }\r
202 \r
203 #define GSP_HWMODULE_SOFTRESET()\\r
204     *(volatile uint32_t *)(GSP_SOFT_RESET) |= GSP_SOFT_RST_BIT;\\r
205     udelay(10);\\r
206     *(volatile uint32_t *)(GSP_SOFT_RESET) &= (~GSP_SOFT_RST_BIT)\r
207 \r
208 #define GSP_HWMODULE_ENABLE()\\r
209     *(volatile uint32_t *)(GSP_MOD_EN) |= (GSP_MOD_EN_BIT)\r
210 \r
211 #define GSP_HWMODULE_DISABLE(bit)\\r
212         *(volatile uint32_t *)(GSP_MOD_EN) &= (~(GSP_MOD_EN_BIT))\r
213 \r
214 #else\r
215 \r
216 #define GSP_REG_READ(reg)  (*(volatile uint32_t*)(reg))\r
217 #define GSP_REG_WRITE(reg,value)        (*(volatile uint32_t*)reg = value)\r
218 \r
219 #define GSP_EMC_MATRIX_ENABLE()     sci_glb_set(GSP_EMC_MATRIX_BASE, GSP_EMC_MATRIX_BIT)\r
220 #define GSP_CLOCK_SET(sel)          sci_glb_write(GSP_CLOCK_BASE, (sel), 0x3)\r
221 #define GSP_AUTO_GATE_ENABLE()      sci_glb_set(GSP_AUTO_GATE_ENABLE_BASE, GSP_AUTO_GATE_ENABLE_BIT)\r
222 #define GSP_AUTO_GATE_DISABLE()     sci_glb_clr(GSP_AUTO_GATE_ENABLE_BASE, GSP_AUTO_GATE_ENABLE_BIT)\r
223 #define GSP_FORCE_GATE_ENABLE()      sci_glb_set(GSP_AUTO_GATE_ENABLE_BASE, GSP_CKG_FORCE_ENABLE_BIT)\r
224 #define GSP_AHB_CLOCK_SET(sel)      sci_glb_write(GSP_AHB_CLOCK_BASE, (sel), 0x3)\r
225 #define GSP_AHB_CLOCK_GET()             sci_glb_read(GSP_AHB_CLOCK_BASE,0x3)\r
226 \r
227 //#define sci_get_chip_id()                     GSP_REG_READ(SPRD_AONAPB_BASE+0xFC)\r
228 \r
229 \r
230 \r
231 //0x402B001C multi-media force shutdown [25]\r
232 //0x402E0000 MM enable\r
233 #define GSP_ENABLE_MM(addr)\\r
234 {\\r
235     sci_glb_clr((REG_PMU_APB_PD_MM_TOP_CFG),(BIT_PD_MM_TOP_FORCE_SHUTDOWN));\\r
236     sci_glb_set(REG_AON_APB_APB_EB0,(BIT_PD_MM_TOP_FORCE_SHUTDOWN));\\r
237 }\r
238 \r
239 \r
240 #ifdef CONFIG_OF\r
241 #define GSP_MMU_CTRL_BASE        (g_gsp_mmu_ctrl_addr)\r
242 #else\r
243 #define GSP_MMU_CTRL_BASE (SPRD_GSPMMU_BASE+0x8000)\r
244 #endif\r
245 \r
246 #define GSP_HWMODULE_SOFTRESET()\\r
247 {\\r
248         sci_glb_set(GSP_SOFT_RESET,GSP_SOFT_RST_BIT);\\r
249         udelay(10);\\r
250         sci_glb_clr(GSP_SOFT_RESET,GSP_SOFT_RST_BIT);\\r
251         GSP_REG_WRITE(GSP_MMU_CTRL_BASE,0x10000001);\\r
252 }\r
253 #define GSP_HWMODULE_ENABLE()                   sci_glb_set(GSP_MOD_EN,GSP_MOD_EN_BIT)\r
254 #define GSP_HWMODULE_DISABLE()          sci_glb_clr(GSP_MOD_EN,GSP_MOD_EN_BIT)\r
255 \r
256 #endif\r
257 #define GSP_EMC_GAP_SET(interval)\\r
258     ((volatile GSP_REG_T*)GSP_REG_BASE)->gsp_cfg_u.mBits.dist_rb = (interval)\r
259 \r
260 #ifndef CONFIG_64BIT // arch 32bit\r
261 #define GSP_L0_ADDR_SET(addr)\\r
262     *(volatile GSP_DATA_ADDR_T*)(&((GSP_REG_T*)GSP_REG_BASE)->gsp_layer0_y_addr_u) = (addr)\r
263 #define GSP_L1_ADDR_SET(addr)\\r
264     *(volatile GSP_DATA_ADDR_T*)(&((GSP_REG_T*)GSP_REG_BASE)->gsp_layer1_y_addr_u) = (addr)\r
265 #define GSP_Ld_ADDR_SET(addr)\\r
266     *(volatile GSP_DATA_ADDR_T*)(&((GSP_REG_T*)GSP_REG_BASE)->gsp_des_y_addr_u) = (addr)\r
267 \r
268 #define GSP_L0_CLIPRECT_SET(rect)\\r
269     *(volatile GSP_RECT_T*)(&((GSP_REG_T*)GSP_REG_BASE)->gsp_layer0_clip_start_u) = (rect)\r
270 #define GSP_L1_CLIPRECT_SET(rect)\\r
271     *(volatile GSP_RECT_T*)(&((GSP_REG_T*)GSP_REG_BASE)->gsp_layer1_clip_start_u) = (rect)\r
272 \r
273 #else //arch 64bit\r
274 \r
275 #define GSP_L0_ADDR_SET(addr)\\r
276      ((volatile GSP_REG_T*)GSP_REG_BASE)->gsp_layer0_y_addr_u.dwValue = (uint32_t)(addr.addr_y);\\r
277      ((volatile GSP_REG_T*)GSP_REG_BASE)->gsp_layer0_uv_addr_u.dwValue = (uint32_t)(addr.addr_uv);\\r
278      ((volatile GSP_REG_T*)GSP_REG_BASE)->gsp_layer0_va_addr_u.dwValue = (uint32_t)(addr.addr_v)\r
279 \r
280 #define GSP_L1_ADDR_SET(addr)\\r
281      ((volatile GSP_REG_T*)GSP_REG_BASE)->gsp_layer1_y_addr_u.dwValue = (uint32_t)(addr.addr_y);\\r
282      ((volatile GSP_REG_T*)GSP_REG_BASE)->gsp_layer1_uv_addr_u.dwValue = (uint32_t)(addr.addr_uv);\\r
283      ((volatile GSP_REG_T*)GSP_REG_BASE)->gsp_layer1_va_addr_u.dwValue = (uint32_t)(addr.addr_v)\r
284 \r
285 #define GSP_Ld_ADDR_SET(addr)\\r
286      ((volatile GSP_REG_T*)GSP_REG_BASE)->gsp_des_y_addr_u.dwValue = (uint32_t)(addr.addr_y);\\r
287      ((volatile GSP_REG_T*)GSP_REG_BASE)->gsp_des_uv_addr_u.dwValue = (uint32_t)(addr.addr_uv);\\r
288      ((volatile GSP_REG_T*)GSP_REG_BASE)->gsp_des_v_addr_u.dwValue = (uint32_t)(addr.addr_v)\r
289 \r
290 #define GSP_L0_CLIPRECT_SET(rect)\\r
291     ((volatile GSP_REG_T*)GSP_REG_BASE)->gsp_layer0_clip_start_u.mBits.clip_start_x_l0 = (rect.st_x);\\r
292     ((volatile GSP_REG_T*)GSP_REG_BASE)->gsp_layer0_clip_start_u.mBits.clip_start_y_l0 = (rect.st_y);\\r
293     ((volatile GSP_REG_T*)GSP_REG_BASE)->gsp_layer0_clip_size_u.mBits.clip_size_x_l0 = (rect.rect_w);\\r
294     ((volatile GSP_REG_T*)GSP_REG_BASE)->gsp_layer0_clip_size_u.mBits.clip_size_y_l0 = (rect.rect_h)\r
295 #define GSP_L1_CLIPRECT_SET(rect)\\r
296     ((volatile GSP_REG_T*)GSP_REG_BASE)->gsp_layer1_clip_start_u.mBits.clip_start_x_l1 = (rect.st_x);\\r
297     ((volatile GSP_REG_T*)GSP_REG_BASE)->gsp_layer1_clip_start_u.mBits.clip_start_y_l1 = (rect.st_y);\\r
298     ((volatile GSP_REG_T*)GSP_REG_BASE)->gsp_layer1_clip_size_u.mBits.clip_size_x_l1 = (rect.rect_w);\\r
299     ((volatile GSP_REG_T*)GSP_REG_BASE)->gsp_layer1_clip_size_u.mBits.clip_size_y_l1 = (rect.rect_h)\r
300 #endif\r
301 \r
302 #define GSP_L0_PITCH_GET()  (*(volatile uint32_t*)(&((GSP_REG_T*)GSP_REG_BASE)->gsp_layer0_pitch_u))\r
303 #define GSP_L0_PITCH_SET(pitch)\\r
304     *(volatile uint32_t*)(&((GSP_REG_T*)GSP_REG_BASE)->gsp_layer0_pitch_u) = (pitch)\r
305 #define GSP_L1_PITCH_SET(pitch)\\r
306     *(volatile uint32_t*)(&((GSP_REG_T*)GSP_REG_BASE)->gsp_layer1_pitch_u) = (pitch)\r
307 #define GSP_Ld_PITCH_SET(pitch)\\r
308     *(volatile uint32_t*)(&((GSP_REG_T*)GSP_REG_BASE)->gsp_des_pitch_u) = (pitch)\r
309 \r
310 \r
311 #define GSP_L0_ADDRY_GET()    (((GSP_REG_T*)GSP_REG_BASE)->gsp_layer0_y_addr_u.dwValue)\r
312 #define GSP_L0_ADDRUV_GET()    (((GSP_REG_T*)GSP_REG_BASE)->gsp_layer0_uv_addr_u.dwValue)\r
313 #define GSP_L0_ADDRVA_GET()    (((GSP_REG_T*)GSP_REG_BASE)->gsp_layer0_va_addr_u.dwValue)\r
314 #define GSP_L1_ADDRY_GET()    (((GSP_REG_T*)GSP_REG_BASE)->gsp_layer1_y_addr_u.dwValue)\r
315 #define GSP_L1_ADDRUV_GET()    (((GSP_REG_T*)GSP_REG_BASE)->gsp_layer1_uv_addr_u.dwValue)\r
316 #define GSP_L1_ADDRVA_GET()    (((GSP_REG_T*)GSP_REG_BASE)->gsp_layer1_va_addr_u.dwValue)\r
317 #define GSP_Ld_ADDRY_GET()    (((GSP_REG_T*)GSP_REG_BASE)->gsp_des_y_addr_u.dwValue)\r
318 #define GSP_Ld_ADDRUV_GET()    (((GSP_REG_T*)GSP_REG_BASE)->gsp_des_uv_addr_u.dwValue)\r
319 #define GSP_Ld_ADDRVA_GET()    (((GSP_REG_T*)GSP_REG_BASE)->gsp_des_v_addr_u.dwValue)\r
320 \r
321 \r
322 #define GSP_L0_DESRECT_SET(rect)\\r
323     *(volatile uint32_t*)(&((GSP_REG_T*)GSP_REG_BASE)->gsp_layer0_des_start_u) = *((uint32_t*)&(rect).st_x);\\r
324     *(volatile uint32_t*)(&((GSP_REG_T*)GSP_REG_BASE)->gsp_layer0_des_size_u) = *((uint32_t*)&(rect).rect_w)\r
325 #define GSP_L1_DESPOS_SET(pos)\\r
326     *(volatile uint32_t*)(&((GSP_REG_T*)GSP_REG_BASE)->gsp_layer1_des_start_u) = *(uint32_t*)(&(pos))\r
327 \r
328 \r
329 #define GSP_L0_GREY_SET(grey)\\r
330     *(volatile uint32_t*)(&((GSP_REG_T*)GSP_REG_BASE)->gsp_layer0_grey_rgb_u) = *(uint32_t*)(&(grey))\r
331 #define GSP_L1_GREY_SET(grey)\\r
332     *(volatile uint32_t*)(&((GSP_REG_T*)GSP_REG_BASE)->gsp_layer1_grey_rgb_u) = *(uint32_t*)(&(grey))\r
333 \r
334 \r
335 #define GSP_L0_ENDIAN_SET(endian_mode)\\r
336     *(volatile uint32_t*)(&((GSP_REG_T*)GSP_REG_BASE)->gsp_layer0_endian_u) = \\r
337       (((endian_mode).y_word_endn & 0x03) << 0)\\r
338      |(((endian_mode).y_lng_wrd_endn & 0x01) << 2)\\r
339      |(((endian_mode).uv_word_endn & 0x03) << 3)\\r
340      |(((endian_mode).uv_lng_wrd_endn & 0x01) << 5)\\r
341      |(((endian_mode).va_word_endn & 0x03) << 6)\\r
342      |(((endian_mode).va_lng_wrd_endn & 0x01) << 8)\\r
343      |(((endian_mode).rgb_swap_mode & 0x07) << 9)\\r
344      |(((endian_mode).a_swap_mode & 0x01) << 12)\r
345 #define GSP_L1_ENDIAN_SET(endian_mode)\\r
346     *(volatile uint32_t*)(&((GSP_REG_T*)GSP_REG_BASE)->gsp_layer1_endian_u) = \\r
347       (((endian_mode).y_word_endn & 0x03) << 0)\\r
348      |(((endian_mode).y_lng_wrd_endn & 0x01) << 2)\\r
349      |(((endian_mode).uv_word_endn & 0x03) << 3)\\r
350      |(((endian_mode).uv_lng_wrd_endn & 0x01) << 5)\\r
351      |(((endian_mode).va_word_endn & 0x03) << 6)\\r
352      |(((endian_mode).va_lng_wrd_endn & 0x01) << 8)\\r
353      |(((endian_mode).rgb_swap_mode & 0x07) << 9)\\r
354      |(((endian_mode).a_swap_mode & 0x01) << 12)\r
355 #define GSP_Ld_ENDIAN_SET(endian_mode)\\r
356     *(volatile uint32_t*)(&((GSP_REG_T*)GSP_REG_BASE)->gsp_des_data_endian_u) = \\r
357       (((endian_mode).y_word_endn & 0x03) << 0)\\r
358      |(((endian_mode).y_lng_wrd_endn & 0x01) << 2)\\r
359      |(((endian_mode).uv_word_endn & 0x03) << 3)\\r
360      |(((endian_mode).uv_lng_wrd_endn & 0x01) << 5)\\r
361      |(((endian_mode).va_word_endn & 0x03) << 6)\\r
362      |(((endian_mode).va_lng_wrd_endn & 0x01) << 8)\\r
363      |(((endian_mode).rgb_swap_mode & 0x07) << 9)\\r
364      |(((endian_mode).a_swap_mode & 0x01) << 12)\r
365 \r
366 #define GSP_L0_ALPHA_SET(alpha)\\r
367     *(volatile uint32_t*)(&((GSP_REG_T*)GSP_REG_BASE)->gsp_layer0_alpha_u) = (alpha)\r
368 #define GSP_L1_ALPHA_SET(alpha)\\r
369     *(volatile uint32_t*)(&((GSP_REG_T*)GSP_REG_BASE)->gsp_layer1_alpha_u) = (alpha)\r
370 \r
371 #define GSP_L0_COLORKEY_SET(colorkey)\\r
372     *(volatile uint32_t*)(&((GSP_REG_T*)GSP_REG_BASE)->gsp_layer0_ck_u) = *(uint32_t*)(&(colorkey))\r
373 #define GSP_L1_COLORKEY_SET(colorkey)\\r
374     *(volatile uint32_t*)(&((GSP_REG_T*)GSP_REG_BASE)->gsp_layer1_ck_u) = *(uint32_t*)(&(colorkey))\r
375 \r
376 #define GSP_L0_IMGFORMAT_SET(format)\\r
377     ((volatile GSP_REG_T*)GSP_REG_BASE)->gsp_layer0_cfg_u.mBits.img_format_l0 = (format)\r
378 #define GSP_L1_IMGFORMAT_SET(format)\\r
379     ((volatile GSP_REG_T*)GSP_REG_BASE)->gsp_layer1_cfg_u.mBits.img_format_l1 = (format)\r
380 #define GSP_Ld_IMGFORMAT_SET(format)\\r
381     ((volatile GSP_REG_T*)GSP_REG_BASE)->gsp_des_data_cfg_u.mBits.des_img_format = (format)\r
382 #define GSP_Ld_COMPRESSRGB888_SET(enable)\\r
383         ((volatile GSP_REG_T*)GSP_REG_BASE)->gsp_des_data_cfg_u.mBits.compress_r8 = (enable)\r
384 \r
385 #define GSP_L0_ROTMODE_SET(mode)\\r
386     ((volatile GSP_REG_T*)GSP_REG_BASE)->gsp_layer0_cfg_u.mBits.rot_mod_l0 = (mode)\r
387 #define GSP_L1_ROTMODE_SET(mode)\\r
388     ((volatile GSP_REG_T*)GSP_REG_BASE)->gsp_layer1_cfg_u.mBits.rot_mod_l1 = (mode)\r
389 \r
390 #define GSP_L0_COLORKEYENABLE_SET(colorkey_en)\\r
391     ((volatile GSP_REG_T*)GSP_REG_BASE)->gsp_layer0_cfg_u.mBits.ck_en_l0 = (colorkey_en)\r
392 #define GSP_L1_COLORKEYENABLE_SET(colorkey_en)\\r
393     ((volatile GSP_REG_T*)GSP_REG_BASE)->gsp_layer1_cfg_u.mBits.ck_en_l1 = (colorkey_en)\r
394 \r
395 #define GSP_L0_PALLETENABLE_SET(pallet_en)\\r
396     ((volatile GSP_REG_T*)GSP_REG_BASE)->gsp_layer0_cfg_u.mBits.pallet_en_l0 = (pallet_en)\r
397 #define GSP_L1_PALLETENABLE_SET(pallet_en)\\r
398     ((volatile GSP_REG_T*)GSP_REG_BASE)->gsp_layer1_cfg_u.mBits.pallet_en_l1 = (pallet_en)\r
399 \r
400 #define GSP_L0_SCALETAPMODE_SET(row_tap,col_tap)\\r
401     ((volatile GSP_REG_T*)GSP_REG_BASE)->gsp_layer0_cfg_u.mBits.row_tap_mod = (row_tap);\\r
402     ((volatile GSP_REG_T*)GSP_REG_BASE)->gsp_layer0_cfg_u.mBits.col_tap_mod = (col_tap)\r
403 \r
404 #define GSP_IRQMODE_SET(mode)\\r
405     ((volatile GSP_REG_T*)GSP_REG_BASE)->gsp_int_cfg_u.mBits.int_mod = (mode)\r
406 #define GSP_IRQENABLE_SET(int_enable)\\r
407     ((volatile GSP_REG_T*)GSP_REG_BASE)->gsp_int_cfg_u.mBits.int_en = (int_enable)\r
408 \r
409     //Level-interrupt clear signal, internal GSP HW module\r
410 \r
411 #define GSP_IRQSTATUS_CLEAR()\\r
412     ((volatile GSP_REG_T*)GSP_REG_BASE)->gsp_int_cfg_u.mBits.int_clr = 1;\\r
413     udelay(10);\\r
414     ((volatile GSP_REG_T*)GSP_REG_BASE)->gsp_int_cfg_u.mBits.int_clr = 0\r
415 \r
416 #define GSP_WORKSTATUS_GET()   (((volatile GSP_REG_T*)GSP_REG_BASE)->gsp_cfg_u.mBits.gsp_busy)\r
417 #define GSP_ERRFLAG_GET()   (((volatile GSP_REG_T*)GSP_REG_BASE)->gsp_cfg_u.mBits.error_flag)\r
418 #define GSP_ERRCODE_GET()   (((volatile GSP_REG_T*)GSP_REG_BASE)->gsp_cfg_u.mBits.error_code)\r
419 \r
420 #define GSP_DITHER_ENABLE_SET(dith_en)\\r
421     ((volatile GSP_REG_T*)GSP_REG_BASE)->gsp_cfg_u.mBits.dither_en = (dith_en)\r
422 #define GSP_PMARGB_ENABLE_SET(pm_en)\\r
423     ((volatile GSP_REG_T*)GSP_REG_BASE)->gsp_cfg_u.mBits.pmargb_en = (pm_en)\r
424 #define GSP_L0_PMARGBMODE_SET(mode)\\r
425     ((volatile GSP_REG_T*)GSP_REG_BASE)->gsp_cfg_u.mBits.pmargb_mod0 = (mode)\r
426 #define GSP_L1_PMARGBMODE_SET(mode)\\r
427     ((volatile GSP_REG_T*)GSP_REG_BASE)->gsp_cfg_u.mBits.pmargb_mod1 = (mode)\r
428 #define GSP_SCALE_ENABLE_SET(scal_en)\\r
429     ((volatile GSP_REG_T*)GSP_REG_BASE)->gsp_cfg_u.mBits.scale_en = (scal_en)\r
430 #define GSP_SCALE_ENABLE_GET()  (((volatile GSP_REG_T*)GSP_REG_BASE)->gsp_cfg_u.mBits.scale_en)\r
431 \r
432 //v==0:allowed a burst stride 4K boarder; v==1:split a burst into 2 request , when sride 4K boarder.\r
433 //gsp_cfg_u.mBits.split 0:split  1:don't split\r
434 #define GSP_PAGES_BOARDER_SPLIT_SET(v)\\r
435     ((volatile GSP_REG_T*)GSP_REG_BASE)->gsp_cfg_u.mBits.no_split = (!(v))\r
436 \r
437 #define GSP_Y2R_OPT_SET(v)\\r
438     ((volatile GSP_REG_T*)GSP_REG_BASE)->gsp_cfg_u.mBits.y2r_opt = (v)\r
439 \r
440 \r
441 #define GSP_PAGES_BOARDER_SPLIT_GET()\\r
442                 (!((volatile GSP_REG_T*)GSP_REG_BASE)->gsp_cfg_u.mBits.no_split)\r
443 \r
444 #define GSP_SCALESTATUS_RESET()\\r
445     ((volatile GSP_REG_T*)GSP_REG_BASE)->gsp_cfg_u.mBits.scale_status_clr = 1;\\r
446     udelay(10);\\r
447     ((volatile GSP_REG_T*)GSP_REG_BASE)->gsp_cfg_u.mBits.scale_status_clr = 0\r
448 \r
449 #define GSP_L0_ENABLE_SET(enable)\\r
450     ((volatile GSP_REG_T*)GSP_REG_BASE)->gsp_cfg_u.mBits.l0_en = (enable)\r
451 #define GSP_L1_ENABLE_SET(enable)\\r
452     ((volatile GSP_REG_T*)GSP_REG_BASE)->gsp_cfg_u.mBits.l1_en = (enable)\r
453 #define GSP_ENGINE_TRIGGER()\\r
454     ((volatile GSP_REG_T*)GSP_REG_BASE)->gsp_cfg_u.mBits.gsp_run = 1\r
455 \r
456 #define GSP_L0_ENABLE_GET()     (((volatile GSP_REG_T*)GSP_REG_BASE)->gsp_cfg_u.mBits.l0_en)\r
457 #define GSP_L1_ENABLE_GET()     (((volatile GSP_REG_T*)GSP_REG_BASE)->gsp_cfg_u.mBits.l1_en)\r
458 \r
459 #define GSP_CFG_L1_PARAM(param)\\r
460     *(volatile GSP_LAYER1_REG_T *)GSP_L1_BASE = (param)\r
461     /**---------------------------------------------------------------------------*\r
462      **                         Data Definition                              *\r
463      **---------------------------------------------------------------------------*/\r
464 \r
465     /**---------------------------------------------------------------------------*\r
466     **                         Function Propertype                                *\r
467     **---------------------------------------------------------------------------*/\r
468 \r
469 PUBLIC int GSP_Init(gsp_context_t *gspCtx);\r
470 PUBLIC void GSP_Deinit(gsp_context_t *gspCtx);\r
471 PUBLIC void GSP_ConfigLayer(GSP_MODULE_ID_E layer_id, gsp_context_t *gspCtx);\r
472 PUBLIC uint32_t GSP_Trigger(void);\r
473 PUBLIC void GSP_Wait_Finish(void);\r
474 PUBLIC void GSP_module_enable(gsp_context_t *gspCtx);\r
475 PUBLIC void GSP_module_disable(gsp_context_t *gspCtx);\r
476 PUBLIC int GSP_ClocksCheckPhase0(void);\r
477 PUBLIC int GSP_ClocksCheckPhase1(void);\r
478 \r
479 #ifdef __cplusplus\r
480 }\r
481 #endif\r
482 \r
483 #endif\r
484 //the end of Shark_gsp_drv.h\r