| 1 | --- a/arch/arm/Kconfig |
| 2 | +++ b/arch/arm/Kconfig |
| 3 | @@ -179,6 +179,11 @@ config ARM_L1_CACHE_SHIFT_6 |
| 4 | help |
| 5 | Setting ARM L1 cache line size to 64 Bytes. |
| 6 | |
| 7 | +config ARM_L1_CACHE_SHIFT_4 |
| 8 | + bool |
| 9 | + help |
| 10 | + Setting ARM L1 cache line size to 16 bytes. |
| 11 | + |
| 12 | config VECTORS_BASE |
| 13 | hex |
| 14 | default 0xffff0000 if MMU || CPU_HIGH_VECTOR |
| 15 | @@ -286,6 +291,15 @@ config ARCH_BCMRING |
| 16 | help |
| 17 | Support for Broadcom's BCMRing platform. |
| 18 | |
| 19 | +config ARCH_CNS21XX |
| 20 | + bool "Cavium Networks CNS21xx family" |
| 21 | + select CPU_FA526 |
| 22 | + select PLAT_FA |
| 23 | + select PLAT_FA_TIME |
| 24 | + select ARM_L1_CACHE_SHIFT_4 |
| 25 | + help |
| 26 | + Support for Cavium Networks CNS21xx family. |
| 27 | + |
| 28 | config ARCH_CLPS711X |
| 29 | bool "Cirrus Logic CLPS711x/EP721x-based" |
| 30 | select CPU_ARM720T |
| 31 | @@ -845,6 +859,8 @@ source "arch/arm/mach-davinci/Kconfig" |
| 32 | |
| 33 | source "arch/arm/mach-dove/Kconfig" |
| 34 | |
| 35 | +source "arch/arm/mach-cns21xx/Kconfig" |
| 36 | + |
| 37 | source "arch/arm/mach-ep93xx/Kconfig" |
| 38 | |
| 39 | source "arch/arm/mach-footbridge/Kconfig" |
| 40 | --- /dev/null |
| 41 | +++ b/arch/arm/mach-cns21xx/Kconfig |
| 42 | @@ -0,0 +1,6 @@ |
| 43 | +if ARCH_CNS21XX |
| 44 | + |
| 45 | +menu "Cavium Networks CNS21xx based machines" |
| 46 | +endmenu |
| 47 | + |
| 48 | +endif |
| 49 | --- /dev/null |
| 50 | +++ b/arch/arm/mach-cns21xx/Makefile |
| 51 | @@ -0,0 +1,10 @@ |
| 52 | +# |
| 53 | +# Makefile for the linux kernel. |
| 54 | +# |
| 55 | + |
| 56 | +# Object file lists. |
| 57 | + |
| 58 | +obj-y := core.o irq.o mm.o time.o |
| 59 | + |
| 60 | +# machine specific files |
| 61 | + |
| 62 | --- /dev/null |
| 63 | +++ b/arch/arm/mach-cns21xx/Makefile.boot |
| 64 | @@ -0,0 +1,3 @@ |
| 65 | + zreladdr-y := 0x00008000 |
| 66 | +params_phys-y := 0x00000100 |
| 67 | +initrd_phys-y := 0x00C00000 |
| 68 | --- a/arch/arm/Makefile |
| 69 | +++ b/arch/arm/Makefile |
| 70 | @@ -129,6 +129,7 @@ endif |
| 71 | machine-$(CONFIG_ARCH_AAEC2000) := aaec2000 |
| 72 | machine-$(CONFIG_ARCH_AT91) := at91 |
| 73 | machine-$(CONFIG_ARCH_BCMRING) := bcmring |
| 74 | +machine-$(CONFIG_ARCH_CNS21XX) := cns21xx |
| 75 | machine-$(CONFIG_ARCH_CLPS711X) := clps711x |
| 76 | machine-$(CONFIG_ARCH_CNS3XXX) := cns3xxx |
| 77 | machine-$(CONFIG_ARCH_DAVINCI) := davinci |
| 78 | --- /dev/null |
| 79 | +++ b/arch/arm/mach-cns21xx/common.h |
| 80 | @@ -0,0 +1,18 @@ |
| 81 | +/* |
| 82 | + * Copyright (c) 2008 Cavium Networks |
| 83 | + * Copyright (c) 2010 Gabor Juhos <juhosg@openwrt.org> |
| 84 | + * |
| 85 | + * This file is free software; you can redistribute it and/or modify |
| 86 | + * it under the terms of the GNU General Public License, Version 2, as |
| 87 | + * published by the Free Software Foundation. |
| 88 | + */ |
| 89 | + |
| 90 | +#ifndef _MACH_CNS21XX_COMMON_H |
| 91 | +#define _MACH_CNS21XX_COMMON_H |
| 92 | + |
| 93 | +void __init cns21xx_map_io(void); |
| 94 | +void __init cns21xx_init_irq(void); |
| 95 | + |
| 96 | +extern struct sys_timer cns21xx_timer; |
| 97 | + |
| 98 | +#endif /* _MACH_CNS21XX_COMMON_H */ |
| 99 | --- /dev/null |
| 100 | +++ b/arch/arm/mach-cns21xx/mm.c |
| 101 | @@ -0,0 +1,170 @@ |
| 102 | +/* |
| 103 | + * Copyright (c) 2008 Cavium Networks |
| 104 | + * Copyright (c) 2010 Gabor Juhos <juhosg@openwrt.org> |
| 105 | + * |
| 106 | + * This file is free software; you can redistribute it and/or modify |
| 107 | + * it under the terms of the GNU General Public License, Version 2, as |
| 108 | + * published by the Free Software Foundation. |
| 109 | + */ |
| 110 | + |
| 111 | +#include <linux/mm.h> |
| 112 | +#include <linux/init.h> |
| 113 | + |
| 114 | +#include <asm/mach/map.h> |
| 115 | + |
| 116 | +#include <mach/hardware.h> |
| 117 | +#include <mach/cns21xx.h> |
| 118 | + |
| 119 | +#include "common.h" |
| 120 | + |
| 121 | +/* |
| 122 | + * Standard IO mapping |
| 123 | + */ |
| 124 | +static struct map_desc cns21xx_io_desc[] __initdata = { |
| 125 | + { |
| 126 | + .virtual = CNS21XX_FLASH_BANK0_BASE_VIRT, |
| 127 | + .pfn = __phys_to_pfn(CNS21XX_FLASH_BANK0_BASE), |
| 128 | + .length = SZ_256M, |
| 129 | + .type = MT_DEVICE |
| 130 | + }, { |
| 131 | + .virtual = CNS21XX_IDE_DEVICE_BASE_VIRT, |
| 132 | + .pfn = __phys_to_pfn(CNS21XX_IDE_DEVICE_BASE), |
| 133 | + .length = SZ_4K, |
| 134 | + .type = MT_DEVICE |
| 135 | + }, { |
| 136 | + .virtual = CNS21XX_GDMAC_BASE_VIRT, |
| 137 | + .pfn = __phys_to_pfn(CNS21XX_GDMAC_BASE), |
| 138 | + .length = SZ_4K, |
| 139 | + .type = MT_DEVICE |
| 140 | + }, { |
| 141 | + .virtual = CNS21XX_NIC_BASE_VIRT, |
| 142 | + .pfn = __phys_to_pfn(CNS21XX_NIC_BASE), |
| 143 | + .length = SZ_4K, |
| 144 | + .type = MT_DEVICE |
| 145 | + }, { |
| 146 | + .virtual = CNS21XX_SPI_BASE_VIRT, |
| 147 | + .pfn = __phys_to_pfn(CNS21XX_SPI_BASE), |
| 148 | + .length = SZ_4K, |
| 149 | + .type = MT_DEVICE |
| 150 | + }, { |
| 151 | + .virtual = CNS21XX_PCM_BASE_VIRT, |
| 152 | + .pfn = __phys_to_pfn(CNS21XX_PCM_BASE), |
| 153 | + .length = SZ_4K, |
| 154 | + .type = MT_DEVICE |
| 155 | + }, { |
| 156 | + .virtual = CNS21XX_I2C_BASE_VIRT, |
| 157 | + .pfn = __phys_to_pfn(CNS21XX_I2C_BASE), |
| 158 | + .length = SZ_4K, |
| 159 | + .type = MT_DEVICE |
| 160 | + }, { |
| 161 | + .virtual = CNS21XX_I2S_BASE_VIRT, |
| 162 | + .pfn = __phys_to_pfn(CNS21XX_I2S_BASE), |
| 163 | + .length = SZ_4K, |
| 164 | + .type = MT_DEVICE |
| 165 | + }, { |
| 166 | + .virtual = CNS21XX_DDRC_BASE_VIRT, |
| 167 | + .pfn = __phys_to_pfn(CNS21XX_DDRC_BASE), |
| 168 | + .length = SZ_4K, |
| 169 | + .type = MT_DEVICE |
| 170 | + }, { |
| 171 | + .virtual = CNS21XX_SMC_BASE_VIRT, |
| 172 | + .pfn = __phys_to_pfn(CNS21XX_SMC_BASE), |
| 173 | + .length = SZ_4K, |
| 174 | + .type = MT_DEVICE |
| 175 | + }, { |
| 176 | + .virtual = CNS21XX_IDE_CTRL_BASE_VIRT, |
| 177 | + .pfn = __phys_to_pfn(CNS21XX_IDE_CTRL_BASE), |
| 178 | + .length = SZ_4K, |
| 179 | + .type = MT_DEVICE |
| 180 | + }, { |
| 181 | + .virtual = CNS21XX_MISC_BASE_VIRT, |
| 182 | + .pfn = __phys_to_pfn(CNS21XX_MISC_BASE), |
| 183 | + .length = SZ_4K, |
| 184 | + .type = MT_DEVICE |
| 185 | + }, { |
| 186 | + .virtual = CNS21XX_CPM_BASE_VIRT, |
| 187 | + .pfn = __phys_to_pfn(CNS21XX_CPM_BASE), |
| 188 | + .length = SZ_4K, |
| 189 | + .type = MT_DEVICE |
| 190 | + }, { |
| 191 | + .virtual = CNS21XX_UART0_BASE_VIRT, |
| 192 | + .pfn = __phys_to_pfn(CNS21XX_UART0_BASE), |
| 193 | + .length = SZ_4K, |
| 194 | + .type = MT_DEVICE |
| 195 | + }, { |
| 196 | + .virtual = CNS21XX_UART1_BASE_VIRT, |
| 197 | + .pfn = __phys_to_pfn(CNS21XX_UART1_BASE), |
| 198 | + .length = SZ_4K, |
| 199 | + .type = MT_DEVICE |
| 200 | + }, { |
| 201 | + .virtual = CNS21XX_TIMER_BASE_VIRT, |
| 202 | + .pfn = __phys_to_pfn(CNS21XX_TIMER_BASE), |
| 203 | + .length = SZ_4K, |
| 204 | + .type = MT_DEVICE |
| 205 | + }, { |
| 206 | + .virtual = CNS21XX_WDT_BASE_VIRT, |
| 207 | + .pfn = __phys_to_pfn(CNS21XX_WDT_BASE), |
| 208 | + .length = SZ_4K, |
| 209 | + .type = MT_DEVICE |
| 210 | + }, { |
| 211 | + .virtual = CNS21XX_RTC_BASE_VIRT, |
| 212 | + .pfn = __phys_to_pfn(CNS21XX_RTC_BASE), |
| 213 | + .length = SZ_4K, |
| 214 | + .type = MT_DEVICE |
| 215 | + }, { |
| 216 | + .virtual = CNS21XX_GPIOA_BASE_VIRT, |
| 217 | + .pfn = __phys_to_pfn(CNS21XX_GPIOA_BASE), |
| 218 | + .length = SZ_4K, |
| 219 | + .type = MT_DEVICE |
| 220 | + }, { |
| 221 | + .virtual = CNS21XX_GPIOB_BASE_VIRT, |
| 222 | + .pfn = __phys_to_pfn(CNS21XX_GPIOB_BASE), |
| 223 | + .length = SZ_4K, |
| 224 | + .type = MT_DEVICE |
| 225 | + }, { |
| 226 | + .virtual = CNS21XX_PCI_CFGDATA_BASE_VIRT, |
| 227 | + .pfn = __phys_to_pfn(CNS21XX_PCI_CFGDATA_BASE), |
| 228 | + .length = SZ_4K, |
| 229 | + .type = MT_DEVICE |
| 230 | + }, { |
| 231 | + .virtual = CNS21XX_PCI_CFGADDR_BASE_VIRT, |
| 232 | + .pfn = __phys_to_pfn(CNS21XX_PCI_CFGADDR_BASE), |
| 233 | + .length = SZ_4K, |
| 234 | + .type = MT_DEVICE |
| 235 | + }, { |
| 236 | + .virtual = CNS21XX_OHCI_CONFIG_BASE_VIRT, |
| 237 | + .pfn = __phys_to_pfn(CNS21XX_OHCI_CONFIG_BASE), |
| 238 | + .length = SZ_4K, |
| 239 | + .type = MT_DEVICE |
| 240 | + }, { |
| 241 | + .virtual = CNS21XX_OHCI_CTRL_BASE_VIRT, |
| 242 | + .pfn = __phys_to_pfn(CNS21XX_OHCI_CTRL_BASE), |
| 243 | + .length = SZ_4K, |
| 244 | + .type = MT_DEVICE |
| 245 | + }, { |
| 246 | + .virtual = CNS21XX_EHCI_CONFIG_BASE_VIRT, |
| 247 | + .pfn = __phys_to_pfn(CNS21XX_EHCI_CONFIG_BASE), |
| 248 | + .length = SZ_4K, |
| 249 | + .type = MT_DEVICE |
| 250 | + }, { |
| 251 | + .virtual = CNS21XX_EHCI_CTRL_BASE_VIRT, |
| 252 | + .pfn = __phys_to_pfn(CNS21XX_EHCI_CTRL_BASE), |
| 253 | + .length = SZ_4K, |
| 254 | + .type = MT_DEVICE |
| 255 | + }, { |
| 256 | + .virtual = CNS21XX_USB_DEVICE_BASE_VIRT, |
| 257 | + .pfn = __phys_to_pfn(CNS21XX_USB_DEVICE_BASE), |
| 258 | + .length = SZ_4K, |
| 259 | + .type = MT_DEVICE |
| 260 | + }, { |
| 261 | + .virtual = CNS21XX_INTC_BASE_VIRT, |
| 262 | + .pfn = __phys_to_pfn(CNS21XX_INTC_BASE), |
| 263 | + .length = SZ_4K, |
| 264 | + .type = MT_DEVICE |
| 265 | + } |
| 266 | +}; |
| 267 | + |
| 268 | +void __init cns21xx_map_io(void) |
| 269 | +{ |
| 270 | + iotable_init(cns21xx_io_desc, ARRAY_SIZE(cns21xx_io_desc)); |
| 271 | +} |
| 272 | --- /dev/null |
| 273 | +++ b/arch/arm/mach-cns21xx/include/mach/hardware.h |
| 274 | @@ -0,0 +1,23 @@ |
| 275 | +/* |
| 276 | + * Copyright (c) 2008 Cavium Networks |
| 277 | + * Copyright (c) 2010 Gabor Juhos <juhosg@openwrt.org> |
| 278 | + * |
| 279 | + * This file is free software; you can redistribute it and/or modify |
| 280 | + * it under the terms of the GNU General Public License, Version 2, as |
| 281 | + * published by the Free Software Foundation. |
| 282 | + */ |
| 283 | + |
| 284 | +#ifndef _CNS21XX_HARDWARE_H |
| 285 | +#define _CNS21XX_HARDWARE_H |
| 286 | + |
| 287 | +#define PCIBIOS_MIN_IO 0x00000000 |
| 288 | +#define PCIBIOS_MIN_MEM 0x00000000 |
| 289 | + |
| 290 | +#ifndef __ASSEMBLY__ |
| 291 | +extern unsigned long cns21xx_get_pll_freq(void); |
| 292 | +extern unsigned long cns21xx_get_cpu_freq(void); |
| 293 | +extern unsigned long cns21xx_get_ahb_freq(void); |
| 294 | +extern unsigned long cns21xx_get_apb_freq(void); |
| 295 | +#endif |
| 296 | + |
| 297 | +#endif /* _CNS21XX_HARDWARE_H */ |
| 298 | --- /dev/null |
| 299 | +++ b/arch/arm/mach-cns21xx/include/mach/vmalloc.h |
| 300 | @@ -0,0 +1,15 @@ |
| 301 | +/* |
| 302 | + * Copyright (c) 2008 Cavium Networks |
| 303 | + * Copyright (c) 2010 Gabor Juhos <juhosg@openwrt.org> |
| 304 | + * |
| 305 | + * This file is free software; you can redistribute it and/or modify |
| 306 | + * it under the terms of the GNU General Public License, Version 2, as |
| 307 | + * published by the Free Software Foundation. |
| 308 | + */ |
| 309 | + |
| 310 | +#ifndef _CNS21XX_VMALLOC_H |
| 311 | +#define _CNS21XX_VMALLOC_H |
| 312 | + |
| 313 | +#define VMALLOC_END (PAGE_OFFSET + 0x10000000) |
| 314 | + |
| 315 | +#endif /* _CNS21XX_VMALLOC_H */ |
| 316 | --- /dev/null |
| 317 | +++ b/arch/arm/mach-cns21xx/include/mach/debug-macro.S |
| 318 | @@ -0,0 +1,27 @@ |
| 319 | +/* |
| 320 | + * Copyright (c) 2008 Cavium Networks |
| 321 | + * Copyright (c) 2010 Gabor Juhos <juhosg@openwrt.org> |
| 322 | + * |
| 323 | + * This file is free software; you can redistribute it and/or modify |
| 324 | + * it under the terms of the GNU General Public License, Version 2, as |
| 325 | + * published by the Free Software Foundation. |
| 326 | + */ |
| 327 | + |
| 328 | +#include <mach/cns21xx.h> |
| 329 | + |
| 330 | +/* TODO: make it configurable */ |
| 331 | +#define CNS21XX_DEBUG_UART_BASE CNS21XX_UART0_BASE |
| 332 | +#define CNS21XX_DEBUG_UART_BASE_VIRT CNS21XX_UART0_BASE_VIRT |
| 333 | + |
| 334 | + .macro addruart, rx, tmp |
| 335 | + mrc p15, 0, \rx, c1, c0 |
| 336 | + tst \rx, #1 @ MMU enabled ? |
| 337 | + moveq \rx, #(CNS21XX_DEBUG_UART_BASE) @ physical |
| 338 | + movne \rx, #(CNS21XX_DEBUG_UART_BASE_VIRT & 0xff000000) @ virtual |
| 339 | + orrne \rx, \rx, #(CNS21XX_DEBUG_UART_BASE_VIRT & 0x00ff0000) |
| 340 | + orrne \rx, \rx, #(CNS21XX_DEBUG_UART_BASE_VIRT & 0x0000ff00) |
| 341 | + orrne \rx, \rx, #(CNS21XX_DEBUG_UART_BASE_VIRT & 0x000000ff) |
| 342 | + .endm |
| 343 | + |
| 344 | +#define UART_SHIFT 2 |
| 345 | +#include <asm/hardware/debug-8250.S> |
| 346 | --- /dev/null |
| 347 | +++ b/arch/arm/mach-cns21xx/include/mach/entry-macro.S |
| 348 | @@ -0,0 +1,39 @@ |
| 349 | +/* |
| 350 | + * Copyright (c) 2008 Cavium Networks |
| 351 | + * Copyright (c) 2010 Gabor Juhos <juhosg@openwrt.org> |
| 352 | + * |
| 353 | + * This file is free software; you can redistribute it and/or modify |
| 354 | + * it under the terms of the GNU General Public License, Version 2, as |
| 355 | + * published by the Free Software Foundation. |
| 356 | + */ |
| 357 | + |
| 358 | +#include <mach/cns21xx.h> |
| 359 | +#include <mach/irqs.h> |
| 360 | + |
| 361 | +#define INTC_IRQ_STATUS 0x1c |
| 362 | + |
| 363 | + .macro disable_fiq |
| 364 | + .endm |
| 365 | + |
| 366 | + .macro get_irqnr_preamble, base, tmp |
| 367 | + .endm |
| 368 | + |
| 369 | + .macro arch_ret_to_user, tmp1, tmp2 |
| 370 | + .endm |
| 371 | + |
| 372 | + .macro get_irqnr_and_base, irqnr, irqstat, base, tmp |
| 373 | + ldr \base, =(CNS21XX_INTC_BASE_VIRT + INTC_IRQ_STATUS) |
| 374 | + ldr \irqstat, [\base] |
| 375 | + mov \irqnr, #0 |
| 376 | +9001: |
| 377 | + tst \irqstat, #1 |
| 378 | + bne 9002f |
| 379 | + add \irqnr, \irqnr, #1 |
| 380 | + mov \irqstat, \irqstat, lsr #1 |
| 381 | + cmp \irqnr, #CNS21XX_NR_INTC_IRQS |
| 382 | + bcc 9001b |
| 383 | +9002: |
| 384 | + .endm |
| 385 | + |
| 386 | + .macro irq_prio_table |
| 387 | + .endm |
| 388 | --- /dev/null |
| 389 | +++ b/arch/arm/mach-cns21xx/include/mach/io.h |
| 390 | @@ -0,0 +1,18 @@ |
| 391 | +/* |
| 392 | + * Copyright (c) 2008 Cavium Networks |
| 393 | + * Copyright (c) 2010 Gabor Juhos <juhosg@openwrt.org> |
| 394 | + * |
| 395 | + * This file is free software; you can redistribute it and/or modify |
| 396 | + * it under the terms of the GNU General Public License, Version 2, as |
| 397 | + * published by the Free Software Foundation. |
| 398 | + */ |
| 399 | + |
| 400 | +#ifndef _CNS21XX_IO_H |
| 401 | +#define _CNS21XX_IO_H |
| 402 | + |
| 403 | +#define IO_SPACE_LIMIT 0xffffffff |
| 404 | + |
| 405 | +#define __io(p) __typesafe_io(p) |
| 406 | +#define __mem_pci(a) (a) |
| 407 | + |
| 408 | +#endif /* _CNS21XX_IO_H */ |
| 409 | --- /dev/null |
| 410 | +++ b/arch/arm/mach-cns21xx/include/mach/irqs.h |
| 411 | @@ -0,0 +1,53 @@ |
| 412 | +/* |
| 413 | + * Copyright (c) 2008 Cavium Networks |
| 414 | + * Copyright (c) 2010 Gabor Juhos <juhosg@openwrt.org> |
| 415 | + * |
| 416 | + * This file is free software; you can redistribute it and/or modify |
| 417 | + * it under the terms of the GNU General Public License, Version 2, as |
| 418 | + * published by the Free Software Foundation. |
| 419 | + */ |
| 420 | + |
| 421 | +#ifndef _CNS21XX_IRQS_H |
| 422 | +#define _CNS21XX_IRQS_H |
| 423 | + |
| 424 | +#define CNS21XX_IRQ_TIMER1 0 |
| 425 | +#define CNS21XX_IRQ_TIMER2 1 |
| 426 | +#define CNS21XX_IRQ_CPM 2 |
| 427 | +#define CNS21XX_IRQ_WDT 3 |
| 428 | +#define CNS21XX_IRQ_GPIO 4 |
| 429 | +#define CNS21XX_IRQ_PCI_INTA 5 |
| 430 | +#define CNS21XX_IRQ_PCI_INTB 6 |
| 431 | +#define CNS21XX_IRQ_PCI_BROKEN 7 |
| 432 | +#define CNS21XX_IRQ_AHB2PCI 8 |
| 433 | +#define CNS21XX_IRQ_UART0 9 |
| 434 | +#define CNS21XX_IRQ_UART1 10 |
| 435 | +#define CNS21XX_IRQ_GDMAC_TC 11 |
| 436 | +#define CNS21XX_IRQ_GDMAC_ERR 12 |
| 437 | +#define CNS21XX_IRQ_PCMCIA 13 |
| 438 | +#define CNS21XX_IRQ_RTC 14 |
| 439 | +#define CNS21XX_IRQ_PCM 15 |
| 440 | +#define CNS21XX_IRQ_USB_DEVICE 16 |
| 441 | +#define CNS21XX_IRQ_IDE 17 |
| 442 | +#define CNS21XX_IRQ_NIC_STATUS 18 |
| 443 | +#define CNS21XX_IRQ_NIC_TXTC 19 |
| 444 | +#define CNS21XX_IRQ_NIC_RXRC 20 |
| 445 | +#define CNS21XX_IRQ_NIC_TXQE 21 |
| 446 | +#define CNS21XX_IRQ_NIC_RXQF 22 |
| 447 | +#define CNS21XX_IRQ_OHCI 23 |
| 448 | +#define CNS21XX_IRQ_EHCI 24 |
| 449 | +#define CNS21XX_IRQ_I2S 25 |
| 450 | +#define CNS21XX_IRQ_SPI 26 |
| 451 | +#define CNS21XX_IRQ_I2C 27 |
| 452 | +#define CNS21XX_IRQ_USB_VBUS 28 |
| 453 | +#define CNS21XX_IRQ_EXT_29 29 |
| 454 | +#define CNS21XX_IRQ_EXT_30 30 |
| 455 | +#define CNS21XX_IRQ_HSDMAC 31 |
| 456 | + |
| 457 | +#define CNS21XX_GPIO_IRQ_BASE 32 |
| 458 | + |
| 459 | +#define CNS21XX_NR_INTC_IRQS 32 |
| 460 | +#define CNS21XX_NR_GPIO_IRQS 64 |
| 461 | + |
| 462 | +#define NR_IRQS 96 |
| 463 | + |
| 464 | +#endif /* _CNS21XX_IRQS_H */ |
| 465 | --- /dev/null |
| 466 | +++ b/arch/arm/mach-cns21xx/include/mach/timex.h |
| 467 | @@ -0,0 +1,15 @@ |
| 468 | +/* |
| 469 | + * Copyright (c) 2008 Cavium Networks |
| 470 | + * Copyright (c) 2010 Gabor Juhos <juhosg@openwrt.org> |
| 471 | + * |
| 472 | + * This file is free software; you can redistribute it and/or modify |
| 473 | + * it under the terms of the GNU General Public License, Version 2, as |
| 474 | + * published by the Free Software Foundation. |
| 475 | + */ |
| 476 | + |
| 477 | +#ifndef _CNS21XX_TIMEX_H |
| 478 | +#define _CNS21XX_TIMEX_H |
| 479 | + |
| 480 | +#define CLOCK_TICK_RATE 43750000 |
| 481 | + |
| 482 | +#endif /* _CNS21XX_TIMEX_H */ |
| 483 | --- /dev/null |
| 484 | +++ b/arch/arm/mach-cns21xx/include/mach/uncompress.h |
| 485 | @@ -0,0 +1,40 @@ |
| 486 | +/* |
| 487 | + * Copyright (c) 2008 Cavium Networks |
| 488 | + * Copyright (c) 2010 Gabor Juhos <juhosg@openwrt.org> |
| 489 | + * |
| 490 | + * This file is free software; you can redistribute it and/or modify |
| 491 | + * it under the terms of the GNU General Public License, Version 2, as |
| 492 | + * published by the Free Software Foundation. |
| 493 | + */ |
| 494 | + |
| 495 | +#ifndef _CNS21XX_UNCOMPRESS_H |
| 496 | +#define _CNS21XX_UNCOMPRESS_H |
| 497 | + |
| 498 | +#define UART_BASE 0x78000000 |
| 499 | + |
| 500 | +#define UART_REG(offs) (*((volatile unsigned int *)(UART_BASE + offs))) |
| 501 | + |
| 502 | +#define UART_THR UART_REG(0x00) |
| 503 | +#define UART_LSR UART_REG(0x14) |
| 504 | +#define THR_EMPTY (1 << 5) |
| 505 | + |
| 506 | +#define UART_THR_EMPTY() (((UART_LSR) & THR_EMPTY) == (THR_EMPTY)) |
| 507 | + |
| 508 | +static void putc(int c) |
| 509 | +{ |
| 510 | + if (c != 0) { |
| 511 | + while (!UART_THR_EMPTY()) |
| 512 | + barrier(); |
| 513 | + |
| 514 | + UART_THR = (int)(c & 0xFF); |
| 515 | + } |
| 516 | +} |
| 517 | + |
| 518 | +static inline void flush(void) |
| 519 | +{ |
| 520 | +} |
| 521 | + |
| 522 | +#define arch_decomp_setup() |
| 523 | +#define arch_decomp_wdog() |
| 524 | + |
| 525 | +#endif /* _CNS21XX_UNCOMPRESS_H */ |
| 526 | --- /dev/null |
| 527 | +++ b/arch/arm/mach-cns21xx/include/mach/memory.h |
| 528 | @@ -0,0 +1,15 @@ |
| 529 | +/* |
| 530 | + * Copyright (c) 2008 Cavium Networks |
| 531 | + * Copyright (c) 2010 Gabor Juhos <juhosg@openwrt.org> |
| 532 | + * |
| 533 | + * This file is free software; you can redistribute it and/or modify |
| 534 | + * it under the terms of the GNU General Public License, Version 2, as |
| 535 | + * published by the Free Software Foundation. |
| 536 | + */ |
| 537 | + |
| 538 | +#ifndef _CNS21XX_MEMORY_H |
| 539 | +#define _CNS21XX_MEMORY_H |
| 540 | + |
| 541 | +#define PHYS_OFFSET UL(0x00000000) |
| 542 | + |
| 543 | +#endif /* _CNS21XX_MEMORY_H */ |
| 544 | --- /dev/null |
| 545 | +++ b/arch/arm/mach-cns21xx/include/mach/system.h |
| 546 | @@ -0,0 +1,38 @@ |
| 547 | +/* |
| 548 | + * Copyright (c) 2008 Cavium Networks |
| 549 | + * Copyright (c) 2010 Gabor Juhos <juhosg@openwrt.org> |
| 550 | + * |
| 551 | + * This file is free software; you can redistribute it and/or modify |
| 552 | + * it under the terms of the GNU General Public License, Version 2, as |
| 553 | + * published by the Free Software Foundation. |
| 554 | + */ |
| 555 | + |
| 556 | +#ifndef _CNS21XX_SYSTEM_H |
| 557 | +#define _CNS21XX_SYSTEM_H |
| 558 | + |
| 559 | +#include <mach/cns21xx.h> |
| 560 | +#include <mach/cns21xx_powermgmt.h> |
| 561 | + |
| 562 | +static inline void arch_idle(void) |
| 563 | +{ |
| 564 | + /* |
| 565 | + * Because of broken hardware we have to enable interrupts or the CPU |
| 566 | + * will never wakeup... Acctualy it is not very good to enable |
| 567 | + * interrupts here since scheduler can miss a tick, but there is |
| 568 | + * no other way around this. Platforms that needs it for power saving |
| 569 | + * should call enable_hlt() in init code, since by default it is |
| 570 | + * disabled. |
| 571 | + */ |
| 572 | + local_irq_enable(); |
| 573 | + cpu_do_idle(); |
| 574 | +} |
| 575 | + |
| 576 | +static inline void arch_reset(char mode, const char *cmd) |
| 577 | +{ |
| 578 | + PWRMGT_SOFTWARE_RESET_CONTROL_REG |= |
| 579 | + (1UL << PWRMGT_GLOBAL_SOFTWARE_RESET_MASK_BIT_INDEX); |
| 580 | + PWRMGT_SOFTWARE_RESET_CONTROL_REG &= |
| 581 | + ~(1UL << PWRMGT_GLOBAL_SOFTWARE_RESET_MASK_BIT_INDEX); |
| 582 | +} |
| 583 | + |
| 584 | +#endif /* _CNS21XX_SYSTEM_H */ |
| 585 | --- /dev/null |
| 586 | +++ b/arch/arm/mach-cns21xx/irq.c |
| 587 | @@ -0,0 +1,174 @@ |
| 588 | +/* |
| 589 | + * Copyright (c) 2008 Cavium Networks |
| 590 | + * Copyright (c) 2010 Gabor Juhos <juhosg@openwrt.org> |
| 591 | + * |
| 592 | + * This file is free software; you can redistribute it and/or modify |
| 593 | + * it under the terms of the GNU General Public License, Version 2, as |
| 594 | + * published by the Free Software Foundation. |
| 595 | + */ |
| 596 | + |
| 597 | +#include <linux/init.h> |
| 598 | +#include <linux/interrupt.h> |
| 599 | +#include <linux/irq.h> |
| 600 | +#include <linux/io.h> |
| 601 | +#include <linux/ioport.h> |
| 602 | + |
| 603 | +#include <mach/cns21xx.h> |
| 604 | + |
| 605 | +#define INTC_INTERRUPT_RAW_STATUS_REG 0x000 |
| 606 | +#define INTC_EDGE_INTERRUPT_SOURCE_CLEAR_REG 0x004 |
| 607 | +#define INTC_INTERRUPT_MASK_REG 0x008 |
| 608 | +#define INTC_INTERRUPT_MASK_CLEAR_REG 0x00c |
| 609 | +#define INTC_INTERRUPT_TRIGGER_MODE_REG 0x010 |
| 610 | +#define INTC_INTERRUPT_TRIGGER_LEVEL_REG 0x014 |
| 611 | +#define INTC_FIQ_SELECT_REG 0x018 |
| 612 | +#define INTC_IRQ_STATUS_REG 0x01c |
| 613 | +#define INTC_FIQ_STATUS_REG 0x020 |
| 614 | +#define INTC_SOFTWARE_INTERRUPT_REG 0x024 |
| 615 | +#define INTC_SOFTWARE_INTERRUPT_CLEAR_REG 0x028 |
| 616 | +#define INTC_SOFTWARE_PRIORITY_MASK_REG 0x02c |
| 617 | +#define INTC_POWER_MANAGEMENT_INTERRUPT_REG 0x034 |
| 618 | + |
| 619 | +#define INTC_VECTOR_ADDRESS_REG(_x) ((_x) + 0x040) |
| 620 | +#define INTC_PRIORITY_REG(_x) ((_x) + 0x0c0) |
| 621 | +#define INTC_IRQ_VECTOR_ADDRESS_REG 0x140 |
| 622 | +#define INTC_VECTOR_INTERRUPT_ENABLE_REG 0x144 |
| 623 | + |
| 624 | +#define INTC_SIZE 0x148 |
| 625 | + |
| 626 | +static unsigned int cns21xx_irq_types[CNS21XX_NR_INTC_IRQS] = { |
| 627 | + [CNS21XX_IRQ_TIMER1] = IRQ_TYPE_EDGE_RISING, |
| 628 | + [CNS21XX_IRQ_TIMER2] = IRQ_TYPE_EDGE_RISING, |
| 629 | + [CNS21XX_IRQ_CPM] = IRQ_TYPE_EDGE_FALLING, |
| 630 | + [CNS21XX_IRQ_WDT] = IRQ_TYPE_EDGE_RISING, |
| 631 | + [CNS21XX_IRQ_GPIO] = IRQ_TYPE_NONE, |
| 632 | + [CNS21XX_IRQ_PCI_INTA] = IRQ_TYPE_LEVEL_LOW, |
| 633 | + [CNS21XX_IRQ_PCI_INTB] = IRQ_TYPE_LEVEL_LOW, |
| 634 | + [CNS21XX_IRQ_PCI_BROKEN] = IRQ_TYPE_LEVEL_HIGH, |
| 635 | + [CNS21XX_IRQ_AHB2PCI] = IRQ_TYPE_LEVEL_HIGH, |
| 636 | + [CNS21XX_IRQ_UART0] = IRQ_TYPE_LEVEL_HIGH, |
| 637 | + [CNS21XX_IRQ_UART1] = IRQ_TYPE_LEVEL_HIGH, |
| 638 | + [CNS21XX_IRQ_GDMAC_TC] = IRQ_TYPE_LEVEL_HIGH, |
| 639 | + [CNS21XX_IRQ_GDMAC_ERR] = IRQ_TYPE_LEVEL_HIGH, |
| 640 | + [CNS21XX_IRQ_PCMCIA] = IRQ_TYPE_NONE, |
| 641 | + [CNS21XX_IRQ_RTC] = IRQ_TYPE_LEVEL_HIGH, |
| 642 | + [CNS21XX_IRQ_PCM] = IRQ_TYPE_LEVEL_LOW, |
| 643 | + [CNS21XX_IRQ_USB_DEVICE] = IRQ_TYPE_LEVEL_LOW, |
| 644 | + [CNS21XX_IRQ_IDE] = IRQ_TYPE_LEVEL_HIGH, |
| 645 | + [CNS21XX_IRQ_NIC_STATUS] = IRQ_TYPE_LEVEL_HIGH, |
| 646 | + [CNS21XX_IRQ_NIC_TXTC] = IRQ_TYPE_EDGE_RISING, |
| 647 | + [CNS21XX_IRQ_NIC_RXRC] = IRQ_TYPE_EDGE_RISING, |
| 648 | + [CNS21XX_IRQ_NIC_TXQE] = IRQ_TYPE_EDGE_RISING, |
| 649 | + [CNS21XX_IRQ_NIC_RXQF] = IRQ_TYPE_EDGE_RISING, |
| 650 | + [CNS21XX_IRQ_OHCI] = IRQ_TYPE_LEVEL_LOW, |
| 651 | + [CNS21XX_IRQ_EHCI] = IRQ_TYPE_LEVEL_LOW, |
| 652 | + [CNS21XX_IRQ_I2S] = IRQ_TYPE_LEVEL_LOW, |
| 653 | + [CNS21XX_IRQ_SPI] = IRQ_TYPE_LEVEL_LOW, |
| 654 | + [CNS21XX_IRQ_I2C] = IRQ_TYPE_LEVEL_LOW, |
| 655 | + [CNS21XX_IRQ_USB_VBUS] = IRQ_TYPE_EDGE_RISING, |
| 656 | + [CNS21XX_IRQ_EXT_29] = IRQ_TYPE_NONE, |
| 657 | + [CNS21XX_IRQ_EXT_30] = IRQ_TYPE_NONE, |
| 658 | + [CNS21XX_IRQ_HSDMAC] = IRQ_TYPE_EDGE_RISING, |
| 659 | +}; |
| 660 | + |
| 661 | +static void __iomem *cns21xx_intc_base; |
| 662 | + |
| 663 | +static inline void cns21xx_intc_writel(u32 val, unsigned int reg) |
| 664 | +{ |
| 665 | + __raw_writel(val, cns21xx_intc_base + reg); |
| 666 | +} |
| 667 | + |
| 668 | +static inline u32 cns21xx_intc_readl(unsigned int reg) |
| 669 | +{ |
| 670 | + return __raw_readl(cns21xx_intc_base + reg); |
| 671 | +} |
| 672 | + |
| 673 | +static void cns21xx_irq_ack(unsigned int irq) |
| 674 | +{ |
| 675 | + cns21xx_intc_writel(1 << irq, INTC_EDGE_INTERRUPT_SOURCE_CLEAR_REG); |
| 676 | +} |
| 677 | + |
| 678 | +static void cns21xx_irq_mask(unsigned int irq) |
| 679 | +{ |
| 680 | + cns21xx_intc_writel(1 << irq, INTC_INTERRUPT_MASK_REG); |
| 681 | +} |
| 682 | + |
| 683 | +static void cns21xx_irq_unmask(unsigned int irq) |
| 684 | +{ |
| 685 | + cns21xx_intc_writel(1 << irq, INTC_INTERRUPT_MASK_CLEAR_REG); |
| 686 | +} |
| 687 | + |
| 688 | +static struct irq_chip cns21xx_irq_chip = { |
| 689 | + .name = "INTC", |
| 690 | + .ack = cns21xx_irq_ack, |
| 691 | + .mask = cns21xx_irq_mask, |
| 692 | + .unmask = cns21xx_irq_unmask, |
| 693 | +}; |
| 694 | + |
| 695 | +static struct resource cns21xx_intc_resource = { |
| 696 | + .name = "INTC", |
| 697 | + .flags = IORESOURCE_MEM, |
| 698 | + .start = CNS21XX_INTC_BASE, |
| 699 | + .end = CNS21XX_INTC_BASE + INTC_SIZE - 1, |
| 700 | +}; |
| 701 | + |
| 702 | +void __init cns21xx_init_irq(void) |
| 703 | +{ |
| 704 | + unsigned int mode = 0; |
| 705 | + unsigned int level = 0; |
| 706 | + int i; |
| 707 | + |
| 708 | + /* |
| 709 | + * Disable arch_idle() by default since it is buggy |
| 710 | + * For more info see arch/arm/mach-cns21xx/include/mach/system.h |
| 711 | + */ |
| 712 | + disable_hlt(); |
| 713 | + |
| 714 | + request_resource(&iomem_resource, &cns21xx_intc_resource); |
| 715 | + cns21xx_intc_base = ioremap(cns21xx_intc_resource.start, INTC_SIZE); |
| 716 | + |
| 717 | + cns21xx_intc_writel(0xffffffff, INTC_INTERRUPT_MASK_REG); |
| 718 | + cns21xx_intc_writel(0xffffffff, INTC_EDGE_INTERRUPT_SOURCE_CLEAR_REG); |
| 719 | + cns21xx_intc_writel(0xffffffff, INTC_SOFTWARE_INTERRUPT_CLEAR_REG); |
| 720 | + cns21xx_intc_writel(0, INTC_SOFTWARE_PRIORITY_MASK_REG); |
| 721 | + cns21xx_intc_writel(0, INTC_FIQ_SELECT_REG); |
| 722 | + cns21xx_intc_writel(0, INTC_VECTOR_INTERRUPT_ENABLE_REG); |
| 723 | + |
| 724 | + for (i = 0; i < ARRAY_SIZE(cns21xx_irq_types); i++) { |
| 725 | + irq_flow_handler_t handler; |
| 726 | + |
| 727 | + switch (cns21xx_irq_types[i]) { |
| 728 | + case IRQ_TYPE_EDGE_RISING: |
| 729 | + handler = handle_edge_irq; |
| 730 | + mode |= (1 << i); |
| 731 | + break; |
| 732 | + |
| 733 | + case IRQ_TYPE_EDGE_FALLING: |
| 734 | + handler = handle_edge_irq; |
| 735 | + mode |= (1 << i); |
| 736 | + level |= (1 << i); |
| 737 | + break; |
| 738 | + |
| 739 | + case IRQ_TYPE_LEVEL_LOW: |
| 740 | + handler = handle_level_irq; |
| 741 | + level |= (1 << i); |
| 742 | + break; |
| 743 | + |
| 744 | + case IRQ_TYPE_LEVEL_HIGH: |
| 745 | + case IRQ_TYPE_NONE: |
| 746 | + handler = handle_level_irq; |
| 747 | + break; |
| 748 | + |
| 749 | + default: |
| 750 | + BUG(); |
| 751 | + break; |
| 752 | + } |
| 753 | + |
| 754 | + set_irq_chip(i, &cns21xx_irq_chip); |
| 755 | + set_irq_handler(i, handler); |
| 756 | + set_irq_flags(i, IRQF_VALID | IRQF_PROBE); |
| 757 | + } |
| 758 | + |
| 759 | + cns21xx_intc_writel(mode, INTC_INTERRUPT_TRIGGER_MODE_REG); |
| 760 | + cns21xx_intc_writel(level, INTC_INTERRUPT_TRIGGER_LEVEL_REG); |
| 761 | +} |
| 762 | --- /dev/null |
| 763 | +++ b/arch/arm/mach-cns21xx/time.c |
| 764 | @@ -0,0 +1,28 @@ |
| 765 | +/* |
| 766 | + * Copyright (c) 2010 Gabor Juhos <juhosg@openwrt.org> |
| 767 | + * |
| 768 | + * This file is free software; you can redistribute it and/or modify |
| 769 | + * it under the terms of the GNU General Public License, Version 2, as |
| 770 | + * published by the Free Software Foundation. |
| 771 | + */ |
| 772 | + |
| 773 | +#include <linux/init.h> |
| 774 | +#include <linux/irq.h> |
| 775 | + |
| 776 | +#include <asm/mach/time.h> |
| 777 | + |
| 778 | +#include <plat/time.h> |
| 779 | +#include <mach/hardware.h> |
| 780 | +#include <mach/cns21xx.h> |
| 781 | + |
| 782 | +#include "common.h" |
| 783 | + |
| 784 | +static void __init cns21xx_timer_init(void) |
| 785 | +{ |
| 786 | + fa_timer_init(CNS21XX_TIMER_BASE, CNS21XX_IRQ_TIMER1, FA_TIMER1, |
| 787 | + cns21xx_get_apb_freq()); |
| 788 | +} |
| 789 | + |
| 790 | +struct sys_timer cns21xx_timer = { |
| 791 | + .init = cns21xx_timer_init, |
| 792 | +}; |
| 793 | --- /dev/null |
| 794 | +++ b/arch/arm/mach-cns21xx/include/mach/cns21xx_powermgmt.h |
| 795 | @@ -0,0 +1,591 @@ |
| 796 | +/* |
| 797 | + * Copyright (c) 2008 Cavium Networks |
| 798 | + * Copyright (c) 2010 Gabor Juhos <juhosg@openwrt.org> |
| 799 | + * |
| 800 | + * This file is free software; you can redistribute it and/or modify |
| 801 | + * it under the terms of the GNU General Public License, Version 2, as |
| 802 | + * published by the Free Software Foundation. |
| 803 | + */ |
| 804 | + |
| 805 | +#ifndef _CNS21XX_POWERMGMT_H |
| 806 | +#define _CNS21XX_POWERMGMT_H |
| 807 | + |
| 808 | +#define PWRMGT_MEM_MAP_VALUE(reg_offset) \ |
| 809 | + (*((u32 volatile *)(CNS21XX_CPM_BASE_VIRT + reg_offset))) |
| 810 | + |
| 811 | +/* |
| 812 | + * define access macros |
| 813 | + */ |
| 814 | +#define PWRMGT_CLOCK_GATE_CONTROL0_REG PWRMGT_MEM_MAP_VALUE(0x00) |
| 815 | +#define PWRMGT_CLOCK_GATE_CONTROL1_REG PWRMGT_MEM_MAP_VALUE(0x04) |
| 816 | +#define PWRMGT_SOFTWARE_RESET_CONTROL_REG PWRMGT_MEM_MAP_VALUE(0x08) |
| 817 | +#define PWRMGT_SYSTEM_CLOCK_CONTROL_REG PWRMGT_MEM_MAP_VALUE(0x0C) |
| 818 | +#define PWRMGT_PLL_POWER_DOWN_CONTROL_REG PWRMGT_MEM_MAP_VALUE(0x10) |
| 819 | +#define PWRMGT_CPU_INITIALIZATION_REG PWRMGT_MEM_MAP_VALUE(0x14) |
| 820 | +#define PWRMGT_PAD_DRIVE_STRENGTH_CONTROL_REG PWRMGT_MEM_MAP_VALUE(0x1C) |
| 821 | +#define PWRMGT_USB_DEVICE_POWERMGT_REG PWRMGT_MEM_MAP_VALUE(0x20) |
| 822 | +#define PWRMGT_REGULATOR_CONTROL_REG PWRMGT_MEM_MAP_VALUE(0x24) |
| 823 | +#define PWRMGT_RTC_XTAL_CONTROL_REG PWRMGT_MEM_MAP_VALUE(0x28) |
| 824 | +#define PWRMGT_PLL250_CONTROL_REG PWRMGT_MEM_MAP_VALUE(0x2C) |
| 825 | + |
| 826 | + |
| 827 | +/* |
| 828 | + * define constants macros |
| 829 | + */ |
| 830 | +#define PWRMGT_GLOBAL_SOFTWARE_RESET_MASK_BIT_INDEX 0 |
| 831 | +#define PWRMGT_PCMCIA_SOFTWARE_RESET_BIT_INDEX 1 |
| 832 | +#define PWRMGT_IDE_SOFTWARE_RESET_BIT_INDEX 2 |
| 833 | +#define PWRMGT_VIC_SOFTWARE_RESET_BIT_INDEX 3 |
| 834 | +#define PWRMGT_DMA_SOFTWARE_RESET_BIT_INDEX 4 |
| 835 | +#define PWRMGT_NIC_SOFTWARE_RESET_BIT_INDEX 5 |
| 836 | +#define PWRMGT_USB_HOST_SOFTWARE_RESET_BIT_INDEX 6 |
| 837 | +#define PWRMGT_PCI_BRIDGE_SOFTWARE_RESET_BIT_INDEX 7 |
| 838 | +#define PWRMGT_P2S_SOFTWARE_RESET_BIT_INDEX 8 |
| 839 | +#define PWRMGT_UART0_SOFTWARE_RESET_BIT_INDEX 9 |
| 840 | +#define PWRMGT_UART1_SOFTWARE_RESET_BIT_INDEX 10 |
| 841 | +#define PWRMGT_TIMER_SOFTWARE_RESET_BIT_INDEX 11 |
| 842 | +#define PWRMGT_WDTIMER_SOFTWARE_RESET_BIT_INDEX 12 |
| 843 | +#define PWRMGT_GPIO_SOFTWARE_RESET_BIT_INDEX 13 |
| 844 | +#define PWRMGT_USB_DEVICE_SOFTWARE_RESET_BIT_INDEX 14 |
| 845 | +#define PWRMGT_FAST_ETHERNET_PHY_SOFTWARE_RESET_BIT_INDEX 15 |
| 846 | +#define PWRMGT_HSDMA_SOFTWARE_RESET_BIT_INDEX 16 |
| 847 | + |
| 848 | +#define PWRMGT_PLL_FREQUENCY_175MHZ (0 << 0) |
| 849 | +#define PWRMGT_PLL_FREQUENCY_200MHZ (1 << 0) |
| 850 | +#define PWRMGT_PLL_FREQUENCY_225MHZ (2 << 0) |
| 851 | +#define PWRMGT_PLL_FREQUENCY_250MHZ (3 << 0) |
| 852 | + |
| 853 | +#define PWRMGT_CPUCLK_DIVIDER_BY_1 (0 << 2) |
| 854 | +#define PWRMGT_CPUCLK_DIVIDER_BY_2 (1 << 2) |
| 855 | +#define PWRMGT_CPUCLK_DIVIDER_BY_3 (2 << 2) |
| 856 | +#define PWRMGT_CPUCLK_DIVIDER_BY_4 (3 << 2) |
| 857 | + |
| 858 | +#define PWRMGT_HCLK_DIVIDER_BY_1 (0 << 4) |
| 859 | +#define PWRMGT_HCLK_DIVIDER_BY_2 (1 << 4) |
| 860 | +#define PWRMGT_HCLK_DIVIDER_BY_3 (2 << 4) |
| 861 | +#define PWRMGT_HCLK_DIVIDER_BY_4 (3 << 4) |
| 862 | + |
| 863 | +#define PWRMGT_HCLK_SOURCE_FCLK (0 << 6) |
| 864 | +#define PWRMGT_HCLK_SOURCE_125MHZ (1 << 6) |
| 865 | + |
| 866 | +#define PWRMGT_PCLK_DIVIDER_BY_1 (0 << 8) |
| 867 | +#define PWRMGT_PCLK_DIVIDER_BY_2 (1 << 8) |
| 868 | +#define PWRMGT_PCLK_DIVIDER_BY_3 (2 << 8) |
| 869 | +#define PWRMGT_PCLK_DIVIDER_BY_4 (3 << 8) |
| 870 | + |
| 871 | +#define PWRMGT_PCICLK_DIVIDER_BY_1 (0 << 10) |
| 872 | +#define PWRMGT_PCICLK_DIVIDER_BY_2 (1 << 10) |
| 873 | +#define PWRMGT_PCICLK_DIVIDER_BY_3 (2 << 10) |
| 874 | +#define PWRMGT_PCICLK_DIVIDER_BY_4 (3 << 10) |
| 875 | + |
| 876 | + |
| 877 | +#define PWRMGT_PLLCLK_TO_CPUCLK_RATIO_BY_1 1 |
| 878 | +#define PWRMGT_PLLCLK_TO_CPUCLK_RATIO_BY_2 2 |
| 879 | +#define PWRMGT_PLLCLK_TO_CPUCLK_RATIO_BY_3 3 |
| 880 | +#define PWRMGT_PLLCLK_TO_CPUCLK_RATIO_BY_4 4 |
| 881 | + |
| 882 | +#define PWRMGT_CPUCLK_TO_HCLK_RATIO_BY_1 1 |
| 883 | +#define PWRMGT_CPUCLK_TO_HCLK_RATIO_BY_2 2 |
| 884 | +#define PWRMGT_CPUCLK_TO_HCLK_RATIO_BY_3 3 |
| 885 | +#define PWRMGT_CPUCLK_TO_HCLK_RATIO_BY_4 4 |
| 886 | + |
| 887 | +#define PWRMGT_HCLK_TO_PCLK_RATIO_BY_1 1 |
| 888 | +#define PWRMGT_HCLK_TO_PCLK_RATIO_BY_2 2 |
| 889 | +#define PWRMGT_HCLK_TO_PCLK_RATIO_BY_3 3 |
| 890 | +#define PWRMGT_HCLK_TO_PCLK_RATIO_BY_4 4 |
| 891 | + |
| 892 | +/* |
| 893 | + * Macro defines for Clock Gate Control |
| 894 | + */ |
| 895 | +#define HAL_PWRMGT_DISABLE_DRAMC_CLOCK() \ |
| 896 | +{ \ |
| 897 | + PWRMGT_CLOCK_GATE_CONTROL0_REG &= ~(0x1); \ |
| 898 | +} |
| 899 | + |
| 900 | + |
| 901 | +#define HAL_PWRMGT_ENABLE_NIC_CLOCK() \ |
| 902 | +{ \ |
| 903 | + PWRMGT_PLL_POWER_DOWN_CONTROL_REG &= ~(0x1 << 0); \ |
| 904 | + PWRMGT_CLOCK_GATE_CONTROL0_REG |= (0x0F << 20); \ |
| 905 | + PWRMGT_SOFTWARE_RESET_CONTROL_REG |= (0x1 << 5); \ |
| 906 | +} |
| 907 | + |
| 908 | +#define HAL_PWRMGT_DISABLE_NIC_CLOCK() \ |
| 909 | +{ \ |
| 910 | + PWRMGT_CLOCK_GATE_CONTROL0_REG &= ~(0x0F << 20); \ |
| 911 | +} |
| 912 | + |
| 913 | + |
| 914 | +#define HAL_PWRMGT_ENABLE_PCI_BRIDGE_33M_CLOCK() \ |
| 915 | +{ \ |
| 916 | + PWRMGT_PLL_POWER_DOWN_CONTROL_REG &= ~(0x1 << 1); \ |
| 917 | + PWRMGT_SYSTEM_CLOCK_CONTROL_REG &= ~(0x3 << 10); \ |
| 918 | + PWRMGT_SYSTEM_CLOCK_CONTROL_REG |= (0x1 << 10); \ |
| 919 | + PWRMGT_CLOCK_GATE_CONTROL0_REG |= (0x1 << 28) | (0x1 << 30); \ |
| 920 | + PWRMGT_SOFTWARE_RESET_CONTROL_REG |= (0x1 << 7); \ |
| 921 | +} |
| 922 | + |
| 923 | +#define HAL_PWRMGT_ENABLE_PCI_BRIDGE_66M_CLOCK() \ |
| 924 | +{ \ |
| 925 | + PWRMGT_PLL_POWER_DOWN_CONTROL_REG &= ~(0x1 << 1); \ |
| 926 | + PWRMGT_SYSTEM_CLOCK_CONTROL_REG &= ~(0x3 << 10); \ |
| 927 | + PWRMGT_SYSTEM_CLOCK_CONTROL_REG |= (0x0 << 10); \ |
| 928 | + PWRMGT_CLOCK_GATE_CONTROL0_REG |= (0x1 << 28) | (0x1 << 30); \ |
| 929 | + PWRMGT_SOFTWARE_RESET_CONTROL_REG |= (0x1 << 7); \ |
| 930 | +} |
| 931 | + |
| 932 | +#define HAL_PWRMGT_DISABLE_PCI_CLOCK() \ |
| 933 | +{ \ |
| 934 | + PWRMGT_CLOCK_GATE_CONTROL0_REG &= ~((0x1 << 28) | (0x1 << 30)); \ |
| 935 | +} |
| 936 | + |
| 937 | + |
| 938 | +#define HAL_PWRMGT_ENABLE_USB_CLOCK() \ |
| 939 | +{ \ |
| 940 | + PWRMGT_PLL_POWER_DOWN_CONTROL_REG &= ~(0xF << 1); \ |
| 941 | + PWRMGT_CLOCK_GATE_CONTROL0_REG |= (0x1 << 24); \ |
| 942 | + PWRMGT_CLOCK_GATE_CONTROL1_REG |= (0x1 << 28); \ |
| 943 | + PWRMGT_SOFTWARE_RESET_CONTROL_REG |= (0x1 << 6) | (0x1 << 14); \ |
| 944 | +} |
| 945 | + |
| 946 | +#define HAL_PWRMGT_DISABLE_USB_CLOCK() \ |
| 947 | +{ \ |
| 948 | + PWRMGT_CLOCK_GATE_CONTROL0_REG &= ~(0x1 << 24); \ |
| 949 | + PWRMGT_CLOCK_GATE_CONTROL1_REG &= ~(0x1 << 28); \ |
| 950 | +} |
| 951 | + |
| 952 | + |
| 953 | +#define HAL_PWRMGT_ENABLE_DMA_CLOCK() \ |
| 954 | +{ \ |
| 955 | + PWRMGT_CLOCK_GATE_CONTROL0_REG |= (0x1 << 16); \ |
| 956 | + PWRMGT_SOFTWARE_RESET_CONTROL_REG |= (0x1 << 4); \ |
| 957 | +} |
| 958 | + |
| 959 | +#define HAL_PWRMGT_DISABLE_DMA_CLOCK() \ |
| 960 | +{ \ |
| 961 | + PWRMGT_CLOCK_GATE_CONTROL0_REG &= ~(0x1 << 16); \ |
| 962 | +} |
| 963 | + |
| 964 | + |
| 965 | +#define HAL_PWRMGT_ENABLE_IDE_CLOCK() \ |
| 966 | +{ \ |
| 967 | + PWRMGT_CLOCK_GATE_CONTROL0_REG |= (0x1 << 8) | (0x1 << 9); \ |
| 968 | + PWRMGT_SOFTWARE_RESET_CONTROL_REG |= (0x1 << 2); \ |
| 969 | +} |
| 970 | + |
| 971 | +#define HAL_PWRMGT_DISABLE_IDE_CLOCK() \ |
| 972 | +{ \ |
| 973 | + PWRMGT_CLOCK_GATE_CONTROL0_REG &= ~((0x1 << 8) | (0x1 << 9)); \ |
| 974 | +} |
| 975 | + |
| 976 | + |
| 977 | +#define HAL_PWRMGT_ENABLE_UART0_CLOCK() \ |
| 978 | +{ \ |
| 979 | + PWRMGT_PLL_POWER_DOWN_CONTROL_REG &= ~((0x1 << 1) | (0x1 << 2) | (0x1 << 5)); \ |
| 980 | + PWRMGT_CLOCK_GATE_CONTROL1_REG |= (0x1 << 12); \ |
| 981 | + PWRMGT_SOFTWARE_RESET_CONTROL_REG |= (0x1 << 9); \ |
| 982 | +} |
| 983 | + |
| 984 | +#define HAL_PWRMGT_DISABLE_UART0_CLOCK() \ |
| 985 | +{ \ |
| 986 | + PWRMGT_CLOCK_GATE_CONTROL1_REG &= ~(0x1 << 12); \ |
| 987 | +} |
| 988 | + |
| 989 | + |
| 990 | +#define HAL_PWRMGT_ENABLE_UART1_CLOCK() \ |
| 991 | +{ \ |
| 992 | + PWRMGT_PLL_POWER_DOWN_CONTROL_REG &= ~((0x1 << 1) | (0x1 << 2) | (0x1 << 5)); \ |
| 993 | + PWRMGT_CLOCK_GATE_CONTROL1_REG |= (0x1 << 13); \ |
| 994 | + PWRMGT_SOFTWARE_RESET_CONTROL_REG |= (0x1 << 10); \ |
| 995 | +} |
| 996 | + |
| 997 | +#define HAL_PWRMGT_DISABLE_UART1_CLOCK() \ |
| 998 | +{ \ |
| 999 | + PWRMGT_CLOCK_GATE_CONTROL1_REG &= ~(0x1 << 13); \ |
| 1000 | +} |
| 1001 | + |
| 1002 | + |
| 1003 | +#define HAL_PWRMGT_ENABLE_PCMCIA_CLOCK() \ |
| 1004 | +{ \ |
| 1005 | + PWRMGT_CLOCK_GATE_CONTROL0_REG |= (0x1 << 4) | (0x1 << 5); \ |
| 1006 | +} |
| 1007 | + |
| 1008 | +#define HAL_PWRMGT_DISABLE_PCMCIA_CLOCK() \ |
| 1009 | +{ \ |
| 1010 | + PWRMGT_CLOCK_GATE_CONTROL0_REG &= ~((0x1 << 4) | (0x1 << 5)); \ |
| 1011 | +} |
| 1012 | + |
| 1013 | + |
| 1014 | +#define HAL_PWRMGT_ENABLE_GPIO_CLOCK() \ |
| 1015 | +{ \ |
| 1016 | + PWRMGT_CLOCK_GATE_CONTROL1_REG |= (0x1 << 25); \ |
| 1017 | +} |
| 1018 | + |
| 1019 | +#define HAL_PWRMGT_DISABLE_GPIO_CLOCK() \ |
| 1020 | +{ \ |
| 1021 | + PWRMGT_CLOCK_GATE_CONTROL1_REG &= ~(0x1 << 25); \ |
| 1022 | +} |
| 1023 | + |
| 1024 | + |
| 1025 | +#define HAL_PWRMGT_ENABLE_WDTIMER_CLOCK() \ |
| 1026 | +{ \ |
| 1027 | + PWRMGT_CLOCK_GATE_CONTROL1_REG |= (0x1 << 21) | (0x1 << 22); \ |
| 1028 | +} |
| 1029 | + |
| 1030 | +#define HAL_PWRMGT_DISABLE_WDTIMER_CLOCK() \ |
| 1031 | +{ \ |
| 1032 | + PWRMGT_CLOCK_GATE_CONTROL1_REG &= ~((0x1 << 21) | (0x1 << 22)); \ |
| 1033 | +} |
| 1034 | + |
| 1035 | + |
| 1036 | +#define HAL_PWRMGT_ENABLE_RTC_CLOCK() \ |
| 1037 | +{ \ |
| 1038 | + PWRMGT_CLOCK_GATE_CONTROL1_REG |= (0x1 << 23); \ |
| 1039 | +} |
| 1040 | + |
| 1041 | +#define HAL_PWRMGT_DISABLE_RTC_CLOCK() \ |
| 1042 | +{ \ |
| 1043 | + PWRMGT_CLOCK_GATE_CONTROL1_REG &= ~(0x1 << 23); \ |
| 1044 | +} |
| 1045 | + |
| 1046 | + |
| 1047 | +#define HAL_PWRMGT_ENABLE_TIMER_CLOCK() \ |
| 1048 | +{ \ |
| 1049 | + PWRMGT_CLOCK_GATE_CONTROL1_REG |= (0x1 << 17) | (0x1 << 18) | (0x1 << 19); \ |
| 1050 | +} |
| 1051 | + |
| 1052 | +#define HAL_PWRMGT_DISABLE_TIMER_CLOCK() \ |
| 1053 | +{ \ |
| 1054 | + PWRMGT_CLOCK_GATE_CONTROL1_REG &= ~((0x1 << 17) | (0x1 << 18) | (0x1 << 19)); \ |
| 1055 | +} |
| 1056 | + |
| 1057 | + |
| 1058 | +#define HAL_PWRMGT_ENABLE_I2C_CLOCK() \ |
| 1059 | +{ \ |
| 1060 | + PWRMGT_CLOCK_GATE_CONTROL1_REG |= (0x1 << 1); \ |
| 1061 | +} |
| 1062 | + |
| 1063 | +#define HAL_PWRMGT_DISABLE_I2C_CLOCK() \ |
| 1064 | +{ \ |
| 1065 | + PWRMGT_CLOCK_GATE_CONTROL1_REG &= ~(0x1 << 1); \ |
| 1066 | +} |
| 1067 | + |
| 1068 | + |
| 1069 | +#define HAL_PWRMGT_ENABLE_I2S_CLOCK() \ |
| 1070 | +{ \ |
| 1071 | + PWRMGT_PLL_POWER_DOWN_CONTROL_REG &= ~((0x1 << 5) | (0x1 << 6)); \ |
| 1072 | + PWRMGT_CLOCK_GATE_CONTROL1_REG |= (0x1 << 1) | (0x1 << 10); \ |
| 1073 | + PWRMGT_SOFTWARE_RESET_CONTROL_REG |= (0x1 << 8); \ |
| 1074 | +} |
| 1075 | + |
| 1076 | +#define HAL_PWRMGT_DISABLE_I2S_CLOCK() \ |
| 1077 | +{ \ |
| 1078 | + PWRMGT_CLOCK_GATE_CONTROL1_REG &= ~((0x1 << 1) | (0x1 << 10)); \ |
| 1079 | +} |
| 1080 | + |
| 1081 | + |
| 1082 | +#define HAL_PWRMGT_ENABLE_PCM_CLOCK() \ |
| 1083 | +{ \ |
| 1084 | + PWRMGT_PLL_POWER_DOWN_CONTROL_REG &= ~(0x1 << 5); \ |
| 1085 | + PWRMGT_CLOCK_GATE_CONTROL1_REG |= (0x1 << 1) | (0x1 << 6); \ |
| 1086 | + PWRMGT_SOFTWARE_RESET_CONTROL_REG |= (0x1 << 8); \ |
| 1087 | +} |
| 1088 | + |
| 1089 | +#define HAL_PWRMGT_DISABLE_PCM_CLOCK() \ |
| 1090 | +{ \ |
| 1091 | + PWRMGT_CLOCK_GATE_CONTROL1_REG &= ~((0x1 << 1) | (0x1 << 6)); \ |
| 1092 | +} |
| 1093 | + |
| 1094 | + |
| 1095 | +#define HAL_PWRMGT_ENABLE_SPI_CLOCK() \ |
| 1096 | +{ \ |
| 1097 | + PWRMGT_CLOCK_GATE_CONTROL1_REG |= (0x1 << 0) | (0x1 << 1); \ |
| 1098 | +} |
| 1099 | + |
| 1100 | +#define HAL_PWRMGT_DISABLE_SPI_CLOCK() \ |
| 1101 | +{ \ |
| 1102 | + PWRMGT_CLOCK_GATE_CONTROL1_REG &= ~((0x1 << 0) | (0x1 << 1)); \ |
| 1103 | +} |
| 1104 | + |
| 1105 | + |
| 1106 | +#define HAL_PWRMGT_ENABLE_VIC_CLOCK() \ |
| 1107 | +{ \ |
| 1108 | + PWRMGT_CLOCK_GATE_CONTROL0_REG |= (0x1 << 12); \ |
| 1109 | +} |
| 1110 | + |
| 1111 | +#define HAL_PWRMGT_DISABLE_VIC_CLOCK() \ |
| 1112 | +{ \ |
| 1113 | + PWRMGT_CLOCK_GATE_CONTROL0_REG &= ~(0x1 << 12); \ |
| 1114 | +} |
| 1115 | + |
| 1116 | + |
| 1117 | +#define HAL_PWRMGT_ENABLE_SMC_CLOCK() \ |
| 1118 | +{ \ |
| 1119 | + PWRMGT_CLOCK_GATE_CONTROL0_REG |= (0x1 << 4) | (0x1 << 5); \ |
| 1120 | +} |
| 1121 | + |
| 1122 | +#define HAL_PWRMGT_DISABLE_SMC_CLOCK() \ |
| 1123 | +{ \ |
| 1124 | + PWRMGT_CLOCK_GATE_CONTROL0_REG &= ~((0x1 << 4) | (0x1 << 5)); \ |
| 1125 | +} |
| 1126 | + |
| 1127 | + |
| 1128 | +#define HAL_PWRMGT_ENABLE_HSDMA_CLOCK() \ |
| 1129 | +{ \ |
| 1130 | + PWRMGT_CLOCK_GATE_CONTROL1_REG |= (0x1 << 29); \ |
| 1131 | + PWRMGT_SOFTWARE_RESET_CONTROL_REG |= (0x1 << 16); \ |
| 1132 | +} |
| 1133 | + |
| 1134 | +#define HAL_PWRMGT_DISABLE_HSDMA_CLOCK() \ |
| 1135 | +{ \ |
| 1136 | + PWRMGT_CLOCK_GATE_CONTROL1_REG &= ~(0x1 << 29); \ |
| 1137 | +} |
| 1138 | + |
| 1139 | + |
| 1140 | + |
| 1141 | +/* |
| 1142 | + * Macro defines for Reset Control |
| 1143 | + */ |
| 1144 | +#define HAL_PWRMGT_GLOBAL_SOFTWARE_RESET() \ |
| 1145 | +{ \ |
| 1146 | + PWRMGT_SOFTWARE_RESET_CONTROL_REG |= (0x1); \ |
| 1147 | + PWRMGT_SOFTWARE_RESET_CONTROL_REG &= ~(0x1); \ |
| 1148 | +} |
| 1149 | + |
| 1150 | + |
| 1151 | +/* |
| 1152 | + * Macro defines for System Clock Control |
| 1153 | + */ |
| 1154 | +#define HAL_PWRMGT_SET_PLL_FREQUENCY_175MHZ() \ |
| 1155 | +{ \ |
| 1156 | + PWRMGT_SYSTEM_CLOCK_CONTROL_REG &= ~0x3; \ |
| 1157 | +} |
| 1158 | + |
| 1159 | + |
| 1160 | +#define HAL_PWRMGT_SET_PLL_FREQUENCY_200MHZ() \ |
| 1161 | +{ \ |
| 1162 | + PWRMGT_SYSTEM_CLOCK_CONTROL_REG &= ~0x3; \ |
| 1163 | + PWRMGT_SYSTEM_CLOCK_CONTROL_REG |= 0x1; \ |
| 1164 | +} |
| 1165 | + |
| 1166 | + |
| 1167 | +#define HAL_PWRMGT_SET_PLL_FREQUENCY_225MHZ() \ |
| 1168 | +{ \ |
| 1169 | + PWRMGT_SYSTEM_CLOCK_CONTROL_REG &= ~0x3; \ |
| 1170 | + PWRMGT_SYSTEM_CLOCK_CONTROL_REG |= 0x2; \ |
| 1171 | +} |
| 1172 | + |
| 1173 | + |
| 1174 | +#define HAL_PWRMGT_SET_PLL_FREQUENCY_250MHZ() \ |
| 1175 | +{ \ |
| 1176 | + PWRMGT_SYSTEM_CLOCK_CONTROL_REG &= ~0x3; \ |
| 1177 | + PWRMGT_SYSTEM_CLOCK_CONTROL_REG |= 0x3; \ |
| 1178 | +} |
| 1179 | + |
| 1180 | + |
| 1181 | +#define HAL_PWRMGT_CONFIG_PLLCLK_TO_CPUCLK_RATIO(ratio) \ |
| 1182 | +{ \ |
| 1183 | + PWRMGT_SYSTEM_CLOCK_CONTROL_REG &= ~(0x3 << 2); \ |
| 1184 | + PWRMGT_SYSTEM_CLOCK_CONTROL_REG |= (((ratio - 1) & 0x3) << 2); \ |
| 1185 | +} |
| 1186 | + |
| 1187 | + |
| 1188 | +#define HAL_PWRMGT_CONFIG_CPUCLK_TO_HCLK_RATIO(ratio) \ |
| 1189 | +{ \ |
| 1190 | + PWRMGT_SYSTEM_CLOCK_CONTROL_REG &= ~(0x3 << 4); \ |
| 1191 | + PWRMGT_SYSTEM_CLOCK_CONTROL_REG |= (((ratio - 1) & 0x3) << 4); \ |
| 1192 | +} |
| 1193 | + |
| 1194 | + |
| 1195 | +#define HAL_PWRMGT_HCLK_SOURCE_FCLK() \ |
| 1196 | +{ \ |
| 1197 | + PWRMGT_SYSTEM_CLOCK_CONTROL_REG &= ~(0x1 << 6); \ |
| 1198 | +} |
| 1199 | + |
| 1200 | + |
| 1201 | +#define HAL_PWRMGT_HCLK_SOURCE_125MHZ() \ |
| 1202 | +{ \ |
| 1203 | + PWRMGT_SYSTEM_CLOCK_CONTROL_REG |= (0x1 << 6); \ |
| 1204 | +} |
| 1205 | + |
| 1206 | + |
| 1207 | +#define HAL_PWRMGT_GIGA_NIC_CLOCK_SOURCE_HCLK() \ |
| 1208 | +{ \ |
| 1209 | + PWRMGT_SYSTEM_CLOCK_CONTROL_REG &= ~(0x1 << 7); \ |
| 1210 | +} |
| 1211 | + |
| 1212 | + |
| 1213 | +#define HAL_PWRMGT_GIGA_NIC_CLOCK_SOURCE_62_5MHZ() \ |
| 1214 | +{ \ |
| 1215 | + PWRMGT_SYSTEM_CLOCK_CONTROL_REG |= (0x1 << 7); \ |
| 1216 | +} |
| 1217 | + |
| 1218 | + |
| 1219 | +#define HAL_PWRMGT_CONFIG_HCLK_TO_PCLK_RATIO(ratio) \ |
| 1220 | +{ \ |
| 1221 | + PWRMGT_SYSTEM_CLOCK_CONTROL_REG &= ~(0x3 << 8); \ |
| 1222 | + PWRMGT_SYSTEM_CLOCK_CONTROL_REG |= (((ratio - 1) & 0x3) << 8); \ |
| 1223 | +} |
| 1224 | + |
| 1225 | + |
| 1226 | +#define HAL_PWRMGT_I2S_CLOCK_SOURCE_8192000HZ() \ |
| 1227 | +{ \ |
| 1228 | + PWRMGT_SYSTEM_CLOCK_CONTROL_REG &= ~(0x3 << 12); \ |
| 1229 | + PWRMGT_SYSTEM_CLOCK_CONTROL_REG |= (0x0 << 12); \ |
| 1230 | +} |
| 1231 | + |
| 1232 | + |
| 1233 | +#define HAL_PWRMGT_I2S_CLOCK_SOURCE_11289600HZ() \ |
| 1234 | +{ \ |
| 1235 | + PWRMGT_SYSTEM_CLOCK_CONTROL_REG &= ~(0x3 << 12); \ |
| 1236 | + PWRMGT_SYSTEM_CLOCK_CONTROL_REG |= (0x1 << 12); \ |
| 1237 | +} |
| 1238 | + |
| 1239 | + |
| 1240 | +#define HAL_PWRMGT_I2S_CLOCK_SOURCE_12288000HZ() \ |
| 1241 | +{ \ |
| 1242 | + PWRMGT_SYSTEM_CLOCK_CONTROL_REG &= ~(0x3 << 12); \ |
| 1243 | + PWRMGT_SYSTEM_CLOCK_CONTROL_REG |= (0x2 << 12); \ |
| 1244 | +} |
| 1245 | + |
| 1246 | + |
| 1247 | +#define HAL_PWRMGT_CONFIGURE_MDC_CLOCK_DIVIDER(divided_value) \ |
| 1248 | +{ \ |
| 1249 | + PWRMGT_SYSTEM_CLOCK_CONTROL_REG &= ~(0x3 << 14); \ |
| 1250 | + PWRMGT_SYSTEM_CLOCK_CONTROL_REG |= ((divided_value & 0x3) << 14); \ |
| 1251 | +} |
| 1252 | + |
| 1253 | + |
| 1254 | +#define HAL_PWRMGT_CONFIGURE_CLOCK_OUT_PIN(pin_source_select, divided_value) \ |
| 1255 | +{ \ |
| 1256 | + PWRMGT_SYSTEM_CLOCK_CONTROL_REG &= ~(0x3F << 16); \ |
| 1257 | + PWRMGT_SYSTEM_CLOCK_CONTROL_REG |= ((pin_source_select & 0xF) << 16); \ |
| 1258 | + PWRMGT_SYSTEM_CLOCK_CONTROL_REG |= ((divided_value & 0x3) << 20); \ |
| 1259 | +} |
| 1260 | + |
| 1261 | + |
| 1262 | +/* |
| 1263 | + * Macro defines for PLL Power Down Control |
| 1264 | + */ |
| 1265 | +#define HAL_PWRMGT_POWER_DOWN_SYSTEM_XTAL_PAD() \ |
| 1266 | + PWRMGT_PLL_POWER_DOWN_CONTROL_REG |= (0x1 << 7) |
| 1267 | + |
| 1268 | +#define HAL_PWRMGT_POWER_ON_SYSTEM_XTAL_PAD() \ |
| 1269 | + PWRMGT_PLL_POWER_DOWN_CONTROL_REG &= ~(0x1 << 7) |
| 1270 | + |
| 1271 | + |
| 1272 | +#define HAL_PWRMGT_POWER_DOWN_PLL_X5() \ |
| 1273 | + PWRMGT_PLL_POWER_DOWN_CONTROL_REG |= (0x1 << 0) |
| 1274 | + |
| 1275 | +#define HAL_PWRMGT_POWER_ON_PLL_X5() \ |
| 1276 | + PWRMGT_PLL_POWER_DOWN_CONTROL_REG &= ~(0x1 << 0) |
| 1277 | + |
| 1278 | + |
| 1279 | +#define HAL_PWRMGT_POWER_DOWN_PLL_X8() \ |
| 1280 | + PWRMGT_PLL_POWER_DOWN_CONTROL_REG |= (0x1 << 1) |
| 1281 | + |
| 1282 | +#define HAL_PWRMGT_POWER_ON_PLL_X8() \ |
| 1283 | + PWRMGT_PLL_POWER_DOWN_CONTROL_REG &= ~(0x1 << 1) |
| 1284 | + |
| 1285 | + |
| 1286 | +#define HAL_PWRMGT_POWER_DOWN_PLL_X3() \ |
| 1287 | + PWRMGT_PLL_POWER_DOWN_CONTROL_REG |= (0x1 << 2) |
| 1288 | + |
| 1289 | +#define HAL_PWRMGT_POWER_ON_PLL_X3() \ |
| 1290 | + PWRMGT_PLL_POWER_DOWN_CONTROL_REG &= ~(0x1 << 2) |
| 1291 | + |
| 1292 | + |
| 1293 | +#define HAL_PWRMGT_POWER_DOWN_USBH_PHY_PLL() \ |
| 1294 | + PWRMGT_PLL_POWER_DOWN_CONTROL_REG |= (0x1 << 3) |
| 1295 | + |
| 1296 | +#define HAL_PWRMGT_POWER_ON_USBH_PHY_PLL() \ |
| 1297 | + PWRMGT_PLL_POWER_DOWN_CONTROL_REG &= ~(0x1 << 3) |
| 1298 | + |
| 1299 | + |
| 1300 | +#define HAL_PWRMGT_POWER_DOWN_USBD_PHY_PLL() \ |
| 1301 | + PWRMGT_PLL_POWER_DOWN_CONTROL_REG |= (0x1 << 4) |
| 1302 | + |
| 1303 | +#define HAL_PWRMGT_POWER_ON_USBD_PHY_PLL() \ |
| 1304 | + PWRMGT_PLL_POWER_DOWN_CONTROL_REG &= ~(0x1 << 4) |
| 1305 | + |
| 1306 | + |
| 1307 | +#define HAL_PWRMGT_POWER_DOWN_PLL_X2250() \ |
| 1308 | + PWRMGT_PLL_POWER_DOWN_CONTROL_REG |= (0x1 << 5) |
| 1309 | + |
| 1310 | +#define HAL_PWRMGT_POWER_ON_PLL_X2250() \ |
| 1311 | + PWRMGT_PLL_POWER_DOWN_CONTROL_REG &= ~(0x1 << 5) |
| 1312 | + |
| 1313 | + |
| 1314 | +#define HAL_PWRMGT_POWER_DOWN_PLL_X7() \ |
| 1315 | + PWRMGT_PLL_POWER_DOWN_CONTROL_REG |= (0x1 << 6) |
| 1316 | + |
| 1317 | +#define HAL_PWRMGT_POWER_ON_PLL_X7() \ |
| 1318 | + PWRMGT_PLL_POWER_DOWN_CONTROL_REG &= ~(0x1 << 6) |
| 1319 | + |
| 1320 | + |
| 1321 | +#define HAL_PWRMGT_POWER_DOWN_ALL_PLL() \ |
| 1322 | + PWRMGT_PLL_POWER_DOWN_CONTROL_REG = 0x7F; |
| 1323 | + |
| 1324 | +#define HAL_PWRMGT_POWER_ON_ALL_PLL() \ |
| 1325 | + PWRMGT_PLL_POWER_DOWN_CONTROL_REG = 0; |
| 1326 | + |
| 1327 | + |
| 1328 | +/* |
| 1329 | + * Macro defines for Pad Drive Strength Control |
| 1330 | + */ |
| 1331 | +#define HAL_PWRMGT_SELECT_PAD_DRIVE_STRENGTH_PCMCIA_CARDBUS_MODE() \ |
| 1332 | +{ \ |
| 1333 | + PWRMGT_PAD_DRIVE_STRENGTH_CONTROL_REG &= ~(0x3 << 0); \ |
| 1334 | +} |
| 1335 | + |
| 1336 | +#define HAL_PWRMGT_SELECT_PAD_DRIVE_STRENGTH_PCI_MODE() \ |
| 1337 | +{ \ |
| 1338 | + PWRMGT_PAD_DRIVE_STRENGTH_CONTROL_REG &= ~(0x3 << 0); \ |
| 1339 | + PWRMGT_PAD_DRIVE_STRENGTH_CONTROL_REG |= (0x1 << 0); \ |
| 1340 | +} |
| 1341 | + |
| 1342 | +#define HAL_PWRMGT_SELECT_PAD_DRIVE_STRENGTH_MII_MODE() \ |
| 1343 | +{ \ |
| 1344 | + PWRMGT_PAD_DRIVE_STRENGTH_CONTROL_REG |= (0x1 << 2); \ |
| 1345 | +} |
| 1346 | + |
| 1347 | +#define HAL_PWRMGT_SELECT_PAD_DRIVE_STRENGTH_RGMII_MODE() \ |
| 1348 | +{ \ |
| 1349 | + PWRMGT_PAD_DRIVE_STRENGTH_CONTROL_REG &= ~(0x1 << 2); \ |
| 1350 | +} |
| 1351 | + |
| 1352 | +#define HAL_PWRMGT_ENABLE_MII_PAD_SIGNAL_NOT_BOUNDED() \ |
| 1353 | +{ \ |
| 1354 | + PWRMGT_PAD_DRIVE_STRENGTH_CONTROL_REG |= (0x1 << 3); \ |
| 1355 | +} |
| 1356 | + |
| 1357 | +#define HAL_PWRMGT_DISABLE_MII_PAD_SIGNAL_NOT_BOUNDED() \ |
| 1358 | +{ \ |
| 1359 | + PWRMGT_PAD_DRIVE_STRENGTH_CONTROL_REG &= ~(0x1 << 3); \ |
| 1360 | +} |
| 1361 | + |
| 1362 | + |
| 1363 | +/* |
| 1364 | + * Macro defines for USB Device Power Management |
| 1365 | + */ |
| 1366 | +#define HAL_PWRMGT_REMOTE_WAKEUP_USB_HOST() \ |
| 1367 | +{ \ |
| 1368 | + PWRMGT_USB_DEVICE_POWERMGT_REG |= (0x1 << 4); \ |
| 1369 | +} |
| 1370 | + |
| 1371 | +#define HAL_PWRMGT_USB_DEVICE_PHY_CLOCK_SOURCE_EXTERNAL_12MHZ() \ |
| 1372 | +{ \ |
| 1373 | + PWRMGT_USB_DEVICE_POWERMGT_REG &= ~(0x1 << 5); \ |
| 1374 | +} |
| 1375 | + |
| 1376 | +#define HAL_PWRMGT_USB_DEVICE_PHY_CLOCK_SOURCE_INTERNAL_12MHZ() \ |
| 1377 | +{ \ |
| 1378 | + PWRMGT_USB_DEVICE_POWERMGT_REG |= (0x1 << 5); \ |
| 1379 | +} |
| 1380 | + |
| 1381 | + |
| 1382 | +/* |
| 1383 | + * Macro defines for Regulator Control |
| 1384 | + */ |
| 1385 | + |
| 1386 | +#endif /* _CNS21XX_POWERMGMT_H */ |
| 1387 | --- /dev/null |
| 1388 | +++ b/arch/arm/mach-cns21xx/include/mach/cns21xx.h |
| 1389 | @@ -0,0 +1,88 @@ |
| 1390 | +/* |
| 1391 | + * Copyright (c) 2008 Cavium Networks |
| 1392 | + * Copyright (c) 2010 Gabor Juhos <juhosg@openwrt.org> |
| 1393 | + * |
| 1394 | + * This file is free software; you can redistribute it and/or modify |
| 1395 | + * it under the terms of the GNU General Public License, Version 2, as |
| 1396 | + * published by the Free Software Foundation. |
| 1397 | + */ |
| 1398 | + |
| 1399 | +#ifndef _CNS21XX_H |
| 1400 | +#define _CNS21XX_H |
| 1401 | + |
| 1402 | +#define CNS21XX_FLASH_BANK0_BASE 0x10000000 |
| 1403 | +#define CNS21XX_FLASH_BANK1_BASE 0x11000000 |
| 1404 | +#define CNS21XX_FLASH_BANK2_BASE 0x12000000 |
| 1405 | +#define CNS21XX_FLASH_BANK3_BASE 0x13000000 |
| 1406 | +#define CNS21XX_PCMCIA_ATTR_BASE 0x14000000 |
| 1407 | +#define CNS21XX_PCMCIA_MEM_BASE 0x15000000 |
| 1408 | +#define CNS21XX_PCMCIA_IO_BASE 0x16000000 |
| 1409 | +#define CNS21XX_IDE_DEVICE_BASE 0x18000000 |
| 1410 | +#define CNS21XX_SDRAM_MEMORY_BASE 0x20000000 |
| 1411 | +#define CNS21XX_GDMAC_BASE 0x60000000 |
| 1412 | +#define CNS21XX_NIC_BASE 0x70000000 |
| 1413 | +#define CNS21XX_SPI_BASE 0x71000000 |
| 1414 | +#define CNS21XX_PCM_BASE 0x71000000 |
| 1415 | +#define CNS21XX_I2C_BASE 0x71000000 |
| 1416 | +#define CNS21XX_I2S_BASE 0x71000000 |
| 1417 | +#define CNS21XX_DDRC_BASE 0x72000000 |
| 1418 | +#define CNS21XX_SMC_BASE 0x73000000 |
| 1419 | +#define CNS21XX_PCMCIA_CTRL_BASE 0x73000000 |
| 1420 | +#define CNS21XX_IDE_CTRL_BASE 0x74000000 |
| 1421 | +#define CNS21XX_MISC_BASE 0x76000000 |
| 1422 | +#define CNS21XX_CPM_BASE 0x77000000 |
| 1423 | +#define CNS21XX_UART0_BASE 0x78000000 |
| 1424 | +#define CNS21XX_UART1_BASE 0x78800000 |
| 1425 | +#define CNS21XX_TIMER_BASE 0x79000000 |
| 1426 | +#define CNS21XX_WDT_BASE 0x7a000000 |
| 1427 | +#define CNS21XX_RTC_BASE 0x7b000000 |
| 1428 | +#define CNS21XX_GPIOA_BASE 0x7c000000 |
| 1429 | +#define CNS21XX_GPIOB_BASE 0x7c800000 |
| 1430 | +#define CNS21XX_PCI_CFGDATA_BASE 0xa0000000 |
| 1431 | +#define CNS21XX_PCI_CFGADDR_BASE 0xa4000000 |
| 1432 | +#define CNS21XX_PCI_IO_BASE 0xa8000000 |
| 1433 | +#define CNS21XX_PCI_MEMORY_BASE 0xb0000000 |
| 1434 | +#define CNS21XX_OHCI_CONFIG_BASE 0xc0000000 |
| 1435 | +#define CNS21XX_OHCI_CTRL_BASE 0xc4000000 |
| 1436 | +#define CNS21XX_EHCI_CONFIG_BASE 0xc8000000 |
| 1437 | +#define CNS21XX_EHCI_CTRL_BASE 0xcc000000 |
| 1438 | +#define CNS21XX_USB_DEVICE_BASE 0xd0000000 |
| 1439 | +#define CNS21XX_INTC_BASE 0xfffff000 |
| 1440 | + |
| 1441 | +#define CNS21XX_FLASH_BANK0_BASE_VIRT 0xe0000000 |
| 1442 | +#define CNS21XX_FLASH_BANK1_BASE_VIRT 0xe2000000 |
| 1443 | +#define CNS21XX_FLASH_BANK2_BASE_VIRT 0xe4000000 |
| 1444 | +#define CNS21XX_FLASH_BANK3_BASE_VIRT 0xe8000000 |
| 1445 | +#define CNS21XX_IDE_DEVICE_BASE_VIRT 0xfff00000 |
| 1446 | +#define CNS21XX_GDMAC_BASE_VIRT 0xfff01000 |
| 1447 | +#define CNS21XX_NIC_BASE_VIRT 0xfff02000 |
| 1448 | +#define CNS21XX_SPI_BASE_VIRT 0xfff03000 |
| 1449 | +#define CNS21XX_PCM_BASE_VIRT 0xfff04000 |
| 1450 | +#define CNS21XX_I2C_BASE_VIRT 0xfff05000 |
| 1451 | +#define CNS21XX_I2S_BASE_VIRT 0xfff06000 |
| 1452 | +#define CNS21XX_DDRC_BASE_VIRT 0xfff07000 |
| 1453 | +#define CNS21XX_SMC_BASE_VIRT 0xfff08000 |
| 1454 | +#define CNS21XX_PCMCIA_CTRL_BASE_VIRT 0xfff09000 |
| 1455 | +#define CNS21XX_IDE_CTRL_BASE_VIRT 0xfff0A000 |
| 1456 | +#define CNS21XX_MISC_BASE_VIRT 0xfff0B000 |
| 1457 | +#define CNS21XX_CPM_BASE_VIRT 0xfff0C000 |
| 1458 | +#define CNS21XX_UART0_BASE_VIRT 0xfff0D000 |
| 1459 | +#define CNS21XX_UART1_BASE_VIRT 0xfff0E000 |
| 1460 | +#define CNS21XX_TIMER_BASE_VIRT 0xfff0F000 |
| 1461 | +#define CNS21XX_WDT_BASE_VIRT 0xfff10000 |
| 1462 | +#define CNS21XX_RTC_BASE_VIRT 0xfff11000 |
| 1463 | +#define CNS21XX_GPIOA_BASE_VIRT 0xfff12000 |
| 1464 | +#define CNS21XX_GPIOB_BASE_VIRT 0xfff13000 |
| 1465 | +#define CNS21XX_PCI_CFGDATA_BASE_VIRT 0xfff14000 |
| 1466 | +#define CNS21XX_PCI_CFGADDR_BASE_VIRT 0xfff15000 |
| 1467 | +#define CNS21XX_OHCI_CONFIG_BASE_VIRT 0xfff16000 |
| 1468 | +#define CNS21XX_OHCI_CTRL_BASE_VIRT 0xfff17000 |
| 1469 | +#define CNS21XX_EHCI_CONFIG_BASE_VIRT 0xfff18000 |
| 1470 | +#define CNS21XX_EHCI_CTRL_BASE_VIRT 0xfff19000 |
| 1471 | +#define CNS21XX_USB_DEVICE_BASE_VIRT 0xfff1a000 |
| 1472 | +#define CNS21XX_INTC_BASE_VIRT 0xfff1b000 |
| 1473 | + |
| 1474 | +#define CNS21XX_PHYS_IO CNS21XX_UART0_BASE |
| 1475 | +#define CNS21XX_IO_PAGE_OFFSET ((CNS21XX_UART0_BASE_VIRT) >> 18) & 0xfffc |
| 1476 | + |
| 1477 | +#endif /* _CNS21XX_H */ |
| 1478 | --- /dev/null |
| 1479 | +++ b/arch/arm/mach-cns21xx/core.c |
| 1480 | @@ -0,0 +1,77 @@ |
| 1481 | +/* |
| 1482 | + * Copyright (c) 2008 Cavium Networks |
| 1483 | + * Copyright (c) 2010 Gabor Juhos <juhosg@openwrt.org> |
| 1484 | + * |
| 1485 | + * This file is free software; you can redistribute it and/or modify |
| 1486 | + * it under the terms of the GNU General Public License, Version 2, as |
| 1487 | + * published by the Free Software Foundation. |
| 1488 | + */ |
| 1489 | + |
| 1490 | +#include <linux/kernel.h> |
| 1491 | + |
| 1492 | +#include <mach/hardware.h> |
| 1493 | +#include <mach/cns21xx.h> |
| 1494 | +#include <mach/cns21xx_powermgmt.h> |
| 1495 | + |
| 1496 | +static unsigned long cns21xx_pll_freq; |
| 1497 | +static unsigned long cns21xx_cpu_freq; |
| 1498 | +static unsigned long cns21xx_ahb_freq; |
| 1499 | +static unsigned long cns21xx_apb_freq; |
| 1500 | + |
| 1501 | +static void cns21xx_init_freq(void) |
| 1502 | +{ |
| 1503 | + static int freq_init_done; |
| 1504 | + unsigned int t; |
| 1505 | + |
| 1506 | + if (freq_init_done) |
| 1507 | + return; |
| 1508 | + |
| 1509 | + t = PWRMGT_SYSTEM_CLOCK_CONTROL_REG; |
| 1510 | + switch (t & 0x3) { |
| 1511 | + case 0x00: |
| 1512 | + cns21xx_pll_freq = 175000000; |
| 1513 | + break; |
| 1514 | + |
| 1515 | + case 0x01: |
| 1516 | + cns21xx_pll_freq = 200000000; |
| 1517 | + break; |
| 1518 | + |
| 1519 | + case 0x02: |
| 1520 | + cns21xx_pll_freq = 225000000; |
| 1521 | + break; |
| 1522 | + |
| 1523 | + case 0x03: |
| 1524 | + cns21xx_pll_freq = 250000000; |
| 1525 | + break; |
| 1526 | + } |
| 1527 | + |
| 1528 | + cns21xx_cpu_freq = cns21xx_pll_freq / (((t >> 2) & 0x3) + 1); |
| 1529 | + cns21xx_ahb_freq = cns21xx_cpu_freq / (((t >> 4) & 0x3) + 1); |
| 1530 | + cns21xx_apb_freq = cns21xx_ahb_freq / (((t >> 8) & 0x3) + 1); |
| 1531 | + |
| 1532 | + freq_init_done = 1; |
| 1533 | +} |
| 1534 | + |
| 1535 | +unsigned long cns21xx_get_pll_freq(void) |
| 1536 | +{ |
| 1537 | + cns21xx_init_freq(); |
| 1538 | + return cns21xx_pll_freq; |
| 1539 | +} |
| 1540 | + |
| 1541 | +unsigned long cns21xx_get_cpu_freq(void) |
| 1542 | +{ |
| 1543 | + cns21xx_init_freq(); |
| 1544 | + return cns21xx_cpu_freq; |
| 1545 | +} |
| 1546 | + |
| 1547 | +unsigned long cns21xx_get_ahb_freq(void) |
| 1548 | +{ |
| 1549 | + cns21xx_init_freq(); |
| 1550 | + return cns21xx_ahb_freq; |
| 1551 | +} |
| 1552 | + |
| 1553 | +unsigned long cns21xx_get_apb_freq(void) |
| 1554 | +{ |
| 1555 | + cns21xx_init_freq(); |
| 1556 | + return cns21xx_apb_freq; |
| 1557 | +} |
| 1558 | --- a/arch/arm/mm/Kconfig |
| 1559 | +++ b/arch/arm/mm/Kconfig |
| 1560 | @@ -799,6 +799,7 @@ config CACHE_XSC3L2 |
| 1561 | config ARM_L1_CACHE_SHIFT |
| 1562 | int |
| 1563 | default 6 if ARM_L1_CACHE_SHIFT_6 |
| 1564 | + default 4 if ARM_L1_CACHE_SHIFT_4 |
| 1565 | default 5 |
| 1566 | |
| 1567 | config ARM_DMA_MEM_BUFFERABLE |
| 1568 | --- a/arch/arm/mm/cache-fa.S |
| 1569 | +++ b/arch/arm/mm/cache-fa.S |
| 1570 | @@ -28,7 +28,7 @@ |
| 1571 | /* |
| 1572 | * The total size of the data cache. |
| 1573 | */ |
| 1574 | -#ifdef CONFIG_ARCH_GEMINI |
| 1575 | +#if (defined(CONFIG_ARCH_GEMINI) || defined(CONFIG_ARCH_CNS21XX)) |
| 1576 | #define CACHE_DSIZE 8192 |
| 1577 | #else |
| 1578 | #define CACHE_DSIZE 16384 |
| 1579 | --- /dev/null |
| 1580 | +++ b/arch/arm/mach-cns21xx/include/mach/cns21xx_misc.h |
| 1581 | @@ -0,0 +1,507 @@ |
| 1582 | +/******************************************************************************* |
| 1583 | + * |
| 1584 | + * Copyright (c) 2008 Cavium Networks |
| 1585 | + * |
| 1586 | + * This file is free software; you can redistribute it and/or modify |
| 1587 | + * it under the terms of the GNU General Public License, Version 2, as |
| 1588 | + * published by the Free Software Foundation. |
| 1589 | + * |
| 1590 | + * This file is distributed in the hope that it will be useful, |
| 1591 | + * but AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty of |
| 1592 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or |
| 1593 | + * NONINFRINGEMENT. See the GNU General Public License for more details. |
| 1594 | + * |
| 1595 | + * You should have received a copy of the GNU General Public License |
| 1596 | + * along with this file; if not, write to the Free Software |
| 1597 | + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA or |
| 1598 | + * visit http://www.gnu.org/licenses/. |
| 1599 | + * |
| 1600 | + * This file may also be available under a different license from Cavium. |
| 1601 | + * Contact Cavium Networks for more information |
| 1602 | + * |
| 1603 | + ******************************************************************************/ |
| 1604 | + |
| 1605 | +#ifndef _STAR_MISC_H_ |
| 1606 | +#define _STAR_MISC_H_ |
| 1607 | + |
| 1608 | +#include <mach/cns21xx.h> |
| 1609 | + |
| 1610 | +#define MISC_MEM_MAP_VALUE(reg_offset) \ |
| 1611 | + (*((u32 volatile *)(CNS21XX_MISC_BASE_VIRT + reg_offset))) |
| 1612 | + |
| 1613 | +/* |
| 1614 | + * define access macros |
| 1615 | + */ |
| 1616 | +#define MISC_MEMORY_REMAP_REG MISC_MEM_MAP_VALUE(0x00) |
| 1617 | +#define MISC_CHIP_CONFIG_REG MISC_MEM_MAP_VALUE(0x04) |
| 1618 | +#define MISC_DEBUG_PROBE_DATA_REG MISC_MEM_MAP_VALUE(0x08) |
| 1619 | +#define MISC_DEBUG_PROBE_SELECTION_REG MISC_MEM_MAP_VALUE(0x0C) |
| 1620 | +#define MISC_PCI_CONTROL_BROKEN_MASK_REG MISC_MEM_MAP_VALUE(0x10) |
| 1621 | +#define MISC_PCI_BROKEN_STATUS_REG MISC_MEM_MAP_VALUE(0x14) |
| 1622 | +#define MISC_PCI_DEVICE_VENDOR_ID_REG MISC_MEM_MAP_VALUE(0x18) |
| 1623 | +#define MISC_USB_HOST_PHY_CONTROL_TEST_REG MISC_MEM_MAP_VALUE(0x1C) |
| 1624 | +#define MISC_GPIOA_PIN_ENABLE_REG MISC_MEM_MAP_VALUE(0x20) |
| 1625 | +#define MISC_GPIOB_PIN_ENABLE_REG MISC_MEM_MAP_VALUE(0x24) |
| 1626 | +#define MISC_GPIOA_RESISTOR_CONFIG_REG MISC_MEM_MAP_VALUE(0x28) |
| 1627 | +#define MISC_GPIOA_DRIVE_STRENGTH_CONFIG_REG MISC_MEM_MAP_VALUE(0x2C) |
| 1628 | +#define MISC_FAST_ETHERNET_PHY_CONFIG_REG MISC_MEM_MAP_VALUE(0x30) |
| 1629 | +#define MISC_SOFTWARE_TEST_1_REG MISC_MEM_MAP_VALUE(0x38) |
| 1630 | +#define MISC_SOFTWARE_TEST_2_REG MISC_MEM_MAP_VALUE(0x3C) |
| 1631 | + |
| 1632 | +#define MISC_E_FUSE_0_REG MISC_MEM_MAP_VALUE(0x60) |
| 1633 | +#define MISC_E_FUSE_1_REG MISC_MEM_MAP_VALUE(0x64) |
| 1634 | + |
| 1635 | + |
| 1636 | +/* |
| 1637 | + * define constants macros |
| 1638 | + */ |
| 1639 | +#define MISC_PARALLEL_FLASH_BOOT 0 |
| 1640 | +#define MISC_SPI_SERIAL_FLASH_BOOT 1 |
| 1641 | + |
| 1642 | +#define MISC_LITTLE_ENDIAN 0 |
| 1643 | +#define MISC_BIG_ENDIAN 1 |
| 1644 | + |
| 1645 | +#define MISC_FARADAY_ICE 0 |
| 1646 | +#define MISC_ARM_ICE 1 |
| 1647 | + |
| 1648 | +#define MISC_EXT_INT29_PINS ((0x1 << 0)) |
| 1649 | +#define MISC_EXT_INT30_PINS ((0x1 << 1)) |
| 1650 | +#define MISC_EXT_INT31_PINS ((0x1 << 2)) |
| 1651 | +#define MISC_I2C_PINS ((0x1 << 13) | (0x1 << 14)) |
| 1652 | +#define MISC_I2S_PINS ((0x1 << 15) | (0x1 << 16) | (0x1 << 17)) |
| 1653 | +#define MISC_I2SSD_PINS (1 << 15) |
| 1654 | +#define MISC_I2SWS_PINS (1 << 16) |
| 1655 | +#define MISC_I2SCLK_PINS (1 << 17) |
| 1656 | +#define MISC_PCM_PINS ((0x1 << 18) | (0x1 << 19) | (0x1 << 20) | (0x1 << 21)) |
| 1657 | +#define MISC_PCMDR_PINS (1 << 18) |
| 1658 | +#define MISC_PCMDT_PINS (1 << 19) |
| 1659 | +#define MISC_PCMFS_PINS (1 << 20) |
| 1660 | +#define MISC_PCMCLK_PINS (1 << 21) |
| 1661 | +#define MISC_LED0_PINS ((0x1 << 22)) |
| 1662 | +#define MISC_LED1_PINS ((0x1 << 23)) |
| 1663 | +#define MISC_LED2_PINS ((0x1 << 24)) |
| 1664 | +#define MISC_LED012_PINS ((0x1 << 22) | (0x1 << 23) | (0x1 << 24)) |
| 1665 | +#define MISC_WDTIMER_RESET_PINS ((0x1 << 25)) |
| 1666 | +#define MISC_SPIDR_PINS (0x1 << 26) |
| 1667 | +#define MISC_SPICLK_PINS (0x1 << 27) |
| 1668 | +#define MISC_SPICSN0_PINS (0x1 << 28) |
| 1669 | +#define MISC_SPICSN1_PINS (0x1 << 29) |
| 1670 | +#define MISC_SPICSN2_PINS (0x1 << 30) |
| 1671 | +#define MISC_SPICSN3_PINS (0x1 << 31) |
| 1672 | +#define MISC_SPI_PINS ((0x1 << 26) | (0x1 << 27) | (0x1 << 28) | (0x1 << 29) | (0x1 << 30) | (0x1 << 31)) |
| 1673 | +#define MISC_MDC_MDIO_PINS ((0x1 << 0) | (0x1 << 1)) |
| 1674 | +#define MISC_NIC_COL_PINS ((0x1 << 2)) |
| 1675 | +#define MISC_IDE_PINS ((0xFF << 3)) |
| 1676 | +#define MISC_SRAM_BANK1_PINS ((0x1 << 11) | (0x1 << 14)) |
| 1677 | +#define MISC_SRAM_BANK2_PINS ((0x1 << 12) | (0x1 << 15)) |
| 1678 | +#define MISC_SRAM_BANK3_PINS ((0x1 << 13) | (0x1 << 16)) |
| 1679 | +#define MISC_PCMCIA_PINS ((0x1 << 17) | (0x1 << 18) | (0x1 << 19) | (0x1 << 20)) |
| 1680 | +#define MISC_UART1_PINS ((0x1 << 21) | (0x1 << 22)) |
| 1681 | +#define MISC_PCI_PINS (((u32)0x1FF << 23)) |
| 1682 | + |
| 1683 | +#define MISC_UART0_ACT0_Pin (0x1 << 2) |
| 1684 | +#define MISC_UART1_ACT1_Pin (0x1 << 3) |
| 1685 | + |
| 1686 | +#define MISC_GPIOA_PIN_0 0 |
| 1687 | +#define MISC_GPIOA_PIN_1 1 |
| 1688 | +#define MISC_GPIOA_PIN_2 2 |
| 1689 | +#define MISC_GPIOA_PIN_3 3 |
| 1690 | +#define MISC_GPIOA_PIN_4 4 |
| 1691 | +#define MISC_GPIOA_PIN_5 5 |
| 1692 | +#define MISC_GPIOA_PIN_6 6 |
| 1693 | +#define MISC_GPIOA_PIN_7 7 |
| 1694 | +#define MISC_GPIOA_PIN_8 8 |
| 1695 | +#define MISC_GPIOA_PIN_9 9 |
| 1696 | +#define MISC_GPIOA_PIN_10 10 |
| 1697 | + |
| 1698 | +#define MISC_GPIOA_75K_RESISTOR_PULL_DOWN 1 |
| 1699 | +#define MISC_GPIOA_75K_RESISTOR_PULL_UP 2 |
| 1700 | +#define MISC_GPIOA_75K_RESISTOR_PULL_KEEPER 3 |
| 1701 | + |
| 1702 | +#define MISC_GPIOA_DRIVE_STRENGTH_4MA 0 |
| 1703 | +#define MISC_GPIOA_DRIVE_STRENGTH_8MA 1 |
| 1704 | + |
| 1705 | + |
| 1706 | +/* |
| 1707 | + * macro declarations |
| 1708 | + */ |
| 1709 | +#define HAL_MISC_ENABLE_SPI_SERIAL_FLASH_BANK_ACCESS() \ |
| 1710 | +{ \ |
| 1711 | + (MISC_CHIP_CONFIG_REG) |= (0x1 << 4); \ |
| 1712 | +} |
| 1713 | + |
| 1714 | +#define HAL_MISC_DISABLE_SPI_SERIAL_FLASH_BANK_ACCESS() \ |
| 1715 | +{ \ |
| 1716 | + (MISC_CHIP_CONFIG_REG) &= ~(0x1 << 4); \ |
| 1717 | +} |
| 1718 | + |
| 1719 | + |
| 1720 | +/* |
| 1721 | + * Macro defines for GPIOA and GPIOB Pin Enable Register |
| 1722 | + */ |
| 1723 | +#define HAL_MISC_ENABLE_EXT_INT29_PINS() \ |
| 1724 | +{ \ |
| 1725 | + (MISC_GPIOA_PIN_ENABLE_REG) |= (MISC_EXT_INT29_PINS); \ |
| 1726 | +} |
| 1727 | + |
| 1728 | +#define HAL_MISC_DISABLE_EXT_INT29_PINS() \ |
| 1729 | +{ \ |
| 1730 | + (MISC_GPIOA_PIN_ENABLE_REG) &= ~(MISC_EXT_INT29_PINS); \ |
| 1731 | +} |
| 1732 | + |
| 1733 | +#define HAL_MISC_ENABLE_EXT_INT30_PINS() \ |
| 1734 | +{ \ |
| 1735 | + (MISC_GPIOA_PIN_ENABLE_REG) |= (MISC_EXT_INT30_PINS); \ |
| 1736 | +} |
| 1737 | + |
| 1738 | +#define HAL_MISC_DISABLE_EXT_INT30_PINS() \ |
| 1739 | +{ \ |
| 1740 | + (MISC_GPIOA_PIN_ENABLE_REG) &= ~(MISC_EXT_INT30_PINS); \ |
| 1741 | +} |
| 1742 | + |
| 1743 | +#define HAL_MISC_ENABLE_I2C_PINS() \ |
| 1744 | +{ \ |
| 1745 | + (MISC_GPIOA_PIN_ENABLE_REG) |= (MISC_I2C_PINS); \ |
| 1746 | +} |
| 1747 | + |
| 1748 | +#define HAL_MISC_DISABLE_I2C_PINS() \ |
| 1749 | +{ \ |
| 1750 | + (MISC_GPIOA_PIN_ENABLE_REG) &= ~(MISC_I2C_PINS); \ |
| 1751 | +} |
| 1752 | + |
| 1753 | +#define HAL_MISC_ENABLE_I2S_PINS() \ |
| 1754 | +{ \ |
| 1755 | + (MISC_GPIOA_PIN_ENABLE_REG) |= (MISC_I2S_PINS); \ |
| 1756 | +} |
| 1757 | + |
| 1758 | +#define HAL_MISC_DISABLE_I2S_PINS() \ |
| 1759 | +{ \ |
| 1760 | + (MISC_GPIOA_PIN_ENABLE_REG) &= ~(MISC_I2S_PINS); \ |
| 1761 | +} |
| 1762 | + |
| 1763 | +#define HAL_MISC_DISABLE_I2SSD_PINS() \ |
| 1764 | +{ \ |
| 1765 | + (MISC_GPIOA_PIN_ENABLE_REG) &= ~(MISC_I2SSD_PINS); \ |
| 1766 | +} |
| 1767 | + |
| 1768 | +#define HAL_MISC_DISABLE_I2SWS_PINS() \ |
| 1769 | +{ \ |
| 1770 | + (MISC_GPIOA_PIN_ENABLE_REG) &= ~(MISC_I2SWS_PINS); \ |
| 1771 | +} |
| 1772 | + |
| 1773 | +#define HAL_MISC_DISABLE_I2SCLK_PINS() \ |
| 1774 | +{ \ |
| 1775 | + (MISC_GPIOA_PIN_ENABLE_REG) &= ~(MISC_I2SCLK_PINS); \ |
| 1776 | +} |
| 1777 | + |
| 1778 | +#define HAL_MISC_ENABLE_PCM_PINS() \ |
| 1779 | +{ \ |
| 1780 | + (MISC_GPIOA_PIN_ENABLE_REG) |= (MISC_PCM_PINS); \ |
| 1781 | +} |
| 1782 | + |
| 1783 | +#define HAL_MISC_DISABLE_PCM_PINS() \ |
| 1784 | +{ \ |
| 1785 | + (MISC_GPIOA_PIN_ENABLE_REG) &= ~(MISC_PCM_PINS); \ |
| 1786 | +} |
| 1787 | + |
| 1788 | +#define HAL_MISC_DISABLE_PCMDR_PINS() \ |
| 1789 | +{ \ |
| 1790 | + (MISC_GPIOA_PIN_ENABLE_REG) &= ~(MISC_PCMDR_PINS); \ |
| 1791 | +} |
| 1792 | + |
| 1793 | +#define HAL_MISC_DISABLE_PCMDT_PINS() \ |
| 1794 | +{ \ |
| 1795 | + (MISC_GPIOA_PIN_ENABLE_REG) &= ~(MISC_PCMDT_PINS); \ |
| 1796 | +} |
| 1797 | + |
| 1798 | +#define HAL_MISC_DISABLE_PCMFS_PINS() \ |
| 1799 | +{ \ |
| 1800 | + (MISC_GPIOA_PIN_ENABLE_REG) &= ~(MISC_PCMFS_PINS); \ |
| 1801 | +} |
| 1802 | + |
| 1803 | +#define HAL_MISC_DISABLE_PCMCLK_PINS() \ |
| 1804 | +{ \ |
| 1805 | + (MISC_GPIOA_PIN_ENABLE_REG) &= ~(MISC_PCMCLK_PINS); \ |
| 1806 | +} |
| 1807 | + |
| 1808 | +#define HAL_MISC_ENABLE_LED0_PINS() \ |
| 1809 | +{ \ |
| 1810 | + (MISC_GPIOA_PIN_ENABLE_REG) |= (MISC_LED0_PINS); \ |
| 1811 | +} |
| 1812 | + |
| 1813 | +#define HAL_MISC_DISABLE_LED0_PINS() \ |
| 1814 | +{ \ |
| 1815 | + (MISC_GPIOA_PIN_ENABLE_REG) &= ~(MISC_LED0_PINS); \ |
| 1816 | +} |
| 1817 | + |
| 1818 | +#define HAL_MISC_ENABLE_LED1_PINS() \ |
| 1819 | +{ \ |
| 1820 | + (MISC_GPIOA_PIN_ENABLE_REG) |= (MISC_LED1_PINS); \ |
| 1821 | +} |
| 1822 | + |
| 1823 | +#define HAL_MISC_DISABLE_LED1_PINS() \ |
| 1824 | +{ \ |
| 1825 | + (MISC_GPIOA_PIN_ENABLE_REG) &= ~(MISC_LED1_PINS); \ |
| 1826 | +} |
| 1827 | + |
| 1828 | +#define HAL_MISC_ENABLE_LED2_PINS() \ |
| 1829 | +{ \ |
| 1830 | + (MISC_GPIOA_PIN_ENABLE_REG) |= (MISC_LED2_PINS); \ |
| 1831 | +} |
| 1832 | + |
| 1833 | +#define HAL_MISC_DISABLE_LED2_PINS() \ |
| 1834 | +{ \ |
| 1835 | + (MISC_GPIOA_PIN_ENABLE_REG) &= ~(MISC_LED2_PINS); \ |
| 1836 | +} |
| 1837 | + |
| 1838 | +#define HAL_MISC_ENABLE_LED012_PINS() \ |
| 1839 | +{ \ |
| 1840 | + (MISC_GPIOA_PIN_ENABLE_REG) |= (MISC_LED012_PINS); \ |
| 1841 | +} |
| 1842 | + |
| 1843 | +#define HAL_MISC_DISABLE_LED012_PINS() \ |
| 1844 | +{ \ |
| 1845 | + (MISC_GPIOA_PIN_ENABLE_REG) &= ~(MISC_LED012_PINS); \ |
| 1846 | +} |
| 1847 | + |
| 1848 | +#define HAL_MISC_ENABLE_WDTIMER_RESET_PINS() \ |
| 1849 | +{ \ |
| 1850 | + (MISC_GPIOA_PIN_ENABLE_REG) |= (MISC_WDTIMER_RESET_PINS); \ |
| 1851 | +} |
| 1852 | + |
| 1853 | +#define HAL_MISC_DISABLE_WDTIMER_RESET_PINS() \ |
| 1854 | +{ \ |
| 1855 | + (MISC_GPIOA_PIN_ENABLE_REG) &= ~(MISC_WDTIMER_RESET_PINS); \ |
| 1856 | +} |
| 1857 | + |
| 1858 | +#define HAL_MISC_ENABLE_SPI_PINS() \ |
| 1859 | +{ \ |
| 1860 | + (MISC_GPIOA_PIN_ENABLE_REG) |= (MISC_SPI_PINS); \ |
| 1861 | +} |
| 1862 | + |
| 1863 | +#define HAL_MISC_ENABLE_SPIDR_PINS() \ |
| 1864 | +{ \ |
| 1865 | + (MISC_GPIOA_PIN_ENABLE_REG) |= (MISC_SPIDR_PINS); \ |
| 1866 | +} |
| 1867 | + |
| 1868 | +#define HAL_MISC_ENABLE_SPICLK_PINS() \ |
| 1869 | +{ \ |
| 1870 | + (MISC_GPIOA_PIN_ENABLE_REG) |= (MISC_SPICLK_PINS); \ |
| 1871 | +} |
| 1872 | + |
| 1873 | +#define HAL_MISC_ENABLE_SPICSN0_PINS() \ |
| 1874 | +{ \ |
| 1875 | + (MISC_GPIOA_PIN_ENABLE_REG) |= (MISC_SPICSN0_PINS); \ |
| 1876 | +} |
| 1877 | + |
| 1878 | +#define HAL_MISC_ENABLE_SPICSN0_PINS() \ |
| 1879 | +{ \ |
| 1880 | + (MISC_GPIOA_PIN_ENABLE_REG) |= (MISC_SPICSN0_PINS); \ |
| 1881 | +} |
| 1882 | + |
| 1883 | +#define HAL_MISC_ENABLE_SPICSN1_PINS() \ |
| 1884 | +{ \ |
| 1885 | + (MISC_GPIOA_PIN_ENABLE_REG) |= (MISC_SPICSN1_PINS); \ |
| 1886 | +} |
| 1887 | + |
| 1888 | +#define HAL_MISC_ENABLE_SPICSN2_PINS() \ |
| 1889 | +{ \ |
| 1890 | + (MISC_GPIOA_PIN_ENABLE_REG) |= (MISC_SPICSN2_PINS); \ |
| 1891 | +} |
| 1892 | + |
| 1893 | +#define HAL_MISC_ENABLE_SPICSN3_PINS() \ |
| 1894 | +{ \ |
| 1895 | + (MISC_GPIOA_PIN_ENABLE_REG) |= (MISC_SPICSN3_PINS); \ |
| 1896 | +} |
| 1897 | + |
| 1898 | +#define HAL_MISC_DISABLE_SPI_PINS() \ |
| 1899 | +{ \ |
| 1900 | + (MISC_GPIOA_PIN_ENABLE_REG) &= ~(MISC_SPI_PINS); \ |
| 1901 | +} |
| 1902 | + |
| 1903 | +#define HAL_MISC_DISABLE_SPIDR_PINS() \ |
| 1904 | +{ \ |
| 1905 | + (MISC_GPIOA_PIN_ENABLE_REG) &= ~(MISC_SPIDR_PINS); \ |
| 1906 | +} |
| 1907 | + |
| 1908 | +#define HAL_MISC_DISABLE_SPICLK_PINS() \ |
| 1909 | +{ \ |
| 1910 | + (MISC_GPIOA_PIN_ENABLE_REG) &= ~(MISC_SPICLK_PINS); \ |
| 1911 | +} |
| 1912 | + |
| 1913 | +#define HAL_MISC_DISABLE_SPICSN0_PINS() \ |
| 1914 | +{ \ |
| 1915 | + (MISC_GPIOA_PIN_ENABLE_REG) &= ~(MISC_SPICSN0_PINS); \ |
| 1916 | +} |
| 1917 | + |
| 1918 | +#define HAL_MISC_DISABLE_SPICSN1_PINS() \ |
| 1919 | +{ \ |
| 1920 | + (MISC_GPIOA_PIN_ENABLE_REG) &= ~(MISC_SPICSN1_PINS); \ |
| 1921 | +} |
| 1922 | + |
| 1923 | +#define HAL_MISC_DISABLE_SPICSN2_PINS() \ |
| 1924 | +{ \ |
| 1925 | + (MISC_GPIOA_PIN_ENABLE_REG) &= ~(MISC_SPICSN2_PINS); \ |
| 1926 | +} |
| 1927 | + |
| 1928 | +#define HAL_MISC_DISABLE_SPICSN3_PINS() \ |
| 1929 | +{ \ |
| 1930 | + (MISC_GPIOA_PIN_ENABLE_REG) &= ~(MISC_SPICSN3_PINS); \ |
| 1931 | +} |
| 1932 | + |
| 1933 | +#define HAL_MISC_ENABLE_UART0_ACT0_PIN() \ |
| 1934 | +{ \ |
| 1935 | + (MISC_GPIOA_PIN_ENABLE_REG) |= (MISC_UART0_ACT0_Pin); \ |
| 1936 | +} |
| 1937 | + |
| 1938 | +#define HAL_MISC_DISABLE_UART0_ACT0_PIN() \ |
| 1939 | +{ \ |
| 1940 | + (MISC_GPIOA_PIN_ENABLE_REG) &= ~(MISC_UART0_ACT0_Pin); \ |
| 1941 | +} |
| 1942 | + |
| 1943 | +#define HAL_MISC_ENABLE_UART1_ACT1_PIN() \ |
| 1944 | +{ \ |
| 1945 | + (MISC_GPIOA_PIN_ENABLE_REG) |= (MISC_UART1_ACT1_Pin); \ |
| 1946 | +} |
| 1947 | + |
| 1948 | +#define HAL_MISC_DISABLE_UART1_ACT1_PIN() \ |
| 1949 | +{ \ |
| 1950 | + (MISC_GPIOA_PIN_ENABLE_REG) &= ~(MISC_UART1_ACT1_Pin); \ |
| 1951 | +} |
| 1952 | + |
| 1953 | +#define HAL_MISC_ENABLE_MDC_MDIO_PINS() \ |
| 1954 | +{ \ |
| 1955 | + (MISC_GPIOB_PIN_ENABLE_REG) |= (MISC_MDC_MDIO_PINS); \ |
| 1956 | +} |
| 1957 | + |
| 1958 | +#define HAL_MISC_DISABLE_MDC_MDIO_PINS() \ |
| 1959 | +{ \ |
| 1960 | + (MISC_GPIOB_PIN_ENABLE_REG) &= ~(MISC_MDC_MDIO_PINS); \ |
| 1961 | +} |
| 1962 | + |
| 1963 | +#define HAL_MISC_ENABLE_NIC_COL_PINS() \ |
| 1964 | +{ \ |
| 1965 | + (MISC_GPIOB_PIN_ENABLE_REG) |= (MISC_NIC_COL_PINS); \ |
| 1966 | +} |
| 1967 | + |
| 1968 | +#define HAL_MISC_DISABLE_NIC_COL_PINS() \ |
| 1969 | +{ \ |
| 1970 | + (MISC_GPIOB_PIN_ENABLE_REG) &= ~(MISC_NIC_COL_PINS); \ |
| 1971 | +} |
| 1972 | + |
| 1973 | +#define HAL_MISC_ENABLE_IDE_PINS() \ |
| 1974 | +{ \ |
| 1975 | + (MISC_GPIOB_PIN_ENABLE_REG) |= (MISC_IDE_PINS); \ |
| 1976 | +} |
| 1977 | + |
| 1978 | +#define HAL_MISC_DISABLE_IDE_PINS() \ |
| 1979 | +{ \ |
| 1980 | + (MISC_GPIOB_PIN_ENABLE_REG) &= ~(MISC_IDE_PINS); \ |
| 1981 | +} |
| 1982 | + |
| 1983 | +#define HAL_MISC_ENABLE_SRAM_BANK1_PINS() \ |
| 1984 | +{ \ |
| 1985 | + (MISC_GPIOB_PIN_ENABLE_REG) |= (MISC_SRAM_BANK1_PINS); \ |
| 1986 | +} |
| 1987 | + |
| 1988 | +#define HAL_MISC_DISABLE_SRAM_BANK1_PINS() \ |
| 1989 | +{ \ |
| 1990 | + (MISC_GPIOB_PIN_ENABLE_REG) &= ~(MISC_SRAM_BANK1_PINS); \ |
| 1991 | +} |
| 1992 | + |
| 1993 | +#define HAL_MISC_ENABLE_SRAM_BANK2_PINS() \ |
| 1994 | +{ \ |
| 1995 | + (MISC_GPIOB_PIN_ENABLE_REG) |= (MISC_SRAM_BANK2_PINS); \ |
| 1996 | +} |
| 1997 | + |
| 1998 | +#define HAL_MISC_DISABLE_SRAM_BANK2_PINS() \ |
| 1999 | +{ \ |
| 2000 | + (MISC_GPIOB_PIN_ENABLE_REG) &= ~(MISC_SRAM_BANK2_PINS); \ |
| 2001 | +} |
| 2002 | + |
| 2003 | +#define HAL_MISC_ENABLE_SRAM_BANK3_PINS() \ |
| 2004 | +{ \ |
| 2005 | + (MISC_GPIOB_PIN_ENABLE_REG) |= (MISC_SRAM_BANK3_PINS); \ |
| 2006 | +} |
| 2007 | + |
| 2008 | +#define HAL_MISC_DISABLE_SRAM_BANK3_PINS() \ |
| 2009 | +{ \ |
| 2010 | + (MISC_GPIOB_PIN_ENABLE_REG) &= ~(MISC_SRAM_BANK3_PINS); \ |
| 2011 | +} |
| 2012 | + |
| 2013 | +#define HAL_MISC_ENABLE_PCMCIA_PINS() \ |
| 2014 | +{ \ |
| 2015 | + (MISC_GPIOB_PIN_ENABLE_REG) |= (MISC_PCMCIA_PINS); \ |
| 2016 | +} |
| 2017 | + |
| 2018 | +#define HAL_MISC_DISABLE_PCMCIA_PINS() \ |
| 2019 | +{ \ |
| 2020 | + (MISC_GPIOB_PIN_ENABLE_REG) &= ~(MISC_PCMCIA_PINS); \ |
| 2021 | +} |
| 2022 | + |
| 2023 | +#define HAL_MISC_ENABLE_UART1_PINS() \ |
| 2024 | +{ \ |
| 2025 | + (MISC_GPIOB_PIN_ENABLE_REG) |= (MISC_UART1_PINS); \ |
| 2026 | +} |
| 2027 | + |
| 2028 | +#define HAL_MISC_DISABLE_UART1_PINS() \ |
| 2029 | +{ \ |
| 2030 | + (MISC_GPIOB_PIN_ENABLE_REG) &= ~(MISC_UART1_PINS); \ |
| 2031 | +} |
| 2032 | + |
| 2033 | +#define HAL_MISC_ENABLE_PCI_PINS() \ |
| 2034 | +{ \ |
| 2035 | + (MISC_GPIOB_PIN_ENABLE_REG) |= (MISC_PCI_PINS); \ |
| 2036 | +} |
| 2037 | + |
| 2038 | +#define HAL_MISC_DISABLE_PCI_PINS() \ |
| 2039 | +{ \ |
| 2040 | + (MISC_GPIOB_PIN_ENABLE_REG) &= ~(MISC_PCI_PINS); \ |
| 2041 | +} |
| 2042 | + |
| 2043 | +#define HAL_MISC_ENABLE_ALL_SHARED_GPIO_PINS() \ |
| 2044 | +{ \ |
| 2045 | + (MISC_GPIOA_PIN_ENABLE_REG) = (0x0); \ |
| 2046 | + (MISC_GPIOB_PIN_ENABLE_REG) = (0x0); \ |
| 2047 | +} |
| 2048 | + |
| 2049 | +#define HAL_MISC_DISABLE_ALL_SHARED_GPIO_PINS() \ |
| 2050 | +{ \ |
| 2051 | + (MISC_GPIOA_PIN_ENABLE_REG) = (0xFFFFFFFF); \ |
| 2052 | + (MISC_GPIOB_PIN_ENABLE_REG) = (0xFFFFFFFF); \ |
| 2053 | +} |
| 2054 | + |
| 2055 | +#define HAL_MISC_CONFIGURE_GPIOA_RESISTOR(pin_index, value) \ |
| 2056 | +{ \ |
| 2057 | + (MISC_GPIOA_RESISTOR_CONFIG_REG) &= ~(0x3 << (2 * pin_index)); \ |
| 2058 | + (MISC_GPIOA_RESISTOR_CONFIG_REG) |= ((value & 0x3) << (2 * pin_index)); \ |
| 2059 | +} |
| 2060 | + |
| 2061 | +#define HAL_MISC_CONFIGURE_GPIOA_DRIVE_STRENGTH(pin_index, value) \ |
| 2062 | +{ \ |
| 2063 | + (MISC_GPIOA_DRIVE_STRENGTH_CONFIG_REG) &= ~(0x1 << pin_index); \ |
| 2064 | + (MISC_GPIOA_DRIVE_STRENGTH_CONFIG_REG) |= (value << pin_index); \ |
| 2065 | +} |
| 2066 | + |
| 2067 | +#define HAL_MISC_SELECT_FAST_ETHERNET_PHY_LED_MODE0() \ |
| 2068 | +{ \ |
| 2069 | + (MISC_FAST_ETHERNET_PHY_CONFIG_REG) = (0x0); \ |
| 2070 | +} |
| 2071 | + |
| 2072 | +#define HAL_MISC_SELECT_FAST_ETHERNET_PHY_LED_MODE1() \ |
| 2073 | +{ \ |
| 2074 | + (MISC_FAST_ETHERNET_PHY_CONFIG_REG) = (0x1); \ |
| 2075 | +} |
| 2076 | + |
| 2077 | +#define HAL_MISC_SELECT_FAST_ETHERNET_PHY_LED_MODE2() \ |
| 2078 | +{ \ |
| 2079 | + (MISC_FAST_ETHERNET_PHY_CONFIG_REG) = (0x2); \ |
| 2080 | +} |
| 2081 | + |
| 2082 | +#define HAL_MISC_SELECT_FAST_ETHERNET_PHY_LED_MODE3() \ |
| 2083 | +{ \ |
| 2084 | + (MISC_FAST_ETHERNET_PHY_CONFIG_REG) = (0x3); \ |
| 2085 | +} |
| 2086 | + |
| 2087 | + |
| 2088 | +#endif // end of #ifndef _STAR_MISC_H_ |
| 2089 | |