diff options
author | Uwe Kleine-König <Uwe.Kleine-Koenig@digi.com> | 2008-02-15 02:41:06 -0500 |
---|---|---|
committer | Uwe Kleine-König <Uwe.Kleine-Koenig@digi.com> | 2008-03-31 02:17:01 -0400 |
commit | 724ce5ee15ff4c4f3035110b683b990a3b33c832 (patch) | |
tree | 7b07d25bf64d2e6dad4495c847d1b24d9d5dca43 /include/asm-arm/arch-ns9xxx | |
parent | 3a581349b961f225893103a0fbbd065a831c5184 (diff) |
ns9xxx: prepare for adding support for Digi ns921x processors
The hardware team changed some things that were taken as being common to
all ns9xxx processors up to now.
This patch addresses:
- irqs: s/IRQ_/IRQ_NS9360_/
- system module registers: some registers are still general, their
definition lives now in include/asm-arm/arch-ns9xxx/regs-sys-common.h.
The ns9360 specific ones are in .../regs-sys-ns9360.h
As a result ns9360_systemclock cannot be static inline any more as its
definition needs regs-sys-ns9360.h. This becomes a real problem when
adding support for ns9215 as this will need regs-sys-ns9215.h and
including both files will not work. For the same reason
ns9360_reset() is now non-inline and gpio functions live in their own
file.
- register mapping: s/ns9xxx_map_io/ns9360_map_io/
- timer registers: move time.c to time-ns9360.c;
s/ns9xxx_timer/ns9360_timer/
Signed-off-by: Uwe Kleine-König <Uwe.Kleine-Koenig@digi.com>
Diffstat (limited to 'include/asm-arm/arch-ns9xxx')
-rw-r--r-- | include/asm-arm/arch-ns9xxx/clock.h | 71 | ||||
-rw-r--r-- | include/asm-arm/arch-ns9xxx/entry-macro.S | 4 | ||||
-rw-r--r-- | include/asm-arm/arch-ns9xxx/irqs.h | 67 | ||||
-rw-r--r-- | include/asm-arm/arch-ns9xxx/processor-ns9360.h | 32 | ||||
-rw-r--r-- | include/asm-arm/arch-ns9xxx/regs-sys-common.h | 31 | ||||
-rw-r--r-- | include/asm-arm/arch-ns9xxx/regs-sys-ns9360.h (renamed from include/asm-arm/arch-ns9xxx/regs-sys.h) | 25 | ||||
-rw-r--r-- | include/asm-arm/arch-ns9xxx/system.h | 17 |
7 files changed, 113 insertions, 134 deletions
diff --git a/include/asm-arm/arch-ns9xxx/clock.h b/include/asm-arm/arch-ns9xxx/clock.h deleted file mode 100644 index b943d3a92a1d..000000000000 --- a/include/asm-arm/arch-ns9xxx/clock.h +++ /dev/null | |||
@@ -1,71 +0,0 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-ns9xxx/clock.h | ||
3 | * | ||
4 | * Copyright (C) 2007 by Digi International Inc. | ||
5 | * All rights reserved. | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify it | ||
8 | * under the terms of the GNU General Public License version 2 as published by | ||
9 | * the Free Software Foundation. | ||
10 | */ | ||
11 | #ifndef __ASM_ARCH_CLOCK_H | ||
12 | #define __ASM_ARCH_CLOCK_H | ||
13 | |||
14 | #include <asm/arch-ns9xxx/regs-sys.h> | ||
15 | |||
16 | #define CRYSTAL 29491200 /* Hz */ | ||
17 | |||
18 | /* The HRM calls this value f_vco */ | ||
19 | static inline u32 ns9xxx_systemclock(void) __attribute__((const)); | ||
20 | static inline u32 ns9xxx_systemclock(void) | ||
21 | { | ||
22 | u32 pll = __raw_readl(SYS_PLL); | ||
23 | |||
24 | /* | ||
25 | * The system clock should be a multiple of HZ * TIMERCLOCKSELECT (in | ||
26 | * time.c). | ||
27 | * | ||
28 | * The following values are given: | ||
29 | * - TIMERCLOCKSELECT == 2^i for an i in {0 .. 6} | ||
30 | * - CRYSTAL == 29491200 == 2^17 * 3^2 * 5^2 | ||
31 | * - ND in {0 .. 31} | ||
32 | * - FS in {0 .. 3} | ||
33 | * | ||
34 | * Assuming the worst, we consider: | ||
35 | * - TIMERCLOCKSELECT == 64 | ||
36 | * - ND == 0 | ||
37 | * - FS == 3 | ||
38 | * | ||
39 | * So HZ should be a divisor of: | ||
40 | * (CRYSTAL * (ND + 1) >> FS) / TIMERCLOCKSELECT | ||
41 | * == (2^17 * 3^2 * 5^2 * 1 >> 3) / 64 | ||
42 | * == 2^8 * 3^2 * 5^2 | ||
43 | * == 57600 | ||
44 | * | ||
45 | * Currently HZ is defined to be 100 for this platform. | ||
46 | * | ||
47 | * Fine. | ||
48 | */ | ||
49 | return CRYSTAL * (REGGETIM(pll, SYS_PLL, ND) + 1) | ||
50 | >> REGGETIM(pll, SYS_PLL, FS); | ||
51 | } | ||
52 | |||
53 | static inline u32 ns9xxx_cpuclock(void) __attribute__((const)); | ||
54 | static inline u32 ns9xxx_cpuclock(void) | ||
55 | { | ||
56 | return ns9xxx_systemclock() / 2; | ||
57 | } | ||
58 | |||
59 | static inline u32 ns9xxx_ahbclock(void) __attribute__((const)); | ||
60 | static inline u32 ns9xxx_ahbclock(void) | ||
61 | { | ||
62 | return ns9xxx_systemclock() / 4; | ||
63 | } | ||
64 | |||
65 | static inline u32 ns9xxx_bbusclock(void) __attribute__((const)); | ||
66 | static inline u32 ns9xxx_bbusclock(void) | ||
67 | { | ||
68 | return ns9xxx_systemclock() / 8; | ||
69 | } | ||
70 | |||
71 | #endif /* ifndef __ASM_ARCH_CLOCK_H */ | ||
diff --git a/include/asm-arm/arch-ns9xxx/entry-macro.S b/include/asm-arm/arch-ns9xxx/entry-macro.S index 5c706dd2379c..89a21c530468 100644 --- a/include/asm-arm/arch-ns9xxx/entry-macro.S +++ b/include/asm-arm/arch-ns9xxx/entry-macro.S | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * include/asm-arm/arch-ns9xxx/entry-macro.S | 2 | * include/asm-arm/arch-ns9xxx/entry-macro.S |
3 | * | 3 | * |
4 | * Copyright (C) 2006 by Digi International Inc. | 4 | * Copyright (C) 2006,2007 by Digi International Inc. |
5 | * All rights reserved. | 5 | * All rights reserved. |
6 | * | 6 | * |
7 | * This program is free software; you can redistribute it and/or modify it | 7 | * This program is free software; you can redistribute it and/or modify it |
@@ -9,7 +9,7 @@ | |||
9 | * the Free Software Foundation. | 9 | * the Free Software Foundation. |
10 | */ | 10 | */ |
11 | #include <asm/hardware.h> | 11 | #include <asm/hardware.h> |
12 | #include <asm/arch-ns9xxx/regs-sys.h> | 12 | #include <asm/arch-ns9xxx/regs-sys-common.h> |
13 | 13 | ||
14 | .macro get_irqnr_preamble, base, tmp | 14 | .macro get_irqnr_preamble, base, tmp |
15 | ldr \base, =SYS_ISRADDR | 15 | ldr \base, =SYS_ISRADDR |
diff --git a/include/asm-arm/arch-ns9xxx/irqs.h b/include/asm-arm/arch-ns9xxx/irqs.h index 25d8d28b27f3..e83d48ec42c9 100644 --- a/include/asm-arm/arch-ns9xxx/irqs.h +++ b/include/asm-arm/arch-ns9xxx/irqs.h | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * include/asm-arm/arch-ns9xxx/irqs.h | 2 | * include/asm-arm/arch-ns9xxx/irqs.h |
3 | * | 3 | * |
4 | * Copyright (C) 2006 by Digi International Inc. | 4 | * Copyright (C) 2006,2007 by Digi International Inc. |
5 | * All rights reserved. | 5 | * All rights reserved. |
6 | * | 6 | * |
7 | * This program is free software; you can redistribute it and/or modify it | 7 | * This program is free software; you can redistribute it and/or modify it |
@@ -11,38 +11,39 @@ | |||
11 | #ifndef __ASM_ARCH_IRQS_H | 11 | #ifndef __ASM_ARCH_IRQS_H |
12 | #define __ASM_ARCH_IRQS_H | 12 | #define __ASM_ARCH_IRQS_H |
13 | 13 | ||
14 | #define IRQ_WATCHDOG 0 | 14 | /* NetSilicon 9360 */ |
15 | #define IRQ_AHBBUSERR 1 | 15 | #define IRQ_NS9XXX_WATCHDOG 0 |
16 | #define IRQ_BBUSAGG 2 | 16 | #define IRQ_NS9XXX_AHBBUSERR 1 |
17 | #define IRQ_NS9360_BBUSAGG 2 | ||
17 | /* irq 3 is reserved for NS9360 */ | 18 | /* irq 3 is reserved for NS9360 */ |
18 | #define IRQ_ETHRX 4 | 19 | #define IRQ_NS9XXX_ETHRX 4 |
19 | #define IRQ_ETHTX 5 | 20 | #define IRQ_NS9XXX_ETHTX 5 |
20 | #define IRQ_ETHPHY 6 | 21 | #define IRQ_NS9XXX_ETHPHY 6 |
21 | #define IRQ_LCD 7 | 22 | #define IRQ_NS9360_LCD 7 |
22 | #define IRQ_SERBRX 8 | 23 | #define IRQ_NS9360_SERBRX 8 |
23 | #define IRQ_SERBTX 9 | 24 | #define IRQ_NS9360_SERBTX 9 |
24 | #define IRQ_SERARX 10 | 25 | #define IRQ_NS9360_SERARX 10 |
25 | #define IRQ_SERATX 11 | 26 | #define IRQ_NS9360_SERATX 11 |
26 | #define IRQ_SERCRX 12 | 27 | #define IRQ_NS9360_SERCRX 12 |
27 | #define IRQ_SERCTX 13 | 28 | #define IRQ_NS9360_SERCTX 13 |
28 | #define IRQ_I2C 14 | 29 | #define IRQ_NS9360_I2C 14 |
29 | #define IRQ_BBUSDMA 15 | 30 | #define IRQ_NS9360_BBUSDMA 15 |
30 | #define IRQ_TIMER0 16 | 31 | #define IRQ_NS9360_TIMER0 16 |
31 | #define IRQ_TIMER1 17 | 32 | #define IRQ_NS9360_TIMER1 17 |
32 | #define IRQ_TIMER2 18 | 33 | #define IRQ_NS9360_TIMER2 18 |
33 | #define IRQ_TIMER3 19 | 34 | #define IRQ_NS9360_TIMER3 19 |
34 | #define IRQ_TIMER4 20 | 35 | #define IRQ_NS9360_TIMER4 20 |
35 | #define IRQ_TIMER5 21 | 36 | #define IRQ_NS9360_TIMER5 21 |
36 | #define IRQ_TIMER6 22 | 37 | #define IRQ_NS9360_TIMER6 22 |
37 | #define IRQ_TIMER7 23 | 38 | #define IRQ_NS9360_TIMER7 23 |
38 | #define IRQ_RTC 24 | 39 | #define IRQ_NS9360_RTC 24 |
39 | #define IRQ_USBHOST 25 | 40 | #define IRQ_NS9360_USBHOST 25 |
40 | #define IRQ_USBDEVICE 26 | 41 | #define IRQ_NS9360_USBDEVICE 26 |
41 | #define IRQ_IEEE1284 27 | 42 | #define IRQ_NS9360_IEEE1284 27 |
42 | #define IRQ_EXT0 28 | 43 | #define IRQ_NS9XXX_EXT0 28 |
43 | #define IRQ_EXT1 29 | 44 | #define IRQ_NS9XXX_EXT1 29 |
44 | #define IRQ_EXT2 30 | 45 | #define IRQ_NS9XXX_EXT2 30 |
45 | #define IRQ_EXT3 31 | 46 | #define IRQ_NS9XXX_EXT3 31 |
46 | 47 | ||
47 | #define BBUS_IRQ(irq) (32 + irq) | 48 | #define BBUS_IRQ(irq) (32 + irq) |
48 | 49 | ||
@@ -67,7 +68,7 @@ | |||
67 | /* | 68 | /* |
68 | * these Interrupts are specific for the a9m9750dev board. | 69 | * these Interrupts are specific for the a9m9750dev board. |
69 | * They are generated by an FPGA that interrupts the CPU on | 70 | * They are generated by an FPGA that interrupts the CPU on |
70 | * IRQ_EXT2 | 71 | * IRQ_NS9360_EXT2 |
71 | */ | 72 | */ |
72 | #define FPGA_IRQ(irq) (64 + irq) | 73 | #define FPGA_IRQ(irq) (64 + irq) |
73 | 74 | ||
diff --git a/include/asm-arm/arch-ns9xxx/processor-ns9360.h b/include/asm-arm/arch-ns9xxx/processor-ns9360.h new file mode 100644 index 000000000000..f3aa6c50dbe5 --- /dev/null +++ b/include/asm-arm/arch-ns9xxx/processor-ns9360.h | |||
@@ -0,0 +1,32 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-ns9xxx/processor-ns9360.h | ||
3 | * | ||
4 | * Copyright (C) 2007 by Digi International Inc. | ||
5 | * All rights reserved. | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify it | ||
8 | * under the terms of the GNU General Public License version 2 as published by | ||
9 | * the Free Software Foundation. | ||
10 | */ | ||
11 | #ifndef __ASM_ARCH_PROCESSORNS9360_H | ||
12 | #define __ASM_ARCH_PROCESSORNS9360_H | ||
13 | |||
14 | #include <linux/init.h> | ||
15 | |||
16 | void ns9360_reset(char mode); | ||
17 | |||
18 | unsigned long ns9360_systemclock(void) __attribute__((const)); | ||
19 | |||
20 | static inline unsigned long ns9360_cpuclock(void) __attribute__((const)); | ||
21 | static inline unsigned long ns9360_cpuclock(void) | ||
22 | { | ||
23 | return ns9360_systemclock() / 2; | ||
24 | } | ||
25 | |||
26 | void __init ns9360_map_io(void); | ||
27 | |||
28 | extern struct sys_timer ns9360_timer; | ||
29 | |||
30 | int ns9360_gpio_configure(unsigned gpio, int inv, int func); | ||
31 | |||
32 | #endif /* ifndef __ASM_ARCH_PROCESSORNS9360_H */ | ||
diff --git a/include/asm-arm/arch-ns9xxx/regs-sys-common.h b/include/asm-arm/arch-ns9xxx/regs-sys-common.h new file mode 100644 index 000000000000..956c57cb781f --- /dev/null +++ b/include/asm-arm/arch-ns9xxx/regs-sys-common.h | |||
@@ -0,0 +1,31 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-ns9xxx/regs-sys-common.h | ||
3 | * | ||
4 | * Copyright (C) 2007 by Digi International Inc. | ||
5 | * All rights reserved. | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify it | ||
8 | * under the terms of the GNU General Public License version 2 as published by | ||
9 | * the Free Software Foundation. | ||
10 | */ | ||
11 | |||
12 | #ifndef __ASM_ARCH_REGSSYSCOMMON_H | ||
13 | #define __ASM_ARCH_REGSSYSCOMMON_H | ||
14 | #include <asm/hardware.h> | ||
15 | |||
16 | /* Interrupt Vector Address Register Level x */ | ||
17 | #define SYS_IVA(x) __REG2(0xa09000c4, (x)) | ||
18 | |||
19 | /* Interrupt Configuration registers */ | ||
20 | #define SYS_IC(x) __REG2(0xa0900144, (x)) | ||
21 | |||
22 | /* ISRADDR */ | ||
23 | #define SYS_ISRADDR __REG(0xa0900164) | ||
24 | |||
25 | /* Interrupt Status Active */ | ||
26 | #define SYS_ISA __REG(0xa0900168) | ||
27 | |||
28 | /* Interrupt Status Raw */ | ||
29 | #define SYS_ISR __REG(0xa090016c) | ||
30 | |||
31 | #endif /* ifndef __ASM_ARCH_REGSSYSCOMMON_H */ | ||
diff --git a/include/asm-arm/arch-ns9xxx/regs-sys.h b/include/asm-arm/arch-ns9xxx/regs-sys-ns9360.h index 749262f86204..318b6945afb6 100644 --- a/include/asm-arm/arch-ns9xxx/regs-sys.h +++ b/include/asm-arm/arch-ns9xxx/regs-sys-ns9360.h | |||
@@ -1,15 +1,15 @@ | |||
1 | /* | 1 | /* |
2 | * include/asm-arm/arch-ns9xxx/regs-sys.h | 2 | * include/asm-arm/arch-ns9xxx/regs-sys-ns9360.h |
3 | * | 3 | * |
4 | * Copyright (C) 2006 by Digi International Inc. | 4 | * Copyright (C) 2006,2007 by Digi International Inc. |
5 | * All rights reserved. | 5 | * All rights reserved. |
6 | * | 6 | * |
7 | * This program is free software; you can redistribute it and/or modify it | 7 | * This program is free software; you can redistribute it and/or modify it |
8 | * under the terms of the GNU General Public License version 2 as published by | 8 | * under the terms of the GNU General Public License version 2 as published by |
9 | * the Free Software Foundation. | 9 | * the Free Software Foundation. |
10 | */ | 10 | */ |
11 | #ifndef __ASM_ARCH_REGSSYS_H | 11 | #ifndef __ASM_ARCH_REGSSYSNS9360_H |
12 | #define __ASM_ARCH_REGSSYS_H | 12 | #define __ASM_ARCH_REGSSYSNS9360_H |
13 | 13 | ||
14 | #include <asm/hardware.h> | 14 | #include <asm/hardware.h> |
15 | 15 | ||
@@ -27,21 +27,6 @@ | |||
27 | /* Timer x Read register */ | 27 | /* Timer x Read register */ |
28 | #define SYS_TR(x) __REG2(0xa0900084, (x)) | 28 | #define SYS_TR(x) __REG2(0xa0900084, (x)) |
29 | 29 | ||
30 | /* Interrupt Vector Address Register Level x */ | ||
31 | #define SYS_IVA(x) __REG2(0xa09000c4, (x)) | ||
32 | |||
33 | /* Interrupt Configuration registers */ | ||
34 | #define SYS_IC(x) __REG2(0xa0900144, (x)) | ||
35 | |||
36 | /* ISRADDR */ | ||
37 | #define SYS_ISRADDR __REG(0xa0900164) | ||
38 | |||
39 | /* Interrupt Status Active */ | ||
40 | #define SYS_ISA __REG(0xa0900168) | ||
41 | |||
42 | /* Interrupt Status Raw */ | ||
43 | #define SYS_ISR __REG(0xa090016c) | ||
44 | |||
45 | /* Timer Interrupt Status register */ | 30 | /* Timer Interrupt Status register */ |
46 | #define SYS_TIS __REG(0xa0900170) | 31 | #define SYS_TIS __REG(0xa0900170) |
47 | 32 | ||
@@ -160,4 +145,4 @@ | |||
160 | #define SYS_EIC_LVEDG_LEVEL __REGVAL(SYS_EIC_LVEDG, 0) | 145 | #define SYS_EIC_LVEDG_LEVEL __REGVAL(SYS_EIC_LVEDG, 0) |
161 | #define SYS_EIC_LVEDG_EDGE __REGVAL(SYS_EIC_LVEDG, 1) | 146 | #define SYS_EIC_LVEDG_EDGE __REGVAL(SYS_EIC_LVEDG, 1) |
162 | 147 | ||
163 | #endif /* ifndef __ASM_ARCH_REGSSYS_H */ | 148 | #endif /* ifndef __ASM_ARCH_REGSSYSNS9360_H */ |
diff --git a/include/asm-arm/arch-ns9xxx/system.h b/include/asm-arm/arch-ns9xxx/system.h index c1082bd8977c..1348073afe48 100644 --- a/include/asm-arm/arch-ns9xxx/system.h +++ b/include/asm-arm/arch-ns9xxx/system.h | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * include/asm-arm/arch-ns9xxx/system.h | 2 | * include/asm-arm/arch-ns9xxx/system.h |
3 | * | 3 | * |
4 | * Copyright (C) 2006 by Digi International Inc. | 4 | * Copyright (C) 2006,2007 by Digi International Inc. |
5 | * All rights reserved. | 5 | * All rights reserved. |
6 | * | 6 | * |
7 | * This program is free software; you can redistribute it and/or modify it | 7 | * This program is free software; you can redistribute it and/or modify it |
@@ -12,8 +12,8 @@ | |||
12 | #define __ASM_ARCH_SYSTEM_H | 12 | #define __ASM_ARCH_SYSTEM_H |
13 | 13 | ||
14 | #include <asm/proc-fns.h> | 14 | #include <asm/proc-fns.h> |
15 | #include <asm/arch-ns9xxx/regs-sys.h> | 15 | #include <asm/arch-ns9xxx/processor.h> |
16 | #include <asm/mach-types.h> | 16 | #include <asm/arch-ns9xxx/processor-ns9360.h> |
17 | 17 | ||
18 | static inline void arch_idle(void) | 18 | static inline void arch_idle(void) |
19 | { | 19 | { |
@@ -22,11 +22,12 @@ static inline void arch_idle(void) | |||
22 | 22 | ||
23 | static inline void arch_reset(char mode) | 23 | static inline void arch_reset(char mode) |
24 | { | 24 | { |
25 | u32 reg; | 25 | #ifdef CONFIG_PROCESSOR_NS9360 |
26 | 26 | if (processor_is_ns9360()) | |
27 | reg = __raw_readl(SYS_PLL) >> 16; | 27 | ns9360_reset(mode); |
28 | REGSET(reg, SYS_PLL, SWC, YES); | 28 | else |
29 | __raw_writel(reg, SYS_PLL); | 29 | #endif |
30 | BUG(); | ||
30 | 31 | ||
31 | BUG(); | 32 | BUG(); |
32 | } | 33 | } |