3 @@ -179,6 +179,11 @@ config ARM_L1_CACHE_SHIFT_6
5 Setting ARM L1 cache line size to 64 Bytes.
7 +config ARM_L1_CACHE_SHIFT_4
10 + Setting ARM L1 cache line size to 16 bytes.
14 default 0xffff0000 if MMU || CPU_HIGH_VECTOR
15 @@ -286,6 +291,15 @@ config ARCH_BCMRING
17 Support for Broadcom's BCMRing platform.
20 + bool "Cavium Networks CNS21xx family"
24 + select ARM_L1_CACHE_SHIFT_4
26 + Support for Cavium Networks CNS21xx family.
29 bool "Cirrus Logic CLPS711x/EP721x-based"
31 @@ -845,6 +859,8 @@ source "arch/arm/mach-davinci/Kconfig"
33 source "arch/arm/mach-dove/Kconfig"
35 +source "arch/arm/mach-cns21xx/Kconfig"
37 source "arch/arm/mach-ep93xx/Kconfig"
39 source "arch/arm/mach-footbridge/Kconfig"
41 +++ b/arch/arm/mach-cns21xx/Kconfig
45 +menu "Cavium Networks CNS21xx based machines"
50 +++ b/arch/arm/mach-cns21xx/Makefile
53 +# Makefile for the linux kernel.
58 +obj-y := core.o irq.o mm.o time.o
60 +# machine specific files
63 +++ b/arch/arm/mach-cns21xx/Makefile.boot
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
79 +++ b/arch/arm/mach-cns21xx/common.h
82 + * Copyright (c) 2008 Cavium Networks
83 + * Copyright (c) 2010 Gabor Juhos <juhosg@openwrt.org>
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.
90 +#ifndef _MACH_CNS21XX_COMMON_H
91 +#define _MACH_CNS21XX_COMMON_H
93 +void __init cns21xx_map_io(void);
94 +void __init cns21xx_init_irq(void);
96 +extern struct sys_timer cns21xx_timer;
98 +#endif /* _MACH_CNS21XX_COMMON_H */
100 +++ b/arch/arm/mach-cns21xx/mm.c
103 + * Copyright (c) 2008 Cavium Networks
104 + * Copyright (c) 2010 Gabor Juhos <juhosg@openwrt.org>
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.
111 +#include <linux/mm.h>
112 +#include <linux/init.h>
114 +#include <asm/mach/map.h>
116 +#include <mach/hardware.h>
117 +#include <mach/cns21xx.h>
122 + * Standard IO mapping
124 +static struct map_desc cns21xx_io_desc[] __initdata = {
126 + .virtual = CNS21XX_FLASH_BANK0_BASE_VIRT,
127 + .pfn = __phys_to_pfn(CNS21XX_FLASH_BANK0_BASE),
131 + .virtual = CNS21XX_IDE_DEVICE_BASE_VIRT,
132 + .pfn = __phys_to_pfn(CNS21XX_IDE_DEVICE_BASE),
136 + .virtual = CNS21XX_GDMAC_BASE_VIRT,
137 + .pfn = __phys_to_pfn(CNS21XX_GDMAC_BASE),
141 + .virtual = CNS21XX_NIC_BASE_VIRT,
142 + .pfn = __phys_to_pfn(CNS21XX_NIC_BASE),
146 + .virtual = CNS21XX_SPI_BASE_VIRT,
147 + .pfn = __phys_to_pfn(CNS21XX_SPI_BASE),
151 + .virtual = CNS21XX_PCM_BASE_VIRT,
152 + .pfn = __phys_to_pfn(CNS21XX_PCM_BASE),
156 + .virtual = CNS21XX_I2C_BASE_VIRT,
157 + .pfn = __phys_to_pfn(CNS21XX_I2C_BASE),
161 + .virtual = CNS21XX_I2S_BASE_VIRT,
162 + .pfn = __phys_to_pfn(CNS21XX_I2S_BASE),
166 + .virtual = CNS21XX_DDRC_BASE_VIRT,
167 + .pfn = __phys_to_pfn(CNS21XX_DDRC_BASE),
171 + .virtual = CNS21XX_SMC_BASE_VIRT,
172 + .pfn = __phys_to_pfn(CNS21XX_SMC_BASE),
176 + .virtual = CNS21XX_IDE_CTRL_BASE_VIRT,
177 + .pfn = __phys_to_pfn(CNS21XX_IDE_CTRL_BASE),
181 + .virtual = CNS21XX_MISC_BASE_VIRT,
182 + .pfn = __phys_to_pfn(CNS21XX_MISC_BASE),
186 + .virtual = CNS21XX_CPM_BASE_VIRT,
187 + .pfn = __phys_to_pfn(CNS21XX_CPM_BASE),
191 + .virtual = CNS21XX_UART0_BASE_VIRT,
192 + .pfn = __phys_to_pfn(CNS21XX_UART0_BASE),
196 + .virtual = CNS21XX_UART1_BASE_VIRT,
197 + .pfn = __phys_to_pfn(CNS21XX_UART1_BASE),
201 + .virtual = CNS21XX_TIMER_BASE_VIRT,
202 + .pfn = __phys_to_pfn(CNS21XX_TIMER_BASE),
206 + .virtual = CNS21XX_WDT_BASE_VIRT,
207 + .pfn = __phys_to_pfn(CNS21XX_WDT_BASE),
211 + .virtual = CNS21XX_RTC_BASE_VIRT,
212 + .pfn = __phys_to_pfn(CNS21XX_RTC_BASE),
216 + .virtual = CNS21XX_GPIOA_BASE_VIRT,
217 + .pfn = __phys_to_pfn(CNS21XX_GPIOA_BASE),
221 + .virtual = CNS21XX_GPIOB_BASE_VIRT,
222 + .pfn = __phys_to_pfn(CNS21XX_GPIOB_BASE),
226 + .virtual = CNS21XX_PCI_CFGDATA_BASE_VIRT,
227 + .pfn = __phys_to_pfn(CNS21XX_PCI_CFGDATA_BASE),
231 + .virtual = CNS21XX_PCI_CFGADDR_BASE_VIRT,
232 + .pfn = __phys_to_pfn(CNS21XX_PCI_CFGADDR_BASE),
236 + .virtual = CNS21XX_OHCI_CONFIG_BASE_VIRT,
237 + .pfn = __phys_to_pfn(CNS21XX_OHCI_CONFIG_BASE),
241 + .virtual = CNS21XX_OHCI_CTRL_BASE_VIRT,
242 + .pfn = __phys_to_pfn(CNS21XX_OHCI_CTRL_BASE),
246 + .virtual = CNS21XX_EHCI_CONFIG_BASE_VIRT,
247 + .pfn = __phys_to_pfn(CNS21XX_EHCI_CONFIG_BASE),
251 + .virtual = CNS21XX_EHCI_CTRL_BASE_VIRT,
252 + .pfn = __phys_to_pfn(CNS21XX_EHCI_CTRL_BASE),
256 + .virtual = CNS21XX_USB_DEVICE_BASE_VIRT,
257 + .pfn = __phys_to_pfn(CNS21XX_USB_DEVICE_BASE),
261 + .virtual = CNS21XX_INTC_BASE_VIRT,
262 + .pfn = __phys_to_pfn(CNS21XX_INTC_BASE),
268 +void __init cns21xx_map_io(void)
270 + iotable_init(cns21xx_io_desc, ARRAY_SIZE(cns21xx_io_desc));
273 +++ b/arch/arm/mach-cns21xx/include/mach/hardware.h
276 + * Copyright (c) 2008 Cavium Networks
277 + * Copyright (c) 2010 Gabor Juhos <juhosg@openwrt.org>
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.
284 +#ifndef _CNS21XX_HARDWARE_H
285 +#define _CNS21XX_HARDWARE_H
287 +#define PCIBIOS_MIN_IO 0x00000000
288 +#define PCIBIOS_MIN_MEM 0x00000000
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);
297 +#endif /* _CNS21XX_HARDWARE_H */
299 +++ b/arch/arm/mach-cns21xx/include/mach/vmalloc.h
302 + * Copyright (c) 2008 Cavium Networks
303 + * Copyright (c) 2010 Gabor Juhos <juhosg@openwrt.org>
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.
310 +#ifndef _CNS21XX_VMALLOC_H
311 +#define _CNS21XX_VMALLOC_H
313 +#define VMALLOC_END (PAGE_OFFSET + 0x10000000)
315 +#endif /* _CNS21XX_VMALLOC_H */
317 +++ b/arch/arm/mach-cns21xx/include/mach/debug-macro.S
320 + * Copyright (c) 2008 Cavium Networks
321 + * Copyright (c) 2010 Gabor Juhos <juhosg@openwrt.org>
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.
328 +#include <mach/cns21xx.h>
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
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)
344 +#define UART_SHIFT 2
345 +#include <asm/hardware/debug-8250.S>
347 +++ b/arch/arm/mach-cns21xx/include/mach/entry-macro.S
350 + * Copyright (c) 2008 Cavium Networks
351 + * Copyright (c) 2010 Gabor Juhos <juhosg@openwrt.org>
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.
358 +#include <mach/cns21xx.h>
359 +#include <mach/irqs.h>
361 +#define INTC_IRQ_STATUS 0x1c
366 + .macro get_irqnr_preamble, base, tmp
369 + .macro arch_ret_to_user, tmp1, tmp2
372 + .macro get_irqnr_and_base, irqnr, irqstat, base, tmp
373 + ldr \base, =(CNS21XX_INTC_BASE_VIRT + INTC_IRQ_STATUS)
374 + ldr \irqstat, [\base]
379 + add \irqnr, \irqnr, #1
380 + mov \irqstat, \irqstat, lsr #1
381 + cmp \irqnr, #CNS21XX_NR_INTC_IRQS
386 + .macro irq_prio_table
389 +++ b/arch/arm/mach-cns21xx/include/mach/io.h
392 + * Copyright (c) 2008 Cavium Networks
393 + * Copyright (c) 2010 Gabor Juhos <juhosg@openwrt.org>
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.
400 +#ifndef _CNS21XX_IO_H
401 +#define _CNS21XX_IO_H
403 +#define IO_SPACE_LIMIT 0xffffffff
405 +#define __io(p) __typesafe_io(p)
406 +#define __mem_pci(a) (a)
408 +#endif /* _CNS21XX_IO_H */
410 +++ b/arch/arm/mach-cns21xx/include/mach/irqs.h
413 + * Copyright (c) 2008 Cavium Networks
414 + * Copyright (c) 2010 Gabor Juhos <juhosg@openwrt.org>
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.
421 +#ifndef _CNS21XX_IRQS_H
422 +#define _CNS21XX_IRQS_H
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
457 +#define CNS21XX_GPIO_IRQ_BASE 32
459 +#define CNS21XX_NR_INTC_IRQS 32
460 +#define CNS21XX_NR_GPIO_IRQS 64
464 +#endif /* _CNS21XX_IRQS_H */
466 +++ b/arch/arm/mach-cns21xx/include/mach/timex.h
469 + * Copyright (c) 2008 Cavium Networks
470 + * Copyright (c) 2010 Gabor Juhos <juhosg@openwrt.org>
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.
477 +#ifndef _CNS21XX_TIMEX_H
478 +#define _CNS21XX_TIMEX_H
480 +#define CLOCK_TICK_RATE 43750000
482 +#endif /* _CNS21XX_TIMEX_H */
484 +++ b/arch/arm/mach-cns21xx/include/mach/uncompress.h
487 + * Copyright (c) 2008 Cavium Networks
488 + * Copyright (c) 2010 Gabor Juhos <juhosg@openwrt.org>
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.
495 +#ifndef _CNS21XX_UNCOMPRESS_H
496 +#define _CNS21XX_UNCOMPRESS_H
498 +#define UART_BASE 0x78000000
500 +#define UART_REG(offs) (*((volatile unsigned int *)(UART_BASE + offs)))
502 +#define UART_THR UART_REG(0x00)
503 +#define UART_LSR UART_REG(0x14)
504 +#define THR_EMPTY (1 << 5)
506 +#define UART_THR_EMPTY() (((UART_LSR) & THR_EMPTY) == (THR_EMPTY))
508 +static void putc(int c)
511 + while (!UART_THR_EMPTY())
514 + UART_THR = (int)(c & 0xFF);
518 +static inline void flush(void)
522 +#define arch_decomp_setup()
523 +#define arch_decomp_wdog()
525 +#endif /* _CNS21XX_UNCOMPRESS_H */
527 +++ b/arch/arm/mach-cns21xx/include/mach/memory.h
530 + * Copyright (c) 2008 Cavium Networks
531 + * Copyright (c) 2010 Gabor Juhos <juhosg@openwrt.org>
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.
538 +#ifndef _CNS21XX_MEMORY_H
539 +#define _CNS21XX_MEMORY_H
541 +#define PHYS_OFFSET UL(0x00000000)
543 +#endif /* _CNS21XX_MEMORY_H */
545 +++ b/arch/arm/mach-cns21xx/include/mach/system.h
548 + * Copyright (c) 2008 Cavium Networks
549 + * Copyright (c) 2010 Gabor Juhos <juhosg@openwrt.org>
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.
556 +#ifndef _CNS21XX_SYSTEM_H
557 +#define _CNS21XX_SYSTEM_H
559 +#include <mach/cns21xx.h>
560 +#include <mach/cns21xx_powermgmt.h>
562 +static inline void arch_idle(void)
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
572 + local_irq_enable();
576 +static inline void arch_reset(char mode, const char *cmd)
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);
584 +#endif /* _CNS21XX_SYSTEM_H */
586 +++ b/arch/arm/mach-cns21xx/irq.c
589 + * Copyright (c) 2008 Cavium Networks
590 + * Copyright (c) 2010 Gabor Juhos <juhosg@openwrt.org>
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.
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>
603 +#include <mach/cns21xx.h>
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
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
624 +#define INTC_SIZE 0x148
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,
661 +static void __iomem *cns21xx_intc_base;
663 +static inline void cns21xx_intc_writel(u32 val, unsigned int reg)
665 + __raw_writel(val, cns21xx_intc_base + reg);
668 +static inline u32 cns21xx_intc_readl(unsigned int reg)
670 + return __raw_readl(cns21xx_intc_base + reg);
673 +static void cns21xx_irq_ack(unsigned int irq)
675 + cns21xx_intc_writel(1 << irq, INTC_EDGE_INTERRUPT_SOURCE_CLEAR_REG);
678 +static void cns21xx_irq_mask(unsigned int irq)
680 + cns21xx_intc_writel(1 << irq, INTC_INTERRUPT_MASK_REG);
683 +static void cns21xx_irq_unmask(unsigned int irq)
685 + cns21xx_intc_writel(1 << irq, INTC_INTERRUPT_MASK_CLEAR_REG);
688 +static struct irq_chip cns21xx_irq_chip = {
690 + .ack = cns21xx_irq_ack,
691 + .mask = cns21xx_irq_mask,
692 + .unmask = cns21xx_irq_unmask,
695 +static struct resource cns21xx_intc_resource = {
697 + .flags = IORESOURCE_MEM,
698 + .start = CNS21XX_INTC_BASE,
699 + .end = CNS21XX_INTC_BASE + INTC_SIZE - 1,
702 +void __init cns21xx_init_irq(void)
704 + unsigned int mode = 0;
705 + unsigned int level = 0;
709 + * Disable arch_idle() by default since it is buggy
710 + * For more info see arch/arm/mach-cns21xx/include/mach/system.h
714 + request_resource(&iomem_resource, &cns21xx_intc_resource);
715 + cns21xx_intc_base = ioremap(cns21xx_intc_resource.start, INTC_SIZE);
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);
724 + for (i = 0; i < ARRAY_SIZE(cns21xx_irq_types); i++) {
725 + irq_flow_handler_t handler;
727 + switch (cns21xx_irq_types[i]) {
728 + case IRQ_TYPE_EDGE_RISING:
729 + handler = handle_edge_irq;
733 + case IRQ_TYPE_EDGE_FALLING:
734 + handler = handle_edge_irq;
739 + case IRQ_TYPE_LEVEL_LOW:
740 + handler = handle_level_irq;
744 + case IRQ_TYPE_LEVEL_HIGH:
745 + case IRQ_TYPE_NONE:
746 + handler = handle_level_irq;
754 + set_irq_chip(i, &cns21xx_irq_chip);
755 + set_irq_handler(i, handler);
756 + set_irq_flags(i, IRQF_VALID | IRQF_PROBE);
759 + cns21xx_intc_writel(mode, INTC_INTERRUPT_TRIGGER_MODE_REG);
760 + cns21xx_intc_writel(level, INTC_INTERRUPT_TRIGGER_LEVEL_REG);
763 +++ b/arch/arm/mach-cns21xx/time.c
766 + * Copyright (c) 2010 Gabor Juhos <juhosg@openwrt.org>
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.
773 +#include <linux/init.h>
774 +#include <linux/irq.h>
776 +#include <asm/mach/time.h>
778 +#include <plat/time.h>
779 +#include <mach/hardware.h>
780 +#include <mach/cns21xx.h>
784 +static void __init cns21xx_timer_init(void)
786 + fa_timer_init(CNS21XX_TIMER_BASE, CNS21XX_IRQ_TIMER1, FA_TIMER1,
787 + cns21xx_get_apb_freq());
790 +struct sys_timer cns21xx_timer = {
791 + .init = cns21xx_timer_init,
794 +++ b/arch/arm/mach-cns21xx/include/mach/cns21xx_powermgmt.h
797 + * Copyright (c) 2008 Cavium Networks
798 + * Copyright (c) 2010 Gabor Juhos <juhosg@openwrt.org>
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.
805 +#ifndef _CNS21XX_POWERMGMT_H
806 +#define _CNS21XX_POWERMGMT_H
808 +#define PWRMGT_MEM_MAP_VALUE(reg_offset) \
809 + (*((u32 volatile *)(CNS21XX_CPM_BASE_VIRT + reg_offset)))
812 + * define access macros
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)
828 + * define constants macros
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
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)
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)
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)
863 +#define PWRMGT_HCLK_SOURCE_FCLK (0 << 6)
864 +#define PWRMGT_HCLK_SOURCE_125MHZ (1 << 6)
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)
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)
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
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
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
893 + * Macro defines for Clock Gate Control
895 +#define HAL_PWRMGT_DISABLE_DRAMC_CLOCK() \
897 + PWRMGT_CLOCK_GATE_CONTROL0_REG &= ~(0x1); \
901 +#define HAL_PWRMGT_ENABLE_NIC_CLOCK() \
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); \
908 +#define HAL_PWRMGT_DISABLE_NIC_CLOCK() \
910 + PWRMGT_CLOCK_GATE_CONTROL0_REG &= ~(0x0F << 20); \
914 +#define HAL_PWRMGT_ENABLE_PCI_BRIDGE_33M_CLOCK() \
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); \
923 +#define HAL_PWRMGT_ENABLE_PCI_BRIDGE_66M_CLOCK() \
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); \
932 +#define HAL_PWRMGT_DISABLE_PCI_CLOCK() \
934 + PWRMGT_CLOCK_GATE_CONTROL0_REG &= ~((0x1 << 28) | (0x1 << 30)); \
938 +#define HAL_PWRMGT_ENABLE_USB_CLOCK() \
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); \
946 +#define HAL_PWRMGT_DISABLE_USB_CLOCK() \
948 + PWRMGT_CLOCK_GATE_CONTROL0_REG &= ~(0x1 << 24); \
949 + PWRMGT_CLOCK_GATE_CONTROL1_REG &= ~(0x1 << 28); \
953 +#define HAL_PWRMGT_ENABLE_DMA_CLOCK() \
955 + PWRMGT_CLOCK_GATE_CONTROL0_REG |= (0x1 << 16); \
956 + PWRMGT_SOFTWARE_RESET_CONTROL_REG |= (0x1 << 4); \
959 +#define HAL_PWRMGT_DISABLE_DMA_CLOCK() \
961 + PWRMGT_CLOCK_GATE_CONTROL0_REG &= ~(0x1 << 16); \
965 +#define HAL_PWRMGT_ENABLE_IDE_CLOCK() \
967 + PWRMGT_CLOCK_GATE_CONTROL0_REG |= (0x1 << 8) | (0x1 << 9); \
968 + PWRMGT_SOFTWARE_RESET_CONTROL_REG |= (0x1 << 2); \
971 +#define HAL_PWRMGT_DISABLE_IDE_CLOCK() \
973 + PWRMGT_CLOCK_GATE_CONTROL0_REG &= ~((0x1 << 8) | (0x1 << 9)); \
977 +#define HAL_PWRMGT_ENABLE_UART0_CLOCK() \
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); \
984 +#define HAL_PWRMGT_DISABLE_UART0_CLOCK() \
986 + PWRMGT_CLOCK_GATE_CONTROL1_REG &= ~(0x1 << 12); \
990 +#define HAL_PWRMGT_ENABLE_UART1_CLOCK() \
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); \
997 +#define HAL_PWRMGT_DISABLE_UART1_CLOCK() \
999 + PWRMGT_CLOCK_GATE_CONTROL1_REG &= ~(0x1 << 13); \
1003 +#define HAL_PWRMGT_ENABLE_PCMCIA_CLOCK() \
1005 + PWRMGT_CLOCK_GATE_CONTROL0_REG |= (0x1 << 4) | (0x1 << 5); \
1008 +#define HAL_PWRMGT_DISABLE_PCMCIA_CLOCK() \
1010 + PWRMGT_CLOCK_GATE_CONTROL0_REG &= ~((0x1 << 4) | (0x1 << 5)); \
1014 +#define HAL_PWRMGT_ENABLE_GPIO_CLOCK() \
1016 + PWRMGT_CLOCK_GATE_CONTROL1_REG |= (0x1 << 25); \
1019 +#define HAL_PWRMGT_DISABLE_GPIO_CLOCK() \
1021 + PWRMGT_CLOCK_GATE_CONTROL1_REG &= ~(0x1 << 25); \
1025 +#define HAL_PWRMGT_ENABLE_WDTIMER_CLOCK() \
1027 + PWRMGT_CLOCK_GATE_CONTROL1_REG |= (0x1 << 21) | (0x1 << 22); \
1030 +#define HAL_PWRMGT_DISABLE_WDTIMER_CLOCK() \
1032 + PWRMGT_CLOCK_GATE_CONTROL1_REG &= ~((0x1 << 21) | (0x1 << 22)); \
1036 +#define HAL_PWRMGT_ENABLE_RTC_CLOCK() \
1038 + PWRMGT_CLOCK_GATE_CONTROL1_REG |= (0x1 << 23); \
1041 +#define HAL_PWRMGT_DISABLE_RTC_CLOCK() \
1043 + PWRMGT_CLOCK_GATE_CONTROL1_REG &= ~(0x1 << 23); \
1047 +#define HAL_PWRMGT_ENABLE_TIMER_CLOCK() \
1049 + PWRMGT_CLOCK_GATE_CONTROL1_REG |= (0x1 << 17) | (0x1 << 18) | (0x1 << 19); \
1052 +#define HAL_PWRMGT_DISABLE_TIMER_CLOCK() \
1054 + PWRMGT_CLOCK_GATE_CONTROL1_REG &= ~((0x1 << 17) | (0x1 << 18) | (0x1 << 19)); \
1058 +#define HAL_PWRMGT_ENABLE_I2C_CLOCK() \
1060 + PWRMGT_CLOCK_GATE_CONTROL1_REG |= (0x1 << 1); \
1063 +#define HAL_PWRMGT_DISABLE_I2C_CLOCK() \
1065 + PWRMGT_CLOCK_GATE_CONTROL1_REG &= ~(0x1 << 1); \
1069 +#define HAL_PWRMGT_ENABLE_I2S_CLOCK() \
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); \
1076 +#define HAL_PWRMGT_DISABLE_I2S_CLOCK() \
1078 + PWRMGT_CLOCK_GATE_CONTROL1_REG &= ~((0x1 << 1) | (0x1 << 10)); \
1082 +#define HAL_PWRMGT_ENABLE_PCM_CLOCK() \
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); \
1089 +#define HAL_PWRMGT_DISABLE_PCM_CLOCK() \
1091 + PWRMGT_CLOCK_GATE_CONTROL1_REG &= ~((0x1 << 1) | (0x1 << 6)); \
1095 +#define HAL_PWRMGT_ENABLE_SPI_CLOCK() \
1097 + PWRMGT_CLOCK_GATE_CONTROL1_REG |= (0x1 << 0) | (0x1 << 1); \
1100 +#define HAL_PWRMGT_DISABLE_SPI_CLOCK() \
1102 + PWRMGT_CLOCK_GATE_CONTROL1_REG &= ~((0x1 << 0) | (0x1 << 1)); \
1106 +#define HAL_PWRMGT_ENABLE_VIC_CLOCK() \
1108 + PWRMGT_CLOCK_GATE_CONTROL0_REG |= (0x1 << 12); \
1111 +#define HAL_PWRMGT_DISABLE_VIC_CLOCK() \
1113 + PWRMGT_CLOCK_GATE_CONTROL0_REG &= ~(0x1 << 12); \
1117 +#define HAL_PWRMGT_ENABLE_SMC_CLOCK() \
1119 + PWRMGT_CLOCK_GATE_CONTROL0_REG |= (0x1 << 4) | (0x1 << 5); \
1122 +#define HAL_PWRMGT_DISABLE_SMC_CLOCK() \
1124 + PWRMGT_CLOCK_GATE_CONTROL0_REG &= ~((0x1 << 4) | (0x1 << 5)); \
1128 +#define HAL_PWRMGT_ENABLE_HSDMA_CLOCK() \
1130 + PWRMGT_CLOCK_GATE_CONTROL1_REG |= (0x1 << 29); \
1131 + PWRMGT_SOFTWARE_RESET_CONTROL_REG |= (0x1 << 16); \
1134 +#define HAL_PWRMGT_DISABLE_HSDMA_CLOCK() \
1136 + PWRMGT_CLOCK_GATE_CONTROL1_REG &= ~(0x1 << 29); \
1142 + * Macro defines for Reset Control
1144 +#define HAL_PWRMGT_GLOBAL_SOFTWARE_RESET() \
1146 + PWRMGT_SOFTWARE_RESET_CONTROL_REG |= (0x1); \
1147 + PWRMGT_SOFTWARE_RESET_CONTROL_REG &= ~(0x1); \
1152 + * Macro defines for System Clock Control
1154 +#define HAL_PWRMGT_SET_PLL_FREQUENCY_175MHZ() \
1156 + PWRMGT_SYSTEM_CLOCK_CONTROL_REG &= ~0x3; \
1160 +#define HAL_PWRMGT_SET_PLL_FREQUENCY_200MHZ() \
1162 + PWRMGT_SYSTEM_CLOCK_CONTROL_REG &= ~0x3; \
1163 + PWRMGT_SYSTEM_CLOCK_CONTROL_REG |= 0x1; \
1167 +#define HAL_PWRMGT_SET_PLL_FREQUENCY_225MHZ() \
1169 + PWRMGT_SYSTEM_CLOCK_CONTROL_REG &= ~0x3; \
1170 + PWRMGT_SYSTEM_CLOCK_CONTROL_REG |= 0x2; \
1174 +#define HAL_PWRMGT_SET_PLL_FREQUENCY_250MHZ() \
1176 + PWRMGT_SYSTEM_CLOCK_CONTROL_REG &= ~0x3; \
1177 + PWRMGT_SYSTEM_CLOCK_CONTROL_REG |= 0x3; \
1181 +#define HAL_PWRMGT_CONFIG_PLLCLK_TO_CPUCLK_RATIO(ratio) \
1183 + PWRMGT_SYSTEM_CLOCK_CONTROL_REG &= ~(0x3 << 2); \
1184 + PWRMGT_SYSTEM_CLOCK_CONTROL_REG |= (((ratio - 1) & 0x3) << 2); \
1188 +#define HAL_PWRMGT_CONFIG_CPUCLK_TO_HCLK_RATIO(ratio) \
1190 + PWRMGT_SYSTEM_CLOCK_CONTROL_REG &= ~(0x3 << 4); \
1191 + PWRMGT_SYSTEM_CLOCK_CONTROL_REG |= (((ratio - 1) & 0x3) << 4); \
1195 +#define HAL_PWRMGT_HCLK_SOURCE_FCLK() \
1197 + PWRMGT_SYSTEM_CLOCK_CONTROL_REG &= ~(0x1 << 6); \
1201 +#define HAL_PWRMGT_HCLK_SOURCE_125MHZ() \
1203 + PWRMGT_SYSTEM_CLOCK_CONTROL_REG |= (0x1 << 6); \
1207 +#define HAL_PWRMGT_GIGA_NIC_CLOCK_SOURCE_HCLK() \
1209 + PWRMGT_SYSTEM_CLOCK_CONTROL_REG &= ~(0x1 << 7); \
1213 +#define HAL_PWRMGT_GIGA_NIC_CLOCK_SOURCE_62_5MHZ() \
1215 + PWRMGT_SYSTEM_CLOCK_CONTROL_REG |= (0x1 << 7); \
1219 +#define HAL_PWRMGT_CONFIG_HCLK_TO_PCLK_RATIO(ratio) \
1221 + PWRMGT_SYSTEM_CLOCK_CONTROL_REG &= ~(0x3 << 8); \
1222 + PWRMGT_SYSTEM_CLOCK_CONTROL_REG |= (((ratio - 1) & 0x3) << 8); \
1226 +#define HAL_PWRMGT_I2S_CLOCK_SOURCE_8192000HZ() \
1228 + PWRMGT_SYSTEM_CLOCK_CONTROL_REG &= ~(0x3 << 12); \
1229 + PWRMGT_SYSTEM_CLOCK_CONTROL_REG |= (0x0 << 12); \
1233 +#define HAL_PWRMGT_I2S_CLOCK_SOURCE_11289600HZ() \
1235 + PWRMGT_SYSTEM_CLOCK_CONTROL_REG &= ~(0x3 << 12); \
1236 + PWRMGT_SYSTEM_CLOCK_CONTROL_REG |= (0x1 << 12); \
1240 +#define HAL_PWRMGT_I2S_CLOCK_SOURCE_12288000HZ() \
1242 + PWRMGT_SYSTEM_CLOCK_CONTROL_REG &= ~(0x3 << 12); \
1243 + PWRMGT_SYSTEM_CLOCK_CONTROL_REG |= (0x2 << 12); \
1247 +#define HAL_PWRMGT_CONFIGURE_MDC_CLOCK_DIVIDER(divided_value) \
1249 + PWRMGT_SYSTEM_CLOCK_CONTROL_REG &= ~(0x3 << 14); \
1250 + PWRMGT_SYSTEM_CLOCK_CONTROL_REG |= ((divided_value & 0x3) << 14); \
1254 +#define HAL_PWRMGT_CONFIGURE_CLOCK_OUT_PIN(pin_source_select, divided_value) \
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); \
1263 + * Macro defines for PLL Power Down Control
1265 +#define HAL_PWRMGT_POWER_DOWN_SYSTEM_XTAL_PAD() \
1266 + PWRMGT_PLL_POWER_DOWN_CONTROL_REG |= (0x1 << 7)
1268 +#define HAL_PWRMGT_POWER_ON_SYSTEM_XTAL_PAD() \
1269 + PWRMGT_PLL_POWER_DOWN_CONTROL_REG &= ~(0x1 << 7)
1272 +#define HAL_PWRMGT_POWER_DOWN_PLL_X5() \
1273 + PWRMGT_PLL_POWER_DOWN_CONTROL_REG |= (0x1 << 0)
1275 +#define HAL_PWRMGT_POWER_ON_PLL_X5() \
1276 + PWRMGT_PLL_POWER_DOWN_CONTROL_REG &= ~(0x1 << 0)
1279 +#define HAL_PWRMGT_POWER_DOWN_PLL_X8() \
1280 + PWRMGT_PLL_POWER_DOWN_CONTROL_REG |= (0x1 << 1)
1282 +#define HAL_PWRMGT_POWER_ON_PLL_X8() \
1283 + PWRMGT_PLL_POWER_DOWN_CONTROL_REG &= ~(0x1 << 1)
1286 +#define HAL_PWRMGT_POWER_DOWN_PLL_X3() \
1287 + PWRMGT_PLL_POWER_DOWN_CONTROL_REG |= (0x1 << 2)
1289 +#define HAL_PWRMGT_POWER_ON_PLL_X3() \
1290 + PWRMGT_PLL_POWER_DOWN_CONTROL_REG &= ~(0x1 << 2)
1293 +#define HAL_PWRMGT_POWER_DOWN_USBH_PHY_PLL() \
1294 + PWRMGT_PLL_POWER_DOWN_CONTROL_REG |= (0x1 << 3)
1296 +#define HAL_PWRMGT_POWER_ON_USBH_PHY_PLL() \
1297 + PWRMGT_PLL_POWER_DOWN_CONTROL_REG &= ~(0x1 << 3)
1300 +#define HAL_PWRMGT_POWER_DOWN_USBD_PHY_PLL() \
1301 + PWRMGT_PLL_POWER_DOWN_CONTROL_REG |= (0x1 << 4)
1303 +#define HAL_PWRMGT_POWER_ON_USBD_PHY_PLL() \
1304 + PWRMGT_PLL_POWER_DOWN_CONTROL_REG &= ~(0x1 << 4)
1307 +#define HAL_PWRMGT_POWER_DOWN_PLL_X2250() \
1308 + PWRMGT_PLL_POWER_DOWN_CONTROL_REG |= (0x1 << 5)
1310 +#define HAL_PWRMGT_POWER_ON_PLL_X2250() \
1311 + PWRMGT_PLL_POWER_DOWN_CONTROL_REG &= ~(0x1 << 5)
1314 +#define HAL_PWRMGT_POWER_DOWN_PLL_X7() \
1315 + PWRMGT_PLL_POWER_DOWN_CONTROL_REG |= (0x1 << 6)
1317 +#define HAL_PWRMGT_POWER_ON_PLL_X7() \
1318 + PWRMGT_PLL_POWER_DOWN_CONTROL_REG &= ~(0x1 << 6)
1321 +#define HAL_PWRMGT_POWER_DOWN_ALL_PLL() \
1322 + PWRMGT_PLL_POWER_DOWN_CONTROL_REG = 0x7F;
1324 +#define HAL_PWRMGT_POWER_ON_ALL_PLL() \
1325 + PWRMGT_PLL_POWER_DOWN_CONTROL_REG = 0;
1329 + * Macro defines for Pad Drive Strength Control
1331 +#define HAL_PWRMGT_SELECT_PAD_DRIVE_STRENGTH_PCMCIA_CARDBUS_MODE() \
1333 + PWRMGT_PAD_DRIVE_STRENGTH_CONTROL_REG &= ~(0x3 << 0); \
1336 +#define HAL_PWRMGT_SELECT_PAD_DRIVE_STRENGTH_PCI_MODE() \
1338 + PWRMGT_PAD_DRIVE_STRENGTH_CONTROL_REG &= ~(0x3 << 0); \
1339 + PWRMGT_PAD_DRIVE_STRENGTH_CONTROL_REG |= (0x1 << 0); \
1342 +#define HAL_PWRMGT_SELECT_PAD_DRIVE_STRENGTH_MII_MODE() \
1344 + PWRMGT_PAD_DRIVE_STRENGTH_CONTROL_REG |= (0x1 << 2); \
1347 +#define HAL_PWRMGT_SELECT_PAD_DRIVE_STRENGTH_RGMII_MODE() \
1349 + PWRMGT_PAD_DRIVE_STRENGTH_CONTROL_REG &= ~(0x1 << 2); \
1352 +#define HAL_PWRMGT_ENABLE_MII_PAD_SIGNAL_NOT_BOUNDED() \
1354 + PWRMGT_PAD_DRIVE_STRENGTH_CONTROL_REG |= (0x1 << 3); \
1357 +#define HAL_PWRMGT_DISABLE_MII_PAD_SIGNAL_NOT_BOUNDED() \
1359 + PWRMGT_PAD_DRIVE_STRENGTH_CONTROL_REG &= ~(0x1 << 3); \
1364 + * Macro defines for USB Device Power Management
1366 +#define HAL_PWRMGT_REMOTE_WAKEUP_USB_HOST() \
1368 + PWRMGT_USB_DEVICE_POWERMGT_REG |= (0x1 << 4); \
1371 +#define HAL_PWRMGT_USB_DEVICE_PHY_CLOCK_SOURCE_EXTERNAL_12MHZ() \
1373 + PWRMGT_USB_DEVICE_POWERMGT_REG &= ~(0x1 << 5); \
1376 +#define HAL_PWRMGT_USB_DEVICE_PHY_CLOCK_SOURCE_INTERNAL_12MHZ() \
1378 + PWRMGT_USB_DEVICE_POWERMGT_REG |= (0x1 << 5); \
1383 + * Macro defines for Regulator Control
1386 +#endif /* _CNS21XX_POWERMGMT_H */
1388 +++ b/arch/arm/mach-cns21xx/include/mach/cns21xx.h
1391 + * Copyright (c) 2008 Cavium Networks
1392 + * Copyright (c) 2010 Gabor Juhos <juhosg@openwrt.org>
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.
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
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
1474 +#define CNS21XX_PHYS_IO CNS21XX_UART0_BASE
1475 +#define CNS21XX_IO_PAGE_OFFSET ((CNS21XX_UART0_BASE_VIRT) >> 18) & 0xfffc
1477 +#endif /* _CNS21XX_H */
1479 +++ b/arch/arm/mach-cns21xx/core.c
1482 + * Copyright (c) 2008 Cavium Networks
1483 + * Copyright (c) 2010 Gabor Juhos <juhosg@openwrt.org>
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.
1490 +#include <linux/kernel.h>
1492 +#include <mach/hardware.h>
1493 +#include <mach/cns21xx.h>
1494 +#include <mach/cns21xx_powermgmt.h>
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;
1501 +static void cns21xx_init_freq(void)
1503 + static int freq_init_done;
1506 + if (freq_init_done)
1509 + t = PWRMGT_SYSTEM_CLOCK_CONTROL_REG;
1510 + switch (t & 0x3) {
1512 + cns21xx_pll_freq = 175000000;
1516 + cns21xx_pll_freq = 200000000;
1520 + cns21xx_pll_freq = 225000000;
1524 + cns21xx_pll_freq = 250000000;
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);
1532 + freq_init_done = 1;
1535 +unsigned long cns21xx_get_pll_freq(void)
1537 + cns21xx_init_freq();
1538 + return cns21xx_pll_freq;
1541 +unsigned long cns21xx_get_cpu_freq(void)
1543 + cns21xx_init_freq();
1544 + return cns21xx_cpu_freq;
1547 +unsigned long cns21xx_get_ahb_freq(void)
1549 + cns21xx_init_freq();
1550 + return cns21xx_ahb_freq;
1553 +unsigned long cns21xx_get_apb_freq(void)
1555 + cns21xx_init_freq();
1556 + return cns21xx_apb_freq;
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
1563 default 6 if ARM_L1_CACHE_SHIFT_6
1564 + default 4 if ARM_L1_CACHE_SHIFT_4
1567 config ARM_DMA_MEM_BUFFERABLE
1568 --- a/arch/arm/mm/cache-fa.S
1569 +++ b/arch/arm/mm/cache-fa.S
1572 * The total size of the data cache.
1574 -#ifdef CONFIG_ARCH_GEMINI
1575 +#if (defined(CONFIG_ARCH_GEMINI) || defined(CONFIG_ARCH_CNS21XX))
1576 #define CACHE_DSIZE 8192
1578 #define CACHE_DSIZE 16384
1580 +++ b/arch/arm/mach-cns21xx/include/mach/cns21xx_misc.h
1582 +/*******************************************************************************
1584 + * Copyright (c) 2008 Cavium Networks
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.
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.
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/.
1600 + * This file may also be available under a different license from Cavium.
1601 + * Contact Cavium Networks for more information
1603 + ******************************************************************************/
1605 +#ifndef _STAR_MISC_H_
1606 +#define _STAR_MISC_H_
1608 +#include <mach/cns21xx.h>
1610 +#define MISC_MEM_MAP_VALUE(reg_offset) \
1611 + (*((u32 volatile *)(CNS21XX_MISC_BASE_VIRT + reg_offset)))
1614 + * define access macros
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)
1632 +#define MISC_E_FUSE_0_REG MISC_MEM_MAP_VALUE(0x60)
1633 +#define MISC_E_FUSE_1_REG MISC_MEM_MAP_VALUE(0x64)
1637 + * define constants macros
1639 +#define MISC_PARALLEL_FLASH_BOOT 0
1640 +#define MISC_SPI_SERIAL_FLASH_BOOT 1
1642 +#define MISC_LITTLE_ENDIAN 0
1643 +#define MISC_BIG_ENDIAN 1
1645 +#define MISC_FARADAY_ICE 0
1646 +#define MISC_ARM_ICE 1
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))
1683 +#define MISC_UART0_ACT0_Pin (0x1 << 2)
1684 +#define MISC_UART1_ACT1_Pin (0x1 << 3)
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
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
1702 +#define MISC_GPIOA_DRIVE_STRENGTH_4MA 0
1703 +#define MISC_GPIOA_DRIVE_STRENGTH_8MA 1
1707 + * macro declarations
1709 +#define HAL_MISC_ENABLE_SPI_SERIAL_FLASH_BANK_ACCESS() \
1711 + (MISC_CHIP_CONFIG_REG) |= (0x1 << 4); \
1714 +#define HAL_MISC_DISABLE_SPI_SERIAL_FLASH_BANK_ACCESS() \
1716 + (MISC_CHIP_CONFIG_REG) &= ~(0x1 << 4); \
1721 + * Macro defines for GPIOA and GPIOB Pin Enable Register
1723 +#define HAL_MISC_ENABLE_EXT_INT29_PINS() \
1725 + (MISC_GPIOA_PIN_ENABLE_REG) |= (MISC_EXT_INT29_PINS); \
1728 +#define HAL_MISC_DISABLE_EXT_INT29_PINS() \
1730 + (MISC_GPIOA_PIN_ENABLE_REG) &= ~(MISC_EXT_INT29_PINS); \
1733 +#define HAL_MISC_ENABLE_EXT_INT30_PINS() \
1735 + (MISC_GPIOA_PIN_ENABLE_REG) |= (MISC_EXT_INT30_PINS); \
1738 +#define HAL_MISC_DISABLE_EXT_INT30_PINS() \
1740 + (MISC_GPIOA_PIN_ENABLE_REG) &= ~(MISC_EXT_INT30_PINS); \
1743 +#define HAL_MISC_ENABLE_I2C_PINS() \
1745 + (MISC_GPIOA_PIN_ENABLE_REG) |= (MISC_I2C_PINS); \
1748 +#define HAL_MISC_DISABLE_I2C_PINS() \
1750 + (MISC_GPIOA_PIN_ENABLE_REG) &= ~(MISC_I2C_PINS); \
1753 +#define HAL_MISC_ENABLE_I2S_PINS() \
1755 + (MISC_GPIOA_PIN_ENABLE_REG) |= (MISC_I2S_PINS); \
1758 +#define HAL_MISC_DISABLE_I2S_PINS() \
1760 + (MISC_GPIOA_PIN_ENABLE_REG) &= ~(MISC_I2S_PINS); \
1763 +#define HAL_MISC_DISABLE_I2SSD_PINS() \
1765 + (MISC_GPIOA_PIN_ENABLE_REG) &= ~(MISC_I2SSD_PINS); \
1768 +#define HAL_MISC_DISABLE_I2SWS_PINS() \
1770 + (MISC_GPIOA_PIN_ENABLE_REG) &= ~(MISC_I2SWS_PINS); \
1773 +#define HAL_MISC_DISABLE_I2SCLK_PINS() \
1775 + (MISC_GPIOA_PIN_ENABLE_REG) &= ~(MISC_I2SCLK_PINS); \
1778 +#define HAL_MISC_ENABLE_PCM_PINS() \
1780 + (MISC_GPIOA_PIN_ENABLE_REG) |= (MISC_PCM_PINS); \
1783 +#define HAL_MISC_DISABLE_PCM_PINS() \
1785 + (MISC_GPIOA_PIN_ENABLE_REG) &= ~(MISC_PCM_PINS); \
1788 +#define HAL_MISC_DISABLE_PCMDR_PINS() \
1790 + (MISC_GPIOA_PIN_ENABLE_REG) &= ~(MISC_PCMDR_PINS); \
1793 +#define HAL_MISC_DISABLE_PCMDT_PINS() \
1795 + (MISC_GPIOA_PIN_ENABLE_REG) &= ~(MISC_PCMDT_PINS); \
1798 +#define HAL_MISC_DISABLE_PCMFS_PINS() \
1800 + (MISC_GPIOA_PIN_ENABLE_REG) &= ~(MISC_PCMFS_PINS); \
1803 +#define HAL_MISC_DISABLE_PCMCLK_PINS() \
1805 + (MISC_GPIOA_PIN_ENABLE_REG) &= ~(MISC_PCMCLK_PINS); \
1808 +#define HAL_MISC_ENABLE_LED0_PINS() \
1810 + (MISC_GPIOA_PIN_ENABLE_REG) |= (MISC_LED0_PINS); \
1813 +#define HAL_MISC_DISABLE_LED0_PINS() \
1815 + (MISC_GPIOA_PIN_ENABLE_REG) &= ~(MISC_LED0_PINS); \
1818 +#define HAL_MISC_ENABLE_LED1_PINS() \
1820 + (MISC_GPIOA_PIN_ENABLE_REG) |= (MISC_LED1_PINS); \
1823 +#define HAL_MISC_DISABLE_LED1_PINS() \
1825 + (MISC_GPIOA_PIN_ENABLE_REG) &= ~(MISC_LED1_PINS); \
1828 +#define HAL_MISC_ENABLE_LED2_PINS() \
1830 + (MISC_GPIOA_PIN_ENABLE_REG) |= (MISC_LED2_PINS); \
1833 +#define HAL_MISC_DISABLE_LED2_PINS() \
1835 + (MISC_GPIOA_PIN_ENABLE_REG) &= ~(MISC_LED2_PINS); \
1838 +#define HAL_MISC_ENABLE_LED012_PINS() \
1840 + (MISC_GPIOA_PIN_ENABLE_REG) |= (MISC_LED012_PINS); \
1843 +#define HAL_MISC_DISABLE_LED012_PINS() \
1845 + (MISC_GPIOA_PIN_ENABLE_REG) &= ~(MISC_LED012_PINS); \
1848 +#define HAL_MISC_ENABLE_WDTIMER_RESET_PINS() \
1850 + (MISC_GPIOA_PIN_ENABLE_REG) |= (MISC_WDTIMER_RESET_PINS); \
1853 +#define HAL_MISC_DISABLE_WDTIMER_RESET_PINS() \
1855 + (MISC_GPIOA_PIN_ENABLE_REG) &= ~(MISC_WDTIMER_RESET_PINS); \
1858 +#define HAL_MISC_ENABLE_SPI_PINS() \
1860 + (MISC_GPIOA_PIN_ENABLE_REG) |= (MISC_SPI_PINS); \
1863 +#define HAL_MISC_ENABLE_SPIDR_PINS() \
1865 + (MISC_GPIOA_PIN_ENABLE_REG) |= (MISC_SPIDR_PINS); \
1868 +#define HAL_MISC_ENABLE_SPICLK_PINS() \
1870 + (MISC_GPIOA_PIN_ENABLE_REG) |= (MISC_SPICLK_PINS); \
1873 +#define HAL_MISC_ENABLE_SPICSN0_PINS() \
1875 + (MISC_GPIOA_PIN_ENABLE_REG) |= (MISC_SPICSN0_PINS); \
1878 +#define HAL_MISC_ENABLE_SPICSN0_PINS() \
1880 + (MISC_GPIOA_PIN_ENABLE_REG) |= (MISC_SPICSN0_PINS); \
1883 +#define HAL_MISC_ENABLE_SPICSN1_PINS() \
1885 + (MISC_GPIOA_PIN_ENABLE_REG) |= (MISC_SPICSN1_PINS); \
1888 +#define HAL_MISC_ENABLE_SPICSN2_PINS() \
1890 + (MISC_GPIOA_PIN_ENABLE_REG) |= (MISC_SPICSN2_PINS); \
1893 +#define HAL_MISC_ENABLE_SPICSN3_PINS() \
1895 + (MISC_GPIOA_PIN_ENABLE_REG) |= (MISC_SPICSN3_PINS); \
1898 +#define HAL_MISC_DISABLE_SPI_PINS() \
1900 + (MISC_GPIOA_PIN_ENABLE_REG) &= ~(MISC_SPI_PINS); \
1903 +#define HAL_MISC_DISABLE_SPIDR_PINS() \
1905 + (MISC_GPIOA_PIN_ENABLE_REG) &= ~(MISC_SPIDR_PINS); \
1908 +#define HAL_MISC_DISABLE_SPICLK_PINS() \
1910 + (MISC_GPIOA_PIN_ENABLE_REG) &= ~(MISC_SPICLK_PINS); \
1913 +#define HAL_MISC_DISABLE_SPICSN0_PINS() \
1915 + (MISC_GPIOA_PIN_ENABLE_REG) &= ~(MISC_SPICSN0_PINS); \
1918 +#define HAL_MISC_DISABLE_SPICSN1_PINS() \
1920 + (MISC_GPIOA_PIN_ENABLE_REG) &= ~(MISC_SPICSN1_PINS); \
1923 +#define HAL_MISC_DISABLE_SPICSN2_PINS() \
1925 + (MISC_GPIOA_PIN_ENABLE_REG) &= ~(MISC_SPICSN2_PINS); \
1928 +#define HAL_MISC_DISABLE_SPICSN3_PINS() \
1930 + (MISC_GPIOA_PIN_ENABLE_REG) &= ~(MISC_SPICSN3_PINS); \
1933 +#define HAL_MISC_ENABLE_UART0_ACT0_PIN() \
1935 + (MISC_GPIOA_PIN_ENABLE_REG) |= (MISC_UART0_ACT0_Pin); \
1938 +#define HAL_MISC_DISABLE_UART0_ACT0_PIN() \
1940 + (MISC_GPIOA_PIN_ENABLE_REG) &= ~(MISC_UART0_ACT0_Pin); \
1943 +#define HAL_MISC_ENABLE_UART1_ACT1_PIN() \
1945 + (MISC_GPIOA_PIN_ENABLE_REG) |= (MISC_UART1_ACT1_Pin); \
1948 +#define HAL_MISC_DISABLE_UART1_ACT1_PIN() \
1950 + (MISC_GPIOA_PIN_ENABLE_REG) &= ~(MISC_UART1_ACT1_Pin); \
1953 +#define HAL_MISC_ENABLE_MDC_MDIO_PINS() \
1955 + (MISC_GPIOB_PIN_ENABLE_REG) |= (MISC_MDC_MDIO_PINS); \
1958 +#define HAL_MISC_DISABLE_MDC_MDIO_PINS() \
1960 + (MISC_GPIOB_PIN_ENABLE_REG) &= ~(MISC_MDC_MDIO_PINS); \
1963 +#define HAL_MISC_ENABLE_NIC_COL_PINS() \
1965 + (MISC_GPIOB_PIN_ENABLE_REG) |= (MISC_NIC_COL_PINS); \
1968 +#define HAL_MISC_DISABLE_NIC_COL_PINS() \
1970 + (MISC_GPIOB_PIN_ENABLE_REG) &= ~(MISC_NIC_COL_PINS); \
1973 +#define HAL_MISC_ENABLE_IDE_PINS() \
1975 + (MISC_GPIOB_PIN_ENABLE_REG) |= (MISC_IDE_PINS); \
1978 +#define HAL_MISC_DISABLE_IDE_PINS() \
1980 + (MISC_GPIOB_PIN_ENABLE_REG) &= ~(MISC_IDE_PINS); \
1983 +#define HAL_MISC_ENABLE_SRAM_BANK1_PINS() \
1985 + (MISC_GPIOB_PIN_ENABLE_REG) |= (MISC_SRAM_BANK1_PINS); \
1988 +#define HAL_MISC_DISABLE_SRAM_BANK1_PINS() \
1990 + (MISC_GPIOB_PIN_ENABLE_REG) &= ~(MISC_SRAM_BANK1_PINS); \
1993 +#define HAL_MISC_ENABLE_SRAM_BANK2_PINS() \
1995 + (MISC_GPIOB_PIN_ENABLE_REG) |= (MISC_SRAM_BANK2_PINS); \
1998 +#define HAL_MISC_DISABLE_SRAM_BANK2_PINS() \
2000 + (MISC_GPIOB_PIN_ENABLE_REG) &= ~(MISC_SRAM_BANK2_PINS); \
2003 +#define HAL_MISC_ENABLE_SRAM_BANK3_PINS() \
2005 + (MISC_GPIOB_PIN_ENABLE_REG) |= (MISC_SRAM_BANK3_PINS); \
2008 +#define HAL_MISC_DISABLE_SRAM_BANK3_PINS() \
2010 + (MISC_GPIOB_PIN_ENABLE_REG) &= ~(MISC_SRAM_BANK3_PINS); \
2013 +#define HAL_MISC_ENABLE_PCMCIA_PINS() \
2015 + (MISC_GPIOB_PIN_ENABLE_REG) |= (MISC_PCMCIA_PINS); \
2018 +#define HAL_MISC_DISABLE_PCMCIA_PINS() \
2020 + (MISC_GPIOB_PIN_ENABLE_REG) &= ~(MISC_PCMCIA_PINS); \
2023 +#define HAL_MISC_ENABLE_UART1_PINS() \
2025 + (MISC_GPIOB_PIN_ENABLE_REG) |= (MISC_UART1_PINS); \
2028 +#define HAL_MISC_DISABLE_UART1_PINS() \
2030 + (MISC_GPIOB_PIN_ENABLE_REG) &= ~(MISC_UART1_PINS); \
2033 +#define HAL_MISC_ENABLE_PCI_PINS() \
2035 + (MISC_GPIOB_PIN_ENABLE_REG) |= (MISC_PCI_PINS); \
2038 +#define HAL_MISC_DISABLE_PCI_PINS() \
2040 + (MISC_GPIOB_PIN_ENABLE_REG) &= ~(MISC_PCI_PINS); \
2043 +#define HAL_MISC_ENABLE_ALL_SHARED_GPIO_PINS() \
2045 + (MISC_GPIOA_PIN_ENABLE_REG) = (0x0); \
2046 + (MISC_GPIOB_PIN_ENABLE_REG) = (0x0); \
2049 +#define HAL_MISC_DISABLE_ALL_SHARED_GPIO_PINS() \
2051 + (MISC_GPIOA_PIN_ENABLE_REG) = (0xFFFFFFFF); \
2052 + (MISC_GPIOB_PIN_ENABLE_REG) = (0xFFFFFFFF); \
2055 +#define HAL_MISC_CONFIGURE_GPIOA_RESISTOR(pin_index, value) \
2057 + (MISC_GPIOA_RESISTOR_CONFIG_REG) &= ~(0x3 << (2 * pin_index)); \
2058 + (MISC_GPIOA_RESISTOR_CONFIG_REG) |= ((value & 0x3) << (2 * pin_index)); \
2061 +#define HAL_MISC_CONFIGURE_GPIOA_DRIVE_STRENGTH(pin_index, value) \
2063 + (MISC_GPIOA_DRIVE_STRENGTH_CONFIG_REG) &= ~(0x1 << pin_index); \
2064 + (MISC_GPIOA_DRIVE_STRENGTH_CONFIG_REG) |= (value << pin_index); \
2067 +#define HAL_MISC_SELECT_FAST_ETHERNET_PHY_LED_MODE0() \
2069 + (MISC_FAST_ETHERNET_PHY_CONFIG_REG) = (0x0); \
2072 +#define HAL_MISC_SELECT_FAST_ETHERNET_PHY_LED_MODE1() \
2074 + (MISC_FAST_ETHERNET_PHY_CONFIG_REG) = (0x1); \
2077 +#define HAL_MISC_SELECT_FAST_ETHERNET_PHY_LED_MODE2() \
2079 + (MISC_FAST_ETHERNET_PHY_CONFIG_REG) = (0x2); \
2082 +#define HAL_MISC_SELECT_FAST_ETHERNET_PHY_LED_MODE3() \
2084 + (MISC_FAST_ETHERNET_PHY_CONFIG_REG) = (0x3); \
2088 +#endif // end of #ifndef _STAR_MISC_H_