a6d1c003922d1f846c3f5415af8f444e5238ea73
[librecmc/librecmc.git] / package / ltq-vmmc / patches / 100-ifxmips.patch
1 --- a/src/drv_vmmc_access.h
2 +++ b/src/drv_vmmc_access.h
3 @@ -24,6 +24,10 @@
4  #include "drv_mps_vmmc.h"
5  #endif
6  
7 +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,28))
8 +#  define IFX_MPS IFXMIPS_MPS_BASE_ADDR
9 +#endif
10 +
11  /* ============================= */
12  /* Global Defines                */
13  /* ============================= */
14 --- a/src/drv_vmmc_bbd.c
15 +++ b/src/drv_vmmc_bbd.c
16 @@ -1072,7 +1072,11 @@ static IFX_int32_t vmmc_BBD_DownloadChCr
17     IFX_uint8_t  padBytes = 0;
18  #endif
19     IFX_uint16_t cram_offset, cram_crc,
20 -                pCmd [MAX_CMD_WORD]  = {0};
21 +                pCmd [MAX_CMD_WORD]
22 +#if defined (__GNUC__) || defined (__GNUG__)
23 +                   __attribute__ ((aligned(4)))
24 +#endif
25 +                   = {0};
26  
27     /* read offset */
28     cpb2w (&cram_offset, &bbd_cram->pData[0], sizeof (IFX_uint16_t));
29 --- a/src/drv_vmmc_danube.h
30 +++ b/src/drv_vmmc_danube.h
31 @@ -15,56 +15,18 @@
32  */
33  
34  #if defined SYSTEM_DANUBE
35 -#include <asm/ifx/ifx_gpio.h>
36 +#include <lantiq_soc.h>
37 +
38  #else
39  #error no system selected
40  #endif
41  
42 -#define VMMC_TAPI_GPIO_MODULE_ID                        IFX_GPIO_MODULE_TAPI_VMMC
43 +#define VMMC_TAPI_GPIO_MODULE_ID             IFX_GPIO_MODULE_TAPI_VMMC
44  /**
45  
46  */
47  #define VMMC_PCM_IF_CFG_HOOK(mode, GPIOreserved, ret) \
48  do { \
49 -   ret = VMMC_statusOk; \
50 -   /* Reserve P0.0 as TDM/FSC */ \
51 -   if (!GPIOreserved) \
52 -      ret |= ifx_gpio_pin_reserve(IFX_GPIO_PIN_ID(0, 0), VMMC_TAPI_GPIO_MODULE_ID); \
53 -   ret |= ifx_gpio_altsel0_set(IFX_GPIO_PIN_ID(0, 0), VMMC_TAPI_GPIO_MODULE_ID); \
54 -   ret |= ifx_gpio_altsel1_set(IFX_GPIO_PIN_ID(0, 0), VMMC_TAPI_GPIO_MODULE_ID); \
55 -   ret |= ifx_gpio_open_drain_set(IFX_GPIO_PIN_ID(0, 0), VMMC_TAPI_GPIO_MODULE_ID);\
56 -   \
57 -   /* Reserve P1.9 as TDM/DO */ \
58 -   if (!GPIOreserved) \
59 -      ret |= ifx_gpio_pin_reserve(IFX_GPIO_PIN_ID(1, 9), VMMC_TAPI_GPIO_MODULE_ID); \
60 -   ret |= ifx_gpio_altsel0_set(IFX_GPIO_PIN_ID(1, 9), VMMC_TAPI_GPIO_MODULE_ID); \
61 -   ret |= ifx_gpio_altsel1_clear(IFX_GPIO_PIN_ID(1, 9), VMMC_TAPI_GPIO_MODULE_ID); \
62 -   ret |= ifx_gpio_dir_out_set(IFX_GPIO_PIN_ID(1, 9), VMMC_TAPI_GPIO_MODULE_ID); \
63 -   ret |= ifx_gpio_open_drain_set(IFX_GPIO_PIN_ID(1, 9), VMMC_TAPI_GPIO_MODULE_ID); \
64 -   \
65 -   /* Reserve P1.10 as TDM/DI */ \
66 -   if (!GPIOreserved) \
67 -      ret |= ifx_gpio_pin_reserve(IFX_GPIO_PIN_ID(1,10), VMMC_TAPI_GPIO_MODULE_ID); \
68 -   ret |= ifx_gpio_altsel0_clear(IFX_GPIO_PIN_ID(1,10), VMMC_TAPI_GPIO_MODULE_ID); \
69 -   ret |= ifx_gpio_altsel1_set(IFX_GPIO_PIN_ID(1,10), VMMC_TAPI_GPIO_MODULE_ID);\
70 -   ret |= ifx_gpio_dir_in_set(IFX_GPIO_PIN_ID(1,10), VMMC_TAPI_GPIO_MODULE_ID); \
71 -   \
72 -   /* Reserve P1.11 as TDM/DCL */ \
73 -   if (!GPIOreserved) \
74 -      ret |= ifx_gpio_pin_reserve(IFX_GPIO_PIN_ID(1,11), VMMC_TAPI_GPIO_MODULE_ID); \
75 -   ret |= ifx_gpio_altsel0_set(IFX_GPIO_PIN_ID(1,11), VMMC_TAPI_GPIO_MODULE_ID); \
76 -   ret |= ifx_gpio_altsel1_clear(IFX_GPIO_PIN_ID(1,11), VMMC_TAPI_GPIO_MODULE_ID); \
77 -   ret |= ifx_gpio_open_drain_set(IFX_GPIO_PIN_ID(1,11), VMMC_TAPI_GPIO_MODULE_ID); \
78 -   \
79 -   if (mode == 2) { \
80 -      /* TDM/FSC+DCL Master */ \
81 -      ret |= ifx_gpio_dir_out_set(IFX_GPIO_PIN_ID(0, 0), VMMC_TAPI_GPIO_MODULE_ID); \
82 -      ret |= ifx_gpio_dir_out_set(IFX_GPIO_PIN_ID(1,11), VMMC_TAPI_GPIO_MODULE_ID); \
83 -   } else { \
84 -      /* TDM/FSC+DCL Slave */ \
85 -      ret |= ifx_gpio_dir_in_set(IFX_GPIO_PIN_ID(0, 0), VMMC_TAPI_GPIO_MODULE_ID); \
86 -      ret |= ifx_gpio_dir_in_set(IFX_GPIO_PIN_ID(1,11), VMMC_TAPI_GPIO_MODULE_ID); \
87 -   } \
88  } while(0);
89  
90  /**
91 @@ -72,11 +34,6 @@ do { \
92  */
93  #define VMMC_DRIVER_UNLOAD_HOOK(ret) \
94  do { \
95 -   ret = VMMC_statusOk; \
96 -   ret |= ifx_gpio_pin_free(IFX_GPIO_PIN_ID(0, 0), VMMC_TAPI_GPIO_MODULE_ID); \
97 -   ret |= ifx_gpio_pin_free(IFX_GPIO_PIN_ID(1, 9), VMMC_TAPI_GPIO_MODULE_ID); \
98 -   ret |= ifx_gpio_pin_free(IFX_GPIO_PIN_ID(1,10), VMMC_TAPI_GPIO_MODULE_ID); \
99 -   ret |= ifx_gpio_pin_free(IFX_GPIO_PIN_ID(1,11), VMMC_TAPI_GPIO_MODULE_ID); \
100  } while (0)
101  
102  #endif /* _DRV_VMMC_AMAZON_S_H */
103 --- a/src/drv_vmmc_init.c
104 +++ b/src/drv_vmmc_init.c
105 @@ -52,6 +52,14 @@
106  #include "ifx_pmu.h"
107  #endif /* PMU_SUPPORTED */
108  
109 +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,28))
110 +#  define IFX_MPS_CAD0SR IFXMIPS_MPS_CAD0SR
111 +#  define IFX_MPS_CAD1SR IFXMIPS_MPS_CAD1SR
112 +#  define IFX_MPS_CVC0SR IFXMIPS_MPS_CVC0SR
113 +#  define IFX_MPS_CVC1SR IFXMIPS_MPS_CVC1SR
114 +#  define IFX_MPS_CVC2SR IFXMIPS_MPS_CVC2SR
115 +#  define IFX_MPS_CVC3SR IFXMIPS_MPS_CVC3SR
116 +#endif
117  
118  /* ============================= */
119  /* Local Macros & Definitions    */
120 --- a/src/drv_vmmc_init_cap.c
121 +++ b/src/drv_vmmc_init_cap.c
122 @@ -22,6 +22,11 @@
123  #include "drv_mps_vmmc.h"
124  #include "drv_mps_vmmc_device.h"
125  
126 +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,28))
127 +#  define IFX_MPS_CHIPID_VERSION_GET   IFXMIPS_MPS_CHIPID_VERSION_GET
128 +#  define IFX_MPS_CHIPID               IFXMIPS_MPS_CHIPID
129 +#endif
130 +
131  /* ============================= */
132  /* Configuration defintions      */
133  /* ============================= */
134 --- a/src/mps/drv_mps_vmmc_common.c
135 +++ b/src/mps/drv_mps_vmmc_common.c
136 @@ -17,6 +17,7 @@
137  /* Includes                      */
138  /* ============================= */
139  #include "drv_config.h"
140 +#include "drv_vmmc_init.h"
141  
142  #undef USE_PLAIN_VOICE_FIRMWARE
143  #undef PRINT_ON_ERR_INTERRUPT
144 @@ -35,8 +36,22 @@
145  #include "ifxos_interrupt.h"
146  #include "ifxos_time.h"
147  
148 -#include <asm/ifx/ifx_regs.h>
149 -#include <asm/ifx/ifx_gptu.h>
150 +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,28))
151 +#  include <lantiq.h>
152 +#  include <irq.h>
153 +#  include <lantiq_timer.h>
154 +
155 +#  define ifx_gptu_timer_request    lq_request_timer
156 +#  define ifx_gptu_timer_start      lq_start_timer
157 +#  define ifx_gptu_countvalue_get   lq_get_count_value
158 +#  define ifx_gptu_timer_free       lq_free_timer
159 +
160 +
161 +#  define bsp_mask_and_ack_irq      ltq_mask_and_ack_irq
162 +#else
163 +#  include <asm/ifx/ifx_regs.h>
164 +#  include <asm/ifx/ifx_gptu.h>
165 +#endif
166  
167  #include "drv_mps_vmmc.h"
168  #include "drv_mps_vmmc_dbg.h"
169 @@ -98,6 +113,9 @@ extern IFX_void_t bsp_mask_and_ack_irq (
170  extern IFX_void_t mask_and_ack_danube_irq (IFX_uint32_t irq_nr);
171  
172  #endif /* */
173 +
174 +extern void sys_hw_setup (void);
175 +
176  extern IFXOS_event_t fw_ready_evt;
177  /* callback function to free all data buffers currently used by voice FW */
178  IFX_void_t (*ifx_mps_bufman_freeall)(IFX_void_t) = IFX_NULL;
179 @@ -201,7 +219,8 @@ IFX_boolean_t ifx_mps_ext_bufman ()
180   */
181  IFX_void_t *ifx_mps_fastbuf_malloc (IFX_size_t size, IFX_int32_t priority)
182  {
183 -   IFX_uint32_t ptr, flags;
184 +   IFXOS_INTSTAT flags;
185 +   IFX_uint32_t ptr;
186     IFX_int32_t index = fastbuf_index;
187  
188     if (fastbuf_initialized == 0)
189 @@ -255,7 +274,7 @@ IFX_void_t *ifx_mps_fastbuf_malloc (IFX_
190   */
191  IFX_void_t ifx_mps_fastbuf_free (const IFX_void_t * ptr)
192  {
193 -   IFX_uint32_t flags;
194 +   IFXOS_INTSTAT flags;
195     IFX_int32_t index = fastbuf_index;
196  
197     IFXOS_LOCKINT (flags);
198 @@ -451,7 +470,7 @@ static mps_buffer_state_e ifx_mps_bufman
199   */
200  static IFX_int32_t ifx_mps_bufman_inc_level (IFX_uint32_t value)
201  {
202 -   IFX_uint32_t flags;
203 +   IFXOS_INTSTAT flags;
204  
205     if (mps_buffer.buf_level + value > MPS_BUFFER_MAX_LEVEL)
206     {
207 @@ -478,7 +497,7 @@ static IFX_int32_t ifx_mps_bufman_inc_le
208   */
209  static IFX_int32_t ifx_mps_bufman_dec_level (IFX_uint32_t value)
210  {
211 -   IFX_uint32_t flags;
212 +   IFXOS_INTSTAT flags;
213  
214     if (mps_buffer.buf_level < value)
215     {
216 @@ -630,7 +649,7 @@ IFX_int32_t ifx_mps_bufman_buf_provide (
217        mem_seg_ptr[i] =
218           (IFX_uint32_t *) CPHYSADDR ((IFX_uint32_t) mps_buffer.
219                                       malloc (segment_size, FASTBUF_FW_OWNED));
220 -      if (mem_seg_ptr[i] == CPHYSADDR (IFX_NULL))
221 +      if (mem_seg_ptr[i] == (IFX_uint32_t *)CPHYSADDR (IFX_NULL))
222        {
223           TRACE (MPS, DBG_LEVEL_HIGH,
224                  ("%s(): cannot allocate buffer\n", __FUNCTION__));
225 @@ -946,7 +965,7 @@ IFX_int32_t ifx_mps_common_open (mps_com
226                                   mps_mbx_dev * pMBDev, IFX_int32_t bcommand,
227                                   IFX_boolean_t from_kernel)
228  {
229 -   IFX_uint32_t flags;
230 +   IFXOS_INTSTAT flags;
231  
232     IFXOS_LOCKINT (flags);
233  
234 @@ -1062,7 +1081,7 @@ IFX_int32_t ifx_mps_common_close (mps_mb
235  IFX_void_t ifx_mps_release_structures (mps_comm_dev * pDev)
236  {
237     IFX_int32_t count;
238 -   IFX_uint32_t flags;
239 +   IFXOS_INTSTAT flags;
240  
241     IFXOS_LOCKINT (flags);
242     IFXOS_BlockFree (pFW_img_data);
243 @@ -1111,7 +1130,7 @@ IFX_uint32_t ifx_mps_init_structures (mp
244  
245     /* Initialize MPS main structure */
246     memset ((IFX_void_t *) pDev, 0, sizeof (mps_comm_dev));
247 -   pDev->base_global = (mps_mbx_reg *) IFX_MPS_SRAM;
248 +   pDev->base_global = (mps_mbx_reg *) IFXMIPS_MPS_SRAM;
249     pDev->flags = 0x00000000;
250     MBX_Memory = pDev->base_global;
251  
252 @@ -1119,9 +1138,11 @@ IFX_uint32_t ifx_mps_init_structures (mp
253        for MBX communication. These are: mailbox base address, mailbox size, *
254        mailbox read index and mailbox write index. for command and voice
255        mailbox, * upstream and downstream direction. */
256 -   memset ((IFX_void_t *) MBX_Memory,   /* avoid to overwrite CPU boot
257 -                                           registers */
258 -           0, sizeof (mps_mbx_reg) - 2 * sizeof (mps_boot_cfg_reg));
259 +   memset (
260 +       /* avoid to overwrite CPU boot registers */
261 +          (IFX_void_t *) MBX_Memory,
262 +           0,
263 +           sizeof (mps_mbx_reg) - 2 * sizeof (mps_boot_cfg_reg));
264     MBX_Memory->MBX_UPSTR_CMD_BASE =
265        (IFX_uint32_t *) CPHYSADDR ((IFX_uint32_t) MBX_UPSTRM_CMD_FIFO_BASE);
266     MBX_Memory->MBX_UPSTR_CMD_SIZE = MBX_CMD_FIFO_SIZE;
267 @@ -1558,7 +1579,7 @@ IFX_int32_t ifx_mps_mbx_read_message (mp
268                                        IFX_uint32_t * bytes)
269  {
270     IFX_int32_t i, ret;
271 -   IFX_uint32_t flags;
272 +   IFXOS_INTSTAT flags;
273  
274     IFXOS_LOCKINT (flags);
275  
276 @@ -1768,7 +1789,7 @@ IFX_int32_t ifx_mps_mbx_write_message (m
277  {
278     mps_fifo *mbx;
279     IFX_uint32_t i;
280 -   IFX_uint32_t flags;
281 +   IFXOS_INTSTAT flags;
282     IFX_int32_t retval = -EAGAIN;
283     IFX_int32_t retries = 0;
284     IFX_uint32_t word = 0;
285 @@ -2163,6 +2184,7 @@ IFX_int32_t ifx_mps_mbx_write_cmd (mps_m
286        TRACE (MPS, DBG_LEVEL_HIGH,
287               ("%s(): Invalid device ID %d !\n", __FUNCTION__, pMBDev->devID));
288     }
289 +
290     return retval;
291  }
292  
293 @@ -2186,7 +2208,7 @@ IFX_void_t ifx_mps_mbx_data_upstream (IF
294     mps_mbx_dev *mbx_dev;
295     MbxMsg_s msg;
296     IFX_uint32_t bytes_read = 0;
297 -   IFX_uint32_t flags;
298 +   IFXOS_INTSTAT flags;
299     IFX_int32_t ret;
300  
301     /* set pointer to data upstream mailbox, no matter if 0,1,2 or 3 because
302 @@ -2277,7 +2299,7 @@ IFX_void_t ifx_mps_mbx_data_upstream (IF
303           {
304              ifx_mps_bufman_dec_level (1);
305              if ((ifx_mps_bufman_get_level () <= mps_buffer.buf_threshold) &&
306 -                (atomic_read (&pMPSDev->provide_buffer->object.count) == 0))
307 +                ((volatile unsigned int)pMPSDev->provide_buffer->object.count == 0))
308              {
309                 IFXOS_LockRelease (pMPSDev->provide_buffer);
310              }
311 @@ -2320,7 +2342,7 @@ IFX_void_t ifx_mps_mbx_data_upstream (IF
312  #endif /* CONFIG_PROC_FS */
313              ifx_mps_bufman_dec_level (1);
314              if ((ifx_mps_bufman_get_level () <= mps_buffer.buf_threshold) &&
315 -                (atomic_read (&pMPSDev->provide_buffer->object.count) == 0))
316 +                ((volatile unsigned int)pMPSDev->provide_buffer->object.count == 0))
317              {
318                 IFXOS_LockRelease (pMPSDev->provide_buffer);
319              }
320 @@ -2350,7 +2372,7 @@ IFX_void_t ifx_mps_mbx_data_upstream (IF
321  IFX_void_t ifx_mps_mbx_cmd_upstream (IFX_ulong_t dummy)
322  {
323     mps_fifo *mbx;
324 -   IFX_uint32_t flags;
325 +   IFXOS_INTSTAT flags;
326  
327     /* set pointer to upstream command mailbox */
328     mbx = &(pMPSDev->cmd_upstrm_fifo);
329 @@ -2398,7 +2420,7 @@ IFX_void_t ifx_mps_mbx_event_upstream (I
330     mps_event_msg msg;
331     IFX_int32_t length = 0;
332     IFX_int32_t read_length = 0;
333 -   IFX_uint32_t flags;
334 +   IFXOS_INTSTAT flags;
335  
336     /* set pointer to upstream event mailbox */
337     mbx = &(pMPSDev->event_upstrm_fifo);
338 @@ -2613,6 +2635,7 @@ IFX_void_t ifx_mps_enable_mailbox_int ()
339  #endif
340  
341     *IFX_MPS_AD0ENR = Ad0Reg.val;
342 +
343  }
344  
345  /**
346 @@ -2641,7 +2664,7 @@ IFX_void_t ifx_mps_disable_mailbox_int (
347  */
348  IFX_void_t ifx_mps_dd_mbx_int_enable (IFX_void_t)
349  {
350 -   IFX_uint32_t flags;
351 +   IFXOS_INTSTAT flags;
352     MPS_Ad0Reg_u Ad0Reg;
353  
354     IFXOS_LOCKINT (flags);
355 @@ -2667,7 +2690,7 @@ IFX_void_t ifx_mps_dd_mbx_int_enable (IF
356  */
357  IFX_void_t ifx_mps_dd_mbx_int_disable (IFX_void_t)
358  {
359 -   IFX_uint32_t flags;
360 +   IFXOS_INTSTAT flags;
361     MPS_Ad0Reg_u Ad0Reg;
362  
363     IFXOS_LOCKINT (flags);
364 @@ -2732,7 +2755,6 @@ irqreturn_t ifx_mps_ad0_irq (IFX_int32_t
365  #else /* */
366     mask_and_ack_danube_irq (irq);
367  #endif /* */
368 -
369     /* FW is up and ready to process commands */
370     if (MPS_Ad0StatusReg.fld.dl_end)
371     {
372 @@ -2794,6 +2816,7 @@ irqreturn_t ifx_mps_ad0_irq (IFX_int32_t
373        }
374     }
375  
376 +
377     if (MPS_Ad0StatusReg.fld.du_mbx)
378     {
379  #ifdef CONFIG_PROC_FS
380 @@ -2938,12 +2961,12 @@ irqreturn_t ifx_mps_vc_irq (IFX_int32_t 
381     IFX_MPS_CVC0SR[chan] = MPS_VCStatusReg.val;
382     /* handle only enabled interrupts */
383     MPS_VCStatusReg.val &= IFX_MPS_VC0ENR[chan];
384 -
385  #ifdef LINUX_2_6
386     bsp_mask_and_ack_irq (irq);
387  #else /* */
388     mask_and_ack_danube_irq (irq);
389  #endif /* */
390 +
391     pMPSDev->event.MPS_VCStatReg[chan].val = MPS_VCStatusReg.val;
392  #ifdef PRINT_ON_ERR_INTERRUPT
393     if (MPS_VCStatusReg.fld.rcv_ov)
394 @@ -3087,7 +3110,8 @@ IFX_int32_t ifx_mps_get_fw_version (IFX_
395   */
396  IFX_return_t ifx_mps_init_gpt ()
397  {
398 -   IFX_uint32_t flags, timer_flags, timer, loops = 0;
399 +   unsigned long flags;
400 +   IFX_uint32_t timer_flags, timer, loops = 0;
401     IFX_ulong_t count;
402  #if defined(SYSTEM_AR9) || defined(SYSTEM_VR9)
403     timer = TIMER1A;
404 @@ -3160,6 +3184,7 @@ IFX_void_t ifx_mps_shutdown_gpt (IFX_voi
405  #else /* Danube */
406     timer = TIMER1B;
407  #endif /* SYSTEM_AR9 || SYSTEM_VR9 */
408 +
409     ifx_gptu_timer_free (timer);
410  }
411  
412 --- a/src/mps/drv_mps_vmmc_danube.c
413 +++ b/src/mps/drv_mps_vmmc_danube.c
414 @@ -32,9 +32,21 @@
415  #include "ifxos_select.h"
416  #include "ifxos_interrupt.h"
417  
418 -#include <asm/ifx/ifx_regs.h>
419 -#include <asm/ifx/ifx_gpio.h>
420 -#include <asm/ifx/common_routines.h>
421 +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,28))
422 +#  include <lantiq.h>
423 +#  include <irq.h>
424 +#  include <lantiq_timer.h>
425 +#  include <linux/dma-mapping.h>
426 +
427 +
428 +# define LQ_RCU_RST            ((u32 *)(LQ_RCU_BASE_ADDR + 0x0010))
429 +#define IFX_RCU_RST_REQ_CPU1             (1 << 3)
430 +#  define IFX_RCU_RST_REQ        LQ_RCU_RST
431 +#else
432 +#  include <asm/ifx/ifx_regs.h>
433 +#  include <asm/ifx_vpe.h>
434 +#  include <asm/ifx/ifx_gpio.h>
435 +#endif
436  
437  #include "drv_mps_vmmc.h"
438  #include "drv_mps_vmmc_dbg.h"
439 @@ -71,6 +83,20 @@ IFX_void_t ifx_mps_release (IFX_void_t);
440  /* Local function definition     */
441  /* ============================= */
442  
443 +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,28))
444 +IFX_uint32_t ifx_get_cp1_size(IFX_void_t)
445 +{
446 +       return 1;
447 +}
448 +
449 +unsigned int *ltq_get_cp1_base(void);
450 +
451 +IFX_uint32_t *ifx_get_cp1_base(IFX_void_t)
452 +{
453 +       return ltq_get_cp1_base();
454 +}
455 +#endif
456 +
457  /******************************************************************************
458   * DANUBE Specific Routines
459   ******************************************************************************/
460 @@ -130,6 +156,15 @@ IFX_int32_t ifx_mps_download_firmware (m
461     }
462  
463     /* check if FW image fits in available memory space */
464 +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,28))
465 +   if (mem > ifx_get_cp1_size()<<20)
466 +   {
467 +      TRACE (MPS, DBG_LEVEL_HIGH,
468 +      ("[%s %s %d]: error, firmware memory exceeds reserved space (%i > %i)!\n",
469 +                 __FILE__, __func__, __LINE__, mem, ifx_get_cp1_size()<<20));
470 +      return IFX_ERROR;
471 +   }
472 +#else
473     if (mem > ifx_get_cp1_size())
474     {
475        TRACE (MPS, DBG_LEVEL_HIGH,
476 @@ -137,6 +172,7 @@ IFX_int32_t ifx_mps_download_firmware (m
477                   __FILE__, __func__, __LINE__, mem, ifx_get_cp1_size()));
478        return IFX_ERROR;
479     }
480 +#endif
481  
482     /* reset the driver */
483     ifx_mps_reset ();
484 @@ -357,7 +393,7 @@ IFX_void_t ifx_mps_release (IFX_void_t)
485   */
486  IFX_void_t ifx_mps_wdog_expiry()
487  {
488 -   IFX_uint32_t flags;
489 +   unsigned long flags;
490  
491     IFXOS_LOCKINT (flags);
492     /* recalculate and compare the firmware checksum */
493 --- a/src/mps/drv_mps_vmmc_device.h
494 +++ b/src/mps/drv_mps_vmmc_device.h
495 @@ -16,8 +16,58 @@
496                   declarations.
497  *******************************************************************************/
498  
499 -#include <asm/ifx/ifx_regs.h>
500 -#include <asm/ifx_vpe.h>
501 +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,28))
502 +#  include <lantiq.h>
503 +#  include <irq.h>
504 +#  include <lantiq_soc.h>
505 +#  include <gpio.h>
506 +#define IFXMIPS_MPS_SRAM               ((u32 *)(KSEG1 + 0x1F200000))
507 +#define IFXMIPS_MPS_BASE_ADDR          (KSEG1 + 0x1F107000)
508 +#define IFXMIPS_MPS_CHIPID             ((u32 *)(IFXMIPS_MPS_BASE_ADDR + 0x0344))
509 +#define IFXMIPS_MPS_VC0ENR             ((u32 *)(IFXMIPS_MPS_BASE_ADDR + 0x0000))
510 +#define IFXMIPS_MPS_RVC0SR             ((u32 *)(IFXMIPS_MPS_BASE_ADDR + 0x0010))
511 +#define IFXMIPS_MPS_CVC0SR             ((u32 *)(IFXMIPS_MPS_BASE_ADDR + 0x0030))
512 +#define IFXMIPS_MPS_CVC1SR             ((u32 *)(IFXMIPS_MPS_BASE_ADDR + 0x0034))
513 +#define IFXMIPS_MPS_CVC2SR             ((u32 *)(IFXMIPS_MPS_BASE_ADDR + 0x0038))
514 +#define IFXMIPS_MPS_CVC3SR             ((u32 *)(IFXMIPS_MPS_BASE_ADDR + 0x003C))
515 +#define IFXMIPS_MPS_RAD0SR             ((u32 *)(IFXMIPS_MPS_BASE_ADDR + 0x0040))
516 +#define IFXMIPS_MPS_RAD1SR             ((u32 *)(IFXMIPS_MPS_BASE_ADDR + 0x0044))
517 +#define IFXMIPS_MPS_SAD0SR             ((u32 *)(IFXMIPS_MPS_BASE_ADDR + 0x0048))
518 +#define IFXMIPS_MPS_SAD1SR             ((u32 *)(IFXMIPS_MPS_BASE_ADDR + 0x004C))
519 +#define IFXMIPS_MPS_CAD0SR             ((u32 *)(IFXMIPS_MPS_BASE_ADDR + 0x0050))
520 +#define IFXMIPS_MPS_CAD1SR             ((u32 *)(IFXMIPS_MPS_BASE_ADDR + 0x0054))
521 +#define IFXMIPS_MPS_AD0ENR             ((u32 *)(IFXMIPS_MPS_BASE_ADDR + 0x0058))
522 +#define IFXMIPS_MPS_AD1ENR             ((u32 *)(IFXMIPS_MPS_BASE_ADDR + 0x005C))
523 +
524 +#define IFXMIPS_MPS_CHIPID_VERSION_GET(value)  (((value) >> 28) & ((1 << 4) - 1))
525 +#define IFXMIPS_MPS_CHIPID_VERSION_SET(value)  ((((1 << 4) - 1) & (value)) << 28)
526 +#define IFXMIPS_MPS_CHIPID_PARTNUM_GET(value)  (((value) >> 12) & ((1 << 16) - 1))
527 +#define IFXMIPS_MPS_CHIPID_PARTNUM_SET(value)  ((((1 << 16) - 1) & (value)) << 12)
528 +#define IFXMIPS_MPS_CHIPID_MANID_GET(value)    (((value) >> 1) & ((1 << 10) - 1))
529 +#define IFXMIPS_MPS_CHIPID_MANID_SET(value)    ((((1 << 10) - 1) & (value)) << 1)
530 +#else
531 +#  include <asm/ifx/ifx_regs.h>
532 +#  include <asm/ifx_vpe.h>
533 +#endif
534 +/* MPS register */
535 +#  define IFX_MPS_AD0ENR      IFXMIPS_MPS_AD0ENR
536 +#  define IFX_MPS_AD1ENR      IFXMIPS_MPS_AD1ENR
537 +#  define IFX_MPS_RAD0SR      IFXMIPS_MPS_RAD0SR
538 +#  define IFX_MPS_RAD1SR      IFXMIPS_MPS_RAD1SR
539 +#  define IFX_MPS_VC0ENR      IFXMIPS_MPS_VC0ENR
540 +#  define IFX_MPS_RVC0SR      IFXMIPS_MPS_RVC0SR
541 +#  define IFX_MPS_CVC0SR      IFXMIPS_MPS_CVC0SR
542 +#  define IFX_MPS_CAD0SR      IFXMIPS_MPS_CAD0SR
543 +#  define IFX_MPS_CAD1SR      IFXMIPS_MPS_CAD1SR
544 +#  define IFX_MPS_CVC1SR      IFXMIPS_MPS_CVC1SR
545 +#  define IFX_MPS_CVC2SR      IFXMIPS_MPS_CVC2SR
546 +#  define IFX_MPS_CVC3SR      IFXMIPS_MPS_CVC3SR
547 +#  define IFX_MPS_SAD0SR      IFXMIPS_MPS_SAD0SR
548 +/* interrupt vectors */
549 +#  define INT_NUM_IM4_IRL14   (INT_NUM_IM4_IRL0 + 14)
550 +#  define INT_NUM_IM4_IRL18   (INT_NUM_IM4_IRL0 + 18)
551 +#  define INT_NUM_IM4_IRL19   (INT_NUM_IM4_IRL0 + 19)
552 +#  define IFX_ICU_IM4_IER     IFXMIPS_ICU_IM4_IER
553  
554  /* ============================= */
555  /* MPS Common defines            */
556 @@ -26,32 +76,28 @@
557  #define MPS_BASEADDRESS 0xBF107000
558  #define MPS_RAD0SR      MPS_BASEADDRESS + 0x0004
559  
560 -#define MPS_RAD0SR_DU   (1<<0)
561 -#define MPS_RAD0SR_CU   (1<<1)
562 -
563  #define MBX_BASEADDRESS 0xBF200000
564  #define VCPU_BASEADDRESS 0xBF208000     /* 0xBF108000 */
565  /*---------------------------------------------------------------------------*/
566 +#if !defined(CONFIG_LANTIQ)
567 +/* enabling interrupts is done with request_irq by the BSP
568 +   The related code should not be needed anymore */
569  #if defined(SYSTEM_AR9) || defined(SYSTEM_VR9)
570  /* TODO: doublecheck - IM4 or different! */
571  #define MPS_INTERRUPTS_ENABLE(X)  *((volatile IFX_uint32_t*) IFX_ICU_IM4_IER) |= X;
572  #define MPS_INTERRUPTS_DISABLE(X) *((volatile IFX_uint32_t*) IFX_ICU_IM4_IER) &= ~X;
573 -#define MPS_INTERRUPTS_CLEAR(X)   *((volatile IFX_uint32_t*) IFX_ICU_IM4_ISR) = X;
574 -#define MPS_INTERRUPTS_SET(X)     *((volatile IFX_uint32_t*) IFX_ICU_IM4_IRSR) = X;/* |= ? */
575  #else /* Danube */
576  /* TODO: possibly needs to be changed to IM4 !!!!!! */
577  #ifdef LINUX_2_6
578  #define MPS_INTERRUPTS_ENABLE(X)  *((volatile IFX_uint32_t*) IFX_ICU_IM4_IER) |= X;
579  #define MPS_INTERRUPTS_DISABLE(X) *((volatile IFX_uint32_t*) IFX_ICU_IM4_IER) &= ~X;
580 -#define MPS_INTERRUPTS_CLEAR(X)   *((volatile IFX_uint32_t*) IFX_ICU_IM4_ISR) = X;
581 -#define MPS_INTERRUPTS_SET(X)     *((volatile IFX_uint32_t*) IFX_ICU_IM4_IRSR) = X;/* |= ? */
582  #else /* */
583  #define MPS_INTERRUPTS_ENABLE(X)  *((volatile IFX_uint32_t*) DANUBE_ICU_IM5_IER) |= X;
584  #define MPS_INTERRUPTS_DISABLE(X) *((volatile IFX_uint32_t*) DANUBE_ICU_IM5_IER) &= ~X;
585 -#define MPS_INTERRUPTS_CLEAR(X)   *((volatile IFX_uint32_t*) DANUBE_ICU_IM5_ISR) = X;
586 -#define MPS_INTERRUPTS_SET(X)     *((volatile IFX_uint32_t*) DANUBE_ICU_IM5_IRSR) = X;/* |= ? */
587  #endif /* LINUX_2_6 */
588  #endif /* SYSTEM_AR9 || SYSTEM_VR9 */
589 +#endif /* !defined(CONFIG_LANTIQ) */
590 +
591  /*---------------------------------------------------------------------------*/
592  
593  /*---------------------------------------------------------------------------*/
594 @@ -142,53 +188,9 @@
595  #if defined(SYSTEM_AR9) || defined(SYSTEM_VR9)
596  /* ***** Amazon-S specific defines ***** */
597  #define IFX_MPS_Base      AMAZON_S_MPS
598 -
599 -//#define IFX_MPS_CHIPID              AMAZON_S_MPS_CHIPID
600 -//#define IFX_MPS_CHIPID_VERSION_GET  AMAZON_S_MPS_CHIPID_VERSION_GET
601 -
602 -//#define IFX_MPS_AD0ENR    AMAZON_S_MPS_AD0ENR
603 -//#define IFX_MPS_AD1ENR    AMAZON_S_MPS_AD1ENR
604 -//#define IFX_MPS_VC0ENR    AMAZON_S_MPS_VC0ENR
605 -//#define IFX_MPS_SAD0SR    AMAZON_S_MPS_SAD0SR
606 -//#define IFX_MPS_RAD0SR    AMAZON_S_MPS_RAD0SR
607 -//#define IFX_MPS_CAD0SR    AMAZON_S_MPS_CAD0SR
608 -//#define IFX_MPS_RAD1SR    AMAZON_S_MPS_RAD1SR
609 -//#define IFX_MPS_CAD1SR    AMAZON_S_MPS_CAD1SR
610 -//#define IFX_MPS_RVC0SR    AMAZON_S_MPS_RVC0SR
611 -//#define IFX_MPS_CVC0SR    AMAZON_S_MPS_CVC0SR
612 -//#define IFX_MPS_CVC1SR    AMAZON_S_MPS_CVC1SR
613 -//#define IFX_MPS_CVC2SR    AMAZON_S_MPS_CVC2SR
614 -//#define IFX_MPS_CVC3SR    AMAZON_S_MPS_CVC3SR
615 -
616 -//#define IFX_MPS_SRAM      AMAZON_S_MPS_SRAM
617  #else /* */
618  /* ***** DANUBE specific defines ***** */
619  #define IFX_MPS_Base      DANUBE_MPS
620 -
621 -//#define IFX_MPS_CHIPID    DANUBE_MPS_CHIPID
622 -//#define IFX_MPS_CHIPID_VERSION_GET  DANUBE_MPS_CHIPID_VERSION_GET
623 -//#define IFX_MPS_CHIPID_VERSION_SET  DANUBE_MPS_CHIPID_VERSION_SET
624 -//#define IFX_MPS_CHIPID_PARTNUM_GET  DANUBE_MPS_CHIPID_PARTNUM_GET
625 -//#define IFX_MPS_CHIPID_PARTNUM_SET  DANUBE_MPS_CHIPID_PARTNUM_SET
626 -//#define IFX_MPS_CHIPID_MANID_GET    DANUBE_MPS_CHIPID_MANID_GET
627 -//#define IFX_MPS_CHIPID_MANID_SET    DANUBE_MPS_CHIPID_MANID_SET
628 -//#define IFX_MPS_SUBVER              DANUBE_MPS_SUBVER
629 -
630 -//#define IFX_MPS_AD0ENR    DANUBE_MPS_AD0ENR
631 -//#define IFX_MPS_AD1ENR    DANUBE_MPS_AD1ENR
632 -//#define IFX_MPS_VC0ENR    DANUBE_MPS_VC0ENR
633 -//#define IFX_MPS_SAD0SR    DANUBE_MPS_SAD0SR
634 -//#define IFX_MPS_RAD0SR    DANUBE_MPS_RAD0SR
635 -//#define IFX_MPS_CAD0SR    DANUBE_MPS_CAD0SR
636 -//#define IFX_MPS_RAD1SR    DANUBE_MPS_RAD1SR
637 -//#define IFX_MPS_CAD1SR    DANUBE_MPS_CAD1SR
638 -//#define IFX_MPS_RVC0SR    DANUBE_MPS_RVC0SR
639 -//#define IFX_MPS_CVC0SR    DANUBE_MPS_CVC0SR
640 -//#define IFX_MPS_CVC1SR    DANUBE_MPS_CVC1SR
641 -//#define IFX_MPS_CVC2SR    DANUBE_MPS_CVC2SR
642 -//#define IFX_MPS_CVC3SR    DANUBE_MPS_CVC3SR
643 -
644 -//#define IFX_MPS_SRAM      DANUBE_MPS_SRAM
645  #endif /* SYSTEM_AR9 || SYSTEM_VR9 */
646  typedef enum
647  {
648 --- a/src/mps/drv_mps_vmmc_linux.c
649 +++ b/src/mps/drv_mps_vmmc_linux.c
650 @@ -19,11 +19,16 @@
651  #include "drv_config.h"
652  
653  #include "drv_mps_version.h"
654 +#include <linux/version.h>
655  
656  #ifdef CONFIG_DEBUG_MINI_BOOT
657  #define IKOS_MINI_BOOT
658  #endif /* */
659 +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,33))
660 +#include <linux/autoconf.h>
661 +#else
662  #include <generated/autoconf.h>
663 +#endif
664  #include <linux/module.h>
665  #include <linux/init.h>
666  #include <linux/poll.h>
667 @@ -34,16 +39,27 @@
668  #include <linux/delay.h>
669  #include <linux/interrupt.h>
670  #ifdef LINUX_2_6
671 +#ifndef UTS_RELEASE
672 +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 33)
673 +#include <linux/utsrelease.h>
674 +#else
675  #include <generated/utsrelease.h>
676 +#endif
677 +#endif /* UTC_RELEASE */
678  #else /* */
679  #include <linux/uts.h>
680  #include <linux/moduleparam.h>
681  #endif /* */
682  
683 -
684 -#include <asm/ifx/irq.h>
685 -#include <asm/ifx/ifx_regs.h>
686 -#include <asm/ifx_vpe.h>
687 +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,28))
688 +#include "drv_vmmc_init.h"
689 +#  include <lantiq.h>
690 +#  include <irq.h>
691 +#else
692 +#  include <asm/ifx/irq.h>
693 +#  include <asm/ifx/ifx_regs.h>
694 +#  include <asm/ifx_vpe.h>
695 +#endif
696  
697  /* lib_ifxos headers */
698  #include "ifx_types.h"
699 @@ -915,7 +931,7 @@ IFX_int32_t ifx_mps_ioctl (struct inode 
700  #endif /* MPS_FIFO_BLOCKING_WRITE */
701        case FIO_MPS_GET_STATUS:
702           {
703 -            IFX_uint32_t flags;
704 +            unsigned long flags;
705  
706              /* get the status of the channel */
707              if (!from_kernel)
708 @@ -949,7 +965,7 @@ IFX_int32_t ifx_mps_ioctl (struct inode 
709  #if CONFIG_MPS_HISTORY_SIZE > 0
710        case FIO_MPS_GET_CMD_HISTORY:
711           {
712 -            IFX_uint32_t flags;
713 +            unsigned long flags;
714  
715              if (from_kernel)
716              {
717 @@ -1641,6 +1657,7 @@ IFX_int32_t ifx_mps_get_status_proc (IFX
718           sprintf (buf + len, "   minLv: \t  %8d\n",
719                    ifx_mps_dev.voice_mb[i].upstrm_fifo->min_space);
720     }
721 +
722     return len;
723  }
724  
725 @@ -2247,9 +2264,11 @@ IFX_int32_t __init ifx_mps_init_module (
726           return result;
727     }
728  
729 +#if !defined(CONFIG_LANTIQ)
730 +   /** \todo This is handled already with request_irq, remove */
731     /* Enable all MPS Interrupts at ICU0 */
732     MPS_INTERRUPTS_ENABLE (0x0000FF80);
733 -
734 +#endif
735     /* enable mailbox interrupts */
736     ifx_mps_enable_mailbox_int ();
737     /* init FW ready event */
738 @@ -2377,9 +2396,11 @@ ifx_mps_cleanup_module (IFX_void_t)
739     /* disable mailbox interrupts */
740     ifx_mps_disable_mailbox_int ();
741  
742 +#if !defined(CONFIG_LANTIQ)
743     /* disable Interrupts at ICU0 */
744 -   MPS_INTERRUPTS_DISABLE (DANUBE_MPS_AD0_IR4); /* Disable DFE/AFE 0 Interrupts
745 -                                                 */
746 +   /* Disable DFE/AFE 0 Interrupts*/
747 +   MPS_INTERRUPTS_DISABLE (DANUBE_MPS_AD0_IR4);
748 +#endif
749  
750     /* disable all MPS interrupts */
751     ifx_mps_disable_all_int ();
752 --- a/src/drv_vmmc_ioctl.c
753 +++ b/src/drv_vmmc_ioctl.c
754 @@ -18,6 +18,7 @@
755  /* Includes                      */
756  /* ============================= */
757  #include "drv_api.h"
758 +#include "drv_vmmc_init.h"
759  #include "drv_vmmc_api.h"
760  #include "drv_vmmc_bbd.h"
761