c11fca41a2281818b4431af96e60f71c4d675772
[openwrt/staging/wigyori.git] / package / kernel / lantiq / ltq-vmmc / patches / 500-ar9_vr9.patch
1 --- a/src/mps/drv_mps_vmmc_ar9.c
2 +++ b/src/mps/drv_mps_vmmc_ar9.c
3 @@ -30,15 +30,24 @@
4 #include "ifxos_interrupt.h"
5
6 /* board specific headers */
7 +#if !defined CONFIG_LANTIQ
8 #include <asm/ifx/ifx_regs.h>
9 #include <asm/ifx_vpe.h>
10 #include <asm/ifx/ifx_gpio.h>
11 +#endif
12 +
13 +#include <lantiq_soc.h>
14 +#include <asm/vpe.h>
15
16 /* device specific headers */
17 #include "drv_mps_vmmc.h"
18 #include "drv_mps_vmmc_dbg.h"
19 #include "drv_mps_vmmc_device.h"
20
21 +const void (*ifx_bsp_basic_mps_decrypt)(unsigned int addr, int n) = NULL;
22 +
23 +#define IFX_MPS_SRAM IFXMIPS_MPS_SRAM
24 +
25 /* ============================= */
26 /* Local Macros & Definitions */
27 /* ============================= */
28 @@ -98,47 +107,48 @@ IFX_int32_t (*ifx_wdog_callback) (IFX_ui
29 */
30 IFX_int32_t ifx_mps_fw_wdog_start_ar9()
31 {
32 + return IFX_SUCCESS; /* FIXME - Disable start wdog... */
33 /* vpe1_wdog_ctr should be set up in u-boot as
34 "vpe1_wdog_ctr_addr=0xBF2001B0"; protection from incorrect or missing
35 setting */
36 - if (vpe1_wdog_ctr != VPE1_WDOG_CTR_ADDR)
37 - {
38 - vpe1_wdog_ctr = VPE1_WDOG_CTR_ADDR;
39 - }
40 +// if (vpe1_wdog_ctr != VPE1_WDOG_CTR_ADDR)
41 +// {
42 +// vpe1_wdog_ctr = VPE1_WDOG_CTR_ADDR;
43 +// }
44
45 /* vpe1_wdog_timeout should be set up in u-boot as "vpe1_wdog_timeout =
46 <value in ms>"; protection from insane setting */
47 - if (vpe1_wdog_timeout < VPE1_WDOG_TMOUT_MIN)
48 - {
49 - vpe1_wdog_timeout = VPE1_WDOG_TMOUT_MIN;
50 - }
51 - if (vpe1_wdog_timeout > VPE1_WDOG_TMOUT_MAX)
52 - {
53 - vpe1_wdog_timeout = VPE1_WDOG_TMOUT_MAX;
54 - }
55 +// if (vpe1_wdog_timeout < VPE1_WDOG_TMOUT_MIN)
56 +// {
57 +// vpe1_wdog_timeout = VPE1_WDOG_TMOUT_MIN;
58 +// }
59 +// if (vpe1_wdog_timeout > VPE1_WDOG_TMOUT_MAX)
60 +// {
61 +// vpe1_wdog_timeout = VPE1_WDOG_TMOUT_MAX;
62 +// }
63
64 /* recalculate in jiffies */
65 - vpe1_wdog_timeout = vpe1_wdog_timeout * HZ / 1000;
66 +// vpe1_wdog_timeout = vpe1_wdog_timeout * HZ / 1000;
67
68 /* register BSP callback function */
69 - if (IFX_SUCCESS !=
70 - vpe1_sw_wdog_register_reset_handler (ifx_mps_wdog_callback))
71 - {
72 - TRACE (MPS, DBG_LEVEL_HIGH,
73 - (KERN_ERR "[%s %s %d]: Unable to register WDT callback.\r\n",
74 - __FILE__, __func__, __LINE__));
75 - return IFX_ERROR;;
76 - }
77 +// if (IFX_SUCCESS !=
78 +// vpe1_sw_wdog_register_reset_handler (ifx_mps_wdog_callback))
79 +// {
80 +// TRACE (MPS, DBG_LEVEL_HIGH,
81 +// (KERN_ERR "[%s %s %d]: Unable to register WDT callback.\r\n",
82 +// __FILE__, __func__, __LINE__));
83 +// return IFX_ERROR;;
84 +// }
85
86 /* start software watchdog timer */
87 - if (IFX_SUCCESS != vpe1_sw_wdog_start (0))
88 - {
89 - TRACE (MPS, DBG_LEVEL_HIGH,
90 - (KERN_ERR
91 - "[%s %s %d]: Error starting software watchdog timer.\r\n",
92 - __FILE__, __func__, __LINE__));
93 - return IFX_ERROR;
94 - }
95 +// if (IFX_SUCCESS != vpe1_sw_wdog_start (0))
96 +// {
97 +// TRACE (MPS, DBG_LEVEL_HIGH,
98 +// (KERN_ERR
99 +// "[%s %s %d]: Error starting software watchdog timer.\r\n",
100 +// __FILE__, __func__, __LINE__));
101 +// return IFX_ERROR;
102 +// }
103 return IFX_SUCCESS;
104 }
105
106 @@ -292,6 +302,18 @@ IFX_int32_t ifx_mps_download_firmware (m
107 decryption. Subtract sizeof(u32) from length to avoid decryption
108 of data beyond the FW image code */
109 pFWDwnld->length -= sizeof(IFX_uint32_t);
110 + switch(ltq_soc_type()) {
111 + case SOC_TYPE_AR9:
112 + ifx_bsp_basic_mps_decrypt = (const void (*)(unsigned int, int))0xbf0017c4;
113 + break;
114 + case SOC_TYPE_VR9:
115 + ifx_bsp_basic_mps_decrypt = (const void (*)(unsigned int, int))0xbf001ea4;
116 + break;
117 + case SOC_TYPE_VR9_2:
118 + ifx_bsp_basic_mps_decrypt = (const void (*)(unsigned int, int))0xbf001f38;
119 + break;
120 + }
121 + if (ifx_bsp_basic_mps_decrypt)
122 ifx_bsp_basic_mps_decrypt((IFX_uint32_t)cpu1_base_addr, pFWDwnld->length);
123 }
124
125 @@ -306,7 +328,7 @@ IFX_int32_t ifx_mps_download_firmware (m
126 TRACE (MPS, DBG_LEVEL_HIGH,
127 ("MPS: FW checksum error: img=0x%08x calc=0x%08x\r\n",
128 pFW_img_data->crc32, cksum));
129 - return IFX_ERROR;
130 + /* return IFX_ERROR; -- FIXME */
131 }
132 }
133 else
134 @@ -362,9 +384,9 @@ IFX_void_t ifx_mps_shutdown (IFX_void_t)
135 if (vpe1_started)
136 {
137 /* stop software watchdog timer */
138 - vpe1_sw_wdog_stop (0);
139 +// vpe1_sw_wdog_stop (0);
140 /* clean up the BSP callback function */
141 - vpe1_sw_wdog_register_reset_handler (IFX_NULL);
142 +// vpe1_sw_wdog_register_reset_handler (IFX_NULL);
143 /* stop VPE1 */
144 vpe1_sw_stop (0);
145 vpe1_started = 0;
146 @@ -388,7 +410,7 @@ IFX_void_t ifx_mps_reset (IFX_void_t)
147 if (vpe1_started)
148 {
149 /* stop software watchdog timer first */
150 - vpe1_sw_wdog_stop (0);
151 +// vpe1_sw_wdog_stop (0);
152 vpe1_sw_stop (0);
153 vpe1_started = 0;
154 }
155 @@ -454,62 +476,62 @@ IFX_int32_t ifx_mps_wdog_callback (IFX_u
156 #endif /* DEBUG */
157
158 /* reset SmartSLIC */
159 - IFXOS_LOCKINT (flags);
160 - if (ifx_gpio_pin_reserve
161 - (IFX_GPIO_PIN_ID (SSLIC_RST_PORT, SSLIC_RST_PIN), IFX_MPS_MODULE_ID))
162 - {
163 - TRACE (MPS, DBG_LEVEL_HIGH,
164 - (KERN_ERR "[%s %s %d]: GPIO port/pin reservation error.\r\n",
165 - __FILE__, __func__, __LINE__));
166 - }
167 +// IFXOS_LOCKINT (flags);
168 +// if (ifx_gpio_pin_reserve
169 +// (IFX_GPIO_PIN_ID (SSLIC_RST_PORT, SSLIC_RST_PIN), IFX_MPS_MODULE_ID))
170 +// {
171 +// TRACE (MPS, DBG_LEVEL_HIGH,
172 +// (KERN_ERR "[%s %s %d]: GPIO port/pin reservation error.\r\n",
173 +// __FILE__, __func__, __LINE__));
174 +// }
175 /* P1_ALTSEL0.15 = 0 */
176 - if (ifx_gpio_altsel0_clear
177 - (IFX_GPIO_PIN_ID (SSLIC_RST_PORT, SSLIC_RST_PIN), IFX_MPS_MODULE_ID))
178 - {
179 - TRACE (MPS, DBG_LEVEL_HIGH,
180 - (KERN_ERR "[%s %s %d]: GPIO error clearing ALTSEL0.\r\n", __FILE__,
181 - __func__, __LINE__));
182 - }
183 +// if (ifx_gpio_altsel0_clear
184 +// (IFX_GPIO_PIN_ID (SSLIC_RST_PORT, SSLIC_RST_PIN), IFX_MPS_MODULE_ID))
185 +// {
186 +// TRACE (MPS, DBG_LEVEL_HIGH,
187 +// (KERN_ERR "[%s %s %d]: GPIO error clearing ALTSEL0.\r\n", __FILE__,
188 +// __func__, __LINE__));
189 +// }
190 /* P1_ALTSEL1.15 = 0 */
191 - if (ifx_gpio_altsel1_clear
192 - (IFX_GPIO_PIN_ID (SSLIC_RST_PORT, SSLIC_RST_PIN), IFX_MPS_MODULE_ID))
193 - {
194 - TRACE (MPS, DBG_LEVEL_HIGH,
195 - (KERN_ERR "[%s %s %d]: GPIO error clearing ALTSEL1.\r\n", __FILE__,
196 - __func__, __LINE__));
197 - }
198 +// if (ifx_gpio_altsel1_clear
199 +// (IFX_GPIO_PIN_ID (SSLIC_RST_PORT, SSLIC_RST_PIN), IFX_MPS_MODULE_ID))
200 +// {
201 +// TRACE (MPS, DBG_LEVEL_HIGH,
202 +// (KERN_ERR "[%s %s %d]: GPIO error clearing ALTSEL1.\r\n", __FILE__,
203 +// __func__, __LINE__));
204 +// }
205 /* P1_DIR.15 = 1 */
206 - if (ifx_gpio_dir_out_set
207 - (IFX_GPIO_PIN_ID (SSLIC_RST_PORT, SSLIC_RST_PIN), IFX_MPS_MODULE_ID))
208 - {
209 - TRACE (MPS, DBG_LEVEL_HIGH,
210 - (KERN_ERR "[%s %s %d]: GPIO error setting DIR.\r\n", __FILE__,
211 - __func__, __LINE__));
212 - }
213 +// if (ifx_gpio_dir_out_set
214 +// (IFX_GPIO_PIN_ID (SSLIC_RST_PORT, SSLIC_RST_PIN), IFX_MPS_MODULE_ID))
215 +// {
216 +// TRACE (MPS, DBG_LEVEL_HIGH,
217 +// (KERN_ERR "[%s %s %d]: GPIO error setting DIR.\r\n", __FILE__,
218 +// __func__, __LINE__));
219 +// }
220 /* P1_OD.15 = 1 */
221 - if (ifx_gpio_open_drain_set
222 - (IFX_GPIO_PIN_ID (SSLIC_RST_PORT, SSLIC_RST_PIN), IFX_MPS_MODULE_ID))
223 - {
224 - TRACE (MPS, DBG_LEVEL_HIGH,
225 - (KERN_ERR "[%s %s %d]: GPIO error setting OD.\r\n", __FILE__,
226 - __func__, __LINE__));
227 - }
228 +// if (ifx_gpio_open_drain_set
229 +// (IFX_GPIO_PIN_ID (SSLIC_RST_PORT, SSLIC_RST_PIN), IFX_MPS_MODULE_ID))
230 +// {
231 +// TRACE (MPS, DBG_LEVEL_HIGH,
232 +// (KERN_ERR "[%s %s %d]: GPIO error setting OD.\r\n", __FILE__,
233 +// __func__, __LINE__));
234 +// }
235 /* P1_OUT.15 = 0 */
236 - if (ifx_gpio_output_clear
237 - (IFX_GPIO_PIN_ID (SSLIC_RST_PORT, SSLIC_RST_PIN), IFX_MPS_MODULE_ID))
238 - {
239 - TRACE (MPS, DBG_LEVEL_HIGH,
240 - (KERN_ERR "[%s %s %d]: GPIO error clearing OUT.\r\n", __FILE__,
241 - __func__, __LINE__));
242 - }
243 - if (ifx_gpio_pin_free
244 - (IFX_GPIO_PIN_ID (SSLIC_RST_PORT, SSLIC_RST_PIN), IFX_MPS_MODULE_ID))
245 - {
246 - TRACE (MPS, DBG_LEVEL_HIGH,
247 - (KERN_ERR "[%s %s %d]: GPIO port/pin freeing error.\r\n", __FILE__,
248 - __func__, __LINE__));
249 - }
250 - IFXOS_UNLOCKINT (flags);
251 +// if (ifx_gpio_output_clear
252 +// (IFX_GPIO_PIN_ID (SSLIC_RST_PORT, SSLIC_RST_PIN), IFX_MPS_MODULE_ID))
253 +// {
254 +// TRACE (MPS, DBG_LEVEL_HIGH,
255 +// (KERN_ERR "[%s %s %d]: GPIO error clearing OUT.\r\n", __FILE__,
256 +// __func__, __LINE__));
257 +// }
258 +// if (ifx_gpio_pin_free
259 +// (IFX_GPIO_PIN_ID (SSLIC_RST_PORT, SSLIC_RST_PIN), IFX_MPS_MODULE_ID))
260 +// {
261 +// TRACE (MPS, DBG_LEVEL_HIGH,
262 +// (KERN_ERR "[%s %s %d]: GPIO port/pin freeing error.\r\n", __FILE__,
263 +// __func__, __LINE__));
264 +// }
265 +// IFXOS_UNLOCKINT (flags);
266
267 /* recalculate and compare the firmware checksum */
268 ifx_mps_fw_crc_compare(cpu1_base_addr, pFW_img_data);
269 --- a/src/drv_vmmc_amazon_s.h
270 +++ b/src/drv_vmmc_amazon_s.h
271 @@ -16,7 +16,7 @@
272
273
274 #if defined(SYSTEM_AR9) || defined(SYSTEM_VR9)
275 -#include <asm/ifx/ifx_gpio.h>
276 +//#include <asm/ifx/ifx_gpio.h>
277 #else
278 #error no system selected
279 #endif
280 @@ -27,45 +27,6 @@
281 */
282 #define VMMC_PCM_IF_CFG_HOOK(mode, GPIOreserved, ret) \
283 do { \
284 - ret = VMMC_statusOk; \
285 - /* Reserve P0.0 as TDM/FSC */ \
286 - if (!GPIOreserved) \
287 - ret |= ifx_gpio_pin_reserve(IFX_GPIO_PIN_ID(0, 0), VMMC_TAPI_GPIO_MODULE_ID); \
288 - ret |= ifx_gpio_altsel0_set(IFX_GPIO_PIN_ID(0, 0), VMMC_TAPI_GPIO_MODULE_ID); \
289 - ret |= ifx_gpio_altsel1_set(IFX_GPIO_PIN_ID(0, 0), VMMC_TAPI_GPIO_MODULE_ID); \
290 - ret |= ifx_gpio_open_drain_set(IFX_GPIO_PIN_ID(0, 0), VMMC_TAPI_GPIO_MODULE_ID);\
291 - \
292 - /* Reserve P1.9 as TDM/DO */ \
293 - if (!GPIOreserved) \
294 - ret |= ifx_gpio_pin_reserve(IFX_GPIO_PIN_ID(1, 9), VMMC_TAPI_GPIO_MODULE_ID); \
295 - ret |= ifx_gpio_altsel0_set(IFX_GPIO_PIN_ID(1, 9), VMMC_TAPI_GPIO_MODULE_ID); \
296 - ret |= ifx_gpio_altsel1_clear(IFX_GPIO_PIN_ID(1, 9), VMMC_TAPI_GPIO_MODULE_ID); \
297 - ret |= ifx_gpio_dir_out_set(IFX_GPIO_PIN_ID(1, 9), VMMC_TAPI_GPIO_MODULE_ID); \
298 - ret |= ifx_gpio_open_drain_set(IFX_GPIO_PIN_ID(1, 9), VMMC_TAPI_GPIO_MODULE_ID); \
299 - \
300 - /* Reserve P2.9 as TDM/DI */ \
301 - if (!GPIOreserved) \
302 - ret |= ifx_gpio_pin_reserve(IFX_GPIO_PIN_ID(2, 9), VMMC_TAPI_GPIO_MODULE_ID); \
303 - ret |= ifx_gpio_altsel0_clear(IFX_GPIO_PIN_ID(2, 9), VMMC_TAPI_GPIO_MODULE_ID); \
304 - ret |= ifx_gpio_altsel1_set(IFX_GPIO_PIN_ID(2, 9), VMMC_TAPI_GPIO_MODULE_ID);\
305 - ret |= ifx_gpio_dir_in_set(IFX_GPIO_PIN_ID(2, 9), VMMC_TAPI_GPIO_MODULE_ID); \
306 - \
307 - /* Reserve P2.8 as TDM/DCL */ \
308 - if (!GPIOreserved) \
309 - ret |= ifx_gpio_pin_reserve(IFX_GPIO_PIN_ID(2, 8), VMMC_TAPI_GPIO_MODULE_ID); \
310 - ret |= ifx_gpio_altsel0_clear(IFX_GPIO_PIN_ID(2, 8), VMMC_TAPI_GPIO_MODULE_ID); \
311 - ret |= ifx_gpio_altsel1_set(IFX_GPIO_PIN_ID(2, 8), VMMC_TAPI_GPIO_MODULE_ID); \
312 - ret |= ifx_gpio_open_drain_set(IFX_GPIO_PIN_ID(2, 8), VMMC_TAPI_GPIO_MODULE_ID); \
313 - \
314 - if (mode == 2) { \
315 - /* TDM/FSC+DCL Master */ \
316 - ret |= ifx_gpio_dir_out_set(IFX_GPIO_PIN_ID(0, 0), VMMC_TAPI_GPIO_MODULE_ID); \
317 - ret |= ifx_gpio_dir_out_set(IFX_GPIO_PIN_ID(2, 8), VMMC_TAPI_GPIO_MODULE_ID); \
318 - } else { \
319 - /* TDM/FSC+DCL Slave */ \
320 - ret |= ifx_gpio_dir_in_set(IFX_GPIO_PIN_ID(0, 0), VMMC_TAPI_GPIO_MODULE_ID); \
321 - ret |= ifx_gpio_dir_in_set(IFX_GPIO_PIN_ID(2, 8), VMMC_TAPI_GPIO_MODULE_ID); \
322 - } \
323 } while(0);
324
325 /**
326 @@ -73,11 +34,6 @@ do { \
327 */
328 #define VMMC_DRIVER_UNLOAD_HOOK(ret) \
329 do { \
330 - ret = VMMC_statusOk; \
331 - ret |= ifx_gpio_pin_free(IFX_GPIO_PIN_ID(0, 0), VMMC_TAPI_GPIO_MODULE_ID); \
332 - ret |= ifx_gpio_pin_free(IFX_GPIO_PIN_ID(1, 9), VMMC_TAPI_GPIO_MODULE_ID); \
333 - ret |= ifx_gpio_pin_free(IFX_GPIO_PIN_ID(2, 9), VMMC_TAPI_GPIO_MODULE_ID); \
334 - ret |= ifx_gpio_pin_free(IFX_GPIO_PIN_ID(2, 8), VMMC_TAPI_GPIO_MODULE_ID); \
335 } while (0)
336
337 #endif /* _DRV_VMMC_AMAZON_S_H */