]> git.karo-electronics.de Git - karo-tx-redboot.git/blob - packages/hal/arm/mx31/var/v2_0/include/hal_soc.h
unified MX27, MX25, MX37 trees
[karo-tx-redboot.git] / packages / hal / arm / mx31 / var / v2_0 / include / hal_soc.h
1 //==========================================================================
2 //
3 //      hal_soc.h
4 //
5 //      SoC chip definitions
6 //
7 //==========================================================================
8 //####ECOSGPLCOPYRIGHTBEGIN####
9 // -------------------------------------------
10 // This file is part of eCos, the Embedded Configurable Operating System.
11 // Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
12 // Copyright (C) 2002 Gary Thomas
13 //
14 // eCos is free software; you can redistribute it and/or modify it under
15 // the terms of the GNU General Public License as published by the Free
16 // Software Foundation; either version 2 or (at your option) any later version.
17 //
18 // eCos is distributed in the hope that it will be useful, but WITHOUT ANY
19 // WARRANTY; without even the implied warranty of MERCHANTABILITY or
20 // FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
21 // for more details.
22 //
23 // You should have received a copy of the GNU General Public License along
24 // with eCos; if not, write to the Free Software Foundation, Inc.,
25 // 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
26 //
27 // As a special exception, if other files instantiate templates or use macros
28 // or inline functions from this file, or you compile this file and link it
29 // with other works to produce a work based on this file, this file does not
30 // by itself cause the resulting work to be covered by the GNU General Public
31 // License. However the source code for this file must still be made available
32 // in accordance with section (3) of the GNU General Public License.
33 //
34 // This exception does not invalidate any other reasons why a work based on
35 // this file might be covered by the GNU General Public License.
36 //
37 // Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
38 // at http://sources.redhat.com/ecos/ecos-license/
39 // -------------------------------------------
40 //####ECOSGPLCOPYRIGHTEND####
41 //========================================================================*/
42
43 #ifndef __HAL_SOC_H__
44 #define __HAL_SOC_H__
45
46 #ifdef __ASSEMBLER__
47
48 #define REG8_VAL(a)          (a)
49 #define REG16_VAL(a)         (a)
50 #define REG32_VAL(a)         (a)
51
52 #define REG8_PTR(a)          (a)
53 #define REG16_PTR(a)         (a)
54 #define REG32_PTR(a)         (a)
55
56 #else /* __ASSEMBLER__ */
57
58 extern char HAL_PLATFORM_EXTRA[];
59 #define REG8_VAL(a)          ((unsigned char)(a))
60 #define REG16_VAL(a)         ((unsigned short)(a))
61 #define REG32_VAL(a)         ((unsigned int)(a))
62
63 #define REG8_PTR(a)          ((volatile unsigned char *)(a))
64 #define REG16_PTR(a)         ((volatile unsigned short *)(a))
65 #define REG32_PTR(a)         ((volatile unsigned int *)(a))
66 #define readb(a)             (*(volatile unsigned char *)(a))
67 #define readw(a)             (*(volatile unsigned short *)(a))
68 #define readl(a)             (*(volatile unsigned int *)(a))
69 #define writeb(v,a)          (*(volatile unsigned char *)(a) = (v))
70 #define writew(v,a)          (*(volatile unsigned short *)(a) = (v))
71 #define writel(v,a)          (*(volatile unsigned int *)(a) = (v))
72
73 #endif /* __ASSEMBLER__ */
74
75 #define IRAM_BASE_ADDR         0x1FFC0000
76 /*
77  * Default Memory Layout Definitions
78  */
79
80 #define L2CC_BASE_ADDR          0x30000000
81
82 /*
83  * AIPS 1
84  */
85 #define AIPS1_BASE_ADDR         0x43F00000
86 #define AIPS1_CTRL_BASE_ADDR    AIPS1_BASE_ADDR
87 #define MAX_BASE_ADDR           0x43F04000
88 #define EVTMON_BASE_ADDR        0x43F08000
89 #define CLKCTL_BASE_ADDR        0x43F0C000
90 #define ETB_SLOT4_BASE_ADDR     0x43F10000
91 #define ETB_SLOT5_BASE_ADDR     0x43F14000
92 #define ECT_CTIO_BASE_ADDR      0x43F18000
93 #define I2C_BASE_ADDR           0x43F80000
94 #define I2C3_BASE_ADDR          0x43F84000
95 #define OTG_BASE_ADDR           0x43F88000
96 #define ATA_BASE_ADDR           0x43F8C000
97 #define UART1_BASE_ADDR         0x43F90000
98 #define UART2_BASE_ADDR         0x43F94000
99 #define I2C2_BASE_ADDR          0x43F98000
100 #define OWIRE_BASE_ADDR         0x43F9C000
101 #define SSI1_BASE_ADDR          0x43FA0000
102 #define CSPI1_BASE_ADDR         0x43FA4000
103 #define KPP_BASE_ADDR           0x43FA8000
104 #define IOMUXC_BASE_ADDR        0x43FAC000
105 #define UART4_BASE_ADDR         0x43FB0000
106 #define UART5_BASE_ADDR         0x43FB4000
107 #define ECT_IP1_BASE_ADDR       0x43FB8000
108 #define ECT_IP2_BASE_ADDR       0x43FBC000
109
110 /*
111  * SPBA
112  */
113 #define SPBA_BASE_ADDR          0x50000000
114 #define MMC_SDHC1_BASE_ADDR     0x50004000
115 #define MMC_SDHC2_BASE_ADDR     0x50008000
116 #define ESDHC1_REG_BASE         MMC_SDHC1_BASE_ADDR
117 #define UART3_BASE_ADDR         0x5000C000
118 #define CSPI2_BASE_ADDR         0x50010000
119 #define SSI2_BASE_ADDR          0x50014000
120 #define SIM_BASE_ADDR           0x50018000
121 #define IIM_BASE_ADDR           0x5001C000
122 #define ATA_DMA_BASE_ADDR       0x50020000
123 #define SPBA_CTRL_BASE_ADDR     0x5003C000
124
125 /*
126  * AIPS 2
127  */
128 #define AIPS2_BASE_ADDR         0x53F00000
129 #define AIPS2_CTRL_BASE_ADDR    AIPS2_BASE_ADDR
130 #define CCM_BASE_ADDR           0x53F80000
131 #define FIRI_BASE_ADDR          0x53F8C000
132 #define GPT1_BASE_ADDR          0x53F90000
133 #define EPIT1_BASE_ADDR         0x53F94000
134 #define EPIT2_BASE_ADDR         0x53F98000
135 #define GPIO3_BASE_ADDR         0x53FA4000
136 #define SCC_BASE                0x53FAC000
137 #define SCM_BASE                0x53FAE000
138 #define SMN_BASE                0x53FAF000
139 #define RNGA_BASE_ADDR          0x53FB0000
140 #define IPU_CTRL_BASE_ADDR      0x53FC0000
141 #define AUDMUX_BASE             0x53FC4000
142 #define MPEG4_ENC_BASE          0x53FC8000
143 #define GPIO1_BASE_ADDR         0x53FCC000
144 #define GPIO2_BASE_ADDR         0x53FD0000
145 #define SDMA_BASE_ADDR          0x53FD4000
146 #define RTC_BASE_ADDR           0x53FD8000
147 #define WDOG_BASE_ADDR          0x53FDC000
148 #define PWM_BASE_ADDR           0x53FE0000
149 #define RTIC_BASE_ADDR          0x53FEC000
150
151 /*
152  * ROMPATCH and AVIC
153  */
154 #define ROMPATCH_BASE_ADDR      0x60000000
155 #define AVIC_BASE_ADDR          0x68000000
156
157 /*
158  * NAND, SDRAM, WEIM, M3IF, EMI controllers
159  */
160 #define EXT_MEM_CTRL_BASE       0xB8000000
161 #define NFC_BASE                EXT_MEM_CTRL_BASE
162 #define ESDCTL_BASE             0xB8001000
163 #define WEIM_BASE_ADDR          0xB8002000
164 #define WEIM_CTRL_CS0           WEIM_BASE_ADDR
165 #define WEIM_CTRL_CS1           (WEIM_BASE_ADDR + 0x10)
166 #define WEIM_CTRL_CS2           (WEIM_BASE_ADDR + 0x20)
167 #define WEIM_CTRL_CS3           (WEIM_BASE_ADDR + 0x30)
168 #define WEIM_CTRL_CS4           (WEIM_BASE_ADDR + 0x40)
169 #define WEIM_CTRL_CS5           (WEIM_BASE_ADDR + 0x50)
170 #define M3IF_BASE               0xB8003000
171 #define PCMCIA_CTL_BASE         0xB8004000
172
173 /*
174  * Memory regions and CS
175  */
176 #define IPU_MEM_BASE_ADDR       0x70000000
177 #define CSD0_BASE_ADDR          0x80000000
178 #define CSD1_BASE_ADDR          0x90000000
179 #define CS0_BASE_ADDR           0xA0000000
180 #define CS1_BASE_ADDR           0xA8000000
181 #define CS2_BASE_ADDR           0xB0000000
182 #define CS3_BASE_ADDR           0xB2000000
183 #define CS4_BASE_ADDR           0xB4000000
184 #define CS4_BASE_PSRAM          0xB5000000
185 #define CS5_BASE_ADDR           0xB6000000
186 #define PCMCIA_MEM_BASE_ADDR    0xC0000000
187
188 #define INTERNAL_ROM_VA         0xF0000000
189
190 /*
191  * IRQ Controller Register Definitions.
192  */
193 #define AVIC_NIMASK                     REG32_PTR(AVIC_BASE_ADDR + (0x04))
194 #define AVIC_INTTYPEH                   REG32_PTR(AVIC_BASE_ADDR + (0x18))
195 #define AVIC_INTTYPEL                   REG32_PTR(AVIC_BASE_ADDR + (0x1C))
196
197 /* L210 */
198 #define L2_CACHE_LINE_SIZE              32
199 #define L2_CACHE_CTL_REG                0x100
200 #define L2_CACHE_AUX_CTL_REG            0x104
201 #define L2_CACHE_SYNC_REG               0x730
202 #define L2_CACHE_INV_LINE_REG           0x770
203 #define L2_CACHE_INV_WAY_REG            0x77C
204 #define L2_CACHE_CLEAN_LINE_PA_REG      0x7B0
205 #define L2_CACHE_CLEAN_LINE_WAY_REG     0x7B8
206 #define L2_CACHE_CLEAN_WAY_REG          0x7BC
207 #define L2_CACHE_CLEAN_INV_LINE_PA_REG  0x7F0
208 #define L2_CACHE_CLEAN_INV_LINE_WAY_REG 0x7F8
209 #define L2_CACHE_CLEAN_INV_WAY_REG      0x7FC
210
211 /* CCM */
212 #define CLKCTL_CCMR                     0x00
213 #define CLKCTL_PDR0                     0x04
214 #define CLKCTL_PDR1                     0x08
215 #define CLKCTL_PDR2                     0x64
216 #define CLKCTL_RCSR                     0x0C
217 #define CLKCTL_MPCTL                    0x10
218 #define CLKCTL_UPCTL                    0x14
219 #define CLKCTL_SPCTL                    0x18
220 #define CLKCTL_COSR                     0x1C
221 #define FREQ_26MHZ                      26000000
222 #define FREQ_27MHZ                      27000000
223 #define FREQ_32768HZ                    (32768 * 512)
224 #define FREQ_32000HZ                    (32000 * 512)
225 #define PLL_REF_CLK                     FREQ_26MHZ
226 //#define PLL_REF_CLK  FREQ_32768HZ
227 //#define PLL_REF_CLK  FREQ_32000HZ
228
229 /* MMC */
230 #define ESDHC_REG_CLK                                   0x0
231 #define ESDHC_REG_INT_STATUS                     0x4
232 #define ESDHC_REG_CLK_RATE                         0x8
233 #define ESDHC_REG_BLK_LEN                           0x18
234 #define ESDHC_REG_NOB                                  0x1C
235 #define ESDHC_REG_INT_STATUS_ENABLE      0x24
236 #define ESDHC_REG_COMMAND                         0x28
237 #define ESDHC_REG_COMMAND_TRANS_TYPE  0x2C
238 #define ESDHC_REG_COMMAND_DAT_CONT      0xC
239 #define ESDHC_REG_RESFIFO                           0x34
240 #define ESDHC_REG_BUFFER_DATA                  0x38
241
242 #define ESDHC_CLEAR_INTERRUPT                   0xffffffff
243 #define ESDHC_INTERRUPT_ENABLE                 0x0000c015
244
245 /* WEIM - CS0 */
246 #define CSCRU                           0x00
247 #define CSCRL                           0x04
248 #define CSCRA                           0x08
249 #define CHIP_REV_1_0            0x0      /* PASS 1.0 */
250 #define CHIP_REV_1_1            0x1      /* PASS 1.1 */
251 #define CHIP_REV_2_0            0x2      /* PASS 2.0 */
252 #define CHIP_LATEST             CHIP_REV_1_1
253
254 #define IIM_STAT_OFF            0x00
255 #define IIM_STAT_BUSY           (1 << 7)
256 #define IIM_STAT_PRGD           (1 << 1)
257 #define IIM_STAT_SNSD           (1 << 0)
258 #define IIM_STATM_OFF           0x04
259 #define IIM_ERR_OFF             0x08
260 #define IIM_ERR_PRGE            (1 << 7)
261 #define IIM_ERR_WPE         (1 << 6)
262 #define IIM_ERR_OPE         (1 << 5)
263 #define IIM_ERR_RPE         (1 << 4)
264 #define IIM_ERR_WLRE        (1 << 3)
265 #define IIM_ERR_SNSE        (1 << 2)
266 #define IIM_ERR_PARITYE     (1 << 1)
267 #define IIM_EMASK_OFF           0x0C
268 #define IIM_FCTL_OFF            0x10
269 #define IIM_UA_OFF              0x14
270 #define IIM_LA_OFF              0x18
271 #define IIM_SDAT_OFF            0x1C
272 #define IIM_PREV_OFF            0x20
273 #define IIM_SREV_OFF            0x24
274 #define IIM_PREG_P_OFF          0x28
275 #define IIM_SCS0_OFF            0x2C
276 #define IIM_SCS1_P_OFF          0x30
277 #define IIM_SCS2_OFF            0x34
278 #define IIM_SCS3_P_OFF          0x38
279
280 #define EPIT_BASE_ADDR          EPIT1_BASE_ADDR
281 #define EPITCR                  0x00
282 #define EPITSR                  0x04
283 #define EPITLR                  0x08
284 #define EPITCMPR                0x0C
285 #define EPITCNR                 0x10
286
287 #define GPT_BASE_ADDR           GPT1_BASE_ADDR
288 #define GPTCR                   0x00
289 #define GPTPR                   0x04
290 #define GPTSR                   0x08
291 #define GPTIR                   0x0C
292 #define GPTOCR1                 0x10
293 #define GPTOCR2                 0x14
294 #define GPTOCR3                 0x18
295 #define GPTICR1                 0x1C
296 #define GPTICR2                 0x20
297 #define GPTCNT                  0x24
298
299 /* ESDCTL */
300 #define ESDCTL_ESDCTL0                  0x00
301 #define ESDCTL_ESDCFG0                  0x04
302 #define ESDCTL_ESDCTL1                  0x08
303 #define ESDCTL_ESDCFG1                  0x0C
304 #define ESDCTL_ESDMISC                  0x10
305
306 #if (PLL_REF_CLK != 26000000)
307 #error Wrong PLL reference clock! The following macros will not work.
308 #endif
309
310 /* Assuming 26MHz input clock */
311 /*                            PD             MFD              MFI          MFN */
312 #define MPCTL_PARAM_208     (((2-1) << 26) + ((1 -1) << 16) + (8  << 10) + (0  << 0))
313 #define MPCTL_PARAM_399     (((1-1) << 26) + ((52-1) << 16) + (7  << 10) + (35 << 0))
314 #define MPCTL_PARAM_532     (((1-1) << 26) + ((52-1) << 16) + (10 << 10) + (12 << 0))
315 #define MPCTL_PARAM_665     (((1-1) << 26) + ((52-1) << 16) + (12 << 10) + (41 << 0))
316 #define MPCTL_PARAM_532_27  (((1-1) << 26) + ((15-1) << 16) + (9  << 10) + (13 << 0))
317
318 /* UPCTL                      PD             MFD              MFI          MFN */
319 #define UPCTL_PARAM_288     (((1-1) << 26) + ((13-1) << 16) + (5  << 10) + (7  << 0))
320 #define UPCTL_PARAM_240     (((2-1) << 26) + ((13-1) << 16) + (9  << 10) + (3  << 0))
321 #define UPCTL_PARAM_240_27  (((2-1) << 26) + ((9 -1) << 16) + (8  << 10) + (8  << 0))
322
323 /* SPCTL                      PD             MFD              MFI          MFN */
324 #define SPCTL_PARAM_399     (((1-1) << 26) + ((52-1) << 16) + (7  << 10) + (35 << 0))
325 #define SPCTL_PARAM_399_27  (((1-1) << 26) + ((5-1)  << 16) + (7  << 10) + (2  << 0))
326
327 /* PDR0 */
328 #define PDR0_208_104_52     0xFF870D48  /* ARM=208MHz, HCLK=104MHz, IPG=52MHz */
329 #define PDR0_399_66_66      0xFF872B28  /* ARM=399MHz, HCLK=IPG=66.5MHz */
330 #define PDR0_399_133_66     0xFF871650  /* ARM=399MHz, HCLK=133MHz, IPG=66.5MHz */
331 #define PDR0_532_133_66     0xFF871D58  /* ARM=532MHz, HCLK=133MHz, IPG=66MHz */
332 #define PDR0_665_83_42      0xFF873B78  /* ARM=665MHz, HCLK=83MHz, IPG=42MHz */
333 #define PDR0_665_133_66     0xFF872560  /* ARM=665MHz, HCLK=133MHz, IPG=66MHz */
334
335 #define NAND_REG_BASE                   (NFC_BASE + 0xE00)
336 #define NFC_BUFSIZE_REG_OFF             (0 + 0x00)
337 #define RAM_BUFFER_ADDRESS_REG_OFF      (0 + 0x04)
338 #define NAND_FLASH_ADD_REG_OFF          (0 + 0x06)
339 #define NAND_FLASH_CMD_REG_OFF          (0 + 0x08)
340 #define NFC_CONFIGURATION_REG_OFF       (0 + 0x0A)
341 #define ECC_STATUS_RESULT_REG_OFF       (0 + 0x0C)
342 #define ECC_RSLT_MAIN_AREA_REG_OFF      (0 + 0x0E)
343 #define ECC_RSLT_SPARE_AREA_REG_OFF     (0 + 0x10)
344 #define NF_WR_PROT_REG_OFF              (0 + 0x12)
345 #define UNLOCK_START_BLK_ADD_REG_OFF    (0 + 0x14)
346 #define UNLOCK_END_BLK_ADD_REG_OFF      (0 + 0x16)
347 #define NAND_FLASH_WR_PR_ST_REG_OFF     (0 + 0x18)
348 #define NAND_FLASH_CONFIG1_REG_OFF      (0 + 0x1A)
349 #define NAND_FLASH_CONFIG2_REG_OFF      (0 + 0x1C)
350 #define RAM_BUFFER_ADDRESS_RBA_3        0x3
351 #define NFC_BUFSIZE_1KB                 0x0
352 #define NFC_BUFSIZE_2KB                 0x1
353 #define NFC_CONFIGURATION_UNLOCKED      0x2
354 #define ECC_STATUS_RESULT_NO_ERR        0x0
355 #define ECC_STATUS_RESULT_1BIT_ERR      0x1
356 #define ECC_STATUS_RESULT_2BIT_ERR      0x2
357 #define NF_WR_PROT_UNLOCK               0x4
358 #define NAND_FLASH_CONFIG1_FORCE_CE     (1 << 7)
359 #define NAND_FLASH_CONFIG1_RST          (1 << 6)
360 #define NAND_FLASH_CONFIG1_BIG          (1 << 5)
361 #define NAND_FLASH_CONFIG1_INT_MSK      (1 << 4)
362 #define NAND_FLASH_CONFIG1_ECC_EN       (1 << 3)
363 #define NAND_FLASH_CONFIG1_SP_EN        (1 << 2)
364 #define NAND_FLASH_CONFIG2_INT_DONE     (1 << 15)
365 #define NAND_FLASH_CONFIG2_FDO_PAGE     (0 << 3)
366 #define NAND_FLASH_CONFIG2_FDO_ID       (2 << 3)
367 #define NAND_FLASH_CONFIG2_FDO_STATUS   (4 << 3)
368 #define NAND_FLASH_CONFIG2_FDI_EN       (1 << 2)
369 #define NAND_FLASH_CONFIG2_FADD_EN      (1 << 1)
370 #define NAND_FLASH_CONFIG2_FCMD_EN      (1 << 0)
371 #define FDO_PAGE_SPARE_VAL              0x8
372
373 #define MXC_MMC_BASE_DUMMY              0x00000000
374
375 #define NOR_FLASH_BOOT                    0
376 #define NAND_FLASH_BOOT                 0x10000000
377 #define SDRAM_NON_FLASH_BOOT      0x20000000
378 #define MMC_BOOT                               0x40000000
379 #define MXCBOOT_FLAG_REG                (AVIC_BASE_ADDR + 0x100)
380
381 #define MXCFIS_NOTHING                    0x00000000
382 #define MXCFIS_NAND                          0x10000000
383 #define MXCFIS_NOR                            0x20000000
384 #define MXCFIS_MMC                            0x40000000
385 #define MXCFIS_FLAG_REG                  (AVIC_BASE_ADDR + 0x104)
386
387 #define IS_BOOTING_FROM_NAND()          (readl(MXCBOOT_FLAG_REG) == NAND_FLASH_BOOT)
388 #define IS_BOOTING_FROM_NOR()            (readl(MXCBOOT_FLAG_REG) == NOR_FLASH_BOOT)
389 #define IS_BOOTING_FROM_SDRAM()        (readl(MXCBOOT_FLAG_REG) == SDRAM_NON_FLASH_BOOT)
390 #define IS_BOOTING_FROM_MMC()           (readl(MXCBOOT_FLAG_REG) == MMC_BOOT)
391
392 #ifndef MXCFLASH_SELECT_NAND
393 #define IS_FIS_FROM_NAND()             0
394 #else
395 #define IS_FIS_FROM_NAND()             (readl(MXCFIS_FLAG_REG) == MXCFIS_NAND)
396 #endif
397
398 #ifndef MXCFLASH_SELECT_NOR
399 #define IS_FIS_FROM_NOR()               0
400 #else
401 #define IS_FIS_FROM_NOR()               (readl(MXCFIS_FLAG_REG) == MXCFIS_NOR)
402 #endif
403
404 #ifndef MXCFLASH_SELECT_MMC
405 #define IS_FIS_FROM_MMC()               0
406 #else
407 #define IS_FIS_FROM_MMC()               (readl(MXCFIS_FLAG_REG) == MXCFIS_MMC)
408 #endif
409
410 #define MXC_ASSERT_NOR_BOOT()           writel(MXCFIS_NOR, MXCFIS_FLAG_REG)
411 #define MXC_ASSERT_NAND_BOOT()         writel(MXCFIS_NAND, MXCFIS_FLAG_REG)
412 #define MXC_ASSERT_MMC_BOOT()           writel(MXCFIS_MMC, MXCFIS_FLAG_REG)
413
414 /*
415  * This macro is used to get certain bit field from a number
416  */
417 #define MXC_GET_FIELD(val, len, sh)          ((val >> sh) & ((1 << len) - 1))
418
419 /*
420  * This macro is used to set certain bit field inside a number
421  */
422 #define MXC_SET_FIELD(val, len, sh, nval)    ((val & ~(((1 << len) - 1) << sh)) | (nval << sh))
423
424 #define L2CC_ENABLED
425 #define UART_WIDTH_32         /* internal UART is 32bit access only */
426
427 #if !defined(__ASSEMBLER__)
428 void cyg_hal_plf_serial_init(void);
429 void cyg_hal_plf_serial_stop(void);
430 void hal_delay_us(unsigned int usecs);
431 #define HAL_DELAY_US(n)     hal_delay_us(n)
432
433 enum plls {
434         MCU_PLL = CCM_BASE_ADDR + CLKCTL_MPCTL,
435         USB_PLL = CCM_BASE_ADDR + CLKCTL_UPCTL,
436         SER_PLL = CCM_BASE_ADDR + CLKCTL_SPCTL,
437 };
438
439 enum main_clocks {
440         CPU_CLK,
441         AHB_CLK,
442         MBX_CLK,
443         IPG_CLK,
444         IPG_PER_CLK,
445         NFC_CLK,
446         USB_CLK,
447         HSP_CLK,
448 };
449
450 enum peri_clocks {
451         UART1_BAUD,
452         UART2_BAUD,
453         UART3_BAUD,
454         UART4_BAUD,
455         UART5_BAUD,
456         FIRI_BAUD,
457         SIM_BAUD,
458         SSI1_BAUD,
459         SSI2_BAUD,
460         CSI_BAUD,
461         MSTICK1_CLK,
462         MSTICK2_CLK,
463         SPI1_CLK = CSPI1_BASE_ADDR,
464         SPI2_CLK = CSPI2_BASE_ADDR,
465 };
466
467 unsigned int pll_clock(enum plls pll);
468
469 unsigned int get_main_clock(enum main_clocks clk);
470
471 unsigned int get_peri_clock(enum peri_clocks clk);
472
473 enum {
474     BOARD_TYPE_UNKNOWN,
475     BOARD_TYPE_ADS,
476     BOARD_TYPE_3STACK,
477 };
478
479 typedef unsigned int nfc_setup_func_t(unsigned int, unsigned int, unsigned int, unsigned int);
480
481 #endif //#if !defined(__ASSEMBLER__)
482
483 #define HAL_MMU_OFF() \
484 CYG_MACRO_START          \
485     asm volatile (                                                      \
486         "mcr p15, 0, r0, c7, c14, 0;"                                   \
487         "mcr p15, 0, r0, c7, c10, 4;" /* drain the write buffer */      \
488         "mcr p15, 0, r0, c7, c5, 0;" /* invalidate I cache */           \
489         "mrc p15, 0, r0, c1, c0, 0;" /* read c1 */                      \
490         "bic r0, r0, #0x7;" /* disable DCache and MMU */                \
491         "bic r0, r0, #0x1000;" /* disable ICache */                     \
492         "mcr p15, 0, r0, c1, c0, 0;" /*  */                             \
493         "nop;" /* flush i+d-TLBs */                                     \
494         "nop;" /* flush i+d-TLBs */                                     \
495         "nop;" /* flush i+d-TLBs */                                     \
496         :                                                               \
497         :                                                               \
498         : "r0","memory" /* clobber list */);                            \
499 CYG_MACRO_END
500
501 #endif /* __HAL_SOC_H__ */