diff options
author | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-04-16 18:20:36 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-04-16 18:20:36 -0400 |
commit | 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 (patch) | |
tree | 0bba044c4ce775e45a88a51686b5d9f90697ea9d /include/asm-arm |
Linux-2.6.12-rc2v2.6.12-rc2
Initial git repository build. I'm not bothering with the full history,
even though we have it. We can create a separate "historical" git
archive of that later if we want to, and in the meantime it's about
3.2GB when imported into git - space that would just make the early
git days unnecessarily complicated, when we don't have a lot of good
infrastructure for it.
Let it rip!
Diffstat (limited to 'include/asm-arm')
531 files changed, 48911 insertions, 0 deletions
diff --git a/include/asm-arm/a.out.h b/include/asm-arm/a.out.h new file mode 100644 index 000000000000..3e5fe64c4394 --- /dev/null +++ b/include/asm-arm/a.out.h | |||
@@ -0,0 +1,39 @@ | |||
1 | #ifndef __ARM_A_OUT_H__ | ||
2 | #define __ARM_A_OUT_H__ | ||
3 | |||
4 | #include <linux/personality.h> | ||
5 | #include <asm/types.h> | ||
6 | |||
7 | struct exec | ||
8 | { | ||
9 | __u32 a_info; /* Use macros N_MAGIC, etc for access */ | ||
10 | __u32 a_text; /* length of text, in bytes */ | ||
11 | __u32 a_data; /* length of data, in bytes */ | ||
12 | __u32 a_bss; /* length of uninitialized data area for file, in bytes */ | ||
13 | __u32 a_syms; /* length of symbol table data in file, in bytes */ | ||
14 | __u32 a_entry; /* start address */ | ||
15 | __u32 a_trsize; /* length of relocation info for text, in bytes */ | ||
16 | __u32 a_drsize; /* length of relocation info for data, in bytes */ | ||
17 | }; | ||
18 | |||
19 | /* | ||
20 | * This is always the same | ||
21 | */ | ||
22 | #define N_TXTADDR(a) (0x00008000) | ||
23 | |||
24 | #define N_TRSIZE(a) ((a).a_trsize) | ||
25 | #define N_DRSIZE(a) ((a).a_drsize) | ||
26 | #define N_SYMSIZE(a) ((a).a_syms) | ||
27 | |||
28 | #define M_ARM 103 | ||
29 | |||
30 | #ifdef __KERNEL__ | ||
31 | #define STACK_TOP ((current->personality == PER_LINUX_32BIT) ? \ | ||
32 | TASK_SIZE : TASK_SIZE_26) | ||
33 | #endif | ||
34 | |||
35 | #ifndef LIBRARY_START_TEXT | ||
36 | #define LIBRARY_START_TEXT (0x00c00000) | ||
37 | #endif | ||
38 | |||
39 | #endif /* __A_OUT_GNU_H__ */ | ||
diff --git a/include/asm-arm/apm.h b/include/asm-arm/apm.h new file mode 100644 index 000000000000..3a50eb759c28 --- /dev/null +++ b/include/asm-arm/apm.h | |||
@@ -0,0 +1,65 @@ | |||
1 | /* -*- linux-c -*- | ||
2 | * | ||
3 | * (C) 2003 zecke@handhelds.org | ||
4 | * | ||
5 | * GPL version 2 | ||
6 | * | ||
7 | * based on arch/arm/kernel/apm.c | ||
8 | * factor out the information needed by architectures to provide | ||
9 | * apm status | ||
10 | * | ||
11 | * | ||
12 | */ | ||
13 | #ifndef ARM_ASM_SA1100_APM_H | ||
14 | #define ARM_ASM_SA1100_APM_H | ||
15 | |||
16 | #include <linux/config.h> | ||
17 | #include <linux/apm_bios.h> | ||
18 | |||
19 | /* | ||
20 | * This structure gets filled in by the machine specific 'get_power_status' | ||
21 | * implementation. Any fields which are not set default to a safe value. | ||
22 | */ | ||
23 | struct apm_power_info { | ||
24 | unsigned char ac_line_status; | ||
25 | #define APM_AC_OFFLINE 0 | ||
26 | #define APM_AC_ONLINE 1 | ||
27 | #define APM_AC_BACKUP 2 | ||
28 | #define APM_AC_UNKNOWN 0xff | ||
29 | |||
30 | unsigned char battery_status; | ||
31 | #define APM_BATTERY_STATUS_HIGH 0 | ||
32 | #define APM_BATTERY_STATUS_LOW 1 | ||
33 | #define APM_BATTERY_STATUS_CRITICAL 2 | ||
34 | #define APM_BATTERY_STATUS_CHARGING 3 | ||
35 | #define APM_BATTERY_STATUS_NOT_PRESENT 4 | ||
36 | #define APM_BATTERY_STATUS_UNKNOWN 0xff | ||
37 | |||
38 | unsigned char battery_flag; | ||
39 | #define APM_BATTERY_FLAG_HIGH (1 << 0) | ||
40 | #define APM_BATTERY_FLAG_LOW (1 << 1) | ||
41 | #define APM_BATTERY_FLAG_CRITICAL (1 << 2) | ||
42 | #define APM_BATTERY_FLAG_CHARGING (1 << 3) | ||
43 | #define APM_BATTERY_FLAG_NOT_PRESENT (1 << 7) | ||
44 | #define APM_BATTERY_FLAG_UNKNOWN 0xff | ||
45 | |||
46 | int battery_life; | ||
47 | int time; | ||
48 | int units; | ||
49 | #define APM_UNITS_MINS 0 | ||
50 | #define APM_UNITS_SECS 1 | ||
51 | #define APM_UNITS_UNKNOWN -1 | ||
52 | |||
53 | }; | ||
54 | |||
55 | /* | ||
56 | * This allows machines to provide their own "apm get power status" function. | ||
57 | */ | ||
58 | extern void (*apm_get_power_status)(struct apm_power_info *); | ||
59 | |||
60 | /* | ||
61 | * Queue an event (APM_SYS_SUSPEND or APM_CRITICAL_SUSPEND) | ||
62 | */ | ||
63 | void apm_queue_event(apm_event_t event); | ||
64 | |||
65 | #endif | ||
diff --git a/include/asm-arm/arch-cl7500/acornfb.h b/include/asm-arm/arch-cl7500/acornfb.h new file mode 100644 index 000000000000..3867231a4470 --- /dev/null +++ b/include/asm-arm/arch-cl7500/acornfb.h | |||
@@ -0,0 +1,34 @@ | |||
1 | #include <linux/config.h> | ||
2 | #define acornfb_valid_pixrate(var) (var->pixclock >= 39325 && var->pixclock <= 40119) | ||
3 | |||
4 | static inline void | ||
5 | acornfb_vidc20_find_rates(struct vidc_timing *vidc, | ||
6 | struct fb_var_screeninfo *var) | ||
7 | { | ||
8 | u_int bandwidth; | ||
9 | |||
10 | vidc->control |= VIDC20_CTRL_PIX_CK; | ||
11 | |||
12 | /* Calculate bandwidth */ | ||
13 | bandwidth = var->pixclock * 8 / var->bits_per_pixel; | ||
14 | |||
15 | /* Encode bandwidth as VIDC20 setting */ | ||
16 | if (bandwidth > 16667*2) | ||
17 | vidc->control |= VIDC20_CTRL_FIFO_16; | ||
18 | else if (bandwidth > 13333*2) | ||
19 | vidc->control |= VIDC20_CTRL_FIFO_20; | ||
20 | else if (bandwidth > 11111*2) | ||
21 | vidc->control |= VIDC20_CTRL_FIFO_24; | ||
22 | else | ||
23 | vidc->control |= VIDC20_CTRL_FIFO_28; | ||
24 | |||
25 | vidc->pll_ctl = 0x2020; | ||
26 | } | ||
27 | |||
28 | #ifdef CONFIG_CHRONTEL_7003 | ||
29 | #define acornfb_default_control() VIDC20_CTRL_PIX_HCLK | ||
30 | #else | ||
31 | #define acornfb_default_control() VIDC20_CTRL_PIX_VCLK | ||
32 | #endif | ||
33 | |||
34 | #define acornfb_default_econtrol() VIDC20_ECTL_DAC | VIDC20_ECTL_REG(3) | VIDC20_ECTL_ECK | ||
diff --git a/include/asm-arm/arch-cl7500/debug-macro.S b/include/asm-arm/arch-cl7500/debug-macro.S new file mode 100644 index 000000000000..a5d489d7955a --- /dev/null +++ b/include/asm-arm/arch-cl7500/debug-macro.S | |||
@@ -0,0 +1,31 @@ | |||
1 | /* linux/include/asm-arm/arch-cl7500/debug-macro.S | ||
2 | * | ||
3 | * Debugging macro include header | ||
4 | * | ||
5 | * Copyright (C) 1994-1999 Russell King | ||
6 | * Moved from linux/arch/arm/kernel/debug.S by Ben Dooks | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | * | ||
12 | */ | ||
13 | |||
14 | .macro addruart,rx | ||
15 | mov \rx, #0xe0000000 | ||
16 | orr \rx, \rx, #0x00010000 | ||
17 | orr \rx, \rx, #0x00000be0 | ||
18 | .endm | ||
19 | |||
20 | .macro senduart,rd,rx | ||
21 | strb \rd, [\rx] | ||
22 | .endm | ||
23 | |||
24 | .macro busyuart,rd,rx | ||
25 | .endm | ||
26 | |||
27 | .macro waituart,rd,rx | ||
28 | 1001: ldrb \rd, [\rx, #0x14] | ||
29 | tst \rd, #0x20 | ||
30 | beq 1001b | ||
31 | .endm | ||
diff --git a/include/asm-arm/arch-cl7500/dma.h b/include/asm-arm/arch-cl7500/dma.h new file mode 100644 index 000000000000..1d6a8829d327 --- /dev/null +++ b/include/asm-arm/arch-cl7500/dma.h | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-cl7500/dma.h | ||
3 | * | ||
4 | * Copyright (C) 1999 Nexus Electronics Ltd. | ||
5 | */ | ||
6 | |||
7 | #ifndef __ASM_ARCH_DMA_H | ||
8 | #define __ASM_ARCH_DMA_H | ||
9 | |||
10 | /* DMA is not yet implemented! It should be the same as acorn, copy over.. */ | ||
11 | |||
12 | /* | ||
13 | * This is the maximum DMA address that can be DMAd to. | ||
14 | * There should not be more than (0xd0000000 - 0xc0000000) | ||
15 | * bytes of RAM. | ||
16 | */ | ||
17 | #define MAX_DMA_ADDRESS 0xd0000000 | ||
18 | #define MAX_DMA_CHANNELS 0 | ||
19 | |||
20 | #define DMA_S0 0 | ||
21 | |||
22 | #endif /* _ASM_ARCH_DMA_H */ | ||
diff --git a/include/asm-arm/arch-cl7500/entry-macro.S b/include/asm-arm/arch-cl7500/entry-macro.S new file mode 100644 index 000000000000..686f413f82d6 --- /dev/null +++ b/include/asm-arm/arch-cl7500/entry-macro.S | |||
@@ -0,0 +1,3 @@ | |||
1 | |||
2 | #include <asm/hardware/entry-macro-iomd.S> | ||
3 | |||
diff --git a/include/asm-arm/arch-cl7500/hardware.h b/include/asm-arm/arch-cl7500/hardware.h new file mode 100644 index 000000000000..2339b764f69f --- /dev/null +++ b/include/asm-arm/arch-cl7500/hardware.h | |||
@@ -0,0 +1,71 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-cl7500/hardware.h | ||
3 | * | ||
4 | * Copyright (C) 1996-1999 Russell King. | ||
5 | * Copyright (C) 1999 Nexus Electronics Ltd. | ||
6 | * | ||
7 | * This file contains the hardware definitions of the | ||
8 | * CL7500 evaluation board. | ||
9 | */ | ||
10 | #ifndef __ASM_ARCH_HARDWARE_H | ||
11 | #define __ASM_ARCH_HARDWARE_H | ||
12 | |||
13 | #include <asm/arch/memory.h> | ||
14 | #include <asm/hardware/iomd.h> | ||
15 | |||
16 | #ifdef __ASSEMBLY__ | ||
17 | #define IOMEM(x) x | ||
18 | #else | ||
19 | #define IOMEM(x) ((void __iomem *)(x)) | ||
20 | #endif | ||
21 | |||
22 | /* | ||
23 | * What hardware must be present | ||
24 | */ | ||
25 | #define HAS_IOMD | ||
26 | #define HAS_VIDC20 | ||
27 | |||
28 | /* Hardware addresses of major areas. | ||
29 | * *_START is the physical address | ||
30 | * *_SIZE is the size of the region | ||
31 | * *_BASE is the virtual address | ||
32 | */ | ||
33 | |||
34 | #define IO_START 0x03000000 /* I/O */ | ||
35 | #define IO_SIZE 0x01000000 | ||
36 | #define IO_BASE IOMEM(0xe0000000) | ||
37 | |||
38 | #define ISA_START 0x0c000000 /* ISA */ | ||
39 | #define ISA_SIZE 0x00010000 | ||
40 | #define ISA_BASE 0xe1000000 | ||
41 | |||
42 | #define FLASH_START 0x01000000 /* XXX */ | ||
43 | #define FLASH_SIZE 0x01000000 | ||
44 | #define FLASH_BASE 0xe2000000 | ||
45 | |||
46 | #define LED_START 0x0302B000 | ||
47 | #define LED_SIZE 0x00001000 | ||
48 | #define LED_BASE 0xe3000000 | ||
49 | #define LED_ADDRESS (LED_BASE + 0xa00) | ||
50 | |||
51 | /* Let's define SCREEN_START for CL7500, even though it's a lie. */ | ||
52 | #define SCREEN_START 0x02000000 /* VRAM */ | ||
53 | #define SCREEN_END 0xdfc00000 | ||
54 | #define SCREEN_BASE 0xdf800000 | ||
55 | |||
56 | #define FLUSH_BASE 0xdf000000 | ||
57 | |||
58 | #define VIDC_BASE (void __iomem *)0xe0400000 | ||
59 | #define IOMD_BASE IOMEM(0xe0200000) | ||
60 | #define IOC_BASE IOMEM(0xe0200000) | ||
61 | #define FLOPPYDMA_BASE IOMEM(0xe002a000) | ||
62 | #define PCIO_BASE IOMEM(0xe0010000) | ||
63 | |||
64 | #define FLUSH_BASE_PHYS 0x00000000 /* ROM */ | ||
65 | |||
66 | #define vidc_writel(val) __raw_writel(val, VIDC_BASE) | ||
67 | |||
68 | /* in/out bias for the ISA slot region */ | ||
69 | #define ISASLOT_IO 0x80400000 | ||
70 | |||
71 | #endif | ||
diff --git a/include/asm-arm/arch-cl7500/io.h b/include/asm-arm/arch-cl7500/io.h new file mode 100644 index 000000000000..f0113bc75630 --- /dev/null +++ b/include/asm-arm/arch-cl7500/io.h | |||
@@ -0,0 +1,253 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-cl7500/io.h | ||
3 | * from linux/include/asm-arm/arch-rpc/io.h | ||
4 | * | ||
5 | * Copyright (C) 1997 Russell King | ||
6 | * | ||
7 | * Modifications: | ||
8 | * 06-Dec-1997 RMK Created. | ||
9 | */ | ||
10 | #ifndef __ASM_ARM_ARCH_IO_H | ||
11 | #define __ASM_ARM_ARCH_IO_H | ||
12 | |||
13 | #define IO_SPACE_LIMIT 0xffffffff | ||
14 | |||
15 | /* | ||
16 | * GCC is totally crap at loading/storing data. We try to persuade it | ||
17 | * to do the right thing by using these whereever possible instead of | ||
18 | * the above. | ||
19 | */ | ||
20 | #define __arch_base_getb(b,o) \ | ||
21 | ({ \ | ||
22 | unsigned int v, r = (b); \ | ||
23 | __asm__ __volatile__( \ | ||
24 | "ldrb %0, [%1, %2]" \ | ||
25 | : "=r" (v) \ | ||
26 | : "r" (r), "Ir" (o)); \ | ||
27 | v; \ | ||
28 | }) | ||
29 | |||
30 | #define __arch_base_getl(b,o) \ | ||
31 | ({ \ | ||
32 | unsigned int v, r = (b); \ | ||
33 | __asm__ __volatile__( \ | ||
34 | "ldr %0, [%1, %2]" \ | ||
35 | : "=r" (v) \ | ||
36 | : "r" (r), "Ir" (o)); \ | ||
37 | v; \ | ||
38 | }) | ||
39 | |||
40 | #define __arch_base_putb(v,b,o) \ | ||
41 | ({ \ | ||
42 | unsigned int r = (b); \ | ||
43 | __asm__ __volatile__( \ | ||
44 | "strb %0, [%1, %2]" \ | ||
45 | : \ | ||
46 | : "r" (v), "r" (r), "Ir" (o)); \ | ||
47 | }) | ||
48 | |||
49 | #define __arch_base_putl(v,b,o) \ | ||
50 | ({ \ | ||
51 | unsigned int r = (b); \ | ||
52 | __asm__ __volatile__( \ | ||
53 | "str %0, [%1, %2]" \ | ||
54 | : \ | ||
55 | : "r" (v), "r" (r), "Ir" (o)); \ | ||
56 | }) | ||
57 | |||
58 | /* | ||
59 | * We use two different types of addressing - PC style addresses, and ARM | ||
60 | * addresses. PC style accesses the PC hardware with the normal PC IO | ||
61 | * addresses, eg 0x3f8 for serial#1. ARM addresses are 0x80000000+ | ||
62 | * and are translated to the start of IO. Note that all addresses are | ||
63 | * shifted left! | ||
64 | */ | ||
65 | #define __PORT_PCIO(x) (!((x) & 0x80000000)) | ||
66 | |||
67 | /* | ||
68 | * Dynamic IO functions - let the compiler | ||
69 | * optimize the expressions | ||
70 | */ | ||
71 | static inline void __outb (unsigned int value, unsigned int port) | ||
72 | { | ||
73 | unsigned long temp; | ||
74 | __asm__ __volatile__( | ||
75 | "tst %2, #0x80000000\n\t" | ||
76 | "mov %0, %4\n\t" | ||
77 | "addeq %0, %0, %3\n\t" | ||
78 | "strb %1, [%0, %2, lsl #2] @ outb" | ||
79 | : "=&r" (temp) | ||
80 | : "r" (value), "r" (port), "Ir" (PCIO_BASE - IO_BASE), "Ir" (IO_BASE) | ||
81 | : "cc"); | ||
82 | } | ||
83 | |||
84 | static inline void __outw (unsigned int value, unsigned int port) | ||
85 | { | ||
86 | unsigned long temp; | ||
87 | __asm__ __volatile__( | ||
88 | "tst %2, #0x80000000\n\t" | ||
89 | "mov %0, %4\n\t" | ||
90 | "addeq %0, %0, %3\n\t" | ||
91 | "str %1, [%0, %2, lsl #2] @ outw" | ||
92 | : "=&r" (temp) | ||
93 | : "r" (value|value<<16), "r" (port), "Ir" (PCIO_BASE - IO_BASE), "Ir" (IO_BASE) | ||
94 | : "cc"); | ||
95 | } | ||
96 | |||
97 | static inline void __outl (unsigned int value, unsigned int port) | ||
98 | { | ||
99 | unsigned long temp; | ||
100 | __asm__ __volatile__( | ||
101 | "tst %2, #0x80000000\n\t" | ||
102 | "mov %0, %4\n\t" | ||
103 | "addeq %0, %0, %3\n\t" | ||
104 | "str %1, [%0, %2, lsl #2] @ outl" | ||
105 | : "=&r" (temp) | ||
106 | : "r" (value), "r" (port), "Ir" (PCIO_BASE - IO_BASE), "Ir" (IO_BASE) | ||
107 | : "cc"); | ||
108 | } | ||
109 | |||
110 | #define DECLARE_DYN_IN(sz,fnsuffix,instr) \ | ||
111 | static inline unsigned sz __in##fnsuffix (unsigned int port) \ | ||
112 | { \ | ||
113 | unsigned long temp, value; \ | ||
114 | __asm__ __volatile__( \ | ||
115 | "tst %2, #0x80000000\n\t" \ | ||
116 | "mov %0, %4\n\t" \ | ||
117 | "addeq %0, %0, %3\n\t" \ | ||
118 | "ldr" instr " %1, [%0, %2, lsl #2] @ in" #fnsuffix \ | ||
119 | : "=&r" (temp), "=r" (value) \ | ||
120 | : "r" (port), "Ir" (PCIO_BASE - IO_BASE), "Ir" (IO_BASE) \ | ||
121 | : "cc"); \ | ||
122 | return (unsigned sz)value; \ | ||
123 | } | ||
124 | |||
125 | static inline unsigned int __ioaddr (unsigned int port) \ | ||
126 | { \ | ||
127 | if (__PORT_PCIO(port)) \ | ||
128 | return (unsigned int)(PCIO_BASE + (port << 2)); \ | ||
129 | else \ | ||
130 | return (unsigned int)(IO_BASE + (port << 2)); \ | ||
131 | } | ||
132 | |||
133 | #define DECLARE_IO(sz,fnsuffix,instr) \ | ||
134 | DECLARE_DYN_IN(sz,fnsuffix,instr) | ||
135 | |||
136 | DECLARE_IO(char,b,"b") | ||
137 | DECLARE_IO(short,w,"") | ||
138 | DECLARE_IO(int,l,"") | ||
139 | |||
140 | #undef DECLARE_IO | ||
141 | #undef DECLARE_DYN_IN | ||
142 | |||
143 | /* | ||
144 | * Constant address IO functions | ||
145 | * | ||
146 | * These have to be macros for the 'J' constraint to work - | ||
147 | * +/-4096 immediate operand. | ||
148 | */ | ||
149 | #define __outbc(value,port) \ | ||
150 | ({ \ | ||
151 | if (__PORT_PCIO((port))) \ | ||
152 | __asm__ __volatile__( \ | ||
153 | "strb %0, [%1, %2] @ outbc" \ | ||
154 | : : "r" (value), "r" (PCIO_BASE), "Jr" ((port) << 2)); \ | ||
155 | else \ | ||
156 | __asm__ __volatile__( \ | ||
157 | "strb %0, [%1, %2] @ outbc" \ | ||
158 | : : "r" (value), "r" (IO_BASE), "r" ((port) << 2)); \ | ||
159 | }) | ||
160 | |||
161 | #define __inbc(port) \ | ||
162 | ({ \ | ||
163 | unsigned char result; \ | ||
164 | if (__PORT_PCIO((port))) \ | ||
165 | __asm__ __volatile__( \ | ||
166 | "ldrb %0, [%1, %2] @ inbc" \ | ||
167 | : "=r" (result) : "r" (PCIO_BASE), "Jr" ((port) << 2)); \ | ||
168 | else \ | ||
169 | __asm__ __volatile__( \ | ||
170 | "ldrb %0, [%1, %2] @ inbc" \ | ||
171 | : "=r" (result) : "r" (IO_BASE), "r" ((port) << 2)); \ | ||
172 | result; \ | ||
173 | }) | ||
174 | |||
175 | #define __outwc(value,port) \ | ||
176 | ({ \ | ||
177 | unsigned long v = value; \ | ||
178 | if (__PORT_PCIO((port))) \ | ||
179 | __asm__ __volatile__( \ | ||
180 | "str %0, [%1, %2] @ outwc" \ | ||
181 | : : "r" (v|v<<16), "r" (PCIO_BASE), "Jr" ((port) << 2)); \ | ||
182 | else \ | ||
183 | __asm__ __volatile__( \ | ||
184 | "str %0, [%1, %2] @ outwc" \ | ||
185 | : : "r" (v|v<<16), "r" (IO_BASE), "r" ((port) << 2)); \ | ||
186 | }) | ||
187 | |||
188 | #define __inwc(port) \ | ||
189 | ({ \ | ||
190 | unsigned short result; \ | ||
191 | if (__PORT_PCIO((port))) \ | ||
192 | __asm__ __volatile__( \ | ||
193 | "ldr %0, [%1, %2] @ inwc" \ | ||
194 | : "=r" (result) : "r" (PCIO_BASE), "Jr" ((port) << 2)); \ | ||
195 | else \ | ||
196 | __asm__ __volatile__( \ | ||
197 | "ldr %0, [%1, %2] @ inwc" \ | ||
198 | : "=r" (result) : "r" (IO_BASE), "r" ((port) << 2)); \ | ||
199 | result & 0xffff; \ | ||
200 | }) | ||
201 | |||
202 | #define __outlc(value,port) \ | ||
203 | ({ \ | ||
204 | unsigned long v = value; \ | ||
205 | if (__PORT_PCIO((port))) \ | ||
206 | __asm__ __volatile__( \ | ||
207 | "str %0, [%1, %2] @ outlc" \ | ||
208 | : : "r" (v), "r" (PCIO_BASE), "Jr" ((port) << 2)); \ | ||
209 | else \ | ||
210 | __asm__ __volatile__( \ | ||
211 | "str %0, [%1, %2] @ outlc" \ | ||
212 | : : "r" (v), "r" (IO_BASE), "r" ((port) << 2)); \ | ||
213 | }) | ||
214 | |||
215 | #define __inlc(port) \ | ||
216 | ({ \ | ||
217 | unsigned long result; \ | ||
218 | if (__PORT_PCIO((port))) \ | ||
219 | __asm__ __volatile__( \ | ||
220 | "ldr %0, [%1, %2] @ inlc" \ | ||
221 | : "=r" (result) : "r" (PCIO_BASE), "Jr" ((port) << 2)); \ | ||
222 | else \ | ||
223 | __asm__ __volatile__( \ | ||
224 | "ldr %0, [%1, %2] @ inlc" \ | ||
225 | : "=r" (result) : "r" (IO_BASE), "r" ((port) << 2)); \ | ||
226 | result; \ | ||
227 | }) | ||
228 | |||
229 | #define __ioaddrc(port) \ | ||
230 | (__PORT_PCIO((port)) ? PCIO_BASE + ((port) << 2) : IO_BASE + ((port) << 2)) | ||
231 | |||
232 | #define inb(p) (__builtin_constant_p((p)) ? __inbc(p) : __inb(p)) | ||
233 | #define inw(p) (__builtin_constant_p((p)) ? __inwc(p) : __inw(p)) | ||
234 | #define inl(p) (__builtin_constant_p((p)) ? __inlc(p) : __inl(p)) | ||
235 | #define outb(v,p) (__builtin_constant_p((p)) ? __outbc(v,p) : __outb(v,p)) | ||
236 | #define outw(v,p) (__builtin_constant_p((p)) ? __outwc(v,p) : __outw(v,p)) | ||
237 | #define outl(v,p) (__builtin_constant_p((p)) ? __outlc(v,p) : __outl(v,p)) | ||
238 | #define __ioaddr(p) (__builtin_constant_p((p)) ? __ioaddr(p) : __ioaddrc(p)) | ||
239 | /* the following macro is deprecated */ | ||
240 | #define ioaddr(port) __ioaddr((port)) | ||
241 | |||
242 | #define insb(p,d,l) __raw_readsb(__ioaddr(p),d,l) | ||
243 | #define insw(p,d,l) __raw_readsw(__ioaddr(p),d,l) | ||
244 | |||
245 | #define outsb(p,d,l) __raw_writesb(__ioaddr(p),d,l) | ||
246 | #define outsw(p,d,l) __raw_writesw(__ioaddr(p),d,l) | ||
247 | |||
248 | /* | ||
249 | * 1:1 mapping for ioremapped regions. | ||
250 | */ | ||
251 | #define __mem_pci(x) (x) | ||
252 | |||
253 | #endif | ||
diff --git a/include/asm-arm/arch-cl7500/irq.h b/include/asm-arm/arch-cl7500/irq.h new file mode 100644 index 000000000000..4b286331f3f8 --- /dev/null +++ b/include/asm-arm/arch-cl7500/irq.h | |||
@@ -0,0 +1,32 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-cl7500/irq.h | ||
3 | * | ||
4 | * Copyright (C) 1996 Russell King | ||
5 | * Copyright (C) 1999, 2001 Nexus Electronics Ltd. | ||
6 | * | ||
7 | * Changelog: | ||
8 | * 10-10-1996 RMK Brought up to date with arch-sa110eval | ||
9 | * 22-08-1998 RMK Restructured IRQ routines | ||
10 | * 11-08-1999 PJB Created ARM7500 version, derived from RiscPC code | ||
11 | */ | ||
12 | |||
13 | #include <asm/hardware/iomd.h> | ||
14 | #include <asm/io.h> | ||
15 | |||
16 | static inline int fixup_irq(unsigned int irq) | ||
17 | { | ||
18 | if (irq == IRQ_ISA) { | ||
19 | int isabits = *((volatile unsigned int *)0xe002b700); | ||
20 | if (isabits == 0) { | ||
21 | printk("Spurious ISA IRQ!\n"); | ||
22 | return irq; | ||
23 | } | ||
24 | irq = IRQ_ISA_BASE; | ||
25 | while (!(isabits & 1)) { | ||
26 | irq++; | ||
27 | isabits >>= 1; | ||
28 | } | ||
29 | } | ||
30 | |||
31 | return irq; | ||
32 | } | ||
diff --git a/include/asm-arm/arch-cl7500/irqs.h b/include/asm-arm/arch-cl7500/irqs.h new file mode 100644 index 000000000000..f20996eadf19 --- /dev/null +++ b/include/asm-arm/arch-cl7500/irqs.h | |||
@@ -0,0 +1,66 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-cl7500/irqs.h | ||
3 | * | ||
4 | * Copyright (C) 1999 Nexus Electronics Ltd | ||
5 | */ | ||
6 | |||
7 | #define IRQ_INT2 0 | ||
8 | #define IRQ_INT1 2 | ||
9 | #define IRQ_VSYNCPULSE 3 | ||
10 | #define IRQ_POWERON 4 | ||
11 | #define IRQ_TIMER0 5 | ||
12 | #define IRQ_TIMER1 6 | ||
13 | #define IRQ_FORCE 7 | ||
14 | #define IRQ_INT8 8 | ||
15 | #define IRQ_ISA 9 | ||
16 | #define IRQ_INT6 10 | ||
17 | #define IRQ_INT5 11 | ||
18 | #define IRQ_INT4 12 | ||
19 | #define IRQ_INT3 13 | ||
20 | #define IRQ_KEYBOARDTX 14 | ||
21 | #define IRQ_KEYBOARDRX 15 | ||
22 | |||
23 | #define IRQ_DMA0 16 | ||
24 | #define IRQ_DMA1 17 | ||
25 | #define IRQ_DMA2 18 | ||
26 | #define IRQ_DMA3 19 | ||
27 | #define IRQ_DMAS0 20 | ||
28 | #define IRQ_DMAS1 21 | ||
29 | |||
30 | #define IRQ_IOP0 24 | ||
31 | #define IRQ_IOP1 25 | ||
32 | #define IRQ_IOP2 26 | ||
33 | #define IRQ_IOP3 27 | ||
34 | #define IRQ_IOP4 28 | ||
35 | #define IRQ_IOP5 29 | ||
36 | #define IRQ_IOP6 30 | ||
37 | #define IRQ_IOP7 31 | ||
38 | |||
39 | #define IRQ_MOUSERX 40 | ||
40 | #define IRQ_MOUSETX 41 | ||
41 | #define IRQ_ADC 42 | ||
42 | #define IRQ_EVENT1 43 | ||
43 | #define IRQ_EVENT2 44 | ||
44 | |||
45 | #define IRQ_ISA_BASE 48 | ||
46 | #define IRQ_ISA_3 48 | ||
47 | #define IRQ_ISA_4 49 | ||
48 | #define IRQ_ISA_5 50 | ||
49 | #define IRQ_ISA_7 51 | ||
50 | #define IRQ_ISA_9 52 | ||
51 | #define IRQ_ISA_10 53 | ||
52 | #define IRQ_ISA_11 54 | ||
53 | #define IRQ_ISA_14 55 | ||
54 | |||
55 | #define FIQ_INT9 0 | ||
56 | #define FIQ_INT5 1 | ||
57 | #define FIQ_INT6 4 | ||
58 | #define FIQ_INT8 6 | ||
59 | #define FIQ_FORCE 7 | ||
60 | |||
61 | /* | ||
62 | * This is the offset of the FIQ "IRQ" numbers | ||
63 | */ | ||
64 | #define FIQ_START 64 | ||
65 | |||
66 | #define IRQ_TIMER IRQ_TIMER0 | ||
diff --git a/include/asm-arm/arch-cl7500/memory.h b/include/asm-arm/arch-cl7500/memory.h new file mode 100644 index 000000000000..9776bba8e585 --- /dev/null +++ b/include/asm-arm/arch-cl7500/memory.h | |||
@@ -0,0 +1,29 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-cl7500/memory.h | ||
3 | * | ||
4 | * Copyright (c) 1996,1997,1998 Russell King. | ||
5 | * | ||
6 | * Changelog: | ||
7 | * 20-Oct-1996 RMK Created | ||
8 | * 31-Dec-1997 RMK Fixed definitions to reduce warnings | ||
9 | * 11-Jan-1998 RMK Uninlined to reduce hits on cache | ||
10 | * 08-Feb-1998 RMK Added __virt_to_bus and __bus_to_virt | ||
11 | * 21-Mar-1999 RMK Renamed to memory.h | ||
12 | * RMK Added TASK_SIZE and PAGE_OFFSET | ||
13 | */ | ||
14 | #ifndef __ASM_ARCH_MEMORY_H | ||
15 | #define __ASM_ARCH_MEMORY_H | ||
16 | |||
17 | /* | ||
18 | * Physical DRAM offset. | ||
19 | */ | ||
20 | #define PHYS_OFFSET (0x10000000UL) | ||
21 | |||
22 | /* | ||
23 | * These are exactly the same on the RiscPC as the | ||
24 | * physical memory view. | ||
25 | */ | ||
26 | #define __virt_to_bus(x) __virt_to_phys(x) | ||
27 | #define __bus_to_virt(x) __phys_to_virt(x) | ||
28 | |||
29 | #endif | ||
diff --git a/include/asm-arm/arch-cl7500/param.h b/include/asm-arm/arch-cl7500/param.h new file mode 100644 index 000000000000..974bf69fbb1a --- /dev/null +++ b/include/asm-arm/arch-cl7500/param.h | |||
@@ -0,0 +1,5 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-cl7500/param.h | ||
3 | * | ||
4 | * Copyright (C) 1999 Nexus Electronics Ltd | ||
5 | */ | ||
diff --git a/include/asm-arm/arch-cl7500/system.h b/include/asm-arm/arch-cl7500/system.h new file mode 100644 index 000000000000..a9505d6a74d7 --- /dev/null +++ b/include/asm-arm/arch-cl7500/system.h | |||
@@ -0,0 +1,23 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-cl7500/system.h | ||
3 | * | ||
4 | * Copyright (c) 1999 Nexus Electronics Ltd. | ||
5 | */ | ||
6 | #ifndef __ASM_ARCH_SYSTEM_H | ||
7 | #define __ASM_ARCH_SYSTEM_H | ||
8 | |||
9 | #include <asm/hardware/iomd.h> | ||
10 | #include <asm/io.h> | ||
11 | |||
12 | static inline void arch_idle(void) | ||
13 | { | ||
14 | iomd_writeb(0, IOMD_SUSMODE); | ||
15 | } | ||
16 | |||
17 | #define arch_reset(mode) \ | ||
18 | do { \ | ||
19 | iomd_writeb(0, IOMD_ROMCR0); \ | ||
20 | cpu_reset(0); \ | ||
21 | } while (0) | ||
22 | |||
23 | #endif | ||
diff --git a/include/asm-arm/arch-cl7500/timex.h b/include/asm-arm/arch-cl7500/timex.h new file mode 100644 index 000000000000..8a4175fc0106 --- /dev/null +++ b/include/asm-arm/arch-cl7500/timex.h | |||
@@ -0,0 +1,13 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-cl7500/timex.h | ||
3 | * | ||
4 | * CL7500 architecture timex specifications | ||
5 | * | ||
6 | * Copyright (C) 1999 Nexus Electronics Ltd | ||
7 | */ | ||
8 | |||
9 | /* | ||
10 | * On the ARM7500, the clock ticks at 2MHz. | ||
11 | */ | ||
12 | #define CLOCK_TICK_RATE 2000000 | ||
13 | |||
diff --git a/include/asm-arm/arch-cl7500/uncompress.h b/include/asm-arm/arch-cl7500/uncompress.h new file mode 100644 index 000000000000..68601b3e3b95 --- /dev/null +++ b/include/asm-arm/arch-cl7500/uncompress.h | |||
@@ -0,0 +1,43 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-cl7500/uncompress.h | ||
3 | * | ||
4 | * Copyright (C) 1999, 2000 Nexus Electronics Ltd. | ||
5 | */ | ||
6 | |||
7 | #define BASE 0x03010000 | ||
8 | #define SERBASE (BASE + (0x2f8 << 2)) | ||
9 | |||
10 | static __inline__ void putc(char c) | ||
11 | { | ||
12 | while (!(*((volatile unsigned int *)(SERBASE + 0x14)) & 0x20)); | ||
13 | *((volatile unsigned int *)(SERBASE)) = c; | ||
14 | } | ||
15 | |||
16 | /* | ||
17 | * This does not append a newline | ||
18 | */ | ||
19 | static void putstr(const char *s) | ||
20 | { | ||
21 | while (*s) { | ||
22 | putc(*s); | ||
23 | if (*s == '\n') | ||
24 | putc('\r'); | ||
25 | s++; | ||
26 | } | ||
27 | } | ||
28 | |||
29 | static __inline__ void arch_decomp_setup(void) | ||
30 | { | ||
31 | int baud = 3686400 / (9600 * 32); | ||
32 | |||
33 | *((volatile unsigned int *)(SERBASE + 0xC)) = 0x80; | ||
34 | *((volatile unsigned int *)(SERBASE + 0x0)) = baud & 0xff; | ||
35 | *((volatile unsigned int *)(SERBASE + 0x4)) = (baud & 0xff00) >> 8; | ||
36 | *((volatile unsigned int *)(SERBASE + 0xC)) = 3; /* 8 bits */ | ||
37 | *((volatile unsigned int *)(SERBASE + 0x10)) = 3; /* DTR, RTS */ | ||
38 | } | ||
39 | |||
40 | /* | ||
41 | * nothing to do | ||
42 | */ | ||
43 | #define arch_decomp_wdog() | ||
diff --git a/include/asm-arm/arch-cl7500/vmalloc.h b/include/asm-arm/arch-cl7500/vmalloc.h new file mode 100644 index 000000000000..91883def4889 --- /dev/null +++ b/include/asm-arm/arch-cl7500/vmalloc.h | |||
@@ -0,0 +1,15 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-cl7500/vmalloc.h | ||
3 | */ | ||
4 | |||
5 | /* | ||
6 | * Just any arbitrary offset to the start of the vmalloc VM area: the | ||
7 | * current 8MB value just means that there will be a 8MB "hole" after the | ||
8 | * physical memory until the kernel virtual memory starts. That means that | ||
9 | * any out-of-bounds memory accesses will hopefully be caught. | ||
10 | * The vmalloc() routines leaves a hole of 4kB between each vmalloced | ||
11 | * area for the same reason. ;) | ||
12 | */ | ||
13 | #define VMALLOC_OFFSET (8*1024*1024) | ||
14 | #define VMALLOC_START (((unsigned long)high_memory + VMALLOC_OFFSET) & ~(VMALLOC_OFFSET-1)) | ||
15 | #define VMALLOC_END (PAGE_OFFSET + 0x1c000000) | ||
diff --git a/include/asm-arm/arch-clps711x/autcpu12.h b/include/asm-arm/arch-clps711x/autcpu12.h new file mode 100644 index 000000000000..1588a365f610 --- /dev/null +++ b/include/asm-arm/arch-clps711x/autcpu12.h | |||
@@ -0,0 +1,78 @@ | |||
1 | /* | ||
2 | * AUTCPU12 specific defines | ||
3 | * | ||
4 | * (c) 2001 Thomas Gleixner, autronix automation <gleixner@autronix.de> | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | * GNU General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License | ||
17 | * along with this program; if not, write to the Free Software | ||
18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
19 | */ | ||
20 | #ifndef __ASM_ARCH_AUTCPU12_H | ||
21 | #define __ASM_ARCH_AUTCPU12_H | ||
22 | |||
23 | /* | ||
24 | * The CS8900A ethernet chip has its I/O registers wired to chip select 2 | ||
25 | * (nCS2). This is the mapping for it. | ||
26 | */ | ||
27 | #define AUTCPU12_PHYS_CS8900A CS2_PHYS_BASE /* physical */ | ||
28 | #define AUTCPU12_VIRT_CS8900A (0xfe000000) /* virtual */ | ||
29 | |||
30 | /* | ||
31 | * The flash bank is wired to chip select 0 | ||
32 | */ | ||
33 | #define AUTCPU12_PHYS_FLASH CS0_PHYS_BASE /* physical */ | ||
34 | |||
35 | /* offset for device specific information structure */ | ||
36 | #define AUTCPU12_LCDINFO_OFFS (0x00010000) | ||
37 | /* | ||
38 | * Videomemory is the internal SRAM (CS 6) | ||
39 | */ | ||
40 | #define AUTCPU12_PHYS_VIDEO CS6_PHYS_BASE | ||
41 | #define AUTCPU12_VIRT_VIDEO (0xfd000000) | ||
42 | |||
43 | /* | ||
44 | * All special IO's are tied to CS1 | ||
45 | */ | ||
46 | #define AUTCPU12_PHYS_CHAR_LCD CS1_PHYS_BASE +0x00000000 /* physical */ | ||
47 | |||
48 | #define AUTCPU12_PHYS_NVRAM CS1_PHYS_BASE +0x02000000 /* physical */ | ||
49 | |||
50 | #define AUTCPU12_PHYS_CSAUX1 CS1_PHYS_BASE +0x04000000 /* physical */ | ||
51 | |||
52 | #define AUTCPU12_PHYS_SMC CS1_PHYS_BASE +0x06000000 /* physical */ | ||
53 | |||
54 | #define AUTCPU12_PHYS_CAN CS1_PHYS_BASE +0x08000000 /* physical */ | ||
55 | |||
56 | #define AUTCPU12_PHYS_TOUCH CS1_PHYS_BASE +0x0A000000 /* physical */ | ||
57 | |||
58 | #define AUTCPU12_PHYS_IO CS1_PHYS_BASE +0x0C000000 /* physical */ | ||
59 | |||
60 | #define AUTCPU12_PHYS_LPT CS1_PHYS_BASE +0x0E000000 /* physical */ | ||
61 | |||
62 | /* | ||
63 | * defines for smartmedia card access | ||
64 | */ | ||
65 | #define AUTCPU12_SMC_RDY (1<<2) | ||
66 | #define AUTCPU12_SMC_ALE (1<<3) | ||
67 | #define AUTCPU12_SMC_CLE (1<<4) | ||
68 | #define AUTCPU12_SMC_PORT_OFFSET PBDR | ||
69 | #define AUTCPU12_SMC_SELECT_OFFSET 0x10 | ||
70 | /* | ||
71 | * defines for lcd contrast | ||
72 | */ | ||
73 | #define AUTCPU12_DPOT_PORT_OFFSET PEDR | ||
74 | #define AUTCPU12_DPOT_CS (1<<0) | ||
75 | #define AUTCPU12_DPOT_CLK (1<<1) | ||
76 | #define AUTCPU12_DPOT_UD (1<<2) | ||
77 | |||
78 | #endif | ||
diff --git a/include/asm-arm/arch-clps711x/debug-macro.S b/include/asm-arm/arch-clps711x/debug-macro.S new file mode 100644 index 000000000000..bc0a5760722b --- /dev/null +++ b/include/asm-arm/arch-clps711x/debug-macro.S | |||
@@ -0,0 +1,46 @@ | |||
1 | /* linux/include/asm-arm/arch-clps711x/debug-macro.S | ||
2 | * | ||
3 | * Debugging macro include header | ||
4 | * | ||
5 | * Copyright (C) 1994-1999 Russell King | ||
6 | * Moved from linux/arch/arm/kernel/debug.S by Ben Dooks | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | * | ||
12 | */ | ||
13 | |||
14 | #include <asm/hardware/clps7111.h> | ||
15 | |||
16 | .macro addruart,rx | ||
17 | mrc p15, 0, \rx, c1, c0 | ||
18 | tst \rx, #1 @ MMU enabled? | ||
19 | moveq \rx, #CLPS7111_PHYS_BASE | ||
20 | movne \rx, #CLPS7111_VIRT_BASE | ||
21 | #ifndef CONFIG_DEBUG_CLPS711X_UART2 | ||
22 | add \rx, \rx, #0x0000 @ UART1 | ||
23 | #else | ||
24 | add \rx, \rx, #0x1000 @ UART2 | ||
25 | #endif | ||
26 | .endm | ||
27 | |||
28 | .macro senduart,rd,rx | ||
29 | str \rd, [\rx, #0x0480] @ UARTDR | ||
30 | .endm | ||
31 | |||
32 | .macro waituart,rd,rx | ||
33 | 1001: ldr \rd, [\rx, #0x0140] @ SYSFLGx | ||
34 | tst \rd, #1 << 11 @ UBUSYx | ||
35 | bne 1001b | ||
36 | .endm | ||
37 | |||
38 | .macro busyuart,rd,rx | ||
39 | tst \rx, #0x1000 @ UART2 does not have CTS here | ||
40 | bne 1002f | ||
41 | 1001: ldr \rd, [\rx, #0x0140] @ SYSFLGx | ||
42 | tst \rd, #1 << 8 @ CTS | ||
43 | bne 1001b | ||
44 | 1002: | ||
45 | .endm | ||
46 | |||
diff --git a/include/asm-arm/arch-clps711x/dma.h b/include/asm-arm/arch-clps711x/dma.h new file mode 100644 index 000000000000..3c4c5c843252 --- /dev/null +++ b/include/asm-arm/arch-clps711x/dma.h | |||
@@ -0,0 +1,28 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-clps711x/dma.h | ||
3 | * | ||
4 | * Copyright (C) 1997,1998 Russell King | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | * GNU General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License | ||
17 | * along with this program; if not, write to the Free Software | ||
18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
19 | */ | ||
20 | #ifndef __ASM_ARCH_DMA_H | ||
21 | #define __ASM_ARCH_DMA_H | ||
22 | |||
23 | #define MAX_DMA_ADDRESS 0xffffffff | ||
24 | |||
25 | #define MAX_DMA_CHANNELS 0 | ||
26 | |||
27 | #endif /* _ASM_ARCH_DMA_H */ | ||
28 | |||
diff --git a/include/asm-arm/arch-clps711x/entry-macro.S b/include/asm-arm/arch-clps711x/entry-macro.S new file mode 100644 index 000000000000..b31079a1d4a9 --- /dev/null +++ b/include/asm-arm/arch-clps711x/entry-macro.S | |||
@@ -0,0 +1,51 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-CLPS711x/entry-macro.S | ||
3 | * | ||
4 | * Low-level IRQ helper macros for CLPS711X-based platforms | ||
5 | * | ||
6 | * This file is licensed under the terms of the GNU General Public | ||
7 | * License version 2. This program is licensed "as is" without any | ||
8 | * warranty of any kind, whether express or implied. | ||
9 | */ | ||
10 | #include <asm/hardware/clps7111.h> | ||
11 | |||
12 | .macro disable_fiq | ||
13 | .endm | ||
14 | |||
15 | #if (INTSR2 - INTSR1) != (INTMR2 - INTMR1) | ||
16 | #error INTSR stride != INTMR stride | ||
17 | #endif | ||
18 | |||
19 | .macro get_irqnr_and_base, irqnr, stat, base, mask | ||
20 | mov \base, #CLPS7111_BASE | ||
21 | ldr \stat, [\base, #INTSR1] | ||
22 | ldr \mask, [\base, #INTMR1] | ||
23 | mov \irqnr, #4 | ||
24 | mov \mask, \mask, lsl #16 | ||
25 | and \stat, \stat, \mask, lsr #16 | ||
26 | movs \stat, \stat, lsr #4 | ||
27 | bne 1001f | ||
28 | |||
29 | add \base, \base, #INTSR2 - INTSR1 | ||
30 | ldr \stat, [\base, #INTSR1] | ||
31 | ldr \mask, [\base, #INTMR1] | ||
32 | mov \irqnr, #16 | ||
33 | mov \mask, \mask, lsl #16 | ||
34 | and \stat, \stat, \mask, lsr #16 | ||
35 | |||
36 | 1001: tst \stat, #255 | ||
37 | addeq \irqnr, \irqnr, #8 | ||
38 | moveq \stat, \stat, lsr #8 | ||
39 | tst \stat, #15 | ||
40 | addeq \irqnr, \irqnr, #4 | ||
41 | moveq \stat, \stat, lsr #4 | ||
42 | tst \stat, #3 | ||
43 | addeq \irqnr, \irqnr, #2 | ||
44 | moveq \stat, \stat, lsr #2 | ||
45 | tst \stat, #1 | ||
46 | addeq \irqnr, \irqnr, #1 | ||
47 | moveq \stat, \stat, lsr #1 | ||
48 | tst \stat, #1 @ bit 0 should be set | ||
49 | .endm | ||
50 | |||
51 | |||
diff --git a/include/asm-arm/arch-clps711x/hardware.h b/include/asm-arm/arch-clps711x/hardware.h new file mode 100644 index 000000000000..1386871e1a5a --- /dev/null +++ b/include/asm-arm/arch-clps711x/hardware.h | |||
@@ -0,0 +1,238 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-clps711x/hardware.h | ||
3 | * | ||
4 | * This file contains the hardware definitions of the Prospector P720T. | ||
5 | * | ||
6 | * Copyright (C) 2000 Deep Blue Solutions Ltd. | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License as published by | ||
10 | * the Free Software Foundation; either version 2 of the License, or | ||
11 | * (at your option) any later version. | ||
12 | * | ||
13 | * This program is distributed in the hope that it will be useful, | ||
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
16 | * GNU General Public License for more details. | ||
17 | * | ||
18 | * You should have received a copy of the GNU General Public License | ||
19 | * along with this program; if not, write to the Free Software | ||
20 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
21 | */ | ||
22 | #ifndef __ASM_ARCH_HARDWARE_H | ||
23 | #define __ASM_ARCH_HARDWARE_H | ||
24 | |||
25 | #include <linux/config.h> | ||
26 | |||
27 | #define CLPS7111_VIRT_BASE 0xff000000 | ||
28 | #define CLPS7111_BASE CLPS7111_VIRT_BASE | ||
29 | |||
30 | /* | ||
31 | * The physical addresses that the external chip select signals map to is | ||
32 | * dependent on the setting of the nMEDCHG signal on EP7211 and EP7212 | ||
33 | * processors. CONFIG_EP72XX_BOOT_ROM is only available if these | ||
34 | * processors are in use. | ||
35 | */ | ||
36 | #ifndef CONFIG_EP72XX_ROM_BOOT | ||
37 | #define CS0_PHYS_BASE (0x00000000) | ||
38 | #define CS1_PHYS_BASE (0x10000000) | ||
39 | #define CS2_PHYS_BASE (0x20000000) | ||
40 | #define CS3_PHYS_BASE (0x30000000) | ||
41 | #define CS4_PHYS_BASE (0x40000000) | ||
42 | #define CS5_PHYS_BASE (0x50000000) | ||
43 | #define CS6_PHYS_BASE (0x60000000) | ||
44 | #define CS7_PHYS_BASE (0x70000000) | ||
45 | #else | ||
46 | #define CS0_PHYS_BASE (0x70000000) | ||
47 | #define CS1_PHYS_BASE (0x60000000) | ||
48 | #define CS2_PHYS_BASE (0x50000000) | ||
49 | #define CS3_PHYS_BASE (0x40000000) | ||
50 | #define CS4_PHYS_BASE (0x30000000) | ||
51 | #define CS5_PHYS_BASE (0x20000000) | ||
52 | #define CS6_PHYS_BASE (0x10000000) | ||
53 | #define CS7_PHYS_BASE (0x00000000) | ||
54 | #endif | ||
55 | |||
56 | #if defined (CONFIG_ARCH_EP7211) | ||
57 | |||
58 | #define EP7211_VIRT_BASE CLPS7111_VIRT_BASE | ||
59 | #define EP7211_BASE CLPS7111_VIRT_BASE | ||
60 | #include <asm/hardware/ep7211.h> | ||
61 | |||
62 | #elif defined (CONFIG_ARCH_EP7212) | ||
63 | |||
64 | #define EP7212_VIRT_BASE CLPS7111_VIRT_BASE | ||
65 | #define EP7212_BASE CLPS7111_VIRT_BASE | ||
66 | #include <asm/hardware/ep7212.h> | ||
67 | |||
68 | #endif | ||
69 | |||
70 | #define SYSPLD_VIRT_BASE 0xfe000000 | ||
71 | #define SYSPLD_BASE SYSPLD_VIRT_BASE | ||
72 | |||
73 | #ifndef __ASSEMBLER__ | ||
74 | |||
75 | #define PCIO_BASE IO_BASE | ||
76 | |||
77 | #endif | ||
78 | |||
79 | |||
80 | #if defined (CONFIG_ARCH_AUTCPU12) | ||
81 | |||
82 | #define CS89712_VIRT_BASE CLPS7111_VIRT_BASE | ||
83 | #define CS89712_BASE CLPS7111_VIRT_BASE | ||
84 | |||
85 | #include <asm/hardware/clps7111.h> | ||
86 | #include <asm/hardware/ep7212.h> | ||
87 | #include <asm/hardware/cs89712.h> | ||
88 | |||
89 | #endif | ||
90 | |||
91 | |||
92 | #if defined (CONFIG_ARCH_CDB89712) | ||
93 | |||
94 | #include <asm/hardware/clps7111.h> | ||
95 | #include <asm/hardware/ep7212.h> | ||
96 | #include <asm/hardware/cs89712.h> | ||
97 | |||
98 | /* dynamic ioremap() areas */ | ||
99 | #define FLASH_START 0x00000000 | ||
100 | #define FLASH_SIZE 0x800000 | ||
101 | #define FLASH_WIDTH 4 | ||
102 | |||
103 | #define SRAM_START 0x60000000 | ||
104 | #define SRAM_SIZE 0xc000 | ||
105 | #define SRAM_WIDTH 4 | ||
106 | |||
107 | #define BOOTROM_START 0x70000000 | ||
108 | #define BOOTROM_SIZE 0x80 | ||
109 | #define BOOTROM_WIDTH 4 | ||
110 | |||
111 | |||
112 | /* static cdb89712_map_io() areas */ | ||
113 | #define REGISTER_START 0x80000000 | ||
114 | #define REGISTER_SIZE 0x4000 | ||
115 | #define REGISTER_BASE 0xff000000 | ||
116 | |||
117 | #define ETHER_START 0x20000000 | ||
118 | #define ETHER_SIZE 0x1000 | ||
119 | #define ETHER_BASE 0xfe000000 | ||
120 | |||
121 | #endif | ||
122 | |||
123 | |||
124 | #if defined (CONFIG_ARCH_EDB7211) | ||
125 | |||
126 | /* | ||
127 | * The extra 8 lines of the keyboard matrix are wired to chip select 3 (nCS3) | ||
128 | * and repeat across it. This is the mapping for it. | ||
129 | * | ||
130 | * In jumpered boot mode, nCS3 is mapped to 0x4000000, not 0x3000000. This | ||
131 | * was cause for much consternation and headscratching. This should probably | ||
132 | * be made a compile/run time kernel option. | ||
133 | */ | ||
134 | #define EP7211_PHYS_EXTKBD CS3_PHYS_BASE /* physical */ | ||
135 | |||
136 | #define EP7211_VIRT_EXTKBD (0xfd000000) /* virtual */ | ||
137 | |||
138 | |||
139 | /* | ||
140 | * The CS8900A ethernet chip has its I/O registers wired to chip select 2 | ||
141 | * (nCS2). This is the mapping for it. | ||
142 | * | ||
143 | * In jumpered boot mode, nCS2 is mapped to 0x5000000, not 0x2000000. This | ||
144 | * was cause for much consternation and headscratching. This should probably | ||
145 | * be made a compile/run time kernel option. | ||
146 | */ | ||
147 | #define EP7211_PHYS_CS8900A CS2_PHYS_BASE /* physical */ | ||
148 | |||
149 | #define EP7211_VIRT_CS8900A (0xfc000000) /* virtual */ | ||
150 | |||
151 | |||
152 | /* | ||
153 | * The two flash banks are wired to chip selects 0 and 1. This is the mapping | ||
154 | * for them. | ||
155 | * | ||
156 | * nCS0 and nCS1 are at 0x70000000 and 0x60000000, respectively, when running | ||
157 | * in jumpered boot mode. | ||
158 | */ | ||
159 | #define EP7211_PHYS_FLASH1 CS0_PHYS_BASE /* physical */ | ||
160 | #define EP7211_PHYS_FLASH2 CS1_PHYS_BASE /* physical */ | ||
161 | |||
162 | #define EP7211_VIRT_FLASH1 (0xfa000000) /* virtual */ | ||
163 | #define EP7211_VIRT_FLASH2 (0xfb000000) /* virtual */ | ||
164 | |||
165 | #endif /* CONFIG_ARCH_EDB7211 */ | ||
166 | |||
167 | |||
168 | /* | ||
169 | * Relevant bits in port D, which controls power to the various parts of | ||
170 | * the LCD on the EDB7211. | ||
171 | */ | ||
172 | #define EDB_PD1_LCD_DC_DC_EN (1<<1) | ||
173 | #define EDB_PD2_LCDEN (1<<2) | ||
174 | #define EDB_PD3_LCDBL (1<<3) | ||
175 | |||
176 | |||
177 | #if defined (CONFIG_ARCH_CEIVA) | ||
178 | |||
179 | #define CEIVA_VIRT_BASE CLPS7111_VIRT_BASE | ||
180 | #define CEIVA_BASE CLPS7111_VIRT_BASE | ||
181 | |||
182 | #include <asm/hardware/clps7111.h> | ||
183 | #include <asm/hardware/ep7212.h> | ||
184 | |||
185 | |||
186 | /* | ||
187 | * The two flash banks are wired to chip selects 0 and 1. This is the mapping | ||
188 | * for them. | ||
189 | * | ||
190 | * nCS0 and nCS1 are at 0x70000000 and 0x60000000, respectively, when running | ||
191 | * in jumpered boot mode. | ||
192 | */ | ||
193 | #define CEIVA_PHYS_FLASH1 CS0_PHYS_BASE /* physical */ | ||
194 | #define CEIVA_PHYS_FLASH2 CS1_PHYS_BASE /* physical */ | ||
195 | |||
196 | #define CEIVA_VIRT_FLASH1 (0xfa000000) /* virtual */ | ||
197 | #define CEIVA_VIRT_FLASH2 (0xfb000000) /* virtual */ | ||
198 | |||
199 | #define CEIVA_FLASH_SIZE 0x100000 | ||
200 | #define CEIVA_FLASH_WIDTH 2 | ||
201 | |||
202 | #define SRAM_START 0x60000000 | ||
203 | #define SRAM_SIZE 0xc000 | ||
204 | #define SRAM_WIDTH 4 | ||
205 | |||
206 | #define BOOTROM_START 0x70000000 | ||
207 | #define BOOTROM_SIZE 0x80 | ||
208 | #define BOOTROM_WIDTH 4 | ||
209 | |||
210 | /* | ||
211 | * SED1355 LCD controller | ||
212 | */ | ||
213 | #define CEIVA_PHYS_SED1355 CS2_PHYS_BASE | ||
214 | #define CEIVA_VIRT_SED1355 (0xfc000000) | ||
215 | |||
216 | /* | ||
217 | * Relevant bits in port D, which controls power to the various parts of | ||
218 | * the LCD on the Ceiva Photo Max, and reset to the LCD controller. | ||
219 | */ | ||
220 | |||
221 | // Reset line to SED1355 (must be high to operate) | ||
222 | #define CEIVA_PD1_LCDRST (1<<1) | ||
223 | // LCD panel enable (set to one, to enable LCD) | ||
224 | #define CEIVA_PD4_LCDEN (1<<4) | ||
225 | // Backlight (set to one, to turn on backlight | ||
226 | #define CEIVA_PD5_LCDBL (1<<5) | ||
227 | |||
228 | /* | ||
229 | * Relevant bits in port B, which report the status of the buttons. | ||
230 | */ | ||
231 | |||
232 | // White button | ||
233 | #define CEIVA_PB4_WHT_BTN (1<<4) | ||
234 | // Black button | ||
235 | #define CEIVA_PB0_BLK_BTN (1<<0) | ||
236 | #endif // #if defined (CONFIG_ARCH_CEIVA) | ||
237 | |||
238 | #endif | ||
diff --git a/include/asm-arm/arch-clps711x/io.h b/include/asm-arm/arch-clps711x/io.h new file mode 100644 index 000000000000..14d7e8da5453 --- /dev/null +++ b/include/asm-arm/arch-clps711x/io.h | |||
@@ -0,0 +1,37 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-clps711x/io.h | ||
3 | * | ||
4 | * Copyright (C) 1999 ARM Limited | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | * GNU General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License | ||
17 | * along with this program; if not, write to the Free Software | ||
18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
19 | */ | ||
20 | #ifndef __ASM_ARM_ARCH_IO_H | ||
21 | #define __ASM_ARM_ARCH_IO_H | ||
22 | |||
23 | #define IO_SPACE_LIMIT 0xffffffff | ||
24 | |||
25 | #define __io(a) ((void __iomem *)(a)) | ||
26 | #define __mem_pci(a) (a) | ||
27 | #define __mem_isa(a) (a) | ||
28 | |||
29 | /* | ||
30 | * We don't support ins[lb]/outs[lb]. Make them fault. | ||
31 | */ | ||
32 | #define __raw_readsb(p,d,l) do { *(int *)0 = 0; } while (0) | ||
33 | #define __raw_readsl(p,d,l) do { *(int *)0 = 0; } while (0) | ||
34 | #define __raw_writesb(p,d,l) do { *(int *)0 = 0; } while (0) | ||
35 | #define __raw_writesl(p,d,l) do { *(int *)0 = 0; } while (0) | ||
36 | |||
37 | #endif | ||
diff --git a/include/asm-arm/arch-clps711x/irqs.h b/include/asm-arm/arch-clps711x/irqs.h new file mode 100644 index 000000000000..76025dc87637 --- /dev/null +++ b/include/asm-arm/arch-clps711x/irqs.h | |||
@@ -0,0 +1,53 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-clps711x/irqs.h | ||
3 | * | ||
4 | * Copyright (C) 2000 Deep Blue Solutions Ltd. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | * GNU General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License | ||
17 | * along with this program; if not, write to the Free Software | ||
18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
19 | */ | ||
20 | |||
21 | /* | ||
22 | * Interrupts from INTSR1 | ||
23 | */ | ||
24 | #define IRQ_CSINT 4 | ||
25 | #define IRQ_EINT1 5 | ||
26 | #define IRQ_EINT2 6 | ||
27 | #define IRQ_EINT3 7 | ||
28 | #define IRQ_TC1OI 8 | ||
29 | #define IRQ_TC2OI 9 | ||
30 | #define IRQ_RTCMI 10 | ||
31 | #define IRQ_TINT 11 | ||
32 | #define IRQ_UTXINT1 12 | ||
33 | #define IRQ_URXINT1 13 | ||
34 | #define IRQ_UMSINT 14 | ||
35 | #define IRQ_SSEOTI 15 | ||
36 | |||
37 | #define INT1_IRQS (0x0000fff0) | ||
38 | #define INT1_ACK_IRQS (0x00004f10) | ||
39 | |||
40 | /* | ||
41 | * Interrupts from INTSR2 | ||
42 | */ | ||
43 | #define IRQ_KBDINT (16+0) /* bit 0 */ | ||
44 | #define IRQ_SS2RX (16+1) /* bit 1 */ | ||
45 | #define IRQ_SS2TX (16+2) /* bit 2 */ | ||
46 | #define IRQ_UTXINT2 (16+12) /* bit 12 */ | ||
47 | #define IRQ_URXINT2 (16+13) /* bit 13 */ | ||
48 | |||
49 | #define INT2_IRQS (0x30070000) | ||
50 | #define INT2_ACK_IRQS (0x00010000) | ||
51 | |||
52 | #define NR_IRQS 30 | ||
53 | |||
diff --git a/include/asm-arm/arch-clps711x/memory.h b/include/asm-arm/arch-clps711x/memory.h new file mode 100644 index 000000000000..bd978947db42 --- /dev/null +++ b/include/asm-arm/arch-clps711x/memory.h | |||
@@ -0,0 +1,128 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-clps711x/memory.h | ||
3 | * | ||
4 | * Copyright (C) 1999 ARM Limited | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | * GNU General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License | ||
17 | * along with this program; if not, write to the Free Software | ||
18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
19 | */ | ||
20 | #ifndef __ASM_ARCH_MEMORY_H | ||
21 | #define __ASM_ARCH_MEMORY_H | ||
22 | |||
23 | #include <linux/config.h> | ||
24 | |||
25 | /* | ||
26 | * Physical DRAM offset. | ||
27 | */ | ||
28 | #define PHYS_OFFSET (0xc0000000UL) | ||
29 | |||
30 | /* | ||
31 | * Virtual view <-> DMA view memory address translations | ||
32 | * virt_to_bus: Used to translate the virtual address to an | ||
33 | * address suitable to be passed to set_dma_addr | ||
34 | * bus_to_virt: Used to convert an address for DMA operations | ||
35 | * to an address that the kernel can use. | ||
36 | */ | ||
37 | |||
38 | #if defined(CONFIG_ARCH_CDB89712) | ||
39 | |||
40 | #define __virt_to_bus(x) (x) | ||
41 | #define __bus_to_virt(x) (x) | ||
42 | |||
43 | #elif defined (CONFIG_ARCH_AUTCPU12) | ||
44 | |||
45 | #define __virt_to_bus(x) (x) | ||
46 | #define __bus_to_virt(x) (x) | ||
47 | |||
48 | #else | ||
49 | |||
50 | #define __virt_to_bus(x) ((x) - PAGE_OFFSET) | ||
51 | #define __bus_to_virt(x) ((x) + PAGE_OFFSET) | ||
52 | |||
53 | #endif | ||
54 | |||
55 | |||
56 | /* | ||
57 | * Like the SA1100, the EDB7211 has a large gap between physical RAM | ||
58 | * banks. In 2.2, the Psion (CL-PS7110) port added custom support for | ||
59 | * discontiguous physical memory. In 2.4, we can use the standard | ||
60 | * Linux NUMA support. | ||
61 | * | ||
62 | * This is not necessary for EP7211 implementations with only one used | ||
63 | * memory bank. For those systems, simply undefine CONFIG_DISCONTIGMEM. | ||
64 | */ | ||
65 | |||
66 | #ifdef CONFIG_DISCONTIGMEM | ||
67 | /* | ||
68 | * Because of the wide memory address space between physical RAM banks on the | ||
69 | * SA1100, it's much more convenient to use Linux's NUMA support to implement | ||
70 | * our memory map representation. Assuming all memory nodes have equal access | ||
71 | * characteristics, we then have generic discontiguous memory support. | ||
72 | * | ||
73 | * Of course, all this isn't mandatory for SA1100 implementations with only | ||
74 | * one used memory bank. For those, simply undefine CONFIG_DISCONTIGMEM. | ||
75 | * | ||
76 | * The nodes are matched with the physical memory bank addresses which are | ||
77 | * incidentally the same as virtual addresses. | ||
78 | * | ||
79 | * node 0: 0xc0000000 - 0xc7ffffff | ||
80 | * node 1: 0xc8000000 - 0xcfffffff | ||
81 | * node 2: 0xd0000000 - 0xd7ffffff | ||
82 | * node 3: 0xd8000000 - 0xdfffffff | ||
83 | */ | ||
84 | |||
85 | /* | ||
86 | * Given a kernel address, find the home node of the underlying memory. | ||
87 | */ | ||
88 | #define KVADDR_TO_NID(addr) \ | ||
89 | (((unsigned long)(addr) - PAGE_OFFSET) >> NODE_MAX_MEM_SHIFT) | ||
90 | |||
91 | /* | ||
92 | * Given a page frame number, convert it to a node id. | ||
93 | */ | ||
94 | #define PFN_TO_NID(pfn) \ | ||
95 | (((pfn) - PHYS_PFN_OFFSET) >> (NODE_MAX_MEM_SHIFT - PAGE_SHIFT)) | ||
96 | |||
97 | /* | ||
98 | * Given a kaddr, ADDR_TO_MAPBASE finds the owning node of the memory | ||
99 | * and returns the mem_map of that node. | ||
100 | */ | ||
101 | #define ADDR_TO_MAPBASE(kaddr) \ | ||
102 | NODE_MEM_MAP(KVADDR_TO_NID((unsigned long)(kaddr))) | ||
103 | |||
104 | #define PFN_TO_MAPBASE(pfn) NODE_MEM_MAP(PFN_TO_NID(pfn)) | ||
105 | |||
106 | /* | ||
107 | * Given a kaddr, LOCAL_MAR_NR finds the owning node of the memory | ||
108 | * and returns the index corresponding to the appropriate page in the | ||
109 | * node's mem_map. | ||
110 | */ | ||
111 | #define LOCAL_MAP_NR(addr) \ | ||
112 | (((unsigned long)(addr) & (NODE_MAX_MEM_SIZE - 1)) >> PAGE_SHIFT) | ||
113 | |||
114 | /* | ||
115 | * The PS7211 allows up to 256MB max per DRAM bank, but the EDB7211 | ||
116 | * uses only one of the two banks (bank #1). However, even within | ||
117 | * bank #1, memory is discontiguous. | ||
118 | * | ||
119 | * The EDB7211 has two 8MB DRAM areas with 8MB of empty space between | ||
120 | * them, so we use 24 for the node max shift to get 16MB node sizes. | ||
121 | */ | ||
122 | #define NODE_MAX_MEM_SHIFT 24 | ||
123 | #define NODE_MAX_MEM_SIZE (1<<NODE_MAX_MEM_SHIFT) | ||
124 | |||
125 | #endif /* CONFIG_DISCONTIGMEM */ | ||
126 | |||
127 | #endif | ||
128 | |||
diff --git a/include/asm-arm/arch-clps711x/param.h b/include/asm-arm/arch-clps711x/param.h new file mode 100644 index 000000000000..86f6bd29623d --- /dev/null +++ b/include/asm-arm/arch-clps711x/param.h | |||
@@ -0,0 +1,19 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-clps711x/param.h | ||
3 | * | ||
4 | * Copyright (C) 2000 Deep Blue Solutions Ltd. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | * GNU General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License | ||
17 | * along with this program; if not, write to the Free Software | ||
18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
19 | */ | ||
diff --git a/include/asm-arm/arch-clps711x/syspld.h b/include/asm-arm/arch-clps711x/syspld.h new file mode 100644 index 000000000000..960578a22a8e --- /dev/null +++ b/include/asm-arm/arch-clps711x/syspld.h | |||
@@ -0,0 +1,121 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-clps711x/syspld.h | ||
3 | * | ||
4 | * System Control PLD register definitions. | ||
5 | * | ||
6 | * Copyright (C) 2000 Deep Blue Solutions Ltd. | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License as published by | ||
10 | * the Free Software Foundation; either version 2 of the License, or | ||
11 | * (at your option) any later version. | ||
12 | * | ||
13 | * This program is distributed in the hope that it will be useful, | ||
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
16 | * GNU General Public License for more details. | ||
17 | * | ||
18 | * You should have received a copy of the GNU General Public License | ||
19 | * along with this program; if not, write to the Free Software | ||
20 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
21 | */ | ||
22 | #ifndef __ASM_ARCH_SYSPLD_H | ||
23 | #define __ASM_ARCH_SYSPLD_H | ||
24 | |||
25 | #define SYSPLD_PHYS_BASE (0x10000000) | ||
26 | |||
27 | #ifndef __ASSEMBLY__ | ||
28 | #include <asm/types.h> | ||
29 | |||
30 | #define SYSPLD_REG(type,off) (*(volatile type *)(SYSPLD_BASE + off)) | ||
31 | #else | ||
32 | #define SYSPLD_REG(type,off) (off) | ||
33 | #endif | ||
34 | |||
35 | #define PLD_INT SYSPLD_REG(u32, 0x000000) | ||
36 | #define PLD_INT_PENIRQ (1 << 5) | ||
37 | #define PLD_INT_UCB_IRQ (1 << 1) | ||
38 | #define PLD_INT_KBD_ATN (1 << 0) /* EINT1 */ | ||
39 | |||
40 | #define PLD_PWR SYSPLD_REG(u32, 0x000004) | ||
41 | #define PLD_PWR_EXT (1 << 5) | ||
42 | #define PLD_PWR_MODE (1 << 4) /* 1 = PWM, 0 = PFM */ | ||
43 | #define PLD_S4_ON (1 << 3) /* LCD bias voltage enable */ | ||
44 | #define PLD_S3_ON (1 << 2) /* LCD backlight enable */ | ||
45 | #define PLD_S2_ON (1 << 1) /* LCD 3V3 supply enable */ | ||
46 | #define PLD_S1_ON (1 << 0) /* LCD 3V supply enable */ | ||
47 | |||
48 | #define PLD_KBD SYSPLD_REG(u32, 0x000008) | ||
49 | #define PLD_KBD_WAKE (1 << 1) | ||
50 | #define PLD_KBD_EN (1 << 0) | ||
51 | |||
52 | #define PLD_SPI SYSPLD_REG(u32, 0x00000c) | ||
53 | #define PLD_SPI_EN (1 << 0) | ||
54 | |||
55 | #define PLD_IO SYSPLD_REG(u32, 0x000010) | ||
56 | #define PLD_IO_BOOTSEL (1 << 6) /* boot sel switch */ | ||
57 | #define PLD_IO_USER (1 << 5) /* user defined switch */ | ||
58 | #define PLD_IO_LED3 (1 << 4) | ||
59 | #define PLD_IO_LED2 (1 << 3) | ||
60 | #define PLD_IO_LED1 (1 << 2) | ||
61 | #define PLD_IO_LED0 (1 << 1) | ||
62 | #define PLD_IO_LEDEN (1 << 0) | ||
63 | |||
64 | #define PLD_IRDA SYSPLD_REG(u32, 0x000014) | ||
65 | #define PLD_IRDA_EN (1 << 0) | ||
66 | |||
67 | #define PLD_COM2 SYSPLD_REG(u32, 0x000018) | ||
68 | #define PLD_COM2_EN (1 << 0) | ||
69 | |||
70 | #define PLD_COM1 SYSPLD_REG(u32, 0x00001c) | ||
71 | #define PLD_COM1_EN (1 << 0) | ||
72 | |||
73 | #define PLD_AUD SYSPLD_REG(u32, 0x000020) | ||
74 | #define PLD_AUD_DIV1 (1 << 6) | ||
75 | #define PLD_AUD_DIV0 (1 << 5) | ||
76 | #define PLD_AUD_CLK_SEL1 (1 << 4) | ||
77 | #define PLD_AUD_CLK_SEL0 (1 << 3) | ||
78 | #define PLD_AUD_MIC_PWR (1 << 2) | ||
79 | #define PLD_AUD_MIC_GAIN (1 << 1) | ||
80 | #define PLD_AUD_CODEC_EN (1 << 0) | ||
81 | |||
82 | #define PLD_CF SYSPLD_REG(u32, 0x000024) | ||
83 | #define PLD_CF2_SLEEP (1 << 5) | ||
84 | #define PLD_CF1_SLEEP (1 << 4) | ||
85 | #define PLD_CF2_nPDREQ (1 << 3) | ||
86 | #define PLD_CF1_nPDREQ (1 << 2) | ||
87 | #define PLD_CF2_nIRQ (1 << 1) | ||
88 | #define PLD_CF1_nIRQ (1 << 0) | ||
89 | |||
90 | #define PLD_SDC SYSPLD_REG(u32, 0x000028) | ||
91 | #define PLD_SDC_INT_EN (1 << 2) | ||
92 | #define PLD_SDC_WP (1 << 1) | ||
93 | #define PLD_SDC_CD (1 << 0) | ||
94 | |||
95 | #define PLD_FPGA SYSPLD_REG(u32, 0x00002c) | ||
96 | |||
97 | #define PLD_CODEC SYSPLD_REG(u32, 0x400000) | ||
98 | #define PLD_CODEC_IRQ3 (1 << 4) | ||
99 | #define PLD_CODEC_IRQ2 (1 << 3) | ||
100 | #define PLD_CODEC_IRQ1 (1 << 2) | ||
101 | #define PLD_CODEC_EN (1 << 0) | ||
102 | |||
103 | #define PLD_BRITE SYSPLD_REG(u32, 0x400004) | ||
104 | #define PLD_BRITE_UP (1 << 1) | ||
105 | #define PLD_BRITE_DN (1 << 0) | ||
106 | |||
107 | #define PLD_LCDEN SYSPLD_REG(u32, 0x400008) | ||
108 | #define PLD_LCDEN_EN (1 << 0) | ||
109 | |||
110 | #define PLD_ID SYSPLD_REG(u32, 0x40000c) | ||
111 | |||
112 | #define PLD_TCH SYSPLD_REG(u32, 0x400010) | ||
113 | #define PLD_TCH_PENIRQ (1 << 1) | ||
114 | #define PLD_TCH_EN (1 << 0) | ||
115 | |||
116 | #define PLD_GPIO SYSPLD_REG(u32, 0x400014) | ||
117 | #define PLD_GPIO2 (1 << 2) | ||
118 | #define PLD_GPIO1 (1 << 1) | ||
119 | #define PLD_GPIO0 (1 << 0) | ||
120 | |||
121 | #endif | ||
diff --git a/include/asm-arm/arch-clps711x/system.h b/include/asm-arm/arch-clps711x/system.h new file mode 100644 index 000000000000..2ab981fee37f --- /dev/null +++ b/include/asm-arm/arch-clps711x/system.h | |||
@@ -0,0 +1,38 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-clps711x/system.h | ||
3 | * | ||
4 | * Copyright (C) 2000 Deep Blue Solutions Ltd | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | * GNU General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License | ||
17 | * along with this program; if not, write to the Free Software | ||
18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
19 | */ | ||
20 | #ifndef __ASM_ARCH_SYSTEM_H | ||
21 | #define __ASM_ARCH_SYSTEM_H | ||
22 | |||
23 | #include <asm/hardware/clps7111.h> | ||
24 | |||
25 | static inline void arch_idle(void) | ||
26 | { | ||
27 | clps_writel(1, HALT); | ||
28 | __asm__ __volatile__( | ||
29 | "mov r0, r0\n\ | ||
30 | mov r0, r0"); | ||
31 | } | ||
32 | |||
33 | static inline void arch_reset(char mode) | ||
34 | { | ||
35 | cpu_reset(0); | ||
36 | } | ||
37 | |||
38 | #endif | ||
diff --git a/include/asm-arm/arch-clps711x/time.h b/include/asm-arm/arch-clps711x/time.h new file mode 100644 index 000000000000..9cb27cd4e6ae --- /dev/null +++ b/include/asm-arm/arch-clps711x/time.h | |||
@@ -0,0 +1,48 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-clps711x/time.h | ||
3 | * | ||
4 | * Copyright (C) 2000 Deep Blue Solutions Ltd. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | * GNU General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License | ||
17 | * along with this program; if not, write to the Free Software | ||
18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
19 | */ | ||
20 | #include <asm/leds.h> | ||
21 | #include <asm/hardware/clps7111.h> | ||
22 | |||
23 | extern void clps711x_setup_timer(void); | ||
24 | |||
25 | /* | ||
26 | * IRQ handler for the timer | ||
27 | */ | ||
28 | static irqreturn_t | ||
29 | p720t_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) | ||
30 | { | ||
31 | do_leds(); | ||
32 | do_timer(regs); | ||
33 | #ifndef CONFIG_SMP | ||
34 | update_process_times(user_mode(regs)); | ||
35 | #endif | ||
36 | do_profile(regs); | ||
37 | return IRQ_HANDLED; | ||
38 | } | ||
39 | |||
40 | /* | ||
41 | * Set up timer interrupt, and return the current time in seconds. | ||
42 | */ | ||
43 | void __init time_init(void) | ||
44 | { | ||
45 | clps711x_setup_timer(); | ||
46 | timer_irq.handler = p720t_timer_interrupt; | ||
47 | setup_irq(IRQ_TC2OI, &timer_irq); | ||
48 | } | ||
diff --git a/include/asm-arm/arch-clps711x/timex.h b/include/asm-arm/arch-clps711x/timex.h new file mode 100644 index 000000000000..dcbb381da3dd --- /dev/null +++ b/include/asm-arm/arch-clps711x/timex.h | |||
@@ -0,0 +1,23 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-clps711x/timex.h | ||
3 | * | ||
4 | * Prospector 720T architecture timex specifications | ||
5 | * | ||
6 | * Copyright (C) 2000 Deep Blue Solutions Ltd. | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License as published by | ||
10 | * the Free Software Foundation; either version 2 of the License, or | ||
11 | * (at your option) any later version. | ||
12 | * | ||
13 | * This program is distributed in the hope that it will be useful, | ||
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
16 | * GNU General Public License for more details. | ||
17 | * | ||
18 | * You should have received a copy of the GNU General Public License | ||
19 | * along with this program; if not, write to the Free Software | ||
20 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
21 | */ | ||
22 | |||
23 | #define CLOCK_TICK_RATE 512000 | ||
diff --git a/include/asm-arm/arch-clps711x/uncompress.h b/include/asm-arm/arch-clps711x/uncompress.h new file mode 100644 index 000000000000..7d0ab791b16c --- /dev/null +++ b/include/asm-arm/arch-clps711x/uncompress.h | |||
@@ -0,0 +1,67 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-clps711x/uncompress.h | ||
3 | * | ||
4 | * Copyright (C) 2000 Deep Blue Solutions Ltd | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | * GNU General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License | ||
17 | * along with this program; if not, write to the Free Software | ||
18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
19 | */ | ||
20 | #include <linux/config.h> | ||
21 | #include <asm/arch/io.h> | ||
22 | #include <asm/arch/hardware.h> | ||
23 | #include <asm/hardware/clps7111.h> | ||
24 | |||
25 | #undef CLPS7111_BASE | ||
26 | #define CLPS7111_BASE CLPS7111_PHYS_BASE | ||
27 | |||
28 | #define barrier() __asm__ __volatile__("": : :"memory") | ||
29 | #define __raw_readl(p) (*(unsigned long *)(p)) | ||
30 | #define __raw_writel(v,p) (*(unsigned long *)(p) = (v)) | ||
31 | |||
32 | #ifdef CONFIG_DEBUG_CLPS711X_UART2 | ||
33 | #define SYSFLGx SYSFLG2 | ||
34 | #define UARTDRx UARTDR2 | ||
35 | #else | ||
36 | #define SYSFLGx SYSFLG1 | ||
37 | #define UARTDRx UARTDR1 | ||
38 | #endif | ||
39 | |||
40 | /* | ||
41 | * This does not append a newline | ||
42 | */ | ||
43 | static void putstr(const char *s) | ||
44 | { | ||
45 | char c; | ||
46 | |||
47 | while ((c = *s++) != '\0') { | ||
48 | while (clps_readl(SYSFLGx) & SYSFLG_UTXFF) | ||
49 | barrier(); | ||
50 | clps_writel(c, UARTDRx); | ||
51 | |||
52 | if (c == '\n') { | ||
53 | while (clps_readl(SYSFLGx) & SYSFLG_UTXFF) | ||
54 | barrier(); | ||
55 | clps_writel('\r', UARTDRx); | ||
56 | } | ||
57 | } | ||
58 | while (clps_readl(SYSFLGx) & SYSFLG_UBUSY) | ||
59 | barrier(); | ||
60 | } | ||
61 | |||
62 | /* | ||
63 | * nothing to do | ||
64 | */ | ||
65 | #define arch_decomp_setup() | ||
66 | |||
67 | #define arch_decomp_wdog() | ||
diff --git a/include/asm-arm/arch-clps711x/vmalloc.h b/include/asm-arm/arch-clps711x/vmalloc.h new file mode 100644 index 000000000000..42571ed5e493 --- /dev/null +++ b/include/asm-arm/arch-clps711x/vmalloc.h | |||
@@ -0,0 +1,31 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-clps711x/vmalloc.h | ||
3 | * | ||
4 | * Copyright (C) 2000 Deep Blue Solutions Ltd. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | * GNU General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License | ||
17 | * along with this program; if not, write to the Free Software | ||
18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
19 | */ | ||
20 | |||
21 | /* | ||
22 | * Just any arbitrary offset to the start of the vmalloc VM area: the | ||
23 | * current 8MB value just means that there will be a 8MB "hole" after the | ||
24 | * physical memory until the kernel virtual memory starts. That means that | ||
25 | * any out-of-bounds memory accesses will hopefully be caught. | ||
26 | * The vmalloc() routines leaves a hole of 4kB between each vmalloced | ||
27 | * area for the same reason. ;) | ||
28 | */ | ||
29 | #define VMALLOC_OFFSET (8*1024*1024) | ||
30 | #define VMALLOC_START (((unsigned long)high_memory + VMALLOC_OFFSET) & ~(VMALLOC_OFFSET-1)) | ||
31 | #define VMALLOC_END (PAGE_OFFSET + 0x10000000) | ||
diff --git a/include/asm-arm/arch-ebsa110/debug-macro.S b/include/asm-arm/arch-ebsa110/debug-macro.S new file mode 100644 index 000000000000..dcd03a40c502 --- /dev/null +++ b/include/asm-arm/arch-ebsa110/debug-macro.S | |||
@@ -0,0 +1,34 @@ | |||
1 | /* linux/include/asm-arm/arch-ebsa110/debug-macro.S | ||
2 | * | ||
3 | * Debugging macro include header | ||
4 | * | ||
5 | * Copyright (C) 1994-1999 Russell King | ||
6 | * Moved from linux/arch/arm/kernel/debug.S by Ben Dooks | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | * | ||
12 | **/ | ||
13 | |||
14 | .macro addruart,rx | ||
15 | mov \rx, #0xf0000000 | ||
16 | orr \rx, \rx, #0x00000be0 | ||
17 | .endm | ||
18 | |||
19 | .macro senduart,rd,rx | ||
20 | strb \rd, [\rx] | ||
21 | .endm | ||
22 | |||
23 | .macro busyuart,rd,rx | ||
24 | 1002: ldrb \rd, [\rx, #0x14] | ||
25 | and \rd, \rd, #0x60 | ||
26 | teq \rd, #0x60 | ||
27 | bne 1002b | ||
28 | .endm | ||
29 | |||
30 | .macro waituart,rd,rx | ||
31 | 1001: ldrb \rd, [\rx, #0x18] | ||
32 | tst \rd, #0x10 | ||
33 | beq 1001b | ||
34 | .endm | ||
diff --git a/include/asm-arm/arch-ebsa110/dma.h b/include/asm-arm/arch-ebsa110/dma.h new file mode 100644 index 000000000000..d491776ac1cc --- /dev/null +++ b/include/asm-arm/arch-ebsa110/dma.h | |||
@@ -0,0 +1,19 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-ebsa110/dma.h | ||
3 | * | ||
4 | * Copyright (C) 1997,1998 Russell King | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | * EBSA110 DMA definitions | ||
11 | */ | ||
12 | #ifndef __ASM_ARCH_DMA_H | ||
13 | #define __ASM_ARCH_DMA_H | ||
14 | |||
15 | #define MAX_DMA_ADDRESS 0xffffffff | ||
16 | #define MAX_DMA_CHANNELS 0 | ||
17 | |||
18 | #endif /* _ASM_ARCH_DMA_H */ | ||
19 | |||
diff --git a/include/asm-arm/arch-ebsa110/entry-macro.S b/include/asm-arm/arch-ebsa110/entry-macro.S new file mode 100644 index 000000000000..b12ca04f998c --- /dev/null +++ b/include/asm-arm/arch-ebsa110/entry-macro.S | |||
@@ -0,0 +1,33 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-ebsa110/entry-macro.S | ||
3 | * | ||
4 | * Low-level IRQ helper macros for ebsa110 platform. | ||
5 | * | ||
6 | * This file is licensed under the terms of the GNU General Public | ||
7 | * License version 2. This program is licensed "as is" without any | ||
8 | * warranty of any kind, whether express or implied. | ||
9 | */ | ||
10 | |||
11 | |||
12 | |||
13 | #define IRQ_STAT 0xff000000 /* read */ | ||
14 | |||
15 | .macro disable_fiq | ||
16 | .endm | ||
17 | |||
18 | .macro get_irqnr_and_base, irqnr, stat, base, tmp | ||
19 | mov \base, #IRQ_STAT | ||
20 | ldrb \stat, [\base] @ get interrupts | ||
21 | mov \irqnr, #0 | ||
22 | tst \stat, #15 | ||
23 | addeq \irqnr, \irqnr, #4 | ||
24 | moveq \stat, \stat, lsr #4 | ||
25 | tst \stat, #3 | ||
26 | addeq \irqnr, \irqnr, #2 | ||
27 | moveq \stat, \stat, lsr #2 | ||
28 | tst \stat, #1 | ||
29 | addeq \irqnr, \irqnr, #1 | ||
30 | moveq \stat, \stat, lsr #1 | ||
31 | tst \stat, #1 @ bit 0 should be set | ||
32 | .endm | ||
33 | |||
diff --git a/include/asm-arm/arch-ebsa110/hardware.h b/include/asm-arm/arch-ebsa110/hardware.h new file mode 100644 index 000000000000..4e41c2358f4e --- /dev/null +++ b/include/asm-arm/arch-ebsa110/hardware.h | |||
@@ -0,0 +1,66 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-ebsa110/hardware.h | ||
3 | * | ||
4 | * Copyright (C) 1996-2000 Russell King. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | * This file contains the hardware definitions of the EBSA-110. | ||
11 | */ | ||
12 | #ifndef __ASM_ARCH_HARDWARE_H | ||
13 | #define __ASM_ARCH_HARDWARE_H | ||
14 | |||
15 | /* | ||
16 | * The EBSA110 has a weird "ISA IO" region: | ||
17 | * | ||
18 | * Region 0 (addr = 0xf0000000 + io << 2) | ||
19 | * -------------------------------------------------------- | ||
20 | * Physical region IO region | ||
21 | * f0000fe0 - f0000ffc 3f8 - 3ff ttyS0 | ||
22 | * f0000e60 - f0000e64 398 - 399 | ||
23 | * f0000de0 - f0000dfc 378 - 37f lp0 | ||
24 | * f0000be0 - f0000bfc 2f8 - 2ff ttyS1 | ||
25 | * | ||
26 | * Region 1 (addr = 0xf0000000 + (io & ~1) << 1 + (io & 1)) | ||
27 | * -------------------------------------------------------- | ||
28 | * Physical region IO region | ||
29 | * f00014f1 a79 pnp write data | ||
30 | * f00007c0 - f00007c1 3e0 - 3e1 pcmcia | ||
31 | * f00004f1 279 pnp address | ||
32 | * f0000440 - f000046c 220 - 236 eth0 | ||
33 | * f0000405 203 pnp read data | ||
34 | */ | ||
35 | |||
36 | #define ISAMEM_PHYS 0xe0000000 | ||
37 | #define ISAMEM_SIZE 0x10000000 | ||
38 | |||
39 | #define ISAIO_PHYS 0xf0000000 | ||
40 | #define ISAIO_SIZE PGDIR_SIZE | ||
41 | |||
42 | #define TRICK0_PHYS 0xf2000000 | ||
43 | #define TRICK1_PHYS 0xf2400000 | ||
44 | #define TRICK2_PHYS 0xf2800000 | ||
45 | #define TRICK3_PHYS 0xf2c00000 | ||
46 | #define TRICK4_PHYS 0xf3000000 | ||
47 | #define TRICK5_PHYS 0xf3400000 | ||
48 | #define TRICK6_PHYS 0xf3800000 | ||
49 | #define TRICK7_PHYS 0xf3c00000 | ||
50 | |||
51 | #define ISAMEM_BASE 0xe0000000 | ||
52 | #define ISAIO_BASE 0xf0000000 | ||
53 | |||
54 | #define PIT_BASE 0xfc000000 | ||
55 | #define SOFT_BASE 0xfd000000 | ||
56 | |||
57 | /* | ||
58 | * RAM definitions | ||
59 | */ | ||
60 | #define FLUSH_BASE_PHYS 0x40000000 | ||
61 | #define FLUSH_BASE 0xdf000000 | ||
62 | |||
63 | #define UNCACHEABLE_ADDR 0xff000000 /* IRQ_STAT */ | ||
64 | |||
65 | #endif | ||
66 | |||
diff --git a/include/asm-arm/arch-ebsa110/io.h b/include/asm-arm/arch-ebsa110/io.h new file mode 100644 index 000000000000..68e04c0bb3f7 --- /dev/null +++ b/include/asm-arm/arch-ebsa110/io.h | |||
@@ -0,0 +1,78 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-ebsa110/io.h | ||
3 | * | ||
4 | * Copyright (C) 1997,1998 Russell King | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | * Modifications: | ||
11 | * 06-Dec-1997 RMK Created. | ||
12 | */ | ||
13 | #ifndef __ASM_ARM_ARCH_IO_H | ||
14 | #define __ASM_ARM_ARCH_IO_H | ||
15 | |||
16 | #define IO_SPACE_LIMIT 0xffff | ||
17 | |||
18 | u8 __inb8(unsigned int port); | ||
19 | void __outb8(u8 val, unsigned int port); | ||
20 | |||
21 | u8 __inb16(unsigned int port); | ||
22 | void __outb16(u8 val, unsigned int port); | ||
23 | |||
24 | u16 __inw(unsigned int port); | ||
25 | void __outw(u16 val, unsigned int port); | ||
26 | |||
27 | u32 __inl(unsigned int port); | ||
28 | void __outl(u32 val, unsigned int port); | ||
29 | |||
30 | u8 __readb(void __iomem *addr); | ||
31 | u16 __readw(void __iomem *addr); | ||
32 | u32 __readl(void __iomem *addr); | ||
33 | |||
34 | void __writeb(u8 val, void __iomem *addr); | ||
35 | void __writew(u16 val, void __iomem *addr); | ||
36 | void __writel(u32 val, void __iomem *addr); | ||
37 | |||
38 | /* | ||
39 | * Argh, someone forgot the IOCS16 line. We therefore have to handle | ||
40 | * the byte stearing by selecting the correct byte IO functions here. | ||
41 | */ | ||
42 | #ifdef ISA_SIXTEEN_BIT_PERIPHERAL | ||
43 | #define inb(p) __inb16(p) | ||
44 | #define outb(v,p) __outb16(v,p) | ||
45 | #else | ||
46 | #define inb(p) __inb8(p) | ||
47 | #define outb(v,p) __outb8(v,p) | ||
48 | #endif | ||
49 | |||
50 | #define inw(p) __inw(p) | ||
51 | #define outw(v,p) __outw(v,p) | ||
52 | |||
53 | #define inl(p) __inl(p) | ||
54 | #define outl(v,p) __outl(v,p) | ||
55 | |||
56 | #define readb(b) __readb(b) | ||
57 | #define readw(b) __readw(b) | ||
58 | #define readl(b) __readl(b) | ||
59 | #define readb_relaxed(addr) readb(addr) | ||
60 | #define readw_relaxed(addr) readw(addr) | ||
61 | #define readl_relaxed(addr) readl(addr) | ||
62 | |||
63 | #define writeb(v,b) __writeb(v,b) | ||
64 | #define writew(v,b) __writew(v,b) | ||
65 | #define writel(v,b) __writel(v,b) | ||
66 | |||
67 | #define __arch_ioremap(cookie,sz,c,a) ((void __iomem *)(cookie)) | ||
68 | #define __arch_iounmap(cookie) do { } while (0) | ||
69 | |||
70 | extern void insb(unsigned int port, void *buf, int sz); | ||
71 | extern void insw(unsigned int port, void *buf, int sz); | ||
72 | extern void insl(unsigned int port, void *buf, int sz); | ||
73 | |||
74 | extern void outsb(unsigned int port, const void *buf, int sz); | ||
75 | extern void outsw(unsigned int port, const void *buf, int sz); | ||
76 | extern void outsl(unsigned int port, const void *buf, int sz); | ||
77 | |||
78 | #endif | ||
diff --git a/include/asm-arm/arch-ebsa110/irqs.h b/include/asm-arm/arch-ebsa110/irqs.h new file mode 100644 index 000000000000..ded9bd9d7b8b --- /dev/null +++ b/include/asm-arm/arch-ebsa110/irqs.h | |||
@@ -0,0 +1,20 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-ebsa110/irqs.h | ||
3 | * | ||
4 | * Copyright (C) 1996 Russell King | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | */ | ||
10 | |||
11 | #define NR_IRQS 8 | ||
12 | |||
13 | #define IRQ_EBSA110_PRINTER 0 | ||
14 | #define IRQ_EBSA110_COM1 1 | ||
15 | #define IRQ_EBSA110_COM2 2 | ||
16 | #define IRQ_EBSA110_ETHERNET 3 | ||
17 | #define IRQ_EBSA110_TIMER0 4 | ||
18 | #define IRQ_EBSA110_TIMER1 5 | ||
19 | #define IRQ_EBSA110_PCMCIA 6 | ||
20 | #define IRQ_EBSA110_IMMEDIATE 7 | ||
diff --git a/include/asm-arm/arch-ebsa110/memory.h b/include/asm-arm/arch-ebsa110/memory.h new file mode 100644 index 000000000000..5a9493e12275 --- /dev/null +++ b/include/asm-arm/arch-ebsa110/memory.h | |||
@@ -0,0 +1,31 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-ebsa110/memory.h | ||
3 | * | ||
4 | * Copyright (C) 1996-1999 Russell King. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | * Changelog: | ||
11 | * 20-Oct-1996 RMK Created | ||
12 | * 31-Dec-1997 RMK Fixed definitions to reduce warnings | ||
13 | * 21-Mar-1999 RMK Renamed to memory.h | ||
14 | * RMK Moved TASK_SIZE and PAGE_OFFSET here | ||
15 | */ | ||
16 | #ifndef __ASM_ARCH_MEMORY_H | ||
17 | #define __ASM_ARCH_MEMORY_H | ||
18 | |||
19 | /* | ||
20 | * Physical DRAM offset. | ||
21 | */ | ||
22 | #define PHYS_OFFSET (0x00000000UL) | ||
23 | |||
24 | /* | ||
25 | * We keep this 1:1 so that we don't interfere | ||
26 | * with the PCMCIA memory regions | ||
27 | */ | ||
28 | #define __virt_to_bus(x) (x) | ||
29 | #define __bus_to_virt(x) (x) | ||
30 | |||
31 | #endif | ||
diff --git a/include/asm-arm/arch-ebsa110/param.h b/include/asm-arm/arch-ebsa110/param.h new file mode 100644 index 000000000000..be19b08d1c75 --- /dev/null +++ b/include/asm-arm/arch-ebsa110/param.h | |||
@@ -0,0 +1,4 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-ebsa110/param.h | ||
3 | */ | ||
4 | #define HZ 200 | ||
diff --git a/include/asm-arm/arch-ebsa110/system.h b/include/asm-arm/arch-ebsa110/system.h new file mode 100644 index 000000000000..d7c8fece0bc5 --- /dev/null +++ b/include/asm-arm/arch-ebsa110/system.h | |||
@@ -0,0 +1,39 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-ebsa110/system.h | ||
3 | * | ||
4 | * Copyright (C) 1996-2000 Russell King. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | */ | ||
10 | #ifndef __ASM_ARCH_SYSTEM_H | ||
11 | #define __ASM_ARCH_SYSTEM_H | ||
12 | |||
13 | /* | ||
14 | * EBSA110 idling methodology: | ||
15 | * | ||
16 | * We can not execute the "wait for interrupt" instruction since that | ||
17 | * will stop our MCLK signal (which provides the clock for the glue | ||
18 | * logic, and therefore the timer interrupt). | ||
19 | * | ||
20 | * Instead, we spin, polling the IRQ_STAT register for the occurrence | ||
21 | * of any interrupt with core clock down to the memory clock. | ||
22 | */ | ||
23 | static inline void arch_idle(void) | ||
24 | { | ||
25 | const char *irq_stat = (char *)0xff000000; | ||
26 | |||
27 | /* disable clock switching */ | ||
28 | asm volatile ("mcr p15, 0, ip, c15, c2, 2" : : : "cc"); | ||
29 | |||
30 | /* wait for an interrupt to occur */ | ||
31 | while (!*irq_stat); | ||
32 | |||
33 | /* enable clock switching */ | ||
34 | asm volatile ("mcr p15, 0, ip, c15, c1, 2" : : : "cc"); | ||
35 | } | ||
36 | |||
37 | #define arch_reset(mode) cpu_reset(0x80000000) | ||
38 | |||
39 | #endif | ||
diff --git a/include/asm-arm/arch-ebsa110/timex.h b/include/asm-arm/arch-ebsa110/timex.h new file mode 100644 index 000000000000..1e9ef045092b --- /dev/null +++ b/include/asm-arm/arch-ebsa110/timex.h | |||
@@ -0,0 +1,19 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-ebsa110/timex.h | ||
3 | * | ||
4 | * Copyright (C) 1997, 1998 Russell King | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | * EBSA110 architecture timex specifications | ||
11 | */ | ||
12 | |||
13 | /* | ||
14 | * On the EBSA, the clock ticks at weird rates. | ||
15 | * This is therefore not used to calculate the | ||
16 | * divisor. | ||
17 | */ | ||
18 | #define CLOCK_TICK_RATE 47894000 | ||
19 | |||
diff --git a/include/asm-arm/arch-ebsa110/uncompress.h b/include/asm-arm/arch-ebsa110/uncompress.h new file mode 100644 index 000000000000..eee95581a923 --- /dev/null +++ b/include/asm-arm/arch-ebsa110/uncompress.h | |||
@@ -0,0 +1,44 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-ebsa110/uncompress.h | ||
3 | * | ||
4 | * Copyright (C) 1996,1997,1998 Russell King | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | */ | ||
10 | |||
11 | /* | ||
12 | * This does not append a newline | ||
13 | */ | ||
14 | static void putstr(const char *s) | ||
15 | { | ||
16 | unsigned long tmp1, tmp2; | ||
17 | __asm__ __volatile__( | ||
18 | "ldrb %0, [%2], #1\n" | ||
19 | " teq %0, #0\n" | ||
20 | " beq 3f\n" | ||
21 | "1: strb %0, [%3]\n" | ||
22 | "2: ldrb %1, [%3, #0x14]\n" | ||
23 | " and %1, %1, #0x60\n" | ||
24 | " teq %1, #0x60\n" | ||
25 | " bne 2b\n" | ||
26 | " teq %0, #'\n'\n" | ||
27 | " moveq %0, #'\r'\n" | ||
28 | " beq 1b\n" | ||
29 | " ldrb %0, [%2], #1\n" | ||
30 | " teq %0, #0\n" | ||
31 | " bne 1b\n" | ||
32 | "3: ldrb %1, [%3, #0x14]\n" | ||
33 | " and %1, %1, #0x60\n" | ||
34 | " teq %1, #0x60\n" | ||
35 | " bne 3b" | ||
36 | : "=&r" (tmp1), "=&r" (tmp2) | ||
37 | : "r" (s), "r" (0xf0000be0) : "cc"); | ||
38 | } | ||
39 | |||
40 | /* | ||
41 | * nothing to do | ||
42 | */ | ||
43 | #define arch_decomp_setup() | ||
44 | #define arch_decomp_wdog() | ||
diff --git a/include/asm-arm/arch-ebsa110/vmalloc.h b/include/asm-arm/arch-ebsa110/vmalloc.h new file mode 100644 index 000000000000..759659be109f --- /dev/null +++ b/include/asm-arm/arch-ebsa110/vmalloc.h | |||
@@ -0,0 +1,21 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-ebsa110/vmalloc.h | ||
3 | * | ||
4 | * Copyright (C) 1998 Russell King | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | */ | ||
10 | |||
11 | /* | ||
12 | * Just any arbitrary offset to the start of the vmalloc VM area: the | ||
13 | * current 8MB value just means that there will be a 8MB "hole" after the | ||
14 | * physical memory until the kernel virtual memory starts. That means that | ||
15 | * any out-of-bounds memory accesses will hopefully be caught. | ||
16 | * The vmalloc() routines leaves a hole of 4kB between each vmalloced | ||
17 | * area for the same reason. ;) | ||
18 | */ | ||
19 | #define VMALLOC_OFFSET (8*1024*1024) | ||
20 | #define VMALLOC_START (((unsigned long)high_memory + VMALLOC_OFFSET) & ~(VMALLOC_OFFSET-1)) | ||
21 | #define VMALLOC_END (PAGE_OFFSET + 0x1f000000) | ||
diff --git a/include/asm-arm/arch-ebsa285/debug-macro.S b/include/asm-arm/arch-ebsa285/debug-macro.S new file mode 100644 index 000000000000..237853db6e2f --- /dev/null +++ b/include/asm-arm/arch-ebsa285/debug-macro.S | |||
@@ -0,0 +1,66 @@ | |||
1 | /* linux/include/asm-arm/arch-ebsa285/debug-macro.S | ||
2 | * | ||
3 | * Debugging macro include header | ||
4 | * | ||
5 | * Copyright (C) 1994-1999 Russell King | ||
6 | * Moved from linux/arch/arm/kernel/debug.S by Ben Dooks | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | * | ||
12 | */ | ||
13 | |||
14 | #include <asm/hardware/dec21285.h> | ||
15 | |||
16 | #ifndef CONFIG_DEBUG_DC21285_PORT | ||
17 | /* For NetWinder debugging */ | ||
18 | .macro addruart,rx | ||
19 | mrc p15, 0, \rx, c1, c0 | ||
20 | tst \rx, #1 @ MMU enabled? | ||
21 | moveq \rx, #0x7c000000 @ physical | ||
22 | movne \rx, #0xff000000 @ virtual | ||
23 | orr \rx, \rx, #0x000003f8 | ||
24 | .endm | ||
25 | |||
26 | .macro senduart,rd,rx | ||
27 | strb \rd, [\rx] | ||
28 | .endm | ||
29 | |||
30 | .macro busyuart,rd,rx | ||
31 | 1002: ldrb \rd, [\rx, #0x5] | ||
32 | and \rd, \rd, #0x60 | ||
33 | teq \rd, #0x60 | ||
34 | bne 1002b | ||
35 | .endm | ||
36 | |||
37 | .macro waituart,rd,rx | ||
38 | 1001: ldrb \rd, [\rx, #0x6] | ||
39 | tst \rd, #0x10 | ||
40 | beq 1001b | ||
41 | .endm | ||
42 | #else | ||
43 | /* For EBSA285 debugging */ | ||
44 | .equ dc21285_high, ARMCSR_BASE & 0xff000000 | ||
45 | .equ dc21285_low, ARMCSR_BASE & 0x00ffffff | ||
46 | |||
47 | .macro addruart,rx | ||
48 | mov \rx, #dc21285_high | ||
49 | .if dc21285_low | ||
50 | orr \rx, \rx, #dc21285_low | ||
51 | .endif | ||
52 | .endm | ||
53 | |||
54 | .macro senduart,rd,rx | ||
55 | str \rd, [\rx, #0x160] @ UARTDR | ||
56 | .endm | ||
57 | |||
58 | .macro busyuart,rd,rx | ||
59 | 1001: ldr \rd, [\rx, #0x178] @ UARTFLG | ||
60 | tst \rd, #1 << 3 | ||
61 | bne 1001b | ||
62 | .endm | ||
63 | |||
64 | .macro waituart,rd,rx | ||
65 | .endm | ||
66 | #endif | ||
diff --git a/include/asm-arm/arch-ebsa285/dma.h b/include/asm-arm/arch-ebsa285/dma.h new file mode 100644 index 000000000000..c43046eb8bc7 --- /dev/null +++ b/include/asm-arm/arch-ebsa285/dma.h | |||
@@ -0,0 +1,30 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-ebsa285/dma.h | ||
3 | * | ||
4 | * Architecture DMA routines | ||
5 | * | ||
6 | * Copyright (C) 1998,1999 Russell King | ||
7 | * Copyright (C) 1998,1999 Philip Blundell | ||
8 | */ | ||
9 | #ifndef __ASM_ARCH_DMA_H | ||
10 | #define __ASM_ARCH_DMA_H | ||
11 | |||
12 | /* | ||
13 | * This is the maximum DMA address that can be DMAd to. | ||
14 | */ | ||
15 | #define MAX_DMA_ADDRESS 0xffffffff | ||
16 | |||
17 | /* | ||
18 | * The 21285 has two internal DMA channels; we call these 8 and 9. | ||
19 | * On CATS hardware we have an additional eight ISA dma channels | ||
20 | * numbered 0..7. | ||
21 | */ | ||
22 | #define _ISA_DMA(x) (0+(x)) | ||
23 | #define _DC21285_DMA(x) (8+(x)) | ||
24 | |||
25 | #define MAX_DMA_CHANNELS 10 | ||
26 | |||
27 | #define DMA_FLOPPY _ISA_DMA(2) | ||
28 | #define DMA_ISA_CASCADE _ISA_DMA(4) | ||
29 | |||
30 | #endif /* _ASM_ARCH_DMA_H */ | ||
diff --git a/include/asm-arm/arch-ebsa285/entry-macro.S b/include/asm-arm/arch-ebsa285/entry-macro.S new file mode 100644 index 000000000000..db5729ff6349 --- /dev/null +++ b/include/asm-arm/arch-ebsa285/entry-macro.S | |||
@@ -0,0 +1,105 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-footbridge/entry-macro.S | ||
3 | * | ||
4 | * Low-level IRQ helper macros for footbridge-based platforms | ||
5 | * | ||
6 | * This file is licensed under the terms of the GNU General Public | ||
7 | * License version 2. This program is licensed "as is" without any | ||
8 | * warranty of any kind, whether express or implied. | ||
9 | */ | ||
10 | #include <asm/hardware/dec21285.h> | ||
11 | |||
12 | .macro disable_fiq | ||
13 | .endm | ||
14 | |||
15 | .equ dc21285_high, ARMCSR_BASE & 0xff000000 | ||
16 | .equ dc21285_low, ARMCSR_BASE & 0x00ffffff | ||
17 | |||
18 | .macro get_irqnr_and_base, irqnr, irqstat, base, tmp | ||
19 | mov r4, #dc21285_high | ||
20 | .if dc21285_low | ||
21 | orr r4, r4, #dc21285_low | ||
22 | .endif | ||
23 | ldr \irqstat, [r4, #0x180] @ get interrupts | ||
24 | |||
25 | mov \irqnr, #IRQ_SDRAMPARITY | ||
26 | tst \irqstat, #IRQ_MASK_SDRAMPARITY | ||
27 | bne 1001f | ||
28 | |||
29 | tst \irqstat, #IRQ_MASK_UART_RX | ||
30 | movne \irqnr, #IRQ_CONRX | ||
31 | bne 1001f | ||
32 | |||
33 | tst \irqstat, #IRQ_MASK_DMA1 | ||
34 | movne \irqnr, #IRQ_DMA1 | ||
35 | bne 1001f | ||
36 | |||
37 | tst \irqstat, #IRQ_MASK_DMA2 | ||
38 | movne \irqnr, #IRQ_DMA2 | ||
39 | bne 1001f | ||
40 | |||
41 | tst \irqstat, #IRQ_MASK_IN0 | ||
42 | movne \irqnr, #IRQ_IN0 | ||
43 | bne 1001f | ||
44 | |||
45 | tst \irqstat, #IRQ_MASK_IN1 | ||
46 | movne \irqnr, #IRQ_IN1 | ||
47 | bne 1001f | ||
48 | |||
49 | tst \irqstat, #IRQ_MASK_IN2 | ||
50 | movne \irqnr, #IRQ_IN2 | ||
51 | bne 1001f | ||
52 | |||
53 | tst \irqstat, #IRQ_MASK_IN3 | ||
54 | movne \irqnr, #IRQ_IN3 | ||
55 | bne 1001f | ||
56 | |||
57 | tst \irqstat, #IRQ_MASK_PCI | ||
58 | movne \irqnr, #IRQ_PCI | ||
59 | bne 1001f | ||
60 | |||
61 | tst \irqstat, #IRQ_MASK_DOORBELLHOST | ||
62 | movne \irqnr, #IRQ_DOORBELLHOST | ||
63 | bne 1001f | ||
64 | |||
65 | tst \irqstat, #IRQ_MASK_I2OINPOST | ||
66 | movne \irqnr, #IRQ_I2OINPOST | ||
67 | bne 1001f | ||
68 | |||
69 | tst \irqstat, #IRQ_MASK_TIMER1 | ||
70 | movne \irqnr, #IRQ_TIMER1 | ||
71 | bne 1001f | ||
72 | |||
73 | tst \irqstat, #IRQ_MASK_TIMER2 | ||
74 | movne \irqnr, #IRQ_TIMER2 | ||
75 | bne 1001f | ||
76 | |||
77 | tst \irqstat, #IRQ_MASK_TIMER3 | ||
78 | movne \irqnr, #IRQ_TIMER3 | ||
79 | bne 1001f | ||
80 | |||
81 | tst \irqstat, #IRQ_MASK_UART_TX | ||
82 | movne \irqnr, #IRQ_CONTX | ||
83 | bne 1001f | ||
84 | |||
85 | tst \irqstat, #IRQ_MASK_PCI_ABORT | ||
86 | movne \irqnr, #IRQ_PCI_ABORT | ||
87 | bne 1001f | ||
88 | |||
89 | tst \irqstat, #IRQ_MASK_PCI_SERR | ||
90 | movne \irqnr, #IRQ_PCI_SERR | ||
91 | bne 1001f | ||
92 | |||
93 | tst \irqstat, #IRQ_MASK_DISCARD_TIMER | ||
94 | movne \irqnr, #IRQ_DISCARD_TIMER | ||
95 | bne 1001f | ||
96 | |||
97 | tst \irqstat, #IRQ_MASK_PCI_DPERR | ||
98 | movne \irqnr, #IRQ_PCI_DPERR | ||
99 | bne 1001f | ||
100 | |||
101 | tst \irqstat, #IRQ_MASK_PCI_PERR | ||
102 | movne \irqnr, #IRQ_PCI_PERR | ||
103 | 1001: | ||
104 | .endm | ||
105 | |||
diff --git a/include/asm-arm/arch-ebsa285/hardware.h b/include/asm-arm/arch-ebsa285/hardware.h new file mode 100644 index 000000000000..2ef2200f108c --- /dev/null +++ b/include/asm-arm/arch-ebsa285/hardware.h | |||
@@ -0,0 +1,139 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-ebsa285/hardware.h | ||
3 | * | ||
4 | * Copyright (C) 1998-1999 Russell King. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | * This file contains the hardware definitions of the EBSA-285. | ||
11 | */ | ||
12 | #ifndef __ASM_ARCH_HARDWARE_H | ||
13 | #define __ASM_ARCH_HARDWARE_H | ||
14 | |||
15 | #include <linux/config.h> | ||
16 | #include <asm/arch/memory.h> | ||
17 | |||
18 | #ifdef CONFIG_ARCH_FOOTBRIDGE | ||
19 | /* Virtual Physical Size | ||
20 | * 0xff800000 0x40000000 1MB X-Bus | ||
21 | * 0xff000000 0x7c000000 1MB PCI I/O space | ||
22 | * 0xfe000000 0x42000000 1MB CSR | ||
23 | * 0xfd000000 0x78000000 1MB Outbound write flush (not supported) | ||
24 | * 0xfc000000 0x79000000 1MB PCI IACK/special space | ||
25 | * 0xfb000000 0x7a000000 16MB PCI Config type 1 | ||
26 | * 0xfa000000 0x7b000000 16MB PCI Config type 0 | ||
27 | * 0xf9000000 0x50000000 1MB Cache flush | ||
28 | * 0xf0000000 0x80000000 16MB ISA memory | ||
29 | */ | ||
30 | #define XBUS_SIZE 0x00100000 | ||
31 | #define XBUS_BASE 0xff800000 | ||
32 | |||
33 | #define PCIO_SIZE 0x00100000 | ||
34 | #define PCIO_BASE 0xff000000 | ||
35 | |||
36 | #define ARMCSR_SIZE 0x00100000 | ||
37 | #define ARMCSR_BASE 0xfe000000 | ||
38 | |||
39 | #define WFLUSH_SIZE 0x00100000 | ||
40 | #define WFLUSH_BASE 0xfd000000 | ||
41 | |||
42 | #define PCIIACK_SIZE 0x00100000 | ||
43 | #define PCIIACK_BASE 0xfc000000 | ||
44 | |||
45 | #define PCICFG1_SIZE 0x01000000 | ||
46 | #define PCICFG1_BASE 0xfb000000 | ||
47 | |||
48 | #define PCICFG0_SIZE 0x01000000 | ||
49 | #define PCICFG0_BASE 0xfa000000 | ||
50 | |||
51 | #define FLUSH_SIZE 0x00100000 | ||
52 | #define FLUSH_BASE 0xf9000000 | ||
53 | |||
54 | #define PCIMEM_SIZE 0x01000000 | ||
55 | #define PCIMEM_BASE 0xf0000000 | ||
56 | |||
57 | #elif defined(CONFIG_ARCH_CO285) | ||
58 | /* | ||
59 | * This is the COEBSA285 cut-down mapping | ||
60 | */ | ||
61 | #define PCIMEM_SIZE 0x80000000 | ||
62 | #define PCIMEM_BASE 0x80000000 | ||
63 | |||
64 | #define FLUSH_SIZE 0x00100000 | ||
65 | #define FLUSH_BASE 0x7e000000 | ||
66 | |||
67 | #define WFLUSH_SIZE 0x01000000 | ||
68 | #define WFLUSH_BASE 0x7d000000 | ||
69 | |||
70 | #define ARMCSR_SIZE 0x00100000 | ||
71 | #define ARMCSR_BASE 0x7cf00000 | ||
72 | |||
73 | #define XBUS_SIZE 0x00020000 | ||
74 | #define XBUS_BASE 0x7cee0000 | ||
75 | |||
76 | #define PCIO_SIZE 0x00010000 | ||
77 | #define PCIO_BASE 0x7ced0000 | ||
78 | |||
79 | #else | ||
80 | |||
81 | #error "Undefined footbridge architecture" | ||
82 | |||
83 | #endif | ||
84 | |||
85 | #define XBUS_LEDS ((volatile unsigned char *)(XBUS_BASE + 0x12000)) | ||
86 | #define XBUS_LED_AMBER (1 << 0) | ||
87 | #define XBUS_LED_GREEN (1 << 1) | ||
88 | #define XBUS_LED_RED (1 << 2) | ||
89 | #define XBUS_LED_TOGGLE (1 << 8) | ||
90 | |||
91 | #define XBUS_SWITCH ((volatile unsigned char *)(XBUS_BASE + 0x12000)) | ||
92 | #define XBUS_SWITCH_SWITCH ((*XBUS_SWITCH) & 15) | ||
93 | #define XBUS_SWITCH_J17_13 ((*XBUS_SWITCH) & (1 << 4)) | ||
94 | #define XBUS_SWITCH_J17_11 ((*XBUS_SWITCH) & (1 << 5)) | ||
95 | #define XBUS_SWITCH_J17_9 ((*XBUS_SWITCH) & (1 << 6)) | ||
96 | |||
97 | #define FLUSH_BASE_PHYS 0x50000000 | ||
98 | #define UNCACHEABLE_ADDR (ARMCSR_BASE + 0x108) | ||
99 | |||
100 | |||
101 | /* PIC irq control */ | ||
102 | #define PIC_LO 0x20 | ||
103 | #define PIC_MASK_LO 0x21 | ||
104 | #define PIC_HI 0xA0 | ||
105 | #define PIC_MASK_HI 0xA1 | ||
106 | |||
107 | /* GPIO pins */ | ||
108 | #define GPIO_CCLK 0x800 | ||
109 | #define GPIO_DSCLK 0x400 | ||
110 | #define GPIO_E2CLK 0x200 | ||
111 | #define GPIO_IOLOAD 0x100 | ||
112 | #define GPIO_RED_LED 0x080 | ||
113 | #define GPIO_WDTIMER 0x040 | ||
114 | #define GPIO_DATA 0x020 | ||
115 | #define GPIO_IOCLK 0x010 | ||
116 | #define GPIO_DONE 0x008 | ||
117 | #define GPIO_FAN 0x004 | ||
118 | #define GPIO_GREEN_LED 0x002 | ||
119 | #define GPIO_RESET 0x001 | ||
120 | |||
121 | /* CPLD pins */ | ||
122 | #define CPLD_DS_ENABLE 8 | ||
123 | #define CPLD_7111_DISABLE 4 | ||
124 | #define CPLD_UNMUTE 2 | ||
125 | #define CPLD_FLASH_WR_ENABLE 1 | ||
126 | |||
127 | #ifndef __ASSEMBLY__ | ||
128 | extern void gpio_modify_op(int mask, int set); | ||
129 | extern void gpio_modify_io(int mask, int in); | ||
130 | extern int gpio_read(void); | ||
131 | extern void cpld_modify(int mask, int set); | ||
132 | #endif | ||
133 | |||
134 | #define pcibios_assign_all_busses() 1 | ||
135 | |||
136 | #define PCIBIOS_MIN_IO 0x1000 | ||
137 | #define PCIBIOS_MIN_MEM 0x81000000 | ||
138 | |||
139 | #endif | ||
diff --git a/include/asm-arm/arch-ebsa285/io.h b/include/asm-arm/arch-ebsa285/io.h new file mode 100644 index 000000000000..70576b17f922 --- /dev/null +++ b/include/asm-arm/arch-ebsa285/io.h | |||
@@ -0,0 +1,45 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-ebsa285/io.h | ||
3 | * | ||
4 | * Copyright (C) 1997-1999 Russell King | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | * Modifications: | ||
11 | * 06-12-1997 RMK Created. | ||
12 | * 07-04-1999 RMK Major cleanup | ||
13 | */ | ||
14 | #ifndef __ASM_ARM_ARCH_IO_H | ||
15 | #define __ASM_ARM_ARCH_IO_H | ||
16 | |||
17 | #define IO_SPACE_LIMIT 0xffff | ||
18 | |||
19 | /* | ||
20 | * Translation of various region addresses to virtual addresses | ||
21 | */ | ||
22 | #define __io(a) ((void __iomem *)(PCIO_BASE + (a))) | ||
23 | #if 1 | ||
24 | #define __mem_pci(a) (a) | ||
25 | #define __mem_isa(a) ((a) + PCIMEM_BASE) | ||
26 | #else | ||
27 | |||
28 | static inline void __iomem *___mem_pci(void __iomem *p) | ||
29 | { | ||
30 | unsigned long a = (unsigned long)p; | ||
31 | BUG_ON(a <= 0xc0000000 || a >= 0xe0000000); | ||
32 | return p; | ||
33 | } | ||
34 | |||
35 | static inline void __iomem *___mem_isa(void __iomem *p) | ||
36 | { | ||
37 | unsigned long a = (unsigned long)p; | ||
38 | BUG_ON(a >= 16*1048576); | ||
39 | return p + PCIMEM_BASE; | ||
40 | } | ||
41 | #define __mem_pci(a) ___mem_pci(a) | ||
42 | #define __mem_isa(a) ___mem_isa(a) | ||
43 | #endif | ||
44 | |||
45 | #endif | ||
diff --git a/include/asm-arm/arch-ebsa285/irqs.h b/include/asm-arm/arch-ebsa285/irqs.h new file mode 100644 index 000000000000..3e766f1cecf1 --- /dev/null +++ b/include/asm-arm/arch-ebsa285/irqs.h | |||
@@ -0,0 +1,98 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-ebsa285/irqs.h | ||
3 | * | ||
4 | * Copyright (C) 1998 Russell King | ||
5 | * Copyright (C) 1998 Phil Blundell | ||
6 | * | ||
7 | * Changelog: | ||
8 | * 20-Jan-1998 RMK Started merge of EBSA286, CATS and NetWinder | ||
9 | * 01-Feb-1999 PJB ISA IRQs start at 0 not 16 | ||
10 | */ | ||
11 | #include <asm/mach-types.h> | ||
12 | |||
13 | #define NR_IRQS 36 | ||
14 | #define NR_DC21285_IRQS 16 | ||
15 | |||
16 | #define _ISA_IRQ(x) (0 + (x)) | ||
17 | #define _ISA_INR(x) ((x) - 0) | ||
18 | #define _DC21285_IRQ(x) (16 + (x)) | ||
19 | #define _DC21285_INR(x) ((x) - 16) | ||
20 | |||
21 | /* | ||
22 | * This is a list of all interrupts that the 21285 | ||
23 | * can generate and we handle. | ||
24 | */ | ||
25 | #define IRQ_CONRX _DC21285_IRQ(0) | ||
26 | #define IRQ_CONTX _DC21285_IRQ(1) | ||
27 | #define IRQ_TIMER1 _DC21285_IRQ(2) | ||
28 | #define IRQ_TIMER2 _DC21285_IRQ(3) | ||
29 | #define IRQ_TIMER3 _DC21285_IRQ(4) | ||
30 | #define IRQ_IN0 _DC21285_IRQ(5) | ||
31 | #define IRQ_IN1 _DC21285_IRQ(6) | ||
32 | #define IRQ_IN2 _DC21285_IRQ(7) | ||
33 | #define IRQ_IN3 _DC21285_IRQ(8) | ||
34 | #define IRQ_DOORBELLHOST _DC21285_IRQ(9) | ||
35 | #define IRQ_DMA1 _DC21285_IRQ(10) | ||
36 | #define IRQ_DMA2 _DC21285_IRQ(11) | ||
37 | #define IRQ_PCI _DC21285_IRQ(12) | ||
38 | #define IRQ_SDRAMPARITY _DC21285_IRQ(13) | ||
39 | #define IRQ_I2OINPOST _DC21285_IRQ(14) | ||
40 | #define IRQ_PCI_ABORT _DC21285_IRQ(15) | ||
41 | #define IRQ_PCI_SERR _DC21285_IRQ(16) | ||
42 | #define IRQ_DISCARD_TIMER _DC21285_IRQ(17) | ||
43 | #define IRQ_PCI_DPERR _DC21285_IRQ(18) | ||
44 | #define IRQ_PCI_PERR _DC21285_IRQ(19) | ||
45 | |||
46 | #define IRQ_ISA_TIMER _ISA_IRQ(0) | ||
47 | #define IRQ_ISA_KEYBOARD _ISA_IRQ(1) | ||
48 | #define IRQ_ISA_CASCADE _ISA_IRQ(2) | ||
49 | #define IRQ_ISA_UART2 _ISA_IRQ(3) | ||
50 | #define IRQ_ISA_UART _ISA_IRQ(4) | ||
51 | #define IRQ_ISA_FLOPPY _ISA_IRQ(6) | ||
52 | #define IRQ_ISA_PRINTER _ISA_IRQ(7) | ||
53 | #define IRQ_ISA_RTC_ALARM _ISA_IRQ(8) | ||
54 | #define IRQ_ISA_2 _ISA_IRQ(9) | ||
55 | #define IRQ_ISA_PS2MOUSE _ISA_IRQ(12) | ||
56 | #define IRQ_ISA_HARDDISK1 _ISA_IRQ(14) | ||
57 | #define IRQ_ISA_HARDDISK2 _ISA_IRQ(15) | ||
58 | |||
59 | #define IRQ_MASK_UART_RX (1 << 2) | ||
60 | #define IRQ_MASK_UART_TX (1 << 3) | ||
61 | #define IRQ_MASK_TIMER1 (1 << 4) | ||
62 | #define IRQ_MASK_TIMER2 (1 << 5) | ||
63 | #define IRQ_MASK_TIMER3 (1 << 6) | ||
64 | #define IRQ_MASK_IN0 (1 << 8) | ||
65 | #define IRQ_MASK_IN1 (1 << 9) | ||
66 | #define IRQ_MASK_IN2 (1 << 10) | ||
67 | #define IRQ_MASK_IN3 (1 << 11) | ||
68 | #define IRQ_MASK_DOORBELLHOST (1 << 15) | ||
69 | #define IRQ_MASK_DMA1 (1 << 16) | ||
70 | #define IRQ_MASK_DMA2 (1 << 17) | ||
71 | #define IRQ_MASK_PCI (1 << 18) | ||
72 | #define IRQ_MASK_SDRAMPARITY (1 << 24) | ||
73 | #define IRQ_MASK_I2OINPOST (1 << 25) | ||
74 | #define IRQ_MASK_PCI_ABORT ((1 << 29) | (1 << 30)) | ||
75 | #define IRQ_MASK_PCI_SERR (1 << 23) | ||
76 | #define IRQ_MASK_DISCARD_TIMER (1 << 27) | ||
77 | #define IRQ_MASK_PCI_DPERR (1 << 28) | ||
78 | #define IRQ_MASK_PCI_PERR (1 << 31) | ||
79 | |||
80 | /* | ||
81 | * Netwinder interrupt allocations | ||
82 | */ | ||
83 | #define IRQ_NETWINDER_ETHER10 IRQ_IN0 | ||
84 | #define IRQ_NETWINDER_ETHER100 IRQ_IN1 | ||
85 | #define IRQ_NETWINDER_VIDCOMP IRQ_IN2 | ||
86 | #define IRQ_NETWINDER_PS2MOUSE _ISA_IRQ(5) | ||
87 | #define IRQ_NETWINDER_IR _ISA_IRQ(6) | ||
88 | #define IRQ_NETWINDER_BUTTON _ISA_IRQ(10) | ||
89 | #define IRQ_NETWINDER_VGA _ISA_IRQ(11) | ||
90 | #define IRQ_NETWINDER_SOUND _ISA_IRQ(12) | ||
91 | |||
92 | #undef RTC_IRQ | ||
93 | #define RTC_IRQ IRQ_ISA_RTC_ALARM | ||
94 | #define I8042_KBD_IRQ IRQ_ISA_KEYBOARD | ||
95 | #define I8042_AUX_IRQ (machine_is_netwinder() ? IRQ_NETWINDER_PS2MOUSE : IRQ_ISA_PS2MOUSE) | ||
96 | #define IRQ_FLOPPYDISK IRQ_ISA_FLOPPY | ||
97 | |||
98 | #define irq_canonicalize(_i) (((_i) == IRQ_ISA_CASCADE) ? IRQ_ISA_2 : _i) | ||
diff --git a/include/asm-arm/arch-ebsa285/memory.h b/include/asm-arm/arch-ebsa285/memory.h new file mode 100644 index 000000000000..d0466f9987d3 --- /dev/null +++ b/include/asm-arm/arch-ebsa285/memory.h | |||
@@ -0,0 +1,75 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-ebsa285/memory.h | ||
3 | * | ||
4 | * Copyright (C) 1996-1999 Russell King. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | * Changelog: | ||
11 | * 20-Oct-1996 RMK Created | ||
12 | * 31-Dec-1997 RMK Fixed definitions to reduce warnings. | ||
13 | * 17-May-1998 DAG Added __virt_to_bus and __bus_to_virt functions. | ||
14 | * 21-Nov-1998 RMK Changed __virt_to_bus and __bus_to_virt to macros. | ||
15 | * 21-Mar-1999 RMK Added PAGE_OFFSET for co285 architecture. | ||
16 | * Renamed to memory.h | ||
17 | * Moved PAGE_OFFSET and TASK_SIZE here | ||
18 | */ | ||
19 | #ifndef __ASM_ARCH_MEMORY_H | ||
20 | #define __ASM_ARCH_MEMORY_H | ||
21 | |||
22 | #include <linux/config.h> | ||
23 | |||
24 | #if defined(CONFIG_FOOTBRIDGE_ADDIN) | ||
25 | /* | ||
26 | * If we may be using add-in footbridge mode, then we must | ||
27 | * use the out-of-line translation that makes use of the | ||
28 | * PCI BAR | ||
29 | */ | ||
30 | #ifndef __ASSEMBLY__ | ||
31 | extern unsigned long __virt_to_bus(unsigned long); | ||
32 | extern unsigned long __bus_to_virt(unsigned long); | ||
33 | #endif | ||
34 | |||
35 | #elif defined(CONFIG_FOOTBRIDGE_HOST) | ||
36 | |||
37 | #define __virt_to_bus(x) ((x) - 0xe0000000) | ||
38 | #define __bus_to_virt(x) ((x) + 0xe0000000) | ||
39 | |||
40 | #else | ||
41 | |||
42 | #error "Undefined footbridge mode" | ||
43 | |||
44 | #endif | ||
45 | |||
46 | #if defined(CONFIG_ARCH_FOOTBRIDGE) | ||
47 | |||
48 | /* Task size and page offset at 3GB */ | ||
49 | #define TASK_SIZE (0xbf000000UL) | ||
50 | #define PAGE_OFFSET (0xc0000000UL) | ||
51 | |||
52 | #elif defined(CONFIG_ARCH_CO285) | ||
53 | |||
54 | /* Task size and page offset at 1.5GB */ | ||
55 | #define TASK_SIZE (0x5f000000UL) | ||
56 | #define PAGE_OFFSET (0x60000000UL) | ||
57 | |||
58 | #else | ||
59 | |||
60 | #error "Undefined footbridge architecture" | ||
61 | |||
62 | #endif | ||
63 | |||
64 | /* | ||
65 | * Physical DRAM offset. | ||
66 | */ | ||
67 | #define PHYS_OFFSET (0x00000000UL) | ||
68 | |||
69 | /* | ||
70 | * This decides where the kernel will search for a free chunk of vm | ||
71 | * space during mmap's. | ||
72 | */ | ||
73 | #define TASK_UNMAPPED_BASE ((TASK_SIZE + 0x01000000) / 3) | ||
74 | |||
75 | #endif | ||
diff --git a/include/asm-arm/arch-ebsa285/param.h b/include/asm-arm/arch-ebsa285/param.h new file mode 100644 index 000000000000..3827103b27a0 --- /dev/null +++ b/include/asm-arm/arch-ebsa285/param.h | |||
@@ -0,0 +1,3 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-ebsa285/param.h | ||
3 | */ | ||
diff --git a/include/asm-arm/arch-ebsa285/system.h b/include/asm-arm/arch-ebsa285/system.h new file mode 100644 index 000000000000..bf91c695c4b5 --- /dev/null +++ b/include/asm-arm/arch-ebsa285/system.h | |||
@@ -0,0 +1,69 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-ebsa285/system.h | ||
3 | * | ||
4 | * Copyright (C) 1996-1999 Russell King. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | */ | ||
10 | #include <asm/hardware/dec21285.h> | ||
11 | #include <asm/io.h> | ||
12 | #include <asm/hardware.h> | ||
13 | #include <asm/leds.h> | ||
14 | #include <asm/mach-types.h> | ||
15 | |||
16 | static inline void arch_idle(void) | ||
17 | { | ||
18 | cpu_do_idle(); | ||
19 | } | ||
20 | |||
21 | static inline void arch_reset(char mode) | ||
22 | { | ||
23 | if (mode == 's') { | ||
24 | /* | ||
25 | * Jump into the ROM | ||
26 | */ | ||
27 | cpu_reset(0x41000000); | ||
28 | } else { | ||
29 | if (machine_is_netwinder()) { | ||
30 | /* open up the SuperIO chip | ||
31 | */ | ||
32 | outb(0x87, 0x370); | ||
33 | outb(0x87, 0x370); | ||
34 | |||
35 | /* aux function group 1 (logical device 7) | ||
36 | */ | ||
37 | outb(0x07, 0x370); | ||
38 | outb(0x07, 0x371); | ||
39 | |||
40 | /* set GP16 for WD-TIMER output | ||
41 | */ | ||
42 | outb(0xe6, 0x370); | ||
43 | outb(0x00, 0x371); | ||
44 | |||
45 | /* set a RED LED and toggle WD_TIMER for rebooting | ||
46 | */ | ||
47 | outb(0xc4, 0x338); | ||
48 | } else { | ||
49 | /* | ||
50 | * Force the watchdog to do a CPU reset. | ||
51 | * | ||
52 | * After making sure that the watchdog is disabled | ||
53 | * (so we can change the timer registers) we first | ||
54 | * enable the timer to autoreload itself. Next, the | ||
55 | * timer interval is set really short and any | ||
56 | * current interrupt request is cleared (so we can | ||
57 | * see an edge transition). Finally, TIMER4 is | ||
58 | * enabled as the watchdog. | ||
59 | */ | ||
60 | *CSR_SA110_CNTL &= ~(1 << 13); | ||
61 | *CSR_TIMER4_CNTL = TIMER_CNTL_ENABLE | | ||
62 | TIMER_CNTL_AUTORELOAD | | ||
63 | TIMER_CNTL_DIV16; | ||
64 | *CSR_TIMER4_LOAD = 0x2; | ||
65 | *CSR_TIMER4_CLR = 0; | ||
66 | *CSR_SA110_CNTL |= (1 << 13); | ||
67 | } | ||
68 | } | ||
69 | } | ||
diff --git a/include/asm-arm/arch-ebsa285/timex.h b/include/asm-arm/arch-ebsa285/timex.h new file mode 100644 index 000000000000..df60b3812d96 --- /dev/null +++ b/include/asm-arm/arch-ebsa285/timex.h | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-ebsa285/timex.h | ||
3 | * | ||
4 | * Copyright (C) 1998 Russell King | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | * EBSA285 architecture timex specifications | ||
11 | */ | ||
12 | |||
13 | /* | ||
14 | * We assume a constant here; this satisfies the maths in linux/timex.h | ||
15 | * and linux/time.h. CLOCK_TICK_RATE is actually system dependent, but | ||
16 | * this must be a constant. | ||
17 | */ | ||
18 | #define CLOCK_TICK_RATE (50000000/16) | ||
diff --git a/include/asm-arm/arch-ebsa285/uncompress.h b/include/asm-arm/arch-ebsa285/uncompress.h new file mode 100644 index 000000000000..c2fd84e2d90e --- /dev/null +++ b/include/asm-arm/arch-ebsa285/uncompress.h | |||
@@ -0,0 +1,46 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-ebsa285/uncompress.h | ||
3 | * | ||
4 | * Copyright (C) 1996-1999 Russell King | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | */ | ||
10 | #include <asm/mach-types.h> | ||
11 | |||
12 | /* | ||
13 | * Note! This could cause problems on the NetWinder | ||
14 | */ | ||
15 | #define DC21285_BASE ((volatile unsigned int *)0x42000160) | ||
16 | #define SER0_BASE ((volatile unsigned char *)0x7c0003f8) | ||
17 | |||
18 | static __inline__ void putc(char c) | ||
19 | { | ||
20 | if (machine_is_netwinder()) { | ||
21 | while ((SER0_BASE[5] & 0x60) != 0x60); | ||
22 | SER0_BASE[0] = c; | ||
23 | } else { | ||
24 | while (DC21285_BASE[6] & 8); | ||
25 | DC21285_BASE[0] = c; | ||
26 | } | ||
27 | } | ||
28 | |||
29 | /* | ||
30 | * This does not append a newline | ||
31 | */ | ||
32 | static void putstr(const char *s) | ||
33 | { | ||
34 | while (*s) { | ||
35 | putc(*s); | ||
36 | if (*s == '\n') | ||
37 | putc('\r'); | ||
38 | s++; | ||
39 | } | ||
40 | } | ||
41 | |||
42 | /* | ||
43 | * nothing to do | ||
44 | */ | ||
45 | #define arch_decomp_setup() | ||
46 | #define arch_decomp_wdog() | ||
diff --git a/include/asm-arm/arch-ebsa285/vmalloc.h b/include/asm-arm/arch-ebsa285/vmalloc.h new file mode 100644 index 000000000000..def705a3c209 --- /dev/null +++ b/include/asm-arm/arch-ebsa285/vmalloc.h | |||
@@ -0,0 +1,26 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-ebsa285/vmalloc.h | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify | ||
5 | * it under the terms of the GNU General Public License version 2 as | ||
6 | * published by the Free Software Foundation. | ||
7 | */ | ||
8 | |||
9 | #include <linux/config.h> | ||
10 | |||
11 | /* | ||
12 | * Just any arbitrary offset to the start of the vmalloc VM area: the | ||
13 | * current 8MB value just means that there will be a 8MB "hole" after the | ||
14 | * physical memory until the kernel virtual memory starts. That means that | ||
15 | * any out-of-bounds memory accesses will hopefully be caught. | ||
16 | * The vmalloc() routines leaves a hole of 4kB between each vmalloced | ||
17 | * area for the same reason. ;) | ||
18 | */ | ||
19 | #define VMALLOC_OFFSET (8*1024*1024) | ||
20 | #define VMALLOC_START (((unsigned long)high_memory + VMALLOC_OFFSET) & ~(VMALLOC_OFFSET-1)) | ||
21 | |||
22 | #ifdef CONFIG_ARCH_FOOTBRIDGE | ||
23 | #define VMALLOC_END (PAGE_OFFSET + 0x30000000) | ||
24 | #else | ||
25 | #define VMALLOC_END (PAGE_OFFSET + 0x20000000) | ||
26 | #endif | ||
diff --git a/include/asm-arm/arch-epxa10db/debug-macro.S b/include/asm-arm/arch-epxa10db/debug-macro.S new file mode 100644 index 000000000000..1d11c51f498f --- /dev/null +++ b/include/asm-arm/arch-epxa10db/debug-macro.S | |||
@@ -0,0 +1,41 @@ | |||
1 | /* linux/include/asm-arm/arch-epxa10db/debug-macro.S | ||
2 | * | ||
3 | * Debugging macro include header | ||
4 | * | ||
5 | * Copyright (C) 1994-1999 Russell King | ||
6 | * Moved from linux/arch/arm/kernel/debug.S by Ben Dooks | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | * | ||
12 | */ | ||
13 | |||
14 | #include <asm/arch/excalibur.h> | ||
15 | #define UART00_TYPE | ||
16 | #include <asm/arch/uart00.h> | ||
17 | |||
18 | .macro addruart,rx | ||
19 | mrc p15, 0, \rx, c1, c0 | ||
20 | tst \rx, #1 @ MMU enabled? | ||
21 | ldr \rx, =EXC_UART00_BASE @ physical base address | ||
22 | orrne \rx, \rx, #0xff000000 @ virtual base | ||
23 | orrne \rx, \rx, #0x00f00000 | ||
24 | .endm | ||
25 | |||
26 | .macro senduart,rd,rx | ||
27 | str \rd, [\rx, #UART_TD(0)] | ||
28 | .endm | ||
29 | |||
30 | .macro waituart,rd,rx | ||
31 | 1001: ldr \rd, [\rx, #UART_TSR(0)] | ||
32 | and \rd, \rd, #UART_TSR_TX_LEVEL_MSK | ||
33 | cmp \rd, #15 | ||
34 | beq 1001b | ||
35 | .endm | ||
36 | |||
37 | .macro busyuart,rd,rx | ||
38 | 1001: ldr \rd, [\rx, #UART_TSR(0)] | ||
39 | ands \rd, \rd, #UART_TSR_TX_LEVEL_MSK | ||
40 | bne 1001b | ||
41 | .endm | ||
diff --git a/include/asm-arm/arch-epxa10db/dma.h b/include/asm-arm/arch-epxa10db/dma.h new file mode 100644 index 000000000000..5d97734d1077 --- /dev/null +++ b/include/asm-arm/arch-epxa10db/dma.h | |||
@@ -0,0 +1,28 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-camelot/dma.h | ||
3 | * | ||
4 | * Copyright (C) 1997,1998 Russell King | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | * GNU General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License | ||
17 | * along with this program; if not, write to the Free Software | ||
18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
19 | */ | ||
20 | #ifndef __ASM_ARCH_DMA_H | ||
21 | #define __ASM_ARCH_DMA_H | ||
22 | |||
23 | #define MAX_DMA_ADDRESS 0xffffffff | ||
24 | |||
25 | #define MAX_DMA_CHANNELS 0 | ||
26 | |||
27 | #endif /* _ASM_ARCH_DMA_H */ | ||
28 | |||
diff --git a/include/asm-arm/arch-epxa10db/entry-macro.S b/include/asm-arm/arch-epxa10db/entry-macro.S new file mode 100644 index 000000000000..de6ae08334e2 --- /dev/null +++ b/include/asm-arm/arch-epxa10db/entry-macro.S | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-epxa10db/entry-macro.S | ||
3 | * | ||
4 | * Low-level IRQ helper macros for epxa10db platform | ||
5 | * | ||
6 | * This file is licensed under the terms of the GNU General Public | ||
7 | * License version 2. This program is licensed "as is" without any | ||
8 | * warranty of any kind, whether express or implied. | ||
9 | */ | ||
10 | #include <asm/arch/platform.h> | ||
11 | #undef IRQ_MODE /* same name defined in asm/proc/ptrace.h */ | ||
12 | #include <asm/arch/int_ctrl00.h> | ||
13 | |||
14 | .macro disable_fiq | ||
15 | .endm | ||
16 | |||
17 | .macro get_irqnr_and_base, irqnr, irqstat, base, tmp | ||
18 | |||
19 | ldr \irqstat, =INT_ID(IO_ADDRESS(EXC_INT_CTRL00_BASE)) | ||
20 | ldr \irqnr,[\irqstat] | ||
21 | cmp \irqnr,#0 | ||
22 | subne \irqnr,\irqnr,#1 | ||
23 | |||
24 | .endm | ||
25 | |||
diff --git a/include/asm-arm/arch-epxa10db/ether00.h b/include/asm-arm/arch-epxa10db/ether00.h new file mode 100644 index 000000000000..b737b8aabe2f --- /dev/null +++ b/include/asm-arm/arch-epxa10db/ether00.h | |||
@@ -0,0 +1,482 @@ | |||
1 | #ifndef __ETHER00_H | ||
2 | #define __ETHER00_H | ||
3 | |||
4 | |||
5 | |||
6 | /* | ||
7 | * Register definitions for the Ethernet MAC | ||
8 | */ | ||
9 | |||
10 | /* | ||
11 | * Copyright (c) Altera Corporation 2000. | ||
12 | * All rights reserved. | ||
13 | */ | ||
14 | |||
15 | /* | ||
16 | * Structures for the DMA controller | ||
17 | */ | ||
18 | typedef struct fda_desc | ||
19 | { | ||
20 | struct fda_desc * FDNext; | ||
21 | long FDSystem; | ||
22 | long FDStat; | ||
23 | short FDLength; | ||
24 | short FDCtl; | ||
25 | }FDA_DESC; | ||
26 | |||
27 | typedef struct buf_desc | ||
28 | { | ||
29 | char * BuffData; | ||
30 | short BuffLength; | ||
31 | char BDStat; | ||
32 | char BDCtl; | ||
33 | }BUF_DESC; | ||
34 | |||
35 | /* | ||
36 | * Control masks for the DMA controller | ||
37 | */ | ||
38 | #define FDCTL_BDCOUNT_MSK (0x1F) | ||
39 | #define FDCTL_BDCOUNT_OFST (0) | ||
40 | #define FDCTL_FRMOPT_MSK (0x7C00) | ||
41 | #define FDCTL_FRMOPT_OFST (10) | ||
42 | #define FDCTL_COWNSFD_MSK (0x8000) | ||
43 | #define FDCTL_COWNSFD_OFST (15) | ||
44 | |||
45 | #define BDCTL_RXBDSEQN_MSK (0x7F) | ||
46 | #define BDCTL_RXBDSEQN_OFST (0) | ||
47 | #define BDCTL_COWNSBD_MSK (0x80) | ||
48 | #define BDCTL_COWNSBD_OFST (7) | ||
49 | |||
50 | #define FDNEXT_EOL_MSK (0x1) | ||
51 | #define FDNEXT_EOL_OFST (0) | ||
52 | #define FDNEXT_EOL_POINTER_MSK (0xFFFFFFF0) | ||
53 | #define FDNEXT_EOL_POINTER_OFST (4) | ||
54 | |||
55 | #define ETHER_ARC_SIZE (21) | ||
56 | |||
57 | /* | ||
58 | * Register definitions and masks | ||
59 | */ | ||
60 | #define ETHER_DMA_CTL(base) (ETHER00_TYPE (base + 0x100)) | ||
61 | #define ETHER_DMA_CTL_DMBURST_OFST (2) | ||
62 | #define ETHER_DMA_CTL_DMBURST_MSK (0x1FC) | ||
63 | #define ETHER_DMA_CTL_POWRMGMNT_OFST (11) | ||
64 | #define ETHER_DMA_CTL_POWRMGMNT_MSK (0x1000) | ||
65 | #define ETHER_DMA_CTL_TXBIGE_OFST (14) | ||
66 | #define ETHER_DMA_CTL_TXBIGE_MSK (0x4000) | ||
67 | #define ETHER_DMA_CTL_RXBIGE_OFST (15) | ||
68 | #define ETHER_DMA_CTL_RXBIGE_MSK (0x8000) | ||
69 | #define ETHER_DMA_CTL_TXWAKEUP_OFST (16) | ||
70 | #define ETHER_DMA_CTL_TXWAKEUP_MSK (0x10000) | ||
71 | #define ETHER_DMA_CTL_SWINTREQ_OFST (17) | ||
72 | #define ETHER_DMA_CTL_SWINTREQ_MSK (0x20000) | ||
73 | #define ETHER_DMA_CTL_INTMASK_OFST (18) | ||
74 | #define ETHER_DMA_CTL_INTMASK_MSK (0x40000) | ||
75 | #define ETHER_DMA_CTL_M66ENSTAT_OFST (19) | ||
76 | #define ETHER_DMA_CTL_M66ENSTAT_MSK (0x80000) | ||
77 | #define ETHER_DMA_CTL_RMTXINIT_OFST (20) | ||
78 | #define ETHER_DMA_CTL_RMTXINIT_MSK (0x100000) | ||
79 | #define ETHER_DMA_CTL_RMRXINIT_OFST (21) | ||
80 | #define ETHER_DMA_CTL_RMRXINIT_MSK (0x200000) | ||
81 | #define ETHER_DMA_CTL_RXALIGN_OFST (22) | ||
82 | #define ETHER_DMA_CTL_RXALIGN_MSK (0xC00000) | ||
83 | #define ETHER_DMA_CTL_RMSWRQ_OFST (24) | ||
84 | #define ETHER_DMA_CTL_RMSWRQ_MSK (0x1000000) | ||
85 | #define ETHER_DMA_CTL_RMEMBANK_OFST (25) | ||
86 | #define ETHER_DMA_CTL_RMEMBANK_MSK (0x2000000) | ||
87 | |||
88 | #define ETHER_TXFRMPTR(base) (ETHER00_TYPE (base + 0x104)) | ||
89 | |||
90 | #define ETHER_TXTHRSH(base) (ETHER00_TYPE (base + 0x308)) | ||
91 | |||
92 | #define ETHER_TXPOLLCTR(base) (ETHER00_TYPE (base + 0x30c)) | ||
93 | |||
94 | #define ETHER_BLFRMPTR(base) (ETHER00_TYPE (base + 0x110)) | ||
95 | #define ETHER_BLFFRMPTR_EOL_OFST (0) | ||
96 | #define ETHER_BLFFRMPTR_EOL_MSK (0x1) | ||
97 | #define ETHER_BLFFRMPTR_ADDRESS_OFST (4) | ||
98 | #define ETHER_BLFFRMPTR_ADDRESS_MSK (0xFFFFFFF0) | ||
99 | |||
100 | #define ETHER_RXFRAGSIZE(base) (ETHER00_TYPE (base + 0x114)) | ||
101 | #define ETHER_RXFRAGSIZE_MINFRAG_OFST (2) | ||
102 | #define ETHER_RXFRAGSIZE_MINFRAG_MSK (0xFFC) | ||
103 | #define ETHER_RXFRAGSIZE_ENPACK_OFST (15) | ||
104 | #define ETHER_RXFRAGSIZE_ENPACK_MSK (0x8000) | ||
105 | |||
106 | #define ETHER_INT_EN(base) (ETHER00_TYPE (base + 0x118)) | ||
107 | #define ETHER_INT_EN_FDAEXEN_OFST (0) | ||
108 | #define ETHER_INT_EN_FDAEXEN_MSK (0x1) | ||
109 | #define ETHER_INT_EN_BLEXEN_OFST (1) | ||
110 | #define ETHER_INT_EN_BLEXN_MSK (0x2) | ||
111 | #define ETHER_INT_EN_STARGABTEN_OFST (2) | ||
112 | #define ETHER_INT_EN_STARGABTEN_MSK (0x4) | ||
113 | #define ETHER_INT_EN_RTARGABTEN_OFST (3) | ||
114 | #define ETHER_INT_EN_RTARGABTEN_MSK (0x8) | ||
115 | #define ETHER_INT_EN_RMASABTEN_OFST (4) | ||
116 | #define ETHER_INT_EN_RMASABTEN_MSK (0x10) | ||
117 | #define ETHER_INT_EN_SSYSERREN_OFST (5) | ||
118 | #define ETHER_INT_EN_SSYSERREN_MSK (0x20) | ||
119 | #define ETHER_INT_EN_DPARERREN_OFST (6) | ||
120 | #define ETHER_INT_EN_DPARERREN_MSK (0x40) | ||
121 | #define ETHER_INT_EN_EARNOTEN_OFST (7) | ||
122 | #define ETHER_INT_EN_EARNOTEN_MSK (0x80) | ||
123 | #define ETHER_INT_EN_DPARDEN_OFST (8) | ||
124 | #define ETHER_INT_EN_DPARDEN_MSK (0x100) | ||
125 | #define ETHER_INT_EN_DMPARERREN_OFST (9) | ||
126 | #define ETHER_INT_EN_DMPARERREN_MSK (0x200) | ||
127 | #define ETHER_INT_EN_TXCTLCMPEN_OFST (10) | ||
128 | #define ETHER_INT_EN_TXCTLCMPEN_MSK (0x400) | ||
129 | #define ETHER_INT_EN_NRABTEN_OFST (11) | ||
130 | #define ETHER_INT_EN_NRABTEN_MSK (0x800) | ||
131 | |||
132 | #define ETHER_FDA_BAS(base) (ETHER00_TYPE (base + 0x11C)) | ||
133 | #define ETHER_FDA_BAS_ADDRESS_OFST (4) | ||
134 | #define ETHER_FDA_BAS_ADDRESS_MSK (0xFFFFFFF0) | ||
135 | |||
136 | #define ETHER_FDA_LIM(base) (ETHER00_TYPE (base + 0x120)) | ||
137 | #define ETHER_FDA_LIM_COUNT_OFST (4) | ||
138 | #define ETHER_FDA_LIM_COUNT_MSK (0xFFF0) | ||
139 | |||
140 | #define ETHER_INT_SRC(base) (ETHER00_TYPE (base + 0x124)) | ||
141 | #define ETHER_INT_SRC_INTMACTX_OFST (0) | ||
142 | #define ETHER_INT_SRC_INTMACTX_MSK (0x1) | ||
143 | #define ETHER_INT_SRC_INTMACRX_OFST (1) | ||
144 | #define ETHER_INT_SRC_INTMACRX_MSK (0x2) | ||
145 | #define ETHER_INT_SRC_INTSBUS_OFST (2) | ||
146 | #define ETHER_INT_SRC_INTSBUS_MSK (0x4) | ||
147 | #define ETHER_INT_SRC_INTFDAEX_OFST (3) | ||
148 | #define ETHER_INT_SRC_INTFDAEX_MSK (0x8) | ||
149 | #define ETHER_INT_SRC_INTBLEX_OFST (4) | ||
150 | #define ETHER_INT_SRC_INTBLEX_MSK (0x10) | ||
151 | #define ETHER_INT_SRC_SWINT_OFST (5) | ||
152 | #define ETHER_INT_SRC_SWINT_MSK (0x20) | ||
153 | #define ETHER_INT_SRC_INTEARNOT_OFST (6) | ||
154 | #define ETHER_INT_SRC_INTEARNOT_MSK (0x40) | ||
155 | #define ETHER_INT_SRC_DMPARERR_OFST (7) | ||
156 | #define ETHER_INT_SRC_DMPARERR_MSK (0x80) | ||
157 | #define ETHER_INT_SRC_INTEXBD_OFST (8) | ||
158 | #define ETHER_INT_SRC_INTEXBD_MSK (0x100) | ||
159 | #define ETHER_INT_SRC_INTTXCTLCMP_OFST (9) | ||
160 | #define ETHER_INT_SRC_INTTXCTLCMP_MSK (0x200) | ||
161 | #define ETHER_INT_SRC_INTNRABT_OFST (10) | ||
162 | #define ETHER_INT_SRC_INTNRABT_MSK (0x400) | ||
163 | #define ETHER_INT_SRC_FDAEX_OFST (11) | ||
164 | #define ETHER_INT_SRC_FDAEX_MSK (0x800) | ||
165 | #define ETHER_INT_SRC_BLEX_OFST (12) | ||
166 | #define ETHER_INT_SRC_BLEX_MSK (0x1000) | ||
167 | #define ETHER_INT_SRC_DMPARERRSTAT_OFST (13) | ||
168 | #define ETHER_INT_SRC_DMPARERRSTAT_MSK (0x2000) | ||
169 | #define ETHER_INT_SRC_NRABT_OFST (14) | ||
170 | #define ETHER_INT_SRC_NRABT_MSK (0x4000) | ||
171 | #define ETHER_INT_SRC_INTLINK_OFST (15) | ||
172 | #define ETHER_INT_SRC_INTLINK_MSK (0x8000) | ||
173 | #define ETHER_INT_SRC_INTEXDEFER_OFST (16) | ||
174 | #define ETHER_INT_SRC_INTEXDEFER_MSK (0x10000) | ||
175 | #define ETHER_INT_SRC_INTRMON_OFST (17) | ||
176 | #define ETHER_INT_SRC_INTRMON_MSK (0x20000) | ||
177 | #define ETHER_INT_SRC_IRQ_MSK (0x83FF) | ||
178 | |||
179 | #define ETHER_PAUSECNT(base) (ETHER00_TYPE (base + 0x40)) | ||
180 | #define ETHER_PAUSECNT_COUNT_OFST (0) | ||
181 | #define ETHER_PAUSECNT_COUNT_MSK (0xFFFF) | ||
182 | |||
183 | #define ETHER_REMPAUCNT(base) (ETHER00_TYPE (base + 0x44)) | ||
184 | #define ETHER_REMPAUCNT_COUNT_OFST (0) | ||
185 | #define ETHER_REMPAUCNT_COUNT_MSK (0xFFFF) | ||
186 | |||
187 | #define ETHER_TXCONFRMSTAT(base) (ETHER00_TYPE (base + 0x348)) | ||
188 | #define ETHER_TXCONFRMSTAT_TS_STAT_VALUE_OFST (0) | ||
189 | #define ETHER_TXCONFRMSTAT_TS_STAT_VALUE_MSK (0x3FFFFF) | ||
190 | |||
191 | #define ETHER_MAC_CTL(base) (ETHER00_TYPE (base + 0)) | ||
192 | #define ETHER_MAC_CTL_HALTREQ_OFST (0) | ||
193 | #define ETHER_MAC_CTL_HALTREQ_MSK (0x1) | ||
194 | #define ETHER_MAC_CTL_HALTIMM_OFST (1) | ||
195 | #define ETHER_MAC_CTL_HALTIMM_MSK (0x2) | ||
196 | #define ETHER_MAC_CTL_RESET_OFST (2) | ||
197 | #define ETHER_MAC_CTL_RESET_MSK (0x4) | ||
198 | #define ETHER_MAC_CTL_FULLDUP_OFST (3) | ||
199 | #define ETHER_MAC_CTL_FULLDUP_MSK (0x8) | ||
200 | #define ETHER_MAC_CTL_MACLOOP_OFST (4) | ||
201 | #define ETHER_MAC_CTL_MACLOOP_MSK (0x10) | ||
202 | #define ETHER_MAC_CTL_CONN_OFST (5) | ||
203 | #define ETHER_MAC_CTL_CONN_MSK (0x60) | ||
204 | #define ETHER_MAC_CTL_LOOP10_OFST (7) | ||
205 | #define ETHER_MAC_CTL_LOOP10_MSK (0x80) | ||
206 | #define ETHER_MAC_CTL_LNKCHG_OFST (8) | ||
207 | #define ETHER_MAC_CTL_LNKCHG_MSK (0x100) | ||
208 | #define ETHER_MAC_CTL_MISSROLL_OFST (10) | ||
209 | #define ETHER_MAC_CTL_MISSROLL_MSK (0x400) | ||
210 | #define ETHER_MAC_CTL_ENMISSROLL_OFST (13) | ||
211 | #define ETHER_MAC_CTL_ENMISSROLL_MSK (0x2000) | ||
212 | #define ETHER_MAC_CTL_LINK10_OFST (15) | ||
213 | #define ETHER_MAC_CTL_LINK10_MSK (0x8000) | ||
214 | |||
215 | #define ETHER_ARC_CTL(base) (ETHER00_TYPE (base + 0x4)) | ||
216 | #define ETHER_ARC_CTL_STATIONACC_OFST (0) | ||
217 | #define ETHER_ARC_CTL_STATIONACC_MSK (0x1) | ||
218 | #define ETHER_ARC_CTL_GROUPACC_OFST (1) | ||
219 | #define ETHER_ARC_CTL_GROUPACC_MSK (0x2) | ||
220 | #define ETHER_ARC_CTL_BROADACC_OFST (2) | ||
221 | #define ETHER_ARC_CTL_BROADACC_MSK (0x4) | ||
222 | #define ETHER_ARC_CTL_NEGARC_OFST (3) | ||
223 | #define ETHER_ARC_CTL_NEGARC_MSK (0x8) | ||
224 | #define ETHER_ARC_CTL_COMPEN_OFST (4) | ||
225 | #define ETHER_ARC_CTL_COMPEN_MSK (0x10) | ||
226 | |||
227 | #define ETHER_TX_CTL(base) (ETHER00_TYPE (base + 0x8)) | ||
228 | #define ETHER_TX_CTL_TXEN_OFST (0) | ||
229 | #define ETHER_TX_CTL_TXEN_MSK (0x1) | ||
230 | #define ETHER_TX_CTL_TXHALT_OFST (1) | ||
231 | #define ETHER_TX_CTL_TXHALT_MSK (0x2) | ||
232 | #define ETHER_TX_CTL_NOPAD_OFST (2) | ||
233 | #define ETHER_TX_CTL_NOPAD_MSK (0x4) | ||
234 | #define ETHER_TX_CTL_NOCRC_OFST (3) | ||
235 | #define ETHER_TX_CTL_NOCRC_MSK (0x8) | ||
236 | #define ETHER_TX_CTL_FBACK_OFST (4) | ||
237 | #define ETHER_TX_CTL_FBACK_MSK (0x10) | ||
238 | #define ETHER_TX_CTL_NOEXDEF_OFST (5) | ||
239 | #define ETHER_TX_CTL_NOEXDEF_MSK (0x20) | ||
240 | #define ETHER_TX_CTL_SDPAUSE_OFST (6) | ||
241 | #define ETHER_TX_CTL_SDPAUSE_MSK (0x40) | ||
242 | #define ETHER_TX_CTL_MII10_OFST (7) | ||
243 | #define ETHER_TX_CTL_MII10_MSK (0x80) | ||
244 | #define ETHER_TX_CTL_ENUNDER_OFST (8) | ||
245 | #define ETHER_TX_CTL_ENUNDER_MSK (0x100) | ||
246 | #define ETHER_TX_CTL_ENEXDEFER_OFST (9) | ||
247 | #define ETHER_TX_CTL_ENEXDEFER_MSK (0x200) | ||
248 | #define ETHER_TX_CTL_ENLCARR_OFST (10) | ||
249 | #define ETHER_TX_CTL_ENLCARR_MSK (0x400) | ||
250 | #define ETHER_TX_CTL_ENEXCOLL_OFST (11) | ||
251 | #define ETHER_TX_CTL_ENEXCOLL_MSK (0x800) | ||
252 | #define ETHER_TX_CTL_ENLATECOLL_OFST (12) | ||
253 | #define ETHER_TX_CTL_ENLATECOLL_MSK (0x1000) | ||
254 | #define ETHER_TX_CTL_ENTXPAR_OFST (13) | ||
255 | #define ETHER_TX_CTL_ENTXPAR_MSK (0x2000) | ||
256 | #define ETHER_TX_CTL_ENCOMP_OFST (14) | ||
257 | #define ETHER_TX_CTL_ENCOMP_MSK (0x4000) | ||
258 | |||
259 | #define ETHER_TX_STAT(base) (ETHER00_TYPE (base + 0xc)) | ||
260 | #define ETHER_TX_STAT_TXCOLL_OFST (0) | ||
261 | #define ETHER_TX_STAT_TXCOLL_MSK (0xF) | ||
262 | #define ETHER_TX_STAT_EXCOLL_OFST (4) | ||
263 | #define ETHER_TX_STAT_EXCOLL_MSK (0x10) | ||
264 | #define ETHER_TX_STAT_TXDEFER_OFST (5) | ||
265 | #define ETHER_TX_STAT_TXDEFER_MSK (0x20) | ||
266 | #define ETHER_TX_STAT_PAUSED_OFST (6) | ||
267 | #define ETHER_TX_STAT_PAUSED_MSK (0x40) | ||
268 | #define ETHER_TX_STAT_INTTX_OFST (7) | ||
269 | #define ETHER_TX_STAT_INTTX_MSK (0x80) | ||
270 | #define ETHER_TX_STAT_UNDER_OFST (8) | ||
271 | #define ETHER_TX_STAT_UNDER_MSK (0x100) | ||
272 | #define ETHER_TX_STAT_EXDEFER_OFST (9) | ||
273 | #define ETHER_TX_STAT_EXDEFER_MSK (0x200) | ||
274 | #define ETHER_TX_STAT_LCARR_OFST (10) | ||
275 | #define ETHER_TX_STAT_LCARR_MSK (0x400) | ||
276 | #define ETHER_TX_STAT_TX10STAT_OFST (11) | ||
277 | #define ETHER_TX_STAT_TX10STAT_MSK (0x800) | ||
278 | #define ETHER_TX_STAT_LATECOLL_OFST (12) | ||
279 | #define ETHER_TX_STAT_LATECOLL_MSK (0x1000) | ||
280 | #define ETHER_TX_STAT_TXPAR_OFST (13) | ||
281 | #define ETHER_TX_STAT_TXPAR_MSK (0x2000) | ||
282 | #define ETHER_TX_STAT_COMP_OFST (14) | ||
283 | #define ETHER_TX_STAT_COMP_MSK (0x4000) | ||
284 | #define ETHER_TX_STAT_TXHALTED_OFST (15) | ||
285 | #define ETHER_TX_STAT_TXHALTED_MSK (0x8000) | ||
286 | #define ETHER_TX_STAT_SQERR_OFST (16) | ||
287 | #define ETHER_TX_STAT_SQERR_MSK (0x10000) | ||
288 | #define ETHER_TX_STAT_TXMCAST_OFST (17) | ||
289 | #define ETHER_TX_STAT_TXMCAST_MSK (0x20000) | ||
290 | #define ETHER_TX_STAT_TXBCAST_OFST (18) | ||
291 | #define ETHER_TX_STAT_TXBCAST_MSK (0x40000) | ||
292 | #define ETHER_TX_STAT_VLAN_OFST (19) | ||
293 | #define ETHER_TX_STAT_VLAN_MSK (0x80000) | ||
294 | #define ETHER_TX_STAT_MACC_OFST (20) | ||
295 | #define ETHER_TX_STAT_MACC_MSK (0x100000) | ||
296 | #define ETHER_TX_STAT_TXPAUSE_OFST (21) | ||
297 | #define ETHER_TX_STAT_TXPAUSE_MSK (0x200000) | ||
298 | |||
299 | #define ETHER_RX_CTL(base) (ETHER00_TYPE (base + 0x10)) | ||
300 | #define ETHER_RX_CTL_RXEN_OFST (0) | ||
301 | #define ETHER_RX_CTL_RXEN_MSK (0x1) | ||
302 | #define ETHER_RX_CTL_RXHALT_OFST (1) | ||
303 | #define ETHER_RX_CTL_RXHALT_MSK (0x2) | ||
304 | #define ETHER_RX_CTL_LONGEN_OFST (2) | ||
305 | #define ETHER_RX_CTL_LONGEN_MSK (0x4) | ||
306 | #define ETHER_RX_CTL_SHORTEN_OFST (3) | ||
307 | #define ETHER_RX_CTL_SHORTEN_MSK (0x8) | ||
308 | #define ETHER_RX_CTL_STRIPCRC_OFST (4) | ||
309 | #define ETHER_RX_CTL_STRIPCRC_MSK (0x10) | ||
310 | #define ETHER_RX_CTL_PASSCTL_OFST (5) | ||
311 | #define ETHER_RX_CTL_PASSCTL_MSK (0x20) | ||
312 | #define ETHER_RX_CTL_IGNORECRC_OFST (6) | ||
313 | #define ETHER_RX_CTL_IGNORECRC_MSK (0x40) | ||
314 | #define ETHER_RX_CTL_ENALIGN_OFST (8) | ||
315 | #define ETHER_RX_CTL_ENALIGN_MSK (0x100) | ||
316 | #define ETHER_RX_CTL_ENCRCERR_OFST (9) | ||
317 | #define ETHER_RX_CTL_ENCRCERR_MSK (0x200) | ||
318 | #define ETHER_RX_CTL_ENOVER_OFST (10) | ||
319 | #define ETHER_RX_CTL_ENOVER_MSK (0x400) | ||
320 | #define ETHER_RX_CTL_ENLONGERR_OFST (11) | ||
321 | #define ETHER_RX_CTL_ENLONGERR_MSK (0x800) | ||
322 | #define ETHER_RX_CTL_ENRXPAR_OFST (13) | ||
323 | #define ETHER_RX_CTL_ENRXPAR_MSK (0x2000) | ||
324 | #define ETHER_RX_CTL_ENGOOD_OFST (14) | ||
325 | #define ETHER_RX_CTL_ENGOOD_MSK (0x4000) | ||
326 | |||
327 | #define ETHER_RX_STAT(base) (ETHER00_TYPE (base + 0x14)) | ||
328 | #define ETHER_RX_STAT_LENERR_OFST (4) | ||
329 | #define ETHER_RX_STAT_LENERR_MSK (0x10) | ||
330 | #define ETHER_RX_STAT_CTLRECD_OFST (5) | ||
331 | #define ETHER_RX_STAT_CTLRECD_MSK (0x20) | ||
332 | #define ETHER_RX_STAT_INTRX_OFST (6) | ||
333 | #define ETHER_RX_STAT_INTRX_MSK (0x40) | ||
334 | #define ETHER_RX_STAT_RX10STAT_OFST (7) | ||
335 | #define ETHER_RX_STAT_RX10STAT_MSK (0x80) | ||
336 | #define ETHER_RX_STAT_ALIGNERR_OFST (8) | ||
337 | #define ETHER_RX_STAT_ALIGNERR_MSK (0x100) | ||
338 | #define ETHER_RX_STAT_CRCERR_OFST (9) | ||
339 | #define ETHER_RX_STAT_CRCERR_MSK (0x200) | ||
340 | #define ETHER_RX_STAT_OVERFLOW_OFST (10) | ||
341 | #define ETHER_RX_STAT_OVERFLOW_MSK (0x400) | ||
342 | #define ETHER_RX_STAT_LONGERR_OFST (11) | ||
343 | #define ETHER_RX_STAT_LONGERR_MSK (0x800) | ||
344 | #define ETHER_RX_STAT_RXPAR_OFST (13) | ||
345 | #define ETHER_RX_STAT_RXPAR_MSK (0x2000) | ||
346 | #define ETHER_RX_STAT_GOOD_OFST (14) | ||
347 | #define ETHER_RX_STAT_GOOD_MSK (0x4000) | ||
348 | #define ETHER_RX_STAT_RXHALTED_OFST (15) | ||
349 | #define ETHER_RX_STAT_RXHALTED_MSK (0x8000) | ||
350 | #define ETHER_RX_STAT_RXMCAST_OFST (17) | ||
351 | #define ETHER_RX_STAT_RXMCAST_MSK (0x10000) | ||
352 | #define ETHER_RX_STAT_RXBCAST_OFST (18) | ||
353 | #define ETHER_RX_STAT_RXBCAST_MSK (0x20000) | ||
354 | #define ETHER_RX_STAT_RXVLAN_OFST (19) | ||
355 | #define ETHER_RX_STAT_RXVLAN_MSK (0x40000) | ||
356 | #define ETHER_RX_STAT_RXPAUSE_OFST (20) | ||
357 | #define ETHER_RX_STAT_RXPAUSE_MSK (0x80000) | ||
358 | #define ETHER_RX_STAT_ARCSTATUS_OFST (21) | ||
359 | #define ETHER_RX_STAT_ARCSTATUS_MSK (0xF00000) | ||
360 | #define ETHER_RX_STAT_ARCENT_OFST (25) | ||
361 | #define ETHER_RX_STAT_ARCENT_MSK (0x1F000000) | ||
362 | |||
363 | #define ETHER_MD_DATA(base) (ETHER00_TYPE (base + 0x18)) | ||
364 | |||
365 | #define ETHER_MD_CA(base) (ETHER00_TYPE (base + 0x1c)) | ||
366 | #define ETHER_MD_CA_ADDR_OFST (0) | ||
367 | #define ETHER_MD_CA_ADDR_MSK (0x1F) | ||
368 | #define ETHER_MD_CA_PHY_OFST (5) | ||
369 | #define ETHER_MD_CA_PHY_MSK (0x3E0) | ||
370 | #define ETHER_MD_CA_WR_OFST (10) | ||
371 | #define ETHER_MD_CA_WR_MSK (0x400) | ||
372 | #define ETHER_MD_CA_BUSY_OFST (11) | ||
373 | #define ETHER_MD_CA_BUSY_MSK (0x800) | ||
374 | #define ETHER_MD_CA_PRESUPP_OFST (12) | ||
375 | #define ETHER_MD_CA_PRESUPP_MSK (0x1000) | ||
376 | |||
377 | #define ETHER_ARC_ADR(base) (ETHER00_TYPE (base + 0x160)) | ||
378 | #define ETHER_ARC_ADR_ARC_LOC_OFST (2) | ||
379 | #define ETHER_ARC_ADR_ARC_LOC_MSK (0xFFC) | ||
380 | |||
381 | #define ETHER_ARC_DATA(base) (ETHER00_TYPE (base + 0x364)) | ||
382 | |||
383 | #define ETHER_ARC_ENA(base) (ETHER00_TYPE (base + 0x28)) | ||
384 | #define ETHER_ARC_ENA_MSK (0x1FFFFF) | ||
385 | |||
386 | #define ETHER_PROM_CTL(base) (ETHER00_TYPE (base + 0x2c)) | ||
387 | #define ETHER_PROM_CTL_PROM_ADDR_OFST (0) | ||
388 | #define ETHER_PROM_CTL_PROM_ADDR_MSK (0x3F) | ||
389 | #define ETHER_PROM_CTL_OPCODE_OFST (13) | ||
390 | #define ETHER_PROM_CTL_OPCODE_MSK (0x6000) | ||
391 | #define ETHER_PROM_CTL_OPCODE_READ_MSK (0x4000) | ||
392 | #define ETHER_PROM_CTL_OPCODE_WRITE_MSK (0x2000) | ||
393 | #define ETHER_PROM_CTL_OPCODE_ERASE_MSK (0x6000) | ||
394 | #define ETHER_PROM_CTL_ENABLE_MSK (0x0030) | ||
395 | #define ETHER_PROM_CTL_DISABLE_MSK (0x0000) | ||
396 | #define ETHER_PROM_CTL_BUSY_OFST (15) | ||
397 | #define ETHER_PROM_CTL_BUSY_MSK (0x8000) | ||
398 | |||
399 | #define ETHER_PROM_DATA(base) (ETHER00_TYPE (base + 0x30)) | ||
400 | |||
401 | #define ETHER_MISS_CNT(base) (ETHER00_TYPE (base + 0x3c)) | ||
402 | #define ETHER_MISS_CNT_COUNT_OFST (0) | ||
403 | #define ETHER_MISS_CNT_COUNT_MSK (0xFFFF) | ||
404 | |||
405 | #define ETHER_CNTDATA(base) (ETHER00_TYPE (base + 0x80)) | ||
406 | |||
407 | #define ETHER_CNTACC(base) (ETHER00_TYPE (base + 0x84)) | ||
408 | #define ETHER_CNTACC_ADDR_OFST (0) | ||
409 | #define ETHER_CNTACC_ADDR_MSK (0xFF) | ||
410 | #define ETHER_CNTACC_WRRDN_OFST (8) | ||
411 | #define ETHER_CNTACC_WRRDN_MSK (0x100) | ||
412 | #define ETHER_CNTACC_CLEAR_OFST (9) | ||
413 | #define ETHER_CNTACC_CLEAR_MSK (0x200) | ||
414 | |||
415 | #define ETHER_TXRMINTEN(base) (ETHER00_TYPE (base + 0x88)) | ||
416 | #define ETHER_TXRMINTEN_MSK (0x3FFFFFFF) | ||
417 | |||
418 | #define ETHER_RXRMINTEN(base) (ETHER00_TYPE (base + 0x8C)) | ||
419 | #define ETHER_RXRMINTEN_MSK (0xFFFFFF) | ||
420 | |||
421 | /* | ||
422 | * RMON Registers | ||
423 | */ | ||
424 | #define RMON_COLLISION0 0x0 | ||
425 | #define RMON_COLLISION1 0x1 | ||
426 | #define RMON_COLLISION2 0x2 | ||
427 | #define RMON_COLLISION3 0x3 | ||
428 | #define RMON_COLLISION4 0x4 | ||
429 | #define RMON_COLLISION5 0x5 | ||
430 | #define RMON_COLLISION6 0x6 | ||
431 | #define RMON_COLLISION7 0x7 | ||
432 | #define RMON_COLLISION8 0x8 | ||
433 | #define RMON_COLLISION9 0x9 | ||
434 | #define RMON_COLLISION10 0xa | ||
435 | #define RMON_COLLISION11 0xb | ||
436 | #define RMON_COLLISION12 0xc | ||
437 | #define RMON_COLLISION13 0xd | ||
438 | #define RMON_COLLISION14 0xe | ||
439 | #define RMON_COLLISION15 0xf | ||
440 | #define RMON_COLLISION16 0x10 | ||
441 | #define RMON_FRAMES_WITH_DEFERRED_XMISSIONS 0x11 | ||
442 | #define RMON_LATE_COLLISIONS 0x12 | ||
443 | #define RMON_FRAMES_LOST_DUE_TO_MAC_XMIT 0x13 | ||
444 | #define RMON_CARRIER_SENSE_ERRORS 0x14 | ||
445 | #define RMON_FRAMES_WITH_EXCESSIVE_DEFERAL 0x15 | ||
446 | #define RMON_UNICAST_FRAMES_TRANSMITTED_OK 0x16 | ||
447 | #define RMON_MULTICAST_FRAMES_XMITTED_OK 0x17 | ||
448 | #define RMON_BROADCAST_FRAMES_XMITTED_OK 0x18 | ||
449 | #define RMON_SQE_TEST_ERRORS 0x19 | ||
450 | #define RMON_PAUSE_MACCTRL_FRAMES_XMITTED 0x1A | ||
451 | #define RMON_MACCTRL_FRAMES_XMITTED 0x1B | ||
452 | #define RMON_VLAN_FRAMES_XMITTED 0x1C | ||
453 | #define RMON_OCTETS_XMITTED_OK 0x1D | ||
454 | #define RMON_OCTETS_XMITTED_OK_HI 0x1E | ||
455 | |||
456 | #define RMON_RX_PACKET_SIZES0 0x40 | ||
457 | #define RMON_RX_PACKET_SIZES1 0x41 | ||
458 | #define RMON_RX_PACKET_SIZES2 0x42 | ||
459 | #define RMON_RX_PACKET_SIZES3 0x43 | ||
460 | #define RMON_RX_PACKET_SIZES4 0x44 | ||
461 | #define RMON_RX_PACKET_SIZES5 0x45 | ||
462 | #define RMON_RX_PACKET_SIZES6 0x46 | ||
463 | #define RMON_RX_PACKET_SIZES7 0x47 | ||
464 | #define RMON_FRAME_CHECK_SEQUENCE_ERRORS 0x48 | ||
465 | #define RMON_ALIGNMENT_ERRORS 0x49 | ||
466 | #define RMON_FRAGMENTS 0x4A | ||
467 | #define RMON_JABBERS 0x4B | ||
468 | #define RMON_FRAMES_LOST_TO_INTMACRCVERR 0x4C | ||
469 | #define RMON_UNICAST_FRAMES_RCVD_OK 0x4D | ||
470 | #define RMON_MULTICAST_FRAMES_RCVD_OK 0x4E | ||
471 | #define RMON_BROADCAST_FRAMES_RCVD_OK 0x4F | ||
472 | #define RMON_IN_RANGE_LENGTH_ERRORS 0x50 | ||
473 | #define RMON_OUT_OF_RANGE_LENGTH_ERRORS 0x51 | ||
474 | #define RMON_VLAN_FRAMES_RCVD 0x52 | ||
475 | #define RMON_PAUSE_MAC_CTRL_FRAMES_RCVD 0x53 | ||
476 | #define RMON_MAC_CTRL_FRAMES_RCVD 0x54 | ||
477 | #define RMON_OCTETS_RCVD_OK 0x55 | ||
478 | #define RMON_OCTETS_RCVD_OK_HI 0x56 | ||
479 | #define RMON_OCTETS_RCVD_OTHER 0x57 | ||
480 | #define RMON_OCTETS_RCVD_OTHER_HI 0x58 | ||
481 | |||
482 | #endif /* __ETHER00_H */ | ||
diff --git a/include/asm-arm/arch-epxa10db/excalibur.h b/include/asm-arm/arch-epxa10db/excalibur.h new file mode 100644 index 000000000000..5c91dd6d7822 --- /dev/null +++ b/include/asm-arm/arch-epxa10db/excalibur.h | |||
@@ -0,0 +1,91 @@ | |||
1 | /* megafunction wizard: %ARM-Based Excalibur% | ||
2 | GENERATION: STANDARD | ||
3 | VERSION: WM1.0 | ||
4 | MODULE: ARM-Based Excalibur | ||
5 | PROJECT: excalibur | ||
6 | ============================================================ | ||
7 | File Name: v:\embedded\linux\bootldr\excalibur.h | ||
8 | Megafunction Name(s): ARM-Based Excalibur | ||
9 | ============================================================ | ||
10 | |||
11 | ************************************************************ | ||
12 | THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! | ||
13 | ************************************************************/ | ||
14 | |||
15 | #ifndef EXCALIBUR_H_INCLUDED | ||
16 | #define EXCALIBUR_H_INCLUDED | ||
17 | |||
18 | #define EXC_DEFINE_PROCESSOR_LITTLE_ENDIAN | ||
19 | #define EXC_DEFINE_BOOT_FROM_FLASH | ||
20 | |||
21 | #define EXC_INPUT_CLK_FREQUENCY (50000000) | ||
22 | #define EXC_AHB1_CLK_FREQUENCY (150000000) | ||
23 | #define EXC_AHB2_CLK_FREQUENCY (75000000) | ||
24 | #define EXC_SDRAM_CLK_FREQUENCY (75000000) | ||
25 | |||
26 | /* Registers Block */ | ||
27 | #define EXC_REGISTERS_BASE (0x7fffc000) | ||
28 | #define EXC_MODE_CTRL00_BASE (EXC_REGISTERS_BASE + 0x000) | ||
29 | #define EXC_IO_CTRL00_BASE (EXC_REGISTERS_BASE + 0x040) | ||
30 | #define EXC_MMAP00_BASE (EXC_REGISTERS_BASE + 0x080) | ||
31 | #define EXC_PLD_CONFIG00_BASE (EXC_REGISTERS_BASE + 0x140) | ||
32 | #define EXC_TIMER00_BASE (EXC_REGISTERS_BASE + 0x200) | ||
33 | #define EXC_INT_CTRL00_BASE (EXC_REGISTERS_BASE + 0xc00) | ||
34 | #define EXC_CLOCK_CTRL00_BASE (EXC_REGISTERS_BASE + 0x300) | ||
35 | #define EXC_WATCHDOG00_BASE (EXC_REGISTERS_BASE + 0xa00) | ||
36 | #define EXC_UART00_BASE (EXC_REGISTERS_BASE + 0x280) | ||
37 | #define EXC_EBI00_BASE (EXC_REGISTERS_BASE + 0x380) | ||
38 | #define EXC_SDRAM00_BASE (EXC_REGISTERS_BASE + 0x400) | ||
39 | #define EXC_AHB12_BRIDGE_CTRL00_BASE (EXC_REGISTERS_BASE + 0x800) | ||
40 | #define EXC_PLD_STRIPE_BRIDGE_CTRL00_BASE (EXC_REGISTERS_BASE + 0x100) | ||
41 | #define EXC_STRIPE_PLD_BRIDGE_CTRL00_BASE (EXC_REGISTERS_BASE + 0x100) | ||
42 | |||
43 | #define EXC_REGISTERS_SIZE (0x00004000) | ||
44 | |||
45 | /* EBI Block(s) */ | ||
46 | #define EXC_EBI_BLOCK0_BASE (0x40000000) | ||
47 | #define EXC_EBI_BLOCK0_SIZE (0x00400000) | ||
48 | #define EXC_EBI_BLOCK0_WIDTH (8) | ||
49 | #define EXC_EBI_BLOCK0_NON_CACHEABLE | ||
50 | #define EXC_EBI_BLOCK1_BASE (0x40400000) | ||
51 | #define EXC_EBI_BLOCK1_SIZE (0x00400000) | ||
52 | #define EXC_EBI_BLOCK1_WIDTH (16) | ||
53 | #define EXC_EBI_BLOCK1_NON_CACHEABLE | ||
54 | #define EXC_EBI_BLOCK2_BASE (0x40800000) | ||
55 | #define EXC_EBI_BLOCK2_SIZE (0x00400000) | ||
56 | #define EXC_EBI_BLOCK2_WIDTH (16) | ||
57 | #define EXC_EBI_BLOCK2_NON_CACHEABLE | ||
58 | #define EXC_EBI_BLOCK3_BASE (0x40c00000) | ||
59 | #define EXC_EBI_BLOCK3_SIZE (0x00400000) | ||
60 | #define EXC_EBI_BLOCK3_WIDTH (16) | ||
61 | #define EXC_EBI_BLOCK3_NON_CACHEABLE | ||
62 | |||
63 | /* SDRAM Block(s) */ | ||
64 | #define EXC_SDRAM_BLOCK0_BASE (0x00000000) | ||
65 | #define EXC_SDRAM_BLOCK0_SIZE (0x04000000) | ||
66 | #define EXC_SDRAM_BLOCK0_WIDTH (32) | ||
67 | #define EXC_SDRAM_BLOCK1_BASE (0x04000000) | ||
68 | #define EXC_SDRAM_BLOCK1_SIZE (0x04000000) | ||
69 | #define EXC_SDRAM_BLOCK1_WIDTH (32) | ||
70 | |||
71 | /* Single Port SRAM Block(s) */ | ||
72 | #define EXC_SPSRAM_BLOCK0_BASE (0x08000000) | ||
73 | #define EXC_SPSRAM_BLOCK0_SIZE (0x00020000) | ||
74 | #define EXC_SPSRAM_BLOCK1_BASE (0x08020000) | ||
75 | #define EXC_SPSRAM_BLOCK1_SIZE (0x00020000) | ||
76 | |||
77 | /* PLD Block(s) */ | ||
78 | #define EXC_PLD_BLOCK0_BASE (0x80000000) | ||
79 | #define EXC_PLD_BLOCK0_SIZE (0x00004000) | ||
80 | #define EXC_PLD_BLOCK0_NON_CACHEABLE | ||
81 | #define EXC_PLD_BLOCK1_BASE (0xf000000) | ||
82 | #define EXC_PLD_BLOCK1_SIZE (0x00004000) | ||
83 | #define EXC_PLD_BLOCK1_NON_CACHEABLE | ||
84 | #define EXC_PLD_BLOCK2_BASE (0x80008000) | ||
85 | #define EXC_PLD_BLOCK2_SIZE (0x00004000) | ||
86 | #define EXC_PLD_BLOCK2_NON_CACHEABLE | ||
87 | #define EXC_PLD_BLOCK3_BASE (0x8000c000) | ||
88 | #define EXC_PLD_BLOCK3_SIZE (0x00004000) | ||
89 | #define EXC_PLD_BLOCK3_NON_CACHEABLE | ||
90 | |||
91 | #endif | ||
diff --git a/include/asm-arm/arch-epxa10db/hardware.h b/include/asm-arm/arch-epxa10db/hardware.h new file mode 100644 index 000000000000..b992c2924a77 --- /dev/null +++ b/include/asm-arm/arch-epxa10db/hardware.h | |||
@@ -0,0 +1,64 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-epxa10/hardware.h | ||
3 | * | ||
4 | * This file contains the hardware definitions of the Integrator. | ||
5 | * | ||
6 | * Copyright (C) 1999 ARM Limited. | ||
7 | * Copyright (C) 2001 Altera Corporation | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or modify | ||
10 | * it under the terms of the GNU General Public License as published by | ||
11 | * the Free Software Foundation; either version 2 of the License, or | ||
12 | * (at your option) any later version. | ||
13 | * | ||
14 | * This program is distributed in the hope that it will be useful, | ||
15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
17 | * GNU General Public License for more details. | ||
18 | * | ||
19 | * You should have received a copy of the GNU General Public License | ||
20 | * along with this program; if not, write to the Free Software | ||
21 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
22 | */ | ||
23 | #ifndef __ASM_ARCH_HARDWARE_H | ||
24 | #define __ASM_ARCH_HARDWARE_H | ||
25 | |||
26 | #include <asm/arch/platform.h> | ||
27 | |||
28 | /* | ||
29 | * Where in virtual memory the IO devices (timers, system controllers | ||
30 | * and so on) | ||
31 | */ | ||
32 | #define IO_BASE 0xf0000000 // VA of IO | ||
33 | #define IO_SIZE 0x10000000 // How much? | ||
34 | #define IO_START EXC_REGISTERS_BASE // PA of IO | ||
35 | /* macro to get at IO space when running virtually */ | ||
36 | #define IO_ADDRESS(x) ((x) | 0xf0000000) | ||
37 | |||
38 | #define FLASH_VBASE 0xFE000000 | ||
39 | #define FLASH_SIZE 0x01000000 | ||
40 | #define FLASH_START EXC_EBI_BLOCK0_BASE | ||
41 | #define FLASH_VADDR(x) ((x)|0xFE000000) | ||
42 | /* | ||
43 | * Similar to above, but for PCI addresses (memory, IO, Config and the | ||
44 | * V3 chip itself). WARNING: this has to mirror definitions in platform.h | ||
45 | */ | ||
46 | #if 0 | ||
47 | #define PCI_MEMORY_VADDR 0xe8000000 | ||
48 | #define PCI_CONFIG_VADDR 0xec000000 | ||
49 | #define PCI_V3_VADDR 0xed000000 | ||
50 | #define PCI_IO_VADDR 0xee000000 | ||
51 | |||
52 | #define PCIO_BASE PCI_IO_VADDR | ||
53 | #define PCIMEM_BASE PCI_MEMORY_VADDR | ||
54 | |||
55 | |||
56 | #define pcibios_assign_all_busses() 1 | ||
57 | |||
58 | #define PCIBIOS_MIN_IO 0x6000 | ||
59 | #define PCIBIOS_MIN_MEM 0x00100000 | ||
60 | #endif | ||
61 | |||
62 | |||
63 | #endif | ||
64 | |||
diff --git a/include/asm-arm/arch-epxa10db/int_ctrl00.h b/include/asm-arm/arch-epxa10db/int_ctrl00.h new file mode 100644 index 000000000000..23ec864c40bb --- /dev/null +++ b/include/asm-arm/arch-epxa10db/int_ctrl00.h | |||
@@ -0,0 +1,288 @@ | |||
1 | /* | ||
2 | * | ||
3 | * This file contains the register definitions for the Excalibur | ||
4 | * Timer TIMER00. | ||
5 | * | ||
6 | * Copyright (C) 2001 Altera Corporation | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License as published by | ||
10 | * the Free Software Foundation; either version 2 of the License, or | ||
11 | * (at your option) any later version. | ||
12 | * | ||
13 | * This program is distributed in the hope that it will be useful, | ||
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
16 | * GNU General Public License for more details. | ||
17 | * | ||
18 | * You should have received a copy of the GNU General Public License | ||
19 | * along with this program; if not, write to the Free Software | ||
20 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
21 | */ | ||
22 | |||
23 | #ifndef __INT_CTRL00_H | ||
24 | #define __INT_CTRL00_H | ||
25 | |||
26 | #define INT_MS(base_addr) (INT_CTRL00_TYPE (base_addr + 0x00 )) | ||
27 | #define INT_MS_FC_MSK (0x10000) | ||
28 | #define INT_MS_FC_OFST (16) | ||
29 | #define INT_MS_M1_MSK (0x8000) | ||
30 | #define INT_MS_M1_OFST (15) | ||
31 | #define INT_MS_M0_MSK (0x4000) | ||
32 | #define INT_MS_M0_OFST (14) | ||
33 | #define INT_MS_AE_MSK (0x2000) | ||
34 | #define INT_MS_AE_OFST (13) | ||
35 | #define INT_MS_PE_MSK (0x1000) | ||
36 | #define INT_MS_PE_OFST (12) | ||
37 | #define INT_MS_EE_MSK (0x0800) | ||
38 | #define INT_MS_EE_OFST (11) | ||
39 | #define INT_MS_PS_MSK (0x0400) | ||
40 | #define INT_MS_PS_OFST (10) | ||
41 | #define INT_MS_T1_MSK (0x0200) | ||
42 | #define INT_MS_T1_OFST (9) | ||
43 | #define INT_MS_T0_MSK (0x0100) | ||
44 | #define INT_MS_T0_OFST (8) | ||
45 | #define INT_MS_UA_MSK (0x0080) | ||
46 | #define INT_MS_UA_OFST (7) | ||
47 | #define INT_MS_IP_MSK (0x0040) | ||
48 | #define INT_MS_IP_OFST (6) | ||
49 | #define INT_MS_P5_MSK (0x0020) | ||
50 | #define INT_MS_P5_OFST (5) | ||
51 | #define INT_MS_P4_MSK (0x0010) | ||
52 | #define INT_MS_P4_OFST (4) | ||
53 | #define INT_MS_P3_MSK (0x0008) | ||
54 | #define INT_MS_P3_OFST (3) | ||
55 | #define INT_MS_P2_MSK (0x0004) | ||
56 | #define INT_MS_P2_OFST (2) | ||
57 | #define INT_MS_P1_MSK (0x0002) | ||
58 | #define INT_MS_P1_OFST (1) | ||
59 | #define INT_MS_P0_MSK (0x0001) | ||
60 | #define INT_MS_P0_OFST (0) | ||
61 | |||
62 | #define INT_MC(base_addr) (INT_CTRL00_TYPE (base_addr + 0x04 )) | ||
63 | #define INT_MC_FC_MSK (0x10000) | ||
64 | #define INT_MC_FC_OFST (16) | ||
65 | #define INT_MC_M1_MSK (0x8000) | ||
66 | #define INT_MC_M1_OFST (15) | ||
67 | #define INT_MC_M0_MSK (0x4000) | ||
68 | #define INT_MC_M0_OFST (14) | ||
69 | #define INT_MC_AE_MSK (0x2000) | ||
70 | #define INT_MC_AE_OFST (13) | ||
71 | #define INT_MC_PE_MSK (0x1000) | ||
72 | #define INT_MC_PE_OFST (12) | ||
73 | #define INT_MC_EE_MSK (0x0800) | ||
74 | #define INT_MC_EE_OFST (11) | ||
75 | #define INT_MC_PS_MSK (0x0400) | ||
76 | #define INT_MC_PS_OFST (10) | ||
77 | #define INT_MC_T1_MSK (0x0200) | ||
78 | #define INT_MC_T1_OFST (9) | ||
79 | #define INT_MC_T0_MSK (0x0100) | ||
80 | #define INT_MC_T0_OFST (8) | ||
81 | #define INT_MC_UA_MSK (0x0080) | ||
82 | #define INT_MC_UA_OFST (7) | ||
83 | #define INT_MC_IP_MSK (0x0040) | ||
84 | #define INT_MC_IP_OFST (6) | ||
85 | #define INT_MC_P5_MSK (0x0020) | ||
86 | #define INT_MC_P5_OFST (5) | ||
87 | #define INT_MC_P4_MSK (0x0010) | ||
88 | #define INT_MC_P4_OFST (4) | ||
89 | #define INT_MC_P3_MSK (0x0008) | ||
90 | #define INT_MC_P3_OFST (3) | ||
91 | #define INT_MC_P2_MSK (0x0004) | ||
92 | #define INT_MC_P2_OFST (2) | ||
93 | #define INT_MC_P1_MSK (0x0002) | ||
94 | #define INT_MC_P1_OFST (1) | ||
95 | #define INT_MC_P0_MSK (0x0001) | ||
96 | #define INT_MC_P0_OFST (0) | ||
97 | |||
98 | #define INT_SS(base_addr) (INT_CTRL00_TYPE (base_addr + 0x08 )) | ||
99 | #define INT_SS_FC_SSK (0x8000) | ||
100 | #define INT_SS_FC_OFST (15) | ||
101 | #define INT_SS_M1_SSK (0x8000) | ||
102 | #define INT_SS_M1_OFST (15) | ||
103 | #define INT_SS_M0_SSK (0x4000) | ||
104 | #define INT_SS_M0_OFST (14) | ||
105 | #define INT_SS_AE_SSK (0x2000) | ||
106 | #define INT_SS_AE_OFST (13) | ||
107 | #define INT_SS_PE_SSK (0x1000) | ||
108 | #define INT_SS_PE_OFST (12) | ||
109 | #define INT_SS_EE_SSK (0x0800) | ||
110 | #define INT_SS_EE_OFST (11) | ||
111 | #define INT_SS_PS_SSK (0x0400) | ||
112 | #define INT_SS_PS_OFST (10) | ||
113 | #define INT_SS_T1_SSK (0x0200) | ||
114 | #define INT_SS_T1_OFST (9) | ||
115 | #define INT_SS_T0_SSK (0x0100) | ||
116 | #define INT_SS_T0_OFST (8) | ||
117 | #define INT_SS_UA_SSK (0x0080) | ||
118 | #define INT_SS_UA_OFST (7) | ||
119 | #define INT_SS_IP_SSK (0x0040) | ||
120 | #define INT_SS_IP_OFST (6) | ||
121 | #define INT_SS_P5_SSK (0x0020) | ||
122 | #define INT_SS_P5_OFST (5) | ||
123 | #define INT_SS_P4_SSK (0x0010) | ||
124 | #define INT_SS_P4_OFST (4) | ||
125 | #define INT_SS_P3_SSK (0x0008) | ||
126 | #define INT_SS_P3_OFST (3) | ||
127 | #define INT_SS_P2_SSK (0x0004) | ||
128 | #define INT_SS_P2_OFST (2) | ||
129 | #define INT_SS_P1_SSK (0x0002) | ||
130 | #define INT_SS_P1_OFST (1) | ||
131 | #define INT_SS_P0_SSK (0x0001) | ||
132 | #define INT_SS_P0_OFST (0) | ||
133 | |||
134 | #define INT_RS(base_addr) (INT_CTRL00_TYPE (base_addr + 0x0C )) | ||
135 | #define INT_RS_FC_RSK (0x10000) | ||
136 | #define INT_RS_FC_OFST (16) | ||
137 | #define INT_RS_M1_RSK (0x8000) | ||
138 | #define INT_RS_M1_OFST (15) | ||
139 | #define INT_RS_M0_RSK (0x4000) | ||
140 | #define INT_RS_M0_OFST (14) | ||
141 | #define INT_RS_AE_RSK (0x2000) | ||
142 | #define INT_RS_AE_OFST (13) | ||
143 | #define INT_RS_PE_RSK (0x1000) | ||
144 | #define INT_RS_PE_OFST (12) | ||
145 | #define INT_RS_EE_RSK (0x0800) | ||
146 | #define INT_RS_EE_OFST (11) | ||
147 | #define INT_RS_PS_RSK (0x0400) | ||
148 | #define INT_RS_PS_OFST (10) | ||
149 | #define INT_RS_T1_RSK (0x0200) | ||
150 | #define INT_RS_T1_OFST (9) | ||
151 | #define INT_RS_T0_RSK (0x0100) | ||
152 | #define INT_RS_T0_OFST (8) | ||
153 | #define INT_RS_UA_RSK (0x0080) | ||
154 | #define INT_RS_UA_OFST (7) | ||
155 | #define INT_RS_IP_RSK (0x0040) | ||
156 | #define INT_RS_IP_OFST (6) | ||
157 | #define INT_RS_P5_RSK (0x0020) | ||
158 | #define INT_RS_P5_OFST (5) | ||
159 | #define INT_RS_P4_RSK (0x0010) | ||
160 | #define INT_RS_P4_OFST (4) | ||
161 | #define INT_RS_P3_RSK (0x0008) | ||
162 | #define INT_RS_P3_OFST (3) | ||
163 | #define INT_RS_P2_RSK (0x0004) | ||
164 | #define INT_RS_P2_OFST (2) | ||
165 | #define INT_RS_P1_RSK (0x0002) | ||
166 | #define INT_RS_P1_OFST (1) | ||
167 | #define INT_RS_P0_RSK (0x0001) | ||
168 | #define INT_RS_P0_OFST (0) | ||
169 | |||
170 | #define INT_ID(base_addr) (INT_CTRL00_TYPE (base_addr + 0x10 )) | ||
171 | #define INT_ID_ID_MSK (0x3F) | ||
172 | #define INT_ID_ID_OFST (0) | ||
173 | |||
174 | #define INT_PLD_PRIORITY(base_addr) (INT_CTRL00_TYPE (base_addr + 0x14 )) | ||
175 | #define INT_PLD_PRIORITY_PRI_MSK (0x3F) | ||
176 | #define INT_PLD_PRIORITY_PRI_OFST (0) | ||
177 | #define INT_PLD_PRIORITY_GA_MSK (0x40) | ||
178 | #define INT_PLD_PRIORITY_GA_OFST (6) | ||
179 | |||
180 | #define INT_MODE(base_addr) (INT_CTRL00_TYPE (base_addr + 0x18 )) | ||
181 | #define INT_MODE_MODE_MSK (0x3) | ||
182 | #define INT_MODE_MODE_OFST (0) | ||
183 | |||
184 | #define INT_PRIORITY_P0(base_addr) (INT_CTRL00_TYPE (base_addr + 0x80 )) | ||
185 | #define INT_PRIORITY_P0_PRI_MSK (0x3F) | ||
186 | #define INT_PRIORITY_P0_PRI_OFST (0) | ||
187 | #define INT_PRIORITY_P0_FQ_MSK (0x40) | ||
188 | #define INT_PRIORITY_P0_FQ_OFST (6) | ||
189 | |||
190 | #define INT_PRIORITY_P1(base_addr) (INT_CTRL00_TYPE (base_addr + 0x84 )) | ||
191 | #define INT_PRIORITY_P1_PRI_MSK (0x3F) | ||
192 | #define INT_PRIORITY_P1_PRI_OFST (0) | ||
193 | #define INT_PRIORITY_P1_FQ_MSK (0x40) | ||
194 | #define INT_PRIORITY_P1_FQ_OFST (6) | ||
195 | |||
196 | #define INT_PRIORITY_P2(base_addr) (INT_CTRL00_TYPE (base_addr + 0x88 )) | ||
197 | #define INT_PRIORITY_P2_PRI_MSK (0x3F) | ||
198 | #define INT_PRIORITY_P2_PRI_OFST (0) | ||
199 | #define INT_PRIORITY_P2_FQ_MSK (0x40) | ||
200 | #define INT_PRIORITY_P2_FQ_OFST (6) | ||
201 | |||
202 | #define INT_PRIORITY_P3(base_addr) (INT_CTRL00_TYPE (base_addr + 0x8C )) | ||
203 | #define INT_PRIORITY_P3_PRI_MSK (0x3F) | ||
204 | #define INT_PRIORITY_P3_PRI_OFST (0) | ||
205 | #define INT_PRIORITY_P3_FQ_MSK (0x40) | ||
206 | #define INT_PRIORITY_P3_FQ_OFST (6) | ||
207 | |||
208 | #define INT_PRIORITY_P4(base_addr) (INT_CTRL00_TYPE (base_addr + 0x90 )) | ||
209 | #define INT_PRIORITY_P4_PRI_MSK (0x3F) | ||
210 | #define INT_PRIORITY_P4_PRI_OFST (0) | ||
211 | #define INT_PRIORITY_P4_FQ_MSK (0x40) | ||
212 | #define INT_PRIORITY_P4_FQ_OFST (6) | ||
213 | |||
214 | #define INT_PRIORITY_P5(base_addr) (INT_CTRL00_TYPE (base_addr + 0x94 )) | ||
215 | #define INT_PRIORITY_P5_PRI_MSK (0x3F) | ||
216 | #define INT_PRIORITY_P5_PRI_OFST (0) | ||
217 | #define INT_PRIORITY_P5_FQ_MSK (0x40) | ||
218 | #define INT_PRIORITY_P5_FQ_OFST (6) | ||
219 | |||
220 | #define INT_PRIORITY_IP(base_addr) (INT_CTRL00_TYPE (base_addr + 0x94 )) | ||
221 | #define INT_PRIORITY_IP_PRI_MSK (0x3F) | ||
222 | #define INT_PRIORITY_IP_PRI_OFST (0) | ||
223 | #define INT_PRIORITY_IP_FQ_MSK (0x40) | ||
224 | #define INT_PRIORITY_IP_FQ_OFST (6) | ||
225 | |||
226 | #define INT_PRIORITY_UA(base_addr) (INT_CTRL00_TYPE (base_addr + 0x9C )) | ||
227 | #define INT_PRIORITY_UA_PRI_MSK (0x3F) | ||
228 | #define INT_PRIORITY_UA_PRI_OFST (0) | ||
229 | #define INT_PRIORITY_UA_FQ_MSK (0x40) | ||
230 | #define INT_PRIORITY_UA_FQ_OFST (6) | ||
231 | |||
232 | #define INT_PRIORITY_T0(base_addr) (INT_CTRL00_TYPE (base_addr + 0xA0 )) | ||
233 | #define INT_PRIORITY_T0_PRI_MSK (0x3F) | ||
234 | #define INT_PRIORITY_T0_PRI_OFST (0) | ||
235 | #define INT_PRIORITY_T0_FQ_MSK (0x40) | ||
236 | #define INT_PRIORITY_T0_FQ_OFST (6) | ||
237 | |||
238 | #define INT_PRIORITY_T1(base_addr) (INT_CTRL00_TYPE (base_addr + 0xA4 )) | ||
239 | #define INT_PRIORITY_T1_PRI_MSK (0x3F) | ||
240 | #define INT_PRIORITY_T1_PRI_OFST (0) | ||
241 | #define INT_PRIORITY_T1_FQ_MSK (0x40) | ||
242 | #define INT_PRIORITY_T1_FQ_OFST (6) | ||
243 | |||
244 | #define INT_PRIORITY_PS(base_addr) (INT_CTRL00_TYPE (base_addr + 0xA8 )) | ||
245 | #define INT_PRIORITY_PS_PRI_MSK (0x3F) | ||
246 | #define INT_PRIORITY_PS_PRI_OFST (0) | ||
247 | #define INT_PRIORITY_PS_FQ_MSK (0x40) | ||
248 | #define INT_PRIORITY_PS_FQ_OFST (6) | ||
249 | |||
250 | #define INT_PRIORITY_EE(base_addr) (INT_CTRL00_TYPE (base_addr + 0xAC )) | ||
251 | #define INT_PRIORITY_EE_PRI_MSK (0x3F) | ||
252 | #define INT_PRIORITY_EE_PRI_OFST (0) | ||
253 | #define INT_PRIORITY_EE_FQ_MSK (0x40) | ||
254 | #define INT_PRIORITY_EE_FQ_OFST (6) | ||
255 | |||
256 | #define INT_PRIORITY_PE(base_addr) (INT_CTRL00_TYPE (base_addr + 0xB0 )) | ||
257 | #define INT_PRIORITY_PE_PRI_MSK (0x3F) | ||
258 | #define INT_PRIORITY_PE_PRI_OFST (0) | ||
259 | #define INT_PRIORITY_PE_FQ_MSK (0x40) | ||
260 | #define INT_PRIORITY_PE_FQ_OFST (6) | ||
261 | |||
262 | #define INT_PRIORITY_AE(base_addr) (INT_CTRL00_TYPE (base_addr + 0xB4 )) | ||
263 | #define INT_PRIORITY_AE_PRI_MSK (0x3F) | ||
264 | #define INT_PRIORITY_AE_PRI_OFST (0) | ||
265 | #define INT_PRIORITY_AE_FQ_MSK (0x40) | ||
266 | #define INT_PRIORITY_AE_FQ_OFST (6) | ||
267 | |||
268 | #define INT_PRIORITY_M0(base_addr) (INT_CTRL00_TYPE (base_addr + 0xB8 )) | ||
269 | #define INT_PRIORITY_M0_PRI_MSK (0x3F) | ||
270 | #define INT_PRIORITY_M0_PRI_OFST (0) | ||
271 | #define INT_PRIORITY_M0_FQ_MSK (0x40) | ||
272 | #define INT_PRIORITY_M0_FQ_OFST (6) | ||
273 | |||
274 | #define INT_PRIORITY_M1(base_addr) (INT_CTRL00_TYPE (base_addr + 0xBC )) | ||
275 | #define INT_PRIORITY_M1_PRI_MSK (0x3F) | ||
276 | #define INT_PRIORITY_M1_PRI_OFST (0) | ||
277 | #define INT_PRIORITY_M1_FQ_MSK (0x40) | ||
278 | #define INT_PRIORITY_M1_FQ_OFST (6) | ||
279 | |||
280 | #define INT_PRIORITY_FC(base_addr) (INT_CTRL00_TYPE (base_addr + 0xC0 )) | ||
281 | #define INT_PRIORITY_FC_PRI_MSK (0x3F) | ||
282 | #define INT_PRIORITY_FC_PRI_OFST (0) | ||
283 | #define INT_PRIORITY_FC_FQ_MSK (0x40) | ||
284 | #define INT_PRIORITY_FC_FQ_OFST (6) | ||
285 | |||
286 | #endif /* __INT_CTRL00_H */ | ||
287 | |||
288 | |||
diff --git a/include/asm-arm/arch-epxa10db/io.h b/include/asm-arm/arch-epxa10db/io.h new file mode 100644 index 000000000000..1f0afa257621 --- /dev/null +++ b/include/asm-arm/arch-epxa10db/io.h | |||
@@ -0,0 +1,39 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-epxa10db/io.h | ||
3 | * | ||
4 | * Copyright (C) 1999 ARM Limited | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | * GNU General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License | ||
17 | * along with this program; if not, write to the Free Software | ||
18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
19 | */ | ||
20 | #ifndef __ASM_ARM_ARCH_IO_H | ||
21 | #define __ASM_ARM_ARCH_IO_H | ||
22 | |||
23 | #define IO_SPACE_LIMIT 0xffff | ||
24 | |||
25 | |||
26 | /* | ||
27 | * Generic virtual read/write | ||
28 | */ | ||
29 | /*#define outsw __arch_writesw | ||
30 | #define outsl __arch_writesl | ||
31 | #define outsb __arch_writesb | ||
32 | #define insb __arch_readsb | ||
33 | #define insw __arch_readsw | ||
34 | #define insl __arch_readsl*/ | ||
35 | |||
36 | #define __io(a) ((void __iomem *)(a)) | ||
37 | #define __mem_pci(a) (a) | ||
38 | |||
39 | #endif | ||
diff --git a/include/asm-arm/arch-epxa10db/irqs.h b/include/asm-arm/arch-epxa10db/irqs.h new file mode 100644 index 000000000000..c3758a3b5d9d --- /dev/null +++ b/include/asm-arm/arch-epxa10db/irqs.h | |||
@@ -0,0 +1,45 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-camelot/irqs.h | ||
3 | * | ||
4 | * Copyright (C) 2001 Altera Corporation | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | * GNU General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License | ||
17 | * along with this program; if not, write to the Free Software | ||
18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
19 | */ | ||
20 | |||
21 | /* Use the Excalibur chip definitions */ | ||
22 | #define INT_CTRL00_TYPE | ||
23 | #include "asm/arch/int_ctrl00.h" | ||
24 | |||
25 | |||
26 | #define IRQ_PLD0 INT_MS_P0_OFST | ||
27 | #define IRQ_PLD1 INT_MS_P1_OFST | ||
28 | #define IRQ_PLD2 INT_MS_P2_OFST | ||
29 | #define IRQ_PLD3 INT_MS_P3_OFST | ||
30 | #define IRQ_PLD4 INT_MS_P4_OFST | ||
31 | #define IRQ_PLD5 INT_MS_P5_OFST | ||
32 | #define IRQ_EXT INT_MS_IP_OFST | ||
33 | #define IRQ_UART INT_MS_UA_OFST | ||
34 | #define IRQ_TIMER0 INT_MS_T0_OFST | ||
35 | #define IRQ_TIMER1 INT_MS_T1_OFST | ||
36 | #define IRQ_PLL INT_MS_PLL_OFST | ||
37 | #define IRQ_EBI INT_MS_EBI_OFST | ||
38 | #define IRQ_STRIPE_BRIDGE INT_MS_PLL_OFST | ||
39 | #define IRQ_AHB_BRIDGE INT_MS_PLL_OFST | ||
40 | #define IRQ_COMMRX INT_MS_CR_OFST | ||
41 | #define IRQ_COMMTX INT_MS_CT_OFST | ||
42 | #define IRQ_FAST_COMM INT_MS_FC_OFST | ||
43 | |||
44 | #define NR_IRQS (INT_MS_FC_OFST + 1) | ||
45 | |||
diff --git a/include/asm-arm/arch-epxa10db/memory.h b/include/asm-arm/arch-epxa10db/memory.h new file mode 100644 index 000000000000..3f86bf7f67f0 --- /dev/null +++ b/include/asm-arm/arch-epxa10db/memory.h | |||
@@ -0,0 +1,38 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-epxa10/memory.h | ||
3 | * | ||
4 | * Copyright (C) 2001 Altera Corporation | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | * GNU General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License | ||
17 | * along with this program; if not, write to the Free Software | ||
18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
19 | */ | ||
20 | #ifndef __ASM_ARCH_MEMORY_H | ||
21 | #define __ASM_ARCH_MEMORY_H | ||
22 | |||
23 | /* | ||
24 | * Physical DRAM offset. | ||
25 | */ | ||
26 | #define PHYS_OFFSET (0x00000000UL) | ||
27 | |||
28 | /* | ||
29 | * Virtual view <-> DMA view memory address translations | ||
30 | * virt_to_bus: Used to translate the virtual address to an | ||
31 | * address suitable to be passed to set_dma_addr | ||
32 | * bus_to_virt: Used to convert an address for DMA operations | ||
33 | * to an address that the kernel can use. | ||
34 | */ | ||
35 | #define __virt_to_bus(x) (x - PAGE_OFFSET + /*SDRAM_BASE*/0) | ||
36 | #define __bus_to_virt(x) (x - /*SDRAM_BASE*/0 + PAGE_OFFSET) | ||
37 | |||
38 | #endif | ||
diff --git a/include/asm-arm/arch-epxa10db/mode_ctrl00.h b/include/asm-arm/arch-epxa10db/mode_ctrl00.h new file mode 100644 index 000000000000..d8a7efa12e19 --- /dev/null +++ b/include/asm-arm/arch-epxa10db/mode_ctrl00.h | |||
@@ -0,0 +1,80 @@ | |||
1 | #ifndef __MODE_CTRL00_H | ||
2 | #define __MODE_CTRL00_H | ||
3 | |||
4 | /* | ||
5 | * Register definitions for the reset and mode control | ||
6 | */ | ||
7 | |||
8 | /* | ||
9 | * Copyright (C) 2001 Altera Corporation | ||
10 | * | ||
11 | * This program is free software; you can redistribute it and/or modify | ||
12 | * it under the terms of the GNU General Public License as published by | ||
13 | * the Free Software Foundation; either version 2 of the License, or | ||
14 | * (at your option) any later version. | ||
15 | * | ||
16 | * This program is distributed in the hope that it will be useful, | ||
17 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
19 | * GNU General Public License for more details. | ||
20 | * | ||
21 | * You should have received a copy of the GNU General Public License | ||
22 | * along with this program; if not, write to the Free Software | ||
23 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
24 | */ | ||
25 | |||
26 | |||
27 | |||
28 | #define BOOT_CR(BASE_ADDR) (MODE_CTRL00_TYPE (BASE_ADDR )) | ||
29 | #define BOOT_CR_BF_MSK (0x1) | ||
30 | #define BOOT_CR_BF_OFST (0) | ||
31 | #define BOOT_CR_HM_MSK (0x2) | ||
32 | #define BOOT_CR_HM_OFST (1) | ||
33 | #define BOOT_CR_RE_MSK (0x4) | ||
34 | #define BOOT_CR_RE_OFST (2) | ||
35 | |||
36 | #define RESET_SR(BASE_ADDR) (MODE_CTRL00_TYPE (BASE_ADDR + 0x4 )) | ||
37 | #define RESET_SR_WR_MSK (0x1) | ||
38 | #define RESET_SR_WR_OFST (0) | ||
39 | #define RESET_SR_CR_MSK (0x2) | ||
40 | #define RESET_SR_CR_OFST (1) | ||
41 | #define RESET_SR_JT_MSK (0x4) | ||
42 | #define RESET_SR_JT_OFST (2) | ||
43 | #define RESET_SR_ER_MSK (0x8) | ||
44 | #define RESET_SR_ER_OFST (3) | ||
45 | |||
46 | #define ID_CODE(BASE_ADDR) (MODE_CTRL00_TYPE (BASE_ADDR + 0x08 )) | ||
47 | |||
48 | #define SRAM0_SR(BASE_ADDR) (MODE_CTRL00_TYPE (BASE_ADDR + 0x20 )) | ||
49 | #define SRAM0_SR_SIZE_MSK (0xFFFFF000) | ||
50 | #define SRAM0_SR_SIZE_OFST (12) | ||
51 | |||
52 | #define SRAM1_SR(BASE_ADDR) (MODE_CTRL00_TYPE (BASE_ADDR + 0x24 )) | ||
53 | #define SRAM1_SR_SIZE_MSK (0xFFFFF000) | ||
54 | #define SRAM1_SR_SIZE_OFST (12) | ||
55 | |||
56 | #define DPSRAM0_SR(BASE_ADDR) (MODE_CTRL00_TYPE (BASE_ADDR + 0x30 )) | ||
57 | |||
58 | #define DPSRAM0_SR_MODE_MSK (0xF) | ||
59 | #define DPSRAM0_SR_MODE_OFST (0) | ||
60 | #define DPSRAM0_SR_GLBL_MSK (0x30) | ||
61 | #define DPSRAM0_SR_SIZE_MSK (0xFFFFF000) | ||
62 | #define DPSRAM0_SR_SIZE_OFST (12) | ||
63 | |||
64 | #define DPSRAM0_LCR(BASE_ADDR) (MODE_CTRL00_TYPE (BASE_ADDR + 0x34 )) | ||
65 | #define DPSRAM0_LCR_LCKADDR_MSK (0x1FFE0) | ||
66 | #define DPSRAM0_LCR_LCKADDR_OFST (4) | ||
67 | |||
68 | #define DPSRAM1_SR(BASE_ADDR) (MODE_CTRL00_TYPE (BASE_ADDR + 0x38 )) | ||
69 | #define DPSRAM1_SR_MODE_MSK (0xF) | ||
70 | #define DPSRAM1_SR_MODE_OFST (0) | ||
71 | #define DPSRAM1_SR_GLBL_MSK (0x30) | ||
72 | #define DPSRAM1_SR_GLBL_OFST (4) | ||
73 | #define DPSRAM1_SR_SIZE_MSK (0xFFFFF000) | ||
74 | #define DPSRAM1_SR_SIZE_OFST (12) | ||
75 | |||
76 | #define DPSRAM1_LCR(BASE_ADDR) (MODE_CTRL00_TYPE (BASE_ADDR + 0x3C )) | ||
77 | #define DPSRAM1_LCR_LCKADDR_MSK (0x1FFE0) | ||
78 | #define DPSRAM1_LCR_LCKADDR_OFST (4) | ||
79 | |||
80 | #endif /* __MODE_CTRL00_H */ | ||
diff --git a/include/asm-arm/arch-epxa10db/param.h b/include/asm-arm/arch-epxa10db/param.h new file mode 100644 index 000000000000..783dedd71c8f --- /dev/null +++ b/include/asm-arm/arch-epxa10db/param.h | |||
@@ -0,0 +1,19 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-epxa10db/param.h | ||
3 | * | ||
4 | * Copyright (C) 1999 ARM Limited | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | * GNU General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License | ||
17 | * along with this program; if not, write to the Free Software | ||
18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
19 | */ | ||
diff --git a/include/asm-arm/arch-epxa10db/platform.h b/include/asm-arm/arch-epxa10db/platform.h new file mode 100644 index 000000000000..129bb0f212a0 --- /dev/null +++ b/include/asm-arm/arch-epxa10db/platform.h | |||
@@ -0,0 +1,7 @@ | |||
1 | #ifndef PLATFORM_H | ||
2 | #define PLATFORM_H | ||
3 | #include "excalibur.h" | ||
4 | |||
5 | #define MAXIRQNUM 15 | ||
6 | #endif | ||
7 | |||
diff --git a/include/asm-arm/arch-epxa10db/pld_conf00.h b/include/asm-arm/arch-epxa10db/pld_conf00.h new file mode 100644 index 000000000000..7af2c38dacc6 --- /dev/null +++ b/include/asm-arm/arch-epxa10db/pld_conf00.h | |||
@@ -0,0 +1,73 @@ | |||
1 | #ifndef __PLD_CONF00_H | ||
2 | #define __PLD_CONF00_H | ||
3 | |||
4 | /* | ||
5 | * Register definitions for the PLD Configuration Logic | ||
6 | */ | ||
7 | |||
8 | /* | ||
9 | * | ||
10 | * This file contains the register definitions for the Excalibur | ||
11 | * Interrupt controller INT_CTRL00. | ||
12 | * | ||
13 | * Copyright (C) 2001 Altera Corporation | ||
14 | * | ||
15 | * This program is free software; you can redistribute it and/or modify | ||
16 | * it under the terms of the GNU General Public License as published by | ||
17 | * the Free Software Foundation; either version 2 of the License, or | ||
18 | * (at your option) any later version. | ||
19 | * | ||
20 | * This program is distributed in the hope that it will be useful, | ||
21 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
22 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
23 | * GNU General Public License for more details. | ||
24 | * | ||
25 | * You should have received a copy of the GNU General Public License | ||
26 | * along with this program; if not, write to the Free Software | ||
27 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
28 | */ | ||
29 | |||
30 | #define CONFIG_CONTROL(BASE_ADDR) (PLD_CONF00_TYPE (BASE_ADDR)) | ||
31 | #define CONFIG_CONTROL_LK_MSK (0x1) | ||
32 | #define CONFIG_CONTROL_LK_OFST (0) | ||
33 | #define CONFIG_CONTROL_CO_MSK (0x2) | ||
34 | #define CONFIG_CONTROL_CO_OFST (1) | ||
35 | #define CONFIG_CONTROL_B_MSK (0x4) | ||
36 | #define CONFIG_CONTROL_B_OFST (2) | ||
37 | #define CONFIG_CONTROL_PC_MSK (0x8) | ||
38 | #define CONFIG_CONTROL_PC_OFST (3) | ||
39 | #define CONFIG_CONTROL_E_MSK (0x10) | ||
40 | #define CONFIG_CONTROL_E_OFST (4) | ||
41 | #define CONFIG_CONTROL_ES_MSK (0xE0) | ||
42 | #define CONFIG_CONTROL_ES_OFST (5) | ||
43 | #define CONFIG_CONTROL_ES_0_MSK (0x20) | ||
44 | #define CONFIG_CONTROL_ES_1_MSK (0x40) | ||
45 | #define CONFIG_CONTROL_ES_2_MSK (0x80) | ||
46 | |||
47 | #define CONFIG_CONTROL_CLOCK(BASE_ADDR) (PLD_CONF00_TYPE (BASE_ADDR + 0x4 )) | ||
48 | #define CONFIG_CONTROL_CLOCK_RATIO_MSK (0xFFFF) | ||
49 | #define CONFIG_CONTROL_CLOCK_RATIO_OFST (0) | ||
50 | |||
51 | #define CONFIG_CONTROL_DATA(BASE_ADDR) (PLD_CONF00_TYPE (BASE_ADDR + 0x8 )) | ||
52 | #define CONFIG_CONTROL_DATA_MSK (0xFFFFFFFF) | ||
53 | #define CONFIG_CONTROL_DATA_OFST (0) | ||
54 | |||
55 | #define CONFIG_UNLOCK(BASE_ADDR) (PLD_CONF00_TYPE (BASE_ADDR + 0xC )) | ||
56 | #define CONFIG_UNLOCK_MSK (0xFFFFFFFF) | ||
57 | #define CONFIG_UNLOCK_OFST (0) | ||
58 | |||
59 | #define CONFIG_UNLOCK_MAGIC (0x554E4C4B) | ||
60 | |||
61 | #endif /* __PLD_CONF00_H */ | ||
62 | |||
63 | |||
64 | |||
65 | |||
66 | |||
67 | |||
68 | |||
69 | |||
70 | |||
71 | |||
72 | |||
73 | |||
diff --git a/include/asm-arm/arch-epxa10db/system.h b/include/asm-arm/arch-epxa10db/system.h new file mode 100644 index 000000000000..345b092a1ed5 --- /dev/null +++ b/include/asm-arm/arch-epxa10db/system.h | |||
@@ -0,0 +1,41 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-epxa10db/system.h | ||
3 | * | ||
4 | * Copyright (C) 1999 ARM Limited | ||
5 | * Copyright (C) 2000 Deep Blue Solutions Ltd | ||
6 | * Copyright (C) 2001 Altera Corporation | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License as published by | ||
10 | * the Free Software Foundation; either version 2 of the License, or | ||
11 | * (at your option) any later version. | ||
12 | * | ||
13 | * This program is distributed in the hope that it will be useful, | ||
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
16 | * GNU General Public License for more details. | ||
17 | * | ||
18 | * You should have received a copy of the GNU General Public License | ||
19 | * along with this program; if not, write to the Free Software | ||
20 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
21 | */ | ||
22 | #ifndef __ASM_ARCH_SYSTEM_H | ||
23 | #define __ASM_ARCH_SYSTEM_H | ||
24 | |||
25 | #include <asm/arch/platform.h> | ||
26 | |||
27 | static inline void arch_idle(void) | ||
28 | { | ||
29 | /* | ||
30 | * This should do all the clock switching | ||
31 | * and wait for interrupt tricks | ||
32 | */ | ||
33 | cpu_do_idle(); | ||
34 | } | ||
35 | |||
36 | extern __inline__ void arch_reset(char mode) | ||
37 | { | ||
38 | /* Hmm... We can probably do something with the watchdog... */ | ||
39 | } | ||
40 | |||
41 | #endif | ||
diff --git a/include/asm-arm/arch-epxa10db/tdkphy.h b/include/asm-arm/arch-epxa10db/tdkphy.h new file mode 100644 index 000000000000..5e107bd4e109 --- /dev/null +++ b/include/asm-arm/arch-epxa10db/tdkphy.h | |||
@@ -0,0 +1,209 @@ | |||
1 | /* | ||
2 | * linux/drivers/tdkphy.h | ||
3 | * | ||
4 | * Copyright (C) 2001 Altera Corporation | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | * GNU General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License | ||
17 | * along with this program; if not, write to the Free Software | ||
18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
19 | */ | ||
20 | |||
21 | #ifndef __TDKPHY_H | ||
22 | #define __TDKPHY_H | ||
23 | |||
24 | /* | ||
25 | * Register definitions for the TDK 78Q2120 PHY | ||
26 | * which is on the Camelot board | ||
27 | */ | ||
28 | |||
29 | /* | ||
30 | * Copyright (c) Altera Corporation 2000. | ||
31 | * All rights reserved. | ||
32 | */ | ||
33 | #define PHY_CONTROL (0) | ||
34 | #define PHY_CONTROL_COLT_MSK (0x80) | ||
35 | #define PHY_CONTROL_COLT_OFST (7) | ||
36 | #define PHY_CONTROL_DUPLEX_MSK (0x100) | ||
37 | #define PHY_CONTROL_DUPLEX_OFST (8) | ||
38 | #define PHY_CONTROL_RANEG_MSK (0x200) | ||
39 | #define PHY_CONTROL_RANEG_OFST (9) | ||
40 | #define PHY_CONTROL_ISO_MSK (0x400) | ||
41 | #define PHY_CONTROL_ISO_OFST (10) | ||
42 | #define PHY_CONTROL_PWRDN_MSK (0x800) | ||
43 | #define PHY_CONTROL_PWRDN_OFST (11) | ||
44 | #define PHY_CONTROL_ANEGEN_MSK (0x1000) | ||
45 | #define PHY_CONTROL_ANEGEN_OFST (12) | ||
46 | #define PHY_CONTROL_SPEEDSL_MSK (0x2000) | ||
47 | #define PHY_CONTROL_SPEEDSL_OFST (13) | ||
48 | #define PHY_CONTROL_LOOPBK_MSK (0x4000) | ||
49 | #define PHY_CONTROL_LOOPBK_OFST (14) | ||
50 | #define PHY_CONTROL_RESET_MSK (0x8000) | ||
51 | #define PHY_CONTROL_RESET_OFST (15) | ||
52 | |||
53 | #define PHY_STATUS (1) | ||
54 | #define PHY_STATUS_ETXD_MSK (0x1) | ||
55 | #define PHY_STATUS_EXTD_OFST (0) | ||
56 | #define PHY_STATUS_JAB_MSK (0x2) | ||
57 | #define PHY_STATUS_JAB_OFST (1) | ||
58 | #define PHY_STATUS_LINK_MSK (0x4) | ||
59 | #define PHY_STATUS_LINK_OFST (2) | ||
60 | #define PHY_STATUS_ANEGA_MSK (0x8) | ||
61 | #define PHY_STATUS_ANEGA_OFST (3) | ||
62 | #define PHY_STATUS_RFAULT_MSK (0x10) | ||
63 | #define PHY_STATUS_RFAULT_OFST (4) | ||
64 | #define PHY_STATUS_ANEGC_MSK (0x20) | ||
65 | #define PHY_STATUS_ANEGC_OFST (5) | ||
66 | #define PHY_STATUS_10T_H_MSK (0x800) | ||
67 | #define PHY_STATUS_10T_H_OFST (11) | ||
68 | #define PHY_STATUS_10T_F_MSK (0x1000) | ||
69 | #define PHY_STATUS_10T_F_OFST (12) | ||
70 | #define PHY_STATUS_100_X_H_MSK (0x2000) | ||
71 | #define PHY_STATUS_100_X_H_OFST (13) | ||
72 | #define PHY_STATUS_100_X_F_MSK (0x4000) | ||
73 | #define PHY_STATUS_100_X_F_OFST (14) | ||
74 | #define PHY_STATUS_100T4_MSK (0x8000) | ||
75 | #define PHY_STATUS_100T4_OFST (15) | ||
76 | |||
77 | #define PHY_ID1 (2) | ||
78 | #define PHY_ID1_OUI_MSK (0xFFFF) | ||
79 | #define PHY_ID1_OUI_OFST (0) | ||
80 | |||
81 | #define PHY_ID2 (3) | ||
82 | #define PHY_ID2_RN_MSK (0xF) | ||
83 | #define PHY_ID2_RN_OFST (0) | ||
84 | #define PHY_ID2_MN_MSK (0x3F0) | ||
85 | #define PHY_ID2_MN_OFST (4) | ||
86 | #define PHY_ID2_OUI_MSK (0xFC00) | ||
87 | #define PHY_ID2_OUI_OFST (10) | ||
88 | |||
89 | #define PHY_AUTO_NEG_ADVERTISEMENT (4) | ||
90 | #define PHY_AUTO_NEG_ADVERTISEMENT_SELECTOR_MSK (0x1F) | ||
91 | #define PHY_AUTO_NEG_ADVERTISEMENT_SELECTOR_OFST (0) | ||
92 | #define PHY_AUTO_NEG_ADVERTISEMENT_A0_MSK (0x20) | ||
93 | #define PHY_AUTO_NEG_ADVERTISEMENT_A0_OFST (5) | ||
94 | #define PHY_AUTO_NEG_ADVERTISEMENT_A1_MSK (0x40) | ||
95 | #define PHY_AUTO_NEG_ADVERTISEMENT_A1_OFST (6) | ||
96 | #define PHY_AUTO_NEG_ADVERTISEMENT_A2_MSK (0x80) | ||
97 | #define PHY_AUTO_NEG_ADVERTISEMENT_A2_OFST (7) | ||
98 | #define PHY_AUTO_NEG_ADVERTISEMENT_A3_MSK (0x100) | ||
99 | #define PHY_AUTO_NEG_ADVERTISEMENT_A3_OFST (8) | ||
100 | #define PHY_AUTO_NEG_ADVERTISEMENT_A4_MSK (0x200) | ||
101 | #define PHY_AUTO_NEG_ADVERTISEMENT_A4_OFST (9) | ||
102 | #define PHY_AUTO_NEG_ADVERTISEMENT_TAF_MSK (0x1FE0) | ||
103 | #define PHY_AUTO_NEG_ADVERTISEMENT_TAF_OFST (5) | ||
104 | #define PHY_AUTO_NEG_ADVERTISEMENT_RF_MSK (0x2000) | ||
105 | #define PHY_AUTO_NEG_ADVERTISEMENT_RF_OFST (13) | ||
106 | #define PHY_AUTO_NEG_ADVERTISEMENT_RSVD_MSK (0x4000) | ||
107 | #define PHY_AUTO_NEG_ADVERTISEMENT_RVSD_OFST (14) | ||
108 | #define PHY_AUTO_NEG_ADVERTISEMENT_NP_MSK (0x8000) | ||
109 | #define PHY_AUTO_NEG_ADVERTISEMENT_NP_OFST (15) | ||
110 | |||
111 | #define PHY_AUTO_NEG_LINK_PARTNER (5) | ||
112 | #define PHY_AUTO_NEG_LINK_PARTNER_S4_MSK (0x1F) | ||
113 | #define PHY_AUTO_NEG_LINK_PARTNER_S4_OFST (0) | ||
114 | #define PHY_AUTO_NEG_LINK_PARTNER_A7_MSK (0x1FE0) | ||
115 | #define PHY_AUTO_NEG_LINK_PARTNER_A7_OFST (5) | ||
116 | #define PHY_AUTO_NEG_LINK_PARTNER_RF_MSK (0x2000) | ||
117 | #define PHY_AUTO_NEG_LINK_PARTNER_RF_OFST (13) | ||
118 | #define PHY_AUTO_NEG_LINK_PARTNER_ACK_MSK (0x4000) | ||
119 | #define PHY_AUTO_NEG_LINK_PARTNER_ACK_OFST (14) | ||
120 | #define PHY_AUTO_NEG_LINK_PARTNER_NP_MSK (0x8000) | ||
121 | #define PHY_AUTO_NEG_LINK_PARTNER_NP_OFST (15) | ||
122 | |||
123 | #define PHY_AUTO_NEG_EXPANSION (6) | ||
124 | #define PHY_AUTO_NEG_EXPANSION_LPANEGA_MSK (0x1) | ||
125 | #define PHY_AUTO_NEG_EXPANSION_LPANEGA_OFST (0) | ||
126 | #define PHY_AUTO_NEG_EXPANSION_PRX_MSK (0x2) | ||
127 | #define PHY_AUTO_NEG_EXPANSION_PRX_OFST (1) | ||
128 | #define PHY_AUTO_NEG_EXPANSION_NPA_MSK (0x4) | ||
129 | #define PHY_AUTO_NEG_EXPANSION_NPA_OFST (2) | ||
130 | #define PHY_AUTO_NEG_EXPANSION_LPNPA_MSK (0x8) | ||
131 | #define PHY_AUTO_NEG_EXPANSION_LPNPA_OFST (3) | ||
132 | #define PHY_AUTO_NEG_EXPANSION_PDF_MSK (0x10) | ||
133 | #define PHY_AUTO_NEG_EXPANSION_PDF_OFST (4) | ||
134 | |||
135 | #define PHY_VENDOR_SPECIFIC (16) | ||
136 | #define PHY_VENDOR_SPECIFIC_RXCC_MSK (0x1) | ||
137 | #define PHY_VENDOR_SPECIFIC_RXCC_OFST (0) | ||
138 | #define PHY_VENDOR_SPECIFIC_PCSBP_MSK (0x2) | ||
139 | #define PHY_VENDOR_SPECIFIC_PCSBP_OFST (1) | ||
140 | #define PHY_VENDOR_SPECIFIC_RVSPOL_MSK (0x10) | ||
141 | #define PHY_VENDOR_SPECIFIC_RVSPOL_OFST (4) | ||
142 | #define PHY_VENDOR_SPECIFIC_APOL_MSK (0x20) | ||
143 | #define PHY_VENDOR_SPECIFIC_APOL_OFST (5) | ||
144 | #define PHY_VENDOR_SPECIFIC_GPIO0_DIR_MSK (0x40) | ||
145 | #define PHY_VENDOR_SPECIFIC_GPIO0_DIR_OFST (6) | ||
146 | #define PHY_VENDOR_SPECIFIC_GPIO0_DAT_MSK (0x80) | ||
147 | #define PHY_VENDOR_SPECIFIC_GPIO0_DAT_OFST (7) | ||
148 | #define PHY_VENDOR_SPECIFIC_GPIO1_DIR_MSK (0x100) | ||
149 | #define PHY_VENDOR_SPECIFIC_GPIO1_DIR_OFST (8) | ||
150 | #define PHY_VENDOR_SPECIFIC_GPIO1_DAT_MSK (0x200) | ||
151 | #define PHY_VENDOR_SPECIFIC_GPIO1_DAT_OFST (9) | ||
152 | #define PHY_VENDOR_SPECIFIC_10BT_NATURAL_LOOPBACK_DAT_MSK (0x400) | ||
153 | #define PHY_VENDOR_SPECIFIC_10BT_NATURAL_LOOPBACK_DAT_OFST (10) | ||
154 | #define PHY_VENDOR_SPECIFIC_10BT_SQE_TEST_INHIBIT_MSK (0x800) | ||
155 | #define PHY_VENDOR_SPECIFIC_10BT_SQE_TEST_INHIBIT_OFST (11) | ||
156 | #define PHY_VENDOR_SPECIFIC_TXHIM_MSK (0x1000) | ||
157 | #define PHY_VENDOR_SPECIFIC_TXHIM_OFST (12) | ||
158 | #define PHY_VENDOR_SPECIFIC_INT_LEVEL_MSK (0x4000) | ||
159 | #define PHY_VENDOR_SPECIFIC_INT_LEVEL_OFST (14) | ||
160 | #define PHY_VENDOR_SPECIFIC_RPTR_MSK (0x8000) | ||
161 | #define PHY_VENDOR_SPECIFIC_RPTR_OFST (15) | ||
162 | |||
163 | #define PHY_IRQ_CONTROL (17) | ||
164 | #define PHY_IRQ_CONTROL_ANEG_COMP_INT_MSK (0x1) | ||
165 | #define PHY_IRQ_CONTROL_ANEG_COMP_INT_OFST (0) | ||
166 | #define PHY_IRQ_CONTROL_RFAULT_INT_MSK (0x2) | ||
167 | #define PHY_IRQ_CONTROL_RFAULT_INT_OFST (1) | ||
168 | #define PHY_IRQ_CONTROL_LS_CHG_INT_MSK (0x4) | ||
169 | #define PHY_IRQ_CONTROL_LS_CHG_INT_OFST (2) | ||
170 | #define PHY_IRQ_CONTROL_LP_ACK_INT_MSK (0x8) | ||
171 | #define PHY_IRQ_CONTROL_LP_ACK_INT_OFST (3) | ||
172 | #define PHY_IRQ_CONTROL_PDF_INT_MSK (0x10) | ||
173 | #define PHY_IRQ_CONTROL_PDF_INT_OFST (4) | ||
174 | #define PHY_IRQ_CONTROL_PRX_INT_MSK (0x20) | ||
175 | #define PHY_IRQ_CONTROL_PRX_INT_OFST (5) | ||
176 | #define PHY_IRQ_CONTROL_RXER_INT_MSK (0x40) | ||
177 | #define PHY_IRQ_CONTROL_RXER_INT_OFST (6) | ||
178 | #define PHY_IRQ_CONTROL_JABBER_INT_MSK (0x80) | ||
179 | #define PHY_IRQ_CONTROL_JABBER_INT_OFST (7) | ||
180 | #define PHY_IRQ_CONTROL_ANEG_COMP_IE_MSK (0x100) | ||
181 | #define PHY_IRQ_CONTROL_ANEG_COMP_IE_OFST (8) | ||
182 | #define PHY_IRQ_CONTROL_RFAULT_IE_MSK (0x200) | ||
183 | #define PHY_IRQ_CONTROL_RFAULT_IE_OFST (9) | ||
184 | #define PHY_IRQ_CONTROL_LS_CHG_IE_MSK (0x400) | ||
185 | #define PHY_IRQ_CONTROL_LS_CHG_IE_OFST (10) | ||
186 | #define PHY_IRQ_CONTROL_LP_ACK_IE_MSK (0x800) | ||
187 | #define PHY_IRQ_CONTROL_LP_ACK_IE_OFST (11) | ||
188 | #define PHY_IRQ_CONTROL_PDF_IE_MSK (0x1000) | ||
189 | #define PHY_IRQ_CONTROL_PDF_IE_OFST (12) | ||
190 | #define PHY_IRQ_CONTROL_PRX_IE_MSK (0x2000) | ||
191 | #define PHY_IRQ_CONTROL_PRX_IE_OFST (13) | ||
192 | #define PHY_IRQ_CONTROL_RXER_IE_MSK (0x4000) | ||
193 | #define PHY_IRQ_CONTROL_RXER_IE_OFST (14) | ||
194 | #define PHY_IRQ_CONTROL_JABBER_IE_MSK (0x8000) | ||
195 | #define PHY_IRQ_CONTROL_JABBER_IE_OFST (15) | ||
196 | |||
197 | #define PHY_DIAGNOSTIC (18) | ||
198 | #define PHY_DIAGNOSTIC_RX_LOCK_MSK (0x100) | ||
199 | #define PHY_DIAGNOSTIC_RX_LOCK_OFST (8) | ||
200 | #define PHY_DIAGNOSTIC_RX_PASS_MSK (0x200) | ||
201 | #define PHY_DIAGNOSTIC_RX_PASS_OFST (9) | ||
202 | #define PHY_DIAGNOSTIC_RATE_MSK (0x400) | ||
203 | #define PHY_DIAGNOSTIC_RATE_OFST (10) | ||
204 | #define PHY_DIAGNOSTIC_DPLX_MSK (0x800) | ||
205 | #define PHY_DIAGNOSTIC_DPLX_OFST (11) | ||
206 | #define PHY_DIAGNOSTIC_ANEGF_MSK (0x1000) | ||
207 | #define PHY_DIAGNOSTIC_ANEGF_OFST (12) | ||
208 | |||
209 | #endif /* __TDKPHY_H */ | ||
diff --git a/include/asm-arm/arch-epxa10db/timer00.h b/include/asm-arm/arch-epxa10db/timer00.h new file mode 100644 index 000000000000..52a3fb58b59d --- /dev/null +++ b/include/asm-arm/arch-epxa10db/timer00.h | |||
@@ -0,0 +1,98 @@ | |||
1 | /* | ||
2 | * | ||
3 | * This file contains the register definitions for the Excalibur | ||
4 | * Timer TIMER00. | ||
5 | * | ||
6 | * Copyright (C) 2001 Altera Corporation | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License as published by | ||
10 | * the Free Software Foundation; either version 2 of the License, or | ||
11 | * (at your option) any later version. | ||
12 | * | ||
13 | * This program is distributed in the hope that it will be useful, | ||
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
16 | * GNU General Public License for more details. | ||
17 | * | ||
18 | * You should have received a copy of the GNU General Public License | ||
19 | * along with this program; if not, write to the Free Software | ||
20 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
21 | */ | ||
22 | #ifndef __TIMER00_H | ||
23 | #define __TIMER00_H | ||
24 | |||
25 | /* | ||
26 | * Register definitions for the timers | ||
27 | */ | ||
28 | |||
29 | |||
30 | #define TIMER0_CR(BASE_ADDR) (TIMER00_TYPE (BASE_ADDR + 0x00 )) | ||
31 | #define TIMER0_CR_B_MSK (0x20) | ||
32 | #define TIMER0_CR_B_OFST (0x5) | ||
33 | #define TIMER0_CR_S_MSK (0x10) | ||
34 | #define TIMER0_CR_S_OFST (0x4) | ||
35 | #define TIMER0_CR_CI_MSK (0x08) | ||
36 | #define TIMER0_CR_CI_OFST (0x3) | ||
37 | #define TIMER0_CR_IE_MSK (0x04) | ||
38 | #define TIMER0_CR_IE_OFST (0x2) | ||
39 | #define TIMER0_CR_MODE_MSK (0x3) | ||
40 | #define TIMER0_CR_MODE_OFST (0) | ||
41 | #define TIMER0_CR_MODE_FREE (0) | ||
42 | #define TIMER0_CR_MODE_ONE (1) | ||
43 | #define TIMER0_CR_MODE_INTVL (2) | ||
44 | |||
45 | #define TIMER0_SR(BASE_ADDR) (TIMER00_TYPE (BASE_ADDR + 0x00 )) | ||
46 | #define TIMER0_SR_B_MSK (0x20) | ||
47 | #define TIMER0_SR_B_OFST (0x5) | ||
48 | #define TIMER0_SR_S_MSK (0x10) | ||
49 | #define TIMER0_SR_S_OFST (0x4) | ||
50 | #define TIMER0_SR_CI_MSK (0x08) | ||
51 | #define TIMER0_SR_CI_OFST (0x3) | ||
52 | #define TIMER0_SR_IE_MSK (0x04) | ||
53 | #define TIMER0_SR_IE_OFST (0x2) | ||
54 | #define TIMER0_SR_MODE_MSK (0x3) | ||
55 | #define TIMER0_SR_MODE_OFST (0) | ||
56 | #define TIMER0_SR_MODE_FREE (0) | ||
57 | #define TIMER0_SR_MODE_ONE (1) | ||
58 | #define TIMER0_SR_MODE_INTVL (2) | ||
59 | |||
60 | #define TIMER0_PRESCALE(BASE_ADDR) (TIMER00_TYPE (BASE_ADDR + 0x010 )) | ||
61 | #define TIMER0_LIMIT(BASE_ADDR) (TIMER00_TYPE (BASE_ADDR + 0x020 )) | ||
62 | #define TIMER0_READ(BASE_ADDR) (TIMER00_TYPE (BASE_ADDR + 0x030 )) | ||
63 | |||
64 | #define TIMER1_CR(BASE_ADDR) (TIMER00_TYPE (BASE_ADDR + 0x40 )) | ||
65 | #define TIMER1_CR_B_MSK (0x20) | ||
66 | #define TIMER1_CR_B_OFST (0x5) | ||
67 | #define TIMER1_CR_S_MSK (0x10) | ||
68 | #define TIMER1_CR_S_OFST (0x4) | ||
69 | #define TIMER1_CR_CI_MSK (0x08) | ||
70 | #define TIMER1_CR_CI_OFST (0x3) | ||
71 | #define TIMER1_CR_IE_MSK (0x04) | ||
72 | #define TIMER1_CR_IE_OFST (0x2) | ||
73 | #define TIMER1_CR_MODE_MSK (0x3) | ||
74 | #define TIMER1_CR_MODE_OFST (0) | ||
75 | #define TIMER1_CR_MODE_FREE (0) | ||
76 | #define TIMER1_CR_MODE_ONE (1) | ||
77 | #define TIMER1_CR_MODE_INTVL (2) | ||
78 | |||
79 | #define TIMER1_SR(BASE_ADDR) (TIMER00_TYPE (BASE_ADDR + 0x40 )) | ||
80 | #define TIMER1_SR_B_MSK (0x20) | ||
81 | #define TIMER1_SR_B_OFST (0x5) | ||
82 | #define TIMER1_SR_S_MSK (0x10) | ||
83 | #define TIMER1_SR_S_OFST (0x4) | ||
84 | #define TIMER1_SR_CI_MSK (0x08) | ||
85 | #define TIMER1_SR_CI_OFST (0x3) | ||
86 | #define TIMER1_SR_IE_MSK (0x04) | ||
87 | #define TIMER1_SR_IE_OFST (0x2) | ||
88 | #define TIMER1_SR_MODE_MSK (0x3) | ||
89 | #define TIMER1_SR_MODE_OFST (0) | ||
90 | #define TIMER1_SR_MODE_FREE (0) | ||
91 | #define TIMER1_SR_MODE_ONE (1) | ||
92 | #define TIMER1_SR_MODE_INTVL (2) | ||
93 | |||
94 | #define TIMER1_PRESCALE(BASE_ADDR) (TIMER00_TYPE (BASE_ADDR + 0x050 )) | ||
95 | #define TIMER1_LIMIT(BASE_ADDR) (TIMER00_TYPE (BASE_ADDR + 0x060 )) | ||
96 | #define TIMER1_READ(BASE_ADDR) (TIMER00_TYPE (BASE_ADDR + 0x070 )) | ||
97 | |||
98 | #endif /* __TIMER00_H */ | ||
diff --git a/include/asm-arm/arch-epxa10db/timex.h b/include/asm-arm/arch-epxa10db/timex.h new file mode 100644 index 000000000000..b87a75fc9589 --- /dev/null +++ b/include/asm-arm/arch-epxa10db/timex.h | |||
@@ -0,0 +1,26 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-epxa10db/timex.h | ||
3 | * | ||
4 | * Excalibur timex specifications | ||
5 | * | ||
6 | * Copyright (C) 2001 Altera Corporation | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License as published by | ||
10 | * the Free Software Foundation; either version 2 of the License, or | ||
11 | * (at your option) any later version. | ||
12 | * | ||
13 | * This program is distributed in the hope that it will be useful, | ||
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
16 | * GNU General Public License for more details. | ||
17 | * | ||
18 | * You should have received a copy of the GNU General Public License | ||
19 | * along with this program; if not, write to the Free Software | ||
20 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
21 | */ | ||
22 | |||
23 | /* | ||
24 | * ?? | ||
25 | */ | ||
26 | #define CLOCK_TICK_RATE (50000000 / 16) | ||
diff --git a/include/asm-arm/arch-epxa10db/uart00.h b/include/asm-arm/arch-epxa10db/uart00.h new file mode 100644 index 000000000000..5abd8914d68b --- /dev/null +++ b/include/asm-arm/arch-epxa10db/uart00.h | |||
@@ -0,0 +1,181 @@ | |||
1 | /* * | ||
2 | * Copyright (C) 2001 Altera Corporation | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify | ||
5 | * it under the terms of the GNU General Public License as published by | ||
6 | * the Free Software Foundation; either version 2 of the License, or | ||
7 | * (at your option) any later version. | ||
8 | * | ||
9 | * This program is distributed in the hope that it will be useful, | ||
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
12 | * GNU General Public License for more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License | ||
15 | * along with this program; if not, write to the Free Software | ||
16 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
17 | */ | ||
18 | #ifndef __UART00_H | ||
19 | #define __UART00_H | ||
20 | |||
21 | /* | ||
22 | * Register definitions for the UART | ||
23 | */ | ||
24 | |||
25 | #define UART_TX_FIFO_SIZE (15) | ||
26 | |||
27 | #define UART_RSR(BASE_ADDR) (UART00_TYPE (BASE_ADDR + 0x00 )) | ||
28 | #define UART_RSR_RX_LEVEL_MSK (0x1f) | ||
29 | #define UART_RSR_RX_LEVEL_OFST (0) | ||
30 | #define UART_RSR_RE_MSK (0x80) | ||
31 | #define UART_RSR_RE_OFST (7) | ||
32 | |||
33 | #define UART_RDS(BASE_ADDR) (UART00_TYPE (BASE_ADDR + 0x04 )) | ||
34 | #define UART_RDS_BI_MSK (0x8) | ||
35 | #define UART_RDS_BI_OFST (4) | ||
36 | #define UART_RDS_FE_MSK (0x4) | ||
37 | #define UART_RDS_FE_OFST (2) | ||
38 | #define UART_RDS_PE_MSK (0x2) | ||
39 | #define UART_RDS_PE_OFST (1) | ||
40 | #define UART_RDS_OE_MSK (0x1) | ||
41 | #define UART_RDS_OE_OFST (0) | ||
42 | |||
43 | #define UART_RD(BASE_ADDR) (UART00_TYPE (BASE_ADDR + 0x08 )) | ||
44 | #define UART_RD_RX_DATA_MSK (0xff) | ||
45 | #define UART_RD_RX_DATA_OFST (0) | ||
46 | |||
47 | #define UART_TSR(BASE_ADDR) (UART00_TYPE (BASE_ADDR + 0x0c )) | ||
48 | #define UART_TSR_TX_LEVEL_MSK (0x1f) | ||
49 | #define UART_TSR_TX_LEVEL_OFST (0) | ||
50 | #define UART_TSR_TXI_MSK (0x80) | ||
51 | #define UART_TSR_TXI_OFST (7) | ||
52 | |||
53 | #define UART_TD(BASE_ADDR) (UART00_TYPE (BASE_ADDR + 0x10 )) | ||
54 | #define UART_TD_TX_DATA_MSK (0xff) | ||
55 | #define UART_TD_TX_DATA_OFST (0) | ||
56 | |||
57 | #define UART_FCR(BASE_ADDR) (UART00_TYPE (BASE_ADDR + 0x14 )) | ||
58 | #define UART_FCR_RX_THR_MSK (0xd0) | ||
59 | #define UART_FCR_RX_THR_OFST (5) | ||
60 | #define UART_FCR_RX_THR_1 (0x00) | ||
61 | #define UART_FCR_RX_THR_2 (0x20) | ||
62 | #define UART_FCR_RX_THR_4 (0x40) | ||
63 | #define UART_FCR_RX_THR_6 (0x60) | ||
64 | #define UART_FCR_RX_THR_8 (0x80) | ||
65 | #define UART_FCR_RX_THR_10 (0xa0) | ||
66 | #define UART_FCR_RX_THR_12 (0xc0) | ||
67 | #define UART_FCR_RX_THR_14 (0xd0) | ||
68 | #define UART_FCR_TX_THR_MSK (0x1c) | ||
69 | #define UART_FCR_TX_THR_OFST (2) | ||
70 | #define UART_FCR_TX_THR_0 (0x00) | ||
71 | #define UART_FCR_TX_THR_2 (0x04) | ||
72 | #define UART_FCR_TX_THR_4 (0x08) | ||
73 | #define UART_FCR_TX_THR_8 (0x0c) | ||
74 | #define UART_FCR_TX_THR_10 (0x10) | ||
75 | #define UART_FCR_TX_THR_12 (0x14) | ||
76 | #define UART_FCR_TX_THR_14 (0x18) | ||
77 | #define UART_FCR_TX_THR_15 (0x1c) | ||
78 | #define UART_FCR_RC_MSK (0x02) | ||
79 | #define UART_FCR_RC_OFST (1) | ||
80 | #define UART_FCR_TC_MSK (0x01) | ||
81 | #define UART_FCR_TC_OFST (0) | ||
82 | |||
83 | #define UART_IES(BASE_ADDR) (UART00_TYPE (BASE_ADDR + 0x18 )) | ||
84 | #define UART_IES_ME_MSK (0x8) | ||
85 | #define UART_IES_ME_OFST (3) | ||
86 | #define UART_IES_TIE_MSK (0x4) | ||
87 | #define UART_IES_TIE_OFST (2) | ||
88 | #define UART_IES_TE_MSK (0x2) | ||
89 | #define UART_IES_TE_OFST (1) | ||
90 | #define UART_IES_RE_MSK (0x1) | ||
91 | #define UART_IES_RE_OFST (0) | ||
92 | |||
93 | #define UART_IEC(BASE_ADDR) (UART00_TYPE (BASE_ADDR + 0x1c )) | ||
94 | #define UART_IEC_ME_MSK (0x8) | ||
95 | #define UART_IEC_ME_OFST (3) | ||
96 | #define UART_IEC_TIE_MSK (0x4) | ||
97 | #define UART_IEC_TIE_OFST (2) | ||
98 | #define UART_IEC_TE_MSK (0x2) | ||
99 | #define UART_IEC_TE_OFST (1) | ||
100 | #define UART_IEC_RE_MSK (0x1) | ||
101 | #define UART_IEC_RE_OFST (0) | ||
102 | |||
103 | #define UART_ISR(BASE_ADDR) (UART00_TYPE (BASE_ADDR + 0x20 )) | ||
104 | #define UART_ISR_MI_MSK (0x8) | ||
105 | #define UART_ISR_MI_OFST (3) | ||
106 | #define UART_ISR_TII_MSK (0x4) | ||
107 | #define UART_ISR_TII_OFST (2) | ||
108 | #define UART_ISR_TI_MSK (0x2) | ||
109 | #define UART_ISR_TI_OFST (1) | ||
110 | #define UART_ISR_RI_MSK (0x1) | ||
111 | #define UART_ISR_RI_OFST (0) | ||
112 | |||
113 | #define UART_IID(BASE_ADDR) (UART00_TYPE (BASE_ADDR + 0x24 )) | ||
114 | #define UART_IID_IID_MSK (0x7) | ||
115 | #define UART_IID_IID_OFST (0) | ||
116 | |||
117 | #define UART_MC(BASE_ADDR) (UART00_TYPE (BASE_ADDR + 0x28 )) | ||
118 | #define UART_MC_OE_MSK (0x40) | ||
119 | #define UART_MC_OE_OFST (6) | ||
120 | #define UART_MC_SP_MSK (0x20) | ||
121 | #define UART_MC_SP_OFST (5) | ||
122 | #define UART_MC_EP_MSK (0x10) | ||
123 | #define UART_MC_EP_OFST (4) | ||
124 | #define UART_MC_PE_MSK (0x08) | ||
125 | #define UART_MC_PE_OFST (3) | ||
126 | #define UART_MC_ST_MSK (0x04) | ||
127 | #define UART_MC_ST_ONE (0x0) | ||
128 | #define UART_MC_ST_TWO (0x04) | ||
129 | #define UART_MC_ST_OFST (2) | ||
130 | #define UART_MC_CLS_MSK (0x03) | ||
131 | #define UART_MC_CLS_OFST (0) | ||
132 | #define UART_MC_CLS_CHARLEN_5 (0) | ||
133 | #define UART_MC_CLS_CHARLEN_6 (1) | ||
134 | #define UART_MC_CLS_CHARLEN_7 (2) | ||
135 | #define UART_MC_CLS_CHARLEN_8 (3) | ||
136 | |||
137 | #define UART_MCR(BASE_ADDR) (UART00_TYPE (BASE_ADDR + 0x2c )) | ||
138 | #define UART_MCR_AC_MSK (0x80) | ||
139 | #define UART_MCR_AC_OFST (7) | ||
140 | #define UART_MCR_AR_MSK (0x40) | ||
141 | #define UART_MCR_AR_OFST (6) | ||
142 | #define UART_MCR_BR_MSK (0x20) | ||
143 | #define UART_MCR_BR_OFST (5) | ||
144 | #define UART_MCR_LB_MSK (0x10) | ||
145 | #define UART_MCR_LB_OFST (4) | ||
146 | #define UART_MCR_DCD_MSK (0x08) | ||
147 | #define UART_MCR_DCD_OFST (3) | ||
148 | #define UART_MCR_RI_MSK (0x04) | ||
149 | #define UART_MCR_RI_OFST (2) | ||
150 | #define UART_MCR_DTR_MSK (0x02) | ||
151 | #define UART_MCR_DTR_OFST (1) | ||
152 | #define UART_MCR_RTS_MSK (0x01) | ||
153 | #define UART_MCR_RTS_OFST (0) | ||
154 | |||
155 | #define UART_MSR(BASE_ADDR) (UART00_TYPE (BASE_ADDR + 0x30 )) | ||
156 | #define UART_MSR_DCD_MSK (0x80) | ||
157 | #define UART_MSR_DCD_OFST (7) | ||
158 | #define UART_MSR_RI_MSK (0x40) | ||
159 | #define UART_MSR_RI_OFST (6) | ||
160 | #define UART_MSR_DSR_MSK (0x20) | ||
161 | #define UART_MSR_DSR_OFST (5) | ||
162 | #define UART_MSR_CTS_MSK (0x10) | ||
163 | #define UART_MSR_CTS_OFST (4) | ||
164 | #define UART_MSR_DDCD_MSK (0x08) | ||
165 | #define UART_MSR_DDCD_OFST (3) | ||
166 | #define UART_MSR_TERI_MSK (0x04) | ||
167 | #define UART_MSR_TERI_OFST (2) | ||
168 | #define UART_MSR_DDSR_MSK (0x02) | ||
169 | #define UART_MSR_DDSR_OFST (1) | ||
170 | #define UART_MSR_DCTS_MSK (0x01) | ||
171 | #define UART_MSR_DCTS_OFST (0) | ||
172 | |||
173 | #define UART_DIV_LO(BASE_ADDR) (UART00_TYPE (BASE_ADDR + 0x34 )) | ||
174 | #define UART_DIV_LO_DIV_MSK (0xff) | ||
175 | #define UART_DIV_LO_DIV_OFST (0) | ||
176 | |||
177 | #define UART_DIV_HI(BASE_ADDR) (UART00_TYPE (BASE_ADDR + 0x38 )) | ||
178 | #define UART_DIV_HI_DIV_MSK (0xff) | ||
179 | #define UART_DIV_HI_DIV_OFST (0) | ||
180 | |||
181 | #endif /* __UART00_H */ | ||
diff --git a/include/asm-arm/arch-epxa10db/uncompress.h b/include/asm-arm/arch-epxa10db/uncompress.h new file mode 100644 index 000000000000..d33ad6a93749 --- /dev/null +++ b/include/asm-arm/arch-epxa10db/uncompress.h | |||
@@ -0,0 +1,54 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-epxa10db/uncompress.h | ||
3 | * | ||
4 | * Copyright (C) 1999 ARM Limited | ||
5 | * Copyright (C) 2001 Altera Corporation | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License as published by | ||
9 | * the Free Software Foundation; either version 2 of the License, or | ||
10 | * (at your option) any later version. | ||
11 | * | ||
12 | * This program is distributed in the hope that it will be useful, | ||
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
15 | * GNU General Public License for more details. | ||
16 | * | ||
17 | * You should have received a copy of the GNU General Public License | ||
18 | * along with this program; if not, write to the Free Software | ||
19 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
20 | */ | ||
21 | #include "asm/arch/platform.h" | ||
22 | #include "asm/arch/hardware.h" | ||
23 | #define UART00_TYPE (volatile unsigned int*) | ||
24 | #include "asm/arch/uart00.h" | ||
25 | |||
26 | /* | ||
27 | * This does not append a newline | ||
28 | */ | ||
29 | static void putstr(const char *s) | ||
30 | { | ||
31 | while (*s) { | ||
32 | while ((*UART_TSR(EXC_UART00_BASE) & | ||
33 | UART_TSR_TX_LEVEL_MSK)==15) | ||
34 | barrier(); | ||
35 | |||
36 | *UART_TD(EXC_UART00_BASE) = *s; | ||
37 | |||
38 | if (*s == '\n') { | ||
39 | while ((*UART_TSR(EXC_UART00_BASE) & | ||
40 | UART_TSR_TX_LEVEL_MSK)==15) | ||
41 | barrier(); | ||
42 | |||
43 | *UART_TD(EXC_UART00_BASE) = '\r'; | ||
44 | } | ||
45 | s++; | ||
46 | } | ||
47 | } | ||
48 | |||
49 | /* | ||
50 | * nothing to do | ||
51 | */ | ||
52 | #define arch_decomp_setup() | ||
53 | |||
54 | #define arch_decomp_wdog() | ||
diff --git a/include/asm-arm/arch-epxa10db/vmalloc.h b/include/asm-arm/arch-epxa10db/vmalloc.h new file mode 100644 index 000000000000..d31ef8584760 --- /dev/null +++ b/include/asm-arm/arch-epxa10db/vmalloc.h | |||
@@ -0,0 +1,31 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-epxa10db/vmalloc.h | ||
3 | * | ||
4 | * Copyright (C) 2000 Russell King. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | * GNU General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License | ||
17 | * along with this program; if not, write to the Free Software | ||
18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
19 | */ | ||
20 | |||
21 | /* | ||
22 | * Just any arbitrary offset to the start of the vmalloc VM area: the | ||
23 | * current 8MB value just means that there will be a 8MB "hole" after the | ||
24 | * physical memory until the kernel virtual memory starts. That means that | ||
25 | * any out-of-bounds memory accesses will hopefully be caught. | ||
26 | * The vmalloc() routines leaves a hole of 4kB between each vmalloced | ||
27 | * area for the same reason. ;) | ||
28 | */ | ||
29 | #define VMALLOC_OFFSET (8*1024*1024) | ||
30 | #define VMALLOC_START (((unsigned long)high_memory + VMALLOC_OFFSET) & ~(VMALLOC_OFFSET-1)) | ||
31 | #define VMALLOC_END (PAGE_OFFSET + 0x10000000) | ||
diff --git a/include/asm-arm/arch-h720x/boards.h b/include/asm-arm/arch-h720x/boards.h new file mode 100644 index 000000000000..8021f81f0742 --- /dev/null +++ b/include/asm-arm/arch-h720x/boards.h | |||
@@ -0,0 +1,53 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-h720x/boards.h | ||
3 | * | ||
4 | * Copyright (C) 2003 Thomas Gleixner <tglx@linutronix.de> | ||
5 | * (C) 2003 Robert Schwebel <r.schwebel@pengutronix.de> | ||
6 | * | ||
7 | * This file contains the board specific defines for various devices | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or modify | ||
10 | * it under the terms of the GNU General Public License version 2 as | ||
11 | * published by the Free Software Foundation. | ||
12 | */ | ||
13 | |||
14 | #ifndef __ASM_ARCH_HARDWARE_INCMACH_H | ||
15 | #error Do not include this file directly. Include asm/hardware.h instead ! | ||
16 | #endif | ||
17 | |||
18 | /* Hynix H7202 developer board specific device defines */ | ||
19 | #ifdef CONFIG_ARCH_H7202 | ||
20 | |||
21 | /* FLASH */ | ||
22 | #define FLASH_VIRT 0xd0000000 | ||
23 | #define FLASH_PHYS 0x00000000 | ||
24 | #define FLASH_SIZE 0x02000000 | ||
25 | |||
26 | /* onboard LAN controller */ | ||
27 | # define ETH0_PHYS 0x08000000 | ||
28 | |||
29 | /* Touch screen defines */ | ||
30 | /* GPIO Port */ | ||
31 | #define PEN_GPIO GPIO_B_VIRT | ||
32 | /* Bitmask for pen down interrupt */ | ||
33 | #define PEN_INT_BIT (1<<7) | ||
34 | /* Bitmask for pen up interrupt */ | ||
35 | #define PEN_ENA_BIT (1<<6) | ||
36 | /* pen up interrupt */ | ||
37 | #define IRQ_PEN IRQ_MUX_GPIOB(7) | ||
38 | |||
39 | #endif | ||
40 | |||
41 | /* Hynix H7201 developer board specific device defines */ | ||
42 | #if defined (CONFIG_ARCH_H7201) | ||
43 | /* ROM DISK SPACE */ | ||
44 | #define ROM_DISK_BASE 0xc1800000 | ||
45 | #define ROM_DISK_START 0x41800000 | ||
46 | #define ROM_DISK_SIZE 0x00700000 | ||
47 | |||
48 | /* SRAM DISK SPACE */ | ||
49 | #define SRAM_DISK_BASE 0xf1000000 | ||
50 | #define SRAM_DISK_START 0x04000000 | ||
51 | #define SRAM_DISK_SIZE 0x00400000 | ||
52 | #endif | ||
53 | |||
diff --git a/include/asm-arm/arch-h720x/debug-macro.S b/include/asm-arm/arch-h720x/debug-macro.S new file mode 100644 index 000000000000..82822d362733 --- /dev/null +++ b/include/asm-arm/arch-h720x/debug-macro.S | |||
@@ -0,0 +1,40 @@ | |||
1 | /* linux/include/asm-arm/arch-h720x/debug-macro.S | ||
2 | * | ||
3 | * Debugging macro include header | ||
4 | * | ||
5 | * Copyright (C) 1994-1999 Russell King | ||
6 | * Moved from linux/arch/arm/kernel/debug.S by Ben Dooks | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | * | ||
12 | */ | ||
13 | |||
14 | .equ io_virt, IO_BASE | ||
15 | .equ io_phys, IO_START | ||
16 | |||
17 | .macro addruart,rx | ||
18 | mrc p15, 0, \rx, c1, c0 | ||
19 | tst \rx, #1 @ MMU enabled? | ||
20 | moveq \rx, #io_phys @ physical base address | ||
21 | movne \rx, #io_virt @ virtual address | ||
22 | add \rx, \rx, #0x00020000 @ UART1 | ||
23 | .endm | ||
24 | |||
25 | .macro senduart,rd,rx | ||
26 | str \rd, [\rx, #0x0] @ UARTDR | ||
27 | |||
28 | .endm | ||
29 | |||
30 | .macro waituart,rd,rx | ||
31 | 1001: ldr \rd, [\rx, #0x18] @ UARTFLG | ||
32 | tst \rd, #1 << 5 @ UARTFLGUTXFF - 1 when full | ||
33 | bne 1001b | ||
34 | .endm | ||
35 | |||
36 | .macro busyuart,rd,rx | ||
37 | 1001: ldr \rd, [\rx, #0x18] @ UARTFLG | ||
38 | tst \rd, #1 << 3 @ UARTFLGUBUSY - 1 when busy | ||
39 | bne 1001b | ||
40 | .endm | ||
diff --git a/include/asm-arm/arch-h720x/dma.h b/include/asm-arm/arch-h720x/dma.h new file mode 100644 index 000000000000..bfc6636679f7 --- /dev/null +++ b/include/asm-arm/arch-h720x/dma.h | |||
@@ -0,0 +1,26 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-h720x/dma.h | ||
3 | * | ||
4 | * Architecture DMA routes | ||
5 | * | ||
6 | * Copyright (C) 1997.1998 Russell King | ||
7 | */ | ||
8 | #ifndef __ASM_ARCH_DMA_H | ||
9 | #define __ASM_ARCH_DMA_H | ||
10 | |||
11 | /* | ||
12 | * This is the maximum DMA address that can be DMAd to. | ||
13 | * There should not be more than (0xd0000000 - 0xc0000000) | ||
14 | * bytes of RAM. | ||
15 | */ | ||
16 | #define MAX_DMA_ADDRESS 0xd0000000 | ||
17 | |||
18 | #if defined (CONFIG_CPU_H7201) | ||
19 | #define MAX_DMA_CHANNELS 3 | ||
20 | #elif defined (CONFIG_CPU_H7202) | ||
21 | #define MAX_DMA_CHANNELS 4 | ||
22 | #else | ||
23 | #error processor definition missmatch | ||
24 | #endif | ||
25 | |||
26 | #endif /* __ASM_ARCH_DMA_H */ | ||
diff --git a/include/asm-arm/arch-h720x/entry-macro.S b/include/asm-arm/arch-h720x/entry-macro.S new file mode 100644 index 000000000000..8f165648e2af --- /dev/null +++ b/include/asm-arm/arch-h720x/entry-macro.S | |||
@@ -0,0 +1,60 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-h720x/entry-macro.S | ||
3 | * | ||
4 | * Low-level IRQ helper macros for Hynix HMS720x based platforms | ||
5 | * | ||
6 | * This file is licensed under the terms of the GNU General Public | ||
7 | * License version 2. This program is licensed "as is" without any | ||
8 | * warranty of any kind, whether express or implied. | ||
9 | */ | ||
10 | |||
11 | .macro disable_fiq | ||
12 | .endm | ||
13 | |||
14 | .macro get_irqnr_and_base, irqnr, irqstat, base, tmp | ||
15 | #if defined (CONFIG_CPU_H7201) || defined (CONFIG_CPU_H7202) | ||
16 | @ we could use the id register on H7202, but this is not | ||
17 | @ properly updated when we come back from asm_do_irq | ||
18 | @ without a previous return from interrupt | ||
19 | @ (see loops below in irq_svc, irq_usr) | ||
20 | @ We see unmasked pending ints only, as the masked pending ints | ||
21 | @ are not visible here | ||
22 | |||
23 | mov \base, #0xf0000000 @ base register | ||
24 | orr \base, \base, #0x24000 @ irqbase | ||
25 | ldr \irqstat, [\base, #0x04] @ get interrupt status | ||
26 | #if defined (CONFIG_CPU_H7201) | ||
27 | ldr \tmp, =0x001fffff | ||
28 | #else | ||
29 | mvn \tmp, #0xc0000000 | ||
30 | #endif | ||
31 | and \irqstat, \irqstat, \tmp @ mask out unused ints | ||
32 | mov \irqnr, #0 | ||
33 | |||
34 | mov \tmp, #0xff00 | ||
35 | orr \tmp, \tmp, #0xff | ||
36 | tst \irqstat, \tmp | ||
37 | addeq \irqnr, \irqnr, #16 | ||
38 | moveq \irqstat, \irqstat, lsr #16 | ||
39 | tst \irqstat, #255 | ||
40 | addeq \irqnr, \irqnr, #8 | ||
41 | moveq \irqstat, \irqstat, lsr #8 | ||
42 | tst \irqstat, #15 | ||
43 | addeq \irqnr, \irqnr, #4 | ||
44 | moveq \irqstat, \irqstat, lsr #4 | ||
45 | tst \irqstat, #3 | ||
46 | addeq \irqnr, \irqnr, #2 | ||
47 | moveq \irqstat, \irqstat, lsr #2 | ||
48 | tst \irqstat, #1 | ||
49 | addeq \irqnr, \irqnr, #1 | ||
50 | moveq \irqstat, \irqstat, lsr #1 | ||
51 | tst \irqstat, #1 @ bit 0 should be set | ||
52 | .endm | ||
53 | |||
54 | .macro irq_prio_table | ||
55 | .endm | ||
56 | |||
57 | #else | ||
58 | #error hynix processor selection missmatch | ||
59 | #endif | ||
60 | |||
diff --git a/include/asm-arm/arch-h720x/h7201-regs.h b/include/asm-arm/arch-h720x/h7201-regs.h new file mode 100644 index 000000000000..49d4f6bd3080 --- /dev/null +++ b/include/asm-arm/arch-h720x/h7201-regs.h | |||
@@ -0,0 +1,67 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-h720x/h7201-regs.h | ||
3 | * | ||
4 | * Copyright (C) 2000 Jungjun Kim, Hynix Semiconductor Inc. | ||
5 | * (C) 2003 Thomas Gleixner <tglx@linutronix.de> | ||
6 | * (C) 2003 Robert Schwebel <r.schwebel@pengutronix.de> | ||
7 | * (C) 2004 Sascha Hauer <s.hauer@pengutronix.de> | ||
8 | * | ||
9 | * This file contains the hardware definitions of the h720x processors | ||
10 | * | ||
11 | * This program is free software; you can redistribute it and/or modify | ||
12 | * it under the terms of the GNU General Public License version 2 as | ||
13 | * published by the Free Software Foundation. | ||
14 | * | ||
15 | * Do not add implementations specific defines here. This files contains | ||
16 | * only defines of the onchip peripherals. Add those defines to boards.h, | ||
17 | * which is included by this file. | ||
18 | */ | ||
19 | |||
20 | #define SERIAL2_VIRT (IO_VIRT + 0x50100) | ||
21 | #define SERIAL3_VIRT (IO_VIRT + 0x50200) | ||
22 | |||
23 | /* | ||
24 | * PCMCIA | ||
25 | */ | ||
26 | #define PCMCIA0_ATT_BASE 0xe5000000 | ||
27 | #define PCMCIA0_ATT_SIZE 0x00200000 | ||
28 | #define PCMCIA0_ATT_START 0x20000000 | ||
29 | #define PCMCIA0_MEM_BASE 0xe5200000 | ||
30 | #define PCMCIA0_MEM_SIZE 0x00200000 | ||
31 | #define PCMCIA0_MEM_START 0x24000000 | ||
32 | #define PCMCIA0_IO_BASE 0xe5400000 | ||
33 | #define PCMCIA0_IO_SIZE 0x00200000 | ||
34 | #define PCMCIA0_IO_START 0x28000000 | ||
35 | |||
36 | #define PCMCIA1_ATT_BASE 0xe5600000 | ||
37 | #define PCMCIA1_ATT_SIZE 0x00200000 | ||
38 | #define PCMCIA1_ATT_START 0x30000000 | ||
39 | #define PCMCIA1_MEM_BASE 0xe5800000 | ||
40 | #define PCMCIA1_MEM_SIZE 0x00200000 | ||
41 | #define PCMCIA1_MEM_START 0x34000000 | ||
42 | #define PCMCIA1_IO_BASE 0xe5a00000 | ||
43 | #define PCMCIA1_IO_SIZE 0x00200000 | ||
44 | #define PCMCIA1_IO_START 0x38000000 | ||
45 | |||
46 | #define PRIME3C_BASE 0xf0050000 | ||
47 | #define PRIME3C_SIZE 0x00001000 | ||
48 | #define PRIME3C_START 0x10000000 | ||
49 | |||
50 | /* VGA Controller */ | ||
51 | #define VGA_RAMBASE 0x50 | ||
52 | #define VGA_TIMING0 0x60 | ||
53 | #define VGA_TIMING1 0x64 | ||
54 | #define VGA_TIMING2 0x68 | ||
55 | #define VGA_TIMING3 0x6c | ||
56 | |||
57 | #define LCD_CTRL_VGA_ENABLE 0x00000100 | ||
58 | #define LCD_CTRL_VGA_BPP_MASK 0x00000600 | ||
59 | #define LCD_CTRL_VGA_4BPP 0x00000000 | ||
60 | #define LCD_CTRL_VGA_8BPP 0x00000200 | ||
61 | #define LCD_CTRL_VGA_16BPP 0x00000300 | ||
62 | #define LCD_CTRL_SHARE_DMA 0x00000800 | ||
63 | #define LCD_CTRL_VDE 0x00100000 | ||
64 | #define LCD_CTRL_LPE 0x00400000 /* LCD Power enable */ | ||
65 | #define LCD_CTRL_BLE 0x00800000 /* LCD backlight enable */ | ||
66 | |||
67 | #define VGA_PALETTE_BASE (IO_VIRT + 0x10800) | ||
diff --git a/include/asm-arm/arch-h720x/h7202-regs.h b/include/asm-arm/arch-h720x/h7202-regs.h new file mode 100644 index 000000000000..43d8ba8a6013 --- /dev/null +++ b/include/asm-arm/arch-h720x/h7202-regs.h | |||
@@ -0,0 +1,155 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-h720x/h7202-regs.h | ||
3 | * | ||
4 | * Copyright (C) 2000 Jungjun Kim, Hynix Semiconductor Inc. | ||
5 | * (C) 2003 Thomas Gleixner <tglx@linutronix.de> | ||
6 | * (C) 2003 Robert Schwebel <r.schwebel@pengutronix.de> | ||
7 | * (C) 2004 Sascha Hauer <s.hauer@pengutronix.de> | ||
8 | * | ||
9 | * This file contains the hardware definitions of the h720x processors | ||
10 | * | ||
11 | * This program is free software; you can redistribute it and/or modify | ||
12 | * it under the terms of the GNU General Public License version 2 as | ||
13 | * published by the Free Software Foundation. | ||
14 | * | ||
15 | * Do not add implementations specific defines here. This files contains | ||
16 | * only defines of the onchip peripherals. Add those defines to boards.h, | ||
17 | * which is included by this file. | ||
18 | */ | ||
19 | |||
20 | #define SERIAL2_OFS 0x2d000 | ||
21 | #define SERIAL2_BASE (IO_PHYS + SERIAL2_OFS) | ||
22 | #define SERIAL2_VIRT (IO_VIRT + SERIAL2_OFS) | ||
23 | #define SERIAL3_OFS 0x2e000 | ||
24 | #define SERIAL3_BASE (IO_PHYS + SERIAL3_OFS) | ||
25 | #define SERIAL3_VIRT (IO_VIRT + SERIAL3_OFS) | ||
26 | |||
27 | /* Matrix Keyboard Controller */ | ||
28 | #define KBD_VIRT (IO_VIRT + 0x22000) | ||
29 | #define KBD_KBCR 0x00 | ||
30 | #define KBD_KBSC 0x04 | ||
31 | #define KBD_KBTR 0x08 | ||
32 | #define KBD_KBVR0 0x0C | ||
33 | #define KBD_KBVR1 0x10 | ||
34 | #define KBD_KBSR 0x18 | ||
35 | |||
36 | #define KBD_KBCR_SCANENABLE (1 << 7) | ||
37 | #define KBD_KBCR_NPOWERDOWN (1 << 2) | ||
38 | #define KBD_KBCR_CLKSEL_MASK (3) | ||
39 | #define KBD_KBCR_CLKSEL_PCLK2 0x0 | ||
40 | #define KBD_KBCR_CLKSEL_PCLK128 0x1 | ||
41 | #define KBD_KBCR_CLKSEL_PCLK256 0x2 | ||
42 | #define KBD_KBCR_CLKSEL_PCLK512 0x3 | ||
43 | |||
44 | #define KBD_KBSR_INTR (1 << 0) | ||
45 | #define KBD_KBSR_WAKEUP (1 << 1) | ||
46 | |||
47 | /* USB device controller */ | ||
48 | |||
49 | #define USBD_BASE (IO_VIRT + 0x12000) | ||
50 | #define USBD_LENGTH 0x3C | ||
51 | |||
52 | #define USBD_GCTRL 0x00 | ||
53 | #define USBD_EPCTRL 0x04 | ||
54 | #define USBD_INTMASK 0x08 | ||
55 | #define USBD_INTSTAT 0x0C | ||
56 | #define USBD_PWR 0x10 | ||
57 | #define USBD_DMARXTX 0x14 | ||
58 | #define USBD_DEVID 0x18 | ||
59 | #define USBD_DEVCLASS 0x1C | ||
60 | #define USBD_INTCLASS 0x20 | ||
61 | #define USBD_SETUP0 0x24 | ||
62 | #define USBD_SETUP1 0x28 | ||
63 | #define USBD_ENDP0RD 0x2C | ||
64 | #define USBD_ENDP0WT 0x30 | ||
65 | #define USBD_ENDP1RD 0x34 | ||
66 | #define USBD_ENDP2WT 0x38 | ||
67 | |||
68 | /* PS/2 port */ | ||
69 | #define PSDATA 0x00 | ||
70 | #define PSSTAT 0x04 | ||
71 | #define PSSTAT_TXEMPTY (1<<0) | ||
72 | #define PSSTAT_TXBUSY (1<<1) | ||
73 | #define PSSTAT_RXFULL (1<<2) | ||
74 | #define PSSTAT_RXBUSY (1<<3) | ||
75 | #define PSSTAT_CLKIN (1<<4) | ||
76 | #define PSSTAT_DATAIN (1<<5) | ||
77 | #define PSSTAT_PARITY (1<<6) | ||
78 | |||
79 | #define PSCONF 0x08 | ||
80 | #define PSCONF_ENABLE (1<<0) | ||
81 | #define PSCONF_TXINTEN (1<<2) | ||
82 | #define PSCONF_RXINTEN (1<<3) | ||
83 | #define PSCONF_FORCECLKLOW (1<<4) | ||
84 | #define PSCONF_FORCEDATLOW (1<<5) | ||
85 | #define PSCONF_LCE (1<<6) | ||
86 | |||
87 | #define PSINTR 0x0C | ||
88 | #define PSINTR_TXINT (1<<0) | ||
89 | #define PSINTR_RXINT (1<<1) | ||
90 | #define PSINTR_PAR (1<<2) | ||
91 | #define PSINTR_RXTO (1<<3) | ||
92 | #define PSINTR_TXTO (1<<4) | ||
93 | |||
94 | #define PSTDLO 0x10 /* clk low before start transmission */ | ||
95 | #define PSTPRI 0x14 /* PRI clock */ | ||
96 | #define PSTXMT 0x18 /* maximum transmission time */ | ||
97 | #define PSTREC 0x20 /* maximum receive time */ | ||
98 | #define PSPWDN 0x3c | ||
99 | |||
100 | /* ADC converter */ | ||
101 | #define ADC_BASE (IO_VIRT + 0x29000) | ||
102 | #define ADC_CR 0x00 | ||
103 | #define ADC_TSCTRL 0x04 | ||
104 | #define ADC_BT_CTRL 0x08 | ||
105 | #define ADC_MC_CTRL 0x0C | ||
106 | #define ADC_STATUS 0x10 | ||
107 | |||
108 | /* ADC control register bits */ | ||
109 | #define ADC_CR_PW_CTRL 0x80 | ||
110 | #define ADC_CR_DIRECTC 0x04 | ||
111 | #define ADC_CR_CONTIME_NO 0x00 | ||
112 | #define ADC_CR_CONTIME_2 0x04 | ||
113 | #define ADC_CR_CONTIME_4 0x08 | ||
114 | #define ADC_CR_CONTIME_ADE 0x0c | ||
115 | #define ADC_CR_LONGCALTIME 0x01 | ||
116 | |||
117 | /* ADC touch panel register bits */ | ||
118 | #define ADC_TSCTRL_ENABLE 0x80 | ||
119 | #define ADC_TSCTRL_INTR 0x40 | ||
120 | #define ADC_TSCTRL_SWBYPSS 0x20 | ||
121 | #define ADC_TSCTRL_SWINVT 0x10 | ||
122 | #define ADC_TSCTRL_S400 0x03 | ||
123 | #define ADC_TSCTRL_S200 0x02 | ||
124 | #define ADC_TSCTRL_S100 0x01 | ||
125 | #define ADC_TSCTRL_S50 0x00 | ||
126 | |||
127 | /* ADC Interrupt Status Register bits */ | ||
128 | #define ADC_STATUS_TS_BIT 0x80 | ||
129 | #define ADC_STATUS_MBT_BIT 0x40 | ||
130 | #define ADC_STATUS_BBT_BIT 0x20 | ||
131 | #define ADC_STATUS_MIC_BIT 0x10 | ||
132 | |||
133 | /* Touch data registers */ | ||
134 | #define ADC_TS_X0X1 0x30 | ||
135 | #define ADC_TS_X2X3 0x34 | ||
136 | #define ADC_TS_Y0Y1 0x38 | ||
137 | #define ADC_TS_Y2Y3 0x3c | ||
138 | #define ADC_TS_X4X5 0x40 | ||
139 | #define ADC_TS_X6X7 0x44 | ||
140 | #define ADC_TS_Y4Y5 0x48 | ||
141 | #define ADC_TS_Y6Y7 0x50 | ||
142 | |||
143 | /* battery data */ | ||
144 | #define ADC_MB_DATA 0x54 | ||
145 | #define ADC_BB_DATA 0x58 | ||
146 | |||
147 | /* Sound data register */ | ||
148 | #define ADC_SD_DAT0 0x60 | ||
149 | #define ADC_SD_DAT1 0x64 | ||
150 | #define ADC_SD_DAT2 0x68 | ||
151 | #define ADC_SD_DAT3 0x6c | ||
152 | #define ADC_SD_DAT4 0x70 | ||
153 | #define ADC_SD_DAT5 0x74 | ||
154 | #define ADC_SD_DAT6 0x78 | ||
155 | #define ADC_SD_DAT7 0x7c | ||
diff --git a/include/asm-arm/arch-h720x/hardware.h b/include/asm-arm/arch-h720x/hardware.h new file mode 100644 index 000000000000..dfb778906a9f --- /dev/null +++ b/include/asm-arm/arch-h720x/hardware.h | |||
@@ -0,0 +1,192 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-h720x/hardware.h | ||
3 | * | ||
4 | * Copyright (C) 2000 Jungjun Kim, Hynix Semiconductor Inc. | ||
5 | * (C) 2003 Thomas Gleixner <tglx@linutronix.de> | ||
6 | * (C) 2003 Robert Schwebel <r.schwebel@pengutronix.de> | ||
7 | * | ||
8 | * This file contains the hardware definitions of the h720x processors | ||
9 | * | ||
10 | * This program is free software; you can redistribute it and/or modify | ||
11 | * it under the terms of the GNU General Public License version 2 as | ||
12 | * published by the Free Software Foundation. | ||
13 | * | ||
14 | * Do not add implementations specific defines here. This files contains | ||
15 | * only defines of the onchip peripherals. Add those defines to boards.h, | ||
16 | * which is included by this file. | ||
17 | */ | ||
18 | |||
19 | #ifndef __ASM_ARCH_HARDWARE_H | ||
20 | #define __ASM_ARCH_HARDWARE_H | ||
21 | |||
22 | #define IOCLK (3686400L) | ||
23 | |||
24 | /* Onchip peripherals */ | ||
25 | |||
26 | #define IO_VIRT 0xf0000000 /* IO peripherals */ | ||
27 | #define IO_PHYS 0x80000000 | ||
28 | #define IO_SIZE 0x00050000 | ||
29 | |||
30 | #ifdef CONFIG_CPU_H7202 | ||
31 | #include "h7202-regs.h" | ||
32 | #elif defined CONFIG_CPU_H7201 | ||
33 | #include "h7201-regs.h" | ||
34 | #else | ||
35 | #error machine definition mismatch | ||
36 | #endif | ||
37 | |||
38 | /* Macro to access the CPU IO */ | ||
39 | #define CPU_IO(x) (*(volatile u32*)(x)) | ||
40 | |||
41 | /* Macro to access general purpose regs (base, offset) */ | ||
42 | #define CPU_REG(x,y) CPU_IO(x+y) | ||
43 | |||
44 | /* Macro to access irq related regs */ | ||
45 | #define IRQ_REG(x) CPU_REG(IRQC_VIRT,x) | ||
46 | |||
47 | /* CPU registers */ | ||
48 | /* general purpose I/O */ | ||
49 | #define GPIO_VIRT(x) (IO_VIRT + 0x23000 + ((x)<<5)) | ||
50 | #define GPIO_A_VIRT (GPIO_VIRT(0)) | ||
51 | #define GPIO_B_VIRT (GPIO_VIRT(1)) | ||
52 | #define GPIO_C_VIRT (GPIO_VIRT(2)) | ||
53 | #define GPIO_D_VIRT (GPIO_VIRT(3)) | ||
54 | #define GPIO_E_VIRT (GPIO_VIRT(4)) | ||
55 | #define GPIO_AMULSEL (GPIO_VIRT(0) + 0xA4) | ||
56 | |||
57 | #define AMULSEL_USIN2 (1<<5) | ||
58 | #define AMULSEL_USOUT2 (1<<6) | ||
59 | #define AMULSEL_USIN3 (1<<13) | ||
60 | #define AMULSEL_USOUT3 (1<<14) | ||
61 | #define AMULSEL_IRDIN (1<<15) | ||
62 | #define AMULSEL_IRDOUT (1<<7) | ||
63 | |||
64 | /* Register offsets general purpose I/O */ | ||
65 | #define GPIO_DATA 0x00 | ||
66 | #define GPIO_DIR 0x04 | ||
67 | #define GPIO_MASK 0x08 | ||
68 | #define GPIO_STAT 0x0C | ||
69 | #define GPIO_EDGE 0x10 | ||
70 | #define GPIO_CLR 0x14 | ||
71 | #define GPIO_POL 0x18 | ||
72 | #define GPIO_EN 0x1C | ||
73 | |||
74 | /*interrupt controller */ | ||
75 | #define IRQC_VIRT (IO_VIRT + 0x24000) | ||
76 | /* register offset interrupt controller */ | ||
77 | #define IRQC_IER 0x00 | ||
78 | #define IRQC_ISR 0x04 | ||
79 | |||
80 | /* timer unit */ | ||
81 | #define TIMER_VIRT (IO_VIRT + 0x25000) | ||
82 | /* Register offsets timer unit */ | ||
83 | #define TM0_PERIOD 0x00 | ||
84 | #define TM0_COUNT 0x08 | ||
85 | #define TM0_CTRL 0x10 | ||
86 | #define TM1_PERIOD 0x20 | ||
87 | #define TM1_COUNT 0x28 | ||
88 | #define TM1_CTRL 0x30 | ||
89 | #define TM2_PERIOD 0x40 | ||
90 | #define TM2_COUNT 0x48 | ||
91 | #define TM2_CTRL 0x50 | ||
92 | #define TIMER_TOPCTRL 0x60 | ||
93 | #define TIMER_TOPSTAT 0x64 | ||
94 | #define T64_COUNTL 0x80 | ||
95 | #define T64_COUNTH 0x84 | ||
96 | #define T64_CTRL 0x88 | ||
97 | #define T64_BASEL 0x94 | ||
98 | #define T64_BASEH 0x98 | ||
99 | /* Bitmaks timer unit TOPSTAT reg */ | ||
100 | #define TSTAT_T0INT 0x1 | ||
101 | #define TSTAT_T1INT 0x2 | ||
102 | #define TSTAT_T2INT 0x4 | ||
103 | #define TSTAT_T3INT 0x8 | ||
104 | /* Bit description of TMx_CTRL register */ | ||
105 | #define TM_START 0x1 | ||
106 | #define TM_REPEAT 0x2 | ||
107 | #define TM_RESET 0x4 | ||
108 | /* Bit description of TIMER_CTRL register */ | ||
109 | #define ENABLE_TM0_INTR 0x1 | ||
110 | #define ENABLE_TM1_INTR 0x2 | ||
111 | #define ENABLE_TM2_INTR 0x4 | ||
112 | #define TIMER_ENABLE_BIT 0x8 | ||
113 | #define ENABLE_TIMER64 0x10 | ||
114 | #define ENABLE_TIMER64_INT 0x20 | ||
115 | |||
116 | /* PMU & PLL */ | ||
117 | #define PMU_BASE (IO_VIRT + 0x1000) | ||
118 | #define PMU_MODE 0x00 | ||
119 | #define PMU_STAT 0x20 | ||
120 | #define PMU_PLL_CTRL 0x28 | ||
121 | |||
122 | /* PMU Mode bits */ | ||
123 | #define PMU_MODE_SLOW 0x00 | ||
124 | #define PMU_MODE_RUN 0x01 | ||
125 | #define PMU_MODE_IDLE 0x02 | ||
126 | #define PMU_MODE_SLEEP 0x03 | ||
127 | #define PMU_MODE_INIT 0x04 | ||
128 | #define PMU_MODE_DEEPSLEEP 0x07 | ||
129 | #define PMU_MODE_WAKEUP 0x08 | ||
130 | |||
131 | /* PMU ... */ | ||
132 | #define PLL_2_EN 0x8000 | ||
133 | #define PLL_1_EN 0x4000 | ||
134 | #define PLL_3_MUTE 0x0080 | ||
135 | |||
136 | /* Control bits for PMU/ PLL */ | ||
137 | #define PMU_WARMRESET 0x00010000 | ||
138 | #define PLL_CTRL_MASK23 0x000080ff | ||
139 | |||
140 | /* LCD Controller */ | ||
141 | #define LCD_BASE (IO_VIRT + 0x10000) | ||
142 | #define LCD_CTRL 0x00 | ||
143 | #define LCD_STATUS 0x04 | ||
144 | #define LCD_STATUS_M 0x08 | ||
145 | #define LCD_INTERRUPT 0x0C | ||
146 | #define LCD_DBAR 0x10 | ||
147 | #define LCD_DCAR 0x14 | ||
148 | #define LCD_TIMING0 0x20 | ||
149 | #define LCD_TIMING1 0x24 | ||
150 | #define LCD_TIMING2 0x28 | ||
151 | #define LCD_TEST 0x40 | ||
152 | |||
153 | /* LCD Control Bits */ | ||
154 | #define LCD_CTRL_LCD_ENABLE 0x00000001 | ||
155 | /* Bits per pixel */ | ||
156 | #define LCD_CTRL_LCD_BPP_MASK 0x00000006 | ||
157 | #define LCD_CTRL_LCD_4BPP 0x00000000 | ||
158 | #define LCD_CTRL_LCD_8BPP 0x00000002 | ||
159 | #define LCD_CTRL_LCD_16BPP 0x00000004 | ||
160 | #define LCD_CTRL_LCD_BW 0x00000008 | ||
161 | #define LCD_CTRL_LCD_TFT 0x00000010 | ||
162 | #define LCD_CTRL_BGR 0x00001000 | ||
163 | #define LCD_CTRL_LCD_VCOMP 0x00080000 | ||
164 | #define LCD_CTRL_LCD_MONO8 0x00200000 | ||
165 | #define LCD_CTRL_LCD_PWR 0x00400000 | ||
166 | #define LCD_CTRL_LCD_BLE 0x00800000 | ||
167 | #define LCD_CTRL_LDBUSEN 0x01000000 | ||
168 | |||
169 | /* Palette */ | ||
170 | #define LCD_PALETTE_BASE (IO_VIRT + 0x10400) | ||
171 | |||
172 | /* Serial ports */ | ||
173 | #define SERIAL0_OFS 0x20000 | ||
174 | #define SERIAL0_VIRT (IO_VIRT + SERIAL0_OFS) | ||
175 | #define SERIAL0_BASE (IO_PHYS + SERIAL0_OFS) | ||
176 | |||
177 | #define SERIAL1_OFS 0x21000 | ||
178 | #define SERIAL1_VIRT (IO_VIRT + SERIAL1_OFS) | ||
179 | #define SERIAL1_BASE (IO_PHYS + SERIAL1_OFS) | ||
180 | |||
181 | #define SERIAL_ENABLE 0x30 | ||
182 | #define SERIAL_ENABLE_EN (1<<0) | ||
183 | |||
184 | /* General defines to pacify gcc */ | ||
185 | #define PCIO_BASE (0) /* for inb, outb and friends */ | ||
186 | #define PCIO_VIRT PCIO_BASE | ||
187 | |||
188 | #define __ASM_ARCH_HARDWARE_INCMACH_H | ||
189 | #include "boards.h" | ||
190 | #undef __ASM_ARCH_HARDWARE_INCMACH_H | ||
191 | |||
192 | #endif /* __ASM_ARCH_HARDWARE_H */ | ||
diff --git a/include/asm-arm/arch-h720x/io.h b/include/asm-arm/arch-h720x/io.h new file mode 100644 index 000000000000..68814828c9a7 --- /dev/null +++ b/include/asm-arm/arch-h720x/io.h | |||
@@ -0,0 +1,24 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-h720x/io.h | ||
3 | * | ||
4 | * Copyright (C) 2000 Steve Hill (sjhill@cotw.com) | ||
5 | * | ||
6 | * Changelog: | ||
7 | * | ||
8 | * 09-19-2001 JJKIM | ||
9 | * Created from linux/include/asm-arm/arch-l7200/io.h | ||
10 | * | ||
11 | * 03-27-2003 Robert Schwebel <r.schwebel@pengutronix.de>: | ||
12 | * re-unified header files for h720x | ||
13 | */ | ||
14 | #ifndef __ASM_ARM_ARCH_IO_H | ||
15 | #define __ASM_ARM_ARCH_IO_H | ||
16 | |||
17 | #include <asm/arch/hardware.h> | ||
18 | |||
19 | #define IO_SPACE_LIMIT 0xffffffff | ||
20 | |||
21 | #define __io(a) ((void __iomem *)(a)) | ||
22 | #define __mem_pci(a) (a) | ||
23 | |||
24 | #endif | ||
diff --git a/include/asm-arm/arch-h720x/irq.h b/include/asm-arm/arch-h720x/irq.h new file mode 100644 index 000000000000..b3821e957aa4 --- /dev/null +++ b/include/asm-arm/arch-h720x/irq.h | |||
@@ -0,0 +1,14 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-h720x/irq.h | ||
3 | * | ||
4 | * Copyright (C) 2000-2002 Jungjun Kim | ||
5 | * (C) 2003 Robert Schwebel <r.schwebel@pengutronix.de> | ||
6 | * (C) 2003 Thomas Gleixner <tglx@linutronix.de> | ||
7 | */ | ||
8 | |||
9 | #ifndef __ASM_ARCH_IRQ_H | ||
10 | #define __ASM_ARCH_IRQ_H | ||
11 | |||
12 | extern void __init h720x_init_irq (void); | ||
13 | |||
14 | #endif /* __ASM_ARCH_IRQ_H */ | ||
diff --git a/include/asm-arm/arch-h720x/irqs.h b/include/asm-arm/arch-h720x/irqs.h new file mode 100644 index 000000000000..8244413988be --- /dev/null +++ b/include/asm-arm/arch-h720x/irqs.h | |||
@@ -0,0 +1,116 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-h720x/irqs.h | ||
3 | * | ||
4 | * Copyright (C) 2000 Jungjun Kim | ||
5 | * (C) 2003 Robert Schwebel <r.schwebel@pengutronix.de> | ||
6 | * (C) 2003 Thomas Gleixner <tglx@linutronix.de> | ||
7 | * | ||
8 | */ | ||
9 | |||
10 | #ifndef __ASM_ARCH_IRQS_H | ||
11 | #define __ASM_ARCH_IRQS_H | ||
12 | |||
13 | #if defined (CONFIG_CPU_H7201) | ||
14 | |||
15 | #define IRQ_PMU 0 /* 0x000001 */ | ||
16 | #define IRQ_DMA 1 /* 0x000002 */ | ||
17 | #define IRQ_LCD 2 /* 0x000004 */ | ||
18 | #define IRQ_VGA 3 /* 0x000008 */ | ||
19 | #define IRQ_PCMCIA1 4 /* 0x000010 */ | ||
20 | #define IRQ_PCMCIA2 5 /* 0x000020 */ | ||
21 | #define IRQ_AFE 6 /* 0x000040 */ | ||
22 | #define IRQ_AIC 7 /* 0x000080 */ | ||
23 | #define IRQ_KEYBOARD 8 /* 0x000100 */ | ||
24 | #define IRQ_TIMER0 9 /* 0x000200 */ | ||
25 | #define IRQ_RTC 10 /* 0x000400 */ | ||
26 | #define IRQ_SOUND 11 /* 0x000800 */ | ||
27 | #define IRQ_USB 12 /* 0x001000 */ | ||
28 | #define IRQ_IrDA 13 /* 0x002000 */ | ||
29 | #define IRQ_UART0 14 /* 0x004000 */ | ||
30 | #define IRQ_UART1 15 /* 0x008000 */ | ||
31 | #define IRQ_SPI 16 /* 0x010000 */ | ||
32 | #define IRQ_GPIOA 17 /* 0x020000 */ | ||
33 | #define IRQ_GPIOB 18 /* 0x040000 */ | ||
34 | #define IRQ_GPIOC 19 /* 0x080000 */ | ||
35 | #define IRQ_GPIOD 20 /* 0x100000 */ | ||
36 | #define IRQ_CommRX 21 /* 0x200000 */ | ||
37 | #define IRQ_CommTX 22 /* 0x400000 */ | ||
38 | #define IRQ_Soft 23 /* 0x800000 */ | ||
39 | |||
40 | #define NR_GLBL_IRQS 24 | ||
41 | |||
42 | #define IRQ_CHAINED_GPIOA(x) (NR_GLBL_IRQS + x) | ||
43 | #define IRQ_CHAINED_GPIOB(x) (IRQ_CHAINED_GPIOA(32) + x) | ||
44 | #define IRQ_CHAINED_GPIOC(x) (IRQ_CHAINED_GPIOB(32) + x) | ||
45 | #define IRQ_CHAINED_GPIOD(x) (IRQ_CHAINED_GPIOC(32) + x) | ||
46 | #define NR_IRQS IRQ_CHAINED_GPIOD(32) | ||
47 | |||
48 | /* Enable mask for multiplexed interrupts */ | ||
49 | #define IRQ_ENA_MUX (1<<IRQ_GPIOA) | (1<<IRQ_GPIOB) \ | ||
50 | | (1<<IRQ_GPIOC) | (1<<IRQ_GPIOD) | ||
51 | |||
52 | |||
53 | #elif defined (CONFIG_CPU_H7202) | ||
54 | |||
55 | #define IRQ_PMU 0 /* 0x00000001 */ | ||
56 | #define IRQ_DMA 1 /* 0x00000002 */ | ||
57 | #define IRQ_LCD 2 /* 0x00000004 */ | ||
58 | #define IRQ_SOUND 3 /* 0x00000008 */ | ||
59 | #define IRQ_I2S 4 /* 0x00000010 */ | ||
60 | #define IRQ_USB 5 /* 0x00000020 */ | ||
61 | #define IRQ_MMC 6 /* 0x00000040 */ | ||
62 | #define IRQ_RTC 7 /* 0x00000080 */ | ||
63 | #define IRQ_UART0 8 /* 0x00000100 */ | ||
64 | #define IRQ_UART1 9 /* 0x00000200 */ | ||
65 | #define IRQ_UART2 10 /* 0x00000400 */ | ||
66 | #define IRQ_UART3 11 /* 0x00000800 */ | ||
67 | #define IRQ_KBD 12 /* 0x00001000 */ | ||
68 | #define IRQ_PS2 13 /* 0x00002000 */ | ||
69 | #define IRQ_AIC 14 /* 0x00004000 */ | ||
70 | #define IRQ_TIMER0 15 /* 0x00008000 */ | ||
71 | #define IRQ_TIMERX 16 /* 0x00010000 */ | ||
72 | #define IRQ_WDT 17 /* 0x00020000 */ | ||
73 | #define IRQ_CAN0 18 /* 0x00040000 */ | ||
74 | #define IRQ_CAN1 19 /* 0x00080000 */ | ||
75 | #define IRQ_EXT0 20 /* 0x00100000 */ | ||
76 | #define IRQ_EXT1 21 /* 0x00200000 */ | ||
77 | #define IRQ_GPIOA 22 /* 0x00400000 */ | ||
78 | #define IRQ_GPIOB 23 /* 0x00800000 */ | ||
79 | #define IRQ_GPIOC 24 /* 0x01000000 */ | ||
80 | #define IRQ_GPIOD 25 /* 0x02000000 */ | ||
81 | #define IRQ_GPIOE 26 /* 0x04000000 */ | ||
82 | #define IRQ_COMMRX 27 /* 0x08000000 */ | ||
83 | #define IRQ_COMMTX 28 /* 0x10000000 */ | ||
84 | #define IRQ_SMC 29 /* 0x20000000 */ | ||
85 | #define IRQ_Soft 30 /* 0x40000000 */ | ||
86 | #define IRQ_RESERVED1 31 /* 0x80000000 */ | ||
87 | #define NR_GLBL_IRQS 32 | ||
88 | |||
89 | #define NR_TIMERX_IRQS 3 | ||
90 | |||
91 | #define IRQ_CHAINED_GPIOA(x) (NR_GLBL_IRQS + x) | ||
92 | #define IRQ_CHAINED_GPIOB(x) (IRQ_CHAINED_GPIOA(32) + x) | ||
93 | #define IRQ_CHAINED_GPIOC(x) (IRQ_CHAINED_GPIOB(32) + x) | ||
94 | #define IRQ_CHAINED_GPIOD(x) (IRQ_CHAINED_GPIOC(32) + x) | ||
95 | #define IRQ_CHAINED_GPIOE(x) (IRQ_CHAINED_GPIOD(32) + x) | ||
96 | #define IRQ_CHAINED_TIMERX(x) (IRQ_CHAINED_GPIOE(32) + x) | ||
97 | #define IRQ_TIMER1 (IRQ_CHAINED_TIMERX(0)) | ||
98 | #define IRQ_TIMER2 (IRQ_CHAINED_TIMERX(1)) | ||
99 | #define IRQ_TIMER64B (IRQ_CHAINED_TIMERX(2)) | ||
100 | |||
101 | #define NR_IRQS (IRQ_CHAINED_TIMERX(NR_TIMERX_IRQS)) | ||
102 | |||
103 | /* Enable mask for multiplexed interrupts */ | ||
104 | #define IRQ_ENA_MUX (1<<IRQ_TIMERX) | (1<<IRQ_GPIOA) | (1<<IRQ_GPIOB) | \ | ||
105 | (1<<IRQ_GPIOC) | (1<<IRQ_GPIOD) | (1<<IRQ_GPIOE) | \ | ||
106 | (1<<IRQ_TIMERX) | ||
107 | |||
108 | #else | ||
109 | #error cpu definition mismatch | ||
110 | #endif | ||
111 | |||
112 | /* decode irq number to register number */ | ||
113 | #define IRQ_TO_REGNO(irq) ((irq - NR_GLBL_IRQS) >> 5) | ||
114 | #define IRQ_TO_BIT(irq) (1 << ((irq - NR_GLBL_IRQS) % 32)) | ||
115 | |||
116 | #endif | ||
diff --git a/include/asm-arm/arch-h720x/memory.h b/include/asm-arm/arch-h720x/memory.h new file mode 100644 index 000000000000..5633447af268 --- /dev/null +++ b/include/asm-arm/arch-h720x/memory.h | |||
@@ -0,0 +1,31 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-h720x/memory.h | ||
3 | * | ||
4 | * Copyright (c) 2000 Jungjun Kim | ||
5 | * | ||
6 | */ | ||
7 | #ifndef __ASM_ARCH_MEMORY_H | ||
8 | #define __ASM_ARCH_MEMORY_H | ||
9 | |||
10 | /* | ||
11 | * Page offset: | ||
12 | * ( 0xc0000000UL ) | ||
13 | */ | ||
14 | #define PHYS_OFFSET (0x40000000UL) | ||
15 | |||
16 | /* | ||
17 | * Virtual view <-> DMA view memory address translations | ||
18 | * virt_to_bus: Used to translate the virtual address to an | ||
19 | * address suitable to be passed to set_dma_addr | ||
20 | * bus_to_virt: Used to convert an address for DMA operations | ||
21 | * to an address that the kernel can use. | ||
22 | * | ||
23 | * There is something to do here later !, Mar 2000, Jungjun Kim | ||
24 | */ | ||
25 | |||
26 | #define __virt_to_bus__is_a_macro | ||
27 | #define __virt_to_bus(x) __virt_to_phys(x) | ||
28 | #define __bus_to_virt__is_a_macro | ||
29 | #define __bus_to_virt(x) __phys_to_virt(x) | ||
30 | |||
31 | #endif | ||
diff --git a/include/asm-arm/arch-h720x/param.h b/include/asm-arm/arch-h720x/param.h new file mode 100644 index 000000000000..2b80235f9847 --- /dev/null +++ b/include/asm-arm/arch-h720x/param.h | |||
@@ -0,0 +1,10 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-h720x/param.h | ||
3 | * | ||
4 | * Copyright (C) 2000 Jungjun Kim | ||
5 | */ | ||
6 | |||
7 | #ifndef __ASM_ARCH_PARAM_H | ||
8 | #define __ASM_ARCH_PARAM_H | ||
9 | |||
10 | #endif | ||
diff --git a/include/asm-arm/arch-h720x/system.h b/include/asm-arm/arch-h720x/system.h new file mode 100644 index 000000000000..0b025e227ec2 --- /dev/null +++ b/include/asm-arm/arch-h720x/system.h | |||
@@ -0,0 +1,31 @@ | |||
1 | /* | ||
2 | * linux/arch/arm/mach-h720x/system.h | ||
3 | * | ||
4 | * Copyright (C) 2001-2002 Jungjun Kim, Hynix Semiconductor Inc. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | * linux/include/asm-arm/arch-h720x/system.h | ||
10 | * | ||
11 | */ | ||
12 | |||
13 | #ifndef __ASM_ARCH_SYSTEM_H | ||
14 | #define __ASM_ARCH_SYSTEM_H | ||
15 | #include <asm/hardware.h> | ||
16 | |||
17 | static void arch_idle(void) | ||
18 | { | ||
19 | CPU_REG (PMU_BASE, PMU_MODE) = PMU_MODE_IDLE; | ||
20 | __asm__ __volatile__( | ||
21 | "mov r0, r0\n\t" | ||
22 | "mov r0, r0"); | ||
23 | } | ||
24 | |||
25 | |||
26 | static __inline__ void arch_reset(char mode) | ||
27 | { | ||
28 | CPU_REG (PMU_BASE, PMU_STAT) |= PMU_WARMRESET; | ||
29 | } | ||
30 | |||
31 | #endif | ||
diff --git a/include/asm-arm/arch-h720x/timex.h b/include/asm-arm/arch-h720x/timex.h new file mode 100644 index 000000000000..48a391c4080f --- /dev/null +++ b/include/asm-arm/arch-h720x/timex.h | |||
@@ -0,0 +1,15 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-h720x/timex.h | ||
3 | * Copyright (C) 2000 Jungjun Kim, Hynix Semiconductor Inc. | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License version 2 as | ||
7 | * published by the Free Software Foundation. | ||
8 | */ | ||
9 | |||
10 | #ifndef __ASM_ARCH_TIMEX | ||
11 | #define __ASM_ARCH_TIMEX | ||
12 | |||
13 | #define CLOCK_TICK_RATE 3686400 | ||
14 | |||
15 | #endif | ||
diff --git a/include/asm-arm/arch-h720x/uncompress.h b/include/asm-arm/arch-h720x/uncompress.h new file mode 100644 index 000000000000..2fffacf85a01 --- /dev/null +++ b/include/asm-arm/arch-h720x/uncompress.h | |||
@@ -0,0 +1,39 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-h720x/uncompress.h | ||
3 | * | ||
4 | * Copyright (C) 2001-2002 Jungjun Kim | ||
5 | */ | ||
6 | |||
7 | #ifndef __ASM_ARCH_UNCOMPRESS_H | ||
8 | #define __ASM_ARCH_UNCOMPRESS_H | ||
9 | |||
10 | #include <asm/arch/hardware.h> | ||
11 | |||
12 | #define LSR 0x14 | ||
13 | #define TEMPTY 0x40 | ||
14 | |||
15 | static void putstr(const char *s) | ||
16 | { | ||
17 | char c; | ||
18 | volatile unsigned char *p = (volatile unsigned char *)(IO_PHYS+0x20000); | ||
19 | |||
20 | while ( (c = *s++) != '\0') { | ||
21 | /* wait until transmit buffer is empty */ | ||
22 | while((p[LSR] & TEMPTY) == 0x0); | ||
23 | /* write next character */ | ||
24 | *p = c; | ||
25 | |||
26 | if(c == '\n') { | ||
27 | while((p[LSR] & TEMPTY) == 0x0); | ||
28 | *p = '\r'; | ||
29 | } | ||
30 | } | ||
31 | } | ||
32 | |||
33 | /* | ||
34 | * nothing to do | ||
35 | */ | ||
36 | #define arch_decomp_setup() | ||
37 | #define arch_decomp_wdog() | ||
38 | |||
39 | #endif | ||
diff --git a/include/asm-arm/arch-h720x/vmalloc.h b/include/asm-arm/arch-h720x/vmalloc.h new file mode 100644 index 000000000000..4af523a5e189 --- /dev/null +++ b/include/asm-arm/arch-h720x/vmalloc.h | |||
@@ -0,0 +1,21 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-h720x/vmalloc.h | ||
3 | */ | ||
4 | |||
5 | #ifndef __ARCH_ARM_VMALLOC_H | ||
6 | #define __ARCH_ARM_VMALLOC_H | ||
7 | |||
8 | /* | ||
9 | * Just any arbitrary offset to the start of the vmalloc VM area: the | ||
10 | * current 8MB value just means that there will be a 8MB "hole" after the | ||
11 | * physical memory until the kernel virtual memory starts. That means that | ||
12 | * any out-of-bounds memory accesses will hopefully be caught. | ||
13 | * The vmalloc() routines leaves a hole of 4kB between each vmalloced | ||
14 | * area for the same reason. ;) | ||
15 | */ | ||
16 | #define VMALLOC_OFFSET (8*1024*1024) | ||
17 | #define VMALLOC_START (((unsigned long)high_memory + VMALLOC_OFFSET) & ~(VMALLOC_OFFSET-1)) | ||
18 | #define VMALLOC_VMADDR(x) ((unsigned long)(x)) | ||
19 | #define VMALLOC_END (PAGE_OFFSET + 0x10000000) | ||
20 | |||
21 | #endif | ||
diff --git a/include/asm-arm/arch-imx/debug-macro.S b/include/asm-arm/arch-imx/debug-macro.S new file mode 100644 index 000000000000..83f552f7bcc1 --- /dev/null +++ b/include/asm-arm/arch-imx/debug-macro.S | |||
@@ -0,0 +1,34 @@ | |||
1 | /* linux/include/asm-arm/arch-imx/debug-macro.S | ||
2 | * | ||
3 | * Debugging macro include header | ||
4 | * | ||
5 | * Copyright (C) 1994-1999 Russell King | ||
6 | * Moved from linux/arch/arm/kernel/debug.S by Ben Dooks | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | * | ||
12 | */ | ||
13 | |||
14 | .macro addruart,rx | ||
15 | mrc p15, 0, \rx, c1, c0 | ||
16 | tst \rx, #1 @ MMU enabled? | ||
17 | moveq \rx, #0x00000000 @ physical | ||
18 | movne \rx, #0xe0000000 @ virtual | ||
19 | orr \rx, \rx, #0x00200000 | ||
20 | orr \rx, \rx, #0x00006000 @ UART1 offset | ||
21 | .endm | ||
22 | |||
23 | .macro senduart,rd,rx | ||
24 | str \rd, [\rx, #0x40] @ TXDATA | ||
25 | .endm | ||
26 | |||
27 | .macro waituart,rd,rx | ||
28 | .endm | ||
29 | |||
30 | .macro busyuart,rd,rx | ||
31 | 1002: ldr \rd, [\rx, #0x98] @ SR2 | ||
32 | tst \rd, #1 << 3 @ TXDC | ||
33 | beq 1002b @ wait until transmit done | ||
34 | .endm | ||
diff --git a/include/asm-arm/arch-imx/dma.h b/include/asm-arm/arch-imx/dma.h new file mode 100644 index 000000000000..dbdc01780413 --- /dev/null +++ b/include/asm-arm/arch-imx/dma.h | |||
@@ -0,0 +1,71 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/imxads/dma.h | ||
3 | * | ||
4 | * Copyright (C) 1997,1998 Russell King | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | * GNU General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License | ||
17 | * along with this program; if not, write to the Free Software | ||
18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
19 | */ | ||
20 | #ifndef __ASM_ARCH_DMA_H | ||
21 | #define __ASM_ARCH_DMA_H | ||
22 | |||
23 | #define MAX_DMA_ADDRESS 0xffffffff | ||
24 | |||
25 | #define MAX_DMA_CHANNELS 0 | ||
26 | |||
27 | /* | ||
28 | * DMA registration | ||
29 | */ | ||
30 | |||
31 | typedef enum { | ||
32 | DMA_PRIO_HIGH = 0, | ||
33 | DMA_PRIO_MEDIUM = 3, | ||
34 | DMA_PRIO_LOW = 6 | ||
35 | } imx_dma_prio; | ||
36 | |||
37 | int imx_request_dma(char *name, imx_dma_prio prio, | ||
38 | void (*irq_handler) (int, void *, struct pt_regs *), | ||
39 | void (*err_handler) (int, void *, struct pt_regs *), | ||
40 | void *data); | ||
41 | |||
42 | void imx_free_dma(int dma_ch); | ||
43 | |||
44 | |||
45 | #define DMA_REQ_UART3_T 2 | ||
46 | #define DMA_REQ_UART3_R 3 | ||
47 | #define DMA_REQ_SSI2_T 4 | ||
48 | #define DMA_REQ_SSI2_R 5 | ||
49 | #define DMA_REQ_CSI_STAT 6 | ||
50 | #define DMA_REQ_CSI_R 7 | ||
51 | #define DMA_REQ_MSHC 8 | ||
52 | #define DMA_REQ_DSPA_DCT_DOUT 9 | ||
53 | #define DMA_REQ_DSPA_DCT_DIN 10 | ||
54 | #define DMA_REQ_DSPA_MAC 11 | ||
55 | #define DMA_REQ_EXT 12 | ||
56 | #define DMA_REQ_SDHC 13 | ||
57 | #define DMA_REQ_SPI1_R 14 | ||
58 | #define DMA_REQ_SPI1_T 15 | ||
59 | #define DMA_REQ_SSI_T 16 | ||
60 | #define DMA_REQ_SSI_R 17 | ||
61 | #define DMA_REQ_ASP_DAC 18 | ||
62 | #define DMA_REQ_ASP_ADC 19 | ||
63 | #define DMA_REQ_USP_EP(x) (20+(x)) | ||
64 | #define DMA_REQ_SPI2_R 26 | ||
65 | #define DMA_REQ_SPI2_T 27 | ||
66 | #define DMA_REQ_UART2_T 28 | ||
67 | #define DMA_REQ_UART2_R 29 | ||
68 | #define DMA_REQ_UART1_T 30 | ||
69 | #define DMA_REQ_UART1_R 31 | ||
70 | |||
71 | #endif /* _ASM_ARCH_DMA_H */ | ||
diff --git a/include/asm-arm/arch-imx/entry-macro.S b/include/asm-arm/arch-imx/entry-macro.S new file mode 100644 index 000000000000..b40ea7cf88ec --- /dev/null +++ b/include/asm-arm/arch-imx/entry-macro.S | |||
@@ -0,0 +1,29 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-imx/entry-macro.S | ||
3 | * | ||
4 | * Low-level IRQ helper macros for iMX-based platforms | ||
5 | * | ||
6 | * This file is licensed under the terms of the GNU General Public | ||
7 | * License version 2. This program is licensed "as is" without any | ||
8 | * warranty of any kind, whether express or implied. | ||
9 | */ | ||
10 | .macro disable_fiq | ||
11 | .endm | ||
12 | #define AITC_NIVECSR 0x40 | ||
13 | .macro get_irqnr_and_base, irqnr, irqstat, base, tmp | ||
14 | ldr \irqstat, =IO_ADDRESS(IMX_AITC_BASE) | ||
15 | @ Load offset & priority of the highest priority | ||
16 | @ interrupt pending. | ||
17 | ldr \irqnr, [\irqstat, #AITC_NIVECSR] | ||
18 | @ Shift off the priority leaving the offset or | ||
19 | @ "interrupt number" | ||
20 | mov \irqnr, \irqnr, lsr #16 | ||
21 | ldr \irqstat, =1 @ dummy compare | ||
22 | ldr \base, =0xFFFF // invalid interrupt | ||
23 | cmp \irqnr, \base | ||
24 | bne 1001f | ||
25 | ldr \irqstat, =0 | ||
26 | 1001: | ||
27 | tst \irqstat, #1 @ to make the condition code = TRUE | ||
28 | .endm | ||
29 | |||
diff --git a/include/asm-arm/arch-imx/hardware.h b/include/asm-arm/arch-imx/hardware.h new file mode 100644 index 000000000000..adffb6acf42a --- /dev/null +++ b/include/asm-arm/arch-imx/hardware.h | |||
@@ -0,0 +1,99 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-imx/hardware.h | ||
3 | * | ||
4 | * Copyright (C) 1999 ARM Limited. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | * GNU General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License | ||
17 | * along with this program; if not, write to the Free Software | ||
18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
19 | */ | ||
20 | #ifndef __ASM_ARCH_HARDWARE_H | ||
21 | #define __ASM_ARCH_HARDWARE_H | ||
22 | |||
23 | #include <asm/sizes.h> | ||
24 | #include "imx-regs.h" | ||
25 | |||
26 | #ifndef __ASSEMBLY__ | ||
27 | # define __REG(x) (*((volatile u32 *)IO_ADDRESS(x))) | ||
28 | |||
29 | # define __REG2(x,y) (*(volatile u32 *)((u32)&__REG(x) + (y))) | ||
30 | #endif | ||
31 | |||
32 | /* | ||
33 | * Memory map | ||
34 | */ | ||
35 | |||
36 | #define IMX_IO_PHYS 0x00200000 | ||
37 | #define IMX_IO_SIZE 0x00100000 | ||
38 | #define IMX_IO_BASE 0xe0000000 | ||
39 | |||
40 | #define IMX_CS0_PHYS 0x10000000 | ||
41 | #define IMX_CS0_SIZE 0x02000000 | ||
42 | #define IMX_CS0_VIRT 0xe8000000 | ||
43 | |||
44 | #define IMX_CS1_PHYS 0x12000000 | ||
45 | #define IMX_CS1_SIZE 0x01000000 | ||
46 | #define IMX_CS1_VIRT 0xea000000 | ||
47 | |||
48 | #define IMX_CS2_PHYS 0x13000000 | ||
49 | #define IMX_CS2_SIZE 0x01000000 | ||
50 | #define IMX_CS2_VIRT 0xeb000000 | ||
51 | |||
52 | #define IMX_CS3_PHYS 0x14000000 | ||
53 | #define IMX_CS3_SIZE 0x01000000 | ||
54 | #define IMX_CS3_VIRT 0xec000000 | ||
55 | |||
56 | #define IMX_CS4_PHYS 0x15000000 | ||
57 | #define IMX_CS4_SIZE 0x01000000 | ||
58 | #define IMX_CS4_VIRT 0xed000000 | ||
59 | |||
60 | #define IMX_CS5_PHYS 0x16000000 | ||
61 | #define IMX_CS5_SIZE 0x01000000 | ||
62 | #define IMX_CS5_VIRT 0xee000000 | ||
63 | |||
64 | #define IMX_FB_VIRT 0xF1000000 | ||
65 | #define IMX_FB_SIZE (256*1024) | ||
66 | |||
67 | /* macro to get at IO space when running virtually */ | ||
68 | #define IO_ADDRESS(x) ((x) | IMX_IO_BASE) | ||
69 | |||
70 | #ifndef __ASSEMBLY__ | ||
71 | /* | ||
72 | * Handy routine to set GPIO functions | ||
73 | */ | ||
74 | extern void imx_gpio_mode( int gpio_mode ); | ||
75 | |||
76 | /* get frequencies in Hz */ | ||
77 | extern unsigned int imx_get_system_clk(void); | ||
78 | extern unsigned int imx_get_mcu_clk(void); | ||
79 | extern unsigned int imx_get_perclk1(void); /* UART[12], Timer[12], PWM */ | ||
80 | extern unsigned int imx_get_perclk2(void); /* LCD, SD, SPI[12] */ | ||
81 | extern unsigned int imx_get_perclk3(void); /* SSI */ | ||
82 | extern unsigned int imx_get_hclk(void); /* SDRAM, CSI, Memory Stick,*/ | ||
83 | /* I2C, DMA */ | ||
84 | #endif | ||
85 | |||
86 | #define MAXIRQNUM 62 | ||
87 | #define MAXFIQNUM 62 | ||
88 | #define MAXSWINUM 62 | ||
89 | |||
90 | /* | ||
91 | * Use SDRAM for memory | ||
92 | */ | ||
93 | #define MEM_SIZE 0x01000000 | ||
94 | |||
95 | #ifdef CONFIG_ARCH_MX1ADS | ||
96 | #include "mx1ads.h" | ||
97 | #endif | ||
98 | |||
99 | #endif | ||
diff --git a/include/asm-arm/arch-imx/imx-regs.h b/include/asm-arm/arch-imx/imx-regs.h new file mode 100644 index 000000000000..f32c203952cf --- /dev/null +++ b/include/asm-arm/arch-imx/imx-regs.h | |||
@@ -0,0 +1,548 @@ | |||
1 | #ifndef _IMX_REGS_H | ||
2 | #define _IMX_REGS_H | ||
3 | /* ------------------------------------------------------------------------ | ||
4 | * Motorola IMX system registers | ||
5 | * ------------------------------------------------------------------------ | ||
6 | * | ||
7 | */ | ||
8 | |||
9 | /* | ||
10 | * Register BASEs, based on OFFSETs | ||
11 | * | ||
12 | */ | ||
13 | #define IMX_AIPI1_BASE (0x00000 + IMX_IO_BASE) | ||
14 | #define IMX_WDT_BASE (0x01000 + IMX_IO_BASE) | ||
15 | #define IMX_TIM1_BASE (0x02000 + IMX_IO_BASE) | ||
16 | #define IMX_TIM2_BASE (0x03000 + IMX_IO_BASE) | ||
17 | #define IMX_RTC_BASE (0x04000 + IMX_IO_BASE) | ||
18 | #define IMX_LCDC_BASE (0x05000 + IMX_IO_BASE) | ||
19 | #define IMX_UART1_BASE (0x06000 + IMX_IO_BASE) | ||
20 | #define IMX_UART2_BASE (0x07000 + IMX_IO_BASE) | ||
21 | #define IMX_PWM_BASE (0x08000 + IMX_IO_BASE) | ||
22 | #define IMX_DMAC_BASE (0x09000 + IMX_IO_BASE) | ||
23 | #define IMX_AIPI2_BASE (0x10000 + IMX_IO_BASE) | ||
24 | #define IMX_SIM_BASE (0x11000 + IMX_IO_BASE) | ||
25 | #define IMX_USBD_BASE (0x12000 + IMX_IO_BASE) | ||
26 | #define IMX_SPI1_BASE (0x13000 + IMX_IO_BASE) | ||
27 | #define IMX_MMC_BASE (0x14000 + IMX_IO_BASE) | ||
28 | #define IMX_ASP_BASE (0x15000 + IMX_IO_BASE) | ||
29 | #define IMX_BTA_BASE (0x16000 + IMX_IO_BASE) | ||
30 | #define IMX_I2C_BASE (0x17000 + IMX_IO_BASE) | ||
31 | #define IMX_SSI_BASE (0x18000 + IMX_IO_BASE) | ||
32 | #define IMX_SPI2_BASE (0x19000 + IMX_IO_BASE) | ||
33 | #define IMX_MSHC_BASE (0x1A000 + IMX_IO_BASE) | ||
34 | #define IMX_PLL_BASE (0x1B000 + IMX_IO_BASE) | ||
35 | #define IMX_GPIO_BASE (0x1C000 + IMX_IO_BASE) | ||
36 | #define IMX_EIM_BASE (0x20000 + IMX_IO_BASE) | ||
37 | #define IMX_SDRAMC_BASE (0x21000 + IMX_IO_BASE) | ||
38 | #define IMX_MMA_BASE (0x22000 + IMX_IO_BASE) | ||
39 | #define IMX_AITC_BASE (0x23000 + IMX_IO_BASE) | ||
40 | #define IMX_CSI_BASE (0x24000 + IMX_IO_BASE) | ||
41 | |||
42 | /* PLL registers */ | ||
43 | #define CSCR __REG(IMX_PLL_BASE) /* Clock Source Control Register */ | ||
44 | #define CSCR_SYSTEM_SEL (1<<16) | ||
45 | |||
46 | #define MPCTL0 __REG(IMX_PLL_BASE + 0x4) /* MCU PLL Control Register 0 */ | ||
47 | #define MPCTL1 __REG(IMX_PLL_BASE + 0x8) /* MCU PLL and System Clock Register 1 */ | ||
48 | #define SPCTL0 __REG(IMX_PLL_BASE + 0xc) /* System PLL Control Register 0 */ | ||
49 | #define SPCTL1 __REG(IMX_PLL_BASE + 0x10) /* System PLL Control Register 1 */ | ||
50 | #define PCDR __REG(IMX_PLL_BASE + 0x20) /* Peripheral Clock Divider Register */ | ||
51 | |||
52 | #define CSCR_MPLL_RESTART (1<<21) | ||
53 | |||
54 | /* | ||
55 | * GPIO Module and I/O Multiplexer | ||
56 | * x = 0..3 for reg_A, reg_B, reg_C, reg_D | ||
57 | */ | ||
58 | #define DDIR(x) __REG2(IMX_GPIO_BASE + 0x00, ((x) & 3) << 8) | ||
59 | #define OCR1(x) __REG2(IMX_GPIO_BASE + 0x04, ((x) & 3) << 8) | ||
60 | #define OCR2(x) __REG2(IMX_GPIO_BASE + 0x08, ((x) & 3) << 8) | ||
61 | #define ICONFA1(x) __REG2(IMX_GPIO_BASE + 0x0c, ((x) & 3) << 8) | ||
62 | #define ICONFA2(x) __REG2(IMX_GPIO_BASE + 0x10, ((x) & 3) << 8) | ||
63 | #define ICONFB1(x) __REG2(IMX_GPIO_BASE + 0x14, ((x) & 3) << 8) | ||
64 | #define ICONFB2(x) __REG2(IMX_GPIO_BASE + 0x18, ((x) & 3) << 8) | ||
65 | #define DR(x) __REG2(IMX_GPIO_BASE + 0x1c, ((x) & 3) << 8) | ||
66 | #define GIUS(x) __REG2(IMX_GPIO_BASE + 0x20, ((x) & 3) << 8) | ||
67 | #define SSR(x) __REG2(IMX_GPIO_BASE + 0x24, ((x) & 3) << 8) | ||
68 | #define ICR1(x) __REG2(IMX_GPIO_BASE + 0x28, ((x) & 3) << 8) | ||
69 | #define ICR2(x) __REG2(IMX_GPIO_BASE + 0x2c, ((x) & 3) << 8) | ||
70 | #define IMR(x) __REG2(IMX_GPIO_BASE + 0x30, ((x) & 3) << 8) | ||
71 | #define ISR(x) __REG2(IMX_GPIO_BASE + 0x34, ((x) & 3) << 8) | ||
72 | #define GPR(x) __REG2(IMX_GPIO_BASE + 0x38, ((x) & 3) << 8) | ||
73 | #define SWR(x) __REG2(IMX_GPIO_BASE + 0x3c, ((x) & 3) << 8) | ||
74 | #define PUEN(x) __REG2(IMX_GPIO_BASE + 0x40, ((x) & 3) << 8) | ||
75 | |||
76 | #define GPIO_PIN_MASK 0x1f | ||
77 | #define GPIO_PORT_MASK (0x3 << 5) | ||
78 | |||
79 | #define GPIO_PORTA (0<<5) | ||
80 | #define GPIO_PORTB (1<<5) | ||
81 | #define GPIO_PORTC (2<<5) | ||
82 | #define GPIO_PORTD (3<<5) | ||
83 | |||
84 | #define GPIO_OUT (1<<7) | ||
85 | #define GPIO_IN (0<<7) | ||
86 | #define GPIO_PUEN (1<<8) | ||
87 | |||
88 | #define GPIO_PF (0<<9) | ||
89 | #define GPIO_AF (1<<9) | ||
90 | |||
91 | #define GPIO_OCR_MASK (3<<10) | ||
92 | #define GPIO_AIN (0<<10) | ||
93 | #define GPIO_BIN (1<<10) | ||
94 | #define GPIO_CIN (2<<10) | ||
95 | #define GPIO_GPIO (3<<10) | ||
96 | |||
97 | #define GPIO_AOUT (1<<12) | ||
98 | #define GPIO_BOUT (1<<13) | ||
99 | |||
100 | /* assignements for GPIO alternate/primary functions */ | ||
101 | |||
102 | /* FIXME: This list is not completed. The correct directions are | ||
103 | * missing on some (many) pins | ||
104 | */ | ||
105 | #define PA0_PF_A24 ( GPIO_PORTA | GPIO_PF | 0 ) | ||
106 | #define PA0_AIN_SPI2_CLK ( GPIO_PORTA | GPIO_OUT | GPIO_AIN | 0 ) | ||
107 | #define PA0_AF_ETMTRACESYNC ( GPIO_PORTA | GPIO_AF | 0 ) | ||
108 | #define PA1_AOUT_SPI2_RXD ( GPIO_PORTA | GPIO_IN | GPIO_AOUT | 1 ) | ||
109 | #define PA1_PF_TIN ( GPIO_PORTA | GPIO_PF | 1 ) | ||
110 | #define PA2_PF_PWM0 ( GPIO_PORTA | GPIO_OUT | GPIO_PF | 2 ) | ||
111 | #define PA3_PF_CSI_MCLK ( GPIO_PORTA | GPIO_PF | 3 ) | ||
112 | #define PA4_PF_CSI_D0 ( GPIO_PORTA | GPIO_PF | 4 ) | ||
113 | #define PA5_PF_CSI_D1 ( GPIO_PORTA | GPIO_PF | 5 ) | ||
114 | #define PA6_PF_CSI_D2 ( GPIO_PORTA | GPIO_PF | 6 ) | ||
115 | #define PA7_PF_CSI_D3 ( GPIO_PORTA | GPIO_PF | 7 ) | ||
116 | #define PA8_PF_CSI_D4 ( GPIO_PORTA | GPIO_PF | 8 ) | ||
117 | #define PA9_PF_CSI_D5 ( GPIO_PORTA | GPIO_PF | 9 ) | ||
118 | #define PA10_PF_CSI_D6 ( GPIO_PORTA | GPIO_PF | 10 ) | ||
119 | #define PA11_PF_CSI_D7 ( GPIO_PORTA | GPIO_PF | 11 ) | ||
120 | #define PA12_PF_CSI_VSYNC ( GPIO_PORTA | GPIO_PF | 12 ) | ||
121 | #define PA13_PF_CSI_HSYNC ( GPIO_PORTA | GPIO_PF | 13 ) | ||
122 | #define PA14_PF_CSI_PIXCLK ( GPIO_PORTA | GPIO_PF | 14 ) | ||
123 | #define PA15_PF_I2C_SDA ( GPIO_PORTA | GPIO_OUT | GPIO_PF | 15 ) | ||
124 | #define PA16_PF_I2C_SCL ( GPIO_PORTA | GPIO_OUT | GPIO_PF | 16 ) | ||
125 | #define PA17_AF_ETMTRACEPKT4 ( GPIO_PORTA | GPIO_AF | 17 ) | ||
126 | #define PA17_AIN_SPI2_SS ( GPIO_PORTA | GPIO_AIN | 17 ) | ||
127 | #define PA18_AF_ETMTRACEPKT5 ( GPIO_PORTA | GPIO_AF | 18 ) | ||
128 | #define PA19_AF_ETMTRACEPKT6 ( GPIO_PORTA | GPIO_AF | 19 ) | ||
129 | #define PA20_AF_ETMTRACEPKT7 ( GPIO_PORTA | GPIO_AF | 20 ) | ||
130 | #define PA21_PF_A0 ( GPIO_PORTA | GPIO_PF | 21 ) | ||
131 | #define PA22_PF_CS4 ( GPIO_PORTA | GPIO_PF | 22 ) | ||
132 | #define PA23_PF_CS5 ( GPIO_PORTA | GPIO_PF | 23 ) | ||
133 | #define PA24_PF_A16 ( GPIO_PORTA | GPIO_PF | 24 ) | ||
134 | #define PA24_AF_ETMTRACEPKT0 ( GPIO_PORTA | GPIO_AF | 24 ) | ||
135 | #define PA25_PF_A17 ( GPIO_PORTA | GPIO_PF | 25 ) | ||
136 | #define PA25_AF_ETMTRACEPKT1 ( GPIO_PORTA | GPIO_AF | 25 ) | ||
137 | #define PA26_PF_A18 ( GPIO_PORTA | GPIO_PF | 26 ) | ||
138 | #define PA26_AF_ETMTRACEPKT2 ( GPIO_PORTA | GPIO_AF | 26 ) | ||
139 | #define PA27_PF_A19 ( GPIO_PORTA | GPIO_PF | 27 ) | ||
140 | #define PA27_AF_ETMTRACEPKT3 ( GPIO_PORTA | GPIO_AF | 27 ) | ||
141 | #define PA28_PF_A20 ( GPIO_PORTA | GPIO_PF | 28 ) | ||
142 | #define PA28_AF_ETMPIPESTAT0 ( GPIO_PORTA | GPIO_AF | 28 ) | ||
143 | #define PA29_PF_A21 ( GPIO_PORTA | GPIO_PF | 29 ) | ||
144 | #define PA29_AF_ETMPIPESTAT1 ( GPIO_PORTA | GPIO_AF | 29 ) | ||
145 | #define PA30_PF_A22 ( GPIO_PORTA | GPIO_PF | 30 ) | ||
146 | #define PA30_AF_ETMPIPESTAT2 ( GPIO_PORTA | GPIO_AF | 30 ) | ||
147 | #define PA31_PF_A23 ( GPIO_PORTA | GPIO_PF | 31 ) | ||
148 | #define PA31_AF_ETMTRACECLK ( GPIO_PORTA | GPIO_AF | 31 ) | ||
149 | #define PB8_PF_SD_DAT0 ( GPIO_PORTB | GPIO_PF | GPIO_PUEN | 8 ) | ||
150 | #define PB8_AF_MS_PIO ( GPIO_PORTB | GPIO_AF | 8 ) | ||
151 | #define PB9_PF_SD_DAT1 ( GPIO_PORTB | GPIO_PF | GPIO_PUEN | 9 ) | ||
152 | #define PB9_AF_MS_PI1 ( GPIO_PORTB | GPIO_AF | 9 ) | ||
153 | #define PB10_PF_SD_DAT2 ( GPIO_PORTB | GPIO_PF | GPIO_PUEN | 10 ) | ||
154 | #define PB10_AF_MS_SCLKI ( GPIO_PORTB | GPIO_AF | 10 ) | ||
155 | #define PB11_PF_SD_DAT3 ( GPIO_PORTB | GPIO_PF | 11 ) | ||
156 | #define PB11_AF_MS_SDIO ( GPIO_PORTB | GPIO_AF | 11 ) | ||
157 | #define PB12_PF_SD_CLK ( GPIO_PORTB | GPIO_PF | 12 ) | ||
158 | #define PB12_AF_MS_SCLK0 ( GPIO_PORTB | GPIO_AF | 12 ) | ||
159 | #define PB13_PF_SD_CMD ( GPIO_PORTB | GPIO_PF | GPIO_PUEN | 13 ) | ||
160 | #define PB13_AF_MS_BS ( GPIO_PORTB | GPIO_AF | 13 ) | ||
161 | #define PB14_AF_SSI_RXFS ( GPIO_PORTB | GPIO_AF | 14 ) | ||
162 | #define PB15_AF_SSI_RXCLK ( GPIO_PORTB | GPIO_AF | 15 ) | ||
163 | #define PB16_AF_SSI_RXDAT ( GPIO_PORTB | GPIO_IN | GPIO_AF | 16 ) | ||
164 | #define PB17_AF_SSI_TXDAT ( GPIO_PORTB | GPIO_OUT | GPIO_AF | 17 ) | ||
165 | #define PB18_AF_SSI_TXFS ( GPIO_PORTB | GPIO_AF | 18 ) | ||
166 | #define PB19_AF_SSI_TXCLK ( GPIO_PORTB | GPIO_AF | 19 ) | ||
167 | #define PB20_PF_USBD_AFE ( GPIO_PORTB | GPIO_PF | 20 ) | ||
168 | #define PB21_PF_USBD_OE ( GPIO_PORTB | GPIO_PF | 21 ) | ||
169 | #define PB22_PFUSBD_RCV ( GPIO_PORTB | GPIO_PF | 22 ) | ||
170 | #define PB23_PF_USBD_SUSPND ( GPIO_PORTB | GPIO_PF | 23 ) | ||
171 | #define PB24_PF_USBD_VP ( GPIO_PORTB | GPIO_PF | 24 ) | ||
172 | #define PB25_PF_USBD_VM ( GPIO_PORTB | GPIO_PF | 25 ) | ||
173 | #define PB26_PF_USBD_VPO ( GPIO_PORTB | GPIO_PF | 26 ) | ||
174 | #define PB27_PF_USBD_VMO ( GPIO_PORTB | GPIO_PF | 27 ) | ||
175 | #define PB28_PF_UART2_CTS ( GPIO_PORTB | GPIO_OUT | GPIO_PF | 28 ) | ||
176 | #define PB29_PF_UART2_RTS ( GPIO_PORTB | GPIO_IN | GPIO_PF | 29 ) | ||
177 | #define PB30_PF_UART2_TXD ( GPIO_PORTB | GPIO_OUT | GPIO_PF | 30 ) | ||
178 | #define PB31_PF_UART2_RXD ( GPIO_PORTB | GPIO_IN | GPIO_PF | 31 ) | ||
179 | #define PC3_PF_SSI_RXFS ( GPIO_PORTC | GPIO_PF | 3 ) | ||
180 | #define PC4_PF_SSI_RXCLK ( GPIO_PORTC | GPIO_PF | 4 ) | ||
181 | #define PC5_PF_SSI_RXDAT ( GPIO_PORTC | GPIO_IN | GPIO_PF | 5 ) | ||
182 | #define PC6_PF_SSI_TXDAT ( GPIO_PORTC | GPIO_OUT | GPIO_PF | 6 ) | ||
183 | #define PC7_PF_SSI_TXFS ( GPIO_PORTC | GPIO_PF | 7 ) | ||
184 | #define PC8_PF_SSI_TXCLK ( GPIO_PORTC | GPIO_PF | 8 ) | ||
185 | #define PC9_PF_UART1_CTS ( GPIO_PORTC | GPIO_OUT | GPIO_PF | 9 ) | ||
186 | #define PC10_PF_UART1_RTS ( GPIO_PORTC | GPIO_IN | GPIO_PF | 10 ) | ||
187 | #define PC11_PF_UART1_TXD ( GPIO_PORTC | GPIO_OUT | GPIO_PF | 11 ) | ||
188 | #define PC12_PF_UART1_RXD ( GPIO_PORTC | GPIO_IN | GPIO_PF | 12 ) | ||
189 | #define PC13_PF_SPI1_SPI_RDY ( GPIO_PORTC | GPIO_PF | 13 ) | ||
190 | #define PC14_PF_SPI1_SCLK ( GPIO_PORTC | GPIO_PF | 14 ) | ||
191 | #define PC15_PF_SPI1_SS ( GPIO_PORTC | GPIO_PF | 15 ) | ||
192 | #define PC16_PF_SPI1_MISO ( GPIO_PORTC | GPIO_PF | 16 ) | ||
193 | #define PC17_PF_SPI1_MOSI ( GPIO_PORTC | GPIO_PF | 17 ) | ||
194 | #define PD6_PF_LSCLK ( GPIO_PORTD | GPIO_OUT | GPIO_PF | 6 ) | ||
195 | #define PD7_PF_REV ( GPIO_PORTD | GPIO_PF | 7 ) | ||
196 | #define PD7_AF_UART2_DTR ( GPIO_PORTD | GPIO_IN | GPIO_AF | 7 ) | ||
197 | #define PD7_AIN_SPI2_SCLK ( GPIO_PORTD | GPIO_AIN | 7 ) | ||
198 | #define PD8_PF_CLS ( GPIO_PORTD | GPIO_PF | 8 ) | ||
199 | #define PD8_AF_UART2_DCD ( GPIO_PORTD | GPIO_OUT | GPIO_AF | 8 ) | ||
200 | #define PD8_AIN_SPI2_SS ( GPIO_PORTD | GPIO_AIN | 8 ) | ||
201 | #define PD9_PF_PS ( GPIO_PORTD | GPIO_PF | 9 ) | ||
202 | #define PD9_AF_UART2_RI ( GPIO_PORTD | GPIO_OUT | GPIO_AF | 9 ) | ||
203 | #define PD9_AOUT_SPI2_RXD ( GPIO_PORTD | GPIO_IN | GPIO_AOUT | 9 ) | ||
204 | #define PD10_PF_SPL_SPR ( GPIO_PORTD | GPIO_OUT | GPIO_PF | 10 ) | ||
205 | #define PD10_AF_UART2_DSR ( GPIO_PORTD | GPIO_OUT | GPIO_AF | 10 ) | ||
206 | #define PD10_AIN_SPI2_TXD ( GPIO_PORTD | GPIO_OUT | GPIO_AIN | 10 ) | ||
207 | #define PD11_PF_CONTRAST ( GPIO_PORTD | GPIO_OUT | GPIO_PF | 11 ) | ||
208 | #define PD12_PF_ACD_OE ( GPIO_PORTD | GPIO_OUT | GPIO_PF | 12 ) | ||
209 | #define PD13_PF_LP_HSYNC ( GPIO_PORTD | GPIO_OUT | GPIO_PF | 13 ) | ||
210 | #define PD14_PF_FLM_VSYNC ( GPIO_PORTD | GPIO_OUT | GPIO_PF | 14 ) | ||
211 | #define PD15_PF_LD0 ( GPIO_PORTD | GPIO_OUT | GPIO_PF | 15 ) | ||
212 | #define PD16_PF_LD1 ( GPIO_PORTD | GPIO_OUT | GPIO_PF | 16 ) | ||
213 | #define PD17_PF_LD2 ( GPIO_PORTD | GPIO_OUT | GPIO_PF | 17 ) | ||
214 | #define PD18_PF_LD3 ( GPIO_PORTD | GPIO_OUT | GPIO_PF | 18 ) | ||
215 | #define PD19_PF_LD4 ( GPIO_PORTD | GPIO_OUT | GPIO_PF | 19 ) | ||
216 | #define PD20_PF_LD5 ( GPIO_PORTD | GPIO_OUT | GPIO_PF | 20 ) | ||
217 | #define PD21_PF_LD6 ( GPIO_PORTD | GPIO_OUT | GPIO_PF | 21 ) | ||
218 | #define PD22_PF_LD7 ( GPIO_PORTD | GPIO_OUT | GPIO_PF | 22 ) | ||
219 | #define PD23_PF_LD8 ( GPIO_PORTD | GPIO_OUT | GPIO_PF | 23 ) | ||
220 | #define PD24_PF_LD9 ( GPIO_PORTD | GPIO_OUT | GPIO_PF | 24 ) | ||
221 | #define PD25_PF_LD10 ( GPIO_PORTD | GPIO_OUT | GPIO_PF | 25 ) | ||
222 | #define PD26_PF_LD11 ( GPIO_PORTD | GPIO_OUT | GPIO_PF | 26 ) | ||
223 | #define PD27_PF_LD12 ( GPIO_PORTD | GPIO_OUT | GPIO_PF | 27 ) | ||
224 | #define PD28_PF_LD13 ( GPIO_PORTD | GPIO_OUT | GPIO_PF | 28 ) | ||
225 | #define PD29_PF_LD14 ( GPIO_PORTD | GPIO_OUT | GPIO_PF | 29 ) | ||
226 | #define PD30_PF_LD15 ( GPIO_PORTD | GPIO_OUT | GPIO_PF | 30 ) | ||
227 | #define PD31_PF_TMR2OUT ( GPIO_PORTD | GPIO_PF | 31 ) | ||
228 | #define PD31_BIN_SPI2_TXD ( GPIO_PORTD | GPIO_BIN | 31 ) | ||
229 | |||
230 | /* | ||
231 | * DMA Controller | ||
232 | */ | ||
233 | #define DCR __REG(IMX_DMAC_BASE +0x00) /* DMA Control Register */ | ||
234 | #define DISR __REG(IMX_DMAC_BASE +0x04) /* DMA Interrupt status Register */ | ||
235 | #define DIMR __REG(IMX_DMAC_BASE +0x08) /* DMA Interrupt mask Register */ | ||
236 | #define DBTOSR __REG(IMX_DMAC_BASE +0x0c) /* DMA Burst timeout status Register */ | ||
237 | #define DRTOSR __REG(IMX_DMAC_BASE +0x10) /* DMA Request timeout Register */ | ||
238 | #define DSESR __REG(IMX_DMAC_BASE +0x14) /* DMA Transfer Error Status Register */ | ||
239 | #define DBOSR __REG(IMX_DMAC_BASE +0x18) /* DMA Buffer overflow status Register */ | ||
240 | #define DBTOCR __REG(IMX_DMAC_BASE +0x1c) /* DMA Burst timeout control Register */ | ||
241 | #define WSRA __REG(IMX_DMAC_BASE +0x40) /* W-Size Register A */ | ||
242 | #define XSRA __REG(IMX_DMAC_BASE +0x44) /* X-Size Register A */ | ||
243 | #define YSRA __REG(IMX_DMAC_BASE +0x48) /* Y-Size Register A */ | ||
244 | #define WSRB __REG(IMX_DMAC_BASE +0x4c) /* W-Size Register B */ | ||
245 | #define XSRB __REG(IMX_DMAC_BASE +0x50) /* X-Size Register B */ | ||
246 | #define YSRB __REG(IMX_DMAC_BASE +0x54) /* Y-Size Register B */ | ||
247 | #define SAR(x) __REG2( IMX_DMAC_BASE + 0x80, (x) << 6) /* Source Address Registers */ | ||
248 | #define DAR(x) __REG2( IMX_DMAC_BASE + 0x84, (x) << 6) /* Destination Address Registers */ | ||
249 | #define CNTR(x) __REG2( IMX_DMAC_BASE + 0x88, (x) << 6) /* Count Registers */ | ||
250 | #define CCR(x) __REG2( IMX_DMAC_BASE + 0x8c, (x) << 6) /* Control Registers */ | ||
251 | #define RSSR(x) __REG2( IMX_DMAC_BASE + 0x90, (x) << 6) /* Request source select Registers */ | ||
252 | #define BLR(x) __REG2( IMX_DMAC_BASE + 0x94, (x) << 6) /* Burst length Registers */ | ||
253 | #define RTOR(x) __REG2( IMX_DMAC_BASE + 0x98, (x) << 6) /* Request timeout Registers */ | ||
254 | #define BUCR(x) __REG2( IMX_DMAC_BASE + 0x98, (x) << 6) /* Bus Utilization Registers */ | ||
255 | |||
256 | #define DCR_DRST (1<<1) | ||
257 | #define DCR_DEN (1<<0) | ||
258 | #define DBTOCR_EN (1<<15) | ||
259 | #define DBTOCR_CNT(x) ((x) & 0x7fff ) | ||
260 | #define CNTR_CNT(x) ((x) & 0xffffff ) | ||
261 | #define CCR_DMOD_LINEAR ( 0x0 << 12 ) | ||
262 | #define CCR_DMOD_2D ( 0x1 << 12 ) | ||
263 | #define CCR_DMOD_FIFO ( 0x2 << 12 ) | ||
264 | #define CCR_DMOD_EOBFIFO ( 0x3 << 12 ) | ||
265 | #define CCR_SMOD_LINEAR ( 0x0 << 10 ) | ||
266 | #define CCR_SMOD_2D ( 0x1 << 10 ) | ||
267 | #define CCR_SMOD_FIFO ( 0x2 << 10 ) | ||
268 | #define CCR_SMOD_EOBFIFO ( 0x3 << 10 ) | ||
269 | #define CCR_MDIR_DEC (1<<9) | ||
270 | #define CCR_MSEL_B (1<<8) | ||
271 | #define CCR_DSIZ_32 ( 0x0 << 6 ) | ||
272 | #define CCR_DSIZ_8 ( 0x1 << 6 ) | ||
273 | #define CCR_DSIZ_16 ( 0x2 << 6 ) | ||
274 | #define CCR_SSIZ_32 ( 0x0 << 4 ) | ||
275 | #define CCR_SSIZ_8 ( 0x1 << 4 ) | ||
276 | #define CCR_SSIZ_16 ( 0x2 << 4 ) | ||
277 | #define CCR_REN (1<<3) | ||
278 | #define CCR_RPT (1<<2) | ||
279 | #define CCR_FRC (1<<1) | ||
280 | #define CCR_CEN (1<<0) | ||
281 | #define RTOR_EN (1<<15) | ||
282 | #define RTOR_CLK (1<<14) | ||
283 | #define RTOR_PSC (1<<13) | ||
284 | |||
285 | /* | ||
286 | * Interrupt controller | ||
287 | */ | ||
288 | |||
289 | #define IMX_INTCNTL __REG(IMX_AITC_BASE+0x00) | ||
290 | #define INTCNTL_FIAD (1<<19) | ||
291 | #define INTCNTL_NIAD (1<<20) | ||
292 | |||
293 | #define IMX_NIMASK __REG(IMX_AITC_BASE+0x04) | ||
294 | #define IMX_INTENNUM __REG(IMX_AITC_BASE+0x08) | ||
295 | #define IMX_INTDISNUM __REG(IMX_AITC_BASE+0x0c) | ||
296 | #define IMX_INTENABLEH __REG(IMX_AITC_BASE+0x10) | ||
297 | #define IMX_INTENABLEL __REG(IMX_AITC_BASE+0x14) | ||
298 | |||
299 | /* | ||
300 | * General purpose timers | ||
301 | */ | ||
302 | #define IMX_TCTL(x) __REG( 0x00 + (x)) | ||
303 | #define TCTL_SWR (1<<15) | ||
304 | #define TCTL_FRR (1<<8) | ||
305 | #define TCTL_CAP_RIS (1<<6) | ||
306 | #define TCTL_CAP_FAL (2<<6) | ||
307 | #define TCTL_CAP_RIS_FAL (3<<6) | ||
308 | #define TCTL_OM (1<<5) | ||
309 | #define TCTL_IRQEN (1<<4) | ||
310 | #define TCTL_CLK_PCLK1 (1<<1) | ||
311 | #define TCTL_CLK_PCLK1_16 (2<<1) | ||
312 | #define TCTL_CLK_TIN (3<<1) | ||
313 | #define TCTL_CLK_32 (4<<1) | ||
314 | #define TCTL_TEN (1<<0) | ||
315 | |||
316 | #define IMX_TPRER(x) __REG( 0x04 + (x)) | ||
317 | #define IMX_TCMP(x) __REG( 0x08 + (x)) | ||
318 | #define IMX_TCR(x) __REG( 0x0C + (x)) | ||
319 | #define IMX_TCN(x) __REG( 0x10 + (x)) | ||
320 | #define IMX_TSTAT(x) __REG( 0x14 + (x)) | ||
321 | #define TSTAT_CAPT (1<<1) | ||
322 | #define TSTAT_COMP (1<<0) | ||
323 | |||
324 | /* | ||
325 | * LCD Controller | ||
326 | */ | ||
327 | |||
328 | #define LCDC_SSA __REG(IMX_LCDC_BASE+0x00) | ||
329 | |||
330 | #define LCDC_SIZE __REG(IMX_LCDC_BASE+0x04) | ||
331 | #define SIZE_XMAX(x) ((((x) >> 4) & 0x3f) << 20) | ||
332 | #define SIZE_YMAX(y) ( (y) & 0x1ff ) | ||
333 | |||
334 | #define LCDC_VPW __REG(IMX_LCDC_BASE+0x08) | ||
335 | #define VPW_VPW(x) ( (x) & 0x3ff ) | ||
336 | |||
337 | #define LCDC_CPOS __REG(IMX_LCDC_BASE+0x0C) | ||
338 | #define CPOS_CC1 (1<<31) | ||
339 | #define CPOS_CC0 (1<<30) | ||
340 | #define CPOS_OP (1<<28) | ||
341 | #define CPOS_CXP(x) (((x) & 3ff) << 16) | ||
342 | #define CPOS_CYP(y) ((y) & 0x1ff) | ||
343 | |||
344 | #define LCDC_LCWHB __REG(IMX_LCDC_BASE+0x10) | ||
345 | #define LCWHB_BK_EN (1<<31) | ||
346 | #define LCWHB_CW(w) (((w) & 0x1f) << 24) | ||
347 | #define LCWHB_CH(h) (((h) & 0x1f) << 16) | ||
348 | #define LCWHB_BD(x) ((x) & 0xff) | ||
349 | |||
350 | #define LCDC_LCHCC __REG(IMX_LCDC_BASE+0x14) | ||
351 | #define LCHCC_CUR_COL_R(r) (((r) & 0x1f) << 11) | ||
352 | #define LCHCC_CUR_COL_G(g) (((g) & 0x3f) << 5) | ||
353 | #define LCHCC_CUR_COL_B(b) ((b) & 0x1f) | ||
354 | |||
355 | #define LCDC_PCR __REG(IMX_LCDC_BASE+0x18) | ||
356 | #define PCR_TFT (1<<31) | ||
357 | #define PCR_COLOR (1<<30) | ||
358 | #define PCR_PBSIZ_1 (0<<28) | ||
359 | #define PCR_PBSIZ_2 (1<<28) | ||
360 | #define PCR_PBSIZ_4 (2<<28) | ||
361 | #define PCR_PBSIZ_8 (3<<28) | ||
362 | #define PCR_BPIX_1 (0<<25) | ||
363 | #define PCR_BPIX_2 (1<<25) | ||
364 | #define PCR_BPIX_4 (2<<25) | ||
365 | #define PCR_BPIX_8 (3<<25) | ||
366 | #define PCR_BPIX_12 (4<<25) | ||
367 | #define PCR_BPIX_16 (4<<25) | ||
368 | #define PCR_PIXPOL (1<<24) | ||
369 | #define PCR_FLMPOL (1<<23) | ||
370 | #define PCR_LPPOL (1<<22) | ||
371 | #define PCR_CLKPOL (1<<21) | ||
372 | #define PCR_OEPOL (1<<20) | ||
373 | #define PCR_SCLKIDLE (1<<19) | ||
374 | #define PCR_END_SEL (1<<18) | ||
375 | #define PCR_END_BYTE_SWAP (1<<17) | ||
376 | #define PCR_REV_VS (1<<16) | ||
377 | #define PCR_ACD_SEL (1<<15) | ||
378 | #define PCR_ACD(x) (((x) & 0x7f) << 8) | ||
379 | #define PCR_SCLK_SEL (1<<7) | ||
380 | #define PCR_SHARP (1<<6) | ||
381 | #define PCR_PCD(x) ((x) & 0x3f) | ||
382 | |||
383 | #define LCDC_HCR __REG(IMX_LCDC_BASE+0x1C) | ||
384 | #define HCR_H_WIDTH(x) (((x) & 0x3f) << 26) | ||
385 | #define HCR_H_WAIT_1(x) (((x) & 0xff) << 8) | ||
386 | #define HCR_H_WAIT_2(x) ((x) & 0xff) | ||
387 | |||
388 | #define LCDC_VCR __REG(IMX_LCDC_BASE+0x20) | ||
389 | #define VCR_V_WIDTH(x) (((x) & 0x3f) << 26) | ||
390 | #define VCR_V_WAIT_1(x) (((x) & 0xff) << 8) | ||
391 | #define VCR_V_WAIT_2(x) ((x) & 0xff) | ||
392 | |||
393 | #define LCDC_POS __REG(IMX_LCDC_BASE+0x24) | ||
394 | #define POS_POS(x) ((x) & 1f) | ||
395 | |||
396 | #define LCDC_LSCR1 __REG(IMX_LCDC_BASE+0x28) | ||
397 | #define LSCR1_PS_RISE_DELAY(x) (((x) & 0x7f) << 26) | ||
398 | #define LSCR1_CLS_RISE_DELAY(x) (((x) & 0x3f) << 16) | ||
399 | #define LSCR1_REV_TOGGLE_DELAY(x) (((x) & 0xf) << 8) | ||
400 | #define LSCR1_GRAY2(x) (((x) & 0xf) << 4) | ||
401 | #define LSCR1_GRAY1(x) (((x) & 0xf)) | ||
402 | |||
403 | #define LCDC_PWMR __REG(IMX_LCDC_BASE+0x2C) | ||
404 | #define PWMR_CLS(x) (((x) & 0x1ff) << 16) | ||
405 | #define PWMR_LDMSK (1<<15) | ||
406 | #define PWMR_SCR1 (1<<10) | ||
407 | #define PWMR_SCR0 (1<<9) | ||
408 | #define PWMR_CC_EN (1<<8) | ||
409 | #define PWMR_PW(x) ((x) & 0xff) | ||
410 | |||
411 | #define LCDC_DMACR __REG(IMX_LCDC_BASE+0x30) | ||
412 | #define DMACR_BURST (1<<31) | ||
413 | #define DMACR_HM(x) (((x) & 0xf) << 16) | ||
414 | #define DMACR_TM(x) ((x) &0xf) | ||
415 | |||
416 | #define LCDC_RMCR __REG(IMX_LCDC_BASE+0x34) | ||
417 | #define RMCR_LCDC_EN (1<<1) | ||
418 | #define RMCR_SELF_REF (1<<0) | ||
419 | |||
420 | #define LCDC_LCDICR __REG(IMX_LCDC_BASE+0x38) | ||
421 | #define LCDICR_INT_SYN (1<<2) | ||
422 | #define LCDICR_INT_CON (1) | ||
423 | |||
424 | #define LCDC_LCDISR __REG(IMX_LCDC_BASE+0x40) | ||
425 | #define LCDISR_UDR_ERR (1<<3) | ||
426 | #define LCDISR_ERR_RES (1<<2) | ||
427 | #define LCDISR_EOF (1<<1) | ||
428 | #define LCDISR_BOF (1<<0) | ||
429 | |||
430 | /* | ||
431 | * UART Module. Takes the UART base address as argument | ||
432 | */ | ||
433 | #define URXD0(x) __REG( 0x0 + (x)) /* Receiver Register */ | ||
434 | #define URTX0(x) __REG( 0x40 + (x)) /* Transmitter Register */ | ||
435 | #define UCR1(x) __REG( 0x80 + (x)) /* Control Register 1 */ | ||
436 | #define UCR2(x) __REG( 0x84 + (x)) /* Control Register 2 */ | ||
437 | #define UCR3(x) __REG( 0x88 + (x)) /* Control Register 3 */ | ||
438 | #define UCR4(x) __REG( 0x8c + (x)) /* Control Register 4 */ | ||
439 | #define UFCR(x) __REG( 0x90 + (x)) /* FIFO Control Register */ | ||
440 | #define USR1(x) __REG( 0x94 + (x)) /* Status Register 1 */ | ||
441 | #define USR2(x) __REG( 0x98 + (x)) /* Status Register 2 */ | ||
442 | #define UESC(x) __REG( 0x9c + (x)) /* Escape Character Register */ | ||
443 | #define UTIM(x) __REG( 0xa0 + (x)) /* Escape Timer Register */ | ||
444 | #define UBIR(x) __REG( 0xa4 + (x)) /* BRM Incremental Register */ | ||
445 | #define UBMR(x) __REG( 0xa8 + (x)) /* BRM Modulator Register */ | ||
446 | #define UBRC(x) __REG( 0xac + (x)) /* Baud Rate Count Register */ | ||
447 | #define BIPR1(x) __REG( 0xb0 + (x)) /* Incremental Preset Register 1 */ | ||
448 | #define BIPR2(x) __REG( 0xb4 + (x)) /* Incremental Preset Register 2 */ | ||
449 | #define BIPR3(x) __REG( 0xb8 + (x)) /* Incremental Preset Register 3 */ | ||
450 | #define BIPR4(x) __REG( 0xbc + (x)) /* Incremental Preset Register 4 */ | ||
451 | #define BMPR1(x) __REG( 0xc0 + (x)) /* BRM Modulator Register 1 */ | ||
452 | #define BMPR2(x) __REG( 0xc4 + (x)) /* BRM Modulator Register 2 */ | ||
453 | #define BMPR3(x) __REG( 0xc8 + (x)) /* BRM Modulator Register 3 */ | ||
454 | #define BMPR4(x) __REG( 0xcc + (x)) /* BRM Modulator Register 4 */ | ||
455 | #define UTS(x) __REG( 0xd0 + (x)) /* UART Test Register */ | ||
456 | |||
457 | /* UART Control Register Bit Fields.*/ | ||
458 | #define URXD_CHARRDY (1<<15) | ||
459 | #define URXD_ERR (1<<14) | ||
460 | #define URXD_OVRRUN (1<<13) | ||
461 | #define URXD_FRMERR (1<<12) | ||
462 | #define URXD_BRK (1<<11) | ||
463 | #define URXD_PRERR (1<<10) | ||
464 | #define UCR1_ADEN (1<<15) /* Auto dectect interrupt */ | ||
465 | #define UCR1_ADBR (1<<14) /* Auto detect baud rate */ | ||
466 | #define UCR1_TRDYEN (1<<13) /* Transmitter ready interrupt enable */ | ||
467 | #define UCR1_IDEN (1<<12) /* Idle condition interrupt */ | ||
468 | #define UCR1_RRDYEN (1<<9) /* Recv ready interrupt enable */ | ||
469 | #define UCR1_RDMAEN (1<<8) /* Recv ready DMA enable */ | ||
470 | #define UCR1_IREN (1<<7) /* Infrared interface enable */ | ||
471 | #define UCR1_TXMPTYEN (1<<6) /* Transimitter empty interrupt enable */ | ||
472 | #define UCR1_RTSDEN (1<<5) /* RTS delta interrupt enable */ | ||
473 | #define UCR1_SNDBRK (1<<4) /* Send break */ | ||
474 | #define UCR1_TDMAEN (1<<3) /* Transmitter ready DMA enable */ | ||
475 | #define UCR1_UARTCLKEN (1<<2) /* UART clock enabled */ | ||
476 | #define UCR1_DOZE (1<<1) /* Doze */ | ||
477 | #define UCR1_UARTEN (1<<0) /* UART enabled */ | ||
478 | #define UCR2_ESCI (1<<15) /* Escape seq interrupt enable */ | ||
479 | #define UCR2_IRTS (1<<14) /* Ignore RTS pin */ | ||
480 | #define UCR2_CTSC (1<<13) /* CTS pin control */ | ||
481 | #define UCR2_CTS (1<<12) /* Clear to send */ | ||
482 | #define UCR2_ESCEN (1<<11) /* Escape enable */ | ||
483 | #define UCR2_PREN (1<<8) /* Parity enable */ | ||
484 | #define UCR2_PROE (1<<7) /* Parity odd/even */ | ||
485 | #define UCR2_STPB (1<<6) /* Stop */ | ||
486 | #define UCR2_WS (1<<5) /* Word size */ | ||
487 | #define UCR2_RTSEN (1<<4) /* Request to send interrupt enable */ | ||
488 | #define UCR2_TXEN (1<<2) /* Transmitter enabled */ | ||
489 | #define UCR2_RXEN (1<<1) /* Receiver enabled */ | ||
490 | #define UCR2_SRST (1<<0) /* SW reset */ | ||
491 | #define UCR3_DTREN (1<<13) /* DTR interrupt enable */ | ||
492 | #define UCR3_PARERREN (1<<12) /* Parity enable */ | ||
493 | #define UCR3_FRAERREN (1<<11) /* Frame error interrupt enable */ | ||
494 | #define UCR3_DSR (1<<10) /* Data set ready */ | ||
495 | #define UCR3_DCD (1<<9) /* Data carrier detect */ | ||
496 | #define UCR3_RI (1<<8) /* Ring indicator */ | ||
497 | #define UCR3_TIMEOUTEN (1<<7) /* Timeout interrupt enable */ | ||
498 | #define UCR3_RXDSEN (1<<6) /* Receive status interrupt enable */ | ||
499 | #define UCR3_AIRINTEN (1<<5) /* Async IR wake interrupt enable */ | ||
500 | #define UCR3_AWAKEN (1<<4) /* Async wake interrupt enable */ | ||
501 | #define UCR3_REF25 (1<<3) /* Ref freq 25 MHz */ | ||
502 | #define UCR3_REF30 (1<<2) /* Ref Freq 30 MHz */ | ||
503 | #define UCR3_INVT (1<<1) /* Inverted Infrared transmission */ | ||
504 | #define UCR3_BPEN (1<<0) /* Preset registers enable */ | ||
505 | #define UCR4_CTSTL_32 (32<<10) /* CTS trigger level (32 chars) */ | ||
506 | #define UCR4_INVR (1<<9) /* Inverted infrared reception */ | ||
507 | #define UCR4_ENIRI (1<<8) /* Serial infrared interrupt enable */ | ||
508 | #define UCR4_WKEN (1<<7) /* Wake interrupt enable */ | ||
509 | #define UCR4_REF16 (1<<6) /* Ref freq 16 MHz */ | ||
510 | #define UCR4_IRSC (1<<5) /* IR special case */ | ||
511 | #define UCR4_TCEN (1<<3) /* Transmit complete interrupt enable */ | ||
512 | #define UCR4_BKEN (1<<2) /* Break condition interrupt enable */ | ||
513 | #define UCR4_OREN (1<<1) /* Receiver overrun interrupt enable */ | ||
514 | #define UCR4_DREN (1<<0) /* Recv data ready interrupt enable */ | ||
515 | #define UFCR_RXTL_SHF 0 /* Receiver trigger level shift */ | ||
516 | #define UFCR_RFDIV (7<<7) /* Reference freq divider mask */ | ||
517 | #define UFCR_TXTL_SHF 10 /* Transmitter trigger level shift */ | ||
518 | #define USR1_PARITYERR (1<<15) /* Parity error interrupt flag */ | ||
519 | #define USR1_RTSS (1<<14) /* RTS pin status */ | ||
520 | #define USR1_TRDY (1<<13) /* Transmitter ready interrupt/dma flag */ | ||
521 | #define USR1_RTSD (1<<12) /* RTS delta */ | ||
522 | #define USR1_ESCF (1<<11) /* Escape seq interrupt flag */ | ||
523 | #define USR1_FRAMERR (1<<10) /* Frame error interrupt flag */ | ||
524 | #define USR1_RRDY (1<<9) /* Receiver ready interrupt/dma flag */ | ||
525 | #define USR1_TIMEOUT (1<<7) /* Receive timeout interrupt status */ | ||
526 | #define USR1_RXDS (1<<6) /* Receiver idle interrupt flag */ | ||
527 | #define USR1_AIRINT (1<<5) /* Async IR wake interrupt flag */ | ||
528 | #define USR1_AWAKE (1<<4) /* Aysnc wake interrupt flag */ | ||
529 | #define USR2_ADET (1<<15) /* Auto baud rate detect complete */ | ||
530 | #define USR2_TXFE (1<<14) /* Transmit buffer FIFO empty */ | ||
531 | #define USR2_DTRF (1<<13) /* DTR edge interrupt flag */ | ||
532 | #define USR2_IDLE (1<<12) /* Idle condition */ | ||
533 | #define USR2_IRINT (1<<8) /* Serial infrared interrupt flag */ | ||
534 | #define USR2_WAKE (1<<7) /* Wake */ | ||
535 | #define USR2_RTSF (1<<4) /* RTS edge interrupt flag */ | ||
536 | #define USR2_TXDC (1<<3) /* Transmitter complete */ | ||
537 | #define USR2_BRCD (1<<2) /* Break condition */ | ||
538 | #define USR2_ORE (1<<1) /* Overrun error */ | ||
539 | #define USR2_RDR (1<<0) /* Recv data ready */ | ||
540 | #define UTS_FRCPERR (1<<13) /* Force parity error */ | ||
541 | #define UTS_LOOP (1<<12) /* Loop tx and rx */ | ||
542 | #define UTS_TXEMPTY (1<<6) /* TxFIFO empty */ | ||
543 | #define UTS_RXEMPTY (1<<5) /* RxFIFO empty */ | ||
544 | #define UTS_TXFULL (1<<4) /* TxFIFO full */ | ||
545 | #define UTS_RXFULL (1<<3) /* RxFIFO full */ | ||
546 | #define UTS_SOFTRST (1<<0) /* Software reset */ | ||
547 | |||
548 | #endif // _IMX_REGS_H | ||
diff --git a/include/asm-arm/arch-imx/io.h b/include/asm-arm/arch-imx/io.h new file mode 100644 index 000000000000..28a4cca6a4cb --- /dev/null +++ b/include/asm-arm/arch-imx/io.h | |||
@@ -0,0 +1,28 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-imxads/io.h | ||
3 | * | ||
4 | * Copyright (C) 1999 ARM Limited | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | * GNU General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License | ||
17 | * along with this program; if not, write to the Free Software | ||
18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
19 | */ | ||
20 | #ifndef __ASM_ARM_ARCH_IO_H | ||
21 | #define __ASM_ARM_ARCH_IO_H | ||
22 | |||
23 | #define IO_SPACE_LIMIT 0xffffffff | ||
24 | |||
25 | #define __io(a) ((void __iomem *)(a)) | ||
26 | #define __mem_pci(a) (a) | ||
27 | |||
28 | #endif | ||
diff --git a/include/asm-arm/arch-imx/irq.h b/include/asm-arm/arch-imx/irq.h new file mode 100644 index 000000000000..545e065d2325 --- /dev/null +++ b/include/asm-arm/arch-imx/irq.h | |||
@@ -0,0 +1,20 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-imxads/irq.h | ||
3 | * | ||
4 | * Copyright (C) 1999 ARM Limited | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | * GNU General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License | ||
17 | * along with this program; if not, write to the Free Software | ||
18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
19 | */ | ||
20 | #define fixup_irq(i) (i) | ||
diff --git a/include/asm-arm/arch-imx/irqs.h b/include/asm-arm/arch-imx/irqs.h new file mode 100644 index 000000000000..238197cfb9d9 --- /dev/null +++ b/include/asm-arm/arch-imx/irqs.h | |||
@@ -0,0 +1,116 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-imxads/irqs.h | ||
3 | * | ||
4 | * Copyright (C) 1999 ARM Limited | ||
5 | * Copyright (C) 2000 Deep Blue Solutions Ltd. | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License as published by | ||
9 | * the Free Software Foundation; either version 2 of the License, or | ||
10 | * (at your option) any later version. | ||
11 | * | ||
12 | * This program is distributed in the hope that it will be useful, | ||
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
15 | * GNU General Public License for more details. | ||
16 | * | ||
17 | * You should have received a copy of the GNU General Public License | ||
18 | * along with this program; if not, write to the Free Software | ||
19 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
20 | */ | ||
21 | |||
22 | #ifndef __ARM_IRQS_H__ | ||
23 | #define __ARM_IRQS_H__ | ||
24 | |||
25 | /* Use the imx definitions */ | ||
26 | #include <asm/arch/hardware.h> | ||
27 | |||
28 | /* | ||
29 | * IMX Interrupt numbers | ||
30 | * | ||
31 | */ | ||
32 | #define INT_SOFTINT 0 | ||
33 | #define CSI_INT 6 | ||
34 | #define DSPA_MAC_INT 7 | ||
35 | #define DSPA_INT 8 | ||
36 | #define COMP_INT 9 | ||
37 | #define MSHC_XINT 10 | ||
38 | #define GPIO_INT_PORTA 11 | ||
39 | #define GPIO_INT_PORTB 12 | ||
40 | #define GPIO_INT_PORTC 13 | ||
41 | #define LCDC_INT 14 | ||
42 | #define SIM_INT 15 | ||
43 | #define SIM_DATA_INT 16 | ||
44 | #define RTC_INT 17 | ||
45 | #define RTC_SAMINT 18 | ||
46 | #define UART2_MINT_PFERR 19 | ||
47 | #define UART2_MINT_RTS 20 | ||
48 | #define UART2_MINT_DTR 21 | ||
49 | #define UART2_MINT_UARTC 22 | ||
50 | #define UART2_MINT_TX 23 | ||
51 | #define UART2_MINT_RX 24 | ||
52 | #define UART1_MINT_PFERR 25 | ||
53 | #define UART1_MINT_RTS 26 | ||
54 | #define UART1_MINT_DTR 27 | ||
55 | #define UART1_MINT_UARTC 28 | ||
56 | #define UART1_MINT_TX 29 | ||
57 | #define UART1_MINT_RX 30 | ||
58 | #define VOICE_DAC_INT 31 | ||
59 | #define VOICE_ADC_INT 32 | ||
60 | #define PEN_DATA_INT 33 | ||
61 | #define PWM_INT 34 | ||
62 | #define SDHC_INT 35 | ||
63 | #define I2C_INT 39 | ||
64 | #define CSPI_INT 41 | ||
65 | #define SSI_TX_INT 42 | ||
66 | #define SSI_TX_ERR_INT 43 | ||
67 | #define SSI_RX_INT 44 | ||
68 | #define SSI_RX_ERR_INT 45 | ||
69 | #define TOUCH_INT 46 | ||
70 | #define USBD_INT0 47 | ||
71 | #define USBD_INT1 48 | ||
72 | #define USBD_INT2 49 | ||
73 | #define USBD_INT3 50 | ||
74 | #define USBD_INT4 51 | ||
75 | #define USBD_INT5 52 | ||
76 | #define USBD_INT6 53 | ||
77 | #define BTSYS_INT 55 | ||
78 | #define BTTIM_INT 56 | ||
79 | #define BTWUI_INT 57 | ||
80 | #define TIM2_INT 58 | ||
81 | #define TIM1_INT 59 | ||
82 | #define DMA_ERR 60 | ||
83 | #define DMA_INT 61 | ||
84 | #define GPIO_INT_PORTD 62 | ||
85 | |||
86 | #define IMX_IRQS (64) | ||
87 | |||
88 | /* note: the IMX has four gpio ports (A-D), but only | ||
89 | * the following pins are connected to the outside | ||
90 | * world: | ||
91 | * | ||
92 | * PORT A: bits 0-31 | ||
93 | * PORT B: bits 8-31 | ||
94 | * PORT C: bits 3-17 | ||
95 | * PORT D: bits 6-31 | ||
96 | * | ||
97 | * We map these interrupts straight on. As a result we have | ||
98 | * several holes in the interrupt mapping. We do this for two | ||
99 | * reasons: | ||
100 | * - mapping the interrupts without holes would get | ||
101 | * far more complicated | ||
102 | * - Motorola could well decide to bring some processor | ||
103 | * with more pins connected | ||
104 | */ | ||
105 | |||
106 | #define IRQ_GPIOA(x) (IMX_IRQS + x) | ||
107 | #define IRQ_GPIOB(x) (IRQ_GPIOA(32) + x) | ||
108 | #define IRQ_GPIOC(x) (IRQ_GPIOB(32) + x) | ||
109 | #define IRQ_GPIOD(x) (IRQ_GPIOC(32) + x) | ||
110 | |||
111 | /* decode irq number to use with IMR(x), ISR(x) and friends */ | ||
112 | #define IRQ_TO_REG(irq) ((irq - IMX_IRQS) >> 5) | ||
113 | |||
114 | #define NR_IRQS (IRQ_GPIOD(32) + 1) | ||
115 | #define IRQ_GPIO(x) | ||
116 | #endif | ||
diff --git a/include/asm-arm/arch-imx/memory.h b/include/asm-arm/arch-imx/memory.h new file mode 100644 index 000000000000..116a91fa14f1 --- /dev/null +++ b/include/asm-arm/arch-imx/memory.h | |||
@@ -0,0 +1,38 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-imx/memory.h | ||
3 | * | ||
4 | * Copyright (C) 1999 ARM Limited | ||
5 | * Copyright (C) 2002 Shane Nay (shane@minirl.com) | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License as published by | ||
9 | * the Free Software Foundation; either version 2 of the License, or | ||
10 | * (at your option) any later version. | ||
11 | * | ||
12 | * This program is distributed in the hope that it will be useful, | ||
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
15 | * GNU General Public License for more details. | ||
16 | * | ||
17 | * You should have received a copy of the GNU General Public License | ||
18 | * along with this program; if not, write to the Free Software | ||
19 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
20 | */ | ||
21 | #ifndef __ASM_ARCH_MMU_H | ||
22 | #define __ASM_ARCH_MMU_H | ||
23 | |||
24 | #define PHYS_OFFSET (0x08000000UL) | ||
25 | |||
26 | /* | ||
27 | * Virtual view <-> DMA view memory address translations | ||
28 | * virt_to_bus: Used to translate the virtual address to an | ||
29 | * address suitable to be passed to set_dma_addr | ||
30 | * bus_to_virt: Used to convert an address for DMA operations | ||
31 | * to an address that the kernel can use. | ||
32 | */ | ||
33 | #define __virt_to_bus__is_a_macro | ||
34 | #define __virt_to_bus(x) (x - PAGE_OFFSET + PHYS_OFFSET) | ||
35 | #define __bus_to_virt__is_a_macro | ||
36 | #define __bus_to_virt(x) (x - PHYS_OFFSET + PAGE_OFFSET) | ||
37 | |||
38 | #endif | ||
diff --git a/include/asm-arm/arch-imx/mx1ads.h b/include/asm-arm/arch-imx/mx1ads.h new file mode 100644 index 000000000000..d90fa4b49ce1 --- /dev/null +++ b/include/asm-arm/arch-imx/mx1ads.h | |||
@@ -0,0 +1,36 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-imx/mx1ads.h | ||
3 | * | ||
4 | * Copyright (C) 2004 Robert Schwebel, Pengutronix | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | * GNU General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License | ||
17 | * along with this program; if not, write to the Free Software | ||
18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
19 | * | ||
20 | */ | ||
21 | |||
22 | #ifndef __ASM_ARCH_MX1ADS_H | ||
23 | #define __ASM_ARCH_MX1ADS_H | ||
24 | |||
25 | /* ------------------------------------------------------------------------ */ | ||
26 | /* Memory Map for the M9328MX1ADS (MX1ADS) Board */ | ||
27 | /* ------------------------------------------------------------------------ */ | ||
28 | |||
29 | #define MX1ADS_FLASH_PHYS 0x10000000 | ||
30 | #define MX1ADS_FLASH_SIZE (16*1024*1024) | ||
31 | |||
32 | #define IMX_FB_PHYS (0x0C000000 - 0x40000) | ||
33 | |||
34 | #define CLK32 32000 | ||
35 | |||
36 | #endif /* __ASM_ARCH_MX1ADS_H */ | ||
diff --git a/include/asm-arm/arch-imx/param.h b/include/asm-arm/arch-imx/param.h new file mode 100644 index 000000000000..7c724f03333e --- /dev/null +++ b/include/asm-arm/arch-imx/param.h | |||
@@ -0,0 +1,19 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-imx/param.h | ||
3 | * | ||
4 | * Copyright (C) 1999 ARM Limited | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | * GNU General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License | ||
17 | * along with this program; if not, write to the Free Software | ||
18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
19 | */ | ||
diff --git a/include/asm-arm/arch-imx/system.h b/include/asm-arm/arch-imx/system.h new file mode 100644 index 000000000000..c645fe9afb9d --- /dev/null +++ b/include/asm-arm/arch-imx/system.h | |||
@@ -0,0 +1,40 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-imxads/system.h | ||
3 | * | ||
4 | * Copyright (C) 1999 ARM Limited | ||
5 | * Copyright (C) 2000 Deep Blue Solutions Ltd | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License as published by | ||
9 | * the Free Software Foundation; either version 2 of the License, or | ||
10 | * (at your option) any later version. | ||
11 | * | ||
12 | * This program is distributed in the hope that it will be useful, | ||
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
15 | * GNU General Public License for more details. | ||
16 | * | ||
17 | * You should have received a copy of the GNU General Public License | ||
18 | * along with this program; if not, write to the Free Software | ||
19 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
20 | */ | ||
21 | #ifndef __ASM_ARCH_SYSTEM_H | ||
22 | #define __ASM_ARCH_SYSTEM_H | ||
23 | |||
24 | static void | ||
25 | arch_idle(void) | ||
26 | { | ||
27 | /* | ||
28 | * This should do all the clock switching | ||
29 | * and wait for interrupt tricks | ||
30 | */ | ||
31 | cpu_do_idle(); | ||
32 | } | ||
33 | |||
34 | static inline void | ||
35 | arch_reset(char mode) | ||
36 | { | ||
37 | cpu_reset(0); | ||
38 | } | ||
39 | |||
40 | #endif | ||
diff --git a/include/asm-arm/arch-imx/timex.h b/include/asm-arm/arch-imx/timex.h new file mode 100644 index 000000000000..d65ab3cd5d5d --- /dev/null +++ b/include/asm-arm/arch-imx/timex.h | |||
@@ -0,0 +1,27 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/imx/timex.h | ||
3 | * | ||
4 | * Copyright (C) 1999 ARM Limited | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | * GNU General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License | ||
17 | * along with this program; if not, write to the Free Software | ||
18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
19 | */ | ||
20 | |||
21 | #ifndef __ASM_ARCH_TIMEX_H | ||
22 | #define __ASM_ARCH_TIMEX_H | ||
23 | |||
24 | #include <asm/arch/hardware.h> | ||
25 | #define CLOCK_TICK_RATE (CLK32) | ||
26 | |||
27 | #endif | ||
diff --git a/include/asm-arm/arch-imx/uncompress.h b/include/asm-arm/arch-imx/uncompress.h new file mode 100644 index 000000000000..096077f2750b --- /dev/null +++ b/include/asm-arm/arch-imx/uncompress.h | |||
@@ -0,0 +1,78 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-imxads/uncompress.h | ||
3 | * | ||
4 | * | ||
5 | * | ||
6 | * Copyright (C) 1999 ARM Limited | ||
7 | * Copyright (C) Shane Nay (shane@minirl.com) | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or modify | ||
10 | * it under the terms of the GNU General Public License as published by | ||
11 | * the Free Software Foundation; either version 2 of the License, or | ||
12 | * (at your option) any later version. | ||
13 | * | ||
14 | * This program is distributed in the hope that it will be useful, | ||
15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
17 | * GNU General Public License for more details. | ||
18 | * | ||
19 | * You should have received a copy of the GNU General Public License | ||
20 | * along with this program; if not, write to the Free Software | ||
21 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
22 | */ | ||
23 | |||
24 | #define UART(x) (*(volatile unsigned long *)(serial_port + (x))) | ||
25 | |||
26 | #define UART1_BASE 0x206000 | ||
27 | #define UART2_BASE 0x207000 | ||
28 | #define USR2 0x98 | ||
29 | #define USR2_TXFE (1<<14) | ||
30 | #define TXR 0x40 | ||
31 | #define UCR1 0x80 | ||
32 | #define UCR1_UARTEN 1 | ||
33 | |||
34 | /* | ||
35 | * The following code assumes the serial port has already been | ||
36 | * initialized by the bootloader. We search for the first enabled | ||
37 | * port in the most probable order. If you didn't setup a port in | ||
38 | * your bootloader then nothing will appear (which might be desired). | ||
39 | * | ||
40 | * This does not append a newline | ||
41 | */ | ||
42 | static void | ||
43 | putstr(const char *s) | ||
44 | { | ||
45 | unsigned long serial_port; | ||
46 | |||
47 | do { | ||
48 | serial_port = UART1_BASE; | ||
49 | if ( UART(UCR1) & UCR1_UARTEN ) | ||
50 | break; | ||
51 | serial_port = UART2_BASE; | ||
52 | if ( UART(UCR1) & UCR1_UARTEN ) | ||
53 | break; | ||
54 | return; | ||
55 | } while(0); | ||
56 | |||
57 | while (*s) { | ||
58 | while ( !(UART(USR2) & USR2_TXFE) ) | ||
59 | barrier(); | ||
60 | |||
61 | UART(TXR) = *s; | ||
62 | |||
63 | if (*s == '\n') { | ||
64 | while ( !(UART(USR2) & USR2_TXFE) ) | ||
65 | barrier(); | ||
66 | |||
67 | UART(TXR) = '\r'; | ||
68 | } | ||
69 | s++; | ||
70 | } | ||
71 | } | ||
72 | |||
73 | /* | ||
74 | * nothing to do | ||
75 | */ | ||
76 | #define arch_decomp_setup() | ||
77 | |||
78 | #define arch_decomp_wdog() | ||
diff --git a/include/asm-arm/arch-imx/vmalloc.h b/include/asm-arm/arch-imx/vmalloc.h new file mode 100644 index 000000000000..252038f48163 --- /dev/null +++ b/include/asm-arm/arch-imx/vmalloc.h | |||
@@ -0,0 +1,32 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-imx/vmalloc.h | ||
3 | * | ||
4 | * Copyright (C) 2000 Russell King. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | * GNU General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License | ||
17 | * along with this program; if not, write to the Free Software | ||
18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
19 | */ | ||
20 | |||
21 | /* | ||
22 | * Just any arbitrary offset to the start of the vmalloc VM area: the | ||
23 | * current 8MB value just means that there will be a 8MB "hole" after the | ||
24 | * physical memory until the kernel virtual memory starts. That means that | ||
25 | * any out-of-bounds memory accesses will hopefully be caught. | ||
26 | * The vmalloc() routines leaves a hole of 4kB between each vmalloced | ||
27 | * area for the same reason. ;) | ||
28 | */ | ||
29 | #define VMALLOC_OFFSET (8*1024*1024) | ||
30 | #define VMALLOC_START (((unsigned long)high_memory + VMALLOC_OFFSET) & ~(VMALLOC_OFFSET-1)) | ||
31 | #define VMALLOC_VMADDR(x) ((unsigned long)(x)) | ||
32 | #define VMALLOC_END (PAGE_OFFSET + 0x10000000) | ||
diff --git a/include/asm-arm/arch-integrator/bits.h b/include/asm-arm/arch-integrator/bits.h new file mode 100644 index 000000000000..09b024e0496a --- /dev/null +++ b/include/asm-arm/arch-integrator/bits.h | |||
@@ -0,0 +1,61 @@ | |||
1 | /* | ||
2 | * This program is free software; you can redistribute it and/or modify | ||
3 | * it under the terms of the GNU General Public License as published by | ||
4 | * the Free Software Foundation; either version 2 of the License, or | ||
5 | * (at your option) any later version. | ||
6 | * | ||
7 | * This program is distributed in the hope that it will be useful, | ||
8 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
9 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
10 | * GNU General Public License for more details. | ||
11 | * | ||
12 | * You should have received a copy of the GNU General Public License | ||
13 | * along with this program; if not, write to the Free Software | ||
14 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
15 | */ | ||
16 | /* DO NOT EDIT!! - this file automatically generated | ||
17 | * from .s file by awk -f s2h.awk | ||
18 | */ | ||
19 | /* Bit field definitions | ||
20 | * Copyright (C) ARM Limited 1998. All rights reserved. | ||
21 | */ | ||
22 | |||
23 | #ifndef __bits_h | ||
24 | #define __bits_h 1 | ||
25 | |||
26 | #define BIT0 0x00000001 | ||
27 | #define BIT1 0x00000002 | ||
28 | #define BIT2 0x00000004 | ||
29 | #define BIT3 0x00000008 | ||
30 | #define BIT4 0x00000010 | ||
31 | #define BIT5 0x00000020 | ||
32 | #define BIT6 0x00000040 | ||
33 | #define BIT7 0x00000080 | ||
34 | #define BIT8 0x00000100 | ||
35 | #define BIT9 0x00000200 | ||
36 | #define BIT10 0x00000400 | ||
37 | #define BIT11 0x00000800 | ||
38 | #define BIT12 0x00001000 | ||
39 | #define BIT13 0x00002000 | ||
40 | #define BIT14 0x00004000 | ||
41 | #define BIT15 0x00008000 | ||
42 | #define BIT16 0x00010000 | ||
43 | #define BIT17 0x00020000 | ||
44 | #define BIT18 0x00040000 | ||
45 | #define BIT19 0x00080000 | ||
46 | #define BIT20 0x00100000 | ||
47 | #define BIT21 0x00200000 | ||
48 | #define BIT22 0x00400000 | ||
49 | #define BIT23 0x00800000 | ||
50 | #define BIT24 0x01000000 | ||
51 | #define BIT25 0x02000000 | ||
52 | #define BIT26 0x04000000 | ||
53 | #define BIT27 0x08000000 | ||
54 | #define BIT28 0x10000000 | ||
55 | #define BIT29 0x20000000 | ||
56 | #define BIT30 0x40000000 | ||
57 | #define BIT31 0x80000000 | ||
58 | |||
59 | #endif | ||
60 | |||
61 | /* END */ | ||
diff --git a/include/asm-arm/arch-integrator/cm.h b/include/asm-arm/arch-integrator/cm.h new file mode 100644 index 000000000000..d31c1a71f781 --- /dev/null +++ b/include/asm-arm/arch-integrator/cm.h | |||
@@ -0,0 +1,36 @@ | |||
1 | /* | ||
2 | * update the core module control register. | ||
3 | */ | ||
4 | void cm_control(u32, u32); | ||
5 | |||
6 | #define CM_CTRL_LED (1 << 0) | ||
7 | #define CM_CTRL_nMBDET (1 << 1) | ||
8 | #define CM_CTRL_REMAP (1 << 2) | ||
9 | #define CM_CTRL_RESET (1 << 3) | ||
10 | |||
11 | /* | ||
12 | * Integrator/AP,PP2 specific | ||
13 | */ | ||
14 | #define CM_CTRL_HIGHVECTORS (1 << 4) | ||
15 | #define CM_CTRL_BIGENDIAN (1 << 5) | ||
16 | #define CM_CTRL_FASTBUS (1 << 6) | ||
17 | #define CM_CTRL_SYNC (1 << 7) | ||
18 | |||
19 | /* | ||
20 | * ARM926/946/966 Integrator/CP specific | ||
21 | */ | ||
22 | #define CM_CTRL_LCDBIASEN (1 << 8) | ||
23 | #define CM_CTRL_LCDBIASUP (1 << 9) | ||
24 | #define CM_CTRL_LCDBIASDN (1 << 10) | ||
25 | #define CM_CTRL_LCDMUXSEL_MASK (7 << 11) | ||
26 | #define CM_CTRL_LCDMUXSEL_GENLCD (1 << 11) | ||
27 | #define CM_CTRL_LCDMUXSEL_SHARPLCD1 (3 << 11) | ||
28 | #define CM_CTRL_LCDMUXSEL_SHARPLCD2 (4 << 11) | ||
29 | #define CM_CTRL_LCDMUXSEL_VGA (7 << 11) | ||
30 | #define CM_CTRL_LCDEN0 (1 << 14) | ||
31 | #define CM_CTRL_LCDEN1 (1 << 15) | ||
32 | #define CM_CTRL_STATIC1 (1 << 16) | ||
33 | #define CM_CTRL_STATIC2 (1 << 17) | ||
34 | #define CM_CTRL_STATIC (1 << 18) | ||
35 | #define CM_CTRL_n24BITEN (1 << 19) | ||
36 | #define CM_CTRL_EBIWP (1 << 20) | ||
diff --git a/include/asm-arm/arch-integrator/debug-macro.S b/include/asm-arm/arch-integrator/debug-macro.S new file mode 100644 index 000000000000..484a1aa47098 --- /dev/null +++ b/include/asm-arm/arch-integrator/debug-macro.S | |||
@@ -0,0 +1,38 @@ | |||
1 | /* linux/include/asm-arm/arch-integrator/debug-macro.S | ||
2 | * | ||
3 | * Debugging macro include header | ||
4 | * | ||
5 | * Copyright (C) 1994-1999 Russell King | ||
6 | * Moved from linux/arch/arm/kernel/debug.S by Ben Dooks | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | * | ||
12 | */ | ||
13 | |||
14 | #include <asm/hardware/amba_serial.h> | ||
15 | |||
16 | .macro addruart,rx | ||
17 | mrc p15, 0, \rx, c1, c0 | ||
18 | tst \rx, #1 @ MMU enabled? | ||
19 | moveq \rx, #0x16000000 @ physical base address | ||
20 | movne \rx, #0xf0000000 @ virtual base | ||
21 | addne \rx, \rx, #0x16000000 >> 4 | ||
22 | .endm | ||
23 | |||
24 | .macro senduart,rd,rx | ||
25 | strb \rd, [\rx, #UART01x_DR] | ||
26 | .endm | ||
27 | |||
28 | .macro waituart,rd,rx | ||
29 | 1001: ldr \rd, [\rx, #0x18] @ UARTFLG | ||
30 | tst \rd, #1 << 5 @ UARTFLGUTXFF - 1 when full | ||
31 | bne 1001b | ||
32 | .endm | ||
33 | |||
34 | .macro busyuart,rd,rx | ||
35 | 1001: ldr \rd, [\rx, #0x18] @ UARTFLG | ||
36 | tst \rd, #1 << 3 @ UARTFLGUBUSY - 1 when busy | ||
37 | bne 1001b | ||
38 | .endm | ||
diff --git a/include/asm-arm/arch-integrator/dma.h b/include/asm-arm/arch-integrator/dma.h new file mode 100644 index 000000000000..7171792290bd --- /dev/null +++ b/include/asm-arm/arch-integrator/dma.h | |||
@@ -0,0 +1,28 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-integrator/dma.h | ||
3 | * | ||
4 | * Copyright (C) 1997,1998 Russell King | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | * GNU General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License | ||
17 | * along with this program; if not, write to the Free Software | ||
18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
19 | */ | ||
20 | #ifndef __ASM_ARCH_DMA_H | ||
21 | #define __ASM_ARCH_DMA_H | ||
22 | |||
23 | #define MAX_DMA_ADDRESS 0xffffffff | ||
24 | |||
25 | #define MAX_DMA_CHANNELS 0 | ||
26 | |||
27 | #endif /* _ASM_ARCH_DMA_H */ | ||
28 | |||
diff --git a/include/asm-arm/arch-integrator/entry-macro.S b/include/asm-arm/arch-integrator/entry-macro.S new file mode 100644 index 000000000000..44f7ee613194 --- /dev/null +++ b/include/asm-arm/arch-integrator/entry-macro.S | |||
@@ -0,0 +1,36 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-integrator/entry-macro.S | ||
3 | * | ||
4 | * Low-level IRQ helper macros for Integrator platforms | ||
5 | * | ||
6 | * This file is licensed under the terms of the GNU General Public | ||
7 | * License version 2. This program is licensed "as is" without any | ||
8 | * warranty of any kind, whether express or implied. | ||
9 | */ | ||
10 | |||
11 | .macro disable_fiq | ||
12 | .endm | ||
13 | |||
14 | .macro get_irqnr_and_base, irqnr, irqstat, base, tmp | ||
15 | /* FIXME: should not be using soo many LDRs here */ | ||
16 | ldr \base, =IO_ADDRESS(INTEGRATOR_IC_BASE) | ||
17 | mov \irqnr, #IRQ_PIC_START | ||
18 | ldr \irqstat, [\base, #IRQ_STATUS] @ get masked status | ||
19 | ldr \base, =IO_ADDRESS(INTEGRATOR_HDR_BASE) | ||
20 | teq \irqstat, #0 | ||
21 | ldreq \irqstat, [\base, #(INTEGRATOR_HDR_IC_OFFSET+IRQ_STATUS)] | ||
22 | moveq \irqnr, #IRQ_CIC_START | ||
23 | |||
24 | 1001: tst \irqstat, #15 | ||
25 | bne 1002f | ||
26 | add \irqnr, \irqnr, #4 | ||
27 | movs \irqstat, \irqstat, lsr #4 | ||
28 | bne 1001b | ||
29 | 1002: tst \irqstat, #1 | ||
30 | bne 1003f | ||
31 | add \irqnr, \irqnr, #1 | ||
32 | movs \irqstat, \irqstat, lsr #1 | ||
33 | bne 1002b | ||
34 | 1003: /* EQ will be set if no irqs pending */ | ||
35 | .endm | ||
36 | |||
diff --git a/include/asm-arm/arch-integrator/hardware.h b/include/asm-arm/arch-integrator/hardware.h new file mode 100644 index 000000000000..be2716eeaa02 --- /dev/null +++ b/include/asm-arm/arch-integrator/hardware.h | |||
@@ -0,0 +1,57 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-integrator/hardware.h | ||
3 | * | ||
4 | * This file contains the hardware definitions of the Integrator. | ||
5 | * | ||
6 | * Copyright (C) 1999 ARM Limited. | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License as published by | ||
10 | * the Free Software Foundation; either version 2 of the License, or | ||
11 | * (at your option) any later version. | ||
12 | * | ||
13 | * This program is distributed in the hope that it will be useful, | ||
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
16 | * GNU General Public License for more details. | ||
17 | * | ||
18 | * You should have received a copy of the GNU General Public License | ||
19 | * along with this program; if not, write to the Free Software | ||
20 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
21 | */ | ||
22 | #ifndef __ASM_ARCH_HARDWARE_H | ||
23 | #define __ASM_ARCH_HARDWARE_H | ||
24 | |||
25 | #include <asm/sizes.h> | ||
26 | #include <asm/arch/platform.h> | ||
27 | |||
28 | /* | ||
29 | * Where in virtual memory the IO devices (timers, system controllers | ||
30 | * and so on) | ||
31 | */ | ||
32 | #define IO_BASE 0xF0000000 // VA of IO | ||
33 | #define IO_SIZE 0x0B000000 // How much? | ||
34 | #define IO_START INTEGRATOR_HDR_BASE // PA of IO | ||
35 | |||
36 | /* | ||
37 | * Similar to above, but for PCI addresses (memory, IO, Config and the | ||
38 | * V3 chip itself). WARNING: this has to mirror definitions in platform.h | ||
39 | */ | ||
40 | #define PCI_MEMORY_VADDR 0xe8000000 | ||
41 | #define PCI_CONFIG_VADDR 0xec000000 | ||
42 | #define PCI_V3_VADDR 0xed000000 | ||
43 | #define PCI_IO_VADDR 0xee000000 | ||
44 | |||
45 | #define PCIO_BASE PCI_IO_VADDR | ||
46 | #define PCIMEM_BASE PCI_MEMORY_VADDR | ||
47 | |||
48 | /* macro to get at IO space when running virtually */ | ||
49 | #define IO_ADDRESS(x) (((x) >> 4) + IO_BASE) | ||
50 | |||
51 | #define pcibios_assign_all_busses() 1 | ||
52 | |||
53 | #define PCIBIOS_MIN_IO 0x6000 | ||
54 | #define PCIBIOS_MIN_MEM 0x00100000 | ||
55 | |||
56 | #endif | ||
57 | |||
diff --git a/include/asm-arm/arch-integrator/impd1.h b/include/asm-arm/arch-integrator/impd1.h new file mode 100644 index 000000000000..d75de4b14237 --- /dev/null +++ b/include/asm-arm/arch-integrator/impd1.h | |||
@@ -0,0 +1,18 @@ | |||
1 | #define IMPD1_OSC1 0x00 | ||
2 | #define IMPD1_OSC2 0x04 | ||
3 | #define IMPD1_LOCK 0x08 | ||
4 | #define IMPD1_LEDS 0x0c | ||
5 | #define IMPD1_INT 0x10 | ||
6 | #define IMPD1_SW 0x14 | ||
7 | #define IMPD1_CTRL 0x18 | ||
8 | |||
9 | #define IMPD1_CTRL_DISP_LCD (0 << 0) | ||
10 | #define IMPD1_CTRL_DISP_VGA (1 << 0) | ||
11 | #define IMPD1_CTRL_DISP_LCD1 (2 << 0) | ||
12 | #define IMPD1_CTRL_DISP_ENABLE (1 << 2) | ||
13 | #define IMPD1_CTRL_DISP_MASK (7 << 0) | ||
14 | |||
15 | struct device; | ||
16 | |||
17 | void impd1_tweak_control(struct device *dev, u32 mask, u32 val); | ||
18 | |||
diff --git a/include/asm-arm/arch-integrator/io.h b/include/asm-arm/arch-integrator/io.h new file mode 100644 index 000000000000..fbea8be67d26 --- /dev/null +++ b/include/asm-arm/arch-integrator/io.h | |||
@@ -0,0 +1,29 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-integrator/io.h | ||
3 | * | ||
4 | * Copyright (C) 1999 ARM Limited | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | * GNU General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License | ||
17 | * along with this program; if not, write to the Free Software | ||
18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
19 | */ | ||
20 | #ifndef __ASM_ARM_ARCH_IO_H | ||
21 | #define __ASM_ARM_ARCH_IO_H | ||
22 | |||
23 | #define IO_SPACE_LIMIT 0xffff | ||
24 | |||
25 | #define __io(a) ((void __iomem *)(PCI_IO_VADDR + (a))) | ||
26 | #define __mem_pci(a) (a) | ||
27 | #define __mem_isa(a) ((a) + PCI_MEMORY_VADDR) | ||
28 | |||
29 | #endif | ||
diff --git a/include/asm-arm/arch-integrator/irqs.h b/include/asm-arm/arch-integrator/irqs.h new file mode 100644 index 000000000000..ba7b3afee445 --- /dev/null +++ b/include/asm-arm/arch-integrator/irqs.h | |||
@@ -0,0 +1,82 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-integrator/irqs.h | ||
3 | * | ||
4 | * Copyright (C) 1999 ARM Limited | ||
5 | * Copyright (C) 2000 Deep Blue Solutions Ltd. | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License as published by | ||
9 | * the Free Software Foundation; either version 2 of the License, or | ||
10 | * (at your option) any later version. | ||
11 | * | ||
12 | * This program is distributed in the hope that it will be useful, | ||
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
15 | * GNU General Public License for more details. | ||
16 | * | ||
17 | * You should have received a copy of the GNU General Public License | ||
18 | * along with this program; if not, write to the Free Software | ||
19 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
20 | */ | ||
21 | |||
22 | /* | ||
23 | * Interrupt numbers | ||
24 | */ | ||
25 | #define IRQ_PIC_START 0 | ||
26 | #define IRQ_SOFTINT 0 | ||
27 | #define IRQ_UARTINT0 1 | ||
28 | #define IRQ_UARTINT1 2 | ||
29 | #define IRQ_KMIINT0 3 | ||
30 | #define IRQ_KMIINT1 4 | ||
31 | #define IRQ_TIMERINT0 5 | ||
32 | #define IRQ_TIMERINT1 6 | ||
33 | #define IRQ_TIMERINT2 7 | ||
34 | #define IRQ_RTCINT 8 | ||
35 | #define IRQ_AP_EXPINT0 9 | ||
36 | #define IRQ_AP_EXPINT1 10 | ||
37 | #define IRQ_AP_EXPINT2 11 | ||
38 | #define IRQ_AP_EXPINT3 12 | ||
39 | #define IRQ_AP_PCIINT0 13 | ||
40 | #define IRQ_AP_PCIINT1 14 | ||
41 | #define IRQ_AP_PCIINT2 15 | ||
42 | #define IRQ_AP_PCIINT3 16 | ||
43 | #define IRQ_AP_V3INT 17 | ||
44 | #define IRQ_AP_CPINT0 18 | ||
45 | #define IRQ_AP_CPINT1 19 | ||
46 | #define IRQ_AP_LBUSTIMEOUT 20 | ||
47 | #define IRQ_AP_APCINT 21 | ||
48 | #define IRQ_CP_CLCDCINT 22 | ||
49 | #define IRQ_CP_MMCIINT0 23 | ||
50 | #define IRQ_CP_MMCIINT1 24 | ||
51 | #define IRQ_CP_AACIINT 25 | ||
52 | #define IRQ_CP_CPPLDINT 26 | ||
53 | #define IRQ_CP_ETHINT 27 | ||
54 | #define IRQ_CP_TSPENINT 28 | ||
55 | #define IRQ_PIC_END 31 | ||
56 | |||
57 | #define IRQ_CIC_START 32 | ||
58 | #define IRQ_CM_SOFTINT 32 | ||
59 | #define IRQ_CM_COMMRX 33 | ||
60 | #define IRQ_CM_COMMTX 34 | ||
61 | #define IRQ_CIC_END 34 | ||
62 | |||
63 | /* | ||
64 | * IntegratorCP only | ||
65 | */ | ||
66 | #define IRQ_SIC_START 35 | ||
67 | #define IRQ_SIC_CP_SOFTINT 35 | ||
68 | #define IRQ_SIC_CP_RI0 36 | ||
69 | #define IRQ_SIC_CP_RI1 37 | ||
70 | #define IRQ_SIC_CP_CARDIN 38 | ||
71 | #define IRQ_SIC_CP_LMINT0 39 | ||
72 | #define IRQ_SIC_CP_LMINT1 40 | ||
73 | #define IRQ_SIC_CP_LMINT2 41 | ||
74 | #define IRQ_SIC_CP_LMINT3 42 | ||
75 | #define IRQ_SIC_CP_LMINT4 43 | ||
76 | #define IRQ_SIC_CP_LMINT5 44 | ||
77 | #define IRQ_SIC_CP_LMINT6 45 | ||
78 | #define IRQ_SIC_CP_LMINT7 46 | ||
79 | #define IRQ_SIC_END 46 | ||
80 | |||
81 | #define NR_IRQS 47 | ||
82 | |||
diff --git a/include/asm-arm/arch-integrator/lm.h b/include/asm-arm/arch-integrator/lm.h new file mode 100644 index 000000000000..28186b6f2c09 --- /dev/null +++ b/include/asm-arm/arch-integrator/lm.h | |||
@@ -0,0 +1,23 @@ | |||
1 | |||
2 | struct lm_device { | ||
3 | struct device dev; | ||
4 | struct resource resource; | ||
5 | unsigned int irq; | ||
6 | unsigned int id; | ||
7 | }; | ||
8 | |||
9 | struct lm_driver { | ||
10 | struct device_driver drv; | ||
11 | int (*probe)(struct lm_device *); | ||
12 | void (*remove)(struct lm_device *); | ||
13 | int (*suspend)(struct lm_device *, pm_message_t); | ||
14 | int (*resume)(struct lm_device *); | ||
15 | }; | ||
16 | |||
17 | int lm_driver_register(struct lm_driver *drv); | ||
18 | void lm_driver_unregister(struct lm_driver *drv); | ||
19 | |||
20 | int lm_device_register(struct lm_device *dev); | ||
21 | |||
22 | #define lm_get_drvdata(lm) dev_get_drvdata(&(lm)->dev) | ||
23 | #define lm_set_drvdata(lm,d) dev_set_drvdata(&(lm)->dev, d) | ||
diff --git a/include/asm-arm/arch-integrator/memory.h b/include/asm-arm/arch-integrator/memory.h new file mode 100644 index 000000000000..2087ea7d28a9 --- /dev/null +++ b/include/asm-arm/arch-integrator/memory.h | |||
@@ -0,0 +1,39 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-integrator/memory.h | ||
3 | * | ||
4 | * Copyright (C) 1999 ARM Limited | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | * GNU General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License | ||
17 | * along with this program; if not, write to the Free Software | ||
18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
19 | */ | ||
20 | #ifndef __ASM_ARCH_MEMORY_H | ||
21 | #define __ASM_ARCH_MEMORY_H | ||
22 | |||
23 | /* | ||
24 | * Physical DRAM offset. | ||
25 | */ | ||
26 | #define PHYS_OFFSET (0x00000000UL) | ||
27 | #define BUS_OFFSET (0x80000000UL) | ||
28 | |||
29 | /* | ||
30 | * Virtual view <-> DMA view memory address translations | ||
31 | * virt_to_bus: Used to translate the virtual address to an | ||
32 | * address suitable to be passed to set_dma_addr | ||
33 | * bus_to_virt: Used to convert an address for DMA operations | ||
34 | * to an address that the kernel can use. | ||
35 | */ | ||
36 | #define __virt_to_bus(x) (x - PAGE_OFFSET + BUS_OFFSET) | ||
37 | #define __bus_to_virt(x) (x - BUS_OFFSET + PAGE_OFFSET) | ||
38 | |||
39 | #endif | ||
diff --git a/include/asm-arm/arch-integrator/param.h b/include/asm-arm/arch-integrator/param.h new file mode 100644 index 000000000000..afa582ff3717 --- /dev/null +++ b/include/asm-arm/arch-integrator/param.h | |||
@@ -0,0 +1,19 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-integrator/param.h | ||
3 | * | ||
4 | * Copyright (C) 1999 ARM Limited | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | * GNU General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License | ||
17 | * along with this program; if not, write to the Free Software | ||
18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
19 | */ | ||
diff --git a/include/asm-arm/arch-integrator/platform.h b/include/asm-arm/arch-integrator/platform.h new file mode 100644 index 000000000000..6b67e41669f4 --- /dev/null +++ b/include/asm-arm/arch-integrator/platform.h | |||
@@ -0,0 +1,465 @@ | |||
1 | /* | ||
2 | * This program is free software; you can redistribute it and/or modify | ||
3 | * it under the terms of the GNU General Public License as published by | ||
4 | * the Free Software Foundation; either version 2 of the License, or | ||
5 | * (at your option) any later version. | ||
6 | * | ||
7 | * This program is distributed in the hope that it will be useful, | ||
8 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
9 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
10 | * GNU General Public License for more details. | ||
11 | * | ||
12 | * You should have received a copy of the GNU General Public License | ||
13 | * along with this program; if not, write to the Free Software | ||
14 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
15 | */ | ||
16 | /* DO NOT EDIT!! - this file automatically generated | ||
17 | * from .s file by awk -f s2h.awk | ||
18 | */ | ||
19 | /************************************************************************** | ||
20 | * * Copyright © ARM Limited 1998. All rights reserved. | ||
21 | * ***********************************************************************/ | ||
22 | /* ************************************************************************ | ||
23 | * | ||
24 | * Integrator address map | ||
25 | * | ||
26 | * NOTE: This is a multi-hosted header file for use with uHAL and | ||
27 | * supported debuggers. | ||
28 | * | ||
29 | * $Id: platform.s,v 1.32 2000/02/18 10:51:39 asims Exp $ | ||
30 | * | ||
31 | * ***********************************************************************/ | ||
32 | |||
33 | #ifndef __address_h | ||
34 | #define __address_h 1 | ||
35 | |||
36 | /* ======================================================================== | ||
37 | * Integrator definitions | ||
38 | * ======================================================================== | ||
39 | * ------------------------------------------------------------------------ | ||
40 | * Memory definitions | ||
41 | * ------------------------------------------------------------------------ | ||
42 | * Integrator memory map | ||
43 | * | ||
44 | */ | ||
45 | #define INTEGRATOR_BOOT_ROM_LO 0x00000000 | ||
46 | #define INTEGRATOR_BOOT_ROM_HI 0x20000000 | ||
47 | #define INTEGRATOR_BOOT_ROM_BASE INTEGRATOR_BOOT_ROM_HI /* Normal position */ | ||
48 | #define INTEGRATOR_BOOT_ROM_SIZE SZ_512K | ||
49 | |||
50 | /* | ||
51 | * New Core Modules have different amounts of SSRAM, the amount of SSRAM | ||
52 | * fitted can be found in HDR_STAT. | ||
53 | * | ||
54 | * The symbol INTEGRATOR_SSRAM_SIZE is kept, however this now refers to | ||
55 | * the minimum amount of SSRAM fitted on any core module. | ||
56 | * | ||
57 | * New Core Modules also alias the SSRAM. | ||
58 | * | ||
59 | */ | ||
60 | #define INTEGRATOR_SSRAM_BASE 0x00000000 | ||
61 | #define INTEGRATOR_SSRAM_ALIAS_BASE 0x10800000 | ||
62 | #define INTEGRATOR_SSRAM_SIZE SZ_256K | ||
63 | |||
64 | #define INTEGRATOR_FLASH_BASE 0x24000000 | ||
65 | #define INTEGRATOR_FLASH_SIZE SZ_32M | ||
66 | |||
67 | #define INTEGRATOR_MBRD_SSRAM_BASE 0x28000000 | ||
68 | #define INTEGRATOR_MBRD_SSRAM_SIZE SZ_512K | ||
69 | |||
70 | /* | ||
71 | * SDRAM is a SIMM therefore the size is not known. | ||
72 | * | ||
73 | */ | ||
74 | #define INTEGRATOR_SDRAM_BASE 0x00040000 | ||
75 | |||
76 | #define INTEGRATOR_SDRAM_ALIAS_BASE 0x80000000 | ||
77 | #define INTEGRATOR_HDR0_SDRAM_BASE 0x80000000 | ||
78 | #define INTEGRATOR_HDR1_SDRAM_BASE 0x90000000 | ||
79 | #define INTEGRATOR_HDR2_SDRAM_BASE 0xA0000000 | ||
80 | #define INTEGRATOR_HDR3_SDRAM_BASE 0xB0000000 | ||
81 | |||
82 | /* | ||
83 | * Logic expansion modules | ||
84 | * | ||
85 | */ | ||
86 | #define INTEGRATOR_LOGIC_MODULES_BASE 0xC0000000 | ||
87 | #define INTEGRATOR_LOGIC_MODULE0_BASE 0xC0000000 | ||
88 | #define INTEGRATOR_LOGIC_MODULE1_BASE 0xD0000000 | ||
89 | #define INTEGRATOR_LOGIC_MODULE2_BASE 0xE0000000 | ||
90 | #define INTEGRATOR_LOGIC_MODULE3_BASE 0xF0000000 | ||
91 | |||
92 | /* ------------------------------------------------------------------------ | ||
93 | * Integrator header card registers | ||
94 | * ------------------------------------------------------------------------ | ||
95 | * | ||
96 | */ | ||
97 | #define INTEGRATOR_HDR_ID_OFFSET 0x00 | ||
98 | #define INTEGRATOR_HDR_PROC_OFFSET 0x04 | ||
99 | #define INTEGRATOR_HDR_OSC_OFFSET 0x08 | ||
100 | #define INTEGRATOR_HDR_CTRL_OFFSET 0x0C | ||
101 | #define INTEGRATOR_HDR_STAT_OFFSET 0x10 | ||
102 | #define INTEGRATOR_HDR_LOCK_OFFSET 0x14 | ||
103 | #define INTEGRATOR_HDR_SDRAM_OFFSET 0x20 | ||
104 | #define INTEGRATOR_HDR_INIT_OFFSET 0x24 /* CM9x6 */ | ||
105 | #define INTEGRATOR_HDR_IC_OFFSET 0x40 | ||
106 | #define INTEGRATOR_HDR_SPDBASE_OFFSET 0x100 | ||
107 | #define INTEGRATOR_HDR_SPDTOP_OFFSET 0x200 | ||
108 | |||
109 | #define INTEGRATOR_HDR_BASE 0x10000000 | ||
110 | #define INTEGRATOR_HDR_ID (INTEGRATOR_HDR_BASE + INTEGRATOR_HDR_ID_OFFSET) | ||
111 | #define INTEGRATOR_HDR_PROC (INTEGRATOR_HDR_BASE + INTEGRATOR_HDR_PROC_OFFSET) | ||
112 | #define INTEGRATOR_HDR_OSC (INTEGRATOR_HDR_BASE + INTEGRATOR_HDR_OSC_OFFSET) | ||
113 | #define INTEGRATOR_HDR_CTRL (INTEGRATOR_HDR_BASE + INTEGRATOR_HDR_CTRL_OFFSET) | ||
114 | #define INTEGRATOR_HDR_STAT (INTEGRATOR_HDR_BASE + INTEGRATOR_HDR_STAT_OFFSET) | ||
115 | #define INTEGRATOR_HDR_LOCK (INTEGRATOR_HDR_BASE + INTEGRATOR_HDR_LOCK_OFFSET) | ||
116 | #define INTEGRATOR_HDR_SDRAM (INTEGRATOR_HDR_BASE + INTEGRATOR_HDR_SDRAM_OFFSET) | ||
117 | #define INTEGRATOR_HDR_INIT (INTEGRATOR_HDR_BASE + INTEGRATOR_HDR_INIT_OFFSET) | ||
118 | #define INTEGRATOR_HDR_IC (INTEGRATOR_HDR_BASE + INTEGRATOR_HDR_IC_OFFSET) | ||
119 | #define INTEGRATOR_HDR_SPDBASE (INTEGRATOR_HDR_BASE + INTEGRATOR_HDR_SPDBASE_OFFSET) | ||
120 | #define INTEGRATOR_HDR_SPDTOP (INTEGRATOR_HDR_BASE + INTEGRATOR_HDR_SPDTOP_OFFSET) | ||
121 | |||
122 | #define INTEGRATOR_HDR_CTRL_LED 0x01 | ||
123 | #define INTEGRATOR_HDR_CTRL_MBRD_DETECH 0x02 | ||
124 | #define INTEGRATOR_HDR_CTRL_REMAP 0x04 | ||
125 | #define INTEGRATOR_HDR_CTRL_RESET 0x08 | ||
126 | #define INTEGRATOR_HDR_CTRL_HIGHVECTORS 0x10 | ||
127 | #define INTEGRATOR_HDR_CTRL_BIG_ENDIAN 0x20 | ||
128 | #define INTEGRATOR_HDR_CTRL_FASTBUS 0x40 | ||
129 | #define INTEGRATOR_HDR_CTRL_SYNC 0x80 | ||
130 | |||
131 | #define INTEGRATOR_HDR_OSC_CORE_10MHz 0x102 | ||
132 | #define INTEGRATOR_HDR_OSC_CORE_15MHz 0x107 | ||
133 | #define INTEGRATOR_HDR_OSC_CORE_20MHz 0x10C | ||
134 | #define INTEGRATOR_HDR_OSC_CORE_25MHz 0x111 | ||
135 | #define INTEGRATOR_HDR_OSC_CORE_30MHz 0x116 | ||
136 | #define INTEGRATOR_HDR_OSC_CORE_35MHz 0x11B | ||
137 | #define INTEGRATOR_HDR_OSC_CORE_40MHz 0x120 | ||
138 | #define INTEGRATOR_HDR_OSC_CORE_45MHz 0x125 | ||
139 | #define INTEGRATOR_HDR_OSC_CORE_50MHz 0x12A | ||
140 | #define INTEGRATOR_HDR_OSC_CORE_55MHz 0x12F | ||
141 | #define INTEGRATOR_HDR_OSC_CORE_60MHz 0x134 | ||
142 | #define INTEGRATOR_HDR_OSC_CORE_65MHz 0x139 | ||
143 | #define INTEGRATOR_HDR_OSC_CORE_70MHz 0x13E | ||
144 | #define INTEGRATOR_HDR_OSC_CORE_75MHz 0x143 | ||
145 | #define INTEGRATOR_HDR_OSC_CORE_80MHz 0x148 | ||
146 | #define INTEGRATOR_HDR_OSC_CORE_85MHz 0x14D | ||
147 | #define INTEGRATOR_HDR_OSC_CORE_90MHz 0x152 | ||
148 | #define INTEGRATOR_HDR_OSC_CORE_95MHz 0x157 | ||
149 | #define INTEGRATOR_HDR_OSC_CORE_100MHz 0x15C | ||
150 | #define INTEGRATOR_HDR_OSC_CORE_105MHz 0x161 | ||
151 | #define INTEGRATOR_HDR_OSC_CORE_110MHz 0x166 | ||
152 | #define INTEGRATOR_HDR_OSC_CORE_115MHz 0x16B | ||
153 | #define INTEGRATOR_HDR_OSC_CORE_120MHz 0x170 | ||
154 | #define INTEGRATOR_HDR_OSC_CORE_125MHz 0x175 | ||
155 | #define INTEGRATOR_HDR_OSC_CORE_130MHz 0x17A | ||
156 | #define INTEGRATOR_HDR_OSC_CORE_135MHz 0x17F | ||
157 | #define INTEGRATOR_HDR_OSC_CORE_140MHz 0x184 | ||
158 | #define INTEGRATOR_HDR_OSC_CORE_145MHz 0x189 | ||
159 | #define INTEGRATOR_HDR_OSC_CORE_150MHz 0x18E | ||
160 | #define INTEGRATOR_HDR_OSC_CORE_155MHz 0x193 | ||
161 | #define INTEGRATOR_HDR_OSC_CORE_160MHz 0x198 | ||
162 | #define INTEGRATOR_HDR_OSC_CORE_MASK 0x7FF | ||
163 | |||
164 | #define INTEGRATOR_HDR_OSC_MEM_10MHz 0x10C000 | ||
165 | #define INTEGRATOR_HDR_OSC_MEM_15MHz 0x116000 | ||
166 | #define INTEGRATOR_HDR_OSC_MEM_20MHz 0x120000 | ||
167 | #define INTEGRATOR_HDR_OSC_MEM_25MHz 0x12A000 | ||
168 | #define INTEGRATOR_HDR_OSC_MEM_30MHz 0x134000 | ||
169 | #define INTEGRATOR_HDR_OSC_MEM_33MHz 0x13A000 | ||
170 | #define INTEGRATOR_HDR_OSC_MEM_40MHz 0x148000 | ||
171 | #define INTEGRATOR_HDR_OSC_MEM_50MHz 0x15C000 | ||
172 | #define INTEGRATOR_HDR_OSC_MEM_60MHz 0x170000 | ||
173 | #define INTEGRATOR_HDR_OSC_MEM_66MHz 0x17C000 | ||
174 | #define INTEGRATOR_HDR_OSC_MEM_MASK 0x7FF000 | ||
175 | |||
176 | #define INTEGRATOR_HDR_OSC_BUS_MODE_CM7x0 0x0 | ||
177 | #define INTEGRATOR_HDR_OSC_BUS_MODE_CM9x0 0x0800000 | ||
178 | #define INTEGRATOR_HDR_OSC_BUS_MODE_CM9x6 0x1000000 | ||
179 | #define INTEGRATOR_HDR_OSC_BUS_MODE_CM10x00 0x1800000 | ||
180 | #define INTEGRATOR_HDR_OSC_BUS_MODE_MASK 0x1800000 | ||
181 | |||
182 | #define INTEGRATOR_HDR_SDRAM_SPD_OK (1 << 5) | ||
183 | |||
184 | |||
185 | /* ------------------------------------------------------------------------ | ||
186 | * Integrator system registers | ||
187 | * ------------------------------------------------------------------------ | ||
188 | * | ||
189 | */ | ||
190 | |||
191 | /* | ||
192 | * System Controller | ||
193 | * | ||
194 | */ | ||
195 | #define INTEGRATOR_SC_ID_OFFSET 0x00 | ||
196 | #define INTEGRATOR_SC_OSC_OFFSET 0x04 | ||
197 | #define INTEGRATOR_SC_CTRLS_OFFSET 0x08 | ||
198 | #define INTEGRATOR_SC_CTRLC_OFFSET 0x0C | ||
199 | #define INTEGRATOR_SC_DEC_OFFSET 0x10 | ||
200 | #define INTEGRATOR_SC_ARB_OFFSET 0x14 | ||
201 | #define INTEGRATOR_SC_PCIENABLE_OFFSET 0x18 | ||
202 | #define INTEGRATOR_SC_LOCK_OFFSET 0x1C | ||
203 | |||
204 | #define INTEGRATOR_SC_BASE 0x11000000 | ||
205 | #define INTEGRATOR_SC_ID (INTEGRATOR_SC_BASE + INTEGRATOR_SC_ID_OFFSET) | ||
206 | #define INTEGRATOR_SC_OSC (INTEGRATOR_SC_BASE + INTEGRATOR_SC_OSC_OFFSET) | ||
207 | #define INTEGRATOR_SC_CTRLS (INTEGRATOR_SC_BASE + INTEGRATOR_SC_CTRLS_OFFSET) | ||
208 | #define INTEGRATOR_SC_CTRLC (INTEGRATOR_SC_BASE + INTEGRATOR_SC_CTRLC_OFFSET) | ||
209 | #define INTEGRATOR_SC_DEC (INTEGRATOR_SC_BASE + INTEGRATOR_SC_DEC_OFFSET) | ||
210 | #define INTEGRATOR_SC_ARB (INTEGRATOR_SC_BASE + INTEGRATOR_SC_ARB_OFFSET) | ||
211 | #define INTEGRATOR_SC_PCIENABLE (INTEGRATOR_SC_BASE + INTEGRATOR_SC_PCIENABLE_OFFSET) | ||
212 | #define INTEGRATOR_SC_LOCK (INTEGRATOR_SC_BASE + INTEGRATOR_SC_LOCK_OFFSET) | ||
213 | |||
214 | #define INTEGRATOR_SC_OSC_SYS_10MHz 0x20 | ||
215 | #define INTEGRATOR_SC_OSC_SYS_15MHz 0x34 | ||
216 | #define INTEGRATOR_SC_OSC_SYS_20MHz 0x48 | ||
217 | #define INTEGRATOR_SC_OSC_SYS_25MHz 0x5C | ||
218 | #define INTEGRATOR_SC_OSC_SYS_33MHz 0x7C | ||
219 | #define INTEGRATOR_SC_OSC_SYS_MASK 0xFF | ||
220 | |||
221 | #define INTEGRATOR_SC_OSC_PCI_25MHz 0x100 | ||
222 | #define INTEGRATOR_SC_OSC_PCI_33MHz 0x0 | ||
223 | #define INTEGRATOR_SC_OSC_PCI_MASK 0x100 | ||
224 | |||
225 | #define INTEGRATOR_SC_CTRL_SOFTRST (1 << 0) | ||
226 | #define INTEGRATOR_SC_CTRL_nFLVPPEN (1 << 1) | ||
227 | #define INTEGRATOR_SC_CTRL_nFLWP (1 << 2) | ||
228 | #define INTEGRATOR_SC_CTRL_URTS0 (1 << 4) | ||
229 | #define INTEGRATOR_SC_CTRL_UDTR0 (1 << 5) | ||
230 | #define INTEGRATOR_SC_CTRL_URTS1 (1 << 6) | ||
231 | #define INTEGRATOR_SC_CTRL_UDTR1 (1 << 7) | ||
232 | |||
233 | /* | ||
234 | * External Bus Interface | ||
235 | * | ||
236 | */ | ||
237 | #define INTEGRATOR_EBI_BASE 0x12000000 | ||
238 | |||
239 | #define INTEGRATOR_EBI_CSR0_OFFSET 0x00 | ||
240 | #define INTEGRATOR_EBI_CSR1_OFFSET 0x04 | ||
241 | #define INTEGRATOR_EBI_CSR2_OFFSET 0x08 | ||
242 | #define INTEGRATOR_EBI_CSR3_OFFSET 0x0C | ||
243 | #define INTEGRATOR_EBI_LOCK_OFFSET 0x20 | ||
244 | |||
245 | #define INTEGRATOR_EBI_CSR0 (INTEGRATOR_EBI_BASE + INTEGRATOR_EBI_CSR0_OFFSET) | ||
246 | #define INTEGRATOR_EBI_CSR1 (INTEGRATOR_EBI_BASE + INTEGRATOR_EBI_CSR1_OFFSET) | ||
247 | #define INTEGRATOR_EBI_CSR2 (INTEGRATOR_EBI_BASE + INTEGRATOR_EBI_CSR2_OFFSET) | ||
248 | #define INTEGRATOR_EBI_CSR3 (INTEGRATOR_EBI_BASE + INTEGRATOR_EBI_CSR3_OFFSET) | ||
249 | #define INTEGRATOR_EBI_LOCK (INTEGRATOR_EBI_BASE + INTEGRATOR_EBI_LOCK_OFFSET) | ||
250 | |||
251 | #define INTEGRATOR_EBI_8_BIT 0x00 | ||
252 | #define INTEGRATOR_EBI_16_BIT 0x01 | ||
253 | #define INTEGRATOR_EBI_32_BIT 0x02 | ||
254 | #define INTEGRATOR_EBI_WRITE_ENABLE 0x04 | ||
255 | #define INTEGRATOR_EBI_SYNC 0x08 | ||
256 | #define INTEGRATOR_EBI_WS_2 0x00 | ||
257 | #define INTEGRATOR_EBI_WS_3 0x10 | ||
258 | #define INTEGRATOR_EBI_WS_4 0x20 | ||
259 | #define INTEGRATOR_EBI_WS_5 0x30 | ||
260 | #define INTEGRATOR_EBI_WS_6 0x40 | ||
261 | #define INTEGRATOR_EBI_WS_7 0x50 | ||
262 | #define INTEGRATOR_EBI_WS_8 0x60 | ||
263 | #define INTEGRATOR_EBI_WS_9 0x70 | ||
264 | #define INTEGRATOR_EBI_WS_10 0x80 | ||
265 | #define INTEGRATOR_EBI_WS_11 0x90 | ||
266 | #define INTEGRATOR_EBI_WS_12 0xA0 | ||
267 | #define INTEGRATOR_EBI_WS_13 0xB0 | ||
268 | #define INTEGRATOR_EBI_WS_14 0xC0 | ||
269 | #define INTEGRATOR_EBI_WS_15 0xD0 | ||
270 | #define INTEGRATOR_EBI_WS_16 0xE0 | ||
271 | #define INTEGRATOR_EBI_WS_17 0xF0 | ||
272 | |||
273 | |||
274 | #define INTEGRATOR_CT_BASE 0x13000000 /* Counter/Timers */ | ||
275 | #define INTEGRATOR_IC_BASE 0x14000000 /* Interrupt Controller */ | ||
276 | #define INTEGRATOR_RTC_BASE 0x15000000 /* Real Time Clock */ | ||
277 | #define INTEGRATOR_UART0_BASE 0x16000000 /* UART 0 */ | ||
278 | #define INTEGRATOR_UART1_BASE 0x17000000 /* UART 1 */ | ||
279 | #define INTEGRATOR_KBD_BASE 0x18000000 /* Keyboard */ | ||
280 | #define INTEGRATOR_MOUSE_BASE 0x19000000 /* Mouse */ | ||
281 | |||
282 | /* | ||
283 | * LED's & Switches | ||
284 | * | ||
285 | */ | ||
286 | #define INTEGRATOR_DBG_ALPHA_OFFSET 0x00 | ||
287 | #define INTEGRATOR_DBG_LEDS_OFFSET 0x04 | ||
288 | #define INTEGRATOR_DBG_SWITCH_OFFSET 0x08 | ||
289 | |||
290 | #define INTEGRATOR_DBG_BASE 0x1A000000 | ||
291 | #define INTEGRATOR_DBG_ALPHA (INTEGRATOR_DBG_BASE + INTEGRATOR_DBG_ALPHA_OFFSET) | ||
292 | #define INTEGRATOR_DBG_LEDS (INTEGRATOR_DBG_BASE + INTEGRATOR_DBG_LEDS_OFFSET) | ||
293 | #define INTEGRATOR_DBG_SWITCH (INTEGRATOR_DBG_BASE + INTEGRATOR_DBG_SWITCH_OFFSET) | ||
294 | |||
295 | |||
296 | #define INTEGRATOR_GPIO_BASE 0x1B000000 /* GPIO */ | ||
297 | |||
298 | /* ------------------------------------------------------------------------ | ||
299 | * KMI keyboard/mouse definitions | ||
300 | * ------------------------------------------------------------------------ | ||
301 | */ | ||
302 | /* PS2 Keyboard interface */ | ||
303 | #define KMI0_BASE INTEGRATOR_KBD_BASE | ||
304 | |||
305 | /* PS2 Mouse interface */ | ||
306 | #define KMI1_BASE INTEGRATOR_MOUSE_BASE | ||
307 | |||
308 | /* KMI definitions are now in include/asm-arm/hardware/amba_kmi.h -- rmk */ | ||
309 | |||
310 | /* ------------------------------------------------------------------------ | ||
311 | * Where in the memory map does PCI live? | ||
312 | * ------------------------------------------------------------------------ | ||
313 | * This represents a fairly liberal usage of address space. Even though | ||
314 | * the V3 only has two windows (therefore we need to map stuff on the fly), | ||
315 | * we maintain the same addresses, even if they're not mapped. | ||
316 | * | ||
317 | */ | ||
318 | #define PHYS_PCI_MEM_BASE 0x40000000 /* 512M to xxx */ | ||
319 | /* unused 256M from A0000000-AFFFFFFF might be used for I2O ??? | ||
320 | */ | ||
321 | #define PHYS_PCI_IO_BASE 0x60000000 /* 16M to xxx */ | ||
322 | /* unused (128-16)M from B1000000-B7FFFFFF | ||
323 | */ | ||
324 | #define PHYS_PCI_CONFIG_BASE 0x61000000 /* 16M to xxx */ | ||
325 | /* unused ((128-16)M - 64K) from XXX | ||
326 | */ | ||
327 | #define PHYS_PCI_V3_BASE 0x62000000 | ||
328 | |||
329 | #define PCI_DRAMSIZE INTEGRATOR_SSRAM_SIZE | ||
330 | |||
331 | /* 'export' these to UHAL */ | ||
332 | #define UHAL_PCI_IO PCI_IO_BASE | ||
333 | #define UHAL_PCI_MEM PCI_MEM_BASE | ||
334 | #define UHAL_PCI_ALLOC_IO_BASE 0x00004000 | ||
335 | #define UHAL_PCI_ALLOC_MEM_BASE PCI_MEM_BASE | ||
336 | #define UHAL_PCI_MAX_SLOT 20 | ||
337 | |||
338 | /* ======================================================================== | ||
339 | * Start of uHAL definitions | ||
340 | * ======================================================================== | ||
341 | */ | ||
342 | |||
343 | /* ------------------------------------------------------------------------ | ||
344 | * Integrator Interrupt Controllers | ||
345 | * ------------------------------------------------------------------------ | ||
346 | * | ||
347 | * Offsets from interrupt controller base | ||
348 | * | ||
349 | * System Controller interrupt controller base is | ||
350 | * | ||
351 | * INTEGRATOR_IC_BASE + (header_number << 6) | ||
352 | * | ||
353 | * Core Module interrupt controller base is | ||
354 | * | ||
355 | * INTEGRATOR_HDR_IC | ||
356 | * | ||
357 | */ | ||
358 | #define IRQ_STATUS 0 | ||
359 | #define IRQ_RAW_STATUS 0x04 | ||
360 | #define IRQ_ENABLE 0x08 | ||
361 | #define IRQ_ENABLE_SET 0x08 | ||
362 | #define IRQ_ENABLE_CLEAR 0x0C | ||
363 | |||
364 | #define INT_SOFT_SET 0x10 | ||
365 | #define INT_SOFT_CLEAR 0x14 | ||
366 | |||
367 | #define FIQ_STATUS 0x20 | ||
368 | #define FIQ_RAW_STATUS 0x24 | ||
369 | #define FIQ_ENABLE 0x28 | ||
370 | #define FIQ_ENABLE_SET 0x28 | ||
371 | #define FIQ_ENABLE_CLEAR 0x2C | ||
372 | |||
373 | |||
374 | /* ------------------------------------------------------------------------ | ||
375 | * Interrupts | ||
376 | * ------------------------------------------------------------------------ | ||
377 | * | ||
378 | * | ||
379 | * Each Core Module has two interrupts controllers, one on the core module | ||
380 | * itself and one in the system controller on the motherboard. The | ||
381 | * READ_INT macro in target.s reads both interrupt controllers and returns | ||
382 | * a 32 bit bitmask, bits 0 to 23 are interrupts from the system controller | ||
383 | * and bits 24 to 31 are from the core module. | ||
384 | * | ||
385 | * The following definitions relate to the bitmask returned by READ_INT. | ||
386 | * | ||
387 | */ | ||
388 | |||
389 | /* ------------------------------------------------------------------------ | ||
390 | * LED's - The header LED is not accessible via the uHAL API | ||
391 | * ------------------------------------------------------------------------ | ||
392 | * | ||
393 | */ | ||
394 | #define GREEN_LED 0x01 | ||
395 | #define YELLOW_LED 0x02 | ||
396 | #define RED_LED 0x04 | ||
397 | #define GREEN_LED_2 0x08 | ||
398 | #define ALL_LEDS 0x0F | ||
399 | |||
400 | #define LED_BANK INTEGRATOR_DBG_LEDS | ||
401 | |||
402 | /* | ||
403 | * Memory definitions - run uHAL out of SSRAM. | ||
404 | * | ||
405 | */ | ||
406 | #define uHAL_MEMORY_SIZE INTEGRATOR_SSRAM_SIZE | ||
407 | |||
408 | /* | ||
409 | * Application Flash | ||
410 | * | ||
411 | */ | ||
412 | #define FLASH_BASE INTEGRATOR_FLASH_BASE | ||
413 | #define FLASH_SIZE INTEGRATOR_FLASH_SIZE | ||
414 | #define FLASH_END (FLASH_BASE + FLASH_SIZE - 1) | ||
415 | #define FLASH_BLOCK_SIZE SZ_128K | ||
416 | |||
417 | /* | ||
418 | * Boot Flash | ||
419 | * | ||
420 | */ | ||
421 | #define EPROM_BASE INTEGRATOR_BOOT_ROM_HI | ||
422 | #define EPROM_SIZE INTEGRATOR_BOOT_ROM_SIZE | ||
423 | #define EPROM_END (EPROM_BASE + EPROM_SIZE - 1) | ||
424 | |||
425 | /* | ||
426 | * Clean base - dummy | ||
427 | * | ||
428 | */ | ||
429 | #define CLEAN_BASE EPROM_BASE | ||
430 | |||
431 | /* | ||
432 | * Timer definitions | ||
433 | * | ||
434 | * Only use timer 1 & 2 | ||
435 | * (both run at 24MHz and will need the clock divider set to 16). | ||
436 | * | ||
437 | * Timer 0 runs at bus frequency and therefore could vary and currently | ||
438 | * uHAL can't handle that. | ||
439 | * | ||
440 | */ | ||
441 | |||
442 | #define INTEGRATOR_TIMER0_BASE INTEGRATOR_CT_BASE | ||
443 | #define INTEGRATOR_TIMER1_BASE (INTEGRATOR_CT_BASE + 0x100) | ||
444 | #define INTEGRATOR_TIMER2_BASE (INTEGRATOR_CT_BASE + 0x200) | ||
445 | |||
446 | #define MAX_TIMER 2 | ||
447 | #define MAX_PERIOD 699050 | ||
448 | #define TICKS_PER_uSEC 24 | ||
449 | |||
450 | /* | ||
451 | * These are useconds NOT ticks. | ||
452 | * | ||
453 | */ | ||
454 | #define mSEC_1 1000 | ||
455 | #define mSEC_5 (mSEC_1 * 5) | ||
456 | #define mSEC_10 (mSEC_1 * 10) | ||
457 | #define mSEC_25 (mSEC_1 * 25) | ||
458 | #define SEC_1 (mSEC_1 * 1000) | ||
459 | |||
460 | #define INTEGRATOR_CSR_BASE 0x10000000 | ||
461 | #define INTEGRATOR_CSR_SIZE 0x10000000 | ||
462 | |||
463 | #endif | ||
464 | |||
465 | /* END */ | ||
diff --git a/include/asm-arm/arch-integrator/system.h b/include/asm-arm/arch-integrator/system.h new file mode 100644 index 000000000000..8ea442237d20 --- /dev/null +++ b/include/asm-arm/arch-integrator/system.h | |||
@@ -0,0 +1,44 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-integrator/system.h | ||
3 | * | ||
4 | * Copyright (C) 1999 ARM Limited | ||
5 | * Copyright (C) 2000 Deep Blue Solutions Ltd | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License as published by | ||
9 | * the Free Software Foundation; either version 2 of the License, or | ||
10 | * (at your option) any later version. | ||
11 | * | ||
12 | * This program is distributed in the hope that it will be useful, | ||
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
15 | * GNU General Public License for more details. | ||
16 | * | ||
17 | * You should have received a copy of the GNU General Public License | ||
18 | * along with this program; if not, write to the Free Software | ||
19 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
20 | */ | ||
21 | #ifndef __ASM_ARCH_SYSTEM_H | ||
22 | #define __ASM_ARCH_SYSTEM_H | ||
23 | |||
24 | #include <asm/arch/cm.h> | ||
25 | |||
26 | static inline void arch_idle(void) | ||
27 | { | ||
28 | /* | ||
29 | * This should do all the clock switching | ||
30 | * and wait for interrupt tricks | ||
31 | */ | ||
32 | cpu_do_idle(); | ||
33 | } | ||
34 | |||
35 | static inline void arch_reset(char mode) | ||
36 | { | ||
37 | /* | ||
38 | * To reset, we hit the on-board reset register | ||
39 | * in the system FPGA | ||
40 | */ | ||
41 | cm_control(CM_CTRL_RESET, CM_CTRL_RESET); | ||
42 | } | ||
43 | |||
44 | #endif | ||
diff --git a/include/asm-arm/arch-integrator/timex.h b/include/asm-arm/arch-integrator/timex.h new file mode 100644 index 000000000000..87a762818ba2 --- /dev/null +++ b/include/asm-arm/arch-integrator/timex.h | |||
@@ -0,0 +1,26 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-integrator/timex.h | ||
3 | * | ||
4 | * Integrator architecture timex specifications | ||
5 | * | ||
6 | * Copyright (C) 1999 ARM Limited | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License as published by | ||
10 | * the Free Software Foundation; either version 2 of the License, or | ||
11 | * (at your option) any later version. | ||
12 | * | ||
13 | * This program is distributed in the hope that it will be useful, | ||
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
16 | * GNU General Public License for more details. | ||
17 | * | ||
18 | * You should have received a copy of the GNU General Public License | ||
19 | * along with this program; if not, write to the Free Software | ||
20 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
21 | */ | ||
22 | |||
23 | /* | ||
24 | * ?? | ||
25 | */ | ||
26 | #define CLOCK_TICK_RATE (50000000 / 16) | ||
diff --git a/include/asm-arm/arch-integrator/uncompress.h b/include/asm-arm/arch-integrator/uncompress.h new file mode 100644 index 000000000000..3957402741d3 --- /dev/null +++ b/include/asm-arm/arch-integrator/uncompress.h | |||
@@ -0,0 +1,53 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-integrator/uncompress.h | ||
3 | * | ||
4 | * Copyright (C) 1999 ARM Limited | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | * GNU General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License | ||
17 | * along with this program; if not, write to the Free Software | ||
18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
19 | */ | ||
20 | |||
21 | #define AMBA_UART_DR (*(volatile unsigned char *)0x16000000) | ||
22 | #define AMBA_UART_LCRH (*(volatile unsigned char *)0x16000008) | ||
23 | #define AMBA_UART_LCRM (*(volatile unsigned char *)0x1600000c) | ||
24 | #define AMBA_UART_LCRL (*(volatile unsigned char *)0x16000010) | ||
25 | #define AMBA_UART_CR (*(volatile unsigned char *)0x16000014) | ||
26 | #define AMBA_UART_FR (*(volatile unsigned char *)0x16000018) | ||
27 | |||
28 | /* | ||
29 | * This does not append a newline | ||
30 | */ | ||
31 | static void putstr(const char *s) | ||
32 | { | ||
33 | while (*s) { | ||
34 | while (AMBA_UART_FR & (1 << 5)); | ||
35 | |||
36 | AMBA_UART_DR = *s; | ||
37 | |||
38 | if (*s == '\n') { | ||
39 | while (AMBA_UART_FR & (1 << 5)); | ||
40 | |||
41 | AMBA_UART_DR = '\r'; | ||
42 | } | ||
43 | s++; | ||
44 | } | ||
45 | while (AMBA_UART_FR & (1 << 3)); | ||
46 | } | ||
47 | |||
48 | /* | ||
49 | * nothing to do | ||
50 | */ | ||
51 | #define arch_decomp_setup() | ||
52 | |||
53 | #define arch_decomp_wdog() | ||
diff --git a/include/asm-arm/arch-integrator/vmalloc.h b/include/asm-arm/arch-integrator/vmalloc.h new file mode 100644 index 000000000000..50e9aee79486 --- /dev/null +++ b/include/asm-arm/arch-integrator/vmalloc.h | |||
@@ -0,0 +1,31 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-integrator/vmalloc.h | ||
3 | * | ||
4 | * Copyright (C) 2000 Russell King. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | * GNU General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License | ||
17 | * along with this program; if not, write to the Free Software | ||
18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
19 | */ | ||
20 | |||
21 | /* | ||
22 | * Just any arbitrary offset to the start of the vmalloc VM area: the | ||
23 | * current 8MB value just means that there will be a 8MB "hole" after the | ||
24 | * physical memory until the kernel virtual memory starts. That means that | ||
25 | * any out-of-bounds memory accesses will hopefully be caught. | ||
26 | * The vmalloc() routines leaves a hole of 4kB between each vmalloced | ||
27 | * area for the same reason. ;) | ||
28 | */ | ||
29 | #define VMALLOC_OFFSET (8*1024*1024) | ||
30 | #define VMALLOC_START (((unsigned long)high_memory + VMALLOC_OFFSET) & ~(VMALLOC_OFFSET-1)) | ||
31 | #define VMALLOC_END (PAGE_OFFSET + 0x10000000) | ||
diff --git a/include/asm-arm/arch-iop3xx/debug-macro.S b/include/asm-arm/arch-iop3xx/debug-macro.S new file mode 100644 index 000000000000..cc15f80ebd9a --- /dev/null +++ b/include/asm-arm/arch-iop3xx/debug-macro.S | |||
@@ -0,0 +1,48 @@ | |||
1 | /* linux/include/asm-arm/arch-iop3xx/debug-macro.S | ||
2 | * | ||
3 | * Debugging macro include header | ||
4 | * | ||
5 | * Copyright (C) 1994-1999 Russell King | ||
6 | * Moved from linux/arch/arm/kernel/debug.S by Ben Dooks | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | * | ||
12 | */ | ||
13 | |||
14 | .macro addruart,rx | ||
15 | mov \rx, #0xfe000000 @ physical | ||
16 | #if defined(CONFIG_ARCH_IQ80321) || defined(CONFIG_ARCH_IQ31244) | ||
17 | orr \rx, \rx, #0x00800000 @ location of the UART | ||
18 | #elif defined(CONFIG_ARCH_IOP331) | ||
19 | mrc p15, 0, \rx, c1, c0 | ||
20 | tst \rx, #1 @ MMU enabled? | ||
21 | moveq \rx, #0x000fe000 @ Physical Base | ||
22 | movne \rx, #0 | ||
23 | orr \rx, \rx, #0xfe000000 | ||
24 | orr \rx, \rx, #0x00f00000 @ Virtual Base | ||
25 | orr \rx, \rx, #0x00001700 @ location of the UART | ||
26 | #else | ||
27 | #error Unknown IOP3XX implementation | ||
28 | #endif | ||
29 | .endm | ||
30 | |||
31 | .macro senduart,rd,rx | ||
32 | strb \rd, [\rx] | ||
33 | .endm | ||
34 | |||
35 | .macro busyuart,rd,rx | ||
36 | 1002: ldrb \rd, [\rx, #0x5] | ||
37 | and \rd, \rd, #0x60 | ||
38 | teq \rd, #0x60 | ||
39 | bne 1002b | ||
40 | .endm | ||
41 | |||
42 | .macro waituart,rd,rx | ||
43 | #if !defined(CONFIG_ARCH_IQ80321) || !defined(CONFIG_ARCH_IQ31244) || !defined(CONFIG_ARCH_IQ80331) | ||
44 | 1001: ldrb \rd, [\rx, #0x6] | ||
45 | tst \rd, #0x10 | ||
46 | beq 1001b | ||
47 | #endif | ||
48 | .endm | ||
diff --git a/include/asm-arm/arch-iop3xx/dma.h b/include/asm-arm/arch-iop3xx/dma.h new file mode 100644 index 000000000000..797f9e6fc745 --- /dev/null +++ b/include/asm-arm/arch-iop3xx/dma.h | |||
@@ -0,0 +1,16 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-iop3xx/dma.h | ||
3 | * | ||
4 | * Copyright (C) 2004 Intel Corp. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | */ | ||
10 | |||
11 | #ifndef _IOP3XX_DMA_H_P | ||
12 | #define _IOP3XX_DMA_H_P | ||
13 | |||
14 | #define MAX_DMA_ADDRESS 0xffffffff | ||
15 | |||
16 | #endif /* _ASM_ARCH_DMA_H_P */ | ||
diff --git a/include/asm-arm/arch-iop3xx/entry-macro.S b/include/asm-arm/arch-iop3xx/entry-macro.S new file mode 100644 index 000000000000..e2ce7f5467c8 --- /dev/null +++ b/include/asm-arm/arch-iop3xx/entry-macro.S | |||
@@ -0,0 +1,56 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-iop3xx/entry-macro.S | ||
3 | * | ||
4 | * Low-level IRQ helper macros for IOP3xx-based platforms | ||
5 | * | ||
6 | * This file is licensed under the terms of the GNU General Public | ||
7 | * License version 2. This program is licensed "as is" without any | ||
8 | * warranty of any kind, whether express or implied. | ||
9 | */ | ||
10 | |||
11 | #if defined(CONFIG_ARCH_IOP321) | ||
12 | .macro disable_fiq | ||
13 | .endm | ||
14 | |||
15 | /* | ||
16 | * Note: only deal with normal interrupts, not FIQ | ||
17 | */ | ||
18 | .macro get_irqnr_and_base, irqnr, irqstat, base, tmp | ||
19 | mov \irqnr, #0 | ||
20 | mrc p6, 0, \irqstat, c8, c0, 0 @ Read IINTSRC | ||
21 | cmp \irqstat, #0 | ||
22 | beq 1001f | ||
23 | clz \irqnr, \irqstat | ||
24 | mov \base, #31 | ||
25 | subs \irqnr,\base,\irqnr | ||
26 | add \irqnr,\irqnr,#IRQ_IOP321_DMA0_EOT | ||
27 | 1001: | ||
28 | .endm | ||
29 | |||
30 | #elif defined(CONFIG_ARCH_IOP331) | ||
31 | .macro disable_fiq | ||
32 | .endm | ||
33 | |||
34 | /* | ||
35 | * Note: only deal with normal interrupts, not FIQ | ||
36 | */ | ||
37 | .macro get_irqnr_and_base, irqnr, irqstat, base, tmp | ||
38 | mov \irqnr, #0 | ||
39 | mrc p6, 0, \irqstat, c4, c0, 0 @ Read IINTSRC0 | ||
40 | cmp \irqstat, #0 | ||
41 | bne 1002f | ||
42 | mrc p6, 0, \irqstat, c5, c0, 0 @ Read IINTSRC1 | ||
43 | cmp \irqstat, #0 | ||
44 | beq 1001f | ||
45 | clz \irqnr, \irqstat | ||
46 | rsbs \irqnr,\irqnr,#31 @ recommend by RMK | ||
47 | add \irqnr,\irqnr,#IRQ_IOP331_XINT8 | ||
48 | b 1001f | ||
49 | 1002: clz \irqnr, \irqstat | ||
50 | rsbs \irqnr,\irqnr,#31 @ recommend by RMK | ||
51 | add \irqnr,\irqnr,#IRQ_IOP331_DMA0_EOT | ||
52 | 1001: | ||
53 | .endm | ||
54 | |||
55 | #endif | ||
56 | |||
diff --git a/include/asm-arm/arch-iop3xx/hardware.h b/include/asm-arm/arch-iop3xx/hardware.h new file mode 100644 index 000000000000..3b138171d086 --- /dev/null +++ b/include/asm-arm/arch-iop3xx/hardware.h | |||
@@ -0,0 +1,57 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-iop3xx/hardware.h | ||
3 | */ | ||
4 | #ifndef __ASM_ARCH_HARDWARE_H | ||
5 | #define __ASM_ARCH_HARDWARE_H | ||
6 | |||
7 | #include <asm/types.h> | ||
8 | |||
9 | /* | ||
10 | * Note about PCI IO space mappings | ||
11 | * | ||
12 | * To make IO space accesses efficient, we store virtual addresses in | ||
13 | * the IO resources. | ||
14 | * | ||
15 | * The PCI IO space is located at virtual 0xfe000000 from physical | ||
16 | * 0x90000000. The PCI BARs must be programmed with physical addresses, | ||
17 | * but when we read them, we convert them to virtual addresses. See | ||
18 | * arch/arm/mach-iop3xx/iop3xx-pci.c | ||
19 | */ | ||
20 | |||
21 | #define pcibios_assign_all_busses() 1 | ||
22 | |||
23 | |||
24 | /* | ||
25 | * The min PCI I/O and MEM space are dependent on what specific | ||
26 | * chipset/platform we are running on, so instead of hardcoding with | ||
27 | * #ifdefs, we just fill these in the platform level PCI init code. | ||
28 | */ | ||
29 | #ifndef __ASSEMBLY__ | ||
30 | extern unsigned long iop3xx_pcibios_min_io; | ||
31 | extern unsigned long iop3xx_pcibios_min_mem; | ||
32 | |||
33 | extern unsigned int processor_id; | ||
34 | #endif | ||
35 | |||
36 | /* | ||
37 | * We just set these to zero since they are really bogus anyways | ||
38 | */ | ||
39 | #define PCIBIOS_MIN_IO (iop3xx_pcibios_min_io) | ||
40 | #define PCIBIOS_MIN_MEM (iop3xx_pcibios_min_mem) | ||
41 | |||
42 | /* | ||
43 | * Generic chipset bits | ||
44 | * | ||
45 | */ | ||
46 | #include "iop321.h" | ||
47 | #include "iop331.h" | ||
48 | |||
49 | /* | ||
50 | * Board specific bits | ||
51 | */ | ||
52 | #include "iq80321.h" | ||
53 | #include "iq31244.h" | ||
54 | #include "iq80331.h" | ||
55 | #include "iq80332.h" | ||
56 | |||
57 | #endif /* _ASM_ARCH_HARDWARE_H */ | ||
diff --git a/include/asm-arm/arch-iop3xx/io.h b/include/asm-arm/arch-iop3xx/io.h new file mode 100644 index 000000000000..2761dfd8694d --- /dev/null +++ b/include/asm-arm/arch-iop3xx/io.h | |||
@@ -0,0 +1,20 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-iop3xx/io.h | ||
3 | * | ||
4 | * Copyright (C) 2001 MontaVista Software, Inc. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | */ | ||
10 | |||
11 | #ifndef __ASM_ARM_ARCH_IO_H | ||
12 | #define __ASM_ARM_ARCH_IO_H | ||
13 | |||
14 | #define IO_SPACE_LIMIT 0xffffffff | ||
15 | |||
16 | #define __io(p) ((void __iomem *)(p)) | ||
17 | #define __mem_pci(a) (a) | ||
18 | #define __mem_isa(a) (a) | ||
19 | |||
20 | #endif | ||
diff --git a/include/asm-arm/arch-iop3xx/iop321-irqs.h b/include/asm-arm/arch-iop3xx/iop321-irqs.h new file mode 100644 index 000000000000..2fcc1654cb9d --- /dev/null +++ b/include/asm-arm/arch-iop3xx/iop321-irqs.h | |||
@@ -0,0 +1,100 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-iop3xx/irqs.h | ||
3 | * | ||
4 | * Author: Rory Bolt <rorybolt@pacbell.net> | ||
5 | * Copyright: (C) 2002 Rory Bolt | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License version 2 as | ||
9 | * published by the Free Software Foundation. | ||
10 | * | ||
11 | */ | ||
12 | #ifndef _IOP321_IRQS_H_ | ||
13 | #define _IOP321_IRQS_H_ | ||
14 | |||
15 | /* | ||
16 | * IOP80321 chipset interrupts | ||
17 | */ | ||
18 | #define IOP321_IRQ_OFS 0 | ||
19 | #define IOP321_IRQ(x) (IOP321_IRQ_OFS + (x)) | ||
20 | |||
21 | /* | ||
22 | * On IRQ or FIQ register | ||
23 | */ | ||
24 | #define IRQ_IOP321_DMA0_EOT IOP321_IRQ(0) | ||
25 | #define IRQ_IOP321_DMA0_EOC IOP321_IRQ(1) | ||
26 | #define IRQ_IOP321_DMA1_EOT IOP321_IRQ(2) | ||
27 | #define IRQ_IOP321_DMA1_EOC IOP321_IRQ(3) | ||
28 | #define IRQ_IOP321_RSVD_4 IOP321_IRQ(4) | ||
29 | #define IRQ_IOP321_RSVD_5 IOP321_IRQ(5) | ||
30 | #define IRQ_IOP321_AA_EOT IOP321_IRQ(6) | ||
31 | #define IRQ_IOP321_AA_EOC IOP321_IRQ(7) | ||
32 | #define IRQ_IOP321_CORE_PMON IOP321_IRQ(8) | ||
33 | #define IRQ_IOP321_TIMER0 IOP321_IRQ(9) | ||
34 | #define IRQ_IOP321_TIMER1 IOP321_IRQ(10) | ||
35 | #define IRQ_IOP321_I2C_0 IOP321_IRQ(11) | ||
36 | #define IRQ_IOP321_I2C_1 IOP321_IRQ(12) | ||
37 | #define IRQ_IOP321_MESSAGING IOP321_IRQ(13) | ||
38 | #define IRQ_IOP321_ATU_BIST IOP321_IRQ(14) | ||
39 | #define IRQ_IOP321_PERFMON IOP321_IRQ(15) | ||
40 | #define IRQ_IOP321_CORE_PMU IOP321_IRQ(16) | ||
41 | #define IRQ_IOP321_BIU_ERR IOP321_IRQ(17) | ||
42 | #define IRQ_IOP321_ATU_ERR IOP321_IRQ(18) | ||
43 | #define IRQ_IOP321_MCU_ERR IOP321_IRQ(19) | ||
44 | #define IRQ_IOP321_DMA0_ERR IOP321_IRQ(20) | ||
45 | #define IRQ_IOP321_DMA1_ERR IOP321_IRQ(21) | ||
46 | #define IRQ_IOP321_RSVD_22 IOP321_IRQ(22) | ||
47 | #define IRQ_IOP321_AA_ERR IOP321_IRQ(23) | ||
48 | #define IRQ_IOP321_MSG_ERR IOP321_IRQ(24) | ||
49 | #define IRQ_IOP321_SSP IOP321_IRQ(25) | ||
50 | #define IRQ_IOP321_RSVD_26 IOP321_IRQ(26) | ||
51 | #define IRQ_IOP321_XINT0 IOP321_IRQ(27) | ||
52 | #define IRQ_IOP321_XINT1 IOP321_IRQ(28) | ||
53 | #define IRQ_IOP321_XINT2 IOP321_IRQ(29) | ||
54 | #define IRQ_IOP321_XINT3 IOP321_IRQ(30) | ||
55 | #define IRQ_IOP321_HPI IOP321_IRQ(31) | ||
56 | |||
57 | #define NR_IOP321_IRQS (IOP321_IRQ(31) + 1) | ||
58 | |||
59 | #define NR_IRQS NR_IOP321_IRQS | ||
60 | |||
61 | |||
62 | /* | ||
63 | * Interrupts available on the IQ80321 board | ||
64 | */ | ||
65 | |||
66 | /* | ||
67 | * On board devices | ||
68 | */ | ||
69 | #define IRQ_IQ80321_I82544 IRQ_IOP321_XINT0 | ||
70 | #define IRQ_IQ80321_UART IRQ_IOP321_XINT1 | ||
71 | |||
72 | /* | ||
73 | * PCI interrupts | ||
74 | */ | ||
75 | #define IRQ_IQ80321_INTA IRQ_IOP321_XINT0 | ||
76 | #define IRQ_IQ80321_INTB IRQ_IOP321_XINT1 | ||
77 | #define IRQ_IQ80321_INTC IRQ_IOP321_XINT2 | ||
78 | #define IRQ_IQ80321_INTD IRQ_IOP321_XINT3 | ||
79 | |||
80 | /* | ||
81 | * Interrupts on the IQ31244 board | ||
82 | */ | ||
83 | |||
84 | /* | ||
85 | * On board devices | ||
86 | */ | ||
87 | #define IRQ_IQ31244_UART IRQ_IOP321_XINT1 | ||
88 | #define IRQ_IQ31244_I82546 IRQ_IOP321_XINT0 | ||
89 | #define IRQ_IQ31244_SATA IRQ_IOP321_XINT2 | ||
90 | #define IRQ_IQ31244_PCIX_SLOT IRQ_IOP321_XINT3 | ||
91 | |||
92 | /* | ||
93 | * PCI interrupts | ||
94 | */ | ||
95 | #define IRQ_IQ31244_INTA IRQ_IOP321_XINT0 | ||
96 | #define IRQ_IQ31244_INTB IRQ_IOP321_XINT1 | ||
97 | #define IRQ_IQ31244_INTC IRQ_IOP321_XINT2 | ||
98 | #define IRQ_IQ31244_INTD IRQ_IOP321_XINT3 | ||
99 | |||
100 | #endif // _IOP321_IRQ_H_ | ||
diff --git a/include/asm-arm/arch-iop3xx/iop321.h b/include/asm-arm/arch-iop3xx/iop321.h new file mode 100644 index 000000000000..200621ff3690 --- /dev/null +++ b/include/asm-arm/arch-iop3xx/iop321.h | |||
@@ -0,0 +1,345 @@ | |||
1 | /* | ||
2 | * linux/include/asm/arch-iop3xx/iop321.h | ||
3 | * | ||
4 | * Intel IOP321 Chip definitions | ||
5 | * | ||
6 | * Author: Rory Bolt <rorybolt@pacbell.net> | ||
7 | * Copyright (C) 2002 Rory Bolt | ||
8 | * Copyright (C) 2004 Intel Corp. | ||
9 | * | ||
10 | * This program is free software; you can redistribute it and/or modify | ||
11 | * it under the terms of the GNU General Public License version 2 as | ||
12 | * published by the Free Software Foundation. | ||
13 | */ | ||
14 | |||
15 | #ifndef _IOP321_HW_H_ | ||
16 | #define _IOP321_HW_H_ | ||
17 | |||
18 | |||
19 | /* | ||
20 | * This is needed for mixed drivers that need to work on all | ||
21 | * IOP3xx variants but behave slightly differently on each. | ||
22 | */ | ||
23 | #ifndef __ASSEMBLY__ | ||
24 | #ifdef CONFIG_ARCH_IOP321 | ||
25 | #define iop_is_321() (((processor_id & 0xfffff5e0) == 0x69052420)) | ||
26 | #else | ||
27 | #define iop_is_321() 0 | ||
28 | #endif | ||
29 | #endif | ||
30 | |||
31 | /* | ||
32 | * IOP321 I/O and Mem space regions for PCI autoconfiguration | ||
33 | */ | ||
34 | #define IOP321_PCI_IO_WINDOW_SIZE 0x00010000 | ||
35 | #define IOP321_PCI_LOWER_IO_PA 0x90000000 | ||
36 | #define IOP321_PCI_LOWER_IO_VA 0xfe000000 | ||
37 | #define IOP321_PCI_LOWER_IO_BA (*IOP321_OIOWTVR) | ||
38 | #define IOP321_PCI_UPPER_IO_PA (IOP321_PCI_LOWER_IO_PA + IOP321_PCI_IO_WINDOW_SIZE - 1) | ||
39 | #define IOP321_PCI_UPPER_IO_VA (IOP321_PCI_LOWER_IO_VA + IOP321_PCI_IO_WINDOW_SIZE - 1) | ||
40 | #define IOP321_PCI_UPPER_IO_BA (IOP321_PCI_LOWER_IO_BA + IOP321_PCI_IO_WINDOW_SIZE - 1) | ||
41 | #define IOP321_PCI_IO_OFFSET (IOP321_PCI_LOWER_IO_VA - IOP321_PCI_LOWER_IO_BA) | ||
42 | |||
43 | //#define IOP321_PCI_MEM_WINDOW_SIZE (~*IOP321_IALR1 + 1) | ||
44 | #define IOP321_PCI_MEM_WINDOW_SIZE 0x04000000 /* 64M outbound window */ | ||
45 | #define IOP321_PCI_LOWER_MEM_PA 0x80000000 | ||
46 | #define IOP321_PCI_LOWER_MEM_BA (*IOP321_OMWTVR0) | ||
47 | #define IOP321_PCI_UPPER_MEM_PA (IOP321_PCI_LOWER_MEM_PA + IOP321_PCI_MEM_WINDOW_SIZE - 1) | ||
48 | #define IOP321_PCI_UPPER_MEM_BA (IOP321_PCI_LOWER_MEM_BA + IOP321_PCI_MEM_WINDOW_SIZE - 1) | ||
49 | #define IOP321_PCI_MEM_OFFSET (IOP321_PCI_LOWER_MEM_PA - IOP321_PCI_LOWER_MEM_BA) | ||
50 | |||
51 | |||
52 | /* | ||
53 | * IOP321 chipset registers | ||
54 | */ | ||
55 | #define IOP321_VIRT_MEM_BASE 0xfeffe000 /* chip virtual mem address*/ | ||
56 | #define IOP321_PHYS_MEM_BASE 0xffffe000 /* chip physical memory address */ | ||
57 | #define IOP321_REG_ADDR(reg) (IOP321_VIRT_MEM_BASE | (reg)) | ||
58 | |||
59 | /* Reserved 0x00000000 through 0x000000FF */ | ||
60 | |||
61 | /* Address Translation Unit 0x00000100 through 0x000001FF */ | ||
62 | #define IOP321_ATUVID (volatile u16 *)IOP321_REG_ADDR(0x00000100) | ||
63 | #define IOP321_ATUDID (volatile u16 *)IOP321_REG_ADDR(0x00000102) | ||
64 | #define IOP321_ATUCMD (volatile u16 *)IOP321_REG_ADDR(0x00000104) | ||
65 | #define IOP321_ATUSR (volatile u16 *)IOP321_REG_ADDR(0x00000106) | ||
66 | #define IOP321_ATURID (volatile u8 *)IOP321_REG_ADDR(0x00000108) | ||
67 | #define IOP321_ATUCCR (volatile u32 *)IOP321_REG_ADDR(0x00000109) | ||
68 | #define IOP321_ATUCLSR (volatile u8 *)IOP321_REG_ADDR(0x0000010C) | ||
69 | #define IOP321_ATULT (volatile u8 *)IOP321_REG_ADDR(0x0000010D) | ||
70 | #define IOP321_ATUHTR (volatile u8 *)IOP321_REG_ADDR(0x0000010E) | ||
71 | #define IOP321_ATUBIST (volatile u8 *)IOP321_REG_ADDR(0x0000010F) | ||
72 | #define IOP321_IABAR0 (volatile u32 *)IOP321_REG_ADDR(0x00000110) | ||
73 | #define IOP321_IAUBAR0 (volatile u32 *)IOP321_REG_ADDR(0x00000114) | ||
74 | #define IOP321_IABAR1 (volatile u32 *)IOP321_REG_ADDR(0x00000118) | ||
75 | #define IOP321_IAUBAR1 (volatile u32 *)IOP321_REG_ADDR(0x0000011C) | ||
76 | #define IOP321_IABAR2 (volatile u32 *)IOP321_REG_ADDR(0x00000120) | ||
77 | #define IOP321_IAUBAR2 (volatile u32 *)IOP321_REG_ADDR(0x00000124) | ||
78 | #define IOP321_ASVIR (volatile u16 *)IOP321_REG_ADDR(0x0000012C) | ||
79 | #define IOP321_ASIR (volatile u16 *)IOP321_REG_ADDR(0x0000012E) | ||
80 | #define IOP321_ERBAR (volatile u32 *)IOP321_REG_ADDR(0x00000130) | ||
81 | /* Reserved 0x00000134 through 0x0000013B */ | ||
82 | #define IOP321_ATUILR (volatile u8 *)IOP321_REG_ADDR(0x0000013C) | ||
83 | #define IOP321_ATUIPR (volatile u8 *)IOP321_REG_ADDR(0x0000013D) | ||
84 | #define IOP321_ATUMGNT (volatile u8 *)IOP321_REG_ADDR(0x0000013E) | ||
85 | #define IOP321_ATUMLAT (volatile u8 *)IOP321_REG_ADDR(0x0000013F) | ||
86 | #define IOP321_IALR0 (volatile u32 *)IOP321_REG_ADDR(0x00000140) | ||
87 | #define IOP321_IATVR0 (volatile u32 *)IOP321_REG_ADDR(0x00000144) | ||
88 | #define IOP321_ERLR (volatile u32 *)IOP321_REG_ADDR(0x00000148) | ||
89 | #define IOP321_ERTVR (volatile u32 *)IOP321_REG_ADDR(0x0000014C) | ||
90 | #define IOP321_IALR1 (volatile u32 *)IOP321_REG_ADDR(0x00000150) | ||
91 | #define IOP321_IALR2 (volatile u32 *)IOP321_REG_ADDR(0x00000154) | ||
92 | #define IOP321_IATVR2 (volatile u32 *)IOP321_REG_ADDR(0x00000158) | ||
93 | #define IOP321_OIOWTVR (volatile u32 *)IOP321_REG_ADDR(0x0000015C) | ||
94 | #define IOP321_OMWTVR0 (volatile u32 *)IOP321_REG_ADDR(0x00000160) | ||
95 | #define IOP321_OUMWTVR0 (volatile u32 *)IOP321_REG_ADDR(0x00000164) | ||
96 | #define IOP321_OMWTVR1 (volatile u32 *)IOP321_REG_ADDR(0x00000168) | ||
97 | #define IOP321_OUMWTVR1 (volatile u32 *)IOP321_REG_ADDR(0x0000016C) | ||
98 | /* Reserved 0x00000170 through 0x00000177*/ | ||
99 | #define IOP321_OUDWTVR (volatile u32 *)IOP321_REG_ADDR(0x00000178) | ||
100 | /* Reserved 0x0000017C through 0x0000017F*/ | ||
101 | #define IOP321_ATUCR (volatile u32 *)IOP321_REG_ADDR(0x00000180) | ||
102 | #define IOP321_PCSR (volatile u32 *)IOP321_REG_ADDR(0x00000184) | ||
103 | #define IOP321_ATUISR (volatile u32 *)IOP321_REG_ADDR(0x00000188) | ||
104 | #define IOP321_ATUIMR (volatile u32 *)IOP321_REG_ADDR(0x0000018C) | ||
105 | #define IOP321_IABAR3 (volatile u32 *)IOP321_REG_ADDR(0x00000190) | ||
106 | #define IOP321_IAUBAR3 (volatile u32 *)IOP321_REG_ADDR(0x00000194) | ||
107 | #define IOP321_IALR3 (volatile u32 *)IOP321_REG_ADDR(0x00000198) | ||
108 | #define IOP321_IATVR3 (volatile u32 *)IOP321_REG_ADDR(0x0000019C) | ||
109 | /* Reserved 0x000001A0 through 0x000001A3*/ | ||
110 | #define IOP321_OCCAR (volatile u32 *)IOP321_REG_ADDR(0x000001A4) | ||
111 | /* Reserved 0x000001A8 through 0x000001AB*/ | ||
112 | #define IOP321_OCCDR (volatile u32 *)IOP321_REG_ADDR(0x000001AC) | ||
113 | /* Reserved 0x000001B0 through 0x000001BB*/ | ||
114 | #define IOP321_PDSCR (volatile u32 *)IOP321_REG_ADDR(0x000001BC) | ||
115 | #define IOP321_PMCAPID (volatile u8 *)IOP321_REG_ADDR(0x000001C0) | ||
116 | #define IOP321_PMNEXT (volatile u8 *)IOP321_REG_ADDR(0x000001C1) | ||
117 | #define IOP321_APMCR (volatile u16 *)IOP321_REG_ADDR(0x000001C2) | ||
118 | #define IOP321_APMCSR (volatile u16 *)IOP321_REG_ADDR(0x000001C4) | ||
119 | /* Reserved 0x000001C6 through 0x000001DF */ | ||
120 | #define IOP321_PCIXCAPID (volatile u8 *)IOP321_REG_ADDR(0x000001E0) | ||
121 | #define IOP321_PCIXNEXT (volatile u8 *)IOP321_REG_ADDR(0x000001E1) | ||
122 | #define IOP321_PCIXCMD (volatile u16 *)IOP321_REG_ADDR(0x000001E2) | ||
123 | #define IOP321_PCIXSR (volatile u32 *)IOP321_REG_ADDR(0x000001E4) | ||
124 | #define IOP321_PCIIRSR (volatile u32 *)IOP321_REG_ADDR(0x000001EC) | ||
125 | |||
126 | /* Messaging Unit 0x00000300 through 0x000003FF */ | ||
127 | |||
128 | /* Reserved 0x00000300 through 0x0000030c */ | ||
129 | #define IOP321_IMR0 (volatile u32 *)IOP321_REG_ADDR(0x00000310) | ||
130 | #define IOP321_IMR1 (volatile u32 *)IOP321_REG_ADDR(0x00000314) | ||
131 | #define IOP321_OMR0 (volatile u32 *)IOP321_REG_ADDR(0x00000318) | ||
132 | #define IOP321_OMR1 (volatile u32 *)IOP321_REG_ADDR(0x0000031C) | ||
133 | #define IOP321_IDR (volatile u32 *)IOP321_REG_ADDR(0x00000320) | ||
134 | #define IOP321_IISR (volatile u32 *)IOP321_REG_ADDR(0x00000324) | ||
135 | #define IOP321_IIMR (volatile u32 *)IOP321_REG_ADDR(0x00000328) | ||
136 | #define IOP321_ODR (volatile u32 *)IOP321_REG_ADDR(0x0000032C) | ||
137 | #define IOP321_OISR (volatile u32 *)IOP321_REG_ADDR(0x00000330) | ||
138 | #define IOP321_OIMR (volatile u32 *)IOP321_REG_ADDR(0x00000334) | ||
139 | /* Reserved 0x00000338 through 0x0000034F */ | ||
140 | #define IOP321_MUCR (volatile u32 *)IOP321_REG_ADDR(0x00000350) | ||
141 | #define IOP321_QBAR (volatile u32 *)IOP321_REG_ADDR(0x00000354) | ||
142 | /* Reserved 0x00000358 through 0x0000035C */ | ||
143 | #define IOP321_IFHPR (volatile u32 *)IOP321_REG_ADDR(0x00000360) | ||
144 | #define IOP321_IFTPR (volatile u32 *)IOP321_REG_ADDR(0x00000364) | ||
145 | #define IOP321_IPHPR (volatile u32 *)IOP321_REG_ADDR(0x00000368) | ||
146 | #define IOP321_IPTPR (volatile u32 *)IOP321_REG_ADDR(0x0000036C) | ||
147 | #define IOP321_OFHPR (volatile u32 *)IOP321_REG_ADDR(0x00000370) | ||
148 | #define IOP321_OFTPR (volatile u32 *)IOP321_REG_ADDR(0x00000374) | ||
149 | #define IOP321_OPHPR (volatile u32 *)IOP321_REG_ADDR(0x00000378) | ||
150 | #define IOP321_OPTPR (volatile u32 *)IOP321_REG_ADDR(0x0000037C) | ||
151 | #define IOP321_IAR (volatile u32 *)IOP321_REG_ADDR(0x00000380) | ||
152 | |||
153 | #define IOP321_IIxR_MASK 0x7f /* masks all */ | ||
154 | #define IOP321_IIxR_IRI 0x40 /* RC Index Register Interrupt */ | ||
155 | #define IOP321_IIxR_OFQF 0x20 /* RC Output Free Q Full (ERROR) */ | ||
156 | #define IOP321_IIxR_ipq 0x10 /* RC Inbound Post Q (post) */ | ||
157 | #define IOP321_IIxR_ERRDI 0x08 /* RO Error Doorbell Interrupt */ | ||
158 | #define IOP321_IIxR_IDI 0x04 /* RO Inbound Doorbell Interrupt */ | ||
159 | #define IOP321_IIxR_IM1 0x02 /* RC Inbound Message 1 Interrupt */ | ||
160 | #define IOP321_IIxR_IM0 0x01 /* RC Inbound Message 0 Interrupt */ | ||
161 | |||
162 | /* Reserved 0x00000384 through 0x000003FF */ | ||
163 | |||
164 | /* DMA Controller 0x00000400 through 0x000004FF */ | ||
165 | #define IOP321_DMA0_CCR (volatile u32 *)IOP321_REG_ADDR(0x00000400) | ||
166 | #define IOP321_DMA0_CSR (volatile u32 *)IOP321_REG_ADDR(0x00000404) | ||
167 | #define IOP321_DMA0_DAR (volatile u32 *)IOP321_REG_ADDR(0x0000040C) | ||
168 | #define IOP321_DMA0_NDAR (volatile u32 *)IOP321_REG_ADDR(0x00000410) | ||
169 | #define IOP321_DMA0_PADR (volatile u32 *)IOP321_REG_ADDR(0x00000414) | ||
170 | #define IOP321_DMA0_PUADR (volatile u32 *)IOP321_REG_ADDR(0x00000418) | ||
171 | #define IOP321_DMA0_LADR (volatile u32 *)IOP321_REG_ADDR(0X0000041C) | ||
172 | #define IOP321_DMA0_BCR (volatile u32 *)IOP321_REG_ADDR(0x00000420) | ||
173 | #define IOP321_DMA0_DCR (volatile u32 *)IOP321_REG_ADDR(0x00000424) | ||
174 | /* Reserved 0x00000428 through 0x0000043C */ | ||
175 | #define IOP321_DMA1_CCR (volatile u32 *)IOP321_REG_ADDR(0x00000440) | ||
176 | #define IOP321_DMA1_CSR (volatile u32 *)IOP321_REG_ADDR(0x00000444) | ||
177 | #define IOP321_DMA1_DAR (volatile u32 *)IOP321_REG_ADDR(0x0000044C) | ||
178 | #define IOP321_DMA1_NDAR (volatile u32 *)IOP321_REG_ADDR(0x00000450) | ||
179 | #define IOP321_DMA1_PADR (volatile u32 *)IOP321_REG_ADDR(0x00000454) | ||
180 | #define IOP321_DMA1_PUADR (volatile u32 *)IOP321_REG_ADDR(0x00000458) | ||
181 | #define IOP321_DMA1_LADR (volatile u32 *)IOP321_REG_ADDR(0x0000045C) | ||
182 | #define IOP321_DMA1_BCR (volatile u32 *)IOP321_REG_ADDR(0x00000460) | ||
183 | #define IOP321_DMA1_DCR (volatile u32 *)IOP321_REG_ADDR(0x00000464) | ||
184 | /* Reserved 0x00000468 through 0x000004FF */ | ||
185 | |||
186 | /* Memory controller 0x00000500 through 0x0005FF */ | ||
187 | |||
188 | /* Peripheral bus interface unit 0x00000680 through 0x0006FF */ | ||
189 | #define IOP321_PBCR (volatile u32 *)IOP321_REG_ADDR(0x00000680) | ||
190 | #define IOP321_PBISR (volatile u32 *)IOP321_REG_ADDR(0x00000684) | ||
191 | #define IOP321_PBBAR0 (volatile u32 *)IOP321_REG_ADDR(0x00000688) | ||
192 | #define IOP321_PBLR0 (volatile u32 *)IOP321_REG_ADDR(0x0000068C) | ||
193 | #define IOP321_PBBAR1 (volatile u32 *)IOP321_REG_ADDR(0x00000690) | ||
194 | #define IOP321_PBLR1 (volatile u32 *)IOP321_REG_ADDR(0x00000694) | ||
195 | #define IOP321_PBBAR2 (volatile u32 *)IOP321_REG_ADDR(0x00000698) | ||
196 | #define IOP321_PBLR2 (volatile u32 *)IOP321_REG_ADDR(0x0000069C) | ||
197 | #define IOP321_PBBAR3 (volatile u32 *)IOP321_REG_ADDR(0x000006A0) | ||
198 | #define IOP321_PBLR3 (volatile u32 *)IOP321_REG_ADDR(0x000006A4) | ||
199 | #define IOP321_PBBAR4 (volatile u32 *)IOP321_REG_ADDR(0x000006A8) | ||
200 | #define IOP321_PBLR4 (volatile u32 *)IOP321_REG_ADDR(0x000006AC) | ||
201 | #define IOP321_PBBAR5 (volatile u32 *)IOP321_REG_ADDR(0x000006B0) | ||
202 | #define IOP321_PBLR5 (volatile u32 *)IOP321_REG_ADDR(0x000006B4) | ||
203 | #define IOP321_PBDSCR (volatile u32 *)IOP321_REG_ADDR(0x000006B8) | ||
204 | /* Reserved 0x000006BC */ | ||
205 | #define IOP321_PMBR0 (volatile u32 *)IOP321_REG_ADDR(0x000006C0) | ||
206 | /* Reserved 0x000006C4 through 0x000006DC */ | ||
207 | #define IOP321_PMBR1 (volatile u32 *)IOP321_REG_ADDR(0x000006E0) | ||
208 | #define IOP321_PMBR2 (volatile u32 *)IOP321_REG_ADDR(0x000006E4) | ||
209 | |||
210 | #define IOP321_PBCR_EN 0x1 | ||
211 | |||
212 | #define IOP321_PBISR_BOOR_ERR 0x1 | ||
213 | |||
214 | /* Peripheral performance monitoring unit 0x00000700 through 0x00077F */ | ||
215 | #define IOP321_GTMR (volatile u32 *)IOP321_REG_ADDR(0x00000700) | ||
216 | #define IOP321_ESR (volatile u32 *)IOP321_REG_ADDR(0x00000704) | ||
217 | #define IOP321_EMISR (volatile u32 *)IOP321_REG_ADDR(0x00000708) | ||
218 | /* reserved 0x00000070c */ | ||
219 | #define IOP321_GTSR (volatile u32 *)IOP321_REG_ADDR(0x00000710) | ||
220 | /* PERC0 DOESN'T EXIST - index from 1! */ | ||
221 | #define IOP321_PERCR0 (volatile u32 *)IOP321_REG_ADDR(0x00000710) | ||
222 | |||
223 | #define IOP321_GTMR_NGCE 0x04 /* (Not) Global Counter Enable */ | ||
224 | |||
225 | /* Internal arbitration unit 0x00000780 through 0x0007BF */ | ||
226 | #define IOP321_IACR (volatile u32 *)IOP321_REG_ADDR(0x00000780) | ||
227 | #define IOP321_MTTR1 (volatile u32 *)IOP321_REG_ADDR(0x00000784) | ||
228 | #define IOP321_MTTR2 (volatile u32 *)IOP321_REG_ADDR(0x00000788) | ||
229 | |||
230 | /* General Purpose I/O Registers */ | ||
231 | #define IOP321_GPOE (volatile u32 *)IOP321_REG_ADDR(0x000007C4) | ||
232 | #define IOP321_GPID (volatile u32 *)IOP321_REG_ADDR(0x000007C8) | ||
233 | #define IOP321_GPOD (volatile u32 *)IOP321_REG_ADDR(0x000007CC) | ||
234 | |||
235 | /* Interrupt Controller */ | ||
236 | #define IOP321_INTCTL (volatile u32 *)IOP321_REG_ADDR(0x000007D0) | ||
237 | #define IOP321_INTSTR (volatile u32 *)IOP321_REG_ADDR(0x000007D4) | ||
238 | #define IOP321_IINTSRC (volatile u32 *)IOP321_REG_ADDR(0x000007D8) | ||
239 | #define IOP321_FINTSRC (volatile u32 *)IOP321_REG_ADDR(0x000007DC) | ||
240 | |||
241 | /* Timers */ | ||
242 | |||
243 | #define IOP321_TU_TMR0 (volatile u32 *)IOP321_REG_ADDR(0x000007E0) | ||
244 | #define IOP321_TU_TMR1 (volatile u32 *)IOP321_REG_ADDR(0x000007E4) | ||
245 | |||
246 | #ifdef CONFIG_ARCH_IQ80321 | ||
247 | #define IOP321_TICK_RATE 200000000 /* 200 MHz clock */ | ||
248 | #elif defined(CONFIG_ARCH_IQ31244) | ||
249 | #define IOP321_TICK_RATE 198000000 /* 33.000 MHz crystal */ | ||
250 | #endif | ||
251 | |||
252 | #ifdef CONFIG_ARCH_EP80219 | ||
253 | #undef IOP321_TICK_RATE | ||
254 | #define IOP321_TICK_RATE 200000000 /* 33.333333 Mhz crystal */ | ||
255 | #endif | ||
256 | |||
257 | #define IOP321_TMR_TC 0x01 | ||
258 | #define IOP321_TMR_EN 0x02 | ||
259 | #define IOP321_TMR_RELOAD 0x04 | ||
260 | #define IOP321_TMR_PRIVILEGED 0x09 | ||
261 | |||
262 | #define IOP321_TMR_RATIO_1_1 0x00 | ||
263 | #define IOP321_TMR_RATIO_4_1 0x10 | ||
264 | #define IOP321_TMR_RATIO_8_1 0x20 | ||
265 | #define IOP321_TMR_RATIO_16_1 0x30 | ||
266 | |||
267 | #define IOP321_TU_TCR0 (volatile u32 *)IOP321_REG_ADDR(0x000007E8) | ||
268 | #define IOP321_TU_TCR1 (volatile u32 *)IOP321_REG_ADDR(0x000007EC) | ||
269 | #define IOP321_TU_TRR0 (volatile u32 *)IOP321_REG_ADDR(0x000007F0) | ||
270 | #define IOP321_TU_TRR1 (volatile u32 *)IOP321_REG_ADDR(0x000007F4) | ||
271 | #define IOP321_TU_TISR (volatile u32 *)IOP321_REG_ADDR(0x000007F8) | ||
272 | #define IOP321_TU_WDTCR (volatile u32 *)IOP321_REG_ADDR(0x000007FC) | ||
273 | |||
274 | /* Application accelerator unit 0x00000800 - 0x000008FF */ | ||
275 | #define IOP321_AAU_ACR (volatile u32 *)IOP321_REG_ADDR(0x00000800) | ||
276 | #define IOP321_AAU_ASR (volatile u32 *)IOP321_REG_ADDR(0x00000804) | ||
277 | #define IOP321_AAU_ADAR (volatile u32 *)IOP321_REG_ADDR(0x00000808) | ||
278 | #define IOP321_AAU_ANDAR (volatile u32 *)IOP321_REG_ADDR(0x0000080C) | ||
279 | #define IOP321_AAU_SAR1 (volatile u32 *)IOP321_REG_ADDR(0x00000810) | ||
280 | #define IOP321_AAU_SAR2 (volatile u32 *)IOP321_REG_ADDR(0x00000814) | ||
281 | #define IOP321_AAU_SAR3 (volatile u32 *)IOP321_REG_ADDR(0x00000818) | ||
282 | #define IOP321_AAU_SAR4 (volatile u32 *)IOP321_REG_ADDR(0x0000081C) | ||
283 | #define IOP321_AAU_SAR5 (volatile u32 *)IOP321_REG_ADDR(0x0000082C) | ||
284 | #define IOP321_AAU_SAR6 (volatile u32 *)IOP321_REG_ADDR(0x00000830) | ||
285 | #define IOP321_AAU_SAR7 (volatile u32 *)IOP321_REG_ADDR(0x00000834) | ||
286 | #define IOP321_AAU_SAR8 (volatile u32 *)IOP321_REG_ADDR(0x00000838) | ||
287 | #define IOP321_AAU_SAR9 (volatile u32 *)IOP321_REG_ADDR(0x00000840) | ||
288 | #define IOP321_AAU_SAR10 (volatile u32 *)IOP321_REG_ADDR(0x00000844) | ||
289 | #define IOP321_AAU_SAR11 (volatile u32 *)IOP321_REG_ADDR(0x00000848) | ||
290 | #define IOP321_AAU_SAR12 (volatile u32 *)IOP321_REG_ADDR(0x0000084C) | ||
291 | #define IOP321_AAU_SAR13 (volatile u32 *)IOP321_REG_ADDR(0x00000850) | ||
292 | #define IOP321_AAU_SAR14 (volatile u32 *)IOP321_REG_ADDR(0x00000854) | ||
293 | #define IOP321_AAU_SAR15 (volatile u32 *)IOP321_REG_ADDR(0x00000858) | ||
294 | #define IOP321_AAU_SAR16 (volatile u32 *)IOP321_REG_ADDR(0x0000085C) | ||
295 | #define IOP321_AAU_SAR17 (volatile u32 *)IOP321_REG_ADDR(0x00000864) | ||
296 | #define IOP321_AAU_SAR18 (volatile u32 *)IOP321_REG_ADDR(0x00000868) | ||
297 | #define IOP321_AAU_SAR19 (volatile u32 *)IOP321_REG_ADDR(0x0000086C) | ||
298 | #define IOP321_AAU_SAR20 (volatile u32 *)IOP321_REG_ADDR(0x00000870) | ||
299 | #define IOP321_AAU_SAR21 (volatile u32 *)IOP321_REG_ADDR(0x00000874) | ||
300 | #define IOP321_AAU_SAR22 (volatile u32 *)IOP321_REG_ADDR(0x00000878) | ||
301 | #define IOP321_AAU_SAR23 (volatile u32 *)IOP321_REG_ADDR(0x0000087C) | ||
302 | #define IOP321_AAU_SAR24 (volatile u32 *)IOP321_REG_ADDR(0x00000880) | ||
303 | #define IOP321_AAU_SAR25 (volatile u32 *)IOP321_REG_ADDR(0x00000888) | ||
304 | #define IOP321_AAU_SAR26 (volatile u32 *)IOP321_REG_ADDR(0x0000088C) | ||
305 | #define IOP321_AAU_SAR27 (volatile u32 *)IOP321_REG_ADDR(0x00000890) | ||
306 | #define IOP321_AAU_SAR28 (volatile u32 *)IOP321_REG_ADDR(0x00000894) | ||
307 | #define IOP321_AAU_SAR29 (volatile u32 *)IOP321_REG_ADDR(0x00000898) | ||
308 | #define IOP321_AAU_SAR30 (volatile u32 *)IOP321_REG_ADDR(0x0000089C) | ||
309 | #define IOP321_AAU_SAR31 (volatile u32 *)IOP321_REG_ADDR(0x000008A0) | ||
310 | #define IOP321_AAU_SAR32 (volatile u32 *)IOP321_REG_ADDR(0x000008A4) | ||
311 | #define IOP321_AAU_DAR (volatile u32 *)IOP321_REG_ADDR(0x00000820) | ||
312 | #define IOP321_AAU_ABCR (volatile u32 *)IOP321_REG_ADDR(0x00000824) | ||
313 | #define IOP321_AAU_ADCR (volatile u32 *)IOP321_REG_ADDR(0x00000828) | ||
314 | #define IOP321_AAU_EDCR0 (volatile u32 *)IOP321_REG_ADDR(0x0000083c) | ||
315 | #define IOP321_AAU_EDCR1 (volatile u32 *)IOP321_REG_ADDR(0x00000860) | ||
316 | #define IOP321_AAU_EDCR2 (volatile u32 *)IOP321_REG_ADDR(0x00000884) | ||
317 | |||
318 | |||
319 | /* SSP serial port unit 0x00001600 - 0x0000167F */ | ||
320 | /* I2C bus interface unit 0x00001680 - 0x000016FF */ | ||
321 | #define IOP321_ICR0 (volatile u32 *)IOP321_REG_ADDR(0x00001680) | ||
322 | #define IOP321_ISR0 (volatile u32 *)IOP321_REG_ADDR(0x00001684) | ||
323 | #define IOP321_ISAR0 (volatile u32 *)IOP321_REG_ADDR(0x00001688) | ||
324 | #define IOP321_IDBR0 (volatile u32 *)IOP321_REG_ADDR(0x0000168C) | ||
325 | /* Reserved 0x00001690 */ | ||
326 | #define IOP321_IBMR0 (volatile u32 *)IOP321_REG_ADDR(0x00001694) | ||
327 | /* Reserved 0x00001698 */ | ||
328 | /* Reserved 0x0000169C */ | ||
329 | #define IOP321_ICR1 (volatile u32 *)IOP321_REG_ADDR(0x000016A0) | ||
330 | #define IOP321_ISR1 (volatile u32 *)IOP321_REG_ADDR(0x000016A4) | ||
331 | #define IOP321_ISAR1 (volatile u32 *)IOP321_REG_ADDR(0x000016A8) | ||
332 | #define IOP321_IDBR1 (volatile u32 *)IOP321_REG_ADDR(0x000016AC) | ||
333 | #define IOP321_IBMR1 (volatile u32 *)IOP321_REG_ADDR(0x000016B4) | ||
334 | /* Reserved 0x000016B8 through 0x000016FC */ | ||
335 | |||
336 | /* for I2C bit defs see drivers/i2c/i2c-iop3xx.h */ | ||
337 | |||
338 | |||
339 | #ifndef __ASSEMBLY__ | ||
340 | extern void iop321_map_io(void); | ||
341 | extern void iop321_init_irq(void); | ||
342 | extern void iop321_time_init(void); | ||
343 | #endif | ||
344 | |||
345 | #endif // _IOP321_HW_H_ | ||
diff --git a/include/asm-arm/arch-iop3xx/iop331-irqs.h b/include/asm-arm/arch-iop3xx/iop331-irqs.h new file mode 100644 index 000000000000..8ff73d487222 --- /dev/null +++ b/include/asm-arm/arch-iop3xx/iop331-irqs.h | |||
@@ -0,0 +1,136 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-iop3xx/irqs.h | ||
3 | * | ||
4 | * Author: Dave Jiang (dave.jiang@intel.com) | ||
5 | * Copyright: (C) 2003 Intel Corp. | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License version 2 as | ||
9 | * published by the Free Software Foundation. | ||
10 | * | ||
11 | */ | ||
12 | #ifndef _IOP331_IRQS_H_ | ||
13 | #define _IOP331_IRQS_H_ | ||
14 | |||
15 | /* | ||
16 | * IOP80331 chipset interrupts | ||
17 | */ | ||
18 | #define IOP331_IRQ_OFS 0 | ||
19 | #define IOP331_IRQ(x) (IOP331_IRQ_OFS + (x)) | ||
20 | |||
21 | /* | ||
22 | * On IRQ or FIQ register | ||
23 | */ | ||
24 | #define IRQ_IOP331_DMA0_EOT IOP331_IRQ(0) | ||
25 | #define IRQ_IOP331_DMA0_EOC IOP331_IRQ(1) | ||
26 | #define IRQ_IOP331_DMA1_EOT IOP331_IRQ(2) | ||
27 | #define IRQ_IOP331_DMA1_EOC IOP331_IRQ(3) | ||
28 | #define IRQ_IOP331_RSVD_4 IOP331_IRQ(4) | ||
29 | #define IRQ_IOP331_RSVD_5 IOP331_IRQ(5) | ||
30 | #define IRQ_IOP331_AA_EOT IOP331_IRQ(6) | ||
31 | #define IRQ_IOP331_AA_EOC IOP331_IRQ(7) | ||
32 | #define IRQ_IOP331_TIMER0 IOP331_IRQ(8) | ||
33 | #define IRQ_IOP331_TIMER1 IOP331_IRQ(9) | ||
34 | #define IRQ_IOP331_I2C_0 IOP331_IRQ(10) | ||
35 | #define IRQ_IOP331_I2C_1 IOP331_IRQ(11) | ||
36 | #define IRQ_IOP331_MSG IOP331_IRQ(12) | ||
37 | #define IRQ_IOP331_MSGIBQ IOP331_IRQ(13) | ||
38 | #define IRQ_IOP331_ATU_BIST IOP331_IRQ(14) | ||
39 | #define IRQ_IOP331_PERFMON IOP331_IRQ(15) | ||
40 | #define IRQ_IOP331_CORE_PMU IOP331_IRQ(16) | ||
41 | #define IRQ_IOP331_RSVD_17 IOP331_IRQ(17) | ||
42 | #define IRQ_IOP331_RSVD_18 IOP331_IRQ(18) | ||
43 | #define IRQ_IOP331_RSVD_19 IOP331_IRQ(19) | ||
44 | #define IRQ_IOP331_RSVD_20 IOP331_IRQ(20) | ||
45 | #define IRQ_IOP331_RSVD_21 IOP331_IRQ(21) | ||
46 | #define IRQ_IOP331_RSVD_22 IOP331_IRQ(22) | ||
47 | #define IRQ_IOP331_RSVD_23 IOP331_IRQ(23) | ||
48 | #define IRQ_IOP331_XINT0 IOP331_IRQ(24) | ||
49 | #define IRQ_IOP331_XINT1 IOP331_IRQ(25) | ||
50 | #define IRQ_IOP331_XINT2 IOP331_IRQ(26) | ||
51 | #define IRQ_IOP331_XINT3 IOP331_IRQ(27) | ||
52 | #define IRQ_IOP331_RSVD_28 IOP331_IRQ(28) | ||
53 | #define IRQ_IOP331_RSVD_29 IOP331_IRQ(29) | ||
54 | #define IRQ_IOP331_RSVD_30 IOP331_IRQ(30) | ||
55 | #define IRQ_IOP331_RSVD_31 IOP331_IRQ(31) | ||
56 | #define IRQ_IOP331_XINT8 IOP331_IRQ(32) // 0 | ||
57 | #define IRQ_IOP331_XINT9 IOP331_IRQ(33) // 1 | ||
58 | #define IRQ_IOP331_XINT10 IOP331_IRQ(34) // 2 | ||
59 | #define IRQ_IOP331_XINT11 IOP331_IRQ(35) // 3 | ||
60 | #define IRQ_IOP331_XINT12 IOP331_IRQ(36) // 4 | ||
61 | #define IRQ_IOP331_XINT13 IOP331_IRQ(37) // 5 | ||
62 | #define IRQ_IOP331_XINT14 IOP331_IRQ(38) // 6 | ||
63 | #define IRQ_IOP331_XINT15 IOP331_IRQ(39) // 7 | ||
64 | #define IRQ_IOP331_RSVD_40 IOP331_IRQ(40) // 8 | ||
65 | #define IRQ_IOP331_RSVD_41 IOP331_IRQ(41) // 9 | ||
66 | #define IRQ_IOP331_RSVD_42 IOP331_IRQ(42) // 10 | ||
67 | #define IRQ_IOP331_RSVD_43 IOP331_IRQ(43) // 11 | ||
68 | #define IRQ_IOP331_RSVD_44 IOP331_IRQ(44) // 12 | ||
69 | #define IRQ_IOP331_RSVD_45 IOP331_IRQ(45) // 13 | ||
70 | #define IRQ_IOP331_RSVD_46 IOP331_IRQ(46) // 14 | ||
71 | #define IRQ_IOP331_RSVD_47 IOP331_IRQ(47) // 15 | ||
72 | #define IRQ_IOP331_RSVD_48 IOP331_IRQ(48) // 16 | ||
73 | #define IRQ_IOP331_RSVD_49 IOP331_IRQ(49) // 17 | ||
74 | #define IRQ_IOP331_RSVD_50 IOP331_IRQ(50) // 18 | ||
75 | #define IRQ_IOP331_UART0 IOP331_IRQ(51) // 19 | ||
76 | #define IRQ_IOP331_UART1 IOP331_IRQ(52) // 20 | ||
77 | #define IRQ_IOP331_PBIE IOP331_IRQ(53) // 21 | ||
78 | #define IRQ_IOP331_ATU_CRW IOP331_IRQ(54) // 22 | ||
79 | #define IRQ_IOP331_ATU_ERR IOP331_IRQ(55) // 23 | ||
80 | #define IRQ_IOP331_MCU_ERR IOP331_IRQ(56) // 24 | ||
81 | #define IRQ_IOP331_DMA0_ERR IOP331_IRQ(57) // 25 | ||
82 | #define IRQ_IOP331_DMA1_ERR IOP331_IRQ(58) // 26 | ||
83 | #define IRQ_IOP331_RSVD_59 IOP331_IRQ(59) // 27 | ||
84 | #define IRQ_IOP331_AA_ERR IOP331_IRQ(60) // 28 | ||
85 | #define IRQ_IOP331_RSVD_61 IOP331_IRQ(61) // 29 | ||
86 | #define IRQ_IOP331_MSG_ERR IOP331_IRQ(62) // 30 | ||
87 | #define IRQ_IOP331_HPI IOP331_IRQ(63) // 31 | ||
88 | |||
89 | #define NR_IOP331_IRQS (IOP331_IRQ(63) + 1) | ||
90 | |||
91 | #define NR_IRQS NR_IOP331_IRQS | ||
92 | |||
93 | |||
94 | #if defined(CONFIG_ARCH_IQ80331) | ||
95 | /* | ||
96 | * Interrupts available on the IQ80331 board | ||
97 | */ | ||
98 | |||
99 | /* | ||
100 | * On board devices | ||
101 | */ | ||
102 | #define IRQ_IQ80331_I82544 IRQ_IOP331_XINT0 | ||
103 | #define IRQ_IQ80331_UART0 IRQ_IOP331_UART0 | ||
104 | #define IRQ_IQ80331_UART1 IRQ_IOP331_UART1 | ||
105 | |||
106 | /* | ||
107 | * PCI interrupts | ||
108 | */ | ||
109 | #define IRQ_IQ80331_INTA IRQ_IOP331_XINT0 | ||
110 | #define IRQ_IQ80331_INTB IRQ_IOP331_XINT1 | ||
111 | #define IRQ_IQ80331_INTC IRQ_IOP331_XINT2 | ||
112 | #define IRQ_IQ80331_INTD IRQ_IOP331_XINT3 | ||
113 | |||
114 | #elif defined(CONFIG_MACH_IQ80332) | ||
115 | /* | ||
116 | * Interrupts available on the IQ80332 board | ||
117 | */ | ||
118 | |||
119 | /* | ||
120 | * On board devices | ||
121 | */ | ||
122 | #define IRQ_IQ80332_I82544 IRQ_IOP331_XINT0 | ||
123 | #define IRQ_IQ80332_UART0 IRQ_IOP331_UART0 | ||
124 | #define IRQ_IQ80332_UART1 IRQ_IOP331_UART1 | ||
125 | |||
126 | /* | ||
127 | * PCI interrupts | ||
128 | */ | ||
129 | #define IRQ_IQ80332_INTA IRQ_IOP331_XINT0 | ||
130 | #define IRQ_IQ80332_INTB IRQ_IOP331_XINT1 | ||
131 | #define IRQ_IQ80332_INTC IRQ_IOP331_XINT2 | ||
132 | #define IRQ_IQ80332_INTD IRQ_IOP331_XINT3 | ||
133 | |||
134 | #endif | ||
135 | |||
136 | #endif // _IOP331_IRQ_H_ | ||
diff --git a/include/asm-arm/arch-iop3xx/iop331.h b/include/asm-arm/arch-iop3xx/iop331.h new file mode 100644 index 000000000000..96adffd8bad2 --- /dev/null +++ b/include/asm-arm/arch-iop3xx/iop331.h | |||
@@ -0,0 +1,363 @@ | |||
1 | /* | ||
2 | * linux/include/asm/arch-iop3xx/iop331.h | ||
3 | * | ||
4 | * Intel IOP331 Chip definitions | ||
5 | * | ||
6 | * Author: Dave Jiang (dave.jiang@intel.com) | ||
7 | * Copyright (C) 2003, 2004 Intel Corp. | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or modify | ||
10 | * it under the terms of the GNU General Public License version 2 as | ||
11 | * published by the Free Software Foundation. | ||
12 | */ | ||
13 | |||
14 | #ifndef _IOP331_HW_H_ | ||
15 | #define _IOP331_HW_H_ | ||
16 | |||
17 | |||
18 | /* | ||
19 | * This is needed for mixed drivers that need to work on all | ||
20 | * IOP3xx variants but behave slightly differently on each. | ||
21 | */ | ||
22 | #ifndef __ASSEMBLY__ | ||
23 | #ifdef CONFIG_ARCH_IOP331 | ||
24 | /*#define iop_is_331() ((processor_id & 0xffffffb0) == 0x69054090) */ | ||
25 | #define iop_is_331() ((processor_id & 0xffffff30) == 0x69054010) | ||
26 | #else | ||
27 | #define iop_is_331() 0 | ||
28 | #endif | ||
29 | #endif | ||
30 | |||
31 | /* | ||
32 | * IOP331 I/O and Mem space regions for PCI autoconfiguration | ||
33 | */ | ||
34 | #define IOP331_PCI_IO_WINDOW_SIZE 0x00010000 | ||
35 | #define IOP331_PCI_LOWER_IO_PA 0x90000000 | ||
36 | #define IOP331_PCI_LOWER_IO_VA 0xfe000000 | ||
37 | #define IOP331_PCI_LOWER_IO_BA (*IOP331_OIOWTVR) | ||
38 | #define IOP331_PCI_UPPER_IO_PA (IOP331_PCI_LOWER_IO_PA + IOP331_PCI_IO_WINDOW_SIZE - 1) | ||
39 | #define IOP331_PCI_UPPER_IO_VA (IOP331_PCI_LOWER_IO_VA + IOP331_PCI_IO_WINDOW_SIZE - 1) | ||
40 | #define IOP331_PCI_UPPER_IO_BA (IOP331_PCI_LOWER_IO_BA + IOP331_PCI_IO_WINDOW_SIZE - 1) | ||
41 | #define IOP331_PCI_IO_OFFSET (IOP331_PCI_LOWER_IO_VA - IOP331_PCI_LOWER_IO_BA) | ||
42 | |||
43 | /* this can be 128M if OMWTVR1 is set */ | ||
44 | #define IOP331_PCI_MEM_WINDOW_SIZE 0x04000000 /* 64M outbound window */ | ||
45 | //#define IOP331_PCI_MEM_WINDOW_SIZE (~*IOP331_IALR1 + 1) | ||
46 | #define IOP331_PCI_LOWER_MEM_PA 0x80000000 | ||
47 | #define IOP331_PCI_LOWER_MEM_BA (*IOP331_OMWTVR0) | ||
48 | #define IOP331_PCI_UPPER_MEM_PA (IOP331_PCI_LOWER_MEM_PA + IOP331_PCI_MEM_WINDOW_SIZE - 1) | ||
49 | #define IOP331_PCI_UPPER_MEM_BA (IOP331_PCI_LOWER_MEM_BA + IOP331_PCI_MEM_WINDOW_SIZE - 1) | ||
50 | #define IOP331_PCI_MEM_OFFSET (IOP331_PCI_LOWER_MEM_PA - IOP331_PCI_LOWER_MEM_BA) | ||
51 | |||
52 | /* | ||
53 | * IOP331 chipset registers | ||
54 | */ | ||
55 | #define IOP331_VIRT_MEM_BASE 0xfeffe000 /* chip virtual mem address*/ | ||
56 | #define IOP331_PHYS_MEM_BASE 0xffffe000 /* chip physical memory address */ | ||
57 | #define IOP331_REG_ADDR(reg) (IOP331_VIRT_MEM_BASE | (reg)) | ||
58 | |||
59 | /* Reserved 0x00000000 through 0x000000FF */ | ||
60 | |||
61 | /* Address Translation Unit 0x00000100 through 0x000001FF */ | ||
62 | #define IOP331_ATUVID (volatile u16 *)IOP331_REG_ADDR(0x00000100) | ||
63 | #define IOP331_ATUDID (volatile u16 *)IOP331_REG_ADDR(0x00000102) | ||
64 | #define IOP331_ATUCMD (volatile u16 *)IOP331_REG_ADDR(0x00000104) | ||
65 | #define IOP331_ATUSR (volatile u16 *)IOP331_REG_ADDR(0x00000106) | ||
66 | #define IOP331_ATURID (volatile u8 *)IOP331_REG_ADDR(0x00000108) | ||
67 | #define IOP331_ATUCCR (volatile u32 *)IOP331_REG_ADDR(0x00000109) | ||
68 | #define IOP331_ATUCLSR (volatile u8 *)IOP331_REG_ADDR(0x0000010C) | ||
69 | #define IOP331_ATULT (volatile u8 *)IOP331_REG_ADDR(0x0000010D) | ||
70 | #define IOP331_ATUHTR (volatile u8 *)IOP331_REG_ADDR(0x0000010E) | ||
71 | #define IOP331_ATUBIST (volatile u8 *)IOP331_REG_ADDR(0x0000010F) | ||
72 | #define IOP331_IABAR0 (volatile u32 *)IOP331_REG_ADDR(0x00000110) | ||
73 | #define IOP331_IAUBAR0 (volatile u32 *)IOP331_REG_ADDR(0x00000114) | ||
74 | #define IOP331_IABAR1 (volatile u32 *)IOP331_REG_ADDR(0x00000118) | ||
75 | #define IOP331_IAUBAR1 (volatile u32 *)IOP331_REG_ADDR(0x0000011C) | ||
76 | #define IOP331_IABAR2 (volatile u32 *)IOP331_REG_ADDR(0x00000120) | ||
77 | #define IOP331_IAUBAR2 (volatile u32 *)IOP331_REG_ADDR(0x00000124) | ||
78 | #define IOP331_ASVIR (volatile u16 *)IOP331_REG_ADDR(0x0000012C) | ||
79 | #define IOP331_ASIR (volatile u16 *)IOP331_REG_ADDR(0x0000012E) | ||
80 | #define IOP331_ERBAR (volatile u32 *)IOP331_REG_ADDR(0x00000130) | ||
81 | #define IOP331_ATU_CAPPTR (volatile u32 *)IOP331_REG_ADDR(0x00000134) | ||
82 | /* Reserved 0x00000138 through 0x0000013B */ | ||
83 | #define IOP331_ATUILR (volatile u8 *)IOP331_REG_ADDR(0x0000013C) | ||
84 | #define IOP331_ATUIPR (volatile u8 *)IOP331_REG_ADDR(0x0000013D) | ||
85 | #define IOP331_ATUMGNT (volatile u8 *)IOP331_REG_ADDR(0x0000013E) | ||
86 | #define IOP331_ATUMLAT (volatile u8 *)IOP331_REG_ADDR(0x0000013F) | ||
87 | #define IOP331_IALR0 (volatile u32 *)IOP331_REG_ADDR(0x00000140) | ||
88 | #define IOP331_IATVR0 (volatile u32 *)IOP331_REG_ADDR(0x00000144) | ||
89 | #define IOP331_ERLR (volatile u32 *)IOP331_REG_ADDR(0x00000148) | ||
90 | #define IOP331_ERTVR (volatile u32 *)IOP331_REG_ADDR(0x0000014C) | ||
91 | #define IOP331_IALR1 (volatile u32 *)IOP331_REG_ADDR(0x00000150) | ||
92 | #define IOP331_IALR2 (volatile u32 *)IOP331_REG_ADDR(0x00000154) | ||
93 | #define IOP331_IATVR2 (volatile u32 *)IOP331_REG_ADDR(0x00000158) | ||
94 | #define IOP331_OIOWTVR (volatile u32 *)IOP331_REG_ADDR(0x0000015C) | ||
95 | #define IOP331_OMWTVR0 (volatile u32 *)IOP331_REG_ADDR(0x00000160) | ||
96 | #define IOP331_OUMWTVR0 (volatile u32 *)IOP331_REG_ADDR(0x00000164) | ||
97 | #define IOP331_OMWTVR1 (volatile u32 *)IOP331_REG_ADDR(0x00000168) | ||
98 | #define IOP331_OUMWTVR1 (volatile u32 *)IOP331_REG_ADDR(0x0000016C) | ||
99 | /* Reserved 0x00000170 through 0x00000177*/ | ||
100 | #define IOP331_OUDWTVR (volatile u32 *)IOP331_REG_ADDR(0x00000178) | ||
101 | /* Reserved 0x0000017C through 0x0000017F*/ | ||
102 | #define IOP331_ATUCR (volatile u32 *)IOP331_REG_ADDR(0x00000180) | ||
103 | #define IOP331_PCSR (volatile u32 *)IOP331_REG_ADDR(0x00000184) | ||
104 | #define IOP331_ATUISR (volatile u32 *)IOP331_REG_ADDR(0x00000188) | ||
105 | #define IOP331_ATUIMR (volatile u32 *)IOP331_REG_ADDR(0x0000018C) | ||
106 | #define IOP331_IABAR3 (volatile u32 *)IOP331_REG_ADDR(0x00000190) | ||
107 | #define IOP331_IAUBAR3 (volatile u32 *)IOP331_REG_ADDR(0x00000194) | ||
108 | #define IOP331_IALR3 (volatile u32 *)IOP331_REG_ADDR(0x00000198) | ||
109 | #define IOP331_IATVR3 (volatile u32 *)IOP331_REG_ADDR(0x0000019C) | ||
110 | /* Reserved 0x000001A0 through 0x000001A3*/ | ||
111 | #define IOP331_OCCAR (volatile u32 *)IOP331_REG_ADDR(0x000001A4) | ||
112 | /* Reserved 0x000001A8 through 0x000001AB*/ | ||
113 | #define IOP331_OCCDR (volatile u32 *)IOP331_REG_ADDR(0x000001AC) | ||
114 | /* Reserved 0x000001B0 through 0x000001BB*/ | ||
115 | #define IOP331_VPDCAPID (volatile u8 *)IOP331_REG_ADDR(0x000001B8) | ||
116 | #define IOP331_VPDNXTP (volatile u8 *)IOP331_REG_ADDR(0x000001B9) | ||
117 | #define IOP331_VPDAR (volatile u16 *)IOP331_REG_ADDR(0x000001BA) | ||
118 | #define IOP331_VPDDR (volatile u32 *)IOP331_REG_ADDR(0x000001BC) | ||
119 | #define IOP331_PMCAPID (volatile u8 *)IOP331_REG_ADDR(0x000001C0) | ||
120 | #define IOP331_PMNEXT (volatile u8 *)IOP331_REG_ADDR(0x000001C1) | ||
121 | #define IOP331_APMCR (volatile u16 *)IOP331_REG_ADDR(0x000001C2) | ||
122 | #define IOP331_APMCSR (volatile u16 *)IOP331_REG_ADDR(0x000001C4) | ||
123 | /* Reserved 0x000001C6 through 0x000001CF */ | ||
124 | #define IOP331_MSICAPID (volatile u8 *)IOP331_REG_ADDR(0x000001D0) | ||
125 | #define IOP331_MSINXTP (volatile u8 *)IOP331_REG_ADDR(0x000001D1) | ||
126 | #define IOP331_MSIMCR (volatile u16 *)IOP331_REG_ADDR(0x000001D2) | ||
127 | #define IOP331_MSIMAR (volatile u32 *)IOP331_REG_ADDR(0x000001D4) | ||
128 | #define IOP331_MSIMUAR (volatile u32 *)IOP331_REG_ADDR(0x000001D8) | ||
129 | #define IOP331_MSIMDR (volatile u32 *)IOP331_REG_ADDR(0x000001DC) | ||
130 | #define IOP331_PCIXCAPID (volatile u8 *)IOP331_REG_ADDR(0x000001E0) | ||
131 | #define IOP331_PCIXNEXT (volatile u8 *)IOP331_REG_ADDR(0x000001E1) | ||
132 | #define IOP331_PCIXCMD (volatile u16 *)IOP331_REG_ADDR(0x000001E2) | ||
133 | #define IOP331_PCIXSR (volatile u32 *)IOP331_REG_ADDR(0x000001E4) | ||
134 | #define IOP331_PCIIRSR (volatile u32 *)IOP331_REG_ADDR(0x000001EC) | ||
135 | |||
136 | /* Messaging Unit 0x00000300 through 0x000003FF */ | ||
137 | |||
138 | /* Reserved 0x00000300 through 0x0000030c */ | ||
139 | #define IOP331_IMR0 (volatile u32 *)IOP331_REG_ADDR(0x00000310) | ||
140 | #define IOP331_IMR1 (volatile u32 *)IOP331_REG_ADDR(0x00000314) | ||
141 | #define IOP331_OMR0 (volatile u32 *)IOP331_REG_ADDR(0x00000318) | ||
142 | #define IOP331_OMR1 (volatile u32 *)IOP331_REG_ADDR(0x0000031C) | ||
143 | #define IOP331_IDR (volatile u32 *)IOP331_REG_ADDR(0x00000320) | ||
144 | #define IOP331_IISR (volatile u32 *)IOP331_REG_ADDR(0x00000324) | ||
145 | #define IOP331_IIMR (volatile u32 *)IOP331_REG_ADDR(0x00000328) | ||
146 | #define IOP331_ODR (volatile u32 *)IOP331_REG_ADDR(0x0000032C) | ||
147 | #define IOP331_OISR (volatile u32 *)IOP331_REG_ADDR(0x00000330) | ||
148 | #define IOP331_OIMR (volatile u32 *)IOP331_REG_ADDR(0x00000334) | ||
149 | /* Reserved 0x00000338 through 0x0000034F */ | ||
150 | #define IOP331_MUCR (volatile u32 *)IOP331_REG_ADDR(0x00000350) | ||
151 | #define IOP331_QBAR (volatile u32 *)IOP331_REG_ADDR(0x00000354) | ||
152 | /* Reserved 0x00000358 through 0x0000035C */ | ||
153 | #define IOP331_IFHPR (volatile u32 *)IOP331_REG_ADDR(0x00000360) | ||
154 | #define IOP331_IFTPR (volatile u32 *)IOP331_REG_ADDR(0x00000364) | ||
155 | #define IOP331_IPHPR (volatile u32 *)IOP331_REG_ADDR(0x00000368) | ||
156 | #define IOP331_IPTPR (volatile u32 *)IOP331_REG_ADDR(0x0000036C) | ||
157 | #define IOP331_OFHPR (volatile u32 *)IOP331_REG_ADDR(0x00000370) | ||
158 | #define IOP331_OFTPR (volatile u32 *)IOP331_REG_ADDR(0x00000374) | ||
159 | #define IOP331_OPHPR (volatile u32 *)IOP331_REG_ADDR(0x00000378) | ||
160 | #define IOP331_OPTPR (volatile u32 *)IOP331_REG_ADDR(0x0000037C) | ||
161 | #define IOP331_IAR (volatile u32 *)IOP331_REG_ADDR(0x00000380) | ||
162 | /* Reserved 0x00000384 through 0x000003FF */ | ||
163 | |||
164 | /* DMA Controller 0x00000400 through 0x000004FF */ | ||
165 | #define IOP331_DMA0_CCR (volatile u32 *)IOP331_REG_ADDR(0x00000400) | ||
166 | #define IOP331_DMA0_CSR (volatile u32 *)IOP331_REG_ADDR(0x00000404) | ||
167 | #define IOP331_DMA0_DAR (volatile u32 *)IOP331_REG_ADDR(0x0000040C) | ||
168 | #define IOP331_DMA0_NDAR (volatile u32 *)IOP331_REG_ADDR(0x00000410) | ||
169 | #define IOP331_DMA0_PADR (volatile u32 *)IOP331_REG_ADDR(0x00000414) | ||
170 | #define IOP331_DMA0_PUADR (volatile u32 *)IOP331_REG_ADDR(0x00000418) | ||
171 | #define IOP331_DMA0_LADR (volatile u32 *)IOP331_REG_ADDR(0X0000041C) | ||
172 | #define IOP331_DMA0_BCR (volatile u32 *)IOP331_REG_ADDR(0x00000420) | ||
173 | #define IOP331_DMA0_DCR (volatile u32 *)IOP331_REG_ADDR(0x00000424) | ||
174 | /* Reserved 0x00000428 through 0x0000043C */ | ||
175 | #define IOP331_DMA1_CCR (volatile u32 *)IOP331_REG_ADDR(0x00000440) | ||
176 | #define IOP331_DMA1_CSR (volatile u32 *)IOP331_REG_ADDR(0x00000444) | ||
177 | #define IOP331_DMA1_DAR (volatile u32 *)IOP331_REG_ADDR(0x0000044C) | ||
178 | #define IOP331_DMA1_NDAR (volatile u32 *)IOP331_REG_ADDR(0x00000450) | ||
179 | #define IOP331_DMA1_PADR (volatile u32 *)IOP331_REG_ADDR(0x00000454) | ||
180 | #define IOP331_DMA1_PUADR (volatile u32 *)IOP331_REG_ADDR(0x00000458) | ||
181 | #define IOP331_DMA1_LADR (volatile u32 *)IOP331_REG_ADDR(0x0000045C) | ||
182 | #define IOP331_DMA1_BCR (volatile u32 *)IOP331_REG_ADDR(0x00000460) | ||
183 | #define IOP331_DMA1_DCR (volatile u32 *)IOP331_REG_ADDR(0x00000464) | ||
184 | /* Reserved 0x00000468 through 0x000004FF */ | ||
185 | |||
186 | /* Memory controller 0x00000500 through 0x0005FF */ | ||
187 | |||
188 | /* Peripheral bus interface unit 0x00000680 through 0x0006FF */ | ||
189 | #define IOP331_PBCR (volatile u32 *)IOP331_REG_ADDR(0x00000680) | ||
190 | #define IOP331_PBISR (volatile u32 *)IOP331_REG_ADDR(0x00000684) | ||
191 | #define IOP331_PBBAR0 (volatile u32 *)IOP331_REG_ADDR(0x00000688) | ||
192 | #define IOP331_PBLR0 (volatile u32 *)IOP331_REG_ADDR(0x0000068C) | ||
193 | #define IOP331_PBBAR1 (volatile u32 *)IOP331_REG_ADDR(0x00000690) | ||
194 | #define IOP331_PBLR1 (volatile u32 *)IOP331_REG_ADDR(0x00000694) | ||
195 | #define IOP331_PBBAR2 (volatile u32 *)IOP331_REG_ADDR(0x00000698) | ||
196 | #define IOP331_PBLR2 (volatile u32 *)IOP331_REG_ADDR(0x0000069C) | ||
197 | #define IOP331_PBBAR3 (volatile u32 *)IOP331_REG_ADDR(0x000006A0) | ||
198 | #define IOP331_PBLR3 (volatile u32 *)IOP331_REG_ADDR(0x000006A4) | ||
199 | #define IOP331_PBBAR4 (volatile u32 *)IOP331_REG_ADDR(0x000006A8) | ||
200 | #define IOP331_PBLR4 (volatile u32 *)IOP331_REG_ADDR(0x000006AC) | ||
201 | #define IOP331_PBBAR5 (volatile u32 *)IOP331_REG_ADDR(0x000006B0) | ||
202 | #define IOP331_PBLR5 (volatile u32 *)IOP331_REG_ADDR(0x000006B4) | ||
203 | #define IOP331_PBDSCR (volatile u32 *)IOP331_REG_ADDR(0x000006B8) | ||
204 | /* Reserved 0x000006BC */ | ||
205 | #define IOP331_PMBR0 (volatile u32 *)IOP331_REG_ADDR(0x000006C0) | ||
206 | /* Reserved 0x000006C4 through 0x000006DC */ | ||
207 | #define IOP331_PMBR1 (volatile u32 *)IOP331_REG_ADDR(0x000006E0) | ||
208 | #define IOP331_PMBR2 (volatile u32 *)IOP331_REG_ADDR(0x000006E4) | ||
209 | |||
210 | #define IOP331_PBCR_EN 0x1 | ||
211 | |||
212 | #define IOP331_PBISR_BOOR_ERR 0x1 | ||
213 | |||
214 | |||
215 | |||
216 | /* Peripheral performance monitoring unit 0x00000700 through 0x00077F */ | ||
217 | /* Internal arbitration unit 0x00000780 through 0x0007BF */ | ||
218 | |||
219 | /* Interrupt Controller */ | ||
220 | #define IOP331_INTCTL0 (volatile u32 *)IOP331_REG_ADDR(0x00000790) | ||
221 | #define IOP331_INTCTL1 (volatile u32 *)IOP331_REG_ADDR(0x00000794) | ||
222 | #define IOP331_INTSTR0 (volatile u32 *)IOP331_REG_ADDR(0x00000798) | ||
223 | #define IOP331_INTSTR1 (volatile u32 *)IOP331_REG_ADDR(0x0000079C) | ||
224 | #define IOP331_IINTSRC0 (volatile u32 *)IOP331_REG_ADDR(0x000007A0) | ||
225 | #define IOP331_IINTSRC1 (volatile u32 *)IOP331_REG_ADDR(0x000007A4) | ||
226 | #define IOP331_FINTSRC0 (volatile u32 *)IOP331_REG_ADDR(0x000007A8) | ||
227 | #define IOP331_FINTSRC1 (volatile u32 *)IOP331_REG_ADDR(0x000007AC) | ||
228 | #define IOP331_IPR0 (volatile u32 *)IOP331_REG_ADDR(0x000007B0) | ||
229 | #define IOP331_IPR1 (volatile u32 *)IOP331_REG_ADDR(0x000007B4) | ||
230 | #define IOP331_IPR2 (volatile u32 *)IOP331_REG_ADDR(0x000007B8) | ||
231 | #define IOP331_IPR3 (volatile u32 *)IOP331_REG_ADDR(0x000007BC) | ||
232 | #define IOP331_INTBASE (volatile u32 *)IOP331_REG_ADDR(0x000007C0) | ||
233 | #define IOP331_INTSIZE (volatile u32 *)IOP331_REG_ADDR(0x000007C4) | ||
234 | #define IOP331_IINTVEC (volatile u32 *)IOP331_REG_ADDR(0x000007C8) | ||
235 | #define IOP331_FINTVEC (volatile u32 *)IOP331_REG_ADDR(0x000007CC) | ||
236 | |||
237 | |||
238 | /* Timers */ | ||
239 | |||
240 | #define IOP331_TU_TMR0 (volatile u32 *)IOP331_REG_ADDR(0x000007D0) | ||
241 | #define IOP331_TU_TMR1 (volatile u32 *)IOP331_REG_ADDR(0x000007D4) | ||
242 | |||
243 | #define IOP331_TMR_TC 0x01 | ||
244 | #define IOP331_TMR_EN 0x02 | ||
245 | #define IOP331_TMR_RELOAD 0x04 | ||
246 | #define IOP331_TMR_PRIVILEGED 0x09 | ||
247 | |||
248 | #define IOP331_TMR_RATIO_1_1 0x00 | ||
249 | #define IOP331_TMR_RATIO_4_1 0x10 | ||
250 | #define IOP331_TMR_RATIO_8_1 0x20 | ||
251 | #define IOP331_TMR_RATIO_16_1 0x30 | ||
252 | |||
253 | #define IOP331_TU_TCR0 (volatile u32 *)IOP331_REG_ADDR(0x000007D8) | ||
254 | #define IOP331_TU_TCR1 (volatile u32 *)IOP331_REG_ADDR(0x000007DC) | ||
255 | #define IOP331_TU_TRR0 (volatile u32 *)IOP331_REG_ADDR(0x000007E0) | ||
256 | #define IOP331_TU_TRR1 (volatile u32 *)IOP331_REG_ADDR(0x000007E4) | ||
257 | #define IOP331_TU_TISR (volatile u32 *)IOP331_REG_ADDR(0x000007E8) | ||
258 | #define IOP331_TU_WDTCR (volatile u32 *)IOP331_REG_ADDR(0x000007EC) | ||
259 | |||
260 | #if defined(CONFIG_ARCH_IOP331) | ||
261 | #define IOP331_TICK_RATE 266000000 /* 266 MHz IB clock */ | ||
262 | #endif | ||
263 | |||
264 | #if defined(CONFIG_IOP331_STEPD) || defined(CONFIG_ARCH_IQ80333) | ||
265 | #undef IOP331_TICK_RATE | ||
266 | #define IOP331_TICK_RATE 333000000 /* 333 Mhz IB clock */ | ||
267 | #endif | ||
268 | |||
269 | /* Application accelerator unit 0x00000800 - 0x000008FF */ | ||
270 | #define IOP331_AAU_ACR (volatile u32 *)IOP331_REG_ADDR(0x00000800) | ||
271 | #define IOP331_AAU_ASR (volatile u32 *)IOP331_REG_ADDR(0x00000804) | ||
272 | #define IOP331_AAU_ADAR (volatile u32 *)IOP331_REG_ADDR(0x00000808) | ||
273 | #define IOP331_AAU_ANDAR (volatile u32 *)IOP331_REG_ADDR(0x0000080C) | ||
274 | #define IOP331_AAU_SAR1 (volatile u32 *)IOP331_REG_ADDR(0x00000810) | ||
275 | #define IOP331_AAU_SAR2 (volatile u32 *)IOP331_REG_ADDR(0x00000814) | ||
276 | #define IOP331_AAU_SAR3 (volatile u32 *)IOP331_REG_ADDR(0x00000818) | ||
277 | #define IOP331_AAU_SAR4 (volatile u32 *)IOP331_REG_ADDR(0x0000081C) | ||
278 | #define IOP331_AAU_SAR5 (volatile u32 *)IOP331_REG_ADDR(0x0000082C) | ||
279 | #define IOP331_AAU_SAR6 (volatile u32 *)IOP331_REG_ADDR(0x00000830) | ||
280 | #define IOP331_AAU_SAR7 (volatile u32 *)IOP331_REG_ADDR(0x00000834) | ||
281 | #define IOP331_AAU_SAR8 (volatile u32 *)IOP331_REG_ADDR(0x00000838) | ||
282 | #define IOP331_AAU_SAR9 (volatile u32 *)IOP331_REG_ADDR(0x00000840) | ||
283 | #define IOP331_AAU_SAR10 (volatile u32 *)IOP331_REG_ADDR(0x00000844) | ||
284 | #define IOP331_AAU_SAR11 (volatile u32 *)IOP331_REG_ADDR(0x00000848) | ||
285 | #define IOP331_AAU_SAR12 (volatile u32 *)IOP331_REG_ADDR(0x0000084C) | ||
286 | #define IOP331_AAU_SAR13 (volatile u32 *)IOP331_REG_ADDR(0x00000850) | ||
287 | #define IOP331_AAU_SAR14 (volatile u32 *)IOP331_REG_ADDR(0x00000854) | ||
288 | #define IOP331_AAU_SAR15 (volatile u32 *)IOP331_REG_ADDR(0x00000858) | ||
289 | #define IOP331_AAU_SAR16 (volatile u32 *)IOP331_REG_ADDR(0x0000085C) | ||
290 | #define IOP331_AAU_SAR17 (volatile u32 *)IOP331_REG_ADDR(0x00000864) | ||
291 | #define IOP331_AAU_SAR18 (volatile u32 *)IOP331_REG_ADDR(0x00000868) | ||
292 | #define IOP331_AAU_SAR19 (volatile u32 *)IOP331_REG_ADDR(0x0000086C) | ||
293 | #define IOP331_AAU_SAR20 (volatile u32 *)IOP331_REG_ADDR(0x00000870) | ||
294 | #define IOP331_AAU_SAR21 (volatile u32 *)IOP331_REG_ADDR(0x00000874) | ||
295 | #define IOP331_AAU_SAR22 (volatile u32 *)IOP331_REG_ADDR(0x00000878) | ||
296 | #define IOP331_AAU_SAR23 (volatile u32 *)IOP331_REG_ADDR(0x0000087C) | ||
297 | #define IOP331_AAU_SAR24 (volatile u32 *)IOP331_REG_ADDR(0x00000880) | ||
298 | #define IOP331_AAU_SAR25 (volatile u32 *)IOP331_REG_ADDR(0x00000888) | ||
299 | #define IOP331_AAU_SAR26 (volatile u32 *)IOP331_REG_ADDR(0x0000088C) | ||
300 | #define IOP331_AAU_SAR27 (volatile u32 *)IOP331_REG_ADDR(0x00000890) | ||
301 | #define IOP331_AAU_SAR28 (volatile u32 *)IOP331_REG_ADDR(0x00000894) | ||
302 | #define IOP331_AAU_SAR29 (volatile u32 *)IOP331_REG_ADDR(0x00000898) | ||
303 | #define IOP331_AAU_SAR30 (volatile u32 *)IOP331_REG_ADDR(0x0000089C) | ||
304 | #define IOP331_AAU_SAR31 (volatile u32 *)IOP331_REG_ADDR(0x000008A0) | ||
305 | #define IOP331_AAU_SAR32 (volatile u32 *)IOP331_REG_ADDR(0x000008A4) | ||
306 | #define IOP331_AAU_DAR (volatile u32 *)IOP331_REG_ADDR(0x00000820) | ||
307 | #define IOP331_AAU_ABCR (volatile u32 *)IOP331_REG_ADDR(0x00000824) | ||
308 | #define IOP331_AAU_ADCR (volatile u32 *)IOP331_REG_ADDR(0x00000828) | ||
309 | #define IOP331_AAU_EDCR0 (volatile u32 *)IOP331_REG_ADDR(0x0000083c) | ||
310 | #define IOP331_AAU_EDCR1 (volatile u32 *)IOP331_REG_ADDR(0x00000860) | ||
311 | #define IOP331_AAU_EDCR2 (volatile u32 *)IOP331_REG_ADDR(0x00000884) | ||
312 | |||
313 | |||
314 | #define IOP331_SPDSCR (volatile u32 *)IOP331_REG_ADDR(0x000015C0) | ||
315 | #define IOP331_PPDSCR (volatile u32 *)IOP331_REG_ADDR(0x000015C8) | ||
316 | /* SSP serial port unit 0x00001600 - 0x0000167F */ | ||
317 | |||
318 | /* I2C bus interface unit 0x00001680 - 0x000016FF */ | ||
319 | /* for I2C bit defs see drivers/i2c/i2c-iop3xx.h */ | ||
320 | |||
321 | #define IOP331_ICR0 (volatile u32 *)IOP331_REG_ADDR(0x00001680) | ||
322 | #define IOP331_ISR0 (volatile u32 *)IOP331_REG_ADDR(0x00001684) | ||
323 | #define IOP331_ISAR0 (volatile u32 *)IOP331_REG_ADDR(0x00001688) | ||
324 | #define IOP331_IDBR0 (volatile u32 *)IOP331_REG_ADDR(0x0000168C) | ||
325 | /* Reserved 0x00001690 */ | ||
326 | #define IOP331_IBMR0 (volatile u32 *)IOP331_REG_ADDR(0x00001694) | ||
327 | /* Reserved 0x00001698 */ | ||
328 | /* Reserved 0x0000169C */ | ||
329 | #define IOP331_ICR1 (volatile u32 *)IOP331_REG_ADDR(0x000016A0) | ||
330 | #define IOP331_ISR1 (volatile u32 *)IOP331_REG_ADDR(0x000016A4) | ||
331 | #define IOP331_ISAR1 (volatile u32 *)IOP331_REG_ADDR(0x000016A8) | ||
332 | #define IOP331_IDBR1 (volatile u32 *)IOP331_REG_ADDR(0x000016AC) | ||
333 | #define IOP331_IBMR1 (volatile u32 *)IOP331_REG_ADDR(0x000016B4) | ||
334 | /* Reserved 0x000016B8 through 0x000016FF */ | ||
335 | |||
336 | /* 0x00001700 through 0x0000172C UART 0 */ | ||
337 | |||
338 | /* Reserved 0x00001730 through 0x0000173F */ | ||
339 | |||
340 | /* 0x00001740 through 0x0000176C UART 1 */ | ||
341 | |||
342 | #define IOP331_UART0_PHYS (IOP331_PHYS_MEM_BASE | 0x00001700) /* UART #1 physical */ | ||
343 | #define IOP331_UART1_PHYS (IOP331_PHYS_MEM_BASE | 0x00001740) /* UART #2 physical */ | ||
344 | #define IOP331_UART0_VIRT (IOP331_VIRT_MEM_BASE | 0x00001700) /* UART #1 virtual addr */ | ||
345 | #define IOP331_UART1_VIRT (IOP331_VIRT_MEM_BASE | 0x00001740) /* UART #2 virtual addr */ | ||
346 | |||
347 | /* Reserved 0x00001770 through 0x0000177F */ | ||
348 | |||
349 | /* General Purpose I/O Registers */ | ||
350 | #define IOP331_GPOE (volatile u32 *)IOP331_REG_ADDR(0x00001780) | ||
351 | #define IOP331_GPID (volatile u32 *)IOP331_REG_ADDR(0x00001784) | ||
352 | #define IOP331_GPOD (volatile u32 *)IOP331_REG_ADDR(0x00001788) | ||
353 | |||
354 | /* Reserved 0x0000178c through 0x000019ff */ | ||
355 | |||
356 | |||
357 | #ifndef __ASSEMBLY__ | ||
358 | extern void iop331_map_io(void); | ||
359 | extern void iop331_init_irq(void); | ||
360 | extern void iop331_time_init(void); | ||
361 | #endif | ||
362 | |||
363 | #endif // _IOP331_HW_H_ | ||
diff --git a/include/asm-arm/arch-iop3xx/iq31244.h b/include/asm-arm/arch-iop3xx/iq31244.h new file mode 100644 index 000000000000..4177cfa8100f --- /dev/null +++ b/include/asm-arm/arch-iop3xx/iq31244.h | |||
@@ -0,0 +1,24 @@ | |||
1 | /* | ||
2 | * linux/include/asm/arch-iop3xx/iq31244.h | ||
3 | * | ||
4 | * Intel IQ31244 evaluation board registers | ||
5 | */ | ||
6 | |||
7 | #ifndef _IQ31244_H_ | ||
8 | #define _IQ31244_H_ | ||
9 | |||
10 | #define IQ31244_FLASHBASE 0xf0000000 /* Flash */ | ||
11 | #define IQ31244_FLASHSIZE 0x00800000 | ||
12 | #define IQ31244_FLASHWIDTH 2 | ||
13 | |||
14 | #define IQ31244_UART 0xfe800000 /* UART #1 */ | ||
15 | #define IQ31244_7SEG_1 0xfe840000 /* 7-Segment MSB */ | ||
16 | #define IQ31244_7SEG_0 0xfe850000 /* 7-Segment LSB (WO) */ | ||
17 | #define IQ31244_ROTARY_SW 0xfe8d0000 /* Rotary Switch */ | ||
18 | #define IQ31244_BATT_STAT 0xfe8f0000 /* Battery Status */ | ||
19 | |||
20 | #ifndef __ASSEMBLY__ | ||
21 | extern void iq31244_map_io(void); | ||
22 | #endif | ||
23 | |||
24 | #endif // _IQ31244_H_ | ||
diff --git a/include/asm-arm/arch-iop3xx/iq80321.h b/include/asm-arm/arch-iop3xx/iq80321.h new file mode 100644 index 000000000000..cb8725979ffa --- /dev/null +++ b/include/asm-arm/arch-iop3xx/iq80321.h | |||
@@ -0,0 +1,24 @@ | |||
1 | /* | ||
2 | * linux/include/asm/arch-iop3xx/iq80321.h | ||
3 | * | ||
4 | * Intel IQ80321 evaluation board registers | ||
5 | */ | ||
6 | |||
7 | #ifndef _IQ80321_H_ | ||
8 | #define _IQ80321_H_ | ||
9 | |||
10 | #define IQ80321_FLASHBASE 0xf0000000 /* Flash */ | ||
11 | #define IQ80321_FLASHSIZE 0x00800000 | ||
12 | #define IQ80321_FLASHWIDTH 1 | ||
13 | |||
14 | #define IQ80321_UART 0xfe800000 /* UART #1 */ | ||
15 | #define IQ80321_7SEG_1 0xfe840000 /* 7-Segment MSB */ | ||
16 | #define IQ80321_7SEG_0 0xfe850000 /* 7-Segment LSB (WO) */ | ||
17 | #define IQ80321_ROTARY_SW 0xfe8d0000 /* Rotary Switch */ | ||
18 | #define IQ80321_BATT_STAT 0xfe8f0000 /* Battery Status */ | ||
19 | |||
20 | #ifndef __ASSEMBLY__ | ||
21 | extern void iq80321_map_io(void); | ||
22 | #endif | ||
23 | |||
24 | #endif // _IQ80321_H_ | ||
diff --git a/include/asm-arm/arch-iop3xx/iq80331.h b/include/asm-arm/arch-iop3xx/iq80331.h new file mode 100644 index 000000000000..0668e78d483e --- /dev/null +++ b/include/asm-arm/arch-iop3xx/iq80331.h | |||
@@ -0,0 +1,23 @@ | |||
1 | /* | ||
2 | * linux/include/asm/arch-iop3xx/iq80331.h | ||
3 | * | ||
4 | * Intel IQ80331 evaluation board registers | ||
5 | */ | ||
6 | |||
7 | #ifndef _IQ80331_H_ | ||
8 | #define _IQ80331_H_ | ||
9 | |||
10 | #define IQ80331_FLASHBASE 0xc0000000 /* Flash */ | ||
11 | #define IQ80331_FLASHSIZE 0x00800000 | ||
12 | #define IQ80331_FLASHWIDTH 1 | ||
13 | |||
14 | #define IQ80331_7SEG_1 0xce840000 /* 7-Segment MSB */ | ||
15 | #define IQ80331_7SEG_0 0xce850000 /* 7-Segment LSB (WO) */ | ||
16 | #define IQ80331_ROTARY_SW 0xce8d0000 /* Rotary Switch */ | ||
17 | #define IQ80331_BATT_STAT 0xce8f0000 /* Battery Status */ | ||
18 | |||
19 | #ifndef __ASSEMBLY__ | ||
20 | extern void iq80331_map_io(void); | ||
21 | #endif | ||
22 | |||
23 | #endif // _IQ80331_H_ | ||
diff --git a/include/asm-arm/arch-iop3xx/iq80332.h b/include/asm-arm/arch-iop3xx/iq80332.h new file mode 100644 index 000000000000..e5fff1775d1a --- /dev/null +++ b/include/asm-arm/arch-iop3xx/iq80332.h | |||
@@ -0,0 +1,23 @@ | |||
1 | /* | ||
2 | * linux/include/asm/arch-iop3xx/iq80332.h | ||
3 | * | ||
4 | * Intel IQ80332 evaluation board registers | ||
5 | */ | ||
6 | |||
7 | #ifndef _IQ80332_H_ | ||
8 | #define _IQ80332_H_ | ||
9 | |||
10 | #define IQ80332_FLASHBASE 0xc0000000 /* Flash */ | ||
11 | #define IQ80332_FLASHSIZE 0x00800000 | ||
12 | #define IQ80332_FLASHWIDTH 1 | ||
13 | |||
14 | #define IQ80332_7SEG_1 0xce840000 /* 7-Segment MSB */ | ||
15 | #define IQ80332_7SEG_0 0xce850000 /* 7-Segment LSB (WO) */ | ||
16 | #define IQ80332_ROTARY_SW 0xce8d0000 /* Rotary Switch */ | ||
17 | #define IQ80332_BATT_STAT 0xce8f0000 /* Battery Status */ | ||
18 | |||
19 | #ifndef __ASSEMBLY__ | ||
20 | extern void iq80332_map_io(void); | ||
21 | #endif | ||
22 | |||
23 | #endif // _IQ80332_H_ | ||
diff --git a/include/asm-arm/arch-iop3xx/irqs.h b/include/asm-arm/arch-iop3xx/irqs.h new file mode 100644 index 000000000000..b2c03f4c269c --- /dev/null +++ b/include/asm-arm/arch-iop3xx/irqs.h | |||
@@ -0,0 +1,21 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-iop3xx/irqs.h | ||
3 | * | ||
4 | * Copyright: (C) 2001-2003 MontaVista Software Inc. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | */ | ||
11 | |||
12 | /* | ||
13 | * Chipset-specific bits | ||
14 | */ | ||
15 | #ifdef CONFIG_ARCH_IOP321 | ||
16 | #include "iop321-irqs.h" | ||
17 | #endif | ||
18 | |||
19 | #ifdef CONFIG_ARCH_IOP331 | ||
20 | #include "iop331-irqs.h" | ||
21 | #endif | ||
diff --git a/include/asm-arm/arch-iop3xx/memory.h b/include/asm-arm/arch-iop3xx/memory.h new file mode 100644 index 000000000000..dc4735cb0c10 --- /dev/null +++ b/include/asm-arm/arch-iop3xx/memory.h | |||
@@ -0,0 +1,41 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-iop3xx/memory.h | ||
3 | */ | ||
4 | |||
5 | #ifndef __ASM_ARCH_MEMORY_H | ||
6 | #define __ASM_ARCH_MEMORY_H | ||
7 | |||
8 | #include <linux/config.h> | ||
9 | #include <asm/hardware.h> | ||
10 | |||
11 | /* | ||
12 | * Physical DRAM offset. | ||
13 | */ | ||
14 | #ifndef CONFIG_ARCH_IOP331 | ||
15 | #define PHYS_OFFSET (0xa0000000UL) | ||
16 | #else | ||
17 | #define PHYS_OFFSET (0x00000000UL) | ||
18 | #endif | ||
19 | |||
20 | /* | ||
21 | * Virtual view <-> PCI DMA view memory address translations | ||
22 | * virt_to_bus: Used to translate the virtual address to an | ||
23 | * address suitable to be passed to set_dma_addr | ||
24 | * bus_to_virt: Used to convert an address for DMA operations | ||
25 | * to an address that the kernel can use. | ||
26 | */ | ||
27 | #if defined(CONFIG_ARCH_IOP321) | ||
28 | |||
29 | #define __virt_to_bus(x) (((__virt_to_phys(x)) & ~(*IOP321_IATVR2)) | ((*IOP321_IABAR2) & 0xfffffff0)) | ||
30 | #define __bus_to_virt(x) (__phys_to_virt(((x) & ~(*IOP321_IALR2)) | ( *IOP321_IATVR2))) | ||
31 | |||
32 | #elif defined(CONFIG_ARCH_IOP331) | ||
33 | |||
34 | #define __virt_to_bus(x) (((__virt_to_phys(x)) & ~(*IOP331_IATVR2)) | ((*IOP331_IABAR2) & 0xfffffff0)) | ||
35 | #define __bus_to_virt(x) (__phys_to_virt(((x) & ~(*IOP331_IALR2)) | ( *IOP331_IATVR2))) | ||
36 | |||
37 | #endif | ||
38 | |||
39 | #define PFN_TO_NID(addr) (0) | ||
40 | |||
41 | #endif | ||
diff --git a/include/asm-arm/arch-iop3xx/param.h b/include/asm-arm/arch-iop3xx/param.h new file mode 100644 index 000000000000..acf404e87358 --- /dev/null +++ b/include/asm-arm/arch-iop3xx/param.h | |||
@@ -0,0 +1,3 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-iop3xx/param.h | ||
3 | */ | ||
diff --git a/include/asm-arm/arch-iop3xx/system.h b/include/asm-arm/arch-iop3xx/system.h new file mode 100644 index 000000000000..af6ae8cd36c9 --- /dev/null +++ b/include/asm-arm/arch-iop3xx/system.h | |||
@@ -0,0 +1,35 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-iop3xx/system.h | ||
3 | * | ||
4 | * Copyright (C) 2001 MontaVista Software, Inc. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | */ | ||
10 | |||
11 | static inline void arch_idle(void) | ||
12 | { | ||
13 | cpu_do_idle(); | ||
14 | } | ||
15 | |||
16 | |||
17 | static inline void arch_reset(char mode) | ||
18 | { | ||
19 | #ifdef CONFIG_ARCH_IOP321 | ||
20 | *IOP321_PCSR = 0x30; | ||
21 | #endif | ||
22 | |||
23 | #ifdef CONFIG_ARCH_IOP331 | ||
24 | *IOP331_PCSR = 0x30; | ||
25 | #endif | ||
26 | |||
27 | if ( 1 && mode == 's') { | ||
28 | /* Jump into ROM at address 0 */ | ||
29 | cpu_reset(0); | ||
30 | } else { | ||
31 | /* No on-chip reset capability */ | ||
32 | cpu_reset(0); | ||
33 | } | ||
34 | } | ||
35 | |||
diff --git a/include/asm-arm/arch-iop3xx/timex.h b/include/asm-arm/arch-iop3xx/timex.h new file mode 100644 index 000000000000..d4187fe9a85a --- /dev/null +++ b/include/asm-arm/arch-iop3xx/timex.h | |||
@@ -0,0 +1,21 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-iop3xx/timex.h | ||
3 | * | ||
4 | * IOP3xx architecture timex specifications | ||
5 | */ | ||
6 | #include <linux/config.h> | ||
7 | |||
8 | |||
9 | #if defined(CONFIG_ARCH_IQ80321) || defined(CONFIG_ARCH_IQ31244) | ||
10 | |||
11 | #define CLOCK_TICK_RATE IOP321_TICK_RATE | ||
12 | |||
13 | #elif defined(CONFIG_ARCH_IQ80331) || defined(CONFIG_MACH_IQ80332) | ||
14 | |||
15 | #define CLOCK_TICK_RATE IOP331_TICK_RATE | ||
16 | |||
17 | #else | ||
18 | |||
19 | #error "No IOP3xx timex information for this architecture" | ||
20 | |||
21 | #endif | ||
diff --git a/include/asm-arm/arch-iop3xx/uncompress.h b/include/asm-arm/arch-iop3xx/uncompress.h new file mode 100644 index 000000000000..82b88762c3cc --- /dev/null +++ b/include/asm-arm/arch-iop3xx/uncompress.h | |||
@@ -0,0 +1,57 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-iop3xx/uncompress.h | ||
3 | */ | ||
4 | #include <linux/config.h> | ||
5 | #include <asm/types.h> | ||
6 | #include <asm/mach-types.h> | ||
7 | #include <linux/serial_reg.h> | ||
8 | #include <asm/hardware.h> | ||
9 | |||
10 | #ifdef CONFIG_ARCH_IOP321 | ||
11 | #define UTYPE unsigned char * | ||
12 | #elif defined(CONFIG_ARCH_IOP331) | ||
13 | #define UTYPE u32 * | ||
14 | #else | ||
15 | #error "Missing IOP3xx arch type def" | ||
16 | #endif | ||
17 | |||
18 | static volatile UTYPE uart_base; | ||
19 | |||
20 | #define TX_DONE (UART_LSR_TEMT|UART_LSR_THRE) | ||
21 | |||
22 | static __inline__ void putc(char c) | ||
23 | { | ||
24 | while ((uart_base[UART_LSR] & TX_DONE) != TX_DONE); | ||
25 | *uart_base = c; | ||
26 | } | ||
27 | |||
28 | /* | ||
29 | * This does not append a newline | ||
30 | */ | ||
31 | static void putstr(const char *s) | ||
32 | { | ||
33 | while (*s) { | ||
34 | putc(*s); | ||
35 | if (*s == '\n') | ||
36 | putc('\r'); | ||
37 | s++; | ||
38 | } | ||
39 | } | ||
40 | |||
41 | static __inline__ void __arch_decomp_setup(unsigned long arch_id) | ||
42 | { | ||
43 | if(machine_is_iq80321()) | ||
44 | uart_base = (volatile UTYPE)IQ80321_UART; | ||
45 | else if(machine_is_iq31244()) | ||
46 | uart_base = (volatile UTYPE)IQ31244_UART; | ||
47 | else if(machine_is_iq80331() || machine_is_iq80332()) | ||
48 | uart_base = (volatile UTYPE)IOP331_UART0_PHYS; | ||
49 | else | ||
50 | uart_base = (volatile UTYPE)0xfe800000; | ||
51 | } | ||
52 | |||
53 | /* | ||
54 | * nothing to do | ||
55 | */ | ||
56 | #define arch_decomp_setup() __arch_decomp_setup(arch_id) | ||
57 | #define arch_decomp_wdog() | ||
diff --git a/include/asm-arm/arch-iop3xx/vmalloc.h b/include/asm-arm/arch-iop3xx/vmalloc.h new file mode 100644 index 000000000000..dc1d2a957164 --- /dev/null +++ b/include/asm-arm/arch-iop3xx/vmalloc.h | |||
@@ -0,0 +1,19 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-iop3xx/vmalloc.h | ||
3 | */ | ||
4 | |||
5 | /* | ||
6 | * Just any arbitrary offset to the start of the vmalloc VM area: the | ||
7 | * current 8MB value just means that there will be a 8MB "hole" after the | ||
8 | * physical memory until the kernel virtual memory starts. That means that | ||
9 | * any out-of-bounds memory accesses will hopefully be caught. | ||
10 | * The vmalloc() routines leaves a hole of 4kB between each vmalloced | ||
11 | * area for the same reason. ;) | ||
12 | */ | ||
13 | #define VMALLOC_OFFSET (8*1024*1024) | ||
14 | #define VMALLOC_START (((unsigned long)high_memory + VMALLOC_OFFSET) & ~(VMALLOC_OFFSET-1)) | ||
15 | #define VMALLOC_VMADDR(x) ((unsigned long)(x)) | ||
16 | //#define VMALLOC_END (0xe8000000) | ||
17 | /* increase usable physical RAM to ~992M per RMK */ | ||
18 | #define VMALLOC_END (0xfe000000) | ||
19 | |||
diff --git a/include/asm-arm/arch-ixp2000/debug-macro.S b/include/asm-arm/arch-ixp2000/debug-macro.S new file mode 100644 index 000000000000..5631e0889861 --- /dev/null +++ b/include/asm-arm/arch-ixp2000/debug-macro.S | |||
@@ -0,0 +1,40 @@ | |||
1 | /* linux/include/asm-arm/arch-ixp2000/debug-macro.S | ||
2 | * | ||
3 | * Debugging macro include header | ||
4 | * | ||
5 | * Copyright (C) 1994-1999 Russell King | ||
6 | * Moved from linux/arch/arm/kernel/debug.S by Ben Dooks | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | * | ||
12 | */ | ||
13 | |||
14 | .macro addruart,rx | ||
15 | mrc p15, 0, \rx, c1, c0 | ||
16 | tst \rx, #1 @ MMU enabled? | ||
17 | moveq \rx, #0xc0000000 @ Physical base | ||
18 | movne \rx, #0xfe000000 @ virtual base | ||
19 | orrne \rx, \rx, #0x00f00000 | ||
20 | orr \rx, \rx, #0x00030000 | ||
21 | #ifdef __ARMEB__ | ||
22 | orr \rx, \rx, #0x00000003 | ||
23 | #endif | ||
24 | .endm | ||
25 | |||
26 | .macro senduart,rd,rx | ||
27 | strb \rd, [\rx] | ||
28 | .endm | ||
29 | |||
30 | .macro busyuart,rd,rx | ||
31 | 1002: ldrb \rd, [\rx, #0x14] | ||
32 | tst \rd, #0x20 | ||
33 | beq 1002b | ||
34 | .endm | ||
35 | |||
36 | .macro waituart,rd,rx | ||
37 | nop | ||
38 | nop | ||
39 | nop | ||
40 | .endm | ||
diff --git a/include/asm-arm/arch-ixp2000/dma.h b/include/asm-arm/arch-ixp2000/dma.h new file mode 100644 index 000000000000..0fb3568a98dd --- /dev/null +++ b/include/asm-arm/arch-ixp2000/dma.h | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-ixp2000/dma.h | ||
3 | * | ||
4 | * Copyright (C) 2002 Intel Corp. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | */ | ||
10 | #ifndef __ASM_ARCH_DMA_H | ||
11 | #define __ASM_ARCH_DMA_H | ||
12 | |||
13 | #define MAX_DMA_ADDRESS 0xffffffff | ||
14 | |||
15 | /* No DMA */ | ||
16 | #define MAX_DMA_CHANNELS 0 | ||
17 | |||
18 | #endif /* _ASM_ARCH_DMA_H */ | ||
diff --git a/include/asm-arm/arch-ixp2000/enp2611.h b/include/asm-arm/arch-ixp2000/enp2611.h new file mode 100644 index 000000000000..31ae88674968 --- /dev/null +++ b/include/asm-arm/arch-ixp2000/enp2611.h | |||
@@ -0,0 +1,28 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-ixp2000/enp2611.h | ||
3 | * | ||
4 | * Register and other defines for Radisys ENP-2611 | ||
5 | * | ||
6 | * Created 2004 by Lennert Buytenhek from the ixdp2x01 code. The | ||
7 | * original version carries the following notices: | ||
8 | * | ||
9 | * Original Author: Naeem Afzal <naeem.m.afzal@intel.com> | ||
10 | * Maintainer: Deepak Saxena <dsaxena@plexity.net> | ||
11 | * | ||
12 | * Copyright (C) 2002 Intel Corp. | ||
13 | * Copyright (C) 2003-2004 MontaVista Software, Inc. | ||
14 | * | ||
15 | * This program is free software; you can redistribute it and/or modify it | ||
16 | * under the terms of the GNU General Public License as published by the | ||
17 | * Free Software Foundation; either version 2 of the License, or (at your | ||
18 | * option) any later version. | ||
19 | */ | ||
20 | |||
21 | #ifndef __ENP2611_H | ||
22 | #define __ENP2611_H | ||
23 | |||
24 | #define ENP2611_GPIO_SCL 0x07 | ||
25 | #define ENP2611_GPIO_SDA 0x06 | ||
26 | |||
27 | |||
28 | #endif | ||
diff --git a/include/asm-arm/arch-ixp2000/entry-macro.S b/include/asm-arm/arch-ixp2000/entry-macro.S new file mode 100644 index 000000000000..e3a4e4121298 --- /dev/null +++ b/include/asm-arm/arch-ixp2000/entry-macro.S | |||
@@ -0,0 +1,53 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-ixp2000/entry-macro.S | ||
3 | * | ||
4 | * Low-level IRQ helper macros for IXP2000-based platforms | ||
5 | * | ||
6 | * This file is licensed under the terms of the GNU General Public | ||
7 | * License version 2. This program is licensed "as is" without any | ||
8 | * warranty of any kind, whether express or implied. | ||
9 | */ | ||
10 | |||
11 | .macro disable_fiq | ||
12 | .endm | ||
13 | |||
14 | .macro get_irqnr_and_base, irqnr, irqstat, base, tmp | ||
15 | |||
16 | mov \irqnr, #0x0 @clear out irqnr as default | ||
17 | mov \base, #0xfe000000 | ||
18 | orr \base, \base, #0x00e00000 | ||
19 | orr \base, \base, #0x08 | ||
20 | ldr \irqstat, [\base] @ get interrupts | ||
21 | |||
22 | cmp \irqstat, #0 | ||
23 | beq 1001f | ||
24 | |||
25 | clz \irqnr, \irqstat | ||
26 | mov \base, #31 | ||
27 | subs \irqnr, \base, \irqnr | ||
28 | |||
29 | /* | ||
30 | * We handle PCIA and PCIB here so we don't have an | ||
31 | * extra layer of code just to check these two bits. | ||
32 | */ | ||
33 | cmp \irqnr, #IRQ_IXP2000_PCI | ||
34 | bne 1001f | ||
35 | |||
36 | mov \base, #0xfe000000 | ||
37 | orr \base, \base, #0x00c00000 | ||
38 | orr \base, \base, #0x00000100 | ||
39 | orr \base, \base, #0x00000058 | ||
40 | ldr \irqstat, [\base] | ||
41 | |||
42 | mov \tmp, #(1<<26) | ||
43 | tst \irqstat, \tmp | ||
44 | movne \irqnr, #IRQ_IXP2000_PCIA | ||
45 | bne 1001f | ||
46 | |||
47 | mov \tmp, #(1<<27) | ||
48 | tst \irqstat, \tmp | ||
49 | movne \irqnr, #IRQ_IXP2000_PCIB | ||
50 | |||
51 | 1001: | ||
52 | .endm | ||
53 | |||
diff --git a/include/asm-arm/arch-ixp2000/gpio.h b/include/asm-arm/arch-ixp2000/gpio.h new file mode 100644 index 000000000000..84634af5cc64 --- /dev/null +++ b/include/asm-arm/arch-ixp2000/gpio.h | |||
@@ -0,0 +1,55 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-ixp2000/ixp2000-gpio.h | ||
3 | * | ||
4 | * Copyright (C) 2002 Intel Corporation. | ||
5 | * | ||
6 | * This program is free software, you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | */ | ||
10 | |||
11 | /* | ||
12 | * IXP2000 GPIO in/out, edge/level detection for IRQs: | ||
13 | * IRQs are generated on Falling-edge, Rising-Edge, Level-low, Level-High | ||
14 | * or both Falling-edge and Rising-edge. | ||
15 | * This must be called *before* the corresponding IRQ is registerd. | ||
16 | * Use this instead of directly setting the GPIO registers. | ||
17 | * GPIOs may also be used as GPIOs (e.g. for emulating i2c/smb) | ||
18 | */ | ||
19 | #ifndef _ASM_ARCH_IXP2000_GPIO_H_ | ||
20 | #define _ASM_ARCH_IXP2000_GPIO_H_ | ||
21 | |||
22 | #ifndef __ASSEMBLY__ | ||
23 | #define GPIO_OUT 0x0 | ||
24 | #define GPIO_IN 0x80 | ||
25 | |||
26 | #define IXP2000_GPIO_LOW 0 | ||
27 | #define IXP2000_GPIO_HIGH 1 | ||
28 | |||
29 | #define GPIO_NO_EDGES 0 | ||
30 | #define GPIO_FALLING_EDGE 1 | ||
31 | #define GPIO_RISING_EDGE 2 | ||
32 | #define GPIO_BOTH_EDGES 3 | ||
33 | #define GPIO_LEVEL_LOW 4 | ||
34 | #define GPIO_LEVEL_HIGH 8 | ||
35 | |||
36 | extern void set_GPIO_IRQ_edge(int gpio_nr, int edge); | ||
37 | extern void set_GPIO_IRQ_level(int gpio_nr, int level); | ||
38 | extern void gpio_line_config(int line, int style); | ||
39 | |||
40 | static inline int gpio_line_get(int line) | ||
41 | { | ||
42 | return (((*IXP2000_GPIO_PLR) >> line) & 1); | ||
43 | } | ||
44 | |||
45 | static inline void gpio_line_set(int line, int value) | ||
46 | { | ||
47 | if (value == IXP2000_GPIO_HIGH) { | ||
48 | ixp_reg_write(IXP2000_GPIO_POSR, BIT(line)); | ||
49 | } else if (value == IXP2000_GPIO_LOW) | ||
50 | ixp_reg_write(IXP2000_GPIO_POCR, BIT(line)); | ||
51 | } | ||
52 | |||
53 | #endif /* !__ASSEMBLY__ */ | ||
54 | #endif /* ASM_ARCH_IXP2000_GPIO_H_ */ | ||
55 | |||
diff --git a/include/asm-arm/arch-ixp2000/hardware.h b/include/asm-arm/arch-ixp2000/hardware.h new file mode 100644 index 000000000000..e7ea781c48aa --- /dev/null +++ b/include/asm-arm/arch-ixp2000/hardware.h | |||
@@ -0,0 +1,44 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-ixp2000/hardware.h | ||
3 | * | ||
4 | * Hardware definitions for IXP2400/2800 based systems | ||
5 | * | ||
6 | * Original Author: Naeem M Afzal <naeem.m.afzal@intel.com> | ||
7 | * | ||
8 | * Maintainer: Deepak Saxena <dsaxena@mvista.com> | ||
9 | * | ||
10 | * Copyright (C) 2001-2002 Intel Corp. | ||
11 | * Copyright (C) 2003-2004 MontaVista Software, Inc. | ||
12 | * | ||
13 | * This program is free software; you can redistribute it and/or modify it | ||
14 | * under the terms of the GNU General Public License as published by the | ||
15 | * Free Software Foundation; either version 2 of the License, or (at your | ||
16 | * option) any later version. | ||
17 | */ | ||
18 | |||
19 | #ifndef __ASM_ARCH_HARDWARE_H__ | ||
20 | #define __ASM_ARCH_HARDWARE_H__ | ||
21 | |||
22 | /* | ||
23 | * This needs to be platform-specific? | ||
24 | */ | ||
25 | #define PCIBIOS_MIN_IO 0x00000000 | ||
26 | #define PCIBIOS_MIN_MEM 0x00000000 | ||
27 | |||
28 | #include "ixp2000-regs.h" /* Chipset Registers */ | ||
29 | |||
30 | #define pcibios_assign_all_busses() 0 | ||
31 | |||
32 | /* | ||
33 | * Platform helper functions | ||
34 | */ | ||
35 | #include "platform.h" | ||
36 | |||
37 | /* | ||
38 | * Platform-specific bits | ||
39 | */ | ||
40 | #include "enp2611.h" /* ENP-2611 */ | ||
41 | #include "ixdp2x00.h" /* IXDP2400/2800 */ | ||
42 | #include "ixdp2x01.h" /* IXDP2401/2801 */ | ||
43 | |||
44 | #endif /* _ASM_ARCH_HARDWARE_H__ */ | ||
diff --git a/include/asm-arm/arch-ixp2000/io.h b/include/asm-arm/arch-ixp2000/io.h new file mode 100644 index 000000000000..a8e3c2daefd6 --- /dev/null +++ b/include/asm-arm/arch-ixp2000/io.h | |||
@@ -0,0 +1,150 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-ixp2000/io.h | ||
3 | * | ||
4 | * Original Author: Naeem M Afzal <naeem.m.afzal@intel.com> | ||
5 | * Maintainer: Deepak Saxena <dsaxena@plexity.net> | ||
6 | * | ||
7 | * Copyright (C) 2002 Intel Corp. | ||
8 | * Copyrgiht (C) 2003-2004 MontaVista Software, Inc. | ||
9 | * | ||
10 | * This program is free software; you can redistribute it and/or modify | ||
11 | * it under the terms of the GNU General Public License version 2 as | ||
12 | * published by the Free Software Foundation. | ||
13 | */ | ||
14 | |||
15 | #ifndef __ASM_ARM_ARCH_IO_H | ||
16 | #define __ASM_ARM_ARCH_IO_H | ||
17 | |||
18 | #define IO_SPACE_LIMIT 0xffffffff | ||
19 | #define __mem_pci(a) (a) | ||
20 | #define ___io(p) ((void __iomem *)((p)+IXP2000_PCI_IO_VIRT_BASE)) | ||
21 | |||
22 | /* | ||
23 | * The IXP2400 before revision B0 asserts byte lanes for PCI I/O | ||
24 | * transactions the other way round (MEM transactions don't have this | ||
25 | * issue), so we need to override the standard functions. B0 and later | ||
26 | * have a bit that can be set to 1 to get the 'proper' behavior, but | ||
27 | * since that isn't available on the A? revisions we just keep doing | ||
28 | * things manually. | ||
29 | */ | ||
30 | #define alignb(addr) (void __iomem *)((unsigned long)addr ^ 3) | ||
31 | #define alignw(addr) (void __iomem *)((unsigned long)addr ^ 2) | ||
32 | |||
33 | #define outb(v,p) __raw_writeb((v),alignb(___io(p))) | ||
34 | #define outw(v,p) __raw_writew((v),alignw(___io(p))) | ||
35 | #define outl(v,p) __raw_writel((v),___io(p)) | ||
36 | |||
37 | #define inb(p) ({ unsigned int __v = __raw_readb(alignb(___io(p))); __v; }) | ||
38 | #define inw(p) \ | ||
39 | ({ unsigned int __v = (__raw_readw(alignw(___io(p)))); __v; }) | ||
40 | #define inl(p) \ | ||
41 | ({ unsigned int __v = (__raw_readl(___io(p))); __v; }) | ||
42 | |||
43 | #define outsb(p,d,l) __raw_writesb(alignb(___io(p)),d,l) | ||
44 | #define outsw(p,d,l) __raw_writesw(alignw(___io(p)),d,l) | ||
45 | #define outsl(p,d,l) __raw_writesl(___io(p),d,l) | ||
46 | |||
47 | #define insb(p,d,l) __raw_readsb(alignb(___io(p)),d,l) | ||
48 | #define insw(p,d,l) __raw_readsw(alignw(___io(p)),d,l) | ||
49 | #define insl(p,d,l) __raw_readsl(___io(p),d,l) | ||
50 | |||
51 | |||
52 | #ifdef CONFIG_ARCH_IXDP2X01 | ||
53 | /* | ||
54 | * This is an ugly hack but the CS8900 on the 2x01's does not sit in any sort | ||
55 | * of "I/O space" and is just direct mapped into a 32-bit-only addressable | ||
56 | * bus. The address space for this bus is such that we can't really easily | ||
57 | * make it contiguous to the PCI I/O address range, and it also does not | ||
58 | * need swapping like PCI addresses do (IXDP2x01 is a BE platform). | ||
59 | * B/C of this we can't use the standard in/out functions and need to | ||
60 | * runtime check if the incoming address is a PCI address or for | ||
61 | * the CS89x0. | ||
62 | */ | ||
63 | #undef inw | ||
64 | #undef outw | ||
65 | #undef insw | ||
66 | #undef outsw | ||
67 | |||
68 | #include <asm/mach-types.h> | ||
69 | |||
70 | static inline void insw(u32 ptr, void *buf, int length) | ||
71 | { | ||
72 | register volatile u32 *port = (volatile u32 *)ptr; | ||
73 | |||
74 | /* | ||
75 | * Is this cycle meant for the CS8900? | ||
76 | */ | ||
77 | if ((machine_is_ixdp2401() || machine_is_ixdp2801()) && | ||
78 | ((port >= IXDP2X01_CS8900_VIRT_BASE) && | ||
79 | (port <= IXDP2X01_CS8900_VIRT_END))) { | ||
80 | u8 *buf8 = (u8*)buf; | ||
81 | register u32 tmp32; | ||
82 | |||
83 | do { | ||
84 | tmp32 = *port; | ||
85 | *buf8++ = (u8)tmp32; | ||
86 | *buf8++ = (u8)(tmp32 >> 8); | ||
87 | } while(--length); | ||
88 | |||
89 | return; | ||
90 | } | ||
91 | |||
92 | __raw_readsw(alignw(___io(ptr)),buf,length); | ||
93 | } | ||
94 | |||
95 | static inline void outsw(u32 ptr, void *buf, int length) | ||
96 | { | ||
97 | register volatile u32 *port = (volatile u32 *)ptr; | ||
98 | |||
99 | /* | ||
100 | * Is this cycle meant for the CS8900? | ||
101 | */ | ||
102 | if ((machine_is_ixdp2401() || machine_is_ixdp2801()) && | ||
103 | ((port >= IXDP2X01_CS8900_VIRT_BASE) && | ||
104 | (port <= IXDP2X01_CS8900_VIRT_END))) { | ||
105 | register u32 tmp32; | ||
106 | u8 *buf8 = (u8*)buf; | ||
107 | do { | ||
108 | tmp32 = *buf8++; | ||
109 | tmp32 |= (*buf8++) << 8; | ||
110 | *port = tmp32; | ||
111 | } while(--length); | ||
112 | return; | ||
113 | } | ||
114 | |||
115 | __raw_writesw(alignw(___io(ptr)),buf,length); | ||
116 | } | ||
117 | |||
118 | |||
119 | static inline u16 inw(u32 ptr) | ||
120 | { | ||
121 | register volatile u32 *port = (volatile u32 *)ptr; | ||
122 | |||
123 | /* | ||
124 | * Is this cycle meant for the CS8900? | ||
125 | */ | ||
126 | if ((machine_is_ixdp2401() || machine_is_ixdp2801()) && | ||
127 | ((port >= IXDP2X01_CS8900_VIRT_BASE) && | ||
128 | (port <= IXDP2X01_CS8900_VIRT_END))) { | ||
129 | return (u16)(*port); | ||
130 | } | ||
131 | |||
132 | return __raw_readw(alignw(___io(ptr))); | ||
133 | } | ||
134 | |||
135 | static inline void outw(u16 value, u32 ptr) | ||
136 | { | ||
137 | register volatile u32 *port = (volatile u32 *)ptr; | ||
138 | |||
139 | if ((machine_is_ixdp2401() || machine_is_ixdp2801()) && | ||
140 | ((port >= IXDP2X01_CS8900_VIRT_BASE) && | ||
141 | (port <= IXDP2X01_CS8900_VIRT_END))) { | ||
142 | *port = value; | ||
143 | return; | ||
144 | } | ||
145 | |||
146 | __raw_writew((value),alignw(___io(ptr))); | ||
147 | } | ||
148 | #endif /* IXDP2x01 */ | ||
149 | |||
150 | #endif | ||
diff --git a/include/asm-arm/arch-ixp2000/irq.h b/include/asm-arm/arch-ixp2000/irq.h new file mode 100644 index 000000000000..ba00b23f9828 --- /dev/null +++ b/include/asm-arm/arch-ixp2000/irq.h | |||
@@ -0,0 +1,13 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-ixp2000/irq.h | ||
3 | * | ||
4 | * Copyright (C) 2002 Intel Corp. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | */ | ||
10 | |||
11 | #define fixup_irq(irq) (irq) | ||
12 | |||
13 | |||
diff --git a/include/asm-arm/arch-ixp2000/irqs.h b/include/asm-arm/arch-ixp2000/irqs.h new file mode 100644 index 000000000000..0deb96c12adb --- /dev/null +++ b/include/asm-arm/arch-ixp2000/irqs.h | |||
@@ -0,0 +1,174 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-ixp2000/irqs.h | ||
3 | * | ||
4 | * Original Author: Naeem Afzal <naeem.m.afzal@intel.com> | ||
5 | * Maintainer: Deepak Saxena <dsaxena@plexity.net> | ||
6 | * | ||
7 | * Copyright (C) 2002 Intel Corp. | ||
8 | * Copyright (C) 2003-2004 MontaVista Software, Inc. | ||
9 | * | ||
10 | * This program is free software; you can redistribute it and/or modify | ||
11 | * it under the terms of the GNU General Public License version 2 as | ||
12 | * published by the Free Software Foundation. | ||
13 | */ | ||
14 | |||
15 | #ifndef _IRQS_H | ||
16 | #define _IRQS_H | ||
17 | |||
18 | /* | ||
19 | * Do NOT add #ifdef MACHINE_FOO in here. | ||
20 | * Simpy add your machine IRQs here and increase NR_IRQS if needed to | ||
21 | * hold your machine's IRQ table. | ||
22 | */ | ||
23 | |||
24 | /* | ||
25 | * Some interrupt numbers go unused b/c the IRQ mask/ummask/status | ||
26 | * register has those bit reserved. We just mark those interrupts | ||
27 | * as invalid and this allows us to do mask/unmask with a single | ||
28 | * shift operation instead of having to map the IRQ number to | ||
29 | * a HW IRQ number. | ||
30 | */ | ||
31 | #define IRQ_IXP2000_SOFT_INT 0 /* soft interrupt */ | ||
32 | #define IRQ_IXP2000_ERRSUM 1 /* OR of all bits in ErrorStatus reg*/ | ||
33 | #define IRQ_IXP2000_UART 2 | ||
34 | #define IRQ_IXP2000_GPIO 3 | ||
35 | #define IRQ_IXP2000_TIMER1 4 | ||
36 | #define IRQ_IXP2000_TIMER2 5 | ||
37 | #define IRQ_IXP2000_TIMER3 6 | ||
38 | #define IRQ_IXP2000_TIMER4 7 | ||
39 | #define IRQ_IXP2000_PMU 8 | ||
40 | #define IRQ_IXP2000_SPF 9 /* Slow port framer IRQ */ | ||
41 | #define IRQ_IXP2000_DMA1 10 | ||
42 | #define IRQ_IXP2000_DMA2 11 | ||
43 | #define IRQ_IXP2000_DMA3 12 | ||
44 | #define IRQ_IXP2000_PCI_DOORBELL 13 | ||
45 | #define IRQ_IXP2000_ME_ATTN 14 | ||
46 | #define IRQ_IXP2000_PCI 15 /* PCI INTA or INTB */ | ||
47 | #define IRQ_IXP2000_THDA0 16 /* thread 0-31A */ | ||
48 | #define IRQ_IXP2000_THDA1 17 /* thread 32-63A, IXP2800 only */ | ||
49 | #define IRQ_IXP2000_THDA2 18 /* thread 64-95A */ | ||
50 | #define IRQ_IXP2000_THDA3 19 /* thread 96-127A, IXP2800 only */ | ||
51 | #define IRQ_IXP2000_THDB0 24 /* thread 0-31B */ | ||
52 | #define IRQ_IXP2000_THDB1 25 /* thread 32-63B, IXP2800 only */ | ||
53 | #define IRQ_IXP2000_THDB2 26 /* thread 64-95B */ | ||
54 | #define IRQ_IXP2000_THDB3 27 /* thread 96-127B, IXP2800 only */ | ||
55 | |||
56 | /* define generic GPIOs */ | ||
57 | #define IRQ_IXP2000_GPIO0 32 | ||
58 | #define IRQ_IXP2000_GPIO1 33 | ||
59 | #define IRQ_IXP2000_GPIO2 34 | ||
60 | #define IRQ_IXP2000_GPIO3 35 | ||
61 | #define IRQ_IXP2000_GPIO4 36 | ||
62 | #define IRQ_IXP2000_GPIO5 37 | ||
63 | #define IRQ_IXP2000_GPIO6 38 | ||
64 | #define IRQ_IXP2000_GPIO7 39 | ||
65 | |||
66 | /* split off the 2 PCI sources */ | ||
67 | #define IRQ_IXP2000_PCIA 40 | ||
68 | #define IRQ_IXP2000_PCIB 41 | ||
69 | |||
70 | #define NR_IXP2000_IRQS 42 | ||
71 | |||
72 | #define IXP2000_BOARD_IRQ(x) (NR_IXP2000_IRQS + (x)) | ||
73 | |||
74 | #define IXP2000_BOARD_IRQ_MASK(irq) (1 << (irq - NR_IXP2000_IRQS)) | ||
75 | |||
76 | /* | ||
77 | * This allows for all the on-chip sources plus up to 32 CPLD based | ||
78 | * IRQs. Should be more than enough. | ||
79 | */ | ||
80 | #define IXP2000_BOARD_IRQS 32 | ||
81 | #define NR_IRQS (NR_IXP2000_IRQS + IXP2000_BOARD_IRQS) | ||
82 | |||
83 | |||
84 | /* | ||
85 | * IXDP2400 specific IRQs | ||
86 | */ | ||
87 | #define IRQ_IXDP2400_INGRESS_NPU IXP2000_BOARD_IRQ(0) | ||
88 | #define IRQ_IXDP2400_ENET IXP2000_BOARD_IRQ(1) | ||
89 | #define IRQ_IXDP2400_MEDIA_PCI IXP2000_BOARD_IRQ(2) | ||
90 | #define IRQ_IXDP2400_MEDIA_SP IXP2000_BOARD_IRQ(3) | ||
91 | #define IRQ_IXDP2400_SF_PCI IXP2000_BOARD_IRQ(4) | ||
92 | #define IRQ_IXDP2400_SF_SP IXP2000_BOARD_IRQ(5) | ||
93 | #define IRQ_IXDP2400_PMC IXP2000_BOARD_IRQ(6) | ||
94 | #define IRQ_IXDP2400_TVM IXP2000_BOARD_IRQ(7) | ||
95 | |||
96 | #define NR_IXDP2400_IRQS ((IRQ_IXDP2400_TVM)+1) | ||
97 | #define IXDP2400_NR_IRQS NR_IXDP2400_IRQS - NR_IXP2000_IRQS | ||
98 | |||
99 | /* IXDP2800 specific IRQs */ | ||
100 | #define IRQ_IXDP2800_EGRESS_ENET IXP2000_BOARD_IRQ(0) | ||
101 | #define IRQ_IXDP2800_INGRESS_NPU IXP2000_BOARD_IRQ(1) | ||
102 | #define IRQ_IXDP2800_PMC IXP2000_BOARD_IRQ(2) | ||
103 | #define IRQ_IXDP2800_FABRIC_PCI IXP2000_BOARD_IRQ(3) | ||
104 | #define IRQ_IXDP2800_FABRIC IXP2000_BOARD_IRQ(4) | ||
105 | #define IRQ_IXDP2800_MEDIA IXP2000_BOARD_IRQ(5) | ||
106 | |||
107 | #define NR_IXDP2800_IRQS ((IRQ_IXDP2800_MEDIA)+1) | ||
108 | #define IXDP2800_NR_IRQS NR_IXDP2800_IRQS - NR_IXP2000_IRQS | ||
109 | |||
110 | /* | ||
111 | * IRQs on both IXDP2x01 boards | ||
112 | */ | ||
113 | #define IRQ_IXDP2X01_SPCI_DB_0 IXP2000_BOARD_IRQ(2) | ||
114 | #define IRQ_IXDP2X01_SPCI_DB_1 IXP2000_BOARD_IRQ(3) | ||
115 | #define IRQ_IXDP2X01_SPCI_PMC_INTA IXP2000_BOARD_IRQ(4) | ||
116 | #define IRQ_IXDP2X01_SPCI_PMC_INTB IXP2000_BOARD_IRQ(5) | ||
117 | #define IRQ_IXDP2X01_SPCI_PMC_INTC IXP2000_BOARD_IRQ(6) | ||
118 | #define IRQ_IXDP2X01_SPCI_PMC_INTD IXP2000_BOARD_IRQ(7) | ||
119 | #define IRQ_IXDP2X01_SPCI_FIC_INT IXP2000_BOARD_IRQ(8) | ||
120 | #define IRQ_IXDP2X01_IPMI_FROM IXP2000_BOARD_IRQ(16) | ||
121 | #define IRQ_IXDP2X01_125US IXP2000_BOARD_IRQ(17) | ||
122 | #define IRQ_IXDP2X01_DB_0_ADD IXP2000_BOARD_IRQ(18) | ||
123 | #define IRQ_IXDP2X01_DB_1_ADD IXP2000_BOARD_IRQ(19) | ||
124 | #define IRQ_IXDP2X01_UART1 IXP2000_BOARD_IRQ(21) | ||
125 | #define IRQ_IXDP2X01_UART2 IXP2000_BOARD_IRQ(22) | ||
126 | #define IRQ_IXDP2X01_FIC_ADD_INT IXP2000_BOARD_IRQ(24) | ||
127 | #define IRQ_IXDP2X01_CS8900 IXP2000_BOARD_IRQ(25) | ||
128 | #define IRQ_IXDP2X01_BBSRAM IXP2000_BOARD_IRQ(26) | ||
129 | |||
130 | #define IXDP2X01_VALID_IRQ_MASK ( \ | ||
131 | IXP2000_BOARD_IRQ_MASK(IRQ_IXDP2X01_SPCI_DB_0) | \ | ||
132 | IXP2000_BOARD_IRQ_MASK(IRQ_IXDP2X01_SPCI_DB_1) | \ | ||
133 | IXP2000_BOARD_IRQ_MASK(IRQ_IXDP2X01_SPCI_PMC_INTA) | \ | ||
134 | IXP2000_BOARD_IRQ_MASK(IRQ_IXDP2X01_SPCI_PMC_INTB) | \ | ||
135 | IXP2000_BOARD_IRQ_MASK(IRQ_IXDP2X01_SPCI_PMC_INTC) | \ | ||
136 | IXP2000_BOARD_IRQ_MASK(IRQ_IXDP2X01_SPCI_PMC_INTD) | \ | ||
137 | IXP2000_BOARD_IRQ_MASK(IRQ_IXDP2X01_SPCI_FIC_INT) | \ | ||
138 | IXP2000_BOARD_IRQ_MASK(IRQ_IXDP2X01_IPMI_FROM) | \ | ||
139 | IXP2000_BOARD_IRQ_MASK(IRQ_IXDP2X01_125US) | \ | ||
140 | IXP2000_BOARD_IRQ_MASK(IRQ_IXDP2X01_DB_0_ADD) | \ | ||
141 | IXP2000_BOARD_IRQ_MASK(IRQ_IXDP2X01_DB_1_ADD) | \ | ||
142 | IXP2000_BOARD_IRQ_MASK(IRQ_IXDP2X01_UART1) | \ | ||
143 | IXP2000_BOARD_IRQ_MASK(IRQ_IXDP2X01_UART2) | \ | ||
144 | IXP2000_BOARD_IRQ_MASK(IRQ_IXDP2X01_FIC_ADD_INT) | \ | ||
145 | IXP2000_BOARD_IRQ_MASK(IRQ_IXDP2X01_CS8900) | \ | ||
146 | IXP2000_BOARD_IRQ_MASK(IRQ_IXDP2X01_BBSRAM) ) | ||
147 | |||
148 | /* | ||
149 | * IXDP2401 specific IRQs | ||
150 | */ | ||
151 | #define IRQ_IXDP2401_INTA_82546 IXP2000_BOARD_IRQ(0) | ||
152 | #define IRQ_IXDP2401_INTB_82546 IXP2000_BOARD_IRQ(1) | ||
153 | |||
154 | #define IXDP2401_VALID_IRQ_MASK ( \ | ||
155 | IXDP2X01_VALID_IRQ_MASK | \ | ||
156 | IXP2000_BOARD_IRQ_MASK(IRQ_IXDP2401_INTA_82546) |\ | ||
157 | IXP2000_BOARD_IRQ_MASK(IRQ_IXDP2401_INTB_82546)) | ||
158 | |||
159 | /* | ||
160 | * IXDP2801-specific IRQs | ||
161 | */ | ||
162 | #define IRQ_IXDP2801_RIV IXP2000_BOARD_IRQ(0) | ||
163 | #define IRQ_IXDP2801_CNFG_MEDIA IXP2000_BOARD_IRQ(27) | ||
164 | #define IRQ_IXDP2801_CLOCK_REF IXP2000_BOARD_IRQ(28) | ||
165 | |||
166 | #define IXDP2801_VALID_IRQ_MASK ( \ | ||
167 | IXDP2X01_VALID_IRQ_MASK | \ | ||
168 | IXP2000_BOARD_IRQ_MASK(IRQ_IXDP2801_RIV) |\ | ||
169 | IXP2000_BOARD_IRQ_MASK(IRQ_IXDP2801_CNFG_MEDIA) |\ | ||
170 | IXP2000_BOARD_IRQ_MASK(IRQ_IXDP2801_CLOCK_REF)) | ||
171 | |||
172 | #define NR_IXDP2X01_IRQS ((IRQ_IXDP2801_CLOCK_REF) + 1) | ||
173 | |||
174 | #endif /*_IRQS_H*/ | ||
diff --git a/include/asm-arm/arch-ixp2000/ixdp2x00.h b/include/asm-arm/arch-ixp2000/ixdp2x00.h new file mode 100644 index 000000000000..3a398dfbf125 --- /dev/null +++ b/include/asm-arm/arch-ixp2000/ixdp2x00.h | |||
@@ -0,0 +1,93 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-ixp2000/ixdp2x00.h | ||
3 | * | ||
4 | * Register and other defines for IXDP2[48]00 platforms | ||
5 | * | ||
6 | * Original Author: Naeem Afzal <naeem.m.afzal@intel.com> | ||
7 | * Maintainer: Deepak Saxena <dsaxena@plexity.net> | ||
8 | * | ||
9 | * Copyright (C) 2002 Intel Corp. | ||
10 | * Copyright (C) 2003-2004 MontaVista Software, Inc. | ||
11 | * | ||
12 | * This program is free software; you can redistribute it and/or modify it | ||
13 | * under the terms of the GNU General Public License as published by the | ||
14 | * Free Software Foundation; either version 2 of the License, or (at your | ||
15 | * option) any later version. | ||
16 | */ | ||
17 | #ifndef _IXDP2X00_H_ | ||
18 | #define _IXDP2X00_H_ | ||
19 | |||
20 | /* | ||
21 | * On board CPLD memory map | ||
22 | */ | ||
23 | #define IXDP2X00_PHYS_CPLD_BASE 0xc7000000 | ||
24 | #define IXDP2X00_VIRT_CPLD_BASE 0xfafff000 | ||
25 | #define IXDP2X00_CPLD_SIZE 0x00001000 | ||
26 | |||
27 | |||
28 | #define IXDP2X00_CPLD_REG(x) \ | ||
29 | (volatile unsigned long *)(IXDP2X00_VIRT_CPLD_BASE | x) | ||
30 | |||
31 | /* | ||
32 | * IXDP2400 CPLD registers | ||
33 | */ | ||
34 | #define IXDP2400_CPLD_SYSLED IXDP2X00_CPLD_REG(0x0) | ||
35 | #define IXDP2400_CPLD_DISP_DATA IXDP2X00_CPLD_REG(0x4) | ||
36 | #define IXDP2400_CPLD_CLOCK_SPEED IXDP2X00_CPLD_REG(0x8) | ||
37 | #define IXDP2400_CPLD_INT_STAT IXDP2X00_CPLD_REG(0xc) | ||
38 | #define IXDP2400_CPLD_REV IXDP2X00_CPLD_REG(0x10) | ||
39 | #define IXDP2400_CPLD_SYS_CLK_M IXDP2X00_CPLD_REG(0x14) | ||
40 | #define IXDP2400_CPLD_SYS_CLK_N IXDP2X00_CPLD_REG(0x18) | ||
41 | #define IXDP2400_CPLD_INT_MASK IXDP2X00_CPLD_REG(0x48) | ||
42 | |||
43 | /* | ||
44 | * IXDP2800 CPLD registers | ||
45 | */ | ||
46 | #define IXDP2800_CPLD_INT_STAT IXDP2X00_CPLD_REG(0x0) | ||
47 | #define IXDP2800_CPLD_INT_MASK IXDP2X00_CPLD_REG(0x140) | ||
48 | |||
49 | |||
50 | #define IXDP2X00_GPIO_I2C_ENABLE 0x02 | ||
51 | #define IXDP2X00_GPIO_SCL 0x07 | ||
52 | #define IXDP2X00_GPIO_SDA 0x06 | ||
53 | |||
54 | /* | ||
55 | * PCI devfns for on-board devices. We need these to be able to | ||
56 | * properly translate IRQs and for device removal. | ||
57 | */ | ||
58 | #define IXDP2400_SLAVE_ENET_DEVFN 0x18 /* Bus 1 */ | ||
59 | #define IXDP2400_MASTER_ENET_DEVFN 0x20 /* Bus 1 */ | ||
60 | #define IXDP2400_MEDIA_DEVFN 0x28 /* Bus 1 */ | ||
61 | #define IXDP2400_SWITCH_FABRIC_DEVFN 0x30 /* Bus 1 */ | ||
62 | |||
63 | #define IXDP2800_SLAVE_ENET_DEVFN 0x20 /* Bus 1 */ | ||
64 | #define IXDP2800_MASTER_ENET_DEVFN 0x18 /* Bus 1 */ | ||
65 | #define IXDP2800_SWITCH_FABRIC_DEVFN 0x30 /* Bus 1 */ | ||
66 | |||
67 | #define IXDP2X00_P2P_DEVFN 0x20 /* Bus 0 */ | ||
68 | #define IXDP2X00_21555_DEVFN 0x30 /* Bus 0 */ | ||
69 | #define IXDP2X00_SLAVE_NPU_DEVFN 0x28 /* Bus 1 */ | ||
70 | #define IXDP2X00_PMC_DEVFN 0x38 /* Bus 1 */ | ||
71 | #define IXDP2X00_MASTER_NPU_DEVFN 0x38 /* Bus 1 */ | ||
72 | |||
73 | #ifndef __ASSEMBLY__ | ||
74 | /* | ||
75 | * Master NPU will always have flash and be PCI master. | ||
76 | * Slave NPU may or may not have flash but will never be PCI master. | ||
77 | */ | ||
78 | static inline unsigned int ixdp2x00_master_npu(void) | ||
79 | { | ||
80 | return ((ixp2000_has_flash()) && (ixp2000_is_pcimaster())); | ||
81 | } | ||
82 | |||
83 | /* | ||
84 | * Helper functions used by ixdp2400 and ixdp2800 specific code | ||
85 | */ | ||
86 | void ixdp2x00_init_irq(volatile unsigned long*, volatile unsigned long *, unsigned long); | ||
87 | void ixdp2x00_slave_pci_postinit(void); | ||
88 | void ixdp2x00_init_machine(void); | ||
89 | void ixdp2x00_map_io(void); | ||
90 | |||
91 | #endif | ||
92 | |||
93 | #endif /*_IXDP2X00_H_ */ | ||
diff --git a/include/asm-arm/arch-ixp2000/ixdp2x01.h b/include/asm-arm/arch-ixp2000/ixdp2x01.h new file mode 100644 index 000000000000..b3a1bcda8d01 --- /dev/null +++ b/include/asm-arm/arch-ixp2000/ixdp2x01.h | |||
@@ -0,0 +1,57 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-ixp2000/ixdp2x01.h | ||
3 | * | ||
4 | * Platform definitions for IXDP2X01 && IXDP2801 systems | ||
5 | * | ||
6 | * Author: Deepak Saxena <dsaxena@plexity.net> | ||
7 | * | ||
8 | * Copyright 2004 (c) MontaVista Software, Inc. | ||
9 | * | ||
10 | * Based on original code Copyright (c) 2002-2003 Intel Corporation | ||
11 | * | ||
12 | * This file is licensed under the terms of the GNU General Public | ||
13 | * License version 2. This program is licensed "as is" without any | ||
14 | * warranty of any kind, whether express or implied. | ||
15 | */ | ||
16 | |||
17 | #ifndef __IXDP2X01_H__ | ||
18 | #define __IXDP2X01_H__ | ||
19 | |||
20 | #define IXDP2X01_PHYS_CPLD_BASE 0xc6024000 | ||
21 | #define IXDP2X01_VIRT_CPLD_BASE 0xfafff000 | ||
22 | #define IXDP2X01_CPLD_REGION_SIZE 0x00001000 | ||
23 | |||
24 | #define IXDP2X01_CPLD_VIRT_REG(reg) (volatile unsigned long*)(IXDP2X01_VIRT_CPLD_BASE | reg) | ||
25 | #define IXDP2X01_CPLD_PHYS_REG(reg) (volatile u32*)(IXDP2X01_PHYS_CPLD_BASE | reg) | ||
26 | |||
27 | #define IXDP2X01_UART1_VIRT_BASE IXDP2X01_CPLD_VIRT_REG(0x40) | ||
28 | #define IXDP2X01_UART1_PHYS_BASE IXDP2X01_CPLD_PHYS_REG(0x40) | ||
29 | |||
30 | #define IXDP2X01_UART2_VIRT_BASE IXDP2X01_CPLD_VIRT_REG(0x60) | ||
31 | #define IXDP2X01_UART2_PHYS_BASE IXDP2X01_CPLD_PHYS_REG(0x60) | ||
32 | |||
33 | #define IXDP2X01_CS8900_VIRT_BASE IXDP2X01_CPLD_VIRT_REG(0x80) | ||
34 | #define IXDP2X01_CS8900_VIRT_END (IXDP2X01_CS8900_VIRT_BASE + 16) | ||
35 | |||
36 | #define IXDP2X01_CPLD_RESET_REG IXDP2X01_CPLD_VIRT_REG(0x00) | ||
37 | #define IXDP2X01_INT_MASK_SET_REG IXDP2X01_CPLD_VIRT_REG(0x08) | ||
38 | #define IXDP2X01_INT_STAT_REG IXDP2X01_CPLD_VIRT_REG(0x0C) | ||
39 | #define IXDP2X01_INT_RAW_REG IXDP2X01_CPLD_VIRT_REG(0x10) | ||
40 | #define IXDP2X01_INT_MASK_CLR_REG IXDP2X01_INT_RAW_REG | ||
41 | #define IXDP2X01_INT_SIM_REG IXDP2X01_CPLD_VIRT_REG(0x14) | ||
42 | |||
43 | #define IXDP2X01_CPLD_FLASH_REG IXDP2X01_CPLD_VIRT_REG(0x20) | ||
44 | |||
45 | #define IXDP2X01_CPLD_FLASH_INTERN 0x8000 | ||
46 | #define IXDP2X01_CPLD_FLASH_BANK_MASK 0xF | ||
47 | #define IXDP2X01_FLASH_WINDOW_BITS 25 | ||
48 | #define IXDP2X01_FLASH_WINDOW_SIZE (1 << IXDP2X01_FLASH_WINDOW_BITS) | ||
49 | #define IXDP2X01_FLASH_WINDOW_MASK (IXDP2X01_FLASH_WINDOW_SIZE - 1) | ||
50 | |||
51 | #define IXDP2X01_UART_CLK 1843200 | ||
52 | |||
53 | #define IXDP2X01_GPIO_I2C_ENABLE 0x02 | ||
54 | #define IXDP2X01_GPIO_SCL 0x07 | ||
55 | #define IXDP2X01_GPIO_SDA 0x06 | ||
56 | |||
57 | #endif /* __IXDP2x01_H__ */ | ||
diff --git a/include/asm-arm/arch-ixp2000/ixp2000-regs.h b/include/asm-arm/arch-ixp2000/ixp2000-regs.h new file mode 100644 index 000000000000..6c56708d0ff0 --- /dev/null +++ b/include/asm-arm/arch-ixp2000/ixp2000-regs.h | |||
@@ -0,0 +1,377 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-ixp2000/ixp2000-regs.h | ||
3 | * | ||
4 | * Chipset register definitions for IXP2400/2800 based systems. | ||
5 | * | ||
6 | * Original Author: Naeem Afzal <naeem.m.afzal@intel.com> | ||
7 | * | ||
8 | * Maintainer: Deepak Saxena <dsaxena@plexity.net> | ||
9 | * | ||
10 | * Copyright (C) 2002 Intel Corp. | ||
11 | * Copyright (C) 2003-2004 MontaVista Software, Inc. | ||
12 | * | ||
13 | * This program is free software; you can redistribute it and/or modify it | ||
14 | * under the terms of the GNU General Public License as published by the | ||
15 | * Free Software Foundation; either version 2 of the License, or (at your | ||
16 | * option) any later version. | ||
17 | */ | ||
18 | #ifndef _IXP2000_REGS_H_ | ||
19 | #define _IXP2000_REGS_H_ | ||
20 | |||
21 | /* | ||
22 | * Static I/O regions. | ||
23 | * | ||
24 | * Most of the registers are clumped in 4K regions spread throughout | ||
25 | * the 0xc0000000 -> 0xc0100000 address range, but we just map in | ||
26 | * the whole range using a single 1 MB section instead of small | ||
27 | * 4K pages. This has two advantages for us: | ||
28 | * | ||
29 | * 1) We use only one TLB entry for large number of on-chip I/O devices. | ||
30 | * | ||
31 | * 2) We can easily set the Section attributes to XCB=101 on the IXP2400 | ||
32 | * as required per erratum #66. We accomplish this by using a | ||
33 | * new MT_IXP2000_DEVICE memory type with the bits set as required. | ||
34 | * | ||
35 | * CAP stands for CSR Access Proxy. | ||
36 | * | ||
37 | * If you change the virtual address of this mapping, please propagate | ||
38 | * the change to arch/arm/kernel/debug.S, which hardcodes the virtual | ||
39 | * address of the UART located in this region. | ||
40 | */ | ||
41 | |||
42 | #define IXP2000_CAP_PHYS_BASE 0xc0000000 | ||
43 | #define IXP2000_CAP_VIRT_BASE 0xfef00000 | ||
44 | #define IXP2000_CAP_SIZE 0x00100000 | ||
45 | |||
46 | /* | ||
47 | * Addresses for specific on-chip peripherals | ||
48 | */ | ||
49 | #define IXP2000_SLOWPORT_CSR_VIRT_BASE 0xfef80000 | ||
50 | #define IXP2000_GLOBAL_REG_VIRT_BASE 0xfef04000 | ||
51 | #define IXP2000_UART_PHYS_BASE 0xc0030000 | ||
52 | #define IXP2000_UART_VIRT_BASE 0xfef30000 | ||
53 | #define IXP2000_TIMER_VIRT_BASE 0xfef20000 | ||
54 | #define IXP2000_GPIO_VIRT_BASE 0Xfef10000 | ||
55 | |||
56 | /* | ||
57 | * Devices outside of the 0xc0000000 -> 0xc0100000 range. The virtual | ||
58 | * addresses of the INTCTL and PCI_CSR mappings are hardcoded in | ||
59 | * entry-macro.S, so if you ever change these please propagate | ||
60 | * the change. | ||
61 | */ | ||
62 | #define IXP2000_INTCTL_PHYS_BASE 0xd6000000 | ||
63 | #define IXP2000_INTCTL_VIRT_BASE 0xfee00000 | ||
64 | #define IXP2000_INTCTL_SIZE 0x00100000 | ||
65 | |||
66 | #define IXP2000_PCI_CREG_PHYS_BASE 0xde000000 | ||
67 | #define IXP2000_PCI_CREG_VIRT_BASE 0xfed00000 | ||
68 | #define IXP2000_PCI_CREG_SIZE 0x00100000 | ||
69 | |||
70 | #define IXP2000_PCI_CSR_PHYS_BASE 0xdf000000 | ||
71 | #define IXP2000_PCI_CSR_VIRT_BASE 0xfec00000 | ||
72 | #define IXP2000_PCI_CSR_SIZE 0x00100000 | ||
73 | |||
74 | #define IXP2000_PCI_IO_PHYS_BASE 0xd8000000 | ||
75 | #define IXP2000_PCI_IO_VIRT_BASE 0xfd000000 | ||
76 | #define IXP2000_PCI_IO_SIZE 0x01000000 | ||
77 | |||
78 | #define IXP2000_PCI_CFG0_PHYS_BASE 0xda000000 | ||
79 | #define IXP2000_PCI_CFG0_VIRT_BASE 0xfc000000 | ||
80 | #define IXP2000_PCI_CFG0_SIZE 0x01000000 | ||
81 | |||
82 | #define IXP2000_PCI_CFG1_PHYS_BASE 0xdb000000 | ||
83 | #define IXP2000_PCI_CFG1_VIRT_BASE 0xfb000000 | ||
84 | #define IXP2000_PCI_CFG1_SIZE 0x01000000 | ||
85 | |||
86 | /* | ||
87 | * Timers | ||
88 | */ | ||
89 | #define IXP2000_TIMER_REG(x) ((volatile unsigned long*)(IXP2000_TIMER_VIRT_BASE | (x))) | ||
90 | /* Timer control */ | ||
91 | #define IXP2000_T1_CTL IXP2000_TIMER_REG(0x00) | ||
92 | #define IXP2000_T2_CTL IXP2000_TIMER_REG(0x04) | ||
93 | #define IXP2000_T3_CTL IXP2000_TIMER_REG(0x08) | ||
94 | #define IXP2000_T4_CTL IXP2000_TIMER_REG(0x0c) | ||
95 | /* Store initial value */ | ||
96 | #define IXP2000_T1_CLD IXP2000_TIMER_REG(0x10) | ||
97 | #define IXP2000_T2_CLD IXP2000_TIMER_REG(0x14) | ||
98 | #define IXP2000_T3_CLD IXP2000_TIMER_REG(0x18) | ||
99 | #define IXP2000_T4_CLD IXP2000_TIMER_REG(0x1c) | ||
100 | /* Read current value */ | ||
101 | #define IXP2000_T1_CSR IXP2000_TIMER_REG(0x20) | ||
102 | #define IXP2000_T2_CSR IXP2000_TIMER_REG(0x24) | ||
103 | #define IXP2000_T3_CSR IXP2000_TIMER_REG(0x28) | ||
104 | #define IXP2000_T4_CSR IXP2000_TIMER_REG(0x2c) | ||
105 | /* Clear associated timer interrupt */ | ||
106 | #define IXP2000_T1_CLR IXP2000_TIMER_REG(0x30) | ||
107 | #define IXP2000_T2_CLR IXP2000_TIMER_REG(0x34) | ||
108 | #define IXP2000_T3_CLR IXP2000_TIMER_REG(0x38) | ||
109 | #define IXP2000_T4_CLR IXP2000_TIMER_REG(0x3c) | ||
110 | /* Timer watchdog enable for T4 */ | ||
111 | #define IXP2000_TWDE IXP2000_TIMER_REG(0x40) | ||
112 | |||
113 | #define WDT_ENABLE 0x00000001 | ||
114 | #define TIMER_DIVIDER_256 0x00000008 | ||
115 | #define TIMER_ENABLE 0x00000080 | ||
116 | #define IRQ_MASK_TIMER1 (1 << 4) | ||
117 | |||
118 | /* | ||
119 | * Interrupt controller registers | ||
120 | */ | ||
121 | #define IXP2000_INTCTL_REG(x) (volatile unsigned long*)(IXP2000_INTCTL_VIRT_BASE | (x)) | ||
122 | #define IXP2000_IRQ_STATUS IXP2000_INTCTL_REG(0x08) | ||
123 | #define IXP2000_IRQ_ENABLE IXP2000_INTCTL_REG(0x10) | ||
124 | #define IXP2000_IRQ_ENABLE_SET IXP2000_INTCTL_REG(0x10) | ||
125 | #define IXP2000_IRQ_ENABLE_CLR IXP2000_INTCTL_REG(0x18) | ||
126 | #define IXP2000_FIQ_ENABLE_CLR IXP2000_INTCTL_REG(0x14) | ||
127 | #define IXP2000_IRQ_ERR_STATUS IXP2000_INTCTL_REG(0x24) | ||
128 | #define IXP2000_IRQ_ERR_ENABLE_SET IXP2000_INTCTL_REG(0x2c) | ||
129 | #define IXP2000_FIQ_ERR_ENABLE_CLR IXP2000_INTCTL_REG(0x30) | ||
130 | #define IXP2000_IRQ_ERR_ENABLE_CLR IXP2000_INTCTL_REG(0x34) | ||
131 | #define IXP2000_IRQ_THD_RAW_STATUS_A_0 IXP2000_INTCTL_REG(0x60) | ||
132 | #define IXP2000_IRQ_THD_RAW_STATUS_A_1 IXP2000_INTCTL_REG(0x64) | ||
133 | #define IXP2000_IRQ_THD_RAW_STATUS_A_2 IXP2000_INTCTL_REG(0x68) | ||
134 | #define IXP2000_IRQ_THD_RAW_STATUS_A_3 IXP2000_INTCTL_REG(0x6c) | ||
135 | #define IXP2000_IRQ_THD_RAW_STATUS_B_0 IXP2000_INTCTL_REG(0x80) | ||
136 | #define IXP2000_IRQ_THD_RAW_STATUS_B_1 IXP2000_INTCTL_REG(0x84) | ||
137 | #define IXP2000_IRQ_THD_RAW_STATUS_B_2 IXP2000_INTCTL_REG(0x88) | ||
138 | #define IXP2000_IRQ_THD_RAW_STATUS_B_3 IXP2000_INTCTL_REG(0x8c) | ||
139 | #define IXP2000_IRQ_THD_ENABLE_SET_A_0 IXP2000_INTCTL_REG(0x160) | ||
140 | #define IXP2000_IRQ_THD_ENABLE_SET_A_1 IXP2000_INTCTL_REG(0x164) | ||
141 | #define IXP2000_IRQ_THD_ENABLE_SET_A_2 IXP2000_INTCTL_REG(0x168) | ||
142 | #define IXP2000_IRQ_THD_ENABLE_SET_A_3 IXP2000_INTCTL_REG(0x16c) | ||
143 | #define IXP2000_IRQ_THD_ENABLE_SET_B_0 IXP2000_INTCTL_REG(0x180) | ||
144 | #define IXP2000_IRQ_THD_ENABLE_SET_B_1 IXP2000_INTCTL_REG(0x184) | ||
145 | #define IXP2000_IRQ_THD_ENABLE_SET_B_2 IXP2000_INTCTL_REG(0x188) | ||
146 | #define IXP2000_IRQ_THD_ENABLE_SET_B_3 IXP2000_INTCTL_REG(0x18c) | ||
147 | #define IXP2000_IRQ_THD_ENABLE_CLEAR_A_0 IXP2000_INTCTL_REG(0x1e0) | ||
148 | #define IXP2000_IRQ_THD_ENABLE_CLEAR_A_1 IXP2000_INTCTL_REG(0x1e4) | ||
149 | #define IXP2000_IRQ_THD_ENABLE_CLEAR_A_2 IXP2000_INTCTL_REG(0x1e8) | ||
150 | #define IXP2000_IRQ_THD_ENABLE_CLEAR_A_3 IXP2000_INTCTL_REG(0x1ec) | ||
151 | #define IXP2000_IRQ_THD_ENABLE_CLEAR_B_0 IXP2000_INTCTL_REG(0x200) | ||
152 | #define IXP2000_IRQ_THD_ENABLE_CLEAR_B_1 IXP2000_INTCTL_REG(0x204) | ||
153 | #define IXP2000_IRQ_THD_ENABLE_CLEAR_B_2 IXP2000_INTCTL_REG(0x208) | ||
154 | #define IXP2000_IRQ_THD_ENABLE_CLEAR_B_3 IXP2000_INTCTL_REG(0x20c) | ||
155 | |||
156 | /* | ||
157 | * Mask of valid IRQs in the 32-bit IRQ register. We use | ||
158 | * this to mark certain IRQs as being invalid. | ||
159 | */ | ||
160 | #define IXP2000_VALID_IRQ_MASK 0x0f0fffff | ||
161 | |||
162 | /* | ||
163 | * PCI config register access from core | ||
164 | */ | ||
165 | #define IXP2000_PCI_CREG(x) (volatile unsigned long*)(IXP2000_PCI_CREG_VIRT_BASE | (x)) | ||
166 | #define IXP2000_PCI_CMDSTAT IXP2000_PCI_CREG(0x04) | ||
167 | #define IXP2000_PCI_CSR_BAR IXP2000_PCI_CREG(0x10) | ||
168 | #define IXP2000_PCI_SRAM_BAR IXP2000_PCI_CREG(0x14) | ||
169 | #define IXP2000_PCI_SDRAM_BAR IXP2000_PCI_CREG(0x18) | ||
170 | |||
171 | /* | ||
172 | * PCI CSRs | ||
173 | */ | ||
174 | #define IXP2000_PCI_CSR(x) (volatile unsigned long*)(IXP2000_PCI_CSR_VIRT_BASE | (x)) | ||
175 | |||
176 | /* | ||
177 | * PCI outbound interrupts | ||
178 | */ | ||
179 | #define IXP2000_PCI_OUT_INT_STATUS IXP2000_PCI_CSR(0x30) | ||
180 | #define IXP2000_PCI_OUT_INT_MASK IXP2000_PCI_CSR(0x34) | ||
181 | /* | ||
182 | * PCI communications | ||
183 | */ | ||
184 | #define IXP2000_PCI_MAILBOX0 IXP2000_PCI_CSR(0x50) | ||
185 | #define IXP2000_PCI_MAILBOX1 IXP2000_PCI_CSR(0x54) | ||
186 | #define IXP2000_PCI_MAILBOX2 IXP2000_PCI_CSR(0x58) | ||
187 | #define IXP2000_PCI_MAILBOX3 IXP2000_PCI_CSR(0x5C) | ||
188 | #define IXP2000_XSCALE_DOORBELL IXP2000_PCI_CSR(0x60) | ||
189 | #define IXP2000_XSCALE_DOORBELL_SETUP IXP2000_PCI_CSR(0x64) | ||
190 | #define IXP2000_PCI_DOORBELL IXP2000_PCI_CSR(0x70) | ||
191 | #define IXP2000_PCI_DOORBELL_SETUP IXP2000_PCI_CSR(0x74) | ||
192 | |||
193 | /* | ||
194 | * DMA engines | ||
195 | */ | ||
196 | #define IXP2000_PCI_CH1_BYTE_CNT IXP2000_PCI_CSR(0x80) | ||
197 | #define IXP2000_PCI_CH1_ADDR IXP2000_PCI_CSR(0x84) | ||
198 | #define IXP2000_PCI_CH1_DRAM_ADDR IXP2000_PCI_CSR(0x88) | ||
199 | #define IXP2000_PCI_CH1_DESC_PTR IXP2000_PCI_CSR(0x8C) | ||
200 | #define IXP2000_PCI_CH1_CNTRL IXP2000_PCI_CSR(0x90) | ||
201 | #define IXP2000_PCI_CH1_ME_PARAM IXP2000_PCI_CSR(0x94) | ||
202 | #define IXP2000_PCI_CH2_BYTE_CNT IXP2000_PCI_CSR(0xA0) | ||
203 | #define IXP2000_PCI_CH2_ADDR IXP2000_PCI_CSR(0xA4) | ||
204 | #define IXP2000_PCI_CH2_DRAM_ADDR IXP2000_PCI_CSR(0xA8) | ||
205 | #define IXP2000_PCI_CH2_DESC_PTR IXP2000_PCI_CSR(0xAC) | ||
206 | #define IXP2000_PCI_CH2_CNTRL IXP2000_PCI_CSR(0xB0) | ||
207 | #define IXP2000_PCI_CH2_ME_PARAM IXP2000_PCI_CSR(0xB4) | ||
208 | #define IXP2000_PCI_CH3_BYTE_CNT IXP2000_PCI_CSR(0xC0) | ||
209 | #define IXP2000_PCI_CH3_ADDR IXP2000_PCI_CSR(0xC4) | ||
210 | #define IXP2000_PCI_CH3_DRAM_ADDR IXP2000_PCI_CSR(0xC8) | ||
211 | #define IXP2000_PCI_CH3_DESC_PTR IXP2000_PCI_CSR(0xCC) | ||
212 | #define IXP2000_PCI_CH3_CNTRL IXP2000_PCI_CSR(0xD0) | ||
213 | #define IXP2000_PCI_CH3_ME_PARAM IXP2000_PCI_CSR(0xD4) | ||
214 | #define IXP2000_DMA_INF_MODE IXP2000_PCI_CSR(0xE0) | ||
215 | /* | ||
216 | * Size masks for BARs | ||
217 | */ | ||
218 | #define IXP2000_PCI_SRAM_BASE_ADDR_MASK IXP2000_PCI_CSR(0xFC) | ||
219 | #define IXP2000_PCI_DRAM_BASE_ADDR_MASK IXP2000_PCI_CSR(0x100) | ||
220 | /* | ||
221 | * Control and uEngine related | ||
222 | */ | ||
223 | #define IXP2000_PCI_CONTROL IXP2000_PCI_CSR(0x13C) | ||
224 | #define IXP2000_PCI_ADDR_EXT IXP2000_PCI_CSR(0x140) | ||
225 | #define IXP2000_PCI_ME_PUSH_STATUS IXP2000_PCI_CSR(0x148) | ||
226 | #define IXP2000_PCI_ME_PUSH_EN IXP2000_PCI_CSR(0x14C) | ||
227 | #define IXP2000_PCI_ERR_STATUS IXP2000_PCI_CSR(0x150) | ||
228 | #define IXP2000_PCI_ERR_ENABLE IXP2000_PCI_CSR(0x154) | ||
229 | /* | ||
230 | * Inbound PCI interrupt control | ||
231 | */ | ||
232 | #define IXP2000_PCI_XSCALE_INT_STATUS IXP2000_PCI_CSR(0x158) | ||
233 | #define IXP2000_PCI_XSCALE_INT_ENABLE IXP2000_PCI_CSR(0x15C) | ||
234 | |||
235 | #define IXP2000_PCICNTL_PNR (1<<17) /* PCI not Reset bit of PCI_CONTROL */ | ||
236 | #define IXP2000_PCICNTL_PCF (1<<28) /* PCI Centrolfunction bit */ | ||
237 | #define IXP2000_XSCALE_INT (1<<1) /* Interrupt from XScale to PCI */ | ||
238 | |||
239 | /* These are from the IRQ register in the PCI ISR register */ | ||
240 | #define PCI_CONTROL_BE_DEO (1 << 22) /* Big Endian Data Enable Out */ | ||
241 | #define PCI_CONTROL_BE_DEI (1 << 21) /* Big Endian Data Enable In */ | ||
242 | #define PCI_CONTROL_BE_BEO (1 << 20) /* Big Endian Byte Enable Out */ | ||
243 | #define PCI_CONTROL_BE_BEI (1 << 19) /* Big Endian Byte Enable In */ | ||
244 | #define PCI_CONTROL_PNR (1 << 17) /* PCI Not Reset bit */ | ||
245 | |||
246 | #define IXP2000_PCI_RST_REL (1 << 2) | ||
247 | #define CFG_RST_DIR (*IXP2000_PCI_CONTROL & IXP2000_PCICNTL_PCF) | ||
248 | #define CFG_PCI_BOOT_HOST (1 << 2) | ||
249 | #define CFG_BOOT_PROM (1 << 1) | ||
250 | |||
251 | /* | ||
252 | * SlowPort CSRs | ||
253 | * | ||
254 | * The slowport is used to access things like flash, SONET framer control | ||
255 | * ports, slave microprocessors, CPLDs, and others of chip memory mapped | ||
256 | * peripherals. | ||
257 | */ | ||
258 | #define SLOWPORT_CSR(x) (volatile unsigned long*)(IXP2000_SLOWPORT_CSR_VIRT_BASE | (x)) | ||
259 | |||
260 | #define IXP2000_SLOWPORT_CCR SLOWPORT_CSR(0x00) | ||
261 | #define IXP2000_SLOWPORT_WTC1 SLOWPORT_CSR(0x04) | ||
262 | #define IXP2000_SLOWPORT_WTC2 SLOWPORT_CSR(0x08) | ||
263 | #define IXP2000_SLOWPORT_RTC1 SLOWPORT_CSR(0x0c) | ||
264 | #define IXP2000_SLOWPORT_RTC2 SLOWPORT_CSR(0x10) | ||
265 | #define IXP2000_SLOWPORT_FSR SLOWPORT_CSR(0x14) | ||
266 | #define IXP2000_SLOWPORT_PCR SLOWPORT_CSR(0x18) | ||
267 | #define IXP2000_SLOWPORT_ADC SLOWPORT_CSR(0x1C) | ||
268 | #define IXP2000_SLOWPORT_FAC SLOWPORT_CSR(0x20) | ||
269 | #define IXP2000_SLOWPORT_FRM SLOWPORT_CSR(0x24) | ||
270 | #define IXP2000_SLOWPORT_FIN SLOWPORT_CSR(0x28) | ||
271 | |||
272 | /* | ||
273 | * CCR values. | ||
274 | * The CCR configures the clock division for the slowport interface. | ||
275 | */ | ||
276 | #define SLOWPORT_CCR_DIV_1 0x00 | ||
277 | #define SLOWPORT_CCR_DIV_2 0x01 | ||
278 | #define SLOWPORT_CCR_DIV_4 0x02 | ||
279 | #define SLOWPORT_CCR_DIV_6 0x03 | ||
280 | #define SLOWPORT_CCR_DIV_8 0x04 | ||
281 | #define SLOWPORT_CCR_DIV_10 0x05 | ||
282 | #define SLOWPORT_CCR_DIV_12 0x06 | ||
283 | #define SLOWPORT_CCR_DIV_14 0x07 | ||
284 | #define SLOWPORT_CCR_DIV_16 0x08 | ||
285 | #define SLOWPORT_CCR_DIV_18 0x09 | ||
286 | #define SLOWPORT_CCR_DIV_20 0x0a | ||
287 | #define SLOWPORT_CCR_DIV_22 0x0b | ||
288 | #define SLOWPORT_CCR_DIV_24 0x0c | ||
289 | #define SLOWPORT_CCR_DIV_26 0x0d | ||
290 | #define SLOWPORT_CCR_DIV_28 0x0e | ||
291 | #define SLOWPORT_CCR_DIV_30 0x0f | ||
292 | |||
293 | /* | ||
294 | * PCR values. PCR configure the mode of the interface. | ||
295 | */ | ||
296 | #define SLOWPORT_MODE_FLASH 0x00 | ||
297 | #define SLOWPORT_MODE_LUCENT 0x01 | ||
298 | #define SLOWPORT_MODE_PMC_SIERRA 0x02 | ||
299 | #define SLOWPORT_MODE_INTEL_UP 0x03 | ||
300 | #define SLOWPORT_MODE_MOTOROLA_UP 0x04 | ||
301 | |||
302 | /* | ||
303 | * ADC values. Defines data and address bus widths. | ||
304 | */ | ||
305 | #define SLOWPORT_ADDR_WIDTH_8 0x00 | ||
306 | #define SLOWPORT_ADDR_WIDTH_16 0x01 | ||
307 | #define SLOWPORT_ADDR_WIDTH_24 0x02 | ||
308 | #define SLOWPORT_ADDR_WIDTH_32 0x03 | ||
309 | #define SLOWPORT_DATA_WIDTH_8 0x00 | ||
310 | #define SLOWPORT_DATA_WIDTH_16 0x10 | ||
311 | #define SLOWPORT_DATA_WIDTH_24 0x20 | ||
312 | #define SLOWPORT_DATA_WIDTH_32 0x30 | ||
313 | |||
314 | /* | ||
315 | * Masks and shifts for various fields in the WTC and RTC registers. | ||
316 | */ | ||
317 | #define SLOWPORT_WRTC_MASK_HD 0x0003 | ||
318 | #define SLOWPORT_WRTC_MASK_SU 0x003c | ||
319 | #define SLOWPORT_WRTC_MASK_PW 0x03c0 | ||
320 | |||
321 | #define SLOWPORT_WRTC_SHIFT_HD 0x00 | ||
322 | #define SLOWPORT_WRTC_SHIFT_SU 0x02 | ||
323 | #define SLOWPORT_WRTC_SHFIT_PW 0x06 | ||
324 | |||
325 | |||
326 | /* | ||
327 | * GPIO registers & GPIO interface. | ||
328 | */ | ||
329 | #define IXP2000_GPIO_REG(x) ((volatile unsigned long*)(IXP2000_GPIO_VIRT_BASE+(x))) | ||
330 | #define IXP2000_GPIO_PLR IXP2000_GPIO_REG(0x00) | ||
331 | #define IXP2000_GPIO_PDPR IXP2000_GPIO_REG(0x04) | ||
332 | #define IXP2000_GPIO_PDSR IXP2000_GPIO_REG(0x08) | ||
333 | #define IXP2000_GPIO_PDCR IXP2000_GPIO_REG(0x0c) | ||
334 | #define IXP2000_GPIO_POPR IXP2000_GPIO_REG(0x10) | ||
335 | #define IXP2000_GPIO_POSR IXP2000_GPIO_REG(0x14) | ||
336 | #define IXP2000_GPIO_POCR IXP2000_GPIO_REG(0x18) | ||
337 | #define IXP2000_GPIO_REDR IXP2000_GPIO_REG(0x1c) | ||
338 | #define IXP2000_GPIO_FEDR IXP2000_GPIO_REG(0x20) | ||
339 | #define IXP2000_GPIO_EDSR IXP2000_GPIO_REG(0x24) | ||
340 | #define IXP2000_GPIO_LSHR IXP2000_GPIO_REG(0x28) | ||
341 | #define IXP2000_GPIO_LSLR IXP2000_GPIO_REG(0x2c) | ||
342 | #define IXP2000_GPIO_LDSR IXP2000_GPIO_REG(0x30) | ||
343 | #define IXP2000_GPIO_INER IXP2000_GPIO_REG(0x34) | ||
344 | #define IXP2000_GPIO_INSR IXP2000_GPIO_REG(0x38) | ||
345 | #define IXP2000_GPIO_INCR IXP2000_GPIO_REG(0x3c) | ||
346 | #define IXP2000_GPIO_INST IXP2000_GPIO_REG(0x40) | ||
347 | |||
348 | /* | ||
349 | * "Global" registers...whatever that's supposed to mean. | ||
350 | */ | ||
351 | #define GLOBAL_REG_BASE (IXP2000_GLOBAL_REG_VIRT_BASE + 0x0a00) | ||
352 | #define GLOBAL_REG(x) (volatile unsigned long*)(GLOBAL_REG_BASE | (x)) | ||
353 | |||
354 | #define IXP2000_PROD_ID GLOBAL_REG(0x00) | ||
355 | |||
356 | #define IXP2000_MAJ_PROD_TYPE_MASK 0x001F0000 | ||
357 | #define IXP2000_MAJ_PROD_TYPE_IXP2000 0x00000000 | ||
358 | #define IXP2000_MIN_PROD_TYPE_MASK 0x0000FF00 | ||
359 | #define IXP2000_MIN_PROD_TYPE_IXP2400 0x00000200 | ||
360 | #define IXP2000_MIN_PROD_TYPE_IXP2850 0x00000100 | ||
361 | #define IXP2000_MIN_PROD_TYPE_IXP2800 0x00000000 | ||
362 | #define IXP2000_MAJ_REV_MASK 0x000000F0 | ||
363 | #define IXP2000_MIN_REV_MASK 0x0000000F | ||
364 | #define IXP2000_PROD_ID_MASK 0xFFFFFFFF | ||
365 | |||
366 | #define IXP2000_MISC_CONTROL GLOBAL_REG(0x04) | ||
367 | #define IXP2000_MSF_CLK_CNTRL GLOBAL_REG(0x08) | ||
368 | #define IXP2000_RESET0 GLOBAL_REG(0x0c) | ||
369 | #define IXP2000_RESET1 GLOBAL_REG(0x10) | ||
370 | #define IXP2000_CCR GLOBAL_REG(0x14) | ||
371 | #define IXP2000_STRAP_OPTIONS GLOBAL_REG(0x18) | ||
372 | |||
373 | #define RSTALL (1 << 16) | ||
374 | #define WDT_RESET_ENABLE 0x01000000 | ||
375 | |||
376 | |||
377 | #endif /* _IXP2000_H_ */ | ||
diff --git a/include/asm-arm/arch-ixp2000/memory.h b/include/asm-arm/arch-ixp2000/memory.h new file mode 100644 index 000000000000..d0f415c6dae9 --- /dev/null +++ b/include/asm-arm/arch-ixp2000/memory.h | |||
@@ -0,0 +1,34 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-ixp2000/memory.h | ||
3 | * | ||
4 | * Copyright (c) 2002 Intel Corp. | ||
5 | * Copyright (c) 2003-2004 MontaVista Software, Inc. | ||
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 as published by the | ||
9 | * Free Software Foundation; either version 2 of the License, or (at your | ||
10 | * option) any later version. | ||
11 | */ | ||
12 | |||
13 | #ifndef __ASM_ARCH_MEMORY_H | ||
14 | #define __ASM_ARCH_MEMORY_H | ||
15 | |||
16 | #define PHYS_OFFSET (0x00000000UL) | ||
17 | |||
18 | /* | ||
19 | * Virtual view <-> DMA view memory address translations | ||
20 | * virt_to_bus: Used to translate the virtual address to an | ||
21 | * address suitable to be passed to set_dma_addr | ||
22 | * bus_to_virt: Used to convert an address for DMA operations | ||
23 | * to an address that the kernel can use. | ||
24 | */ | ||
25 | #include <asm/arch/ixp2000-regs.h> | ||
26 | |||
27 | #define __virt_to_bus(v) \ | ||
28 | (((__virt_to_phys(v) - 0x0) + (*IXP2000_PCI_SDRAM_BAR & 0xfffffff0))) | ||
29 | |||
30 | #define __bus_to_virt(b) \ | ||
31 | __phys_to_virt((((b - (*IXP2000_PCI_SDRAM_BAR & 0xfffffff0)) + 0x0))) | ||
32 | |||
33 | #endif | ||
34 | |||
diff --git a/include/asm-arm/arch-ixp2000/param.h b/include/asm-arm/arch-ixp2000/param.h new file mode 100644 index 000000000000..2646d9e5919d --- /dev/null +++ b/include/asm-arm/arch-ixp2000/param.h | |||
@@ -0,0 +1,3 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-ixp2000/param.h | ||
3 | */ | ||
diff --git a/include/asm-arm/arch-ixp2000/platform.h b/include/asm-arm/arch-ixp2000/platform.h new file mode 100644 index 000000000000..509e44d528d8 --- /dev/null +++ b/include/asm-arm/arch-ixp2000/platform.h | |||
@@ -0,0 +1,166 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-ixp2000/platform.h | ||
3 | * | ||
4 | * Various bits of code used by platform-level code. | ||
5 | * | ||
6 | * Author: Deepak Saxena <dsaxena@plexity.net> | ||
7 | * | ||
8 | * Copyright 2004 (c) MontaVista Software, Inc. | ||
9 | * | ||
10 | * This file is licensed under the terms of the GNU General Public | ||
11 | * License version 2. This program is licensed "as is" without any | ||
12 | * warranty of any kind, whether express or implied. | ||
13 | */ | ||
14 | |||
15 | |||
16 | #ifndef __ASSEMBLY__ | ||
17 | |||
18 | /* | ||
19 | * The IXP2400 B0 silicon contains an erratum (#66) that causes writes | ||
20 | * to on-chip I/O register to not complete fully. What this means is | ||
21 | * that if you have a write to on-chip I/O followed by a back-to-back | ||
22 | * read or write, the first write will happen twice. OR...if it's | ||
23 | * not a back-to-back transaction, the read or write will generate | ||
24 | * incorrect data. | ||
25 | * | ||
26 | * The official work around for this is to set the on-chip I/O regions | ||
27 | * as XCB=101 and then force a read-back from the register. | ||
28 | * | ||
29 | */ | ||
30 | #if defined(CONFIG_ARCH_ENP2611) || defined(CONFIG_ARCH_IXDP2400) || defined(CONFIG_ARCH_IXDP2401) | ||
31 | |||
32 | #include <asm/system.h> /* Pickup local_irq_ functions */ | ||
33 | |||
34 | static inline void ixp2000_reg_write(volatile unsigned long *reg, unsigned long val) | ||
35 | { | ||
36 | volatile unsigned long dummy; | ||
37 | unsigned long flags; | ||
38 | |||
39 | local_irq_save(flags); | ||
40 | *reg = val; | ||
41 | barrier(); | ||
42 | dummy = *reg; | ||
43 | local_irq_restore(flags); | ||
44 | } | ||
45 | #else | ||
46 | #define ixp2000_reg_write(reg, val) (*reg = val) | ||
47 | #endif /* IXDP2400 || IXDP2401 */ | ||
48 | |||
49 | /* | ||
50 | * Boards may multiplex different devices on the 2nd channel of | ||
51 | * the slowport interface that each need different configuration | ||
52 | * settings. For example, the IXDP2400 uses channel 2 on the interface | ||
53 | * to access the CPLD, the switch fabric card, and the media card. Each | ||
54 | * one needs a different mode so drivers must save/restore the mode | ||
55 | * before and after each operation. | ||
56 | * | ||
57 | * acquire_slowport(&your_config); | ||
58 | * ... | ||
59 | * do slowport operations | ||
60 | * ... | ||
61 | * release_slowport(); | ||
62 | * | ||
63 | * Note that while you have the slowport, you are holding a spinlock, | ||
64 | * so your code should be written as if you explicitly acquired a lock. | ||
65 | * | ||
66 | * The configuration only affects device 2 on the slowport, so the | ||
67 | * MTD map driver does not acquire/release the slowport. | ||
68 | */ | ||
69 | struct slowport_cfg { | ||
70 | unsigned long CCR; /* Clock divide */ | ||
71 | unsigned long WTC; /* Write Timing Control */ | ||
72 | unsigned long RTC; /* Read Timing Control */ | ||
73 | unsigned long PCR; /* Protocol Control Register */ | ||
74 | unsigned long ADC; /* Address/Data Width Control */ | ||
75 | }; | ||
76 | |||
77 | |||
78 | void ixp2000_acquire_slowport(struct slowport_cfg *, struct slowport_cfg *); | ||
79 | void ixp2000_release_slowport(struct slowport_cfg *); | ||
80 | |||
81 | /* | ||
82 | * IXP2400 A0/A1 and IXP2800 A0/A1/A2 have broken slowport that requires | ||
83 | * tweaking of addresses in the MTD driver. | ||
84 | */ | ||
85 | static inline unsigned ixp2000_has_broken_slowport(void) | ||
86 | { | ||
87 | unsigned long id = *IXP2000_PROD_ID; | ||
88 | unsigned long id_prod = id & (IXP2000_MAJ_PROD_TYPE_MASK | | ||
89 | IXP2000_MIN_PROD_TYPE_MASK); | ||
90 | return (((id_prod == | ||
91 | /* fixed in IXP2400-B0 */ | ||
92 | (IXP2000_MAJ_PROD_TYPE_IXP2000 | | ||
93 | IXP2000_MIN_PROD_TYPE_IXP2400)) && | ||
94 | ((id & IXP2000_MAJ_REV_MASK) == 0)) || | ||
95 | ((id_prod == | ||
96 | /* fixed in IXP2800-B0 */ | ||
97 | (IXP2000_MAJ_PROD_TYPE_IXP2000 | | ||
98 | IXP2000_MIN_PROD_TYPE_IXP2800)) && | ||
99 | ((id & IXP2000_MAJ_REV_MASK) == 0)) || | ||
100 | ((id_prod == | ||
101 | /* fixed in IXP2850-B0 */ | ||
102 | (IXP2000_MAJ_PROD_TYPE_IXP2000 | | ||
103 | IXP2000_MIN_PROD_TYPE_IXP2850)) && | ||
104 | ((id & IXP2000_MAJ_REV_MASK) == 0))); | ||
105 | } | ||
106 | |||
107 | static inline unsigned int ixp2000_has_flash(void) | ||
108 | { | ||
109 | return ((*IXP2000_STRAP_OPTIONS) & (CFG_BOOT_PROM)); | ||
110 | } | ||
111 | |||
112 | static inline unsigned int ixp2000_is_pcimaster(void) | ||
113 | { | ||
114 | return ((*IXP2000_STRAP_OPTIONS) & (CFG_PCI_BOOT_HOST)); | ||
115 | } | ||
116 | |||
117 | void ixp2000_map_io(void); | ||
118 | void ixp2000_init_irq(void); | ||
119 | void ixp2000_init_time(unsigned long); | ||
120 | unsigned long ixp2000_gettimeoffset(void); | ||
121 | |||
122 | struct pci_sys_data; | ||
123 | |||
124 | void ixp2000_pci_preinit(void); | ||
125 | int ixp2000_pci_setup(int, struct pci_sys_data*); | ||
126 | struct pci_bus* ixp2000_pci_scan_bus(int, struct pci_sys_data*); | ||
127 | int ixp2000_pci_read_config(struct pci_bus*, unsigned int, int, int, u32 *); | ||
128 | int ixp2000_pci_write_config(struct pci_bus*, unsigned int, int, int, u32); | ||
129 | |||
130 | /* | ||
131 | * Several of the IXP2000 systems have banked flash so we need to extend the | ||
132 | * flash_platform_data structure with some private pointers | ||
133 | */ | ||
134 | struct ixp2000_flash_data { | ||
135 | struct flash_platform_data *platform_data; | ||
136 | int nr_banks; | ||
137 | unsigned long (*bank_setup)(unsigned long); | ||
138 | }; | ||
139 | |||
140 | /* | ||
141 | * GPIO helper functions | ||
142 | */ | ||
143 | #define GPIO_IN 0 | ||
144 | #define GPIO_OUT 1 | ||
145 | |||
146 | extern void gpio_line_config(int line, int style); | ||
147 | |||
148 | static inline int gpio_line_get(int line) | ||
149 | { | ||
150 | return (((*IXP2000_GPIO_PLR) >> line) & 1); | ||
151 | } | ||
152 | |||
153 | static inline void gpio_line_set(int line, int value) | ||
154 | { | ||
155 | if (value) | ||
156 | ixp2000_reg_write(IXP2000_GPIO_POSR, (1 << line)); | ||
157 | else | ||
158 | ixp2000_reg_write(IXP2000_GPIO_POCR, (1 << line)); | ||
159 | } | ||
160 | |||
161 | struct ixp2000_i2c_pins { | ||
162 | unsigned long sda_pin; | ||
163 | unsigned long scl_pin; | ||
164 | }; | ||
165 | |||
166 | #endif /* !__ASSEMBLY__ */ | ||
diff --git a/include/asm-arm/arch-ixp2000/system.h b/include/asm-arm/arch-ixp2000/system.h new file mode 100644 index 000000000000..4f489cc0dfa5 --- /dev/null +++ b/include/asm-arm/arch-ixp2000/system.h | |||
@@ -0,0 +1,54 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-ixp2000/system.h | ||
3 | * | ||
4 | * Copyright (C) 2002 Intel Corp. | ||
5 | * Copyricht (C) 2003-2005 MontaVista Software, Inc. | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License version 2 as | ||
9 | * published by the Free Software Foundation. | ||
10 | */ | ||
11 | |||
12 | #include <asm/hardware.h> | ||
13 | #include <asm/mach-types.h> | ||
14 | |||
15 | static inline void arch_idle(void) | ||
16 | { | ||
17 | cpu_do_idle(); | ||
18 | } | ||
19 | |||
20 | static inline void arch_reset(char mode) | ||
21 | { | ||
22 | local_irq_disable(); | ||
23 | |||
24 | /* | ||
25 | * Reset flash banking register so that we are pointing at | ||
26 | * RedBoot bank. | ||
27 | */ | ||
28 | if (machine_is_ixdp2401()) { | ||
29 | *IXDP2X01_CPLD_FLASH_REG = ((0 >> IXDP2X01_FLASH_WINDOW_BITS) | ||
30 | | IXDP2X01_CPLD_FLASH_INTERN); | ||
31 | *IXDP2X01_CPLD_RESET_REG = 0xffffffff; | ||
32 | } | ||
33 | |||
34 | /* | ||
35 | * On IXDP2801 we need to write this magic sequence to the CPLD | ||
36 | * to cause a complete reset of the CPU and all external devices | ||
37 | * and moves the flash bank register back to 0. | ||
38 | */ | ||
39 | if (machine_is_ixdp2801()) { | ||
40 | unsigned long reset_reg = *IXDP2X01_CPLD_RESET_REG; | ||
41 | reset_reg = 0x55AA0000 | (reset_reg & 0x0000FFFF); | ||
42 | *IXDP2X01_CPLD_RESET_REG = reset_reg; | ||
43 | mb(); | ||
44 | *IXDP2X01_CPLD_RESET_REG = 0x80000000; | ||
45 | } | ||
46 | |||
47 | /* | ||
48 | * We do a reset all if we are PCI master. We could be a slave and we | ||
49 | * don't want to do anything funky on the PCI bus. | ||
50 | */ | ||
51 | if (*IXP2000_STRAP_OPTIONS & CFG_PCI_BOOT_HOST) { | ||
52 | *(IXP2000_RESET0) |= (RSTALL); | ||
53 | } | ||
54 | } | ||
diff --git a/include/asm-arm/arch-ixp2000/timex.h b/include/asm-arm/arch-ixp2000/timex.h new file mode 100644 index 000000000000..b78a183d4698 --- /dev/null +++ b/include/asm-arm/arch-ixp2000/timex.h | |||
@@ -0,0 +1,13 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-ixp2000/timex.h | ||
3 | * | ||
4 | * IXP2000 architecture timex specifications | ||
5 | */ | ||
6 | |||
7 | |||
8 | /* | ||
9 | * Default clock is 50MHz APB, but platform code can override this | ||
10 | */ | ||
11 | #define CLOCK_TICK_RATE 50000000 | ||
12 | |||
13 | |||
diff --git a/include/asm-arm/arch-ixp2000/uncompress.h b/include/asm-arm/arch-ixp2000/uncompress.h new file mode 100644 index 000000000000..3d3d5b2ed6e9 --- /dev/null +++ b/include/asm-arm/arch-ixp2000/uncompress.h | |||
@@ -0,0 +1,52 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-ixp2000/uncompress.h | ||
3 | * | ||
4 | * | ||
5 | * Original Author: Naeem Afzal <naeem.m.afzal@intel.com> | ||
6 | * Maintainer: Deepak Saxena <dsaxena@plexity.net> | ||
7 | * | ||
8 | * Copyright 2002 Intel Corp. | ||
9 | * | ||
10 | * This program is free software; you can redistribute it and/or modify it | ||
11 | * under the terms of the GNU General Public License as published by the | ||
12 | * Free Software Foundation; either version 2 of the License, or (at your | ||
13 | * option) any later version. | ||
14 | * | ||
15 | */ | ||
16 | |||
17 | #include <linux/serial_reg.h> | ||
18 | |||
19 | #define UART_BASE 0xc0030000 | ||
20 | |||
21 | #define PHYS(x) ((volatile unsigned long *)(UART_BASE + x)) | ||
22 | |||
23 | #define UARTDR PHYS(0x00) /* Transmit reg dlab=0 */ | ||
24 | #define UARTDLL PHYS(0x00) /* Divisor Latch reg dlab=1*/ | ||
25 | #define UARTDLM PHYS(0x04) /* Divisor Latch reg dlab=1*/ | ||
26 | #define UARTIER PHYS(0x04) /* Interrupt enable reg */ | ||
27 | #define UARTFCR PHYS(0x08) /* FIFO control reg dlab =0*/ | ||
28 | #define UARTLCR PHYS(0x0c) /* Control reg */ | ||
29 | #define UARTSR PHYS(0x14) /* Status reg */ | ||
30 | |||
31 | |||
32 | static __inline__ void putc(char c) | ||
33 | { | ||
34 | int j = 0x1000; | ||
35 | |||
36 | while (--j && !(*UARTSR & UART_LSR_THRE)); | ||
37 | *UARTDR = c; | ||
38 | } | ||
39 | |||
40 | static void putstr(const char *s) | ||
41 | { | ||
42 | while (*s) | ||
43 | { | ||
44 | putc(*s); | ||
45 | if (*s == '\n') | ||
46 | putc('\r'); | ||
47 | s++; | ||
48 | } | ||
49 | } | ||
50 | |||
51 | #define arch_decomp_setup() | ||
52 | #define arch_decomp_wdog() | ||
diff --git a/include/asm-arm/arch-ixp2000/vmalloc.h b/include/asm-arm/arch-ixp2000/vmalloc.h new file mode 100644 index 000000000000..2e4bcbcf31f0 --- /dev/null +++ b/include/asm-arm/arch-ixp2000/vmalloc.h | |||
@@ -0,0 +1,23 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-ixp2000/vmalloc.h | ||
3 | * | ||
4 | * Author: Naeem Afzal <naeem.m.afzal@intel.com> | ||
5 | * | ||
6 | * Copyright 2002 Intel Corp. | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify it | ||
9 | * under the terms of the GNU General Public License as published by the | ||
10 | * Free Software Foundation; either version 2 of the License, or (at your | ||
11 | * option) any later version. | ||
12 | * | ||
13 | * Just any arbitrary offset to the start of the vmalloc VM area: the | ||
14 | * current 8MB value just means that there will be a 8MB "hole" after the | ||
15 | * physical memory until the kernel virtual memory starts. That means that | ||
16 | * any out-of-bounds memory accesses will hopefully be caught. | ||
17 | * The vmalloc() routines leaves a hole of 4kB between each vmalloced | ||
18 | * area for the same reason. ;) | ||
19 | */ | ||
20 | #define VMALLOC_OFFSET (8*1024*1024) | ||
21 | #define VMALLOC_START (((unsigned long)high_memory + VMALLOC_OFFSET) & ~(VMALLOC_OFFSET-1)) | ||
22 | #define VMALLOC_VMADDR(x) ((unsigned long)(x)) | ||
23 | #define VMALLOC_END 0xfaffefff | ||
diff --git a/include/asm-arm/arch-ixp4xx/coyote.h b/include/asm-arm/arch-ixp4xx/coyote.h new file mode 100644 index 000000000000..dd0c2d2d8503 --- /dev/null +++ b/include/asm-arm/arch-ixp4xx/coyote.h | |||
@@ -0,0 +1,36 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-ixp4xx/coyote.h | ||
3 | * | ||
4 | * ADI Engineering platform specific definitions | ||
5 | * | ||
6 | * Author: Deepak Saxena <dsaxena@plexity.net> | ||
7 | * | ||
8 | * Copyright 2004 (c) MontaVista, Software, Inc. | ||
9 | * | ||
10 | * This file is licensed under the terms of the GNU General Public | ||
11 | * License version 2. This program is licensed "as is" without any | ||
12 | * warranty of any kind, whether express or implied. | ||
13 | */ | ||
14 | |||
15 | #ifndef __ASM_ARCH_HARDWARE_H__ | ||
16 | #error "Do not include this directly, instead #include <asm/hardware.h>" | ||
17 | #endif | ||
18 | |||
19 | #define COYOTE_FLASH_BASE IXP4XX_EXP_BUS_CS0_BASE_PHYS | ||
20 | #define COYOTE_FLASH_SIZE IXP4XX_EXP_BUS_CSX_REGION_SIZE * 2 | ||
21 | |||
22 | /* PCI controller GPIO to IRQ pin mappings */ | ||
23 | #define COYOTE_PCI_SLOT0_PIN 6 | ||
24 | #define COYOTE_PCI_SLOT1_PIN 11 | ||
25 | |||
26 | #define COYOTE_PCI_SLOT0_DEVID 14 | ||
27 | #define COYOTE_PCI_SLOT1_DEVID 15 | ||
28 | |||
29 | #define COYOTE_IDE_BASE_PHYS IXP4XX_EXP_BUS_CS3_BASE_PHYS | ||
30 | #define COYOTE_IDE_BASE_VIRT 0xFFFE1000 | ||
31 | #define COYOTE_IDE_REGION_SIZE 0x1000 | ||
32 | |||
33 | #define COYOTE_IDE_DATA_PORT 0xFFFE10E0 | ||
34 | #define COYOTE_IDE_CTRL_PORT 0xFFFE10FC | ||
35 | #define COYOTE_IDE_ERROR_PORT 0xFFFE10E2 | ||
36 | |||
diff --git a/include/asm-arm/arch-ixp4xx/debug-macro.S b/include/asm-arm/arch-ixp4xx/debug-macro.S new file mode 100644 index 000000000000..4499ae8e4b44 --- /dev/null +++ b/include/asm-arm/arch-ixp4xx/debug-macro.S | |||
@@ -0,0 +1,34 @@ | |||
1 | /* linux/include/asm-arm/arch-ixp4xx/debug-macro.S | ||
2 | * | ||
3 | * Debugging macro include header | ||
4 | * | ||
5 | * Copyright (C) 1994-1999 Russell King | ||
6 | * Moved from linux/arch/arm/kernel/debug.S by Ben Dooks | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | */ | ||
12 | |||
13 | .macro addruart,rx | ||
14 | mrc p15, 0, \rx, c1, c0 | ||
15 | tst \rx, #1 @ MMU enabled? | ||
16 | moveq \rx, #0xc8000000 | ||
17 | movne \rx, #0xff000000 | ||
18 | add \rx,\rx,#3 @ Uart regs are at off set of 3 if | ||
19 | @ byte writes used - Big Endian. | ||
20 | .endm | ||
21 | |||
22 | .macro senduart,rd,rx | ||
23 | strb \rd, [\rx] | ||
24 | .endm | ||
25 | |||
26 | .macro waituart,rd,rx | ||
27 | 1002: ldrb \rd, [\rx, #0x14] | ||
28 | and \rd, \rd, #0x60 @ check THRE and TEMT bits | ||
29 | teq \rd, #0x60 | ||
30 | bne 1002b | ||
31 | .endm | ||
32 | |||
33 | .macro busyuart,rd,rx | ||
34 | .endm | ||
diff --git a/include/asm-arm/arch-ixp4xx/dma.h b/include/asm-arm/arch-ixp4xx/dma.h new file mode 100644 index 000000000000..312065dc0e7a --- /dev/null +++ b/include/asm-arm/arch-ixp4xx/dma.h | |||
@@ -0,0 +1,26 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-ixp4xx/dma.h | ||
3 | * | ||
4 | * Copyright (C) 2001-2004 MontaVista Software, Inc. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | */ | ||
11 | #ifndef __ASM_ARCH_DMA_H | ||
12 | #define __ASM_ARCH_DMA_H | ||
13 | |||
14 | #include <linux/config.h> | ||
15 | #include <linux/device.h> | ||
16 | #include <linux/pci.h> | ||
17 | #include <asm/page.h> | ||
18 | #include <asm/sizes.h> | ||
19 | #include <asm/hardware.h> | ||
20 | |||
21 | #define MAX_DMA_ADDRESS (PAGE_OFFSET + SZ_64M) | ||
22 | |||
23 | /* No DMA */ | ||
24 | #define MAX_DMA_CHANNELS 0 | ||
25 | |||
26 | #endif /* _ASM_ARCH_DMA_H */ | ||
diff --git a/include/asm-arm/arch-ixp4xx/entry-macro.S b/include/asm-arm/arch-ixp4xx/entry-macro.S new file mode 100644 index 000000000000..455da64832de --- /dev/null +++ b/include/asm-arm/arch-ixp4xx/entry-macro.S | |||
@@ -0,0 +1,39 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-ixp4xx/entry-macro.S | ||
3 | * | ||
4 | * Low-level IRQ helper macros for IXP4xx-based platforms | ||
5 | * | ||
6 | * This file is licensed under the terms of the GNU General Public | ||
7 | * License version 2. This program is licensed "as is" without any | ||
8 | * warranty of any kind, whether express or implied. | ||
9 | */ | ||
10 | |||
11 | .macro disable_fiq | ||
12 | .endm | ||
13 | |||
14 | .macro get_irqnr_and_base, irqnr, irqstat, base, tmp | ||
15 | ldr \irqstat, =(IXP4XX_INTC_BASE_VIRT+IXP4XX_ICIP_OFFSET) | ||
16 | ldr \irqstat, [\irqstat] @ get interrupts | ||
17 | cmp \irqstat, #0 | ||
18 | beq 1001f | ||
19 | clz \irqnr, \irqstat | ||
20 | mov \base, #31 | ||
21 | subs \irqnr, \base, \irqnr | ||
22 | |||
23 | 1001: | ||
24 | /* | ||
25 | * IXP465 has an upper IRQ status register | ||
26 | */ | ||
27 | #if defined(CONFIG_CPU_IXP46X) | ||
28 | bne 1002f | ||
29 | ldr \irqstat, =(IXP4XX_INTC_BASE_VIRT+IXP4XX_ICIP2_OFFSET) | ||
30 | ldr \irqstat, [\irqstat] @ get upper interrupts | ||
31 | mov \irqnr, #63 | ||
32 | clz \irqstat, \irqstat | ||
33 | cmp \irqstat, #32 | ||
34 | subne \irqnr, \irqnr, \irqstat | ||
35 | 1002: | ||
36 | #endif | ||
37 | .endm | ||
38 | |||
39 | |||
diff --git a/include/asm-arm/arch-ixp4xx/gtwx5715.h b/include/asm-arm/arch-ixp4xx/gtwx5715.h new file mode 100644 index 000000000000..fc460af70627 --- /dev/null +++ b/include/asm-arm/arch-ixp4xx/gtwx5715.h | |||
@@ -0,0 +1,120 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-ixp4xx/gtwx5715.h | ||
3 | * | ||
4 | * Gemtek GTWX5715 Gateway (Linksys WRV54G) | ||
5 | * | ||
6 | * Copyright 2004 (c) George T. Joseph | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or | ||
9 | * modify it under the terms of the GNU General Public License | ||
10 | * as published by the Free Software Foundation; either version 2 | ||
11 | * of the License, or (at your option) any later version. | ||
12 | * | ||
13 | * This program is distributed in the hope that it will be useful, | ||
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
16 | * GNU General Public License for more details. | ||
17 | * | ||
18 | * You should have received a copy of the GNU General Public License | ||
19 | * along with this program; if not, write to the Free Software | ||
20 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||
21 | */ | ||
22 | |||
23 | #ifndef __ASM_ARCH_HARDWARE_H__ | ||
24 | #error "Do not include this directly, instead #include <asm/hardware.h>" | ||
25 | #endif | ||
26 | #include "irqs.h" | ||
27 | |||
28 | #define GTWX5715_GPIO0 0 | ||
29 | #define GTWX5715_GPIO1 1 | ||
30 | #define GTWX5715_GPIO2 2 | ||
31 | #define GTWX5715_GPIO3 3 | ||
32 | #define GTWX5715_GPIO4 4 | ||
33 | #define GTWX5715_GPIO5 5 | ||
34 | #define GTWX5715_GPIO6 6 | ||
35 | #define GTWX5715_GPIO7 7 | ||
36 | #define GTWX5715_GPIO8 8 | ||
37 | #define GTWX5715_GPIO9 9 | ||
38 | #define GTWX5715_GPIO10 10 | ||
39 | #define GTWX5715_GPIO11 11 | ||
40 | #define GTWX5715_GPIO12 12 | ||
41 | #define GTWX5715_GPIO13 13 | ||
42 | #define GTWX5715_GPIO14 14 | ||
43 | |||
44 | #define GTWX5715_GPIO0_IRQ IRQ_IXP4XX_GPIO0 | ||
45 | #define GTWX5715_GPIO1_IRQ IRQ_IXP4XX_GPIO1 | ||
46 | #define GTWX5715_GPIO2_IRQ IRQ_IXP4XX_GPIO2 | ||
47 | #define GTWX5715_GPIO3_IRQ IRQ_IXP4XX_GPIO3 | ||
48 | #define GTWX5715_GPIO4_IRQ IRQ_IXP4XX_GPIO4 | ||
49 | #define GTWX5715_GPIO5_IRQ IRQ_IXP4XX_GPIO5 | ||
50 | #define GTWX5715_GPIO6_IRQ IRQ_IXP4XX_GPIO6 | ||
51 | #define GTWX5715_GPIO7_IRQ IRQ_IXP4XX_GPIO7 | ||
52 | #define GTWX5715_GPIO8_IRQ IRQ_IXP4XX_GPIO8 | ||
53 | #define GTWX5715_GPIO9_IRQ IRQ_IXP4XX_GPIO9 | ||
54 | #define GTWX5715_GPIO10_IRQ IRQ_IXP4XX_GPIO10 | ||
55 | #define GTWX5715_GPIO11_IRQ IRQ_IXP4XX_GPIO11 | ||
56 | #define GTWX5715_GPIO12_IRQ IRQ_IXP4XX_GPIO12 | ||
57 | #define GTWX5715_GPIO13_IRQ IRQ_IXP4XX_SW_INT1 | ||
58 | #define GTWX5715_GPIO14_IRQ IRQ_IXP4XX_SW_INT2 | ||
59 | |||
60 | |||
61 | #define GTWX5715_FLASH_BASE IXP4XX_EXP_BUS_CS0_BASE_PHYS | ||
62 | #define GTWX5715_FLASH_SIZE (0x00800000) | ||
63 | |||
64 | /* PCI controller GPIO to IRQ pin mappings | ||
65 | |||
66 | INTA INTB | ||
67 | SLOT 0 10 11 | ||
68 | SLOT 1 11 10 | ||
69 | |||
70 | */ | ||
71 | |||
72 | #define GTWX5715_PCI_SLOT0_DEVID 0 | ||
73 | #define GTWX5715_PCI_SLOT0_INTA_GPIO GTWX5715_GPIO10 | ||
74 | #define GTWX5715_PCI_SLOT0_INTB_GPIO GTWX5715_GPIO11 | ||
75 | #define GTWX5715_PCI_SLOT0_INTA_IRQ GTWX5715_GPIO10_IRQ | ||
76 | #define GTWX5715_PCI_SLOT0_INTB_IRQ GTWX5715_GPIO11_IRQ | ||
77 | |||
78 | #define GTWX5715_PCI_SLOT1_DEVID 1 | ||
79 | #define GTWX5715_PCI_SLOT1_INTA_GPIO GTWX5715_GPIO11 | ||
80 | #define GTWX5715_PCI_SLOT1_INTB_GPIO GTWX5715_GPIO10 | ||
81 | #define GTWX5715_PCI_SLOT1_INTA_IRQ GTWX5715_GPIO11_IRQ | ||
82 | #define GTWX5715_PCI_SLOT1_INTB_IRQ GTWX5715_GPIO10_IRQ | ||
83 | |||
84 | #define GTWX5715_PCI_SLOT_COUNT 2 | ||
85 | #define GTWX5715_PCI_INT_PIN_COUNT 2 | ||
86 | |||
87 | /* | ||
88 | * GPIO 5,6,7 and12 are hard wired to the Kendin KS8995M Switch | ||
89 | * and operate as an SPI type interface. The details of the interface | ||
90 | * are available on Kendin/Micrel's web site. | ||
91 | */ | ||
92 | |||
93 | #define GTWX5715_KSSPI_SELECT GTWX5715_GPIO5 | ||
94 | #define GTWX5715_KSSPI_TXD GTWX5715_GPIO6 | ||
95 | #define GTWX5715_KSSPI_CLOCK GTWX5715_GPIO7 | ||
96 | #define GTWX5715_KSSPI_RXD GTWX5715_GPIO12 | ||
97 | |||
98 | /* | ||
99 | * The "reset" button is wired to GPIO 3. | ||
100 | * The GPIO is brought "low" when the button is pushed. | ||
101 | */ | ||
102 | |||
103 | #define GTWX5715_BUTTON_GPIO GTWX5715_GPIO3 | ||
104 | #define GTWX5715_BUTTON_IRQ GTWX5715_GPIO3_IRQ | ||
105 | |||
106 | /* | ||
107 | * Board Label Front Label | ||
108 | * LED1 Power | ||
109 | * LED2 Wireless-G | ||
110 | * LED3 not populated but could be | ||
111 | * LED4 Internet | ||
112 | * LED5 - LED8 Controlled by KS8995M Switch | ||
113 | * LED9 DMZ | ||
114 | */ | ||
115 | |||
116 | #define GTWX5715_LED1_GPIO GTWX5715_GPIO2 | ||
117 | #define GTWX5715_LED2_GPIO GTWX5715_GPIO9 | ||
118 | #define GTWX5715_LED3_GPIO GTWX5715_GPIO8 | ||
119 | #define GTWX5715_LED4_GPIO GTWX5715_GPIO1 | ||
120 | #define GTWX5715_LED9_GPIO GTWX5715_GPIO4 | ||
diff --git a/include/asm-arm/arch-ixp4xx/hardware.h b/include/asm-arm/arch-ixp4xx/hardware.h new file mode 100644 index 000000000000..4ac964b9078a --- /dev/null +++ b/include/asm-arm/arch-ixp4xx/hardware.h | |||
@@ -0,0 +1,48 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-ixp4xx/hardware.h | ||
3 | * | ||
4 | * Copyright (C) 2002 Intel Corporation. | ||
5 | * Copyright (C) 2003-2004 MontaVista Software, Inc. | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License version 2 as | ||
9 | * published by the Free Software Foundation. | ||
10 | * | ||
11 | */ | ||
12 | |||
13 | /* | ||
14 | * Hardware definitions for IXP4xx based systems | ||
15 | */ | ||
16 | |||
17 | #ifndef __ASM_ARCH_HARDWARE_H__ | ||
18 | #define __ASM_ARCH_HARDWARE_H__ | ||
19 | |||
20 | #define PCIBIOS_MIN_IO 0x00001000 | ||
21 | #define PCIBIOS_MIN_MEM 0x48000000 | ||
22 | |||
23 | /* | ||
24 | * We override the standard dma-mask routines for bouncing. | ||
25 | */ | ||
26 | #define HAVE_ARCH_PCI_SET_DMA_MASK | ||
27 | |||
28 | #define pcibios_assign_all_busses() 1 | ||
29 | |||
30 | #if defined(CONFIG_CPU_IXP465) && !defined(__ASSEMBLY__) | ||
31 | extern unsigned int processor_id; | ||
32 | #define cpu_is_ixp465() ((processor_id & 0xffffffc0) == 0x69054200) | ||
33 | #else | ||
34 | #define cpu_is_ixp465() (0) | ||
35 | #endif | ||
36 | |||
37 | /* Register locations and bits */ | ||
38 | #include "ixp4xx-regs.h" | ||
39 | |||
40 | /* Platform helper functions and definitions */ | ||
41 | #include "platform.h" | ||
42 | |||
43 | /* Platform specific details */ | ||
44 | #include "ixdp425.h" | ||
45 | #include "coyote.h" | ||
46 | #include "prpmc1100.h" | ||
47 | |||
48 | #endif /* _ASM_ARCH_HARDWARE_H */ | ||
diff --git a/include/asm-arm/arch-ixp4xx/io.h b/include/asm-arm/arch-ixp4xx/io.h new file mode 100644 index 000000000000..c27b9d3079a7 --- /dev/null +++ b/include/asm-arm/arch-ixp4xx/io.h | |||
@@ -0,0 +1,388 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-ixp4xx/io.h | ||
3 | * | ||
4 | * Author: Deepak Saxena <dsaxena@plexity.net> | ||
5 | * | ||
6 | * Copyright (C) 2002-2004 MontaVista Software, Inc. | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | */ | ||
12 | |||
13 | #ifndef __ASM_ARM_ARCH_IO_H | ||
14 | #define __ASM_ARM_ARCH_IO_H | ||
15 | |||
16 | #include <asm/hardware.h> | ||
17 | |||
18 | #define IO_SPACE_LIMIT 0xffff0000 | ||
19 | |||
20 | #define BIT(x) ((1)<<(x)) | ||
21 | |||
22 | |||
23 | extern int (*ixp4xx_pci_read)(u32 addr, u32 cmd, u32* data); | ||
24 | extern int ixp4xx_pci_write(u32 addr, u32 cmd, u32 data); | ||
25 | |||
26 | |||
27 | /* | ||
28 | * IXP4xx provides two methods of accessing PCI memory space: | ||
29 | * | ||
30 | * 1) A direct mapped window from 0x48000000 to 0x4bffffff (64MB). | ||
31 | * To access PCI via this space, we simply ioremap() the BAR | ||
32 | * into the kernel and we can use the standard read[bwl]/write[bwl] | ||
33 | * macros. This is the preffered method due to speed but it | ||
34 | * limits the system to just 64MB of PCI memory. This can be | ||
35 | * problamatic if using video cards and other memory-heavy | ||
36 | * targets. | ||
37 | * | ||
38 | * 2) If > 64MB of memory space is required, the IXP4xx can be configured | ||
39 | * to use indirect registers to access PCI (as we do below for I/O | ||
40 | * transactions). This allows for up to 128MB (0x48000000 to 0x4fffffff) | ||
41 | * of memory on the bus. The disadvantadge of this is that every | ||
42 | * PCI access requires three local register accesses plus a spinlock, | ||
43 | * but in some cases the performance hit is acceptable. In addition, | ||
44 | * you cannot mmap() PCI devices in this case. | ||
45 | * | ||
46 | */ | ||
47 | #ifndef CONFIG_IXP4XX_INDIRECT_PCI | ||
48 | |||
49 | #define __mem_pci(a) (a) | ||
50 | |||
51 | #else | ||
52 | |||
53 | #include <linux/mm.h> | ||
54 | |||
55 | /* | ||
56 | * In the case of using indirect PCI, we simply return the actual PCI | ||
57 | * address and our read/write implementation use that to drive the | ||
58 | * access registers. If something outside of PCI is ioremap'd, we | ||
59 | * fallback to the default. | ||
60 | */ | ||
61 | static inline void __iomem * | ||
62 | __ixp4xx_ioremap(unsigned long addr, size_t size, unsigned long flags, unsigned long align) | ||
63 | { | ||
64 | extern void __iomem * __ioremap(unsigned long, size_t, unsigned long, unsigned long); | ||
65 | if((addr < 0x48000000) || (addr > 0x4fffffff)) | ||
66 | return __ioremap(addr, size, flags, align); | ||
67 | |||
68 | return (void *)addr; | ||
69 | } | ||
70 | |||
71 | static inline void | ||
72 | __ixp4xx_iounmap(void __iomem *addr) | ||
73 | { | ||
74 | extern void __iounmap(void __iomem *addr); | ||
75 | |||
76 | if ((u32)addr >= VMALLOC_START) | ||
77 | __iounmap(addr); | ||
78 | } | ||
79 | |||
80 | #define __arch_ioremap(a, s, f, x) __ixp4xx_ioremap(a, s, f, x) | ||
81 | #define __arch_iounmap(a) __ixp4xx_iounmap(a) | ||
82 | |||
83 | #define writeb(p, v) __ixp4xx_writeb(p, v) | ||
84 | #define writew(p, v) __ixp4xx_writew(p, v) | ||
85 | #define writel(p, v) __ixp4xx_writel(p, v) | ||
86 | |||
87 | #define writesb(p, v, l) __ixp4xx_writesb(p, v, l) | ||
88 | #define writesw(p, v, l) __ixp4xx_writesw(p, v, l) | ||
89 | #define writesl(p, v, l) __ixp4xx_writesl(p, v, l) | ||
90 | |||
91 | #define readb(p) __ixp4xx_readb(p) | ||
92 | #define readw(p) __ixp4xx_readw(p) | ||
93 | #define readl(p) __ixp4xx_readl(p) | ||
94 | |||
95 | #define readsb(p, v, l) __ixp4xx_readsb(p, v, l) | ||
96 | #define readsw(p, v, l) __ixp4xx_readsw(p, v, l) | ||
97 | #define readsl(p, v, l) __ixp4xx_readsl(p, v, l) | ||
98 | |||
99 | static inline void | ||
100 | __ixp4xx_writeb(u8 value, u32 addr) | ||
101 | { | ||
102 | u32 n, byte_enables, data; | ||
103 | |||
104 | if (addr >= VMALLOC_START) { | ||
105 | __raw_writeb(value, addr); | ||
106 | return; | ||
107 | } | ||
108 | |||
109 | n = addr % 4; | ||
110 | byte_enables = (0xf & ~BIT(n)) << IXP4XX_PCI_NP_CBE_BESL; | ||
111 | data = value << (8*n); | ||
112 | ixp4xx_pci_write(addr, byte_enables | NP_CMD_MEMWRITE, data); | ||
113 | } | ||
114 | |||
115 | static inline void | ||
116 | __ixp4xx_writesb(u32 bus_addr, u8 *vaddr, int count) | ||
117 | { | ||
118 | while (count--) | ||
119 | writeb(*vaddr++, bus_addr); | ||
120 | } | ||
121 | |||
122 | static inline void | ||
123 | __ixp4xx_writew(u16 value, u32 addr) | ||
124 | { | ||
125 | u32 n, byte_enables, data; | ||
126 | |||
127 | if (addr >= VMALLOC_START) { | ||
128 | __raw_writew(value, addr); | ||
129 | return; | ||
130 | } | ||
131 | |||
132 | n = addr % 4; | ||
133 | byte_enables = (0xf & ~(BIT(n) | BIT(n+1))) << IXP4XX_PCI_NP_CBE_BESL; | ||
134 | data = value << (8*n); | ||
135 | ixp4xx_pci_write(addr, byte_enables | NP_CMD_MEMWRITE, data); | ||
136 | } | ||
137 | |||
138 | static inline void | ||
139 | __ixp4xx_writesw(u32 bus_addr, u16 *vaddr, int count) | ||
140 | { | ||
141 | while (count--) | ||
142 | writew(*vaddr++, bus_addr); | ||
143 | } | ||
144 | |||
145 | static inline void | ||
146 | __ixp4xx_writel(u32 value, u32 addr) | ||
147 | { | ||
148 | if (addr >= VMALLOC_START) { | ||
149 | __raw_writel(value, addr); | ||
150 | return; | ||
151 | } | ||
152 | |||
153 | ixp4xx_pci_write(addr, NP_CMD_MEMWRITE, value); | ||
154 | } | ||
155 | |||
156 | static inline void | ||
157 | __ixp4xx_writesl(u32 bus_addr, u32 *vaddr, int count) | ||
158 | { | ||
159 | while (count--) | ||
160 | writel(*vaddr++, bus_addr); | ||
161 | } | ||
162 | |||
163 | static inline unsigned char | ||
164 | __ixp4xx_readb(u32 addr) | ||
165 | { | ||
166 | u32 n, byte_enables, data; | ||
167 | |||
168 | if (addr >= VMALLOC_START) | ||
169 | return __raw_readb(addr); | ||
170 | |||
171 | n = addr % 4; | ||
172 | byte_enables = (0xf & ~BIT(n)) << IXP4XX_PCI_NP_CBE_BESL; | ||
173 | if (ixp4xx_pci_read(addr, byte_enables | NP_CMD_MEMREAD, &data)) | ||
174 | return 0xff; | ||
175 | |||
176 | return data >> (8*n); | ||
177 | } | ||
178 | |||
179 | static inline void | ||
180 | __ixp4xx_readsb(u32 bus_addr, u8 *vaddr, u32 count) | ||
181 | { | ||
182 | while (count--) | ||
183 | *vaddr++ = readb(bus_addr); | ||
184 | } | ||
185 | |||
186 | static inline unsigned short | ||
187 | __ixp4xx_readw(u32 addr) | ||
188 | { | ||
189 | u32 n, byte_enables, data; | ||
190 | |||
191 | if (addr >= VMALLOC_START) | ||
192 | return __raw_readw(addr); | ||
193 | |||
194 | n = addr % 4; | ||
195 | byte_enables = (0xf & ~(BIT(n) | BIT(n+1))) << IXP4XX_PCI_NP_CBE_BESL; | ||
196 | if (ixp4xx_pci_read(addr, byte_enables | NP_CMD_MEMREAD, &data)) | ||
197 | return 0xffff; | ||
198 | |||
199 | return data>>(8*n); | ||
200 | } | ||
201 | |||
202 | static inline void | ||
203 | __ixp4xx_readsw(u32 bus_addr, u16 *vaddr, u32 count) | ||
204 | { | ||
205 | while (count--) | ||
206 | *vaddr++ = readw(bus_addr); | ||
207 | } | ||
208 | |||
209 | static inline unsigned long | ||
210 | __ixp4xx_readl(u32 addr) | ||
211 | { | ||
212 | u32 data; | ||
213 | |||
214 | if (addr >= VMALLOC_START) | ||
215 | return __raw_readl(addr); | ||
216 | |||
217 | if (ixp4xx_pci_read(addr, NP_CMD_MEMREAD, &data)) | ||
218 | return 0xffffffff; | ||
219 | |||
220 | return data; | ||
221 | } | ||
222 | |||
223 | static inline void | ||
224 | __ixp4xx_readsl(u32 bus_addr, u32 *vaddr, u32 count) | ||
225 | { | ||
226 | while (count--) | ||
227 | *vaddr++ = readl(bus_addr); | ||
228 | } | ||
229 | |||
230 | |||
231 | /* | ||
232 | * We can use the built-in functions b/c they end up calling writeb/readb | ||
233 | */ | ||
234 | #define memset_io(c,v,l) _memset_io((c),(v),(l)) | ||
235 | #define memcpy_fromio(a,c,l) _memcpy_fromio((a),(c),(l)) | ||
236 | #define memcpy_toio(c,a,l) _memcpy_toio((c),(a),(l)) | ||
237 | |||
238 | #define eth_io_copy_and_sum(s,c,l,b) \ | ||
239 | eth_copy_and_sum((s),__mem_pci(c),(l),(b)) | ||
240 | |||
241 | static inline int | ||
242 | check_signature(unsigned long bus_addr, const unsigned char *signature, | ||
243 | int length) | ||
244 | { | ||
245 | int retval = 0; | ||
246 | do { | ||
247 | if (readb(bus_addr) != *signature) | ||
248 | goto out; | ||
249 | bus_addr++; | ||
250 | signature++; | ||
251 | length--; | ||
252 | } while (length); | ||
253 | retval = 1; | ||
254 | out: | ||
255 | return retval; | ||
256 | } | ||
257 | |||
258 | #endif | ||
259 | |||
260 | /* | ||
261 | * IXP4xx does not have a transparent cpu -> PCI I/O translation | ||
262 | * window. Instead, it has a set of registers that must be tweaked | ||
263 | * with the proper byte lanes, command types, and address for the | ||
264 | * transaction. This means that we need to override the default | ||
265 | * I/O functions. | ||
266 | */ | ||
267 | #define outb(p, v) __ixp4xx_outb(p, v) | ||
268 | #define outw(p, v) __ixp4xx_outw(p, v) | ||
269 | #define outl(p, v) __ixp4xx_outl(p, v) | ||
270 | |||
271 | #define outsb(p, v, l) __ixp4xx_outsb(p, v, l) | ||
272 | #define outsw(p, v, l) __ixp4xx_outsw(p, v, l) | ||
273 | #define outsl(p, v, l) __ixp4xx_outsl(p, v, l) | ||
274 | |||
275 | #define inb(p) __ixp4xx_inb(p) | ||
276 | #define inw(p) __ixp4xx_inw(p) | ||
277 | #define inl(p) __ixp4xx_inl(p) | ||
278 | |||
279 | #define insb(p, v, l) __ixp4xx_insb(p, v, l) | ||
280 | #define insw(p, v, l) __ixp4xx_insw(p, v, l) | ||
281 | #define insl(p, v, l) __ixp4xx_insl(p, v, l) | ||
282 | |||
283 | |||
284 | static inline void | ||
285 | __ixp4xx_outb(u8 value, u32 addr) | ||
286 | { | ||
287 | u32 n, byte_enables, data; | ||
288 | n = addr % 4; | ||
289 | byte_enables = (0xf & ~BIT(n)) << IXP4XX_PCI_NP_CBE_BESL; | ||
290 | data = value << (8*n); | ||
291 | ixp4xx_pci_write(addr, byte_enables | NP_CMD_IOWRITE, data); | ||
292 | } | ||
293 | |||
294 | static inline void | ||
295 | __ixp4xx_outsb(u32 io_addr, const u8 *vaddr, u32 count) | ||
296 | { | ||
297 | while (count--) | ||
298 | outb(*vaddr++, io_addr); | ||
299 | } | ||
300 | |||
301 | static inline void | ||
302 | __ixp4xx_outw(u16 value, u32 addr) | ||
303 | { | ||
304 | u32 n, byte_enables, data; | ||
305 | n = addr % 4; | ||
306 | byte_enables = (0xf & ~(BIT(n) | BIT(n+1))) << IXP4XX_PCI_NP_CBE_BESL; | ||
307 | data = value << (8*n); | ||
308 | ixp4xx_pci_write(addr, byte_enables | NP_CMD_IOWRITE, data); | ||
309 | } | ||
310 | |||
311 | static inline void | ||
312 | __ixp4xx_outsw(u32 io_addr, const u16 *vaddr, u32 count) | ||
313 | { | ||
314 | while (count--) | ||
315 | outw(cpu_to_le16(*vaddr++), io_addr); | ||
316 | } | ||
317 | |||
318 | static inline void | ||
319 | __ixp4xx_outl(u32 value, u32 addr) | ||
320 | { | ||
321 | ixp4xx_pci_write(addr, NP_CMD_IOWRITE, value); | ||
322 | } | ||
323 | |||
324 | static inline void | ||
325 | __ixp4xx_outsl(u32 io_addr, const u32 *vaddr, u32 count) | ||
326 | { | ||
327 | while (count--) | ||
328 | outl(*vaddr++, io_addr); | ||
329 | } | ||
330 | |||
331 | static inline u8 | ||
332 | __ixp4xx_inb(u32 addr) | ||
333 | { | ||
334 | u32 n, byte_enables, data; | ||
335 | n = addr % 4; | ||
336 | byte_enables = (0xf & ~BIT(n)) << IXP4XX_PCI_NP_CBE_BESL; | ||
337 | if (ixp4xx_pci_read(addr, byte_enables | NP_CMD_IOREAD, &data)) | ||
338 | return 0xff; | ||
339 | |||
340 | return data >> (8*n); | ||
341 | } | ||
342 | |||
343 | static inline void | ||
344 | __ixp4xx_insb(u32 io_addr, u8 *vaddr, u32 count) | ||
345 | { | ||
346 | while (count--) | ||
347 | *vaddr++ = inb(io_addr); | ||
348 | } | ||
349 | |||
350 | static inline u16 | ||
351 | __ixp4xx_inw(u32 addr) | ||
352 | { | ||
353 | u32 n, byte_enables, data; | ||
354 | n = addr % 4; | ||
355 | byte_enables = (0xf & ~(BIT(n) | BIT(n+1))) << IXP4XX_PCI_NP_CBE_BESL; | ||
356 | if (ixp4xx_pci_read(addr, byte_enables | NP_CMD_IOREAD, &data)) | ||
357 | return 0xffff; | ||
358 | |||
359 | return data>>(8*n); | ||
360 | } | ||
361 | |||
362 | static inline void | ||
363 | __ixp4xx_insw(u32 io_addr, u16 *vaddr, u32 count) | ||
364 | { | ||
365 | while (count--) | ||
366 | *vaddr++ = le16_to_cpu(inw(io_addr)); | ||
367 | } | ||
368 | |||
369 | static inline u32 | ||
370 | __ixp4xx_inl(u32 addr) | ||
371 | { | ||
372 | u32 data; | ||
373 | if (ixp4xx_pci_read(addr, NP_CMD_IOREAD, &data)) | ||
374 | return 0xffffffff; | ||
375 | |||
376 | return data; | ||
377 | } | ||
378 | |||
379 | static inline void | ||
380 | __ixp4xx_insl(u32 io_addr, u32 *vaddr, u32 count) | ||
381 | { | ||
382 | while (count--) | ||
383 | *vaddr++ = inl(io_addr); | ||
384 | } | ||
385 | |||
386 | |||
387 | #endif // __ASM_ARM_ARCH_IO_H | ||
388 | |||
diff --git a/include/asm-arm/arch-ixp4xx/irq.h b/include/asm-arm/arch-ixp4xx/irq.h new file mode 100644 index 000000000000..87da70695f0a --- /dev/null +++ b/include/asm-arm/arch-ixp4xx/irq.h | |||
@@ -0,0 +1,13 @@ | |||
1 | /* | ||
2 | * irq.h | ||
3 | * | ||
4 | * Copyright (C) 2002 Intel Corporation. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | */ | ||
11 | |||
12 | #define fixup_irq(irq) (irq) | ||
13 | |||
diff --git a/include/asm-arm/arch-ixp4xx/irqs.h b/include/asm-arm/arch-ixp4xx/irqs.h new file mode 100644 index 000000000000..ca808281c7f9 --- /dev/null +++ b/include/asm-arm/arch-ixp4xx/irqs.h | |||
@@ -0,0 +1,96 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-ixp4xx/irqs.h | ||
3 | * | ||
4 | * IRQ definitions for IXP4XX based systems | ||
5 | * | ||
6 | * Copyright (C) 2002 Intel Corporation. | ||
7 | * Copyright (C) 2003 MontaVista Software, Inc. | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or modify | ||
10 | * it under the terms of the GNU General Public License version 2 as | ||
11 | * published by the Free Software Foundation. | ||
12 | * | ||
13 | */ | ||
14 | |||
15 | #ifndef _ARCH_IXP4XX_IRQS_H_ | ||
16 | #define _ARCH_IXP4XX_IRQS_H_ | ||
17 | |||
18 | |||
19 | #define IRQ_IXP4XX_NPEA 0 | ||
20 | #define IRQ_IXP4XX_NPEB 1 | ||
21 | #define IRQ_IXP4XX_NPEC 2 | ||
22 | #define IRQ_IXP4XX_QM1 3 | ||
23 | #define IRQ_IXP4XX_QM2 4 | ||
24 | #define IRQ_IXP4XX_TIMER1 5 | ||
25 | #define IRQ_IXP4XX_GPIO0 6 | ||
26 | #define IRQ_IXP4XX_GPIO1 7 | ||
27 | #define IRQ_IXP4XX_PCI_INT 8 | ||
28 | #define IRQ_IXP4XX_PCI_DMA1 9 | ||
29 | #define IRQ_IXP4XX_PCI_DMA2 10 | ||
30 | #define IRQ_IXP4XX_TIMER2 11 | ||
31 | #define IRQ_IXP4XX_USB 12 | ||
32 | #define IRQ_IXP4XX_UART2 13 | ||
33 | #define IRQ_IXP4XX_TIMESTAMP 14 | ||
34 | #define IRQ_IXP4XX_UART1 15 | ||
35 | #define IRQ_IXP4XX_WDOG 16 | ||
36 | #define IRQ_IXP4XX_AHB_PMU 17 | ||
37 | #define IRQ_IXP4XX_XSCALE_PMU 18 | ||
38 | #define IRQ_IXP4XX_GPIO2 19 | ||
39 | #define IRQ_IXP4XX_GPIO3 20 | ||
40 | #define IRQ_IXP4XX_GPIO4 21 | ||
41 | #define IRQ_IXP4XX_GPIO5 22 | ||
42 | #define IRQ_IXP4XX_GPIO6 23 | ||
43 | #define IRQ_IXP4XX_GPIO7 24 | ||
44 | #define IRQ_IXP4XX_GPIO8 25 | ||
45 | #define IRQ_IXP4XX_GPIO9 26 | ||
46 | #define IRQ_IXP4XX_GPIO10 27 | ||
47 | #define IRQ_IXP4XX_GPIO11 28 | ||
48 | #define IRQ_IXP4XX_GPIO12 29 | ||
49 | #define IRQ_IXP4XX_SW_INT1 30 | ||
50 | #define IRQ_IXP4XX_SW_INT2 31 | ||
51 | #define IRQ_IXP4XX_USB_HOST 32 | ||
52 | #define IRQ_IXP4XX_I2C 33 | ||
53 | #define IRQ_IXP4XX_SSP 34 | ||
54 | #define IRQ_IXP4XX_TSYNC 35 | ||
55 | #define IRQ_IXP4XX_EAU_DONE 36 | ||
56 | #define IRQ_IXP4XX_SHA_DONE 37 | ||
57 | #define IRQ_IXP4XX_SWCP_PE 58 | ||
58 | #define IRQ_IXP4XX_QM_PE 60 | ||
59 | #define IRQ_IXP4XX_MCU_ECC 61 | ||
60 | #define IRQ_IXP4XX_EXP_PE 62 | ||
61 | |||
62 | /* | ||
63 | * Only first 32 sources are valid if running on IXP42x systems | ||
64 | */ | ||
65 | #ifndef CONFIG_CPU_IXP46X | ||
66 | #define NR_IRQS 32 | ||
67 | #else | ||
68 | #define NR_IRQS 64 | ||
69 | #endif | ||
70 | |||
71 | #define XSCALE_PMU_IRQ (IRQ_IXP4XX_XSCALE_PMU) | ||
72 | |||
73 | /* | ||
74 | * IXDP425 board IRQs | ||
75 | */ | ||
76 | #define IRQ_IXDP425_PCI_INTA IRQ_IXP4XX_GPIO11 | ||
77 | #define IRQ_IXDP425_PCI_INTB IRQ_IXP4XX_GPIO10 | ||
78 | #define IRQ_IXDP425_PCI_INTC IRQ_IXP4XX_GPIO9 | ||
79 | #define IRQ_IXDP425_PCI_INTD IRQ_IXP4XX_GPIO8 | ||
80 | |||
81 | /* | ||
82 | * PrPMC1100 Board IRQs | ||
83 | */ | ||
84 | #define IRQ_PRPMC1100_PCI_INTA IRQ_IXP4XX_GPIO11 | ||
85 | #define IRQ_PRPMC1100_PCI_INTB IRQ_IXP4XX_GPIO10 | ||
86 | #define IRQ_PRPMC1100_PCI_INTC IRQ_IXP4XX_GPIO9 | ||
87 | #define IRQ_PRPMC1100_PCI_INTD IRQ_IXP4XX_GPIO8 | ||
88 | |||
89 | /* | ||
90 | * ADI Coyote Board IRQs | ||
91 | */ | ||
92 | #define IRQ_COYOTE_PCI_SLOT0 IRQ_IXP4XX_GPIO6 | ||
93 | #define IRQ_COYOTE_PCI_SLOT1 IRQ_IXP4XX_GPIO11 | ||
94 | #define IRQ_COYOTE_IDE IRQ_IXP4XX_GPIO5 | ||
95 | |||
96 | #endif | ||
diff --git a/include/asm-arm/arch-ixp4xx/ixdp425.h b/include/asm-arm/arch-ixp4xx/ixdp425.h new file mode 100644 index 000000000000..7d21bf941379 --- /dev/null +++ b/include/asm-arm/arch-ixp4xx/ixdp425.h | |||
@@ -0,0 +1,38 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-ixp4xx/ixdp425.h | ||
3 | * | ||
4 | * IXDP425 platform specific definitions | ||
5 | * | ||
6 | * Author: Deepak Saxena <dsaxena@plexity.net> | ||
7 | * | ||
8 | * Copyright 2004 (c) MontaVista, Software, Inc. | ||
9 | * | ||
10 | * This file is licensed under the terms of the GNU General Public | ||
11 | * License version 2. This program is licensed "as is" without any | ||
12 | * warranty of any kind, whether express or implied. | ||
13 | */ | ||
14 | |||
15 | #ifndef __ASM_ARCH_HARDWARE_H__ | ||
16 | #error "Do not include this directly, instead #include <asm/hardware.h>" | ||
17 | #endif | ||
18 | |||
19 | #define IXDP425_FLASH_BASE IXP4XX_EXP_BUS_CS0_BASE_PHYS | ||
20 | #define IXDP425_FLASH_SIZE IXP4XX_EXP_BUS_CSX_REGION_SIZE | ||
21 | |||
22 | #define IXDP425_SDA_PIN 7 | ||
23 | #define IXDP425_SCL_PIN 6 | ||
24 | |||
25 | /* | ||
26 | * IXDP425 PCI IRQs | ||
27 | */ | ||
28 | #define IXDP425_PCI_MAX_DEV 4 | ||
29 | #define IXDP425_PCI_IRQ_LINES 4 | ||
30 | |||
31 | |||
32 | /* PCI controller GPIO to IRQ pin mappings */ | ||
33 | #define IXDP425_PCI_INTA_PIN 11 | ||
34 | #define IXDP425_PCI_INTB_PIN 10 | ||
35 | #define IXDP425_PCI_INTC_PIN 9 | ||
36 | #define IXDP425_PCI_INTD_PIN 8 | ||
37 | |||
38 | |||
diff --git a/include/asm-arm/arch-ixp4xx/ixp4xx-regs.h b/include/asm-arm/arch-ixp4xx/ixp4xx-regs.h new file mode 100644 index 000000000000..8eeb1db6309d --- /dev/null +++ b/include/asm-arm/arch-ixp4xx/ixp4xx-regs.h | |||
@@ -0,0 +1,591 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-ixp4xx/ixp4xx-regs.h | ||
3 | * | ||
4 | * Register definitions for IXP4xx chipset. This file contains | ||
5 | * register location and bit definitions only. Platform specific | ||
6 | * definitions and helper function declarations are in platform.h | ||
7 | * and machine-name.h. | ||
8 | * | ||
9 | * Copyright (C) 2002 Intel Corporation. | ||
10 | * Copyright (C) 2003-2004 MontaVista Software, Inc. | ||
11 | * | ||
12 | * This program is free software; you can redistribute it and/or modify | ||
13 | * it under the terms of the GNU General Public License version 2 as | ||
14 | * published by the Free Software Foundation. | ||
15 | * | ||
16 | */ | ||
17 | |||
18 | #ifndef __ASM_ARCH_HARDWARE_H__ | ||
19 | #error "Do not include this directly, instead #include <asm/hardware.h>" | ||
20 | #endif | ||
21 | |||
22 | #ifndef _ASM_ARM_IXP4XX_H_ | ||
23 | #define _ASM_ARM_IXP4XX_H_ | ||
24 | |||
25 | /* | ||
26 | * IXP4xx Linux Memory Map: | ||
27 | * | ||
28 | * Phy Size Virt Description | ||
29 | * ========================================================================= | ||
30 | * | ||
31 | * 0x00000000 0x10000000(max) PAGE_OFFSET System RAM | ||
32 | * | ||
33 | * 0x48000000 0x04000000 ioremap'd PCI Memory Space | ||
34 | * | ||
35 | * 0x50000000 0x10000000 ioremap'd EXP BUS | ||
36 | * | ||
37 | * 0x6000000 0x00004000 ioremap'd QMgr | ||
38 | * | ||
39 | * 0xC0000000 0x00001000 0xffbfe000 PCI CFG | ||
40 | * | ||
41 | * 0xC4000000 0x00001000 0xffbfd000 EXP CFG | ||
42 | * | ||
43 | * 0xC8000000 0x0000C000 0xffbf2000 On-Chip Peripherals | ||
44 | */ | ||
45 | |||
46 | /* | ||
47 | * Queue Manager | ||
48 | */ | ||
49 | #define IXP4XX_QMGR_BASE_PHYS (0x60000000) | ||
50 | |||
51 | /* | ||
52 | * Expansion BUS Configuration registers | ||
53 | */ | ||
54 | #define IXP4XX_EXP_CFG_BASE_PHYS (0xC4000000) | ||
55 | #define IXP4XX_EXP_CFG_BASE_VIRT (0xFFBFD000) | ||
56 | #define IXP4XX_EXP_CFG_REGION_SIZE (0x00001000) | ||
57 | |||
58 | /* | ||
59 | * PCI Config registers | ||
60 | */ | ||
61 | #define IXP4XX_PCI_CFG_BASE_PHYS (0xC0000000) | ||
62 | #define IXP4XX_PCI_CFG_BASE_VIRT (0xFFBFE000) | ||
63 | #define IXP4XX_PCI_CFG_REGION_SIZE (0x00001000) | ||
64 | |||
65 | /* | ||
66 | * Peripheral space | ||
67 | */ | ||
68 | #define IXP4XX_PERIPHERAL_BASE_PHYS (0xC8000000) | ||
69 | #define IXP4XX_PERIPHERAL_BASE_VIRT (0xFFBF2000) | ||
70 | #define IXP4XX_PERIPHERAL_REGION_SIZE (0x0000C000) | ||
71 | |||
72 | #define IXP4XX_EXP_CS0_OFFSET 0x00 | ||
73 | #define IXP4XX_EXP_CS1_OFFSET 0x04 | ||
74 | #define IXP4XX_EXP_CS2_OFFSET 0x08 | ||
75 | #define IXP4XX_EXP_CS3_OFFSET 0x0C | ||
76 | #define IXP4XX_EXP_CS4_OFFSET 0x10 | ||
77 | #define IXP4XX_EXP_CS5_OFFSET 0x14 | ||
78 | #define IXP4XX_EXP_CS6_OFFSET 0x18 | ||
79 | #define IXP4XX_EXP_CS7_OFFSET 0x1C | ||
80 | #define IXP4XX_EXP_CFG0_OFFSET 0x20 | ||
81 | #define IXP4XX_EXP_CFG1_OFFSET 0x24 | ||
82 | #define IXP4XX_EXP_CFG2_OFFSET 0x28 | ||
83 | #define IXP4XX_EXP_CFG3_OFFSET 0x2C | ||
84 | |||
85 | /* | ||
86 | * Expansion Bus Controller registers. | ||
87 | */ | ||
88 | #define IXP4XX_EXP_REG(x) ((volatile u32 *)(IXP4XX_EXP_CFG_BASE_VIRT+(x))) | ||
89 | |||
90 | #define IXP4XX_EXP_CS0 IXP4XX_EXP_REG(IXP4XX_EXP_CS0_OFFSET) | ||
91 | #define IXP4XX_EXP_CS1 IXP4XX_EXP_REG(IXP4XX_EXP_CS1_OFFSET) | ||
92 | #define IXP4XX_EXP_CS2 IXP4XX_EXP_REG(IXP4XX_EXP_CS2_OFFSET) | ||
93 | #define IXP4XX_EXP_CS3 IXP4XX_EXP_REG(IXP4XX_EXP_CS3_OFFSET) | ||
94 | #define IXP4XX_EXP_CS4 IXP4XX_EXP_REG(IXP4XX_EXP_CS4_OFFSET) | ||
95 | #define IXP4XX_EXP_CS5 IXP4XX_EXP_REG(IXP4XX_EXP_CS5_OFFSET) | ||
96 | #define IXP4XX_EXP_CS6 IXP4XX_EXP_REG(IXP4XX_EXP_CS6_OFFSET) | ||
97 | #define IXP4XX_EXP_CS7 IXP4XX_EXP_REG(IXP4XX_EXP_CS7_OFFSET) | ||
98 | |||
99 | #define IXP4XX_EXP_CFG0 IXP4XX_EXP_REG(IXP4XX_EXP_CFG0_OFFSET) | ||
100 | #define IXP4XX_EXP_CFG1 IXP4XX_EXP_REG(IXP4XX_EXP_CFG1_OFFSET) | ||
101 | #define IXP4XX_EXP_CFG2 IXP4XX_EXP_REG(IXP4XX_EXP_CFG2_OFFSET) | ||
102 | #define IXP4XX_EXP_CFG3 IXP4XX_EXP_REG(IXP4XX_EXP_CFG3_OFFSET) | ||
103 | |||
104 | |||
105 | /* | ||
106 | * Peripheral Space Register Region Base Addresses | ||
107 | */ | ||
108 | #define IXP4XX_UART1_BASE_PHYS (IXP4XX_PERIPHERAL_BASE_PHYS + 0x0000) | ||
109 | #define IXP4XX_UART2_BASE_PHYS (IXP4XX_PERIPHERAL_BASE_PHYS + 0x1000) | ||
110 | #define IXP4XX_PMU_BASE_PHYS (IXP4XX_PERIPHERAL_BASE_PHYS + 0x2000) | ||
111 | #define IXP4XX_INTC_BASE_PHYS (IXP4XX_PERIPHERAL_BASE_PHYS + 0x3000) | ||
112 | #define IXP4XX_GPIO_BASE_PHYS (IXP4XX_PERIPHERAL_BASE_PHYS + 0x4000) | ||
113 | #define IXP4XX_TIMER_BASE_PHYS (IXP4XX_PERIPHERAL_BASE_PHYS + 0x5000) | ||
114 | #define IXP4XX_EthA_BASE_PHYS (IXP4XX_PERIPHERAL_BASE_PHYS + 0x9000) | ||
115 | #define IXP4XX_EthB_BASE_PHYS (IXP4XX_PERIPHERAL_BASE_PHYS + 0xA000) | ||
116 | #define IXP4XX_USB_BASE_PHYS (IXP4XX_PERIPHERAL_BASE_PHYS + 0xB000) | ||
117 | |||
118 | #define IXP4XX_UART1_BASE_VIRT (IXP4XX_PERIPHERAL_BASE_VIRT + 0x0000) | ||
119 | #define IXP4XX_UART2_BASE_VIRT (IXP4XX_PERIPHERAL_BASE_VIRT + 0x1000) | ||
120 | #define IXP4XX_PMU_BASE_VIRT (IXP4XX_PERIPHERAL_BASE_VIRT + 0x2000) | ||
121 | #define IXP4XX_INTC_BASE_VIRT (IXP4XX_PERIPHERAL_BASE_VIRT + 0x3000) | ||
122 | #define IXP4XX_GPIO_BASE_VIRT (IXP4XX_PERIPHERAL_BASE_VIRT + 0x4000) | ||
123 | #define IXP4XX_TIMER_BASE_VIRT (IXP4XX_PERIPHERAL_BASE_VIRT + 0x5000) | ||
124 | #define IXP4XX_EthA_BASE_VIRT (IXP4XX_PERIPHERAL_BASE_VIRT + 0x9000) | ||
125 | #define IXP4XX_EthB_BASE_VIRT (IXP4XX_PERIPHERAL_BASE_VIRT + 0xA000) | ||
126 | #define IXP4XX_USB_BASE_VIRT (IXP4XX_PERIPHERAL_BASE_VIRT + 0xB000) | ||
127 | |||
128 | /* | ||
129 | * Constants to make it easy to access Interrupt Controller registers | ||
130 | */ | ||
131 | #define IXP4XX_ICPR_OFFSET 0x00 /* Interrupt Status */ | ||
132 | #define IXP4XX_ICMR_OFFSET 0x04 /* Interrupt Enable */ | ||
133 | #define IXP4XX_ICLR_OFFSET 0x08 /* Interrupt IRQ/FIQ Select */ | ||
134 | #define IXP4XX_ICIP_OFFSET 0x0C /* IRQ Status */ | ||
135 | #define IXP4XX_ICFP_OFFSET 0x10 /* FIQ Status */ | ||
136 | #define IXP4XX_ICHR_OFFSET 0x14 /* Interrupt Priority */ | ||
137 | #define IXP4XX_ICIH_OFFSET 0x18 /* IRQ Highest Pri Int */ | ||
138 | #define IXP4XX_ICFH_OFFSET 0x1C /* FIQ Highest Pri Int */ | ||
139 | |||
140 | /* | ||
141 | * IXP465-only | ||
142 | */ | ||
143 | #define IXP4XX_ICPR2_OFFSET 0x20 /* Interrupt Status 2 */ | ||
144 | #define IXP4XX_ICMR2_OFFSET 0x24 /* Interrupt Enable 2 */ | ||
145 | #define IXP4XX_ICLR2_OFFSET 0x28 /* Interrupt IRQ/FIQ Select 2 */ | ||
146 | #define IXP4XX_ICIP2_OFFSET 0x2C /* IRQ Status */ | ||
147 | #define IXP4XX_ICFP2_OFFSET 0x30 /* FIQ Status */ | ||
148 | #define IXP4XX_ICEEN_OFFSET 0x34 /* Error High Pri Enable */ | ||
149 | |||
150 | |||
151 | /* | ||
152 | * Interrupt Controller Register Definitions. | ||
153 | */ | ||
154 | |||
155 | #define IXP4XX_INTC_REG(x) ((volatile u32 *)(IXP4XX_INTC_BASE_VIRT+(x))) | ||
156 | |||
157 | #define IXP4XX_ICPR IXP4XX_INTC_REG(IXP4XX_ICPR_OFFSET) | ||
158 | #define IXP4XX_ICMR IXP4XX_INTC_REG(IXP4XX_ICMR_OFFSET) | ||
159 | #define IXP4XX_ICLR IXP4XX_INTC_REG(IXP4XX_ICLR_OFFSET) | ||
160 | #define IXP4XX_ICIP IXP4XX_INTC_REG(IXP4XX_ICIP_OFFSET) | ||
161 | #define IXP4XX_ICFP IXP4XX_INTC_REG(IXP4XX_ICFP_OFFSET) | ||
162 | #define IXP4XX_ICHR IXP4XX_INTC_REG(IXP4XX_ICHR_OFFSET) | ||
163 | #define IXP4XX_ICIH IXP4XX_INTC_REG(IXP4XX_ICIH_OFFSET) | ||
164 | #define IXP4XX_ICFH IXP4XX_INTC_REG(IXP4XX_ICFH_OFFSET) | ||
165 | #define IXP4XX_ICPR2 IXP4XX_INTC_REG(IXP4XX_ICPR2_OFFSET) | ||
166 | #define IXP4XX_ICMR2 IXP4XX_INTC_REG(IXP4XX_ICMR2_OFFSET) | ||
167 | #define IXP4XX_ICLR2 IXP4XX_INTC_REG(IXP4XX_ICLR2_OFFSET) | ||
168 | #define IXP4XX_ICIP2 IXP4XX_INTC_REG(IXP4XX_ICIP2_OFFSET) | ||
169 | #define IXP4XX_ICFP2 IXP4XX_INTC_REG(IXP4XX_ICFP2_OFFSET) | ||
170 | #define IXP4XX_ICEEN IXP4XX_INTC_REG(IXP4XX_ICEEN_OFFSET) | ||
171 | |||
172 | /* | ||
173 | * Constants to make it easy to access GPIO registers | ||
174 | */ | ||
175 | #define IXP4XX_GPIO_GPOUTR_OFFSET 0x00 | ||
176 | #define IXP4XX_GPIO_GPOER_OFFSET 0x04 | ||
177 | #define IXP4XX_GPIO_GPINR_OFFSET 0x08 | ||
178 | #define IXP4XX_GPIO_GPISR_OFFSET 0x0C | ||
179 | #define IXP4XX_GPIO_GPIT1R_OFFSET 0x10 | ||
180 | #define IXP4XX_GPIO_GPIT2R_OFFSET 0x14 | ||
181 | #define IXP4XX_GPIO_GPCLKR_OFFSET 0x18 | ||
182 | #define IXP4XX_GPIO_GPDBSELR_OFFSET 0x1C | ||
183 | |||
184 | /* | ||
185 | * GPIO Register Definitions. | ||
186 | * [Only perform 32bit reads/writes] | ||
187 | */ | ||
188 | #define IXP4XX_GPIO_REG(x) ((volatile u32 *)(IXP4XX_GPIO_BASE_VIRT+(x))) | ||
189 | |||
190 | #define IXP4XX_GPIO_GPOUTR IXP4XX_GPIO_REG(IXP4XX_GPIO_GPOUTR_OFFSET) | ||
191 | #define IXP4XX_GPIO_GPOER IXP4XX_GPIO_REG(IXP4XX_GPIO_GPOER_OFFSET) | ||
192 | #define IXP4XX_GPIO_GPINR IXP4XX_GPIO_REG(IXP4XX_GPIO_GPINR_OFFSET) | ||
193 | #define IXP4XX_GPIO_GPISR IXP4XX_GPIO_REG(IXP4XX_GPIO_GPISR_OFFSET) | ||
194 | #define IXP4XX_GPIO_GPIT1R IXP4XX_GPIO_REG(IXP4XX_GPIO_GPIT1R_OFFSET) | ||
195 | #define IXP4XX_GPIO_GPIT2R IXP4XX_GPIO_REG(IXP4XX_GPIO_GPIT2R_OFFSET) | ||
196 | #define IXP4XX_GPIO_GPCLKR IXP4XX_GPIO_REG(IXP4XX_GPIO_GPCLKR_OFFSET) | ||
197 | #define IXP4XX_GPIO_GPDBSELR IXP4XX_GPIO_REG(IXP4XX_GPIO_GPDBSELR_OFFSET) | ||
198 | |||
199 | /* | ||
200 | * GPIO register bit definitions | ||
201 | */ | ||
202 | |||
203 | /* Interrupt styles | ||
204 | */ | ||
205 | #define IXP4XX_GPIO_STYLE_ACTIVE_HIGH 0x0 | ||
206 | #define IXP4XX_GPIO_STYLE_ACTIVE_LOW 0x1 | ||
207 | #define IXP4XX_GPIO_STYLE_RISING_EDGE 0x2 | ||
208 | #define IXP4XX_GPIO_STYLE_FALLING_EDGE 0x3 | ||
209 | #define IXP4XX_GPIO_STYLE_TRANSITIONAL 0x4 | ||
210 | |||
211 | /* | ||
212 | * Mask used to clear interrupt styles | ||
213 | */ | ||
214 | #define IXP4XX_GPIO_STYLE_CLEAR 0x7 | ||
215 | #define IXP4XX_GPIO_STYLE_SIZE 3 | ||
216 | |||
217 | /* | ||
218 | * Constants to make it easy to access Timer Control/Status registers | ||
219 | */ | ||
220 | #define IXP4XX_OSTS_OFFSET 0x00 /* Continious TimeStamp */ | ||
221 | #define IXP4XX_OST1_OFFSET 0x04 /* Timer 1 Timestamp */ | ||
222 | #define IXP4XX_OSRT1_OFFSET 0x08 /* Timer 1 Reload */ | ||
223 | #define IXP4XX_OST2_OFFSET 0x0C /* Timer 2 Timestamp */ | ||
224 | #define IXP4XX_OSRT2_OFFSET 0x10 /* Timer 2 Reload */ | ||
225 | #define IXP4XX_OSWT_OFFSET 0x14 /* Watchdog Timer */ | ||
226 | #define IXP4XX_OSWE_OFFSET 0x18 /* Watchdog Enable */ | ||
227 | #define IXP4XX_OSWK_OFFSET 0x1C /* Watchdog Key */ | ||
228 | #define IXP4XX_OSST_OFFSET 0x20 /* Timer Status */ | ||
229 | |||
230 | /* | ||
231 | * Operating System Timer Register Definitions. | ||
232 | */ | ||
233 | |||
234 | #define IXP4XX_TIMER_REG(x) ((volatile u32 *)(IXP4XX_TIMER_BASE_VIRT+(x))) | ||
235 | |||
236 | #define IXP4XX_OSTS IXP4XX_TIMER_REG(IXP4XX_OSTS_OFFSET) | ||
237 | #define IXP4XX_OST1 IXP4XX_TIMER_REG(IXP4XX_OST1_OFFSET) | ||
238 | #define IXP4XX_OSRT1 IXP4XX_TIMER_REG(IXP4XX_OSRT1_OFFSET) | ||
239 | #define IXP4XX_OST2 IXP4XX_TIMER_REG(IXP4XX_OST2_OFFSET) | ||
240 | #define IXP4XX_OSRT2 IXP4XX_TIMER_REG(IXP4XX_OSRT2_OFFSET) | ||
241 | #define IXP4XX_OSWT IXP4XX_TIMER_REG(IXP4XX_OSWT_OFFSET) | ||
242 | #define IXP4XX_OSWE IXP4XX_TIMER_REG(IXP4XX_OSWE_OFFSET) | ||
243 | #define IXP4XX_OSWK IXP4XX_TIMER_REG(IXP4XX_OSWK_OFFSET) | ||
244 | #define IXP4XX_OSST IXP4XX_TIMER_REG(IXP4XX_OSST_OFFSET) | ||
245 | |||
246 | /* | ||
247 | * Timer register values and bit definitions | ||
248 | */ | ||
249 | #define IXP4XX_OST_ENABLE 0x00000001 | ||
250 | #define IXP4XX_OST_ONE_SHOT 0x00000002 | ||
251 | /* Low order bits of reload value ignored */ | ||
252 | #define IXP4XX_OST_RELOAD_MASK 0x00000003 | ||
253 | #define IXP4XX_OST_DISABLED 0x00000000 | ||
254 | #define IXP4XX_OSST_TIMER_1_PEND 0x00000001 | ||
255 | #define IXP4XX_OSST_TIMER_2_PEND 0x00000002 | ||
256 | #define IXP4XX_OSST_TIMER_TS_PEND 0x00000004 | ||
257 | #define IXP4XX_OSST_TIMER_WDOG_PEND 0x00000008 | ||
258 | #define IXP4XX_OSST_TIMER_WARM_RESET 0x00000010 | ||
259 | |||
260 | #define IXP4XX_WDT_KEY 0x0000482E | ||
261 | |||
262 | #define IXP4XX_WDT_RESET_ENABLE 0x00000001 | ||
263 | #define IXP4XX_WDT_IRQ_ENABLE 0x00000002 | ||
264 | #define IXP4XX_WDT_COUNT_ENABLE 0x00000004 | ||
265 | |||
266 | |||
267 | /* | ||
268 | * Constants to make it easy to access PCI Control/Status registers | ||
269 | */ | ||
270 | #define PCI_NP_AD_OFFSET 0x00 | ||
271 | #define PCI_NP_CBE_OFFSET 0x04 | ||
272 | #define PCI_NP_WDATA_OFFSET 0x08 | ||
273 | #define PCI_NP_RDATA_OFFSET 0x0c | ||
274 | #define PCI_CRP_AD_CBE_OFFSET 0x10 | ||
275 | #define PCI_CRP_WDATA_OFFSET 0x14 | ||
276 | #define PCI_CRP_RDATA_OFFSET 0x18 | ||
277 | #define PCI_CSR_OFFSET 0x1c | ||
278 | #define PCI_ISR_OFFSET 0x20 | ||
279 | #define PCI_INTEN_OFFSET 0x24 | ||
280 | #define PCI_DMACTRL_OFFSET 0x28 | ||
281 | #define PCI_AHBMEMBASE_OFFSET 0x2c | ||
282 | #define PCI_AHBIOBASE_OFFSET 0x30 | ||
283 | #define PCI_PCIMEMBASE_OFFSET 0x34 | ||
284 | #define PCI_AHBDOORBELL_OFFSET 0x38 | ||
285 | #define PCI_PCIDOORBELL_OFFSET 0x3C | ||
286 | #define PCI_ATPDMA0_AHBADDR_OFFSET 0x40 | ||
287 | #define PCI_ATPDMA0_PCIADDR_OFFSET 0x44 | ||
288 | #define PCI_ATPDMA0_LENADDR_OFFSET 0x48 | ||
289 | #define PCI_ATPDMA1_AHBADDR_OFFSET 0x4C | ||
290 | #define PCI_ATPDMA1_PCIADDR_OFFSET 0x50 | ||
291 | #define PCI_ATPDMA1_LENADDR_OFFSET 0x54 | ||
292 | |||
293 | /* | ||
294 | * PCI Control/Status Registers | ||
295 | */ | ||
296 | #define IXP4XX_PCI_CSR(x) ((volatile u32 *)(IXP4XX_PCI_CFG_BASE_VIRT+(x))) | ||
297 | |||
298 | #define PCI_NP_AD IXP4XX_PCI_CSR(PCI_NP_AD_OFFSET) | ||
299 | #define PCI_NP_CBE IXP4XX_PCI_CSR(PCI_NP_CBE_OFFSET) | ||
300 | #define PCI_NP_WDATA IXP4XX_PCI_CSR(PCI_NP_WDATA_OFFSET) | ||
301 | #define PCI_NP_RDATA IXP4XX_PCI_CSR(PCI_NP_RDATA_OFFSET) | ||
302 | #define PCI_CRP_AD_CBE IXP4XX_PCI_CSR(PCI_CRP_AD_CBE_OFFSET) | ||
303 | #define PCI_CRP_WDATA IXP4XX_PCI_CSR(PCI_CRP_WDATA_OFFSET) | ||
304 | #define PCI_CRP_RDATA IXP4XX_PCI_CSR(PCI_CRP_RDATA_OFFSET) | ||
305 | #define PCI_CSR IXP4XX_PCI_CSR(PCI_CSR_OFFSET) | ||
306 | #define PCI_ISR IXP4XX_PCI_CSR(PCI_ISR_OFFSET) | ||
307 | #define PCI_INTEN IXP4XX_PCI_CSR(PCI_INTEN_OFFSET) | ||
308 | #define PCI_DMACTRL IXP4XX_PCI_CSR(PCI_DMACTRL_OFFSET) | ||
309 | #define PCI_AHBMEMBASE IXP4XX_PCI_CSR(PCI_AHBMEMBASE_OFFSET) | ||
310 | #define PCI_AHBIOBASE IXP4XX_PCI_CSR(PCI_AHBIOBASE_OFFSET) | ||
311 | #define PCI_PCIMEMBASE IXP4XX_PCI_CSR(PCI_PCIMEMBASE_OFFSET) | ||
312 | #define PCI_AHBDOORBELL IXP4XX_PCI_CSR(PCI_AHBDOORBELL_OFFSET) | ||
313 | #define PCI_PCIDOORBELL IXP4XX_PCI_CSR(PCI_PCIDOORBELL_OFFSET) | ||
314 | #define PCI_ATPDMA0_AHBADDR IXP4XX_PCI_CSR(PCI_ATPDMA0_AHBADDR_OFFSET) | ||
315 | #define PCI_ATPDMA0_PCIADDR IXP4XX_PCI_CSR(PCI_ATPDMA0_PCIADDR_OFFSET) | ||
316 | #define PCI_ATPDMA0_LENADDR IXP4XX_PCI_CSR(PCI_ATPDMA0_LENADDR_OFFSET) | ||
317 | #define PCI_ATPDMA1_AHBADDR IXP4XX_PCI_CSR(PCI_ATPDMA1_AHBADDR_OFFSET) | ||
318 | #define PCI_ATPDMA1_PCIADDR IXP4XX_PCI_CSR(PCI_ATPDMA1_PCIADDR_OFFSET) | ||
319 | #define PCI_ATPDMA1_LENADDR IXP4XX_PCI_CSR(PCI_ATPDMA1_LENADDR_OFFSET) | ||
320 | |||
321 | /* | ||
322 | * PCI register values and bit definitions | ||
323 | */ | ||
324 | |||
325 | /* CSR bit definitions */ | ||
326 | #define PCI_CSR_HOST 0x00000001 | ||
327 | #define PCI_CSR_ARBEN 0x00000002 | ||
328 | #define PCI_CSR_ADS 0x00000004 | ||
329 | #define PCI_CSR_PDS 0x00000008 | ||
330 | #define PCI_CSR_ABE 0x00000010 | ||
331 | #define PCI_CSR_DBT 0x00000020 | ||
332 | #define PCI_CSR_ASE 0x00000100 | ||
333 | #define PCI_CSR_IC 0x00008000 | ||
334 | |||
335 | /* ISR (Interrupt status) Register bit definitions */ | ||
336 | #define PCI_ISR_PSE 0x00000001 | ||
337 | #define PCI_ISR_PFE 0x00000002 | ||
338 | #define PCI_ISR_PPE 0x00000004 | ||
339 | #define PCI_ISR_AHBE 0x00000008 | ||
340 | #define PCI_ISR_APDC 0x00000010 | ||
341 | #define PCI_ISR_PADC 0x00000020 | ||
342 | #define PCI_ISR_ADB 0x00000040 | ||
343 | #define PCI_ISR_PDB 0x00000080 | ||
344 | |||
345 | /* INTEN (Interrupt Enable) Register bit definitions */ | ||
346 | #define PCI_INTEN_PSE 0x00000001 | ||
347 | #define PCI_INTEN_PFE 0x00000002 | ||
348 | #define PCI_INTEN_PPE 0x00000004 | ||
349 | #define PCI_INTEN_AHBE 0x00000008 | ||
350 | #define PCI_INTEN_APDC 0x00000010 | ||
351 | #define PCI_INTEN_PADC 0x00000020 | ||
352 | #define PCI_INTEN_ADB 0x00000040 | ||
353 | #define PCI_INTEN_PDB 0x00000080 | ||
354 | |||
355 | /* | ||
356 | * Shift value for byte enable on NP cmd/byte enable register | ||
357 | */ | ||
358 | #define IXP4XX_PCI_NP_CBE_BESL 4 | ||
359 | |||
360 | /* | ||
361 | * PCI commands supported by NP access unit | ||
362 | */ | ||
363 | #define NP_CMD_IOREAD 0x2 | ||
364 | #define NP_CMD_IOWRITE 0x3 | ||
365 | #define NP_CMD_CONFIGREAD 0xa | ||
366 | #define NP_CMD_CONFIGWRITE 0xb | ||
367 | #define NP_CMD_MEMREAD 0x6 | ||
368 | #define NP_CMD_MEMWRITE 0x7 | ||
369 | |||
370 | /* | ||
371 | * Constants for CRP access into local config space | ||
372 | */ | ||
373 | #define CRP_AD_CBE_BESL 20 | ||
374 | #define CRP_AD_CBE_WRITE 0x00010000 | ||
375 | |||
376 | |||
377 | /* | ||
378 | * USB Device Controller | ||
379 | * | ||
380 | * These are used by the USB gadget driver, so they don't follow the | ||
381 | * IXP4XX_ naming convetions. | ||
382 | * | ||
383 | */ | ||
384 | # define IXP4XX_USB_REG(x) (*((volatile u32 *)(x))) | ||
385 | |||
386 | /* UDC Undocumented - Reserved1 */ | ||
387 | #define UDC_RES1 IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0004) | ||
388 | /* UDC Undocumented - Reserved2 */ | ||
389 | #define UDC_RES2 IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0008) | ||
390 | /* UDC Undocumented - Reserved3 */ | ||
391 | #define UDC_RES3 IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x000C) | ||
392 | /* UDC Control Register */ | ||
393 | #define UDCCR IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0000) | ||
394 | /* UDC Endpoint 0 Control/Status Register */ | ||
395 | #define UDCCS0 IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0010) | ||
396 | /* UDC Endpoint 1 (IN) Control/Status Register */ | ||
397 | #define UDCCS1 IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0014) | ||
398 | /* UDC Endpoint 2 (OUT) Control/Status Register */ | ||
399 | #define UDCCS2 IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0018) | ||
400 | /* UDC Endpoint 3 (IN) Control/Status Register */ | ||
401 | #define UDCCS3 IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x001C) | ||
402 | /* UDC Endpoint 4 (OUT) Control/Status Register */ | ||
403 | #define UDCCS4 IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0020) | ||
404 | /* UDC Endpoint 5 (Interrupt) Control/Status Register */ | ||
405 | #define UDCCS5 IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0024) | ||
406 | /* UDC Endpoint 6 (IN) Control/Status Register */ | ||
407 | #define UDCCS6 IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0028) | ||
408 | /* UDC Endpoint 7 (OUT) Control/Status Register */ | ||
409 | #define UDCCS7 IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x002C) | ||
410 | /* UDC Endpoint 8 (IN) Control/Status Register */ | ||
411 | #define UDCCS8 IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0030) | ||
412 | /* UDC Endpoint 9 (OUT) Control/Status Register */ | ||
413 | #define UDCCS9 IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0034) | ||
414 | /* UDC Endpoint 10 (Interrupt) Control/Status Register */ | ||
415 | #define UDCCS10 IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0038) | ||
416 | /* UDC Endpoint 11 (IN) Control/Status Register */ | ||
417 | #define UDCCS11 IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x003C) | ||
418 | /* UDC Endpoint 12 (OUT) Control/Status Register */ | ||
419 | #define UDCCS12 IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0040) | ||
420 | /* UDC Endpoint 13 (IN) Control/Status Register */ | ||
421 | #define UDCCS13 IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0044) | ||
422 | /* UDC Endpoint 14 (OUT) Control/Status Register */ | ||
423 | #define UDCCS14 IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0048) | ||
424 | /* UDC Endpoint 15 (Interrupt) Control/Status Register */ | ||
425 | #define UDCCS15 IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x004C) | ||
426 | /* UDC Frame Number Register High */ | ||
427 | #define UFNRH IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0060) | ||
428 | /* UDC Frame Number Register Low */ | ||
429 | #define UFNRL IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0064) | ||
430 | /* UDC Byte Count Reg 2 */ | ||
431 | #define UBCR2 IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0068) | ||
432 | /* UDC Byte Count Reg 4 */ | ||
433 | #define UBCR4 IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x006c) | ||
434 | /* UDC Byte Count Reg 7 */ | ||
435 | #define UBCR7 IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0070) | ||
436 | /* UDC Byte Count Reg 9 */ | ||
437 | #define UBCR9 IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0074) | ||
438 | /* UDC Byte Count Reg 12 */ | ||
439 | #define UBCR12 IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0078) | ||
440 | /* UDC Byte Count Reg 14 */ | ||
441 | #define UBCR14 IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x007c) | ||
442 | /* UDC Endpoint 0 Data Register */ | ||
443 | #define UDDR0 IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0080) | ||
444 | /* UDC Endpoint 1 Data Register */ | ||
445 | #define UDDR1 IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0100) | ||
446 | /* UDC Endpoint 2 Data Register */ | ||
447 | #define UDDR2 IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0180) | ||
448 | /* UDC Endpoint 3 Data Register */ | ||
449 | #define UDDR3 IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0200) | ||
450 | /* UDC Endpoint 4 Data Register */ | ||
451 | #define UDDR4 IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0400) | ||
452 | /* UDC Endpoint 5 Data Register */ | ||
453 | #define UDDR5 IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x00A0) | ||
454 | /* UDC Endpoint 6 Data Register */ | ||
455 | #define UDDR6 IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0600) | ||
456 | /* UDC Endpoint 7 Data Register */ | ||
457 | #define UDDR7 IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0680) | ||
458 | /* UDC Endpoint 8 Data Register */ | ||
459 | #define UDDR8 IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0700) | ||
460 | /* UDC Endpoint 9 Data Register */ | ||
461 | #define UDDR9 IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0900) | ||
462 | /* UDC Endpoint 10 Data Register */ | ||
463 | #define UDDR10 IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x00C0) | ||
464 | /* UDC Endpoint 11 Data Register */ | ||
465 | #define UDDR11 IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0B00) | ||
466 | /* UDC Endpoint 12 Data Register */ | ||
467 | #define UDDR12 IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0B80) | ||
468 | /* UDC Endpoint 13 Data Register */ | ||
469 | #define UDDR13 IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0C00) | ||
470 | /* UDC Endpoint 14 Data Register */ | ||
471 | #define UDDR14 IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0E00) | ||
472 | /* UDC Endpoint 15 Data Register */ | ||
473 | #define UDDR15 IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x00E0) | ||
474 | /* UDC Interrupt Control Register 0 */ | ||
475 | #define UICR0 IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0050) | ||
476 | /* UDC Interrupt Control Register 1 */ | ||
477 | #define UICR1 IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0054) | ||
478 | /* UDC Status Interrupt Register 0 */ | ||
479 | #define USIR0 IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0058) | ||
480 | /* UDC Status Interrupt Register 1 */ | ||
481 | #define USIR1 IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x005C) | ||
482 | |||
483 | #define UDCCR_UDE (1 << 0) /* UDC enable */ | ||
484 | #define UDCCR_UDA (1 << 1) /* UDC active */ | ||
485 | #define UDCCR_RSM (1 << 2) /* Device resume */ | ||
486 | #define UDCCR_RESIR (1 << 3) /* Resume interrupt request */ | ||
487 | #define UDCCR_SUSIR (1 << 4) /* Suspend interrupt request */ | ||
488 | #define UDCCR_SRM (1 << 5) /* Suspend/resume interrupt mask */ | ||
489 | #define UDCCR_RSTIR (1 << 6) /* Reset interrupt request */ | ||
490 | #define UDCCR_REM (1 << 7) /* Reset interrupt mask */ | ||
491 | |||
492 | #define UDCCS0_OPR (1 << 0) /* OUT packet ready */ | ||
493 | #define UDCCS0_IPR (1 << 1) /* IN packet ready */ | ||
494 | #define UDCCS0_FTF (1 << 2) /* Flush Tx FIFO */ | ||
495 | #define UDCCS0_DRWF (1 << 3) /* Device remote wakeup feature */ | ||
496 | #define UDCCS0_SST (1 << 4) /* Sent stall */ | ||
497 | #define UDCCS0_FST (1 << 5) /* Force stall */ | ||
498 | #define UDCCS0_RNE (1 << 6) /* Receive FIFO no empty */ | ||
499 | #define UDCCS0_SA (1 << 7) /* Setup active */ | ||
500 | |||
501 | #define UDCCS_BI_TFS (1 << 0) /* Transmit FIFO service */ | ||
502 | #define UDCCS_BI_TPC (1 << 1) /* Transmit packet complete */ | ||
503 | #define UDCCS_BI_FTF (1 << 2) /* Flush Tx FIFO */ | ||
504 | #define UDCCS_BI_TUR (1 << 3) /* Transmit FIFO underrun */ | ||
505 | #define UDCCS_BI_SST (1 << 4) /* Sent stall */ | ||
506 | #define UDCCS_BI_FST (1 << 5) /* Force stall */ | ||
507 | #define UDCCS_BI_TSP (1 << 7) /* Transmit short packet */ | ||
508 | |||
509 | #define UDCCS_BO_RFS (1 << 0) /* Receive FIFO service */ | ||
510 | #define UDCCS_BO_RPC (1 << 1) /* Receive packet complete */ | ||
511 | #define UDCCS_BO_DME (1 << 3) /* DMA enable */ | ||
512 | #define UDCCS_BO_SST (1 << 4) /* Sent stall */ | ||
513 | #define UDCCS_BO_FST (1 << 5) /* Force stall */ | ||
514 | #define UDCCS_BO_RNE (1 << 6) /* Receive FIFO not empty */ | ||
515 | #define UDCCS_BO_RSP (1 << 7) /* Receive short packet */ | ||
516 | |||
517 | #define UDCCS_II_TFS (1 << 0) /* Transmit FIFO service */ | ||
518 | #define UDCCS_II_TPC (1 << 1) /* Transmit packet complete */ | ||
519 | #define UDCCS_II_FTF (1 << 2) /* Flush Tx FIFO */ | ||
520 | #define UDCCS_II_TUR (1 << 3) /* Transmit FIFO underrun */ | ||
521 | #define UDCCS_II_TSP (1 << 7) /* Transmit short packet */ | ||
522 | |||
523 | #define UDCCS_IO_RFS (1 << 0) /* Receive FIFO service */ | ||
524 | #define UDCCS_IO_RPC (1 << 1) /* Receive packet complete */ | ||
525 | #define UDCCS_IO_ROF (1 << 3) /* Receive overflow */ | ||
526 | #define UDCCS_IO_DME (1 << 3) /* DMA enable */ | ||
527 | #define UDCCS_IO_RNE (1 << 6) /* Receive FIFO not empty */ | ||
528 | #define UDCCS_IO_RSP (1 << 7) /* Receive short packet */ | ||
529 | |||
530 | #define UDCCS_INT_TFS (1 << 0) /* Transmit FIFO service */ | ||
531 | #define UDCCS_INT_TPC (1 << 1) /* Transmit packet complete */ | ||
532 | #define UDCCS_INT_FTF (1 << 2) /* Flush Tx FIFO */ | ||
533 | #define UDCCS_INT_TUR (1 << 3) /* Transmit FIFO underrun */ | ||
534 | #define UDCCS_INT_SST (1 << 4) /* Sent stall */ | ||
535 | #define UDCCS_INT_FST (1 << 5) /* Force stall */ | ||
536 | #define UDCCS_INT_TSP (1 << 7) /* Transmit short packet */ | ||
537 | |||
538 | #define UICR0_IM0 (1 << 0) /* Interrupt mask ep 0 */ | ||
539 | #define UICR0_IM1 (1 << 1) /* Interrupt mask ep 1 */ | ||
540 | #define UICR0_IM2 (1 << 2) /* Interrupt mask ep 2 */ | ||
541 | #define UICR0_IM3 (1 << 3) /* Interrupt mask ep 3 */ | ||
542 | #define UICR0_IM4 (1 << 4) /* Interrupt mask ep 4 */ | ||
543 | #define UICR0_IM5 (1 << 5) /* Interrupt mask ep 5 */ | ||
544 | #define UICR0_IM6 (1 << 6) /* Interrupt mask ep 6 */ | ||
545 | #define UICR0_IM7 (1 << 7) /* Interrupt mask ep 7 */ | ||
546 | |||
547 | #define UICR1_IM8 (1 << 0) /* Interrupt mask ep 8 */ | ||
548 | #define UICR1_IM9 (1 << 1) /* Interrupt mask ep 9 */ | ||
549 | #define UICR1_IM10 (1 << 2) /* Interrupt mask ep 10 */ | ||
550 | #define UICR1_IM11 (1 << 3) /* Interrupt mask ep 11 */ | ||
551 | #define UICR1_IM12 (1 << 4) /* Interrupt mask ep 12 */ | ||
552 | #define UICR1_IM13 (1 << 5) /* Interrupt mask ep 13 */ | ||
553 | #define UICR1_IM14 (1 << 6) /* Interrupt mask ep 14 */ | ||
554 | #define UICR1_IM15 (1 << 7) /* Interrupt mask ep 15 */ | ||
555 | |||
556 | #define USIR0_IR0 (1 << 0) /* Interrup request ep 0 */ | ||
557 | #define USIR0_IR1 (1 << 1) /* Interrup request ep 1 */ | ||
558 | #define USIR0_IR2 (1 << 2) /* Interrup request ep 2 */ | ||
559 | #define USIR0_IR3 (1 << 3) /* Interrup request ep 3 */ | ||
560 | #define USIR0_IR4 (1 << 4) /* Interrup request ep 4 */ | ||
561 | #define USIR0_IR5 (1 << 5) /* Interrup request ep 5 */ | ||
562 | #define USIR0_IR6 (1 << 6) /* Interrup request ep 6 */ | ||
563 | #define USIR0_IR7 (1 << 7) /* Interrup request ep 7 */ | ||
564 | |||
565 | #define USIR1_IR8 (1 << 0) /* Interrup request ep 8 */ | ||
566 | #define USIR1_IR9 (1 << 1) /* Interrup request ep 9 */ | ||
567 | #define USIR1_IR10 (1 << 2) /* Interrup request ep 10 */ | ||
568 | #define USIR1_IR11 (1 << 3) /* Interrup request ep 11 */ | ||
569 | #define USIR1_IR12 (1 << 4) /* Interrup request ep 12 */ | ||
570 | #define USIR1_IR13 (1 << 5) /* Interrup request ep 13 */ | ||
571 | #define USIR1_IR14 (1 << 6) /* Interrup request ep 14 */ | ||
572 | #define USIR1_IR15 (1 << 7) /* Interrup request ep 15 */ | ||
573 | |||
574 | #define DCMD_LENGTH 0x01fff /* length mask (max = 8K - 1) */ | ||
575 | |||
576 | #ifndef __ASSEMBLY__ | ||
577 | static inline int cpu_is_ixp46x(void) | ||
578 | { | ||
579 | #ifdef CONFIG_CPU_IXP46X | ||
580 | unsigned int processor_id; | ||
581 | |||
582 | asm("mrc p15, 0, %0, cr0, cr0, 0;" : "=r"(processor_id) :); | ||
583 | |||
584 | if ((processor_id & 0xffffff00) == 0x69054200) | ||
585 | return 1; | ||
586 | #endif | ||
587 | return 0; | ||
588 | } | ||
589 | #endif | ||
590 | |||
591 | #endif | ||
diff --git a/include/asm-arm/arch-ixp4xx/memory.h b/include/asm-arm/arch-ixp4xx/memory.h new file mode 100644 index 000000000000..d348548b592b --- /dev/null +++ b/include/asm-arm/arch-ixp4xx/memory.h | |||
@@ -0,0 +1,61 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-ixp4xx/memory.h | ||
3 | * | ||
4 | * Copyright (c) 2001-2004 MontaVista Software, Inc. | ||
5 | */ | ||
6 | |||
7 | #ifndef __ASM_ARCH_MEMORY_H | ||
8 | #define __ASM_ARCH_MEMORY_H | ||
9 | |||
10 | #include <asm/sizes.h> | ||
11 | |||
12 | /* | ||
13 | * Physical DRAM offset. | ||
14 | */ | ||
15 | #define PHYS_OFFSET (0x00000000UL) | ||
16 | |||
17 | #ifndef __ASSEMBLY__ | ||
18 | |||
19 | /* | ||
20 | * Only first 64MB of memory can be accessed via PCI. | ||
21 | * We use GFP_DMA to allocate safe buffers to do map/unmap. | ||
22 | * This is really ugly and we need a better way of specifying | ||
23 | * DMA-capable regions of memory. | ||
24 | */ | ||
25 | static inline void __arch_adjust_zones(int node, unsigned long *zone_size, | ||
26 | unsigned long *zhole_size) | ||
27 | { | ||
28 | unsigned int sz = SZ_64M >> PAGE_SHIFT; | ||
29 | |||
30 | /* | ||
31 | * Only adjust if > 64M on current system | ||
32 | */ | ||
33 | if (node || (zone_size[0] <= sz)) | ||
34 | return; | ||
35 | |||
36 | zone_size[1] = zone_size[0] - sz; | ||
37 | zone_size[0] = sz; | ||
38 | zhole_size[1] = zhole_size[0]; | ||
39 | zhole_size[0] = 0; | ||
40 | } | ||
41 | |||
42 | #define arch_adjust_zones(node, size, holes) \ | ||
43 | __arch_adjust_zones(node, size, holes) | ||
44 | |||
45 | #define ISA_DMA_THRESHOLD (SZ_64M - 1) | ||
46 | |||
47 | #endif | ||
48 | |||
49 | /* | ||
50 | * Virtual view <-> DMA view memory address translations | ||
51 | * virt_to_bus: Used to translate the virtual address to an | ||
52 | * address suitable to be passed to set_dma_addr | ||
53 | * bus_to_virt: Used to convert an address for DMA operations | ||
54 | * to an address that the kernel can use. | ||
55 | * | ||
56 | * These are dummies for now. | ||
57 | */ | ||
58 | #define __virt_to_bus(x) __virt_to_phys(x) | ||
59 | #define __bus_to_virt(x) __phys_to_virt(x) | ||
60 | |||
61 | #endif | ||
diff --git a/include/asm-arm/arch-ixp4xx/param.h b/include/asm-arm/arch-ixp4xx/param.h new file mode 100644 index 000000000000..8a757125e5e7 --- /dev/null +++ b/include/asm-arm/arch-ixp4xx/param.h | |||
@@ -0,0 +1,3 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-ixp4xx/param.h | ||
3 | */ | ||
diff --git a/include/asm-arm/arch-ixp4xx/platform.h b/include/asm-arm/arch-ixp4xx/platform.h new file mode 100644 index 000000000000..3a626c03ea26 --- /dev/null +++ b/include/asm-arm/arch-ixp4xx/platform.h | |||
@@ -0,0 +1,126 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-ixp4xx/platform.h | ||
3 | * | ||
4 | * Constants and functions that are useful to IXP4xx platform-specific code | ||
5 | * and device drivers. | ||
6 | * | ||
7 | * Copyright (C) 2004 MontaVista Software, Inc. | ||
8 | */ | ||
9 | |||
10 | #ifndef __ASM_ARCH_HARDWARE_H__ | ||
11 | #error "Do not include this directly, instead #include <asm/hardware.h>" | ||
12 | #endif | ||
13 | |||
14 | #ifndef __ASSEMBLY__ | ||
15 | |||
16 | #include <asm/types.h> | ||
17 | |||
18 | #ifndef __ARMEB__ | ||
19 | #define REG_OFFSET 0 | ||
20 | #else | ||
21 | #define REG_OFFSET 3 | ||
22 | #endif | ||
23 | |||
24 | /* | ||
25 | * Expansion bus memory regions | ||
26 | */ | ||
27 | #define IXP4XX_EXP_BUS_BASE_PHYS (0x50000000) | ||
28 | |||
29 | #define IXP4XX_EXP_BUS_CSX_REGION_SIZE (0x01000000) | ||
30 | |||
31 | #define IXP4XX_EXP_BUS_CS0_BASE_PHYS (IXP4XX_EXP_BUS_BASE_PHYS + 0x00000000) | ||
32 | #define IXP4XX_EXP_BUS_CS1_BASE_PHYS (IXP4XX_EXP_BUS_BASE_PHYS + 0x01000000) | ||
33 | #define IXP4XX_EXP_BUS_CS2_BASE_PHYS (IXP4XX_EXP_BUS_BASE_PHYS + 0x02000000) | ||
34 | #define IXP4XX_EXP_BUS_CS3_BASE_PHYS (IXP4XX_EXP_BUS_BASE_PHYS + 0x03000000) | ||
35 | #define IXP4XX_EXP_BUS_CS4_BASE_PHYS (IXP4XX_EXP_BUS_BASE_PHYS + 0x04000000) | ||
36 | #define IXP4XX_EXP_BUS_CS5_BASE_PHYS (IXP4XX_EXP_BUS_BASE_PHYS + 0x05000000) | ||
37 | #define IXP4XX_EXP_BUS_CS6_BASE_PHYS (IXP4XX_EXP_BUS_BASE_PHYS + 0x06000000) | ||
38 | #define IXP4XX_EXP_BUS_CS7_BASE_PHYS (IXP4XX_EXP_BUS_BASE_PHYS + 0x07000000) | ||
39 | |||
40 | #define IXP4XX_FLASH_WRITABLE (0x2) | ||
41 | #define IXP4XX_FLASH_DEFAULT (0xbcd23c40) | ||
42 | #define IXP4XX_FLASH_WRITE (0xbcd23c42) | ||
43 | |||
44 | /* | ||
45 | * Clock Speed Definitions. | ||
46 | */ | ||
47 | #define IXP4XX_PERIPHERAL_BUS_CLOCK (66) /* 66Mhzi APB BUS */ | ||
48 | #define IXP4XX_UART_XTAL 14745600 | ||
49 | |||
50 | /* | ||
51 | * The IXP4xx chips do not have an I2C unit, so GPIO lines are just | ||
52 | * used to | ||
53 | * Used as platform_data to provide GPIO pin information to the ixp42x | ||
54 | * I2C driver. | ||
55 | */ | ||
56 | struct ixp4xx_i2c_pins { | ||
57 | unsigned long sda_pin; | ||
58 | unsigned long scl_pin; | ||
59 | }; | ||
60 | |||
61 | |||
62 | struct sys_timer; | ||
63 | |||
64 | /* | ||
65 | * Functions used by platform-level setup code | ||
66 | */ | ||
67 | extern void ixp4xx_map_io(void); | ||
68 | extern void ixp4xx_init_irq(void); | ||
69 | extern void ixp4xx_sys_init(void); | ||
70 | extern struct sys_timer ixp4xx_timer; | ||
71 | extern void ixp4xx_pci_preinit(void); | ||
72 | struct pci_sys_data; | ||
73 | extern int ixp4xx_setup(int nr, struct pci_sys_data *sys); | ||
74 | extern struct pci_bus *ixp4xx_scan_bus(int nr, struct pci_sys_data *sys); | ||
75 | |||
76 | /* | ||
77 | * GPIO-functions | ||
78 | */ | ||
79 | /* | ||
80 | * The following converted to the real HW bits the gpio_line_config | ||
81 | */ | ||
82 | /* GPIO pin types */ | ||
83 | #define IXP4XX_GPIO_OUT 0x1 | ||
84 | #define IXP4XX_GPIO_IN 0x2 | ||
85 | |||
86 | #define IXP4XX_GPIO_INTSTYLE_MASK 0x7C /* Bits [6:2] define interrupt style */ | ||
87 | |||
88 | /* | ||
89 | * GPIO interrupt types. | ||
90 | */ | ||
91 | #define IXP4XX_GPIO_ACTIVE_HIGH 0x4 /* Default */ | ||
92 | #define IXP4XX_GPIO_ACTIVE_LOW 0x8 | ||
93 | #define IXP4XX_GPIO_RISING_EDGE 0x10 | ||
94 | #define IXP4XX_GPIO_FALLING_EDGE 0x20 | ||
95 | #define IXP4XX_GPIO_TRANSITIONAL 0x40 | ||
96 | |||
97 | /* GPIO signal types */ | ||
98 | #define IXP4XX_GPIO_LOW 0 | ||
99 | #define IXP4XX_GPIO_HIGH 1 | ||
100 | |||
101 | /* GPIO Clocks */ | ||
102 | #define IXP4XX_GPIO_CLK_0 14 | ||
103 | #define IXP4XX_GPIO_CLK_1 15 | ||
104 | |||
105 | extern void gpio_line_config(u8 line, u32 style); | ||
106 | |||
107 | static inline void gpio_line_get(u8 line, int *value) | ||
108 | { | ||
109 | *value = (*IXP4XX_GPIO_GPINR >> line) & 0x1; | ||
110 | } | ||
111 | |||
112 | static inline void gpio_line_set(u8 line, int value) | ||
113 | { | ||
114 | if (value == IXP4XX_GPIO_HIGH) | ||
115 | *IXP4XX_GPIO_GPOUTR |= (1 << line); | ||
116 | else if (value == IXP4XX_GPIO_LOW) | ||
117 | *IXP4XX_GPIO_GPOUTR &= ~(1 << line); | ||
118 | } | ||
119 | |||
120 | static inline void gpio_line_isr_clear(u8 line) | ||
121 | { | ||
122 | *IXP4XX_GPIO_GPISR = (1 << line); | ||
123 | } | ||
124 | |||
125 | #endif // __ASSEMBLY__ | ||
126 | |||
diff --git a/include/asm-arm/arch-ixp4xx/prpmc1100.h b/include/asm-arm/arch-ixp4xx/prpmc1100.h new file mode 100644 index 000000000000..e2532ab7f48f --- /dev/null +++ b/include/asm-arm/arch-ixp4xx/prpmc1100.h | |||
@@ -0,0 +1,33 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-ixp4xx/prpmc1100.h | ||
3 | * | ||
4 | * Motorolla PrPMC1100 platform specific definitions | ||
5 | * | ||
6 | * Author: Deepak Saxena <dsaxena@plexity.net> | ||
7 | * | ||
8 | * Copyright 2004 (c) MontaVista, Software, Inc. | ||
9 | * | ||
10 | * This file is licensed under the terms of the GNU General Public | ||
11 | * License version 2. This program is licensed "as is" without any | ||
12 | * warranty of any kind, whether express or implied. | ||
13 | */ | ||
14 | |||
15 | #ifndef __ASM_ARCH_HARDWARE_H__ | ||
16 | #error "Do not include this directly, instead #include <asm/hardware.h>" | ||
17 | #endif | ||
18 | |||
19 | #define PRPMC1100_FLASH_BASE IXP4XX_EXP_BUS_CS0_BASE_PHYS | ||
20 | #define PRPMC1100_FLASH_SIZE IXP4XX_EXP_BUS_CSX_REGION_SIZE | ||
21 | |||
22 | #define PRPMC1100_PCI_MIN_DEVID 10 | ||
23 | #define PRPMC1100_PCI_MAX_DEVID 16 | ||
24 | #define PRPMC1100_PCI_IRQ_LINES 4 | ||
25 | |||
26 | |||
27 | /* PCI controller GPIO to IRQ pin mappings */ | ||
28 | #define PRPMC1100_PCI_INTA_PIN 11 | ||
29 | #define PRPMC1100_PCI_INTB_PIN 10 | ||
30 | #define PRPMC1100_PCI_INTC_PIN 9 | ||
31 | #define PRPMC1100_PCI_INTD_PIN 8 | ||
32 | |||
33 | |||
diff --git a/include/asm-arm/arch-ixp4xx/system.h b/include/asm-arm/arch-ixp4xx/system.h new file mode 100644 index 000000000000..73589aad8dd6 --- /dev/null +++ b/include/asm-arm/arch-ixp4xx/system.h | |||
@@ -0,0 +1,42 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-ixp4x//system.h | ||
3 | * | ||
4 | * Copyright (C) 2002 Intel Corporation. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | */ | ||
11 | |||
12 | #include <asm/hardware.h> | ||
13 | |||
14 | static inline void arch_idle(void) | ||
15 | { | ||
16 | #if 0 | ||
17 | if (!hlt_counter) | ||
18 | cpu_do_idle(0); | ||
19 | #endif | ||
20 | } | ||
21 | |||
22 | |||
23 | static inline void arch_reset(char mode) | ||
24 | { | ||
25 | if ( 1 && mode == 's') { | ||
26 | /* Jump into ROM at address 0 */ | ||
27 | cpu_reset(0); | ||
28 | } else { | ||
29 | /* Use on-chip reset capability */ | ||
30 | |||
31 | /* set the "key" register to enable access to | ||
32 | * "timer" and "enable" registers | ||
33 | */ | ||
34 | *IXP4XX_OSWK = IXP4XX_WDT_KEY; | ||
35 | |||
36 | /* write 0 to the timer register for an immediate reset */ | ||
37 | *IXP4XX_OSWT = 0; | ||
38 | |||
39 | *IXP4XX_OSWE = IXP4XX_WDT_RESET_ENABLE | IXP4XX_WDT_COUNT_ENABLE; | ||
40 | } | ||
41 | } | ||
42 | |||
diff --git a/include/asm-arm/arch-ixp4xx/timex.h b/include/asm-arm/arch-ixp4xx/timex.h new file mode 100644 index 000000000000..38c9d77d3727 --- /dev/null +++ b/include/asm-arm/arch-ixp4xx/timex.h | |||
@@ -0,0 +1,13 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-ixp4xx/timex.h | ||
3 | * | ||
4 | */ | ||
5 | |||
6 | #include <asm/hardware.h> | ||
7 | |||
8 | /* | ||
9 | * We use IXP425 General purpose timer for our timer needs, it runs at | ||
10 | * 66.66... MHz | ||
11 | */ | ||
12 | #define CLOCK_TICK_RATE (66666666) | ||
13 | |||
diff --git a/include/asm-arm/arch-ixp4xx/uncompress.h b/include/asm-arm/arch-ixp4xx/uncompress.h new file mode 100644 index 000000000000..960c35810a22 --- /dev/null +++ b/include/asm-arm/arch-ixp4xx/uncompress.h | |||
@@ -0,0 +1,64 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-ixp4xx/uncompress.h | ||
3 | * | ||
4 | * Copyright (C) 2002 Intel Corporation. | ||
5 | * Copyright (C) 2003-2004 MontaVista Software, Inc. | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License version 2 as | ||
9 | * published by the Free Software Foundation. | ||
10 | * | ||
11 | */ | ||
12 | |||
13 | #ifndef _ARCH_UNCOMPRESS_H_ | ||
14 | #define _ARCH_UNCOMPRESS_H_ | ||
15 | |||
16 | #include <asm/hardware.h> | ||
17 | #include <asm/mach-types.h> | ||
18 | #include <linux/serial_reg.h> | ||
19 | |||
20 | #define TX_DONE (UART_LSR_TEMT|UART_LSR_THRE) | ||
21 | |||
22 | static volatile u32* uart_base; | ||
23 | |||
24 | static __inline__ void putc(char c) | ||
25 | { | ||
26 | /* Check THRE and TEMT bits before we transmit the character. | ||
27 | */ | ||
28 | while ((uart_base[UART_LSR] & TX_DONE) != TX_DONE); | ||
29 | *uart_base = c; | ||
30 | } | ||
31 | |||
32 | /* | ||
33 | * This does not append a newline | ||
34 | */ | ||
35 | static void putstr(const char *s) | ||
36 | { | ||
37 | while (*s) | ||
38 | { | ||
39 | putc(*s); | ||
40 | if (*s == '\n') | ||
41 | putc('\r'); | ||
42 | s++; | ||
43 | } | ||
44 | } | ||
45 | |||
46 | static __inline__ void __arch_decomp_setup(unsigned long arch_id) | ||
47 | { | ||
48 | /* | ||
49 | * Coyote and gtwx5715 only have UART2 connected | ||
50 | */ | ||
51 | if (machine_is_adi_coyote() || machine_is_gtwx5715()) | ||
52 | uart_base = (volatile u32*) IXP4XX_UART2_BASE_PHYS; | ||
53 | else | ||
54 | uart_base = (volatile u32*) IXP4XX_UART1_BASE_PHYS; | ||
55 | } | ||
56 | |||
57 | /* | ||
58 | * arch_id is a variable in decompress_kernel() | ||
59 | */ | ||
60 | #define arch_decomp_setup() __arch_decomp_setup(arch_id) | ||
61 | |||
62 | #define arch_decomp_wdog() | ||
63 | |||
64 | #endif | ||
diff --git a/include/asm-arm/arch-ixp4xx/vmalloc.h b/include/asm-arm/arch-ixp4xx/vmalloc.h new file mode 100644 index 000000000000..da46e560ad6f --- /dev/null +++ b/include/asm-arm/arch-ixp4xx/vmalloc.h | |||
@@ -0,0 +1,17 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-ixp4xx/vmalloc.h | ||
3 | */ | ||
4 | |||
5 | /* | ||
6 | * Just any arbitrary offset to the start of the vmalloc VM area: the | ||
7 | * current 8MB value just means that there will be a 8MB "hole" after the | ||
8 | * physical memory until the kernel virtual memory starts. That means that | ||
9 | * any out-of-bounds memory accesses will hopefully be caught. | ||
10 | * The vmalloc() routines leaves a hole of 4kB between each vmalloced | ||
11 | * area for the same reason. ;) | ||
12 | */ | ||
13 | #define VMALLOC_OFFSET (8*1024*1024) | ||
14 | #define VMALLOC_START (((unsigned long)high_memory + VMALLOC_OFFSET) & ~(VMALLOC_OFFSET-1)) | ||
15 | #define VMALLOC_VMADDR(x) ((unsigned long)(x)) | ||
16 | #define VMALLOC_END (0xFF000000) | ||
17 | |||
diff --git a/include/asm-arm/arch-l7200/aux_reg.h b/include/asm-arm/arch-l7200/aux_reg.h new file mode 100644 index 000000000000..762cbc76c501 --- /dev/null +++ b/include/asm-arm/arch-l7200/aux_reg.h | |||
@@ -0,0 +1,28 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-l7200/aux_reg.h | ||
3 | * | ||
4 | * Copyright (C) 2000 Steve Hill (sjhill@cotw.com) | ||
5 | * | ||
6 | * Changelog: | ||
7 | * 08-02-2000 SJH Created file | ||
8 | */ | ||
9 | #ifndef _ASM_ARCH_AUXREG_H | ||
10 | #define _ASM_ARCH_AUXREG_H | ||
11 | |||
12 | #include <asm/arch/hardware.h> | ||
13 | |||
14 | #define l7200aux_reg *((volatile unsigned int *) (AUX_BASE)) | ||
15 | |||
16 | /* | ||
17 | * Auxillary register values | ||
18 | */ | ||
19 | #define AUX_CLEAR 0x00000000 | ||
20 | #define AUX_DIAG_LED_ON 0x00000002 | ||
21 | #define AUX_RTS_UART1 0x00000004 | ||
22 | #define AUX_DTR_UART1 0x00000008 | ||
23 | #define AUX_KBD_COLUMN_12_HIGH 0x00000010 | ||
24 | #define AUX_KBD_COLUMN_12_OFF 0x00000020 | ||
25 | #define AUX_KBD_COLUMN_13_HIGH 0x00000040 | ||
26 | #define AUX_KBD_COLUMN_13_OFF 0x00000080 | ||
27 | |||
28 | #endif | ||
diff --git a/include/asm-arm/arch-l7200/debug-macro.S b/include/asm-arm/arch-l7200/debug-macro.S new file mode 100644 index 000000000000..846473318e8b --- /dev/null +++ b/include/asm-arm/arch-l7200/debug-macro.S | |||
@@ -0,0 +1,40 @@ | |||
1 | /* linux/include/asm-arm/arch-l7200/debug-macro.S | ||
2 | * | ||
3 | * Debugging macro include header | ||
4 | * | ||
5 | * Copyright (C) 1994-1999 Russell King | ||
6 | * Moved from linux/arch/arm/kernel/debug.S by Ben Dooks | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | * | ||
12 | */ | ||
13 | |||
14 | .equ io_virt, IO_BASE | ||
15 | .equ io_phys, IO_START | ||
16 | |||
17 | .macro addruart,rx | ||
18 | mrc p15, 0, \rx, c1, c0 | ||
19 | tst \rx, #1 @ MMU enabled? | ||
20 | moveq \rx, #io_phys @ physical base address | ||
21 | movne \rx, #io_virt @ virtual address | ||
22 | add \rx, \rx, #0x00044000 @ UART1 | ||
23 | @ add \rx, \rx, #0x00045000 @ UART2 | ||
24 | .endm | ||
25 | |||
26 | .macro senduart,rd,rx | ||
27 | str \rd, [\rx, #0x0] @ UARTDR | ||
28 | .endm | ||
29 | |||
30 | .macro waituart,rd,rx | ||
31 | 1001: ldr \rd, [\rx, #0x18] @ UARTFLG | ||
32 | tst \rd, #1 << 5 @ UARTFLGUTXFF - 1 when full | ||
33 | bne 1001b | ||
34 | .endm | ||
35 | |||
36 | .macro busyuart,rd,rx | ||
37 | 1001: ldr \rd, [\rx, #0x18] @ UARTFLG | ||
38 | tst \rd, #1 << 3 @ UARTFLGUBUSY - 1 when busy | ||
39 | bne 1001b | ||
40 | .endm | ||
diff --git a/include/asm-arm/arch-l7200/dma.h b/include/asm-arm/arch-l7200/dma.h new file mode 100644 index 000000000000..6595b386cfc9 --- /dev/null +++ b/include/asm-arm/arch-l7200/dma.h | |||
@@ -0,0 +1,24 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-l7200/dma.h | ||
3 | * | ||
4 | * Copyright (C) 2000 Steve Hill (sjhill@cotw.com) | ||
5 | * | ||
6 | * Changelog: | ||
7 | * 08-29-2000 SJH Created | ||
8 | */ | ||
9 | #ifndef __ASM_ARCH_DMA_H | ||
10 | #define __ASM_ARCH_DMA_H | ||
11 | |||
12 | /* DMA is not yet implemented! It should be the same as acorn, copy over.. */ | ||
13 | |||
14 | /* | ||
15 | * This is the maximum DMA address that can be DMAd to. | ||
16 | * There should not be more than (0xd0000000 - 0xc0000000) | ||
17 | * bytes of RAM. | ||
18 | */ | ||
19 | #define MAX_DMA_ADDRESS 0xd0000000 | ||
20 | #define MAX_DMA_CHANNELS 0 | ||
21 | |||
22 | #define DMA_S0 0 | ||
23 | |||
24 | #endif /* _ASM_ARCH_DMA_H */ | ||
diff --git a/include/asm-arm/arch-l7200/entry-macro.S b/include/asm-arm/arch-l7200/entry-macro.S new file mode 100644 index 000000000000..8b6342dc4be2 --- /dev/null +++ b/include/asm-arm/arch-l7200/entry-macro.S | |||
@@ -0,0 +1,29 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-l7200/entry-macro.S | ||
3 | * | ||
4 | * Low-level IRQ helper macros for L7200-based platforms | ||
5 | * | ||
6 | * This file is licensed under the terms of the GNU General Public | ||
7 | * License version 2. This program is licensed "as is" without any | ||
8 | * warranty of any kind, whether express or implied. | ||
9 | */ | ||
10 | #include <asm/hardware.h> | ||
11 | |||
12 | .equ irq_base_addr, IO_BASE_2 | ||
13 | |||
14 | .macro disable_fiq | ||
15 | .endm | ||
16 | |||
17 | .macro get_irqnr_and_base, irqnr, irqstat, base, tmp | ||
18 | mov \irqstat, #irq_base_addr @ Virt addr IRQ regs | ||
19 | add \irqstat, \irqstat, #0x00001000 @ Status reg | ||
20 | ldr \irqstat, [\irqstat, #0] @ get interrupts | ||
21 | mov \irqnr, #0 | ||
22 | 1001: tst \irqstat, #1 | ||
23 | addeq \irqnr, \irqnr, #1 | ||
24 | moveq \irqstat, \irqstat, lsr #1 | ||
25 | tsteq \irqnr, #32 | ||
26 | beq 1001b | ||
27 | teq \irqnr, #32 | ||
28 | .endm | ||
29 | |||
diff --git a/include/asm-arm/arch-l7200/gp_timers.h b/include/asm-arm/arch-l7200/gp_timers.h new file mode 100644 index 000000000000..6f20962df248 --- /dev/null +++ b/include/asm-arm/arch-l7200/gp_timers.h | |||
@@ -0,0 +1,42 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-l7200/gp_timers.h | ||
3 | * | ||
4 | * Copyright (C) 2000 Steve Hill (sjhill@cotw.com) | ||
5 | * | ||
6 | * Changelog: | ||
7 | * 07-28-2000 SJH Created file | ||
8 | * 08-02-2000 SJH Used structure for registers | ||
9 | */ | ||
10 | #ifndef _ASM_ARCH_GPTIMERS_H | ||
11 | #define _ASM_ARCH_GPTIMERS_H | ||
12 | |||
13 | #include <asm/arch/hardware.h> | ||
14 | |||
15 | /* | ||
16 | * Layout of L7200 general purpose timer registers | ||
17 | */ | ||
18 | struct GPT_Regs { | ||
19 | unsigned int TIMERLOAD; | ||
20 | unsigned int TIMERVALUE; | ||
21 | unsigned int TIMERCONTROL; | ||
22 | unsigned int TIMERCLEAR; | ||
23 | }; | ||
24 | |||
25 | #define GPT_BASE (IO_BASE_2 + 0x3000) | ||
26 | #define l7200_timer1_regs ((volatile struct GPT_Regs *) (GPT_BASE)) | ||
27 | #define l7200_timer2_regs ((volatile struct GPT_Regs *) (GPT_BASE + 0x20)) | ||
28 | |||
29 | /* | ||
30 | * General register values | ||
31 | */ | ||
32 | #define GPT_PRESCALE_1 0x00000000 | ||
33 | #define GPT_PRESCALE_16 0x00000004 | ||
34 | #define GPT_PRESCALE_256 0x00000008 | ||
35 | #define GPT_MODE_FREERUN 0x00000000 | ||
36 | #define GPT_MODE_PERIODIC 0x00000040 | ||
37 | #define GPT_ENABLE 0x00000080 | ||
38 | #define GPT_BZTOG 0x00000100 | ||
39 | #define GPT_BZMOD 0x00000200 | ||
40 | #define GPT_LOAD_MASK 0x0000ffff | ||
41 | |||
42 | #endif | ||
diff --git a/include/asm-arm/arch-l7200/gpio.h b/include/asm-arm/arch-l7200/gpio.h new file mode 100644 index 000000000000..0b63e4239bdd --- /dev/null +++ b/include/asm-arm/arch-l7200/gpio.h | |||
@@ -0,0 +1,105 @@ | |||
1 | /****************************************************************************/ | ||
2 | /* | ||
3 | * linux/include/asm-arm/arch-l7200/gpio.h | ||
4 | * | ||
5 | * Registers and helper functions for the L7200 Link-Up Systems | ||
6 | * GPIO. | ||
7 | * | ||
8 | * (C) Copyright 2000, S A McConnell (samcconn@cotw.com) | ||
9 | * | ||
10 | * This file is subject to the terms and conditions of the GNU General Public | ||
11 | * License. See the file COPYING in the main directory of this archive for | ||
12 | * more details. | ||
13 | */ | ||
14 | |||
15 | /****************************************************************************/ | ||
16 | |||
17 | #define GPIO_OFF 0x00005000 /* Offset from IO_START to the GPIO reg's. */ | ||
18 | |||
19 | /* IO_START and IO_BASE are defined in hardware.h */ | ||
20 | |||
21 | #define GPIO_START (IO_START_2 + GPIO_OFF) /* Physical addr of the GPIO reg. */ | ||
22 | #define GPIO_BASE (IO_BASE_2 + GPIO_OFF) /* Virtual addr of the GPIO reg. */ | ||
23 | |||
24 | /* Offsets from the start of the GPIO for all the registers. */ | ||
25 | #define PADR_OFF 0x000 | ||
26 | #define PADDR_OFF 0x004 | ||
27 | #define PASBSR_OFF 0x008 | ||
28 | #define PAEENR_OFF 0x00c | ||
29 | #define PAESNR_OFF 0x010 | ||
30 | #define PAESTR_OFF 0x014 | ||
31 | #define PAIMR_OFF 0x018 | ||
32 | #define PAINT_OFF 0x01c | ||
33 | |||
34 | #define PBDR_OFF 0x020 | ||
35 | #define PBDDR_OFF 0x024 | ||
36 | #define PBSBSR_OFF 0x028 | ||
37 | #define PBIMR_OFF 0x038 | ||
38 | #define PBINT_OFF 0x03c | ||
39 | |||
40 | #define PCDR_OFF 0x040 | ||
41 | #define PCDDR_OFF 0x044 | ||
42 | #define PCSBSR_OFF 0x048 | ||
43 | #define PCIMR_OFF 0x058 | ||
44 | #define PCINT_OFF 0x05c | ||
45 | |||
46 | #define PDDR_OFF 0x060 | ||
47 | #define PDDDR_OFF 0x064 | ||
48 | #define PDSBSR_OFF 0x068 | ||
49 | #define PDEENR_OFF 0x06c | ||
50 | #define PDESNR_OFF 0x070 | ||
51 | #define PDESTR_OFF 0x074 | ||
52 | #define PDIMR_OFF 0x078 | ||
53 | #define PDINT_OFF 0x07c | ||
54 | |||
55 | #define PEDR_OFF 0x080 | ||
56 | #define PEDDR_OFF 0x084 | ||
57 | #define PESBSR_OFF 0x088 | ||
58 | #define PEEENR_OFF 0x08c | ||
59 | #define PEESNR_OFF 0x090 | ||
60 | #define PEESTR_OFF 0x094 | ||
61 | #define PEIMR_OFF 0x098 | ||
62 | #define PEINT_OFF 0x09c | ||
63 | |||
64 | /* Define the GPIO registers for use by device drivers and the kernel. */ | ||
65 | #define PADR (*(volatile unsigned long *)(GPIO_BASE+PADR_OFF)) | ||
66 | #define PADDR (*(volatile unsigned long *)(GPIO_BASE+PADDR_OFF)) | ||
67 | #define PASBSR (*(volatile unsigned long *)(GPIO_BASE+PASBSR_OFF)) | ||
68 | #define PAEENR (*(volatile unsigned long *)(GPIO_BASE+PAEENR_OFF)) | ||
69 | #define PAESNR (*(volatile unsigned long *)(GPIO_BASE+PAESNR_OFF)) | ||
70 | #define PAESTR (*(volatile unsigned long *)(GPIO_BASE+PAESTR_OFF)) | ||
71 | #define PAIMR (*(volatile unsigned long *)(GPIO_BASE+PAIMR_OFF)) | ||
72 | #define PAINT (*(volatile unsigned long *)(GPIO_BASE+PAINT_OFF)) | ||
73 | |||
74 | #define PBDR (*(volatile unsigned long *)(GPIO_BASE+PBDR_OFF)) | ||
75 | #define PBDDR (*(volatile unsigned long *)(GPIO_BASE+PBDDR_OFF)) | ||
76 | #define PBSBSR (*(volatile unsigned long *)(GPIO_BASE+PBSBSR_OFF)) | ||
77 | #define PBIMR (*(volatile unsigned long *)(GPIO_BASE+PBIMR_OFF)) | ||
78 | #define PBINT (*(volatile unsigned long *)(GPIO_BASE+PBINT_OFF)) | ||
79 | |||
80 | #define PCDR (*(volatile unsigned long *)(GPIO_BASE+PCDR_OFF)) | ||
81 | #define PCDDR (*(volatile unsigned long *)(GPIO_BASE+PCDDR_OFF)) | ||
82 | #define PCSBSR (*(volatile unsigned long *)(GPIO_BASE+PCSBSR_OFF)) | ||
83 | #define PCIMR (*(volatile unsigned long *)(GPIO_BASE+PCIMR_OFF)) | ||
84 | #define PCINT (*(volatile unsigned long *)(GPIO_BASE+PCINT_OFF)) | ||
85 | |||
86 | #define PDDR (*(volatile unsigned long *)(GPIO_BASE+PDDR_OFF)) | ||
87 | #define PDDDR (*(volatile unsigned long *)(GPIO_BASE+PDDDR_OFF)) | ||
88 | #define PDSBSR (*(volatile unsigned long *)(GPIO_BASE+PDSBSR_OFF)) | ||
89 | #define PDEENR (*(volatile unsigned long *)(GPIO_BASE+PDEENR_OFF)) | ||
90 | #define PDESNR (*(volatile unsigned long *)(GPIO_BASE+PDESNR_OFF)) | ||
91 | #define PDESTR (*(volatile unsigned long *)(GPIO_BASE+PDESTR_OFF)) | ||
92 | #define PDIMR (*(volatile unsigned long *)(GPIO_BASE+PDIMR_OFF)) | ||
93 | #define PDINT (*(volatile unsigned long *)(GPIO_BASE+PDINT_OFF)) | ||
94 | |||
95 | #define PEDR (*(volatile unsigned long *)(GPIO_BASE+PEDR_OFF)) | ||
96 | #define PEDDR (*(volatile unsigned long *)(GPIO_BASE+PEDDR_OFF)) | ||
97 | #define PESBSR (*(volatile unsigned long *)(GPIO_BASE+PESBSR_OFF)) | ||
98 | #define PEEENR (*(volatile unsigned long *)(GPIO_BASE+PEEENR_OFF)) | ||
99 | #define PEESNR (*(volatile unsigned long *)(GPIO_BASE+PEESNR_OFF)) | ||
100 | #define PEESTR (*(volatile unsigned long *)(GPIO_BASE+PEESTR_OFF)) | ||
101 | #define PEIMR (*(volatile unsigned long *)(GPIO_BASE+PEIMR_OFF)) | ||
102 | #define PEINT (*(volatile unsigned long *)(GPIO_BASE+PEINT_OFF)) | ||
103 | |||
104 | #define VEE_EN 0x02 | ||
105 | #define BACKLIGHT_EN 0x04 | ||
diff --git a/include/asm-arm/arch-l7200/hardware.h b/include/asm-arm/arch-l7200/hardware.h new file mode 100644 index 000000000000..b755079befab --- /dev/null +++ b/include/asm-arm/arch-l7200/hardware.h | |||
@@ -0,0 +1,60 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-l7200/hardware.h | ||
3 | * | ||
4 | * Copyright (C) 2000 Rob Scott (rscott@mtrob.fdns.net) | ||
5 | * Steve Hill (sjhill@cotw.com) | ||
6 | * | ||
7 | * This file contains the hardware definitions for the | ||
8 | * LinkUp Systems L7200 SOC development board. | ||
9 | * | ||
10 | * Changelog: | ||
11 | * 02-01-2000 RS Created L7200 version, derived from rpc code | ||
12 | * 03-21-2000 SJH Cleaned up file | ||
13 | * 04-21-2000 RS Changed mapping of I/O in virtual space | ||
14 | * 04-25-2000 SJH Removed unused symbols and such | ||
15 | * 05-05-2000 SJH Complete rewrite | ||
16 | * 07-31-2000 SJH Added undocumented debug auxillary port to | ||
17 | * get at last two columns for keyboard driver | ||
18 | */ | ||
19 | #ifndef __ASM_ARCH_HARDWARE_H | ||
20 | #define __ASM_ARCH_HARDWARE_H | ||
21 | |||
22 | /* Hardware addresses of major areas. | ||
23 | * *_START is the physical address | ||
24 | * *_SIZE is the size of the region | ||
25 | * *_BASE is the virtual address | ||
26 | */ | ||
27 | #define RAM_START 0xf0000000 | ||
28 | #define RAM_SIZE 0x02000000 | ||
29 | #define RAM_BASE 0xc0000000 | ||
30 | |||
31 | #define IO_START 0x80000000 /* I/O */ | ||
32 | #define IO_SIZE 0x01000000 | ||
33 | #define IO_BASE 0xd0000000 | ||
34 | |||
35 | #define IO_START_2 0x90000000 /* I/O */ | ||
36 | #define IO_SIZE_2 0x01000000 | ||
37 | #define IO_BASE_2 0xd1000000 | ||
38 | |||
39 | #define AUX_START 0x1a000000 /* AUX PORT */ | ||
40 | #define AUX_SIZE 0x01000000 | ||
41 | #define AUX_BASE 0xd2000000 | ||
42 | |||
43 | #define FLASH1_START 0x00000000 /* FLASH BANK 1 */ | ||
44 | #define FLASH1_SIZE 0x01000000 | ||
45 | #define FLASH1_BASE 0xd3000000 | ||
46 | |||
47 | #define FLASH2_START 0x10000000 /* FLASH BANK 2 */ | ||
48 | #define FLASH2_SIZE 0x01000000 | ||
49 | #define FLASH2_BASE 0xd4000000 | ||
50 | |||
51 | #define ISA_START 0x20000000 /* ISA */ | ||
52 | #define ISA_SIZE 0x20000000 | ||
53 | #define ISA_BASE 0xe0000000 | ||
54 | |||
55 | #define FLUSH_BASE_PHYS 0x40000000 /* ROM */ | ||
56 | #define FLUSH_BASE 0xdf000000 | ||
57 | |||
58 | #define PCIO_BASE IO_BASE | ||
59 | |||
60 | #endif | ||
diff --git a/include/asm-arm/arch-l7200/io.h b/include/asm-arm/arch-l7200/io.h new file mode 100644 index 000000000000..fc012a39e2cb --- /dev/null +++ b/include/asm-arm/arch-l7200/io.h | |||
@@ -0,0 +1,76 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-l7200/io.h | ||
3 | * | ||
4 | * Copyright (C) 2000 Steve Hill (sjhill@cotw.com) | ||
5 | * | ||
6 | * Changelog: | ||
7 | * 03-21-2000 SJH Created from linux/include/asm-arm/arch-nexuspci/io.h | ||
8 | * 08-31-2000 SJH Added in IO functions necessary for new drivers | ||
9 | */ | ||
10 | #ifndef __ASM_ARM_ARCH_IO_H | ||
11 | #define __ASM_ARM_ARCH_IO_H | ||
12 | |||
13 | #include <asm/arch/hardware.h> | ||
14 | |||
15 | #define IO_SPACE_LIMIT 0xffffffff | ||
16 | |||
17 | /* | ||
18 | * There are not real ISA nor PCI buses, so we fake it. | ||
19 | */ | ||
20 | #define __io_pci(a) ((void __iomem *)(PCIO_BASE + (a))) | ||
21 | #define __mem_pci(a) (a) | ||
22 | #define __mem_isa(a) (a) | ||
23 | |||
24 | #define __ioaddr(p) __io_pci(p) | ||
25 | |||
26 | /* | ||
27 | * Generic virtual read/write | ||
28 | */ | ||
29 | #define __arch_getb(a) (*(volatile unsigned char *)(a)) | ||
30 | #define __arch_getl(a) (*(volatile unsigned int *)(a)) | ||
31 | |||
32 | static inline unsigned int __arch_getw(unsigned long a) | ||
33 | { | ||
34 | unsigned int value; | ||
35 | __asm__ __volatile__("ldr%?h %0, [%1, #0] @ getw" | ||
36 | : "=&r" (value) | ||
37 | : "r" (a)); | ||
38 | return value; | ||
39 | } | ||
40 | |||
41 | #define __arch_putb(v,a) (*(volatile unsigned char *)(a) = (v)) | ||
42 | #define __arch_putl(v,a) (*(volatile unsigned int *)(a) = (v)) | ||
43 | |||
44 | static inline void __arch_putw(unsigned int value, unsigned long a) | ||
45 | { | ||
46 | __asm__ __volatile__("str%?h %0, [%1, #0] @ putw" | ||
47 | : : "r" (value), "r" (a)); | ||
48 | } | ||
49 | |||
50 | /* | ||
51 | * Translated address IO functions | ||
52 | * | ||
53 | * IO address has already been translated to a virtual address | ||
54 | */ | ||
55 | #define outb_t(v,p) (*(volatile unsigned char *)(p) = (v)) | ||
56 | #define inb_t(p) (*(volatile unsigned char *)(p)) | ||
57 | #define outw_t(v,p) (*(volatile unsigned int *)(p) = (v)) | ||
58 | #define inw_t(p) (*(volatile unsigned int *)(p)) | ||
59 | #define outl_t(v,p) (*(volatile unsigned long *)(p) = (v)) | ||
60 | #define inl_t(p) (*(volatile unsigned long *)(p)) | ||
61 | |||
62 | /* | ||
63 | * FIXME - These are to allow for linking. On all the other | ||
64 | * ARM platforms, the entire IO space is contiguous. | ||
65 | * The 7200 has three separate IO spaces. The below | ||
66 | * macros will eventually become more involved. Use | ||
67 | * with caution and don't be surprised by kernel oopses!!! | ||
68 | */ | ||
69 | #define inb(p) inb_t(p) | ||
70 | #define inw(p) inw_t(p) | ||
71 | #define inl(p) inl_t(p) | ||
72 | #define outb(v,p) outb_t(v,p) | ||
73 | #define outw(v,p) outw_t(v,p) | ||
74 | #define outl(v,p) outl_t(v,p) | ||
75 | |||
76 | #endif | ||
diff --git a/include/asm-arm/arch-l7200/irqs.h b/include/asm-arm/arch-l7200/irqs.h new file mode 100644 index 000000000000..7120c016e29e --- /dev/null +++ b/include/asm-arm/arch-l7200/irqs.h | |||
@@ -0,0 +1,56 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-l7200/irqs.h | ||
3 | * | ||
4 | * Copyright (C) 2000 Rob Scott (rscott@mtrob.fdns.net) | ||
5 | * Steve Hill (sjhill@cotw.com) | ||
6 | * | ||
7 | * Changelog: | ||
8 | * 01-02-2000 RS Create l7200 version | ||
9 | * 03-28-2000 SJH Removed unused interrupt | ||
10 | * 07-28-2000 SJH Added pseudo-keyboard interrupt | ||
11 | */ | ||
12 | |||
13 | /* | ||
14 | * NOTE: The second timer (Timer 2) is used as the keyboard | ||
15 | * interrupt when the keyboard driver is enabled. | ||
16 | */ | ||
17 | |||
18 | #define NR_IRQS 32 | ||
19 | |||
20 | #define IRQ_STWDOG 0 /* Watchdog timer */ | ||
21 | #define IRQ_PROG 1 /* Programmable interrupt */ | ||
22 | #define IRQ_DEBUG_RX 2 /* Comm Rx debug */ | ||
23 | #define IRQ_DEBUG_TX 3 /* Comm Tx debug */ | ||
24 | #define IRQ_GCTC1 4 /* Timer 1 */ | ||
25 | #define IRQ_GCTC2 5 /* Timer 2 / Keyboard */ | ||
26 | #define IRQ_DMA 6 /* DMA controller */ | ||
27 | #define IRQ_CLCD 7 /* Color LCD controller */ | ||
28 | #define IRQ_SM_RX 8 /* Smart card */ | ||
29 | #define IRQ_SM_TX 9 /* Smart cart */ | ||
30 | #define IRQ_SM_RST 10 /* Smart card */ | ||
31 | #define IRQ_SIB 11 /* Serial Interface Bus */ | ||
32 | #define IRQ_MMC 12 /* MultiMediaCard */ | ||
33 | #define IRQ_SSP1 13 /* Synchronous Serial Port 1 */ | ||
34 | #define IRQ_SSP2 14 /* Synchronous Serial Port 1 */ | ||
35 | #define IRQ_SPI 15 /* SPI slave */ | ||
36 | #define IRQ_UART_1 16 /* UART 1 */ | ||
37 | #define IRQ_UART_2 17 /* UART 2 */ | ||
38 | #define IRQ_IRDA 18 /* IRDA */ | ||
39 | #define IRQ_RTC_TICK 19 /* Real Time Clock tick */ | ||
40 | #define IRQ_RTC_ALARM 20 /* Real Time Clock alarm */ | ||
41 | #define IRQ_GPIO 21 /* General Purpose IO */ | ||
42 | #define IRQ_GPIO_DMA 22 /* General Purpose IO, DMA */ | ||
43 | #define IRQ_M2M 23 /* Memory to memory DMA */ | ||
44 | #define IRQ_RESERVED 24 /* RESERVED, don't use */ | ||
45 | #define IRQ_INTF 25 /* External active low interrupt */ | ||
46 | #define IRQ_INT0 26 /* External active low interrupt */ | ||
47 | #define IRQ_INT1 27 /* External active low interrupt */ | ||
48 | #define IRQ_INT2 28 /* External active low interrupt */ | ||
49 | #define IRQ_UCB1200 29 /* Interrupt generated by UCB1200*/ | ||
50 | #define IRQ_BAT_LO 30 /* Low batery or external power */ | ||
51 | #define IRQ_MEDIA_CHG 31 /* Media change interrupt */ | ||
52 | |||
53 | /* | ||
54 | * This is the offset of the FIQ "IRQ" numbers | ||
55 | */ | ||
56 | #define FIQ_START 64 | ||
diff --git a/include/asm-arm/arch-l7200/memory.h b/include/asm-arm/arch-l7200/memory.h new file mode 100644 index 000000000000..c5b9608cb137 --- /dev/null +++ b/include/asm-arm/arch-l7200/memory.h | |||
@@ -0,0 +1,23 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-l7200/memory.h | ||
3 | * | ||
4 | * Copyright (c) 2000 Steve Hill (sjhill@cotw.com) | ||
5 | * Copyright (c) 2000 Rob Scott (rscott@mtrob.fdns.net) | ||
6 | * | ||
7 | * Changelog: | ||
8 | * 03-13-2000 SJH Created | ||
9 | * 04-13-2000 RS Changed bus macros for new addr | ||
10 | * 05-03-2000 SJH Removed bus macros and fixed virt_to_phys macro | ||
11 | */ | ||
12 | #ifndef __ASM_ARCH_MEMORY_H | ||
13 | #define __ASM_ARCH_MEMORY_H | ||
14 | |||
15 | /* | ||
16 | * Physical DRAM offset on the L7200 SDB. | ||
17 | */ | ||
18 | #define PHYS_OFFSET (0xf0000000UL) | ||
19 | |||
20 | #define __virt_to_bus(x) __virt_to_phys(x) | ||
21 | #define __bus_to_virt(x) __phys_to_virt(x) | ||
22 | |||
23 | #endif | ||
diff --git a/include/asm-arm/arch-l7200/param.h b/include/asm-arm/arch-l7200/param.h new file mode 100644 index 000000000000..9962a12ab158 --- /dev/null +++ b/include/asm-arm/arch-l7200/param.h | |||
@@ -0,0 +1,19 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-l7200/param.h | ||
3 | * | ||
4 | * Copyright (C) 2000 Rob Scott (rscott@mtrob.fdns.net) | ||
5 | * Steve Hill (sjhill@cotw.com) | ||
6 | * | ||
7 | * This file contains the hardware definitions for the | ||
8 | * LinkUp Systems L7200 SOC development board. | ||
9 | * | ||
10 | * Changelog: | ||
11 | * 04-21-2000 RS Created L7200 version | ||
12 | * 04-25-2000 SJH Cleaned up file | ||
13 | * 05-03-2000 SJH Change comments and rate | ||
14 | */ | ||
15 | |||
16 | /* | ||
17 | * See 'time.h' for how the RTC HZ rate is set | ||
18 | */ | ||
19 | #define HZ 128 | ||
diff --git a/include/asm-arm/arch-l7200/pmpcon.h b/include/asm-arm/arch-l7200/pmpcon.h new file mode 100644 index 000000000000..730056c194be --- /dev/null +++ b/include/asm-arm/arch-l7200/pmpcon.h | |||
@@ -0,0 +1,46 @@ | |||
1 | /****************************************************************************/ | ||
2 | /* | ||
3 | * linux/include/asm-arm/arch-l7200/pmpcon.h | ||
4 | * | ||
5 | * Registers and helper functions for the L7200 Link-Up Systems | ||
6 | * DC/DC converter register. | ||
7 | * | ||
8 | * (C) Copyright 2000, S A McConnell (samcconn@cotw.com) | ||
9 | * | ||
10 | * This file is subject to the terms and conditions of the GNU General Public | ||
11 | * License. See the file COPYING in the main directory of this archive for | ||
12 | * more details. | ||
13 | */ | ||
14 | |||
15 | /****************************************************************************/ | ||
16 | |||
17 | #define PMPCON_OFF 0x00006000 /* Offset from IO_START_2. */ | ||
18 | |||
19 | /* IO_START_2 and IO_BASE_2 are defined in hardware.h */ | ||
20 | |||
21 | #define PMPCON_START (IO_START_2 + PMPCON_OFF) /* Physical address of reg. */ | ||
22 | #define PMPCON_BASE (IO_BASE_2 + PMPCON_OFF) /* Virtual address of reg. */ | ||
23 | |||
24 | |||
25 | #define PMPCON (*(volatile unsigned int *)(PMPCON_BASE)) | ||
26 | |||
27 | #define PWM2_50CYCLE 0x800 | ||
28 | #define CONTRAST 0x9 | ||
29 | |||
30 | #define PWM1H (CONTRAST) | ||
31 | #define PWM1L (CONTRAST << 4) | ||
32 | |||
33 | #define PMPCON_VALUE (PWM2_50CYCLE | PWM1L | PWM1H) | ||
34 | |||
35 | /* PMPCON = 0x811; // too light and fuzzy | ||
36 | * PMPCON = 0x844; | ||
37 | * PMPCON = 0x866; // better color poor depth | ||
38 | * PMPCON = 0x888; // Darker but better depth | ||
39 | * PMPCON = 0x899; // Darker even better depth | ||
40 | * PMPCON = 0x8aa; // too dark even better depth | ||
41 | * PMPCON = 0X8cc; // Way too dark | ||
42 | */ | ||
43 | |||
44 | /* As CONTRAST value increases the greater the depth perception and | ||
45 | * the darker the colors. | ||
46 | */ | ||
diff --git a/include/asm-arm/arch-l7200/pmu.h b/include/asm-arm/arch-l7200/pmu.h new file mode 100644 index 000000000000..57faea76d1b3 --- /dev/null +++ b/include/asm-arm/arch-l7200/pmu.h | |||
@@ -0,0 +1,125 @@ | |||
1 | /****************************************************************************/ | ||
2 | /* | ||
3 | * linux/include/asm-arm/arch-l7200/pmu.h | ||
4 | * | ||
5 | * Registers and helper functions for the L7200 Link-Up Systems | ||
6 | * Power Management Unit (PMU). | ||
7 | * | ||
8 | * (C) Copyright 2000, S A McConnell (samcconn@cotw.com) | ||
9 | * | ||
10 | * This file is subject to the terms and conditions of the GNU General Public | ||
11 | * License. See the file COPYING in the main directory of this archive for | ||
12 | * more details. | ||
13 | */ | ||
14 | |||
15 | /****************************************************************************/ | ||
16 | |||
17 | #define PMU_OFF 0x00050000 /* Offset from IO_START to the PMU registers. */ | ||
18 | |||
19 | /* IO_START and IO_BASE are defined in hardware.h */ | ||
20 | |||
21 | #define PMU_START (IO_START + PMU_OFF) /* Physical addr. of the PMU reg. */ | ||
22 | #define PMU_BASE (IO_BASE + PMU_OFF) /* Virtual addr. of the PMU reg. */ | ||
23 | |||
24 | |||
25 | /* Define the PMU registers for use by device drivers and the kernel. */ | ||
26 | |||
27 | typedef struct { | ||
28 | unsigned int CURRENT; /* Current configuration register */ | ||
29 | unsigned int NEXT; /* Next configuration register */ | ||
30 | unsigned int reserved; | ||
31 | unsigned int RUN; /* Run configuration register */ | ||
32 | unsigned int COMM; /* Configuration command register */ | ||
33 | unsigned int SDRAM; /* SDRAM configuration bypass register */ | ||
34 | } pmu_interface; | ||
35 | |||
36 | #define PMU ((volatile pmu_interface *)(PMU_BASE)) | ||
37 | |||
38 | |||
39 | /* Macro's for reading the common register fields. */ | ||
40 | |||
41 | #define GET_TRANSOP(reg) ((reg >> 25) & 0x03) /* Bits 26-25 */ | ||
42 | #define GET_OSCEN(reg) ((reg >> 16) & 0x01) | ||
43 | #define GET_OSCMUX(reg) ((reg >> 15) & 0x01) | ||
44 | #define GET_PLLMUL(reg) ((reg >> 9) & 0x3f) /* Bits 14-9 */ | ||
45 | #define GET_PLLEN(reg) ((reg >> 8) & 0x01) | ||
46 | #define GET_PLLMUX(reg) ((reg >> 7) & 0x01) | ||
47 | #define GET_BCLK_DIV(reg) ((reg >> 3) & 0x03) /* Bits 4-3 */ | ||
48 | #define GET_SDRB_SEL(reg) ((reg >> 2) & 0x01) | ||
49 | #define GET_SDRF_SEL(reg) ((reg >> 1) & 0x01) | ||
50 | #define GET_FASTBUS(reg) (reg & 0x1) | ||
51 | |||
52 | /* CFG_NEXT register */ | ||
53 | |||
54 | #define CFG_NEXT_CLOCKRECOVERY ((PMU->NEXT >> 18) & 0x7f) /* Bits 24-18 */ | ||
55 | #define CFG_NEXT_INTRET ((PMU->NEXT >> 17) & 0x01) | ||
56 | #define CFG_NEXT_SDR_STOP ((PMU->NEXT >> 6) & 0x01) | ||
57 | #define CFG_NEXT_SYSCLKEN ((PMU->NEXT >> 5) & 0x01) | ||
58 | |||
59 | /* Useful field values that can be used to construct the | ||
60 | * CFG_NEXT and CFG_RUN registers. | ||
61 | */ | ||
62 | |||
63 | #define TRANSOP_NOP 0<<25 /* NOCHANGE_NOSTALL */ | ||
64 | #define NOCHANGE_STALL 1<<25 | ||
65 | #define CHANGE_NOSTALL 2<<25 | ||
66 | #define CHANGE_STALL 3<<25 | ||
67 | |||
68 | #define INTRET 1<<17 | ||
69 | #define OSCEN 1<<16 | ||
70 | #define OSCMUX 1<<15 | ||
71 | |||
72 | /* PLL frequencies */ | ||
73 | |||
74 | #define PLLMUL_0 0<<9 /* 3.6864 MHz */ | ||
75 | #define PLLMUL_1 1<<9 /* ?????? MHz */ | ||
76 | #define PLLMUL_5 5<<9 /* 18.432 MHz */ | ||
77 | #define PLLMUL_10 10<<9 /* 36.864 MHz */ | ||
78 | #define PLLMUL_18 18<<9 /* ?????? MHz */ | ||
79 | #define PLLMUL_20 20<<9 /* 73.728 MHz */ | ||
80 | #define PLLMUL_32 32<<9 /* ?????? MHz */ | ||
81 | #define PLLMUL_35 35<<9 /* 129.024 MHz */ | ||
82 | #define PLLMUL_36 36<<9 /* ?????? MHz */ | ||
83 | #define PLLMUL_39 39<<9 /* ?????? MHz */ | ||
84 | #define PLLMUL_40 40<<9 /* 147.456 MHz */ | ||
85 | |||
86 | /* Clock recovery times */ | ||
87 | |||
88 | #define CRCLOCK_1 1<<18 | ||
89 | #define CRCLOCK_2 2<<18 | ||
90 | #define CRCLOCK_4 4<<18 | ||
91 | #define CRCLOCK_8 8<<18 | ||
92 | #define CRCLOCK_16 16<<18 | ||
93 | #define CRCLOCK_32 32<<18 | ||
94 | #define CRCLOCK_63 63<<18 | ||
95 | #define CRCLOCK_127 127<<18 | ||
96 | |||
97 | #define PLLEN 1<<8 | ||
98 | #define PLLMUX 1<<7 | ||
99 | #define SDR_STOP 1<<6 | ||
100 | #define SYSCLKEN 1<<5 | ||
101 | |||
102 | #define BCLK_DIV_4 2<<3 | ||
103 | #define BCLK_DIV_2 1<<3 | ||
104 | #define BCLK_DIV_1 0<<3 | ||
105 | |||
106 | #define SDRB_SEL 1<<2 | ||
107 | #define SDRF_SEL 1<<1 | ||
108 | #define FASTBUS 1<<0 | ||
109 | |||
110 | |||
111 | /* CFG_SDRAM */ | ||
112 | |||
113 | #define SDRREFFQ 1<<0 /* Only if SDRSTOPRQ is not set. */ | ||
114 | #define SDRREFACK 1<<1 /* Read-only */ | ||
115 | #define SDRSTOPRQ 1<<2 /* Only if SDRREFFQ is not set. */ | ||
116 | #define SDRSTOPACK 1<<3 /* Read-only */ | ||
117 | #define PICEN 1<<4 /* Enable Co-procesor */ | ||
118 | #define PICTEST 1<<5 | ||
119 | |||
120 | #define GET_SDRREFFQ ((PMU->SDRAM >> 0) & 0x01) | ||
121 | #define GET_SDRREFACK ((PMU->SDRAM >> 1) & 0x01) /* Read-only */ | ||
122 | #define GET_SDRSTOPRQ ((PMU->SDRAM >> 2) & 0x01) | ||
123 | #define GET_SDRSTOPACK ((PMU->SDRAM >> 3) & 0x01) /* Read-only */ | ||
124 | #define GET_PICEN ((PMU->SDRAM >> 4) & 0x01) | ||
125 | #define GET_PICTEST ((PMU->SDRAM >> 5) & 0x01) | ||
diff --git a/include/asm-arm/arch-l7200/serial.h b/include/asm-arm/arch-l7200/serial.h new file mode 100644 index 000000000000..defb8b7fca73 --- /dev/null +++ b/include/asm-arm/arch-l7200/serial.h | |||
@@ -0,0 +1,37 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-l7200/serial.h | ||
3 | * | ||
4 | * Copyright (c) 2000 Rob Scott (rscott@mtrob.fdns.net) | ||
5 | * Steve Hill (sjhill@cotw.com) | ||
6 | * | ||
7 | * Changelog: | ||
8 | * 03-20-2000 SJH Created | ||
9 | * 03-26-2000 SJH Added flags for serial ports | ||
10 | * 03-27-2000 SJH Corrected BASE_BAUD value | ||
11 | * 04-14-2000 RS Made register addr dependent on IO_BASE | ||
12 | * 05-03-2000 SJH Complete rewrite | ||
13 | * 05-09-2000 SJH Stripped out architecture specific serial stuff | ||
14 | * and placed it in a separate file | ||
15 | * 07-28-2000 SJH Moved base baud rate variable | ||
16 | */ | ||
17 | #ifndef __ASM_ARCH_SERIAL_H | ||
18 | #define __ASM_ARCH_SERIAL_H | ||
19 | |||
20 | /* | ||
21 | * This assumes you have a 3.6864 MHz clock for your UART. | ||
22 | */ | ||
23 | #define BASE_BAUD 3686400 | ||
24 | |||
25 | /* | ||
26 | * Standard COM flags | ||
27 | */ | ||
28 | #define STD_COM_FLAGS (ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST) | ||
29 | |||
30 | #define STD_SERIAL_PORT_DEFNS \ | ||
31 | /* MAGIC UART CLK PORT IRQ FLAGS */ \ | ||
32 | { 0, BASE_BAUD, UART1_BASE, IRQ_UART_1, STD_COM_FLAGS }, /* ttyLU0 */ \ | ||
33 | { 0, BASE_BAUD, UART2_BASE, IRQ_UART_2, STD_COM_FLAGS }, /* ttyLU1 */ \ | ||
34 | |||
35 | #define EXTRA_SERIAL_PORT_DEFNS | ||
36 | |||
37 | #endif | ||
diff --git a/include/asm-arm/arch-l7200/serial_l7200.h b/include/asm-arm/arch-l7200/serial_l7200.h new file mode 100644 index 000000000000..238c595d97ea --- /dev/null +++ b/include/asm-arm/arch-l7200/serial_l7200.h | |||
@@ -0,0 +1,101 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-l7200/serial_l7200.h | ||
3 | * | ||
4 | * Copyright (c) 2000 Steven Hill (sjhill@cotw.com) | ||
5 | * | ||
6 | * Changelog: | ||
7 | * 05-09-2000 SJH Created | ||
8 | */ | ||
9 | #ifndef __ASM_ARCH_SERIAL_L7200_H | ||
10 | #define __ASM_ARCH_SERIAL_L7200_H | ||
11 | |||
12 | #include <asm/arch/memory.h> | ||
13 | |||
14 | /* | ||
15 | * This assumes you have a 3.6864 MHz clock for your UART. | ||
16 | */ | ||
17 | #define BASE_BAUD 3686400 | ||
18 | |||
19 | /* | ||
20 | * UART base register addresses | ||
21 | */ | ||
22 | #define UART1_BASE (IO_BASE + 0x00044000) | ||
23 | #define UART2_BASE (IO_BASE + 0x00045000) | ||
24 | |||
25 | /* | ||
26 | * UART register offsets | ||
27 | */ | ||
28 | #define UARTDR 0x00 /* Tx/Rx data */ | ||
29 | #define RXSTAT 0x04 /* Rx status */ | ||
30 | #define H_UBRLCR 0x08 /* mode register high */ | ||
31 | #define M_UBRLCR 0x0C /* mode reg mid (MSB of buad)*/ | ||
32 | #define L_UBRLCR 0x10 /* mode reg low (LSB of baud)*/ | ||
33 | #define UARTCON 0x14 /* control register */ | ||
34 | #define UARTFLG 0x18 /* flag register */ | ||
35 | #define UARTINTSTAT 0x1C /* FIFO IRQ status register */ | ||
36 | #define UARTINTMASK 0x20 /* FIFO IRQ mask register */ | ||
37 | |||
38 | /* | ||
39 | * UART baud rate register values | ||
40 | */ | ||
41 | #define BR_110 0x827 | ||
42 | #define BR_1200 0x06e | ||
43 | #define BR_2400 0x05f | ||
44 | #define BR_4800 0x02f | ||
45 | #define BR_9600 0x017 | ||
46 | #define BR_14400 0x00f | ||
47 | #define BR_19200 0x00b | ||
48 | #define BR_38400 0x005 | ||
49 | #define BR_57600 0x003 | ||
50 | #define BR_76800 0x002 | ||
51 | #define BR_115200 0x001 | ||
52 | |||
53 | /* | ||
54 | * Receiver status register (RXSTAT) mask values | ||
55 | */ | ||
56 | #define RXSTAT_NO_ERR 0x00 /* No error */ | ||
57 | #define RXSTAT_FRM_ERR 0x01 /* Framing error */ | ||
58 | #define RXSTAT_PAR_ERR 0x02 /* Parity error */ | ||
59 | #define RXSTAT_OVR_ERR 0x04 /* Overrun error */ | ||
60 | |||
61 | /* | ||
62 | * High byte of UART bit rate and line control register (H_UBRLCR) values | ||
63 | */ | ||
64 | #define UBRLCR_BRK 0x01 /* generate break on tx */ | ||
65 | #define UBRLCR_PEN 0x02 /* enable parity */ | ||
66 | #define UBRLCR_PDIS 0x00 /* disable parity */ | ||
67 | #define UBRLCR_EVEN 0x04 /* 1= even parity,0 = odd parity */ | ||
68 | #define UBRLCR_STP2 0x08 /* transmit 2 stop bits */ | ||
69 | #define UBRLCR_FIFO 0x10 /* enable FIFO */ | ||
70 | #define UBRLCR_LEN5 0x60 /* word length5 */ | ||
71 | #define UBRLCR_LEN6 0x40 /* word length6 */ | ||
72 | #define UBRLCR_LEN7 0x20 /* word length7 */ | ||
73 | #define UBRLCR_LEN8 0x00 /* word length8 */ | ||
74 | |||
75 | /* | ||
76 | * UART control register (UARTCON) values | ||
77 | */ | ||
78 | #define UARTCON_UARTEN 0x01 /* Enable UART */ | ||
79 | #define UARTCON_DMAONERR 0x08 /* Mask RxDmaRq when errors occur */ | ||
80 | |||
81 | /* | ||
82 | * UART flag register (UARTFLG) mask values | ||
83 | */ | ||
84 | #define UARTFLG_UTXFF 0x20 /* Transmit FIFO full */ | ||
85 | #define UARTFLG_URXFE 0x10 /* Receiver FIFO empty */ | ||
86 | #define UARTFLG_UBUSY 0x08 /* Transmitter busy */ | ||
87 | #define UARTFLG_DCD 0x04 /* Data carrier detect */ | ||
88 | #define UARTFLG_DSR 0x02 /* Data set ready */ | ||
89 | #define UARTFLG_CTS 0x01 /* Clear to send */ | ||
90 | |||
91 | /* | ||
92 | * UART interrupt status/clear registers (UARTINTSTAT/CLR) values | ||
93 | */ | ||
94 | #define UART_TXINT 0x01 /* TX interrupt */ | ||
95 | #define UART_RXINT 0x02 /* RX interrupt */ | ||
96 | #define UART_RXERRINT 0x04 /* RX error interrupt */ | ||
97 | #define UART_MSINT 0x08 /* Modem Status interrupt */ | ||
98 | #define UART_UDINT 0x10 /* UART Disabled interrupt */ | ||
99 | #define UART_ALLIRQS 0x1f /* All interrupts */ | ||
100 | |||
101 | #endif | ||
diff --git a/include/asm-arm/arch-l7200/sib.h b/include/asm-arm/arch-l7200/sib.h new file mode 100644 index 000000000000..bf4364ee2535 --- /dev/null +++ b/include/asm-arm/arch-l7200/sib.h | |||
@@ -0,0 +1,119 @@ | |||
1 | /****************************************************************************/ | ||
2 | /* | ||
3 | * linux/include/asm-arm/arch-l7200/sib.h | ||
4 | * | ||
5 | * Registers and helper functions for the Serial Interface Bus. | ||
6 | * | ||
7 | * (C) Copyright 2000, S A McConnell (samcconn@cotw.com) | ||
8 | * | ||
9 | * This file is subject to the terms and conditions of the GNU General Public | ||
10 | * License. See the file COPYING in the main directory of this archive for | ||
11 | * more details. | ||
12 | */ | ||
13 | |||
14 | /****************************************************************************/ | ||
15 | |||
16 | #define SIB_OFF 0x00040000 /* Offset from IO_START to the SIB reg's. */ | ||
17 | |||
18 | /* IO_START and IO_BASE are defined in hardware.h */ | ||
19 | |||
20 | #define SIB_START (IO_START + SIB_OFF) /* Physical addr of the SIB reg. */ | ||
21 | #define SIB_BASE (IO_BASE + SIB_OFF) /* Virtual addr of the SIB reg. */ | ||
22 | |||
23 | /* Offsets from the start of the SIB for all the registers. */ | ||
24 | |||
25 | /* Define the SIB registers for use by device drivers and the kernel. */ | ||
26 | |||
27 | typedef struct | ||
28 | { | ||
29 | unsigned int MCCR; /* SIB Control Register Offset: 0x00 */ | ||
30 | unsigned int RES1; /* Reserved Offset: 0x04 */ | ||
31 | unsigned int MCDR0; /* SIB Data Register 0 Offset: 0x08 */ | ||
32 | unsigned int MCDR1; /* SIB Data Register 1 Offset: 0x0c */ | ||
33 | unsigned int MCDR2; /* SIB Data Register 2 (UCB1x00) Offset: 0x10 */ | ||
34 | unsigned int RES2; /* Reserved Offset: 0x14 */ | ||
35 | unsigned int MCSR; /* SIB Status Register Offset: 0x18 */ | ||
36 | } SIB_Interface; | ||
37 | |||
38 | #define SIB ((volatile SIB_Interface *) (SIB_BASE)) | ||
39 | |||
40 | /* MCCR */ | ||
41 | |||
42 | #define INTERNAL_FREQ 9216000 /* Hertz */ | ||
43 | #define AUDIO_FREQ 5000 /* Hertz */ | ||
44 | #define TELECOM_FREQ 5000 /* Hertz */ | ||
45 | |||
46 | #define AUDIO_DIVIDE (INTERNAL_FREQ / (32 * AUDIO_FREQ)) | ||
47 | #define TELECOM_DIVIDE (INTERNAL_FREQ / (32 * TELECOM_FREQ)) | ||
48 | |||
49 | #define MCCR_ASD57 AUDIO_DIVIDE | ||
50 | #define MCCR_TSD57 (TELECOM_DIVIDE << 8) | ||
51 | #define MCCR_MCE (1 << 16) /* SIB enable */ | ||
52 | #define MCCR_ECS (1 << 17) /* External Clock Select */ | ||
53 | #define MCCR_ADM (1 << 18) /* A/D Data Sampling */ | ||
54 | #define MCCR_PMC (1 << 26) /* PIN Multiplexer Control */ | ||
55 | |||
56 | |||
57 | #define GET_ASD ((SIB->MCCR >> 0) & 0x3f) /* Audio Sample Rate Div. */ | ||
58 | #define GET_TSD ((SIB->MCCR >> 8) & 0x3f) /* Telcom Sample Rate Div. */ | ||
59 | #define GET_MCE ((SIB->MCCR >> 16) & 0x01) /* SIB Enable */ | ||
60 | #define GET_ECS ((SIB->MCCR >> 17) & 0x01) /* External Clock Select */ | ||
61 | #define GET_ADM ((SIB->MCCR >> 18) & 0x01) /* A/D Data Sampling Mode */ | ||
62 | #define GET_TTM ((SIB->MCCR >> 19) & 0x01) /* Telco Trans. FIFO I mask */ | ||
63 | #define GET_TRM ((SIB->MCCR >> 20) & 0x01) /* Telco Recv. FIFO I mask */ | ||
64 | #define GET_ATM ((SIB->MCCR >> 21) & 0x01) /* Audio Trans. FIFO I mask */ | ||
65 | #define GET_ARM ((SIB->MCCR >> 22) & 0x01) /* Audio Recv. FIFO I mask */ | ||
66 | #define GET_LBM ((SIB->MCCR >> 23) & 0x01) /* Loop Back Mode */ | ||
67 | #define GET_ECP ((SIB->MCCR >> 24) & 0x03) /* Extern. Clck Prescale sel */ | ||
68 | #define GET_PMC ((SIB->MCCR >> 26) & 0x01) /* PIN Multiplexer Control */ | ||
69 | #define GET_ERI ((SIB->MCCR >> 27) & 0x01) /* External Read Interrupt */ | ||
70 | #define GET_EWI ((SIB->MCCR >> 28) & 0x01) /* External Write Interrupt */ | ||
71 | |||
72 | /* MCDR0 */ | ||
73 | |||
74 | #define AUDIO_RECV ((SIB->MCDR0 >> 4) & 0xfff) | ||
75 | #define AUDIO_WRITE(v) ((SIB->MCDR0 = (v & 0xfff) << 4)) | ||
76 | |||
77 | /* MCDR1 */ | ||
78 | |||
79 | #define TELECOM_RECV ((SIB->MCDR1 >> 2) & 032fff) | ||
80 | #define TELECOM_WRITE(v) ((SIB->MCDR1 = (v & 0x3fff) << 2)) | ||
81 | |||
82 | |||
83 | /* MCSR */ | ||
84 | |||
85 | #define MCSR_ATU (1 << 4) /* Audio Transmit FIFO Underrun */ | ||
86 | #define MCSR_ARO (1 << 5) /* Audio Receive FIFO Underrun */ | ||
87 | #define MCSR_TTU (1 << 6) /* TELECOM Transmit FIFO Underrun */ | ||
88 | #define MCSR_TRO (1 << 7) /* TELECOM Receive FIFO Underrun */ | ||
89 | |||
90 | #define MCSR_CLEAR_UNDERUN_BITS (MCSR_ATU | MCSR_ARO | MCSR_TTU | MCSR_TRO) | ||
91 | |||
92 | |||
93 | #define GET_ATS ((SIB->MCSR >> 0) & 0x01) /* Audio Transmit FIFO Service Req*/ | ||
94 | #define GET_ARS ((SIB->MCSR >> 1) & 0x01) /* Audio Recv FIFO Service Request*/ | ||
95 | #define GET_TTS ((SIB->MCSR >> 2) & 0x01) /* TELECOM Transmit FIFO Flag */ | ||
96 | #define GET_TRS ((SIB->MCSR >> 3) & 0x01) /* TELECOM Recv FIFO Service Req. */ | ||
97 | #define GET_ATU ((SIB->MCSR >> 4) & 0x01) /* Audio Transmit FIFO Underrun */ | ||
98 | #define GET_ARO ((SIB->MCSR >> 5) & 0x01) /* Audio Receive FIFO Underrun */ | ||
99 | #define GET_TTU ((SIB->MCSR >> 6) & 0x01) /* TELECOM Transmit FIFO Underrun */ | ||
100 | #define GET_TRO ((SIB->MCSR >> 7) & 0x01) /* TELECOM Receive FIFO Underrun */ | ||
101 | #define GET_ANF ((SIB->MCSR >> 8) & 0x01) /* Audio Transmit FIFO not full */ | ||
102 | #define GET_ANE ((SIB->MCSR >> 9) & 0x01) /* Audio Receive FIFO not empty */ | ||
103 | #define GET_TNF ((SIB->MCSR >> 10) & 0x01) /* Telecom Transmit FIFO not full */ | ||
104 | #define GET_TNE ((SIB->MCSR >> 11) & 0x01) /* Telecom Receive FIFO not empty */ | ||
105 | #define GET_CWC ((SIB->MCSR >> 12) & 0x01) /* Codec Write Complete */ | ||
106 | #define GET_CRC ((SIB->MCSR >> 13) & 0x01) /* Codec Read Complete */ | ||
107 | #define GET_ACE ((SIB->MCSR >> 14) & 0x01) /* Audio Codec Enabled */ | ||
108 | #define GET_TCE ((SIB->MCSR >> 15) & 0x01) /* Telecom Codec Enabled */ | ||
109 | |||
110 | /* MCDR2 */ | ||
111 | |||
112 | #define MCDR2_rW (1 << 16) | ||
113 | |||
114 | #define WRITE_MCDR2(reg, data) (SIB->MCDR2 =((reg<<17)|MCDR2_rW|(data&0xffff))) | ||
115 | #define MCDR2_WRITE_COMPLETE GET_CWC | ||
116 | |||
117 | #define INITIATE_MCDR2_READ(reg) (SIB->MCDR2 = (reg << 17)) | ||
118 | #define MCDR2_READ_COMPLETE GET_CRC | ||
119 | #define MCDR2_READ (SIB->MCDR2 & 0xffff) | ||
diff --git a/include/asm-arm/arch-l7200/sys-clock.h b/include/asm-arm/arch-l7200/sys-clock.h new file mode 100644 index 000000000000..771c774f4815 --- /dev/null +++ b/include/asm-arm/arch-l7200/sys-clock.h | |||
@@ -0,0 +1,67 @@ | |||
1 | /****************************************************************************/ | ||
2 | /* | ||
3 | * linux/include/asm-arm/arch-l7200/sys-clock.h | ||
4 | * | ||
5 | * Registers and helper functions for the L7200 Link-Up Systems | ||
6 | * System clocks. | ||
7 | * | ||
8 | * (C) Copyright 2000, S A McConnell (samcconn@cotw.com) | ||
9 | * | ||
10 | * This file is subject to the terms and conditions of the GNU General Public | ||
11 | * License. See the file COPYING in the main directory of this archive for | ||
12 | * more details. | ||
13 | */ | ||
14 | |||
15 | /****************************************************************************/ | ||
16 | |||
17 | #define SYS_CLOCK_OFF 0x00050030 /* Offset from IO_START. */ | ||
18 | |||
19 | /* IO_START and IO_BASE are defined in hardware.h */ | ||
20 | |||
21 | #define SYS_CLOCK_START (IO_START + SYS_CLCOK_OFF) /* Physical address */ | ||
22 | #define SYS_CLOCK_BASE (IO_BASE + SYS_CLOCK_OFF) /* Virtual address */ | ||
23 | |||
24 | /* Define the interface to the SYS_CLOCK */ | ||
25 | |||
26 | typedef struct | ||
27 | { | ||
28 | unsigned int ENABLE; | ||
29 | unsigned int ESYNC; | ||
30 | unsigned int SELECT; | ||
31 | } sys_clock_interface; | ||
32 | |||
33 | #define SYS_CLOCK ((volatile sys_clock_interface *)(SYS_CLOCK_BASE)) | ||
34 | |||
35 | //#define CLOCK_EN (*(volatile unsigned long *)(PMU_BASE+CLOCK_EN_OFF)) | ||
36 | //#define CLOCK_ESYNC (*(volatile unsigned long *)(PMU_BASE+CLOCK_ESYNC_OFF)) | ||
37 | //#define CLOCK_SEL (*(volatile unsigned long *)(PMU_BASE+CLOCK_SEL_OFF)) | ||
38 | |||
39 | /* SYS_CLOCK -> ENABLE */ | ||
40 | |||
41 | #define SYN_EN 1<<0 | ||
42 | #define B18M_EN 1<<1 | ||
43 | #define CLK3M6_EN 1<<2 | ||
44 | #define BUART_EN 1<<3 | ||
45 | #define CLK18MU_EN 1<<4 | ||
46 | #define FIR_EN 1<<5 | ||
47 | #define MIRN_EN 1<<6 | ||
48 | #define UARTM_EN 1<<7 | ||
49 | #define SIBADC_EN 1<<8 | ||
50 | #define ALTD_EN 1<<9 | ||
51 | #define CLCLK_EN 1<<10 | ||
52 | |||
53 | /* SYS_CLOCK -> SELECT */ | ||
54 | |||
55 | #define CLK18M_DIV 1<<0 | ||
56 | #define MIR_SEL 1<<1 | ||
57 | #define SSP_SEL 1<<4 | ||
58 | #define MM_DIV 1<<5 | ||
59 | #define MM_SEL 1<<6 | ||
60 | #define ADC_SEL_2 0<<7 | ||
61 | #define ADC_SEL_4 1<<7 | ||
62 | #define ADC_SEL_8 3<<7 | ||
63 | #define ADC_SEL_16 7<<7 | ||
64 | #define ADC_SEL_32 0x0f<<7 | ||
65 | #define ADC_SEL_64 0x1f<<7 | ||
66 | #define ADC_SEL_128 0x3f<<7 | ||
67 | #define ALTD_SEL 1<<13 | ||
diff --git a/include/asm-arm/arch-l7200/system.h b/include/asm-arm/arch-l7200/system.h new file mode 100644 index 000000000000..cb4ff29059b8 --- /dev/null +++ b/include/asm-arm/arch-l7200/system.h | |||
@@ -0,0 +1,27 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-l7200/system.h | ||
3 | * | ||
4 | * Copyright (c) 2000 Steve Hill (sjhill@cotw.com) | ||
5 | * | ||
6 | * Changelog | ||
7 | * 03-21-2000 SJH Created | ||
8 | * 04-26-2000 SJH Fixed functions | ||
9 | * 05-03-2000 SJH Removed usage of obsolete 'iomd.h' | ||
10 | * 05-31-2000 SJH Properly implemented 'arch_idle' | ||
11 | */ | ||
12 | #ifndef __ASM_ARCH_SYSTEM_H | ||
13 | #define __ASM_ARCH_SYSTEM_H | ||
14 | |||
15 | static inline void arch_idle(void) | ||
16 | { | ||
17 | *(unsigned long *)(IO_BASE + 0x50004) = 1; /* idle mode */ | ||
18 | } | ||
19 | |||
20 | static inline void arch_reset(char mode) | ||
21 | { | ||
22 | if (mode == 's') { | ||
23 | cpu_reset(0); | ||
24 | } | ||
25 | } | ||
26 | |||
27 | #endif | ||
diff --git a/include/asm-arm/arch-l7200/time.h b/include/asm-arm/arch-l7200/time.h new file mode 100644 index 000000000000..7b98b533e63a --- /dev/null +++ b/include/asm-arm/arch-l7200/time.h | |||
@@ -0,0 +1,72 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-l7200/time.h | ||
3 | * | ||
4 | * Copyright (C) 2000 Rob Scott (rscott@mtrob.fdns.net) | ||
5 | * Steve Hill (sjhill@cotw.com) | ||
6 | * | ||
7 | * Changelog: | ||
8 | * 01-02-2000 RS Created l7200 version, derived from rpc code | ||
9 | * 05-03-2000 SJH Complete rewrite | ||
10 | */ | ||
11 | #ifndef _ASM_ARCH_TIME_H | ||
12 | #define _ASM_ARCH_TIME_H | ||
13 | |||
14 | #include <asm/arch/irqs.h> | ||
15 | |||
16 | /* | ||
17 | * RTC base register address | ||
18 | */ | ||
19 | #define RTC_BASE (IO_BASE_2 + 0x2000) | ||
20 | |||
21 | /* | ||
22 | * RTC registers | ||
23 | */ | ||
24 | #define RTC_RTCDR (*(volatile unsigned char *) (RTC_BASE + 0x000)) | ||
25 | #define RTC_RTCMR (*(volatile unsigned char *) (RTC_BASE + 0x004)) | ||
26 | #define RTC_RTCS (*(volatile unsigned char *) (RTC_BASE + 0x008)) | ||
27 | #define RTC_RTCC (*(volatile unsigned char *) (RTC_BASE + 0x008)) | ||
28 | #define RTC_RTCDV (*(volatile unsigned char *) (RTC_BASE + 0x00c)) | ||
29 | #define RTC_RTCCR (*(volatile unsigned char *) (RTC_BASE + 0x010)) | ||
30 | |||
31 | /* | ||
32 | * RTCCR register values | ||
33 | */ | ||
34 | #define RTC_RATE_32 0x00 /* 32 Hz tick */ | ||
35 | #define RTC_RATE_64 0x10 /* 64 Hz tick */ | ||
36 | #define RTC_RATE_128 0x20 /* 128 Hz tick */ | ||
37 | #define RTC_RATE_256 0x30 /* 256 Hz tick */ | ||
38 | #define RTC_EN_ALARM 0x01 /* Enable alarm */ | ||
39 | #define RTC_EN_TIC 0x04 /* Enable counter */ | ||
40 | #define RTC_EN_STWDOG 0x08 /* Enable watchdog */ | ||
41 | |||
42 | /* | ||
43 | * Handler for RTC timer interrupt | ||
44 | */ | ||
45 | static irqreturn_t | ||
46 | timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) | ||
47 | { | ||
48 | do_timer(regs); | ||
49 | #ifndef CONFIG_SMP | ||
50 | update_process_times(user_mode(regs)); | ||
51 | #endif | ||
52 | do_profile(regs); | ||
53 | RTC_RTCC = 0; /* Clear interrupt */ | ||
54 | |||
55 | return IRQ_HANDLED; | ||
56 | } | ||
57 | |||
58 | /* | ||
59 | * Set up RTC timer interrupt, and return the current time in seconds. | ||
60 | */ | ||
61 | void __init time_init(void) | ||
62 | { | ||
63 | RTC_RTCC = 0; /* Clear interrupt */ | ||
64 | |||
65 | timer_irq.handler = timer_interrupt; | ||
66 | |||
67 | setup_irq(IRQ_RTC_TICK, &timer_irq); | ||
68 | |||
69 | RTC_RTCCR = RTC_RATE_128 | RTC_EN_TIC; /* Set rate and enable timer */ | ||
70 | } | ||
71 | |||
72 | #endif | ||
diff --git a/include/asm-arm/arch-l7200/timex.h b/include/asm-arm/arch-l7200/timex.h new file mode 100644 index 000000000000..3c3202620f00 --- /dev/null +++ b/include/asm-arm/arch-l7200/timex.h | |||
@@ -0,0 +1,20 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-l7200/timex.h | ||
3 | * | ||
4 | * Copyright (C) 2000 Rob Scott (rscott@mtrob.fdns.net) | ||
5 | * Steve Hill (sjhill@cotw.com) | ||
6 | * | ||
7 | * 04-21-2000 RS Created file | ||
8 | * 05-03-2000 SJH Tick rate was wrong | ||
9 | * | ||
10 | */ | ||
11 | |||
12 | /* | ||
13 | * On the ARM720T, clock ticks are set to 128 Hz. | ||
14 | * | ||
15 | * NOTE: The actual RTC value is set in 'time.h' which | ||
16 | * must be changed when choosing a different tick | ||
17 | * rate. The value of HZ in 'param.h' must also | ||
18 | * be changed to match below. | ||
19 | */ | ||
20 | #define CLOCK_TICK_RATE 128 | ||
diff --git a/include/asm-arm/arch-l7200/uncompress.h b/include/asm-arm/arch-l7200/uncompress.h new file mode 100644 index 000000000000..1caa2b560f53 --- /dev/null +++ b/include/asm-arm/arch-l7200/uncompress.h | |||
@@ -0,0 +1,44 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-l7200/uncompress.h | ||
3 | * | ||
4 | * Copyright (C) 2000 Steve Hill (sjhill@cotw.com) | ||
5 | * | ||
6 | * Changelog: | ||
7 | * 05-01-2000 SJH Created | ||
8 | * 05-13-2000 SJH Filled in function bodies | ||
9 | * 07-26-2000 SJH Removed hard coded buad rate | ||
10 | */ | ||
11 | |||
12 | #include <asm/hardware.h> | ||
13 | |||
14 | #define IO_UART IO_START + 0x00044000 | ||
15 | |||
16 | #define __raw_writeb(v,p) (*(volatile unsigned char *)(p) = (v)) | ||
17 | #define __raw_readb(p) (*(volatile unsigned char *)(p)) | ||
18 | |||
19 | static __inline__ void putc(char c) | ||
20 | { | ||
21 | while(__raw_readb(IO_UART + 0x18) & 0x20 || | ||
22 | __raw_readb(IO_UART + 0x18) & 0x08); | ||
23 | __raw_writeb(c, IO_UART + 0x00); | ||
24 | } | ||
25 | |||
26 | static void putstr(const char *s) | ||
27 | { | ||
28 | while (*s) { | ||
29 | if (*s == 10) { /* If a LF, add CR */ | ||
30 | putc(10); | ||
31 | putc(13); | ||
32 | } | ||
33 | putc(*(s++)); | ||
34 | } | ||
35 | } | ||
36 | |||
37 | static __inline__ void arch_decomp_setup(void) | ||
38 | { | ||
39 | __raw_writeb(0x00, IO_UART + 0x08); /* Set HSB */ | ||
40 | __raw_writeb(0x00, IO_UART + 0x20); /* Disable IRQs */ | ||
41 | __raw_writeb(0x01, IO_UART + 0x14); /* Enable UART */ | ||
42 | } | ||
43 | |||
44 | #define arch_decomp_wdog() | ||
diff --git a/include/asm-arm/arch-l7200/vmalloc.h b/include/asm-arm/arch-l7200/vmalloc.h new file mode 100644 index 000000000000..edeaebe1f14a --- /dev/null +++ b/include/asm-arm/arch-l7200/vmalloc.h | |||
@@ -0,0 +1,15 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-l7200/vmalloc.h | ||
3 | */ | ||
4 | |||
5 | /* | ||
6 | * Just any arbitrary offset to the start of the vmalloc VM area: the | ||
7 | * current 8MB value just means that there will be a 8MB "hole" after the | ||
8 | * physical memory until the kernel virtual memory starts. That means that | ||
9 | * any out-of-bounds memory accesses will hopefully be caught. | ||
10 | * The vmalloc() routines leaves a hole of 4kB between each vmalloced | ||
11 | * area for the same reason. ;) | ||
12 | */ | ||
13 | #define VMALLOC_OFFSET (8*1024*1024) | ||
14 | #define VMALLOC_START (((unsigned long)high_memory + VMALLOC_OFFSET) & ~(VMALLOC_OFFSET-1)) | ||
15 | #define VMALLOC_END (PAGE_OFFSET + 0x10000000) | ||
diff --git a/include/asm-arm/arch-lh7a40x/constants.h b/include/asm-arm/arch-lh7a40x/constants.h new file mode 100644 index 000000000000..52c1cb9c39c6 --- /dev/null +++ b/include/asm-arm/arch-lh7a40x/constants.h | |||
@@ -0,0 +1,88 @@ | |||
1 | /* include/asm-arm/arch-lh7a40x/constants.h | ||
2 | * | ||
3 | * Copyright (C) 2004 Coastal Environmental Systems | ||
4 | * Copyright (C) 2004 Logic Product Development | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or | ||
7 | * modify it under the terms of the GNU General Public License | ||
8 | * version 2 as published by the Free Software Foundation. | ||
9 | * | ||
10 | */ | ||
11 | |||
12 | #ifndef __ASM_ARCH_CONSTANTS_H | ||
13 | #define __ASM_ARCH_CONSTANTS_H | ||
14 | |||
15 | #include <linux/config.h> | ||
16 | |||
17 | /* Addressing constants */ | ||
18 | |||
19 | /* SoC CPU IO addressing */ | ||
20 | #define IO_PHYS (0x80000000) | ||
21 | #define IO_VIRT (0xf8000000) | ||
22 | #define IO_SIZE (0x0000B000) | ||
23 | |||
24 | #ifdef CONFIG_MACH_KEV7A400 | ||
25 | # define CPLD_PHYS (0x20000000) | ||
26 | # define CPLD_VIRT (0xf2000000) | ||
27 | # define CPLD_SIZE PAGE_SIZE | ||
28 | #endif | ||
29 | |||
30 | #if defined (CONFIG_MACH_LPD7A400) || defined (CONFIG_MACH_LPD7A404) | ||
31 | |||
32 | # define IOBARRIER_PHYS 0xc0000000 /* Start of SDRAM */ | ||
33 | /*# define IOBARRIER_PHYS 0x00000000 */ /* Start of flash */ | ||
34 | # define IOBARRIER_VIRT 0xf0000000 | ||
35 | # define IOBARRIER_SIZE PAGE_SIZE | ||
36 | |||
37 | # define CF_PHYS 0x60200000 | ||
38 | # define CF_VIRT 0xf6020000 | ||
39 | # define CF_SIZE (8*1024) | ||
40 | |||
41 | /* The IO mappings for the LPD CPLD are, unfortunately, sparse. */ | ||
42 | # define CPLDX_PHYS(x) (0x70000000 | ((x) << 20)) | ||
43 | # define CPLDX_VIRT(x) (0xf7000000 | ((x) << 16)) | ||
44 | # define CPLD00_PHYS CPLDX_PHYS (0x00) /* Wired LAN */ | ||
45 | # define CPLD00_VIRT CPLDX_VIRT (0x00) | ||
46 | # define CPLD00_SIZE PAGE_SIZE | ||
47 | # define CPLD02_PHYS CPLDX_PHYS (0x02) | ||
48 | # define CPLD02_VIRT CPLDX_VIRT (0x02) | ||
49 | # define CPLD02_SIZE PAGE_SIZE | ||
50 | # define CPLD06_PHYS CPLDX_PHYS (0x06) | ||
51 | # define CPLD06_VIRT CPLDX_VIRT (0x06) | ||
52 | # define CPLD06_SIZE PAGE_SIZE | ||
53 | # define CPLD08_PHYS CPLDX_PHYS (0x08) | ||
54 | # define CPLD08_VIRT CPLDX_VIRT (0x08) | ||
55 | # define CPLD08_SIZE PAGE_SIZE | ||
56 | # define CPLD0C_PHYS CPLDX_PHYS (0x0c) | ||
57 | # define CPLD0C_VIRT CPLDX_VIRT (0x0c) | ||
58 | # define CPLD0C_SIZE PAGE_SIZE | ||
59 | # define CPLD0E_PHYS CPLDX_PHYS (0x0e) | ||
60 | # define CPLD0E_VIRT CPLDX_VIRT (0x0e) | ||
61 | # define CPLD0E_SIZE PAGE_SIZE | ||
62 | # define CPLD10_PHYS CPLDX_PHYS (0x10) | ||
63 | # define CPLD10_VIRT CPLDX_VIRT (0x10) | ||
64 | # define CPLD10_SIZE PAGE_SIZE | ||
65 | # define CPLD12_PHYS CPLDX_PHYS (0x12) | ||
66 | # define CPLD12_VIRT CPLDX_VIRT (0x12) | ||
67 | # define CPLD12_SIZE PAGE_SIZE | ||
68 | # define CPLD14_PHYS CPLDX_PHYS (0x14) | ||
69 | # define CPLD14_VIRT CPLDX_VIRT (0x14) | ||
70 | # define CPLD14_SIZE PAGE_SIZE | ||
71 | # define CPLD16_PHYS CPLDX_PHYS (0x16) | ||
72 | # define CPLD16_VIRT CPLDX_VIRT (0x16) | ||
73 | # define CPLD16_SIZE PAGE_SIZE | ||
74 | # define CPLD18_PHYS CPLDX_PHYS (0x18) | ||
75 | # define CPLD18_VIRT CPLDX_VIRT (0x18) | ||
76 | # define CPLD18_SIZE PAGE_SIZE | ||
77 | # define CPLD1A_PHYS CPLDX_PHYS (0x1a) | ||
78 | # define CPLD1A_VIRT CPLDX_VIRT (0x1a) | ||
79 | # define CPLD1A_SIZE PAGE_SIZE | ||
80 | #endif | ||
81 | |||
82 | /* Timing constants */ | ||
83 | |||
84 | #define XTAL_IN 14745600 /* 14.7456 MHz crystal */ | ||
85 | #define PLL_CLOCK (XTAL_IN * 21) /* 309 MHz PLL clock */ | ||
86 | #define MAX_HCLK_KHZ 100000 /* HCLK max limit ~100MHz */ | ||
87 | |||
88 | #endif /* __ASM_ARCH_CONSTANTS_H */ | ||
diff --git a/include/asm-arm/arch-lh7a40x/debug-macro.S b/include/asm-arm/arch-lh7a40x/debug-macro.S new file mode 100644 index 000000000000..421dcd6a8506 --- /dev/null +++ b/include/asm-arm/arch-lh7a40x/debug-macro.S | |||
@@ -0,0 +1,39 @@ | |||
1 | /* linux/include/asm-arm/arch-lh7a40x/debug-macro.S | ||
2 | * | ||
3 | * Debugging macro include header | ||
4 | * | ||
5 | * Copyright (C) 1994-1999 Russell King | ||
6 | * Moved from linux/arch/arm/kernel/debug.S by Ben Dooks | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | * | ||
12 | */ | ||
13 | |||
14 | @ It is not known if this will be appropriate for every 40x | ||
15 | @ board. | ||
16 | |||
17 | .macro addruart,rx | ||
18 | mrc p15, 0, \rx, c1, c0 | ||
19 | tst \rx, #1 @ MMU enabled? | ||
20 | mov \rx, #0x00000700 @ offset from base | ||
21 | orreq \rx, \rx, #0x80000000 @ physical base | ||
22 | orrne \rx, \rx, #0xf8000000 @ virtual base | ||
23 | .endm | ||
24 | |||
25 | .macro senduart,rd,rx | ||
26 | strb \rd, [\rx] @ DATA | ||
27 | .endm | ||
28 | |||
29 | .macro busyuart,rd,rx @ spin while busy | ||
30 | 1001: ldr \rd, [\rx, #0x10] @ STATUS | ||
31 | tst \rd, #1 << 3 @ BUSY (TX FIFO not empty) | ||
32 | bne 1001b @ yes, spin | ||
33 | .endm | ||
34 | |||
35 | .macro waituart,rd,rx @ wait for Tx FIFO room | ||
36 | 1001: ldrb \rd, [\rx, #0x10] @ STATUS | ||
37 | tst \rd, #1 << 5 @ TXFF (TX FIFO full) | ||
38 | bne 1001b @ yes, spin | ||
39 | .endm | ||
diff --git a/include/asm-arm/arch-lh7a40x/dma.h b/include/asm-arm/arch-lh7a40x/dma.h new file mode 100644 index 000000000000..5797f01e1844 --- /dev/null +++ b/include/asm-arm/arch-lh7a40x/dma.h | |||
@@ -0,0 +1,17 @@ | |||
1 | /* include/asm-arm/arch-lh7a40x/dma.h | ||
2 | * | ||
3 | * Copyright (C) 2003 Coastal Environmental Systems | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or | ||
6 | * modify it under the terms of the GNU General Public License | ||
7 | * version 2 as published by the Free Software Foundation. | ||
8 | * | ||
9 | */ | ||
10 | |||
11 | #ifndef __ASM_ARCH_DMA_H | ||
12 | #define __ASM_ARCH_DMA_H | ||
13 | |||
14 | #define MAX_DMA_ADDRESS 0xffffffff | ||
15 | #define MAX_DMA_CHANNELS 0 /* All DMA is internal to CPU */ | ||
16 | |||
17 | #endif /* _ASM_ARCH_DMA_H */ | ||
diff --git a/include/asm-arm/arch-lh7a40x/entry-macro.S b/include/asm-arm/arch-lh7a40x/entry-macro.S new file mode 100644 index 000000000000..865f396aa63c --- /dev/null +++ b/include/asm-arm/arch-lh7a40x/entry-macro.S | |||
@@ -0,0 +1,67 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-lh7a40x/entry-macro.S | ||
3 | * | ||
4 | * Low-level IRQ helper macros for LH7A40x platforms | ||
5 | * | ||
6 | * This file is licensed under the terms of the GNU General Public | ||
7 | * License version 2. This program is licensed "as is" without any | ||
8 | * warranty of any kind, whether express or implied. | ||
9 | */ | ||
10 | |||
11 | # if defined (CONFIG_ARCH_LH7A400) && defined (CONFIG_ARCH_LH7A404) | ||
12 | # error "LH7A400 and LH7A404 are mutually exclusive" | ||
13 | # endif | ||
14 | |||
15 | # if defined (CONFIG_ARCH_LH7A400) | ||
16 | .macro disable_fiq | ||
17 | .endm | ||
18 | |||
19 | .macro get_irqnr_and_base, irqnr, irqstat, base, tmp | ||
20 | mov \irqnr, #0 | ||
21 | mov \base, #io_p2v(0x80000000) @ APB registers | ||
22 | ldr \irqstat, [\base, #0x500] @ PIC INTSR | ||
23 | |||
24 | 1001: movs \irqstat, \irqstat, lsr #1 @ Shift into carry | ||
25 | bcs 1008f @ Bit set; irq found | ||
26 | add \irqnr, \irqnr, #1 | ||
27 | bne 1001b @ Until no bits | ||
28 | b 1009f @ Nothing? Hmm. | ||
29 | 1008: movs \irqstat, #1 @ Force !Z | ||
30 | 1009: | ||
31 | .endm | ||
32 | |||
33 | #elif defined(CONFIG_ARCH_LH7A404) | ||
34 | |||
35 | .macro disable_fiq | ||
36 | .endm | ||
37 | |||
38 | .macro get_irqnr_and_base, irqnr, irqstat, base, tmp | ||
39 | mov \irqnr, #0 @ VIC1 irq base | ||
40 | mov \base, #io_p2v(0x80000000) @ APB registers | ||
41 | add \base, \base, #0x8000 | ||
42 | ldr \tmp, [\base, #0x0030] @ VIC1_VECTADDR | ||
43 | tst \tmp, #VA_VECTORED @ Direct vectored | ||
44 | bne 1002f | ||
45 | tst \tmp, #VA_VIC1DEFAULT @ Default vectored VIC1 | ||
46 | ldrne \irqstat, [\base, #0] @ VIC1_IRQSTATUS | ||
47 | bne 1001f | ||
48 | add \base, \base, #(0xa000 - 0x8000) | ||
49 | ldr \tmp, [\base, #0x0030] @ VIC2_VECTADDR | ||
50 | tst \tmp, #VA_VECTORED @ Direct vectored | ||
51 | bne 1002f | ||
52 | ldr \irqstat, [\base, #0] @ VIC2_IRQSTATUS | ||
53 | mov \irqnr, #32 @ VIC2 irq base | ||
54 | |||
55 | 1001: movs \irqstat, \irqstat, lsr #1 @ Shift into carry | ||
56 | bcs 1008f @ Bit set; irq found | ||
57 | add \irqnr, \irqnr, #1 | ||
58 | bne 1001b @ Until no bits | ||
59 | b 1009f @ Nothing? Hmm. | ||
60 | 1002: and \irqnr, \tmp, #0x3f @ Mask for valid bits | ||
61 | 1008: movs \irqstat, #1 @ Force !Z | ||
62 | str \tmp, [\base, #0x0030] @ Clear vector | ||
63 | 1009: | ||
64 | .endm | ||
65 | #endif | ||
66 | |||
67 | |||
diff --git a/include/asm-arm/arch-lh7a40x/hardware.h b/include/asm-arm/arch-lh7a40x/hardware.h new file mode 100644 index 000000000000..aeb07c162e25 --- /dev/null +++ b/include/asm-arm/arch-lh7a40x/hardware.h | |||
@@ -0,0 +1,58 @@ | |||
1 | /* include/asm-arm/arch-lh7a40x/hardware.h | ||
2 | * | ||
3 | * Copyright (C) 2004 Coastal Environmental Systems | ||
4 | * | ||
5 | * [ Substantially cribbed from include/asm-arm/arch-pxa/hardware.h ] | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or | ||
8 | * modify it under the terms of the GNU General Public License | ||
9 | * version 2 as published by the Free Software Foundation. | ||
10 | * | ||
11 | */ | ||
12 | |||
13 | #ifndef __ASM_ARCH_HARDWARE_H | ||
14 | #define __ASM_ARCH_HARDWARE_H | ||
15 | |||
16 | #define io_p2v(x) (0xf0000000 | (((x) & 0xfff00000) >> 4) | ((x) & 0x0000ffff)) | ||
17 | #define io_v2p(x) ( (((x) & 0x0fff0000) << 4) | ((x) & 0x0000ffff)) | ||
18 | |||
19 | #ifdef __ASSEMBLY__ | ||
20 | |||
21 | # define __REG(x) io_p2v(x) | ||
22 | # define __PREG(x) io_v2p(x) | ||
23 | |||
24 | #else | ||
25 | |||
26 | # if 0 | ||
27 | # define __REG(x) (*((volatile u32 *)io_p2v(x))) | ||
28 | # else | ||
29 | /* | ||
30 | * This __REG() version gives the same results as the one above, except | ||
31 | * that we are fooling gcc somehow so it generates far better and smaller | ||
32 | * assembly code for access to contigous registers. It's a shame that gcc | ||
33 | * doesn't guess this by itself. | ||
34 | */ | ||
35 | #include <asm/types.h> | ||
36 | typedef struct { volatile u32 offset[4096]; } __regbase; | ||
37 | # define __REGP(x) ((__regbase *)((x)&~4095))->offset[((x)&4095)>>2] | ||
38 | # define __REG(x) __REGP(io_p2v(x)) | ||
39 | typedef struct { volatile u16 offset[4096]; } __regbase16; | ||
40 | # define __REGP16(x) ((__regbase16 *)((x)&~4095))->offset[((x)&4095)>>1] | ||
41 | # define __REG16(x) __REGP16(io_p2v(x)) | ||
42 | typedef struct { volatile u8 offset[4096]; } __regbase8; | ||
43 | # define __REGP8(x) ((__regbase8 *)((x)&~4095))->offset[(x)&4095] | ||
44 | # define __REG8(x) __REGP8(io_p2v(x)) | ||
45 | #endif | ||
46 | |||
47 | /* Let's kick gcc's ass again... */ | ||
48 | # define __REG2(x,y) \ | ||
49 | ( __builtin_constant_p(y) ? (__REG((x) + (y))) \ | ||
50 | : (*(volatile u32 *)((u32)&__REG(x) + (y))) ) | ||
51 | |||
52 | # define __PREG(x) (io_v2p((u32)&(x))) | ||
53 | |||
54 | #endif | ||
55 | |||
56 | #include "registers.h" | ||
57 | |||
58 | #endif /* _ASM_ARCH_HARDWARE_H */ | ||
diff --git a/include/asm-arm/arch-lh7a40x/io.h b/include/asm-arm/arch-lh7a40x/io.h new file mode 100644 index 000000000000..c13bdd9add92 --- /dev/null +++ b/include/asm-arm/arch-lh7a40x/io.h | |||
@@ -0,0 +1,21 @@ | |||
1 | /* include/asm-arm/arch-lh7a40x/io.h | ||
2 | * | ||
3 | * Copyright (C) 2004 Coastal Environmental Systems | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or | ||
6 | * modify it under the terms of the GNU General Public License | ||
7 | * version 2 as published by the Free Software Foundation. | ||
8 | * | ||
9 | */ | ||
10 | |||
11 | #ifndef __ASM_ARCH_IO_H | ||
12 | #define __ASM_ARCH_IO_H | ||
13 | |||
14 | #define IO_SPACE_LIMIT 0xffffffff | ||
15 | |||
16 | /* No ISA or PCI bus on this machine. */ | ||
17 | #define __io(a) ((void __iomem *)(a)) | ||
18 | #define __mem_pci(a) (a) | ||
19 | #define __mem_isa(a) (a) | ||
20 | |||
21 | #endif /* __ASM_ARCH_IO_H */ | ||
diff --git a/include/asm-arm/arch-lh7a40x/irq.h b/include/asm-arm/arch-lh7a40x/irq.h new file mode 100644 index 000000000000..0f5f0b10f6ca --- /dev/null +++ b/include/asm-arm/arch-lh7a40x/irq.h | |||
@@ -0,0 +1,11 @@ | |||
1 | /* include/asm-arm/arch-lh7a40x/irq.h | ||
2 | * | ||
3 | * Copyright (C) 2004 Logic Product Development | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or | ||
6 | * modify it under the terms of the GNU General Public License | ||
7 | * version 2 as published by the Free Software Foundation. | ||
8 | * | ||
9 | */ | ||
10 | |||
11 | void __init lh7a40x_init_board_irq (void); | ||
diff --git a/include/asm-arm/arch-lh7a40x/irqs.h b/include/asm-arm/arch-lh7a40x/irqs.h new file mode 100644 index 000000000000..f91f3e59f3ab --- /dev/null +++ b/include/asm-arm/arch-lh7a40x/irqs.h | |||
@@ -0,0 +1,196 @@ | |||
1 | /* include/asm-arm/arch-lh7a40x/irqs.h | ||
2 | * | ||
3 | * Copyright (C) 2004 Coastal Environmental Systems | ||
4 | * Copyright (C) 2004 Logic Product Development | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or | ||
7 | * modify it under the terms of the GNU General Public License | ||
8 | * version 2 as published by the Free Software Foundation. | ||
9 | * | ||
10 | */ | ||
11 | |||
12 | /* It is to be seen whether or not we can build a kernel for more than | ||
13 | * one board. For the time being, these macros assume that we cannot. | ||
14 | * Thus, it is OK to ifdef machine/board specific IRQ assignments. | ||
15 | */ | ||
16 | |||
17 | |||
18 | #ifndef __ASM_ARCH_IRQS_H | ||
19 | #define __ASM_ARCH_IRQS_H | ||
20 | |||
21 | #include <linux/config.h> | ||
22 | |||
23 | #define FIQ_START 80 | ||
24 | |||
25 | #if defined (CONFIG_ARCH_LH7A400) | ||
26 | |||
27 | /* FIQs */ | ||
28 | |||
29 | # define IRQ_GPIO0FIQ 0 /* GPIO External FIQ Interrupt on F0 */ | ||
30 | # define IRQ_BLINT 1 /* Battery Low */ | ||
31 | # define IRQ_WEINT 2 /* Watchdog Timer, WDT overflow */ | ||
32 | # define IRQ_MCINT 3 /* Media Change, MEDCHG pin rising */ | ||
33 | |||
34 | /* IRQs */ | ||
35 | |||
36 | # define IRQ_CSINT 4 /* Audio Codec (ACI) */ | ||
37 | # define IRQ_GPIO1INTR 5 /* GPIO External IRQ Interrupt on F1 */ | ||
38 | # define IRQ_GPIO2INTR 6 /* GPIO External IRQ Interrupt on F2 */ | ||
39 | # define IRQ_GPIO3INTR 7 /* GPIO External IRQ Interrupt on F3 */ | ||
40 | # define IRQ_T1UI 8 /* Timer 1 underflow */ | ||
41 | # define IRQ_T2UI 9 /* Timer 2 underflow */ | ||
42 | # define IRQ_RTCMI 10 | ||
43 | # define IRQ_TINTR 11 /* Clock State Controller 64 Hz tick (CSC) */ | ||
44 | # define IRQ_UART1INTR 12 | ||
45 | # define IRQ_UART2INTR 13 | ||
46 | # define IRQ_LCDINTR 14 | ||
47 | # define IRQ_SSIEOT 15 /* Synchronous Serial Interface (SSI) */ | ||
48 | # define IRQ_UART3INTR 16 | ||
49 | # define IRQ_SCIINTR 17 /* Smart Card Interface (SCI) */ | ||
50 | # define IRQ_AACINTR 18 /* Advanced Audio Codec (AAC) */ | ||
51 | # define IRQ_MMCINTR 19 /* Multimedia Card (MMC) */ | ||
52 | # define IRQ_USBINTR 20 | ||
53 | # define IRQ_DMAINTR 21 | ||
54 | # define IRQ_T3UI 22 /* Timer 3 underflow */ | ||
55 | # define IRQ_GPIO4INTR 23 /* GPIO External IRQ Interrupt on F4 */ | ||
56 | # define IRQ_GPIO5INTR 24 /* GPIO External IRQ Interrupt on F5 */ | ||
57 | # define IRQ_GPIO6INTR 25 /* GPIO External IRQ Interrupt on F6 */ | ||
58 | # define IRQ_GPIO7INTR 26 /* GPIO External IRQ Interrupt on F7 */ | ||
59 | # define IRQ_BMIINTR 27 /* Battery Monitor Interface (BMI) */ | ||
60 | |||
61 | # define NR_IRQ_CPU 28 /* IRQs directly recognized by CPU */ | ||
62 | |||
63 | /* Given IRQ, return GPIO interrupt number 0-7 */ | ||
64 | # define IRQ_TO_GPIO(i) ((i) \ | ||
65 | - (((i) > IRQ_GPIO3INTR) ? IRQ_GPIO4INTR - IRQ_GPIO3INTR - 1 : 0)\ | ||
66 | - (((i) > IRQ_GPIO0INTR) ? IRQ_GPIO1INTR - IRQ_GPIO0INTR - 1 : 0)) | ||
67 | |||
68 | #endif | ||
69 | |||
70 | #if defined (CONFIG_ARCH_LH7A404) | ||
71 | |||
72 | # define IRQ_BROWN 0 /* Brownout */ | ||
73 | # define IRQ_WDTINTR 1 /* Watchdog Timer */ | ||
74 | # define IRQ_COMMRX 2 /* ARM Comm Rx for Debug */ | ||
75 | # define IRQ_COMMTX 3 /* ARM Comm Tx for Debug */ | ||
76 | # define IRQ_T1UI 4 /* Timer 1 underflow */ | ||
77 | # define IRQ_T2UI 5 /* Timer 2 underflow */ | ||
78 | # define IRQ_CSINT 6 /* Codec Interrupt (shared by AAC on 404) */ | ||
79 | # define IRQ_DMAM2P0 7 /* -- DMA Memory to Peripheral */ | ||
80 | # define IRQ_DMAM2P1 8 | ||
81 | # define IRQ_DMAM2P2 9 | ||
82 | # define IRQ_DMAM2P3 10 | ||
83 | # define IRQ_DMAM2P4 11 | ||
84 | # define IRQ_DMAM2P5 12 | ||
85 | # define IRQ_DMAM2P6 13 | ||
86 | # define IRQ_DMAM2P7 14 | ||
87 | # define IRQ_DMAM2P8 15 | ||
88 | # define IRQ_DMAM2P9 16 | ||
89 | # define IRQ_DMAM2M0 17 /* -- DMA Memory to Memory */ | ||
90 | # define IRQ_DMAM2M1 18 | ||
91 | # define IRQ_GPIO0INTR 19 /* -- GPIOF Interrupt */ | ||
92 | # define IRQ_GPIO1INTR 20 | ||
93 | # define IRQ_GPIO2INTR 21 | ||
94 | # define IRQ_GPIO3INTR 22 | ||
95 | # define IRQ_SOFT_V1_23 23 /* -- Unassigned */ | ||
96 | # define IRQ_SOFT_V1_24 24 | ||
97 | # define IRQ_SOFT_V1_25 25 | ||
98 | # define IRQ_SOFT_V1_26 26 | ||
99 | # define IRQ_SOFT_V1_27 27 | ||
100 | # define IRQ_SOFT_V1_28 28 | ||
101 | # define IRQ_SOFT_V1_29 29 | ||
102 | # define IRQ_SOFT_V1_30 30 | ||
103 | # define IRQ_SOFT_V1_31 31 | ||
104 | |||
105 | # define IRQ_BLINT 32 /* Battery Low */ | ||
106 | # define IRQ_BMIINTR 33 /* Battery Monitor */ | ||
107 | # define IRQ_MCINTR 34 /* Media Change */ | ||
108 | # define IRQ_TINTR 35 /* 64Hz Tick */ | ||
109 | # define IRQ_WEINT 36 /* Watchdog Expired */ | ||
110 | # define IRQ_RTCMI 37 /* Real-time Clock Match */ | ||
111 | # define IRQ_UART1INTR 38 /* UART1 Interrupt (including error) */ | ||
112 | # define IRQ_UART1ERR 39 /* UART1 Error */ | ||
113 | # define IRQ_UART2INTR 40 /* UART2 Interrupt (including error) */ | ||
114 | # define IRQ_UART2ERR 41 /* UART2 Error */ | ||
115 | # define IRQ_UART3INTR 42 /* UART3 Interrupt (including error) */ | ||
116 | # define IRQ_UART3ERR 43 /* UART3 Error */ | ||
117 | # define IRQ_SCIINTR 44 /* Smart Card */ | ||
118 | # define IRQ_TSCINTR 45 /* Touchscreen */ | ||
119 | # define IRQ_KMIINTR 46 /* Keyboard/Mouse (PS/2) */ | ||
120 | # define IRQ_GPIO4INTR 47 /* -- GPIOF Interrupt */ | ||
121 | # define IRQ_GPIO5INTR 48 | ||
122 | # define IRQ_GPIO6INTR 49 | ||
123 | # define IRQ_GPIO7INTR 50 | ||
124 | # define IRQ_T3UI 51 /* Timer 3 underflow */ | ||
125 | # define IRQ_LCDINTR 52 /* LCD Controller */ | ||
126 | # define IRQ_SSPINTR 53 /* Synchronous Serial Port */ | ||
127 | # define IRQ_SDINTR 54 /* Secure Digital Port (MMC) */ | ||
128 | # define IRQ_USBINTR 55 /* USB Device Port */ | ||
129 | # define IRQ_USHINTR 56 /* USB Host Port */ | ||
130 | # define IRQ_SOFT_V2_25 57 /* -- Unassigned */ | ||
131 | # define IRQ_SOFT_V2_26 58 | ||
132 | # define IRQ_SOFT_V2_27 59 | ||
133 | # define IRQ_SOFT_V2_28 60 | ||
134 | # define IRQ_SOFT_V2_29 61 | ||
135 | # define IRQ_SOFT_V2_30 62 | ||
136 | # define IRQ_SOFT_V2_31 63 | ||
137 | |||
138 | # define NR_IRQ_CPU 64 /* IRQs directly recognized by CPU */ | ||
139 | |||
140 | /* Given IRQ, return GPIO interrupt number 0-7 */ | ||
141 | # define IRQ_TO_GPIO(i) ((i) \ | ||
142 | - (((i) > IRQ_GPIO3INTR) ? IRQ_GPIO4INTR - IRQ_GPIO3INTR - 1 : 0)\ | ||
143 | - IRQ_GPIO0INTR) | ||
144 | |||
145 | /* Vector Address constants */ | ||
146 | # define VA_VECTORED 0x100 /* Set for vectored interrupt */ | ||
147 | # define VA_VIC1DEFAULT 0x200 /* Set as default VECTADDR for VIC1 */ | ||
148 | # define VA_VIC2DEFAULT 0x400 /* Set as default VECTADDR for VIC2 */ | ||
149 | |||
150 | #endif | ||
151 | |||
152 | /* IRQ aliases */ | ||
153 | |||
154 | #if !defined (IRQ_GPIO0INTR) | ||
155 | # define IRQ_GPIO0INTR IRQ_GPIO0FIQ | ||
156 | #endif | ||
157 | #define IRQ_TICK IRQ_TINTR | ||
158 | #define IRQ_PCC1_RDY IRQ_GPIO6INTR /* PCCard 1 ready */ | ||
159 | #define IRQ_PCC2_RDY IRQ_GPIO7INTR /* PCCard 2 ready */ | ||
160 | |||
161 | #ifdef CONFIG_MACH_KEV7A400 | ||
162 | # define IRQ_TS IRQ_GPIOFIQ /* Touchscreen */ | ||
163 | # define IRQ_CPLD IRQ_GPIO1INTR /* CPLD cascade */ | ||
164 | # define IRQ_PCC1_CD IRQ_GPIO_F2 /* PCCard 1 card detect */ | ||
165 | # define IRQ_PCC2_CD IRQ_GPIO_F3 /* PCCard 2 card detect */ | ||
166 | #endif | ||
167 | |||
168 | #if defined (CONFIG_MACH_LPD7A400) || defined (CONFIG_MACH_LPD7A404) | ||
169 | # define IRQ_CPLD_V28 IRQ_GPIO7INTR /* CPLD cascade through GPIO_PF7 */ | ||
170 | # define IRQ_CPLD_V34 IRQ_GPIO3INTR /* CPLD cascade through GPIO_PF3 */ | ||
171 | #endif | ||
172 | |||
173 | /* System specific IRQs */ | ||
174 | |||
175 | #define IRQ_BOARD_START NR_IRQ_CPU | ||
176 | |||
177 | #ifdef CONFIG_MACH_KEV7A400 | ||
178 | # define IRQ_KEV7A400_CPLD IRQ_BOARD_START | ||
179 | # define NR_IRQ_BOARD 5 | ||
180 | # define IRQ_KEV7A400_MMC_CD IRQ_KEV7A400_CPLD + 0 /* MMC Card Detect */ | ||
181 | # define IRQ_KEV7A400_RI2 IRQ_KEV7A400_CPLD + 1 /* Ring Indicator 2 */ | ||
182 | # define IRQ_KEV7A400_IDE_CF IRQ_KEV7A400_CPLD + 2 /* Compact Flash (?) */ | ||
183 | # define IRQ_KEV7A400_ETH_INT IRQ_KEV7A400_CPLD + 3 /* Ethernet chip */ | ||
184 | # define IRQ_KEV7A400_INT IRQ_KEV7A400_CPLD + 4 | ||
185 | #endif | ||
186 | |||
187 | #if defined (CONFIG_MACH_LPD7A400) || defined (CONFIG_MACH_LPD7A404) | ||
188 | # define IRQ_LPD7A40X_CPLD IRQ_BOARD_START | ||
189 | # define NR_IRQ_BOARD 2 | ||
190 | # define IRQ_LPD7A40X_ETH_INT IRQ_LPD7A40X_CPLD + 0 /* Ethernet chip */ | ||
191 | # define IRQ_LPD7A400_TS IRQ_LPD7A40X_CPLD + 1 /* Touch screen */ | ||
192 | #endif | ||
193 | |||
194 | #define NR_IRQS (NR_IRQ_CPU + NR_IRQ_BOARD) | ||
195 | |||
196 | #endif | ||
diff --git a/include/asm-arm/arch-lh7a40x/memory.h b/include/asm-arm/arch-lh7a40x/memory.h new file mode 100644 index 000000000000..7e2fea372663 --- /dev/null +++ b/include/asm-arm/arch-lh7a40x/memory.h | |||
@@ -0,0 +1,94 @@ | |||
1 | /* include/asm-arm/arch-lh7a40x/memory.h | ||
2 | * | ||
3 | * Copyright (C) 2004 Coastal Environmental Systems | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or | ||
6 | * modify it under the terms of the GNU General Public License | ||
7 | * version 2 as published by the Free Software Foundation. | ||
8 | * | ||
9 | * | ||
10 | * Refer to <file:Documentation/arm/Sharp-LH/SDRAM> for more information. | ||
11 | * | ||
12 | */ | ||
13 | |||
14 | #ifndef __ASM_ARCH_MEMORY_H | ||
15 | #define __ASM_ARCH_MEMORY_H | ||
16 | |||
17 | /* | ||
18 | * Physical DRAM offset. | ||
19 | */ | ||
20 | #define PHYS_OFFSET (0xc0000000UL) | ||
21 | |||
22 | /* | ||
23 | * Virtual view <-> DMA view memory address translations | ||
24 | * virt_to_bus: Used to translate the virtual address to an | ||
25 | * address suitable to be passed to set_dma_addr | ||
26 | * bus_to_virt: Used to convert an address for DMA operations | ||
27 | * to an address that the kernel can use. | ||
28 | */ | ||
29 | #define __virt_to_bus(x) __virt_to_phys(x) | ||
30 | #define __bus_to_virt(x) __phys_to_virt(x) | ||
31 | |||
32 | #ifdef CONFIG_DISCONTIGMEM | ||
33 | |||
34 | #define NODES_SHIFT 4 /* Up to 16 nodes */ | ||
35 | |||
36 | /* | ||
37 | * Given a kernel address, find the home node of the underlying memory. | ||
38 | */ | ||
39 | |||
40 | # ifdef CONFIG_LH7A40X_ONE_BANK_PER_NODE | ||
41 | # define KVADDR_TO_NID(addr) \ | ||
42 | ( ((((unsigned long) (addr) - PAGE_OFFSET) >> 24) & 1)\ | ||
43 | | ((((unsigned long) (addr) - PAGE_OFFSET) >> 25) & ~1)) | ||
44 | # else /* 2 banks per node */ | ||
45 | # define KVADDR_TO_NID(addr) \ | ||
46 | (((unsigned long) (addr) - PAGE_OFFSET) >> 26) | ||
47 | # endif | ||
48 | |||
49 | /* | ||
50 | * Given a page frame number, convert it to a node id. | ||
51 | */ | ||
52 | |||
53 | # ifdef CONFIG_LH7A40X_ONE_BANK_PER_NODE | ||
54 | # define PFN_TO_NID(pfn) \ | ||
55 | (((((pfn) - PHYS_PFN_OFFSET) >> (24 - PAGE_SHIFT)) & 1)\ | ||
56 | | ((((pfn) - PHYS_PFN_OFFSET) >> (25 - PAGE_SHIFT)) & ~1)) | ||
57 | # else /* 2 banks per node */ | ||
58 | # define PFN_TO_NID(pfn) \ | ||
59 | (((pfn) - PHYS_PFN_OFFSET) >> (26 - PAGE_SHIFT)) | ||
60 | #endif | ||
61 | |||
62 | /* | ||
63 | * Given a kaddr, ADDR_TO_MAPBASE finds the owning node of the memory | ||
64 | * and return the mem_map of that node. | ||
65 | */ | ||
66 | # define ADDR_TO_MAPBASE(kaddr) NODE_MEM_MAP(KVADDR_TO_NID(kaddr)) | ||
67 | |||
68 | /* | ||
69 | * Given a page frame number, find the owning node of the memory | ||
70 | * and return the mem_map of that node. | ||
71 | */ | ||
72 | # define PFN_TO_MAPBASE(pfn) NODE_MEM_MAP(PFN_TO_NID(pfn)) | ||
73 | |||
74 | /* | ||
75 | * Given a kaddr, LOCAL_MEM_MAP finds the owning node of the memory | ||
76 | * and returns the index corresponding to the appropriate page in the | ||
77 | * node's mem_map. | ||
78 | */ | ||
79 | |||
80 | # ifdef CONFIG_LH7A40X_ONE_BANK_PER_NODE | ||
81 | # define LOCAL_MAP_NR(addr) \ | ||
82 | (((unsigned long)(addr) & 0x003fffff) >> PAGE_SHIFT) | ||
83 | # else /* 2 banks per node */ | ||
84 | # define LOCAL_MAP_NR(addr) \ | ||
85 | (((unsigned long)(addr) & 0x01ffffff) >> PAGE_SHIFT) | ||
86 | # endif | ||
87 | |||
88 | #else | ||
89 | |||
90 | # define PFN_TO_NID(addr) (0) | ||
91 | |||
92 | #endif | ||
93 | |||
94 | #endif | ||
diff --git a/include/asm-arm/arch-lh7a40x/param.h b/include/asm-arm/arch-lh7a40x/param.h new file mode 100644 index 000000000000..acad0bc5deba --- /dev/null +++ b/include/asm-arm/arch-lh7a40x/param.h | |||
@@ -0,0 +1,9 @@ | |||
1 | /* include/asm-arm/arch-lh7a40x/param.h | ||
2 | * | ||
3 | * Copyright (C) 2004 Coastal Environmental Systems | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or | ||
6 | * modify it under the terms of the GNU General Public License | ||
7 | * version 2 as published by the Free Software Foundation. | ||
8 | * | ||
9 | */ | ||
diff --git a/include/asm-arm/arch-lh7a40x/registers.h b/include/asm-arm/arch-lh7a40x/registers.h new file mode 100644 index 000000000000..2edb22e35450 --- /dev/null +++ b/include/asm-arm/arch-lh7a40x/registers.h | |||
@@ -0,0 +1,193 @@ | |||
1 | /* include/asm-arm/arch-lh7a40x/registers.h | ||
2 | * | ||
3 | * Copyright (C) 2004 Coastal Environmental Systems | ||
4 | * Copyright (C) 2004 Logic Product Development | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or | ||
7 | * modify it under the terms of the GNU General Public License | ||
8 | * version 2 as published by the Free Software Foundation. | ||
9 | * | ||
10 | */ | ||
11 | |||
12 | #include <linux/config.h> | ||
13 | #include <asm/arch/constants.h> | ||
14 | |||
15 | #ifndef __ASM_ARCH_REGISTERS_H | ||
16 | #define __ASM_ARCH_REGISTERS_H | ||
17 | |||
18 | |||
19 | /* Physical register base addresses */ | ||
20 | |||
21 | #define AC97_PHYS (0x80000000) /* AC97 Controller */ | ||
22 | #define MMC_PHYS (0x80000100) /* Multimedia Card Controller */ | ||
23 | #define USB_PHYS (0x80000200) /* USB Client */ | ||
24 | #define SCI_PHYS (0x80000300) /* Secure Card Interface */ | ||
25 | #define CSC_PHYS (0x80000400) /* Clock/State Controller */ | ||
26 | #define INTC_PHYS (0x80000500) /* Interrupt Controller */ | ||
27 | #define UART1_PHYS (0x80000600) /* UART1 Controller */ | ||
28 | #define SIR_PHYS (0x80000600) /* IR Controller, same are UART1 */ | ||
29 | #define UART2_PHYS (0x80000700) /* UART2 Controller */ | ||
30 | #define UART3_PHYS (0x80000800) /* UART3 Controller */ | ||
31 | #define DCDC_PHYS (0x80000900) /* DC to DC Controller */ | ||
32 | #define ACI_PHYS (0x80000a00) /* Audio Codec Interface */ | ||
33 | #define SSP_PHYS (0x80000b00) /* Synchronous ... */ | ||
34 | #define TIMER_PHYS (0x80000c00) /* Timer Controller */ | ||
35 | #define RTC_PHYS (0x80000d00) /* Real-time Clock */ | ||
36 | #define GPIO_PHYS (0x80000e00) /* General Purpose IO */ | ||
37 | #define BMI_PHYS (0x80000f00) /* Battery Monitor Interface */ | ||
38 | #define WDT_PHYS (0x80001400) /* Watchdog Timer */ | ||
39 | #define SMC_PHYS (0x80002000) /* Static Memory Controller */ | ||
40 | #define SDRC_PHYS (0x80002400) /* SDRAM Controller */ | ||
41 | #define DMAC_PHYS (0x80002800) /* DMA Controller */ | ||
42 | #define CLCDC_PHYS (0x80003000) /* Color LCD Controller */ | ||
43 | |||
44 | /* Physical registers of the LH7A404 */ | ||
45 | |||
46 | #define VIC1_PHYS (0x80008000) /* Vectored Interrupt Controller 1 */ | ||
47 | #define USBH_PHYS (0x80009000) /* USB OHCI host controller */ | ||
48 | #define VIC2_PHYS (0x8000a000) /* Vectored Interrupt Controller 2 */ | ||
49 | |||
50 | /*#define KBD_PHYS (0x80000e00) */ | ||
51 | /*#define LCDICP_PHYS (0x80001000) */ | ||
52 | |||
53 | |||
54 | /* Clock/State Controller register */ | ||
55 | |||
56 | #define CSC_PWRCNT __REG(CSC_PHYS + 0x04) /* Power control */ | ||
57 | |||
58 | #define CSC_PWRCNT_USBH_EN (1<<28) /* USB Host power enable */ | ||
59 | |||
60 | |||
61 | /* Interrupt Controller registers */ | ||
62 | |||
63 | #define INTC_INTSR __REG(INTC_PHYS + 0x00) /* Status */ | ||
64 | #define INTC_INTRSR __REG(INTC_PHYS + 0x04) /* Raw Status */ | ||
65 | #define INTC_INTENS __REG(INTC_PHYS + 0x08) /* Enable Set */ | ||
66 | #define INTC_INTENC __REG(INTC_PHYS + 0x0c) /* Enable Clear */ | ||
67 | |||
68 | |||
69 | /* Vectored Interrupted Controller registers */ | ||
70 | |||
71 | #define VIC1_IRQSTATUS __REG(VIC1_PHYS + 0x00) | ||
72 | #define VIC1_FIQSTATUS __REG(VIC1_PHYS + 0x04) | ||
73 | #define VIC1_RAWINTR __REG(VIC1_PHYS + 0x08) | ||
74 | #define VIC1_INTSEL __REG(VIC1_PHYS + 0x0c) | ||
75 | #define VIC1_INTEN __REG(VIC1_PHYS + 0x10) | ||
76 | #define VIC1_INTENCLR __REG(VIC1_PHYS + 0x14) | ||
77 | #define VIC1_SOFTINT __REG(VIC1_PHYS + 0x18) | ||
78 | #define VIC1_SOFTINTCLR __REG(VIC1_PHYS + 0x1c) | ||
79 | #define VIC1_PROTECT __REG(VIC1_PHYS + 0x20) | ||
80 | #define VIC1_VECTADDR __REG(VIC1_PHYS + 0x30) | ||
81 | #define VIC1_NVADDR __REG(VIC1_PHYS + 0x34) | ||
82 | #define VIC1_VAD0 __REG(VIC1_PHYS + 0x100) | ||
83 | #define VIC1_VECTCNTL0 __REG(VIC1_PHYS + 0x200) | ||
84 | #define VIC2_IRQSTATUS __REG(VIC2_PHYS + 0x00) | ||
85 | #define VIC2_FIQSTATUS __REG(VIC2_PHYS + 0x04) | ||
86 | #define VIC2_RAWINTR __REG(VIC2_PHYS + 0x08) | ||
87 | #define VIC2_INTSEL __REG(VIC2_PHYS + 0x0c) | ||
88 | #define VIC2_INTEN __REG(VIC2_PHYS + 0x10) | ||
89 | #define VIC2_INTENCLR __REG(VIC2_PHYS + 0x14) | ||
90 | #define VIC2_SOFTINT __REG(VIC2_PHYS + 0x18) | ||
91 | #define VIC2_SOFTINTCLR __REG(VIC2_PHYS + 0x1c) | ||
92 | #define VIC2_PROTECT __REG(VIC2_PHYS + 0x20) | ||
93 | #define VIC2_VECTADDR __REG(VIC2_PHYS + 0x30) | ||
94 | #define VIC2_NVADDR __REG(VIC2_PHYS + 0x34) | ||
95 | #define VIC2_VAD0 __REG(VIC2_PHYS + 0x100) | ||
96 | #define VIC2_VECTCNTL0 __REG(VIC2_PHYS + 0x200) | ||
97 | |||
98 | #define VIC_CNTL_ENABLE (0x20) | ||
99 | |||
100 | /* USB Host registers (Open HCI compatible) */ | ||
101 | |||
102 | #define USBH_CMDSTATUS __REG(USBH_PHYS + 0x08) | ||
103 | |||
104 | |||
105 | /* GPIO registers */ | ||
106 | |||
107 | #define GPIO_INTTYPE1 __REG(GPIO_PHYS + 0x4c) /* Interrupt Type 1 (Edge) */ | ||
108 | #define GPIO_INTTYPE2 __REG(GPIO_PHYS + 0x50) /* Interrupt Type 2 */ | ||
109 | #define GPIO_GPIOFEOI __REG(GPIO_PHYS + 0x54) /* GPIO End-of-Interrupt */ | ||
110 | #define GPIO_GPIOINTEN __REG(GPIO_PHYS + 0x58) /* GPIO Interrupt Enable */ | ||
111 | #define GPIO_INTSTATUS __REG(GPIO_PHYS + 0x5c) /* GPIO Interrupt Status */ | ||
112 | |||
113 | |||
114 | /* Static Memory Controller registers */ | ||
115 | |||
116 | #define SMC_BCR0 __REG(SMC_PHYS + 0x00) /* Bank 0 Configuration */ | ||
117 | #define SMC_BCR1 __REG(SMC_PHYS + 0x04) /* Bank 1 Configuration */ | ||
118 | #define SMC_BCR2 __REG(SMC_PHYS + 0x08) /* Bank 2 Configuration */ | ||
119 | #define SMC_BCR3 __REG(SMC_PHYS + 0x0C) /* Bank 3 Configuration */ | ||
120 | #define SMC_BCR6 __REG(SMC_PHYS + 0x18) /* Bank 6 Configuration */ | ||
121 | #define SMC_BCR7 __REG(SMC_PHYS + 0x1c) /* Bank 7 Configuration */ | ||
122 | |||
123 | |||
124 | #ifdef CONFIG_MACH_KEV7A400 | ||
125 | # define CPLD_RD_OPT_DIP_SW __REG16(CPLD_PHYS + 0x00) /* Read Option SW */ | ||
126 | # define CPLD_WR_IO_BRD_CTL __REG16(CPLD_PHYS + 0x00) /* Write Control */ | ||
127 | # define CPLD_RD_PB_KEYS __REG16(CPLD_PHYS + 0x02) /* Read Btn Keys */ | ||
128 | # define CPLD_LATCHED_INTS __REG16(CPLD_PHYS + 0x04) /* Read INTR stat. */ | ||
129 | # define CPLD_CL_INT __REG16(CPLD_PHYS + 0x04) /* Clear INTR stat */ | ||
130 | # define CPLD_BOOT_MMC_STATUS __REG16(CPLD_PHYS + 0x06) /* R/O */ | ||
131 | # define CPLD_RD_KPD_ROW_SENSE __REG16(CPLD_PHYS + 0x08) | ||
132 | # define CPLD_WR_PB_INT_MASK __REG16(CPLD_PHYS + 0x08) | ||
133 | # define CPLD_RD_BRD_DISP_SW __REG16(CPLD_PHYS + 0x0a) | ||
134 | # define CPLD_WR_EXT_INT_MASK __REG16(CPLD_PHYS + 0x0a) | ||
135 | # define CPLD_LCD_PWR_CNTL __REG16(CPLD_PHYS + 0x0c) | ||
136 | # define CPLD_SEVEN_SEG __REG16(CPLD_PHYS + 0x0e) /* 7 seg. LED mask */ | ||
137 | |||
138 | #endif | ||
139 | |||
140 | #if defined (CONFIG_MACH_LPD7A400) || defined (CONFIG_MACH_LPD7A404) | ||
141 | # define CPLD_CONTROL __REG8(CPLD02_PHYS) | ||
142 | # define CPLD_SPI_DATA __REG8(CPLD06_PHYS) | ||
143 | # define CPLD_SPI_CONTROL __REG8(CPLD08_PHYS) | ||
144 | # define CPLD_SPI_EEPROM __REG8(CPLD0A_PHYS) | ||
145 | # define CPLD_INTERRUPTS __REG8(CPLD0C_PHYS) /* IRQ mask/status */ | ||
146 | # define CPLD_BOOT_MODE __REG8(CPLD0E_PHYS) | ||
147 | # define CPLD_FLASH __REG8(CPLD10_PHYS) | ||
148 | # define CPLD_POWER_MGMT __REG8(CPLD12_PHYS) | ||
149 | # define CPLD_REVISION __REG8(CPLD14_PHYS) | ||
150 | # define CPLD_GPIO_EXT __REG8(CPLD16_PHYS) | ||
151 | # define CPLD_GPIO_DATA __REG8(CPLD18_PHYS) | ||
152 | # define CPLD_GPIO_DIR __REG8(CPLD1A_PHYS) | ||
153 | #endif | ||
154 | |||
155 | |||
156 | /* Timer registers */ | ||
157 | |||
158 | #define TIMER_LOAD1 __REG(TIMER_PHYS + 0x00) /* Timer 1 initial value */ | ||
159 | #define TIMER_VALUE1 __REG(TIMER_PHYS + 0x04) /* Timer 1 current value */ | ||
160 | #define TIMER_CONTROL1 __REG(TIMER_PHYS + 0x08) /* Timer 1 control word */ | ||
161 | #define TIMER_EOI1 __REG(TIMER_PHYS + 0x0c) /* Timer 1 interrupt clear */ | ||
162 | |||
163 | #define TIMER_LOAD2 __REG(TIMER_PHYS + 0x20) /* Timer 2 initial value */ | ||
164 | #define TIMER_VALUE2 __REG(TIMER_PHYS + 0x24) /* Timer 2 current value */ | ||
165 | #define TIMER_CONTROL2 __REG(TIMER_PHYS + 0x28) /* Timer 2 control word */ | ||
166 | #define TIMER_EOI2 __REG(TIMER_PHYS + 0x2c) /* Timer 2 interrupt clear */ | ||
167 | |||
168 | #define TIMER_BUZZCON __REG(TIMER_PHYS + 0x40) /* Buzzer configuration */ | ||
169 | |||
170 | #define TIMER_LOAD3 __REG(TIMER_PHYS + 0x80) /* Timer 3 initial value */ | ||
171 | #define TIMER_VALUE3 __REG(TIMER_PHYS + 0x84) /* Timer 3 current value */ | ||
172 | #define TIMER_CONTROL3 __REG(TIMER_PHYS + 0x88) /* Timer 3 control word */ | ||
173 | #define TIMER_EOI3 __REG(TIMER_PHYS + 0x8c) /* Timer 3 interrupt clear */ | ||
174 | |||
175 | #define TIMER_C_ENABLE (1<<7) | ||
176 | #define TIMER_C_PERIODIC (1<<6) | ||
177 | #define TIMER_C_FREERUNNING (0) | ||
178 | #define TIMER_C_2KHZ (0x00) /* 1.986 kHz */ | ||
179 | #define TIMER_C_508KHZ (0x08) | ||
180 | |||
181 | /* GPIO registers */ | ||
182 | |||
183 | #define GPIO_PFDD __REG(GPIO_PHYS + 0x34) /* PF direction */ | ||
184 | #define GPIO_INTTYPE1 __REG(GPIO_PHYS + 0x4c) /* IRQ edge or lvl */ | ||
185 | #define GPIO_INTTYPE2 __REG(GPIO_PHYS + 0x50) /* IRQ activ hi/lo */ | ||
186 | #define GPIO_GPIOFEOI __REG(GPIO_PHYS + 0x54) /* GPIOF end of IRQ */ | ||
187 | #define GPIO_GPIOFINTEN __REG(GPIO_PHYS + 0x58) /* GPIOF IRQ enable */ | ||
188 | #define GPIO_INTSTATUS __REG(GPIO_PHYS + 0x5c) /* GPIOF IRQ latch */ | ||
189 | #define GPIO_RAWINTSTATUS __REG(GPIO_PHYS + 0x60) /* GPIOF IRQ raw */ | ||
190 | |||
191 | |||
192 | #endif /* _ASM_ARCH_REGISTERS_H */ | ||
193 | |||
diff --git a/include/asm-arm/arch-lh7a40x/system.h b/include/asm-arm/arch-lh7a40x/system.h new file mode 100644 index 000000000000..e1df8aa460f2 --- /dev/null +++ b/include/asm-arm/arch-lh7a40x/system.h | |||
@@ -0,0 +1,19 @@ | |||
1 | /* include/asm-arm/arch-lh7a40x/system.h | ||
2 | * | ||
3 | * Copyright (C) 2004 Coastal Environmental Systems | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or | ||
6 | * modify it under the terms of the GNU General Public License | ||
7 | * version 2 as published by the Free Software Foundation. | ||
8 | * | ||
9 | */ | ||
10 | |||
11 | static inline void arch_idle(void) | ||
12 | { | ||
13 | cpu_do_idle (); | ||
14 | } | ||
15 | |||
16 | static inline void arch_reset(char mode) | ||
17 | { | ||
18 | cpu_reset (0); | ||
19 | } | ||
diff --git a/include/asm-arm/arch-lh7a40x/timex.h b/include/asm-arm/arch-lh7a40x/timex.h new file mode 100644 index 000000000000..fa726b670829 --- /dev/null +++ b/include/asm-arm/arch-lh7a40x/timex.h | |||
@@ -0,0 +1,17 @@ | |||
1 | /* include/asm-arm/arch-lh7a40x/timex.h | ||
2 | * | ||
3 | * Copyright (C) 2004 Coastal Environmental Systems | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or | ||
6 | * modify it under the terms of the GNU General Public License | ||
7 | * version 2 as published by the Free Software Foundation. | ||
8 | * | ||
9 | */ | ||
10 | |||
11 | #include <asm/arch/constants.h> | ||
12 | |||
13 | #define CLOCK_TICK_RATE (PLL_CLOCK/6/16) | ||
14 | |||
15 | /* | ||
16 | #define CLOCK_TICK_RATE 3686400 | ||
17 | */ | ||
diff --git a/include/asm-arm/arch-lh7a40x/uncompress.h b/include/asm-arm/arch-lh7a40x/uncompress.h new file mode 100644 index 000000000000..ec8ab67122f3 --- /dev/null +++ b/include/asm-arm/arch-lh7a40x/uncompress.h | |||
@@ -0,0 +1,43 @@ | |||
1 | /* include/asm-arm/arch-lh7a40x/uncompress.h | ||
2 | * | ||
3 | * Copyright (C) 2004 Coastal Environmental Systems | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or | ||
6 | * modify it under the terms of the GNU General Public License | ||
7 | * version 2 as published by the Free Software Foundation. | ||
8 | * | ||
9 | */ | ||
10 | |||
11 | #include <asm/arch/registers.h> | ||
12 | |||
13 | #ifndef UART_R_DATA | ||
14 | # define UART_R_DATA (0x00) | ||
15 | #endif | ||
16 | #ifndef UART_R_STATUS | ||
17 | # define UART_R_STATUS (0x10) | ||
18 | #endif | ||
19 | #define nTxRdy (0x20) /* Not TxReady (literally Tx FIFO full) */ | ||
20 | |||
21 | /* Access UART with physical addresses before MMU is setup */ | ||
22 | #define UART_STATUS (*(volatile unsigned long*) (UART2_PHYS + UART_R_STATUS)) | ||
23 | #define UART_DATA (*(volatile unsigned long*) (UART2_PHYS + UART_R_DATA)) | ||
24 | |||
25 | static __inline__ void putc (char ch) | ||
26 | { | ||
27 | while (UART_STATUS & nTxRdy) | ||
28 | ; | ||
29 | UART_DATA = ch; | ||
30 | } | ||
31 | |||
32 | static void putstr (const char* sz) | ||
33 | { | ||
34 | for (; *sz; ++sz) { | ||
35 | putc (*sz); | ||
36 | if (*sz == '\n') | ||
37 | putc ('\r'); | ||
38 | } | ||
39 | } | ||
40 | |||
41 | /* NULL functions; we don't presently need them */ | ||
42 | #define arch_decomp_setup() | ||
43 | #define arch_decomp_wdog() | ||
diff --git a/include/asm-arm/arch-lh7a40x/vmalloc.h b/include/asm-arm/arch-lh7a40x/vmalloc.h new file mode 100644 index 000000000000..5ac607925bea --- /dev/null +++ b/include/asm-arm/arch-lh7a40x/vmalloc.h | |||
@@ -0,0 +1,21 @@ | |||
1 | /* include/asm-arm/arch-lh7a40x/vmalloc.h | ||
2 | * | ||
3 | * Copyright (C) 2004 Coastal Environmental Systems | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or | ||
6 | * modify it under the terms of the GNU General Public License | ||
7 | * version 2 as published by the Free Software Foundation. | ||
8 | * | ||
9 | */ | ||
10 | |||
11 | /* | ||
12 | * Just any arbitrary offset to the start of the vmalloc VM area: the | ||
13 | * current 8MB value just means that there will be a 8MB "hole" after | ||
14 | * the physical memory until the kernel virtual memory starts. That | ||
15 | * means that any out-of-bounds memory accesses will hopefully be | ||
16 | * caught. The vmalloc() routines leaves a hole of 4kB (one page) | ||
17 | * between each vmalloced area for the same reason. ;) | ||
18 | */ | ||
19 | #define VMALLOC_OFFSET (8*1024*1024) | ||
20 | #define VMALLOC_START (((unsigned long)high_memory + VMALLOC_OFFSET) & ~(VMALLOC_OFFSET-1)) | ||
21 | #define VMALLOC_END (0xe8000000) | ||
diff --git a/include/asm-arm/arch-omap/aic23.h b/include/asm-arm/arch-omap/aic23.h new file mode 100644 index 000000000000..590bac25b7c4 --- /dev/null +++ b/include/asm-arm/arch-omap/aic23.h | |||
@@ -0,0 +1,112 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-omap/aic23.h | ||
3 | * | ||
4 | * Hardware definitions for TI TLV320AIC23 audio codec | ||
5 | * | ||
6 | * Copyright (C) 2002 RidgeRun, Inc. | ||
7 | * Author: Steve Johnson | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or modify it | ||
10 | * under the terms of the GNU General Public License as published by the | ||
11 | * Free Software Foundation; either version 2 of the License, or (at your | ||
12 | * option) any later version. | ||
13 | * | ||
14 | * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED | ||
15 | * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | ||
16 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN | ||
17 | * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, | ||
18 | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
19 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | ||
20 | * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||
21 | * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
22 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | ||
23 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
24 | * | ||
25 | * You should have received a copy of the GNU General Public License along | ||
26 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
27 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
28 | */ | ||
29 | |||
30 | #ifndef __ASM_ARCH_AIC23_H | ||
31 | #define __ASM_ARCH_AIC23_H | ||
32 | |||
33 | // Codec TLV320AIC23 | ||
34 | #define LEFT_LINE_VOLUME_ADDR 0x00 | ||
35 | #define RIGHT_LINE_VOLUME_ADDR 0x01 | ||
36 | #define LEFT_CHANNEL_VOLUME_ADDR 0x02 | ||
37 | #define RIGHT_CHANNEL_VOLUME_ADDR 0x03 | ||
38 | #define ANALOG_AUDIO_CONTROL_ADDR 0x04 | ||
39 | #define DIGITAL_AUDIO_CONTROL_ADDR 0x05 | ||
40 | #define POWER_DOWN_CONTROL_ADDR 0x06 | ||
41 | #define DIGITAL_AUDIO_FORMAT_ADDR 0x07 | ||
42 | #define SAMPLE_RATE_CONTROL_ADDR 0x08 | ||
43 | #define DIGITAL_INTERFACE_ACT_ADDR 0x09 | ||
44 | #define RESET_CONTROL_ADDR 0x0F | ||
45 | |||
46 | // Left (right) line input volume control register | ||
47 | #define LRS_ENABLED 0x0100 | ||
48 | #define LIM_MUTED 0x0080 | ||
49 | #define LIV_DEFAULT 0x0017 | ||
50 | #define LIV_MAX 0x001f | ||
51 | #define LIV_MIN 0x0000 | ||
52 | |||
53 | // Left (right) channel headphone volume control register | ||
54 | #define LZC_ON 0x0080 | ||
55 | #define LHV_DEFAULT 0x0079 | ||
56 | #define LHV_MAX 0x007f | ||
57 | #define LHV_MIN 0x0000 | ||
58 | |||
59 | // Analog audio path control register | ||
60 | #define STE_ENABLED 0x0020 | ||
61 | #define DAC_SELECTED 0x0010 | ||
62 | #define BYPASS_ON 0x0008 | ||
63 | #define INSEL_MIC 0x0004 | ||
64 | #define MICM_MUTED 0x0002 | ||
65 | #define MICB_20DB 0x0001 | ||
66 | |||
67 | // Digital audio path control register | ||
68 | #define DACM_MUTE 0x0008 | ||
69 | #define DEEMP_32K 0x0002 | ||
70 | #define DEEMP_44K 0x0004 | ||
71 | #define DEEMP_48K 0x0006 | ||
72 | #define ADCHP_ON 0x0001 | ||
73 | |||
74 | // Power control down register | ||
75 | #define DEVICE_POWER_OFF 0x0080 | ||
76 | #define CLK_OFF 0x0040 | ||
77 | #define OSC_OFF 0x0020 | ||
78 | #define OUT_OFF 0x0010 | ||
79 | #define DAC_OFF 0x0008 | ||
80 | #define ADC_OFF 0x0004 | ||
81 | #define MIC_OFF 0x0002 | ||
82 | #define LINE_OFF 0x0001 | ||
83 | |||
84 | // Digital audio interface register | ||
85 | #define MS_MASTER 0x0040 | ||
86 | #define LRSWAP_ON 0x0020 | ||
87 | #define LRP_ON 0x0010 | ||
88 | #define IWL_16 0x0000 | ||
89 | #define IWL_20 0x0004 | ||
90 | #define IWL_24 0x0008 | ||
91 | #define IWL_32 0x000C | ||
92 | #define FOR_I2S 0x0002 | ||
93 | #define FOR_DSP 0x0003 | ||
94 | |||
95 | // Sample rate control register | ||
96 | #define CLKOUT_HALF 0x0080 | ||
97 | #define CLKIN_HALF 0x0040 | ||
98 | #define BOSR_384fs 0x0002 // BOSR_272fs when in USB mode | ||
99 | #define USB_CLK_ON 0x0001 | ||
100 | #define SR_MASK 0xf | ||
101 | #define CLKOUT_SHIFT 7 | ||
102 | #define CLKIN_SHIFT 6 | ||
103 | #define SR_SHIFT 2 | ||
104 | #define BOSR_SHIFT 1 | ||
105 | |||
106 | // Digital interface register | ||
107 | #define ACT_ON 0x0001 | ||
108 | |||
109 | #define TLV320AIC23ID1 (0x1a) // cs low | ||
110 | #define TLV320AIC23ID2 (0x1b) // cs high | ||
111 | |||
112 | #endif /* __ASM_ARCH_AIC23_H */ | ||
diff --git a/include/asm-arm/arch-omap/board-h2.h b/include/asm-arm/arch-omap/board-h2.h new file mode 100644 index 000000000000..60f002b72983 --- /dev/null +++ b/include/asm-arm/arch-omap/board-h2.h | |||
@@ -0,0 +1,47 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-omap/board-h2.h | ||
3 | * | ||
4 | * Hardware definitions for TI OMAP1610 H2 board. | ||
5 | * | ||
6 | * Cleanup for Linux-2.6 by Dirk Behme <dirk.behme@de.bosch.com> | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify it | ||
9 | * under the terms of the GNU General Public License as published by the | ||
10 | * Free Software Foundation; either version 2 of the License, or (at your | ||
11 | * option) any later version. | ||
12 | * | ||
13 | * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED | ||
14 | * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | ||
15 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN | ||
16 | * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, | ||
17 | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
18 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | ||
19 | * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||
20 | * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
21 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | ||
22 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
23 | * | ||
24 | * You should have received a copy of the GNU General Public License along | ||
25 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
26 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
27 | */ | ||
28 | |||
29 | #ifndef __ASM_ARCH_OMAP_H2_H | ||
30 | #define __ASM_ARCH_OMAP_H2_H | ||
31 | |||
32 | /* Placeholder for H2 specific defines */ | ||
33 | |||
34 | /* At OMAP1610 Innovator the Ethernet is directly connected to CS1 */ | ||
35 | #define OMAP1610_ETHR_START 0x04000300 | ||
36 | |||
37 | /* Intel STRATA NOR flash at CS3 or CS2B(NAND Boot) */ | ||
38 | #define OMAP_NOR_FLASH_SIZE SZ_32M | ||
39 | #define OMAP_NOR_FLASH_START1 0x0C000000 /* CS3 */ | ||
40 | #define OMAP_NOR_FLASH_START2 0x0A000000 /* CS2B */ | ||
41 | |||
42 | /* Samsung NAND flash at CS2B or CS3(NAND Boot) */ | ||
43 | #define OMAP_NAND_FLASH_START1 0x0A000000 /* CS2B */ | ||
44 | #define OMAP_NAND_FLASH_START2 0x0C000000 /* CS3 */ | ||
45 | |||
46 | #endif /* __ASM_ARCH_OMAP_H2_H */ | ||
47 | |||
diff --git a/include/asm-arm/arch-omap/board-h3.h b/include/asm-arm/arch-omap/board-h3.h new file mode 100644 index 000000000000..e4d1cd231731 --- /dev/null +++ b/include/asm-arm/arch-omap/board-h3.h | |||
@@ -0,0 +1,49 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-omap/board-h3.h | ||
3 | * | ||
4 | * Copyright (C) 2001 RidgeRun, Inc. | ||
5 | * Copyright (C) 2004 Texas Instruments, Inc. | ||
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 as published by the | ||
9 | * Free Software Foundation; either version 2 of the License, or (at your | ||
10 | * option) any later version. | ||
11 | * | ||
12 | * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED | ||
13 | * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | ||
14 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN | ||
15 | * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, | ||
16 | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
17 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | ||
18 | * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||
19 | * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
20 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | ||
21 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
22 | * | ||
23 | * You should have received a copy of the GNU General Public License along | ||
24 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
25 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
26 | */ | ||
27 | #ifndef __ASM_ARCH_OMAP_H3_H | ||
28 | #define __ASM_ARCH_OMAP_H3_H | ||
29 | |||
30 | /* In OMAP1710 H3 the Ethernet is directly connected to CS1 */ | ||
31 | #define OMAP1710_ETHR_START 0x04000300 | ||
32 | |||
33 | /* Intel STRATA NOR flash at CS3 or CS2B(NAND Boot) */ | ||
34 | #define OMAP_NOR_FLASH_SIZE SZ_32M | ||
35 | #define OMAP_NOR_FLASH_START1 0x0C000000 /* CS3 */ | ||
36 | #define OMAP_NOR_FLASH_START2 0x0A000000 /* CS2B */ | ||
37 | |||
38 | /* Samsung NAND flash at CS2B or CS3(NAND Boot) */ | ||
39 | #define OMAP_NAND_FLASH_START1 0x0A000000 /* CS2B */ | ||
40 | #define OMAP_NAND_FLASH_START2 0x0C000000 /* CS3 */ | ||
41 | |||
42 | #define MAXIRQNUM (IH_BOARD_BASE) | ||
43 | #define MAXFIQNUM MAXIRQNUM | ||
44 | #define MAXSWINUM MAXIRQNUM | ||
45 | |||
46 | #define NR_IRQS (MAXIRQNUM + 1) | ||
47 | |||
48 | |||
49 | #endif /* __ASM_ARCH_OMAP_H3_H */ | ||
diff --git a/include/asm-arm/arch-omap/board-h4.h b/include/asm-arm/arch-omap/board-h4.h new file mode 100644 index 000000000000..79138dcfb4ac --- /dev/null +++ b/include/asm-arm/arch-omap/board-h4.h | |||
@@ -0,0 +1,35 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-omap/board-h4.h | ||
3 | * | ||
4 | * Hardware definitions for TI OMAP1610 H4 board. | ||
5 | * | ||
6 | * Initial creation by Dirk Behme <dirk.behme@de.bosch.com> | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify it | ||
9 | * under the terms of the GNU General Public License as published by the | ||
10 | * Free Software Foundation; either version 2 of the License, or (at your | ||
11 | * option) any later version. | ||
12 | * | ||
13 | * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED | ||
14 | * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | ||
15 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN | ||
16 | * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, | ||
17 | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
18 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | ||
19 | * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||
20 | * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
21 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | ||
22 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
23 | * | ||
24 | * You should have received a copy of the GNU General Public License along | ||
25 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
26 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
27 | */ | ||
28 | |||
29 | #ifndef __ASM_ARCH_OMAP_H4_H | ||
30 | #define __ASM_ARCH_OMAP_H4_H | ||
31 | |||
32 | /* Placeholder for H4 specific defines */ | ||
33 | |||
34 | #endif /* __ASM_ARCH_OMAP_H4_H */ | ||
35 | |||
diff --git a/include/asm-arm/arch-omap/board-innovator.h b/include/asm-arm/arch-omap/board-innovator.h new file mode 100644 index 000000000000..0f1abaefe4de --- /dev/null +++ b/include/asm-arm/arch-omap/board-innovator.h | |||
@@ -0,0 +1,80 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-omap/board-innovator.h | ||
3 | * | ||
4 | * Copyright (C) 2001 RidgeRun, Inc. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify it | ||
7 | * under the terms of the GNU General Public License as published by the | ||
8 | * Free Software Foundation; either version 2 of the License, or (at your | ||
9 | * option) any later version. | ||
10 | * | ||
11 | * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED | ||
12 | * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | ||
13 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN | ||
14 | * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, | ||
15 | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
16 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | ||
17 | * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||
18 | * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
19 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | ||
20 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
21 | * | ||
22 | * You should have received a copy of the GNU General Public License along | ||
23 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
24 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
25 | */ | ||
26 | #ifndef __ASM_ARCH_OMAP_INNOVATOR_H | ||
27 | #define __ASM_ARCH_OMAP_INNOVATOR_H | ||
28 | |||
29 | #if defined (CONFIG_ARCH_OMAP1510) | ||
30 | |||
31 | #ifndef OMAP_SDRAM_DEVICE | ||
32 | #define OMAP_SDRAM_DEVICE D256M_1X16_4B | ||
33 | #endif | ||
34 | |||
35 | #define OMAP1510P1_IMIF_PRI_VALUE 0x00 | ||
36 | #define OMAP1510P1_EMIFS_PRI_VALUE 0x00 | ||
37 | #define OMAP1510P1_EMIFF_PRI_VALUE 0x00 | ||
38 | |||
39 | /* | ||
40 | * These definitions define an area of FLASH set aside | ||
41 | * for the use of MTD/JFFS2. This is the area of flash | ||
42 | * that a JFFS2 filesystem will reside which is mounted | ||
43 | * at boot with the "root=/dev/mtdblock/0 rw" | ||
44 | * command line option. The flash address used here must | ||
45 | * fall within the legal range defined by rrload for storing | ||
46 | * the filesystem component. This address will be sufficiently | ||
47 | * deep into the overall flash range to avoid the other | ||
48 | * components also stored in flash such as the bootloader, | ||
49 | * the bootloader params, and the kernel. | ||
50 | * The SW2 settings for the map below are: | ||
51 | * 1 off, 2 off, 3 on, 4 off. | ||
52 | */ | ||
53 | |||
54 | /* Intel flash_0, partitioned as expected by rrload */ | ||
55 | #define OMAP_FLASH_0_BASE 0xD8000000 | ||
56 | #define OMAP_FLASH_0_START 0x00000000 | ||
57 | #define OMAP_FLASH_0_SIZE SZ_16M | ||
58 | |||
59 | /* Intel flash_1, used for cramfs or other flash file systems */ | ||
60 | #define OMAP_FLASH_1_BASE 0xD9000000 | ||
61 | #define OMAP_FLASH_1_START 0x01000000 | ||
62 | #define OMAP_FLASH_1_SIZE SZ_16M | ||
63 | |||
64 | #define NR_FPGA_IRQS 24 | ||
65 | #define NR_IRQS IH_BOARD_BASE + NR_FPGA_IRQS | ||
66 | |||
67 | #ifndef __ASSEMBLY__ | ||
68 | void fpga_write(unsigned char val, int reg); | ||
69 | unsigned char fpga_read(int reg); | ||
70 | #endif | ||
71 | |||
72 | #endif /* CONFIG_ARCH_OMAP1510 */ | ||
73 | |||
74 | #if defined (CONFIG_ARCH_OMAP16XX) | ||
75 | |||
76 | /* At OMAP1610 Innovator the Ethernet is directly connected to CS1 */ | ||
77 | #define INNOVATOR1610_ETHR_START 0x04000300 | ||
78 | |||
79 | #endif /* CONFIG_ARCH_OMAP1610 */ | ||
80 | #endif /* __ASM_ARCH_OMAP_INNOVATOR_H */ | ||
diff --git a/include/asm-arm/arch-omap/board-netstar.h b/include/asm-arm/arch-omap/board-netstar.h new file mode 100644 index 000000000000..77cc0fb54d54 --- /dev/null +++ b/include/asm-arm/arch-omap/board-netstar.h | |||
@@ -0,0 +1,19 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2004 2N Telekomunikace, Ladislav Michl <michl@2n.cz> | ||
3 | * | ||
4 | * Hardware definitions for OMAP5910 based NetStar board. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | */ | ||
10 | |||
11 | #ifndef __ASM_ARCH_NETSTAR_H | ||
12 | #define __ASM_ARCH_NETSTAR_H | ||
13 | |||
14 | #include <asm/arch/tc.h> | ||
15 | |||
16 | #define OMAP_NAND_FLASH_START1 OMAP_CS1_PHYS + (1 << 23) | ||
17 | #define OMAP_NAND_FLASH_START2 OMAP_CS1_PHYS + (2 << 23) | ||
18 | |||
19 | #endif /* __ASM_ARCH_NETSTAR_H */ | ||
diff --git a/include/asm-arm/arch-omap/board-osk.h b/include/asm-arm/arch-omap/board-osk.h new file mode 100644 index 000000000000..aaa49a0fbd21 --- /dev/null +++ b/include/asm-arm/arch-omap/board-osk.h | |||
@@ -0,0 +1,41 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-omap/board-osk.h | ||
3 | * | ||
4 | * Hardware definitions for TI OMAP5912 OSK board. | ||
5 | * | ||
6 | * Written by Dirk Behme <dirk.behme@de.bosch.com> | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify it | ||
9 | * under the terms of the GNU General Public License as published by the | ||
10 | * Free Software Foundation; either version 2 of the License, or (at your | ||
11 | * option) any later version. | ||
12 | * | ||
13 | * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED | ||
14 | * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | ||
15 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN | ||
16 | * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, | ||
17 | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
18 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | ||
19 | * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||
20 | * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
21 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | ||
22 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
23 | * | ||
24 | * You should have received a copy of the GNU General Public License along | ||
25 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
26 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
27 | */ | ||
28 | |||
29 | #ifndef __ASM_ARCH_OMAP_OSK_H | ||
30 | #define __ASM_ARCH_OMAP_OSK_H | ||
31 | |||
32 | /* At OMAP5912 OSK the Ethernet is directly connected to CS1 */ | ||
33 | #define OMAP_OSK_ETHR_START 0x04800300 | ||
34 | |||
35 | /* Micron NOR flash at CS3 mapped to address 0x0 if BM bit is 1 */ | ||
36 | #define OMAP_OSK_NOR_FLASH_BASE 0xD8000000 | ||
37 | #define OMAP_OSK_NOR_FLASH_SIZE SZ_32M | ||
38 | #define OMAP_OSK_NOR_FLASH_START 0x00000000 | ||
39 | |||
40 | #endif /* __ASM_ARCH_OMAP_OSK_H */ | ||
41 | |||
diff --git a/include/asm-arm/arch-omap/board-perseus2.h b/include/asm-arm/arch-omap/board-perseus2.h new file mode 100644 index 000000000000..0c224cc74fe4 --- /dev/null +++ b/include/asm-arm/arch-omap/board-perseus2.h | |||
@@ -0,0 +1,58 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-omap/board-perseus2.h | ||
3 | * | ||
4 | * Copyright 2003 by Texas Instruments Incorporated | ||
5 | * OMAP730 / Perseus2 support by Jean Pihet | ||
6 | * | ||
7 | * Copyright (C) 2001 RidgeRun, Inc. (http://www.ridgerun.com) | ||
8 | * Author: RidgeRun, Inc. | ||
9 | * | ||
10 | * This program is free software; you can redistribute it and/or modify it | ||
11 | * under the terms of the GNU General Public License as published by the | ||
12 | * Free Software Foundation; either version 2 of the License, or (at your | ||
13 | * option) any later version. | ||
14 | * | ||
15 | * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED | ||
16 | * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | ||
17 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN | ||
18 | * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, | ||
19 | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
20 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | ||
21 | * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||
22 | * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
23 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | ||
24 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
25 | * | ||
26 | * You should have received a copy of the GNU General Public License along | ||
27 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
28 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
29 | */ | ||
30 | #ifndef __ASM_ARCH_OMAP_PERSEUS2_H | ||
31 | #define __ASM_ARCH_OMAP_PERSEUS2_H | ||
32 | |||
33 | #include <asm/arch/fpga.h> | ||
34 | |||
35 | #ifndef OMAP_SDRAM_DEVICE | ||
36 | #define OMAP_SDRAM_DEVICE D256M_1X16_4B | ||
37 | #endif | ||
38 | |||
39 | /* | ||
40 | * These definitions define an area of FLASH set aside | ||
41 | * for the use of MTD/JFFS2. This is the area of flash | ||
42 | * that a JFFS2 filesystem will reside which is mounted | ||
43 | * at boot with the "root=/dev/mtdblock/0 rw" | ||
44 | * command line option. | ||
45 | */ | ||
46 | |||
47 | /* Intel flash_0, partitioned as expected by rrload */ | ||
48 | #define OMAP_FLASH_0_BASE 0xD8000000 /* VA */ | ||
49 | #define OMAP_FLASH_0_START 0x00000000 /* PA */ | ||
50 | #define OMAP_FLASH_0_SIZE SZ_32M | ||
51 | |||
52 | #define MAXIRQNUM IH_BOARD_BASE | ||
53 | #define MAXFIQNUM MAXIRQNUM | ||
54 | #define MAXSWINUM MAXIRQNUM | ||
55 | |||
56 | #define NR_IRQS (MAXIRQNUM + 1) | ||
57 | |||
58 | #endif | ||
diff --git a/include/asm-arm/arch-omap/board-voiceblue.h b/include/asm-arm/arch-omap/board-voiceblue.h new file mode 100644 index 000000000000..33977b8956fb --- /dev/null +++ b/include/asm-arm/arch-omap/board-voiceblue.h | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2004 2N Telekomunikace, Ladislav Michl <michl@2n.cz> | ||
3 | * | ||
4 | * Hardware definitions for OMAP5910 based VoiceBlue board. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | */ | ||
10 | |||
11 | #ifndef __ASM_ARCH_VOICEBLUE_H | ||
12 | #define __ASM_ARCH_VOICEBLUE_H | ||
13 | |||
14 | #if (EXTERNAL_MAX_NR_PORTS < 4) | ||
15 | #undef EXTERNAL_MAX_NR_PORTS | ||
16 | #define EXTERNAL_MAX_NR_PORTS 4 | ||
17 | #endif | ||
18 | |||
19 | extern void voiceblue_wdt_enable(void); | ||
20 | extern void voiceblue_wdt_disable(void); | ||
21 | extern void voiceblue_wdt_ping(void); | ||
22 | extern void voiceblue_reset(void); | ||
23 | |||
24 | #endif /* __ASM_ARCH_VOICEBLUE_H */ | ||
25 | |||
diff --git a/include/asm-arm/arch-omap/board.h b/include/asm-arm/arch-omap/board.h new file mode 100644 index 000000000000..1cefd60b6f2a --- /dev/null +++ b/include/asm-arm/arch-omap/board.h | |||
@@ -0,0 +1,126 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-omap/board.h | ||
3 | * | ||
4 | * Information structures for board-specific data | ||
5 | * | ||
6 | * Copyright (C) 2004 Nokia Corporation | ||
7 | * Written by Juha Yrjölä <juha.yrjola@nokia.com> | ||
8 | */ | ||
9 | |||
10 | #ifndef _OMAP_BOARD_H | ||
11 | #define _OMAP_BOARD_H | ||
12 | |||
13 | #include <linux/config.h> | ||
14 | #include <linux/types.h> | ||
15 | |||
16 | /* Different peripheral ids */ | ||
17 | #define OMAP_TAG_CLOCK 0x4f01 | ||
18 | #define OMAP_TAG_MMC 0x4f02 | ||
19 | #define OMAP_TAG_UART 0x4f03 | ||
20 | #define OMAP_TAG_USB 0x4f04 | ||
21 | #define OMAP_TAG_LCD 0x4f05 | ||
22 | #define OMAP_TAG_GPIO_SWITCH 0x4f06 | ||
23 | |||
24 | #define OMAP_TAG_BOOT_REASON 0x4f80 | ||
25 | #define OMAP_TAG_FLASH_PART 0x4f81 | ||
26 | |||
27 | struct omap_clock_config { | ||
28 | /* 0 for 12 MHz, 1 for 13 MHz and 2 for 19.2 MHz */ | ||
29 | u8 system_clock_type; | ||
30 | }; | ||
31 | |||
32 | struct omap_mmc_config { | ||
33 | u8 mmc_blocks; | ||
34 | s16 mmc1_power_pin, mmc2_power_pin; | ||
35 | s16 mmc1_switch_pin, mmc2_switch_pin; | ||
36 | }; | ||
37 | |||
38 | struct omap_uart_config { | ||
39 | u8 console_uart; | ||
40 | u32 console_speed; | ||
41 | }; | ||
42 | |||
43 | struct omap_usb_config { | ||
44 | /* Configure drivers according to the connectors on your board: | ||
45 | * - "A" connector (rectagular) | ||
46 | * ... for host/OHCI use, set "register_host". | ||
47 | * - "B" connector (squarish) or "Mini-B" | ||
48 | * ... for device/gadget use, set "register_dev". | ||
49 | * - "Mini-AB" connector (very similar to Mini-B) | ||
50 | * ... for OTG use as device OR host, initialize "otg" | ||
51 | */ | ||
52 | unsigned register_host:1; | ||
53 | unsigned register_dev:1; | ||
54 | u8 otg; /* port number, 1-based: usb1 == 2 */ | ||
55 | |||
56 | u8 hmc_mode; | ||
57 | |||
58 | /* implicitly true if otg: host supports remote wakeup? */ | ||
59 | u8 rwc; | ||
60 | |||
61 | /* signaling pins used to talk to transceiver on usbN: | ||
62 | * 0 == usbN unused | ||
63 | * 2 == usb0-only, using internal transceiver | ||
64 | * 3 == 3 wire bidirectional | ||
65 | * 4 == 4 wire bidirectional | ||
66 | * 6 == 6 wire unidirectional (or TLL) | ||
67 | */ | ||
68 | u8 pins[3]; | ||
69 | }; | ||
70 | |||
71 | struct omap_lcd_config { | ||
72 | char panel_name[16]; | ||
73 | char ctrl_name[16]; | ||
74 | }; | ||
75 | |||
76 | /* Cover: | ||
77 | * high -> closed | ||
78 | * low -> open | ||
79 | * Connection: | ||
80 | * high -> connected | ||
81 | * low -> disconnected | ||
82 | */ | ||
83 | #define OMAP_GPIO_SWITCH_TYPE_COVER 0x0000 | ||
84 | #define OMAP_GPIO_SWITCH_TYPE_CONNECTION 0x0001 | ||
85 | #define OMAP_GPIO_SWITCH_FLAG_INVERTED 0x0001 | ||
86 | struct omap_gpio_switch_config { | ||
87 | char name[12]; | ||
88 | u16 gpio; | ||
89 | int flags:4; | ||
90 | int type:4; | ||
91 | int key_code:24; /* Linux key code */ | ||
92 | }; | ||
93 | |||
94 | struct omap_flash_part_config { | ||
95 | char part_table[0]; | ||
96 | }; | ||
97 | |||
98 | struct omap_boot_reason_config { | ||
99 | char reason_str[12]; | ||
100 | }; | ||
101 | |||
102 | |||
103 | struct omap_board_config_entry { | ||
104 | u16 tag; | ||
105 | u16 len; | ||
106 | u8 data[0]; | ||
107 | }; | ||
108 | |||
109 | struct omap_board_config_kernel { | ||
110 | u16 tag; | ||
111 | const void *data; | ||
112 | }; | ||
113 | |||
114 | extern const void *__omap_get_config(u16 tag, size_t len, int nr); | ||
115 | |||
116 | #define omap_get_config(tag, type) \ | ||
117 | ((const type *) __omap_get_config((tag), sizeof(type), 0)) | ||
118 | #define omap_get_nr_config(tag, type, nr) \ | ||
119 | ((const type *) __omap_get_config((tag), sizeof(type), (nr))) | ||
120 | |||
121 | extern const void *omap_get_var_config(u16 tag, size_t *len); | ||
122 | |||
123 | extern struct omap_board_config_kernel *omap_board_config; | ||
124 | extern int omap_board_config_size; | ||
125 | |||
126 | #endif | ||
diff --git a/include/asm-arm/arch-omap/cpu.h b/include/asm-arm/arch-omap/cpu.h new file mode 100644 index 000000000000..e8786713ee5c --- /dev/null +++ b/include/asm-arm/arch-omap/cpu.h | |||
@@ -0,0 +1,183 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-omap/cpu.h | ||
3 | * | ||
4 | * OMAP cpu type detection | ||
5 | * | ||
6 | * Copyright (C) 2004 Nokia Corporation | ||
7 | * | ||
8 | * Written by Tony Lindgren <tony.lindgren@nokia.com> | ||
9 | * | ||
10 | * This program is free software; you can redistribute it and/or modify | ||
11 | * it under the terms of the GNU General Public License as published by | ||
12 | * the Free Software Foundation; either version 2 of the License, or | ||
13 | * (at your option) any later version. | ||
14 | * | ||
15 | * This program is distributed in the hope that it will be useful, | ||
16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
18 | * GNU General Public License for more details. | ||
19 | * | ||
20 | * You should have received a copy of the GNU General Public License | ||
21 | * along with this program; if not, write to the Free Software | ||
22 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
23 | * | ||
24 | */ | ||
25 | |||
26 | #ifndef __ASM_ARCH_OMAP_CPU_H | ||
27 | #define __ASM_ARCH_OMAP_CPU_H | ||
28 | |||
29 | extern unsigned int system_rev; | ||
30 | |||
31 | #define OMAP_DIE_ID_0 0xfffe1800 | ||
32 | #define OMAP_DIE_ID_1 0xfffe1804 | ||
33 | #define OMAP_PRODUCTION_ID_0 0xfffe2000 | ||
34 | #define OMAP_PRODUCTION_ID_1 0xfffe2004 | ||
35 | #define OMAP32_ID_0 0xfffed400 | ||
36 | #define OMAP32_ID_1 0xfffed404 | ||
37 | |||
38 | /* | ||
39 | * Test if multicore OMAP support is needed | ||
40 | */ | ||
41 | #undef MULTI_OMAP | ||
42 | #undef OMAP_NAME | ||
43 | |||
44 | #ifdef CONFIG_ARCH_OMAP730 | ||
45 | # ifdef OMAP_NAME | ||
46 | # undef MULTI_OMAP | ||
47 | # define MULTI_OMAP | ||
48 | # else | ||
49 | # define OMAP_NAME omap730 | ||
50 | # endif | ||
51 | #endif | ||
52 | #ifdef CONFIG_ARCH_OMAP1510 | ||
53 | # ifdef OMAP_NAME | ||
54 | # undef MULTI_OMAP | ||
55 | # define MULTI_OMAP | ||
56 | # else | ||
57 | # define OMAP_NAME omap1510 | ||
58 | # endif | ||
59 | #endif | ||
60 | #ifdef CONFIG_ARCH_OMAP16XX | ||
61 | # ifdef OMAP_NAME | ||
62 | # undef MULTI_OMAP | ||
63 | # define MULTI_OMAP | ||
64 | # else | ||
65 | # define OMAP_NAME omap1610 | ||
66 | # endif | ||
67 | #endif | ||
68 | #ifdef CONFIG_ARCH_OMAP16XX | ||
69 | # ifdef OMAP_NAME | ||
70 | # undef MULTI_OMAP | ||
71 | # define MULTI_OMAP | ||
72 | # else | ||
73 | # define OMAP_NAME omap1710 | ||
74 | # endif | ||
75 | #endif | ||
76 | |||
77 | /* | ||
78 | * Generate various OMAP cpu specific macros, and cpu class | ||
79 | * specific macros | ||
80 | */ | ||
81 | #define GET_OMAP_TYPE ((system_rev >> 24) & 0xff) | ||
82 | #define GET_OMAP_CLASS (system_rev & 0xff) | ||
83 | |||
84 | #define IS_OMAP_TYPE(type, id) \ | ||
85 | static inline int is_omap ##type (void) \ | ||
86 | { \ | ||
87 | return (GET_OMAP_TYPE == (id)) ? 1 : 0; \ | ||
88 | } | ||
89 | |||
90 | #define IS_OMAP_CLASS(class, id) \ | ||
91 | static inline int is_omap ##class (void) \ | ||
92 | { \ | ||
93 | return (GET_OMAP_CLASS == (id)) ? 1 : 0; \ | ||
94 | } | ||
95 | |||
96 | IS_OMAP_TYPE(730, 0x07) | ||
97 | IS_OMAP_TYPE(1510, 0x15) | ||
98 | IS_OMAP_TYPE(1610, 0x16) | ||
99 | IS_OMAP_TYPE(5912, 0x16) | ||
100 | IS_OMAP_TYPE(1710, 0x17) | ||
101 | IS_OMAP_TYPE(2420, 0x24) | ||
102 | |||
103 | IS_OMAP_CLASS(7xx, 0x07) | ||
104 | IS_OMAP_CLASS(15xx, 0x15) | ||
105 | IS_OMAP_CLASS(16xx, 0x16) | ||
106 | IS_OMAP_CLASS(24xx, 0x24) | ||
107 | |||
108 | /* | ||
109 | * Macros to group OMAP types into cpu classes. | ||
110 | * These can be used in most places. | ||
111 | * cpu_is_omap15xx(): True for 1510 and 5910 | ||
112 | * cpu_is_omap16xx(): True for 1610, 5912 and 1710 | ||
113 | */ | ||
114 | #if defined(MULTI_OMAP) | ||
115 | # define cpu_is_omap7xx() is_omap7xx() | ||
116 | # define cpu_is_omap15xx() is_omap15xx() | ||
117 | # if !(defined(CONFIG_ARCH_OMAP1510) || defined(CONFIG_ARCH_OMAP730)) | ||
118 | # define cpu_is_omap16xx() 1 | ||
119 | # else | ||
120 | # define cpu_is_omap16xx() is_omap16xx() | ||
121 | # endif | ||
122 | #else | ||
123 | # if defined(CONFIG_ARCH_OMAP730) | ||
124 | # define cpu_is_omap7xx() 1 | ||
125 | # else | ||
126 | # define cpu_is_omap7xx() 0 | ||
127 | # endif | ||
128 | # if defined(CONFIG_ARCH_OMAP1510) | ||
129 | # define cpu_is_omap15xx() 1 | ||
130 | # else | ||
131 | # define cpu_is_omap15xx() 0 | ||
132 | # endif | ||
133 | # if defined(CONFIG_ARCH_OMAP16XX) | ||
134 | # define cpu_is_omap16xx() 1 | ||
135 | # else | ||
136 | # define cpu_is_omap16xx() 0 | ||
137 | # endif | ||
138 | #endif | ||
139 | |||
140 | #if defined(MULTI_OMAP) | ||
141 | # define cpu_is_omap730() is_omap730() | ||
142 | # define cpu_is_omap1510() is_omap1510() | ||
143 | # define cpu_is_omap1610() is_omap1610() | ||
144 | # define cpu_is_omap5912() is_omap5912() | ||
145 | # define cpu_is_omap1710() is_omap1710() | ||
146 | #else | ||
147 | # if defined(CONFIG_ARCH_OMAP730) | ||
148 | # define cpu_is_omap730() 1 | ||
149 | # else | ||
150 | # define cpu_is_omap730() 0 | ||
151 | # endif | ||
152 | # if defined(CONFIG_ARCH_OMAP1510) | ||
153 | # define cpu_is_omap1510() 1 | ||
154 | # else | ||
155 | # define cpu_is_omap1510() 0 | ||
156 | # endif | ||
157 | # if defined(CONFIG_ARCH_OMAP16XX) | ||
158 | # define cpu_is_omap1610() 1 | ||
159 | # else | ||
160 | # define cpu_is_omap1610() 0 | ||
161 | # endif | ||
162 | # if defined(CONFIG_ARCH_OMAP16XX) | ||
163 | # define cpu_is_omap5912() 1 | ||
164 | # else | ||
165 | # define cpu_is_omap5912() 0 | ||
166 | # endif | ||
167 | # if defined(CONFIG_ARCH_OMAP16XX) | ||
168 | # define cpu_is_omap1610() is_omap1610() | ||
169 | # define cpu_is_omap5912() is_omap5912() | ||
170 | # define cpu_is_omap1710() is_omap1710() | ||
171 | # else | ||
172 | # define cpu_is_omap1610() 0 | ||
173 | # define cpu_is_omap5912() 0 | ||
174 | # define cpu_is_omap1710() 0 | ||
175 | # endif | ||
176 | # if defined(CONFIG_ARCH_OMAP2420) | ||
177 | # define cpu_is_omap2420() 1 | ||
178 | # else | ||
179 | # define cpu_is_omap2420() 0 | ||
180 | # endif | ||
181 | #endif | ||
182 | |||
183 | #endif | ||
diff --git a/include/asm-arm/arch-omap/debug-macro.S b/include/asm-arm/arch-omap/debug-macro.S new file mode 100644 index 000000000000..83bb458afd0b --- /dev/null +++ b/include/asm-arm/arch-omap/debug-macro.S | |||
@@ -0,0 +1,45 @@ | |||
1 | /* linux/include/asm-arm/arch-omap/debug-macro.S | ||
2 | * | ||
3 | * Debugging macro include header | ||
4 | * | ||
5 | * Copyright (C) 1994-1999 Russell King | ||
6 | * Moved from linux/arch/arm/kernel/debug.S by Ben Dooks | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | * | ||
12 | */ | ||
13 | |||
14 | .macro addruart,rx | ||
15 | mrc p15, 0, \rx, c1, c0 | ||
16 | tst \rx, #1 @ MMU enabled? | ||
17 | moveq \rx, #0xff000000 @ physical base address | ||
18 | movne \rx, #0xfe000000 @ virtual base | ||
19 | orr \rx, \rx, #0x00fb0000 | ||
20 | #ifdef CONFIG_OMAP_LL_DEBUG_UART3 | ||
21 | orr \rx, \rx, #0x00009000 @ UART 3 | ||
22 | #endif | ||
23 | #if defined(CONFIG_OMAP_LL_DEBUG_UART2) || defined(CONFIG_OMAP_LL_DEBUG_UART3) | ||
24 | orr \rx, \rx, #0x00000800 @ UART 2 & 3 | ||
25 | #endif | ||
26 | .endm | ||
27 | |||
28 | .macro senduart,rd,rx | ||
29 | strb \rd, [\rx] | ||
30 | .endm | ||
31 | |||
32 | .macro busyuart,rd,rx | ||
33 | 1001: ldrb \rd, [\rx, #(0x5 << 2)] @ OMAP-1510 and friends | ||
34 | and \rd, \rd, #0x60 | ||
35 | teq \rd, #0x60 | ||
36 | beq 1002f | ||
37 | ldrb \rd, [\rx, #(0x5 << 0)] @ OMAP-730 only | ||
38 | and \rd, \rd, #0x60 | ||
39 | teq \rd, #0x60 | ||
40 | bne 1001b | ||
41 | 1002: | ||
42 | .endm | ||
43 | |||
44 | .macro waituart,rd,rx | ||
45 | .endm | ||
diff --git a/include/asm-arm/arch-omap/dma.h b/include/asm-arm/arch-omap/dma.h new file mode 100644 index 000000000000..d785248377db --- /dev/null +++ b/include/asm-arm/arch-omap/dma.h | |||
@@ -0,0 +1,264 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-omap/dma.h | ||
3 | * | ||
4 | * Copyright (C) 2003 Nokia Corporation | ||
5 | * Author: Juha Yrjölä <juha.yrjola@nokia.com> | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License as published by | ||
9 | * the Free Software Foundation; either version 2 of the License, or | ||
10 | * (at your option) any later version. | ||
11 | * | ||
12 | * This program is distributed in the hope that it will be useful, | ||
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
15 | * GNU General Public License for more details. | ||
16 | * | ||
17 | * You should have received a copy of the GNU General Public License | ||
18 | * along with this program; if not, write to the Free Software | ||
19 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
20 | */ | ||
21 | #ifndef __ASM_ARCH_DMA_H | ||
22 | #define __ASM_ARCH_DMA_H | ||
23 | |||
24 | #define MAX_DMA_ADDRESS 0xffffffff | ||
25 | |||
26 | #define OMAP_LOGICAL_DMA_CH_COUNT 17 | ||
27 | |||
28 | #define OMAP_DMA_NO_DEVICE 0 | ||
29 | #define OMAP_DMA_MCSI1_TX 1 | ||
30 | #define OMAP_DMA_MCSI1_RX 2 | ||
31 | #define OMAP_DMA_I2C_RX 3 | ||
32 | #define OMAP_DMA_I2C_TX 4 | ||
33 | #define OMAP_DMA_EXT_NDMA_REQ 5 | ||
34 | #define OMAP_DMA_EXT_NDMA_REQ2 6 | ||
35 | #define OMAP_DMA_UWIRE_TX 7 | ||
36 | #define OMAP_DMA_MCBSP1_TX 8 | ||
37 | #define OMAP_DMA_MCBSP1_RX 9 | ||
38 | #define OMAP_DMA_MCBSP3_TX 10 | ||
39 | #define OMAP_DMA_MCBSP3_RX 11 | ||
40 | #define OMAP_DMA_UART1_TX 12 | ||
41 | #define OMAP_DMA_UART1_RX 13 | ||
42 | #define OMAP_DMA_UART2_TX 14 | ||
43 | #define OMAP_DMA_UART2_RX 15 | ||
44 | #define OMAP_DMA_MCBSP2_TX 16 | ||
45 | #define OMAP_DMA_MCBSP2_RX 17 | ||
46 | #define OMAP_DMA_UART3_TX 18 | ||
47 | #define OMAP_DMA_UART3_RX 19 | ||
48 | #define OMAP_DMA_CAMERA_IF_RX 20 | ||
49 | #define OMAP_DMA_MMC_TX 21 | ||
50 | #define OMAP_DMA_MMC_RX 22 | ||
51 | #define OMAP_DMA_NAND 23 | ||
52 | #define OMAP_DMA_IRQ_LCD_LINE 24 | ||
53 | #define OMAP_DMA_MEMORY_STICK 25 | ||
54 | #define OMAP_DMA_USB_W2FC_RX0 26 | ||
55 | #define OMAP_DMA_USB_W2FC_RX1 27 | ||
56 | #define OMAP_DMA_USB_W2FC_RX2 28 | ||
57 | #define OMAP_DMA_USB_W2FC_TX0 29 | ||
58 | #define OMAP_DMA_USB_W2FC_TX1 30 | ||
59 | #define OMAP_DMA_USB_W2FC_TX2 31 | ||
60 | |||
61 | /* These are only for 1610 */ | ||
62 | #define OMAP_DMA_CRYPTO_DES_IN 32 | ||
63 | #define OMAP_DMA_SPI_TX 33 | ||
64 | #define OMAP_DMA_SPI_RX 34 | ||
65 | #define OMAP_DMA_CRYPTO_HASH 35 | ||
66 | #define OMAP_DMA_CCP_ATTN 36 | ||
67 | #define OMAP_DMA_CCP_FIFO_NOT_EMPTY 37 | ||
68 | #define OMAP_DMA_CMT_APE_TX_CHAN_0 38 | ||
69 | #define OMAP_DMA_CMT_APE_RV_CHAN_0 39 | ||
70 | #define OMAP_DMA_CMT_APE_TX_CHAN_1 40 | ||
71 | #define OMAP_DMA_CMT_APE_RV_CHAN_1 41 | ||
72 | #define OMAP_DMA_CMT_APE_TX_CHAN_2 42 | ||
73 | #define OMAP_DMA_CMT_APE_RV_CHAN_2 43 | ||
74 | #define OMAP_DMA_CMT_APE_TX_CHAN_3 44 | ||
75 | #define OMAP_DMA_CMT_APE_RV_CHAN_3 45 | ||
76 | #define OMAP_DMA_CMT_APE_TX_CHAN_4 46 | ||
77 | #define OMAP_DMA_CMT_APE_RV_CHAN_4 47 | ||
78 | #define OMAP_DMA_CMT_APE_TX_CHAN_5 48 | ||
79 | #define OMAP_DMA_CMT_APE_RV_CHAN_5 49 | ||
80 | #define OMAP_DMA_CMT_APE_TX_CHAN_6 50 | ||
81 | #define OMAP_DMA_CMT_APE_RV_CHAN_6 51 | ||
82 | #define OMAP_DMA_CMT_APE_TX_CHAN_7 52 | ||
83 | #define OMAP_DMA_CMT_APE_RV_CHAN_7 53 | ||
84 | #define OMAP_DMA_MMC2_TX 54 | ||
85 | #define OMAP_DMA_MMC2_RX 55 | ||
86 | #define OMAP_DMA_CRYPTO_DES_OUT 56 | ||
87 | |||
88 | |||
89 | #define OMAP_DMA_BASE (0xfffed800) | ||
90 | #define OMAP_DMA_GCR (OMAP_DMA_BASE + 0x400) | ||
91 | #define OMAP_DMA_GSCR (OMAP_DMA_BASE + 0x404) | ||
92 | #define OMAP_DMA_GRST (OMAP_DMA_BASE + 0x408) | ||
93 | #define OMAP_DMA_HW_ID (OMAP_DMA_BASE + 0x442) | ||
94 | #define OMAP_DMA_PCH2_ID (OMAP_DMA_BASE + 0x444) | ||
95 | #define OMAP_DMA_PCH0_ID (OMAP_DMA_BASE + 0x446) | ||
96 | #define OMAP_DMA_PCH1_ID (OMAP_DMA_BASE + 0x448) | ||
97 | #define OMAP_DMA_PCHG_ID (OMAP_DMA_BASE + 0x44a) | ||
98 | #define OMAP_DMA_PCHD_ID (OMAP_DMA_BASE + 0x44c) | ||
99 | #define OMAP_DMA_CAPS_0_U (OMAP_DMA_BASE + 0x44e) | ||
100 | #define OMAP_DMA_CAPS_0_L (OMAP_DMA_BASE + 0x450) | ||
101 | #define OMAP_DMA_CAPS_1_U (OMAP_DMA_BASE + 0x452) | ||
102 | #define OMAP_DMA_CAPS_1_L (OMAP_DMA_BASE + 0x454) | ||
103 | #define OMAP_DMA_CAPS_2 (OMAP_DMA_BASE + 0x456) | ||
104 | #define OMAP_DMA_CAPS_3 (OMAP_DMA_BASE + 0x458) | ||
105 | #define OMAP_DMA_CAPS_4 (OMAP_DMA_BASE + 0x45a) | ||
106 | #define OMAP_DMA_PCH2_SR (OMAP_DMA_BASE + 0x460) | ||
107 | #define OMAP_DMA_PCH0_SR (OMAP_DMA_BASE + 0x480) | ||
108 | #define OMAP_DMA_PCH1_SR (OMAP_DMA_BASE + 0x482) | ||
109 | #define OMAP_DMA_PCHD_SR (OMAP_DMA_BASE + 0x4c0) | ||
110 | |||
111 | #define OMAP1510_DMA_LCD_BASE (0xfffedb00) | ||
112 | #define OMAP1510_DMA_LCD_CTRL (OMAP1510_DMA_LCD_BASE + 0x00) | ||
113 | #define OMAP1510_DMA_LCD_TOP_F1_L (OMAP1510_DMA_LCD_BASE + 0x02) | ||
114 | #define OMAP1510_DMA_LCD_TOP_F1_U (OMAP1510_DMA_LCD_BASE + 0x04) | ||
115 | #define OMAP1510_DMA_LCD_BOT_F1_L (OMAP1510_DMA_LCD_BASE + 0x06) | ||
116 | #define OMAP1510_DMA_LCD_BOT_F1_U (OMAP1510_DMA_LCD_BASE + 0x08) | ||
117 | |||
118 | #define OMAP1610_DMA_LCD_BASE (0xfffee300) | ||
119 | #define OMAP1610_DMA_LCD_CSDP (OMAP1610_DMA_LCD_BASE + 0xc0) | ||
120 | #define OMAP1610_DMA_LCD_CCR (OMAP1610_DMA_LCD_BASE + 0xc2) | ||
121 | #define OMAP1610_DMA_LCD_CTRL (OMAP1610_DMA_LCD_BASE + 0xc4) | ||
122 | #define OMAP1610_DMA_LCD_TOP_B1_L (OMAP1610_DMA_LCD_BASE + 0xc8) | ||
123 | #define OMAP1610_DMA_LCD_TOP_B1_U (OMAP1610_DMA_LCD_BASE + 0xca) | ||
124 | #define OMAP1610_DMA_LCD_BOT_B1_L (OMAP1610_DMA_LCD_BASE + 0xcc) | ||
125 | #define OMAP1610_DMA_LCD_BOT_B1_U (OMAP1610_DMA_LCD_BASE + 0xce) | ||
126 | #define OMAP1610_DMA_LCD_TOP_B2_L (OMAP1610_DMA_LCD_BASE + 0xd0) | ||
127 | #define OMAP1610_DMA_LCD_TOP_B2_U (OMAP1610_DMA_LCD_BASE + 0xd2) | ||
128 | #define OMAP1610_DMA_LCD_BOT_B2_L (OMAP1610_DMA_LCD_BASE + 0xd4) | ||
129 | #define OMAP1610_DMA_LCD_BOT_B2_U (OMAP1610_DMA_LCD_BASE + 0xd6) | ||
130 | #define OMAP1610_DMA_LCD_SRC_EI_B1 (OMAP1610_DMA_LCD_BASE + 0xd8) | ||
131 | #define OMAP1610_DMA_LCD_SRC_FI_B1_L (OMAP1610_DMA_LCD_BASE + 0xda) | ||
132 | #define OMAP1610_DMA_LCD_SRC_EN_B1 (OMAP1610_DMA_LCD_BASE + 0xe0) | ||
133 | #define OMAP1610_DMA_LCD_SRC_FN_B1 (OMAP1610_DMA_LCD_BASE + 0xe4) | ||
134 | #define OMAP1610_DMA_LCD_LCH_CTRL (OMAP1610_DMA_LCD_BASE + 0xea) | ||
135 | #define OMAP1610_DMA_LCD_SRC_FI_B1_U (OMAP1610_DMA_LCD_BASE + 0xf4) | ||
136 | |||
137 | |||
138 | /* Every LCh has its own set of the registers below */ | ||
139 | #define OMAP_DMA_CSDP(n) (OMAP_DMA_BASE + 0x40 * (n) + 0x00) | ||
140 | #define OMAP_DMA_CCR(n) (OMAP_DMA_BASE + 0x40 * (n) + 0x02) | ||
141 | #define OMAP_DMA_CICR(n) (OMAP_DMA_BASE + 0x40 * (n) + 0x04) | ||
142 | #define OMAP_DMA_CSR(n) (OMAP_DMA_BASE + 0x40 * (n) + 0x06) | ||
143 | #define OMAP_DMA_CSSA_L(n) (OMAP_DMA_BASE + 0x40 * (n) + 0x08) | ||
144 | #define OMAP_DMA_CSSA_U(n) (OMAP_DMA_BASE + 0x40 * (n) + 0x0a) | ||
145 | #define OMAP_DMA_CDSA_L(n) (OMAP_DMA_BASE + 0x40 * (n) + 0x0c) | ||
146 | #define OMAP_DMA_CDSA_U(n) (OMAP_DMA_BASE + 0x40 * (n) + 0x0e) | ||
147 | #define OMAP_DMA_CEN(n) (OMAP_DMA_BASE + 0x40 * (n) + 0x10) | ||
148 | #define OMAP_DMA_CFN(n) (OMAP_DMA_BASE + 0x40 * (n) + 0x12) | ||
149 | #define OMAP_DMA_CSFI(n) (OMAP_DMA_BASE + 0x40 * (n) + 0x14) | ||
150 | #define OMAP_DMA_CSEI(n) (OMAP_DMA_BASE + 0x40 * (n) + 0x16) | ||
151 | #define OMAP_DMA_CSAC(n) (OMAP_DMA_BASE + 0x40 * (n) + 0x18) | ||
152 | #define OMAP_DMA_CDAC(n) (OMAP_DMA_BASE + 0x40 * (n) + 0x1a) | ||
153 | #define OMAP_DMA_CDEI(n) (OMAP_DMA_BASE + 0x40 * (n) + 0x1c) | ||
154 | #define OMAP_DMA_CDFI(n) (OMAP_DMA_BASE + 0x40 * (n) + 0x1e) | ||
155 | #define OMAP_DMA_COLOR_L(n) (OMAP_DMA_BASE + 0x40 * (n) + 0x20) | ||
156 | #define OMAP_DMA_COLOR_U(n) (OMAP_DMA_BASE + 0x40 * (n) + 0x22) | ||
157 | #define OMAP_DMA_CCR2(n) (OMAP_DMA_BASE + 0x40 * (n) + 0x24) | ||
158 | #define OMAP_DMA_CLNK_CTRL(n) (OMAP_DMA_BASE + 0x40 * (n) + 0x28) | ||
159 | #define OMAP_DMA_LCH_CTRL(n) (OMAP_DMA_BASE + 0x40 * (n) + 0x2a) | ||
160 | |||
161 | #define OMAP_DMA_TOUT_IRQ (1 << 0) | ||
162 | #define OMAP_DMA_DROP_IRQ (1 << 1) | ||
163 | #define OMAP_DMA_HALF_IRQ (1 << 2) | ||
164 | #define OMAP_DMA_FRAME_IRQ (1 << 3) | ||
165 | #define OMAP_DMA_LAST_IRQ (1 << 4) | ||
166 | #define OMAP_DMA_BLOCK_IRQ (1 << 5) | ||
167 | #define OMAP_DMA_SYNC_IRQ (1 << 6) | ||
168 | |||
169 | #define OMAP_DMA_DATA_TYPE_S8 0x00 | ||
170 | #define OMAP_DMA_DATA_TYPE_S16 0x01 | ||
171 | #define OMAP_DMA_DATA_TYPE_S32 0x02 | ||
172 | |||
173 | #define OMAP_DMA_SYNC_ELEMENT 0x00 | ||
174 | #define OMAP_DMA_SYNC_FRAME 0x01 | ||
175 | #define OMAP_DMA_SYNC_BLOCK 0x02 | ||
176 | |||
177 | #define OMAP_DMA_PORT_EMIFF 0x00 | ||
178 | #define OMAP_DMA_PORT_EMIFS 0x01 | ||
179 | #define OMAP_DMA_PORT_OCP_T1 0x02 | ||
180 | #define OMAP_DMA_PORT_TIPB 0x03 | ||
181 | #define OMAP_DMA_PORT_OCP_T2 0x04 | ||
182 | #define OMAP_DMA_PORT_MPUI 0x05 | ||
183 | |||
184 | #define OMAP_DMA_AMODE_CONSTANT 0x00 | ||
185 | #define OMAP_DMA_AMODE_POST_INC 0x01 | ||
186 | #define OMAP_DMA_AMODE_SINGLE_IDX 0x02 | ||
187 | #define OMAP_DMA_AMODE_DOUBLE_IDX 0x03 | ||
188 | |||
189 | /* LCD DMA block numbers */ | ||
190 | enum { | ||
191 | OMAP_LCD_DMA_B1_TOP, | ||
192 | OMAP_LCD_DMA_B1_BOTTOM, | ||
193 | OMAP_LCD_DMA_B2_TOP, | ||
194 | OMAP_LCD_DMA_B2_BOTTOM | ||
195 | }; | ||
196 | |||
197 | enum omap_dma_burst_mode { | ||
198 | OMAP_DMA_DATA_BURST_DIS = 0, | ||
199 | OMAP_DMA_DATA_BURST_4, | ||
200 | OMAP_DMA_DATA_BURST_8 | ||
201 | }; | ||
202 | |||
203 | enum omap_dma_color_mode { | ||
204 | OMAP_DMA_COLOR_DIS = 0, | ||
205 | OMAP_DMA_CONSTANT_FILL, | ||
206 | OMAP_DMA_TRANSPARENT_COPY | ||
207 | }; | ||
208 | |||
209 | extern void omap_set_dma_priority(int dst_port, int priority); | ||
210 | extern int omap_request_dma(int dev_id, const char *dev_name, | ||
211 | void (* callback)(int lch, u16 ch_status, void *data), | ||
212 | void *data, int *dma_ch); | ||
213 | extern void omap_enable_dma_irq(int ch, u16 irq_bits); | ||
214 | extern void omap_disable_dma_irq(int ch, u16 irq_bits); | ||
215 | extern void omap_free_dma(int ch); | ||
216 | extern void omap_start_dma(int lch); | ||
217 | extern void omap_stop_dma(int lch); | ||
218 | extern void omap_set_dma_transfer_params(int lch, int data_type, | ||
219 | int elem_count, int frame_count, | ||
220 | int sync_mode); | ||
221 | extern void omap_set_dma_color_mode(int lch, enum omap_dma_color_mode mode, | ||
222 | u32 color); | ||
223 | |||
224 | extern void omap_set_dma_src_params(int lch, int src_port, int src_amode, | ||
225 | unsigned long src_start); | ||
226 | extern void omap_set_dma_src_index(int lch, int eidx, int fidx); | ||
227 | extern void omap_set_dma_src_data_pack(int lch, int enable); | ||
228 | extern void omap_set_dma_src_burst_mode(int lch, | ||
229 | enum omap_dma_burst_mode burst_mode); | ||
230 | |||
231 | extern void omap_set_dma_dest_params(int lch, int dest_port, int dest_amode, | ||
232 | unsigned long dest_start); | ||
233 | extern void omap_set_dma_dest_index(int lch, int eidx, int fidx); | ||
234 | extern void omap_set_dma_dest_data_pack(int lch, int enable); | ||
235 | extern void omap_set_dma_dest_burst_mode(int lch, | ||
236 | enum omap_dma_burst_mode burst_mode); | ||
237 | |||
238 | extern void omap_dma_link_lch (int lch_head, int lch_queue); | ||
239 | extern void omap_dma_unlink_lch (int lch_head, int lch_queue); | ||
240 | |||
241 | extern dma_addr_t omap_get_dma_src_pos(int lch); | ||
242 | extern dma_addr_t omap_get_dma_dst_pos(int lch); | ||
243 | extern void omap_clear_dma(int lch); | ||
244 | |||
245 | /* Returns 1 if the DMA module is in OMAP1510-compatible mode, 0 otherwise */ | ||
246 | extern int omap_dma_in_1510_mode(void); | ||
247 | |||
248 | /* LCD DMA functions */ | ||
249 | extern int omap_request_lcd_dma(void (* callback)(u16 status, void *data), | ||
250 | void *data); | ||
251 | extern void omap_free_lcd_dma(void); | ||
252 | extern void omap_setup_lcd_dma(void); | ||
253 | extern void omap_enable_lcd_dma(void); | ||
254 | extern void omap_stop_lcd_dma(void); | ||
255 | extern void omap_set_lcd_dma_ext_controller(int external); | ||
256 | extern void omap_set_lcd_dma_single_transfer(int single); | ||
257 | extern void omap_set_lcd_dma_b1(unsigned long addr, u16 fb_xres, u16 fb_yres, | ||
258 | int data_type); | ||
259 | extern void omap_set_lcd_dma_b1_rotation(int rotate); | ||
260 | extern void omap_set_lcd_dma_b1_vxres(unsigned long vxres); | ||
261 | extern void omap_set_lcd_dma_b1_mirror(int mirror); | ||
262 | extern void omap_set_lcd_dma_b1_scale(unsigned int xscale, unsigned int yscale); | ||
263 | |||
264 | #endif /* __ASM_ARCH_DMA_H */ | ||
diff --git a/include/asm-arm/arch-omap/entry-macro.S b/include/asm-arm/arch-omap/entry-macro.S new file mode 100644 index 000000000000..57b126889b98 --- /dev/null +++ b/include/asm-arm/arch-omap/entry-macro.S | |||
@@ -0,0 +1,32 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-omap/entry-macro.S | ||
3 | * | ||
4 | * Low-level IRQ helper macros for OMAP-based platforms | ||
5 | * | ||
6 | * This file is licensed under the terms of the GNU General Public | ||
7 | * License version 2. This program is licensed "as is" without any | ||
8 | * warranty of any kind, whether express or implied. | ||
9 | */ | ||
10 | |||
11 | .macro disable_fiq | ||
12 | .endm | ||
13 | |||
14 | .macro get_irqnr_and_base, irqnr, irqstat, base, tmp | ||
15 | ldr \base, =IO_ADDRESS(OMAP_IH1_BASE) | ||
16 | ldr \irqnr, [\base, #IRQ_ITR_REG_OFFSET] | ||
17 | ldr \tmp, [\base, #IRQ_MIR_REG_OFFSET] | ||
18 | mov \irqstat, #0xffffffff | ||
19 | bic \tmp, \irqstat, \tmp | ||
20 | tst \irqnr, \tmp | ||
21 | beq 1510f | ||
22 | |||
23 | ldr \irqnr, [\base, #IRQ_SIR_FIQ_REG_OFFSET] | ||
24 | cmp \irqnr, #0 | ||
25 | ldreq \irqnr, [\base, #IRQ_SIR_IRQ_REG_OFFSET] | ||
26 | cmpeq \irqnr, #INT_IH2_IRQ | ||
27 | ldreq \base, =IO_ADDRESS(OMAP_IH2_BASE) | ||
28 | ldreq \irqnr, [\base, #IRQ_SIR_IRQ_REG_OFFSET] | ||
29 | addeqs \irqnr, \irqnr, #32 | ||
30 | 1510: | ||
31 | .endm | ||
32 | |||
diff --git a/include/asm-arm/arch-omap/fpga.h b/include/asm-arm/arch-omap/fpga.h new file mode 100644 index 000000000000..676807dc50e1 --- /dev/null +++ b/include/asm-arm/arch-omap/fpga.h | |||
@@ -0,0 +1,196 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-omap/fpga.h | ||
3 | * | ||
4 | * Interrupt handler for OMAP-1510 FPGA | ||
5 | * | ||
6 | * Copyright (C) 2001 RidgeRun, Inc. | ||
7 | * Author: Greg Lonnon <glonnon@ridgerun.com> | ||
8 | * | ||
9 | * Copyright (C) 2002 MontaVista Software, Inc. | ||
10 | * | ||
11 | * Separated FPGA interrupts from innovator1510.c and cleaned up for 2.6 | ||
12 | * Copyright (C) 2004 Nokia Corporation by Tony Lindrgen <tony@atomide.com> | ||
13 | * | ||
14 | * This program is free software; you can redistribute it and/or modify | ||
15 | * it under the terms of the GNU General Public License version 2 as | ||
16 | * published by the Free Software Foundation. | ||
17 | */ | ||
18 | |||
19 | #ifndef __ASM_ARCH_OMAP_FPGA_H | ||
20 | #define __ASM_ARCH_OMAP_FPGA_H | ||
21 | |||
22 | #if defined(CONFIG_MACH_OMAP_INNOVATOR) && defined(CONFIG_ARCH_OMAP1510) | ||
23 | extern void omap1510_fpga_init_irq(void); | ||
24 | #else | ||
25 | #define omap1510_fpga_init_irq() (0) | ||
26 | #endif | ||
27 | |||
28 | #define fpga_read(reg) __raw_readb(reg) | ||
29 | #define fpga_write(val, reg) __raw_writeb(val, reg) | ||
30 | |||
31 | /* | ||
32 | * --------------------------------------------------------------------------- | ||
33 | * H2/P2 Debug board FPGA | ||
34 | * --------------------------------------------------------------------------- | ||
35 | */ | ||
36 | /* maps in the FPGA registers and the ETHR registers */ | ||
37 | #define H2P2_DBG_FPGA_BASE 0xE8000000 /* VA */ | ||
38 | #define H2P2_DBG_FPGA_SIZE SZ_4K /* SIZE */ | ||
39 | #define H2P2_DBG_FPGA_START 0x04000000 /* PA */ | ||
40 | |||
41 | #define H2P2_DBG_FPGA_ETHR_START (H2P2_DBG_FPGA_START + 0x300) | ||
42 | #define H2P2_DBG_FPGA_FPGA_REV (H2P2_DBG_FPGA_BASE + 0x10) /* FPGA Revision */ | ||
43 | #define H2P2_DBG_FPGA_BOARD_REV (H2P2_DBG_FPGA_BASE + 0x12) /* Board Revision */ | ||
44 | #define H2P2_DBG_FPGA_GPIO (H2P2_DBG_FPGA_BASE + 0x14) /* GPIO outputs */ | ||
45 | #define H2P2_DBG_FPGA_LEDS (H2P2_DBG_FPGA_BASE + 0x16) /* LEDs outputs */ | ||
46 | #define H2P2_DBG_FPGA_MISC_INPUTS (H2P2_DBG_FPGA_BASE + 0x18) /* Misc inputs */ | ||
47 | #define H2P2_DBG_FPGA_LAN_STATUS (H2P2_DBG_FPGA_BASE + 0x1A) /* LAN Status line */ | ||
48 | #define H2P2_DBG_FPGA_LAN_RESET (H2P2_DBG_FPGA_BASE + 0x1C) /* LAN Reset line */ | ||
49 | |||
50 | /* NOTE: most boards don't have a static mapping for the FPGA ... */ | ||
51 | struct h2p2_dbg_fpga { | ||
52 | /* offset 0x00 */ | ||
53 | u16 smc91x[8]; | ||
54 | /* offset 0x10 */ | ||
55 | u16 fpga_rev; | ||
56 | u16 board_rev; | ||
57 | u16 gpio_outputs; | ||
58 | u16 leds; | ||
59 | /* offset 0x18 */ | ||
60 | u16 misc_inputs; | ||
61 | u16 lan_status; | ||
62 | u16 lan_reset; | ||
63 | u16 reserved0; | ||
64 | /* offset 0x20 */ | ||
65 | u16 ps2_data; | ||
66 | u16 ps2_ctrl; | ||
67 | /* plus also 4 rs232 ports ... */ | ||
68 | }; | ||
69 | |||
70 | /* LEDs definition on debug board (16 LEDs, all physically green) */ | ||
71 | #define H2P2_DBG_FPGA_LED_GREEN (1 << 15) | ||
72 | #define H2P2_DBG_FPGA_LED_AMBER (1 << 14) | ||
73 | #define H2P2_DBG_FPGA_LED_RED (1 << 13) | ||
74 | #define H2P2_DBG_FPGA_LED_BLUE (1 << 12) | ||
75 | /* cpu0 load-meter LEDs */ | ||
76 | #define H2P2_DBG_FPGA_LOAD_METER (1 << 0) // A bit of fun on our board ... | ||
77 | #define H2P2_DBG_FPGA_LOAD_METER_SIZE 11 | ||
78 | #define H2P2_DBG_FPGA_LOAD_METER_MASK ((1 << H2P2_DBG_FPGA_LOAD_METER_SIZE) - 1) | ||
79 | |||
80 | |||
81 | /* | ||
82 | * --------------------------------------------------------------------------- | ||
83 | * OMAP-1510 FPGA | ||
84 | * --------------------------------------------------------------------------- | ||
85 | */ | ||
86 | #define OMAP1510_FPGA_BASE 0xE8000000 /* Virtual */ | ||
87 | #define OMAP1510_FPGA_SIZE SZ_4K | ||
88 | #define OMAP1510_FPGA_START 0x08000000 /* Physical */ | ||
89 | |||
90 | /* Revision */ | ||
91 | #define OMAP1510_FPGA_REV_LOW (OMAP1510_FPGA_BASE + 0x0) | ||
92 | #define OMAP1510_FPGA_REV_HIGH (OMAP1510_FPGA_BASE + 0x1) | ||
93 | |||
94 | #define OMAP1510_FPGA_LCD_PANEL_CONTROL (OMAP1510_FPGA_BASE + 0x2) | ||
95 | #define OMAP1510_FPGA_LED_DIGIT (OMAP1510_FPGA_BASE + 0x3) | ||
96 | #define INNOVATOR_FPGA_HID_SPI (OMAP1510_FPGA_BASE + 0x4) | ||
97 | #define OMAP1510_FPGA_POWER (OMAP1510_FPGA_BASE + 0x5) | ||
98 | |||
99 | /* Interrupt status */ | ||
100 | #define OMAP1510_FPGA_ISR_LO (OMAP1510_FPGA_BASE + 0x6) | ||
101 | #define OMAP1510_FPGA_ISR_HI (OMAP1510_FPGA_BASE + 0x7) | ||
102 | |||
103 | /* Interrupt mask */ | ||
104 | #define OMAP1510_FPGA_IMR_LO (OMAP1510_FPGA_BASE + 0x8) | ||
105 | #define OMAP1510_FPGA_IMR_HI (OMAP1510_FPGA_BASE + 0x9) | ||
106 | |||
107 | /* Reset registers */ | ||
108 | #define OMAP1510_FPGA_HOST_RESET (OMAP1510_FPGA_BASE + 0xa) | ||
109 | #define OMAP1510_FPGA_RST (OMAP1510_FPGA_BASE + 0xb) | ||
110 | |||
111 | #define OMAP1510_FPGA_AUDIO (OMAP1510_FPGA_BASE + 0xc) | ||
112 | #define OMAP1510_FPGA_DIP (OMAP1510_FPGA_BASE + 0xe) | ||
113 | #define OMAP1510_FPGA_FPGA_IO (OMAP1510_FPGA_BASE + 0xf) | ||
114 | #define OMAP1510_FPGA_UART1 (OMAP1510_FPGA_BASE + 0x14) | ||
115 | #define OMAP1510_FPGA_UART2 (OMAP1510_FPGA_BASE + 0x15) | ||
116 | #define OMAP1510_FPGA_OMAP1510_STATUS (OMAP1510_FPGA_BASE + 0x16) | ||
117 | #define OMAP1510_FPGA_BOARD_REV (OMAP1510_FPGA_BASE + 0x18) | ||
118 | #define OMAP1510P1_PPT_DATA (OMAP1510_FPGA_BASE + 0x100) | ||
119 | #define OMAP1510P1_PPT_STATUS (OMAP1510_FPGA_BASE + 0x101) | ||
120 | #define OMAP1510P1_PPT_CONTROL (OMAP1510_FPGA_BASE + 0x102) | ||
121 | |||
122 | #define OMAP1510_FPGA_TOUCHSCREEN (OMAP1510_FPGA_BASE + 0x204) | ||
123 | |||
124 | #define INNOVATOR_FPGA_INFO (OMAP1510_FPGA_BASE + 0x205) | ||
125 | #define INNOVATOR_FPGA_LCD_BRIGHT_LO (OMAP1510_FPGA_BASE + 0x206) | ||
126 | #define INNOVATOR_FPGA_LCD_BRIGHT_HI (OMAP1510_FPGA_BASE + 0x207) | ||
127 | #define INNOVATOR_FPGA_LED_GRN_LO (OMAP1510_FPGA_BASE + 0x208) | ||
128 | #define INNOVATOR_FPGA_LED_GRN_HI (OMAP1510_FPGA_BASE + 0x209) | ||
129 | #define INNOVATOR_FPGA_LED_RED_LO (OMAP1510_FPGA_BASE + 0x20a) | ||
130 | #define INNOVATOR_FPGA_LED_RED_HI (OMAP1510_FPGA_BASE + 0x20b) | ||
131 | #define INNOVATOR_FPGA_CAM_USB_CONTROL (OMAP1510_FPGA_BASE + 0x20c) | ||
132 | #define INNOVATOR_FPGA_EXP_CONTROL (OMAP1510_FPGA_BASE + 0x20d) | ||
133 | #define INNOVATOR_FPGA_ISR2 (OMAP1510_FPGA_BASE + 0x20e) | ||
134 | #define INNOVATOR_FPGA_IMR2 (OMAP1510_FPGA_BASE + 0x210) | ||
135 | |||
136 | #define OMAP1510_FPGA_ETHR_START (OMAP1510_FPGA_START + 0x300) | ||
137 | |||
138 | /* | ||
139 | * Power up Giga UART driver, turn on HID clock. | ||
140 | * Turn off BT power, since we're not using it and it | ||
141 | * draws power. | ||
142 | */ | ||
143 | #define OMAP1510_FPGA_RESET_VALUE 0x42 | ||
144 | |||
145 | #define OMAP1510_FPGA_PCR_IF_PD0 (1 << 7) | ||
146 | #define OMAP1510_FPGA_PCR_COM2_EN (1 << 6) | ||
147 | #define OMAP1510_FPGA_PCR_COM1_EN (1 << 5) | ||
148 | #define OMAP1510_FPGA_PCR_EXP_PD0 (1 << 4) | ||
149 | #define OMAP1510_FPGA_PCR_EXP_PD1 (1 << 3) | ||
150 | #define OMAP1510_FPGA_PCR_48MHZ_CLK (1 << 2) | ||
151 | #define OMAP1510_FPGA_PCR_4MHZ_CLK (1 << 1) | ||
152 | #define OMAP1510_FPGA_PCR_RSRVD_BIT0 (1 << 0) | ||
153 | |||
154 | /* | ||
155 | * Innovator/OMAP1510 FPGA HID register bit definitions | ||
156 | */ | ||
157 | #define OMAP1510_FPGA_HID_SCLK (1<<0) /* output */ | ||
158 | #define OMAP1510_FPGA_HID_MOSI (1<<1) /* output */ | ||
159 | #define OMAP1510_FPGA_HID_nSS (1<<2) /* output 0/1 chip idle/select */ | ||
160 | #define OMAP1510_FPGA_HID_nHSUS (1<<3) /* output 0/1 host active/suspended */ | ||
161 | #define OMAP1510_FPGA_HID_MISO (1<<4) /* input */ | ||
162 | #define OMAP1510_FPGA_HID_ATN (1<<5) /* input 0/1 chip idle/ATN */ | ||
163 | #define OMAP1510_FPGA_HID_rsrvd (1<<6) | ||
164 | #define OMAP1510_FPGA_HID_RESETn (1<<7) /* output - 0/1 USAR reset/run */ | ||
165 | |||
166 | /* The FPGA IRQ is cascaded through GPIO_13 */ | ||
167 | #define OMAP1510_INT_FPGA (IH_GPIO_BASE + 13) | ||
168 | |||
169 | /* IRQ Numbers for interrupts muxed through the FPGA */ | ||
170 | #define OMAP1510_IH_FPGA_BASE IH_BOARD_BASE | ||
171 | #define OMAP1510_INT_FPGA_ATN (OMAP1510_IH_FPGA_BASE + 0) | ||
172 | #define OMAP1510_INT_FPGA_ACK (OMAP1510_IH_FPGA_BASE + 1) | ||
173 | #define OMAP1510_INT_FPGA2 (OMAP1510_IH_FPGA_BASE + 2) | ||
174 | #define OMAP1510_INT_FPGA3 (OMAP1510_IH_FPGA_BASE + 3) | ||
175 | #define OMAP1510_INT_FPGA4 (OMAP1510_IH_FPGA_BASE + 4) | ||
176 | #define OMAP1510_INT_FPGA5 (OMAP1510_IH_FPGA_BASE + 5) | ||
177 | #define OMAP1510_INT_FPGA6 (OMAP1510_IH_FPGA_BASE + 6) | ||
178 | #define OMAP1510_INT_FPGA7 (OMAP1510_IH_FPGA_BASE + 7) | ||
179 | #define OMAP1510_INT_FPGA8 (OMAP1510_IH_FPGA_BASE + 8) | ||
180 | #define OMAP1510_INT_FPGA9 (OMAP1510_IH_FPGA_BASE + 9) | ||
181 | #define OMAP1510_INT_FPGA10 (OMAP1510_IH_FPGA_BASE + 10) | ||
182 | #define OMAP1510_INT_FPGA11 (OMAP1510_IH_FPGA_BASE + 11) | ||
183 | #define OMAP1510_INT_FPGA12 (OMAP1510_IH_FPGA_BASE + 12) | ||
184 | #define OMAP1510_INT_ETHER (OMAP1510_IH_FPGA_BASE + 13) | ||
185 | #define OMAP1510_INT_FPGAUART1 (OMAP1510_IH_FPGA_BASE + 14) | ||
186 | #define OMAP1510_INT_FPGAUART2 (OMAP1510_IH_FPGA_BASE + 15) | ||
187 | #define OMAP1510_INT_FPGA_TS (OMAP1510_IH_FPGA_BASE + 16) | ||
188 | #define OMAP1510_INT_FPGA17 (OMAP1510_IH_FPGA_BASE + 17) | ||
189 | #define OMAP1510_INT_FPGA_CAM (OMAP1510_IH_FPGA_BASE + 18) | ||
190 | #define OMAP1510_INT_FPGA_RTC_A (OMAP1510_IH_FPGA_BASE + 19) | ||
191 | #define OMAP1510_INT_FPGA_RTC_B (OMAP1510_IH_FPGA_BASE + 20) | ||
192 | #define OMAP1510_INT_FPGA_CD (OMAP1510_IH_FPGA_BASE + 21) | ||
193 | #define OMAP1510_INT_FPGA22 (OMAP1510_IH_FPGA_BASE + 22) | ||
194 | #define OMAP1510_INT_FPGA23 (OMAP1510_IH_FPGA_BASE + 23) | ||
195 | |||
196 | #endif | ||
diff --git a/include/asm-arm/arch-omap/gpio.h b/include/asm-arm/arch-omap/gpio.h new file mode 100644 index 000000000000..fad2fc93ee70 --- /dev/null +++ b/include/asm-arm/arch-omap/gpio.h | |||
@@ -0,0 +1,69 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-omap/gpio.h | ||
3 | * | ||
4 | * OMAP GPIO handling defines and functions | ||
5 | * | ||
6 | * Copyright (C) 2003 Nokia Corporation | ||
7 | * | ||
8 | * Written by Juha Yrjölä <juha.yrjola@nokia.com> | ||
9 | * | ||
10 | * This program is free software; you can redistribute it and/or modify | ||
11 | * it under the terms of the GNU General Public License as published by | ||
12 | * the Free Software Foundation; either version 2 of the License, or | ||
13 | * (at your option) any later version. | ||
14 | * | ||
15 | * This program is distributed in the hope that it will be useful, | ||
16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
18 | * GNU General Public License for more details. | ||
19 | * | ||
20 | * You should have received a copy of the GNU General Public License | ||
21 | * along with this program; if not, write to the Free Software | ||
22 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
23 | * | ||
24 | */ | ||
25 | |||
26 | #ifndef __ASM_ARCH_OMAP_GPIO_H | ||
27 | #define __ASM_ARCH_OMAP_GPIO_H | ||
28 | |||
29 | #include <asm/arch/hardware.h> | ||
30 | #include <asm/arch/irqs.h> | ||
31 | #include <asm/io.h> | ||
32 | |||
33 | #define OMAP_MPUIO_BASE 0xfffb5000 | ||
34 | #define OMAP_MPUIO_INPUT_LATCH 0x00 | ||
35 | #define OMAP_MPUIO_OUTPUT 0x04 | ||
36 | #define OMAP_MPUIO_IO_CNTL 0x08 | ||
37 | #define OMAP_MPUIO_KBR_LATCH 0x10 | ||
38 | #define OMAP_MPUIO_KBC 0x14 | ||
39 | #define OMAP_MPUIO_GPIO_EVENT_MODE 0x18 | ||
40 | #define OMAP_MPUIO_GPIO_INT_EDGE 0x1c | ||
41 | #define OMAP_MPUIO_KBD_INT 0x20 | ||
42 | #define OMAP_MPUIO_GPIO_INT 0x24 | ||
43 | #define OMAP_MPUIO_KBD_MASKIT 0x28 | ||
44 | #define OMAP_MPUIO_GPIO_MASKIT 0x2c | ||
45 | #define OMAP_MPUIO_GPIO_DEBOUNCING 0x30 | ||
46 | #define OMAP_MPUIO_LATCH 0x34 | ||
47 | |||
48 | #define OMAP_MPUIO(nr) (OMAP_MAX_GPIO_LINES + (nr)) | ||
49 | #define OMAP_GPIO_IS_MPUIO(nr) ((nr) >= OMAP_MAX_GPIO_LINES) | ||
50 | |||
51 | #define OMAP_GPIO_IRQ(nr) (OMAP_GPIO_IS_MPUIO(nr) ? \ | ||
52 | IH_MPUIO_BASE + ((nr) & 0x0f) : \ | ||
53 | IH_GPIO_BASE + ((nr) & 0x3f)) | ||
54 | |||
55 | /* For EDGECTRL */ | ||
56 | #define OMAP_GPIO_NO_EDGE 0x00 | ||
57 | #define OMAP_GPIO_FALLING_EDGE 0x01 | ||
58 | #define OMAP_GPIO_RISING_EDGE 0x02 | ||
59 | #define OMAP_GPIO_BOTH_EDGES 0x03 | ||
60 | |||
61 | extern int omap_gpio_init(void); /* Call from board init only */ | ||
62 | extern int omap_request_gpio(int gpio); | ||
63 | extern void omap_free_gpio(int gpio); | ||
64 | extern void omap_set_gpio_direction(int gpio, int is_input); | ||
65 | extern void omap_set_gpio_dataout(int gpio, int enable); | ||
66 | extern int omap_get_gpio_datain(int gpio); | ||
67 | extern void omap_set_gpio_edge_ctrl(int gpio, int edge); | ||
68 | |||
69 | #endif | ||
diff --git a/include/asm-arm/arch-omap/hardware.h b/include/asm-arm/arch-omap/hardware.h new file mode 100644 index 000000000000..37e06c782bdf --- /dev/null +++ b/include/asm-arm/arch-omap/hardware.h | |||
@@ -0,0 +1,324 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-omap/hardware.h | ||
3 | * | ||
4 | * Hardware definitions for TI OMAP processors and boards | ||
5 | * | ||
6 | * NOTE: Please put device driver specific defines into a separate header | ||
7 | * file for each driver. | ||
8 | * | ||
9 | * Copyright (C) 2001 RidgeRun, Inc. | ||
10 | * Author: RidgeRun, Inc. Greg Lonnon <glonnon@ridgerun.com> | ||
11 | * | ||
12 | * Reorganized for Linux-2.6 by Tony Lindgren <tony@atomide.com> | ||
13 | * and Dirk Behme <dirk.behme@de.bosch.com> | ||
14 | * | ||
15 | * This program is free software; you can redistribute it and/or modify it | ||
16 | * under the terms of the GNU General Public License as published by the | ||
17 | * Free Software Foundation; either version 2 of the License, or (at your | ||
18 | * option) any later version. | ||
19 | * | ||
20 | * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED | ||
21 | * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | ||
22 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN | ||
23 | * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, | ||
24 | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
25 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | ||
26 | * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||
27 | * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
28 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | ||
29 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
30 | * | ||
31 | * You should have received a copy of the GNU General Public License along | ||
32 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
33 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
34 | */ | ||
35 | |||
36 | #ifndef __ASM_ARCH_OMAP_HARDWARE_H | ||
37 | #define __ASM_ARCH_OMAP_HARDWARE_H | ||
38 | |||
39 | #include <asm/sizes.h> | ||
40 | #include <linux/config.h> | ||
41 | #ifndef __ASSEMBLER__ | ||
42 | #include <asm/types.h> | ||
43 | #include <asm/arch/cpu.h> | ||
44 | #endif | ||
45 | #include <asm/arch/io.h> | ||
46 | |||
47 | /* | ||
48 | * --------------------------------------------------------------------------- | ||
49 | * Common definitions for all OMAP processors | ||
50 | * NOTE: Put all processor or board specific parts to the special header | ||
51 | * files. | ||
52 | * --------------------------------------------------------------------------- | ||
53 | */ | ||
54 | |||
55 | /* | ||
56 | * ---------------------------------------------------------------------------- | ||
57 | * Clocks | ||
58 | * ---------------------------------------------------------------------------- | ||
59 | */ | ||
60 | #define CLKGEN_REG_BASE (0xfffece00) | ||
61 | #define ARM_CKCTL (CLKGEN_REG_BASE + 0x0) | ||
62 | #define ARM_IDLECT1 (CLKGEN_REG_BASE + 0x4) | ||
63 | #define ARM_IDLECT2 (CLKGEN_REG_BASE + 0x8) | ||
64 | #define ARM_EWUPCT (CLKGEN_REG_BASE + 0xC) | ||
65 | #define ARM_RSTCT1 (CLKGEN_REG_BASE + 0x10) | ||
66 | #define ARM_RSTCT2 (CLKGEN_REG_BASE + 0x14) | ||
67 | #define ARM_SYSST (CLKGEN_REG_BASE + 0x18) | ||
68 | #define ARM_IDLECT3 (CLKGEN_REG_BASE + 0x24) | ||
69 | |||
70 | #define CK_RATEF 1 | ||
71 | #define CK_IDLEF 2 | ||
72 | #define CK_ENABLEF 4 | ||
73 | #define CK_SELECTF 8 | ||
74 | #define SETARM_IDLE_SHIFT | ||
75 | |||
76 | /* DPLL control registers */ | ||
77 | #define DPLL_CTL (0xfffecf00) | ||
78 | |||
79 | /* DSP clock control */ | ||
80 | #define DSP_CONFIG_REG_BASE (0xe1008000) | ||
81 | #define DSP_IDLECT1 (DSP_CONFIG_REG_BASE + 0x4) | ||
82 | #define DSP_IDLECT2 (DSP_CONFIG_REG_BASE + 0x8) | ||
83 | |||
84 | /* | ||
85 | * --------------------------------------------------------------------------- | ||
86 | * UPLD | ||
87 | * --------------------------------------------------------------------------- | ||
88 | */ | ||
89 | #define ULPD_REG_BASE (0xfffe0800) | ||
90 | #define ULPD_IT_STATUS (ULPD_REG_BASE + 0x14) | ||
91 | #define ULPD_CLOCK_CTRL (ULPD_REG_BASE + 0x30) | ||
92 | # define DIS_USB_PVCI_CLK (1 << 5) /* no USB/FAC synch */ | ||
93 | # define USB_MCLK_EN (1 << 4) /* enable W4_USB_CLKO */ | ||
94 | #define ULPD_SOFT_REQ (ULPD_REG_BASE + 0x34) | ||
95 | # define SOFT_UDC_REQ (1 << 4) | ||
96 | # define SOFT_USB_CLK_REQ (1 << 3) | ||
97 | # define SOFT_DPLL_REQ (1 << 0) | ||
98 | #define ULPD_DPLL_CTRL (ULPD_REG_BASE + 0x3c) | ||
99 | #define ULPD_STATUS_REQ (ULPD_REG_BASE + 0x40) | ||
100 | #define ULPD_APLL_CTRL (ULPD_REG_BASE + 0x4c) | ||
101 | #define ULPD_POWER_CTRL (ULPD_REG_BASE + 0x50) | ||
102 | #define ULPD_SOFT_DISABLE_REQ_REG (ULPD_REG_BASE + 0x68) | ||
103 | # define DIS_MMC2_DPLL_REQ (1 << 11) | ||
104 | # define DIS_MMC1_DPLL_REQ (1 << 10) | ||
105 | # define DIS_UART3_DPLL_REQ (1 << 9) | ||
106 | # define DIS_UART2_DPLL_REQ (1 << 8) | ||
107 | # define DIS_UART1_DPLL_REQ (1 << 7) | ||
108 | # define DIS_USB_HOST_DPLL_REQ (1 << 6) | ||
109 | #define ULPD_SDW_CLK_DIV_CTRL_SEL (ULPD_REG_BASE + 0x74) | ||
110 | #define ULPD_CAM_CLK_CTRL (ULPD_REG_BASE + 0x7c) | ||
111 | |||
112 | /* | ||
113 | * --------------------------------------------------------------------------- | ||
114 | * Watchdog timer | ||
115 | * --------------------------------------------------------------------------- | ||
116 | */ | ||
117 | |||
118 | /* Watchdog timer within the OMAP3.2 gigacell */ | ||
119 | #define OMAP_MPU_WATCHDOG_BASE (0xfffec800) | ||
120 | #define OMAP_WDT_TIMER (OMAP_MPU_WATCHDOG_BASE + 0x0) | ||
121 | #define OMAP_WDT_LOAD_TIM (OMAP_MPU_WATCHDOG_BASE + 0x4) | ||
122 | #define OMAP_WDT_READ_TIM (OMAP_MPU_WATCHDOG_BASE + 0x4) | ||
123 | #define OMAP_WDT_TIMER_MODE (OMAP_MPU_WATCHDOG_BASE + 0x8) | ||
124 | |||
125 | /* | ||
126 | * --------------------------------------------------------------------------- | ||
127 | * Interrupts | ||
128 | * --------------------------------------------------------------------------- | ||
129 | */ | ||
130 | #define OMAP_IH1_BASE 0xfffecb00 | ||
131 | #define OMAP_IH2_BASE 0xfffe0000 | ||
132 | |||
133 | #define OMAP_IH1_ITR (OMAP_IH1_BASE + 0x00) | ||
134 | #define OMAP_IH1_MIR (OMAP_IH1_BASE + 0x04) | ||
135 | #define OMAP_IH1_SIR_IRQ (OMAP_IH1_BASE + 0x10) | ||
136 | #define OMAP_IH1_SIR_FIQ (OMAP_IH1_BASE + 0x14) | ||
137 | #define OMAP_IH1_CONTROL (OMAP_IH1_BASE + 0x18) | ||
138 | #define OMAP_IH1_ILR0 (OMAP_IH1_BASE + 0x1c) | ||
139 | #define OMAP_IH1_ISR (OMAP_IH1_BASE + 0x9c) | ||
140 | |||
141 | #define OMAP_IH2_ITR (OMAP_IH2_BASE + 0x00) | ||
142 | #define OMAP_IH2_MIR (OMAP_IH2_BASE + 0x04) | ||
143 | #define OMAP_IH2_SIR_IRQ (OMAP_IH2_BASE + 0x10) | ||
144 | #define OMAP_IH2_SIR_FIQ (OMAP_IH2_BASE + 0x14) | ||
145 | #define OMAP_IH2_CONTROL (OMAP_IH2_BASE + 0x18) | ||
146 | #define OMAP_IH2_ILR0 (OMAP_IH2_BASE + 0x1c) | ||
147 | #define OMAP_IH2_ISR (OMAP_IH2_BASE + 0x9c) | ||
148 | |||
149 | #define IRQ_ITR_REG_OFFSET 0x00 | ||
150 | #define IRQ_MIR_REG_OFFSET 0x04 | ||
151 | #define IRQ_SIR_IRQ_REG_OFFSET 0x10 | ||
152 | #define IRQ_SIR_FIQ_REG_OFFSET 0x14 | ||
153 | #define IRQ_CONTROL_REG_OFFSET 0x18 | ||
154 | #define IRQ_ISR_REG_OFFSET 0x9c | ||
155 | #define IRQ_ILR0_REG_OFFSET 0x1c | ||
156 | #define IRQ_GMR_REG_OFFSET 0xa0 | ||
157 | |||
158 | /* | ||
159 | * ---------------------------------------------------------------------------- | ||
160 | * System control registers | ||
161 | * ---------------------------------------------------------------------------- | ||
162 | */ | ||
163 | #define MOD_CONF_CTRL_0 0xfffe1080 | ||
164 | #define MOD_CONF_CTRL_1 0xfffe1110 | ||
165 | |||
166 | /* | ||
167 | * ---------------------------------------------------------------------------- | ||
168 | * Pin multiplexing registers | ||
169 | * ---------------------------------------------------------------------------- | ||
170 | */ | ||
171 | #define FUNC_MUX_CTRL_0 0xfffe1000 | ||
172 | #define FUNC_MUX_CTRL_1 0xfffe1004 | ||
173 | #define FUNC_MUX_CTRL_2 0xfffe1008 | ||
174 | #define COMP_MODE_CTRL_0 0xfffe100c | ||
175 | #define FUNC_MUX_CTRL_3 0xfffe1010 | ||
176 | #define FUNC_MUX_CTRL_4 0xfffe1014 | ||
177 | #define FUNC_MUX_CTRL_5 0xfffe1018 | ||
178 | #define FUNC_MUX_CTRL_6 0xfffe101C | ||
179 | #define FUNC_MUX_CTRL_7 0xfffe1020 | ||
180 | #define FUNC_MUX_CTRL_8 0xfffe1024 | ||
181 | #define FUNC_MUX_CTRL_9 0xfffe1028 | ||
182 | #define FUNC_MUX_CTRL_A 0xfffe102C | ||
183 | #define FUNC_MUX_CTRL_B 0xfffe1030 | ||
184 | #define FUNC_MUX_CTRL_C 0xfffe1034 | ||
185 | #define FUNC_MUX_CTRL_D 0xfffe1038 | ||
186 | #define PULL_DWN_CTRL_0 0xfffe1040 | ||
187 | #define PULL_DWN_CTRL_1 0xfffe1044 | ||
188 | #define PULL_DWN_CTRL_2 0xfffe1048 | ||
189 | #define PULL_DWN_CTRL_3 0xfffe104c | ||
190 | #define PULL_DWN_CTRL_4 0xfffe10ac | ||
191 | |||
192 | /* OMAP-1610 specific multiplexing registers */ | ||
193 | #define FUNC_MUX_CTRL_E 0xfffe1090 | ||
194 | #define FUNC_MUX_CTRL_F 0xfffe1094 | ||
195 | #define FUNC_MUX_CTRL_10 0xfffe1098 | ||
196 | #define FUNC_MUX_CTRL_11 0xfffe109c | ||
197 | #define FUNC_MUX_CTRL_12 0xfffe10a0 | ||
198 | #define PU_PD_SEL_0 0xfffe10b4 | ||
199 | #define PU_PD_SEL_1 0xfffe10b8 | ||
200 | #define PU_PD_SEL_2 0xfffe10bc | ||
201 | #define PU_PD_SEL_3 0xfffe10c0 | ||
202 | #define PU_PD_SEL_4 0xfffe10c4 | ||
203 | |||
204 | /* Timer32K for 1610 and 1710*/ | ||
205 | #define OMAP_TIMER32K_BASE 0xFFFBC400 | ||
206 | |||
207 | /* | ||
208 | * --------------------------------------------------------------------------- | ||
209 | * TIPB bus interface | ||
210 | * --------------------------------------------------------------------------- | ||
211 | */ | ||
212 | #define TIPB_PUBLIC_CNTL_BASE 0xfffed300 | ||
213 | #define MPU_PUBLIC_TIPB_CNTL (TIPB_PUBLIC_CNTL_BASE + 0x8) | ||
214 | #define TIPB_PRIVATE_CNTL_BASE 0xfffeca00 | ||
215 | #define MPU_PRIVATE_TIPB_CNTL (TIPB_PRIVATE_CNTL_BASE + 0x8) | ||
216 | |||
217 | /* | ||
218 | * ---------------------------------------------------------------------------- | ||
219 | * MPUI interface | ||
220 | * ---------------------------------------------------------------------------- | ||
221 | */ | ||
222 | #define MPUI_BASE (0xfffec900) | ||
223 | #define MPUI_CTRL (MPUI_BASE + 0x0) | ||
224 | #define MPUI_DEBUG_ADDR (MPUI_BASE + 0x4) | ||
225 | #define MPUI_DEBUG_DATA (MPUI_BASE + 0x8) | ||
226 | #define MPUI_DEBUG_FLAG (MPUI_BASE + 0xc) | ||
227 | #define MPUI_STATUS_REG (MPUI_BASE + 0x10) | ||
228 | #define MPUI_DSP_STATUS (MPUI_BASE + 0x14) | ||
229 | #define MPUI_DSP_BOOT_CONFIG (MPUI_BASE + 0x18) | ||
230 | #define MPUI_DSP_API_CONFIG (MPUI_BASE + 0x1c) | ||
231 | |||
232 | /* | ||
233 | * ---------------------------------------------------------------------------- | ||
234 | * LED Pulse Generator | ||
235 | * ---------------------------------------------------------------------------- | ||
236 | */ | ||
237 | #define OMAP_LPG1_BASE 0xfffbd000 | ||
238 | #define OMAP_LPG2_BASE 0xfffbd800 | ||
239 | #define OMAP_LPG1_LCR (OMAP_LPG1_BASE + 0x00) | ||
240 | #define OMAP_LPG1_PMR (OMAP_LPG1_BASE + 0x04) | ||
241 | #define OMAP_LPG2_LCR (OMAP_LPG2_BASE + 0x00) | ||
242 | #define OMAP_LPG2_PMR (OMAP_LPG2_BASE + 0x04) | ||
243 | |||
244 | #ifndef __ASSEMBLER__ | ||
245 | |||
246 | /* | ||
247 | * --------------------------------------------------------------------------- | ||
248 | * Serial ports | ||
249 | * --------------------------------------------------------------------------- | ||
250 | */ | ||
251 | #define OMAP_UART1_BASE (unsigned char *)0xfffb0000 | ||
252 | #define OMAP_UART2_BASE (unsigned char *)0xfffb0800 | ||
253 | #define OMAP_UART3_BASE (unsigned char *)0xfffb9800 | ||
254 | #define OMAP_MAX_NR_PORTS 3 | ||
255 | #define OMAP1510_BASE_BAUD (12000000/16) | ||
256 | #define OMAP16XX_BASE_BAUD (48000000/16) | ||
257 | |||
258 | #define is_omap_port(p) ({int __ret = 0; \ | ||
259 | if (p == IO_ADDRESS(OMAP_UART1_BASE) || \ | ||
260 | p == IO_ADDRESS(OMAP_UART2_BASE) || \ | ||
261 | p == IO_ADDRESS(OMAP_UART3_BASE)) \ | ||
262 | __ret = 1; \ | ||
263 | __ret; \ | ||
264 | }) | ||
265 | |||
266 | /* | ||
267 | * --------------------------------------------------------------------------- | ||
268 | * Processor specific defines | ||
269 | * --------------------------------------------------------------------------- | ||
270 | */ | ||
271 | #ifdef CONFIG_ARCH_OMAP730 | ||
272 | #include "omap730.h" | ||
273 | #endif | ||
274 | |||
275 | #ifdef CONFIG_ARCH_OMAP1510 | ||
276 | #include "omap1510.h" | ||
277 | #endif | ||
278 | |||
279 | #ifdef CONFIG_ARCH_OMAP16XX | ||
280 | #include "omap16xx.h" | ||
281 | #endif | ||
282 | |||
283 | /* | ||
284 | * --------------------------------------------------------------------------- | ||
285 | * Board specific defines | ||
286 | * --------------------------------------------------------------------------- | ||
287 | */ | ||
288 | |||
289 | #ifdef CONFIG_MACH_OMAP_INNOVATOR | ||
290 | #include "board-innovator.h" | ||
291 | #endif | ||
292 | |||
293 | #ifdef CONFIG_MACH_OMAP_H2 | ||
294 | #include "board-h2.h" | ||
295 | #endif | ||
296 | |||
297 | #ifdef CONFIG_MACH_OMAP_PERSEUS2 | ||
298 | #include "board-perseus2.h" | ||
299 | #endif | ||
300 | |||
301 | #ifdef CONFIG_MACH_OMAP_H3 | ||
302 | #include "board-h3.h" | ||
303 | #endif | ||
304 | |||
305 | #ifdef CONFIG_MACH_OMAP_H4 | ||
306 | #include "board-h4.h" | ||
307 | #error "Support for H4 board not yet implemented." | ||
308 | #endif | ||
309 | |||
310 | #ifdef CONFIG_MACH_OMAP_OSK | ||
311 | #include "board-osk.h" | ||
312 | #endif | ||
313 | |||
314 | #ifdef CONFIG_MACH_VOICEBLUE | ||
315 | #include "board-voiceblue.h" | ||
316 | #endif | ||
317 | |||
318 | #ifdef CONFIG_MACH_NETSTAR | ||
319 | #include "board-netstar.h" | ||
320 | #endif | ||
321 | |||
322 | #endif /* !__ASSEMBLER__ */ | ||
323 | |||
324 | #endif /* __ASM_ARCH_OMAP_HARDWARE_H */ | ||
diff --git a/include/asm-arm/arch-omap/io.h b/include/asm-arm/arch-omap/io.h new file mode 100644 index 000000000000..1c8c9fcc766e --- /dev/null +++ b/include/asm-arm/arch-omap/io.h | |||
@@ -0,0 +1,107 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-omap/io.h | ||
3 | * | ||
4 | * IO definitions for TI OMAP processors and boards | ||
5 | * | ||
6 | * Copied from linux/include/asm-arm/arch-sa1100/io.h | ||
7 | * Copyright (C) 1997-1999 Russell King | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or modify it | ||
10 | * under the terms of the GNU General Public License as published by the | ||
11 | * Free Software Foundation; either version 2 of the License, or (at your | ||
12 | * option) any later version. | ||
13 | * | ||
14 | * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED | ||
15 | * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | ||
16 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN | ||
17 | * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, | ||
18 | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
19 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | ||
20 | * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||
21 | * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
22 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | ||
23 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
24 | * | ||
25 | * You should have received a copy of the GNU General Public License along | ||
26 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
27 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
28 | * | ||
29 | * Modifications: | ||
30 | * 06-12-1997 RMK Created. | ||
31 | * 07-04-1999 RMK Major cleanup | ||
32 | */ | ||
33 | |||
34 | #ifndef __ASM_ARM_ARCH_IO_H | ||
35 | #define __ASM_ARM_ARCH_IO_H | ||
36 | |||
37 | #define IO_SPACE_LIMIT 0xffffffff | ||
38 | |||
39 | /* | ||
40 | * We don't actually have real ISA nor PCI buses, but there is so many | ||
41 | * drivers out there that might just work if we fake them... | ||
42 | */ | ||
43 | #define __io(a) ((void __iomem *)(PCIO_BASE + (a))) | ||
44 | #define __mem_pci(a) (a) | ||
45 | #define __mem_isa(a) (a) | ||
46 | |||
47 | /* | ||
48 | * ---------------------------------------------------------------------------- | ||
49 | * I/O mapping | ||
50 | * ---------------------------------------------------------------------------- | ||
51 | */ | ||
52 | #define IO_PHYS 0xFFFB0000 | ||
53 | #define IO_OFFSET 0x01000000 /* Virtual IO = 0xfefb0000 */ | ||
54 | #define IO_VIRT (IO_PHYS - IO_OFFSET) | ||
55 | #define IO_SIZE 0x40000 | ||
56 | #define IO_ADDRESS(x) ((x) - IO_OFFSET) | ||
57 | |||
58 | #define PCIO_BASE 0 | ||
59 | |||
60 | #define io_p2v(x) ((x) - IO_OFFSET) | ||
61 | #define io_v2p(x) ((x) + IO_OFFSET) | ||
62 | |||
63 | #ifndef __ASSEMBLER__ | ||
64 | |||
65 | /* | ||
66 | * Functions to access the OMAP IO region | ||
67 | * | ||
68 | * NOTE: - Use omap_read/write[bwl] for physical register addresses | ||
69 | * - Use __raw_read/write[bwl]() for virtual register addresses | ||
70 | * - Use IO_ADDRESS(phys_addr) to convert registers to virtual addresses | ||
71 | * - DO NOT use hardcoded virtual addresses to allow changing the | ||
72 | * IO address space again if needed | ||
73 | */ | ||
74 | #define omap_readb(a) (*(volatile unsigned char *)IO_ADDRESS(a)) | ||
75 | #define omap_readw(a) (*(volatile unsigned short *)IO_ADDRESS(a)) | ||
76 | #define omap_readl(a) (*(volatile unsigned int *)IO_ADDRESS(a)) | ||
77 | |||
78 | #define omap_writeb(v,a) (*(volatile unsigned char *)IO_ADDRESS(a) = (v)) | ||
79 | #define omap_writew(v,a) (*(volatile unsigned short *)IO_ADDRESS(a) = (v)) | ||
80 | #define omap_writel(v,a) (*(volatile unsigned int *)IO_ADDRESS(a) = (v)) | ||
81 | |||
82 | /* 16 bit uses LDRH/STRH, base +/- offset_8 */ | ||
83 | typedef struct { volatile u16 offset[256]; } __regbase16; | ||
84 | #define __REGV16(vaddr) ((__regbase16 *)((vaddr)&~0xff)) \ | ||
85 | ->offset[((vaddr)&0xff)>>1] | ||
86 | #define __REG16(paddr) __REGV16(io_p2v(paddr)) | ||
87 | |||
88 | /* 8/32 bit uses LDR/STR, base +/- offset_12 */ | ||
89 | typedef struct { volatile u8 offset[4096]; } __regbase8; | ||
90 | #define __REGV8(vaddr) ((__regbase8 *)((vaddr)&~4095)) \ | ||
91 | ->offset[((vaddr)&4095)>>0] | ||
92 | #define __REG8(paddr) __REGV8(io_p2v(paddr)) | ||
93 | |||
94 | typedef struct { volatile u32 offset[4096]; } __regbase32; | ||
95 | #define __REGV32(vaddr) ((__regbase32 *)((vaddr)&~4095)) \ | ||
96 | ->offset[((vaddr)&4095)>>2] | ||
97 | #define __REG32(paddr) __REGV32(io_p2v(paddr)) | ||
98 | |||
99 | #else | ||
100 | |||
101 | #define __REG8(paddr) io_p2v(paddr) | ||
102 | #define __REG16(paddr) io_p2v(paddr) | ||
103 | #define __REG32(paddr) io_p2v(paddr) | ||
104 | |||
105 | #endif | ||
106 | |||
107 | #endif | ||
diff --git a/include/asm-arm/arch-omap/irqs.h b/include/asm-arm/arch-omap/irqs.h new file mode 100644 index 000000000000..6701fd9e5f9b --- /dev/null +++ b/include/asm-arm/arch-omap/irqs.h | |||
@@ -0,0 +1,255 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-omap/irqs.h | ||
3 | * | ||
4 | * Copyright (C) Greg Lonnon 2001 | ||
5 | * Updated for OMAP-1610 by Tony Lindgren <tony@atomide.com> | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License as published by | ||
9 | * the Free Software Foundation; either version 2 of the License, or | ||
10 | * (at your option) any later version. | ||
11 | * | ||
12 | * This program is distributed in the hope that it will be useful, | ||
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
15 | * GNU General Public License for more details. | ||
16 | * | ||
17 | * You should have received a copy of the GNU General Public License | ||
18 | * along with this program; if not, write to the Free Software | ||
19 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
20 | * | ||
21 | * NOTE: The interrupt vectors for the OMAP-1509, OMAP-1510, and OMAP-1610 | ||
22 | * are different. | ||
23 | */ | ||
24 | |||
25 | #ifndef __ASM_ARCH_OMAP1510_IRQS_H | ||
26 | #define __ASM_ARCH_OMAP1510_IRQS_H | ||
27 | |||
28 | /* | ||
29 | * IRQ numbers for interrupt handler 1 | ||
30 | * | ||
31 | * NOTE: See also the OMAP-1510 and 1610 specific IRQ numbers below | ||
32 | * | ||
33 | */ | ||
34 | #define INT_IH2_IRQ 0 | ||
35 | #define INT_CAMERA 1 | ||
36 | #define INT_FIQ 3 | ||
37 | #define INT_RTDX 6 | ||
38 | #define INT_DSP_MMU_ABORT 7 | ||
39 | #define INT_HOST 8 | ||
40 | #define INT_ABORT 9 | ||
41 | #define INT_DSP_MAILBOX1 10 | ||
42 | #define INT_DSP_MAILBOX2 11 | ||
43 | #define INT_BRIDGE_PRIV 13 | ||
44 | #define INT_GPIO_BANK1 14 | ||
45 | #define INT_UART3 15 | ||
46 | #define INT_TIMER3 16 | ||
47 | #define INT_DMA_CH0_6 19 | ||
48 | #define INT_DMA_CH1_7 20 | ||
49 | #define INT_DMA_CH2_8 21 | ||
50 | #define INT_DMA_CH3 22 | ||
51 | #define INT_DMA_CH4 23 | ||
52 | #define INT_DMA_CH5 24 | ||
53 | #define INT_DMA_LCD 25 | ||
54 | #define INT_TIMER1 26 | ||
55 | #define INT_WD_TIMER 27 | ||
56 | #define INT_BRIDGE_PUB 28 | ||
57 | #define INT_TIMER2 30 | ||
58 | #define INT_LCD_CTRL 31 | ||
59 | |||
60 | /* | ||
61 | * OMAP-1510 specific IRQ numbers for interrupt handler 1 | ||
62 | */ | ||
63 | #define INT_1510_RES2 2 | ||
64 | #define INT_1510_SPI_TX 4 | ||
65 | #define INT_1510_SPI_RX 5 | ||
66 | #define INT_1510_RES12 12 | ||
67 | #define INT_1510_LB_MMU 17 | ||
68 | #define INT_1510_RES18 18 | ||
69 | #define INT_1510_LOCAL_BUS 29 | ||
70 | |||
71 | /* | ||
72 | * OMAP-1610 specific IRQ numbers for interrupt handler 1 | ||
73 | */ | ||
74 | #define INT_1610_IH2_FIQ 2 | ||
75 | #define INT_1610_McBSP2_TX 4 | ||
76 | #define INT_1610_McBSP2_RX 5 | ||
77 | #define INT_1610_LCD_LINE 12 | ||
78 | #define INT_1610_GPTIMER1 17 | ||
79 | #define INT_1610_GPTIMER2 18 | ||
80 | #define INT_1610_SSR_FIFO_0 29 | ||
81 | |||
82 | /* | ||
83 | * OMAP-730 specific IRQ numbers for interrupt handler 1 | ||
84 | */ | ||
85 | #define INT_730_IH2_FIQ 0 | ||
86 | #define INT_730_IH2_IRQ 1 | ||
87 | #define INT_730_USB_NON_ISO 2 | ||
88 | #define INT_730_USB_ISO 3 | ||
89 | #define INT_730_ICR 4 | ||
90 | #define INT_730_EAC 5 | ||
91 | #define INT_730_GPIO_BANK1 6 | ||
92 | #define INT_730_GPIO_BANK2 7 | ||
93 | #define INT_730_GPIO_BANK3 8 | ||
94 | #define INT_730_McBSP2TX 10 | ||
95 | #define INT_730_McBSP2RX 11 | ||
96 | #define INT_730_McBSP2RX_OVF 12 | ||
97 | #define INT_730_LCD_LINE 14 | ||
98 | #define INT_730_GSM_PROTECT 15 | ||
99 | #define INT_730_TIMER3 16 | ||
100 | #define INT_730_GPIO_BANK5 17 | ||
101 | #define INT_730_GPIO_BANK6 18 | ||
102 | #define INT_730_SPGIO_WR 29 | ||
103 | |||
104 | /* | ||
105 | * IRQ numbers for interrupt handler 2 | ||
106 | * | ||
107 | * NOTE: See also the OMAP-1510 and 1610 specific IRQ numbers below | ||
108 | */ | ||
109 | #define IH2_BASE 32 | ||
110 | |||
111 | #define INT_KEYBOARD (1 + IH2_BASE) | ||
112 | #define INT_uWireTX (2 + IH2_BASE) | ||
113 | #define INT_uWireRX (3 + IH2_BASE) | ||
114 | #define INT_I2C (4 + IH2_BASE) | ||
115 | #define INT_MPUIO (5 + IH2_BASE) | ||
116 | #define INT_USB_HHC_1 (6 + IH2_BASE) | ||
117 | #define INT_McBSP3TX (10 + IH2_BASE) | ||
118 | #define INT_McBSP3RX (11 + IH2_BASE) | ||
119 | #define INT_McBSP1TX (12 + IH2_BASE) | ||
120 | #define INT_McBSP1RX (13 + IH2_BASE) | ||
121 | #define INT_UART1 (14 + IH2_BASE) | ||
122 | #define INT_UART2 (15 + IH2_BASE) | ||
123 | #define INT_BT_MCSI1TX (16 + IH2_BASE) | ||
124 | #define INT_BT_MCSI1RX (17 + IH2_BASE) | ||
125 | #define INT_USB_W2FC (20 + IH2_BASE) | ||
126 | #define INT_1WIRE (21 + IH2_BASE) | ||
127 | #define INT_OS_TIMER (22 + IH2_BASE) | ||
128 | #define INT_MMC (23 + IH2_BASE) | ||
129 | #define INT_GAUGE_32K (24 + IH2_BASE) | ||
130 | #define INT_RTC_TIMER (25 + IH2_BASE) | ||
131 | #define INT_RTC_ALARM (26 + IH2_BASE) | ||
132 | #define INT_MEM_STICK (27 + IH2_BASE) | ||
133 | #define INT_DSP_MMU (28 + IH2_BASE) | ||
134 | |||
135 | /* | ||
136 | * OMAP-1510 specific IRQ numbers for interrupt handler 2 | ||
137 | */ | ||
138 | #define INT_1510_OS_32kHz_TIMER (22 + IH2_BASE) | ||
139 | #define INT_1510_COM_SPI_RO (31 + IH2_BASE) | ||
140 | |||
141 | /* | ||
142 | * OMAP-1610 specific IRQ numbers for interrupt handler 2 | ||
143 | */ | ||
144 | #define INT_1610_FAC (0 + IH2_BASE) | ||
145 | #define INT_1610_USB_HHC_2 (7 + IH2_BASE) | ||
146 | #define INT_1610_USB_OTG (8 + IH2_BASE) | ||
147 | #define INT_1610_SoSSI (9 + IH2_BASE) | ||
148 | #define INT_1610_SoSSI_MATCH (19 + IH2_BASE) | ||
149 | #define INT_1610_McBSP2RX_OF (31 + IH2_BASE) | ||
150 | #define INT_1610_STI (32 + IH2_BASE) | ||
151 | #define INT_1610_STI_WAKEUP (33 + IH2_BASE) | ||
152 | #define INT_1610_GPTIMER3 (34 + IH2_BASE) | ||
153 | #define INT_1610_GPTIMER4 (35 + IH2_BASE) | ||
154 | #define INT_1610_GPTIMER5 (36 + IH2_BASE) | ||
155 | #define INT_1610_GPTIMER6 (37 + IH2_BASE) | ||
156 | #define INT_1610_GPTIMER7 (38 + IH2_BASE) | ||
157 | #define INT_1610_GPTIMER8 (39 + IH2_BASE) | ||
158 | #define INT_1610_GPIO_BANK2 (40 + IH2_BASE) | ||
159 | #define INT_1610_GPIO_BANK3 (41 + IH2_BASE) | ||
160 | #define INT_1610_MMC2 (42 + IH2_BASE) | ||
161 | #define INT_1610_CF (43 + IH2_BASE) | ||
162 | #define INT_1610_GPIO_BANK4 (48 + IH2_BASE) | ||
163 | #define INT_1610_SPI (49 + IH2_BASE) | ||
164 | #define INT_1610_DMA_CH6 (53 + IH2_BASE) | ||
165 | #define INT_1610_DMA_CH7 (54 + IH2_BASE) | ||
166 | #define INT_1610_DMA_CH8 (55 + IH2_BASE) | ||
167 | #define INT_1610_DMA_CH9 (56 + IH2_BASE) | ||
168 | #define INT_1610_DMA_CH10 (57 + IH2_BASE) | ||
169 | #define INT_1610_DMA_CH11 (58 + IH2_BASE) | ||
170 | #define INT_1610_DMA_CH12 (59 + IH2_BASE) | ||
171 | #define INT_1610_DMA_CH13 (60 + IH2_BASE) | ||
172 | #define INT_1610_DMA_CH14 (61 + IH2_BASE) | ||
173 | #define INT_1610_DMA_CH15 (62 + IH2_BASE) | ||
174 | #define INT_1610_NAND (63 + IH2_BASE) | ||
175 | |||
176 | /* | ||
177 | * OMAP-730 specific IRQ numbers for interrupt handler 2 | ||
178 | */ | ||
179 | #define INT_730_HW_ERRORS (0 + IH2_BASE) | ||
180 | #define INT_730_NFIQ_PWR_FAIL (1 + IH2_BASE) | ||
181 | #define INT_730_CFCD (2 + IH2_BASE) | ||
182 | #define INT_730_CFIREQ (3 + IH2_BASE) | ||
183 | #define INT_730_I2C (4 + IH2_BASE) | ||
184 | #define INT_730_PCC (5 + IH2_BASE) | ||
185 | #define INT_730_MPU_EXT_NIRQ (6 + IH2_BASE) | ||
186 | #define INT_730_SPI_100K_1 (7 + IH2_BASE) | ||
187 | #define INT_730_SYREN_SPI (8 + IH2_BASE) | ||
188 | #define INT_730_VLYNQ (9 + IH2_BASE) | ||
189 | #define INT_730_GPIO_BANK4 (10 + IH2_BASE) | ||
190 | #define INT_730_McBSP1TX (11 + IH2_BASE) | ||
191 | #define INT_730_McBSP1RX (12 + IH2_BASE) | ||
192 | #define INT_730_McBSP1RX_OF (13 + IH2_BASE) | ||
193 | #define INT_730_UART_MODEM_IRDA_2 (14 + IH2_BASE) | ||
194 | #define INT_730_UART_MODEM_1 (15 + IH2_BASE) | ||
195 | #define INT_730_MCSI (16 + IH2_BASE) | ||
196 | #define INT_730_uWireTX (17 + IH2_BASE) | ||
197 | #define INT_730_uWireRX (18 + IH2_BASE) | ||
198 | #define INT_730_SMC_CD (19 + IH2_BASE) | ||
199 | #define INT_730_SMC_IREQ (20 + IH2_BASE) | ||
200 | #define INT_730_HDQ_1WIRE (21 + IH2_BASE) | ||
201 | #define INT_730_TIMER32K (22 + IH2_BASE) | ||
202 | #define INT_730_MMC_SDIO (23 + IH2_BASE) | ||
203 | #define INT_730_UPLD (24 + IH2_BASE) | ||
204 | #define INT_730_USB_HHC_1 (27 + IH2_BASE) | ||
205 | #define INT_730_USB_HHC_2 (28 + IH2_BASE) | ||
206 | #define INT_730_USB_GENI (29 + IH2_BASE) | ||
207 | #define INT_730_USB_OTG (30 + IH2_BASE) | ||
208 | #define INT_730_CAMERA_IF (31 + IH2_BASE) | ||
209 | #define INT_730_RNG (32 + IH2_BASE) | ||
210 | #define INT_730_DUAL_MODE_TIMER (33 + IH2_BASE) | ||
211 | #define INT_730_DBB_RF_EN (34 + IH2_BASE) | ||
212 | #define INT_730_MPUIO_KEYPAD (35 + IH2_BASE) | ||
213 | #define INT_730_SHA1_MD5 (36 + IH2_BASE) | ||
214 | #define INT_730_SPI_100K_2 (37 + IH2_BASE) | ||
215 | #define INT_730_RNG_IDLE (38 + IH2_BASE) | ||
216 | #define INT_730_MPUIO (39 + IH2_BASE) | ||
217 | #define INT_730_LLPC_LCD_CTRL_CAN_BE_OFF (40 + IH2_BASE) | ||
218 | #define INT_730_LLPC_OE_FALLING (41 + IH2_BASE) | ||
219 | #define INT_730_LLPC_OE_RISING (42 + IH2_BASE) | ||
220 | #define INT_730_LLPC_VSYNC (43 + IH2_BASE) | ||
221 | #define INT_730_WAKE_UP_REQ (46 + IH2_BASE) | ||
222 | #define INT_730_DMA_CH6 (53 + IH2_BASE) | ||
223 | #define INT_730_DMA_CH7 (54 + IH2_BASE) | ||
224 | #define INT_730_DMA_CH8 (55 + IH2_BASE) | ||
225 | #define INT_730_DMA_CH9 (56 + IH2_BASE) | ||
226 | #define INT_730_DMA_CH10 (57 + IH2_BASE) | ||
227 | #define INT_730_DMA_CH11 (58 + IH2_BASE) | ||
228 | #define INT_730_DMA_CH12 (59 + IH2_BASE) | ||
229 | #define INT_730_DMA_CH13 (60 + IH2_BASE) | ||
230 | #define INT_730_DMA_CH14 (61 + IH2_BASE) | ||
231 | #define INT_730_DMA_CH15 (62 + IH2_BASE) | ||
232 | #define INT_730_NAND (63 + IH2_BASE) | ||
233 | |||
234 | /* Max. 128 level 2 IRQs (OMAP1610), 192 GPIOs (OMAP730) and | ||
235 | * 16 MPUIO lines */ | ||
236 | #define OMAP_MAX_GPIO_LINES 192 | ||
237 | #define IH_GPIO_BASE (128 + IH2_BASE) | ||
238 | #define IH_MPUIO_BASE (OMAP_MAX_GPIO_LINES + IH_GPIO_BASE) | ||
239 | #define IH_BOARD_BASE (16 + IH_MPUIO_BASE) | ||
240 | |||
241 | #ifndef __ASSEMBLY__ | ||
242 | extern void omap_init_irq(void); | ||
243 | #endif | ||
244 | |||
245 | /* | ||
246 | * The definition of NR_IRQS is in board-specific header file, which is | ||
247 | * included via hardware.h | ||
248 | */ | ||
249 | #include <asm/arch/hardware.h> | ||
250 | |||
251 | #ifndef NR_IRQS | ||
252 | #define NR_IRQS IH_BOARD_BASE | ||
253 | #endif | ||
254 | |||
255 | #endif | ||
diff --git a/include/asm-arm/arch-omap/mcbsp.h b/include/asm-arm/arch-omap/mcbsp.h new file mode 100644 index 000000000000..305bdeb16ab8 --- /dev/null +++ b/include/asm-arm/arch-omap/mcbsp.h | |||
@@ -0,0 +1,257 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-omap/gpio.h | ||
3 | * | ||
4 | * Defines for Multi-Channel Buffered Serial Port | ||
5 | * | ||
6 | * Copyright (C) 2002 RidgeRun, Inc. | ||
7 | * Author: Steve Johnson | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or modify | ||
10 | * it under the terms of the GNU General Public License as published by | ||
11 | * the Free Software Foundation; either version 2 of the License, or | ||
12 | * (at your option) any later version. | ||
13 | * | ||
14 | * This program is distributed in the hope that it will be useful, | ||
15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
17 | * GNU General Public License for more details. | ||
18 | * | ||
19 | * You should have received a copy of the GNU General Public License | ||
20 | * along with this program; if not, write to the Free Software | ||
21 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
22 | * | ||
23 | */ | ||
24 | #ifndef __ASM_ARCH_OMAP_MCBSP_H | ||
25 | #define __ASM_ARCH_OMAP_MCBSP_H | ||
26 | |||
27 | #include <asm/arch/hardware.h> | ||
28 | |||
29 | #define OMAP730_MCBSP1_BASE 0xfffb1000 | ||
30 | #define OMAP730_MCBSP2_BASE 0xfffb1800 | ||
31 | |||
32 | #define OMAP1510_MCBSP1_BASE 0xe1011800 | ||
33 | #define OMAP1510_MCBSP2_BASE 0xfffb1000 | ||
34 | #define OMAP1510_MCBSP3_BASE 0xe1017000 | ||
35 | |||
36 | #define OMAP1610_MCBSP1_BASE 0xe1011800 | ||
37 | #define OMAP1610_MCBSP2_BASE 0xfffb1000 | ||
38 | #define OMAP1610_MCBSP3_BASE 0xe1017000 | ||
39 | |||
40 | #define OMAP_MCBSP_REG_DRR2 0x00 | ||
41 | #define OMAP_MCBSP_REG_DRR1 0x02 | ||
42 | #define OMAP_MCBSP_REG_DXR2 0x04 | ||
43 | #define OMAP_MCBSP_REG_DXR1 0x06 | ||
44 | #define OMAP_MCBSP_REG_SPCR2 0x08 | ||
45 | #define OMAP_MCBSP_REG_SPCR1 0x0a | ||
46 | #define OMAP_MCBSP_REG_RCR2 0x0c | ||
47 | #define OMAP_MCBSP_REG_RCR1 0x0e | ||
48 | #define OMAP_MCBSP_REG_XCR2 0x10 | ||
49 | #define OMAP_MCBSP_REG_XCR1 0x12 | ||
50 | #define OMAP_MCBSP_REG_SRGR2 0x14 | ||
51 | #define OMAP_MCBSP_REG_SRGR1 0x16 | ||
52 | #define OMAP_MCBSP_REG_MCR2 0x18 | ||
53 | #define OMAP_MCBSP_REG_MCR1 0x1a | ||
54 | #define OMAP_MCBSP_REG_RCERA 0x1c | ||
55 | #define OMAP_MCBSP_REG_RCERB 0x1e | ||
56 | #define OMAP_MCBSP_REG_XCERA 0x20 | ||
57 | #define OMAP_MCBSP_REG_XCERB 0x22 | ||
58 | #define OMAP_MCBSP_REG_PCR0 0x24 | ||
59 | #define OMAP_MCBSP_REG_RCERC 0x26 | ||
60 | #define OMAP_MCBSP_REG_RCERD 0x28 | ||
61 | #define OMAP_MCBSP_REG_XCERC 0x2A | ||
62 | #define OMAP_MCBSP_REG_XCERD 0x2C | ||
63 | #define OMAP_MCBSP_REG_RCERE 0x2E | ||
64 | #define OMAP_MCBSP_REG_RCERF 0x30 | ||
65 | #define OMAP_MCBSP_REG_XCERE 0x32 | ||
66 | #define OMAP_MCBSP_REG_XCERF 0x34 | ||
67 | #define OMAP_MCBSP_REG_RCERG 0x36 | ||
68 | #define OMAP_MCBSP_REG_RCERH 0x38 | ||
69 | #define OMAP_MCBSP_REG_XCERG 0x3A | ||
70 | #define OMAP_MCBSP_REG_XCERH 0x3C | ||
71 | |||
72 | #define OMAP_MAX_MCBSP_COUNT 3 | ||
73 | |||
74 | #define OMAP_MCBSP_READ(base, reg) __raw_readw((base) + OMAP_MCBSP_REG_##reg) | ||
75 | #define OMAP_MCBSP_WRITE(base, reg, val) __raw_writew((val), (base) + OMAP_MCBSP_REG_##reg) | ||
76 | |||
77 | /************************** McBSP SPCR1 bit definitions ***********************/ | ||
78 | #define RRST 0x0001 | ||
79 | #define RRDY 0x0002 | ||
80 | #define RFULL 0x0004 | ||
81 | #define RSYNC_ERR 0x0008 | ||
82 | #define RINTM(value) ((value)<<4) /* bits 4:5 */ | ||
83 | #define ABIS 0x0040 | ||
84 | #define DXENA 0x0080 | ||
85 | #define CLKSTP(value) ((value)<<11) /* bits 11:12 */ | ||
86 | #define RJUST(value) ((value)<<13) /* bits 13:14 */ | ||
87 | #define DLB 0x8000 | ||
88 | |||
89 | /************************** McBSP SPCR2 bit definitions ***********************/ | ||
90 | #define XRST 0x0001 | ||
91 | #define XRDY 0x0002 | ||
92 | #define XEMPTY 0x0004 | ||
93 | #define XSYNC_ERR 0x0008 | ||
94 | #define XINTM(value) ((value)<<4) /* bits 4:5 */ | ||
95 | #define GRST 0x0040 | ||
96 | #define FRST 0x0080 | ||
97 | #define SOFT 0x0100 | ||
98 | #define FREE 0x0200 | ||
99 | |||
100 | /************************** McBSP PCR bit definitions *************************/ | ||
101 | #define CLKRP 0x0001 | ||
102 | #define CLKXP 0x0002 | ||
103 | #define FSRP 0x0004 | ||
104 | #define FSXP 0x0008 | ||
105 | #define DR_STAT 0x0010 | ||
106 | #define DX_STAT 0x0020 | ||
107 | #define CLKS_STAT 0x0040 | ||
108 | #define SCLKME 0x0080 | ||
109 | #define CLKRM 0x0100 | ||
110 | #define CLKXM 0x0200 | ||
111 | #define FSRM 0x0400 | ||
112 | #define FSXM 0x0800 | ||
113 | #define RIOEN 0x1000 | ||
114 | #define XIOEN 0x2000 | ||
115 | #define IDLE_EN 0x4000 | ||
116 | |||
117 | /************************** McBSP RCR1 bit definitions ************************/ | ||
118 | #define RWDLEN1(value) ((value)<<5) /* Bits 5:7 */ | ||
119 | #define RFRLEN1(value) ((value)<<8) /* Bits 8:14 */ | ||
120 | |||
121 | /************************** McBSP XCR1 bit definitions ************************/ | ||
122 | #define XWDLEN1(value) ((value)<<5) /* Bits 5:7 */ | ||
123 | #define XFRLEN1(value) ((value)<<8) /* Bits 8:14 */ | ||
124 | |||
125 | /*************************** McBSP RCR2 bit definitions ***********************/ | ||
126 | #define RDATDLY(value) (value) /* Bits 0:1 */ | ||
127 | #define RFIG 0x0004 | ||
128 | #define RCOMPAND(value) ((value)<<3) /* Bits 3:4 */ | ||
129 | #define RWDLEN2(value) ((value)<<5) /* Bits 5:7 */ | ||
130 | #define RFRLEN2(value) ((value)<<8) /* Bits 8:14 */ | ||
131 | #define RPHASE 0x8000 | ||
132 | |||
133 | /*************************** McBSP XCR2 bit definitions ***********************/ | ||
134 | #define XDATDLY(value) (value) /* Bits 0:1 */ | ||
135 | #define XFIG 0x0004 | ||
136 | #define XCOMPAND(value) ((value)<<3) /* Bits 3:4 */ | ||
137 | #define XWDLEN2(value) ((value)<<5) /* Bits 5:7 */ | ||
138 | #define XFRLEN2(value) ((value)<<8) /* Bits 8:14 */ | ||
139 | #define XPHASE 0x8000 | ||
140 | |||
141 | /************************* McBSP SRGR1 bit definitions ************************/ | ||
142 | #define CLKGDV(value) (value) /* Bits 0:7 */ | ||
143 | #define FWID(value) ((value)<<8) /* Bits 8:15 */ | ||
144 | |||
145 | /************************* McBSP SRGR2 bit definitions ************************/ | ||
146 | #define FPER(value) (value) /* Bits 0:11 */ | ||
147 | #define FSGM 0x1000 | ||
148 | #define CLKSM 0x2000 | ||
149 | #define CLKSP 0x4000 | ||
150 | #define GSYNC 0x8000 | ||
151 | |||
152 | /************************* McBSP MCR1 bit definitions *************************/ | ||
153 | #define RMCM 0x0001 | ||
154 | #define RCBLK(value) ((value)<<2) /* Bits 2:4 */ | ||
155 | #define RPABLK(value) ((value)<<5) /* Bits 5:6 */ | ||
156 | #define RPBBLK(value) ((value)<<7) /* Bits 7:8 */ | ||
157 | |||
158 | /************************* McBSP MCR2 bit definitions *************************/ | ||
159 | #define XMCM(value) (value) /* Bits 0:1 */ | ||
160 | #define XCBLK(value) ((value)<<2) /* Bits 2:4 */ | ||
161 | #define XPABLK(value) ((value)<<5) /* Bits 5:6 */ | ||
162 | #define XPBBLK(value) ((value)<<7) /* Bits 7:8 */ | ||
163 | |||
164 | |||
165 | /* we don't do multichannel for now */ | ||
166 | struct omap_mcbsp_reg_cfg { | ||
167 | u16 spcr2; | ||
168 | u16 spcr1; | ||
169 | u16 rcr2; | ||
170 | u16 rcr1; | ||
171 | u16 xcr2; | ||
172 | u16 xcr1; | ||
173 | u16 srgr2; | ||
174 | u16 srgr1; | ||
175 | u16 mcr2; | ||
176 | u16 mcr1; | ||
177 | u16 pcr0; | ||
178 | u16 rcerc; | ||
179 | u16 rcerd; | ||
180 | u16 xcerc; | ||
181 | u16 xcerd; | ||
182 | u16 rcere; | ||
183 | u16 rcerf; | ||
184 | u16 xcere; | ||
185 | u16 xcerf; | ||
186 | u16 rcerg; | ||
187 | u16 rcerh; | ||
188 | u16 xcerg; | ||
189 | u16 xcerh; | ||
190 | }; | ||
191 | |||
192 | typedef enum { | ||
193 | OMAP_MCBSP1 = 0, | ||
194 | OMAP_MCBSP2, | ||
195 | OMAP_MCBSP3, | ||
196 | } omap_mcbsp_id; | ||
197 | |||
198 | typedef enum { | ||
199 | OMAP_MCBSP_WORD_8 = 0, | ||
200 | OMAP_MCBSP_WORD_12, | ||
201 | OMAP_MCBSP_WORD_16, | ||
202 | OMAP_MCBSP_WORD_20, | ||
203 | OMAP_MCBSP_WORD_24, | ||
204 | OMAP_MCBSP_WORD_32, | ||
205 | } omap_mcbsp_word_length; | ||
206 | |||
207 | typedef enum { | ||
208 | OMAP_MCBSP_CLK_RISING = 0, | ||
209 | OMAP_MCBSP_CLK_FALLING, | ||
210 | } omap_mcbsp_clk_polarity; | ||
211 | |||
212 | typedef enum { | ||
213 | OMAP_MCBSP_FS_ACTIVE_HIGH = 0, | ||
214 | OMAP_MCBSP_FS_ACTIVE_LOW, | ||
215 | } omap_mcbsp_fs_polarity; | ||
216 | |||
217 | typedef enum { | ||
218 | OMAP_MCBSP_CLK_STP_MODE_NO_DELAY = 0, | ||
219 | OMAP_MCBSP_CLK_STP_MODE_DELAY, | ||
220 | } omap_mcbsp_clk_stp_mode; | ||
221 | |||
222 | |||
223 | /******* SPI specific mode **********/ | ||
224 | typedef enum { | ||
225 | OMAP_MCBSP_SPI_MASTER = 0, | ||
226 | OMAP_MCBSP_SPI_SLAVE, | ||
227 | } omap_mcbsp_spi_mode; | ||
228 | |||
229 | struct omap_mcbsp_spi_cfg { | ||
230 | omap_mcbsp_spi_mode spi_mode; | ||
231 | omap_mcbsp_clk_polarity rx_clock_polarity; | ||
232 | omap_mcbsp_clk_polarity tx_clock_polarity; | ||
233 | omap_mcbsp_fs_polarity fsx_polarity; | ||
234 | u8 clk_div; | ||
235 | omap_mcbsp_clk_stp_mode clk_stp_mode; | ||
236 | omap_mcbsp_word_length word_length; | ||
237 | }; | ||
238 | |||
239 | void omap_mcbsp_config(unsigned int id, const struct omap_mcbsp_reg_cfg * config); | ||
240 | int omap_mcbsp_request(unsigned int id); | ||
241 | void omap_mcbsp_free(unsigned int id); | ||
242 | void omap_mcbsp_start(unsigned int id); | ||
243 | void omap_mcbsp_stop(unsigned int id); | ||
244 | void omap_mcbsp_xmit_word(unsigned int id, u32 word); | ||
245 | u32 omap_mcbsp_recv_word(unsigned int id); | ||
246 | |||
247 | int omap_mcbsp_xmit_buffer(unsigned int id, dma_addr_t buffer, unsigned int length); | ||
248 | int omap_mcbsp_recv_buffer(unsigned int id, dma_addr_t buffer, unsigned int length); | ||
249 | |||
250 | /* SPI specific API */ | ||
251 | void omap_mcbsp_set_spi_mode(unsigned int id, const struct omap_mcbsp_spi_cfg * spi_cfg); | ||
252 | |||
253 | /* Polled read/write functions */ | ||
254 | int omap_mcbsp_pollread(unsigned int id, u16 * buf); | ||
255 | int omap_mcbsp_pollwrite(unsigned int id, u16 buf); | ||
256 | |||
257 | #endif | ||
diff --git a/include/asm-arm/arch-omap/memory.h b/include/asm-arm/arch-omap/memory.h new file mode 100644 index 000000000000..f6b57dd846a3 --- /dev/null +++ b/include/asm-arm/arch-omap/memory.h | |||
@@ -0,0 +1,87 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-omap/memory.h | ||
3 | * | ||
4 | * Memory map for OMAP-1510 and 1610 | ||
5 | * | ||
6 | * Copyright (C) 2000 RidgeRun, Inc. | ||
7 | * Author: Greg Lonnon <glonnon@ridgerun.com> | ||
8 | * | ||
9 | * This file was derived from linux/include/asm-arm/arch-intergrator/memory.h | ||
10 | * Copyright (C) 1999 ARM Limited | ||
11 | * | ||
12 | * This program is free software; you can redistribute it and/or modify it | ||
13 | * under the terms of the GNU General Public License as published by the | ||
14 | * Free Software Foundation; either version 2 of the License, or (at your | ||
15 | * option) any later version. | ||
16 | * | ||
17 | * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED | ||
18 | * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | ||
19 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN | ||
20 | * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, | ||
21 | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
22 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | ||
23 | * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||
24 | * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
25 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | ||
26 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
27 | * | ||
28 | * You should have received a copy of the GNU General Public License along | ||
29 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
30 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
31 | */ | ||
32 | |||
33 | #ifndef __ASM_ARCH_MEMORY_H | ||
34 | #define __ASM_ARCH_MEMORY_H | ||
35 | |||
36 | /* | ||
37 | * Physical DRAM offset. | ||
38 | */ | ||
39 | #define PHYS_OFFSET (0x10000000UL) | ||
40 | |||
41 | /* | ||
42 | * OMAP-1510 Local Bus address offset | ||
43 | */ | ||
44 | #define OMAP1510_LB_OFFSET (0x30000000UL) | ||
45 | |||
46 | /* | ||
47 | * Conversion between SDRAM and fake PCI bus, used by USB | ||
48 | * NOTE: Physical address must be converted to Local Bus address | ||
49 | * on OMAP-1510 only | ||
50 | */ | ||
51 | |||
52 | /* | ||
53 | * Bus address is physical address, except for OMAP-1510 Local Bus. | ||
54 | */ | ||
55 | #define __virt_to_bus(x) __virt_to_phys(x) | ||
56 | #define __bus_to_virt(x) __phys_to_virt(x) | ||
57 | |||
58 | /* | ||
59 | * OMAP-1510 bus address is translated into a Local Bus address if the | ||
60 | * OMAP bus type is lbus. We do the address translation based on the | ||
61 | * device overriding the defaults used in the dma-mapping API. | ||
62 | * Note that the is_lbus_device() test is not very efficient on 1510 | ||
63 | * because of the strncmp(). | ||
64 | */ | ||
65 | #ifdef CONFIG_ARCH_OMAP1510 | ||
66 | |||
67 | #define virt_to_lbus(x) ((x) - PAGE_OFFSET + OMAP1510_LB_OFFSET) | ||
68 | #define lbus_to_virt(x) ((x) - OMAP1510_LB_OFFSET + PAGE_OFFSET) | ||
69 | #define is_lbus_device(dev) (cpu_is_omap1510() && dev && (strncmp(dev->bus_id, "ohci", 4) == 0)) | ||
70 | |||
71 | #define __arch_page_to_dma(dev, page) ({is_lbus_device(dev) ? \ | ||
72 | (dma_addr_t)virt_to_lbus(page_address(page)) : \ | ||
73 | (dma_addr_t)__virt_to_bus(page_address(page));}) | ||
74 | |||
75 | #define __arch_dma_to_virt(dev, addr) ({is_lbus_device(dev) ? \ | ||
76 | lbus_to_virt(addr) : \ | ||
77 | __bus_to_virt(addr);}) | ||
78 | |||
79 | #define __arch_virt_to_dma(dev, addr) ({is_lbus_device(dev) ? \ | ||
80 | virt_to_lbus(addr) : \ | ||
81 | __virt_to_bus(addr);}) | ||
82 | |||
83 | #endif /* CONFIG_ARCH_OMAP1510 */ | ||
84 | |||
85 | #define PHYS_TO_NID(addr) (0) | ||
86 | #endif | ||
87 | |||
diff --git a/include/asm-arm/arch-omap/mux.h b/include/asm-arm/arch-omap/mux.h new file mode 100644 index 000000000000..39f99decbb7b --- /dev/null +++ b/include/asm-arm/arch-omap/mux.h | |||
@@ -0,0 +1,561 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-omap/mux.h | ||
3 | * | ||
4 | * Table of the Omap register configurations for the FUNC_MUX and | ||
5 | * PULL_DWN combinations. | ||
6 | * | ||
7 | * Copyright (C) 2003 Nokia Corporation | ||
8 | * | ||
9 | * Written by Tony Lindgren <tony.lindgren@nokia.com> | ||
10 | * | ||
11 | * This program is free software; you can redistribute it and/or modify | ||
12 | * it under the terms of the GNU General Public License as published by | ||
13 | * the Free Software Foundation; either version 2 of the License, or | ||
14 | * (at your option) any later version. | ||
15 | * | ||
16 | * This program is distributed in the hope that it will be useful, | ||
17 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
19 | * GNU General Public License for more details. | ||
20 | * | ||
21 | * You should have received a copy of the GNU General Public License | ||
22 | * along with this program; if not, write to the Free Software | ||
23 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
24 | * | ||
25 | * NOTE: Please use the following naming style for new pin entries. | ||
26 | * For example, W8_1610_MMC2_DAT0, where: | ||
27 | * - W8 = ball | ||
28 | * - 1610 = 1510 or 1610, none if common for both 1510 and 1610 | ||
29 | * - MMC2_DAT0 = function | ||
30 | * | ||
31 | * Change log: | ||
32 | * Added entry for the I2C interface. (02Feb 2004) | ||
33 | * Copyright (C) 2004 Texas Instruments | ||
34 | * | ||
35 | * Added entry for the keypad and uwire CS1. (09Mar 2004) | ||
36 | * Copyright (C) 2004 Texas Instruments | ||
37 | * | ||
38 | */ | ||
39 | |||
40 | #ifndef __ASM_ARCH_MUX_H | ||
41 | #define __ASM_ARCH_MUX_H | ||
42 | |||
43 | #define PU_PD_SEL_NA 0 /* No pu_pd reg available */ | ||
44 | #define PULL_DWN_CTRL_NA 0 /* No pull-down control needed */ | ||
45 | |||
46 | #ifdef CONFIG_OMAP_MUX_DEBUG | ||
47 | #define MUX_REG(reg, mode_offset, mode) .mux_reg_name = "FUNC_MUX_CTRL_"#reg, \ | ||
48 | .mux_reg = FUNC_MUX_CTRL_##reg, \ | ||
49 | .mask_offset = mode_offset, \ | ||
50 | .mask = mode, | ||
51 | |||
52 | #define PULL_REG(reg, bit, status) .pull_name = "PULL_DWN_CTRL_"#reg, \ | ||
53 | .pull_reg = PULL_DWN_CTRL_##reg, \ | ||
54 | .pull_bit = bit, \ | ||
55 | .pull_val = status, | ||
56 | |||
57 | #define PU_PD_REG(reg, status) .pu_pd_name = "PU_PD_SEL_"#reg, \ | ||
58 | .pu_pd_reg = PU_PD_SEL_##reg, \ | ||
59 | .pu_pd_val = status, | ||
60 | |||
61 | #else | ||
62 | |||
63 | #define MUX_REG(reg, mode_offset, mode) .mux_reg = FUNC_MUX_CTRL_##reg, \ | ||
64 | .mask_offset = mode_offset, \ | ||
65 | .mask = mode, | ||
66 | |||
67 | #define PULL_REG(reg, bit, status) .pull_reg = PULL_DWN_CTRL_##reg, \ | ||
68 | .pull_bit = bit, \ | ||
69 | .pull_val = status, | ||
70 | |||
71 | #define PU_PD_REG(reg, status) .pu_pd_reg = PU_PD_SEL_##reg, \ | ||
72 | .pu_pd_val = status, | ||
73 | |||
74 | #endif /* CONFIG_OMAP_MUX_DEBUG */ | ||
75 | |||
76 | #define MUX_CFG(desc, mux_reg, mode_offset, mode, \ | ||
77 | pull_reg, pull_bit, pull_status, \ | ||
78 | pu_pd_reg, pu_pd_status, debug_status) \ | ||
79 | { \ | ||
80 | .name = desc, \ | ||
81 | .debug = debug_status, \ | ||
82 | MUX_REG(mux_reg, mode_offset, mode) \ | ||
83 | PULL_REG(pull_reg, pull_bit, pull_status) \ | ||
84 | PU_PD_REG(pu_pd_reg, pu_pd_status) \ | ||
85 | }, | ||
86 | |||
87 | #define PULL_DISABLED 0 | ||
88 | #define PULL_ENABLED 1 | ||
89 | |||
90 | #define PULL_DOWN 0 | ||
91 | #define PULL_UP 1 | ||
92 | |||
93 | typedef struct { | ||
94 | char *name; | ||
95 | unsigned char busy; | ||
96 | unsigned char debug; | ||
97 | |||
98 | const char *mux_reg_name; | ||
99 | const unsigned int mux_reg; | ||
100 | const unsigned char mask_offset; | ||
101 | const unsigned char mask; | ||
102 | |||
103 | const char *pull_name; | ||
104 | const unsigned int pull_reg; | ||
105 | const unsigned char pull_val; | ||
106 | const unsigned char pull_bit; | ||
107 | |||
108 | const char *pu_pd_name; | ||
109 | const unsigned int pu_pd_reg; | ||
110 | const unsigned char pu_pd_val; | ||
111 | } reg_cfg_set; | ||
112 | |||
113 | /* | ||
114 | * Lookup table for FUNC_MUX and PULL_DWN register combinations for each | ||
115 | * device. See also reg_cfg_table below for the register values. | ||
116 | */ | ||
117 | typedef enum { | ||
118 | /* UART1 (BT_UART_GATING)*/ | ||
119 | UART1_TX = 0, | ||
120 | UART1_RTS, | ||
121 | |||
122 | /* UART2 (COM_UART_GATING)*/ | ||
123 | UART2_TX, | ||
124 | UART2_RX, | ||
125 | UART2_CTS, | ||
126 | UART2_RTS, | ||
127 | |||
128 | /* UART3 (GIGA_UART_GATING) */ | ||
129 | UART3_TX, | ||
130 | UART3_RX, | ||
131 | UART3_CTS, | ||
132 | UART3_RTS, | ||
133 | UART3_CLKREQ, | ||
134 | UART3_BCLK, /* 12MHz clock out */ | ||
135 | Y15_1610_UART3_RTS, | ||
136 | |||
137 | /* PWT & PWL */ | ||
138 | PWT, | ||
139 | PWL, | ||
140 | |||
141 | /* USB master generic */ | ||
142 | R18_USB_VBUS, | ||
143 | R18_1510_USB_GPIO0, | ||
144 | W4_USB_PUEN, | ||
145 | W4_USB_CLKO, | ||
146 | W4_USB_HIGHZ, | ||
147 | W4_GPIO58, | ||
148 | |||
149 | /* USB1 master */ | ||
150 | USB1_SUSP, | ||
151 | USB1_SEO, | ||
152 | W13_1610_USB1_SE0, | ||
153 | USB1_TXEN, | ||
154 | USB1_TXD, | ||
155 | USB1_VP, | ||
156 | USB1_VM, | ||
157 | USB1_RCV, | ||
158 | USB1_SPEED, | ||
159 | R13_1610_USB1_SPEED, | ||
160 | R13_1710_USB1_SE0, | ||
161 | |||
162 | /* USB2 master */ | ||
163 | USB2_SUSP, | ||
164 | USB2_VP, | ||
165 | USB2_TXEN, | ||
166 | USB2_VM, | ||
167 | USB2_RCV, | ||
168 | USB2_SEO, | ||
169 | USB2_TXD, | ||
170 | |||
171 | /* OMAP-1510 GPIO */ | ||
172 | R18_1510_GPIO0, | ||
173 | R19_1510_GPIO1, | ||
174 | M14_1510_GPIO2, | ||
175 | |||
176 | /* OMAP1610 GPIO */ | ||
177 | P18_1610_GPIO3, | ||
178 | Y15_1610_GPIO17, | ||
179 | |||
180 | /* OMAP-1710 GPIO */ | ||
181 | R18_1710_GPIO0, | ||
182 | V2_1710_GPIO10, | ||
183 | N21_1710_GPIO14, | ||
184 | W15_1710_GPIO40, | ||
185 | |||
186 | /* MPUIO */ | ||
187 | MPUIO2, | ||
188 | MPUIO4, | ||
189 | MPUIO5, | ||
190 | T20_1610_MPUIO5, | ||
191 | W11_1610_MPUIO6, | ||
192 | V10_1610_MPUIO7, | ||
193 | W11_1610_MPUIO9, | ||
194 | V10_1610_MPUIO10, | ||
195 | W10_1610_MPUIO11, | ||
196 | E20_1610_MPUIO13, | ||
197 | U20_1610_MPUIO14, | ||
198 | E19_1610_MPUIO15, | ||
199 | |||
200 | /* MCBSP2 */ | ||
201 | MCBSP2_CLKR, | ||
202 | MCBSP2_CLKX, | ||
203 | MCBSP2_DR, | ||
204 | MCBSP2_DX, | ||
205 | MCBSP2_FSR, | ||
206 | MCBSP2_FSX, | ||
207 | |||
208 | /* MCBSP3 */ | ||
209 | MCBSP3_CLKX, | ||
210 | |||
211 | /* Misc ballouts */ | ||
212 | BALLOUT_V8_ARMIO3, | ||
213 | |||
214 | /* OMAP-1610 MMC2 */ | ||
215 | W8_1610_MMC2_DAT0, | ||
216 | V8_1610_MMC2_DAT1, | ||
217 | W15_1610_MMC2_DAT2, | ||
218 | R10_1610_MMC2_DAT3, | ||
219 | Y10_1610_MMC2_CLK, | ||
220 | Y8_1610_MMC2_CMD, | ||
221 | V9_1610_MMC2_CMDDIR, | ||
222 | V5_1610_MMC2_DATDIR0, | ||
223 | W19_1610_MMC2_DATDIR1, | ||
224 | R18_1610_MMC2_CLKIN, | ||
225 | |||
226 | /* OMAP-1610 External Trace Interface */ | ||
227 | M19_1610_ETM_PSTAT0, | ||
228 | L15_1610_ETM_PSTAT1, | ||
229 | L18_1610_ETM_PSTAT2, | ||
230 | L19_1610_ETM_D0, | ||
231 | J19_1610_ETM_D6, | ||
232 | J18_1610_ETM_D7, | ||
233 | |||
234 | /* OMAP-1610 GPIO */ | ||
235 | P20_1610_GPIO4, | ||
236 | V9_1610_GPIO7, | ||
237 | W8_1610_GPIO9, | ||
238 | N19_1610_GPIO13, | ||
239 | P10_1610_GPIO22, | ||
240 | V5_1610_GPIO24, | ||
241 | AA20_1610_GPIO_41, | ||
242 | W19_1610_GPIO48, | ||
243 | M7_1610_GPIO62, | ||
244 | |||
245 | /* OMAP-1610 uWire */ | ||
246 | V19_1610_UWIRE_SCLK, | ||
247 | U18_1610_UWIRE_SDI, | ||
248 | W21_1610_UWIRE_SDO, | ||
249 | N14_1610_UWIRE_CS0, | ||
250 | P15_1610_UWIRE_CS0, | ||
251 | N15_1610_UWIRE_CS1, | ||
252 | |||
253 | /* OMAP-1610 Flash */ | ||
254 | L3_1610_FLASH_CS2B_OE, | ||
255 | M8_1610_FLASH_CS2B_WE, | ||
256 | |||
257 | /* First MMC */ | ||
258 | MMC_CMD, | ||
259 | MMC_DAT1, | ||
260 | MMC_DAT2, | ||
261 | MMC_DAT0, | ||
262 | MMC_CLK, | ||
263 | MMC_DAT3, | ||
264 | |||
265 | /* OMAP-1710 MMC CMDDIR and DATDIR0 */ | ||
266 | M15_1710_MMC_CLKI, | ||
267 | P19_1710_MMC_CMDDIR, | ||
268 | P20_1710_MMC_DATDIR0, | ||
269 | |||
270 | /* OMAP-1610 USB0 alternate pin configuration */ | ||
271 | W9_USB0_TXEN, | ||
272 | AA9_USB0_VP, | ||
273 | Y5_USB0_RCV, | ||
274 | R9_USB0_VM, | ||
275 | V6_USB0_TXD, | ||
276 | W5_USB0_SE0, | ||
277 | V9_USB0_SPEED, | ||
278 | V9_USB0_SUSP, | ||
279 | |||
280 | /* USB2 */ | ||
281 | W9_USB2_TXEN, | ||
282 | AA9_USB2_VP, | ||
283 | Y5_USB2_RCV, | ||
284 | R9_USB2_VM, | ||
285 | V6_USB2_TXD, | ||
286 | W5_USB2_SE0, | ||
287 | |||
288 | /* UART1 1610 */ | ||
289 | |||
290 | R13_1610_UART1_TX, | ||
291 | V14_1610_UART1_RX, | ||
292 | R14_1610_UART1_CTS, | ||
293 | AA15_1610_UART1_RTS, | ||
294 | |||
295 | /* I2C OMAP-1610 */ | ||
296 | I2C_SCL, | ||
297 | I2C_SDA, | ||
298 | |||
299 | /* Keypad */ | ||
300 | F18_1610_KBC0, | ||
301 | D20_1610_KBC1, | ||
302 | D19_1610_KBC2, | ||
303 | E18_1610_KBC3, | ||
304 | C21_1610_KBC4, | ||
305 | G18_1610_KBR0, | ||
306 | F19_1610_KBR1, | ||
307 | H14_1610_KBR2, | ||
308 | E20_1610_KBR3, | ||
309 | E19_1610_KBR4, | ||
310 | N19_1610_KBR5, | ||
311 | |||
312 | /* Power management */ | ||
313 | T20_1610_LOW_PWR, | ||
314 | |||
315 | /* MCLK Settings */ | ||
316 | V5_1710_MCLK_ON, | ||
317 | V5_1710_MCLK_OFF, | ||
318 | R10_1610_MCLK_ON, | ||
319 | R10_1610_MCLK_OFF, | ||
320 | |||
321 | /* CompactFlash controller */ | ||
322 | P11_1610_CF_CD2, | ||
323 | R11_1610_CF_IOIS16, | ||
324 | V10_1610_CF_IREQ, | ||
325 | W10_1610_CF_RESET, | ||
326 | W11_1610_CF_CD1, | ||
327 | } reg_cfg_t; | ||
328 | |||
329 | #if defined(__MUX_C__) && defined(CONFIG_OMAP_MUX) | ||
330 | |||
331 | /* | ||
332 | * Table of various FUNC_MUX and PULL_DWN combinations for each device. | ||
333 | * See also reg_cfg_t above for the lookup table. | ||
334 | */ | ||
335 | static reg_cfg_set __initdata_or_module | ||
336 | reg_cfg_table[] = { | ||
337 | /* | ||
338 | * description mux mode mux pull pull pull pu_pd pu dbg | ||
339 | * reg offset mode reg bit ena reg | ||
340 | */ | ||
341 | MUX_CFG("UART1_TX", 9, 21, 1, 2, 3, 0, NA, 0, 0) | ||
342 | MUX_CFG("UART1_RTS", 9, 12, 1, 2, 0, 0, NA, 0, 0) | ||
343 | |||
344 | /* UART2 (COM_UART_GATING), conflicts with USB2 */ | ||
345 | MUX_CFG("UART2_TX", C, 27, 1, 3, 3, 0, NA, 0, 0) | ||
346 | MUX_CFG("UART2_RX", C, 18, 0, 3, 1, 1, NA, 0, 0) | ||
347 | MUX_CFG("UART2_CTS", C, 21, 0, 3, 1, 1, NA, 0, 0) | ||
348 | MUX_CFG("UART2_RTS", C, 24, 1, 3, 2, 0, NA, 0, 0) | ||
349 | |||
350 | /* UART3 (GIGA_UART_GATING) */ | ||
351 | MUX_CFG("UART3_TX", 6, 0, 1, 0, 30, 0, NA, 0, 0) | ||
352 | MUX_CFG("UART3_RX", 6, 3, 0, 0, 31, 1, NA, 0, 0) | ||
353 | MUX_CFG("UART3_CTS", 5, 12, 2, 0, 24, 0, NA, 0, 0) | ||
354 | MUX_CFG("UART3_RTS", 5, 15, 2, 0, 25, 0, NA, 0, 0) | ||
355 | MUX_CFG("UART3_CLKREQ", 9, 27, 0, 2, 5, 0, NA, 0, 0) | ||
356 | MUX_CFG("UART3_BCLK", A, 0, 0, 2, 6, 0, NA, 0, 0) | ||
357 | MUX_CFG("Y15_1610_UART3_RTS", A, 0, 1, 2, 6, 0, NA, 0, 0) | ||
358 | |||
359 | /* PWT & PWL, conflicts with UART3 */ | ||
360 | MUX_CFG("PWT", 6, 0, 2, 0, 30, 0, NA, 0, 0) | ||
361 | MUX_CFG("PWL", 6, 3, 1, 0, 31, 1, NA, 0, 0) | ||
362 | |||
363 | /* USB internal master generic */ | ||
364 | MUX_CFG("R18_USB_VBUS", 7, 9, 2, 1, 11, 0, NA, 0, 1) | ||
365 | MUX_CFG("R18_1510_USB_GPIO0", 7, 9, 0, 1, 11, 1, NA, 0, 1) | ||
366 | /* works around erratum: W4_USB_PUEN and W4_USB_PUDIS are switched! */ | ||
367 | MUX_CFG("W4_USB_PUEN", D, 3, 3, 3, 5, 1, NA, 0, 1) | ||
368 | MUX_CFG("W4_USB_CLKO", D, 3, 1, 3, 5, 0, NA, 0, 1) | ||
369 | MUX_CFG("W4_USB_HIGHZ", D, 3, 4, 3, 5, 0, 3, 0, 1) | ||
370 | MUX_CFG("W4_GPIO58", D, 3, 7, 3, 5, 0, 3, 0, 1) | ||
371 | |||
372 | /* USB1 master */ | ||
373 | MUX_CFG("USB1_SUSP", 8, 27, 2, 1, 27, 0, NA, 0, 1) | ||
374 | MUX_CFG("USB1_SE0", 9, 0, 2, 1, 28, 0, NA, 0, 1) | ||
375 | MUX_CFG("W13_1610_USB1_SE0", 9, 0, 4, 1, 28, 0, NA, 0, 1) | ||
376 | MUX_CFG("USB1_TXEN", 9, 3, 2, 1, 29, 0, NA, 0, 1) | ||
377 | MUX_CFG("USB1_TXD", 9, 24, 1, 2, 4, 0, NA, 0, 1) | ||
378 | MUX_CFG("USB1_VP", A, 3, 1, 2, 7, 0, NA, 0, 1) | ||
379 | MUX_CFG("USB1_VM", A, 6, 1, 2, 8, 0, NA, 0, 1) | ||
380 | MUX_CFG("USB1_RCV", A, 9, 1, 2, 9, 0, NA, 0, 1) | ||
381 | MUX_CFG("USB1_SPEED", A, 12, 2, 2, 10, 0, NA, 0, 1) | ||
382 | MUX_CFG("R13_1610_USB1_SPEED", A, 12, 5, 2, 10, 0, NA, 0, 1) | ||
383 | MUX_CFG("R13_1710_USB1_SEO", A, 12, 5, 2, 10, 0, NA, 0, 1) | ||
384 | |||
385 | /* USB2 master */ | ||
386 | MUX_CFG("USB2_SUSP", B, 3, 1, 2, 17, 0, NA, 0, 1) | ||
387 | MUX_CFG("USB2_VP", B, 6, 1, 2, 18, 0, NA, 0, 1) | ||
388 | MUX_CFG("USB2_TXEN", B, 9, 1, 2, 19, 0, NA, 0, 1) | ||
389 | MUX_CFG("USB2_VM", C, 18, 1, 3, 0, 0, NA, 0, 1) | ||
390 | MUX_CFG("USB2_RCV", C, 21, 1, 3, 1, 0, NA, 0, 1) | ||
391 | MUX_CFG("USB2_SE0", C, 24, 2, 3, 2, 0, NA, 0, 1) | ||
392 | MUX_CFG("USB2_TXD", C, 27, 2, 3, 3, 0, NA, 0, 1) | ||
393 | |||
394 | /* OMAP-1510 GPIO */ | ||
395 | MUX_CFG("R18_1510_GPIO0", 7, 9, 0, 1, 11, 1, 0, 0, 1) | ||
396 | MUX_CFG("R19_1510_GPIO1", 7, 6, 0, 1, 10, 1, 0, 0, 1) | ||
397 | MUX_CFG("M14_1510_GPIO2", 7, 3, 0, 1, 9, 1, 0, 0, 1) | ||
398 | |||
399 | /* OMAP1610 GPIO */ | ||
400 | MUX_CFG("P18_1610_GPIO3", 7, 0, 0, 1, 8, 0, NA, 0, 1) | ||
401 | MUX_CFG("Y15_1610_GPIO17", A, 0, 7, 2, 6, 0, NA, 0, 1) | ||
402 | |||
403 | /* OMAP-1710 GPIO */ | ||
404 | MUX_CFG("R18_1710_GPIO0", 7, 9, 0, 1, 11, 1, 1, 1, 1) | ||
405 | MUX_CFG("V2_1710_GPIO10", F, 27, 1, 4, 3, 1, 4, 1, 1) | ||
406 | MUX_CFG("N21_1710_GPIO14", 6, 9, 0, 1, 1, 1, 1, 1, 1) | ||
407 | MUX_CFG("W15_1710_GPIO40", 9, 27, 7, 2, 5, 1, 2, 1, 1) | ||
408 | |||
409 | /* MPUIO */ | ||
410 | MUX_CFG("MPUIO2", 7, 18, 0, 1, 1, 1, NA, 0, 1) | ||
411 | MUX_CFG("MPUIO4", 7, 15, 0, 1, 13, 1, NA, 0, 1) | ||
412 | MUX_CFG("MPUIO5", 7, 12, 0, 1, 12, 1, NA, 0, 1) | ||
413 | |||
414 | MUX_CFG("T20_1610_MPUIO5", 7, 12, 0, 1, 12, 0, 3, 0, 1) | ||
415 | MUX_CFG("W11_1610_MPUIO6", 10, 15, 2, 3, 8, 0, 3, 0, 1) | ||
416 | MUX_CFG("V10_1610_MPUIO7", A, 24, 2, 2, 14, 0, 2, 0, 1) | ||
417 | MUX_CFG("W11_1610_MPUIO9", 10, 15, 1, 3, 8, 0, 3, 0, 1) | ||
418 | MUX_CFG("V10_1610_MPUIO10", A, 24, 1, 2, 14, 0, 2, 0, 1) | ||
419 | MUX_CFG("W10_1610_MPUIO11", A, 18, 2, 2, 11, 0, 2, 0, 1) | ||
420 | MUX_CFG("E20_1610_MPUIO13", 3, 21, 1, 0, 7, 0, 0, 0, 1) | ||
421 | MUX_CFG("U20_1610_MPUIO14", 9, 6, 6, 0, 30, 0, 0, 0, 1) | ||
422 | MUX_CFG("E19_1610_MPUIO15", 3, 18, 1, 0, 6, 0, 0, 0, 1) | ||
423 | |||
424 | /* MCBSP2 */ | ||
425 | MUX_CFG("MCBSP2_CLKR", C, 6, 0, 2, 27, 1, NA, 0, 1) | ||
426 | MUX_CFG("MCBSP2_CLKX", C, 9, 0, 2, 29, 1, NA, 0, 1) | ||
427 | MUX_CFG("MCBSP2_DR", C, 0, 0, 2, 26, 1, NA, 0, 1) | ||
428 | MUX_CFG("MCBSP2_DX", C, 15, 0, 2, 31, 1, NA, 0, 1) | ||
429 | MUX_CFG("MCBSP2_FSR", C, 12, 0, 2, 30, 1, NA, 0, 1) | ||
430 | MUX_CFG("MCBSP2_FSX", C, 3, 0, 2, 27, 1, NA, 0, 1) | ||
431 | |||
432 | /* MCBSP3 NOTE: Mode must 1 for clock */ | ||
433 | MUX_CFG("MCBSP3_CLKX", 9, 3, 1, 1, 29, 0, NA, 0, 1) | ||
434 | |||
435 | /* Misc ballouts */ | ||
436 | MUX_CFG("BALLOUT_V8_ARMIO3", B, 18, 0, 2, 25, 1, NA, 0, 1) | ||
437 | |||
438 | /* OMAP-1610 MMC2 */ | ||
439 | MUX_CFG("W8_1610_MMC2_DAT0", B, 21, 6, 2, 23, 1, 2, 1, 1) | ||
440 | MUX_CFG("V8_1610_MMC2_DAT1", B, 27, 6, 2, 25, 1, 2, 1, 1) | ||
441 | MUX_CFG("W15_1610_MMC2_DAT2", 9, 12, 6, 2, 5, 1, 2, 1, 1) | ||
442 | MUX_CFG("R10_1610_MMC2_DAT3", B, 18, 6, 2, 22, 1, 2, 1, 1) | ||
443 | MUX_CFG("Y10_1610_MMC2_CLK", B, 3, 6, 2, 17, 0, 2, 0, 1) | ||
444 | MUX_CFG("Y8_1610_MMC2_CMD", B, 24, 6, 2, 24, 1, 2, 1, 1) | ||
445 | MUX_CFG("V9_1610_MMC2_CMDDIR", B, 12, 6, 2, 20, 0, 2, 1, 1) | ||
446 | MUX_CFG("V5_1610_MMC2_DATDIR0", B, 15, 6, 2, 21, 0, 2, 1, 1) | ||
447 | MUX_CFG("W19_1610_MMC2_DATDIR1", 8, 15, 6, 1, 23, 0, 1, 1, 1) | ||
448 | MUX_CFG("R18_1610_MMC2_CLKIN", 7, 9, 6, 1, 11, 0, 1, 11, 1) | ||
449 | |||
450 | /* OMAP-1610 External Trace Interface */ | ||
451 | MUX_CFG("M19_1610_ETM_PSTAT0", 5, 27, 1, 0, 29, 0, 0, 0, 1) | ||
452 | MUX_CFG("L15_1610_ETM_PSTAT1", 5, 24, 1, 0, 28, 0, 0, 0, 1) | ||
453 | MUX_CFG("L18_1610_ETM_PSTAT2", 5, 21, 1, 0, 27, 0, 0, 0, 1) | ||
454 | MUX_CFG("L19_1610_ETM_D0", 5, 18, 1, 0, 26, 0, 0, 0, 1) | ||
455 | MUX_CFG("J19_1610_ETM_D6", 5, 0, 1, 0, 20, 0, 0, 0, 1) | ||
456 | MUX_CFG("J18_1610_ETM_D7", 5, 27, 1, 0, 19, 0, 0, 0, 1) | ||
457 | |||
458 | /* OMAP-1610 GPIO */ | ||
459 | MUX_CFG("P20_1610_GPIO4", 6, 27, 0, 1, 7, 0, 1, 1, 1) | ||
460 | MUX_CFG("V9_1610_GPIO7", B, 12, 1, 2, 20, 0, 2, 1, 1) | ||
461 | MUX_CFG("W8_1610_GPIO9", B, 21, 0, 2, 23, 0, 2, 1, 1) | ||
462 | MUX_CFG("N19_1610_GPIO13", 6, 12, 0, 1, 2, 0, 1, 1, 1) | ||
463 | MUX_CFG("P10_1610_GPIO22", C, 0, 7, 2, 26, 0, 2, 1, 1) | ||
464 | MUX_CFG("V5_1610_GPIO24", B, 15, 7, 2, 21, 0, 2, 1, 1) | ||
465 | MUX_CFG("AA20_1610_GPIO_41", 9, 9, 7, 1, 31, 0, 1, 1, 1) | ||
466 | MUX_CFG("W19_1610_GPIO48", 8, 15, 7, 1, 23, 1, 1, 0, 1) | ||
467 | MUX_CFG("M7_1610_GPIO62", 10, 0, 0, 4, 24, 0, 4, 0, 1) | ||
468 | |||
469 | /* OMAP-1610 uWire */ | ||
470 | MUX_CFG("V19_1610_UWIRE_SCLK", 8, 6, 0, 1, 20, 0, 1, 1, 1) | ||
471 | MUX_CFG("U18_1610_UWIRE_SDI", 8, 0, 0, 1, 18, 0, 1, 1, 1) | ||
472 | MUX_CFG("W21_1610_UWIRE_SDO", 8, 3, 0, 1, 19, 0, 1, 1, 1) | ||
473 | MUX_CFG("N14_1610_UWIRE_CS0", 8, 9, 1, 1, 21, 0, 1, 1, 1) | ||
474 | MUX_CFG("P15_1610_UWIRE_CS3", 8, 12, 1, 1, 22, 0, 1, 1, 1) | ||
475 | MUX_CFG("N15_1610_UWIRE_CS1", 7, 18, 2, 1, 14, 0, NA, 0, 1) | ||
476 | |||
477 | /* OMAP-1610 Flash */ | ||
478 | MUX_CFG("L3_1610_FLASH_CS2B_OE",10, 6, 1, NA, 0, 0, NA, 0, 1) | ||
479 | MUX_CFG("M8_1610_FLASH_CS2B_WE",10, 3, 1, NA, 0, 0, NA, 0, 1) | ||
480 | |||
481 | /* First MMC interface, same on 1510, 1610 and 1710 */ | ||
482 | MUX_CFG("MMC_CMD", A, 27, 0, 2, 15, 1, 2, 1, 1) | ||
483 | MUX_CFG("MMC_DAT1", A, 24, 0, 2, 14, 1, 2, 1, 1) | ||
484 | MUX_CFG("MMC_DAT2", A, 18, 0, 2, 12, 1, 2, 1, 1) | ||
485 | MUX_CFG("MMC_DAT0", B, 0, 0, 2, 16, 1, 2, 1, 1) | ||
486 | MUX_CFG("MMC_CLK", A, 21, 0, NA, 0, 0, NA, 0, 1) | ||
487 | MUX_CFG("MMC_DAT3", 10, 15, 0, 3, 8, 1, 3, 1, 1) | ||
488 | MUX_CFG("M15_1710_MMC_CLKI", 6, 21, 2, 0, 0, 0, NA, 0, 1) | ||
489 | MUX_CFG("P19_1710_MMC_CMDDIR", 6, 24, 6, 0, 0, 0, NA, 0, 1) | ||
490 | MUX_CFG("P20_1710_MMC_DATDIR0", 6, 27, 5, 0, 0, 0, NA, 0, 1) | ||
491 | |||
492 | /* OMAP-1610 USB0 alternate configuration */ | ||
493 | MUX_CFG("W9_USB0_TXEN", B, 9, 5, 2, 19, 0, 2, 0, 1) | ||
494 | MUX_CFG("AA9_USB0_VP", B, 6, 5, 2, 18, 0, 2, 0, 1) | ||
495 | MUX_CFG("Y5_USB0_RCV", C, 21, 5, 3, 1, 0, 1, 0, 1) | ||
496 | MUX_CFG("R9_USB0_VM", C, 18, 5, 3, 0, 0, 3, 0, 1) | ||
497 | MUX_CFG("V6_USB0_TXD", C, 27, 5, 3, 3, 0, 3, 0, 1) | ||
498 | MUX_CFG("W5_USB0_SE0", C, 24, 5, 3, 2, 0, 3, 0, 1) | ||
499 | MUX_CFG("V9_USB0_SPEED", B, 12, 5, 2, 20, 0, 2, 0, 1) | ||
500 | MUX_CFG("Y10_USB0_SUSP", B, 3, 5, 2, 17, 0, 2, 0, 1) | ||
501 | |||
502 | /* USB2 interface */ | ||
503 | MUX_CFG("W9_USB2_TXEN", B, 9, 1, NA, 0, 0, NA, 0, 1) | ||
504 | MUX_CFG("AA9_USB2_VP", B, 6, 1, NA, 0, 0, NA, 0, 1) | ||
505 | MUX_CFG("Y5_USB2_RCV", C, 21, 1, NA, 0, 0, NA, 0, 1) | ||
506 | MUX_CFG("R8_USB2_VM", C, 18, 1, NA, 0, 0, NA, 0, 1) | ||
507 | MUX_CFG("V6_USB2_TXD", C, 27, 2, NA, 0, 0, NA, 0, 1) | ||
508 | MUX_CFG("W5_USB2_SE0", C, 24, 2, NA, 0, 0, NA, 0, 1) | ||
509 | |||
510 | |||
511 | /* UART1 */ | ||
512 | MUX_CFG("R13_1610_UART1_TX", A, 12, 6, 2, 10, 0, 2, 10, 1) | ||
513 | MUX_CFG("V14_1610_UART1_RX", 9, 18, 0, 2, 2, 0, 2, 2, 1) | ||
514 | MUX_CFG("R14_1610_UART1_CTS", 9, 15, 0, 2, 1, 0, 2, 1, 1) | ||
515 | MUX_CFG("AA15_1610_UART1_RTS", 9, 12, 1, 2, 0, 0, 2, 0, 1) | ||
516 | |||
517 | /* I2C interface */ | ||
518 | MUX_CFG("I2C_SCL", 7, 24, 0, NA, 0, 0, NA, 0, 0) | ||
519 | MUX_CFG("I2C_SDA", 7, 27, 0, NA, 0, 0, NA, 0, 0) | ||
520 | |||
521 | /* Keypad */ | ||
522 | MUX_CFG("F18_1610_KBC0", 3, 15, 0, 0, 5, 1, 0, 0, 0) | ||
523 | MUX_CFG("D20_1610_KBC1", 3, 12, 0, 0, 4, 1, 0, 0, 0) | ||
524 | MUX_CFG("D19_1610_KBC2", 3, 9, 0, 0, 3, 1, 0, 0, 0) | ||
525 | MUX_CFG("E18_1610_KBC3", 3, 6, 0, 0, 2, 1, 0, 0, 0) | ||
526 | MUX_CFG("C21_1610_KBC4", 3, 3, 0, 0, 1, 1, 0, 0, 0) | ||
527 | MUX_CFG("G18_1610_KBR0", 4, 0, 0, 0, 10, 1, 0, 1, 0) | ||
528 | MUX_CFG("F19_1610_KBR1", 3, 27, 0, 0, 9, 1, 0, 1, 0) | ||
529 | MUX_CFG("H14_1610_KBR2", 3, 24, 0, 0, 8, 1, 0, 1, 0) | ||
530 | MUX_CFG("E20_1610_KBR3", 3, 21, 0, 0, 7, 1, 0, 1, 0) | ||
531 | MUX_CFG("E19_1610_KBR4", 3, 18, 0, 0, 6, 1, 0, 1, 0) | ||
532 | MUX_CFG("N19_1610_KBR5", 6, 12, 1, 1, 2, 1, 1, 1, 0) | ||
533 | |||
534 | /* Power management */ | ||
535 | MUX_CFG("T20_1610_LOW_PWR", 7, 12, 1, NA, 0, 0, NA, 0, 0) | ||
536 | |||
537 | /* MCLK Settings */ | ||
538 | MUX_CFG("V5_1710_MCLK_ON", B, 15, 0, NA, 0, 0, NA, 0, 0) | ||
539 | MUX_CFG("V5_1710_MCLK_OFF", B, 15, 6, NA, 0, 0, NA, 0, 0) | ||
540 | MUX_CFG("R10_1610_MCLK_ON", B, 18, 0, NA, 22, 0, NA, 1, 0) | ||
541 | MUX_CFG("R10_1610_MCLK_OFF", B, 18, 6, 2, 22, 1, 2, 1, 1) | ||
542 | |||
543 | /* CompactFlash controller, conflicts with MMC1 */ | ||
544 | MUX_CFG("P11_1610_CF_CD2", A, 27, 3, 2, 15, 1, 2, 1, 1) | ||
545 | MUX_CFG("R11_1610_CF_IOIS16", B, 0, 3, 2, 16, 1, 2, 1, 1) | ||
546 | MUX_CFG("V10_1610_CF_IREQ", A, 24, 3, 2, 14, 0, 2, 0, 1) | ||
547 | MUX_CFG("W10_1610_CF_RESET", A, 18, 3, 2, 12, 1, 2, 1, 1) | ||
548 | MUX_CFG("W11_1610_CF_CD1", 10, 15, 3, 3, 8, 1, 3, 1, 1) | ||
549 | }; | ||
550 | |||
551 | #endif /* __MUX_C__ */ | ||
552 | |||
553 | #ifdef CONFIG_OMAP_MUX | ||
554 | /* setup pin muxing in Linux */ | ||
555 | extern int omap_cfg_reg(reg_cfg_t reg_cfg); | ||
556 | #else | ||
557 | /* boot loader does it all (no warnings from CONFIG_OMAP_MUX_WARNINGS) */ | ||
558 | static inline int omap_cfg_reg(reg_cfg_t reg_cfg) { return 0; } | ||
559 | #endif | ||
560 | |||
561 | #endif | ||
diff --git a/include/asm-arm/arch-omap/omap1510.h b/include/asm-arm/arch-omap/omap1510.h new file mode 100644 index 000000000000..f491a48ef2e1 --- /dev/null +++ b/include/asm-arm/arch-omap/omap1510.h | |||
@@ -0,0 +1,61 @@ | |||
1 | /* linux/include/asm-arm/arch-omap/omap1510.h | ||
2 | * | ||
3 | * Hardware definitions for TI OMAP1510 processor. | ||
4 | * | ||
5 | * Cleanup for Linux-2.6 by Dirk Behme <dirk.behme@de.bosch.com> | ||
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 as published by the | ||
9 | * Free Software Foundation; either version 2 of the License, or (at your | ||
10 | * option) any later version. | ||
11 | * | ||
12 | * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED | ||
13 | * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | ||
14 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN | ||
15 | * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, | ||
16 | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
17 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | ||
18 | * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||
19 | * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
20 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | ||
21 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
22 | * | ||
23 | * You should have received a copy of the GNU General Public License along | ||
24 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
25 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
26 | */ | ||
27 | |||
28 | #ifndef __ASM_ARCH_OMAP1510_H | ||
29 | #define __ASM_ARCH_OMAP1510_H | ||
30 | |||
31 | /* | ||
32 | * ---------------------------------------------------------------------------- | ||
33 | * Base addresses | ||
34 | * ---------------------------------------------------------------------------- | ||
35 | */ | ||
36 | |||
37 | /* Syntax: XX_BASE = Virtual base address, XX_START = Physical base address */ | ||
38 | |||
39 | #define OMAP1510_SRAM_BASE 0xD0000000 | ||
40 | #define OMAP1510_SRAM_SIZE (SZ_128K + SZ_64K) | ||
41 | #define OMAP1510_SRAM_START 0x20000000 | ||
42 | |||
43 | #define OMAP1510_DSP_BASE 0xE0000000 | ||
44 | #define OMAP1510_DSP_SIZE 0x28000 | ||
45 | #define OMAP1510_DSP_START 0xE0000000 | ||
46 | |||
47 | #define OMAP1510_DSPREG_BASE 0xE1000000 | ||
48 | #define OMAP1510_DSPREG_SIZE SZ_128K | ||
49 | #define OMAP1510_DSPREG_START 0xE1000000 | ||
50 | |||
51 | /* | ||
52 | * ---------------------------------------------------------------------------- | ||
53 | * Memory used by power management | ||
54 | * ---------------------------------------------------------------------------- | ||
55 | */ | ||
56 | |||
57 | #define OMAP1510_SRAM_IDLE_SUSPEND (OMAP1510_SRAM_BASE + OMAP1510_SRAM_SIZE - 0x200) | ||
58 | #define OMAP1510_SRAM_API_SUSPEND (OMAP1510_SRAM_IDLE_SUSPEND + 0x100) | ||
59 | |||
60 | #endif /* __ASM_ARCH_OMAP1510_H */ | ||
61 | |||
diff --git a/include/asm-arm/arch-omap/omap16xx.h b/include/asm-arm/arch-omap/omap16xx.h new file mode 100644 index 000000000000..88b1fe43ae9e --- /dev/null +++ b/include/asm-arm/arch-omap/omap16xx.h | |||
@@ -0,0 +1,187 @@ | |||
1 | /* linux/include/asm-arm/arch-omap/omap16xx.h | ||
2 | * | ||
3 | * Hardware definitions for TI OMAP1610/5912/1710 processors. | ||
4 | * | ||
5 | * Cleanup for Linux-2.6 by Dirk Behme <dirk.behme@de.bosch.com> | ||
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 as published by the | ||
9 | * Free Software Foundation; either version 2 of the License, or (at your | ||
10 | * option) any later version. | ||
11 | * | ||
12 | * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED | ||
13 | * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | ||
14 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN | ||
15 | * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, | ||
16 | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
17 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | ||
18 | * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||
19 | * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
20 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | ||
21 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
22 | * | ||
23 | * You should have received a copy of the GNU General Public License along | ||
24 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
25 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
26 | */ | ||
27 | |||
28 | #ifndef __ASM_ARCH_OMAP16XX_H | ||
29 | #define __ASM_ARCH_OMAP16XX_H | ||
30 | |||
31 | /* | ||
32 | * ---------------------------------------------------------------------------- | ||
33 | * Base addresses | ||
34 | * ---------------------------------------------------------------------------- | ||
35 | */ | ||
36 | |||
37 | /* Syntax: XX_BASE = Virtual base address, XX_START = Physical base address */ | ||
38 | |||
39 | #define OMAP16XX_SRAM_BASE 0xD0000000 | ||
40 | #define OMAP1610_SRAM_SIZE (SZ_16K) | ||
41 | #define OMAP5912_SRAM_SIZE 0x3E800 | ||
42 | #define OMAP16XX_SRAM_START 0x20000000 | ||
43 | |||
44 | #define OMAP16XX_DSP_BASE 0xE0000000 | ||
45 | #define OMAP16XX_DSP_SIZE 0x28000 | ||
46 | #define OMAP16XX_DSP_START 0xE0000000 | ||
47 | |||
48 | #define OMAP16XX_DSPREG_BASE 0xE1000000 | ||
49 | #define OMAP16XX_DSPREG_SIZE SZ_128K | ||
50 | #define OMAP16XX_DSPREG_START 0xE1000000 | ||
51 | |||
52 | /* | ||
53 | * ---------------------------------------------------------------------------- | ||
54 | * Memory used by power management | ||
55 | * ---------------------------------------------------------------------------- | ||
56 | */ | ||
57 | |||
58 | #define OMAP1610_SRAM_IDLE_SUSPEND (OMAP16XX_SRAM_BASE + OMAP1610_SRAM_SIZE - 0x200) | ||
59 | #define OMAP1610_SRAM_API_SUSPEND (OMAP1610_SRAM_IDLE_SUSPEND + 0x100) | ||
60 | #define OMAP5912_SRAM_IDLE_SUSPEND (OMAP16XX_SRAM_BASE + OMAP5912_SRAM_SIZE - 0x200) | ||
61 | #define OMAP5912_SRAM_API_SUSPEND (OMAP5912_SRAM_IDLE_SUSPEND + 0x100) | ||
62 | |||
63 | /* | ||
64 | * --------------------------------------------------------------------------- | ||
65 | * Interrupts | ||
66 | * --------------------------------------------------------------------------- | ||
67 | */ | ||
68 | #define OMAP_IH2_0_BASE (0xfffe0000) | ||
69 | #define OMAP_IH2_1_BASE (0xfffe0100) | ||
70 | #define OMAP_IH2_2_BASE (0xfffe0200) | ||
71 | #define OMAP_IH2_3_BASE (0xfffe0300) | ||
72 | |||
73 | #define OMAP_IH2_0_ITR (OMAP_IH2_0_BASE + 0x00) | ||
74 | #define OMAP_IH2_0_MIR (OMAP_IH2_0_BASE + 0x04) | ||
75 | #define OMAP_IH2_0_SIR_IRQ (OMAP_IH2_0_BASE + 0x10) | ||
76 | #define OMAP_IH2_0_SIR_FIQ (OMAP_IH2_0_BASE + 0x14) | ||
77 | #define OMAP_IH2_0_CONTROL (OMAP_IH2_0_BASE + 0x18) | ||
78 | #define OMAP_IH2_0_ILR0 (OMAP_IH2_0_BASE + 0x1c) | ||
79 | #define OMAP_IH2_0_ISR (OMAP_IH2_0_BASE + 0x9c) | ||
80 | |||
81 | #define OMAP_IH2_1_ITR (OMAP_IH2_1_BASE + 0x00) | ||
82 | #define OMAP_IH2_1_MIR (OMAP_IH2_1_BASE + 0x04) | ||
83 | #define OMAP_IH2_1_SIR_IRQ (OMAP_IH2_1_BASE + 0x10) | ||
84 | #define OMAP_IH2_1_SIR_FIQ (OMAP_IH2_1_BASE + 0x14) | ||
85 | #define OMAP_IH2_1_CONTROL (OMAP_IH2_1_BASE + 0x18) | ||
86 | #define OMAP_IH2_1_ILR1 (OMAP_IH2_1_BASE + 0x1c) | ||
87 | #define OMAP_IH2_1_ISR (OMAP_IH2_1_BASE + 0x9c) | ||
88 | |||
89 | #define OMAP_IH2_2_ITR (OMAP_IH2_2_BASE + 0x00) | ||
90 | #define OMAP_IH2_2_MIR (OMAP_IH2_2_BASE + 0x04) | ||
91 | #define OMAP_IH2_2_SIR_IRQ (OMAP_IH2_2_BASE + 0x10) | ||
92 | #define OMAP_IH2_2_SIR_FIQ (OMAP_IH2_2_BASE + 0x14) | ||
93 | #define OMAP_IH2_2_CONTROL (OMAP_IH2_2_BASE + 0x18) | ||
94 | #define OMAP_IH2_2_ILR2 (OMAP_IH2_2_BASE + 0x1c) | ||
95 | #define OMAP_IH2_2_ISR (OMAP_IH2_2_BASE + 0x9c) | ||
96 | |||
97 | #define OMAP_IH2_3_ITR (OMAP_IH2_3_BASE + 0x00) | ||
98 | #define OMAP_IH2_3_MIR (OMAP_IH2_3_BASE + 0x04) | ||
99 | #define OMAP_IH2_3_SIR_IRQ (OMAP_IH2_3_BASE + 0x10) | ||
100 | #define OMAP_IH2_3_SIR_FIQ (OMAP_IH2_3_BASE + 0x14) | ||
101 | #define OMAP_IH2_3_CONTROL (OMAP_IH2_3_BASE + 0x18) | ||
102 | #define OMAP_IH2_3_ILR3 (OMAP_IH2_3_BASE + 0x1c) | ||
103 | #define OMAP_IH2_3_ISR (OMAP_IH2_3_BASE + 0x9c) | ||
104 | |||
105 | /* | ||
106 | * ---------------------------------------------------------------------------- | ||
107 | * Clocks | ||
108 | * ---------------------------------------------------------------------------- | ||
109 | */ | ||
110 | #define OMAP16XX_ARM_IDLECT3 (CLKGEN_REG_BASE + 0x24) | ||
111 | |||
112 | /* | ||
113 | * ---------------------------------------------------------------------------- | ||
114 | * Pin configuration registers | ||
115 | * ---------------------------------------------------------------------------- | ||
116 | */ | ||
117 | #define OMAP16XX_CONF_VOLTAGE_VDDSHV6 (1 << 8) | ||
118 | #define OMAP16XX_CONF_VOLTAGE_VDDSHV7 (1 << 9) | ||
119 | #define OMAP16XX_CONF_VOLTAGE_VDDSHV8 (1 << 10) | ||
120 | #define OMAP16XX_CONF_VOLTAGE_VDDSHV9 (1 << 11) | ||
121 | #define OMAP16XX_SUBLVDS_CONF_VALID (1 << 13) | ||
122 | |||
123 | /* | ||
124 | * ---------------------------------------------------------------------------- | ||
125 | * System control registers | ||
126 | * ---------------------------------------------------------------------------- | ||
127 | */ | ||
128 | #define OMAP1610_RESET_CONTROL 0xfffe1140 | ||
129 | |||
130 | /* | ||
131 | * --------------------------------------------------------------------------- | ||
132 | * TIPB bus interface | ||
133 | * --------------------------------------------------------------------------- | ||
134 | */ | ||
135 | #define TIPB_SWITCH_BASE (0xfffbc800) | ||
136 | #define OMAP16XX_MMCSD2_SSW_MPU_CONF (TIPB_SWITCH_BASE + 0x160) | ||
137 | |||
138 | /* UART3 Registers Maping through MPU bus */ | ||
139 | #define UART3_RHR (OMAP_UART3_BASE + 0) | ||
140 | #define UART3_THR (OMAP_UART3_BASE + 0) | ||
141 | #define UART3_DLL (OMAP_UART3_BASE + 0) | ||
142 | #define UART3_IER (OMAP_UART3_BASE + 4) | ||
143 | #define UART3_DLH (OMAP_UART3_BASE + 4) | ||
144 | #define UART3_IIR (OMAP_UART3_BASE + 8) | ||
145 | #define UART3_FCR (OMAP_UART3_BASE + 8) | ||
146 | #define UART3_EFR (OMAP_UART3_BASE + 8) | ||
147 | #define UART3_LCR (OMAP_UART3_BASE + 0x0C) | ||
148 | #define UART3_MCR (OMAP_UART3_BASE + 0x10) | ||
149 | #define UART3_XON1_ADDR1 (OMAP_UART3_BASE + 0x10) | ||
150 | #define UART3_XON2_ADDR2 (OMAP_UART3_BASE + 0x14) | ||
151 | #define UART3_LSR (OMAP_UART3_BASE + 0x14) | ||
152 | #define UART3_TCR (OMAP_UART3_BASE + 0x18) | ||
153 | #define UART3_MSR (OMAP_UART3_BASE + 0x18) | ||
154 | #define UART3_XOFF1 (OMAP_UART3_BASE + 0x18) | ||
155 | #define UART3_XOFF2 (OMAP_UART3_BASE + 0x1C) | ||
156 | #define UART3_SPR (OMAP_UART3_BASE + 0x1C) | ||
157 | #define UART3_TLR (OMAP_UART3_BASE + 0x1C) | ||
158 | #define UART3_MDR1 (OMAP_UART3_BASE + 0x20) | ||
159 | #define UART3_MDR2 (OMAP_UART3_BASE + 0x24) | ||
160 | #define UART3_SFLSR (OMAP_UART3_BASE + 0x28) | ||
161 | #define UART3_TXFLL (OMAP_UART3_BASE + 0x28) | ||
162 | #define UART3_RESUME (OMAP_UART3_BASE + 0x2C) | ||
163 | #define UART3_TXFLH (OMAP_UART3_BASE + 0x2C) | ||
164 | #define UART3_SFREGL (OMAP_UART3_BASE + 0x30) | ||
165 | #define UART3_RXFLL (OMAP_UART3_BASE + 0x30) | ||
166 | #define UART3_SFREGH (OMAP_UART3_BASE + 0x34) | ||
167 | #define UART3_RXFLH (OMAP_UART3_BASE + 0x34) | ||
168 | #define UART3_BLR (OMAP_UART3_BASE + 0x38) | ||
169 | #define UART3_ACREG (OMAP_UART3_BASE + 0x3C) | ||
170 | #define UART3_DIV16 (OMAP_UART3_BASE + 0x3C) | ||
171 | #define UART3_SCR (OMAP_UART3_BASE + 0x40) | ||
172 | #define UART3_SSR (OMAP_UART3_BASE + 0x44) | ||
173 | #define UART3_EBLR (OMAP_UART3_BASE + 0x48) | ||
174 | #define UART3_OSC_12M_SEL (OMAP_UART3_BASE + 0x4C) | ||
175 | #define UART3_MVR (OMAP_UART3_BASE + 0x50) | ||
176 | |||
177 | /* | ||
178 | * ---------------------------------------------------------------------------- | ||
179 | * Pulse-Width Light | ||
180 | * ---------------------------------------------------------------------------- | ||
181 | */ | ||
182 | #define OMAP16XX_PWL_BASE (0xfffb5800) | ||
183 | #define OMAP16XX_PWL_ENABLE (OMAP16XX_PWL_BASE + 0x00) | ||
184 | #define OMAP16XX_PWL_CLK_ENABLE (OMAP16XX_PWL_BASE + 0x04) | ||
185 | |||
186 | #endif /* __ASM_ARCH_OMAP16XX_H */ | ||
187 | |||
diff --git a/include/asm-arm/arch-omap/omap730.h b/include/asm-arm/arch-omap/omap730.h new file mode 100644 index 000000000000..599ab00f5488 --- /dev/null +++ b/include/asm-arm/arch-omap/omap730.h | |||
@@ -0,0 +1,106 @@ | |||
1 | /* linux/include/asm-arm/arch-omap/omap730.h | ||
2 | * | ||
3 | * Hardware definitions for TI OMAP730 processor. | ||
4 | * | ||
5 | * Cleanup for Linux-2.6 by Dirk Behme <dirk.behme@de.bosch.com> | ||
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 as published by the | ||
9 | * Free Software Foundation; either version 2 of the License, or (at your | ||
10 | * option) any later version. | ||
11 | * | ||
12 | * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED | ||
13 | * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | ||
14 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN | ||
15 | * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, | ||
16 | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
17 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | ||
18 | * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||
19 | * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
20 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | ||
21 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
22 | * | ||
23 | * You should have received a copy of the GNU General Public License along | ||
24 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
25 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
26 | */ | ||
27 | |||
28 | #ifndef __ASM_ARCH_OMAP730_H | ||
29 | #define __ASM_ARCH_OMAP730_H | ||
30 | |||
31 | /* | ||
32 | * ---------------------------------------------------------------------------- | ||
33 | * Base addresses | ||
34 | * ---------------------------------------------------------------------------- | ||
35 | */ | ||
36 | |||
37 | /* Syntax: XX_BASE = Virtual base address, XX_START = Physical base address */ | ||
38 | |||
39 | #define OMAP730_SRAM_BASE 0xD0000000 | ||
40 | #define OMAP730_SRAM_SIZE (SZ_128K + SZ_64K + SZ_8K) | ||
41 | #define OMAP730_SRAM_START 0x20000000 | ||
42 | |||
43 | #define OMAP730_DSP_BASE 0xE0000000 | ||
44 | #define OMAP730_DSP_SIZE 0x50000 | ||
45 | #define OMAP730_DSP_START 0xE0000000 | ||
46 | |||
47 | #define OMAP730_DSPREG_BASE 0xE1000000 | ||
48 | #define OMAP730_DSPREG_SIZE SZ_128K | ||
49 | #define OMAP730_DSPREG_START 0xE1000000 | ||
50 | |||
51 | /* | ||
52 | * ---------------------------------------------------------------------------- | ||
53 | * OMAP730 specific configuration registers | ||
54 | * ---------------------------------------------------------------------------- | ||
55 | */ | ||
56 | #define OMAP730_CONFIG_BASE 0xfffe1000 | ||
57 | #define OMAP730_IO_CONF_0 0xfffe1070 | ||
58 | #define OMAP730_IO_CONF_1 0xfffe1074 | ||
59 | #define OMAP730_IO_CONF_2 0xfffe1078 | ||
60 | #define OMAP730_IO_CONF_3 0xfffe107c | ||
61 | #define OMAP730_IO_CONF_4 0xfffe1080 | ||
62 | #define OMAP730_IO_CONF_5 0xfffe1084 | ||
63 | #define OMAP730_IO_CONF_6 0xfffe1088 | ||
64 | #define OMAP730_IO_CONF_7 0xfffe108c | ||
65 | #define OMAP730_IO_CONF_8 0xfffe1090 | ||
66 | #define OMAP730_IO_CONF_9 0xfffe1094 | ||
67 | #define OMAP730_IO_CONF_10 0xfffe1098 | ||
68 | #define OMAP730_IO_CONF_11 0xfffe109c | ||
69 | #define OMAP730_IO_CONF_12 0xfffe10a0 | ||
70 | #define OMAP730_IO_CONF_13 0xfffe10a4 | ||
71 | |||
72 | #define OMAP730_MODE_1 0xfffe1010 | ||
73 | #define OMAP730_MODE_2 0xfffe1014 | ||
74 | |||
75 | /* CSMI specials: in terms of base + offset */ | ||
76 | #define OMAP730_MODE2_OFFSET 0x14 | ||
77 | |||
78 | /* | ||
79 | * ---------------------------------------------------------------------------- | ||
80 | * OMAP730 traffic controller configuration registers | ||
81 | * ---------------------------------------------------------------------------- | ||
82 | */ | ||
83 | #define OMAP730_FLASH_CFG_0 0xfffecc10 | ||
84 | #define OMAP730_FLASH_ACFG_0 0xfffecc50 | ||
85 | #define OMAP730_FLASH_CFG_1 0xfffecc14 | ||
86 | #define OMAP730_FLASH_ACFG_1 0xfffecc54 | ||
87 | |||
88 | /* | ||
89 | * ---------------------------------------------------------------------------- | ||
90 | * OMAP730 DSP control registers | ||
91 | * ---------------------------------------------------------------------------- | ||
92 | */ | ||
93 | #define OMAP730_ICR_BASE 0xfffbb800 | ||
94 | #define OMAP730_DSP_M_CTL 0xfffbb804 | ||
95 | #define OMAP730_DSP_MMU_BASE 0xfffed200 | ||
96 | |||
97 | /* | ||
98 | * ---------------------------------------------------------------------------- | ||
99 | * OMAP730 PCC_UPLD configuration registers | ||
100 | * ---------------------------------------------------------------------------- | ||
101 | */ | ||
102 | #define OMAP730_PCC_UPLD_CTRL_BASE (0xfffe0900) | ||
103 | #define OMAP730_PCC_UPLD_CTRL (OMAP730_PCC_UPLD_CTRL_BASE + 0x00) | ||
104 | |||
105 | #endif /* __ASM_ARCH_OMAP730_H */ | ||
106 | |||
diff --git a/include/asm-arm/arch-omap/param.h b/include/asm-arm/arch-omap/param.h new file mode 100644 index 000000000000..face9ad41e97 --- /dev/null +++ b/include/asm-arm/arch-omap/param.h | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-omap/param.h | ||
3 | * | ||
4 | */ | ||
5 | |||
6 | #ifdef CONFIG_OMAP_32K_TIMER_HZ | ||
7 | #define HZ CONFIG_OMAP_32K_TIMER_HZ | ||
8 | #endif | ||
diff --git a/include/asm-arm/arch-omap/pm.h b/include/asm-arm/arch-omap/pm.h new file mode 100644 index 000000000000..f209fc0953fb --- /dev/null +++ b/include/asm-arm/arch-omap/pm.h | |||
@@ -0,0 +1,229 @@ | |||
1 | /* | ||
2 | * linux/include/asm/arch-omap/pm.h | ||
3 | * | ||
4 | * Header file for OMAP Power Management Routines | ||
5 | * | ||
6 | * Author: MontaVista Software, Inc. | ||
7 | * support@mvista.com | ||
8 | * | ||
9 | * Copyright 2002 MontaVista Software Inc. | ||
10 | * | ||
11 | * Cleanup 2004 for Linux 2.6 by Dirk Behme <dirk.behme@de.bosch.com> | ||
12 | * | ||
13 | * This program is free software; you can redistribute it and/or modify it | ||
14 | * under the terms of the GNU General Public License as published by the | ||
15 | * Free Software Foundation; either version 2 of the License, or (at your | ||
16 | * option) any later version. | ||
17 | * | ||
18 | * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED | ||
19 | * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | ||
20 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN | ||
21 | * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, | ||
22 | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
23 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | ||
24 | * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||
25 | * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
26 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | ||
27 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
28 | * | ||
29 | * You should have received a copy of the GNU General Public License along | ||
30 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
31 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
32 | */ | ||
33 | |||
34 | #ifndef __ASM_ARCH_OMAP_PM_H | ||
35 | #define __ASM_ARCH_OMAP_PM_H | ||
36 | |||
37 | /* | ||
38 | * ---------------------------------------------------------------------------- | ||
39 | * Register and offset definitions to be used in PM assembler code | ||
40 | * ---------------------------------------------------------------------------- | ||
41 | */ | ||
42 | #define CLKGEN_REG_ASM_BASE io_p2v(0xfffece00) | ||
43 | #define ARM_IDLECT1_ASM_OFFSET 0x04 | ||
44 | #define ARM_IDLECT2_ASM_OFFSET 0x08 | ||
45 | |||
46 | #define TCMIF_ASM_BASE io_p2v(0xfffecc00) | ||
47 | #define EMIFS_CONFIG_ASM_OFFSET 0x0c | ||
48 | #define EMIFF_SDRAM_CONFIG_ASM_OFFSET 0x20 | ||
49 | |||
50 | /* | ||
51 | * ---------------------------------------------------------------------------- | ||
52 | * Powermanagement bitmasks | ||
53 | * ---------------------------------------------------------------------------- | ||
54 | */ | ||
55 | #define IDLE_WAIT_CYCLES 0x00000fff | ||
56 | #define PERIPHERAL_ENABLE 0x2 | ||
57 | |||
58 | #define SELF_REFRESH_MODE 0x0c000001 | ||
59 | #define IDLE_EMIFS_REQUEST 0xc | ||
60 | #define MODEM_32K_EN 0x1 | ||
61 | #define PER_EN 0x1 | ||
62 | |||
63 | #define CPU_SUSPEND_SIZE 200 | ||
64 | #define ULPD_LOW_POWER_EN 0x0001 | ||
65 | |||
66 | #define DSP_IDLE_DELAY 10 | ||
67 | #define DSP_IDLE 0x0040 | ||
68 | #define DSP_RST 0x0004 | ||
69 | #define DSP_ENABLE 0x0002 | ||
70 | #define SUFFICIENT_DSP_RESET_TIME 1000 | ||
71 | #define DEFAULT_MPUI_CONFIG 0x05cf | ||
72 | #define ENABLE_XORCLK 0x2 | ||
73 | #define DSP_CLOCK_ENABLE 0x2000 | ||
74 | #define DSP_IDLE_MODE 0x2 | ||
75 | #define TC_IDLE_REQUEST (0x0000000c) | ||
76 | |||
77 | #define IRQ_LEVEL2 (1<<0) | ||
78 | #define IRQ_KEYBOARD (1<<1) | ||
79 | #define IRQ_UART2 (1<<15) | ||
80 | |||
81 | #define PDE_BIT 0x08 | ||
82 | #define PWD_EN_BIT 0x04 | ||
83 | #define EN_PERCK_BIT 0x04 | ||
84 | |||
85 | #define OMAP1510_DEEP_SLEEP_REQUEST 0x0ec7 | ||
86 | #define OMAP1510_BIG_SLEEP_REQUEST 0x0cc5 | ||
87 | #define OMAP1510_IDLE_LOOP_REQUEST 0x0c00 | ||
88 | #define OMAP1510_IDLE_CLOCK_DOMAINS 0x2 | ||
89 | #define OMAP1510_ULPD_LOW_POWER_REQ 0x0001 | ||
90 | |||
91 | #define OMAP1610_DEEP_SLEEP_REQUEST 0x17c7 | ||
92 | #define OMAP1610_BIG_SLEEP_REQUEST TBD | ||
93 | #define OMAP1610_IDLE_LOOP_REQUEST 0x0400 | ||
94 | #define OMAP1610_IDLE_CLOCK_DOMAINS 0x09c7 | ||
95 | #define OMAP1610_ULPD_LOW_POWER_REQ 0x3 | ||
96 | |||
97 | #ifndef OMAP1510_SRAM_IDLE_SUSPEND | ||
98 | #define OMAP1510_SRAM_IDLE_SUSPEND 0 | ||
99 | #endif | ||
100 | #ifndef OMAP1610_SRAM_IDLE_SUSPEND | ||
101 | #define OMAP1610_SRAM_IDLE_SUSPEND 0 | ||
102 | #endif | ||
103 | #ifndef OMAP5912_SRAM_IDLE_SUSPEND | ||
104 | #define OMAP5912_SRAM_IDLE_SUSPEND 0 | ||
105 | #endif | ||
106 | |||
107 | #ifndef OMAP1510_SRAM_API_SUSPEND | ||
108 | #define OMAP1510_SRAM_API_SUSPEND 0 | ||
109 | #endif | ||
110 | #ifndef OMAP1610_SRAM_API_SUSPEND | ||
111 | #define OMAP1610_SRAM_API_SUSPEND 0 | ||
112 | #endif | ||
113 | #ifndef OMAP5912_SRAM_API_SUSPEND | ||
114 | #define OMAP5912_SRAM_API_SUSPEND 0 | ||
115 | #endif | ||
116 | |||
117 | #if !defined(CONFIG_ARCH_OMAP1510) && \ | ||
118 | !defined(CONFIG_ARCH_OMAP16XX) | ||
119 | #error "Power management for this processor not implemented yet" | ||
120 | #endif | ||
121 | |||
122 | #ifndef __ASSEMBLER__ | ||
123 | extern void omap_pm_idle(void); | ||
124 | extern void omap_pm_suspend(void); | ||
125 | extern int omap1510_cpu_suspend(unsigned short, unsigned short); | ||
126 | extern int omap1610_cpu_suspend(unsigned short, unsigned short); | ||
127 | extern int omap1510_idle_loop_suspend(void); | ||
128 | extern int omap1610_idle_loop_suspend(void); | ||
129 | extern unsigned int omap1510_cpu_suspend_sz; | ||
130 | extern unsigned int omap1510_idle_loop_suspend_sz; | ||
131 | extern unsigned int omap1610_cpu_suspend_sz; | ||
132 | extern unsigned int omap1610_idle_loop_suspend_sz; | ||
133 | |||
134 | #define ARM_SAVE(x) arm_sleep_save[ARM_SLEEP_SAVE_##x] = omap_readl(x) | ||
135 | #define ARM_RESTORE(x) omap_writel((arm_sleep_save[ARM_SLEEP_SAVE_##x]), (x)) | ||
136 | #define ARM_SHOW(x) arm_sleep_save[ARM_SLEEP_SAVE_##x] | ||
137 | |||
138 | #define ULPD_SAVE(x) ulpd_sleep_save[ULPD_SLEEP_SAVE_##x] = omap_readw(x) | ||
139 | #define ULPD_RESTORE(x) omap_writew((ulpd_sleep_save[ULPD_SLEEP_SAVE_##x]), (x)) | ||
140 | #define ULPD_SHOW(x) ulpd_sleep_save[ULPD_SLEEP_SAVE_##x] | ||
141 | |||
142 | #define MPUI1510_SAVE(x) mpui1510_sleep_save[MPUI1510_SLEEP_SAVE_##x] = omap_readl(x) | ||
143 | #define MPUI1510_RESTORE(x) omap_writel((mpui1510_sleep_save[MPUI1510_SLEEP_SAVE_##x]), (x)) | ||
144 | #define MPUI1510_SHOW(x) mpui1510_sleep_save[MPUI1510_SLEEP_SAVE_##x] | ||
145 | |||
146 | #define MPUI1610_SAVE(x) mpui1610_sleep_save[MPUI1610_SLEEP_SAVE_##x] = omap_readl(x) | ||
147 | #define MPUI1610_RESTORE(x) omap_writel((mpui1610_sleep_save[MPUI1610_SLEEP_SAVE_##x]), (x)) | ||
148 | #define MPUI1610_SHOW(x) mpui1610_sleep_save[MPUI1610_SLEEP_SAVE_##x] | ||
149 | |||
150 | /* | ||
151 | * List of global OMAP registers to preserve. | ||
152 | * More ones like CP and general purpose register values are preserved | ||
153 | * with the stack pointer in sleep.S. | ||
154 | */ | ||
155 | |||
156 | enum arm_save_state { | ||
157 | ARM_SLEEP_SAVE_START = 0, | ||
158 | /* | ||
159 | * MPU control registers 32 bits | ||
160 | */ | ||
161 | ARM_SLEEP_SAVE_ARM_CKCTL, | ||
162 | ARM_SLEEP_SAVE_ARM_IDLECT1, | ||
163 | ARM_SLEEP_SAVE_ARM_IDLECT2, | ||
164 | ARM_SLEEP_SAVE_ARM_EWUPCT, | ||
165 | ARM_SLEEP_SAVE_ARM_RSTCT1, | ||
166 | ARM_SLEEP_SAVE_ARM_RSTCT2, | ||
167 | ARM_SLEEP_SAVE_ARM_SYSST, | ||
168 | ARM_SLEEP_SAVE_SIZE | ||
169 | }; | ||
170 | |||
171 | enum ulpd_save_state { | ||
172 | ULPD_SLEEP_SAVE_START = 0, | ||
173 | /* | ||
174 | * ULPD registers 16 bits | ||
175 | */ | ||
176 | ULPD_SLEEP_SAVE_ULPD_IT_STATUS, | ||
177 | ULPD_SLEEP_SAVE_ULPD_CLOCK_CTRL, | ||
178 | ULPD_SLEEP_SAVE_ULPD_SOFT_REQ, | ||
179 | ULPD_SLEEP_SAVE_ULPD_STATUS_REQ, | ||
180 | ULPD_SLEEP_SAVE_ULPD_DPLL_CTRL, | ||
181 | ULPD_SLEEP_SAVE_ULPD_POWER_CTRL, | ||
182 | ULPD_SLEEP_SAVE_SIZE | ||
183 | }; | ||
184 | |||
185 | enum mpui1510_save_state { | ||
186 | MPUI1510_SLEEP_SAVE_START = 0, | ||
187 | /* | ||
188 | * MPUI registers 32 bits | ||
189 | */ | ||
190 | MPUI1510_SLEEP_SAVE_MPUI_CTRL, | ||
191 | MPUI1510_SLEEP_SAVE_MPUI_DSP_BOOT_CONFIG, | ||
192 | MPUI1510_SLEEP_SAVE_MPUI_DSP_API_CONFIG, | ||
193 | MPUI1510_SLEEP_SAVE_MPUI_DSP_STATUS, | ||
194 | MPUI1510_SLEEP_SAVE_EMIFF_SDRAM_CONFIG, | ||
195 | MPUI1510_SLEEP_SAVE_EMIFS_CONFIG, | ||
196 | MPUI1510_SLEEP_SAVE_OMAP_IH1_MIR, | ||
197 | MPUI1510_SLEEP_SAVE_OMAP_IH2_MIR, | ||
198 | #if defined(CONFIG_ARCH_OMAP1510) | ||
199 | MPUI1510_SLEEP_SAVE_SIZE | ||
200 | #else | ||
201 | MPUI1510_SLEEP_SAVE_SIZE = 0 | ||
202 | #endif | ||
203 | }; | ||
204 | |||
205 | enum mpui1610_save_state { | ||
206 | MPUI1610_SLEEP_SAVE_START = 0, | ||
207 | /* | ||
208 | * MPUI registers 32 bits | ||
209 | */ | ||
210 | MPUI1610_SLEEP_SAVE_MPUI_CTRL, | ||
211 | MPUI1610_SLEEP_SAVE_MPUI_DSP_BOOT_CONFIG, | ||
212 | MPUI1610_SLEEP_SAVE_MPUI_DSP_API_CONFIG, | ||
213 | MPUI1610_SLEEP_SAVE_MPUI_DSP_STATUS, | ||
214 | MPUI1610_SLEEP_SAVE_EMIFF_SDRAM_CONFIG, | ||
215 | MPUI1610_SLEEP_SAVE_EMIFS_CONFIG, | ||
216 | MPUI1610_SLEEP_SAVE_OMAP_IH1_MIR, | ||
217 | MPUI1610_SLEEP_SAVE_OMAP_IH2_0_MIR, | ||
218 | MPUI1610_SLEEP_SAVE_OMAP_IH2_1_MIR, | ||
219 | MPUI1610_SLEEP_SAVE_OMAP_IH2_2_MIR, | ||
220 | MPUI1610_SLEEP_SAVE_OMAP_IH2_3_MIR, | ||
221 | #if defined(CONFIG_ARCH_OMAP16XX) | ||
222 | MPUI1610_SLEEP_SAVE_SIZE | ||
223 | #else | ||
224 | MPUI1610_SLEEP_SAVE_SIZE = 0 | ||
225 | #endif | ||
226 | }; | ||
227 | |||
228 | #endif /* ASSEMBLER */ | ||
229 | #endif /* __ASM_ARCH_OMAP_PM_H */ | ||
diff --git a/include/asm-arm/arch-omap/system.h b/include/asm-arm/arch-omap/system.h new file mode 100644 index 000000000000..17a2c4825f07 --- /dev/null +++ b/include/asm-arm/arch-omap/system.h | |||
@@ -0,0 +1,20 @@ | |||
1 | /* | ||
2 | * Copied from linux/include/asm-arm/arch-sa1100/system.h | ||
3 | * Copyright (c) 1999 Nicolas Pitre <nico@cam.org> | ||
4 | */ | ||
5 | #ifndef __ASM_ARCH_SYSTEM_H | ||
6 | #define __ASM_ARCH_SYSTEM_H | ||
7 | #include <linux/config.h> | ||
8 | #include <asm/arch/hardware.h> | ||
9 | |||
10 | static inline void arch_idle(void) | ||
11 | { | ||
12 | cpu_do_idle(); | ||
13 | } | ||
14 | |||
15 | static inline void arch_reset(char mode) | ||
16 | { | ||
17 | omap_writew(1, ARM_RSTCT1); | ||
18 | } | ||
19 | |||
20 | #endif | ||
diff --git a/include/asm-arm/arch-omap/tc.h b/include/asm-arm/arch-omap/tc.h new file mode 100644 index 000000000000..8ded218cbea5 --- /dev/null +++ b/include/asm-arm/arch-omap/tc.h | |||
@@ -0,0 +1,108 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-omap/tc.h | ||
3 | * | ||
4 | * OMAP Traffic Controller | ||
5 | * | ||
6 | * Copyright (C) 2004 Nokia Corporation | ||
7 | * Author: Imre Deak <imre.deak@nokia.com> | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or modify it | ||
10 | * under the terms of the GNU General Public License as published by the | ||
11 | * Free Software Foundation; either version 2 of the License, or (at your | ||
12 | * option) any later version. | ||
13 | * | ||
14 | * This program is distributed in the hope that it will be useful, but | ||
15 | * WITHOUT ANY WARRANTY; without even the implied warranty of | ||
16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
17 | * General Public License for more details. | ||
18 | * | ||
19 | * You should have received a copy of the GNU General Public License along | ||
20 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
21 | * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||
22 | */ | ||
23 | |||
24 | #ifndef __ASM_ARCH_TC_H | ||
25 | #define __ASM_ARCH_TC_H | ||
26 | |||
27 | #define TCMIF_BASE 0xfffecc00 | ||
28 | #define OMAP_TC_OCPT1_PRIOR (TCMIF_BASE + 0x00) | ||
29 | #define OMAP_TC_EMIFS_PRIOR (TCMIF_BASE + 0x04) | ||
30 | #define OMAP_TC_EMIFF_PRIOR (TCMIF_BASE + 0x08) | ||
31 | #define EMIFS_CONFIG (TCMIF_BASE + 0x0c) | ||
32 | #define EMIFS_CS0_CONFIG (TCMIF_BASE + 0x10) | ||
33 | #define EMIFS_CS1_CONFIG (TCMIF_BASE + 0x14) | ||
34 | #define EMIFS_CS2_CONFIG (TCMIF_BASE + 0x18) | ||
35 | #define EMIFS_CS3_CONFIG (TCMIF_BASE + 0x1c) | ||
36 | #define EMIFF_SDRAM_CONFIG (TCMIF_BASE + 0x20) | ||
37 | #define EMIFF_MRS (TCMIF_BASE + 0x24) | ||
38 | #define TC_TIMEOUT1 (TCMIF_BASE + 0x28) | ||
39 | #define TC_TIMEOUT2 (TCMIF_BASE + 0x2c) | ||
40 | #define TC_TIMEOUT3 (TCMIF_BASE + 0x30) | ||
41 | #define TC_ENDIANISM (TCMIF_BASE + 0x34) | ||
42 | #define EMIFF_SDRAM_CONFIG_2 (TCMIF_BASE + 0x3c) | ||
43 | #define EMIF_CFG_DYNAMIC_WS (TCMIF_BASE + 0x40) | ||
44 | #define EMIFS_ACS0 (TCMIF_BASE + 0x50) | ||
45 | #define EMIFS_ACS1 (TCMIF_BASE + 0x54) | ||
46 | #define EMIFS_ACS2 (TCMIF_BASE + 0x58) | ||
47 | #define EMIFS_ACS3 (TCMIF_BASE + 0x5c) | ||
48 | #define OMAP_TC_OCPT2_PRIOR (TCMIF_BASE + 0xd0) | ||
49 | |||
50 | /* external EMIFS chipselect regions */ | ||
51 | #define OMAP_CS0_PHYS 0x00000000 | ||
52 | #define OMAP_CS0_SIZE SZ_64M | ||
53 | |||
54 | #define OMAP_CS1_PHYS 0x04000000 | ||
55 | #define OMAP_CS1_SIZE SZ_64M | ||
56 | |||
57 | #define OMAP_CS1A_PHYS OMAP_CS1_PHYS | ||
58 | #define OMAP_CS1A_SIZE SZ_32M | ||
59 | |||
60 | #define OMAP_CS1B_PHYS (OMAP_CS1A_PHYS + OMAP_CS1A_SIZE) | ||
61 | #define OMAP_CS1B_SIZE SZ_32M | ||
62 | |||
63 | #define OMAP_CS2_PHYS 0x08000000 | ||
64 | #define OMAP_CS2_SIZE SZ_64M | ||
65 | |||
66 | #define OMAP_CS2A_PHYS OMAP_CS2_PHYS | ||
67 | #define OMAP_CS2A_SIZE SZ_32M | ||
68 | |||
69 | #define OMAP_CS2B_PHYS (OMAP_CS2A_PHYS + OMAP_CS2A_SIZE) | ||
70 | #define OMAP_CS2B_SIZE SZ_32M | ||
71 | |||
72 | #define OMAP_CS3_PHYS 0x0c000000 | ||
73 | #define OMAP_CS3_SIZE SZ_64M | ||
74 | |||
75 | #ifndef __ASSEMBLER__ | ||
76 | |||
77 | /* EMIF Slow Interface Configuration Register */ | ||
78 | #define OMAP_EMIFS_CONFIG_REG __REG32(EMIFS_CONFIG) | ||
79 | |||
80 | #define OMAP_EMIFS_CONFIG_FR (1 << 4) | ||
81 | #define OMAP_EMIFS_CONFIG_PDE (1 << 3) | ||
82 | #define OMAP_EMIFS_CONFIG_PWD_EN (1 << 2) | ||
83 | #define OMAP_EMIFS_CONFIG_BM (1 << 1) | ||
84 | #define OMAP_EMIFS_CONFIG_WP (1 << 0) | ||
85 | |||
86 | #define EMIFS_CCS(n) __REG32(EMIFS_CS0_CONFIG + (4 * (n))) | ||
87 | #define EMIFS_ACS(n) __REG32(EMIFS_ACS0 + (4 * (n))) | ||
88 | |||
89 | /* Almost all documentation for chip and board memory maps assumes | ||
90 | * BM is clear. Most devel boards have a switch to control booting | ||
91 | * from NOR flash (using external chipselect 3) rather than mask ROM, | ||
92 | * which uses BM to interchange the physical CS0 and CS3 addresses. | ||
93 | */ | ||
94 | static inline u32 omap_cs0_phys(void) | ||
95 | { | ||
96 | return (OMAP_EMIFS_CONFIG_REG & OMAP_EMIFS_CONFIG_BM) | ||
97 | ? OMAP_CS3_PHYS : 0; | ||
98 | } | ||
99 | |||
100 | static inline u32 omap_cs3_phys(void) | ||
101 | { | ||
102 | return (OMAP_EMIFS_CONFIG_REG & OMAP_EMIFS_CONFIG_BM) | ||
103 | ? 0 : OMAP_CS3_PHYS; | ||
104 | } | ||
105 | |||
106 | #endif /* __ASSEMBLER__ */ | ||
107 | |||
108 | #endif /* __ASM_ARCH_TC_H */ | ||
diff --git a/include/asm-arm/arch-omap/timex.h b/include/asm-arm/arch-omap/timex.h new file mode 100644 index 000000000000..b61ddb491e83 --- /dev/null +++ b/include/asm-arm/arch-omap/timex.h | |||
@@ -0,0 +1,33 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-omap/timex.h | ||
3 | * | ||
4 | * Copyright (C) 2000 RidgeRun, Inc. | ||
5 | * Author: Greg Lonnon <glonnon@ridgerun.com> | ||
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 as published by the | ||
9 | * Free Software Foundation; either version 2 of the License, or (at your | ||
10 | * option) any later version. | ||
11 | * | ||
12 | * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED | ||
13 | * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | ||
14 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN | ||
15 | * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, | ||
16 | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
17 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | ||
18 | * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||
19 | * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
20 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | ||
21 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
22 | * | ||
23 | * You should have received a copy of the GNU General Public License along | ||
24 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
25 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
26 | */ | ||
27 | |||
28 | #if !defined(__ASM_ARCH_OMAP_TIMEX_H) | ||
29 | #define __ASM_ARCH_OMAP_TIMEX_H | ||
30 | |||
31 | #define CLOCK_TICK_RATE (HZ * 100000UL) | ||
32 | |||
33 | #endif /* __ASM_ARCH_OMAP_TIMEX_H */ | ||
diff --git a/include/asm-arm/arch-omap/tps65010.h b/include/asm-arm/arch-omap/tps65010.h new file mode 100644 index 000000000000..0f97bb2e8fce --- /dev/null +++ b/include/asm-arm/arch-omap/tps65010.h | |||
@@ -0,0 +1,80 @@ | |||
1 | /* linux/include/asm-arm/arch-omap/tps65010.h | ||
2 | * | ||
3 | * Functions to access TPS65010 power management device. | ||
4 | * | ||
5 | * Copyright (C) 2004 Dirk Behme <dirk.behme@de.bosch.com> | ||
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 as published by the | ||
9 | * Free Software Foundation; either version 2 of the License, or (at your | ||
10 | * option) any later version. | ||
11 | * | ||
12 | * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED | ||
13 | * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | ||
14 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN | ||
15 | * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, | ||
16 | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
17 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | ||
18 | * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||
19 | * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
20 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | ||
21 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
22 | * | ||
23 | * You should have received a copy of the GNU General Public License along | ||
24 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
25 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
26 | */ | ||
27 | |||
28 | #ifndef __ASM_ARCH_TPS65010_H | ||
29 | #define __ASM_ARCH_TPS65010_H | ||
30 | |||
31 | /* | ||
32 | * ---------------------------------------------------------------------------- | ||
33 | * Macros used by exported functions | ||
34 | * ---------------------------------------------------------------------------- | ||
35 | */ | ||
36 | |||
37 | #define LED1 1 | ||
38 | #define LED2 2 | ||
39 | #define OFF 0 | ||
40 | #define ON 1 | ||
41 | #define BLINK 2 | ||
42 | #define GPIO1 1 | ||
43 | #define GPIO2 2 | ||
44 | #define GPIO3 3 | ||
45 | #define GPIO4 4 | ||
46 | #define LOW 0 | ||
47 | #define HIGH 1 | ||
48 | |||
49 | /* | ||
50 | * ---------------------------------------------------------------------------- | ||
51 | * Exported functions | ||
52 | * ---------------------------------------------------------------------------- | ||
53 | */ | ||
54 | |||
55 | /* Draw from VBUS: | ||
56 | * 0 mA -- DON'T DRAW (might supply power instead) | ||
57 | * 100 mA -- usb unit load (slowest charge rate) | ||
58 | * 500 mA -- usb high power (fast battery charge) | ||
59 | */ | ||
60 | extern int tps65010_set_vbus_draw(unsigned mA); | ||
61 | |||
62 | /* tps65010_set_gpio_out_value parameter: | ||
63 | * gpio: GPIO1, GPIO2, GPIO3 or GPIO4 | ||
64 | * value: LOW or HIGH | ||
65 | */ | ||
66 | extern int tps65010_set_gpio_out_value(unsigned gpio, unsigned value); | ||
67 | |||
68 | /* tps65010_set_led parameter: | ||
69 | * led: LED1 or LED2 | ||
70 | * mode: ON, OFF or BLINK | ||
71 | */ | ||
72 | extern int tps65010_set_led(unsigned led, unsigned mode); | ||
73 | |||
74 | /* tps65010_set_low_pwr parameter: | ||
75 | * mode: ON or OFF | ||
76 | */ | ||
77 | extern int tps65010_set_low_pwr(unsigned mode); | ||
78 | |||
79 | #endif /* __ASM_ARCH_TPS65010_H */ | ||
80 | |||
diff --git a/include/asm-arm/arch-omap/uncompress.h b/include/asm-arm/arch-omap/uncompress.h new file mode 100644 index 000000000000..3e640aba8c20 --- /dev/null +++ b/include/asm-arm/arch-omap/uncompress.h | |||
@@ -0,0 +1,82 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-omap/uncompress.h | ||
3 | * | ||
4 | * Serial port stubs for kernel decompress status messages | ||
5 | * | ||
6 | * Initially based on: | ||
7 | * linux-2.4.15-rmk1-dsplinux1.6/include/asm-arm/arch-omap1510/uncompress.h | ||
8 | * Copyright (C) 2000 RidgeRun, Inc. | ||
9 | * Author: Greg Lonnon <glonnon@ridgerun.com> | ||
10 | * | ||
11 | * Rewritten by: | ||
12 | * Author: <source@mvista.com> | ||
13 | * 2004 (c) MontaVista Software, Inc. | ||
14 | * | ||
15 | * This file is licensed under the terms of the GNU General Public License | ||
16 | * version 2. This program is licensed "as is" without any warranty of any | ||
17 | * kind, whether express or implied. | ||
18 | */ | ||
19 | |||
20 | #include <linux/config.h> | ||
21 | #include <linux/types.h> | ||
22 | #include <linux/serial_reg.h> | ||
23 | #include <asm/arch/hardware.h> | ||
24 | |||
25 | unsigned int system_rev; | ||
26 | |||
27 | #define UART_OMAP_MDR1 0x08 /* mode definition register */ | ||
28 | #define OMAP_ID_730 0x355F | ||
29 | #define ID_MASK 0x7fff | ||
30 | #define check_port(base, shift) ((base[UART_OMAP_MDR1 << shift] & 7) == 0) | ||
31 | #define omap_get_id() ((*(volatile unsigned int *)(0xfffed404)) >> 12) & ID_MASK | ||
32 | |||
33 | static void | ||
34 | putstr(const char *s) | ||
35 | { | ||
36 | volatile u8 * uart = 0; | ||
37 | int shift; | ||
38 | |||
39 | #ifdef CONFIG_OMAP_LL_DEBUG_UART3 | ||
40 | uart = (volatile u8 *)(OMAP_UART3_BASE); | ||
41 | #elif CONFIG_OMAP_LL_DEBUG_UART2 | ||
42 | uart = (volatile u8 *)(OMAP_UART2_BASE); | ||
43 | #else | ||
44 | uart = (volatile u8 *)(OMAP_UART1_BASE); | ||
45 | #endif | ||
46 | |||
47 | /* Determine which serial port to use */ | ||
48 | do { | ||
49 | /* MMU is not on, so cpu_is_omapXXXX() won't work here */ | ||
50 | unsigned int omap_id = omap_get_id(); | ||
51 | |||
52 | if (omap_id == OMAP_ID_730) | ||
53 | shift = 0; | ||
54 | else | ||
55 | shift = 2; | ||
56 | |||
57 | if (check_port(uart, shift)) | ||
58 | break; | ||
59 | /* Silent boot if no serial ports are enabled. */ | ||
60 | return; | ||
61 | } while (0); | ||
62 | |||
63 | /* | ||
64 | * Now, xmit each character | ||
65 | */ | ||
66 | while (*s) { | ||
67 | while (!(uart[UART_LSR << shift] & UART_LSR_THRE)) | ||
68 | barrier(); | ||
69 | uart[UART_TX << shift] = *s; | ||
70 | if (*s++ == '\n') { | ||
71 | while (!(uart[UART_LSR << shift] & UART_LSR_THRE)) | ||
72 | barrier(); | ||
73 | uart[UART_TX << shift] = '\r'; | ||
74 | } | ||
75 | } | ||
76 | } | ||
77 | |||
78 | /* | ||
79 | * nothing to do | ||
80 | */ | ||
81 | #define arch_decomp_setup() | ||
82 | #define arch_decomp_wdog() | ||
diff --git a/include/asm-arm/arch-omap/usb.h b/include/asm-arm/arch-omap/usb.h new file mode 100644 index 000000000000..1438c6cef0ca --- /dev/null +++ b/include/asm-arm/arch-omap/usb.h | |||
@@ -0,0 +1,108 @@ | |||
1 | // include/asm-arm/mach-omap/usb.h | ||
2 | |||
3 | #ifndef __ASM_ARCH_OMAP_USB_H | ||
4 | #define __ASM_ARCH_OMAP_USB_H | ||
5 | |||
6 | #include <asm/arch/board.h> | ||
7 | |||
8 | /*-------------------------------------------------------------------------*/ | ||
9 | |||
10 | #define OTG_BASE 0xfffb0400 | ||
11 | #define UDC_BASE 0xfffb4000 | ||
12 | #define OMAP_OHCI_BASE 0xfffba000 | ||
13 | |||
14 | /*-------------------------------------------------------------------------*/ | ||
15 | |||
16 | /* | ||
17 | * OTG and transceiver registers, for OMAPs starting with ARM926 | ||
18 | */ | ||
19 | #define OTG_REG32(offset) __REG32(OTG_BASE + (offset)) | ||
20 | #define OTG_REG16(offset) __REG16(OTG_BASE + (offset)) | ||
21 | |||
22 | #define OTG_REV_REG OTG_REG32(0x00) | ||
23 | #define OTG_SYSCON_1_REG OTG_REG32(0x04) | ||
24 | # define USB2_TRX_MODE(w) (((w)>>24)&0x07) | ||
25 | # define USB1_TRX_MODE(w) (((w)>>20)&0x07) | ||
26 | # define USB0_TRX_MODE(w) (((w)>>16)&0x07) | ||
27 | # define OTG_IDLE_EN (1 << 15) | ||
28 | # define HST_IDLE_EN (1 << 14) | ||
29 | # define DEV_IDLE_EN (1 << 13) | ||
30 | # define OTG_RESET_DONE (1 << 2) | ||
31 | #define OTG_SYSCON_2_REG OTG_REG32(0x08) | ||
32 | # define OTG_EN (1 << 31) | ||
33 | # define USBX_SYNCHRO (1 << 30) | ||
34 | # define OTG_MST16 (1 << 29) | ||
35 | # define SRP_GPDATA (1 << 28) | ||
36 | # define SRP_GPDVBUS (1 << 27) | ||
37 | # define SRP_GPUVBUS(w) (((w)>>24)&0x07) | ||
38 | # define A_WAIT_VRISE(w) (((w)>>20)&0x07) | ||
39 | # define B_ASE_BRST(w) (((w)>>16)&0x07) | ||
40 | # define SRP_DPW (1 << 14) | ||
41 | # define SRP_DATA (1 << 13) | ||
42 | # define SRP_VBUS (1 << 12) | ||
43 | # define OTG_PADEN (1 << 10) | ||
44 | # define HMC_PADEN (1 << 9) | ||
45 | # define UHOST_EN (1 << 8) | ||
46 | # define HMC_TLLSPEED (1 << 7) | ||
47 | # define HMC_TLLATTACH (1 << 6) | ||
48 | # define OTG_HMC(w) (((w)>>0)&0x3f) | ||
49 | #define OTG_CTRL_REG OTG_REG32(0x0c) | ||
50 | # define OTG_ASESSVLD (1 << 20) | ||
51 | # define OTG_BSESSEND (1 << 19) | ||
52 | # define OTG_BSESSVLD (1 << 18) | ||
53 | # define OTG_VBUSVLD (1 << 17) | ||
54 | # define OTG_ID (1 << 16) | ||
55 | # define OTG_DRIVER_SEL (1 << 15) | ||
56 | # define OTG_A_SETB_HNPEN (1 << 12) | ||
57 | # define OTG_A_BUSREQ (1 << 11) | ||
58 | # define OTG_B_HNPEN (1 << 9) | ||
59 | # define OTG_B_BUSREQ (1 << 8) | ||
60 | # define OTG_BUSDROP (1 << 7) | ||
61 | # define OTG_PULLDOWN (1 << 5) | ||
62 | # define OTG_PULLUP (1 << 4) | ||
63 | # define OTG_DRV_VBUS (1 << 3) | ||
64 | # define OTG_PD_VBUS (1 << 2) | ||
65 | # define OTG_PU_VBUS (1 << 1) | ||
66 | # define OTG_PU_ID (1 << 0) | ||
67 | #define OTG_IRQ_EN_REG OTG_REG16(0x10) | ||
68 | # define DRIVER_SWITCH (1 << 15) | ||
69 | # define A_VBUS_ERR (1 << 13) | ||
70 | # define A_REQ_TMROUT (1 << 12) | ||
71 | # define A_SRP_DETECT (1 << 11) | ||
72 | # define B_HNP_FAIL (1 << 10) | ||
73 | # define B_SRP_TMROUT (1 << 9) | ||
74 | # define B_SRP_DONE (1 << 8) | ||
75 | # define B_SRP_STARTED (1 << 7) | ||
76 | # define OPRT_CHG (1 << 0) | ||
77 | #define OTG_IRQ_SRC_REG OTG_REG16(0x14) | ||
78 | // same bits as in IRQ_EN | ||
79 | #define OTG_OUTCTRL_REG OTG_REG16(0x18) | ||
80 | # define OTGVPD (1 << 14) | ||
81 | # define OTGVPU (1 << 13) | ||
82 | # define OTGPUID (1 << 12) | ||
83 | # define USB2VDR (1 << 10) | ||
84 | # define USB2PDEN (1 << 9) | ||
85 | # define USB2PUEN (1 << 8) | ||
86 | # define USB1VDR (1 << 6) | ||
87 | # define USB1PDEN (1 << 5) | ||
88 | # define USB1PUEN (1 << 4) | ||
89 | # define USB0VDR (1 << 2) | ||
90 | # define USB0PDEN (1 << 1) | ||
91 | # define USB0PUEN (1 << 0) | ||
92 | #define OTG_TEST_REG OTG_REG16(0x20) | ||
93 | #define OTG_VENDOR_CODE_REG OTG_REG32(0xfc) | ||
94 | |||
95 | /*-------------------------------------------------------------------------*/ | ||
96 | |||
97 | #define USB_TRANSCEIVER_CTRL_REG __REG32(0xfffe1000 + 0x0064) | ||
98 | # define CONF_USB2_UNI_R (1 << 8) | ||
99 | # define CONF_USB1_UNI_R (1 << 7) | ||
100 | # define CONF_USB_PORT0_R(x) (((x)>>4)&0x7) | ||
101 | # define CONF_USB0_ISOLATE_R (1 << 3) | ||
102 | # define CONF_USB_PWRDN_DM_R (1 << 2) | ||
103 | # define CONF_USB_PWRDN_DP_R (1 << 1) | ||
104 | |||
105 | |||
106 | |||
107 | |||
108 | #endif /* __ASM_ARCH_OMAP_USB_H */ | ||
diff --git a/include/asm-arm/arch-omap/vmalloc.h b/include/asm-arm/arch-omap/vmalloc.h new file mode 100644 index 000000000000..c6a83581a2fc --- /dev/null +++ b/include/asm-arm/arch-omap/vmalloc.h | |||
@@ -0,0 +1,33 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-omap/vmalloc.h | ||
3 | * | ||
4 | * Copyright (C) 2000 Russell King. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | * GNU General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License | ||
17 | * along with this program; if not, write to the Free Software | ||
18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
19 | */ | ||
20 | |||
21 | /* | ||
22 | * Just any arbitrary offset to the start of the vmalloc VM area: the | ||
23 | * current 8MB value just means that there will be a 8MB "hole" after the | ||
24 | * physical memory until the kernel virtual memory starts. That means that | ||
25 | * any out-of-bounds memory accesses will hopefully be caught. | ||
26 | * The vmalloc() routines leaves a hole of 4kB between each vmalloced | ||
27 | * area for the same reason. ;) | ||
28 | */ | ||
29 | #define VMALLOC_OFFSET (8*1024*1024) | ||
30 | #define VMALLOC_START (((unsigned long)high_memory + VMALLOC_OFFSET) & ~(VMALLOC_OFFSET-1)) | ||
31 | #define VMALLOC_VMADDR(x) ((unsigned long)(x)) | ||
32 | #define VMALLOC_END (PAGE_OFFSET + 0x10000000) | ||
33 | |||
diff --git a/include/asm-arm/arch-pxa/audio.h b/include/asm-arm/arch-pxa/audio.h new file mode 100644 index 000000000000..60976f830e3f --- /dev/null +++ b/include/asm-arm/arch-pxa/audio.h | |||
@@ -0,0 +1,16 @@ | |||
1 | #ifndef __ASM_ARCH_AUDIO_H__ | ||
2 | #define __ASM_ARCH_AUDIO_H__ | ||
3 | |||
4 | #include <sound/driver.h> | ||
5 | #include <sound/core.h> | ||
6 | #include <sound/pcm.h> | ||
7 | |||
8 | typedef struct { | ||
9 | int (*startup)(snd_pcm_substream_t *, void *); | ||
10 | void (*shutdown)(snd_pcm_substream_t *, void *); | ||
11 | void (*suspend)(void *); | ||
12 | void (*resume)(void *); | ||
13 | void *priv; | ||
14 | } pxa2xx_audio_ops_t; | ||
15 | |||
16 | #endif | ||
diff --git a/include/asm-arm/arch-pxa/bitfield.h b/include/asm-arm/arch-pxa/bitfield.h new file mode 100644 index 000000000000..f1f0e3387d9c --- /dev/null +++ b/include/asm-arm/arch-pxa/bitfield.h | |||
@@ -0,0 +1,113 @@ | |||
1 | /* | ||
2 | * FILE bitfield.h | ||
3 | * | ||
4 | * Version 1.1 | ||
5 | * Author Copyright (c) Marc A. Viredaz, 1998 | ||
6 | * DEC Western Research Laboratory, Palo Alto, CA | ||
7 | * Date April 1998 (April 1997) | ||
8 | * System Advanced RISC Machine (ARM) | ||
9 | * Language C or ARM Assembly | ||
10 | * Purpose Definition of macros to operate on bit fields. | ||
11 | */ | ||
12 | |||
13 | |||
14 | |||
15 | #ifndef __BITFIELD_H | ||
16 | #define __BITFIELD_H | ||
17 | |||
18 | #ifndef __ASSEMBLY__ | ||
19 | #define UData(Data) ((unsigned long) (Data)) | ||
20 | #else | ||
21 | #define UData(Data) (Data) | ||
22 | #endif | ||
23 | |||
24 | |||
25 | /* | ||
26 | * MACRO: Fld | ||
27 | * | ||
28 | * Purpose | ||
29 | * The macro "Fld" encodes a bit field, given its size and its shift value | ||
30 | * with respect to bit 0. | ||
31 | * | ||
32 | * Note | ||
33 | * A more intuitive way to encode bit fields would have been to use their | ||
34 | * mask. However, extracting size and shift value information from a bit | ||
35 | * field's mask is cumbersome and might break the assembler (255-character | ||
36 | * line-size limit). | ||
37 | * | ||
38 | * Input | ||
39 | * Size Size of the bit field, in number of bits. | ||
40 | * Shft Shift value of the bit field with respect to bit 0. | ||
41 | * | ||
42 | * Output | ||
43 | * Fld Encoded bit field. | ||
44 | */ | ||
45 | |||
46 | #define Fld(Size, Shft) (((Size) << 16) + (Shft)) | ||
47 | |||
48 | |||
49 | /* | ||
50 | * MACROS: FSize, FShft, FMsk, FAlnMsk, F1stBit | ||
51 | * | ||
52 | * Purpose | ||
53 | * The macros "FSize", "FShft", "FMsk", "FAlnMsk", and "F1stBit" return | ||
54 | * the size, shift value, mask, aligned mask, and first bit of a | ||
55 | * bit field. | ||
56 | * | ||
57 | * Input | ||
58 | * Field Encoded bit field (using the macro "Fld"). | ||
59 | * | ||
60 | * Output | ||
61 | * FSize Size of the bit field, in number of bits. | ||
62 | * FShft Shift value of the bit field with respect to bit 0. | ||
63 | * FMsk Mask for the bit field. | ||
64 | * FAlnMsk Mask for the bit field, aligned on bit 0. | ||
65 | * F1stBit First bit of the bit field. | ||
66 | */ | ||
67 | |||
68 | #define FSize(Field) ((Field) >> 16) | ||
69 | #define FShft(Field) ((Field) & 0x0000FFFF) | ||
70 | #define FMsk(Field) (((UData (1) << FSize (Field)) - 1) << FShft (Field)) | ||
71 | #define FAlnMsk(Field) ((UData (1) << FSize (Field)) - 1) | ||
72 | #define F1stBit(Field) (UData (1) << FShft (Field)) | ||
73 | |||
74 | |||
75 | /* | ||
76 | * MACRO: FInsrt | ||
77 | * | ||
78 | * Purpose | ||
79 | * The macro "FInsrt" inserts a value into a bit field by shifting the | ||
80 | * former appropriately. | ||
81 | * | ||
82 | * Input | ||
83 | * Value Bit-field value. | ||
84 | * Field Encoded bit field (using the macro "Fld"). | ||
85 | * | ||
86 | * Output | ||
87 | * FInsrt Bit-field value positioned appropriately. | ||
88 | */ | ||
89 | |||
90 | #define FInsrt(Value, Field) \ | ||
91 | (UData (Value) << FShft (Field)) | ||
92 | |||
93 | |||
94 | /* | ||
95 | * MACRO: FExtr | ||
96 | * | ||
97 | * Purpose | ||
98 | * The macro "FExtr" extracts the value of a bit field by masking and | ||
99 | * shifting it appropriately. | ||
100 | * | ||
101 | * Input | ||
102 | * Data Data containing the bit-field to be extracted. | ||
103 | * Field Encoded bit field (using the macro "Fld"). | ||
104 | * | ||
105 | * Output | ||
106 | * FExtr Bit-field value. | ||
107 | */ | ||
108 | |||
109 | #define FExtr(Data, Field) \ | ||
110 | ((UData (Data) >> FShft (Field)) & FAlnMsk (Field)) | ||
111 | |||
112 | |||
113 | #endif /* __BITFIELD_H */ | ||
diff --git a/include/asm-arm/arch-pxa/corgi.h b/include/asm-arm/arch-pxa/corgi.h new file mode 100644 index 000000000000..324db06b5dd4 --- /dev/null +++ b/include/asm-arm/arch-pxa/corgi.h | |||
@@ -0,0 +1,120 @@ | |||
1 | /* | ||
2 | * Hardware specific definitions for SL-C7xx series of PDAs | ||
3 | * | ||
4 | * Copyright (c) 2004-2005 Richard Purdie | ||
5 | * | ||
6 | * Based on Sharp's 2.4 kernel patches | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | * | ||
12 | */ | ||
13 | #ifndef __ASM_ARCH_CORGI_H | ||
14 | #define __ASM_ARCH_CORGI_H 1 | ||
15 | |||
16 | |||
17 | /* | ||
18 | * Corgi (Non Standard) GPIO Definitions | ||
19 | */ | ||
20 | #define CORGI_GPIO_KEY_INT (0) /* Keyboard Interrupt */ | ||
21 | #define CORGI_GPIO_AC_IN (1) /* Charger Detection */ | ||
22 | #define CORGI_GPIO_WAKEUP (3) /* System wakeup notification? */ | ||
23 | #define CORGI_GPIO_AK_INT (4) /* Headphone Jack Control Interrupt */ | ||
24 | #define CORGI_GPIO_TP_INT (5) /* Touch Panel Interrupt */ | ||
25 | #define CORGI_GPIO_nSD_WP (7) /* SD Write Protect? */ | ||
26 | #define CORGI_GPIO_nSD_DETECT (9) /* MMC/SD Card Detect */ | ||
27 | #define CORGI_GPIO_nSD_INT (10) /* SD Interrupt for SDIO? */ | ||
28 | #define CORGI_GPIO_MAIN_BAT_LOW (11) /* Main Battery Low Notification */ | ||
29 | #define CORGI_GPIO_BAT_COVER (11) /* Battery Cover Detect */ | ||
30 | #define CORGI_GPIO_LED_ORANGE (13) /* Orange LED Control */ | ||
31 | #define CORGI_GPIO_CF_CD (14) /* Compact Flash Card Detect */ | ||
32 | #define CORGI_GPIO_CHRG_FULL (16) /* Charging Complete Notification */ | ||
33 | #define CORGI_GPIO_CF_IRQ (17) /* Compact Flash Interrupt */ | ||
34 | #define CORGI_GPIO_LCDCON_CS (19) /* LCD Control Chip Select */ | ||
35 | #define CORGI_GPIO_MAX1111_CS (20) /* MAX1111 Chip Select */ | ||
36 | #define CORGI_GPIO_ADC_TEMP_ON (21) /* Select battery voltage or temperature */ | ||
37 | #define CORGI_GPIO_IR_ON (22) /* Enable IR Transciever */ | ||
38 | #define CORGI_GPIO_ADS7846_CS (24) /* ADS7846 Chip Select */ | ||
39 | #define CORGI_GPIO_SD_PWR (33) /* MMC/SD Power */ | ||
40 | #define CORGI_GPIO_CHRG_ON (38) /* Enable battery Charging */ | ||
41 | #define CORGI_GPIO_DISCHARGE_ON (42) /* Enable battery Discharge */ | ||
42 | #define CORGI_GPIO_CHRG_UKN (43) /* Unknown Charging (Bypass Control?) */ | ||
43 | #define CORGI_GPIO_HSYNC (44) /* LCD HSync Pulse */ | ||
44 | #define CORGI_GPIO_USB_PULLUP (45) /* USB show presence to host */ | ||
45 | |||
46 | |||
47 | /* | ||
48 | * Corgi Keyboard Definitions | ||
49 | */ | ||
50 | #define CORGI_KEY_STROBE_NUM (12) | ||
51 | #define CORGI_KEY_SENSE_NUM (8) | ||
52 | #define CORGI_GPIO_ALL_STROBE_BIT (0x00003ffc) | ||
53 | #define CORGI_GPIO_HIGH_SENSE_BIT (0xfc000000) | ||
54 | #define CORGI_GPIO_HIGH_SENSE_RSHIFT (26) | ||
55 | #define CORGI_GPIO_LOW_SENSE_BIT (0x00000003) | ||
56 | #define CORGI_GPIO_LOW_SENSE_LSHIFT (6) | ||
57 | #define CORGI_GPIO_STROBE_BIT(a) GPIO_bit(66+(a)) | ||
58 | #define CORGI_GPIO_SENSE_BIT(a) GPIO_bit(58+(a)) | ||
59 | #define CORGI_GAFR_ALL_STROBE_BIT (0x0ffffff0) | ||
60 | #define CORGI_GAFR_HIGH_SENSE_BIT (0xfff00000) | ||
61 | #define CORGI_GAFR_LOW_SENSE_BIT (0x0000000f) | ||
62 | #define CORGI_GPIO_KEY_SENSE(a) (58+(a)) | ||
63 | #define CORGI_GPIO_KEY_STROBE(a) (66+(a)) | ||
64 | |||
65 | |||
66 | /* | ||
67 | * Corgi Interrupts | ||
68 | */ | ||
69 | #define CORGI_IRQ_GPIO_KEY_INT IRQ_GPIO(0) | ||
70 | #define CORGI_IRQ_GPIO_AC_IN IRQ_GPIO(1) | ||
71 | #define CORGI_IRQ_GPIO_WAKEUP IRQ_GPIO(3) | ||
72 | #define CORGI_IRQ_GPIO_AK_INT IRQ_GPIO(4) | ||
73 | #define CORGI_IRQ_GPIO_TP_INT IRQ_GPIO(5) | ||
74 | #define CORGI_IRQ_GPIO_nSD_DETECT IRQ_GPIO(9) | ||
75 | #define CORGI_IRQ_GPIO_nSD_INT IRQ_GPIO(10) | ||
76 | #define CORGI_IRQ_GPIO_MAIN_BAT_LOW IRQ_GPIO(11) | ||
77 | #define CORGI_IRQ_GPIO_CF_CD IRQ_GPIO(14) | ||
78 | #define CORGI_IRQ_GPIO_CHRG_FULL IRQ_GPIO(16) /* Battery fully charged */ | ||
79 | #define CORGI_IRQ_GPIO_CF_IRQ IRQ_GPIO(17) | ||
80 | #define CORGI_IRQ_GPIO_KEY_SENSE(a) IRQ_GPIO(58+(a)) /* Keyboard Sense lines */ | ||
81 | |||
82 | |||
83 | /* | ||
84 | * Corgi SCOOP GPIOs and Config | ||
85 | */ | ||
86 | #define CORGI_SCP_LED_GREEN SCOOP_GPCR_PA11 | ||
87 | #define CORGI_SCP_SWA SCOOP_GPCR_PA12 /* Hinge Switch A */ | ||
88 | #define CORGI_SCP_SWB SCOOP_GPCR_PA13 /* Hinge Switch B */ | ||
89 | #define CORGI_SCP_MUTE_L SCOOP_GPCR_PA14 | ||
90 | #define CORGI_SCP_MUTE_R SCOOP_GPCR_PA15 | ||
91 | #define CORGI_SCP_AKIN_PULLUP SCOOP_GPCR_PA16 | ||
92 | #define CORGI_SCP_APM_ON SCOOP_GPCR_PA17 | ||
93 | #define CORGI_SCP_BACKLIGHT_CONT SCOOP_GPCR_PA18 | ||
94 | #define CORGI_SCP_MIC_BIAS SCOOP_GPCR_PA19 | ||
95 | |||
96 | #define CORGI_SCOOP_IO_DIR ( CORGI_SCP_LED_GREEN | CORGI_SCP_MUTE_L | CORGI_SCP_MUTE_R | \ | ||
97 | CORGI_SCP_AKIN_PULLUP | CORGI_SCP_APM_ON | CORGI_SCP_BACKLIGHT_CONT | \ | ||
98 | CORGI_SCP_MIC_BIAS ) | ||
99 | #define CORGI_SCOOP_IO_OUT ( CORGI_SCP_MUTE_L | CORGI_SCP_MUTE_R ) | ||
100 | |||
101 | |||
102 | /* | ||
103 | * Shared data structures | ||
104 | */ | ||
105 | extern struct platform_device corgiscoop_device; | ||
106 | |||
107 | /* | ||
108 | * External Functions | ||
109 | */ | ||
110 | extern unsigned long corgi_ssp_ads7846_putget(unsigned long); | ||
111 | extern unsigned long corgi_ssp_ads7846_get(void); | ||
112 | extern void corgi_ssp_ads7846_put(ulong data); | ||
113 | extern void corgi_ssp_ads7846_lock(void); | ||
114 | extern void corgi_ssp_ads7846_unlock(void); | ||
115 | extern void corgi_ssp_lcdtg_send (u8 adrs, u8 data); | ||
116 | extern void corgi_ssp_blduty_set(int duty); | ||
117 | extern int corgi_ssp_max1111_get(ulong data); | ||
118 | |||
119 | #endif /* __ASM_ARCH_CORGI_H */ | ||
120 | |||
diff --git a/include/asm-arm/arch-pxa/debug-macro.S b/include/asm-arm/arch-pxa/debug-macro.S new file mode 100644 index 000000000000..f288e74b67c2 --- /dev/null +++ b/include/asm-arm/arch-pxa/debug-macro.S | |||
@@ -0,0 +1,36 @@ | |||
1 | /* linux/include/asm-arm/arch-pxa/debug-macro.S | ||
2 | * | ||
3 | * Debugging macro include header | ||
4 | * | ||
5 | * Copyright (C) 1994-1999 Russell King | ||
6 | * Moved from linux/arch/arm/kernel/debug.S by Ben Dooks | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | * | ||
12 | */ | ||
13 | |||
14 | .macro addruart,rx | ||
15 | mrc p15, 0, \rx, c1, c0 | ||
16 | tst \rx, #1 @ MMU enabled? | ||
17 | moveq \rx, #0x40000000 @ physical | ||
18 | movne \rx, #io_p2v(0x40000000) @ virtual | ||
19 | orr \rx, \rx, #0x00100000 | ||
20 | .endm | ||
21 | |||
22 | .macro senduart,rd,rx | ||
23 | str \rd, [\rx, #0] | ||
24 | .endm | ||
25 | |||
26 | .macro busyuart,rd,rx | ||
27 | 1002: ldr \rd, [\rx, #0x14] | ||
28 | tst \rd, #(1 << 6) | ||
29 | beq 1002b | ||
30 | .endm | ||
31 | |||
32 | .macro waituart,rd,rx | ||
33 | 1001: ldr \rd, [\rx, #0x14] | ||
34 | tst \rd, #(1 << 5) | ||
35 | beq 1001b | ||
36 | .endm | ||
diff --git a/include/asm-arm/arch-pxa/dma.h b/include/asm-arm/arch-pxa/dma.h new file mode 100644 index 000000000000..56db3d49bfc8 --- /dev/null +++ b/include/asm-arm/arch-pxa/dma.h | |||
@@ -0,0 +1,67 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-pxa/dma.h | ||
3 | * | ||
4 | * Author: Nicolas Pitre | ||
5 | * Created: Jun 15, 2001 | ||
6 | * Copyright: MontaVista Software, Inc. | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | */ | ||
12 | #ifndef __ASM_ARCH_DMA_H | ||
13 | #define __ASM_ARCH_DMA_H | ||
14 | |||
15 | #define MAX_DMA_ADDRESS 0xffffffff | ||
16 | |||
17 | /* No DMA as the rest of the world see it */ | ||
18 | #define MAX_DMA_CHANNELS 0 | ||
19 | |||
20 | /* | ||
21 | * Descriptor structure for PXA's DMA engine | ||
22 | * Note: this structure must always be aligned to a 16-byte boundary. | ||
23 | */ | ||
24 | |||
25 | typedef struct pxa_dma_desc { | ||
26 | volatile u32 ddadr; /* Points to the next descriptor + flags */ | ||
27 | volatile u32 dsadr; /* DSADR value for the current transfer */ | ||
28 | volatile u32 dtadr; /* DTADR value for the current transfer */ | ||
29 | volatile u32 dcmd; /* DCMD value for the current transfer */ | ||
30 | } pxa_dma_desc; | ||
31 | |||
32 | #if defined(CONFIG_PXA27x) | ||
33 | |||
34 | #define PXA_DMA_CHANNELS 32 | ||
35 | #define PXA_DMA_NBCH(prio) ((prio == DMA_PRIO_LOW) ? 16 : 8) | ||
36 | |||
37 | typedef enum { | ||
38 | DMA_PRIO_HIGH = 0, | ||
39 | DMA_PRIO_MEDIUM = 8, | ||
40 | DMA_PRIO_LOW = 16 | ||
41 | } pxa_dma_prio; | ||
42 | |||
43 | #elif defined(CONFIG_PXA25x) | ||
44 | |||
45 | #define PXA_DMA_CHANNELS 16 | ||
46 | #define PXA_DMA_NBCH(prio) ((prio == DMA_PRIO_LOW) ? 8 : 4) | ||
47 | |||
48 | typedef enum { | ||
49 | DMA_PRIO_HIGH = 0, | ||
50 | DMA_PRIO_MEDIUM = 4, | ||
51 | DMA_PRIO_LOW = 8 | ||
52 | } pxa_dma_prio; | ||
53 | |||
54 | #endif | ||
55 | |||
56 | /* | ||
57 | * DMA registration | ||
58 | */ | ||
59 | |||
60 | int pxa_request_dma (char *name, | ||
61 | pxa_dma_prio prio, | ||
62 | void (*irq_handler)(int, void *, struct pt_regs *), | ||
63 | void *data); | ||
64 | |||
65 | void pxa_free_dma (int dma_ch); | ||
66 | |||
67 | #endif /* _ASM_ARCH_DMA_H */ | ||
diff --git a/include/asm-arm/arch-pxa/entry-macro.S b/include/asm-arm/arch-pxa/entry-macro.S new file mode 100644 index 000000000000..2abfc8bb3ee5 --- /dev/null +++ b/include/asm-arm/arch-pxa/entry-macro.S | |||
@@ -0,0 +1,31 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-pxa/entry-macro.S | ||
3 | * | ||
4 | * Low-level IRQ helper macros for PXA-based platforms | ||
5 | * | ||
6 | * This file is licensed under the terms of the GNU General Public | ||
7 | * License version 2. This program is licensed "as is" without any | ||
8 | * warranty of any kind, whether express or implied. | ||
9 | */ | ||
10 | |||
11 | .macro disable_fiq | ||
12 | .endm | ||
13 | |||
14 | .macro get_irqnr_and_base, irqnr, irqstat, base, tmp | ||
15 | #ifdef CONFIG_PXA27x | ||
16 | mrc p6, 0, \irqstat, c0, c0, 0 @ ICIP | ||
17 | mrc p6, 0, \irqnr, c1, c0, 0 @ ICMR | ||
18 | #else | ||
19 | mov \base, #io_p2v(0x40000000) @ IIR Ctl = 0x40d00000 | ||
20 | add \base, \base, #0x00d00000 | ||
21 | ldr \irqstat, [\base, #0] @ ICIP | ||
22 | ldr \irqnr, [\base, #4] @ ICMR | ||
23 | #endif | ||
24 | ands \irqnr, \irqstat, \irqnr | ||
25 | beq 1001f | ||
26 | rsb \irqstat, \irqnr, #0 | ||
27 | and \irqstat, \irqstat, \irqnr | ||
28 | clz \irqnr, \irqstat | ||
29 | rsb \irqnr, \irqnr, #(31 - PXA_IRQ_SKIP) | ||
30 | 1001: | ||
31 | .endm | ||
diff --git a/include/asm-arm/arch-pxa/hardware.h b/include/asm-arm/arch-pxa/hardware.h new file mode 100644 index 000000000000..72b04d846a23 --- /dev/null +++ b/include/asm-arm/arch-pxa/hardware.h | |||
@@ -0,0 +1,95 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-pxa/hardware.h | ||
3 | * | ||
4 | * Author: Nicolas Pitre | ||
5 | * Created: Jun 15, 2001 | ||
6 | * Copyright: MontaVista Software Inc. | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | */ | ||
12 | |||
13 | #ifndef __ASM_ARCH_HARDWARE_H | ||
14 | #define __ASM_ARCH_HARDWARE_H | ||
15 | |||
16 | /* | ||
17 | * We requires absolute addresses. | ||
18 | */ | ||
19 | #define PCIO_BASE 0 | ||
20 | |||
21 | /* | ||
22 | * Workarounds for at least 2 errata so far require this. | ||
23 | * The mapping is set in mach-pxa/generic.c. | ||
24 | */ | ||
25 | #define UNCACHED_PHYS_0 0xff000000 | ||
26 | #define UNCACHED_ADDR UNCACHED_PHYS_0 | ||
27 | |||
28 | /* | ||
29 | * Intel PXA2xx internal register mapping: | ||
30 | * | ||
31 | * 0x40000000 - 0x41ffffff <--> 0xf2000000 - 0xf3ffffff | ||
32 | * 0x44000000 - 0x45ffffff <--> 0xf4000000 - 0xf5ffffff | ||
33 | * 0x48000000 - 0x49ffffff <--> 0xf6000000 - 0xf7ffffff | ||
34 | * 0x4c000000 - 0x4dffffff <--> 0xf8000000 - 0xf9ffffff | ||
35 | * 0x50000000 - 0x51ffffff <--> 0xfa000000 - 0xfbffffff | ||
36 | * 0x54000000 - 0x55ffffff <--> 0xfc000000 - 0xfdffffff | ||
37 | * 0x58000000 - 0x59ffffff <--> 0xfe000000 - 0xffffffff | ||
38 | * | ||
39 | * Note that not all PXA2xx chips implement all those addresses, and the | ||
40 | * kernel only maps the minimum needed range of this mapping. | ||
41 | */ | ||
42 | #define io_p2v(x) (0xf2000000 + ((x) & 0x01ffffff) + (((x) & 0x1c000000) >> 1)) | ||
43 | #define io_v2p(x) (0x3c000000 + ((x) & 0x01ffffff) + (((x) & 0x0e000000) << 1)) | ||
44 | |||
45 | #ifndef __ASSEMBLY__ | ||
46 | |||
47 | #if 0 | ||
48 | # define __REG(x) (*((volatile u32 *)io_p2v(x))) | ||
49 | #else | ||
50 | /* | ||
51 | * This __REG() version gives the same results as the one above, except | ||
52 | * that we are fooling gcc somehow so it generates far better and smaller | ||
53 | * assembly code for access to contigous registers. It's a shame that gcc | ||
54 | * doesn't guess this by itself. | ||
55 | */ | ||
56 | #include <asm/types.h> | ||
57 | typedef struct { volatile u32 offset[4096]; } __regbase; | ||
58 | # define __REGP(x) ((__regbase *)((x)&~4095))->offset[((x)&4095)>>2] | ||
59 | # define __REG(x) __REGP(io_p2v(x)) | ||
60 | #endif | ||
61 | |||
62 | /* With indexed regs we don't want to feed the index through io_p2v() | ||
63 | especially if it is a variable, otherwise horrible code will result. */ | ||
64 | # define __REG2(x,y) (*(volatile u32 *)((u32)&__REG(x) + (y))) | ||
65 | |||
66 | # define __PREG(x) (io_v2p((u32)&(x))) | ||
67 | |||
68 | #else | ||
69 | |||
70 | # define __REG(x) io_p2v(x) | ||
71 | # define __PREG(x) io_v2p(x) | ||
72 | |||
73 | #endif | ||
74 | |||
75 | #ifndef __ASSEMBLY__ | ||
76 | |||
77 | /* | ||
78 | * Handy routine to set GPIO alternate functions | ||
79 | */ | ||
80 | extern void pxa_gpio_mode( int gpio_mode ); | ||
81 | |||
82 | /* | ||
83 | * Routine to enable or disable CKEN | ||
84 | */ | ||
85 | extern void pxa_set_cken(int clock, int enable); | ||
86 | |||
87 | /* | ||
88 | * return current memory and LCD clock frequency in units of 10kHz | ||
89 | */ | ||
90 | extern unsigned int get_memclk_frequency_10khz(void); | ||
91 | extern unsigned int get_lcdclk_frequency_10khz(void); | ||
92 | |||
93 | #endif | ||
94 | |||
95 | #endif /* _ASM_ARCH_HARDWARE_H */ | ||
diff --git a/include/asm-arm/arch-pxa/idp.h b/include/asm-arm/arch-pxa/idp.h new file mode 100644 index 000000000000..e7ef497417bb --- /dev/null +++ b/include/asm-arm/arch-pxa/idp.h | |||
@@ -0,0 +1,200 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-pxa/idp.h | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify | ||
5 | * it under the terms of the GNU General Public License version 2 as | ||
6 | * published by the Free Software Foundation. | ||
7 | * | ||
8 | * Copyright (c) 2001 Cliff Brake, Accelent Systems Inc. | ||
9 | * | ||
10 | * 2001-09-13: Cliff Brake <cbrake@accelent.com> | ||
11 | * Initial code | ||
12 | * | ||
13 | * 2005-02-15: Cliff Brake <cliff.brake@gmail.com> | ||
14 | * <http://www.vibren.com> <http://bec-systems.com> | ||
15 | * Changes for 2.6 kernel. | ||
16 | */ | ||
17 | |||
18 | #include <linux/config.h> | ||
19 | |||
20 | /* | ||
21 | * Note: this file must be safe to include in assembly files | ||
22 | * | ||
23 | * Support for the Vibren PXA255 IDP requires rev04 or later | ||
24 | * IDP hardware. | ||
25 | */ | ||
26 | |||
27 | |||
28 | #define IDP_FLASH_PHYS (PXA_CS0_PHYS) | ||
29 | #define IDP_ALT_FLASH_PHYS (PXA_CS1_PHYS) | ||
30 | #define IDP_MEDIAQ_PHYS (PXA_CS3_PHYS) | ||
31 | #define IDP_IDE_PHYS (PXA_CS5_PHYS + 0x03000000) | ||
32 | #define IDP_ETH_PHYS (PXA_CS5_PHYS + 0x03400000) | ||
33 | #define IDP_COREVOLT_PHYS (PXA_CS5_PHYS + 0x03800000) | ||
34 | #define IDP_CPLD_PHYS (PXA_CS5_PHYS + 0x03C00000) | ||
35 | |||
36 | |||
37 | /* | ||
38 | * virtual memory map | ||
39 | */ | ||
40 | |||
41 | #define IDP_COREVOLT_VIRT (0xf0000000) | ||
42 | #define IDP_COREVOLT_SIZE (1*1024*1024) | ||
43 | |||
44 | #define IDP_CPLD_VIRT (IDP_COREVOLT_VIRT + IDP_COREVOLT_SIZE) | ||
45 | #define IDP_CPLD_SIZE (1*1024*1024) | ||
46 | |||
47 | #if (IDP_CPLD_VIRT + IDP_CPLD_SIZE) > 0xfc000000 | ||
48 | #error Your custom IO space is getting a bit large !! | ||
49 | #endif | ||
50 | |||
51 | #define CPLD_P2V(x) ((x) - IDP_CPLD_PHYS + IDP_CPLD_VIRT) | ||
52 | #define CPLD_V2P(x) ((x) - IDP_CPLD_VIRT + IDP_CPLD_PHYS) | ||
53 | |||
54 | #ifndef __ASSEMBLY__ | ||
55 | # define __CPLD_REG(x) (*((volatile unsigned long *)CPLD_P2V(x))) | ||
56 | #else | ||
57 | # define __CPLD_REG(x) CPLD_P2V(x) | ||
58 | #endif | ||
59 | |||
60 | /* board level registers in the CPLD: (offsets from CPLD_VIRT) */ | ||
61 | |||
62 | #define _IDP_CPLD_REV (IDP_CPLD_PHYS + 0x00) | ||
63 | #define _IDP_CPLD_PERIPH_PWR (IDP_CPLD_PHYS + 0x04) | ||
64 | #define _IDP_CPLD_LED_CONTROL (IDP_CPLD_PHYS + 0x08) | ||
65 | #define _IDP_CPLD_KB_COL_HIGH (IDP_CPLD_PHYS + 0x0C) | ||
66 | #define _IDP_CPLD_KB_COL_LOW (IDP_CPLD_PHYS + 0x10) | ||
67 | #define _IDP_CPLD_PCCARD_EN (IDP_CPLD_PHYS + 0x14) | ||
68 | #define _IDP_CPLD_GPIOH_DIR (IDP_CPLD_PHYS + 0x18) | ||
69 | #define _IDP_CPLD_GPIOH_VALUE (IDP_CPLD_PHYS + 0x1C) | ||
70 | #define _IDP_CPLD_GPIOL_DIR (IDP_CPLD_PHYS + 0x20) | ||
71 | #define _IDP_CPLD_GPIOL_VALUE (IDP_CPLD_PHYS + 0x24) | ||
72 | #define _IDP_CPLD_PCCARD_PWR (IDP_CPLD_PHYS + 0x28) | ||
73 | #define _IDP_CPLD_MISC_CTRL (IDP_CPLD_PHYS + 0x2C) | ||
74 | #define _IDP_CPLD_LCD (IDP_CPLD_PHYS + 0x30) | ||
75 | #define _IDP_CPLD_FLASH_WE (IDP_CPLD_PHYS + 0x34) | ||
76 | |||
77 | #define _IDP_CPLD_KB_ROW (IDP_CPLD_PHYS + 0x50) | ||
78 | #define _IDP_CPLD_PCCARD0_STATUS (IDP_CPLD_PHYS + 0x54) | ||
79 | #define _IDP_CPLD_PCCARD1_STATUS (IDP_CPLD_PHYS + 0x58) | ||
80 | #define _IDP_CPLD_MISC_STATUS (IDP_CPLD_PHYS + 0x5C) | ||
81 | |||
82 | /* FPGA register virtual addresses */ | ||
83 | |||
84 | #define IDP_CPLD_REV __CPLD_REG(_IDP_CPLD_REV) | ||
85 | #define IDP_CPLD_PERIPH_PWR __CPLD_REG(_IDP_CPLD_PERIPH_PWR) | ||
86 | #define IDP_CPLD_LED_CONTROL __CPLD_REG(_IDP_CPLD_LED_CONTROL) | ||
87 | #define IDP_CPLD_KB_COL_HIGH __CPLD_REG(_IDP_CPLD_KB_COL_HIGH) | ||
88 | #define IDP_CPLD_KB_COL_LOW __CPLD_REG(_IDP_CPLD_KB_COL_LOW) | ||
89 | #define IDP_CPLD_PCCARD_EN __CPLD_REG(_IDP_CPLD_PCCARD_EN) | ||
90 | #define IDP_CPLD_GPIOH_DIR __CPLD_REG(_IDP_CPLD_GPIOH_DIR) | ||
91 | #define IDP_CPLD_GPIOH_VALUE __CPLD_REG(_IDP_CPLD_GPIOH_VALUE) | ||
92 | #define IDP_CPLD_GPIOL_DIR __CPLD_REG(_IDP_CPLD_GPIOL_DIR) | ||
93 | #define IDP_CPLD_GPIOL_VALUE __CPLD_REG(_IDP_CPLD_GPIOL_VALUE) | ||
94 | #define IDP_CPLD_PCCARD_PWR __CPLD_REG(_IDP_CPLD_PCCARD_PWR) | ||
95 | #define IDP_CPLD_MISC_CTRL __CPLD_REG(_IDP_CPLD_MISC_CTRL) | ||
96 | #define IDP_CPLD_LCD __CPLD_REG(_IDP_CPLD_LCD) | ||
97 | #define IDP_CPLD_FLASH_WE __CPLD_REG(_IDP_CPLD_FLASH_WE) | ||
98 | |||
99 | #define IDP_CPLD_KB_ROW __CPLD_REG(_IDP_CPLD_KB_ROW) | ||
100 | #define IDP_CPLD_PCCARD0_STATUS __CPLD_REG(_IDP_CPLD_PCCARD0_STATUS) | ||
101 | #define IDP_CPLD_PCCARD1_STATUS __CPLD_REG(_IDP_CPLD_PCCARD1_STATUS) | ||
102 | #define IDP_CPLD_MISC_STATUS __CPLD_REG(_IDP_CPLD_MISC_STATUS) | ||
103 | |||
104 | |||
105 | /* | ||
106 | * Bit masks for various registers | ||
107 | */ | ||
108 | |||
109 | // IDP_CPLD_PCCARD_PWR | ||
110 | #define PCC0_PWR0 (1 << 0) | ||
111 | #define PCC0_PWR1 (1 << 1) | ||
112 | #define PCC0_PWR2 (1 << 2) | ||
113 | #define PCC0_PWR3 (1 << 3) | ||
114 | #define PCC1_PWR0 (1 << 4) | ||
115 | #define PCC1_PWR1 (1 << 5) | ||
116 | #define PCC1_PWR2 (1 << 6) | ||
117 | #define PCC1_PWR3 (1 << 7) | ||
118 | |||
119 | // IDP_CPLD_PCCARD_EN | ||
120 | #define PCC0_RESET (1 << 6) | ||
121 | #define PCC1_RESET (1 << 7) | ||
122 | #define PCC0_ENABLE (1 << 0) | ||
123 | #define PCC1_ENABLE (1 << 1) | ||
124 | |||
125 | // IDP_CPLD_PCCARDx_STATUS | ||
126 | #define _PCC_WRPROT (1 << 7) // 7-4 read as low true | ||
127 | #define _PCC_RESET (1 << 6) | ||
128 | #define _PCC_IRQ (1 << 5) | ||
129 | #define _PCC_INPACK (1 << 4) | ||
130 | #define PCC_BVD2 (1 << 3) | ||
131 | #define PCC_BVD1 (1 << 2) | ||
132 | #define PCC_VS2 (1 << 1) | ||
133 | #define PCC_VS1 (1 << 0) | ||
134 | |||
135 | #define PCC_DETECT(x) (GPLR(7 + (x)) & GPIO_bit(7 + (x))) | ||
136 | |||
137 | /* A listing of interrupts used by external hardware devices */ | ||
138 | |||
139 | #define TOUCH_PANEL_IRQ IRQ_GPIO(5) | ||
140 | #define IDE_IRQ IRQ_GPIO(21) | ||
141 | |||
142 | #define TOUCH_PANEL_IRQ_EDGE IRQT_FALLING | ||
143 | |||
144 | #define ETHERNET_IRQ IRQ_GPIO(4) | ||
145 | #define ETHERNET_IRQ_EDGE IRQT_RISING | ||
146 | |||
147 | #define IDE_IRQ_EDGE IRQT_RISING | ||
148 | |||
149 | #define PCMCIA_S0_CD_VALID IRQ_GPIO(7) | ||
150 | #define PCMCIA_S0_CD_VALID_EDGE IRQT_BOTHEDGE | ||
151 | |||
152 | #define PCMCIA_S1_CD_VALID IRQ_GPIO(8) | ||
153 | #define PCMCIA_S1_CD_VALID_EDGE IRQT_BOTHEDGE | ||
154 | |||
155 | #define PCMCIA_S0_RDYINT IRQ_GPIO(19) | ||
156 | #define PCMCIA_S1_RDYINT IRQ_GPIO(22) | ||
157 | |||
158 | |||
159 | /* | ||
160 | * Macros for LED Driver | ||
161 | */ | ||
162 | |||
163 | /* leds 0 = ON */ | ||
164 | #define IDP_HB_LED (1<<5) | ||
165 | #define IDP_BUSY_LED (1<<6) | ||
166 | |||
167 | #define IDP_LEDS_MASK (IDP_HB_LED | IDP_BUSY_LED) | ||
168 | |||
169 | /* | ||
170 | * macros for MTD driver | ||
171 | */ | ||
172 | |||
173 | #define FLASH_WRITE_PROTECT_DISABLE() ((IDP_CPLD_FLASH_WE) &= ~(0x1)) | ||
174 | #define FLASH_WRITE_PROTECT_ENABLE() ((IDP_CPLD_FLASH_WE) |= (0x1)) | ||
175 | |||
176 | /* | ||
177 | * macros for matrix keyboard driver | ||
178 | */ | ||
179 | |||
180 | #define KEYBD_MATRIX_NUMBER_INPUTS 7 | ||
181 | #define KEYBD_MATRIX_NUMBER_OUTPUTS 14 | ||
182 | |||
183 | #define KEYBD_MATRIX_INVERT_OUTPUT_LOGIC FALSE | ||
184 | #define KEYBD_MATRIX_INVERT_INPUT_LOGIC FALSE | ||
185 | |||
186 | #define KEYBD_MATRIX_SETTLING_TIME_US 100 | ||
187 | #define KEYBD_MATRIX_KEYSTATE_DEBOUNCE_CONSTANT 2 | ||
188 | |||
189 | #define KEYBD_MATRIX_SET_OUTPUTS(outputs) \ | ||
190 | {\ | ||
191 | IDP_CPLD_KB_COL_LOW = outputs;\ | ||
192 | IDP_CPLD_KB_COL_HIGH = outputs >> 7;\ | ||
193 | } | ||
194 | |||
195 | #define KEYBD_MATRIX_GET_INPUTS(inputs) \ | ||
196 | {\ | ||
197 | inputs = (IDP_CPLD_KB_ROW & 0x7f);\ | ||
198 | } | ||
199 | |||
200 | |||
diff --git a/include/asm-arm/arch-pxa/io.h b/include/asm-arm/arch-pxa/io.h new file mode 100644 index 000000000000..c3bdbe44e21f --- /dev/null +++ b/include/asm-arm/arch-pxa/io.h | |||
@@ -0,0 +1,19 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-pxa/io.h | ||
3 | * | ||
4 | * Copied from asm/arch/sa1100/io.h | ||
5 | */ | ||
6 | #ifndef __ASM_ARM_ARCH_IO_H | ||
7 | #define __ASM_ARM_ARCH_IO_H | ||
8 | |||
9 | #define IO_SPACE_LIMIT 0xffffffff | ||
10 | |||
11 | /* | ||
12 | * We don't actually have real ISA nor PCI buses, but there is so many | ||
13 | * drivers out there that might just work if we fake them... | ||
14 | */ | ||
15 | #define __io(a) ((void __iomem *)(a)) | ||
16 | #define __mem_pci(a) (a) | ||
17 | #define __mem_isa(a) (a) | ||
18 | |||
19 | #endif | ||
diff --git a/include/asm-arm/arch-pxa/irq.h b/include/asm-arm/arch-pxa/irq.h new file mode 100644 index 000000000000..d770e4b37ae1 --- /dev/null +++ b/include/asm-arm/arch-pxa/irq.h | |||
@@ -0,0 +1,19 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-pxa/irq.h | ||
3 | * | ||
4 | * Author: Nicolas Pitre | ||
5 | * Created: Jun 15, 2001 | ||
6 | * Copyright: MontaVista Software Inc. | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | */ | ||
12 | |||
13 | #define fixup_irq(x) (x) | ||
14 | |||
15 | /* | ||
16 | * This prototype is required for cascading of multiplexed interrupts. | ||
17 | * Since it doesn't exist elsewhere, we'll put it here for now. | ||
18 | */ | ||
19 | extern void do_IRQ(int irq, struct pt_regs *regs); | ||
diff --git a/include/asm-arm/arch-pxa/irqs.h b/include/asm-arm/arch-pxa/irqs.h new file mode 100644 index 000000000000..05c4b7027592 --- /dev/null +++ b/include/asm-arm/arch-pxa/irqs.h | |||
@@ -0,0 +1,219 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-pxa/irqs.h | ||
3 | * | ||
4 | * Author: Nicolas Pitre | ||
5 | * Created: Jun 15, 2001 | ||
6 | * Copyright: MontaVista Software Inc. | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | */ | ||
12 | |||
13 | #include <linux/config.h> | ||
14 | |||
15 | #ifdef CONFIG_PXA27x | ||
16 | #define PXA_IRQ_SKIP 0 | ||
17 | #else | ||
18 | #define PXA_IRQ_SKIP 7 | ||
19 | #endif | ||
20 | |||
21 | #define PXA_IRQ(x) ((x) - PXA_IRQ_SKIP) | ||
22 | |||
23 | #define IRQ_SSP3 PXA_IRQ(0) /* SSP3 service request */ | ||
24 | #define IRQ_MSL PXA_IRQ(1) /* MSL Interface interrupt */ | ||
25 | #define IRQ_USBH2 PXA_IRQ(2) /* USB Host interrupt 1 (OHCI) */ | ||
26 | #define IRQ_USBH1 PXA_IRQ(3) /* USB Host interrupt 2 (non-OHCI) */ | ||
27 | #define IRQ_KEYPAD PXA_IRQ(4) /* Key pad controller */ | ||
28 | #define IRQ_MEMSTK PXA_IRQ(5) /* Memory Stick interrupt */ | ||
29 | #define IRQ_PWRI2C PXA_IRQ(6) /* Power I2C interrupt */ | ||
30 | #define IRQ_HWUART PXA_IRQ(7) /* HWUART Transmit/Receive/Error (PXA26x) */ | ||
31 | #define IRQ_OST_4_11 PXA_IRQ(7) /* OS timer 4-11 matches (PXA27x) */ | ||
32 | #define IRQ_GPIO0 PXA_IRQ(8) /* GPIO0 Edge Detect */ | ||
33 | #define IRQ_GPIO1 PXA_IRQ(9) /* GPIO1 Edge Detect */ | ||
34 | #define IRQ_GPIO_2_x PXA_IRQ(10) /* GPIO[2-x] Edge Detect */ | ||
35 | #define IRQ_USB PXA_IRQ(11) /* USB Service */ | ||
36 | #define IRQ_PMU PXA_IRQ(12) /* Performance Monitoring Unit */ | ||
37 | #define IRQ_I2S PXA_IRQ(13) /* I2S Interrupt */ | ||
38 | #define IRQ_AC97 PXA_IRQ(14) /* AC97 Interrupt */ | ||
39 | #define IRQ_ASSP PXA_IRQ(15) /* Audio SSP Service Request (PXA25x) */ | ||
40 | #define IRQ_USIM PXA_IRQ(15) /* Smart Card interface interrupt (PXA27x) */ | ||
41 | #define IRQ_NSSP PXA_IRQ(16) /* Network SSP Service Request (PXA25x) */ | ||
42 | #define IRQ_SSP2 PXA_IRQ(16) /* SSP2 interrupt (PXA27x) */ | ||
43 | #define IRQ_LCD PXA_IRQ(17) /* LCD Controller Service Request */ | ||
44 | #define IRQ_I2C PXA_IRQ(18) /* I2C Service Request */ | ||
45 | #define IRQ_ICP PXA_IRQ(19) /* ICP Transmit/Receive/Error */ | ||
46 | #define IRQ_STUART PXA_IRQ(20) /* STUART Transmit/Receive/Error */ | ||
47 | #define IRQ_BTUART PXA_IRQ(21) /* BTUART Transmit/Receive/Error */ | ||
48 | #define IRQ_FFUART PXA_IRQ(22) /* FFUART Transmit/Receive/Error*/ | ||
49 | #define IRQ_MMC PXA_IRQ(23) /* MMC Status/Error Detection */ | ||
50 | #define IRQ_SSP PXA_IRQ(24) /* SSP Service Request */ | ||
51 | #define IRQ_DMA PXA_IRQ(25) /* DMA Channel Service Request */ | ||
52 | #define IRQ_OST0 PXA_IRQ(26) /* OS Timer match 0 */ | ||
53 | #define IRQ_OST1 PXA_IRQ(27) /* OS Timer match 1 */ | ||
54 | #define IRQ_OST2 PXA_IRQ(28) /* OS Timer match 2 */ | ||
55 | #define IRQ_OST3 PXA_IRQ(29) /* OS Timer match 3 */ | ||
56 | #define IRQ_RTC1Hz PXA_IRQ(30) /* RTC HZ Clock Tick */ | ||
57 | #define IRQ_RTCAlrm PXA_IRQ(31) /* RTC Alarm */ | ||
58 | |||
59 | #ifdef CONFIG_PXA27x | ||
60 | #define IRQ_TPM PXA_IRQ(32) /* TPM interrupt */ | ||
61 | #define IRQ_CAMERA PXA_IRQ(33) /* Camera Interface */ | ||
62 | |||
63 | #define PXA_INTERNAL_IRQS 34 | ||
64 | #else | ||
65 | #define PXA_INTERNAL_IRQS 32 | ||
66 | #endif | ||
67 | |||
68 | #define GPIO_2_x_TO_IRQ(x) \ | ||
69 | PXA_IRQ((x) - 2 + PXA_INTERNAL_IRQS) | ||
70 | #define IRQ_GPIO(x) (((x) < 2) ? (IRQ_GPIO0 + (x)) : GPIO_2_x_TO_IRQ(x)) | ||
71 | |||
72 | #define IRQ_TO_GPIO_2_x(i) \ | ||
73 | ((i) - IRQ_GPIO(2) + 2) | ||
74 | #define IRQ_TO_GPIO(i) (((i) < IRQ_GPIO(2)) ? ((i) - IRQ_GPIO0) : IRQ_TO_GPIO_2_x(i)) | ||
75 | |||
76 | #if defined(CONFIG_PXA25x) | ||
77 | #define PXA_LAST_GPIO 80 | ||
78 | #elif defined(CONFIG_PXA27x) | ||
79 | #define PXA_LAST_GPIO 127 | ||
80 | #endif | ||
81 | |||
82 | /* | ||
83 | * The next 16 interrupts are for board specific purposes. Since | ||
84 | * the kernel can only run on one machine at a time, we can re-use | ||
85 | * these. If you need more, increase IRQ_BOARD_END, but keep it | ||
86 | * within sensible limits. | ||
87 | */ | ||
88 | #define IRQ_BOARD_START (IRQ_GPIO(PXA_LAST_GPIO) + 1) | ||
89 | #define IRQ_BOARD_END (IRQ_BOARD_START + 16) | ||
90 | |||
91 | #define IRQ_SA1111_START (IRQ_BOARD_END) | ||
92 | #define IRQ_GPAIN0 (IRQ_BOARD_END + 0) | ||
93 | #define IRQ_GPAIN1 (IRQ_BOARD_END + 1) | ||
94 | #define IRQ_GPAIN2 (IRQ_BOARD_END + 2) | ||
95 | #define IRQ_GPAIN3 (IRQ_BOARD_END + 3) | ||
96 | #define IRQ_GPBIN0 (IRQ_BOARD_END + 4) | ||
97 | #define IRQ_GPBIN1 (IRQ_BOARD_END + 5) | ||
98 | #define IRQ_GPBIN2 (IRQ_BOARD_END + 6) | ||
99 | #define IRQ_GPBIN3 (IRQ_BOARD_END + 7) | ||
100 | #define IRQ_GPBIN4 (IRQ_BOARD_END + 8) | ||
101 | #define IRQ_GPBIN5 (IRQ_BOARD_END + 9) | ||
102 | #define IRQ_GPCIN0 (IRQ_BOARD_END + 10) | ||
103 | #define IRQ_GPCIN1 (IRQ_BOARD_END + 11) | ||
104 | #define IRQ_GPCIN2 (IRQ_BOARD_END + 12) | ||
105 | #define IRQ_GPCIN3 (IRQ_BOARD_END + 13) | ||
106 | #define IRQ_GPCIN4 (IRQ_BOARD_END + 14) | ||
107 | #define IRQ_GPCIN5 (IRQ_BOARD_END + 15) | ||
108 | #define IRQ_GPCIN6 (IRQ_BOARD_END + 16) | ||
109 | #define IRQ_GPCIN7 (IRQ_BOARD_END + 17) | ||
110 | #define IRQ_MSTXINT (IRQ_BOARD_END + 18) | ||
111 | #define IRQ_MSRXINT (IRQ_BOARD_END + 19) | ||
112 | #define IRQ_MSSTOPERRINT (IRQ_BOARD_END + 20) | ||
113 | #define IRQ_TPTXINT (IRQ_BOARD_END + 21) | ||
114 | #define IRQ_TPRXINT (IRQ_BOARD_END + 22) | ||
115 | #define IRQ_TPSTOPERRINT (IRQ_BOARD_END + 23) | ||
116 | #define SSPXMTINT (IRQ_BOARD_END + 24) | ||
117 | #define SSPRCVINT (IRQ_BOARD_END + 25) | ||
118 | #define SSPROR (IRQ_BOARD_END + 26) | ||
119 | #define AUDXMTDMADONEA (IRQ_BOARD_END + 32) | ||
120 | #define AUDRCVDMADONEA (IRQ_BOARD_END + 33) | ||
121 | #define AUDXMTDMADONEB (IRQ_BOARD_END + 34) | ||
122 | #define AUDRCVDMADONEB (IRQ_BOARD_END + 35) | ||
123 | #define AUDTFSR (IRQ_BOARD_END + 36) | ||
124 | #define AUDRFSR (IRQ_BOARD_END + 37) | ||
125 | #define AUDTUR (IRQ_BOARD_END + 38) | ||
126 | #define AUDROR (IRQ_BOARD_END + 39) | ||
127 | #define AUDDTS (IRQ_BOARD_END + 40) | ||
128 | #define AUDRDD (IRQ_BOARD_END + 41) | ||
129 | #define AUDSTO (IRQ_BOARD_END + 42) | ||
130 | #define IRQ_USBPWR (IRQ_BOARD_END + 43) | ||
131 | #define IRQ_HCIM (IRQ_BOARD_END + 44) | ||
132 | #define IRQ_HCIBUFFACC (IRQ_BOARD_END + 45) | ||
133 | #define IRQ_HCIRMTWKP (IRQ_BOARD_END + 46) | ||
134 | #define IRQ_NHCIMFCIR (IRQ_BOARD_END + 47) | ||
135 | #define IRQ_USB_PORT_RESUME (IRQ_BOARD_END + 48) | ||
136 | #define IRQ_S0_READY_NINT (IRQ_BOARD_END + 49) | ||
137 | #define IRQ_S1_READY_NINT (IRQ_BOARD_END + 50) | ||
138 | #define IRQ_S0_CD_VALID (IRQ_BOARD_END + 51) | ||
139 | #define IRQ_S1_CD_VALID (IRQ_BOARD_END + 52) | ||
140 | #define IRQ_S0_BVD1_STSCHG (IRQ_BOARD_END + 53) | ||
141 | #define IRQ_S1_BVD1_STSCHG (IRQ_BOARD_END + 54) | ||
142 | |||
143 | #define IRQ_LOCOMO_START (IRQ_BOARD_END) | ||
144 | #define IRQ_LOCOMO_KEY (IRQ_BOARD_END + 0) | ||
145 | #define IRQ_LOCOMO_GPIO0 (IRQ_BOARD_END + 1) | ||
146 | #define IRQ_LOCOMO_GPIO1 (IRQ_BOARD_END + 2) | ||
147 | #define IRQ_LOCOMO_GPIO2 (IRQ_BOARD_END + 3) | ||
148 | #define IRQ_LOCOMO_GPIO3 (IRQ_BOARD_END + 4) | ||
149 | #define IRQ_LOCOMO_GPIO4 (IRQ_BOARD_END + 5) | ||
150 | #define IRQ_LOCOMO_GPIO5 (IRQ_BOARD_END + 6) | ||
151 | #define IRQ_LOCOMO_GPIO6 (IRQ_BOARD_END + 7) | ||
152 | #define IRQ_LOCOMO_GPIO7 (IRQ_BOARD_END + 8) | ||
153 | #define IRQ_LOCOMO_GPIO8 (IRQ_BOARD_END + 9) | ||
154 | #define IRQ_LOCOMO_GPIO9 (IRQ_BOARD_END + 10) | ||
155 | #define IRQ_LOCOMO_GPIO10 (IRQ_BOARD_END + 11) | ||
156 | #define IRQ_LOCOMO_GPIO11 (IRQ_BOARD_END + 12) | ||
157 | #define IRQ_LOCOMO_GPIO12 (IRQ_BOARD_END + 13) | ||
158 | #define IRQ_LOCOMO_GPIO13 (IRQ_BOARD_END + 14) | ||
159 | #define IRQ_LOCOMO_GPIO14 (IRQ_BOARD_END + 15) | ||
160 | #define IRQ_LOCOMO_GPIO15 (IRQ_BOARD_END + 16) | ||
161 | #define IRQ_LOCOMO_LT (IRQ_BOARD_END + 17) | ||
162 | #define IRQ_LOCOMO_SPI_RFR (IRQ_BOARD_END + 18) | ||
163 | #define IRQ_LOCOMO_SPI_RFW (IRQ_BOARD_END + 19) | ||
164 | #define IRQ_LOCOMO_SPI_OVRN (IRQ_BOARD_END + 20) | ||
165 | #define IRQ_LOCOMO_SPI_TEND (IRQ_BOARD_END + 21) | ||
166 | |||
167 | /* | ||
168 | * Figure out the MAX IRQ number. | ||
169 | * | ||
170 | * If we have an SA1111, the max IRQ is S1_BVD1_STSCHG+1. | ||
171 | * If we have an LoCoMo, the max IRQ is IRQ_LOCOMO_SPI_TEND+1 | ||
172 | * Otherwise, we have the standard IRQs only. | ||
173 | */ | ||
174 | #ifdef CONFIG_SA1111 | ||
175 | #define NR_IRQS (IRQ_S1_BVD1_STSCHG + 1) | ||
176 | #elif defined(CONFIG_SHARP_LOCOMO) | ||
177 | #define NR_IRQS (IRQ_LOCOMO_SPI_TEND + 1) | ||
178 | #elif defined(CONFIG_ARCH_LUBBOCK) || \ | ||
179 | defined(CONFIG_MACH_MAINSTONE) | ||
180 | #define NR_IRQS (IRQ_BOARD_END) | ||
181 | #else | ||
182 | #define NR_IRQS (IRQ_BOARD_START) | ||
183 | #endif | ||
184 | |||
185 | /* | ||
186 | * Board specific IRQs. Define them here. | ||
187 | * Do not surround them with ifdefs. | ||
188 | */ | ||
189 | #define LUBBOCK_IRQ(x) (IRQ_BOARD_START + (x)) | ||
190 | #define LUBBOCK_SD_IRQ LUBBOCK_IRQ(0) | ||
191 | #define LUBBOCK_SA1111_IRQ LUBBOCK_IRQ(1) | ||
192 | #define LUBBOCK_USB_IRQ LUBBOCK_IRQ(2) /* usb connect */ | ||
193 | #define LUBBOCK_ETH_IRQ LUBBOCK_IRQ(3) | ||
194 | #define LUBBOCK_UCB1400_IRQ LUBBOCK_IRQ(4) | ||
195 | #define LUBBOCK_BB_IRQ LUBBOCK_IRQ(5) | ||
196 | #define LUBBOCK_USB_DISC_IRQ LUBBOCK_IRQ(6) /* usb disconnect */ | ||
197 | #define LUBBOCK_LAST_IRQ LUBBOCK_IRQ(6) | ||
198 | |||
199 | #define MAINSTONE_IRQ(x) (IRQ_BOARD_START + (x)) | ||
200 | #define MAINSTONE_MMC_IRQ MAINSTONE_IRQ(0) | ||
201 | #define MAINSTONE_USIM_IRQ MAINSTONE_IRQ(1) | ||
202 | #define MAINSTONE_USBC_IRQ MAINSTONE_IRQ(2) | ||
203 | #define MAINSTONE_ETHERNET_IRQ MAINSTONE_IRQ(3) | ||
204 | #define MAINSTONE_AC97_IRQ MAINSTONE_IRQ(4) | ||
205 | #define MAINSTONE_PEN_IRQ MAINSTONE_IRQ(5) | ||
206 | #define MAINSTONE_MSINS_IRQ MAINSTONE_IRQ(6) | ||
207 | #define MAINSTONE_EXBRD_IRQ MAINSTONE_IRQ(7) | ||
208 | #define MAINSTONE_S0_CD_IRQ MAINSTONE_IRQ(9) | ||
209 | #define MAINSTONE_S0_STSCHG_IRQ MAINSTONE_IRQ(10) | ||
210 | #define MAINSTONE_S0_IRQ MAINSTONE_IRQ(11) | ||
211 | #define MAINSTONE_S1_CD_IRQ MAINSTONE_IRQ(13) | ||
212 | #define MAINSTONE_S1_STSCHG_IRQ MAINSTONE_IRQ(14) | ||
213 | #define MAINSTONE_S1_IRQ MAINSTONE_IRQ(15) | ||
214 | |||
215 | /* LoCoMo Interrupts (CONFIG_SHARP_LOCOMO) */ | ||
216 | #define IRQ_LOCOMO_KEY_BASE (IRQ_BOARD_START + 0) | ||
217 | #define IRQ_LOCOMO_GPIO_BASE (IRQ_BOARD_START + 1) | ||
218 | #define IRQ_LOCOMO_LT_BASE (IRQ_BOARD_START + 2) | ||
219 | #define IRQ_LOCOMO_SPI_BASE (IRQ_BOARD_START + 3) | ||
diff --git a/include/asm-arm/arch-pxa/lubbock.h b/include/asm-arm/arch-pxa/lubbock.h new file mode 100644 index 000000000000..11ee73593fc3 --- /dev/null +++ b/include/asm-arm/arch-pxa/lubbock.h | |||
@@ -0,0 +1,40 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-pxa/lubbock.h | ||
3 | * | ||
4 | * Author: Nicolas Pitre | ||
5 | * Created: Jun 15, 2001 | ||
6 | * Copyright: MontaVista Software Inc. | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | */ | ||
12 | |||
13 | #define LUBBOCK_ETH_PHYS PXA_CS3_PHYS | ||
14 | |||
15 | #define LUBBOCK_FPGA_PHYS PXA_CS2_PHYS | ||
16 | #define LUBBOCK_FPGA_VIRT (0xf0000000) | ||
17 | #define LUB_P2V(x) ((x) - LUBBOCK_FPGA_PHYS + LUBBOCK_FPGA_VIRT) | ||
18 | #define LUB_V2P(x) ((x) - LUBBOCK_FPGA_VIRT + LUBBOCK_FPGA_PHYS) | ||
19 | |||
20 | #ifndef __ASSEMBLY__ | ||
21 | # define __LUB_REG(x) (*((volatile unsigned long *)LUB_P2V(x))) | ||
22 | #else | ||
23 | # define __LUB_REG(x) LUB_P2V(x) | ||
24 | #endif | ||
25 | |||
26 | /* FPGA register virtual addresses */ | ||
27 | #define LUB_WHOAMI __LUB_REG(LUBBOCK_FPGA_PHYS + 0x000) | ||
28 | #define LUB_HEXLED __LUB_REG(LUBBOCK_FPGA_PHYS + 0x010) | ||
29 | #define LUB_DISC_BLNK_LED __LUB_REG(LUBBOCK_FPGA_PHYS + 0x040) | ||
30 | #define LUB_CONF_SWITCHES __LUB_REG(LUBBOCK_FPGA_PHYS + 0x050) | ||
31 | #define LUB_USER_SWITCHES __LUB_REG(LUBBOCK_FPGA_PHYS + 0x060) | ||
32 | #define LUB_MISC_WR __LUB_REG(LUBBOCK_FPGA_PHYS + 0x080) | ||
33 | #define LUB_MISC_RD __LUB_REG(LUBBOCK_FPGA_PHYS + 0x090) | ||
34 | #define LUB_IRQ_MASK_EN __LUB_REG(LUBBOCK_FPGA_PHYS + 0x0c0) | ||
35 | #define LUB_IRQ_SET_CLR __LUB_REG(LUBBOCK_FPGA_PHYS + 0x0d0) | ||
36 | #define LUB_GP __LUB_REG(LUBBOCK_FPGA_PHYS + 0x100) | ||
37 | |||
38 | #ifndef __ASSEMBLY__ | ||
39 | extern void lubbock_set_misc_wr(unsigned int mask, unsigned int set); | ||
40 | #endif | ||
diff --git a/include/asm-arm/arch-pxa/mainstone.h b/include/asm-arm/arch-pxa/mainstone.h new file mode 100644 index 000000000000..14c862adcaa1 --- /dev/null +++ b/include/asm-arm/arch-pxa/mainstone.h | |||
@@ -0,0 +1,120 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-pxa/mainstone.h | ||
3 | * | ||
4 | * Author: Nicolas Pitre | ||
5 | * Created: Nov 14, 2002 | ||
6 | * Copyright: MontaVista Software Inc. | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | */ | ||
12 | |||
13 | #ifndef ASM_ARCH_MAINSTONE_H | ||
14 | #define ASM_ARCH_MAINSTONE_H | ||
15 | |||
16 | #define MST_ETH_PHYS PXA_CS4_PHYS | ||
17 | |||
18 | #define MST_FPGA_PHYS PXA_CS2_PHYS | ||
19 | #define MST_FPGA_VIRT (0xf0000000) | ||
20 | #define MST_P2V(x) ((x) - MST_FPGA_PHYS + MST_FPGA_VIRT) | ||
21 | #define MST_V2P(x) ((x) - MST_FPGA_VIRT + MST_FPGA_PHYS) | ||
22 | |||
23 | #ifndef __ASSEMBLY__ | ||
24 | # define __MST_REG(x) (*((volatile unsigned long *)MST_P2V(x))) | ||
25 | #else | ||
26 | # define __MST_REG(x) MST_P2V(x) | ||
27 | #endif | ||
28 | |||
29 | /* board level registers in the FPGA */ | ||
30 | |||
31 | #define MST_LEDDAT1 __MST_REG(0x08000010) | ||
32 | #define MST_LEDDAT2 __MST_REG(0x08000014) | ||
33 | #define MST_LEDCTRL __MST_REG(0x08000040) | ||
34 | #define MST_GPSWR __MST_REG(0x08000060) | ||
35 | #define MST_MSCWR1 __MST_REG(0x08000080) | ||
36 | #define MST_MSCWR2 __MST_REG(0x08000084) | ||
37 | #define MST_MSCWR3 __MST_REG(0x08000088) | ||
38 | #define MST_MSCRD __MST_REG(0x08000090) | ||
39 | #define MST_INTMSKENA __MST_REG(0x080000c0) | ||
40 | #define MST_INTSETCLR __MST_REG(0x080000d0) | ||
41 | #define MST_PCMCIA0 __MST_REG(0x080000e0) | ||
42 | #define MST_PCMCIA1 __MST_REG(0x080000e4) | ||
43 | |||
44 | #define MST_MSCWR1_CAMERA_ON (1 << 15) /* Camera interface power control */ | ||
45 | #define MST_MSCWR1_CAMERA_SEL (1 << 14) /* Camera interface mux control */ | ||
46 | #define MST_MSCWR1_LCD_CTL (1 << 13) /* General-purpose LCD control */ | ||
47 | #define MST_MSCWR1_MS_ON (1 << 12) /* Memory Stick power control */ | ||
48 | #define MST_MSCWR1_MMC_ON (1 << 11) /* MultiMediaCard* power control */ | ||
49 | #define MST_MSCWR1_MS_SEL (1 << 10) /* SD/MS multiplexer control */ | ||
50 | #define MST_MSCWR1_BB_SEL (1 << 9) /* PCMCIA/Baseband multiplexer */ | ||
51 | #define MST_MSCWR1_BT_ON (1 << 8) /* Bluetooth UART transceiver */ | ||
52 | #define MST_MSCWR1_BTDTR (1 << 7) /* Bluetooth UART DTR */ | ||
53 | |||
54 | #define MST_MSCWR1_IRDA_MASK (3 << 5) /* IrDA transceiver mode */ | ||
55 | #define MST_MSCWR1_IRDA_FULL (0 << 5) /* full distance power */ | ||
56 | #define MST_MSCWR1_IRDA_OFF (1 << 5) /* shutdown */ | ||
57 | #define MST_MSCWR1_IRDA_MED (2 << 5) /* 2/3 distance power */ | ||
58 | #define MST_MSCWR1_IRDA_LOW (3 << 5) /* 1/3 distance power */ | ||
59 | |||
60 | #define MST_MSCWR1_IRDA_FIR (1 << 4) /* IrDA transceiver SIR/FIR */ | ||
61 | #define MST_MSCWR1_GREENLED (1 << 3) /* LED D1 control */ | ||
62 | #define MST_MSCWR1_PDC_CTL (1 << 2) /* reserved */ | ||
63 | #define MST_MSCWR1_MTR_ON (1 << 1) /* Silent alert motor */ | ||
64 | #define MST_MSCWR1_SYSRESET (1 << 0) /* System reset */ | ||
65 | |||
66 | #define MST_MSCWR2_USB_OTG_RST (1 << 6) /* USB On The Go reset */ | ||
67 | #define MST_MSCWR2_USB_OTG_SEL (1 << 5) /* USB On The Go control */ | ||
68 | #define MST_MSCWR2_nUSBC_SC (1 << 4) /* USB client soft connect control */ | ||
69 | #define MST_MSCWR2_I2S_SPKROFF (1 << 3) /* I2S CODEC amplifier control */ | ||
70 | #define MST_MSCWR2_AC97_SPKROFF (1 << 2) /* AC97 CODEC amplifier control */ | ||
71 | #define MST_MSCWR2_RADIO_PWR (1 << 1) /* Radio module power control */ | ||
72 | #define MST_MSCWR2_RADIO_WAKE (1 << 0) /* Radio module wake-up signal */ | ||
73 | |||
74 | #define MST_MSCWR3_GPIO_RESET_EN (1 << 2) /* Enable GPIO Reset */ | ||
75 | #define MST_MSCWR3_GPIO_RESET (1 << 1) /* Initiate a GPIO Reset */ | ||
76 | #define MST_MSCWR3_COMMS_SW_RESET (1 << 0) /* Communications Processor Reset Control */ | ||
77 | |||
78 | #define MST_MSCRD_nPENIRQ (1 << 9) /* ADI7873* nPENIRQ signal */ | ||
79 | #define MST_MSCRD_nMEMSTK_CD (1 << 8) /* Memory Stick detection signal */ | ||
80 | #define MST_MSCRD_nMMC_CD (1 << 7) /* SD/MMC card detection signal */ | ||
81 | #define MST_MSCRD_nUSIM_CD (1 << 6) /* USIM card detection signal */ | ||
82 | #define MST_MSCRD_USB_CBL (1 << 5) /* USB client cable status */ | ||
83 | #define MST_MSCRD_TS_BUSY (1 << 4) /* ADI7873 busy */ | ||
84 | #define MST_MSCRD_BTDSR (1 << 3) /* Bluetooth UART DSR */ | ||
85 | #define MST_MSCRD_BTRI (1 << 2) /* Bluetooth UART Ring Indicator */ | ||
86 | #define MST_MSCRD_BTDCD (1 << 1) /* Bluetooth UART DCD */ | ||
87 | #define MST_MSCRD_nMMC_WP (1 << 0) /* SD/MMC write-protect status */ | ||
88 | |||
89 | #define MST_INT_S1_IRQ (1 << 15) /* PCMCIA socket 1 IRQ */ | ||
90 | #define MST_INT_S1_STSCHG (1 << 14) /* PCMCIA socket 1 status changed */ | ||
91 | #define MST_INT_S1_CD (1 << 13) /* PCMCIA socket 1 card detection */ | ||
92 | #define MST_INT_S0_IRQ (1 << 11) /* PCMCIA socket 0 IRQ */ | ||
93 | #define MST_INT_S0_STSCHG (1 << 10) /* PCMCIA socket 0 status changed */ | ||
94 | #define MST_INT_S0_CD (1 << 9) /* PCMCIA socket 0 card detection */ | ||
95 | #define MST_INT_nEXBRD_INT (1 << 7) /* Expansion board IRQ */ | ||
96 | #define MST_INT_MSINS (1 << 6) /* Memory Stick* detection */ | ||
97 | #define MST_INT_PENIRQ (1 << 5) /* ADI7873* touch-screen IRQ */ | ||
98 | #define MST_INT_AC97 (1 << 4) /* AC'97 CODEC IRQ */ | ||
99 | #define MST_INT_ETHERNET (1 << 3) /* Ethernet controller IRQ */ | ||
100 | #define MST_INT_USBC (1 << 2) /* USB client cable detection IRQ */ | ||
101 | #define MST_INT_USIM (1 << 1) /* USIM card detection IRQ */ | ||
102 | #define MST_INT_MMC (1 << 0) /* MMC/SD card detection IRQ */ | ||
103 | |||
104 | #define MST_PCMCIA_nIRQ (1 << 10) /* IRQ / ready signal */ | ||
105 | #define MST_PCMCIA_nSPKR_BVD2 (1 << 9) /* VDD sense / digital speaker */ | ||
106 | #define MST_PCMCIA_nSTSCHG_BVD1 (1 << 8) /* VDD sense / card status changed */ | ||
107 | #define MST_PCMCIA_nVS2 (1 << 7) /* VSS voltage sense */ | ||
108 | #define MST_PCMCIA_nVS1 (1 << 6) /* VSS voltage sense */ | ||
109 | #define MST_PCMCIA_nCD (1 << 5) /* Card detection signal */ | ||
110 | #define MST_PCMCIA_RESET (1 << 4) /* Card reset signal */ | ||
111 | #define MST_PCMCIA_PWR_MASK (0x000f) /* MAX1602 power-supply controls */ | ||
112 | |||
113 | #define MST_PCMCIA_PWR_VPP_0 0x0 /* voltage VPP = 0V */ | ||
114 | #define MST_PCMCIA_PWR_VPP_120 0x2 /* voltage VPP = 12V*/ | ||
115 | #define MST_PCMCIA_PWR_VPP_VCC 0x1 /* voltage VPP = VCC */ | ||
116 | #define MST_PCMCIA_PWR_VCC_0 0x0 /* voltage VCC = 0V */ | ||
117 | #define MST_PCMCIA_PWR_VCC_33 0x8 /* voltage VCC = 3.3V */ | ||
118 | #define MST_PCMCIA_PWR_VCC_50 0x4 /* voltage VCC = 5.0V */ | ||
119 | |||
120 | #endif | ||
diff --git a/include/asm-arm/arch-pxa/memory.h b/include/asm-arm/arch-pxa/memory.h new file mode 100644 index 000000000000..217a80b820ff --- /dev/null +++ b/include/asm-arm/arch-pxa/memory.h | |||
@@ -0,0 +1,76 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-pxa/memory.h | ||
3 | * | ||
4 | * Author: Nicolas Pitre | ||
5 | * Copyright: (C) 2001 MontaVista Software Inc. | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License version 2 as | ||
9 | * published by the Free Software Foundation. | ||
10 | */ | ||
11 | |||
12 | #ifndef __ASM_ARCH_MEMORY_H | ||
13 | #define __ASM_ARCH_MEMORY_H | ||
14 | |||
15 | /* | ||
16 | * Physical DRAM offset. | ||
17 | */ | ||
18 | #define PHYS_OFFSET (0xa0000000UL) | ||
19 | |||
20 | /* | ||
21 | * Virtual view <-> DMA view memory address translations | ||
22 | * virt_to_bus: Used to translate the virtual address to an | ||
23 | * address suitable to be passed to set_dma_addr | ||
24 | * bus_to_virt: Used to convert an address for DMA operations | ||
25 | * to an address that the kernel can use. | ||
26 | */ | ||
27 | #define __virt_to_bus(x) __virt_to_phys(x) | ||
28 | #define __bus_to_virt(x) __phys_to_virt(x) | ||
29 | |||
30 | #ifdef CONFIG_DISCONTIGMEM | ||
31 | /* | ||
32 | * The nodes are matched with the physical SDRAM banks as follows: | ||
33 | * | ||
34 | * node 0: 0xa0000000-0xa3ffffff --> 0xc0000000-0xc3ffffff | ||
35 | * node 1: 0xa4000000-0xa7ffffff --> 0xc4000000-0xc7ffffff | ||
36 | * node 2: 0xa8000000-0xabffffff --> 0xc8000000-0xcbffffff | ||
37 | * node 3: 0xac000000-0xafffffff --> 0xcc000000-0xcfffffff | ||
38 | */ | ||
39 | |||
40 | /* | ||
41 | * Given a kernel address, find the home node of the underlying memory. | ||
42 | */ | ||
43 | #define KVADDR_TO_NID(addr) (((unsigned long)(addr) - PAGE_OFFSET) >> 26) | ||
44 | |||
45 | /* | ||
46 | * Given a page frame number, convert it to a node id. | ||
47 | */ | ||
48 | #define PFN_TO_NID(pfn) (((pfn) - PHYS_PFN_OFFSET) >> (26 - PAGE_SHIFT)) | ||
49 | |||
50 | /* | ||
51 | * Given a kaddr, ADDR_TO_MAPBASE finds the owning node of the memory | ||
52 | * and returns the mem_map of that node. | ||
53 | */ | ||
54 | #define ADDR_TO_MAPBASE(kaddr) NODE_MEM_MAP(KVADDR_TO_NID(kaddr)) | ||
55 | |||
56 | /* | ||
57 | * Given a page frame number, find the owning node of the memory | ||
58 | * and returns the mem_map of that node. | ||
59 | */ | ||
60 | #define PFN_TO_MAPBASE(pfn) NODE_MEM_MAP(PFN_TO_NID(pfn)) | ||
61 | |||
62 | /* | ||
63 | * Given a kaddr, LOCAL_MEM_MAP finds the owning node of the memory | ||
64 | * and returns the index corresponding to the appropriate page in the | ||
65 | * node's mem_map. | ||
66 | */ | ||
67 | #define LOCAL_MAP_NR(addr) \ | ||
68 | (((unsigned long)(addr) & 0x03ffffff) >> PAGE_SHIFT) | ||
69 | |||
70 | #else | ||
71 | |||
72 | #define PFN_TO_NID(addr) (0) | ||
73 | |||
74 | #endif | ||
75 | |||
76 | #endif | ||
diff --git a/include/asm-arm/arch-pxa/mmc.h b/include/asm-arm/arch-pxa/mmc.h new file mode 100644 index 000000000000..7492ea7ea614 --- /dev/null +++ b/include/asm-arm/arch-pxa/mmc.h | |||
@@ -0,0 +1,19 @@ | |||
1 | #ifndef ASMARM_ARCH_MMC_H | ||
2 | #define ASMARM_ARCH_MMC_H | ||
3 | |||
4 | #include <linux/mmc/protocol.h> | ||
5 | #include <linux/interrupt.h> | ||
6 | |||
7 | struct device; | ||
8 | struct mmc_host; | ||
9 | |||
10 | struct pxamci_platform_data { | ||
11 | unsigned int ocr_mask; /* available voltages */ | ||
12 | int (*init)(struct device *, irqreturn_t (*)(int, void *, struct pt_regs *), void *); | ||
13 | void (*setpower)(struct device *, unsigned int); | ||
14 | void (*exit)(struct device *, void *); | ||
15 | }; | ||
16 | |||
17 | extern void pxa_set_mci_info(struct pxamci_platform_data *info); | ||
18 | |||
19 | #endif | ||
diff --git a/include/asm-arm/arch-pxa/param.h b/include/asm-arm/arch-pxa/param.h new file mode 100644 index 000000000000..3197d82d7573 --- /dev/null +++ b/include/asm-arm/arch-pxa/param.h | |||
@@ -0,0 +1,3 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-pxa/param.h | ||
3 | */ | ||
diff --git a/include/asm-arm/arch-pxa/poodle.h b/include/asm-arm/arch-pxa/poodle.h new file mode 100644 index 000000000000..58bda9d571a5 --- /dev/null +++ b/include/asm-arm/arch-pxa/poodle.h | |||
@@ -0,0 +1,70 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-pxa/poodle.h | ||
3 | * | ||
4 | * May be copied or modified under the terms of the GNU General Public | ||
5 | * License. See linux/COPYING for more information. | ||
6 | * | ||
7 | * Based on: | ||
8 | * linux/include/asm-arm/arch-sa1100/collie.h | ||
9 | * | ||
10 | * ChangeLog: | ||
11 | * 04-06-2001 Lineo Japan, Inc. | ||
12 | * 04-16-2001 SHARP Corporation | ||
13 | * Update to 2.6 John Lenz | ||
14 | */ | ||
15 | #ifndef __ASM_ARCH_POODLE_H | ||
16 | #define __ASM_ARCH_POODLE_H 1 | ||
17 | |||
18 | /* | ||
19 | * GPIOs | ||
20 | */ | ||
21 | /* PXA GPIOs */ | ||
22 | #define POODLE_GPIO_ON_KEY (0) | ||
23 | #define POODLE_GPIO_AC_IN (1) | ||
24 | #define POODLE_GPIO_CO 16 | ||
25 | #define POODLE_GPIO_TP_INT (5) | ||
26 | #define POODLE_GPIO_WAKEUP (11) /* change battery */ | ||
27 | #define POODLE_GPIO_GA_INT (10) | ||
28 | #define POODLE_GPIO_IR_ON (22) | ||
29 | #define POODLE_GPIO_HP_IN (4) | ||
30 | #define POODLE_GPIO_CF_IRQ (17) | ||
31 | #define POODLE_GPIO_CF_CD (14) | ||
32 | #define POODLE_GPIO_CF_STSCHG (14) | ||
33 | #define POODLE_GPIO_SD_PWR (33) | ||
34 | #define POODLE_GPIO_nSD_CLK (6) | ||
35 | #define POODLE_GPIO_nSD_WP (7) | ||
36 | #define POODLE_GPIO_nSD_INT (8) | ||
37 | #define POODLE_GPIO_nSD_DETECT (9) | ||
38 | #define POODLE_GPIO_MAIN_BAT_LOW (13) | ||
39 | #define POODLE_GPIO_BAT_COVER (13) | ||
40 | #define POODLE_GPIO_ADC_TEMP_ON (21) | ||
41 | #define POODLE_GPIO_BYPASS_ON (36) | ||
42 | #define POODLE_GPIO_CHRG_ON (38) | ||
43 | #define POODLE_GPIO_CHRG_FULL (16) | ||
44 | |||
45 | /* PXA GPIOs */ | ||
46 | #define POODLE_IRQ_GPIO_ON_KEY IRQ_GPIO0 | ||
47 | #define POODLE_IRQ_GPIO_AC_IN IRQ_GPIO1 | ||
48 | #define POODLE_IRQ_GPIO_HP_IN IRQ_GPIO4 | ||
49 | #define POODLE_IRQ_GPIO_CO IRQ_GPIO16 | ||
50 | #define POODLE_IRQ_GPIO_TP_INT IRQ_GPIO5 | ||
51 | #define POODLE_IRQ_GPIO_WAKEUP IRQ_GPIO11 | ||
52 | #define POODLE_IRQ_GPIO_GA_INT IRQ_GPIO10 | ||
53 | #define POODLE_IRQ_GPIO_CF_IRQ IRQ_GPIO17 | ||
54 | #define POODLE_IRQ_GPIO_CF_CD IRQ_GPIO14 | ||
55 | #define POODLE_IRQ_GPIO_nSD_INT IRQ_GPIO8 | ||
56 | #define POODLE_IRQ_GPIO_nSD_DETECT IRQ_GPIO9 | ||
57 | #define POODLE_IRQ_GPIO_MAIN_BAT_LOW IRQ_GPIO13 | ||
58 | |||
59 | /* SCOOP GPIOs */ | ||
60 | #define POODLE_SCOOP_CHARGE_ON SCOOP_GPCR_PA11 | ||
61 | #define POODLE_SCOOP_CP401 SCOOP_GPCR_PA13 | ||
62 | #define POODLE_SCOOP_VPEN SCOOP_GPCR_PA18 | ||
63 | #define POODLE_SCOOP_L_PCLK SCOOP_GPCR_PA20 | ||
64 | #define POODLE_SCOOP_L_LCLK SCOOP_GPCR_PA21 | ||
65 | #define POODLE_SCOOP_HS_OUT SCOOP_GPCR_PA22 | ||
66 | |||
67 | #define POODLE_SCOOP_IO_DIR ( POODLE_SCOOP_VPEN | POODLE_SCOOP_HS_OUT ) | ||
68 | #define POODLE_SCOOP_IO_OUT ( 0 ) | ||
69 | |||
70 | #endif /* __ASM_ARCH_POODLE_H */ | ||
diff --git a/include/asm-arm/arch-pxa/pxa-regs.h b/include/asm-arm/arch-pxa/pxa-regs.h new file mode 100644 index 000000000000..39741d3c9a34 --- /dev/null +++ b/include/asm-arm/arch-pxa/pxa-regs.h | |||
@@ -0,0 +1,2251 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-pxa/pxa-regs.h | ||
3 | * | ||
4 | * Author: Nicolas Pitre | ||
5 | * Created: Jun 15, 2001 | ||
6 | * Copyright: MontaVista Software Inc. | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | */ | ||
12 | |||
13 | #ifndef __PXA_REGS_H | ||
14 | #define __PXA_REGS_H | ||
15 | |||
16 | #include <linux/config.h> | ||
17 | |||
18 | /* | ||
19 | * PXA Chip selects | ||
20 | */ | ||
21 | |||
22 | #define PXA_CS0_PHYS 0x00000000 | ||
23 | #define PXA_CS1_PHYS 0x04000000 | ||
24 | #define PXA_CS2_PHYS 0x08000000 | ||
25 | #define PXA_CS3_PHYS 0x0C000000 | ||
26 | #define PXA_CS4_PHYS 0x10000000 | ||
27 | #define PXA_CS5_PHYS 0x14000000 | ||
28 | |||
29 | |||
30 | /* | ||
31 | * Personal Computer Memory Card International Association (PCMCIA) sockets | ||
32 | */ | ||
33 | |||
34 | #define PCMCIAPrtSp 0x04000000 /* PCMCIA Partition Space [byte] */ | ||
35 | #define PCMCIASp (4*PCMCIAPrtSp) /* PCMCIA Space [byte] */ | ||
36 | #define PCMCIAIOSp PCMCIAPrtSp /* PCMCIA I/O Space [byte] */ | ||
37 | #define PCMCIAAttrSp PCMCIAPrtSp /* PCMCIA Attribute Space [byte] */ | ||
38 | #define PCMCIAMemSp PCMCIAPrtSp /* PCMCIA Memory Space [byte] */ | ||
39 | |||
40 | #define PCMCIA0Sp PCMCIASp /* PCMCIA 0 Space [byte] */ | ||
41 | #define PCMCIA0IOSp PCMCIAIOSp /* PCMCIA 0 I/O Space [byte] */ | ||
42 | #define PCMCIA0AttrSp PCMCIAAttrSp /* PCMCIA 0 Attribute Space [byte] */ | ||
43 | #define PCMCIA0MemSp PCMCIAMemSp /* PCMCIA 0 Memory Space [byte] */ | ||
44 | |||
45 | #define PCMCIA1Sp PCMCIASp /* PCMCIA 1 Space [byte] */ | ||
46 | #define PCMCIA1IOSp PCMCIAIOSp /* PCMCIA 1 I/O Space [byte] */ | ||
47 | #define PCMCIA1AttrSp PCMCIAAttrSp /* PCMCIA 1 Attribute Space [byte] */ | ||
48 | #define PCMCIA1MemSp PCMCIAMemSp /* PCMCIA 1 Memory Space [byte] */ | ||
49 | |||
50 | #define _PCMCIA(Nb) /* PCMCIA [0..1] */ \ | ||
51 | (0x20000000 + (Nb)*PCMCIASp) | ||
52 | #define _PCMCIAIO(Nb) _PCMCIA (Nb) /* PCMCIA I/O [0..1] */ | ||
53 | #define _PCMCIAAttr(Nb) /* PCMCIA Attribute [0..1] */ \ | ||
54 | (_PCMCIA (Nb) + 2*PCMCIAPrtSp) | ||
55 | #define _PCMCIAMem(Nb) /* PCMCIA Memory [0..1] */ \ | ||
56 | (_PCMCIA (Nb) + 3*PCMCIAPrtSp) | ||
57 | |||
58 | #define _PCMCIA0 _PCMCIA (0) /* PCMCIA 0 */ | ||
59 | #define _PCMCIA0IO _PCMCIAIO (0) /* PCMCIA 0 I/O */ | ||
60 | #define _PCMCIA0Attr _PCMCIAAttr (0) /* PCMCIA 0 Attribute */ | ||
61 | #define _PCMCIA0Mem _PCMCIAMem (0) /* PCMCIA 0 Memory */ | ||
62 | |||
63 | #define _PCMCIA1 _PCMCIA (1) /* PCMCIA 1 */ | ||
64 | #define _PCMCIA1IO _PCMCIAIO (1) /* PCMCIA 1 I/O */ | ||
65 | #define _PCMCIA1Attr _PCMCIAAttr (1) /* PCMCIA 1 Attribute */ | ||
66 | #define _PCMCIA1Mem _PCMCIAMem (1) /* PCMCIA 1 Memory */ | ||
67 | |||
68 | |||
69 | |||
70 | /* | ||
71 | * DMA Controller | ||
72 | */ | ||
73 | |||
74 | #define DCSR0 __REG(0x40000000) /* DMA Control / Status Register for Channel 0 */ | ||
75 | #define DCSR1 __REG(0x40000004) /* DMA Control / Status Register for Channel 1 */ | ||
76 | #define DCSR2 __REG(0x40000008) /* DMA Control / Status Register for Channel 2 */ | ||
77 | #define DCSR3 __REG(0x4000000c) /* DMA Control / Status Register for Channel 3 */ | ||
78 | #define DCSR4 __REG(0x40000010) /* DMA Control / Status Register for Channel 4 */ | ||
79 | #define DCSR5 __REG(0x40000014) /* DMA Control / Status Register for Channel 5 */ | ||
80 | #define DCSR6 __REG(0x40000018) /* DMA Control / Status Register for Channel 6 */ | ||
81 | #define DCSR7 __REG(0x4000001c) /* DMA Control / Status Register for Channel 7 */ | ||
82 | #define DCSR8 __REG(0x40000020) /* DMA Control / Status Register for Channel 8 */ | ||
83 | #define DCSR9 __REG(0x40000024) /* DMA Control / Status Register for Channel 9 */ | ||
84 | #define DCSR10 __REG(0x40000028) /* DMA Control / Status Register for Channel 10 */ | ||
85 | #define DCSR11 __REG(0x4000002c) /* DMA Control / Status Register for Channel 11 */ | ||
86 | #define DCSR12 __REG(0x40000030) /* DMA Control / Status Register for Channel 12 */ | ||
87 | #define DCSR13 __REG(0x40000034) /* DMA Control / Status Register for Channel 13 */ | ||
88 | #define DCSR14 __REG(0x40000038) /* DMA Control / Status Register for Channel 14 */ | ||
89 | #define DCSR15 __REG(0x4000003c) /* DMA Control / Status Register for Channel 15 */ | ||
90 | |||
91 | #define DCSR(x) __REG2(0x40000000, (x) << 2) | ||
92 | |||
93 | #define DCSR_RUN (1 << 31) /* Run Bit (read / write) */ | ||
94 | #define DCSR_NODESC (1 << 30) /* No-Descriptor Fetch (read / write) */ | ||
95 | #define DCSR_STOPIRQEN (1 << 29) /* Stop Interrupt Enable (read / write) */ | ||
96 | #ifdef CONFIG_PXA27x | ||
97 | #define DCSR_EORIRQEN (1 << 28) /* End of Receive Interrupt Enable (R/W) */ | ||
98 | #define DCSR_EORJMPEN (1 << 27) /* Jump to next descriptor on EOR */ | ||
99 | #define DCSR_EORSTOPEN (1 << 26) /* STOP on an EOR */ | ||
100 | #define DCSR_SETCMPST (1 << 25) /* Set Descriptor Compare Status */ | ||
101 | #define DCSR_CLRCMPST (1 << 24) /* Clear Descriptor Compare Status */ | ||
102 | #define DCSR_CMPST (1 << 10) /* The Descriptor Compare Status */ | ||
103 | #define DCSR_ENRINTR (1 << 9) /* The end of Receive */ | ||
104 | #endif | ||
105 | #define DCSR_REQPEND (1 << 8) /* Request Pending (read-only) */ | ||
106 | #define DCSR_STOPSTATE (1 << 3) /* Stop State (read-only) */ | ||
107 | #define DCSR_ENDINTR (1 << 2) /* End Interrupt (read / write) */ | ||
108 | #define DCSR_STARTINTR (1 << 1) /* Start Interrupt (read / write) */ | ||
109 | #define DCSR_BUSERR (1 << 0) /* Bus Error Interrupt (read / write) */ | ||
110 | |||
111 | #define DINT __REG(0x400000f0) /* DMA Interrupt Register */ | ||
112 | |||
113 | #define DRCMR(n) __REG2(0x40000100, (n)<<2) | ||
114 | #define DRCMR0 __REG(0x40000100) /* Request to Channel Map Register for DREQ 0 */ | ||
115 | #define DRCMR1 __REG(0x40000104) /* Request to Channel Map Register for DREQ 1 */ | ||
116 | #define DRCMR2 __REG(0x40000108) /* Request to Channel Map Register for I2S receive Request */ | ||
117 | #define DRCMR3 __REG(0x4000010c) /* Request to Channel Map Register for I2S transmit Request */ | ||
118 | #define DRCMR4 __REG(0x40000110) /* Request to Channel Map Register for BTUART receive Request */ | ||
119 | #define DRCMR5 __REG(0x40000114) /* Request to Channel Map Register for BTUART transmit Request. */ | ||
120 | #define DRCMR6 __REG(0x40000118) /* Request to Channel Map Register for FFUART receive Request */ | ||
121 | #define DRCMR7 __REG(0x4000011c) /* Request to Channel Map Register for FFUART transmit Request */ | ||
122 | #define DRCMR8 __REG(0x40000120) /* Request to Channel Map Register for AC97 microphone Request */ | ||
123 | #define DRCMR9 __REG(0x40000124) /* Request to Channel Map Register for AC97 modem receive Request */ | ||
124 | #define DRCMR10 __REG(0x40000128) /* Request to Channel Map Register for AC97 modem transmit Request */ | ||
125 | #define DRCMR11 __REG(0x4000012c) /* Request to Channel Map Register for AC97 audio receive Request */ | ||
126 | #define DRCMR12 __REG(0x40000130) /* Request to Channel Map Register for AC97 audio transmit Request */ | ||
127 | #define DRCMR13 __REG(0x40000134) /* Request to Channel Map Register for SSP receive Request */ | ||
128 | #define DRCMR14 __REG(0x40000138) /* Request to Channel Map Register for SSP transmit Request */ | ||
129 | #define DRCMR15 __REG(0x4000013c) /* Reserved */ | ||
130 | #define DRCMR16 __REG(0x40000140) /* Reserved */ | ||
131 | #define DRCMR17 __REG(0x40000144) /* Request to Channel Map Register for ICP receive Request */ | ||
132 | #define DRCMR18 __REG(0x40000148) /* Request to Channel Map Register for ICP transmit Request */ | ||
133 | #define DRCMR19 __REG(0x4000014c) /* Request to Channel Map Register for STUART receive Request */ | ||
134 | #define DRCMR20 __REG(0x40000150) /* Request to Channel Map Register for STUART transmit Request */ | ||
135 | #define DRCMR21 __REG(0x40000154) /* Request to Channel Map Register for MMC receive Request */ | ||
136 | #define DRCMR22 __REG(0x40000158) /* Request to Channel Map Register for MMC transmit Request */ | ||
137 | #define DRCMR23 __REG(0x4000015c) /* Reserved */ | ||
138 | #define DRCMR24 __REG(0x40000160) /* Reserved */ | ||
139 | #define DRCMR25 __REG(0x40000164) /* Request to Channel Map Register for USB endpoint 1 Request */ | ||
140 | #define DRCMR26 __REG(0x40000168) /* Request to Channel Map Register for USB endpoint 2 Request */ | ||
141 | #define DRCMR27 __REG(0x4000016C) /* Request to Channel Map Register for USB endpoint 3 Request */ | ||
142 | #define DRCMR28 __REG(0x40000170) /* Request to Channel Map Register for USB endpoint 4 Request */ | ||
143 | #define DRCMR29 __REG(0x40000174) /* Reserved */ | ||
144 | #define DRCMR30 __REG(0x40000178) /* Request to Channel Map Register for USB endpoint 6 Request */ | ||
145 | #define DRCMR31 __REG(0x4000017C) /* Request to Channel Map Register for USB endpoint 7 Request */ | ||
146 | #define DRCMR32 __REG(0x40000180) /* Request to Channel Map Register for USB endpoint 8 Request */ | ||
147 | #define DRCMR33 __REG(0x40000184) /* Request to Channel Map Register for USB endpoint 9 Request */ | ||
148 | #define DRCMR34 __REG(0x40000188) /* Reserved */ | ||
149 | #define DRCMR35 __REG(0x4000018C) /* Request to Channel Map Register for USB endpoint 11 Request */ | ||
150 | #define DRCMR36 __REG(0x40000190) /* Request to Channel Map Register for USB endpoint 12 Request */ | ||
151 | #define DRCMR37 __REG(0x40000194) /* Request to Channel Map Register for USB endpoint 13 Request */ | ||
152 | #define DRCMR38 __REG(0x40000198) /* Request to Channel Map Register for USB endpoint 14 Request */ | ||
153 | #define DRCMR39 __REG(0x4000019C) /* Reserved */ | ||
154 | |||
155 | #define DRCMR68 __REG(0x40001110) /* Request to Channel Map Register for Camera FIFO 0 Request */ | ||
156 | #define DRCMR69 __REG(0x40001114) /* Request to Channel Map Register for Camera FIFO 1 Request */ | ||
157 | #define DRCMR70 __REG(0x40001118) /* Request to Channel Map Register for Camera FIFO 2 Request */ | ||
158 | |||
159 | #define DRCMRRXSADR DRCMR2 | ||
160 | #define DRCMRTXSADR DRCMR3 | ||
161 | #define DRCMRRXBTRBR DRCMR4 | ||
162 | #define DRCMRTXBTTHR DRCMR5 | ||
163 | #define DRCMRRXFFRBR DRCMR6 | ||
164 | #define DRCMRTXFFTHR DRCMR7 | ||
165 | #define DRCMRRXMCDR DRCMR8 | ||
166 | #define DRCMRRXMODR DRCMR9 | ||
167 | #define DRCMRTXMODR DRCMR10 | ||
168 | #define DRCMRRXPCDR DRCMR11 | ||
169 | #define DRCMRTXPCDR DRCMR12 | ||
170 | #define DRCMRRXSSDR DRCMR13 | ||
171 | #define DRCMRTXSSDR DRCMR14 | ||
172 | #define DRCMRRXSS2DR DRCMR15 | ||
173 | #define DRCMRTXSS2DR DRCMR16 | ||
174 | #define DRCMRRXICDR DRCMR17 | ||
175 | #define DRCMRTXICDR DRCMR18 | ||
176 | #define DRCMRRXSTRBR DRCMR19 | ||
177 | #define DRCMRTXSTTHR DRCMR20 | ||
178 | #define DRCMRRXMMC DRCMR21 | ||
179 | #define DRCMRTXMMC DRCMR22 | ||
180 | #define DRCMRRXSS3DR DRCMR66 | ||
181 | #define DRCMRTXSS3DR DRCMR67 | ||
182 | #define DRCMRUDC(x) DRCMR((x) + 24) | ||
183 | |||
184 | #define DRCMR_MAPVLD (1 << 7) /* Map Valid (read / write) */ | ||
185 | #define DRCMR_CHLNUM 0x1f /* mask for Channel Number (read / write) */ | ||
186 | |||
187 | #define DDADR0 __REG(0x40000200) /* DMA Descriptor Address Register Channel 0 */ | ||
188 | #define DSADR0 __REG(0x40000204) /* DMA Source Address Register Channel 0 */ | ||
189 | #define DTADR0 __REG(0x40000208) /* DMA Target Address Register Channel 0 */ | ||
190 | #define DCMD0 __REG(0x4000020c) /* DMA Command Address Register Channel 0 */ | ||
191 | #define DDADR1 __REG(0x40000210) /* DMA Descriptor Address Register Channel 1 */ | ||
192 | #define DSADR1 __REG(0x40000214) /* DMA Source Address Register Channel 1 */ | ||
193 | #define DTADR1 __REG(0x40000218) /* DMA Target Address Register Channel 1 */ | ||
194 | #define DCMD1 __REG(0x4000021c) /* DMA Command Address Register Channel 1 */ | ||
195 | #define DDADR2 __REG(0x40000220) /* DMA Descriptor Address Register Channel 2 */ | ||
196 | #define DSADR2 __REG(0x40000224) /* DMA Source Address Register Channel 2 */ | ||
197 | #define DTADR2 __REG(0x40000228) /* DMA Target Address Register Channel 2 */ | ||
198 | #define DCMD2 __REG(0x4000022c) /* DMA Command Address Register Channel 2 */ | ||
199 | #define DDADR3 __REG(0x40000230) /* DMA Descriptor Address Register Channel 3 */ | ||
200 | #define DSADR3 __REG(0x40000234) /* DMA Source Address Register Channel 3 */ | ||
201 | #define DTADR3 __REG(0x40000238) /* DMA Target Address Register Channel 3 */ | ||
202 | #define DCMD3 __REG(0x4000023c) /* DMA Command Address Register Channel 3 */ | ||
203 | #define DDADR4 __REG(0x40000240) /* DMA Descriptor Address Register Channel 4 */ | ||
204 | #define DSADR4 __REG(0x40000244) /* DMA Source Address Register Channel 4 */ | ||
205 | #define DTADR4 __REG(0x40000248) /* DMA Target Address Register Channel 4 */ | ||
206 | #define DCMD4 __REG(0x4000024c) /* DMA Command Address Register Channel 4 */ | ||
207 | #define DDADR5 __REG(0x40000250) /* DMA Descriptor Address Register Channel 5 */ | ||
208 | #define DSADR5 __REG(0x40000254) /* DMA Source Address Register Channel 5 */ | ||
209 | #define DTADR5 __REG(0x40000258) /* DMA Target Address Register Channel 5 */ | ||
210 | #define DCMD5 __REG(0x4000025c) /* DMA Command Address Register Channel 5 */ | ||
211 | #define DDADR6 __REG(0x40000260) /* DMA Descriptor Address Register Channel 6 */ | ||
212 | #define DSADR6 __REG(0x40000264) /* DMA Source Address Register Channel 6 */ | ||
213 | #define DTADR6 __REG(0x40000268) /* DMA Target Address Register Channel 6 */ | ||
214 | #define DCMD6 __REG(0x4000026c) /* DMA Command Address Register Channel 6 */ | ||
215 | #define DDADR7 __REG(0x40000270) /* DMA Descriptor Address Register Channel 7 */ | ||
216 | #define DSADR7 __REG(0x40000274) /* DMA Source Address Register Channel 7 */ | ||
217 | #define DTADR7 __REG(0x40000278) /* DMA Target Address Register Channel 7 */ | ||
218 | #define DCMD7 __REG(0x4000027c) /* DMA Command Address Register Channel 7 */ | ||
219 | #define DDADR8 __REG(0x40000280) /* DMA Descriptor Address Register Channel 8 */ | ||
220 | #define DSADR8 __REG(0x40000284) /* DMA Source Address Register Channel 8 */ | ||
221 | #define DTADR8 __REG(0x40000288) /* DMA Target Address Register Channel 8 */ | ||
222 | #define DCMD8 __REG(0x4000028c) /* DMA Command Address Register Channel 8 */ | ||
223 | #define DDADR9 __REG(0x40000290) /* DMA Descriptor Address Register Channel 9 */ | ||
224 | #define DSADR9 __REG(0x40000294) /* DMA Source Address Register Channel 9 */ | ||
225 | #define DTADR9 __REG(0x40000298) /* DMA Target Address Register Channel 9 */ | ||
226 | #define DCMD9 __REG(0x4000029c) /* DMA Command Address Register Channel 9 */ | ||
227 | #define DDADR10 __REG(0x400002a0) /* DMA Descriptor Address Register Channel 10 */ | ||
228 | #define DSADR10 __REG(0x400002a4) /* DMA Source Address Register Channel 10 */ | ||
229 | #define DTADR10 __REG(0x400002a8) /* DMA Target Address Register Channel 10 */ | ||
230 | #define DCMD10 __REG(0x400002ac) /* DMA Command Address Register Channel 10 */ | ||
231 | #define DDADR11 __REG(0x400002b0) /* DMA Descriptor Address Register Channel 11 */ | ||
232 | #define DSADR11 __REG(0x400002b4) /* DMA Source Address Register Channel 11 */ | ||
233 | #define DTADR11 __REG(0x400002b8) /* DMA Target Address Register Channel 11 */ | ||
234 | #define DCMD11 __REG(0x400002bc) /* DMA Command Address Register Channel 11 */ | ||
235 | #define DDADR12 __REG(0x400002c0) /* DMA Descriptor Address Register Channel 12 */ | ||
236 | #define DSADR12 __REG(0x400002c4) /* DMA Source Address Register Channel 12 */ | ||
237 | #define DTADR12 __REG(0x400002c8) /* DMA Target Address Register Channel 12 */ | ||
238 | #define DCMD12 __REG(0x400002cc) /* DMA Command Address Register Channel 12 */ | ||
239 | #define DDADR13 __REG(0x400002d0) /* DMA Descriptor Address Register Channel 13 */ | ||
240 | #define DSADR13 __REG(0x400002d4) /* DMA Source Address Register Channel 13 */ | ||
241 | #define DTADR13 __REG(0x400002d8) /* DMA Target Address Register Channel 13 */ | ||
242 | #define DCMD13 __REG(0x400002dc) /* DMA Command Address Register Channel 13 */ | ||
243 | #define DDADR14 __REG(0x400002e0) /* DMA Descriptor Address Register Channel 14 */ | ||
244 | #define DSADR14 __REG(0x400002e4) /* DMA Source Address Register Channel 14 */ | ||
245 | #define DTADR14 __REG(0x400002e8) /* DMA Target Address Register Channel 14 */ | ||
246 | #define DCMD14 __REG(0x400002ec) /* DMA Command Address Register Channel 14 */ | ||
247 | #define DDADR15 __REG(0x400002f0) /* DMA Descriptor Address Register Channel 15 */ | ||
248 | #define DSADR15 __REG(0x400002f4) /* DMA Source Address Register Channel 15 */ | ||
249 | #define DTADR15 __REG(0x400002f8) /* DMA Target Address Register Channel 15 */ | ||
250 | #define DCMD15 __REG(0x400002fc) /* DMA Command Address Register Channel 15 */ | ||
251 | |||
252 | #define DDADR(x) __REG2(0x40000200, (x) << 4) | ||
253 | #define DSADR(x) __REG2(0x40000204, (x) << 4) | ||
254 | #define DTADR(x) __REG2(0x40000208, (x) << 4) | ||
255 | #define DCMD(x) __REG2(0x4000020c, (x) << 4) | ||
256 | |||
257 | #define DDADR_DESCADDR 0xfffffff0 /* Address of next descriptor (mask) */ | ||
258 | #define DDADR_STOP (1 << 0) /* Stop (read / write) */ | ||
259 | |||
260 | #define DCMD_INCSRCADDR (1 << 31) /* Source Address Increment Setting. */ | ||
261 | #define DCMD_INCTRGADDR (1 << 30) /* Target Address Increment Setting. */ | ||
262 | #define DCMD_FLOWSRC (1 << 29) /* Flow Control by the source. */ | ||
263 | #define DCMD_FLOWTRG (1 << 28) /* Flow Control by the target. */ | ||
264 | #define DCMD_STARTIRQEN (1 << 22) /* Start Interrupt Enable */ | ||
265 | #define DCMD_ENDIRQEN (1 << 21) /* End Interrupt Enable */ | ||
266 | #define DCMD_ENDIAN (1 << 18) /* Device Endian-ness. */ | ||
267 | #define DCMD_BURST8 (1 << 16) /* 8 byte burst */ | ||
268 | #define DCMD_BURST16 (2 << 16) /* 16 byte burst */ | ||
269 | #define DCMD_BURST32 (3 << 16) /* 32 byte burst */ | ||
270 | #define DCMD_WIDTH1 (1 << 14) /* 1 byte width */ | ||
271 | #define DCMD_WIDTH2 (2 << 14) /* 2 byte width (HalfWord) */ | ||
272 | #define DCMD_WIDTH4 (3 << 14) /* 4 byte width (Word) */ | ||
273 | #define DCMD_LENGTH 0x01fff /* length mask (max = 8K - 1) */ | ||
274 | |||
275 | |||
276 | /* | ||
277 | * UARTs | ||
278 | */ | ||
279 | |||
280 | /* Full Function UART (FFUART) */ | ||
281 | #define FFUART FFRBR | ||
282 | #define FFRBR __REG(0x40100000) /* Receive Buffer Register (read only) */ | ||
283 | #define FFTHR __REG(0x40100000) /* Transmit Holding Register (write only) */ | ||
284 | #define FFIER __REG(0x40100004) /* Interrupt Enable Register (read/write) */ | ||
285 | #define FFIIR __REG(0x40100008) /* Interrupt ID Register (read only) */ | ||
286 | #define FFFCR __REG(0x40100008) /* FIFO Control Register (write only) */ | ||
287 | #define FFLCR __REG(0x4010000C) /* Line Control Register (read/write) */ | ||
288 | #define FFMCR __REG(0x40100010) /* Modem Control Register (read/write) */ | ||
289 | #define FFLSR __REG(0x40100014) /* Line Status Register (read only) */ | ||
290 | #define FFMSR __REG(0x40100018) /* Modem Status Register (read only) */ | ||
291 | #define FFSPR __REG(0x4010001C) /* Scratch Pad Register (read/write) */ | ||
292 | #define FFISR __REG(0x40100020) /* Infrared Selection Register (read/write) */ | ||
293 | #define FFDLL __REG(0x40100000) /* Divisor Latch Low Register (DLAB = 1) (read/write) */ | ||
294 | #define FFDLH __REG(0x40100004) /* Divisor Latch High Register (DLAB = 1) (read/write) */ | ||
295 | |||
296 | /* Bluetooth UART (BTUART) */ | ||
297 | #define BTUART BTRBR | ||
298 | #define BTRBR __REG(0x40200000) /* Receive Buffer Register (read only) */ | ||
299 | #define BTTHR __REG(0x40200000) /* Transmit Holding Register (write only) */ | ||
300 | #define BTIER __REG(0x40200004) /* Interrupt Enable Register (read/write) */ | ||
301 | #define BTIIR __REG(0x40200008) /* Interrupt ID Register (read only) */ | ||
302 | #define BTFCR __REG(0x40200008) /* FIFO Control Register (write only) */ | ||
303 | #define BTLCR __REG(0x4020000C) /* Line Control Register (read/write) */ | ||
304 | #define BTMCR __REG(0x40200010) /* Modem Control Register (read/write) */ | ||
305 | #define BTLSR __REG(0x40200014) /* Line Status Register (read only) */ | ||
306 | #define BTMSR __REG(0x40200018) /* Modem Status Register (read only) */ | ||
307 | #define BTSPR __REG(0x4020001C) /* Scratch Pad Register (read/write) */ | ||
308 | #define BTISR __REG(0x40200020) /* Infrared Selection Register (read/write) */ | ||
309 | #define BTDLL __REG(0x40200000) /* Divisor Latch Low Register (DLAB = 1) (read/write) */ | ||
310 | #define BTDLH __REG(0x40200004) /* Divisor Latch High Register (DLAB = 1) (read/write) */ | ||
311 | |||
312 | /* Standard UART (STUART) */ | ||
313 | #define STUART STRBR | ||
314 | #define STRBR __REG(0x40700000) /* Receive Buffer Register (read only) */ | ||
315 | #define STTHR __REG(0x40700000) /* Transmit Holding Register (write only) */ | ||
316 | #define STIER __REG(0x40700004) /* Interrupt Enable Register (read/write) */ | ||
317 | #define STIIR __REG(0x40700008) /* Interrupt ID Register (read only) */ | ||
318 | #define STFCR __REG(0x40700008) /* FIFO Control Register (write only) */ | ||
319 | #define STLCR __REG(0x4070000C) /* Line Control Register (read/write) */ | ||
320 | #define STMCR __REG(0x40700010) /* Modem Control Register (read/write) */ | ||
321 | #define STLSR __REG(0x40700014) /* Line Status Register (read only) */ | ||
322 | #define STMSR __REG(0x40700018) /* Reserved */ | ||
323 | #define STSPR __REG(0x4070001C) /* Scratch Pad Register (read/write) */ | ||
324 | #define STISR __REG(0x40700020) /* Infrared Selection Register (read/write) */ | ||
325 | #define STDLL __REG(0x40700000) /* Divisor Latch Low Register (DLAB = 1) (read/write) */ | ||
326 | #define STDLH __REG(0x40700004) /* Divisor Latch High Register (DLAB = 1) (read/write) */ | ||
327 | |||
328 | #define IER_DMAE (1 << 7) /* DMA Requests Enable */ | ||
329 | #define IER_UUE (1 << 6) /* UART Unit Enable */ | ||
330 | #define IER_NRZE (1 << 5) /* NRZ coding Enable */ | ||
331 | #define IER_RTIOE (1 << 4) /* Receiver Time Out Interrupt Enable */ | ||
332 | #define IER_MIE (1 << 3) /* Modem Interrupt Enable */ | ||
333 | #define IER_RLSE (1 << 2) /* Receiver Line Status Interrupt Enable */ | ||
334 | #define IER_TIE (1 << 1) /* Transmit Data request Interrupt Enable */ | ||
335 | #define IER_RAVIE (1 << 0) /* Receiver Data Available Interrupt Enable */ | ||
336 | |||
337 | #define IIR_FIFOES1 (1 << 7) /* FIFO Mode Enable Status */ | ||
338 | #define IIR_FIFOES0 (1 << 6) /* FIFO Mode Enable Status */ | ||
339 | #define IIR_TOD (1 << 3) /* Time Out Detected */ | ||
340 | #define IIR_IID2 (1 << 2) /* Interrupt Source Encoded */ | ||
341 | #define IIR_IID1 (1 << 1) /* Interrupt Source Encoded */ | ||
342 | #define IIR_IP (1 << 0) /* Interrupt Pending (active low) */ | ||
343 | |||
344 | #define FCR_ITL2 (1 << 7) /* Interrupt Trigger Level */ | ||
345 | #define FCR_ITL1 (1 << 6) /* Interrupt Trigger Level */ | ||
346 | #define FCR_RESETTF (1 << 2) /* Reset Transmitter FIFO */ | ||
347 | #define FCR_RESETRF (1 << 1) /* Reset Receiver FIFO */ | ||
348 | #define FCR_TRFIFOE (1 << 0) /* Transmit and Receive FIFO Enable */ | ||
349 | #define FCR_ITL_1 (0) | ||
350 | #define FCR_ITL_8 (FCR_ITL1) | ||
351 | #define FCR_ITL_16 (FCR_ITL2) | ||
352 | #define FCR_ITL_32 (FCR_ITL2|FCR_ITL1) | ||
353 | |||
354 | #define LCR_DLAB (1 << 7) /* Divisor Latch Access Bit */ | ||
355 | #define LCR_SB (1 << 6) /* Set Break */ | ||
356 | #define LCR_STKYP (1 << 5) /* Sticky Parity */ | ||
357 | #define LCR_EPS (1 << 4) /* Even Parity Select */ | ||
358 | #define LCR_PEN (1 << 3) /* Parity Enable */ | ||
359 | #define LCR_STB (1 << 2) /* Stop Bit */ | ||
360 | #define LCR_WLS1 (1 << 1) /* Word Length Select */ | ||
361 | #define LCR_WLS0 (1 << 0) /* Word Length Select */ | ||
362 | |||
363 | #define LSR_FIFOE (1 << 7) /* FIFO Error Status */ | ||
364 | #define LSR_TEMT (1 << 6) /* Transmitter Empty */ | ||
365 | #define LSR_TDRQ (1 << 5) /* Transmit Data Request */ | ||
366 | #define LSR_BI (1 << 4) /* Break Interrupt */ | ||
367 | #define LSR_FE (1 << 3) /* Framing Error */ | ||
368 | #define LSR_PE (1 << 2) /* Parity Error */ | ||
369 | #define LSR_OE (1 << 1) /* Overrun Error */ | ||
370 | #define LSR_DR (1 << 0) /* Data Ready */ | ||
371 | |||
372 | #define MCR_LOOP (1 << 4) | ||
373 | #define MCR_OUT2 (1 << 3) /* force MSR_DCD in loopback mode */ | ||
374 | #define MCR_OUT1 (1 << 2) /* force MSR_RI in loopback mode */ | ||
375 | #define MCR_RTS (1 << 1) /* Request to Send */ | ||
376 | #define MCR_DTR (1 << 0) /* Data Terminal Ready */ | ||
377 | |||
378 | #define MSR_DCD (1 << 7) /* Data Carrier Detect */ | ||
379 | #define MSR_RI (1 << 6) /* Ring Indicator */ | ||
380 | #define MSR_DSR (1 << 5) /* Data Set Ready */ | ||
381 | #define MSR_CTS (1 << 4) /* Clear To Send */ | ||
382 | #define MSR_DDCD (1 << 3) /* Delta Data Carrier Detect */ | ||
383 | #define MSR_TERI (1 << 2) /* Trailing Edge Ring Indicator */ | ||
384 | #define MSR_DDSR (1 << 1) /* Delta Data Set Ready */ | ||
385 | #define MSR_DCTS (1 << 0) /* Delta Clear To Send */ | ||
386 | |||
387 | /* | ||
388 | * IrSR (Infrared Selection Register) | ||
389 | */ | ||
390 | #define STISR_RXPL (1 << 4) /* Receive Data Polarity */ | ||
391 | #define STISR_TXPL (1 << 3) /* Transmit Data Polarity */ | ||
392 | #define STISR_XMODE (1 << 2) /* Transmit Pulse Width Select */ | ||
393 | #define STISR_RCVEIR (1 << 1) /* Receiver SIR Enable */ | ||
394 | #define STISR_XMITIR (1 << 0) /* Transmitter SIR Enable */ | ||
395 | |||
396 | |||
397 | /* | ||
398 | * I2C registers | ||
399 | */ | ||
400 | |||
401 | #define IBMR __REG(0x40301680) /* I2C Bus Monitor Register - IBMR */ | ||
402 | #define IDBR __REG(0x40301688) /* I2C Data Buffer Register - IDBR */ | ||
403 | #define ICR __REG(0x40301690) /* I2C Control Register - ICR */ | ||
404 | #define ISR __REG(0x40301698) /* I2C Status Register - ISR */ | ||
405 | #define ISAR __REG(0x403016A0) /* I2C Slave Address Register - ISAR */ | ||
406 | |||
407 | #define PWRIBMR __REG(0x40f00180) /* Power I2C Bus Monitor Register-IBMR */ | ||
408 | #define PWRIDBR __REG(0x40f00188) /* Power I2C Data Buffer Register-IDBR */ | ||
409 | #define PWRICR __REG(0x40f00190) /* Power I2C Control Register - ICR */ | ||
410 | #define PWRISR __REG(0x40f00198) /* Power I2C Status Register - ISR */ | ||
411 | #define PWRISAR __REG(0x40f001A0) /*Power I2C Slave Address Register-ISAR */ | ||
412 | |||
413 | #define ICR_START (1 << 0) /* start bit */ | ||
414 | #define ICR_STOP (1 << 1) /* stop bit */ | ||
415 | #define ICR_ACKNAK (1 << 2) /* send ACK(0) or NAK(1) */ | ||
416 | #define ICR_TB (1 << 3) /* transfer byte bit */ | ||
417 | #define ICR_MA (1 << 4) /* master abort */ | ||
418 | #define ICR_SCLE (1 << 5) /* master clock enable */ | ||
419 | #define ICR_IUE (1 << 6) /* unit enable */ | ||
420 | #define ICR_GCD (1 << 7) /* general call disable */ | ||
421 | #define ICR_ITEIE (1 << 8) /* enable tx interrupts */ | ||
422 | #define ICR_IRFIE (1 << 9) /* enable rx interrupts */ | ||
423 | #define ICR_BEIE (1 << 10) /* enable bus error ints */ | ||
424 | #define ICR_SSDIE (1 << 11) /* slave STOP detected int enable */ | ||
425 | #define ICR_ALDIE (1 << 12) /* enable arbitration interrupt */ | ||
426 | #define ICR_SADIE (1 << 13) /* slave address detected int enable */ | ||
427 | #define ICR_UR (1 << 14) /* unit reset */ | ||
428 | |||
429 | #define ISR_RWM (1 << 0) /* read/write mode */ | ||
430 | #define ISR_ACKNAK (1 << 1) /* ack/nak status */ | ||
431 | #define ISR_UB (1 << 2) /* unit busy */ | ||
432 | #define ISR_IBB (1 << 3) /* bus busy */ | ||
433 | #define ISR_SSD (1 << 4) /* slave stop detected */ | ||
434 | #define ISR_ALD (1 << 5) /* arbitration loss detected */ | ||
435 | #define ISR_ITE (1 << 6) /* tx buffer empty */ | ||
436 | #define ISR_IRF (1 << 7) /* rx buffer full */ | ||
437 | #define ISR_GCAD (1 << 8) /* general call address detected */ | ||
438 | #define ISR_SAD (1 << 9) /* slave address detected */ | ||
439 | #define ISR_BED (1 << 10) /* bus error no ACK/NAK */ | ||
440 | |||
441 | |||
442 | /* | ||
443 | * Serial Audio Controller | ||
444 | */ | ||
445 | |||
446 | /* FIXME: This clash with SA1111 defines */ | ||
447 | #ifndef _ASM_ARCH_SA1111 | ||
448 | |||
449 | #define SACR0 __REG(0x40400000) /* Global Control Register */ | ||
450 | #define SACR1 __REG(0x40400004) /* Serial Audio I 2 S/MSB-Justified Control Register */ | ||
451 | #define SASR0 __REG(0x4040000C) /* Serial Audio I 2 S/MSB-Justified Interface and FIFO Status Register */ | ||
452 | #define SAIMR __REG(0x40400014) /* Serial Audio Interrupt Mask Register */ | ||
453 | #define SAICR __REG(0x40400018) /* Serial Audio Interrupt Clear Register */ | ||
454 | #define SADIV __REG(0x40400060) /* Audio Clock Divider Register. */ | ||
455 | #define SADR __REG(0x40400080) /* Serial Audio Data Register (TX and RX FIFO access Register). */ | ||
456 | |||
457 | #define SACR0_RFTH(x) (x << 12) /* Rx FIFO Interrupt or DMA Trigger Threshold */ | ||
458 | #define SACR0_TFTH(x) (x << 8) /* Tx FIFO Interrupt or DMA Trigger Threshold */ | ||
459 | #define SACR0_STRF (1 << 5) /* FIFO Select for EFWR Special Function */ | ||
460 | #define SACR0_EFWR (1 << 4) /* Enable EFWR Function */ | ||
461 | #define SACR0_RST (1 << 3) /* FIFO, i2s Register Reset */ | ||
462 | #define SACR0_BCKD (1 << 2) /* Bit Clock Direction */ | ||
463 | #define SACR0_ENB (1 << 0) /* Enable I2S Link */ | ||
464 | #define SACR1_ENLBF (1 << 5) /* Enable Loopback */ | ||
465 | #define SACR1_DRPL (1 << 4) /* Disable Replaying Function */ | ||
466 | #define SACR1_DREC (1 << 3) /* Disable Recording Function */ | ||
467 | #define SACR1_AMSL (1 << 1) /* Specify Alternate Mode */ | ||
468 | |||
469 | #define SASR0_I2SOFF (1 << 7) /* Controller Status */ | ||
470 | #define SASR0_ROR (1 << 6) /* Rx FIFO Overrun */ | ||
471 | #define SASR0_TUR (1 << 5) /* Tx FIFO Underrun */ | ||
472 | #define SASR0_RFS (1 << 4) /* Rx FIFO Service Request */ | ||
473 | #define SASR0_TFS (1 << 3) /* Tx FIFO Service Request */ | ||
474 | #define SASR0_BSY (1 << 2) /* I2S Busy */ | ||
475 | #define SASR0_RNE (1 << 1) /* Rx FIFO Not Empty */ | ||
476 | #define SASR0_TNF (1 << 0) /* Tx FIFO Not Empty */ | ||
477 | |||
478 | #define SAICR_ROR (1 << 6) /* Clear Rx FIFO Overrun Interrupt */ | ||
479 | #define SAICR_TUR (1 << 5) /* Clear Tx FIFO Underrun Interrupt */ | ||
480 | |||
481 | #define SAIMR_ROR (1 << 6) /* Enable Rx FIFO Overrun Condition Interrupt */ | ||
482 | #define SAIMR_TUR (1 << 5) /* Enable Tx FIFO Underrun Condition Interrupt */ | ||
483 | #define SAIMR_RFS (1 << 4) /* Enable Rx FIFO Service Interrupt */ | ||
484 | #define SAIMR_TFS (1 << 3) /* Enable Tx FIFO Service Interrupt */ | ||
485 | |||
486 | #endif | ||
487 | |||
488 | /* | ||
489 | * AC97 Controller registers | ||
490 | */ | ||
491 | |||
492 | #define POCR __REG(0x40500000) /* PCM Out Control Register */ | ||
493 | #define POCR_FEIE (1 << 3) /* FIFO Error Interrupt Enable */ | ||
494 | #define POCR_FSRIE (1 << 1) /* FIFO Service Request Interrupt Enable */ | ||
495 | |||
496 | #define PICR __REG(0x40500004) /* PCM In Control Register */ | ||
497 | #define PICR_FEIE (1 << 3) /* FIFO Error Interrupt Enable */ | ||
498 | #define PICR_FSRIE (1 << 1) /* FIFO Service Request Interrupt Enable */ | ||
499 | |||
500 | #define MCCR __REG(0x40500008) /* Mic In Control Register */ | ||
501 | #define MCCR_FEIE (1 << 3) /* FIFO Error Interrupt Enable */ | ||
502 | #define MCCR_FSRIE (1 << 1) /* FIFO Service Request Interrupt Enable */ | ||
503 | |||
504 | #define GCR __REG(0x4050000C) /* Global Control Register */ | ||
505 | #define GCR_nDMAEN (1 << 24) /* non DMA Enable */ | ||
506 | #define GCR_CDONE_IE (1 << 19) /* Command Done Interrupt Enable */ | ||
507 | #define GCR_SDONE_IE (1 << 18) /* Status Done Interrupt Enable */ | ||
508 | #define GCR_SECRDY_IEN (1 << 9) /* Secondary Ready Interrupt Enable */ | ||
509 | #define GCR_PRIRDY_IEN (1 << 8) /* Primary Ready Interrupt Enable */ | ||
510 | #define GCR_SECRES_IEN (1 << 5) /* Secondary Resume Interrupt Enable */ | ||
511 | #define GCR_PRIRES_IEN (1 << 4) /* Primary Resume Interrupt Enable */ | ||
512 | #define GCR_ACLINK_OFF (1 << 3) /* AC-link Shut Off */ | ||
513 | #define GCR_WARM_RST (1 << 2) /* AC97 Warm Reset */ | ||
514 | #define GCR_COLD_RST (1 << 1) /* AC'97 Cold Reset (0 = active) */ | ||
515 | #define GCR_GIE (1 << 0) /* Codec GPI Interrupt Enable */ | ||
516 | |||
517 | #define POSR __REG(0x40500010) /* PCM Out Status Register */ | ||
518 | #define POSR_FIFOE (1 << 4) /* FIFO error */ | ||
519 | #define POSR_FSR (1 << 2) /* FIFO Service Request */ | ||
520 | |||
521 | #define PISR __REG(0x40500014) /* PCM In Status Register */ | ||
522 | #define PISR_FIFOE (1 << 4) /* FIFO error */ | ||
523 | #define PISR_EOC (1 << 3) /* DMA End-of-Chain (exclusive clear) */ | ||
524 | #define PISR_FSR (1 << 2) /* FIFO Service Request */ | ||
525 | |||
526 | #define MCSR __REG(0x40500018) /* Mic In Status Register */ | ||
527 | #define MCSR_FIFOE (1 << 4) /* FIFO error */ | ||
528 | #define MCSR_EOC (1 << 3) /* DMA End-of-Chain (exclusive clear) */ | ||
529 | #define MCSR_FSR (1 << 2) /* FIFO Service Request */ | ||
530 | |||
531 | #define GSR __REG(0x4050001C) /* Global Status Register */ | ||
532 | #define GSR_CDONE (1 << 19) /* Command Done */ | ||
533 | #define GSR_SDONE (1 << 18) /* Status Done */ | ||
534 | #define GSR_RDCS (1 << 15) /* Read Completion Status */ | ||
535 | #define GSR_BIT3SLT12 (1 << 14) /* Bit 3 of slot 12 */ | ||
536 | #define GSR_BIT2SLT12 (1 << 13) /* Bit 2 of slot 12 */ | ||
537 | #define GSR_BIT1SLT12 (1 << 12) /* Bit 1 of slot 12 */ | ||
538 | #define GSR_SECRES (1 << 11) /* Secondary Resume Interrupt */ | ||
539 | #define GSR_PRIRES (1 << 10) /* Primary Resume Interrupt */ | ||
540 | #define GSR_SCR (1 << 9) /* Secondary Codec Ready */ | ||
541 | #define GSR_PCR (1 << 8) /* Primary Codec Ready */ | ||
542 | #define GSR_MCINT (1 << 7) /* Mic In Interrupt */ | ||
543 | #define GSR_POINT (1 << 6) /* PCM Out Interrupt */ | ||
544 | #define GSR_PIINT (1 << 5) /* PCM In Interrupt */ | ||
545 | #define GSR_ACOFFD (1 << 3) /* AC-link Shut Off Done */ | ||
546 | #define GSR_MOINT (1 << 2) /* Modem Out Interrupt */ | ||
547 | #define GSR_MIINT (1 << 1) /* Modem In Interrupt */ | ||
548 | #define GSR_GSCI (1 << 0) /* Codec GPI Status Change Interrupt */ | ||
549 | |||
550 | #define CAR __REG(0x40500020) /* CODEC Access Register */ | ||
551 | #define CAR_CAIP (1 << 0) /* Codec Access In Progress */ | ||
552 | |||
553 | #define PCDR __REG(0x40500040) /* PCM FIFO Data Register */ | ||
554 | #define MCDR __REG(0x40500060) /* Mic-in FIFO Data Register */ | ||
555 | |||
556 | #define MOCR __REG(0x40500100) /* Modem Out Control Register */ | ||
557 | #define MOCR_FEIE (1 << 3) /* FIFO Error */ | ||
558 | #define MOCR_FSRIE (1 << 1) /* FIFO Service Request Interrupt Enable */ | ||
559 | |||
560 | #define MICR __REG(0x40500108) /* Modem In Control Register */ | ||
561 | #define MICR_FEIE (1 << 3) /* FIFO Error */ | ||
562 | #define MICR_FSRIE (1 << 1) /* FIFO Service Request Interrupt Enable */ | ||
563 | |||
564 | #define MOSR __REG(0x40500110) /* Modem Out Status Register */ | ||
565 | #define MOSR_FIFOE (1 << 4) /* FIFO error */ | ||
566 | #define MOSR_FSR (1 << 2) /* FIFO Service Request */ | ||
567 | |||
568 | #define MISR __REG(0x40500118) /* Modem In Status Register */ | ||
569 | #define MISR_FIFOE (1 << 4) /* FIFO error */ | ||
570 | #define MISR_EOC (1 << 3) /* DMA End-of-Chain (exclusive clear) */ | ||
571 | #define MISR_FSR (1 << 2) /* FIFO Service Request */ | ||
572 | |||
573 | #define MODR __REG(0x40500140) /* Modem FIFO Data Register */ | ||
574 | |||
575 | #define PAC_REG_BASE __REG(0x40500200) /* Primary Audio Codec */ | ||
576 | #define SAC_REG_BASE __REG(0x40500300) /* Secondary Audio Codec */ | ||
577 | #define PMC_REG_BASE __REG(0x40500400) /* Primary Modem Codec */ | ||
578 | #define SMC_REG_BASE __REG(0x40500500) /* Secondary Modem Codec */ | ||
579 | |||
580 | |||
581 | /* | ||
582 | * USB Device Controller | ||
583 | * PXA25x and PXA27x USB device controller registers are different. | ||
584 | */ | ||
585 | #if defined(CONFIG_PXA25x) | ||
586 | |||
587 | #define UDC_RES1 __REG(0x40600004) /* UDC Undocumented - Reserved1 */ | ||
588 | #define UDC_RES2 __REG(0x40600008) /* UDC Undocumented - Reserved2 */ | ||
589 | #define UDC_RES3 __REG(0x4060000C) /* UDC Undocumented - Reserved3 */ | ||
590 | |||
591 | #define UDCCR __REG(0x40600000) /* UDC Control Register */ | ||
592 | #define UDCCR_UDE (1 << 0) /* UDC enable */ | ||
593 | #define UDCCR_UDA (1 << 1) /* UDC active */ | ||
594 | #define UDCCR_RSM (1 << 2) /* Device resume */ | ||
595 | #define UDCCR_RESIR (1 << 3) /* Resume interrupt request */ | ||
596 | #define UDCCR_SUSIR (1 << 4) /* Suspend interrupt request */ | ||
597 | #define UDCCR_SRM (1 << 5) /* Suspend/resume interrupt mask */ | ||
598 | #define UDCCR_RSTIR (1 << 6) /* Reset interrupt request */ | ||
599 | #define UDCCR_REM (1 << 7) /* Reset interrupt mask */ | ||
600 | |||
601 | #define UDCCS0 __REG(0x40600010) /* UDC Endpoint 0 Control/Status Register */ | ||
602 | #define UDCCS0_OPR (1 << 0) /* OUT packet ready */ | ||
603 | #define UDCCS0_IPR (1 << 1) /* IN packet ready */ | ||
604 | #define UDCCS0_FTF (1 << 2) /* Flush Tx FIFO */ | ||
605 | #define UDCCS0_DRWF (1 << 3) /* Device remote wakeup feature */ | ||
606 | #define UDCCS0_SST (1 << 4) /* Sent stall */ | ||
607 | #define UDCCS0_FST (1 << 5) /* Force stall */ | ||
608 | #define UDCCS0_RNE (1 << 6) /* Receive FIFO no empty */ | ||
609 | #define UDCCS0_SA (1 << 7) /* Setup active */ | ||
610 | |||
611 | /* Bulk IN - Endpoint 1,6,11 */ | ||
612 | #define UDCCS1 __REG(0x40600014) /* UDC Endpoint 1 (IN) Control/Status Register */ | ||
613 | #define UDCCS6 __REG(0x40600028) /* UDC Endpoint 6 (IN) Control/Status Register */ | ||
614 | #define UDCCS11 __REG(0x4060003C) /* UDC Endpoint 11 (IN) Control/Status Register */ | ||
615 | |||
616 | #define UDCCS_BI_TFS (1 << 0) /* Transmit FIFO service */ | ||
617 | #define UDCCS_BI_TPC (1 << 1) /* Transmit packet complete */ | ||
618 | #define UDCCS_BI_FTF (1 << 2) /* Flush Tx FIFO */ | ||
619 | #define UDCCS_BI_TUR (1 << 3) /* Transmit FIFO underrun */ | ||
620 | #define UDCCS_BI_SST (1 << 4) /* Sent stall */ | ||
621 | #define UDCCS_BI_FST (1 << 5) /* Force stall */ | ||
622 | #define UDCCS_BI_TSP (1 << 7) /* Transmit short packet */ | ||
623 | |||
624 | /* Bulk OUT - Endpoint 2,7,12 */ | ||
625 | #define UDCCS2 __REG(0x40600018) /* UDC Endpoint 2 (OUT) Control/Status Register */ | ||
626 | #define UDCCS7 __REG(0x4060002C) /* UDC Endpoint 7 (OUT) Control/Status Register */ | ||
627 | #define UDCCS12 __REG(0x40600040) /* UDC Endpoint 12 (OUT) Control/Status Register */ | ||
628 | |||
629 | #define UDCCS_BO_RFS (1 << 0) /* Receive FIFO service */ | ||
630 | #define UDCCS_BO_RPC (1 << 1) /* Receive packet complete */ | ||
631 | #define UDCCS_BO_DME (1 << 3) /* DMA enable */ | ||
632 | #define UDCCS_BO_SST (1 << 4) /* Sent stall */ | ||
633 | #define UDCCS_BO_FST (1 << 5) /* Force stall */ | ||
634 | #define UDCCS_BO_RNE (1 << 6) /* Receive FIFO not empty */ | ||
635 | #define UDCCS_BO_RSP (1 << 7) /* Receive short packet */ | ||
636 | |||
637 | /* Isochronous IN - Endpoint 3,8,13 */ | ||
638 | #define UDCCS3 __REG(0x4060001C) /* UDC Endpoint 3 (IN) Control/Status Register */ | ||
639 | #define UDCCS8 __REG(0x40600030) /* UDC Endpoint 8 (IN) Control/Status Register */ | ||
640 | #define UDCCS13 __REG(0x40600044) /* UDC Endpoint 13 (IN) Control/Status Register */ | ||
641 | |||
642 | #define UDCCS_II_TFS (1 << 0) /* Transmit FIFO service */ | ||
643 | #define UDCCS_II_TPC (1 << 1) /* Transmit packet complete */ | ||
644 | #define UDCCS_II_FTF (1 << 2) /* Flush Tx FIFO */ | ||
645 | #define UDCCS_II_TUR (1 << 3) /* Transmit FIFO underrun */ | ||
646 | #define UDCCS_II_TSP (1 << 7) /* Transmit short packet */ | ||
647 | |||
648 | /* Isochronous OUT - Endpoint 4,9,14 */ | ||
649 | #define UDCCS4 __REG(0x40600020) /* UDC Endpoint 4 (OUT) Control/Status Register */ | ||
650 | #define UDCCS9 __REG(0x40600034) /* UDC Endpoint 9 (OUT) Control/Status Register */ | ||
651 | #define UDCCS14 __REG(0x40600048) /* UDC Endpoint 14 (OUT) Control/Status Register */ | ||
652 | |||
653 | #define UDCCS_IO_RFS (1 << 0) /* Receive FIFO service */ | ||
654 | #define UDCCS_IO_RPC (1 << 1) /* Receive packet complete */ | ||
655 | #define UDCCS_IO_ROF (1 << 3) /* Receive overflow */ | ||
656 | #define UDCCS_IO_DME (1 << 3) /* DMA enable */ | ||
657 | #define UDCCS_IO_RNE (1 << 6) /* Receive FIFO not empty */ | ||
658 | #define UDCCS_IO_RSP (1 << 7) /* Receive short packet */ | ||
659 | |||
660 | /* Interrupt IN - Endpoint 5,10,15 */ | ||
661 | #define UDCCS5 __REG(0x40600024) /* UDC Endpoint 5 (Interrupt) Control/Status Register */ | ||
662 | #define UDCCS10 __REG(0x40600038) /* UDC Endpoint 10 (Interrupt) Control/Status Register */ | ||
663 | #define UDCCS15 __REG(0x4060004C) /* UDC Endpoint 15 (Interrupt) Control/Status Register */ | ||
664 | |||
665 | #define UDCCS_INT_TFS (1 << 0) /* Transmit FIFO service */ | ||
666 | #define UDCCS_INT_TPC (1 << 1) /* Transmit packet complete */ | ||
667 | #define UDCCS_INT_FTF (1 << 2) /* Flush Tx FIFO */ | ||
668 | #define UDCCS_INT_TUR (1 << 3) /* Transmit FIFO underrun */ | ||
669 | #define UDCCS_INT_SST (1 << 4) /* Sent stall */ | ||
670 | #define UDCCS_INT_FST (1 << 5) /* Force stall */ | ||
671 | #define UDCCS_INT_TSP (1 << 7) /* Transmit short packet */ | ||
672 | |||
673 | #define UFNRH __REG(0x40600060) /* UDC Frame Number Register High */ | ||
674 | #define UFNRL __REG(0x40600064) /* UDC Frame Number Register Low */ | ||
675 | #define UBCR2 __REG(0x40600068) /* UDC Byte Count Reg 2 */ | ||
676 | #define UBCR4 __REG(0x4060006c) /* UDC Byte Count Reg 4 */ | ||
677 | #define UBCR7 __REG(0x40600070) /* UDC Byte Count Reg 7 */ | ||
678 | #define UBCR9 __REG(0x40600074) /* UDC Byte Count Reg 9 */ | ||
679 | #define UBCR12 __REG(0x40600078) /* UDC Byte Count Reg 12 */ | ||
680 | #define UBCR14 __REG(0x4060007c) /* UDC Byte Count Reg 14 */ | ||
681 | #define UDDR0 __REG(0x40600080) /* UDC Endpoint 0 Data Register */ | ||
682 | #define UDDR1 __REG(0x40600100) /* UDC Endpoint 1 Data Register */ | ||
683 | #define UDDR2 __REG(0x40600180) /* UDC Endpoint 2 Data Register */ | ||
684 | #define UDDR3 __REG(0x40600200) /* UDC Endpoint 3 Data Register */ | ||
685 | #define UDDR4 __REG(0x40600400) /* UDC Endpoint 4 Data Register */ | ||
686 | #define UDDR5 __REG(0x406000A0) /* UDC Endpoint 5 Data Register */ | ||
687 | #define UDDR6 __REG(0x40600600) /* UDC Endpoint 6 Data Register */ | ||
688 | #define UDDR7 __REG(0x40600680) /* UDC Endpoint 7 Data Register */ | ||
689 | #define UDDR8 __REG(0x40600700) /* UDC Endpoint 8 Data Register */ | ||
690 | #define UDDR9 __REG(0x40600900) /* UDC Endpoint 9 Data Register */ | ||
691 | #define UDDR10 __REG(0x406000C0) /* UDC Endpoint 10 Data Register */ | ||
692 | #define UDDR11 __REG(0x40600B00) /* UDC Endpoint 11 Data Register */ | ||
693 | #define UDDR12 __REG(0x40600B80) /* UDC Endpoint 12 Data Register */ | ||
694 | #define UDDR13 __REG(0x40600C00) /* UDC Endpoint 13 Data Register */ | ||
695 | #define UDDR14 __REG(0x40600E00) /* UDC Endpoint 14 Data Register */ | ||
696 | #define UDDR15 __REG(0x406000E0) /* UDC Endpoint 15 Data Register */ | ||
697 | |||
698 | #define UICR0 __REG(0x40600050) /* UDC Interrupt Control Register 0 */ | ||
699 | |||
700 | #define UICR0_IM0 (1 << 0) /* Interrupt mask ep 0 */ | ||
701 | #define UICR0_IM1 (1 << 1) /* Interrupt mask ep 1 */ | ||
702 | #define UICR0_IM2 (1 << 2) /* Interrupt mask ep 2 */ | ||
703 | #define UICR0_IM3 (1 << 3) /* Interrupt mask ep 3 */ | ||
704 | #define UICR0_IM4 (1 << 4) /* Interrupt mask ep 4 */ | ||
705 | #define UICR0_IM5 (1 << 5) /* Interrupt mask ep 5 */ | ||
706 | #define UICR0_IM6 (1 << 6) /* Interrupt mask ep 6 */ | ||
707 | #define UICR0_IM7 (1 << 7) /* Interrupt mask ep 7 */ | ||
708 | |||
709 | #define UICR1 __REG(0x40600054) /* UDC Interrupt Control Register 1 */ | ||
710 | |||
711 | #define UICR1_IM8 (1 << 0) /* Interrupt mask ep 8 */ | ||
712 | #define UICR1_IM9 (1 << 1) /* Interrupt mask ep 9 */ | ||
713 | #define UICR1_IM10 (1 << 2) /* Interrupt mask ep 10 */ | ||
714 | #define UICR1_IM11 (1 << 3) /* Interrupt mask ep 11 */ | ||
715 | #define UICR1_IM12 (1 << 4) /* Interrupt mask ep 12 */ | ||
716 | #define UICR1_IM13 (1 << 5) /* Interrupt mask ep 13 */ | ||
717 | #define UICR1_IM14 (1 << 6) /* Interrupt mask ep 14 */ | ||
718 | #define UICR1_IM15 (1 << 7) /* Interrupt mask ep 15 */ | ||
719 | |||
720 | #define USIR0 __REG(0x40600058) /* UDC Status Interrupt Register 0 */ | ||
721 | |||
722 | #define USIR0_IR0 (1 << 0) /* Interrup request ep 0 */ | ||
723 | #define USIR0_IR1 (1 << 1) /* Interrup request ep 1 */ | ||
724 | #define USIR0_IR2 (1 << 2) /* Interrup request ep 2 */ | ||
725 | #define USIR0_IR3 (1 << 3) /* Interrup request ep 3 */ | ||
726 | #define USIR0_IR4 (1 << 4) /* Interrup request ep 4 */ | ||
727 | #define USIR0_IR5 (1 << 5) /* Interrup request ep 5 */ | ||
728 | #define USIR0_IR6 (1 << 6) /* Interrup request ep 6 */ | ||
729 | #define USIR0_IR7 (1 << 7) /* Interrup request ep 7 */ | ||
730 | |||
731 | #define USIR1 __REG(0x4060005C) /* UDC Status Interrupt Register 1 */ | ||
732 | |||
733 | #define USIR1_IR8 (1 << 0) /* Interrup request ep 8 */ | ||
734 | #define USIR1_IR9 (1 << 1) /* Interrup request ep 9 */ | ||
735 | #define USIR1_IR10 (1 << 2) /* Interrup request ep 10 */ | ||
736 | #define USIR1_IR11 (1 << 3) /* Interrup request ep 11 */ | ||
737 | #define USIR1_IR12 (1 << 4) /* Interrup request ep 12 */ | ||
738 | #define USIR1_IR13 (1 << 5) /* Interrup request ep 13 */ | ||
739 | #define USIR1_IR14 (1 << 6) /* Interrup request ep 14 */ | ||
740 | #define USIR1_IR15 (1 << 7) /* Interrup request ep 15 */ | ||
741 | |||
742 | #elif defined(CONFIG_PXA27x) | ||
743 | |||
744 | #define UDCCR __REG(0x40600000) /* UDC Control Register */ | ||
745 | #define UDCCR_OEN (1 << 31) /* On-the-Go Enable */ | ||
746 | #define UDCCR_AALTHNP (1 << 30) /* A-device Alternate Host Negotiation | ||
747 | Protocol Port Support */ | ||
748 | #define UDCCR_AHNP (1 << 29) /* A-device Host Negotiation Protocol | ||
749 | Support */ | ||
750 | #define UDCCR_BHNP (1 << 28) /* B-device Host Negotiation Protocol | ||
751 | Enable */ | ||
752 | #define UDCCR_DWRE (1 << 16) /* Device Remote Wake-up Enable */ | ||
753 | #define UDCCR_ACN (0x03 << 11) /* Active UDC configuration Number */ | ||
754 | #define UDCCR_ACN_S 11 | ||
755 | #define UDCCR_AIN (0x07 << 8) /* Active UDC interface Number */ | ||
756 | #define UDCCR_AIN_S 8 | ||
757 | #define UDCCR_AAISN (0x07 << 5) /* Active UDC Alternate Interface | ||
758 | Setting Number */ | ||
759 | #define UDCCR_AAISN_S 5 | ||
760 | #define UDCCR_SMAC (1 << 4) /* Switch Endpoint Memory to Active | ||
761 | Configuration */ | ||
762 | #define UDCCR_EMCE (1 << 3) /* Endpoint Memory Configuration | ||
763 | Error */ | ||
764 | #define UDCCR_UDR (1 << 2) /* UDC Resume */ | ||
765 | #define UDCCR_UDA (1 << 1) /* UDC Active */ | ||
766 | #define UDCCR_UDE (1 << 0) /* UDC Enable */ | ||
767 | |||
768 | #define UDCICR0 __REG(0x40600004) /* UDC Interrupt Control Register0 */ | ||
769 | #define UDCICR1 __REG(0x40600008) /* UDC Interrupt Control Register1 */ | ||
770 | #define UDCICR_FIFOERR (1 << 1) /* FIFO Error interrupt for EP */ | ||
771 | #define UDCICR_PKTCOMPL (1 << 0) /* Packet Complete interrupt for EP */ | ||
772 | |||
773 | #define UDC_INT_FIFOERROR (0x2) | ||
774 | #define UDC_INT_PACKETCMP (0x1) | ||
775 | |||
776 | #define UDCICR_INT(n,intr) (((intr) & 0x03) << (((n) & 0x0F) * 2)) | ||
777 | #define UDCICR1_IECC (1 << 31) /* IntEn - Configuration Change */ | ||
778 | #define UDCICR1_IESOF (1 << 30) /* IntEn - Start of Frame */ | ||
779 | #define UDCICR1_IERU (1 << 29) /* IntEn - Resume */ | ||
780 | #define UDCICR1_IESU (1 << 28) /* IntEn - Suspend */ | ||
781 | #define UDCICR1_IERS (1 << 27) /* IntEn - Reset */ | ||
782 | |||
783 | #define UDCISR0 __REG(0x4060000C) /* UDC Interrupt Status Register 0 */ | ||
784 | #define UDCISR1 __REG(0x40600010) /* UDC Interrupt Status Register 1 */ | ||
785 | #define UDCISR_INT(n,intr) (((intr) & 0x03) << (((n) & 0x0F) * 2)) | ||
786 | #define UDCISR1_IECC (1 << 31) /* IntEn - Configuration Change */ | ||
787 | #define UDCISR1_IESOF (1 << 30) /* IntEn - Start of Frame */ | ||
788 | #define UDCISR1_IERU (1 << 29) /* IntEn - Resume */ | ||
789 | #define UDCISR1_IESU (1 << 28) /* IntEn - Suspend */ | ||
790 | #define UDCISR1_IERS (1 << 27) /* IntEn - Reset */ | ||
791 | |||
792 | |||
793 | #define UDCFNR __REG(0x40600014) /* UDC Frame Number Register */ | ||
794 | #define UDCOTGICR __REG(0x40600018) /* UDC On-The-Go interrupt control */ | ||
795 | #define UDCOTGICR_IESF (1 << 24) /* OTG SET_FEATURE command recvd */ | ||
796 | #define UDCOTGICR_IEXR (1 << 17) /* Extra Transciever Interrupt | ||
797 | Rising Edge Interrupt Enable */ | ||
798 | #define UDCOTGICR_IEXF (1 << 16) /* Extra Transciever Interrupt | ||
799 | Falling Edge Interrupt Enable */ | ||
800 | #define UDCOTGICR_IEVV40R (1 << 9) /* OTG Vbus Valid 4.0V Rising Edge | ||
801 | Interrupt Enable */ | ||
802 | #define UDCOTGICR_IEVV40F (1 << 8) /* OTG Vbus Valid 4.0V Falling Edge | ||
803 | Interrupt Enable */ | ||
804 | #define UDCOTGICR_IEVV44R (1 << 7) /* OTG Vbus Valid 4.4V Rising Edge | ||
805 | Interrupt Enable */ | ||
806 | #define UDCOTGICR_IEVV44F (1 << 6) /* OTG Vbus Valid 4.4V Falling Edge | ||
807 | Interrupt Enable */ | ||
808 | #define UDCOTGICR_IESVR (1 << 5) /* OTG Session Valid Rising Edge | ||
809 | Interrupt Enable */ | ||
810 | #define UDCOTGICR_IESVF (1 << 4) /* OTG Session Valid Falling Edge | ||
811 | Interrupt Enable */ | ||
812 | #define UDCOTGICR_IESDR (1 << 3) /* OTG A-Device SRP Detect Rising | ||
813 | Edge Interrupt Enable */ | ||
814 | #define UDCOTGICR_IESDF (1 << 2) /* OTG A-Device SRP Detect Falling | ||
815 | Edge Interrupt Enable */ | ||
816 | #define UDCOTGICR_IEIDR (1 << 1) /* OTG ID Change Rising Edge | ||
817 | Interrupt Enable */ | ||
818 | #define UDCOTGICR_IEIDF (1 << 0) /* OTG ID Change Falling Edge | ||
819 | Interrupt Enable */ | ||
820 | |||
821 | #define UDCCSN(x) __REG2(0x40600100, (x) << 2) | ||
822 | #define UDCCSR0 __REG(0x40600100) /* UDC Control/Status register - Endpoint 0 */ | ||
823 | #define UDCCSR0_SA (1 << 7) /* Setup Active */ | ||
824 | #define UDCCSR0_RNE (1 << 6) /* Receive FIFO Not Empty */ | ||
825 | #define UDCCSR0_FST (1 << 5) /* Force Stall */ | ||
826 | #define UDCCSR0_SST (1 << 4) /* Sent Stall */ | ||
827 | #define UDCCSR0_DME (1 << 3) /* DMA Enable */ | ||
828 | #define UDCCSR0_FTF (1 << 2) /* Flush Transmit FIFO */ | ||
829 | #define UDCCSR0_IPR (1 << 1) /* IN Packet Ready */ | ||
830 | #define UDCCSR0_OPC (1 << 0) /* OUT Packet Complete */ | ||
831 | |||
832 | #define UDCCSRA __REG(0x40600104) /* UDC Control/Status register - Endpoint A */ | ||
833 | #define UDCCSRB __REG(0x40600108) /* UDC Control/Status register - Endpoint B */ | ||
834 | #define UDCCSRC __REG(0x4060010C) /* UDC Control/Status register - Endpoint C */ | ||
835 | #define UDCCSRD __REG(0x40600110) /* UDC Control/Status register - Endpoint D */ | ||
836 | #define UDCCSRE __REG(0x40600114) /* UDC Control/Status register - Endpoint E */ | ||
837 | #define UDCCSRF __REG(0x40600118) /* UDC Control/Status register - Endpoint F */ | ||
838 | #define UDCCSRG __REG(0x4060011C) /* UDC Control/Status register - Endpoint G */ | ||
839 | #define UDCCSRH __REG(0x40600120) /* UDC Control/Status register - Endpoint H */ | ||
840 | #define UDCCSRI __REG(0x40600124) /* UDC Control/Status register - Endpoint I */ | ||
841 | #define UDCCSRJ __REG(0x40600128) /* UDC Control/Status register - Endpoint J */ | ||
842 | #define UDCCSRK __REG(0x4060012C) /* UDC Control/Status register - Endpoint K */ | ||
843 | #define UDCCSRL __REG(0x40600130) /* UDC Control/Status register - Endpoint L */ | ||
844 | #define UDCCSRM __REG(0x40600134) /* UDC Control/Status register - Endpoint M */ | ||
845 | #define UDCCSRN __REG(0x40600138) /* UDC Control/Status register - Endpoint N */ | ||
846 | #define UDCCSRP __REG(0x4060013C) /* UDC Control/Status register - Endpoint P */ | ||
847 | #define UDCCSRQ __REG(0x40600140) /* UDC Control/Status register - Endpoint Q */ | ||
848 | #define UDCCSRR __REG(0x40600144) /* UDC Control/Status register - Endpoint R */ | ||
849 | #define UDCCSRS __REG(0x40600148) /* UDC Control/Status register - Endpoint S */ | ||
850 | #define UDCCSRT __REG(0x4060014C) /* UDC Control/Status register - Endpoint T */ | ||
851 | #define UDCCSRU __REG(0x40600150) /* UDC Control/Status register - Endpoint U */ | ||
852 | #define UDCCSRV __REG(0x40600154) /* UDC Control/Status register - Endpoint V */ | ||
853 | #define UDCCSRW __REG(0x40600158) /* UDC Control/Status register - Endpoint W */ | ||
854 | #define UDCCSRX __REG(0x4060015C) /* UDC Control/Status register - Endpoint X */ | ||
855 | |||
856 | #define UDCCSR_DPE (1 << 9) /* Data Packet Error */ | ||
857 | #define UDCCSR_FEF (1 << 8) /* Flush Endpoint FIFO */ | ||
858 | #define UDCCSR_SP (1 << 7) /* Short Packet Control/Status */ | ||
859 | #define UDCCSR_BNE (1 << 6) /* Buffer Not Empty (IN endpoints) */ | ||
860 | #define UDCCSR_BNF (1 << 6) /* Buffer Not Full (OUT endpoints) */ | ||
861 | #define UDCCSR_FST (1 << 5) /* Force STALL */ | ||
862 | #define UDCCSR_SST (1 << 4) /* Sent STALL */ | ||
863 | #define UDCCSR_DME (1 << 3) /* DMA Enable */ | ||
864 | #define UDCCSR_TRN (1 << 2) /* Tx/Rx NAK */ | ||
865 | #define UDCCSR_PC (1 << 1) /* Packet Complete */ | ||
866 | #define UDCCSR_FS (1 << 0) /* FIFO needs service */ | ||
867 | |||
868 | #define UDCBCN(x) __REG2(0x40600200, (x)<<2) | ||
869 | #define UDCBCR0 __REG(0x40600200) /* Byte Count Register - EP0 */ | ||
870 | #define UDCBCRA __REG(0x40600204) /* Byte Count Register - EPA */ | ||
871 | #define UDCBCRB __REG(0x40600208) /* Byte Count Register - EPB */ | ||
872 | #define UDCBCRC __REG(0x4060020C) /* Byte Count Register - EPC */ | ||
873 | #define UDCBCRD __REG(0x40600210) /* Byte Count Register - EPD */ | ||
874 | #define UDCBCRE __REG(0x40600214) /* Byte Count Register - EPE */ | ||
875 | #define UDCBCRF __REG(0x40600218) /* Byte Count Register - EPF */ | ||
876 | #define UDCBCRG __REG(0x4060021C) /* Byte Count Register - EPG */ | ||
877 | #define UDCBCRH __REG(0x40600220) /* Byte Count Register - EPH */ | ||
878 | #define UDCBCRI __REG(0x40600224) /* Byte Count Register - EPI */ | ||
879 | #define UDCBCRJ __REG(0x40600228) /* Byte Count Register - EPJ */ | ||
880 | #define UDCBCRK __REG(0x4060022C) /* Byte Count Register - EPK */ | ||
881 | #define UDCBCRL __REG(0x40600230) /* Byte Count Register - EPL */ | ||
882 | #define UDCBCRM __REG(0x40600234) /* Byte Count Register - EPM */ | ||
883 | #define UDCBCRN __REG(0x40600238) /* Byte Count Register - EPN */ | ||
884 | #define UDCBCRP __REG(0x4060023C) /* Byte Count Register - EPP */ | ||
885 | #define UDCBCRQ __REG(0x40600240) /* Byte Count Register - EPQ */ | ||
886 | #define UDCBCRR __REG(0x40600244) /* Byte Count Register - EPR */ | ||
887 | #define UDCBCRS __REG(0x40600248) /* Byte Count Register - EPS */ | ||
888 | #define UDCBCRT __REG(0x4060024C) /* Byte Count Register - EPT */ | ||
889 | #define UDCBCRU __REG(0x40600250) /* Byte Count Register - EPU */ | ||
890 | #define UDCBCRV __REG(0x40600254) /* Byte Count Register - EPV */ | ||
891 | #define UDCBCRW __REG(0x40600258) /* Byte Count Register - EPW */ | ||
892 | #define UDCBCRX __REG(0x4060025C) /* Byte Count Register - EPX */ | ||
893 | |||
894 | #define UDCDN(x) __REG2(0x40600300, (x)<<2) | ||
895 | #define PHYS_UDCDN(x) (0x40600300 + ((x)<<2)) | ||
896 | #define PUDCDN(x) (volatile u32 *)(io_p2v(PHYS_UDCDN((x)))) | ||
897 | #define UDCDR0 __REG(0x40600300) /* Data Register - EP0 */ | ||
898 | #define UDCDRA __REG(0x40600304) /* Data Register - EPA */ | ||
899 | #define UDCDRB __REG(0x40600308) /* Data Register - EPB */ | ||
900 | #define UDCDRC __REG(0x4060030C) /* Data Register - EPC */ | ||
901 | #define UDCDRD __REG(0x40600310) /* Data Register - EPD */ | ||
902 | #define UDCDRE __REG(0x40600314) /* Data Register - EPE */ | ||
903 | #define UDCDRF __REG(0x40600318) /* Data Register - EPF */ | ||
904 | #define UDCDRG __REG(0x4060031C) /* Data Register - EPG */ | ||
905 | #define UDCDRH __REG(0x40600320) /* Data Register - EPH */ | ||
906 | #define UDCDRI __REG(0x40600324) /* Data Register - EPI */ | ||
907 | #define UDCDRJ __REG(0x40600328) /* Data Register - EPJ */ | ||
908 | #define UDCDRK __REG(0x4060032C) /* Data Register - EPK */ | ||
909 | #define UDCDRL __REG(0x40600330) /* Data Register - EPL */ | ||
910 | #define UDCDRM __REG(0x40600334) /* Data Register - EPM */ | ||
911 | #define UDCDRN __REG(0x40600338) /* Data Register - EPN */ | ||
912 | #define UDCDRP __REG(0x4060033C) /* Data Register - EPP */ | ||
913 | #define UDCDRQ __REG(0x40600340) /* Data Register - EPQ */ | ||
914 | #define UDCDRR __REG(0x40600344) /* Data Register - EPR */ | ||
915 | #define UDCDRS __REG(0x40600348) /* Data Register - EPS */ | ||
916 | #define UDCDRT __REG(0x4060034C) /* Data Register - EPT */ | ||
917 | #define UDCDRU __REG(0x40600350) /* Data Register - EPU */ | ||
918 | #define UDCDRV __REG(0x40600354) /* Data Register - EPV */ | ||
919 | #define UDCDRW __REG(0x40600358) /* Data Register - EPW */ | ||
920 | #define UDCDRX __REG(0x4060035C) /* Data Register - EPX */ | ||
921 | |||
922 | #define UDCCN(x) __REG2(0x40600400, (x)<<2) | ||
923 | #define UDCCRA __REG(0x40600404) /* Configuration register EPA */ | ||
924 | #define UDCCRB __REG(0x40600408) /* Configuration register EPB */ | ||
925 | #define UDCCRC __REG(0x4060040C) /* Configuration register EPC */ | ||
926 | #define UDCCRD __REG(0x40600410) /* Configuration register EPD */ | ||
927 | #define UDCCRE __REG(0x40600414) /* Configuration register EPE */ | ||
928 | #define UDCCRF __REG(0x40600418) /* Configuration register EPF */ | ||
929 | #define UDCCRG __REG(0x4060041C) /* Configuration register EPG */ | ||
930 | #define UDCCRH __REG(0x40600420) /* Configuration register EPH */ | ||
931 | #define UDCCRI __REG(0x40600424) /* Configuration register EPI */ | ||
932 | #define UDCCRJ __REG(0x40600428) /* Configuration register EPJ */ | ||
933 | #define UDCCRK __REG(0x4060042C) /* Configuration register EPK */ | ||
934 | #define UDCCRL __REG(0x40600430) /* Configuration register EPL */ | ||
935 | #define UDCCRM __REG(0x40600434) /* Configuration register EPM */ | ||
936 | #define UDCCRN __REG(0x40600438) /* Configuration register EPN */ | ||
937 | #define UDCCRP __REG(0x4060043C) /* Configuration register EPP */ | ||
938 | #define UDCCRQ __REG(0x40600440) /* Configuration register EPQ */ | ||
939 | #define UDCCRR __REG(0x40600444) /* Configuration register EPR */ | ||
940 | #define UDCCRS __REG(0x40600448) /* Configuration register EPS */ | ||
941 | #define UDCCRT __REG(0x4060044C) /* Configuration register EPT */ | ||
942 | #define UDCCRU __REG(0x40600450) /* Configuration register EPU */ | ||
943 | #define UDCCRV __REG(0x40600454) /* Configuration register EPV */ | ||
944 | #define UDCCRW __REG(0x40600458) /* Configuration register EPW */ | ||
945 | #define UDCCRX __REG(0x4060045C) /* Configuration register EPX */ | ||
946 | |||
947 | #define UDCCONR_CN (0x03 << 25) /* Configuration Number */ | ||
948 | #define UDCCONR_CN_S (25) | ||
949 | #define UDCCONR_IN (0x07 << 22) /* Interface Number */ | ||
950 | #define UDCCONR_IN_S (22) | ||
951 | #define UDCCONR_AISN (0x07 << 19) /* Alternate Interface Number */ | ||
952 | #define UDCCONR_AISN_S (19) | ||
953 | #define UDCCONR_EN (0x0f << 15) /* Endpoint Number */ | ||
954 | #define UDCCONR_EN_S (15) | ||
955 | #define UDCCONR_ET (0x03 << 13) /* Endpoint Type: */ | ||
956 | #define UDCCONR_ET_S (13) | ||
957 | #define UDCCONR_ET_INT (0x03 << 13) /* Interrupt */ | ||
958 | #define UDCCONR_ET_BULK (0x02 << 13) /* Bulk */ | ||
959 | #define UDCCONR_ET_ISO (0x01 << 13) /* Isochronous */ | ||
960 | #define UDCCONR_ET_NU (0x00 << 13) /* Not used */ | ||
961 | #define UDCCONR_ED (1 << 12) /* Endpoint Direction */ | ||
962 | #define UDCCONR_MPS (0x3ff << 2) /* Maximum Packet Size */ | ||
963 | #define UDCCONR_MPS_S (2) | ||
964 | #define UDCCONR_DE (1 << 1) /* Double Buffering Enable */ | ||
965 | #define UDCCONR_EE (1 << 0) /* Endpoint Enable */ | ||
966 | |||
967 | |||
968 | #define UDC_INT_FIFOERROR (0x2) | ||
969 | #define UDC_INT_PACKETCMP (0x1) | ||
970 | |||
971 | #define UDC_FNR_MASK (0x7ff) | ||
972 | |||
973 | #define UDCCSR_WR_MASK (UDCCSR_DME|UDCCSR_FST) | ||
974 | #define UDC_BCR_MASK (0x3ff) | ||
975 | #endif | ||
976 | |||
977 | /* | ||
978 | * Fast Infrared Communication Port | ||
979 | */ | ||
980 | |||
981 | #define FICP __REG(0x40800000) /* Start of FICP area */ | ||
982 | #define ICCR0 __REG(0x40800000) /* ICP Control Register 0 */ | ||
983 | #define ICCR1 __REG(0x40800004) /* ICP Control Register 1 */ | ||
984 | #define ICCR2 __REG(0x40800008) /* ICP Control Register 2 */ | ||
985 | #define ICDR __REG(0x4080000c) /* ICP Data Register */ | ||
986 | #define ICSR0 __REG(0x40800014) /* ICP Status Register 0 */ | ||
987 | #define ICSR1 __REG(0x40800018) /* ICP Status Register 1 */ | ||
988 | |||
989 | #define ICCR0_AME (1 << 7) /* Adress match enable */ | ||
990 | #define ICCR0_TIE (1 << 6) /* Transmit FIFO interrupt enable */ | ||
991 | #define ICCR0_RIE (1 << 5) /* Recieve FIFO interrupt enable */ | ||
992 | #define ICCR0_RXE (1 << 4) /* Receive enable */ | ||
993 | #define ICCR0_TXE (1 << 3) /* Transmit enable */ | ||
994 | #define ICCR0_TUS (1 << 2) /* Transmit FIFO underrun select */ | ||
995 | #define ICCR0_LBM (1 << 1) /* Loopback mode */ | ||
996 | #define ICCR0_ITR (1 << 0) /* IrDA transmission */ | ||
997 | |||
998 | #ifdef CONFIG_PXA27x | ||
999 | #define ICCR2_RXP (1 << 3) /* Receive Pin Polarity select */ | ||
1000 | #define ICCR2_TXP (1 << 2) /* Transmit Pin Polarity select */ | ||
1001 | #define ICCR2_TRIG (3 << 0) /* Receive FIFO Trigger threshold */ | ||
1002 | #define ICCR2_TRIG_8 (0 << 0) /* >= 8 bytes */ | ||
1003 | #define ICCR2_TRIG_16 (1 << 0) /* >= 16 bytes */ | ||
1004 | #define ICCR2_TRIG_32 (2 << 0) /* >= 32 bytes */ | ||
1005 | #endif | ||
1006 | |||
1007 | #ifdef CONFIG_PXA27x | ||
1008 | #define ICSR0_EOC (1 << 6) /* DMA End of Descriptor Chain */ | ||
1009 | #endif | ||
1010 | #define ICSR0_FRE (1 << 5) /* Framing error */ | ||
1011 | #define ICSR0_RFS (1 << 4) /* Receive FIFO service request */ | ||
1012 | #define ICSR0_TFS (1 << 3) /* Transnit FIFO service request */ | ||
1013 | #define ICSR0_RAB (1 << 2) /* Receiver abort */ | ||
1014 | #define ICSR0_TUR (1 << 1) /* Trunsmit FIFO underun */ | ||
1015 | #define ICSR0_EIF (1 << 0) /* End/Error in FIFO */ | ||
1016 | |||
1017 | #define ICSR1_ROR (1 << 6) /* Receiver FIFO underrun */ | ||
1018 | #define ICSR1_CRE (1 << 5) /* CRC error */ | ||
1019 | #define ICSR1_EOF (1 << 4) /* End of frame */ | ||
1020 | #define ICSR1_TNF (1 << 3) /* Transmit FIFO not full */ | ||
1021 | #define ICSR1_RNE (1 << 2) /* Receive FIFO not empty */ | ||
1022 | #define ICSR1_TBY (1 << 1) /* Tramsmiter busy flag */ | ||
1023 | #define ICSR1_RSY (1 << 0) /* Recevier synchronized flag */ | ||
1024 | |||
1025 | |||
1026 | /* | ||
1027 | * Real Time Clock | ||
1028 | */ | ||
1029 | |||
1030 | #define RCNR __REG(0x40900000) /* RTC Count Register */ | ||
1031 | #define RTAR __REG(0x40900004) /* RTC Alarm Register */ | ||
1032 | #define RTSR __REG(0x40900008) /* RTC Status Register */ | ||
1033 | #define RTTR __REG(0x4090000C) /* RTC Timer Trim Register */ | ||
1034 | #define PIAR __REG(0x40900038) /* Periodic Interrupt Alarm Register */ | ||
1035 | |||
1036 | #define RTSR_PICE (1 << 15) /* Periodic interrupt count enable */ | ||
1037 | #define RTSR_PIALE (1 << 14) /* Periodic interrupt Alarm enable */ | ||
1038 | #define RTSR_HZE (1 << 3) /* HZ interrupt enable */ | ||
1039 | #define RTSR_ALE (1 << 2) /* RTC alarm interrupt enable */ | ||
1040 | #define RTSR_HZ (1 << 1) /* HZ rising-edge detected */ | ||
1041 | #define RTSR_AL (1 << 0) /* RTC alarm detected */ | ||
1042 | |||
1043 | |||
1044 | /* | ||
1045 | * OS Timer & Match Registers | ||
1046 | */ | ||
1047 | |||
1048 | #define OSMR0 __REG(0x40A00000) /* */ | ||
1049 | #define OSMR1 __REG(0x40A00004) /* */ | ||
1050 | #define OSMR2 __REG(0x40A00008) /* */ | ||
1051 | #define OSMR3 __REG(0x40A0000C) /* */ | ||
1052 | #define OSMR4 __REG(0x40A00080) /* */ | ||
1053 | #define OSCR __REG(0x40A00010) /* OS Timer Counter Register */ | ||
1054 | #define OSCR4 __REG(0x40A00040) /* OS Timer Counter Register */ | ||
1055 | #define OMCR4 __REG(0x40A000C0) /* */ | ||
1056 | #define OSSR __REG(0x40A00014) /* OS Timer Status Register */ | ||
1057 | #define OWER __REG(0x40A00018) /* OS Timer Watchdog Enable Register */ | ||
1058 | #define OIER __REG(0x40A0001C) /* OS Timer Interrupt Enable Register */ | ||
1059 | |||
1060 | #define OSSR_M3 (1 << 3) /* Match status channel 3 */ | ||
1061 | #define OSSR_M2 (1 << 2) /* Match status channel 2 */ | ||
1062 | #define OSSR_M1 (1 << 1) /* Match status channel 1 */ | ||
1063 | #define OSSR_M0 (1 << 0) /* Match status channel 0 */ | ||
1064 | |||
1065 | #define OWER_WME (1 << 0) /* Watchdog Match Enable */ | ||
1066 | |||
1067 | #define OIER_E3 (1 << 3) /* Interrupt enable channel 3 */ | ||
1068 | #define OIER_E2 (1 << 2) /* Interrupt enable channel 2 */ | ||
1069 | #define OIER_E1 (1 << 1) /* Interrupt enable channel 1 */ | ||
1070 | #define OIER_E0 (1 << 0) /* Interrupt enable channel 0 */ | ||
1071 | |||
1072 | |||
1073 | /* | ||
1074 | * Pulse Width Modulator | ||
1075 | */ | ||
1076 | |||
1077 | #define PWM_CTRL0 __REG(0x40B00000) /* PWM 0 Control Register */ | ||
1078 | #define PWM_PWDUTY0 __REG(0x40B00004) /* PWM 0 Duty Cycle Register */ | ||
1079 | #define PWM_PERVAL0 __REG(0x40B00008) /* PWM 0 Period Control Register */ | ||
1080 | |||
1081 | #define PWM_CTRL1 __REG(0x40C00000) /* PWM 1Control Register */ | ||
1082 | #define PWM_PWDUTY1 __REG(0x40C00004) /* PWM 1 Duty Cycle Register */ | ||
1083 | #define PWM_PERVAL1 __REG(0x40C00008) /* PWM 1 Period Control Register */ | ||
1084 | |||
1085 | |||
1086 | /* | ||
1087 | * Interrupt Controller | ||
1088 | */ | ||
1089 | |||
1090 | #define ICIP __REG(0x40D00000) /* Interrupt Controller IRQ Pending Register */ | ||
1091 | #define ICMR __REG(0x40D00004) /* Interrupt Controller Mask Register */ | ||
1092 | #define ICLR __REG(0x40D00008) /* Interrupt Controller Level Register */ | ||
1093 | #define ICFP __REG(0x40D0000C) /* Interrupt Controller FIQ Pending Register */ | ||
1094 | #define ICPR __REG(0x40D00010) /* Interrupt Controller Pending Register */ | ||
1095 | #define ICCR __REG(0x40D00014) /* Interrupt Controller Control Register */ | ||
1096 | |||
1097 | |||
1098 | /* | ||
1099 | * General Purpose I/O | ||
1100 | */ | ||
1101 | |||
1102 | #define GPLR0 __REG(0x40E00000) /* GPIO Pin-Level Register GPIO<31:0> */ | ||
1103 | #define GPLR1 __REG(0x40E00004) /* GPIO Pin-Level Register GPIO<63:32> */ | ||
1104 | #define GPLR2 __REG(0x40E00008) /* GPIO Pin-Level Register GPIO<80:64> */ | ||
1105 | |||
1106 | #define GPDR0 __REG(0x40E0000C) /* GPIO Pin Direction Register GPIO<31:0> */ | ||
1107 | #define GPDR1 __REG(0x40E00010) /* GPIO Pin Direction Register GPIO<63:32> */ | ||
1108 | #define GPDR2 __REG(0x40E00014) /* GPIO Pin Direction Register GPIO<80:64> */ | ||
1109 | |||
1110 | #define GPSR0 __REG(0x40E00018) /* GPIO Pin Output Set Register GPIO<31:0> */ | ||
1111 | #define GPSR1 __REG(0x40E0001C) /* GPIO Pin Output Set Register GPIO<63:32> */ | ||
1112 | #define GPSR2 __REG(0x40E00020) /* GPIO Pin Output Set Register GPIO<80:64> */ | ||
1113 | |||
1114 | #define GPCR0 __REG(0x40E00024) /* GPIO Pin Output Clear Register GPIO<31:0> */ | ||
1115 | #define GPCR1 __REG(0x40E00028) /* GPIO Pin Output Clear Register GPIO <63:32> */ | ||
1116 | #define GPCR2 __REG(0x40E0002C) /* GPIO Pin Output Clear Register GPIO <80:64> */ | ||
1117 | |||
1118 | #define GRER0 __REG(0x40E00030) /* GPIO Rising-Edge Detect Register GPIO<31:0> */ | ||
1119 | #define GRER1 __REG(0x40E00034) /* GPIO Rising-Edge Detect Register GPIO<63:32> */ | ||
1120 | #define GRER2 __REG(0x40E00038) /* GPIO Rising-Edge Detect Register GPIO<80:64> */ | ||
1121 | |||
1122 | #define GFER0 __REG(0x40E0003C) /* GPIO Falling-Edge Detect Register GPIO<31:0> */ | ||
1123 | #define GFER1 __REG(0x40E00040) /* GPIO Falling-Edge Detect Register GPIO<63:32> */ | ||
1124 | #define GFER2 __REG(0x40E00044) /* GPIO Falling-Edge Detect Register GPIO<80:64> */ | ||
1125 | |||
1126 | #define GEDR0 __REG(0x40E00048) /* GPIO Edge Detect Status Register GPIO<31:0> */ | ||
1127 | #define GEDR1 __REG(0x40E0004C) /* GPIO Edge Detect Status Register GPIO<63:32> */ | ||
1128 | #define GEDR2 __REG(0x40E00050) /* GPIO Edge Detect Status Register GPIO<80:64> */ | ||
1129 | |||
1130 | #define GAFR0_L __REG(0x40E00054) /* GPIO Alternate Function Select Register GPIO<15:0> */ | ||
1131 | #define GAFR0_U __REG(0x40E00058) /* GPIO Alternate Function Select Register GPIO<31:16> */ | ||
1132 | #define GAFR1_L __REG(0x40E0005C) /* GPIO Alternate Function Select Register GPIO<47:32> */ | ||
1133 | #define GAFR1_U __REG(0x40E00060) /* GPIO Alternate Function Select Register GPIO<63:48> */ | ||
1134 | #define GAFR2_L __REG(0x40E00064) /* GPIO Alternate Function Select Register GPIO<79:64> */ | ||
1135 | #define GAFR2_U __REG(0x40E00068) /* GPIO Alternate Function Select Register GPIO<95-80> */ | ||
1136 | #define GAFR3_L __REG(0x40E0006C) /* GPIO Alternate Function Select Register GPIO<111:96> */ | ||
1137 | #define GAFR3_U __REG(0x40E00070) /* GPIO Alternate Function Select Register GPIO<127:112> */ | ||
1138 | |||
1139 | #define GPLR3 __REG(0x40E00100) /* GPIO Pin-Level Register GPIO<127:96> */ | ||
1140 | #define GPDR3 __REG(0x40E0010C) /* GPIO Pin Direction Register GPIO<127:96> */ | ||
1141 | #define GPSR3 __REG(0x40E00118) /* GPIO Pin Output Set Register GPIO<127:96> */ | ||
1142 | #define GPCR3 __REG(0x40E00124) /* GPIO Pin Output Clear Register GPIO<127:96> */ | ||
1143 | #define GRER3 __REG(0x40E00130) /* GPIO Rising-Edge Detect Register GPIO<127:96> */ | ||
1144 | #define GFER3 __REG(0x40E0013C) /* GPIO Falling-Edge Detect Register GPIO<127:96> */ | ||
1145 | #define GEDR3 __REG(0x40E00148) /* GPIO Edge Detect Status Register GPIO<127:96> */ | ||
1146 | |||
1147 | /* More handy macros. The argument is a literal GPIO number. */ | ||
1148 | |||
1149 | #define GPIO_bit(x) (1 << ((x) & 0x1f)) | ||
1150 | |||
1151 | #ifdef CONFIG_PXA27x | ||
1152 | |||
1153 | /* Interrupt Controller */ | ||
1154 | |||
1155 | #define ICIP2 __REG(0x40D0009C) /* Interrupt Controller IRQ Pending Register 2 */ | ||
1156 | #define ICMR2 __REG(0x40D000A0) /* Interrupt Controller Mask Register 2 */ | ||
1157 | #define ICLR2 __REG(0x40D000A4) /* Interrupt Controller Level Register 2 */ | ||
1158 | #define ICFP2 __REG(0x40D000A8) /* Interrupt Controller FIQ Pending Register 2 */ | ||
1159 | #define ICPR2 __REG(0x40D000AC) /* Interrupt Controller Pending Register 2 */ | ||
1160 | |||
1161 | #define _GPLR(x) __REG2(0x40E00000, ((x) & 0x60) >> 3) | ||
1162 | #define _GPDR(x) __REG2(0x40E0000C, ((x) & 0x60) >> 3) | ||
1163 | #define _GPSR(x) __REG2(0x40E00018, ((x) & 0x60) >> 3) | ||
1164 | #define _GPCR(x) __REG2(0x40E00024, ((x) & 0x60) >> 3) | ||
1165 | #define _GRER(x) __REG2(0x40E00030, ((x) & 0x60) >> 3) | ||
1166 | #define _GFER(x) __REG2(0x40E0003C, ((x) & 0x60) >> 3) | ||
1167 | #define _GEDR(x) __REG2(0x40E00048, ((x) & 0x60) >> 3) | ||
1168 | #define _GAFR(x) __REG2(0x40E00054, ((x) & 0x70) >> 2) | ||
1169 | |||
1170 | #define GPLR(x) (*((((x) & 0x7f) < 96) ? &_GPLR(x) : &GPLR3)) | ||
1171 | #define GPDR(x) (*((((x) & 0x7f) < 96) ? &_GPDR(x) : &GPDR3)) | ||
1172 | #define GPSR(x) (*((((x) & 0x7f) < 96) ? &_GPSR(x) : &GPSR3)) | ||
1173 | #define GPCR(x) (*((((x) & 0x7f) < 96) ? &_GPCR(x) : &GPCR3)) | ||
1174 | #define GRER(x) (*((((x) & 0x7f) < 96) ? &_GRER(x) : &GRER3)) | ||
1175 | #define GFER(x) (*((((x) & 0x7f) < 96) ? &_GFER(x) : &GFER3)) | ||
1176 | #define GEDR(x) (*((((x) & 0x7f) < 96) ? &_GEDR(x) : &GEDR3)) | ||
1177 | #define GAFR(x) (*((((x) & 0x7f) < 96) ? &_GAFR(x) : \ | ||
1178 | ((((x) & 0x7f) < 112) ? &GAFR3_L : &GAFR3_U))) | ||
1179 | #else | ||
1180 | |||
1181 | #define GPLR(x) __REG2(0x40E00000, ((x) & 0x60) >> 3) | ||
1182 | #define GPDR(x) __REG2(0x40E0000C, ((x) & 0x60) >> 3) | ||
1183 | #define GPSR(x) __REG2(0x40E00018, ((x) & 0x60) >> 3) | ||
1184 | #define GPCR(x) __REG2(0x40E00024, ((x) & 0x60) >> 3) | ||
1185 | #define GRER(x) __REG2(0x40E00030, ((x) & 0x60) >> 3) | ||
1186 | #define GFER(x) __REG2(0x40E0003C, ((x) & 0x60) >> 3) | ||
1187 | #define GEDR(x) __REG2(0x40E00048, ((x) & 0x60) >> 3) | ||
1188 | #define GAFR(x) __REG2(0x40E00054, ((x) & 0x70) >> 2) | ||
1189 | |||
1190 | #endif | ||
1191 | |||
1192 | |||
1193 | /* GPIO alternate function assignments */ | ||
1194 | |||
1195 | #define GPIO1_RST 1 /* reset */ | ||
1196 | #define GPIO6_MMCCLK 6 /* MMC Clock */ | ||
1197 | #define GPIO7_48MHz 7 /* 48 MHz clock output */ | ||
1198 | #define GPIO8_MMCCS0 8 /* MMC Chip Select 0 */ | ||
1199 | #define GPIO9_MMCCS1 9 /* MMC Chip Select 1 */ | ||
1200 | #define GPIO10_RTCCLK 10 /* real time clock (1 Hz) */ | ||
1201 | #define GPIO11_3_6MHz 11 /* 3.6 MHz oscillator out */ | ||
1202 | #define GPIO12_32KHz 12 /* 32 kHz out */ | ||
1203 | #define GPIO13_MBGNT 13 /* memory controller grant */ | ||
1204 | #define GPIO14_MBREQ 14 /* alternate bus master request */ | ||
1205 | #define GPIO15_nCS_1 15 /* chip select 1 */ | ||
1206 | #define GPIO16_PWM0 16 /* PWM0 output */ | ||
1207 | #define GPIO17_PWM1 17 /* PWM1 output */ | ||
1208 | #define GPIO18_RDY 18 /* Ext. Bus Ready */ | ||
1209 | #define GPIO19_DREQ1 19 /* External DMA Request */ | ||
1210 | #define GPIO20_DREQ0 20 /* External DMA Request */ | ||
1211 | #define GPIO23_SCLK 23 /* SSP clock */ | ||
1212 | #define GPIO24_SFRM 24 /* SSP Frame */ | ||
1213 | #define GPIO25_STXD 25 /* SSP transmit */ | ||
1214 | #define GPIO26_SRXD 26 /* SSP receive */ | ||
1215 | #define GPIO27_SEXTCLK 27 /* SSP ext_clk */ | ||
1216 | #define GPIO28_BITCLK 28 /* AC97/I2S bit_clk */ | ||
1217 | #define GPIO29_SDATA_IN 29 /* AC97 Sdata_in0 / I2S Sdata_in */ | ||
1218 | #define GPIO30_SDATA_OUT 30 /* AC97/I2S Sdata_out */ | ||
1219 | #define GPIO31_SYNC 31 /* AC97/I2S sync */ | ||
1220 | #define GPIO32_SDATA_IN1 32 /* AC97 Sdata_in1 */ | ||
1221 | #define GPIO32_SYSCLK 32 /* I2S System Clock */ | ||
1222 | #define GPIO32_MMCCLK 32 /* MMC Clock (PXA270) */ | ||
1223 | #define GPIO33_nCS_5 33 /* chip select 5 */ | ||
1224 | #define GPIO34_FFRXD 34 /* FFUART receive */ | ||
1225 | #define GPIO34_MMCCS0 34 /* MMC Chip Select 0 */ | ||
1226 | #define GPIO35_FFCTS 35 /* FFUART Clear to send */ | ||
1227 | #define GPIO36_FFDCD 36 /* FFUART Data carrier detect */ | ||
1228 | #define GPIO37_FFDSR 37 /* FFUART data set ready */ | ||
1229 | #define GPIO38_FFRI 38 /* FFUART Ring Indicator */ | ||
1230 | #define GPIO39_MMCCS1 39 /* MMC Chip Select 1 */ | ||
1231 | #define GPIO39_FFTXD 39 /* FFUART transmit data */ | ||
1232 | #define GPIO40_FFDTR 40 /* FFUART data terminal Ready */ | ||
1233 | #define GPIO41_FFRTS 41 /* FFUART request to send */ | ||
1234 | #define GPIO42_BTRXD 42 /* BTUART receive data */ | ||
1235 | #define GPIO43_BTTXD 43 /* BTUART transmit data */ | ||
1236 | #define GPIO44_BTCTS 44 /* BTUART clear to send */ | ||
1237 | #define GPIO45_BTRTS 45 /* BTUART request to send */ | ||
1238 | #define GPIO45_AC97_SYSCLK 45 /* AC97 System Clock */ | ||
1239 | #define GPIO46_ICPRXD 46 /* ICP receive data */ | ||
1240 | #define GPIO46_STRXD 46 /* STD_UART receive data */ | ||
1241 | #define GPIO47_ICPTXD 47 /* ICP transmit data */ | ||
1242 | #define GPIO47_STTXD 47 /* STD_UART transmit data */ | ||
1243 | #define GPIO48_nPOE 48 /* Output Enable for Card Space */ | ||
1244 | #define GPIO49_nPWE 49 /* Write Enable for Card Space */ | ||
1245 | #define GPIO50_nPIOR 50 /* I/O Read for Card Space */ | ||
1246 | #define GPIO51_nPIOW 51 /* I/O Write for Card Space */ | ||
1247 | #define GPIO52_nPCE_1 52 /* Card Enable for Card Space */ | ||
1248 | #define GPIO53_nPCE_2 53 /* Card Enable for Card Space */ | ||
1249 | #define GPIO53_MMCCLK 53 /* MMC Clock */ | ||
1250 | #define GPIO54_MMCCLK 54 /* MMC Clock */ | ||
1251 | #define GPIO54_pSKTSEL 54 /* Socket Select for Card Space */ | ||
1252 | #define GPIO54_nPCE_2 54 /* Card Enable for Card Space (PXA27x) */ | ||
1253 | #define GPIO55_nPREG 55 /* Card Address bit 26 */ | ||
1254 | #define GPIO56_nPWAIT 56 /* Wait signal for Card Space */ | ||
1255 | #define GPIO57_nIOIS16 57 /* Bus Width select for I/O Card Space */ | ||
1256 | #define GPIO58_LDD_0 58 /* LCD data pin 0 */ | ||
1257 | #define GPIO59_LDD_1 59 /* LCD data pin 1 */ | ||
1258 | #define GPIO60_LDD_2 60 /* LCD data pin 2 */ | ||
1259 | #define GPIO61_LDD_3 61 /* LCD data pin 3 */ | ||
1260 | #define GPIO62_LDD_4 62 /* LCD data pin 4 */ | ||
1261 | #define GPIO63_LDD_5 63 /* LCD data pin 5 */ | ||
1262 | #define GPIO64_LDD_6 64 /* LCD data pin 6 */ | ||
1263 | #define GPIO65_LDD_7 65 /* LCD data pin 7 */ | ||
1264 | #define GPIO66_LDD_8 66 /* LCD data pin 8 */ | ||
1265 | #define GPIO66_MBREQ 66 /* alternate bus master req */ | ||
1266 | #define GPIO67_LDD_9 67 /* LCD data pin 9 */ | ||
1267 | #define GPIO67_MMCCS0 67 /* MMC Chip Select 0 */ | ||
1268 | #define GPIO68_LDD_10 68 /* LCD data pin 10 */ | ||
1269 | #define GPIO68_MMCCS1 68 /* MMC Chip Select 1 */ | ||
1270 | #define GPIO69_LDD_11 69 /* LCD data pin 11 */ | ||
1271 | #define GPIO69_MMCCLK 69 /* MMC_CLK */ | ||
1272 | #define GPIO70_LDD_12 70 /* LCD data pin 12 */ | ||
1273 | #define GPIO70_RTCCLK 70 /* Real Time clock (1 Hz) */ | ||
1274 | #define GPIO71_LDD_13 71 /* LCD data pin 13 */ | ||
1275 | #define GPIO71_3_6MHz 71 /* 3.6 MHz Oscillator clock */ | ||
1276 | #define GPIO72_LDD_14 72 /* LCD data pin 14 */ | ||
1277 | #define GPIO72_32kHz 72 /* 32 kHz clock */ | ||
1278 | #define GPIO73_LDD_15 73 /* LCD data pin 15 */ | ||
1279 | #define GPIO73_MBGNT 73 /* Memory controller grant */ | ||
1280 | #define GPIO74_LCD_FCLK 74 /* LCD Frame clock */ | ||
1281 | #define GPIO75_LCD_LCLK 75 /* LCD line clock */ | ||
1282 | #define GPIO76_LCD_PCLK 76 /* LCD Pixel clock */ | ||
1283 | #define GPIO77_LCD_ACBIAS 77 /* LCD AC Bias */ | ||
1284 | #define GPIO78_nCS_2 78 /* chip select 2 */ | ||
1285 | #define GPIO79_nCS_3 79 /* chip select 3 */ | ||
1286 | #define GPIO80_nCS_4 80 /* chip select 4 */ | ||
1287 | #define GPIO81_NSCLK 81 /* NSSP clock */ | ||
1288 | #define GPIO82_NSFRM 82 /* NSSP Frame */ | ||
1289 | #define GPIO83_NSTXD 83 /* NSSP transmit */ | ||
1290 | #define GPIO84_NSRXD 84 /* NSSP receive */ | ||
1291 | #define GPIO85_nPCE_1 85 /* Card Enable for Card Space (PXA27x) */ | ||
1292 | #define GPIO92_MMCDAT0 92 /* MMC DAT0 (PXA27x) */ | ||
1293 | #define GPIO109_MMCDAT1 109 /* MMC DAT1 (PXA27x) */ | ||
1294 | #define GPIO110_MMCDAT2 110 /* MMC DAT2 (PXA27x) */ | ||
1295 | #define GPIO110_MMCCS0 110 /* MMC Chip Select 0 (PXA27x) */ | ||
1296 | #define GPIO111_MMCDAT3 111 /* MMC DAT3 (PXA27x) */ | ||
1297 | #define GPIO111_MMCCS1 111 /* MMC Chip Select 1 (PXA27x) */ | ||
1298 | #define GPIO112_MMCCMD 112 /* MMC CMD (PXA27x) */ | ||
1299 | #define GPIO113_AC97_RESET_N 113 /* AC97 NRESET on (PXA27x) */ | ||
1300 | |||
1301 | /* GPIO alternate function mode & direction */ | ||
1302 | |||
1303 | #define GPIO_IN 0x000 | ||
1304 | #define GPIO_OUT 0x080 | ||
1305 | #define GPIO_ALT_FN_1_IN 0x100 | ||
1306 | #define GPIO_ALT_FN_1_OUT 0x180 | ||
1307 | #define GPIO_ALT_FN_2_IN 0x200 | ||
1308 | #define GPIO_ALT_FN_2_OUT 0x280 | ||
1309 | #define GPIO_ALT_FN_3_IN 0x300 | ||
1310 | #define GPIO_ALT_FN_3_OUT 0x380 | ||
1311 | #define GPIO_MD_MASK_NR 0x07f | ||
1312 | #define GPIO_MD_MASK_DIR 0x080 | ||
1313 | #define GPIO_MD_MASK_FN 0x300 | ||
1314 | #define GPIO_DFLT_LOW 0x400 | ||
1315 | #define GPIO_DFLT_HIGH 0x800 | ||
1316 | |||
1317 | #define GPIO1_RTS_MD ( 1 | GPIO_ALT_FN_1_IN) | ||
1318 | #define GPIO6_MMCCLK_MD ( 6 | GPIO_ALT_FN_1_OUT) | ||
1319 | #define GPIO7_48MHz_MD ( 7 | GPIO_ALT_FN_1_OUT) | ||
1320 | #define GPIO8_MMCCS0_MD ( 8 | GPIO_ALT_FN_1_OUT) | ||
1321 | #define GPIO9_MMCCS1_MD ( 9 | GPIO_ALT_FN_1_OUT) | ||
1322 | #define GPIO10_RTCCLK_MD (10 | GPIO_ALT_FN_1_OUT) | ||
1323 | #define GPIO11_3_6MHz_MD (11 | GPIO_ALT_FN_1_OUT) | ||
1324 | #define GPIO12_32KHz_MD (12 | GPIO_ALT_FN_1_OUT) | ||
1325 | #define GPIO13_MBGNT_MD (13 | GPIO_ALT_FN_2_OUT) | ||
1326 | #define GPIO14_MBREQ_MD (14 | GPIO_ALT_FN_1_IN) | ||
1327 | #define GPIO15_nCS_1_MD (15 | GPIO_ALT_FN_2_OUT) | ||
1328 | #define GPIO16_PWM0_MD (16 | GPIO_ALT_FN_2_OUT) | ||
1329 | #define GPIO17_PWM1_MD (17 | GPIO_ALT_FN_2_OUT) | ||
1330 | #define GPIO18_RDY_MD (18 | GPIO_ALT_FN_1_IN) | ||
1331 | #define GPIO19_DREQ1_MD (19 | GPIO_ALT_FN_1_IN) | ||
1332 | #define GPIO20_DREQ0_MD (20 | GPIO_ALT_FN_1_IN) | ||
1333 | #define GPIO23_SCLK_MD (23 | GPIO_ALT_FN_2_OUT) | ||
1334 | #define GPIO24_SFRM_MD (24 | GPIO_ALT_FN_2_OUT) | ||
1335 | #define GPIO25_STXD_MD (25 | GPIO_ALT_FN_2_OUT) | ||
1336 | #define GPIO26_SRXD_MD (26 | GPIO_ALT_FN_1_IN) | ||
1337 | #define GPIO27_SEXTCLK_MD (27 | GPIO_ALT_FN_1_IN) | ||
1338 | #define GPIO28_BITCLK_AC97_MD (28 | GPIO_ALT_FN_1_IN) | ||
1339 | #define GPIO28_BITCLK_IN_I2S_MD (28 | GPIO_ALT_FN_2_IN) | ||
1340 | #define GPIO28_BITCLK_OUT_I2S_MD (28 | GPIO_ALT_FN_1_OUT) | ||
1341 | #define GPIO29_SDATA_IN_AC97_MD (29 | GPIO_ALT_FN_1_IN) | ||
1342 | #define GPIO29_SDATA_IN_I2S_MD (29 | GPIO_ALT_FN_2_IN) | ||
1343 | #define GPIO30_SDATA_OUT_AC97_MD (30 | GPIO_ALT_FN_2_OUT) | ||
1344 | #define GPIO30_SDATA_OUT_I2S_MD (30 | GPIO_ALT_FN_1_OUT) | ||
1345 | #define GPIO31_SYNC_I2S_MD (31 | GPIO_ALT_FN_1_OUT) | ||
1346 | #define GPIO31_SYNC_AC97_MD (31 | GPIO_ALT_FN_2_OUT) | ||
1347 | #define GPIO32_SDATA_IN1_AC97_MD (32 | GPIO_ALT_FN_1_IN) | ||
1348 | #define GPIO32_SYSCLK_I2S_MD (32 | GPIO_ALT_FN_1_OUT) | ||
1349 | #define GPIO32_MMCCLK_MD ( 32 | GPIO_ALT_FN_2_OUT) | ||
1350 | #define GPIO33_nCS_5_MD (33 | GPIO_ALT_FN_2_OUT) | ||
1351 | #define GPIO34_FFRXD_MD (34 | GPIO_ALT_FN_1_IN) | ||
1352 | #define GPIO34_MMCCS0_MD (34 | GPIO_ALT_FN_2_OUT) | ||
1353 | #define GPIO35_FFCTS_MD (35 | GPIO_ALT_FN_1_IN) | ||
1354 | #define GPIO36_FFDCD_MD (36 | GPIO_ALT_FN_1_IN) | ||
1355 | #define GPIO37_FFDSR_MD (37 | GPIO_ALT_FN_1_IN) | ||
1356 | #define GPIO38_FFRI_MD (38 | GPIO_ALT_FN_1_IN) | ||
1357 | #define GPIO39_MMCCS1_MD (39 | GPIO_ALT_FN_1_OUT) | ||
1358 | #define GPIO39_FFTXD_MD (39 | GPIO_ALT_FN_2_OUT) | ||
1359 | #define GPIO40_FFDTR_MD (40 | GPIO_ALT_FN_2_OUT) | ||
1360 | #define GPIO41_FFRTS_MD (41 | GPIO_ALT_FN_2_OUT) | ||
1361 | #define GPIO42_BTRXD_MD (42 | GPIO_ALT_FN_1_IN) | ||
1362 | #define GPIO43_BTTXD_MD (43 | GPIO_ALT_FN_2_OUT) | ||
1363 | #define GPIO44_BTCTS_MD (44 | GPIO_ALT_FN_1_IN) | ||
1364 | #define GPIO45_BTRTS_MD (45 | GPIO_ALT_FN_2_OUT) | ||
1365 | #define GPIO45_SYSCLK_AC97_MD (45 | GPIO_ALT_FN_1_OUT) | ||
1366 | #define GPIO46_ICPRXD_MD (46 | GPIO_ALT_FN_1_IN) | ||
1367 | #define GPIO46_STRXD_MD (46 | GPIO_ALT_FN_2_IN) | ||
1368 | #define GPIO47_ICPTXD_MD (47 | GPIO_ALT_FN_2_OUT) | ||
1369 | #define GPIO47_STTXD_MD (47 | GPIO_ALT_FN_1_OUT) | ||
1370 | #define GPIO48_nPOE_MD (48 | GPIO_ALT_FN_2_OUT) | ||
1371 | #define GPIO49_nPWE_MD (49 | GPIO_ALT_FN_2_OUT) | ||
1372 | #define GPIO50_nPIOR_MD (50 | GPIO_ALT_FN_2_OUT) | ||
1373 | #define GPIO51_nPIOW_MD (51 | GPIO_ALT_FN_2_OUT) | ||
1374 | #define GPIO52_nPCE_1_MD (52 | GPIO_ALT_FN_2_OUT) | ||
1375 | #define GPIO53_nPCE_2_MD (53 | GPIO_ALT_FN_2_OUT) | ||
1376 | #define GPIO53_MMCCLK_MD (53 | GPIO_ALT_FN_1_OUT) | ||
1377 | #define GPIO54_MMCCLK_MD (54 | GPIO_ALT_FN_1_OUT) | ||
1378 | #define GPIO54_nPCE_2_MD (54 | GPIO_ALT_FN_2_OUT) | ||
1379 | #define GPIO54_pSKTSEL_MD (54 | GPIO_ALT_FN_2_OUT) | ||
1380 | #define GPIO55_nPREG_MD (55 | GPIO_ALT_FN_2_OUT) | ||
1381 | #define GPIO56_nPWAIT_MD (56 | GPIO_ALT_FN_1_IN) | ||
1382 | #define GPIO57_nIOIS16_MD (57 | GPIO_ALT_FN_1_IN) | ||
1383 | #define GPIO58_LDD_0_MD (58 | GPIO_ALT_FN_2_OUT) | ||
1384 | #define GPIO59_LDD_1_MD (59 | GPIO_ALT_FN_2_OUT) | ||
1385 | #define GPIO60_LDD_2_MD (60 | GPIO_ALT_FN_2_OUT) | ||
1386 | #define GPIO61_LDD_3_MD (61 | GPIO_ALT_FN_2_OUT) | ||
1387 | #define GPIO62_LDD_4_MD (62 | GPIO_ALT_FN_2_OUT) | ||
1388 | #define GPIO63_LDD_5_MD (63 | GPIO_ALT_FN_2_OUT) | ||
1389 | #define GPIO64_LDD_6_MD (64 | GPIO_ALT_FN_2_OUT) | ||
1390 | #define GPIO65_LDD_7_MD (65 | GPIO_ALT_FN_2_OUT) | ||
1391 | #define GPIO66_LDD_8_MD (66 | GPIO_ALT_FN_2_OUT) | ||
1392 | #define GPIO66_MBREQ_MD (66 | GPIO_ALT_FN_1_IN) | ||
1393 | #define GPIO67_LDD_9_MD (67 | GPIO_ALT_FN_2_OUT) | ||
1394 | #define GPIO67_MMCCS0_MD (67 | GPIO_ALT_FN_1_OUT) | ||
1395 | #define GPIO68_LDD_10_MD (68 | GPIO_ALT_FN_2_OUT) | ||
1396 | #define GPIO68_MMCCS1_MD (68 | GPIO_ALT_FN_1_OUT) | ||
1397 | #define GPIO69_LDD_11_MD (69 | GPIO_ALT_FN_2_OUT) | ||
1398 | #define GPIO69_MMCCLK_MD (69 | GPIO_ALT_FN_1_OUT) | ||
1399 | #define GPIO70_LDD_12_MD (70 | GPIO_ALT_FN_2_OUT) | ||
1400 | #define GPIO70_RTCCLK_MD (70 | GPIO_ALT_FN_1_OUT) | ||
1401 | #define GPIO71_LDD_13_MD (71 | GPIO_ALT_FN_2_OUT) | ||
1402 | #define GPIO71_3_6MHz_MD (71 | GPIO_ALT_FN_1_OUT) | ||
1403 | #define GPIO72_LDD_14_MD (72 | GPIO_ALT_FN_2_OUT) | ||
1404 | #define GPIO72_32kHz_MD (72 | GPIO_ALT_FN_1_OUT) | ||
1405 | #define GPIO73_LDD_15_MD (73 | GPIO_ALT_FN_2_OUT) | ||
1406 | #define GPIO73_MBGNT_MD (73 | GPIO_ALT_FN_1_OUT) | ||
1407 | #define GPIO74_LCD_FCLK_MD (74 | GPIO_ALT_FN_2_OUT) | ||
1408 | #define GPIO75_LCD_LCLK_MD (75 | GPIO_ALT_FN_2_OUT) | ||
1409 | #define GPIO76_LCD_PCLK_MD (76 | GPIO_ALT_FN_2_OUT) | ||
1410 | #define GPIO77_LCD_ACBIAS_MD (77 | GPIO_ALT_FN_2_OUT) | ||
1411 | #define GPIO78_nCS_2_MD (78 | GPIO_ALT_FN_2_OUT) | ||
1412 | #define GPIO79_nCS_3_MD (79 | GPIO_ALT_FN_2_OUT) | ||
1413 | #define GPIO79_pSKTSEL_MD (79 | GPIO_ALT_FN_1_OUT) | ||
1414 | #define GPIO80_nCS_4_MD (80 | GPIO_ALT_FN_2_OUT) | ||
1415 | #define GPIO81_NSSP_CLK_OUT (81 | GPIO_ALT_FN_1_OUT) | ||
1416 | #define GPIO81_NSSP_CLK_IN (81 | GPIO_ALT_FN_1_IN) | ||
1417 | #define GPIO82_NSSP_FRM_OUT (82 | GPIO_ALT_FN_1_OUT) | ||
1418 | #define GPIO82_NSSP_FRM_IN (82 | GPIO_ALT_FN_1_IN) | ||
1419 | #define GPIO83_NSSP_TX (83 | GPIO_ALT_FN_1_OUT) | ||
1420 | #define GPIO83_NSSP_RX (83 | GPIO_ALT_FN_2_IN) | ||
1421 | #define GPIO84_NSSP_TX (84 | GPIO_ALT_FN_1_OUT) | ||
1422 | #define GPIO84_NSSP_RX (84 | GPIO_ALT_FN_2_IN) | ||
1423 | #define GPIO85_nPCE_1_MD (85 | GPIO_ALT_FN_1_OUT) | ||
1424 | #define GPIO92_MMCDAT0_MD (92 | GPIO_ALT_FN_1_OUT) | ||
1425 | #define GPIO109_MMCDAT1_MD (109 | GPIO_ALT_FN_1_OUT) | ||
1426 | #define GPIO110_MMCDAT2_MD (110 | GPIO_ALT_FN_1_OUT) | ||
1427 | #define GPIO110_MMCCS0_MD (110 | GPIO_ALT_FN_1_OUT) | ||
1428 | #define GPIO111_MMCDAT3_MD (111 | GPIO_ALT_FN_1_OUT) | ||
1429 | #define GPIO110_MMCCS1_MD (111 | GPIO_ALT_FN_1_OUT) | ||
1430 | #define GPIO112_MMCCMD_MD (112 | GPIO_ALT_FN_1_OUT) | ||
1431 | #define GPIO113_AC97_RESET_N_MD (113 | GPIO_ALT_FN_2_OUT) | ||
1432 | #define GPIO117_I2CSCL_MD (117 | GPIO_ALT_FN_1_OUT) | ||
1433 | #define GPIO118_I2CSDA_MD (118 | GPIO_ALT_FN_1_IN) | ||
1434 | |||
1435 | /* | ||
1436 | * Power Manager | ||
1437 | */ | ||
1438 | |||
1439 | #define PMCR __REG(0x40F00000) /* Power Manager Control Register */ | ||
1440 | #define PSSR __REG(0x40F00004) /* Power Manager Sleep Status Register */ | ||
1441 | #define PSPR __REG(0x40F00008) /* Power Manager Scratch Pad Register */ | ||
1442 | #define PWER __REG(0x40F0000C) /* Power Manager Wake-up Enable Register */ | ||
1443 | #define PRER __REG(0x40F00010) /* Power Manager GPIO Rising-Edge Detect Enable Register */ | ||
1444 | #define PFER __REG(0x40F00014) /* Power Manager GPIO Falling-Edge Detect Enable Register */ | ||
1445 | #define PEDR __REG(0x40F00018) /* Power Manager GPIO Edge Detect Status Register */ | ||
1446 | #define PCFR __REG(0x40F0001C) /* Power Manager General Configuration Register */ | ||
1447 | #define PGSR0 __REG(0x40F00020) /* Power Manager GPIO Sleep State Register for GP[31-0] */ | ||
1448 | #define PGSR1 __REG(0x40F00024) /* Power Manager GPIO Sleep State Register for GP[63-32] */ | ||
1449 | #define PGSR2 __REG(0x40F00028) /* Power Manager GPIO Sleep State Register for GP[84-64] */ | ||
1450 | #define PGSR3 __REG(0x40F0002C) /* Power Manager GPIO Sleep State Register for GP[118-96] */ | ||
1451 | #define RCSR __REG(0x40F00030) /* Reset Controller Status Register */ | ||
1452 | |||
1453 | #define PSLR __REG(0x40F00034) /* Power Manager Sleep Config Register */ | ||
1454 | #define PSTR __REG(0x40F00038) /*Power Manager Standby Config Register */ | ||
1455 | #define PSNR __REG(0x40F0003C) /*Power Manager Sense Config Register */ | ||
1456 | #define PVCR __REG(0x40F00040) /*Power Manager VoltageControl Register */ | ||
1457 | #define PKWR __REG(0x40F00050) /* Power Manager KB Wake-up Enable Reg */ | ||
1458 | #define PKSR __REG(0x40F00054) /* Power Manager KB Level-Detect Register */ | ||
1459 | #define PCMD(x) __REG2(0x40F00080, (x)<<2) | ||
1460 | #define PCMD0 __REG(0x40F00080 + 0 * 4) | ||
1461 | #define PCMD1 __REG(0x40F00080 + 1 * 4) | ||
1462 | #define PCMD2 __REG(0x40F00080 + 2 * 4) | ||
1463 | #define PCMD3 __REG(0x40F00080 + 3 * 4) | ||
1464 | #define PCMD4 __REG(0x40F00080 + 4 * 4) | ||
1465 | #define PCMD5 __REG(0x40F00080 + 5 * 4) | ||
1466 | #define PCMD6 __REG(0x40F00080 + 6 * 4) | ||
1467 | #define PCMD7 __REG(0x40F00080 + 7 * 4) | ||
1468 | #define PCMD8 __REG(0x40F00080 + 8 * 4) | ||
1469 | #define PCMD9 __REG(0x40F00080 + 9 * 4) | ||
1470 | #define PCMD10 __REG(0x40F00080 + 10 * 4) | ||
1471 | #define PCMD11 __REG(0x40F00080 + 11 * 4) | ||
1472 | #define PCMD12 __REG(0x40F00080 + 12 * 4) | ||
1473 | #define PCMD13 __REG(0x40F00080 + 13 * 4) | ||
1474 | #define PCMD14 __REG(0x40F00080 + 14 * 4) | ||
1475 | #define PCMD15 __REG(0x40F00080 + 15 * 4) | ||
1476 | #define PCMD16 __REG(0x40F00080 + 16 * 4) | ||
1477 | #define PCMD17 __REG(0x40F00080 + 17 * 4) | ||
1478 | #define PCMD18 __REG(0x40F00080 + 18 * 4) | ||
1479 | #define PCMD19 __REG(0x40F00080 + 19 * 4) | ||
1480 | #define PCMD20 __REG(0x40F00080 + 20 * 4) | ||
1481 | #define PCMD21 __REG(0x40F00080 + 21 * 4) | ||
1482 | #define PCMD22 __REG(0x40F00080 + 22 * 4) | ||
1483 | #define PCMD23 __REG(0x40F00080 + 23 * 4) | ||
1484 | #define PCMD24 __REG(0x40F00080 + 24 * 4) | ||
1485 | #define PCMD25 __REG(0x40F00080 + 25 * 4) | ||
1486 | #define PCMD26 __REG(0x40F00080 + 26 * 4) | ||
1487 | #define PCMD27 __REG(0x40F00080 + 27 * 4) | ||
1488 | #define PCMD28 __REG(0x40F00080 + 28 * 4) | ||
1489 | #define PCMD29 __REG(0x40F00080 + 29 * 4) | ||
1490 | #define PCMD30 __REG(0x40F00080 + 30 * 4) | ||
1491 | #define PCMD31 __REG(0x40F00080 + 31 * 4) | ||
1492 | |||
1493 | #define PCMD_MBC (1<<12) | ||
1494 | #define PCMD_DCE (1<<11) | ||
1495 | #define PCMD_LC (1<<10) | ||
1496 | /* FIXME: PCMD_SQC need be checked. */ | ||
1497 | #define PCMD_SQC (3<<8) /* currently only bit 8 is changeable, | ||
1498 | bit 9 should be 0 all day. */ | ||
1499 | #define PVCR_VCSA (0x1<<14) | ||
1500 | #define PVCR_CommandDelay (0xf80) | ||
1501 | #define PCFR_PI2C_EN (0x1 << 6) | ||
1502 | |||
1503 | #define PSSR_OTGPH (1 << 6) /* OTG Peripheral control Hold */ | ||
1504 | #define PSSR_RDH (1 << 5) /* Read Disable Hold */ | ||
1505 | #define PSSR_PH (1 << 4) /* Peripheral Control Hold */ | ||
1506 | #define PSSR_VFS (1 << 2) /* VDD Fault Status */ | ||
1507 | #define PSSR_BFS (1 << 1) /* Battery Fault Status */ | ||
1508 | #define PSSR_SSS (1 << 0) /* Software Sleep Status */ | ||
1509 | |||
1510 | #define PCFR_RO (1 << 15) /* RDH Override */ | ||
1511 | #define PCFR_PO (1 << 14) /* PH Override */ | ||
1512 | #define PCFR_GPROD (1 << 12) /* GPIO nRESET_OUT Disable */ | ||
1513 | #define PCFR_L1_EN (1 << 11) /* Sleep Mode L1 converter Enable */ | ||
1514 | #define PCFR_FVC (1 << 10) /* Frequency/Voltage Change */ | ||
1515 | #define PCFR_DC_EN (1 << 7) /* Sleep/deep-sleep DC-DC Converter Enable */ | ||
1516 | #define PCFR_PI2CEN (1 << 6) /* Enable PI2C controller */ | ||
1517 | #define PCFR_DS (1 << 3) /* Deep Sleep Mode */ | ||
1518 | #define PCFR_FS (1 << 2) /* Float Static Chip Selects */ | ||
1519 | #define PCFR_FP (1 << 1) /* Float PCMCIA controls */ | ||
1520 | #define PCFR_OPDE (1 << 0) /* 3.6864 MHz oscillator power-down enable */ | ||
1521 | |||
1522 | #define RCSR_GPR (1 << 3) /* GPIO Reset */ | ||
1523 | #define RCSR_SMR (1 << 2) /* Sleep Mode */ | ||
1524 | #define RCSR_WDR (1 << 1) /* Watchdog Reset */ | ||
1525 | #define RCSR_HWR (1 << 0) /* Hardware Reset */ | ||
1526 | |||
1527 | #define PWER_GPIO(Nb) (1 << Nb) /* GPIO [0..15] wake-up enable */ | ||
1528 | #define PWER_GPIO0 PWER_GPIO (0) /* GPIO [0] wake-up enable */ | ||
1529 | #define PWER_GPIO1 PWER_GPIO (1) /* GPIO [1] wake-up enable */ | ||
1530 | #define PWER_GPIO2 PWER_GPIO (2) /* GPIO [2] wake-up enable */ | ||
1531 | #define PWER_GPIO3 PWER_GPIO (3) /* GPIO [3] wake-up enable */ | ||
1532 | #define PWER_GPIO4 PWER_GPIO (4) /* GPIO [4] wake-up enable */ | ||
1533 | #define PWER_GPIO5 PWER_GPIO (5) /* GPIO [5] wake-up enable */ | ||
1534 | #define PWER_GPIO6 PWER_GPIO (6) /* GPIO [6] wake-up enable */ | ||
1535 | #define PWER_GPIO7 PWER_GPIO (7) /* GPIO [7] wake-up enable */ | ||
1536 | #define PWER_GPIO8 PWER_GPIO (8) /* GPIO [8] wake-up enable */ | ||
1537 | #define PWER_GPIO9 PWER_GPIO (9) /* GPIO [9] wake-up enable */ | ||
1538 | #define PWER_GPIO10 PWER_GPIO (10) /* GPIO [10] wake-up enable */ | ||
1539 | #define PWER_GPIO11 PWER_GPIO (11) /* GPIO [11] wake-up enable */ | ||
1540 | #define PWER_GPIO12 PWER_GPIO (12) /* GPIO [12] wake-up enable */ | ||
1541 | #define PWER_GPIO13 PWER_GPIO (13) /* GPIO [13] wake-up enable */ | ||
1542 | #define PWER_GPIO14 PWER_GPIO (14) /* GPIO [14] wake-up enable */ | ||
1543 | #define PWER_GPIO15 PWER_GPIO (15) /* GPIO [15] wake-up enable */ | ||
1544 | #define PWER_RTC 0x80000000 /* RTC alarm wake-up enable */ | ||
1545 | |||
1546 | |||
1547 | /* | ||
1548 | * SSP Serial Port Registers | ||
1549 | * PXA250, PXA255, PXA26x and PXA27x SSP controllers are all slightly different. | ||
1550 | * PXA255, PXA26x and PXA27x have extra ports, registers and bits. | ||
1551 | */ | ||
1552 | |||
1553 | /* Common PXA2xx bits first */ | ||
1554 | #define SSCR0_DSS (0x0000000f) /* Data Size Select (mask) */ | ||
1555 | #define SSCR0_DataSize(x) ((x) - 1) /* Data Size Select [4..16] */ | ||
1556 | #define SSCR0_FRF (0x00000030) /* FRame Format (mask) */ | ||
1557 | #define SSCR0_Motorola (0x0 << 4) /* Motorola's Serial Peripheral Interface (SPI) */ | ||
1558 | #define SSCR0_TI (0x1 << 4) /* Texas Instruments' Synchronous Serial Protocol (SSP) */ | ||
1559 | #define SSCR0_National (0x2 << 4) /* National Microwire */ | ||
1560 | #define SSCR0_ECS (1 << 6) /* External clock select */ | ||
1561 | #define SSCR0_SSE (1 << 7) /* Synchronous Serial Port Enable */ | ||
1562 | #define SSCR0_SCR (0x0000ff00) /* Serial Clock Rate (mask) */ | ||
1563 | #define SSCR0_SerClkDiv(x) ((((x) - 2)/2) << 8) /* Divisor [2..512] */ | ||
1564 | |||
1565 | #define SSCR1_RIE (1 << 0) /* Receive FIFO Interrupt Enable */ | ||
1566 | #define SSCR1_TIE (1 << 1) /* Transmit FIFO Interrupt Enable */ | ||
1567 | #define SSCR1_LBM (1 << 2) /* Loop-Back Mode */ | ||
1568 | #define SSCR1_SPO (1 << 3) /* Motorola SPI SSPSCLK polarity setting */ | ||
1569 | #define SSCR1_SPH (1 << 4) /* Motorola SPI SSPSCLK phase setting */ | ||
1570 | #define SSCR1_MWDS (1 << 5) /* Microwire Transmit Data Size */ | ||
1571 | #define SSCR1_TFT (0x000003c0) /* Transmit FIFO Threshold (mask) */ | ||
1572 | #define SSCR1_TxTresh(x) (((x) - 1) << 6) /* level [1..16] */ | ||
1573 | #define SSCR1_RFT (0x00003c00) /* Receive FIFO Threshold (mask) */ | ||
1574 | #define SSCR1_RxTresh(x) (((x) - 1) << 10) /* level [1..16] */ | ||
1575 | |||
1576 | #define SSSR_TNF (1 << 2) /* Transmit FIFO Not Full */ | ||
1577 | #define SSSR_RNE (1 << 3) /* Receive FIFO Not Empty */ | ||
1578 | #define SSSR_BSY (1 << 4) /* SSP Busy */ | ||
1579 | #define SSSR_TFS (1 << 5) /* Transmit FIFO Service Request */ | ||
1580 | #define SSSR_RFS (1 << 6) /* Receive FIFO Service Request */ | ||
1581 | #define SSSR_ROR (1 << 7) /* Receive FIFO Overrun */ | ||
1582 | |||
1583 | #define SSCR0_TIM (1 << 23) /* Transmit FIFO Under Run Interrupt Mask */ | ||
1584 | #define SSCR0_RIM (1 << 22) /* Receive FIFO Over Run interrupt Mask */ | ||
1585 | #define SSCR0_NCS (1 << 21) /* Network Clock Select */ | ||
1586 | #define SSCR0_EDSS (1 << 20) /* Extended Data Size Select */ | ||
1587 | |||
1588 | /* extra bits in PXA255, PXA26x and PXA27x SSP ports */ | ||
1589 | #define SSCR0_PSP (3 << 4) /* PSP - Programmable Serial Protocol */ | ||
1590 | #define SSCR1_TTELP (1 << 31) /* TXD Tristate Enable Last Phase */ | ||
1591 | #define SSCR1_TTE (1 << 30) /* TXD Tristate Enable */ | ||
1592 | #define SSCR1_EBCEI (1 << 29) /* Enable Bit Count Error interrupt */ | ||
1593 | #define SSCR1_SCFR (1 << 28) /* Slave Clock free Running */ | ||
1594 | #define SSCR1_ECRA (1 << 27) /* Enable Clock Request A */ | ||
1595 | #define SSCR1_ECRB (1 << 26) /* Enable Clock request B */ | ||
1596 | #define SSCR1_SCLKDIR (1 << 25) /* Serial Bit Rate Clock Direction */ | ||
1597 | #define SSCR1_SFRMDIR (1 << 24) /* Frame Direction */ | ||
1598 | #define SSCR1_RWOT (1 << 23) /* Receive Without Transmit */ | ||
1599 | #define SSCR1_TRAIL (1 << 22) /* Trailing Byte */ | ||
1600 | #define SSCR1_TSRE (1 << 21) /* Transmit Service Request Enable */ | ||
1601 | #define SSCR1_RSRE (1 << 20) /* Receive Service Request Enable */ | ||
1602 | #define SSCR1_TINTE (1 << 19) /* Receiver Time-out Interrupt enable */ | ||
1603 | #define SSCR1_PINTE (1 << 18) /* Peripheral Trailing Byte Interupt Enable */ | ||
1604 | #define SSCR1_STRF (1 << 15) /* Select FIFO or EFWR */ | ||
1605 | #define SSCR1_EFWR (1 << 14) /* Enable FIFO Write/Read */ | ||
1606 | |||
1607 | #define SSSR_BCE (1 << 23) /* Bit Count Error */ | ||
1608 | #define SSSR_CSS (1 << 22) /* Clock Synchronisation Status */ | ||
1609 | #define SSSR_TUR (1 << 21) /* Transmit FIFO Under Run */ | ||
1610 | #define SSSR_EOC (1 << 20) /* End Of Chain */ | ||
1611 | #define SSSR_TINT (1 << 19) /* Receiver Time-out Interrupt */ | ||
1612 | #define SSSR_PINT (1 << 18) /* Peripheral Trailing Byte Interrupt */ | ||
1613 | |||
1614 | #define SSPSP_DMYSTOP(x) (x << 23) /* Dummy Stop */ | ||
1615 | #define SSPSP_SFRMWDTH(x) (x << 16) /* Serial Frame Width */ | ||
1616 | #define SSPSP_SFRMDLY(x) (x << 9) /* Serial Frame Delay */ | ||
1617 | #define SSPSP_DMYSTRT(x) (x << 7) /* Dummy Start */ | ||
1618 | #define SSPSP_STRTDLY(x) (x << 4) /* Start Delay */ | ||
1619 | #define SSPSP_ETDS (1 << 3) /* End of Transfer data State */ | ||
1620 | #define SSPSP_SFRMP (1 << 2) /* Serial Frame Polarity */ | ||
1621 | #define SSPSP_SCMODE(x) (x << 0) /* Serial Bit Rate Clock Mode */ | ||
1622 | |||
1623 | |||
1624 | #define SSCR0_P1 __REG(0x41000000) /* SSP Port 1 Control Register 0 */ | ||
1625 | #define SSCR1_P1 __REG(0x41000004) /* SSP Port 1 Control Register 1 */ | ||
1626 | #define SSSR_P1 __REG(0x41000008) /* SSP Port 1 Status Register */ | ||
1627 | #define SSITR_P1 __REG(0x4100000C) /* SSP Port 1 Interrupt Test Register */ | ||
1628 | #define SSDR_P1 __REG(0x41000010) /* (Write / Read) SSP Port 1 Data Write Register/SSP Data Read Register */ | ||
1629 | |||
1630 | /* Support existing PXA25x drivers */ | ||
1631 | #define SSCR0 SSCR0_P1 /* SSP Control Register 0 */ | ||
1632 | #define SSCR1 SSCR1_P1 /* SSP Control Register 1 */ | ||
1633 | #define SSSR SSSR_P1 /* SSP Status Register */ | ||
1634 | #define SSITR SSITR_P1 /* SSP Interrupt Test Register */ | ||
1635 | #define SSDR SSDR_P1 /* (Write / Read) SSP Data Write Register/SSP Data Read Register */ | ||
1636 | |||
1637 | /* PXA27x ports */ | ||
1638 | #if defined (CONFIG_PXA27x) | ||
1639 | #define SSTO_P1 __REG(0x41000028) /* SSP Port 1 Time Out Register */ | ||
1640 | #define SSPSP_P1 __REG(0x4100002C) /* SSP Port 1 Programmable Serial Protocol */ | ||
1641 | #define SSCR0_P2 __REG(0x41700000) /* SSP Port 2 Control Register 0 */ | ||
1642 | #define SSCR1_P2 __REG(0x41700004) /* SSP Port 2 Control Register 1 */ | ||
1643 | #define SSSR_P2 __REG(0x41700008) /* SSP Port 2 Status Register */ | ||
1644 | #define SSITR_P2 __REG(0x4170000C) /* SSP Port 2 Interrupt Test Register */ | ||
1645 | #define SSDR_P2 __REG(0x41700010) /* (Write / Read) SSP Port 2 Data Write Register/SSP Data Read Register */ | ||
1646 | #define SSTO_P2 __REG(0x41700028) /* SSP Port 2 Time Out Register */ | ||
1647 | #define SSPSP_P2 __REG(0x4170002C) /* SSP Port 2 Programmable Serial Protocol */ | ||
1648 | #define SSCR0_P3 __REG(0x41900000) /* SSP Port 3 Control Register 0 */ | ||
1649 | #define SSCR1_P3 __REG(0x41900004) /* SSP Port 3 Control Register 1 */ | ||
1650 | #define SSSR_P3 __REG(0x41900008) /* SSP Port 3 Status Register */ | ||
1651 | #define SSITR_P3 __REG(0x4190000C) /* SSP Port 3 Interrupt Test Register */ | ||
1652 | #define SSDR_P3 __REG(0x41900010) /* (Write / Read) SSP Port 3 Data Write Register/SSP Data Read Register */ | ||
1653 | #define SSTO_P3 __REG(0x41900028) /* SSP Port 3 Time Out Register */ | ||
1654 | #define SSPSP_P3 __REG(0x4190002C) /* SSP Port 3 Programmable Serial Protocol */ | ||
1655 | #else /* PXA255 (only port 2) and PXA26x ports*/ | ||
1656 | #define SSTO_P1 __REG(0x41000028) /* SSP Port 1 Time Out Register */ | ||
1657 | #define SSPSP_P1 __REG(0x4100002C) /* SSP Port 1 Programmable Serial Protocol */ | ||
1658 | #define SSCR0_P2 __REG(0x41400000) /* SSP Port 2 Control Register 0 */ | ||
1659 | #define SSCR1_P2 __REG(0x41400004) /* SSP Port 2 Control Register 1 */ | ||
1660 | #define SSSR_P2 __REG(0x41400008) /* SSP Port 2 Status Register */ | ||
1661 | #define SSITR_P2 __REG(0x4140000C) /* SSP Port 2 Interrupt Test Register */ | ||
1662 | #define SSDR_P2 __REG(0x41400010) /* (Write / Read) SSP Port 2 Data Write Register/SSP Data Read Register */ | ||
1663 | #define SSTO_P2 __REG(0x41400028) /* SSP Port 2 Time Out Register */ | ||
1664 | #define SSPSP_P2 __REG(0x4140002C) /* SSP Port 2 Programmable Serial Protocol */ | ||
1665 | #define SSCR0_P3 __REG(0x41500000) /* SSP Port 3 Control Register 0 */ | ||
1666 | #define SSCR1_P3 __REG(0x41500004) /* SSP Port 3 Control Register 1 */ | ||
1667 | #define SSSR_P3 __REG(0x41500008) /* SSP Port 3 Status Register */ | ||
1668 | #define SSITR_P3 __REG(0x4150000C) /* SSP Port 3 Interrupt Test Register */ | ||
1669 | #define SSDR_P3 __REG(0x41500010) /* (Write / Read) SSP Port 3 Data Write Register/SSP Data Read Register */ | ||
1670 | #define SSTO_P3 __REG(0x41500028) /* SSP Port 3 Time Out Register */ | ||
1671 | #define SSPSP_P3 __REG(0x4150002C) /* SSP Port 3 Programmable Serial Protocol */ | ||
1672 | #endif | ||
1673 | |||
1674 | #define SSCR0_P(x) (*(((x) == 1) ? &SSCR0_P1 : ((x) == 2) ? &SSCR0_P2 : ((x) == 3) ? &SSCR0_P3 : NULL)) | ||
1675 | #define SSCR1_P(x) (*(((x) == 1) ? &SSCR1_P1 : ((x) == 2) ? &SSCR1_P2 : ((x) == 3) ? &SSCR1_P3 : NULL)) | ||
1676 | #define SSSR_P(x) (*(((x) == 1) ? &SSSR_P1 : ((x) == 2) ? &SSSR_P2 : ((x) == 3) ? &SSSR_P3 : NULL)) | ||
1677 | #define SSITR_P(x) (*(((x) == 1) ? &SSITR_P1 : ((x) == 2) ? &SSITR_P2 : ((x) == 3) ? &SSITR_P3 : NULL)) | ||
1678 | #define SSDR_P(x) (*(((x) == 1) ? &SSDR_P1 : ((x) == 2) ? &SSDR_P2 : ((x) == 3) ? &SSDR_P3 : NULL)) | ||
1679 | #define SSTO_P(x) (*(((x) == 1) ? &SSTO_P1 : ((x) == 2) ? &SSTO_P2 : ((x) == 3) ? &SSTO_P3 : NULL)) | ||
1680 | #define SSPSP_P(x) (*(((x) == 1) ? &SSPSP_P1 : ((x) == 2) ? &SSPSP_P2 : ((x) == 3) ? &SSPSP_P3 : NULL)) | ||
1681 | |||
1682 | /* | ||
1683 | * MultiMediaCard (MMC) controller | ||
1684 | */ | ||
1685 | |||
1686 | #define MMC_STRPCL __REG(0x41100000) /* Control to start and stop MMC clock */ | ||
1687 | #define MMC_STAT __REG(0x41100004) /* MMC Status Register (read only) */ | ||
1688 | #define MMC_CLKRT __REG(0x41100008) /* MMC clock rate */ | ||
1689 | #define MMC_SPI __REG(0x4110000c) /* SPI mode control bits */ | ||
1690 | #define MMC_CMDAT __REG(0x41100010) /* Command/response/data sequence control */ | ||
1691 | #define MMC_RESTO __REG(0x41100014) /* Expected response time out */ | ||
1692 | #define MMC_RDTO __REG(0x41100018) /* Expected data read time out */ | ||
1693 | #define MMC_BLKLEN __REG(0x4110001c) /* Block length of data transaction */ | ||
1694 | #define MMC_NOB __REG(0x41100020) /* Number of blocks, for block mode */ | ||
1695 | #define MMC_PRTBUF __REG(0x41100024) /* Partial MMC_TXFIFO FIFO written */ | ||
1696 | #define MMC_I_MASK __REG(0x41100028) /* Interrupt Mask */ | ||
1697 | #define MMC_I_REG __REG(0x4110002c) /* Interrupt Register (read only) */ | ||
1698 | #define MMC_CMD __REG(0x41100030) /* Index of current command */ | ||
1699 | #define MMC_ARGH __REG(0x41100034) /* MSW part of the current command argument */ | ||
1700 | #define MMC_ARGL __REG(0x41100038) /* LSW part of the current command argument */ | ||
1701 | #define MMC_RES __REG(0x4110003c) /* Response FIFO (read only) */ | ||
1702 | #define MMC_RXFIFO __REG(0x41100040) /* Receive FIFO (read only) */ | ||
1703 | #define MMC_TXFIFO __REG(0x41100044) /* Transmit FIFO (write only) */ | ||
1704 | |||
1705 | |||
1706 | /* | ||
1707 | * Core Clock | ||
1708 | */ | ||
1709 | |||
1710 | #define CCCR __REG(0x41300000) /* Core Clock Configuration Register */ | ||
1711 | #define CKEN __REG(0x41300004) /* Clock Enable Register */ | ||
1712 | #define OSCC __REG(0x41300008) /* Oscillator Configuration Register */ | ||
1713 | #define CCSR __REG(0x4130000C) /* Core Clock Status Register */ | ||
1714 | |||
1715 | #define CCCR_N_MASK 0x0380 /* Run Mode Frequency to Turbo Mode Frequency Multiplier */ | ||
1716 | #define CCCR_M_MASK 0x0060 /* Memory Frequency to Run Mode Frequency Multiplier */ | ||
1717 | #define CCCR_L_MASK 0x001f /* Crystal Frequency to Memory Frequency Multiplier */ | ||
1718 | |||
1719 | #define CKEN24_CAMERA (1 << 24) /* Camera Interface Clock Enable */ | ||
1720 | #define CKEN23_SSP1 (1 << 23) /* SSP1 Unit Clock Enable */ | ||
1721 | #define CKEN22_MEMC (1 << 22) /* Memory Controller Clock Enable */ | ||
1722 | #define CKEN21_MEMSTK (1 << 21) /* Memory Stick Host Controller */ | ||
1723 | #define CKEN20_IM (1 << 20) /* Internal Memory Clock Enable */ | ||
1724 | #define CKEN19_KEYPAD (1 << 19) /* Keypad Interface Clock Enable */ | ||
1725 | #define CKEN18_USIM (1 << 18) /* USIM Unit Clock Enable */ | ||
1726 | #define CKEN17_MSL (1 << 17) /* MSL Unit Clock Enable */ | ||
1727 | #define CKEN16_LCD (1 << 16) /* LCD Unit Clock Enable */ | ||
1728 | #define CKEN15_PWRI2C (1 << 15) /* PWR I2C Unit Clock Enable */ | ||
1729 | #define CKEN14_I2C (1 << 14) /* I2C Unit Clock Enable */ | ||
1730 | #define CKEN13_FICP (1 << 13) /* FICP Unit Clock Enable */ | ||
1731 | #define CKEN12_MMC (1 << 12) /* MMC Unit Clock Enable */ | ||
1732 | #define CKEN11_USB (1 << 11) /* USB Unit Clock Enable */ | ||
1733 | #define CKEN10_ASSP (1 << 10) /* ASSP (SSP3) Clock Enable */ | ||
1734 | #define CKEN10_USBHOST (1 << 10) /* USB Host Unit Clock Enable */ | ||
1735 | #define CKEN9_OSTIMER (1 << 9) /* OS Timer Unit Clock Enable */ | ||
1736 | #define CKEN9_NSSP (1 << 9) /* NSSP (SSP2) Clock Enable */ | ||
1737 | #define CKEN8_I2S (1 << 8) /* I2S Unit Clock Enable */ | ||
1738 | #define CKEN7_BTUART (1 << 7) /* BTUART Unit Clock Enable */ | ||
1739 | #define CKEN6_FFUART (1 << 6) /* FFUART Unit Clock Enable */ | ||
1740 | #define CKEN5_STUART (1 << 5) /* STUART Unit Clock Enable */ | ||
1741 | #define CKEN4_SSP3 (1 << 4) /* SSP3 Unit Clock Enable */ | ||
1742 | #define CKEN3_SSP (1 << 3) /* SSP Unit Clock Enable */ | ||
1743 | #define CKEN3_SSP2 (1 << 3) /* SSP2 Unit Clock Enable */ | ||
1744 | #define CKEN2_AC97 (1 << 2) /* AC97 Unit Clock Enable */ | ||
1745 | #define CKEN1_PWM1 (1 << 1) /* PWM1 Clock Enable */ | ||
1746 | #define CKEN0_PWM0 (1 << 0) /* PWM0 Clock Enable */ | ||
1747 | |||
1748 | #define OSCC_OON (1 << 1) /* 32.768kHz OON (write-once only bit) */ | ||
1749 | #define OSCC_OOK (1 << 0) /* 32.768kHz OOK (read-only bit) */ | ||
1750 | |||
1751 | |||
1752 | /* | ||
1753 | * LCD | ||
1754 | */ | ||
1755 | |||
1756 | #define LCCR0 __REG(0x44000000) /* LCD Controller Control Register 0 */ | ||
1757 | #define LCCR1 __REG(0x44000004) /* LCD Controller Control Register 1 */ | ||
1758 | #define LCCR2 __REG(0x44000008) /* LCD Controller Control Register 2 */ | ||
1759 | #define LCCR3 __REG(0x4400000C) /* LCD Controller Control Register 3 */ | ||
1760 | #define DFBR0 __REG(0x44000020) /* DMA Channel 0 Frame Branch Register */ | ||
1761 | #define DFBR1 __REG(0x44000024) /* DMA Channel 1 Frame Branch Register */ | ||
1762 | #define LCSR __REG(0x44000038) /* LCD Controller Status Register */ | ||
1763 | #define LIIDR __REG(0x4400003C) /* LCD Controller Interrupt ID Register */ | ||
1764 | #define TMEDRGBR __REG(0x44000040) /* TMED RGB Seed Register */ | ||
1765 | #define TMEDCR __REG(0x44000044) /* TMED Control Register */ | ||
1766 | |||
1767 | #define LCCR3_1BPP (0 << 24) | ||
1768 | #define LCCR3_2BPP (1 << 24) | ||
1769 | #define LCCR3_4BPP (2 << 24) | ||
1770 | #define LCCR3_8BPP (3 << 24) | ||
1771 | #define LCCR3_16BPP (4 << 24) | ||
1772 | |||
1773 | #define FDADR0 __REG(0x44000200) /* DMA Channel 0 Frame Descriptor Address Register */ | ||
1774 | #define FSADR0 __REG(0x44000204) /* DMA Channel 0 Frame Source Address Register */ | ||
1775 | #define FIDR0 __REG(0x44000208) /* DMA Channel 0 Frame ID Register */ | ||
1776 | #define LDCMD0 __REG(0x4400020C) /* DMA Channel 0 Command Register */ | ||
1777 | #define FDADR1 __REG(0x44000210) /* DMA Channel 1 Frame Descriptor Address Register */ | ||
1778 | #define FSADR1 __REG(0x44000214) /* DMA Channel 1 Frame Source Address Register */ | ||
1779 | #define FIDR1 __REG(0x44000218) /* DMA Channel 1 Frame ID Register */ | ||
1780 | #define LDCMD1 __REG(0x4400021C) /* DMA Channel 1 Command Register */ | ||
1781 | |||
1782 | #define LCCR0_ENB (1 << 0) /* LCD Controller enable */ | ||
1783 | #define LCCR0_CMS (1 << 1) /* Color/Monochrome Display Select */ | ||
1784 | #define LCCR0_Color (LCCR0_CMS*0) /* Color display */ | ||
1785 | #define LCCR0_Mono (LCCR0_CMS*1) /* Monochrome display */ | ||
1786 | #define LCCR0_SDS (1 << 2) /* Single/Dual Panel Display */ | ||
1787 | /* Select */ | ||
1788 | #define LCCR0_Sngl (LCCR0_SDS*0) /* Single panel display */ | ||
1789 | #define LCCR0_Dual (LCCR0_SDS*1) /* Dual panel display */ | ||
1790 | |||
1791 | #define LCCR0_LDM (1 << 3) /* LCD Disable Done Mask */ | ||
1792 | #define LCCR0_SFM (1 << 4) /* Start of frame mask */ | ||
1793 | #define LCCR0_IUM (1 << 5) /* Input FIFO underrun mask */ | ||
1794 | #define LCCR0_EFM (1 << 6) /* End of Frame mask */ | ||
1795 | #define LCCR0_PAS (1 << 7) /* Passive/Active display Select */ | ||
1796 | #define LCCR0_Pas (LCCR0_PAS*0) /* Passive display (STN) */ | ||
1797 | #define LCCR0_Act (LCCR0_PAS*1) /* Active display (TFT) */ | ||
1798 | #define LCCR0_DPD (1 << 9) /* Double Pixel Data (monochrome */ | ||
1799 | /* display mode) */ | ||
1800 | #define LCCR0_4PixMono (LCCR0_DPD*0) /* 4-Pixel/clock Monochrome */ | ||
1801 | /* display */ | ||
1802 | #define LCCR0_8PixMono (LCCR0_DPD*1) /* 8-Pixel/clock Monochrome */ | ||
1803 | /* display */ | ||
1804 | #define LCCR0_DIS (1 << 10) /* LCD Disable */ | ||
1805 | #define LCCR0_QDM (1 << 11) /* LCD Quick Disable mask */ | ||
1806 | #define LCCR0_PDD (0xff << 12) /* Palette DMA request delay */ | ||
1807 | #define LCCR0_PDD_S 12 | ||
1808 | #define LCCR0_BM (1 << 20) /* Branch mask */ | ||
1809 | #define LCCR0_OUM (1 << 21) /* Output FIFO underrun mask */ | ||
1810 | |||
1811 | #define LCCR1_PPL Fld (10, 0) /* Pixels Per Line - 1 */ | ||
1812 | #define LCCR1_DisWdth(Pixel) /* Display Width [1..800 pix.] */ \ | ||
1813 | (((Pixel) - 1) << FShft (LCCR1_PPL)) | ||
1814 | |||
1815 | #define LCCR1_HSW Fld (6, 10) /* Horizontal Synchronization */ | ||
1816 | #define LCCR1_HorSnchWdth(Tpix) /* Horizontal Synchronization */ \ | ||
1817 | /* pulse Width [1..64 Tpix] */ \ | ||
1818 | (((Tpix) - 1) << FShft (LCCR1_HSW)) | ||
1819 | |||
1820 | #define LCCR1_ELW Fld (8, 16) /* End-of-Line pixel clock Wait */ | ||
1821 | /* count - 1 [Tpix] */ | ||
1822 | #define LCCR1_EndLnDel(Tpix) /* End-of-Line Delay */ \ | ||
1823 | /* [1..256 Tpix] */ \ | ||
1824 | (((Tpix) - 1) << FShft (LCCR1_ELW)) | ||
1825 | |||
1826 | #define LCCR1_BLW Fld (8, 24) /* Beginning-of-Line pixel clock */ | ||
1827 | /* Wait count - 1 [Tpix] */ | ||
1828 | #define LCCR1_BegLnDel(Tpix) /* Beginning-of-Line Delay */ \ | ||
1829 | /* [1..256 Tpix] */ \ | ||
1830 | (((Tpix) - 1) << FShft (LCCR1_BLW)) | ||
1831 | |||
1832 | |||
1833 | #define LCCR2_LPP Fld (10, 0) /* Line Per Panel - 1 */ | ||
1834 | #define LCCR2_DisHght(Line) /* Display Height [1..1024 lines] */ \ | ||
1835 | (((Line) - 1) << FShft (LCCR2_LPP)) | ||
1836 | |||
1837 | #define LCCR2_VSW Fld (6, 10) /* Vertical Synchronization pulse */ | ||
1838 | /* Width - 1 [Tln] (L_FCLK) */ | ||
1839 | #define LCCR2_VrtSnchWdth(Tln) /* Vertical Synchronization pulse */ \ | ||
1840 | /* Width [1..64 Tln] */ \ | ||
1841 | (((Tln) - 1) << FShft (LCCR2_VSW)) | ||
1842 | |||
1843 | #define LCCR2_EFW Fld (8, 16) /* End-of-Frame line clock Wait */ | ||
1844 | /* count [Tln] */ | ||
1845 | #define LCCR2_EndFrmDel(Tln) /* End-of-Frame Delay */ \ | ||
1846 | /* [0..255 Tln] */ \ | ||
1847 | ((Tln) << FShft (LCCR2_EFW)) | ||
1848 | |||
1849 | #define LCCR2_BFW Fld (8, 24) /* Beginning-of-Frame line clock */ | ||
1850 | /* Wait count [Tln] */ | ||
1851 | #define LCCR2_BegFrmDel(Tln) /* Beginning-of-Frame Delay */ \ | ||
1852 | /* [0..255 Tln] */ \ | ||
1853 | ((Tln) << FShft (LCCR2_BFW)) | ||
1854 | |||
1855 | #if 0 | ||
1856 | #define LCCR3_PCD (0xff) /* Pixel clock divisor */ | ||
1857 | #define LCCR3_ACB (0xff << 8) /* AC Bias pin frequency */ | ||
1858 | #define LCCR3_ACB_S 8 | ||
1859 | #endif | ||
1860 | |||
1861 | #define LCCR3_API (0xf << 16) /* AC Bias pin trasitions per interrupt */ | ||
1862 | #define LCCR3_API_S 16 | ||
1863 | #define LCCR3_VSP (1 << 20) /* vertical sync polarity */ | ||
1864 | #define LCCR3_HSP (1 << 21) /* horizontal sync polarity */ | ||
1865 | #define LCCR3_PCP (1 << 22) /* Pixel Clock Polarity (L_PCLK) */ | ||
1866 | #define LCCR3_PixRsEdg (LCCR3_PCP*0) /* Pixel clock Rising-Edge */ | ||
1867 | #define LCCR3_PixFlEdg (LCCR3_PCP*1) /* Pixel clock Falling-Edge */ | ||
1868 | |||
1869 | #define LCCR3_OEP (1 << 23) /* Output Enable Polarity (L_BIAS, */ | ||
1870 | /* active display mode) */ | ||
1871 | #define LCCR3_OutEnH (LCCR3_OEP*0) /* Output Enable active High */ | ||
1872 | #define LCCR3_OutEnL (LCCR3_OEP*1) /* Output Enable active Low */ | ||
1873 | |||
1874 | #if 0 | ||
1875 | #define LCCR3_BPP (7 << 24) /* bits per pixel */ | ||
1876 | #define LCCR3_BPP_S 24 | ||
1877 | #endif | ||
1878 | #define LCCR3_DPC (1 << 27) /* double pixel clock mode */ | ||
1879 | |||
1880 | |||
1881 | #define LCCR3_PCD Fld (8, 0) /* Pixel Clock Divisor */ | ||
1882 | #define LCCR3_PixClkDiv(Div) /* Pixel Clock Divisor */ \ | ||
1883 | (((Div) << FShft (LCCR3_PCD))) | ||
1884 | |||
1885 | |||
1886 | #define LCCR3_BPP Fld (3, 24) /* Bit Per Pixel */ | ||
1887 | #define LCCR3_Bpp(Bpp) /* Bit Per Pixel */ \ | ||
1888 | (((Bpp) << FShft (LCCR3_BPP))) | ||
1889 | |||
1890 | #define LCCR3_ACB Fld (8, 8) /* AC Bias */ | ||
1891 | #define LCCR3_Acb(Acb) /* BAC Bias */ \ | ||
1892 | (((Acb) << FShft (LCCR3_ACB))) | ||
1893 | |||
1894 | #define LCCR3_HorSnchH (LCCR3_HSP*0) /* Horizontal Synchronization */ | ||
1895 | /* pulse active High */ | ||
1896 | #define LCCR3_HorSnchL (LCCR3_HSP*1) /* Horizontal Synchronization */ | ||
1897 | |||
1898 | #define LCCR3_VrtSnchH (LCCR3_VSP*0) /* Vertical Synchronization pulse */ | ||
1899 | /* active High */ | ||
1900 | #define LCCR3_VrtSnchL (LCCR3_VSP*1) /* Vertical Synchronization pulse */ | ||
1901 | /* active Low */ | ||
1902 | |||
1903 | #define LCSR_LDD (1 << 0) /* LCD Disable Done */ | ||
1904 | #define LCSR_SOF (1 << 1) /* Start of frame */ | ||
1905 | #define LCSR_BER (1 << 2) /* Bus error */ | ||
1906 | #define LCSR_ABC (1 << 3) /* AC Bias count */ | ||
1907 | #define LCSR_IUL (1 << 4) /* input FIFO underrun Lower panel */ | ||
1908 | #define LCSR_IUU (1 << 5) /* input FIFO underrun Upper panel */ | ||
1909 | #define LCSR_OU (1 << 6) /* output FIFO underrun */ | ||
1910 | #define LCSR_QD (1 << 7) /* quick disable */ | ||
1911 | #define LCSR_EOF (1 << 8) /* end of frame */ | ||
1912 | #define LCSR_BS (1 << 9) /* branch status */ | ||
1913 | #define LCSR_SINT (1 << 10) /* subsequent interrupt */ | ||
1914 | |||
1915 | #define LDCMD_PAL (1 << 26) /* instructs DMA to load palette buffer */ | ||
1916 | |||
1917 | #define LCSR_LDD (1 << 0) /* LCD Disable Done */ | ||
1918 | #define LCSR_SOF (1 << 1) /* Start of frame */ | ||
1919 | #define LCSR_BER (1 << 2) /* Bus error */ | ||
1920 | #define LCSR_ABC (1 << 3) /* AC Bias count */ | ||
1921 | #define LCSR_IUL (1 << 4) /* input FIFO underrun Lower panel */ | ||
1922 | #define LCSR_IUU (1 << 5) /* input FIFO underrun Upper panel */ | ||
1923 | #define LCSR_OU (1 << 6) /* output FIFO underrun */ | ||
1924 | #define LCSR_QD (1 << 7) /* quick disable */ | ||
1925 | #define LCSR_EOF (1 << 8) /* end of frame */ | ||
1926 | #define LCSR_BS (1 << 9) /* branch status */ | ||
1927 | #define LCSR_SINT (1 << 10) /* subsequent interrupt */ | ||
1928 | |||
1929 | #define LDCMD_PAL (1 << 26) /* instructs DMA to load palette buffer */ | ||
1930 | |||
1931 | /* | ||
1932 | * Memory controller | ||
1933 | */ | ||
1934 | |||
1935 | #define MDCNFG __REG(0x48000000) /* SDRAM Configuration Register 0 */ | ||
1936 | #define MDREFR __REG(0x48000004) /* SDRAM Refresh Control Register */ | ||
1937 | #define MSC0 __REG(0x48000008) /* Static Memory Control Register 0 */ | ||
1938 | #define MSC1 __REG(0x4800000C) /* Static Memory Control Register 1 */ | ||
1939 | #define MSC2 __REG(0x48000010) /* Static Memory Control Register 2 */ | ||
1940 | #define MECR __REG(0x48000014) /* Expansion Memory (PCMCIA/Compact Flash) Bus Configuration */ | ||
1941 | #define SXLCR __REG(0x48000018) /* LCR value to be written to SDRAM-Timing Synchronous Flash */ | ||
1942 | #define SXCNFG __REG(0x4800001C) /* Synchronous Static Memory Control Register */ | ||
1943 | #define SXMRS __REG(0x48000024) /* MRS value to be written to Synchronous Flash or SMROM */ | ||
1944 | #define MCMEM0 __REG(0x48000028) /* Card interface Common Memory Space Socket 0 Timing */ | ||
1945 | #define MCMEM1 __REG(0x4800002C) /* Card interface Common Memory Space Socket 1 Timing */ | ||
1946 | #define MCATT0 __REG(0x48000030) /* Card interface Attribute Space Socket 0 Timing Configuration */ | ||
1947 | #define MCATT1 __REG(0x48000034) /* Card interface Attribute Space Socket 1 Timing Configuration */ | ||
1948 | #define MCIO0 __REG(0x48000038) /* Card interface I/O Space Socket 0 Timing Configuration */ | ||
1949 | #define MCIO1 __REG(0x4800003C) /* Card interface I/O Space Socket 1 Timing Configuration */ | ||
1950 | #define MDMRS __REG(0x48000040) /* MRS value to be written to SDRAM */ | ||
1951 | #define BOOT_DEF __REG(0x48000044) /* Read-Only Boot-Time Register. Contains BOOT_SEL and PKG_SEL */ | ||
1952 | |||
1953 | /* | ||
1954 | * More handy macros for PCMCIA | ||
1955 | * | ||
1956 | * Arg is socket number | ||
1957 | */ | ||
1958 | #define MCMEM(s) __REG2(0x48000028, (s)<<2 ) /* Card interface Common Memory Space Socket s Timing */ | ||
1959 | #define MCATT(s) __REG2(0x48000030, (s)<<2 ) /* Card interface Attribute Space Socket s Timing Configuration */ | ||
1960 | #define MCIO(s) __REG2(0x48000038, (s)<<2 ) /* Card interface I/O Space Socket s Timing Configuration */ | ||
1961 | |||
1962 | /* MECR register defines */ | ||
1963 | #define MECR_NOS (1 << 0) /* Number Of Sockets: 0 -> 1 sock, 1 -> 2 sock */ | ||
1964 | #define MECR_CIT (1 << 1) /* Card Is There: 0 -> no card, 1 -> card inserted */ | ||
1965 | |||
1966 | #define MDREFR_K2FREE (1 << 25) /* SDRAM Free-Running Control */ | ||
1967 | #define MDREFR_K1FREE (1 << 24) /* SDRAM Free-Running Control */ | ||
1968 | #define MDREFR_K0FREE (1 << 23) /* SDRAM Free-Running Control */ | ||
1969 | #define MDREFR_SLFRSH (1 << 22) /* SDRAM Self-Refresh Control/Status */ | ||
1970 | #define MDREFR_APD (1 << 20) /* SDRAM/SSRAM Auto-Power-Down Enable */ | ||
1971 | #define MDREFR_K2DB2 (1 << 19) /* SDCLK2 Divide by 2 Control/Status */ | ||
1972 | #define MDREFR_K2RUN (1 << 18) /* SDCLK2 Run Control/Status */ | ||
1973 | #define MDREFR_K1DB2 (1 << 17) /* SDCLK1 Divide by 2 Control/Status */ | ||
1974 | #define MDREFR_K1RUN (1 << 16) /* SDCLK1 Run Control/Status */ | ||
1975 | #define MDREFR_E1PIN (1 << 15) /* SDCKE1 Level Control/Status */ | ||
1976 | #define MDREFR_K0DB2 (1 << 14) /* SDCLK0 Divide by 2 Control/Status */ | ||
1977 | #define MDREFR_K0RUN (1 << 13) /* SDCLK0 Run Control/Status */ | ||
1978 | #define MDREFR_E0PIN (1 << 12) /* SDCKE0 Level Control/Status */ | ||
1979 | |||
1980 | |||
1981 | #ifdef CONFIG_PXA27x | ||
1982 | |||
1983 | /* | ||
1984 | * Keypad | ||
1985 | */ | ||
1986 | #define KPC __REG(0x41500000) /* Keypad Interface Control register */ | ||
1987 | #define KPDK __REG(0x41500008) /* Keypad Interface Direct Key register */ | ||
1988 | #define KPREC __REG(0x41500010) /* Keypad Interface Rotary Encoder register */ | ||
1989 | #define KPMK __REG(0x41500018) /* Keypad Interface Matrix Key register */ | ||
1990 | #define KPAS __REG(0x41500020) /* Keypad Interface Automatic Scan register */ | ||
1991 | #define KPASMKP0 __REG(0x41500028) /* Keypad Interface Automatic Scan Multiple Key Presser register 0 */ | ||
1992 | #define KPASMKP1 __REG(0x41500030) /* Keypad Interface Automatic Scan Multiple Key Presser register 1 */ | ||
1993 | #define KPASMKP2 __REG(0x41500038) /* Keypad Interface Automatic Scan Multiple Key Presser register 2 */ | ||
1994 | #define KPASMKP3 __REG(0x41500040) /* Keypad Interface Automatic Scan Multiple Key Presser register 3 */ | ||
1995 | #define KPKDI __REG(0x41500048) /* Keypad Interface Key Debounce Interval register */ | ||
1996 | |||
1997 | #define KPC_AS (0x1 << 30) /* Automatic Scan bit */ | ||
1998 | #define KPC_ASACT (0x1 << 29) /* Automatic Scan on Activity */ | ||
1999 | #define KPC_MI (0x1 << 22) /* Matrix interrupt bit */ | ||
2000 | #define KPC_IMKP (0x1 << 21) /* Ignore Multiple Key Press */ | ||
2001 | #define KPC_MS7 (0x1 << 20) /* Matrix scan line 7 */ | ||
2002 | #define KPC_MS6 (0x1 << 19) /* Matrix scan line 6 */ | ||
2003 | #define KPC_MS5 (0x1 << 18) /* Matrix scan line 5 */ | ||
2004 | #define KPC_MS4 (0x1 << 17) /* Matrix scan line 4 */ | ||
2005 | #define KPC_MS3 (0x1 << 16) /* Matrix scan line 3 */ | ||
2006 | #define KPC_MS2 (0x1 << 15) /* Matrix scan line 2 */ | ||
2007 | #define KPC_MS1 (0x1 << 14) /* Matrix scan line 1 */ | ||
2008 | #define KPC_MS0 (0x1 << 13) /* Matrix scan line 0 */ | ||
2009 | #define KPC_MS_ALL (KPC_MS0 | KPC_MS1 | KPC_MS2 | KPC_MS3 | KPC_MS4 | KPC_MS5 | KPC_MS6 | KPC_MS7) | ||
2010 | #define KPC_ME (0x1 << 12) /* Matrix Keypad Enable */ | ||
2011 | #define KPC_MIE (0x1 << 11) /* Matrix Interrupt Enable */ | ||
2012 | #define KPC_DK_DEB_SEL (0x1 << 9) /* Direct Keypad Debounce Select */ | ||
2013 | #define KPC_DI (0x1 << 5) /* Direct key interrupt bit */ | ||
2014 | #define KPC_RE_ZERO_DEB (0x1 << 4) /* Rotary Encoder Zero Debounce */ | ||
2015 | #define KPC_REE1 (0x1 << 3) /* Rotary Encoder1 Enable */ | ||
2016 | #define KPC_REE0 (0x1 << 2) /* Rotary Encoder0 Enable */ | ||
2017 | #define KPC_DE (0x1 << 1) /* Direct Keypad Enable */ | ||
2018 | #define KPC_DIE (0x1 << 0) /* Direct Keypad interrupt Enable */ | ||
2019 | |||
2020 | #define KPDK_DKP (0x1 << 31) | ||
2021 | #define KPDK_DK7 (0x1 << 7) | ||
2022 | #define KPDK_DK6 (0x1 << 6) | ||
2023 | #define KPDK_DK5 (0x1 << 5) | ||
2024 | #define KPDK_DK4 (0x1 << 4) | ||
2025 | #define KPDK_DK3 (0x1 << 3) | ||
2026 | #define KPDK_DK2 (0x1 << 2) | ||
2027 | #define KPDK_DK1 (0x1 << 1) | ||
2028 | #define KPDK_DK0 (0x1 << 0) | ||
2029 | |||
2030 | #define KPREC_OF1 (0x1 << 31) | ||
2031 | #define kPREC_UF1 (0x1 << 30) | ||
2032 | #define KPREC_OF0 (0x1 << 15) | ||
2033 | #define KPREC_UF0 (0x1 << 14) | ||
2034 | |||
2035 | #define KPMK_MKP (0x1 << 31) | ||
2036 | #define KPAS_SO (0x1 << 31) | ||
2037 | #define KPASMKPx_SO (0x1 << 31) | ||
2038 | |||
2039 | /* | ||
2040 | * UHC: USB Host Controller (OHCI-like) register definitions | ||
2041 | */ | ||
2042 | #define UHC_BASE_PHYS (0x4C000000) | ||
2043 | #define UHCREV __REG(0x4C000000) /* UHC HCI Spec Revision */ | ||
2044 | #define UHCHCON __REG(0x4C000004) /* UHC Host Control Register */ | ||
2045 | #define UHCCOMS __REG(0x4C000008) /* UHC Command Status Register */ | ||
2046 | #define UHCINTS __REG(0x4C00000C) /* UHC Interrupt Status Register */ | ||
2047 | #define UHCINTE __REG(0x4C000010) /* UHC Interrupt Enable */ | ||
2048 | #define UHCINTD __REG(0x4C000014) /* UHC Interrupt Disable */ | ||
2049 | #define UHCHCCA __REG(0x4C000018) /* UHC Host Controller Comm. Area */ | ||
2050 | #define UHCPCED __REG(0x4C00001C) /* UHC Period Current Endpt Descr */ | ||
2051 | #define UHCCHED __REG(0x4C000020) /* UHC Control Head Endpt Descr */ | ||
2052 | #define UHCCCED __REG(0x4C000024) /* UHC Control Current Endpt Descr */ | ||
2053 | #define UHCBHED __REG(0x4C000028) /* UHC Bulk Head Endpt Descr */ | ||
2054 | #define UHCBCED __REG(0x4C00002C) /* UHC Bulk Current Endpt Descr */ | ||
2055 | #define UHCDHEAD __REG(0x4C000030) /* UHC Done Head */ | ||
2056 | #define UHCFMI __REG(0x4C000034) /* UHC Frame Interval */ | ||
2057 | #define UHCFMR __REG(0x4C000038) /* UHC Frame Remaining */ | ||
2058 | #define UHCFMN __REG(0x4C00003C) /* UHC Frame Number */ | ||
2059 | #define UHCPERS __REG(0x4C000040) /* UHC Periodic Start */ | ||
2060 | #define UHCLS __REG(0x4C000044) /* UHC Low Speed Threshold */ | ||
2061 | #define UHCRHDA __REG(0x4C000048) /* UHC Root Hub Descriptor A */ | ||
2062 | #define UHCRHDB __REG(0x4C00004C) /* UHC Root Hub Descriptor B */ | ||
2063 | #define UHCRHS __REG(0x4C000050) /* UHC Root Hub Status */ | ||
2064 | #define UHCRHPS1 __REG(0x4C000054) /* UHC Root Hub Port 1 Status */ | ||
2065 | #define UHCRHPS2 __REG(0x4C000058) /* UHC Root Hub Port 2 Status */ | ||
2066 | #define UHCRHPS3 __REG(0x4C00005C) /* UHC Root Hub Port 3 Status */ | ||
2067 | |||
2068 | #define UHCSTAT __REG(0x4C000060) /* UHC Status Register */ | ||
2069 | #define UHCSTAT_UPS3 (1 << 16) /* USB Power Sense Port3 */ | ||
2070 | #define UHCSTAT_SBMAI (1 << 15) /* System Bus Master Abort Interrupt*/ | ||
2071 | #define UHCSTAT_SBTAI (1 << 14) /* System Bus Target Abort Interrupt*/ | ||
2072 | #define UHCSTAT_UPRI (1 << 13) /* USB Port Resume Interrupt */ | ||
2073 | #define UHCSTAT_UPS2 (1 << 12) /* USB Power Sense Port 2 */ | ||
2074 | #define UHCSTAT_UPS1 (1 << 11) /* USB Power Sense Port 1 */ | ||
2075 | #define UHCSTAT_HTA (1 << 10) /* HCI Target Abort */ | ||
2076 | #define UHCSTAT_HBA (1 << 8) /* HCI Buffer Active */ | ||
2077 | #define UHCSTAT_RWUE (1 << 7) /* HCI Remote Wake Up Event */ | ||
2078 | |||
2079 | #define UHCHR __REG(0x4C000064) /* UHC Reset Register */ | ||
2080 | #define UHCHR_SSEP3 (1 << 11) /* Sleep Standby Enable for Port3 */ | ||
2081 | #define UHCHR_SSEP2 (1 << 10) /* Sleep Standby Enable for Port2 */ | ||
2082 | #define UHCHR_SSEP1 (1 << 9) /* Sleep Standby Enable for Port1 */ | ||
2083 | #define UHCHR_PCPL (1 << 7) /* Power control polarity low */ | ||
2084 | #define UHCHR_PSPL (1 << 6) /* Power sense polarity low */ | ||
2085 | #define UHCHR_SSE (1 << 5) /* Sleep Standby Enable */ | ||
2086 | #define UHCHR_UIT (1 << 4) /* USB Interrupt Test */ | ||
2087 | #define UHCHR_SSDC (1 << 3) /* Simulation Scale Down Clock */ | ||
2088 | #define UHCHR_CGR (1 << 2) /* Clock Generation Reset */ | ||
2089 | #define UHCHR_FHR (1 << 1) /* Force Host Controller Reset */ | ||
2090 | #define UHCHR_FSBIR (1 << 0) /* Force System Bus Iface Reset */ | ||
2091 | |||
2092 | #define UHCHIE __REG(0x4C000068) /* UHC Interrupt Enable Register*/ | ||
2093 | #define UHCHIE_UPS3IE (1 << 14) /* Power Sense Port3 IntEn */ | ||
2094 | #define UHCHIE_UPRIE (1 << 13) /* Port Resume IntEn */ | ||
2095 | #define UHCHIE_UPS2IE (1 << 12) /* Power Sense Port2 IntEn */ | ||
2096 | #define UHCHIE_UPS1IE (1 << 11) /* Power Sense Port1 IntEn */ | ||
2097 | #define UHCHIE_TAIE (1 << 10) /* HCI Interface Transfer Abort | ||
2098 | Interrupt Enable*/ | ||
2099 | #define UHCHIE_HBAIE (1 << 8) /* HCI Buffer Active IntEn */ | ||
2100 | #define UHCHIE_RWIE (1 << 7) /* Remote Wake-up IntEn */ | ||
2101 | |||
2102 | #define UHCHIT __REG(0x4C00006C) /* UHC Interrupt Test register */ | ||
2103 | |||
2104 | /* Camera Interface */ | ||
2105 | #define CICR0 __REG(0x50000000) | ||
2106 | #define CICR1 __REG(0x50000004) | ||
2107 | #define CICR2 __REG(0x50000008) | ||
2108 | #define CICR3 __REG(0x5000000C) | ||
2109 | #define CICR4 __REG(0x50000010) | ||
2110 | #define CISR __REG(0x50000014) | ||
2111 | #define CIFR __REG(0x50000018) | ||
2112 | #define CITOR __REG(0x5000001C) | ||
2113 | #define CIBR0 __REG(0x50000028) | ||
2114 | #define CIBR1 __REG(0x50000030) | ||
2115 | #define CIBR2 __REG(0x50000038) | ||
2116 | |||
2117 | #define CICR0_DMAEN (1 << 31) /* DMA request enable */ | ||
2118 | #define CICR0_PAR_EN (1 << 30) /* Parity enable */ | ||
2119 | #define CICR0_SL_CAP_EN (1 << 29) /* Capture enable for slave mode */ | ||
2120 | #define CICR0_ENB (1 << 28) /* Camera interface enable */ | ||
2121 | #define CICR0_DIS (1 << 27) /* Camera interface disable */ | ||
2122 | #define CICR0_SIM (0x7 << 24) /* Sensor interface mode mask */ | ||
2123 | #define CICR0_TOM (1 << 9) /* Time-out mask */ | ||
2124 | #define CICR0_RDAVM (1 << 8) /* Receive-data-available mask */ | ||
2125 | #define CICR0_FEM (1 << 7) /* FIFO-empty mask */ | ||
2126 | #define CICR0_EOLM (1 << 6) /* End-of-line mask */ | ||
2127 | #define CICR0_PERRM (1 << 5) /* Parity-error mask */ | ||
2128 | #define CICR0_QDM (1 << 4) /* Quick-disable mask */ | ||
2129 | #define CICR0_CDM (1 << 3) /* Disable-done mask */ | ||
2130 | #define CICR0_SOFM (1 << 2) /* Start-of-frame mask */ | ||
2131 | #define CICR0_EOFM (1 << 1) /* End-of-frame mask */ | ||
2132 | #define CICR0_FOM (1 << 0) /* FIFO-overrun mask */ | ||
2133 | |||
2134 | #define CICR1_TBIT (1 << 31) /* Transparency bit */ | ||
2135 | #define CICR1_RGBT_CONV (0x3 << 30) /* RGBT conversion mask */ | ||
2136 | #define CICR1_PPL (0x3f << 15) /* Pixels per line mask */ | ||
2137 | #define CICR1_RGB_CONV (0x7 << 12) /* RGB conversion mask */ | ||
2138 | #define CICR1_RGB_F (1 << 11) /* RGB format */ | ||
2139 | #define CICR1_YCBCR_F (1 << 10) /* YCbCr format */ | ||
2140 | #define CICR1_RGB_BPP (0x7 << 7) /* RGB bis per pixel mask */ | ||
2141 | #define CICR1_RAW_BPP (0x3 << 5) /* Raw bis per pixel mask */ | ||
2142 | #define CICR1_COLOR_SP (0x3 << 3) /* Color space mask */ | ||
2143 | #define CICR1_DW (0x7 << 0) /* Data width mask */ | ||
2144 | |||
2145 | #define CICR2_BLW (0xff << 24) /* Beginning-of-line pixel clock | ||
2146 | wait count mask */ | ||
2147 | #define CICR2_ELW (0xff << 16) /* End-of-line pixel clock | ||
2148 | wait count mask */ | ||
2149 | #define CICR2_HSW (0x3f << 10) /* Horizontal sync pulse width mask */ | ||
2150 | #define CICR2_BFPW (0x3f << 3) /* Beginning-of-frame pixel clock | ||
2151 | wait count mask */ | ||
2152 | #define CICR2_FSW (0x7 << 0) /* Frame stabilization | ||
2153 | wait count mask */ | ||
2154 | |||
2155 | #define CICR3_BFW (0xff << 24) /* Beginning-of-frame line clock | ||
2156 | wait count mask */ | ||
2157 | #define CICR3_EFW (0xff << 16) /* End-of-frame line clock | ||
2158 | wait count mask */ | ||
2159 | #define CICR3_VSW (0x3f << 10) /* Vertical sync pulse width mask */ | ||
2160 | #define CICR3_BFPW (0x3f << 3) /* Beginning-of-frame pixel clock | ||
2161 | wait count mask */ | ||
2162 | #define CICR3_LPF (0x3ff << 0) /* Lines per frame mask */ | ||
2163 | |||
2164 | #define CICR4_MCLK_DLY (0x3 << 24) /* MCLK Data Capture Delay mask */ | ||
2165 | #define CICR4_PCLK_EN (1 << 23) /* Pixel clock enable */ | ||
2166 | #define CICR4_PCP (1 << 22) /* Pixel clock polarity */ | ||
2167 | #define CICR4_HSP (1 << 21) /* Horizontal sync polarity */ | ||
2168 | #define CICR4_VSP (1 << 20) /* Vertical sync polarity */ | ||
2169 | #define CICR4_MCLK_EN (1 << 19) /* MCLK enable */ | ||
2170 | #define CICR4_FR_RATE (0x7 << 8) /* Frame rate mask */ | ||
2171 | #define CICR4_DIV (0xff << 0) /* Clock divisor mask */ | ||
2172 | |||
2173 | #define CISR_FTO (1 << 15) /* FIFO time-out */ | ||
2174 | #define CISR_RDAV_2 (1 << 14) /* Channel 2 receive data available */ | ||
2175 | #define CISR_RDAV_1 (1 << 13) /* Channel 1 receive data available */ | ||
2176 | #define CISR_RDAV_0 (1 << 12) /* Channel 0 receive data available */ | ||
2177 | #define CISR_FEMPTY_2 (1 << 11) /* Channel 2 FIFO empty */ | ||
2178 | #define CISR_FEMPTY_1 (1 << 10) /* Channel 1 FIFO empty */ | ||
2179 | #define CISR_FEMPTY_0 (1 << 9) /* Channel 0 FIFO empty */ | ||
2180 | #define CISR_EOL (1 << 8) /* End of line */ | ||
2181 | #define CISR_PAR_ERR (1 << 7) /* Parity error */ | ||
2182 | #define CISR_CQD (1 << 6) /* Camera interface quick disable */ | ||
2183 | #define CISR_SOF (1 << 5) /* Start of frame */ | ||
2184 | #define CISR_CDD (1 << 4) /* Camera interface disable done */ | ||
2185 | #define CISR_EOF (1 << 3) /* End of frame */ | ||
2186 | #define CISR_IFO_2 (1 << 2) /* FIFO overrun for Channel 2 */ | ||
2187 | #define CISR_IFO_1 (1 << 1) /* FIFO overrun for Channel 1 */ | ||
2188 | #define CISR_IFO_0 (1 << 0) /* FIFO overrun for Channel 0 */ | ||
2189 | |||
2190 | #define CIFR_FLVL2 (0x7f << 23) /* FIFO 2 level mask */ | ||
2191 | #define CIFR_FLVL1 (0x7f << 16) /* FIFO 1 level mask */ | ||
2192 | #define CIFR_FLVL0 (0xff << 8) /* FIFO 0 level mask */ | ||
2193 | #define CIFR_THL_0 (0x3 << 4) /* Threshold Level for Channel 0 FIFO */ | ||
2194 | #define CIFR_RESET_F (1 << 3) /* Reset input FIFOs */ | ||
2195 | #define CIFR_FEN2 (1 << 2) /* FIFO enable for channel 2 */ | ||
2196 | #define CIFR_FEN1 (1 << 1) /* FIFO enable for channel 1 */ | ||
2197 | #define CIFR_FEN0 (1 << 0) /* FIFO enable for channel 0 */ | ||
2198 | |||
2199 | #define SRAM_SIZE 0x40000 /* 4x64K */ | ||
2200 | |||
2201 | #define SRAM_MEM_PHYS 0x5C000000 | ||
2202 | |||
2203 | #define IMPMCR __REG(0x58000000) /* IM Power Management Control Reg */ | ||
2204 | #define IMPMSR __REG(0x58000008) /* IM Power Management Status Reg */ | ||
2205 | |||
2206 | #define IMPMCR_PC3 (0x3 << 22) /* Bank 3 Power Control */ | ||
2207 | #define IMPMCR_PC3_RUN_MODE (0x0 << 22) /* Run mode */ | ||
2208 | #define IMPMCR_PC3_STANDBY_MODE (0x1 << 22) /* Standby mode */ | ||
2209 | #define IMPMCR_PC3_AUTO_MODE (0x3 << 22) /* Automatically controlled */ | ||
2210 | |||
2211 | #define IMPMCR_PC2 (0x3 << 20) /* Bank 2 Power Control */ | ||
2212 | #define IMPMCR_PC2_RUN_MODE (0x0 << 20) /* Run mode */ | ||
2213 | #define IMPMCR_PC2_STANDBY_MODE (0x1 << 20) /* Standby mode */ | ||
2214 | #define IMPMCR_PC2_AUTO_MODE (0x3 << 20) /* Automatically controlled */ | ||
2215 | |||
2216 | #define IMPMCR_PC1 (0x3 << 18) /* Bank 1 Power Control */ | ||
2217 | #define IMPMCR_PC1_RUN_MODE (0x0 << 18) /* Run mode */ | ||
2218 | #define IMPMCR_PC1_STANDBY_MODE (0x1 << 18) /* Standby mode */ | ||
2219 | #define IMPMCR_PC1_AUTO_MODE (0x3 << 18) /* Automatically controlled */ | ||
2220 | |||
2221 | #define IMPMCR_PC0 (0x3 << 16) /* Bank 0 Power Control */ | ||
2222 | #define IMPMCR_PC0_RUN_MODE (0x0 << 16) /* Run mode */ | ||
2223 | #define IMPMCR_PC0_STANDBY_MODE (0x1 << 16) /* Standby mode */ | ||
2224 | #define IMPMCR_PC0_AUTO_MODE (0x3 << 16) /* Automatically controlled */ | ||
2225 | |||
2226 | #define IMPMCR_AW3 (1 << 11) /* Bank 3 Automatic Wake-up enable */ | ||
2227 | #define IMPMCR_AW2 (1 << 10) /* Bank 2 Automatic Wake-up enable */ | ||
2228 | #define IMPMCR_AW1 (1 << 9) /* Bank 1 Automatic Wake-up enable */ | ||
2229 | #define IMPMCR_AW0 (1 << 8) /* Bank 0 Automatic Wake-up enable */ | ||
2230 | |||
2231 | #define IMPMCR_DST (0xFF << 0) /* Delay Standby Time, ms */ | ||
2232 | |||
2233 | #define IMPMSR_PS3 (0x3 << 6) /* Bank 3 Power Status: */ | ||
2234 | #define IMPMSR_PS3_RUN_MODE (0x0 << 6) /* Run mode */ | ||
2235 | #define IMPMSR_PS3_STANDBY_MODE (0x1 << 6) /* Standby mode */ | ||
2236 | |||
2237 | #define IMPMSR_PS2 (0x3 << 4) /* Bank 2 Power Status: */ | ||
2238 | #define IMPMSR_PS2_RUN_MODE (0x0 << 4) /* Run mode */ | ||
2239 | #define IMPMSR_PS2_STANDBY_MODE (0x1 << 4) /* Standby mode */ | ||
2240 | |||
2241 | #define IMPMSR_PS1 (0x3 << 2) /* Bank 1 Power Status: */ | ||
2242 | #define IMPMSR_PS1_RUN_MODE (0x0 << 2) /* Run mode */ | ||
2243 | #define IMPMSR_PS1_STANDBY_MODE (0x1 << 2) /* Standby mode */ | ||
2244 | |||
2245 | #define IMPMSR_PS0 (0x3 << 0) /* Bank 0 Power Status: */ | ||
2246 | #define IMPMSR_PS0_RUN_MODE (0x0 << 0) /* Run mode */ | ||
2247 | #define IMPMSR_PS0_STANDBY_MODE (0x1 << 0) /* Standby mode */ | ||
2248 | |||
2249 | #endif | ||
2250 | |||
2251 | #endif | ||
diff --git a/include/asm-arm/arch-pxa/pxafb.h b/include/asm-arm/arch-pxa/pxafb.h new file mode 100644 index 000000000000..27d71e9d413b --- /dev/null +++ b/include/asm-arm/arch-pxa/pxafb.h | |||
@@ -0,0 +1,68 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-pxa/pxafb.h | ||
3 | * | ||
4 | * Support for the xscale frame buffer. | ||
5 | * | ||
6 | * Author: Jean-Frederic Clere | ||
7 | * Created: Sep 22, 2003 | ||
8 | * Copyright: jfclere@sinix.net | ||
9 | * | ||
10 | * This program is free software; you can redistribute it and/or modify | ||
11 | * it under the terms of the GNU General Public License version 2 as | ||
12 | * published by the Free Software Foundation. | ||
13 | */ | ||
14 | |||
15 | /* | ||
16 | * This structure describes the machine which we are running on. | ||
17 | * It is set in linux/arch/arm/mach-pxa/machine_name.c and used in the probe routine | ||
18 | * of linux/drivers/video/pxafb.c | ||
19 | */ | ||
20 | struct pxafb_mach_info { | ||
21 | u_long pixclock; | ||
22 | |||
23 | u_short xres; | ||
24 | u_short yres; | ||
25 | |||
26 | u_char bpp; | ||
27 | u_char hsync_len; | ||
28 | u_char left_margin; | ||
29 | u_char right_margin; | ||
30 | |||
31 | u_char vsync_len; | ||
32 | u_char upper_margin; | ||
33 | u_char lower_margin; | ||
34 | u_char sync; | ||
35 | |||
36 | u_int cmap_greyscale:1, | ||
37 | cmap_inverse:1, | ||
38 | cmap_static:1, | ||
39 | unused:29; | ||
40 | |||
41 | /* The following should be defined in LCCR0 | ||
42 | * LCCR0_Act or LCCR0_Pas Active or Passive | ||
43 | * LCCR0_Sngl or LCCR0_Dual Single/Dual panel | ||
44 | * LCCR0_Mono or LCCR0_Color Mono/Color | ||
45 | * LCCR0_4PixMono or LCCR0_8PixMono (in mono single mode) | ||
46 | * LCCR0_DMADel(Tcpu) (optional) DMA request delay | ||
47 | * | ||
48 | * The following should not be defined in LCCR0: | ||
49 | * LCCR0_OUM, LCCR0_BM, LCCR0_QDM, LCCR0_DIS, LCCR0_EFM | ||
50 | * LCCR0_IUM, LCCR0_SFM, LCCR0_LDM, LCCR0_ENB | ||
51 | */ | ||
52 | u_int lccr0; | ||
53 | /* The following should be defined in LCCR3 | ||
54 | * LCCR3_OutEnH or LCCR3_OutEnL Output enable polarity | ||
55 | * LCCR3_PixRsEdg or LCCR3_PixFlEdg Pixel clock edge type | ||
56 | * LCCR3_Acb(X) AB Bias pin frequency | ||
57 | * LCCR3_DPC (optional) Double Pixel Clock mode (untested) | ||
58 | * | ||
59 | * The following should not be defined in LCCR3 | ||
60 | * LCCR3_HSP, LCCR3_VSP, LCCR0_Pcd(x), LCCR3_Bpp | ||
61 | */ | ||
62 | u_int lccr3; | ||
63 | |||
64 | void (*pxafb_backlight_power)(int); | ||
65 | void (*pxafb_lcd_power)(int); | ||
66 | |||
67 | }; | ||
68 | void set_pxa_fb_info(struct pxafb_mach_info *hard_pxa_fb_info); | ||
diff --git a/include/asm-arm/arch-pxa/ssp.h b/include/asm-arm/arch-pxa/ssp.h new file mode 100644 index 000000000000..6ec67b018c09 --- /dev/null +++ b/include/asm-arm/arch-pxa/ssp.h | |||
@@ -0,0 +1,47 @@ | |||
1 | /* | ||
2 | * ssp.h | ||
3 | * | ||
4 | * Copyright (C) 2003 Russell King, All Rights Reserved. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | * This driver supports the following PXA CPU/SSP ports:- | ||
11 | * | ||
12 | * PXA250 SSP | ||
13 | * PXA255 SSP, NSSP | ||
14 | * PXA26x SSP, NSSP, ASSP | ||
15 | * PXA27x SSP1, SSP2, SSP3 | ||
16 | */ | ||
17 | |||
18 | #ifndef SSP_H | ||
19 | #define SSP_H | ||
20 | |||
21 | struct ssp_state { | ||
22 | u32 cr0; | ||
23 | u32 cr1; | ||
24 | u32 to; | ||
25 | u32 psp; | ||
26 | }; | ||
27 | |||
28 | struct ssp_dev { | ||
29 | u32 port; | ||
30 | u32 mode; | ||
31 | u32 flags; | ||
32 | u32 psp_flags; | ||
33 | u32 speed; | ||
34 | }; | ||
35 | |||
36 | int ssp_write_word(struct ssp_dev *dev, u32 data); | ||
37 | int ssp_read_word(struct ssp_dev *dev); | ||
38 | void ssp_flush(struct ssp_dev *dev); | ||
39 | void ssp_enable(struct ssp_dev *dev); | ||
40 | void ssp_disable(struct ssp_dev *dev); | ||
41 | void ssp_save_state(struct ssp_dev *dev, struct ssp_state *ssp); | ||
42 | void ssp_restore_state(struct ssp_dev *dev, struct ssp_state *ssp); | ||
43 | int ssp_init(struct ssp_dev *dev, u32 port); | ||
44 | int ssp_config(struct ssp_dev *dev, u32 mode, u32 flags, u32 psp_flags, u32 speed); | ||
45 | void ssp_exit(struct ssp_dev *dev); | ||
46 | |||
47 | #endif | ||
diff --git a/include/asm-arm/arch-pxa/system.h b/include/asm-arm/arch-pxa/system.h new file mode 100644 index 000000000000..840a46bfbc54 --- /dev/null +++ b/include/asm-arm/arch-pxa/system.h | |||
@@ -0,0 +1,34 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-pxa/system.h | ||
3 | * | ||
4 | * Author: Nicolas Pitre | ||
5 | * Created: Jun 15, 2001 | ||
6 | * Copyright: MontaVista Software Inc. | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | */ | ||
12 | |||
13 | #include "hardware.h" | ||
14 | #include "pxa-regs.h" | ||
15 | |||
16 | static inline void arch_idle(void) | ||
17 | { | ||
18 | cpu_do_idle(); | ||
19 | } | ||
20 | |||
21 | |||
22 | static inline void arch_reset(char mode) | ||
23 | { | ||
24 | if (mode == 's') { | ||
25 | /* Jump into ROM at address 0 */ | ||
26 | cpu_reset(0); | ||
27 | } else { | ||
28 | /* Initialize the watchdog and let it fire */ | ||
29 | OWER = OWER_WME; | ||
30 | OSSR = OSSR_M3; | ||
31 | OSMR3 = OSCR + 368640; /* ... in 100 ms */ | ||
32 | } | ||
33 | } | ||
34 | |||
diff --git a/include/asm-arm/arch-pxa/timex.h b/include/asm-arm/arch-pxa/timex.h new file mode 100644 index 000000000000..aa125ec56a32 --- /dev/null +++ b/include/asm-arm/arch-pxa/timex.h | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-pxa/timex.h | ||
3 | * | ||
4 | * Author: Nicolas Pitre | ||
5 | * Created: Jun 15, 2001 | ||
6 | * Copyright: MontaVista Software Inc. | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | */ | ||
12 | |||
13 | #include <linux/config.h> | ||
14 | |||
15 | #if defined(CONFIG_PXA25x) | ||
16 | /* PXA250/210 timer base */ | ||
17 | #define CLOCK_TICK_RATE 3686400 | ||
18 | #elif defined(CONFIG_PXA27x) | ||
19 | /* PXA27x timer base */ | ||
20 | #ifdef CONFIG_MACH_MAINSTONE | ||
21 | #define CLOCK_TICK_RATE 3249600 | ||
22 | #else | ||
23 | #define CLOCK_TICK_RATE 3250000 | ||
24 | #endif | ||
25 | #endif | ||
diff --git a/include/asm-arm/arch-pxa/udc.h b/include/asm-arm/arch-pxa/udc.h new file mode 100644 index 000000000000..30548a30c773 --- /dev/null +++ b/include/asm-arm/arch-pxa/udc.h | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-pxa/udc.h | ||
3 | * | ||
4 | * This supports machine-specific differences in how the PXA2xx | ||
5 | * USB Device Controller (UDC) is wired. | ||
6 | * | ||
7 | * It is set in linux/arch/arm/mach-pxa/<machine>.c and used in | ||
8 | * the probe routine of linux/drivers/usb/gadget/pxa2xx_udc.c | ||
9 | */ | ||
10 | struct pxa2xx_udc_mach_info { | ||
11 | int (*udc_is_connected)(void); /* do we see host? */ | ||
12 | void (*udc_command)(int cmd); | ||
13 | #define PXA2XX_UDC_CMD_CONNECT 0 /* let host see us */ | ||
14 | #define PXA2XX_UDC_CMD_DISCONNECT 1 /* so host won't see us */ | ||
15 | }; | ||
16 | |||
17 | extern void pxa_set_udc_info(struct pxa2xx_udc_mach_info *info); | ||
18 | |||
diff --git a/include/asm-arm/arch-pxa/uncompress.h b/include/asm-arm/arch-pxa/uncompress.h new file mode 100644 index 000000000000..4428d3eb7432 --- /dev/null +++ b/include/asm-arm/arch-pxa/uncompress.h | |||
@@ -0,0 +1,42 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-pxa/uncompress.h | ||
3 | * | ||
4 | * Author: Nicolas Pitre | ||
5 | * Copyright: (C) 2001 MontaVista Software Inc. | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License version 2 as | ||
9 | * published by the Free Software Foundation. | ||
10 | */ | ||
11 | |||
12 | #define FFUART ((volatile unsigned long *)0x40100000) | ||
13 | #define BTUART ((volatile unsigned long *)0x40200000) | ||
14 | #define STUART ((volatile unsigned long *)0x40700000) | ||
15 | |||
16 | #define UART FFUART | ||
17 | |||
18 | |||
19 | static __inline__ void putc(char c) | ||
20 | { | ||
21 | while (!(UART[5] & 0x20)); | ||
22 | UART[0] = c; | ||
23 | } | ||
24 | |||
25 | /* | ||
26 | * This does not append a newline | ||
27 | */ | ||
28 | static void putstr(const char *s) | ||
29 | { | ||
30 | while (*s) { | ||
31 | putc(*s); | ||
32 | if (*s == '\n') | ||
33 | putc('\r'); | ||
34 | s++; | ||
35 | } | ||
36 | } | ||
37 | |||
38 | /* | ||
39 | * nothing to do | ||
40 | */ | ||
41 | #define arch_decomp_setup() | ||
42 | #define arch_decomp_wdog() | ||
diff --git a/include/asm-arm/arch-pxa/vmalloc.h b/include/asm-arm/arch-pxa/vmalloc.h new file mode 100644 index 000000000000..3381af6ddb0d --- /dev/null +++ b/include/asm-arm/arch-pxa/vmalloc.h | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-pxa/vmalloc.h | ||
3 | * | ||
4 | * Author: Nicolas Pitre | ||
5 | * Copyright: (C) 2001 MontaVista Software Inc. | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License version 2 as | ||
9 | * published by the Free Software Foundation. | ||
10 | */ | ||
11 | |||
12 | /* | ||
13 | * Just any arbitrary offset to the start of the vmalloc VM area: the | ||
14 | * current 8MB value just means that there will be a 8MB "hole" after the | ||
15 | * physical memory until the kernel virtual memory starts. That means that | ||
16 | * any out-of-bounds memory accesses will hopefully be caught. | ||
17 | * The vmalloc() routines leaves a hole of 4kB between each vmalloced | ||
18 | * area for the same reason. ;) | ||
19 | */ | ||
20 | #define VMALLOC_OFFSET (8*1024*1024) | ||
21 | #define VMALLOC_START (((unsigned long)high_memory + VMALLOC_OFFSET) & ~(VMALLOC_OFFSET-1)) | ||
22 | #define VMALLOC_END (0xe8000000) | ||
diff --git a/include/asm-arm/arch-rpc/acornfb.h b/include/asm-arm/arch-rpc/acornfb.h new file mode 100644 index 000000000000..ecb7733a0949 --- /dev/null +++ b/include/asm-arm/arch-rpc/acornfb.h | |||
@@ -0,0 +1,140 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-rpc/acornfb.h | ||
3 | * | ||
4 | * Copyright (C) 1999 Russell King | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | * AcornFB architecture specific code | ||
11 | */ | ||
12 | |||
13 | #define acornfb_bandwidth(var) ((var)->pixclock * 8 / (var)->bits_per_pixel) | ||
14 | |||
15 | static inline int | ||
16 | acornfb_valid_pixrate(struct fb_var_screeninfo *var) | ||
17 | { | ||
18 | u_long limit; | ||
19 | |||
20 | if (!var->pixclock) | ||
21 | return 0; | ||
22 | |||
23 | /* | ||
24 | * Limits below are taken from RISC OS bandwidthlimit file | ||
25 | */ | ||
26 | if (current_par.using_vram) { | ||
27 | if (current_par.vram_half_sam == 2048) | ||
28 | limit = 6578; | ||
29 | else | ||
30 | limit = 13157; | ||
31 | } else { | ||
32 | limit = 26315; | ||
33 | } | ||
34 | |||
35 | return acornfb_bandwidth(var) >= limit; | ||
36 | } | ||
37 | |||
38 | /* | ||
39 | * Try to find the best PLL parameters for the pixel clock. | ||
40 | * This algorithm seems to give best predictable results, | ||
41 | * and produces the same values as detailed in the VIDC20 | ||
42 | * data sheet. | ||
43 | */ | ||
44 | static inline u_int | ||
45 | acornfb_vidc20_find_pll(u_int pixclk) | ||
46 | { | ||
47 | u_int r, best_r = 2, best_v = 2; | ||
48 | int best_d = 0x7fffffff; | ||
49 | |||
50 | for (r = 2; r <= 32; r++) { | ||
51 | u_int rr, v, p; | ||
52 | int d; | ||
53 | |||
54 | rr = 41667 * r; | ||
55 | |||
56 | v = (rr + pixclk / 2) / pixclk; | ||
57 | |||
58 | if (v > 32 || v < 2) | ||
59 | continue; | ||
60 | |||
61 | p = (rr + v / 2) / v; | ||
62 | |||
63 | d = pixclk - p; | ||
64 | |||
65 | if (d < 0) | ||
66 | d = -d; | ||
67 | |||
68 | if (d < best_d) { | ||
69 | best_d = d; | ||
70 | best_v = v - 1; | ||
71 | best_r = r - 1; | ||
72 | } | ||
73 | |||
74 | if (d == 0) | ||
75 | break; | ||
76 | } | ||
77 | |||
78 | return best_v << 8 | best_r; | ||
79 | } | ||
80 | |||
81 | static inline void | ||
82 | acornfb_vidc20_find_rates(struct vidc_timing *vidc, | ||
83 | struct fb_var_screeninfo *var) | ||
84 | { | ||
85 | u_int div; | ||
86 | |||
87 | /* Select pixel-clock divisor to keep PLL in range */ | ||
88 | div = var->pixclock / 9090; /*9921*/ | ||
89 | |||
90 | /* Limit divisor */ | ||
91 | if (div == 0) | ||
92 | div = 1; | ||
93 | if (div > 8) | ||
94 | div = 8; | ||
95 | |||
96 | /* Encode divisor to VIDC20 setting */ | ||
97 | switch (div) { | ||
98 | case 1: vidc->control |= VIDC20_CTRL_PIX_CK; break; | ||
99 | case 2: vidc->control |= VIDC20_CTRL_PIX_CK2; break; | ||
100 | case 3: vidc->control |= VIDC20_CTRL_PIX_CK3; break; | ||
101 | case 4: vidc->control |= VIDC20_CTRL_PIX_CK4; break; | ||
102 | case 5: vidc->control |= VIDC20_CTRL_PIX_CK5; break; | ||
103 | case 6: vidc->control |= VIDC20_CTRL_PIX_CK6; break; | ||
104 | case 7: vidc->control |= VIDC20_CTRL_PIX_CK7; break; | ||
105 | case 8: vidc->control |= VIDC20_CTRL_PIX_CK8; break; | ||
106 | } | ||
107 | |||
108 | /* | ||
109 | * With VRAM, the FIFO can be set to the highest possible setting | ||
110 | * because there are no latency considerations for other memory | ||
111 | * accesses. However, in 64 bit bus mode the FIFO preload value | ||
112 | * must not be set to VIDC20_CTRL_FIFO_28 because this will let | ||
113 | * the FIFO overflow. See VIDC20 manual page 33 (6.0 Setting the | ||
114 | * FIFO preload value). | ||
115 | */ | ||
116 | if (current_par.using_vram) { | ||
117 | if (current_par.vram_half_sam == 2048) | ||
118 | vidc->control |= VIDC20_CTRL_FIFO_24; | ||
119 | else | ||
120 | vidc->control |= VIDC20_CTRL_FIFO_28; | ||
121 | } else { | ||
122 | unsigned long bandwidth = acornfb_bandwidth(var); | ||
123 | |||
124 | /* Encode bandwidth as VIDC20 setting */ | ||
125 | if (bandwidth > 33334) /* < 30.0MB/s */ | ||
126 | vidc->control |= VIDC20_CTRL_FIFO_16; | ||
127 | else if (bandwidth > 26666) /* < 37.5MB/s */ | ||
128 | vidc->control |= VIDC20_CTRL_FIFO_20; | ||
129 | else if (bandwidth > 22222) /* < 45.0MB/s */ | ||
130 | vidc->control |= VIDC20_CTRL_FIFO_24; | ||
131 | else /* > 45.0MB/s */ | ||
132 | vidc->control |= VIDC20_CTRL_FIFO_28; | ||
133 | } | ||
134 | |||
135 | /* Find the PLL values */ | ||
136 | vidc->pll_ctl = acornfb_vidc20_find_pll(var->pixclock / div); | ||
137 | } | ||
138 | |||
139 | #define acornfb_default_control() (VIDC20_CTRL_PIX_VCLK) | ||
140 | #define acornfb_default_econtrol() (VIDC20_ECTL_DAC | VIDC20_ECTL_REG(3)) | ||
diff --git a/include/asm-arm/arch-rpc/debug-macro.S b/include/asm-arm/arch-rpc/debug-macro.S new file mode 100644 index 000000000000..0711828164cd --- /dev/null +++ b/include/asm-arm/arch-rpc/debug-macro.S | |||
@@ -0,0 +1,35 @@ | |||
1 | /* linux/include/asm-arm/arch-rpc/debug-macro.S | ||
2 | * | ||
3 | * Debugging macro include header | ||
4 | * | ||
5 | * Copyright (C) 1994-1999 Russell King | ||
6 | * Moved from linux/arch/arm/kernel/debug.S by Ben Dooks | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | * | ||
12 | */ | ||
13 | |||
14 | .macro addruart,rx | ||
15 | mov \rx, #0xe0000000 | ||
16 | orr \rx, \rx, #0x00010000 | ||
17 | orr \rx, \rx, #0x00000fe0 | ||
18 | .endm | ||
19 | |||
20 | .macro senduart,rd,rx | ||
21 | strb \rd, [\rx] | ||
22 | .endm | ||
23 | |||
24 | .macro busyuart,rd,rx | ||
25 | 1001: ldrb \rd, [\rx, #0x14] | ||
26 | and \rd, \rd, #0x60 | ||
27 | teq \rd, #0x60 | ||
28 | bne 1001b | ||
29 | .endm | ||
30 | |||
31 | .macro waituart,rd,rx | ||
32 | 1001: ldrb \rd, [\rx, #0x18] | ||
33 | tst \rd, #0x10 | ||
34 | beq 1001b | ||
35 | .endm | ||
diff --git a/include/asm-arm/arch-rpc/dma.h b/include/asm-arm/arch-rpc/dma.h new file mode 100644 index 000000000000..d24a27e30b93 --- /dev/null +++ b/include/asm-arm/arch-rpc/dma.h | |||
@@ -0,0 +1,33 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-rpc/dma.h | ||
3 | * | ||
4 | * Copyright (C) 1997 Russell King | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | */ | ||
10 | #ifndef __ASM_ARCH_DMA_H | ||
11 | #define __ASM_ARCH_DMA_H | ||
12 | |||
13 | /* | ||
14 | * This is the maximum DMA address that can be DMAd to. | ||
15 | * There should not be more than (0xd0000000 - 0xc0000000) | ||
16 | * bytes of RAM. | ||
17 | */ | ||
18 | #define MAX_DMA_ADDRESS 0xd0000000 | ||
19 | #define MAX_DMA_CHANNELS 8 | ||
20 | |||
21 | #define DMA_0 0 | ||
22 | #define DMA_1 1 | ||
23 | #define DMA_2 2 | ||
24 | #define DMA_3 3 | ||
25 | #define DMA_S0 4 | ||
26 | #define DMA_S1 5 | ||
27 | #define DMA_VIRTUAL_FLOPPY 6 | ||
28 | #define DMA_VIRTUAL_SOUND 7 | ||
29 | |||
30 | #define DMA_FLOPPY DMA_VIRTUAL_FLOPPY | ||
31 | |||
32 | #endif /* _ASM_ARCH_DMA_H */ | ||
33 | |||
diff --git a/include/asm-arm/arch-rpc/entry-macro.S b/include/asm-arm/arch-rpc/entry-macro.S new file mode 100644 index 000000000000..686f413f82d6 --- /dev/null +++ b/include/asm-arm/arch-rpc/entry-macro.S | |||
@@ -0,0 +1,3 @@ | |||
1 | |||
2 | #include <asm/hardware/entry-macro-iomd.S> | ||
3 | |||
diff --git a/include/asm-arm/arch-rpc/hardware.h b/include/asm-arm/arch-rpc/hardware.h new file mode 100644 index 000000000000..be9754a05c19 --- /dev/null +++ b/include/asm-arm/arch-rpc/hardware.h | |||
@@ -0,0 +1,86 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-rpc/hardware.h | ||
3 | * | ||
4 | * Copyright (C) 1996-1999 Russell King. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | * This file contains the hardware definitions of the RiscPC series machines. | ||
11 | */ | ||
12 | #ifndef __ASM_ARCH_HARDWARE_H | ||
13 | #define __ASM_ARCH_HARDWARE_H | ||
14 | |||
15 | #include <asm/arch/memory.h> | ||
16 | |||
17 | #ifndef __ASSEMBLY__ | ||
18 | #define IOMEM(x) ((void __iomem *)(x)) | ||
19 | #else | ||
20 | #define IOMEM(x) x | ||
21 | #endif /* __ASSEMBLY__ */ | ||
22 | |||
23 | /* | ||
24 | * What hardware must be present | ||
25 | */ | ||
26 | #define HAS_IOMD | ||
27 | #define HAS_VIDC20 | ||
28 | |||
29 | /* Hardware addresses of major areas. | ||
30 | * *_START is the physical address | ||
31 | * *_SIZE is the size of the region | ||
32 | * *_BASE is the virtual address | ||
33 | */ | ||
34 | #define RAM_SIZE 0x10000000 | ||
35 | #define RAM_START 0x10000000 | ||
36 | |||
37 | #define EASI_SIZE 0x08000000 /* EASI I/O */ | ||
38 | #define EASI_START 0x08000000 | ||
39 | #define EASI_BASE 0xe5000000 | ||
40 | |||
41 | #define IO_START 0x03000000 /* I/O */ | ||
42 | #define IO_SIZE 0x01000000 | ||
43 | #define IO_BASE IOMEM(0xe0000000) | ||
44 | |||
45 | #define SCREEN_START 0x02000000 /* VRAM */ | ||
46 | #define SCREEN_END 0xdfc00000 | ||
47 | #define SCREEN_BASE 0xdf800000 | ||
48 | |||
49 | #define FLUSH_BASE 0xdf000000 | ||
50 | #define UNCACHEABLE_ADDR 0xdf010000 | ||
51 | |||
52 | /* | ||
53 | * IO Addresses | ||
54 | */ | ||
55 | #define VIDC_BASE (void __iomem *)0xe0400000 | ||
56 | #define EXPMASK_BASE 0xe0360000 | ||
57 | #define IOMD_BASE IOMEM(0xe0200000) | ||
58 | #define IOC_BASE IOMEM(0xe0200000) | ||
59 | #define PCIO_BASE IOMEM(0xe0010000) | ||
60 | #define FLOPPYDMA_BASE IOMEM(0xe002a000) | ||
61 | |||
62 | #define FLUSH_BASE_PHYS 0x00000000 /* ROM */ | ||
63 | |||
64 | #define vidc_writel(val) __raw_writel(val, VIDC_BASE) | ||
65 | |||
66 | #define IO_EC_EASI_BASE 0x81400000 | ||
67 | #define IO_EC_IOC4_BASE 0x8009c000 | ||
68 | #define IO_EC_IOC_BASE 0x80090000 | ||
69 | #define IO_EC_MEMC8_BASE 0x8000ac00 | ||
70 | #define IO_EC_MEMC_BASE 0x80000000 | ||
71 | |||
72 | #define NETSLOT_BASE 0x0302b000 | ||
73 | #define NETSLOT_SIZE 0x00001000 | ||
74 | |||
75 | #define PODSLOT_IOC0_BASE 0x03240000 | ||
76 | #define PODSLOT_IOC4_BASE 0x03270000 | ||
77 | #define PODSLOT_IOC_SIZE (1 << 14) | ||
78 | #define PODSLOT_MEMC_BASE 0x03000000 | ||
79 | #define PODSLOT_MEMC_SIZE (1 << 14) | ||
80 | #define PODSLOT_EASI_BASE 0x08000000 | ||
81 | #define PODSLOT_EASI_SIZE (1 << 24) | ||
82 | |||
83 | #define EXPMASK_STATUS (EXPMASK_BASE + 0x00) | ||
84 | #define EXPMASK_ENABLE (EXPMASK_BASE + 0x04) | ||
85 | |||
86 | #endif | ||
diff --git a/include/asm-arm/arch-rpc/io.h b/include/asm-arm/arch-rpc/io.h new file mode 100644 index 000000000000..24453c405a87 --- /dev/null +++ b/include/asm-arm/arch-rpc/io.h | |||
@@ -0,0 +1,257 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-rpc/io.h | ||
3 | * | ||
4 | * Copyright (C) 1997 Russell King | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | * Modifications: | ||
11 | * 06-Dec-1997 RMK Created. | ||
12 | */ | ||
13 | #ifndef __ASM_ARM_ARCH_IO_H | ||
14 | #define __ASM_ARM_ARCH_IO_H | ||
15 | |||
16 | #define IO_SPACE_LIMIT 0xffffffff | ||
17 | |||
18 | /* | ||
19 | * GCC is totally crap at loading/storing data. We try to persuade it | ||
20 | * to do the right thing by using these whereever possible instead of | ||
21 | * the above. | ||
22 | */ | ||
23 | #define __arch_base_getb(b,o) \ | ||
24 | ({ \ | ||
25 | unsigned int __v, __r = (b); \ | ||
26 | __asm__ __volatile__( \ | ||
27 | "ldrb %0, [%1, %2]" \ | ||
28 | : "=r" (__v) \ | ||
29 | : "r" (__r), "Ir" (o)); \ | ||
30 | __v; \ | ||
31 | }) | ||
32 | |||
33 | #define __arch_base_getl(b,o) \ | ||
34 | ({ \ | ||
35 | unsigned int __v, __r = (b); \ | ||
36 | __asm__ __volatile__( \ | ||
37 | "ldr %0, [%1, %2]" \ | ||
38 | : "=r" (__v) \ | ||
39 | : "r" (__r), "Ir" (o)); \ | ||
40 | __v; \ | ||
41 | }) | ||
42 | |||
43 | #define __arch_base_putb(v,b,o) \ | ||
44 | ({ \ | ||
45 | unsigned int __r = (b); \ | ||
46 | __asm__ __volatile__( \ | ||
47 | "strb %0, [%1, %2]" \ | ||
48 | : \ | ||
49 | : "r" (v), "r" (__r), "Ir" (o));\ | ||
50 | }) | ||
51 | |||
52 | #define __arch_base_putl(v,b,o) \ | ||
53 | ({ \ | ||
54 | unsigned int __r = (b); \ | ||
55 | __asm__ __volatile__( \ | ||
56 | "str %0, [%1, %2]" \ | ||
57 | : \ | ||
58 | : "r" (v), "r" (__r), "Ir" (o));\ | ||
59 | }) | ||
60 | |||
61 | /* | ||
62 | * We use two different types of addressing - PC style addresses, and ARM | ||
63 | * addresses. PC style accesses the PC hardware with the normal PC IO | ||
64 | * addresses, eg 0x3f8 for serial#1. ARM addresses are 0x80000000+ | ||
65 | * and are translated to the start of IO. Note that all addresses are | ||
66 | * shifted left! | ||
67 | */ | ||
68 | #define __PORT_PCIO(x) (!((x) & 0x80000000)) | ||
69 | |||
70 | /* | ||
71 | * Dynamic IO functions. | ||
72 | */ | ||
73 | static inline void __outb (unsigned int value, unsigned int port) | ||
74 | { | ||
75 | unsigned long temp; | ||
76 | __asm__ __volatile__( | ||
77 | "tst %2, #0x80000000\n\t" | ||
78 | "mov %0, %4\n\t" | ||
79 | "addeq %0, %0, %3\n\t" | ||
80 | "strb %1, [%0, %2, lsl #2] @ outb" | ||
81 | : "=&r" (temp) | ||
82 | : "r" (value), "r" (port), "Ir" (PCIO_BASE - IO_BASE), "Ir" (IO_BASE) | ||
83 | : "cc"); | ||
84 | } | ||
85 | |||
86 | static inline void __outw (unsigned int value, unsigned int port) | ||
87 | { | ||
88 | unsigned long temp; | ||
89 | __asm__ __volatile__( | ||
90 | "tst %2, #0x80000000\n\t" | ||
91 | "mov %0, %4\n\t" | ||
92 | "addeq %0, %0, %3\n\t" | ||
93 | "str %1, [%0, %2, lsl #2] @ outw" | ||
94 | : "=&r" (temp) | ||
95 | : "r" (value|value<<16), "r" (port), "Ir" (PCIO_BASE - IO_BASE), "Ir" (IO_BASE) | ||
96 | : "cc"); | ||
97 | } | ||
98 | |||
99 | static inline void __outl (unsigned int value, unsigned int port) | ||
100 | { | ||
101 | unsigned long temp; | ||
102 | __asm__ __volatile__( | ||
103 | "tst %2, #0x80000000\n\t" | ||
104 | "mov %0, %4\n\t" | ||
105 | "addeq %0, %0, %3\n\t" | ||
106 | "str %1, [%0, %2, lsl #2] @ outl" | ||
107 | : "=&r" (temp) | ||
108 | : "r" (value), "r" (port), "Ir" (PCIO_BASE - IO_BASE), "Ir" (IO_BASE) | ||
109 | : "cc"); | ||
110 | } | ||
111 | |||
112 | #define DECLARE_DYN_IN(sz,fnsuffix,instr) \ | ||
113 | static inline unsigned sz __in##fnsuffix (unsigned int port) \ | ||
114 | { \ | ||
115 | unsigned long temp, value; \ | ||
116 | __asm__ __volatile__( \ | ||
117 | "tst %2, #0x80000000\n\t" \ | ||
118 | "mov %0, %4\n\t" \ | ||
119 | "addeq %0, %0, %3\n\t" \ | ||
120 | "ldr" instr " %1, [%0, %2, lsl #2] @ in" #fnsuffix \ | ||
121 | : "=&r" (temp), "=r" (value) \ | ||
122 | : "r" (port), "Ir" (PCIO_BASE - IO_BASE), "Ir" (IO_BASE) \ | ||
123 | : "cc"); \ | ||
124 | return (unsigned sz)value; \ | ||
125 | } | ||
126 | |||
127 | static inline void __iomem *__ioaddr(unsigned int port) | ||
128 | { | ||
129 | void __iomem *ret; | ||
130 | if (__PORT_PCIO(port)) | ||
131 | ret = PCIO_BASE; | ||
132 | else | ||
133 | ret = IO_BASE; | ||
134 | return ret + (port << 2); | ||
135 | } | ||
136 | |||
137 | #define DECLARE_IO(sz,fnsuffix,instr) \ | ||
138 | DECLARE_DYN_IN(sz,fnsuffix,instr) | ||
139 | |||
140 | DECLARE_IO(char,b,"b") | ||
141 | DECLARE_IO(short,w,"") | ||
142 | DECLARE_IO(int,l,"") | ||
143 | |||
144 | #undef DECLARE_IO | ||
145 | #undef DECLARE_DYN_IN | ||
146 | |||
147 | /* | ||
148 | * Constant address IO functions | ||
149 | * | ||
150 | * These have to be macros for the 'J' constraint to work - | ||
151 | * +/-4096 immediate operand. | ||
152 | */ | ||
153 | #define __outbc(value,port) \ | ||
154 | ({ \ | ||
155 | if (__PORT_PCIO((port))) \ | ||
156 | __asm__ __volatile__( \ | ||
157 | "strb %0, [%1, %2] @ outbc" \ | ||
158 | : : "r" (value), "r" (PCIO_BASE), "Jr" ((port) << 2)); \ | ||
159 | else \ | ||
160 | __asm__ __volatile__( \ | ||
161 | "strb %0, [%1, %2] @ outbc" \ | ||
162 | : : "r" (value), "r" (IO_BASE), "r" ((port) << 2)); \ | ||
163 | }) | ||
164 | |||
165 | #define __inbc(port) \ | ||
166 | ({ \ | ||
167 | unsigned char result; \ | ||
168 | if (__PORT_PCIO((port))) \ | ||
169 | __asm__ __volatile__( \ | ||
170 | "ldrb %0, [%1, %2] @ inbc" \ | ||
171 | : "=r" (result) : "r" (PCIO_BASE), "Jr" ((port) << 2)); \ | ||
172 | else \ | ||
173 | __asm__ __volatile__( \ | ||
174 | "ldrb %0, [%1, %2] @ inbc" \ | ||
175 | : "=r" (result) : "r" (IO_BASE), "r" ((port) << 2)); \ | ||
176 | result; \ | ||
177 | }) | ||
178 | |||
179 | #define __outwc(value,port) \ | ||
180 | ({ \ | ||
181 | unsigned long __v = value; \ | ||
182 | if (__PORT_PCIO((port))) \ | ||
183 | __asm__ __volatile__( \ | ||
184 | "str %0, [%1, %2] @ outwc" \ | ||
185 | : : "r" (__v|__v<<16), "r" (PCIO_BASE), "Jr" ((port) << 2)); \ | ||
186 | else \ | ||
187 | __asm__ __volatile__( \ | ||
188 | "str %0, [%1, %2] @ outwc" \ | ||
189 | : : "r" (__v|__v<<16), "r" (IO_BASE), "r" ((port) << 2)); \ | ||
190 | }) | ||
191 | |||
192 | #define __inwc(port) \ | ||
193 | ({ \ | ||
194 | unsigned short result; \ | ||
195 | if (__PORT_PCIO((port))) \ | ||
196 | __asm__ __volatile__( \ | ||
197 | "ldr %0, [%1, %2] @ inwc" \ | ||
198 | : "=r" (result) : "r" (PCIO_BASE), "Jr" ((port) << 2)); \ | ||
199 | else \ | ||
200 | __asm__ __volatile__( \ | ||
201 | "ldr %0, [%1, %2] @ inwc" \ | ||
202 | : "=r" (result) : "r" (IO_BASE), "r" ((port) << 2)); \ | ||
203 | result & 0xffff; \ | ||
204 | }) | ||
205 | |||
206 | #define __outlc(value,port) \ | ||
207 | ({ \ | ||
208 | unsigned long __v = value; \ | ||
209 | if (__PORT_PCIO((port))) \ | ||
210 | __asm__ __volatile__( \ | ||
211 | "str %0, [%1, %2] @ outlc" \ | ||
212 | : : "r" (__v), "r" (PCIO_BASE), "Jr" ((port) << 2)); \ | ||
213 | else \ | ||
214 | __asm__ __volatile__( \ | ||
215 | "str %0, [%1, %2] @ outlc" \ | ||
216 | : : "r" (__v), "r" (IO_BASE), "r" ((port) << 2)); \ | ||
217 | }) | ||
218 | |||
219 | #define __inlc(port) \ | ||
220 | ({ \ | ||
221 | unsigned long result; \ | ||
222 | if (__PORT_PCIO((port))) \ | ||
223 | __asm__ __volatile__( \ | ||
224 | "ldr %0, [%1, %2] @ inlc" \ | ||
225 | : "=r" (result) : "r" (PCIO_BASE), "Jr" ((port) << 2)); \ | ||
226 | else \ | ||
227 | __asm__ __volatile__( \ | ||
228 | "ldr %0, [%1, %2] @ inlc" \ | ||
229 | : "=r" (result) : "r" (IO_BASE), "r" ((port) << 2)); \ | ||
230 | result; \ | ||
231 | }) | ||
232 | |||
233 | #define __ioaddrc(port) \ | ||
234 | ((__PORT_PCIO(port) ? PCIO_BASE : IO_BASE) + ((port) << 2)) | ||
235 | |||
236 | #define inb(p) (__builtin_constant_p((p)) ? __inbc(p) : __inb(p)) | ||
237 | #define inw(p) (__builtin_constant_p((p)) ? __inwc(p) : __inw(p)) | ||
238 | #define inl(p) (__builtin_constant_p((p)) ? __inlc(p) : __inl(p)) | ||
239 | #define outb(v,p) (__builtin_constant_p((p)) ? __outbc(v,p) : __outb(v,p)) | ||
240 | #define outw(v,p) (__builtin_constant_p((p)) ? __outwc(v,p) : __outw(v,p)) | ||
241 | #define outl(v,p) (__builtin_constant_p((p)) ? __outlc(v,p) : __outl(v,p)) | ||
242 | #define __ioaddr(p) (__builtin_constant_p((p)) ? __ioaddr(p) : __ioaddrc(p)) | ||
243 | /* the following macro is deprecated */ | ||
244 | #define ioaddr(port) ((unsigned long)__ioaddr((port))) | ||
245 | |||
246 | #define insb(p,d,l) __raw_readsb(__ioaddr(p),d,l) | ||
247 | #define insw(p,d,l) __raw_readsw(__ioaddr(p),d,l) | ||
248 | |||
249 | #define outsb(p,d,l) __raw_writesb(__ioaddr(p),d,l) | ||
250 | #define outsw(p,d,l) __raw_writesw(__ioaddr(p),d,l) | ||
251 | |||
252 | /* | ||
253 | * 1:1 mapping for ioremapped regions. | ||
254 | */ | ||
255 | #define __mem_pci(x) (x) | ||
256 | |||
257 | #endif | ||
diff --git a/include/asm-arm/arch-rpc/irqs.h b/include/asm-arm/arch-rpc/irqs.h new file mode 100644 index 000000000000..27c35b05b27d --- /dev/null +++ b/include/asm-arm/arch-rpc/irqs.h | |||
@@ -0,0 +1,46 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-rpc/irqs.h | ||
3 | * | ||
4 | * Copyright (C) 1996 Russell King | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | */ | ||
10 | |||
11 | #define IRQ_PRINTER 0 | ||
12 | #define IRQ_BATLOW 1 | ||
13 | #define IRQ_FLOPPYINDEX 2 | ||
14 | #define IRQ_VSYNCPULSE 3 | ||
15 | #define IRQ_POWERON 4 | ||
16 | #define IRQ_TIMER0 5 | ||
17 | #define IRQ_TIMER1 6 | ||
18 | #define IRQ_IMMEDIATE 7 | ||
19 | #define IRQ_EXPCARDFIQ 8 | ||
20 | #define IRQ_HARDDISK 9 | ||
21 | #define IRQ_SERIALPORT 10 | ||
22 | #define IRQ_FLOPPYDISK 12 | ||
23 | #define IRQ_EXPANSIONCARD 13 | ||
24 | #define IRQ_KEYBOARDTX 14 | ||
25 | #define IRQ_KEYBOARDRX 15 | ||
26 | |||
27 | #define IRQ_DMA0 16 | ||
28 | #define IRQ_DMA1 17 | ||
29 | #define IRQ_DMA2 18 | ||
30 | #define IRQ_DMA3 19 | ||
31 | #define IRQ_DMAS0 20 | ||
32 | #define IRQ_DMAS1 21 | ||
33 | |||
34 | #define FIQ_FLOPPYDATA 0 | ||
35 | #define FIQ_ECONET 2 | ||
36 | #define FIQ_SERIALPORT 4 | ||
37 | #define FIQ_EXPANSIONCARD 6 | ||
38 | #define FIQ_FORCE 7 | ||
39 | |||
40 | /* | ||
41 | * This is the offset of the FIQ "IRQ" numbers | ||
42 | */ | ||
43 | #define FIQ_START 64 | ||
44 | |||
45 | #define IRQ_TIMER IRQ_TIMER0 | ||
46 | |||
diff --git a/include/asm-arm/arch-rpc/memory.h b/include/asm-arm/arch-rpc/memory.h new file mode 100644 index 000000000000..33fc75cdead0 --- /dev/null +++ b/include/asm-arm/arch-rpc/memory.h | |||
@@ -0,0 +1,33 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-rpc/memory.h | ||
3 | * | ||
4 | * Copyright (C) 1996,1997,1998 Russell King. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | * Changelog: | ||
11 | * 20-Oct-1996 RMK Created | ||
12 | * 31-Dec-1997 RMK Fixed definitions to reduce warnings | ||
13 | * 11-Jan-1998 RMK Uninlined to reduce hits on cache | ||
14 | * 08-Feb-1998 RMK Added __virt_to_bus and __bus_to_virt | ||
15 | * 21-Mar-1999 RMK Renamed to memory.h | ||
16 | * RMK Added TASK_SIZE and PAGE_OFFSET | ||
17 | */ | ||
18 | #ifndef __ASM_ARCH_MEMORY_H | ||
19 | #define __ASM_ARCH_MEMORY_H | ||
20 | |||
21 | /* | ||
22 | * Physical DRAM offset. | ||
23 | */ | ||
24 | #define PHYS_OFFSET (0x10000000UL) | ||
25 | |||
26 | /* | ||
27 | * These are exactly the same on the RiscPC as the | ||
28 | * physical memory view. | ||
29 | */ | ||
30 | #define __virt_to_bus(x) __virt_to_phys(x) | ||
31 | #define __bus_to_virt(x) __phys_to_virt(x) | ||
32 | |||
33 | #endif | ||
diff --git a/include/asm-arm/arch-rpc/param.h b/include/asm-arm/arch-rpc/param.h new file mode 100644 index 000000000000..721dcd658858 --- /dev/null +++ b/include/asm-arm/arch-rpc/param.h | |||
@@ -0,0 +1,3 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-rpc/param.h | ||
3 | */ | ||
diff --git a/include/asm-arm/arch-rpc/system.h b/include/asm-arm/arch-rpc/system.h new file mode 100644 index 000000000000..ca3277d1d5ea --- /dev/null +++ b/include/asm-arm/arch-rpc/system.h | |||
@@ -0,0 +1,27 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-rpc/system.h | ||
3 | * | ||
4 | * Copyright (C) 1996-1999 Russell King. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | */ | ||
10 | #include <asm/arch/hardware.h> | ||
11 | #include <asm/hardware/iomd.h> | ||
12 | #include <asm/io.h> | ||
13 | |||
14 | static inline void arch_idle(void) | ||
15 | { | ||
16 | cpu_do_idle(); | ||
17 | } | ||
18 | |||
19 | static inline void arch_reset(char mode) | ||
20 | { | ||
21 | iomd_writeb(0, IOMD_ROMCR0); | ||
22 | |||
23 | /* | ||
24 | * Jump into the ROM | ||
25 | */ | ||
26 | cpu_reset(0); | ||
27 | } | ||
diff --git a/include/asm-arm/arch-rpc/timex.h b/include/asm-arm/arch-rpc/timex.h new file mode 100644 index 000000000000..ed7df64d960b --- /dev/null +++ b/include/asm-arm/arch-rpc/timex.h | |||
@@ -0,0 +1,17 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-rpc/timex.h | ||
3 | * | ||
4 | * Copyright (C) 1997, 1998 Russell King | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | * RiscPC architecture timex specifications | ||
11 | */ | ||
12 | |||
13 | /* | ||
14 | * On the RiscPC, the clock ticks at 2MHz. | ||
15 | */ | ||
16 | #define CLOCK_TICK_RATE 2000000 | ||
17 | |||
diff --git a/include/asm-arm/arch-rpc/uncompress.h b/include/asm-arm/arch-rpc/uncompress.h new file mode 100644 index 000000000000..43035fec64d2 --- /dev/null +++ b/include/asm-arm/arch-rpc/uncompress.h | |||
@@ -0,0 +1,155 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-rpc/uncompress.h | ||
3 | * | ||
4 | * Copyright (C) 1996 Russell King | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | */ | ||
10 | #define VIDMEM ((char *)SCREEN_START) | ||
11 | |||
12 | #include <asm/hardware.h> | ||
13 | #include <asm/io.h> | ||
14 | |||
15 | int video_num_columns, video_num_lines, video_size_row; | ||
16 | int white, bytes_per_char_h; | ||
17 | extern unsigned long con_charconvtable[256]; | ||
18 | |||
19 | struct param_struct { | ||
20 | unsigned long page_size; | ||
21 | unsigned long nr_pages; | ||
22 | unsigned long ramdisk_size; | ||
23 | unsigned long mountrootrdonly; | ||
24 | unsigned long rootdev; | ||
25 | unsigned long video_num_cols; | ||
26 | unsigned long video_num_rows; | ||
27 | unsigned long video_x; | ||
28 | unsigned long video_y; | ||
29 | unsigned long memc_control_reg; | ||
30 | unsigned char sounddefault; | ||
31 | unsigned char adfsdrives; | ||
32 | unsigned char bytes_per_char_h; | ||
33 | unsigned char bytes_per_char_v; | ||
34 | unsigned long unused[256/4-11]; | ||
35 | }; | ||
36 | |||
37 | static const unsigned long palette_4[16] = { | ||
38 | 0x00000000, | ||
39 | 0x000000cc, | ||
40 | 0x0000cc00, /* Green */ | ||
41 | 0x0000cccc, /* Yellow */ | ||
42 | 0x00cc0000, /* Blue */ | ||
43 | 0x00cc00cc, /* Magenta */ | ||
44 | 0x00cccc00, /* Cyan */ | ||
45 | 0x00cccccc, /* White */ | ||
46 | 0x00000000, | ||
47 | 0x000000ff, | ||
48 | 0x0000ff00, | ||
49 | 0x0000ffff, | ||
50 | 0x00ff0000, | ||
51 | 0x00ff00ff, | ||
52 | 0x00ffff00, | ||
53 | 0x00ffffff | ||
54 | }; | ||
55 | |||
56 | #define palette_setpixel(p) *(unsigned long *)(IO_START+0x00400000) = 0x10000000|((p) & 255) | ||
57 | #define palette_write(v) *(unsigned long *)(IO_START+0x00400000) = 0x00000000|((v) & 0x00ffffff) | ||
58 | |||
59 | /* | ||
60 | * params_phys is a linker defined symbol - see | ||
61 | * arch/arm/boot/compressed/Makefile | ||
62 | */ | ||
63 | extern __attribute__((pure)) struct param_struct *params(void); | ||
64 | #define params (params()) | ||
65 | |||
66 | #ifndef STANDALONE_DEBUG | ||
67 | /* | ||
68 | * This does not append a newline | ||
69 | */ | ||
70 | static void putstr(const char *s) | ||
71 | { | ||
72 | extern void ll_write_char(char *, char c, char white); | ||
73 | int x,y; | ||
74 | unsigned char c; | ||
75 | char *ptr; | ||
76 | |||
77 | x = params->video_x; | ||
78 | y = params->video_y; | ||
79 | |||
80 | while ( ( c = *(unsigned char *)s++ ) != '\0' ) { | ||
81 | if ( c == '\n' ) { | ||
82 | x = 0; | ||
83 | if ( ++y >= video_num_lines ) { | ||
84 | y--; | ||
85 | } | ||
86 | } else { | ||
87 | ptr = VIDMEM + ((y*video_num_columns*params->bytes_per_char_v+x)*bytes_per_char_h); | ||
88 | ll_write_char(ptr, c, white); | ||
89 | if ( ++x >= video_num_columns ) { | ||
90 | x = 0; | ||
91 | if ( ++y >= video_num_lines ) { | ||
92 | y--; | ||
93 | } | ||
94 | } | ||
95 | } | ||
96 | } | ||
97 | |||
98 | params->video_x = x; | ||
99 | params->video_y = y; | ||
100 | } | ||
101 | |||
102 | static void error(char *x); | ||
103 | |||
104 | /* | ||
105 | * Setup for decompression | ||
106 | */ | ||
107 | static void arch_decomp_setup(void) | ||
108 | { | ||
109 | int i; | ||
110 | |||
111 | video_num_lines = params->video_num_rows; | ||
112 | video_num_columns = params->video_num_cols; | ||
113 | bytes_per_char_h = params->bytes_per_char_h; | ||
114 | video_size_row = video_num_columns * bytes_per_char_h; | ||
115 | if (bytes_per_char_h == 4) | ||
116 | for (i = 0; i < 256; i++) | ||
117 | con_charconvtable[i] = | ||
118 | (i & 128 ? 1 << 0 : 0) | | ||
119 | (i & 64 ? 1 << 4 : 0) | | ||
120 | (i & 32 ? 1 << 8 : 0) | | ||
121 | (i & 16 ? 1 << 12 : 0) | | ||
122 | (i & 8 ? 1 << 16 : 0) | | ||
123 | (i & 4 ? 1 << 20 : 0) | | ||
124 | (i & 2 ? 1 << 24 : 0) | | ||
125 | (i & 1 ? 1 << 28 : 0); | ||
126 | else | ||
127 | for (i = 0; i < 16; i++) | ||
128 | con_charconvtable[i] = | ||
129 | (i & 8 ? 1 << 0 : 0) | | ||
130 | (i & 4 ? 1 << 8 : 0) | | ||
131 | (i & 2 ? 1 << 16 : 0) | | ||
132 | (i & 1 ? 1 << 24 : 0); | ||
133 | |||
134 | |||
135 | palette_setpixel(0); | ||
136 | if (bytes_per_char_h == 1) { | ||
137 | palette_write (0); | ||
138 | palette_write (0x00ffffff); | ||
139 | for (i = 2; i < 256; i++) | ||
140 | palette_write (0); | ||
141 | white = 1; | ||
142 | } else { | ||
143 | for (i = 0; i < 256; i++) | ||
144 | palette_write (i < 16 ? palette_4[i] : 0); | ||
145 | white = 7; | ||
146 | } | ||
147 | |||
148 | if (params->nr_pages * params->page_size < 4096*1024) error("<4M of mem\n"); | ||
149 | } | ||
150 | #endif | ||
151 | |||
152 | /* | ||
153 | * nothing to do | ||
154 | */ | ||
155 | #define arch_decomp_wdog() | ||
diff --git a/include/asm-arm/arch-rpc/vmalloc.h b/include/asm-arm/arch-rpc/vmalloc.h new file mode 100644 index 000000000000..a13c27f37d71 --- /dev/null +++ b/include/asm-arm/arch-rpc/vmalloc.h | |||
@@ -0,0 +1,21 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-rpc/vmalloc.h | ||
3 | * | ||
4 | * Copyright (C) 1997 Russell King | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | */ | ||
10 | |||
11 | /* | ||
12 | * Just any arbitrary offset to the start of the vmalloc VM area: the | ||
13 | * current 8MB value just means that there will be a 8MB "hole" after the | ||
14 | * physical memory until the kernel virtual memory starts. That means that | ||
15 | * any out-of-bounds memory accesses will hopefully be caught. | ||
16 | * The vmalloc() routines leaves a hole of 4kB between each vmalloced | ||
17 | * area for the same reason. ;) | ||
18 | */ | ||
19 | #define VMALLOC_OFFSET (8*1024*1024) | ||
20 | #define VMALLOC_START (((unsigned long)high_memory + VMALLOC_OFFSET) & ~(VMALLOC_OFFSET-1)) | ||
21 | #define VMALLOC_END (PAGE_OFFSET + 0x1c000000) | ||
diff --git a/include/asm-arm/arch-s3c2410/bast-cpld.h b/include/asm-arm/arch-s3c2410/bast-cpld.h new file mode 100644 index 000000000000..e28ca51a4975 --- /dev/null +++ b/include/asm-arm/arch-s3c2410/bast-cpld.h | |||
@@ -0,0 +1,58 @@ | |||
1 | /* linux/include/asm-arm/arch-s3c2410/bast-cpld.h | ||
2 | * | ||
3 | * (c) 2003,2004 Simtec Electronics | ||
4 | * Ben Dooks <ben@simtec.co.uk> | ||
5 | * | ||
6 | * BAST - CPLD control constants | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | * | ||
12 | * Changelog: | ||
13 | * 25-May-2003 BJD Created file, added CTRL1 registers | ||
14 | * 30-Aug-2004 BJD Updated definitions from 2.4.26 port | ||
15 | * 30-Aug-2004 BJD Added CTRL3 and CTRL4 definitions | ||
16 | */ | ||
17 | |||
18 | #ifndef __ASM_ARCH_BASTCPLD_H | ||
19 | #define __ASM_ARCH_BASTCPLD_H | ||
20 | |||
21 | /* CTRL1 - Audio LR routing */ | ||
22 | |||
23 | #define BAST_CPLD_CTRL1_LRCOFF (0x00) | ||
24 | #define BAST_CPLD_CTRL1_LRCADC (0x01) | ||
25 | #define BAST_CPLD_CTRL1_LRCDAC (0x02) | ||
26 | #define BAST_CPLD_CTRL1_LRCARM (0x03) | ||
27 | #define BAST_CPLD_CTRL1_LRMASK (0x03) | ||
28 | |||
29 | /* CTRL2 - NAND WP control, IDE Reset assert/check */ | ||
30 | |||
31 | #define BAST_CPLD_CTRL2_WNAND (0x04) | ||
32 | #define BAST_CPLD_CTLR2_IDERST (0x08) | ||
33 | |||
34 | /* CTRL3 - rom write control, CPLD identity */ | ||
35 | |||
36 | #define BAST_CPLD_CTRL3_IDMASK (0x0e) | ||
37 | #define BAST_CPLD_CTRL3_ROMWEN (0x01) | ||
38 | |||
39 | /* CTRL4 - 8bit LCD interface control/status */ | ||
40 | |||
41 | #define BAST_CPLD_CTRL4_LLAT (0x01) | ||
42 | #define BAST_CPLD_CTRL4_LCDRW (0x02) | ||
43 | #define BAST_CPLD_CTRL4_LCDCMD (0x04) | ||
44 | #define BAST_CPLD_CTRL4_LCDE2 (0x01) | ||
45 | |||
46 | /* CTRL5 - DMA routing */ | ||
47 | |||
48 | #define BAST_CPLD_DMA0_PRIIDE (0<<0) | ||
49 | #define BAST_CPLD_DMA0_SECIDE (1<<0) | ||
50 | #define BAST_CPLD_DMA0_ISA15 (2<<0) | ||
51 | #define BAST_CPLD_DMA0_ISA36 (3<<0) | ||
52 | |||
53 | #define BAST_CPLD_DMA1_PRIIDE (0<<2) | ||
54 | #define BAST_CPLD_DMA1_SECIDE (1<<2) | ||
55 | #define BAST_CPLD_DMA1_ISA15 (2<<2) | ||
56 | #define BAST_CPLD_DMA1_ISA36 (3<<2) | ||
57 | |||
58 | #endif /* __ASM_ARCH_BASTCPLD_H */ | ||
diff --git a/include/asm-arm/arch-s3c2410/bast-irq.h b/include/asm-arm/arch-s3c2410/bast-irq.h new file mode 100644 index 000000000000..b79b47f0d126 --- /dev/null +++ b/include/asm-arm/arch-s3c2410/bast-irq.h | |||
@@ -0,0 +1,33 @@ | |||
1 | /* linux/include/asm-arm/arch-s3c2410/bast-irq.h | ||
2 | * | ||
3 | * (c) 2003,2004 Simtec Electronics | ||
4 | * Ben Dooks <ben@simtec.co.uk> | ||
5 | * | ||
6 | * Machine BAST - IRQ Number definitions | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | * | ||
12 | * Changelog: | ||
13 | * 14-Sep-2004 BJD Fixed IRQ_USBOC definition | ||
14 | * 06-Jan-2003 BJD Linux 2.6.0 version | ||
15 | */ | ||
16 | |||
17 | #ifndef __ASM_ARCH_BASTIRQ_H | ||
18 | #define __ASM_ARCH_BASTIRQ_H | ||
19 | |||
20 | /* irq numbers to onboard peripherals */ | ||
21 | |||
22 | #define IRQ_USBOC IRQ_EINT18 | ||
23 | #define IRQ_IDE0 IRQ_EINT16 | ||
24 | #define IRQ_IDE1 IRQ_EINT17 | ||
25 | #define IRQ_PCSERIAL1 IRQ_EINT15 | ||
26 | #define IRQ_PCSERIAL2 IRQ_EINT14 | ||
27 | #define IRQ_PCPARALLEL IRQ_EINT13 | ||
28 | #define IRQ_ASIX IRQ_EINT11 | ||
29 | #define IRQ_DM9000 IRQ_EINT10 | ||
30 | #define IRQ_ISA IRQ_EINT9 | ||
31 | #define IRQ_SMALERT IRQ_EINT8 | ||
32 | |||
33 | #endif /* __ASM_ARCH_BASTIRQ_H */ | ||
diff --git a/include/asm-arm/arch-s3c2410/bast-map.h b/include/asm-arm/arch-s3c2410/bast-map.h new file mode 100644 index 000000000000..29c07e302b04 --- /dev/null +++ b/include/asm-arm/arch-s3c2410/bast-map.h | |||
@@ -0,0 +1,150 @@ | |||
1 | /* linux/include/asm-arm/arch-s3c2410/bast-map.h | ||
2 | * | ||
3 | * (c) 2003,2004 Simtec Electronics | ||
4 | * Ben Dooks <ben@simtec.co.uk> | ||
5 | * | ||
6 | * Machine BAST - Memory map definitions | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | * | ||
12 | * Changelog: | ||
13 | * 06-Jan-2003 BJD Linux 2.6.0 version, moved bast specifics from arch/map.h | ||
14 | * 12-Mar-2004 BJD Fixed header include protection | ||
15 | */ | ||
16 | |||
17 | /* needs arch/map.h including with this */ | ||
18 | |||
19 | /* ok, we've used up to 0x13000000, now we need to find space for the | ||
20 | * peripherals that live in the nGCS[x] areas, which are quite numerous | ||
21 | * in their space. We also have the board's CPLD to find register space | ||
22 | * for. | ||
23 | */ | ||
24 | |||
25 | #ifndef __ASM_ARCH_BASTMAP_H | ||
26 | #define __ASM_ARCH_BASTMAP_H | ||
27 | |||
28 | #define BAST_IOADDR(x) (S3C2410_ADDR((x) + 0x01300000)) | ||
29 | |||
30 | /* we put the CPLD registers next, to get them out of the way */ | ||
31 | |||
32 | #define BAST_VA_CTRL1 BAST_IOADDR(0x00000000) /* 0x01300000 */ | ||
33 | #define BAST_PA_CTRL1 (S3C2410_CS5 | 0x7800000) | ||
34 | |||
35 | #define BAST_VA_CTRL2 BAST_IOADDR(0x00100000) /* 0x01400000 */ | ||
36 | #define BAST_PA_CTRL2 (S3C2410_CS1 | 0x6000000) | ||
37 | |||
38 | #define BAST_VA_CTRL3 BAST_IOADDR(0x00200000) /* 0x01500000 */ | ||
39 | #define BAST_PA_CTRL3 (S3C2410_CS1 | 0x6800000) | ||
40 | |||
41 | #define BAST_VA_CTRL4 BAST_IOADDR(0x00300000) /* 0x01600000 */ | ||
42 | #define BAST_PA_CTRL4 (S3C2410_CS1 | 0x7000000) | ||
43 | |||
44 | /* next, we have the PC104 ISA interrupt registers */ | ||
45 | |||
46 | #define BAST_PA_PC104_IRQREQ (S3C2410_CS5 | 0x6000000) /* 0x01700000 */ | ||
47 | #define BAST_VA_PC104_IRQREQ BAST_IOADDR(0x00400000) | ||
48 | |||
49 | #define BAST_PA_PC104_IRQRAW (S3C2410_CS5 | 0x6800000) /* 0x01800000 */ | ||
50 | #define BAST_VA_PC104_IRQRAW BAST_IOADDR(0x00500000) | ||
51 | |||
52 | #define BAST_PA_PC104_IRQMASK (S3C2410_CS5 | 0x7000000) /* 0x01900000 */ | ||
53 | #define BAST_VA_PC104_IRQMASK BAST_IOADDR(0x00600000) | ||
54 | |||
55 | #define BAST_PA_LCD_RCMD1 (0x8800000) | ||
56 | #define BAST_VA_LCD_RCMD1 BAST_IOADDR(0x00700000) | ||
57 | |||
58 | #define BAST_PA_LCD_WCMD1 (0x8000000) | ||
59 | #define BAST_VA_LCD_WCMD1 BAST_IOADDR(0x00800000) | ||
60 | |||
61 | #define BAST_PA_LCD_RDATA1 (0x9800000) | ||
62 | #define BAST_VA_LCD_RDATA1 BAST_IOADDR(0x00900000) | ||
63 | |||
64 | #define BAST_PA_LCD_WDATA1 (0x9000000) | ||
65 | #define BAST_VA_LCD_WDATA1 BAST_IOADDR(0x00A00000) | ||
66 | |||
67 | #define BAST_PA_LCD_RCMD2 (0xA800000) | ||
68 | #define BAST_VA_LCD_RCMD2 BAST_IOADDR(0x00B00000) | ||
69 | |||
70 | #define BAST_PA_LCD_WCMD2 (0xA000000) | ||
71 | #define BAST_VA_LCD_WCMD2 BAST_IOADDR(0x00C00000) | ||
72 | |||
73 | #define BAST_PA_LCD_RDATA2 (0xB800000) | ||
74 | #define BAST_VA_LCD_RDATA2 BAST_IOADDR(0x00D00000) | ||
75 | |||
76 | #define BAST_PA_LCD_WDATA2 (0xB000000) | ||
77 | #define BAST_VA_LCD_WDATA2 BAST_IOADDR(0x00E00000) | ||
78 | |||
79 | |||
80 | /* 0xE0000000 contains the IO space that is split by speed and | ||
81 | * wether the access is for 8 or 16bit IO... this ensures that | ||
82 | * the correct access is made | ||
83 | * | ||
84 | * 0x10000000 of space, partitioned as so: | ||
85 | * | ||
86 | * 0x00000000 to 0x04000000 8bit, slow | ||
87 | * 0x04000000 to 0x08000000 16bit, slow | ||
88 | * 0x08000000 to 0x0C000000 16bit, net | ||
89 | * 0x0C000000 to 0x10000000 16bit, fast | ||
90 | * | ||
91 | * each of these spaces has the following in: | ||
92 | * | ||
93 | * 0x00000000 to 0x01000000 16MB ISA IO space | ||
94 | * 0x01000000 to 0x02000000 16MB ISA memory space | ||
95 | * 0x02000000 to 0x02100000 1MB IDE primary channel | ||
96 | * 0x02100000 to 0x02200000 1MB IDE primary channel aux | ||
97 | * 0x02200000 to 0x02400000 1MB IDE secondary channel | ||
98 | * 0x02300000 to 0x02400000 1MB IDE secondary channel aux | ||
99 | * 0x02400000 to 0x02500000 1MB ASIX ethernet controller | ||
100 | * 0x02500000 to 0x02600000 1MB Davicom DM9000 ethernet controller | ||
101 | * 0x02600000 to 0x02700000 1MB PC SuperIO controller | ||
102 | * | ||
103 | * the phyiscal layout of the zones are: | ||
104 | * nGCS2 - 8bit, slow | ||
105 | * nGCS3 - 16bit, slow | ||
106 | * nGCS4 - 16bit, net | ||
107 | * nGCS5 - 16bit, fast | ||
108 | */ | ||
109 | |||
110 | #define BAST_VA_MULTISPACE (0xE0000000) | ||
111 | |||
112 | #define BAST_VA_ISAIO (BAST_VA_MULTISPACE + 0x00000000) | ||
113 | #define BAST_VA_ISAMEM (BAST_VA_MULTISPACE + 0x01000000) | ||
114 | #define BAST_VA_IDEPRI (BAST_VA_MULTISPACE + 0x02000000) | ||
115 | #define BAST_VA_IDEPRIAUX (BAST_VA_MULTISPACE + 0x02100000) | ||
116 | #define BAST_VA_IDESEC (BAST_VA_MULTISPACE + 0x02200000) | ||
117 | #define BAST_VA_IDESECAUX (BAST_VA_MULTISPACE + 0x02300000) | ||
118 | #define BAST_VA_ASIXNET (BAST_VA_MULTISPACE + 0x02400000) | ||
119 | #define BAST_VA_DM9000 (BAST_VA_MULTISPACE + 0x02500000) | ||
120 | #define BAST_VA_SUPERIO (BAST_VA_MULTISPACE + 0x02600000) | ||
121 | |||
122 | #define BAST_VA_MULTISPACE (0xE0000000) | ||
123 | |||
124 | #define BAST_VAM_CS2 (0x00000000) | ||
125 | #define BAST_VAM_CS3 (0x04000000) | ||
126 | #define BAST_VAM_CS4 (0x08000000) | ||
127 | #define BAST_VAM_CS5 (0x0C000000) | ||
128 | |||
129 | /* physical offset addresses for the peripherals */ | ||
130 | |||
131 | #define BAST_PA_ISAIO (0x00000000) | ||
132 | #define BAST_PA_ASIXNET (0x01000000) | ||
133 | #define BAST_PA_SUPERIO (0x01800000) | ||
134 | #define BAST_PA_IDEPRI (0x02000000) | ||
135 | #define BAST_PA_IDEPRIAUX (0x02800000) | ||
136 | #define BAST_PA_IDESEC (0x03000000) | ||
137 | #define BAST_PA_IDESECAUX (0x03800000) | ||
138 | #define BAST_PA_ISAMEM (0x04000000) | ||
139 | #define BAST_PA_DM9000 (0x05000000) | ||
140 | |||
141 | /* some configurations for the peripherals */ | ||
142 | |||
143 | #define BAST_PCSIO (BAST_VA_SUPERIO + BAST_VAM_CS2) | ||
144 | /* */ | ||
145 | |||
146 | #define BAST_ASIXNET_CS BAST_VAM_CS5 | ||
147 | #define BAST_IDE_CS BAST_VAM_CS5 | ||
148 | #define BAST_DM9000_CS BAST_VAM_CS4 | ||
149 | |||
150 | #endif /* __ASM_ARCH_BASTMAP_H */ | ||
diff --git a/include/asm-arm/arch-s3c2410/bast-pmu.h b/include/asm-arm/arch-s3c2410/bast-pmu.h new file mode 100644 index 000000000000..758c5c59d4bf --- /dev/null +++ b/include/asm-arm/arch-s3c2410/bast-pmu.h | |||
@@ -0,0 +1,43 @@ | |||
1 | /* linux/include/asm-arm/arch-s3c2410/bast-pmu.h | ||
2 | * | ||
3 | * (c) 2003,2004 Simtec Electronics | ||
4 | * Ben Dooks <ben@simtec.co.uk> | ||
5 | * Vincent Sanders <vince@simtec.co.uk> | ||
6 | * | ||
7 | * Machine BAST - Power Management chip | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or modify | ||
10 | * it under the terms of the GNU General Public License version 2 as | ||
11 | * published by the Free Software Foundation. | ||
12 | * | ||
13 | * Changelog: | ||
14 | * 08-Oct-2003 BJD Initial creation | ||
15 | */ | ||
16 | |||
17 | #ifndef __ASM_ARCH_BASTPMU_H | ||
18 | #define __ASM_ARCH_BASTPMU_H "08_OCT_2004" | ||
19 | |||
20 | #define BASTPMU_REG_IDENT (0x00) | ||
21 | #define BASTPMU_REG_VERSION (0x01) | ||
22 | #define BASTPMU_REG_DDCCTRL (0x02) | ||
23 | #define BASTPMU_REG_POWER (0x03) | ||
24 | #define BASTPMU_REG_RESET (0x04) | ||
25 | #define BASTPMU_REG_GWO (0x05) | ||
26 | #define BASTPMU_REG_WOL (0x06) | ||
27 | #define BASTPMU_REG_WOR (0x07) | ||
28 | #define BASTPMU_REG_UID (0x09) | ||
29 | |||
30 | #define BASTPMU_EEPROM (0xC0) | ||
31 | |||
32 | #define BASTPMU_EEP_UID (BASTPMU_EEPROM + 0) | ||
33 | #define BASTPMU_EEP_WOL (BASTPMU_EEPROM + 8) | ||
34 | #define BASTPMU_EEP_WOR (BASTPMU_EEPROM + 9) | ||
35 | |||
36 | #define BASTPMU_IDENT_0 0x53 | ||
37 | #define BASTPMU_IDENT_1 0x42 | ||
38 | #define BASTPMU_IDENT_2 0x50 | ||
39 | #define BASTPMU_IDENT_3 0x4d | ||
40 | |||
41 | #define BASTPMU_RESET_GUARD (0x55) | ||
42 | |||
43 | #endif /* __ASM_ARCH_BASTPMU_H */ | ||
diff --git a/include/asm-arm/arch-s3c2410/debug-macro.S b/include/asm-arm/arch-s3c2410/debug-macro.S new file mode 100644 index 000000000000..abfbe45cd17c --- /dev/null +++ b/include/asm-arm/arch-s3c2410/debug-macro.S | |||
@@ -0,0 +1,99 @@ | |||
1 | /* linux/include/asm-arm/arch-s3c2410/debug-macro.S | ||
2 | * | ||
3 | * Debugging macro include header | ||
4 | * | ||
5 | * Copyright (C) 1994-1999 Russell King | ||
6 | * Copyright (C) 2005 Simtec Electronics | ||
7 | * | ||
8 | * Moved from linux/arch/arm/kernel/debug.S by Ben Dooks | ||
9 | * | ||
10 | * This program is free software; you can redistribute it and/or modify | ||
11 | * it under the terms of the GNU General Public License version 2 as | ||
12 | * published by the Free Software Foundation. | ||
13 | * | ||
14 | * Modifications: | ||
15 | * 10-Mar-2005 LCVR Changed S3C2410_VA to S3C24XX_VA | ||
16 | */ | ||
17 | |||
18 | #include <asm/arch/map.h> | ||
19 | #include <asm/arch/regs-serial.h> | ||
20 | #include <asm/arch/regs-gpio.h> | ||
21 | |||
22 | #define S3C2410_UART1_OFF (0x4000) | ||
23 | #define SHIFT_2440TXF (14-9) | ||
24 | |||
25 | .macro addruart, rx | ||
26 | mrc p15, 0, \rx, c1, c0 | ||
27 | tst \rx, #1 | ||
28 | ldreq \rx, = S3C2410_PA_UART | ||
29 | ldrne \rx, = S3C24XX_VA_UART | ||
30 | #if CONFIG_DEBUG_S3C2410_UART != 0 | ||
31 | add \rx, \rx, #(S3C2410_UART1_OFF * CONFIG_DEBUG_S3C2410_UART) | ||
32 | #endif | ||
33 | .endm | ||
34 | |||
35 | .macro senduart,rd,rx | ||
36 | str \rd, [\rx, # S3C2410_UTXH ] | ||
37 | .endm | ||
38 | |||
39 | .macro busyuart, rd, rx | ||
40 | ldr \rd, [ \rx, # S3C2410_UFCON ] | ||
41 | tst \rd, #S3C2410_UFCON_FIFOMODE @ fifo enabled? | ||
42 | beq 1001f @ | ||
43 | @ FIFO enabled... | ||
44 | 1003: | ||
45 | mrc p15, 0, \rd, c1, c0 | ||
46 | tst \rd, #1 | ||
47 | addeq \rd, \rx, #(S3C2410_PA_GPIO - S3C2410_PA_UART) | ||
48 | addne \rd, \rx, #(S3C24XX_VA_GPIO - S3C24XX_VA_UART) | ||
49 | bic \rd, \rd, #0xff000 | ||
50 | ldr \rd, [ \rd, # S3C2410_GSTATUS1 - S3C2410_GPIOREG(0) ] | ||
51 | and \rd, \rd, #0x00ff0000 | ||
52 | teq \rd, #0x00440000 @ is it 2440? | ||
53 | |||
54 | ldr \rd, [ \rx, # S3C2410_UFSTAT ] | ||
55 | moveq \rd, \rd, lsr #SHIFT_2440TXF | ||
56 | tst \rd, #S3C2410_UFSTAT_TXFULL | ||
57 | bne 1003b | ||
58 | b 1002f | ||
59 | |||
60 | 1001: | ||
61 | @ busy waiting for non fifo | ||
62 | ldr \rd, [ \rx, # S3C2410_UTRSTAT ] | ||
63 | tst \rd, #S3C2410_UTRSTAT_TXFE | ||
64 | beq 1001b | ||
65 | |||
66 | 1002: @ exit busyuart | ||
67 | .endm | ||
68 | |||
69 | .macro waituart,rd,rx | ||
70 | |||
71 | ldr \rd, [ \rx, # S3C2410_UFCON ] | ||
72 | tst \rd, #S3C2410_UFCON_FIFOMODE @ fifo enabled? | ||
73 | beq 1001f @ | ||
74 | @ FIFO enabled... | ||
75 | 1003: | ||
76 | mrc p15, 0, \rd, c1, c0 | ||
77 | tst \rd, #1 | ||
78 | addeq \rd, \rx, #(S3C2410_PA_GPIO - S3C2410_PA_UART) | ||
79 | addne \rd, \rx, #(S3C24XX_VA_GPIO - S3C24XX_VA_UART) | ||
80 | bic \rd, \rd, #0xff000 | ||
81 | ldr \rd, [ \rd, # S3C2410_GSTATUS1 - S3C2410_GPIOREG(0) ] | ||
82 | and \rd, \rd, #0x00ff0000 | ||
83 | teq \rd, #0x00440000 @ is it 2440? | ||
84 | |||
85 | ldr \rd, [ \rx, # S3C2410_UFSTAT ] | ||
86 | andne \rd, \rd, #S3C2410_UFSTAT_TXMASK | ||
87 | andeq \rd, \rd, #S3C2440_UFSTAT_TXMASK | ||
88 | teq \rd, #0 | ||
89 | bne 1003b | ||
90 | b 1002f | ||
91 | |||
92 | 1001: | ||
93 | @ idle waiting for non fifo | ||
94 | ldr \rd, [ \rx, # S3C2410_UTRSTAT ] | ||
95 | tst \rd, #S3C2410_UTRSTAT_TXFE | ||
96 | beq 1001b | ||
97 | |||
98 | 1002: @ exit busyuart | ||
99 | .endm | ||
diff --git a/include/asm-arm/arch-s3c2410/dma.h b/include/asm-arm/arch-s3c2410/dma.h new file mode 100644 index 000000000000..e830a40e573a --- /dev/null +++ b/include/asm-arm/arch-s3c2410/dma.h | |||
@@ -0,0 +1,376 @@ | |||
1 | /* linux/include/asm-arm/arch-bast/dma.h | ||
2 | * | ||
3 | * Copyright (C) 2003,2004 Simtec Electronics | ||
4 | * Ben Dooks <ben@simtec.co.uk> | ||
5 | * | ||
6 | * Samsung S3C2410X DMA support | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | * | ||
12 | * Changelog: | ||
13 | * ??-May-2003 BJD Created file | ||
14 | * ??-Jun-2003 BJD Added more dma functionality to go with arch | ||
15 | * 10-Nov-2004 BJD Added sys_device support | ||
16 | */ | ||
17 | |||
18 | #ifndef __ASM_ARCH_DMA_H | ||
19 | #define __ASM_ARCH_DMA_H __FILE__ | ||
20 | |||
21 | #include <linux/config.h> | ||
22 | #include <linux/sysdev.h> | ||
23 | #include "hardware.h" | ||
24 | |||
25 | |||
26 | /* | ||
27 | * This is the maximum DMA address(physical address) that can be DMAd to. | ||
28 | * | ||
29 | */ | ||
30 | #define MAX_DMA_ADDRESS 0x20000000 | ||
31 | #define MAX_DMA_TRANSFER_SIZE 0x100000 /* Data Unit is half word */ | ||
32 | |||
33 | |||
34 | /* according to the samsung port, we cannot use the regular | ||
35 | * dma channels... we must therefore provide our own interface | ||
36 | * for DMA, and allow our drivers to use that. | ||
37 | */ | ||
38 | |||
39 | #define MAX_DMA_CHANNELS 0 | ||
40 | |||
41 | |||
42 | /* we have 4 dma channels */ | ||
43 | #define S3C2410_DMA_CHANNELS (4) | ||
44 | |||
45 | /* types */ | ||
46 | |||
47 | typedef enum { | ||
48 | S3C2410_DMA_IDLE, | ||
49 | S3C2410_DMA_RUNNING, | ||
50 | S3C2410_DMA_PAUSED | ||
51 | } s3c2410_dma_state_t; | ||
52 | |||
53 | |||
54 | /* s3c2410_dma_loadst_t | ||
55 | * | ||
56 | * This represents the state of the DMA engine, wrt to the loaded / running | ||
57 | * transfers. Since we don't have any way of knowing exactly the state of | ||
58 | * the DMA transfers, we need to know the state to make decisions on wether | ||
59 | * we can | ||
60 | * | ||
61 | * S3C2410_DMA_NONE | ||
62 | * | ||
63 | * There are no buffers loaded (the channel should be inactive) | ||
64 | * | ||
65 | * S3C2410_DMA_1LOADED | ||
66 | * | ||
67 | * There is one buffer loaded, however it has not been confirmed to be | ||
68 | * loaded by the DMA engine. This may be because the channel is not | ||
69 | * yet running, or the DMA driver decided that it was too costly to | ||
70 | * sit and wait for it to happen. | ||
71 | * | ||
72 | * S3C2410_DMA_1RUNNING | ||
73 | * | ||
74 | * The buffer has been confirmed running, and not finisged | ||
75 | * | ||
76 | * S3C2410_DMA_1LOADED_1RUNNING | ||
77 | * | ||
78 | * There is a buffer waiting to be loaded by the DMA engine, and one | ||
79 | * currently running. | ||
80 | */ | ||
81 | |||
82 | typedef enum { | ||
83 | S3C2410_DMALOAD_NONE, | ||
84 | S3C2410_DMALOAD_1LOADED, | ||
85 | S3C2410_DMALOAD_1RUNNING, | ||
86 | S3C2410_DMALOAD_1LOADED_1RUNNING, | ||
87 | } s3c2410_dma_loadst_t; | ||
88 | |||
89 | typedef enum { | ||
90 | S3C2410_RES_OK, | ||
91 | S3C2410_RES_ERR, | ||
92 | S3C2410_RES_ABORT | ||
93 | } s3c2410_dma_buffresult_t; | ||
94 | |||
95 | |||
96 | typedef enum s3c2410_dmasrc_e s3c2410_dmasrc_t; | ||
97 | |||
98 | enum s3c2410_dmasrc_e { | ||
99 | S3C2410_DMASRC_HW, /* source is memory */ | ||
100 | S3C2410_DMASRC_MEM /* source is hardware */ | ||
101 | }; | ||
102 | |||
103 | /* enum s3c2410_chan_op_e | ||
104 | * | ||
105 | * operation codes passed to the DMA code by the user, and also used | ||
106 | * to inform the current channel owner of any changes to the system state | ||
107 | */ | ||
108 | |||
109 | enum s3c2410_chan_op_e { | ||
110 | S3C2410_DMAOP_START, | ||
111 | S3C2410_DMAOP_STOP, | ||
112 | S3C2410_DMAOP_PAUSE, | ||
113 | S3C2410_DMAOP_RESUME, | ||
114 | S3C2410_DMAOP_FLUSH, | ||
115 | S3C2410_DMAOP_TIMEOUT, /* internal signal to handler */ | ||
116 | }; | ||
117 | |||
118 | typedef enum s3c2410_chan_op_e s3c2410_chan_op_t; | ||
119 | |||
120 | /* flags */ | ||
121 | |||
122 | #define S3C2410_DMAF_SLOW (1<<0) /* slow, so don't worry about | ||
123 | * waiting for reloads */ | ||
124 | #define S3C2410_DMAF_AUTOSTART (1<<1) /* auto-start if buffer queued */ | ||
125 | |||
126 | /* dma buffer */ | ||
127 | |||
128 | typedef struct s3c2410_dma_buf_s s3c2410_dma_buf_t; | ||
129 | |||
130 | struct s3c2410_dma_client { | ||
131 | char *name; | ||
132 | }; | ||
133 | |||
134 | typedef struct s3c2410_dma_client s3c2410_dma_client_t; | ||
135 | |||
136 | /* s3c2410_dma_buf_s | ||
137 | * | ||
138 | * internally used buffer structure to describe a queued or running | ||
139 | * buffer. | ||
140 | */ | ||
141 | |||
142 | struct s3c2410_dma_buf_s { | ||
143 | s3c2410_dma_buf_t *next; | ||
144 | int magic; /* magic */ | ||
145 | int size; /* buffer size in bytes */ | ||
146 | dma_addr_t data; /* start of DMA data */ | ||
147 | dma_addr_t ptr; /* where the DMA got to [1] */ | ||
148 | void *id; /* client's id */ | ||
149 | }; | ||
150 | |||
151 | /* [1] is this updated for both recv/send modes? */ | ||
152 | |||
153 | typedef struct s3c2410_dma_chan_s s3c2410_dma_chan_t; | ||
154 | |||
155 | /* s3c2410_dma_cbfn_t | ||
156 | * | ||
157 | * buffer callback routine type | ||
158 | */ | ||
159 | |||
160 | typedef void (*s3c2410_dma_cbfn_t)(s3c2410_dma_chan_t *, void *buf, int size, | ||
161 | s3c2410_dma_buffresult_t result); | ||
162 | |||
163 | typedef int (*s3c2410_dma_opfn_t)(s3c2410_dma_chan_t *, | ||
164 | s3c2410_chan_op_t ); | ||
165 | |||
166 | struct s3c2410_dma_stats_s { | ||
167 | unsigned long loads; | ||
168 | unsigned long timeout_longest; | ||
169 | unsigned long timeout_shortest; | ||
170 | unsigned long timeout_avg; | ||
171 | unsigned long timeout_failed; | ||
172 | }; | ||
173 | |||
174 | typedef struct s3c2410_dma_stats_s s3c2410_dma_stats_t; | ||
175 | |||
176 | /* struct s3c2410_dma_chan_s | ||
177 | * | ||
178 | * full state information for each DMA channel | ||
179 | */ | ||
180 | |||
181 | struct s3c2410_dma_chan_s { | ||
182 | /* channel state flags and information */ | ||
183 | unsigned char number; /* number of this dma channel */ | ||
184 | unsigned char in_use; /* channel allocated */ | ||
185 | unsigned char irq_claimed; /* irq claimed for channel */ | ||
186 | unsigned char irq_enabled; /* irq enabled for channel */ | ||
187 | unsigned char xfer_unit; /* size of an transfer */ | ||
188 | |||
189 | /* channel state */ | ||
190 | |||
191 | s3c2410_dma_state_t state; | ||
192 | s3c2410_dma_loadst_t load_state; | ||
193 | s3c2410_dma_client_t *client; | ||
194 | |||
195 | /* channel configuration */ | ||
196 | s3c2410_dmasrc_t source; | ||
197 | unsigned long dev_addr; | ||
198 | unsigned long load_timeout; | ||
199 | unsigned int flags; /* channel flags */ | ||
200 | |||
201 | /* channel's hardware position and configuration */ | ||
202 | void __iomem *regs; /* channels registers */ | ||
203 | void __iomem *addr_reg; /* data address register */ | ||
204 | unsigned int irq; /* channel irq */ | ||
205 | unsigned long dcon; /* default value of DCON */ | ||
206 | |||
207 | /* driver handles */ | ||
208 | s3c2410_dma_cbfn_t callback_fn; /* buffer done callback */ | ||
209 | s3c2410_dma_opfn_t op_fn; /* channel operation callback */ | ||
210 | |||
211 | /* stats gathering */ | ||
212 | s3c2410_dma_stats_t *stats; | ||
213 | s3c2410_dma_stats_t stats_store; | ||
214 | |||
215 | /* buffer list and information */ | ||
216 | s3c2410_dma_buf_t *curr; /* current dma buffer */ | ||
217 | s3c2410_dma_buf_t *next; /* next buffer to load */ | ||
218 | s3c2410_dma_buf_t *end; /* end of queue */ | ||
219 | |||
220 | /* system device */ | ||
221 | struct sys_device dev; | ||
222 | }; | ||
223 | |||
224 | /* the currently allocated channel information */ | ||
225 | extern s3c2410_dma_chan_t s3c2410_chans[]; | ||
226 | |||
227 | /* note, we don't really use dma_device_t at the moment */ | ||
228 | typedef unsigned long dma_device_t; | ||
229 | |||
230 | /* functions --------------------------------------------------------------- */ | ||
231 | |||
232 | /* s3c2410_dma_request | ||
233 | * | ||
234 | * request a dma channel exclusivley | ||
235 | */ | ||
236 | |||
237 | extern int s3c2410_dma_request(dmach_t channel, | ||
238 | s3c2410_dma_client_t *, void *dev); | ||
239 | |||
240 | |||
241 | /* s3c2410_dma_ctrl | ||
242 | * | ||
243 | * change the state of the dma channel | ||
244 | */ | ||
245 | |||
246 | extern int s3c2410_dma_ctrl(dmach_t channel, s3c2410_chan_op_t op); | ||
247 | |||
248 | /* s3c2410_dma_setflags | ||
249 | * | ||
250 | * set the channel's flags to a given state | ||
251 | */ | ||
252 | |||
253 | extern int s3c2410_dma_setflags(dmach_t channel, | ||
254 | unsigned int flags); | ||
255 | |||
256 | /* s3c2410_dma_free | ||
257 | * | ||
258 | * free the dma channel (will also abort any outstanding operations) | ||
259 | */ | ||
260 | |||
261 | extern int s3c2410_dma_free(dmach_t channel, s3c2410_dma_client_t *); | ||
262 | |||
263 | /* s3c2410_dma_enqueue | ||
264 | * | ||
265 | * place the given buffer onto the queue of operations for the channel. | ||
266 | * The buffer must be allocated from dma coherent memory, or the Dcache/WB | ||
267 | * drained before the buffer is given to the DMA system. | ||
268 | */ | ||
269 | |||
270 | extern int s3c2410_dma_enqueue(dmach_t channel, void *id, | ||
271 | dma_addr_t data, int size); | ||
272 | |||
273 | /* s3c2410_dma_config | ||
274 | * | ||
275 | * configure the dma channel | ||
276 | */ | ||
277 | |||
278 | extern int s3c2410_dma_config(dmach_t channel, int xferunit, int dcon); | ||
279 | |||
280 | /* s3c2410_dma_devconfig | ||
281 | * | ||
282 | * configure the device we're talking to | ||
283 | */ | ||
284 | |||
285 | extern int s3c2410_dma_devconfig(int channel, s3c2410_dmasrc_t source, | ||
286 | int hwcfg, unsigned long devaddr); | ||
287 | |||
288 | /* s3c2410_dma_getposition | ||
289 | * | ||
290 | * get the position that the dma transfer is currently at | ||
291 | */ | ||
292 | |||
293 | extern int s3c2410_dma_getposition(dmach_t channel, | ||
294 | dma_addr_t *src, dma_addr_t *dest); | ||
295 | |||
296 | extern int s3c2410_dma_set_opfn(dmach_t, s3c2410_dma_opfn_t rtn); | ||
297 | extern int s3c2410_dma_set_buffdone_fn(dmach_t, s3c2410_dma_cbfn_t rtn); | ||
298 | |||
299 | /* DMA Register definitions */ | ||
300 | |||
301 | #define S3C2410_DMA_DISRC (0x00) | ||
302 | #define S3C2410_DMA_DISRCC (0x04) | ||
303 | #define S3C2410_DMA_DIDST (0x08) | ||
304 | #define S3C2410_DMA_DIDSTC (0x0C) | ||
305 | #define S3C2410_DMA_DCON (0x10) | ||
306 | #define S3C2410_DMA_DSTAT (0x14) | ||
307 | #define S3C2410_DMA_DCSRC (0x18) | ||
308 | #define S3C2410_DMA_DCDST (0x1C) | ||
309 | #define S3C2410_DMA_DMASKTRIG (0x20) | ||
310 | |||
311 | #define S3C2410_DISRCC_INC (1<<0) | ||
312 | #define S3C2410_DISRCC_APB (1<<1) | ||
313 | |||
314 | #define S3C2410_DMASKTRIG_STOP (1<<2) | ||
315 | #define S3C2410_DMASKTRIG_ON (1<<1) | ||
316 | #define S3C2410_DMASKTRIG_SWTRIG (1<<0) | ||
317 | |||
318 | #define S3C2410_DCON_DEMAND (0<<31) | ||
319 | #define S3C2410_DCON_HANDSHAKE (1<<31) | ||
320 | #define S3C2410_DCON_SYNC_PCLK (0<<30) | ||
321 | #define S3C2410_DCON_SYNC_HCLK (1<<30) | ||
322 | |||
323 | #define S3C2410_DCON_INTREQ (1<<29) | ||
324 | |||
325 | #define S3C2410_DCON_CH0_XDREQ0 (0<<24) | ||
326 | #define S3C2410_DCON_CH0_UART0 (1<<24) | ||
327 | #define S3C2410_DCON_CH0_SDI (2<<24) | ||
328 | #define S3C2410_DCON_CH0_TIMER (3<<24) | ||
329 | #define S3C2410_DCON_CH0_USBEP1 (4<<24) | ||
330 | |||
331 | #define S3C2410_DCON_CH1_XDREQ1 (0<<24) | ||
332 | #define S3C2410_DCON_CH1_UART1 (1<<24) | ||
333 | #define S3C2410_DCON_CH1_I2SSDI (2<<24) | ||
334 | #define S3C2410_DCON_CH1_SPI (3<<24) | ||
335 | #define S3C2410_DCON_CH1_USBEP2 (4<<24) | ||
336 | |||
337 | #define S3C2410_DCON_CH2_I2SSDO (0<<24) | ||
338 | #define S3C2410_DCON_CH2_I2SSDI (1<<24) | ||
339 | #define S3C2410_DCON_CH2_SDI (2<<24) | ||
340 | #define S3C2410_DCON_CH2_TIMER (3<<24) | ||
341 | #define S3C2410_DCON_CH2_USBEP3 (4<<24) | ||
342 | |||
343 | #define S3C2410_DCON_CH3_UART2 (0<<24) | ||
344 | #define S3C2410_DCON_CH3_SDI (1<<24) | ||
345 | #define S3C2410_DCON_CH3_SPI (2<<24) | ||
346 | #define S3C2410_DCON_CH3_TIMER (3<<24) | ||
347 | #define S3C2410_DCON_CH3_USBEP4 (4<<24) | ||
348 | |||
349 | #define S3C2410_DCON_SRCSHIFT (24) | ||
350 | #define S3C2410_DCON_SRCMASK (7<<24) | ||
351 | |||
352 | #define S3C2410_DCON_BYTE (0<<20) | ||
353 | #define S3C2410_DCON_HALFWORD (1<<20) | ||
354 | #define S3C2410_DCON_WORD (2<<20) | ||
355 | |||
356 | #define S3C2410_DCON_AUTORELOAD (0<<22) | ||
357 | #define S3C2410_DCON_NORELOAD (1<<22) | ||
358 | #define S3C2410_DCON_HWTRIG (1<<23) | ||
359 | |||
360 | #ifdef CONFIG_CPU_S3C2440 | ||
361 | #define S3C2440_DIDSTC_CHKINT (1<<2) | ||
362 | |||
363 | #define S3C2440_DCON_CH0_I2SSDO (5<<24) | ||
364 | #define S3C2440_DCON_CH0_PCMIN (6<<24) | ||
365 | |||
366 | #define S3C2440_DCON_CH1_PCMOUT (5<<24) | ||
367 | #define S3C2440_DCON_CH1_SDI (6<<24) | ||
368 | |||
369 | #define S3C2440_DCON_CH2_PCMIN (5<<24) | ||
370 | #define S3C2440_DCON_CH2_MICIN (6<<24) | ||
371 | |||
372 | #define S3C2440_DCON_CH3_MICIN (5<<24) | ||
373 | #define S3C2440_DCON_CH3_PCMOUT (6<<24) | ||
374 | #endif | ||
375 | |||
376 | #endif /* __ASM_ARCH_DMA_H */ | ||
diff --git a/include/asm-arm/arch-s3c2410/entry-macro.S b/include/asm-arm/arch-s3c2410/entry-macro.S new file mode 100644 index 000000000000..b7d4d7f4422d --- /dev/null +++ b/include/asm-arm/arch-s3c2410/entry-macro.S | |||
@@ -0,0 +1,119 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-s3c2410/entry-macro.S | ||
3 | * | ||
4 | * Low-level IRQ helper macros for S3C2410-based platforms | ||
5 | * | ||
6 | * This file is licensed under the terms of the GNU General Public | ||
7 | * License version 2. This program is licensed "as is" without any | ||
8 | * warranty of any kind, whether express or implied. | ||
9 | |||
10 | * Modifications: | ||
11 | * 10-Mar-2005 LCVR Changed S3C2410_VA to S3C24XX_VA | ||
12 | */ | ||
13 | |||
14 | |||
15 | .macro get_irqnr_and_base, irqnr, irqstat, base, tmp | ||
16 | |||
17 | mov \tmp, #S3C24XX_VA_IRQ | ||
18 | ldr \irqnr, [ \tmp, #0x14 ] @ get irq no | ||
19 | 30000: | ||
20 | teq \irqnr, #4 | ||
21 | teqne \irqnr, #5 | ||
22 | beq 1002f @ external irq reg | ||
23 | |||
24 | @ debug check to see if interrupt reported is the same | ||
25 | @ as the offset.... | ||
26 | |||
27 | teq \irqnr, #0 | ||
28 | beq 20002f | ||
29 | ldr \irqstat, [ \tmp, #0x10 ] @ INTPND | ||
30 | mov \irqstat, \irqstat, lsr \irqnr | ||
31 | tst \irqstat, #1 | ||
32 | bne 20002f | ||
33 | |||
34 | /* debug/warning if we get an invalud response from the | ||
35 | * INTOFFSET register */ | ||
36 | #if 1 | ||
37 | stmfd r13!, { r0 - r4 , r8-r12, r14 } | ||
38 | ldr r1, [ \tmp, #0x14 ] @ INTOFFSET | ||
39 | ldr r2, [ \tmp, #0x10 ] @ INTPND | ||
40 | ldr r3, [ \tmp, #0x00 ] @ SRCPND | ||
41 | adr r0, 20003f | ||
42 | bl printk | ||
43 | b 20004f | ||
44 | |||
45 | 20003: | ||
46 | .ascii "<7>irq: err - bad offset %d, intpnd=%08x, srcpnd=%08x\n" | ||
47 | .byte 0 | ||
48 | .align 4 | ||
49 | 20004: | ||
50 | mov r1, #1 | ||
51 | mov \tmp, #S3C24XX_VA_IRQ | ||
52 | ldmfd r13!, { r0 - r4 , r8-r12, r14 } | ||
53 | #endif | ||
54 | |||
55 | @ try working out interrupt number for ourselves | ||
56 | mov \irqnr, #0 | ||
57 | ldr \irqstat, [ \tmp, #0x10 ] @ INTPND | ||
58 | 10021: | ||
59 | movs \irqstat, \irqstat, lsr#1 | ||
60 | bcs 30000b @ try and re-start the proccess | ||
61 | add \irqnr, \irqnr, #1 | ||
62 | cmp \irqnr, #32 | ||
63 | ble 10021b | ||
64 | |||
65 | @ found no interrupt, set Z flag and leave | ||
66 | movs \irqnr, #0 | ||
67 | b 1001f | ||
68 | |||
69 | 20005: | ||
70 | 20002: @ exit | ||
71 | @ we base the s3c2410x interrupts at 16 and above to allow | ||
72 | @ isa peripherals to have their standard interrupts, also | ||
73 | @ ensure that Z flag is un-set on exit | ||
74 | |||
75 | @ note, we cannot be sure if we get IRQ_EINT0 (0) that | ||
76 | @ there is simply no interrupt pending, so in all other | ||
77 | @ cases we jump to say we have found something, otherwise | ||
78 | @ we check to see if the interrupt really is assrted | ||
79 | adds \irqnr, \irqnr, #IRQ_EINT0 | ||
80 | teq \irqnr, #IRQ_EINT0 | ||
81 | bne 1001f @ exit | ||
82 | ldr \irqstat, [ \tmp, #0x10 ] @ INTPND | ||
83 | teq \irqstat, #0 | ||
84 | moveq \irqnr, #0 | ||
85 | b 1001f | ||
86 | |||
87 | @ we get here from no main or external interrupts pending | ||
88 | 1002: | ||
89 | add \tmp, \tmp, #S3C24XX_VA_GPIO - S3C24XX_VA_IRQ | ||
90 | ldr \irqstat, [ \tmp, # 0xa8 ] @ EXTINTPEND | ||
91 | ldr \irqnr, [ \tmp, # 0xa4 ] @ EXTINTMASK | ||
92 | |||
93 | bic \irqstat, \irqstat, \irqnr @ clear masked irqs | ||
94 | |||
95 | mov \irqnr, #IRQ_EINT4 @ start extint nos | ||
96 | mov \irqstat, \irqstat, lsr#4 @ ignore bottom 4 bits | ||
97 | 10021: | ||
98 | movs \irqstat, \irqstat, lsr#1 | ||
99 | bcs 1004f | ||
100 | add \irqnr, \irqnr, #1 | ||
101 | cmp \irqnr, #IRQ_EINT23 | ||
102 | ble 10021b | ||
103 | |||
104 | @ found no interrupt, set Z flag and leave | ||
105 | movs \irqnr, #0 | ||
106 | |||
107 | 1004: @ ensure Z flag clear in case our MOVS shifted out the last bit | ||
108 | teq \irqnr, #0 | ||
109 | 1001: | ||
110 | @ exit irq routine | ||
111 | .endm | ||
112 | |||
113 | |||
114 | /* currently don't need an disable_fiq macro */ | ||
115 | |||
116 | .macro disable_fiq | ||
117 | .endm | ||
118 | |||
119 | |||
diff --git a/include/asm-arm/arch-s3c2410/hardware.h b/include/asm-arm/arch-s3c2410/hardware.h new file mode 100644 index 000000000000..48a39918a760 --- /dev/null +++ b/include/asm-arm/arch-s3c2410/hardware.h | |||
@@ -0,0 +1,105 @@ | |||
1 | /* linux/include/asm-arm/arch-s3c2410/hardware.h | ||
2 | * | ||
3 | * (c) 2003 Simtec Electronics | ||
4 | * Ben Dooks <ben@simtec.co.uk> | ||
5 | * | ||
6 | * S3C2410 - hardware | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | * | ||
12 | * Changelog: | ||
13 | * 21-May-2003 BJD Created file | ||
14 | * 06-Jun-2003 BJD Added CPU frequency settings | ||
15 | * 03-Sep-2003 BJD Linux v2.6 support | ||
16 | * 12-Mar-2004 BJD Fixed include protection, fixed type of clock vars | ||
17 | * 14-Sep-2004 BJD Added misccr and getpin to gpio | ||
18 | * 01-Oct-2004 BJD Added the new gpio functions | ||
19 | * 16-Oct-2004 BJD Removed the clock variables | ||
20 | */ | ||
21 | |||
22 | #ifndef __ASM_ARCH_HARDWARE_H | ||
23 | #define __ASM_ARCH_HARDWARE_H | ||
24 | |||
25 | #ifndef __ASSEMBLY__ | ||
26 | |||
27 | /* external functions for GPIO support | ||
28 | * | ||
29 | * These allow various different clients to access the same GPIO | ||
30 | * registers without conflicting. If your driver only owns the entire | ||
31 | * GPIO register, then it is safe to ioremap/__raw_{read|write} to it. | ||
32 | */ | ||
33 | |||
34 | /* s3c2410_gpio_cfgpin | ||
35 | * | ||
36 | * set the configuration of the given pin to the value passed. | ||
37 | * | ||
38 | * eg: | ||
39 | * s3c2410_gpio_cfgpin(S3C2410_GPA0, S3C2410_GPA0_ADDR0); | ||
40 | * s3c2410_gpio_cfgpin(S3C2410_GPE8, S3C2410_GPE8_SDDAT1); | ||
41 | */ | ||
42 | |||
43 | extern void s3c2410_gpio_cfgpin(unsigned int pin, unsigned int function); | ||
44 | |||
45 | extern unsigned int s3c2410_gpio_getcfg(unsigned int pin); | ||
46 | |||
47 | /* s3c2410_gpio_getirq | ||
48 | * | ||
49 | * turn the given pin number into the corresponding IRQ number | ||
50 | * | ||
51 | * returns: | ||
52 | * < 0 = no interrupt for this pin | ||
53 | * >=0 = interrupt number for the pin | ||
54 | */ | ||
55 | |||
56 | extern int s3c2410_gpio_getirq(unsigned int pin); | ||
57 | |||
58 | /* s3c2410_gpio_irqfilter | ||
59 | * | ||
60 | * set the irq filtering on the given pin | ||
61 | * | ||
62 | * on = 0 => disable filtering | ||
63 | * 1 => enable filtering | ||
64 | * | ||
65 | * config = S3C2410_EINTFLT_PCLK or S3C2410_EINTFLT_EXTCLK orred with | ||
66 | * width of filter (0 through 63) | ||
67 | * | ||
68 | * | ||
69 | */ | ||
70 | |||
71 | extern int s3c2410_gpio_irqfilter(unsigned int pin, unsigned int on, | ||
72 | unsigned int config); | ||
73 | |||
74 | /* s3c2410_gpio_pullup | ||
75 | * | ||
76 | * configure the pull-up control on the given pin | ||
77 | * | ||
78 | * to = 1 => disable the pull-up | ||
79 | * 0 => enable the pull-up | ||
80 | * | ||
81 | * eg; | ||
82 | * | ||
83 | * s3c2410_gpio_pullup(S3C2410_GPB0, 0); | ||
84 | * s3c2410_gpio_pullup(S3C2410_GPE8, 0); | ||
85 | */ | ||
86 | |||
87 | extern void s3c2410_gpio_pullup(unsigned int pin, unsigned int to); | ||
88 | |||
89 | extern void s3c2410_gpio_setpin(unsigned int pin, unsigned int to); | ||
90 | |||
91 | extern unsigned int s3c2410_gpio_getpin(unsigned int pin); | ||
92 | |||
93 | extern unsigned int s3c2410_modify_misccr(unsigned int clr, unsigned int chg); | ||
94 | |||
95 | #endif /* __ASSEMBLY__ */ | ||
96 | |||
97 | #include <asm/sizes.h> | ||
98 | #include <asm/arch/map.h> | ||
99 | |||
100 | /* machine specific hardware definitions should go after this */ | ||
101 | |||
102 | /* currently here until moved into config (todo) */ | ||
103 | #define CONFIG_NO_MULTIWORD_IO | ||
104 | |||
105 | #endif /* __ASM_ARCH_HARDWARE_H */ | ||
diff --git a/include/asm-arm/arch-s3c2410/idle.h b/include/asm-arm/arch-s3c2410/idle.h new file mode 100644 index 000000000000..749227c09576 --- /dev/null +++ b/include/asm-arm/arch-s3c2410/idle.h | |||
@@ -0,0 +1,28 @@ | |||
1 | /* linux/include/asm-arm/arch-s3c2410/idle.h | ||
2 | * | ||
3 | * Copyright (c) 2004 Simtec Electronics <linux@simtec.co.uk> | ||
4 | * http://www.simtec.co.uk/products/SWLINUX/ | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | * S3C2410 CPU Idle controls | ||
11 | * | ||
12 | * Changelog: | ||
13 | * 28-Oct-2004 BJD Initial version | ||
14 | * | ||
15 | */ | ||
16 | |||
17 | #ifndef __ASM_ARCH_IDLE_H | ||
18 | #define __ASM_ARCH_IDLE_H __FILE__ | ||
19 | |||
20 | /* This allows the over-ride of the default idle code, in case there | ||
21 | * is any other things to be done over idle (like DVS) | ||
22 | */ | ||
23 | |||
24 | extern void (*s3c24xx_idle)(void); | ||
25 | |||
26 | extern void s3c24xx_default_idle(void); | ||
27 | |||
28 | #endif /* __ASM_ARCH_IDLE_H */ | ||
diff --git a/include/asm-arm/arch-s3c2410/iic.h b/include/asm-arm/arch-s3c2410/iic.h new file mode 100644 index 000000000000..518547f6d7a7 --- /dev/null +++ b/include/asm-arm/arch-s3c2410/iic.h | |||
@@ -0,0 +1,36 @@ | |||
1 | /* linux/include/asm-arm/arch-s3c2410/iic.h | ||
2 | * | ||
3 | * (c) 2004 Simtec Electronics | ||
4 | * Ben Dooks <ben@simtec.co.uk> | ||
5 | * | ||
6 | * S3C2410 - I2C Controller platfrom_device info | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | * | ||
12 | * Changelog: | ||
13 | * 05-Oct-2004 BJD Created file | ||
14 | * 19-Oct-2004 BJD Updated for s3c2440 | ||
15 | */ | ||
16 | |||
17 | #ifndef __ASM_ARCH_IIC_H | ||
18 | #define __ASM_ARCH_IIC_H __FILE__ | ||
19 | |||
20 | #define S3C_IICFLG_FILTER (1<<0) /* enable s3c2440 filter */ | ||
21 | |||
22 | /* Notes: | ||
23 | * 1) All frequencies are expressed in Hz | ||
24 | * 2) A value of zero is `do not care` | ||
25 | */ | ||
26 | |||
27 | struct s3c2410_platform_i2c { | ||
28 | unsigned int flags; | ||
29 | unsigned int slave_addr; /* slave address for controller */ | ||
30 | unsigned long bus_freq; /* standard bus frequency */ | ||
31 | unsigned long max_freq; /* max frequency for the bus */ | ||
32 | unsigned long min_freq; /* min frequency for the bus */ | ||
33 | unsigned int sda_delay; /* pclks (s3c2440 only) */ | ||
34 | }; | ||
35 | |||
36 | #endif /* __ASM_ARCH_IIC_H */ | ||
diff --git a/include/asm-arm/arch-s3c2410/io.h b/include/asm-arm/arch-s3c2410/io.h new file mode 100644 index 000000000000..418233a7ee6f --- /dev/null +++ b/include/asm-arm/arch-s3c2410/io.h | |||
@@ -0,0 +1,196 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-s3c2410/io.h | ||
3 | * from linux/include/asm-arm/arch-rpc/io.h | ||
4 | * | ||
5 | * Copyright (C) 1997 Russell King | ||
6 | * (C) 2003 Simtec Electronics | ||
7 | * | ||
8 | * Modifications: | ||
9 | * 06-Dec-1997 RMK Created. | ||
10 | * 02-Sep-2003 BJD Modified for S3C2410 | ||
11 | * 10-Mar-2005 LCVR Changed S3C2410_VA to S3C24XX_VA | ||
12 | * | ||
13 | */ | ||
14 | |||
15 | #ifndef __ASM_ARM_ARCH_IO_H | ||
16 | #define __ASM_ARM_ARCH_IO_H | ||
17 | |||
18 | #define IO_SPACE_LIMIT 0xffffffff | ||
19 | |||
20 | /* | ||
21 | * We use two different types of addressing - PC style addresses, and ARM | ||
22 | * addresses. PC style accesses the PC hardware with the normal PC IO | ||
23 | * addresses, eg 0x3f8 for serial#1. ARM addresses are above A28 | ||
24 | * and are translated to the start of IO. Note that all addresses are | ||
25 | * not shifted left! | ||
26 | */ | ||
27 | |||
28 | #define __PORT_PCIO(x) ((x) < (1<<28)) | ||
29 | |||
30 | #define PCIO_BASE (S3C24XX_VA_ISA_WORD) | ||
31 | #define PCIO_BASE_b (S3C24XX_VA_ISA_BYTE) | ||
32 | #define PCIO_BASE_w (S3C24XX_VA_ISA_WORD) | ||
33 | #define PCIO_BASE_l (S3C24XX_VA_ISA_WORD) | ||
34 | /* | ||
35 | * Dynamic IO functions - let the compiler | ||
36 | * optimize the expressions | ||
37 | */ | ||
38 | |||
39 | #define DECLARE_DYN_OUT(sz,fnsuffix,instr) \ | ||
40 | static inline void __out##fnsuffix (unsigned int val, unsigned int port) \ | ||
41 | { \ | ||
42 | unsigned long temp; \ | ||
43 | __asm__ __volatile__( \ | ||
44 | "cmp %2, #(1<<28)\n\t" \ | ||
45 | "mov %0, %2\n\t" \ | ||
46 | "addcc %0, %0, %3\n\t" \ | ||
47 | "str" instr " %1, [%0, #0 ] @ out" #fnsuffix \ | ||
48 | : "=&r" (temp) \ | ||
49 | : "r" (val), "r" (port), "Ir" (PCIO_BASE_##fnsuffix) \ | ||
50 | : "cc"); \ | ||
51 | } | ||
52 | |||
53 | |||
54 | #define DECLARE_DYN_IN(sz,fnsuffix,instr) \ | ||
55 | static inline unsigned sz __in##fnsuffix (unsigned int port) \ | ||
56 | { \ | ||
57 | unsigned long temp, value; \ | ||
58 | __asm__ __volatile__( \ | ||
59 | "cmp %2, #(1<<28)\n\t" \ | ||
60 | "mov %0, %2\n\t" \ | ||
61 | "addcc %0, %0, %3\n\t" \ | ||
62 | "ldr" instr " %1, [%0, #0 ] @ in" #fnsuffix \ | ||
63 | : "=&r" (temp), "=r" (value) \ | ||
64 | : "r" (port), "Ir" (PCIO_BASE_##fnsuffix) \ | ||
65 | : "cc"); \ | ||
66 | return (unsigned sz)value; \ | ||
67 | } | ||
68 | |||
69 | static inline void __iomem *__ioaddr (unsigned long port) | ||
70 | { | ||
71 | return __PORT_PCIO(port) ? (PCIO_BASE + port) : (void __iomem *)port; | ||
72 | } | ||
73 | |||
74 | #define DECLARE_IO(sz,fnsuffix,instr) \ | ||
75 | DECLARE_DYN_IN(sz,fnsuffix,instr) \ | ||
76 | DECLARE_DYN_OUT(sz,fnsuffix,instr) | ||
77 | |||
78 | DECLARE_IO(char,b,"b") | ||
79 | DECLARE_IO(short,w,"h") | ||
80 | DECLARE_IO(int,l,"") | ||
81 | |||
82 | #undef DECLARE_IO | ||
83 | #undef DECLARE_DYN_IN | ||
84 | |||
85 | /* | ||
86 | * Constant address IO functions | ||
87 | * | ||
88 | * These have to be macros for the 'J' constraint to work - | ||
89 | * +/-4096 immediate operand. | ||
90 | */ | ||
91 | #define __outbc(value,port) \ | ||
92 | ({ \ | ||
93 | if (__PORT_PCIO((port))) \ | ||
94 | __asm__ __volatile__( \ | ||
95 | "strb %0, [%1, %2] @ outbc" \ | ||
96 | : : "r" (value), "r" (PCIO_BASE), "Jr" ((port))); \ | ||
97 | else \ | ||
98 | __asm__ __volatile__( \ | ||
99 | "strb %0, [%1, #0] @ outbc" \ | ||
100 | : : "r" (value), "r" ((port))); \ | ||
101 | }) | ||
102 | |||
103 | #define __inbc(port) \ | ||
104 | ({ \ | ||
105 | unsigned char result; \ | ||
106 | if (__PORT_PCIO((port))) \ | ||
107 | __asm__ __volatile__( \ | ||
108 | "ldrb %0, [%1, %2] @ inbc" \ | ||
109 | : "=r" (result) : "r" (PCIO_BASE), "Jr" ((port))); \ | ||
110 | else \ | ||
111 | __asm__ __volatile__( \ | ||
112 | "ldrb %0, [%1, #0] @ inbc" \ | ||
113 | : "=r" (result) : "r" ((port))); \ | ||
114 | result; \ | ||
115 | }) | ||
116 | |||
117 | #define __outwc(value,port) \ | ||
118 | ({ \ | ||
119 | unsigned long v = value; \ | ||
120 | if (__PORT_PCIO((port))) \ | ||
121 | __asm__ __volatile__( \ | ||
122 | "strh %0, [%1, %2] @ outwc" \ | ||
123 | : : "r" (v), "r" (PCIO_BASE), "Jr" ((port))); \ | ||
124 | else \ | ||
125 | __asm__ __volatile__( \ | ||
126 | "strh %0, [%1, #0] @ outwc" \ | ||
127 | : : "r" (v), "r" ((port))); \ | ||
128 | }) | ||
129 | |||
130 | #define __inwc(port) \ | ||
131 | ({ \ | ||
132 | unsigned short result; \ | ||
133 | if (__PORT_PCIO((port))) \ | ||
134 | __asm__ __volatile__( \ | ||
135 | "ldrh %0, [%1, %2] @ inwc" \ | ||
136 | : "=r" (result) : "r" (PCIO_BASE), "Jr" ((port))); \ | ||
137 | else \ | ||
138 | __asm__ __volatile__( \ | ||
139 | "ldrh %0, [%1, #0] @ inwc" \ | ||
140 | : "=r" (result) : "r" ((port))); \ | ||
141 | result; \ | ||
142 | }) | ||
143 | |||
144 | #define __outlc(value,port) \ | ||
145 | ({ \ | ||
146 | unsigned long v = value; \ | ||
147 | if (__PORT_PCIO((port))) \ | ||
148 | __asm__ __volatile__( \ | ||
149 | "str %0, [%1, %2] @ outlc" \ | ||
150 | : : "r" (v), "r" (PCIO_BASE), "Jr" ((port))); \ | ||
151 | else \ | ||
152 | __asm__ __volatile__( \ | ||
153 | "str %0, [%1, #0] @ outlc" \ | ||
154 | : : "r" (v), "r" ((port))); \ | ||
155 | }) | ||
156 | |||
157 | #define __inlc(port) \ | ||
158 | ({ \ | ||
159 | unsigned long result; \ | ||
160 | if (__PORT_PCIO((port))) \ | ||
161 | __asm__ __volatile__( \ | ||
162 | "ldr %0, [%1, %2] @ inlc" \ | ||
163 | : "=r" (result) : "r" (PCIO_BASE), "Jr" ((port))); \ | ||
164 | else \ | ||
165 | __asm__ __volatile__( \ | ||
166 | "ldr %0, [%1, #0] @ inlc" \ | ||
167 | : "=r" (result) : "r" ((port))); \ | ||
168 | result; \ | ||
169 | }) | ||
170 | |||
171 | #define __ioaddrc(port) ((__PORT_PCIO(port) ? PCIO_BASE + (port) : (void __iomem *)(port))) | ||
172 | |||
173 | #define inb(p) (__builtin_constant_p((p)) ? __inbc(p) : __inb(p)) | ||
174 | #define inw(p) (__builtin_constant_p((p)) ? __inwc(p) : __inw(p)) | ||
175 | #define inl(p) (__builtin_constant_p((p)) ? __inlc(p) : __inl(p)) | ||
176 | #define outb(v,p) (__builtin_constant_p((p)) ? __outbc(v,p) : __outb(v,p)) | ||
177 | #define outw(v,p) (__builtin_constant_p((p)) ? __outwc(v,p) : __outw(v,p)) | ||
178 | #define outl(v,p) (__builtin_constant_p((p)) ? __outlc(v,p) : __outl(v,p)) | ||
179 | #define __ioaddr(p) (__builtin_constant_p((p)) ? __ioaddr(p) : __ioaddrc(p)) | ||
180 | /* the following macro is deprecated */ | ||
181 | #define ioaddr(port) __ioaddr((port)) | ||
182 | |||
183 | #define insb(p,d,l) __raw_readsb(__ioaddr(p),d,l) | ||
184 | #define insw(p,d,l) __raw_readsw(__ioaddr(p),d,l) | ||
185 | #define insl(p,d,l) __raw_readsl(__ioaddr(p),d,l) | ||
186 | |||
187 | #define outsb(p,d,l) __raw_writesb(__ioaddr(p),d,l) | ||
188 | #define outsw(p,d,l) __raw_writesw(__ioaddr(p),d,l) | ||
189 | #define outsl(p,d,l) __raw_writesl(__ioaddr(p),d,l) | ||
190 | |||
191 | /* | ||
192 | * 1:1 mapping for ioremapped regions. | ||
193 | */ | ||
194 | #define __mem_pci(x) (x) | ||
195 | |||
196 | #endif | ||
diff --git a/include/asm-arm/arch-s3c2410/irqs.h b/include/asm-arm/arch-s3c2410/irqs.h new file mode 100644 index 000000000000..d9773d697268 --- /dev/null +++ b/include/asm-arm/arch-s3c2410/irqs.h | |||
@@ -0,0 +1,126 @@ | |||
1 | /* linux/include/asm-arm/arch-s3c2410/irqs.h | ||
2 | * | ||
3 | * Copyright (c) 2003-2005 Simtec Electronics | ||
4 | * Ben Dooks <ben@simtec.co.uk> | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | * Changelog: | ||
11 | * 12-May-2003 BJD Created file | ||
12 | * 08-Jan-2003 BJD Linux 2.6.0 version, moved BAST bits out | ||
13 | * 12-Mar-2004 BJD Fixed bug in header protection | ||
14 | * 10-Feb-2005 BJD Added camera IRQ from guillaume.gourat@nexvision.tv | ||
15 | * 28-Feb-2005 BJD Updated s3c2440 IRQs | ||
16 | */ | ||
17 | |||
18 | |||
19 | #ifndef __ASM_ARCH_IRQS_H | ||
20 | #define __ASM_ARCH_IRQS_H __FILE__ | ||
21 | |||
22 | |||
23 | /* we keep the first set of CPU IRQs out of the range of | ||
24 | * the ISA space, so that the PC104 has them to itself | ||
25 | * and we don't end up having to do horrible things to the | ||
26 | * standard ISA drivers.... | ||
27 | */ | ||
28 | |||
29 | #define S3C2410_CPUIRQ_OFFSET (16) | ||
30 | |||
31 | #define S3C2410_IRQ(x) ((x) + S3C2410_CPUIRQ_OFFSET) | ||
32 | |||
33 | /* main cpu interrupts */ | ||
34 | #define IRQ_EINT0 S3C2410_IRQ(0) /* 16 */ | ||
35 | #define IRQ_EINT1 S3C2410_IRQ(1) | ||
36 | #define IRQ_EINT2 S3C2410_IRQ(2) | ||
37 | #define IRQ_EINT3 S3C2410_IRQ(3) | ||
38 | #define IRQ_EINT4t7 S3C2410_IRQ(4) /* 20 */ | ||
39 | #define IRQ_EINT8t23 S3C2410_IRQ(5) | ||
40 | #define IRQ_RESERVED6 S3C2410_IRQ(6) /* for s3c2410 */ | ||
41 | #define IRQ_CAM S3C2410_IRQ(6) /* for s3c2440 */ | ||
42 | #define IRQ_BATT_FLT S3C2410_IRQ(7) | ||
43 | #define IRQ_TICK S3C2410_IRQ(8) /* 24 */ | ||
44 | #define IRQ_WDT S3C2410_IRQ(9) | ||
45 | #define IRQ_TIMER0 S3C2410_IRQ(10) | ||
46 | #define IRQ_TIMER1 S3C2410_IRQ(11) | ||
47 | #define IRQ_TIMER2 S3C2410_IRQ(12) | ||
48 | #define IRQ_TIMER3 S3C2410_IRQ(13) | ||
49 | #define IRQ_TIMER4 S3C2410_IRQ(14) | ||
50 | #define IRQ_UART2 S3C2410_IRQ(15) | ||
51 | #define IRQ_LCD S3C2410_IRQ(16) /* 32 */ | ||
52 | #define IRQ_DMA0 S3C2410_IRQ(17) | ||
53 | #define IRQ_DMA1 S3C2410_IRQ(18) | ||
54 | #define IRQ_DMA2 S3C2410_IRQ(19) | ||
55 | #define IRQ_DMA3 S3C2410_IRQ(20) | ||
56 | #define IRQ_SDI S3C2410_IRQ(21) | ||
57 | #define IRQ_SPI0 S3C2410_IRQ(22) | ||
58 | #define IRQ_UART1 S3C2410_IRQ(23) | ||
59 | #define IRQ_RESERVED24 S3C2410_IRQ(24) /* 40 */ | ||
60 | #define IRQ_NFCON S3C2410_IRQ(24) /* for s3c2440 */ | ||
61 | #define IRQ_USBD S3C2410_IRQ(25) | ||
62 | #define IRQ_USBH S3C2410_IRQ(26) | ||
63 | #define IRQ_IIC S3C2410_IRQ(27) | ||
64 | #define IRQ_UART0 S3C2410_IRQ(28) /* 44 */ | ||
65 | #define IRQ_SPI1 S3C2410_IRQ(29) | ||
66 | #define IRQ_RTC S3C2410_IRQ(30) | ||
67 | #define IRQ_ADCPARENT S3C2410_IRQ(31) | ||
68 | |||
69 | /* interrupts generated from the external interrupts sources */ | ||
70 | #define IRQ_EINT4 S3C2410_IRQ(32) /* 48 */ | ||
71 | #define IRQ_EINT5 S3C2410_IRQ(33) | ||
72 | #define IRQ_EINT6 S3C2410_IRQ(34) | ||
73 | #define IRQ_EINT7 S3C2410_IRQ(35) | ||
74 | #define IRQ_EINT8 S3C2410_IRQ(36) | ||
75 | #define IRQ_EINT9 S3C2410_IRQ(37) | ||
76 | #define IRQ_EINT10 S3C2410_IRQ(38) | ||
77 | #define IRQ_EINT11 S3C2410_IRQ(39) | ||
78 | #define IRQ_EINT12 S3C2410_IRQ(40) | ||
79 | #define IRQ_EINT13 S3C2410_IRQ(41) | ||
80 | #define IRQ_EINT14 S3C2410_IRQ(42) | ||
81 | #define IRQ_EINT15 S3C2410_IRQ(43) | ||
82 | #define IRQ_EINT16 S3C2410_IRQ(44) | ||
83 | #define IRQ_EINT17 S3C2410_IRQ(45) | ||
84 | #define IRQ_EINT18 S3C2410_IRQ(46) | ||
85 | #define IRQ_EINT19 S3C2410_IRQ(47) | ||
86 | #define IRQ_EINT20 S3C2410_IRQ(48) /* 64 */ | ||
87 | #define IRQ_EINT21 S3C2410_IRQ(49) | ||
88 | #define IRQ_EINT22 S3C2410_IRQ(50) | ||
89 | #define IRQ_EINT23 S3C2410_IRQ(51) | ||
90 | |||
91 | |||
92 | #define IRQ_EINT(x) S3C2410_IRQ((x >= 4) ? (IRQ_EINT4 + (x) - 4) : (S3C2410_IRQ(0) + (x))) | ||
93 | |||
94 | #define IRQ_LCD_FIFO S3C2410_IRQ(52) | ||
95 | #define IRQ_LCD_FRAME S3C2410_IRQ(53) | ||
96 | |||
97 | /* IRQs for the interal UARTs, and ADC | ||
98 | * these need to be ordered in number of appearance in the | ||
99 | * SUBSRC mask register | ||
100 | */ | ||
101 | #define IRQ_S3CUART_RX0 S3C2410_IRQ(54) /* 70 */ | ||
102 | #define IRQ_S3CUART_TX0 S3C2410_IRQ(55) /* 71 */ | ||
103 | #define IRQ_S3CUART_ERR0 S3C2410_IRQ(56) | ||
104 | |||
105 | #define IRQ_S3CUART_RX1 S3C2410_IRQ(57) | ||
106 | #define IRQ_S3CUART_TX1 S3C2410_IRQ(58) | ||
107 | #define IRQ_S3CUART_ERR1 S3C2410_IRQ(59) | ||
108 | |||
109 | #define IRQ_S3CUART_RX2 S3C2410_IRQ(60) | ||
110 | #define IRQ_S3CUART_TX2 S3C2410_IRQ(61) | ||
111 | #define IRQ_S3CUART_ERR2 S3C2410_IRQ(62) | ||
112 | |||
113 | #define IRQ_TC S3C2410_IRQ(63) | ||
114 | #define IRQ_ADC S3C2410_IRQ(64) | ||
115 | |||
116 | /* extra irqs for s3c2440 */ | ||
117 | |||
118 | #define IRQ_S3C2440_CAM_C S3C2410_IRQ(65) | ||
119 | #define IRQ_S3C2440_CAM_P S3C2410_IRQ(66) | ||
120 | #define IRQ_S3C2440_WDT S3C2410_IRQ(67) | ||
121 | #define IRQ_S3C2440_AC97 S3C2410_IRQ(68) | ||
122 | |||
123 | #define NR_IRQS (IRQ_S3C2440_AC97+1) | ||
124 | |||
125 | |||
126 | #endif /* __ASM_ARCH_IRQ_H */ | ||
diff --git a/include/asm-arm/arch-s3c2410/map.h b/include/asm-arm/arch-s3c2410/map.h new file mode 100644 index 000000000000..1833ea5c4220 --- /dev/null +++ b/include/asm-arm/arch-s3c2410/map.h | |||
@@ -0,0 +1,192 @@ | |||
1 | /* linux/include/asm-arm/arch-s3c2410/map.h | ||
2 | * | ||
3 | * (c) 2003 Simtec Electronics | ||
4 | * Ben Dooks <ben@simtec.co.uk> | ||
5 | * | ||
6 | * S3C2410 - Memory map definitions | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | * | ||
12 | * Changelog: | ||
13 | * 12-May-2003 BJD Created file | ||
14 | * 06-Jan-2003 BJD Linux 2.6.0 version, moved bast specifics out | ||
15 | * 10-Feb-2005 BJD Added CAMIF definition from guillaume.gourat@nexvision.tv | ||
16 | * 10-Mar-2005 LCVR Added support to S3C2400, changed {VA,SZ} names | ||
17 | */ | ||
18 | |||
19 | #ifndef __ASM_ARCH_MAP_H | ||
20 | #define __ASM_ARCH_MAP_H | ||
21 | |||
22 | /* we have a bit of a tight squeeze to fit all our registers from | ||
23 | * 0xF00000000 upwards, since we use all of the nGCS space in some | ||
24 | * capacity, and also need to fit the S3C2410 registers in as well... | ||
25 | * | ||
26 | * we try to ensure stuff like the IRQ registers are available for | ||
27 | * an single MOVS instruction (ie, only 8 bits of set data) | ||
28 | * | ||
29 | * Note, we are trying to remove some of these from the implementation | ||
30 | * as they are only useful to certain drivers... | ||
31 | */ | ||
32 | |||
33 | #ifndef __ASSEMBLY__ | ||
34 | #define S3C2410_ADDR(x) ((void __iomem *)0xF0000000 + (x)) | ||
35 | #else | ||
36 | #define S3C2410_ADDR(x) (0xF0000000 + (x)) | ||
37 | #endif | ||
38 | |||
39 | #define S3C2400_ADDR(x) S3C2410_ADDR(x) | ||
40 | |||
41 | /* interrupt controller is the first thing we put in, to make | ||
42 | * the assembly code for the irq detection easier | ||
43 | */ | ||
44 | #define S3C24XX_VA_IRQ S3C2410_ADDR(0x00000000) | ||
45 | #define S3C2400_PA_IRQ (0x14400000) | ||
46 | #define S3C2410_PA_IRQ (0x4A000000) | ||
47 | #define S3C24XX_SZ_IRQ SZ_1M | ||
48 | |||
49 | /* memory controller registers */ | ||
50 | #define S3C24XX_VA_MEMCTRL S3C2410_ADDR(0x00100000) | ||
51 | #define S3C2400_PA_MEMCTRL (0x14000000) | ||
52 | #define S3C2410_PA_MEMCTRL (0x48000000) | ||
53 | #define S3C24XX_SZ_MEMCTRL SZ_1M | ||
54 | |||
55 | /* USB host controller */ | ||
56 | #define S3C24XX_VA_USBHOST S3C2410_ADDR(0x00200000) | ||
57 | #define S3C2400_PA_USBHOST (0x14200000) | ||
58 | #define S3C2410_PA_USBHOST (0x49000000) | ||
59 | #define S3C24XX_SZ_USBHOST SZ_1M | ||
60 | |||
61 | /* DMA controller */ | ||
62 | #define S3C24XX_VA_DMA S3C2410_ADDR(0x00300000) | ||
63 | #define S3C2400_PA_DMA (0x14600000) | ||
64 | #define S3C2410_PA_DMA (0x4B000000) | ||
65 | #define S3C24XX_SZ_DMA SZ_1M | ||
66 | |||
67 | /* Clock and Power management */ | ||
68 | #define S3C24XX_VA_CLKPWR S3C2410_ADDR(0x00400000) | ||
69 | #define S3C2400_PA_CLKPWR (0x14800000) | ||
70 | #define S3C2410_PA_CLKPWR (0x4C000000) | ||
71 | #define S3C24XX_SZ_CLKPWR SZ_1M | ||
72 | |||
73 | /* LCD controller */ | ||
74 | #define S3C24XX_VA_LCD S3C2410_ADDR(0x00600000) | ||
75 | #define S3C2400_PA_LCD (0x14A00000) | ||
76 | #define S3C2410_PA_LCD (0x4D000000) | ||
77 | #define S3C24XX_SZ_LCD SZ_1M | ||
78 | |||
79 | /* NAND flash controller */ | ||
80 | #define S3C24XX_VA_NAND S3C2410_ADDR(0x00700000) | ||
81 | #define S3C2410_PA_NAND (0x4E000000) | ||
82 | #define S3C24XX_SZ_NAND SZ_1M | ||
83 | |||
84 | /* MMC controller - available on the S3C2400 */ | ||
85 | #define S3C2400_VA_MMC S3C2400_ADDR(0x00700000) | ||
86 | #define S3C2400_PA_MMC (0x15A00000) | ||
87 | #define S3C2400_SZ_MMC SZ_1M | ||
88 | |||
89 | /* UARTs */ | ||
90 | #define S3C24XX_VA_UART S3C2410_ADDR(0x00800000) | ||
91 | #define S3C2400_PA_UART (0x15000000) | ||
92 | #define S3C2410_PA_UART (0x50000000) | ||
93 | #define S3C24XX_SZ_UART SZ_1M | ||
94 | |||
95 | /* Timers */ | ||
96 | #define S3C24XX_VA_TIMER S3C2410_ADDR(0x00900000) | ||
97 | #define S3C2400_PA_TIMER (0x15100000) | ||
98 | #define S3C2410_PA_TIMER (0x51000000) | ||
99 | #define S3C24XX_SZ_TIMER SZ_1M | ||
100 | |||
101 | /* USB Device port */ | ||
102 | #define S3C24XX_VA_USBDEV S3C2410_ADDR(0x00A00000) | ||
103 | #define S3C2400_PA_USBDEV (0x15200140) | ||
104 | #define S3C2410_PA_USBDEV (0x52000000) | ||
105 | #define S3C24XX_SZ_USBDEV SZ_1M | ||
106 | |||
107 | /* Watchdog */ | ||
108 | #define S3C24XX_VA_WATCHDOG S3C2410_ADDR(0x00B00000) | ||
109 | #define S3C2400_PA_WATCHDOG (0x15300000) | ||
110 | #define S3C2410_PA_WATCHDOG (0x53000000) | ||
111 | #define S3C24XX_SZ_WATCHDOG SZ_1M | ||
112 | |||
113 | /* IIC hardware controller */ | ||
114 | #define S3C24XX_VA_IIC S3C2410_ADDR(0x00C00000) | ||
115 | #define S3C2400_PA_IIC (0x15400000) | ||
116 | #define S3C2410_PA_IIC (0x54000000) | ||
117 | #define S3C24XX_SZ_IIC SZ_1M | ||
118 | |||
119 | #define VA_IIC_BASE (S3C24XX_VA_IIC) | ||
120 | |||
121 | /* IIS controller */ | ||
122 | #define S3C24XX_VA_IIS S3C2410_ADDR(0x00D00000) | ||
123 | #define S3C2400_PA_IIS (0x15508000) | ||
124 | #define S3C2410_PA_IIS (0x55000000) | ||
125 | #define S3C24XX_SZ_IIS SZ_1M | ||
126 | |||
127 | /* GPIO ports */ | ||
128 | #define S3C24XX_VA_GPIO S3C2410_ADDR(0x00E00000) | ||
129 | #define S3C2400_PA_GPIO (0x15600000) | ||
130 | #define S3C2410_PA_GPIO (0x56000000) | ||
131 | #define S3C24XX_SZ_GPIO SZ_1M | ||
132 | |||
133 | /* RTC */ | ||
134 | #define S3C24XX_VA_RTC S3C2410_ADDR(0x00F00000) | ||
135 | #define S3C2400_PA_RTC (0x15700040) | ||
136 | #define S3C2410_PA_RTC (0x57000000) | ||
137 | #define S3C24XX_SZ_RTC SZ_1M | ||
138 | |||
139 | /* ADC */ | ||
140 | #define S3C24XX_VA_ADC S3C2410_ADDR(0x01000000) | ||
141 | #define S3C2400_PA_ADC (0x15800000) | ||
142 | #define S3C2410_PA_ADC (0x58000000) | ||
143 | #define S3C24XX_SZ_ADC SZ_1M | ||
144 | |||
145 | /* SPI */ | ||
146 | #define S3C24XX_VA_SPI S3C2410_ADDR(0x01100000) | ||
147 | #define S3C2400_PA_SPI (0x15900000) | ||
148 | #define S3C2410_PA_SPI (0x59000000) | ||
149 | #define S3C24XX_SZ_SPI SZ_1M | ||
150 | |||
151 | /* SDI */ | ||
152 | #define S3C24XX_VA_SDI S3C2410_ADDR(0x01200000) | ||
153 | #define S3C2410_PA_SDI (0x5A000000) | ||
154 | #define S3C24XX_SZ_SDI SZ_1M | ||
155 | |||
156 | /* CAMIF */ | ||
157 | #define S3C2440_PA_CAMIF (0x4F000000) | ||
158 | #define S3C2440_SZ_CAMIF SZ_1M | ||
159 | |||
160 | /* ISA style IO, for each machine to sort out mappings for, if it | ||
161 | * implements it. We reserve two 16M regions for ISA. | ||
162 | */ | ||
163 | |||
164 | #define S3C24XX_VA_ISA_WORD S3C2410_ADDR(0x02000000) | ||
165 | #define S3C24XX_VA_ISA_BYTE S3C2410_ADDR(0x03000000) | ||
166 | |||
167 | /* physical addresses of all the chip-select areas */ | ||
168 | |||
169 | #define S3C2410_CS0 (0x00000000) | ||
170 | #define S3C2410_CS1 (0x08000000) | ||
171 | #define S3C2410_CS2 (0x10000000) | ||
172 | #define S3C2410_CS3 (0x18000000) | ||
173 | #define S3C2410_CS4 (0x20000000) | ||
174 | #define S3C2410_CS5 (0x28000000) | ||
175 | #define S3C2410_CS6 (0x30000000) | ||
176 | #define S3C2410_CS7 (0x38000000) | ||
177 | |||
178 | #define S3C2410_SDRAM_PA (S3C2410_CS6) | ||
179 | |||
180 | #define S3C2400_CS0 (0x00000000) | ||
181 | #define S3C2400_CS1 (0x02000000) | ||
182 | #define S3C2400_CS2 (0x04000000) | ||
183 | #define S3C2400_CS3 (0x06000000) | ||
184 | #define S3C2400_CS4 (0x08000000) | ||
185 | #define S3C2400_CS5 (0x0A000000) | ||
186 | #define S3C2400_CS6 (0x0C000000) | ||
187 | #define S3C2400_CS7 (0x0E000000) | ||
188 | |||
189 | #define S3C2400_SDRAM_PA (S3C2400_CS6) | ||
190 | |||
191 | |||
192 | #endif /* __ASM_ARCH_MAP_H */ | ||
diff --git a/include/asm-arm/arch-s3c2410/memory.h b/include/asm-arm/arch-s3c2410/memory.h new file mode 100644 index 000000000000..3380ab1d0749 --- /dev/null +++ b/include/asm-arm/arch-s3c2410/memory.h | |||
@@ -0,0 +1,44 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-s3c2410/memory.h | ||
3 | * | ||
4 | * from linux/include/asm-arm/arch-rpc/memory.h | ||
5 | * | ||
6 | * Copyright (C) 1996,1997,1998 Russell King. | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | * | ||
12 | * Changelog: | ||
13 | * 20-Oct-1996 RMK Created | ||
14 | * 31-Dec-1997 RMK Fixed definitions to reduce warnings | ||
15 | * 11-Jan-1998 RMK Uninlined to reduce hits on cache | ||
16 | * 08-Feb-1998 RMK Added __virt_to_bus and __bus_to_virt | ||
17 | * 21-Mar-1999 RMK Renamed to memory.h | ||
18 | * RMK Added TASK_SIZE and PAGE_OFFSET | ||
19 | * 05-Apr-2004 BJD Copied and altered for arch-s3c2410 | ||
20 | * 17-Mar-2005 LCVR Modified for S3C2400 | ||
21 | */ | ||
22 | |||
23 | #ifndef __ASM_ARCH_MEMORY_H | ||
24 | #define __ASM_ARCH_MEMORY_H | ||
25 | |||
26 | /* | ||
27 | * DRAM starts at 0x30000000 for S3C2410/S3C2440 | ||
28 | * and at 0x0C000000 for S3C2400 | ||
29 | */ | ||
30 | #ifdef CONFIG_CPU_S3C2400 | ||
31 | #define PHYS_OFFSET (0x0C000000UL) | ||
32 | #else | ||
33 | #define PHYS_OFFSET (0x30000000UL) | ||
34 | #endif | ||
35 | |||
36 | /* | ||
37 | * These are exactly the same on the S3C2410 as the | ||
38 | * physical memory view. | ||
39 | */ | ||
40 | |||
41 | #define __virt_to_bus(x) __virt_to_phys(x) | ||
42 | #define __bus_to_virt(x) __phys_to_virt(x) | ||
43 | |||
44 | #endif | ||
diff --git a/include/asm-arm/arch-s3c2410/nand.h b/include/asm-arm/arch-s3c2410/nand.h new file mode 100644 index 000000000000..9148ac045b0d --- /dev/null +++ b/include/asm-arm/arch-s3c2410/nand.h | |||
@@ -0,0 +1,48 @@ | |||
1 | /* linux/include/asm-arm/arch-s3c2410/nand.h | ||
2 | * | ||
3 | * (c) 2004 Simtec Electronics | ||
4 | * Ben Dooks <ben@simtec.co.uk> | ||
5 | * | ||
6 | * S3C2410 - NAND device controller platfrom_device info | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | * | ||
12 | * Changelog: | ||
13 | * 23-Sep-2004 BJD Created file | ||
14 | */ | ||
15 | |||
16 | /* struct s3c2410_nand_set | ||
17 | * | ||
18 | * define an set of one or more nand chips registered with an unique mtd | ||
19 | * | ||
20 | * nr_chips = number of chips in this set | ||
21 | * nr_partitions = number of partitions pointed to be partitoons (or zero) | ||
22 | * name = name of set (optional) | ||
23 | * nr_map = map for low-layer logical to physical chip numbers (option) | ||
24 | * partitions = mtd partition list | ||
25 | */ | ||
26 | |||
27 | struct s3c2410_nand_set { | ||
28 | int nr_chips; | ||
29 | int nr_partitions; | ||
30 | char *name; | ||
31 | int *nr_map; | ||
32 | struct mtd_partition *partitions; | ||
33 | }; | ||
34 | |||
35 | struct s3c2410_platform_nand { | ||
36 | /* timing information for controller, all times in nanoseconds */ | ||
37 | |||
38 | int tacls; /* time for active CLE/ALE to nWE/nOE */ | ||
39 | int twrph0; /* active time for nWE/nOE */ | ||
40 | int twrph1; /* time for release CLE/ALE from nWE/nOE inactive */ | ||
41 | |||
42 | int nr_sets; | ||
43 | struct s3c2410_nand_set *sets; | ||
44 | |||
45 | void (*select_chip)(struct s3c2410_nand_set *, | ||
46 | int chip); | ||
47 | }; | ||
48 | |||
diff --git a/include/asm-arm/arch-s3c2410/otom-map.h b/include/asm-arm/arch-s3c2410/otom-map.h new file mode 100644 index 000000000000..e40c93429854 --- /dev/null +++ b/include/asm-arm/arch-s3c2410/otom-map.h | |||
@@ -0,0 +1,30 @@ | |||
1 | /* linux/include/asm-arm/arch-s3c2410/otom-map.h | ||
2 | * | ||
3 | * (c) 2005 Guillaume GOURAT / NexVision | ||
4 | * guillaume.gourat@nexvision.fr | ||
5 | * | ||
6 | * NexVision OTOM board memory map definitions | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | */ | ||
12 | |||
13 | /* needs arch/map.h including with this */ | ||
14 | |||
15 | /* ok, we've used up to 0x01300000, now we need to find space for the | ||
16 | * peripherals that live in the nGCS[x] areas, which are quite numerous | ||
17 | * in their space. | ||
18 | */ | ||
19 | |||
20 | #ifndef __ASM_ARCH_OTOMMAP_H | ||
21 | #define __ASM_ARCH_OTOMMAP_H | ||
22 | |||
23 | #define OTOM_PA_CS8900A_BASE (S3C2410_CS3 + 0x01000000) /* nGCS3 +0x01000000 */ | ||
24 | #define OTOM_VA_CS8900A_BASE S3C2410_ADDR(0x04000000) /* 0xF4000000 */ | ||
25 | |||
26 | /* physical offset addresses for the peripherals */ | ||
27 | |||
28 | #define OTOM_PA_FLASH0_BASE (S3C2410_CS0) /* Bank 0 */ | ||
29 | |||
30 | #endif /* __ASM_ARCH_OTOMMAP_H */ | ||
diff --git a/include/asm-arm/arch-s3c2410/param.h b/include/asm-arm/arch-s3c2410/param.h new file mode 100644 index 000000000000..483d3f149883 --- /dev/null +++ b/include/asm-arm/arch-s3c2410/param.h | |||
@@ -0,0 +1,27 @@ | |||
1 | /* linux/include/asm-arm/arch-s3c2410/param.h | ||
2 | * | ||
3 | * (c) 2003 Simtec Electronics | ||
4 | * Ben Dooks <ben@simtec.co.uk> | ||
5 | * | ||
6 | * S3C2410 - Machine parameters | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | * | ||
12 | * Changelog: | ||
13 | * 02-Sep-2003 BJD Created file | ||
14 | * 12-Mar-2004 BJD Added include protection | ||
15 | */ | ||
16 | |||
17 | #ifndef __ASM_ARCH_PARAM_H | ||
18 | #define __ASM_ARCH_PARAM_H | ||
19 | |||
20 | /* we cannot get our timer down to 100Hz with the setup as is, but we can | ||
21 | * manage 200 clock ticks per second... if this is a problem, we can always | ||
22 | * add a software pre-scaler to the evil timer systems. | ||
23 | */ | ||
24 | |||
25 | #define HZ 200 | ||
26 | |||
27 | #endif /* __ASM_ARCH_PARAM_H */ | ||
diff --git a/include/asm-arm/arch-s3c2410/regs-adc.h b/include/asm-arm/arch-s3c2410/regs-adc.h new file mode 100644 index 000000000000..15bfc2f5754e --- /dev/null +++ b/include/asm-arm/arch-s3c2410/regs-adc.h | |||
@@ -0,0 +1,63 @@ | |||
1 | /* linux/include/asm/arch-s3c2410/regs-adc.h | ||
2 | * | ||
3 | * Copyright (c) 2004 Shannon Holland <holland@loser.net> | ||
4 | * | ||
5 | * This program is free software; yosu can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License version 2 as | ||
7 | * published by the Free Software Foundation. | ||
8 | * | ||
9 | * S3C2410 ADC registers | ||
10 | * | ||
11 | * Changelog: | ||
12 | * 27-09-2004 SAH Created file | ||
13 | */ | ||
14 | |||
15 | #ifndef __ASM_ARCH_REGS_ADC_H | ||
16 | #define __ASM_ARCH_REGS_ADC_H "regs-adc.h" | ||
17 | |||
18 | #define S3C2410_ADCREG(x) (x) | ||
19 | |||
20 | #define S3C2410_ADCCON S3C2410_ADCREG(0x00) | ||
21 | #define S3C2410_ADCTSC S3C2410_ADCREG(0x04) | ||
22 | #define S3C2410_ADCDLY S3C2410_ADCREG(0x08) | ||
23 | #define S3C2410_ADCDAT0 S3C2410_ADCREG(0x0C) | ||
24 | #define S3C2410_ADCDAT1 S3C2410_ADCREG(0x10) | ||
25 | |||
26 | |||
27 | /* ADCCON Register Bits */ | ||
28 | #define S3C2410_ADCCON_ECFLG (1<<15) | ||
29 | #define S3C2410_ADCCON_PRSCEN (1<<14) | ||
30 | #define S3C2410_ADCCON_PRSCVL(x) (((x)&0xFF)<<6) | ||
31 | #define S3C2410_ADCCON_PRSCVLMASK (0xFF<<6) | ||
32 | #define S3C2410_ADCCON_SELMUX(x) (((x)&0x7)<<3) | ||
33 | #define S3C2410_ADCCON_MUXMASK (0x7<<3) | ||
34 | #define S3C2410_ADCCON_STDBM (1<<2) | ||
35 | #define S3C2410_ADCCON_READ_START (1<<1) | ||
36 | #define S3C2410_ADCCON_ENABLE_START (1<<0) | ||
37 | #define S3C2410_ADCCON_STARTMASK (0x3<<0) | ||
38 | |||
39 | |||
40 | /* ADCTSC Register Bits */ | ||
41 | #define S3C2410_ADCTSC_YM_SEN (1<<7) | ||
42 | #define S3C2410_ADCTSC_YP_SEN (1<<6) | ||
43 | #define S3C2410_ADCTSC_XM_SEN (1<<5) | ||
44 | #define S3C2410_ADCTSC_XP_SEN (1<<4) | ||
45 | #define S3C2410_ADCTSC_PULL_UP_DISABLE (1<<3) | ||
46 | #define S3C2410_ADCTSC_AUTO_PST (1<<2) | ||
47 | #define S3C2410_ADCTSC_XY_PST (0x3<<0) | ||
48 | |||
49 | /* ADCDAT0 Bits */ | ||
50 | #define S3C2410_ADCDAT0_UPDOWN (1<<15) | ||
51 | #define S3C2410_ADCDAT0_AUTO_PST (1<<14) | ||
52 | #define S3C2410_ADCDAT0_XY_PST (0x3<<12) | ||
53 | #define S3C2410_ADCDAT0_XPDATA_MASK (0x03FF) | ||
54 | |||
55 | /* ADCDAT1 Bits */ | ||
56 | #define S3C2410_ADCDAT1_UPDOWN (1<<15) | ||
57 | #define S3C2410_ADCDAT1_AUTO_PST (1<<14) | ||
58 | #define S3C2410_ADCDAT1_XY_PST (0x3<<12) | ||
59 | #define S3C2410_ADCDAT1_YPDATA_MASK (0x03FF) | ||
60 | |||
61 | #endif /* __ASM_ARCH_REGS_ADC_H */ | ||
62 | |||
63 | |||
diff --git a/include/asm-arm/arch-s3c2410/regs-clock.h b/include/asm-arm/arch-s3c2410/regs-clock.h new file mode 100644 index 000000000000..e5e938b79acc --- /dev/null +++ b/include/asm-arm/arch-s3c2410/regs-clock.h | |||
@@ -0,0 +1,122 @@ | |||
1 | /* linux/include/asm/arch-s3c2410/regs-clock.h | ||
2 | * | ||
3 | * Copyright (c) 2003,2004 Simtec Electronics <linux@simtec.co.uk> | ||
4 | * http://www.simtec.co.uk/products/SWLINUX/ | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | * S3C2410 clock register definitions | ||
11 | * | ||
12 | * Changelog: | ||
13 | * 18-Aug-2004 Ben Dooks Added 2440 definitions | ||
14 | * 08-Aug-2004 Herbert Pötzl Added CLKCON definitions | ||
15 | * 19-06-2003 Ben Dooks Created file | ||
16 | * 12-03-2004 Ben Dooks Updated include protection | ||
17 | * 29-Sep-2004 Ben Dooks Fixed usage for assembly inclusion | ||
18 | * 10-Feb-2005 Ben Dooks Fixed CAMDIVN address (Guillaume Gourat) | ||
19 | * 10-Mar-2005 Lucas Villa Real Changed S3C2410_VA to S3C24XX_VA | ||
20 | */ | ||
21 | |||
22 | #ifndef __ASM_ARM_REGS_CLOCK | ||
23 | #define __ASM_ARM_REGS_CLOCK "$Id: clock.h,v 1.4 2003/04/30 14:50:51 ben Exp $" | ||
24 | |||
25 | #define S3C2410_CLKREG(x) ((x) + S3C24XX_VA_CLKPWR) | ||
26 | |||
27 | #define S3C2410_PLLVAL(_m,_p,_s) ((_m) << 12 | ((_p) << 4) | ((_s))) | ||
28 | |||
29 | #define S3C2410_LOCKTIME S3C2410_CLKREG(0x00) | ||
30 | #define S3C2410_MPLLCON S3C2410_CLKREG(0x04) | ||
31 | #define S3C2410_UPLLCON S3C2410_CLKREG(0x08) | ||
32 | #define S3C2410_CLKCON S3C2410_CLKREG(0x0C) | ||
33 | #define S3C2410_CLKSLOW S3C2410_CLKREG(0x10) | ||
34 | #define S3C2410_CLKDIVN S3C2410_CLKREG(0x14) | ||
35 | |||
36 | #define S3C2410_CLKCON_IDLE (1<<2) | ||
37 | #define S3C2410_CLKCON_POWER (1<<3) | ||
38 | #define S3C2410_CLKCON_NAND (1<<4) | ||
39 | #define S3C2410_CLKCON_LCDC (1<<5) | ||
40 | #define S3C2410_CLKCON_USBH (1<<6) | ||
41 | #define S3C2410_CLKCON_USBD (1<<7) | ||
42 | #define S3C2410_CLKCON_PWMT (1<<8) | ||
43 | #define S3C2410_CLKCON_SDI (1<<9) | ||
44 | #define S3C2410_CLKCON_UART0 (1<<10) | ||
45 | #define S3C2410_CLKCON_UART1 (1<<11) | ||
46 | #define S3C2410_CLKCON_UART2 (1<<12) | ||
47 | #define S3C2410_CLKCON_GPIO (1<<13) | ||
48 | #define S3C2410_CLKCON_RTC (1<<14) | ||
49 | #define S3C2410_CLKCON_ADC (1<<15) | ||
50 | #define S3C2410_CLKCON_IIC (1<<16) | ||
51 | #define S3C2410_CLKCON_IIS (1<<17) | ||
52 | #define S3C2410_CLKCON_SPI (1<<18) | ||
53 | |||
54 | #define S3C2410_PLLCON_MDIVSHIFT 12 | ||
55 | #define S3C2410_PLLCON_PDIVSHIFT 4 | ||
56 | #define S3C2410_PLLCON_SDIVSHIFT 0 | ||
57 | #define S3C2410_PLLCON_MDIVMASK ((1<<(1+(19-12)))-1) | ||
58 | #define S3C2410_PLLCON_PDIVMASK ((1<<5)-1) | ||
59 | #define S3C2410_PLLCON_SDIVMASK 3 | ||
60 | |||
61 | /* DCLKCON register addresses in gpio.h */ | ||
62 | |||
63 | #define S3C2410_DCLKCON_DCLK0EN (1<<0) | ||
64 | #define S3C2410_DCLKCON_DCLK0_PCLK (0<<1) | ||
65 | #define S3C2410_DCLKCON_DCLK0_UCLK (1<<1) | ||
66 | #define S3C2410_DCLKCON_DCLK0_DIV(x) (((x) - 1 )<<4) | ||
67 | #define S3C2410_DCLKCON_DCLK0_CMP(x) (((x) - 1 )<<8) | ||
68 | |||
69 | #define S3C2410_DCLKCON_DCLK1EN (1<<16) | ||
70 | #define S3C2410_DCLKCON_DCLK1_PCLK (0<<17) | ||
71 | #define S3C2410_DCLKCON_DCLK1_UCLK (1<<17) | ||
72 | #define S3C2410_DCLKCON_DCLK1_DIV(x) (((x) - 1) <<20) | ||
73 | |||
74 | #define S3C2410_CLKDIVN_PDIVN (1<<0) | ||
75 | #define S3C2410_CLKDIVN_HDIVN (1<<1) | ||
76 | |||
77 | #ifndef __ASSEMBLY__ | ||
78 | |||
79 | static inline unsigned int | ||
80 | s3c2410_get_pll(int pllval, int baseclk) | ||
81 | { | ||
82 | int mdiv, pdiv, sdiv; | ||
83 | |||
84 | mdiv = pllval >> S3C2410_PLLCON_MDIVSHIFT; | ||
85 | pdiv = pllval >> S3C2410_PLLCON_PDIVSHIFT; | ||
86 | sdiv = pllval >> S3C2410_PLLCON_SDIVSHIFT; | ||
87 | |||
88 | mdiv &= S3C2410_PLLCON_MDIVMASK; | ||
89 | pdiv &= S3C2410_PLLCON_PDIVMASK; | ||
90 | sdiv &= S3C2410_PLLCON_SDIVMASK; | ||
91 | |||
92 | return (baseclk * (mdiv + 8)) / ((pdiv + 2) << sdiv); | ||
93 | } | ||
94 | |||
95 | #endif /* __ASSEMBLY__ */ | ||
96 | |||
97 | #ifdef CONFIG_CPU_S3C2440 | ||
98 | |||
99 | /* extra registers */ | ||
100 | #define S3C2440_CAMDIVN S3C2410_CLKREG(0x18) | ||
101 | |||
102 | #define S3C2440_CLKCON_CAMERA (1<<19) | ||
103 | #define S3C2440_CLKCON_AC97 (1<<20) | ||
104 | |||
105 | #define S3C2440_CLKDIVN_PDIVN (1<<0) | ||
106 | #define S3C2440_CLKDIVN_HDIVN_MASK (3<<1) | ||
107 | #define S3C2440_CLKDIVN_HDIVN_1 (0<<1) | ||
108 | #define S3C2440_CLKDIVN_HDIVN_2 (1<<1) | ||
109 | #define S3C2440_CLKDIVN_HDIVN_4_8 (2<<1) | ||
110 | #define S3C2440_CLKDIVN_HDIVN_3_6 (3<<1) | ||
111 | #define S3C2440_CLKDIVN_UCLK (1<<3) | ||
112 | |||
113 | #define S3C2440_CAMDIVN_CAMCLK_MASK (0xf<<0) | ||
114 | #define S3C2440_CAMDIVN_CAMCLK_SEL (1<<4) | ||
115 | #define S3C2440_CAMDIVN_HCLK3_HALF (1<<8) | ||
116 | #define S3C2440_CAMDIVN_HCLK4_HALF (1<<9) | ||
117 | #define S3C2440_CAMDIVN_DVSEN (1<<12) | ||
118 | |||
119 | #endif /* CONFIG_CPU_S3C2440 */ | ||
120 | |||
121 | |||
122 | #endif /* __ASM_ARM_REGS_CLOCK */ | ||
diff --git a/include/asm-arm/arch-s3c2410/regs-dsc.h b/include/asm-arm/arch-s3c2410/regs-dsc.h new file mode 100644 index 000000000000..a023b0434efe --- /dev/null +++ b/include/asm-arm/arch-s3c2410/regs-dsc.h | |||
@@ -0,0 +1,183 @@ | |||
1 | /* linux/include/asm/hardware/s3c2410/regs-dsc.h | ||
2 | * | ||
3 | * Copyright (c) 2004 Simtec Electronics <linux@simtec.co.uk> | ||
4 | * http://www.simtec.co.uk/products/SWLINUX/ | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | * S3C2440 Signal Drive Strength Control | ||
11 | * | ||
12 | * Changelog: | ||
13 | * 11-Aug-2004 BJD Created file | ||
14 | * 25-Aug-2004 BJD Added the _SELECT_* defs for using with functions | ||
15 | */ | ||
16 | |||
17 | |||
18 | #ifndef __ASM_ARCH_REGS_DSC_H | ||
19 | #define __ASM_ARCH_REGS_DSC_H "2440-dsc" | ||
20 | |||
21 | #ifdef CONFIG_CPU_S3C2440 | ||
22 | |||
23 | #define S3C2440_DSC0 S3C2410_GPIOREG(0xc4) | ||
24 | #define S3C2440_DSC1 S3C2410_GPIOREG(0xc8) | ||
25 | |||
26 | #define S3C2440_SELECT_DSC0 (0) | ||
27 | #define S3C2440_SELECT_DSC1 (1<<31) | ||
28 | |||
29 | #define S3C2440_DSC_GETSHIFT(x) ((x) & 31) | ||
30 | |||
31 | #define S3C2440_DSC0_DISABLE (1<<31) | ||
32 | |||
33 | #define S3C2440_DSC0_ADDR (S3C2440_SELECT_DSC0 | 8) | ||
34 | #define S3C2440_DSC0_ADDR_12mA (0<<8) | ||
35 | #define S3C2440_DSC0_ADDR_10mA (1<<8) | ||
36 | #define S3C2440_DSC0_ADDR_8mA (2<<8) | ||
37 | #define S3C2440_DSC0_ADDR_6mA (3<<8) | ||
38 | #define S3C2440_DSC0_ADDR_MASK (3<<8) | ||
39 | |||
40 | /* D24..D31 */ | ||
41 | #define S3C2440_DSC0_DATA3 (S3C2440_SELECT_DSC0 | 6) | ||
42 | #define S3C2440_DSC0_DATA3_12mA (0<<6) | ||
43 | #define S3C2440_DSC0_DATA3_10mA (1<<6) | ||
44 | #define S3C2440_DSC0_DATA3_8mA (2<<6) | ||
45 | #define S3C2440_DSC0_DATA3_6mA (3<<6) | ||
46 | #define S3C2440_DSC0_DATA3_MASK (3<<6) | ||
47 | |||
48 | /* D16..D23 */ | ||
49 | #define S3C2440_DSC0_DATA2 (S3C2440_SELECT_DSC0 | 4) | ||
50 | #define S3C2440_DSC0_DATA2_12mA (0<<4) | ||
51 | #define S3C2440_DSC0_DATA2_10mA (1<<4) | ||
52 | #define S3C2440_DSC0_DATA2_8mA (2<<4) | ||
53 | #define S3C2440_DSC0_DATA2_6mA (3<<4) | ||
54 | #define S3C2440_DSC0_DATA2_MASK (3<<4) | ||
55 | |||
56 | /* D8..D15 */ | ||
57 | #define S3C2440_DSC0_DATA1 (S3C2440_SELECT_DSC0 | 2) | ||
58 | #define S3C2440_DSC0_DATA1_12mA (0<<2) | ||
59 | #define S3C2440_DSC0_DATA1_10mA (1<<2) | ||
60 | #define S3C2440_DSC0_DATA1_8mA (2<<2) | ||
61 | #define S3C2440_DSC0_DATA1_6mA (3<<2) | ||
62 | #define S3C2440_DSC0_DATA1_MASK (3<<2) | ||
63 | |||
64 | /* D0..D7 */ | ||
65 | #define S3C2440_DSC0_DATA0 (S3C2440_SELECT_DSC0 | 0) | ||
66 | #define S3C2440_DSC0_DATA0_12mA (0<<0) | ||
67 | #define S3C2440_DSC0_DATA0_10mA (1<<0) | ||
68 | #define S3C2440_DSC0_DATA0_8mA (2<<0) | ||
69 | #define S3C2440_DSC0_DATA0_6mA (3<<0) | ||
70 | #define S3C2440_DSC0_DATA0_MASK (3<<0) | ||
71 | |||
72 | #define S3C2440_DSC1_SCK1 (S3C2440_SELECT_DSC1 | 28) | ||
73 | #define S3C2440_DSC1_SCK1_12mA (0<<28) | ||
74 | #define S3C2440_DSC1_SCK1_10mA (1<<28) | ||
75 | #define S3C2440_DSC1_SCK1_8mA (2<<28) | ||
76 | #define S3C2440_DSC1_SCK1_6mA (3<<28) | ||
77 | #define S3C2440_DSC1_SCK1_MASK (3<<28) | ||
78 | |||
79 | #define S3C2440_DSC1_SCK0 (S3C2440_SELECT_DSC1 | 26) | ||
80 | #define S3C2440_DSC1_SCK0_12mA (0<<26) | ||
81 | #define S3C2440_DSC1_SCK0_10mA (1<<26) | ||
82 | #define S3C2440_DSC1_SCK0_8mA (2<<26) | ||
83 | #define S3C2440_DSC1_SCK0_6mA (3<<26) | ||
84 | #define S3C2440_DSC1_SCK0_MASK (3<<26) | ||
85 | |||
86 | #define S3C2440_DSC1_SCKE (S3C2440_SELECT_DSC1 | 24) | ||
87 | #define S3C2440_DSC1_SCKE_10mA (0<<24) | ||
88 | #define S3C2440_DSC1_SCKE_8mA (1<<24) | ||
89 | #define S3C2440_DSC1_SCKE_6mA (2<<24) | ||
90 | #define S3C2440_DSC1_SCKE_4mA (3<<24) | ||
91 | #define S3C2440_DSC1_SCKE_MASK (3<<24) | ||
92 | |||
93 | /* SDRAM nRAS/nCAS */ | ||
94 | #define S3C2440_DSC1_SDR (S3C2440_SELECT_DSC1 | 22) | ||
95 | #define S3C2440_DSC1_SDR_10mA (0<<22) | ||
96 | #define S3C2440_DSC1_SDR_8mA (1<<22) | ||
97 | #define S3C2440_DSC1_SDR_6mA (2<<22) | ||
98 | #define S3C2440_DSC1_SDR_4mA (3<<22) | ||
99 | #define S3C2440_DSC1_SDR_MASK (3<<22) | ||
100 | |||
101 | /* NAND Flash Controller */ | ||
102 | #define S3C2440_DSC1_NFC (S3C2440_SELECT_DSC1 | 20) | ||
103 | #define S3C2440_DSC1_NFC_10mA (0<<20) | ||
104 | #define S3C2440_DSC1_NFC_8mA (1<<20) | ||
105 | #define S3C2440_DSC1_NFC_6mA (2<<20) | ||
106 | #define S3C2440_DSC1_NFC_4mA (3<<20) | ||
107 | #define S3C2440_DSC1_NFC_MASK (3<<20) | ||
108 | |||
109 | /* nBE[0..3] */ | ||
110 | #define S3C2440_DSC1_nBE (S3C2440_SELECT_DSC1 | 18) | ||
111 | #define S3C2440_DSC1_nBE_10mA (0<<18) | ||
112 | #define S3C2440_DSC1_nBE_8mA (1<<18) | ||
113 | #define S3C2440_DSC1_nBE_6mA (2<<18) | ||
114 | #define S3C2440_DSC1_nBE_4mA (3<<18) | ||
115 | #define S3C2440_DSC1_nBE_MASK (3<<18) | ||
116 | |||
117 | #define S3C2440_DSC1_WOE (S3C2440_SELECT_DSC1 | 16) | ||
118 | #define S3C2440_DSC1_WOE_10mA (0<<16) | ||
119 | #define S3C2440_DSC1_WOE_8mA (1<<16) | ||
120 | #define S3C2440_DSC1_WOE_6mA (2<<16) | ||
121 | #define S3C2440_DSC1_WOE_4mA (3<<16) | ||
122 | #define S3C2440_DSC1_WOE_MASK (3<<16) | ||
123 | |||
124 | #define S3C2440_DSC1_CS7 (S3C2440_SELECT_DSC1 | 14) | ||
125 | #define S3C2440_DSC1_CS7_10mA (0<<14) | ||
126 | #define S3C2440_DSC1_CS7_8mA (1<<14) | ||
127 | #define S3C2440_DSC1_CS7_6mA (2<<14) | ||
128 | #define S3C2440_DSC1_CS7_4mA (3<<14) | ||
129 | #define S3C2440_DSC1_CS7_MASK (3<<14) | ||
130 | |||
131 | #define S3C2440_DSC1_CS6 (S3C2440_SELECT_DSC1 | 12) | ||
132 | #define S3C2440_DSC1_CS6_10mA (0<<12) | ||
133 | #define S3C2440_DSC1_CS6_8mA (1<<12) | ||
134 | #define S3C2440_DSC1_CS6_6mA (2<<12) | ||
135 | #define S3C2440_DSC1_CS6_4mA (3<<12) | ||
136 | #define S3C2440_DSC1_CS6_MASK (3<<12) | ||
137 | |||
138 | #define S3C2440_DSC1_CS5 (S3C2440_SELECT_DSC1 | 10) | ||
139 | #define S3C2440_DSC1_CS5_10mA (0<<10) | ||
140 | #define S3C2440_DSC1_CS5_8mA (1<<10) | ||
141 | #define S3C2440_DSC1_CS5_6mA (2<<10) | ||
142 | #define S3C2440_DSC1_CS5_4mA (3<<10) | ||
143 | #define S3C2440_DSC1_CS5_MASK (3<<10) | ||
144 | |||
145 | #define S3C2440_DSC1_CS4 (S3C2440_SELECT_DSC1 | 8) | ||
146 | #define S3C2440_DSC1_CS4_10mA (0<<8) | ||
147 | #define S3C2440_DSC1_CS4_8mA (1<<8) | ||
148 | #define S3C2440_DSC1_CS4_6mA (2<<8) | ||
149 | #define S3C2440_DSC1_CS4_4mA (3<<8) | ||
150 | #define S3C2440_DSC1_CS4_MASK (3<<8) | ||
151 | |||
152 | #define S3C2440_DSC1_CS3 (S3C2440_SELECT_DSC1 | 6) | ||
153 | #define S3C2440_DSC1_CS3_10mA (0<<6) | ||
154 | #define S3C2440_DSC1_CS3_8mA (1<<6) | ||
155 | #define S3C2440_DSC1_CS3_6mA (2<<6) | ||
156 | #define S3C2440_DSC1_CS3_4mA (3<<6) | ||
157 | #define S3C2440_DSC1_CS3_MASK (3<<6) | ||
158 | |||
159 | #define S3C2440_DSC1_CS2 (S3C2440_SELECT_DSC1 | 4) | ||
160 | #define S3C2440_DSC1_CS2_10mA (0<<4) | ||
161 | #define S3C2440_DSC1_CS2_8mA (1<<4) | ||
162 | #define S3C2440_DSC1_CS2_6mA (2<<4) | ||
163 | #define S3C2440_DSC1_CS2_4mA (3<<4) | ||
164 | #define S3C2440_DSC1_CS2_MASK (3<<4) | ||
165 | |||
166 | #define S3C2440_DSC1_CS1 (S3C2440_SELECT_DSC1 | 2) | ||
167 | #define S3C2440_DSC1_CS1_10mA (0<<2) | ||
168 | #define S3C2440_DSC1_CS1_8mA (1<<2) | ||
169 | #define S3C2440_DSC1_CS1_6mA (2<<2) | ||
170 | #define S3C2440_DSC1_CS1_4mA (3<<2) | ||
171 | #define S3C2440_DSC1_CS1_MASK (3<<2) | ||
172 | |||
173 | #define S3C2440_DSC1_CS0 (S3C2440_SELECT_DSC1 | 0 | ||
174 | #define S3C2440_DSC1_CS0_10mA (0<<0) | ||
175 | #define S3C2440_DSC1_CS0_8mA (1<<0) | ||
176 | #define S3C2440_DSC1_CS0_6mA (2<<0) | ||
177 | #define S3C2440_DSC1_CS0_4mA (3<<0) | ||
178 | #define S3C2440_DSC1_CS0_MASK (3<<0) | ||
179 | |||
180 | #endif /* CONFIG_CPU_S3C2440 */ | ||
181 | |||
182 | #endif /* __ASM_ARCH_REGS_DSC_H */ | ||
183 | |||
diff --git a/include/asm-arm/arch-s3c2410/regs-gpio.h b/include/asm-arm/arch-s3c2410/regs-gpio.h new file mode 100644 index 000000000000..2053cbacffc3 --- /dev/null +++ b/include/asm-arm/arch-s3c2410/regs-gpio.h | |||
@@ -0,0 +1,831 @@ | |||
1 | /* linux/include/asm/hardware/s3c2410/regs-gpio.h | ||
2 | * | ||
3 | * Copyright (c) 2003,2004 Simtec Electronics <linux@simtec.co.uk> | ||
4 | * http://www.simtec.co.uk/products/SWLINUX/ | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | * S3C2410 GPIO register definitions | ||
11 | * | ||
12 | * Changelog: | ||
13 | * 19-06-2003 BJD Created file | ||
14 | * 23-06-2003 BJD Updated GSTATUS registers | ||
15 | * 12-03-2004 BJD Updated include protection | ||
16 | * 20-07-2004 BJD Added GPIO pin numbers, added Port A definitions | ||
17 | * 04-10-2004 BJD Fixed number of bugs, added EXT IRQ filter defs | ||
18 | * 17-10-2004 BJD Added GSTATUS1 register definitions | ||
19 | * 18-11-2004 BJD Fixed definitions of GPE3, GPE4, GPE5 and GPE6 | ||
20 | * 18-11-2004 BJD Added S3C2440 AC97 controls | ||
21 | * 10-Mar-2005 LCVR Changed S3C2410_VA to S3C24XX_VA | ||
22 | * 28-Mar-2005 LCVR Fixed definition of GPB10 | ||
23 | */ | ||
24 | |||
25 | |||
26 | #ifndef __ASM_ARCH_REGS_GPIO_H | ||
27 | #define __ASM_ARCH_REGS_GPIO_H "$Id: gpio.h,v 1.5 2003/05/19 12:51:08 ben Exp $" | ||
28 | |||
29 | #define S3C2410_GPIONO(bank,offset) ((bank) + (offset)) | ||
30 | |||
31 | #define S3C2410_GPIO_BANKA (32*0) | ||
32 | #define S3C2410_GPIO_BANKB (32*1) | ||
33 | #define S3C2410_GPIO_BANKC (32*2) | ||
34 | #define S3C2410_GPIO_BANKD (32*3) | ||
35 | #define S3C2410_GPIO_BANKE (32*4) | ||
36 | #define S3C2410_GPIO_BANKF (32*5) | ||
37 | #define S3C2410_GPIO_BANKG (32*6) | ||
38 | #define S3C2410_GPIO_BANKH (32*7) | ||
39 | |||
40 | #define S3C2410_GPIO_BASE(pin) ((((pin) & ~31) >> 1) + S3C24XX_VA_GPIO) | ||
41 | #define S3C2410_GPIO_OFFSET(pin) ((pin) & 31) | ||
42 | |||
43 | /* general configuration options */ | ||
44 | |||
45 | #define S3C2410_GPIO_LEAVE (0xFFFFFFFF) | ||
46 | |||
47 | /* configure GPIO ports A..G */ | ||
48 | |||
49 | #define S3C2410_GPIOREG(x) ((x) + S3C24XX_VA_GPIO) | ||
50 | |||
51 | /* port A - 22bits, zero in bit X makes pin X output | ||
52 | * 1 makes port special function, this is default | ||
53 | */ | ||
54 | #define S3C2410_GPACON S3C2410_GPIOREG(0x00) | ||
55 | #define S3C2410_GPADAT S3C2410_GPIOREG(0x04) | ||
56 | |||
57 | #define S3C2410_GPA0 S3C2410_GPIONO(S3C2410_GPIO_BANKA, 0) | ||
58 | #define S3C2410_GPA0_OUT (0<<0) | ||
59 | #define S3C2410_GPA0_ADDR0 (1<<0) | ||
60 | |||
61 | #define S3C2410_GPA1 S3C2410_GPIONO(S3C2410_GPIO_BANKA, 1) | ||
62 | #define S3C2410_GPA1_OUT (0<<1) | ||
63 | #define S3C2410_GPA1_ADDR16 (1<<1) | ||
64 | |||
65 | #define S3C2410_GPA2 S3C2410_GPIONO(S3C2410_GPIO_BANKA, 2) | ||
66 | #define S3C2410_GPA2_OUT (0<<2) | ||
67 | #define S3C2410_GPA2_ADDR17 (1<<2) | ||
68 | |||
69 | #define S3C2410_GPA3 S3C2410_GPIONO(S3C2410_GPIO_BANKA, 3) | ||
70 | #define S3C2410_GPA3_OUT (0<<3) | ||
71 | #define S3C2410_GPA3_ADDR18 (1<<3) | ||
72 | |||
73 | #define S3C2410_GPA4 S3C2410_GPIONO(S3C2410_GPIO_BANKA, 4) | ||
74 | #define S3C2410_GPA4_OUT (0<<4) | ||
75 | #define S3C2410_GPA4_ADDR19 (1<<4) | ||
76 | |||
77 | #define S3C2410_GPA5 S3C2410_GPIONO(S3C2410_GPIO_BANKA, 5) | ||
78 | #define S3C2410_GPA5_OUT (0<<5) | ||
79 | #define S3C2410_GPA5_ADDR20 (1<<5) | ||
80 | |||
81 | #define S3C2410_GPA6 S3C2410_GPIONO(S3C2410_GPIO_BANKA, 6) | ||
82 | #define S3C2410_GPA6_OUT (0<<6) | ||
83 | #define S3C2410_GPA6_ADDR21 (1<<6) | ||
84 | |||
85 | #define S3C2410_GPA7 S3C2410_GPIONO(S3C2410_GPIO_BANKA, 7) | ||
86 | #define S3C2410_GPA7_OUT (0<<7) | ||
87 | #define S3C2410_GPA7_ADDR22 (1<<7) | ||
88 | |||
89 | #define S3C2410_GPA8 S3C2410_GPIONO(S3C2410_GPIO_BANKA, 8) | ||
90 | #define S3C2410_GPA8_OUT (0<<8) | ||
91 | #define S3C2410_GPA8_ADDR23 (1<<8) | ||
92 | |||
93 | #define S3C2410_GPA9 S3C2410_GPIONO(S3C2410_GPIO_BANKA, 9) | ||
94 | #define S3C2410_GPA9_OUT (0<<9) | ||
95 | #define S3C2410_GPA9_ADDR24 (1<<9) | ||
96 | |||
97 | #define S3C2410_GPA10 S3C2410_GPIONO(S3C2410_GPIO_BANKA, 10) | ||
98 | #define S3C2410_GPA10_OUT (0<<10) | ||
99 | #define S3C2410_GPA10_ADDR25 (1<<10) | ||
100 | |||
101 | #define S3C2410_GPA11 S3C2410_GPIONO(S3C2410_GPIO_BANKA, 11) | ||
102 | #define S3C2410_GPA11_OUT (0<<11) | ||
103 | #define S3C2410_GPA11_ADDR26 (1<<11) | ||
104 | |||
105 | #define S3C2410_GPA12 S3C2410_GPIONO(S3C2410_GPIO_BANKA, 12) | ||
106 | #define S3C2410_GPA12_OUT (0<<12) | ||
107 | #define S3C2410_GPA12_nGCS1 (1<<12) | ||
108 | |||
109 | #define S3C2410_GPA13 S3C2410_GPIONO(S3C2410_GPIO_BANKA, 13) | ||
110 | #define S3C2410_GPA13_OUT (0<<13) | ||
111 | #define S3C2410_GPA13_nGCS2 (1<<13) | ||
112 | |||
113 | #define S3C2410_GPA14 S3C2410_GPIONO(S3C2410_GPIO_BANKA, 14) | ||
114 | #define S3C2410_GPA14_OUT (0<<14) | ||
115 | #define S3C2410_GPA14_nGCS3 (1<<14) | ||
116 | |||
117 | #define S3C2410_GPA15 S3C2410_GPIONO(S3C2410_GPIO_BANKA, 15) | ||
118 | #define S3C2410_GPA15_OUT (0<<15) | ||
119 | #define S3C2410_GPA15_nGCS4 (1<<15) | ||
120 | |||
121 | #define S3C2410_GPA16 S3C2410_GPIONO(S3C2410_GPIO_BANKA, 16) | ||
122 | #define S3C2410_GPA16_OUT (0<<16) | ||
123 | #define S3C2410_GPA16_nGCS5 (1<<16) | ||
124 | |||
125 | #define S3C2410_GPA17 S3C2410_GPIONO(S3C2410_GPIO_BANKA, 17) | ||
126 | #define S3C2410_GPA17_OUT (0<<17) | ||
127 | #define S3C2410_GPA17_CLE (1<<17) | ||
128 | |||
129 | #define S3C2410_GPA18 S3C2410_GPIONO(S3C2410_GPIO_BANKA, 18) | ||
130 | #define S3C2410_GPA18_OUT (0<<18) | ||
131 | #define S3C2410_GPA18_ALE (1<<18) | ||
132 | |||
133 | #define S3C2410_GPA19 S3C2410_GPIONO(S3C2410_GPIO_BANKA, 19) | ||
134 | #define S3C2410_GPA19_OUT (0<<19) | ||
135 | #define S3C2410_GPA19_nFWE (1<<19) | ||
136 | |||
137 | #define S3C2410_GPA20 S3C2410_GPIONO(S3C2410_GPIO_BANKA, 20) | ||
138 | #define S3C2410_GPA20_OUT (0<<20) | ||
139 | #define S3C2410_GPA20_nFRE (1<<20) | ||
140 | |||
141 | #define S3C2410_GPA21 S3C2410_GPIONO(S3C2410_GPIO_BANKA, 21) | ||
142 | #define S3C2410_GPA21_OUT (0<<21) | ||
143 | #define S3C2410_GPA21_nRSTOUT (1<<21) | ||
144 | |||
145 | #define S3C2410_GPA22 S3C2410_GPIONO(S3C2410_GPIO_BANKA, 22) | ||
146 | #define S3C2410_GPA22_OUT (0<<22) | ||
147 | #define S3C2410_GPA22_nFCE (1<<22) | ||
148 | |||
149 | /* 0x08 and 0x0c are reserved */ | ||
150 | |||
151 | /* GPB is 10 IO pins, each configured by 2 bits each in GPBCON. | ||
152 | * 00 = input, 01 = output, 10=special function, 11=reserved | ||
153 | * bit 0,1 = pin 0, 2,3= pin 1... | ||
154 | * | ||
155 | * CPBUP = pull up resistor control, 1=disabled, 0=enabled | ||
156 | */ | ||
157 | |||
158 | #define S3C2410_GPBCON S3C2410_GPIOREG(0x10) | ||
159 | #define S3C2410_GPBDAT S3C2410_GPIOREG(0x14) | ||
160 | #define S3C2410_GPBUP S3C2410_GPIOREG(0x18) | ||
161 | |||
162 | /* no i/o pin in port b can have value 3! */ | ||
163 | |||
164 | #define S3C2410_GPB0 S3C2410_GPIONO(S3C2410_GPIO_BANKB, 0) | ||
165 | #define S3C2410_GPB0_INP (0x00 << 0) | ||
166 | #define S3C2410_GPB0_OUTP (0x01 << 0) | ||
167 | #define S3C2410_GPB0_TOUT0 (0x02 << 0) | ||
168 | |||
169 | #define S3C2410_GPB1 S3C2410_GPIONO(S3C2410_GPIO_BANKB, 1) | ||
170 | #define S3C2410_GPB1_INP (0x00 << 2) | ||
171 | #define S3C2410_GPB1_OUTP (0x01 << 2) | ||
172 | #define S3C2410_GPB1_TOUT1 (0x02 << 2) | ||
173 | |||
174 | #define S3C2410_GPB2 S3C2410_GPIONO(S3C2410_GPIO_BANKB, 2) | ||
175 | #define S3C2410_GPB2_INP (0x00 << 4) | ||
176 | #define S3C2410_GPB2_OUTP (0x01 << 4) | ||
177 | #define S3C2410_GPB2_TOUT2 (0x02 << 4) | ||
178 | |||
179 | #define S3C2410_GPB3 S3C2410_GPIONO(S3C2410_GPIO_BANKB, 3) | ||
180 | #define S3C2410_GPB3_INP (0x00 << 6) | ||
181 | #define S3C2410_GPB3_OUTP (0x01 << 6) | ||
182 | #define S3C2410_GPB3_TOUT3 (0x02 << 6) | ||
183 | |||
184 | #define S3C2410_GPB4 S3C2410_GPIONO(S3C2410_GPIO_BANKB, 4) | ||
185 | #define S3C2410_GPB4_INP (0x00 << 8) | ||
186 | #define S3C2410_GPB4_OUTP (0x01 << 8) | ||
187 | #define S3C2410_GPB4_TCLK0 (0x02 << 8) | ||
188 | #define S3C2410_GPB4_MASK (0x03 << 8) | ||
189 | |||
190 | #define S3C2410_GPB5 S3C2410_GPIONO(S3C2410_GPIO_BANKB, 5) | ||
191 | #define S3C2410_GPB5_INP (0x00 << 10) | ||
192 | #define S3C2410_GPB5_OUTP (0x01 << 10) | ||
193 | #define S3C2410_GPB5_nXBACK (0x02 << 10) | ||
194 | |||
195 | #define S3C2410_GPB6 S3C2410_GPIONO(S3C2410_GPIO_BANKB, 6) | ||
196 | #define S3C2410_GPB6_INP (0x00 << 12) | ||
197 | #define S3C2410_GPB6_OUTP (0x01 << 12) | ||
198 | #define S3C2410_GPB6_nXBREQ (0x02 << 12) | ||
199 | |||
200 | #define S3C2410_GPB7 S3C2410_GPIONO(S3C2410_GPIO_BANKB, 7) | ||
201 | #define S3C2410_GPB7_INP (0x00 << 14) | ||
202 | #define S3C2410_GPB7_OUTP (0x01 << 14) | ||
203 | #define S3C2410_GPB7_nXDACK1 (0x02 << 14) | ||
204 | |||
205 | #define S3C2410_GPB8 S3C2410_GPIONO(S3C2410_GPIO_BANKB, 8) | ||
206 | #define S3C2410_GPB8_INP (0x00 << 16) | ||
207 | #define S3C2410_GPB8_OUTP (0x01 << 16) | ||
208 | #define S3C2410_GPB8_nXDREQ1 (0x02 << 16) | ||
209 | |||
210 | #define S3C2410_GPB9 S3C2410_GPIONO(S3C2410_GPIO_BANKB, 9) | ||
211 | #define S3C2410_GPB9_INP (0x00 << 18) | ||
212 | #define S3C2410_GPB9_OUTP (0x01 << 18) | ||
213 | #define S3C2410_GPB9_nXDACK0 (0x02 << 18) | ||
214 | |||
215 | #define S3C2410_GPB10 S3C2410_GPIONO(S3C2410_GPIO_BANKB, 10) | ||
216 | #define S3C2410_GPB10_INP (0x00 << 20) | ||
217 | #define S3C2410_GPB10_OUTP (0x01 << 20) | ||
218 | #define S3C2410_GPB10_nXDRE0 (0x02 << 20) | ||
219 | |||
220 | /* Port C consits of 16 GPIO/Special function | ||
221 | * | ||
222 | * almost identical setup to port b, but the special functions are mostly | ||
223 | * to do with the video system's sync/etc. | ||
224 | */ | ||
225 | |||
226 | #define S3C2410_GPCCON S3C2410_GPIOREG(0x20) | ||
227 | #define S3C2410_GPCDAT S3C2410_GPIOREG(0x24) | ||
228 | #define S3C2410_GPCUP S3C2410_GPIOREG(0x28) | ||
229 | |||
230 | #define S3C2410_GPC0 S3C2410_GPIONO(S3C2410_GPIO_BANKC, 0) | ||
231 | #define S3C2410_GPC0_INP (0x00 << 0) | ||
232 | #define S3C2410_GPC0_OUTP (0x01 << 0) | ||
233 | #define S3C2410_GPC0_LEND (0x02 << 0) | ||
234 | |||
235 | #define S3C2410_GPC1 S3C2410_GPIONO(S3C2410_GPIO_BANKC, 1) | ||
236 | #define S3C2410_GPC1_INP (0x00 << 2) | ||
237 | #define S3C2410_GPC1_OUTP (0x01 << 2) | ||
238 | #define S3C2410_GPC1_VCLK (0x02 << 2) | ||
239 | |||
240 | #define S3C2410_GPC2 S3C2410_GPIONO(S3C2410_GPIO_BANKC, 2) | ||
241 | #define S3C2410_GPC2_INP (0x00 << 4) | ||
242 | #define S3C2410_GPC2_OUTP (0x01 << 4) | ||
243 | #define S3C2410_GPC2_VLINE (0x02 << 4) | ||
244 | |||
245 | #define S3C2410_GPC3 S3C2410_GPIONO(S3C2410_GPIO_BANKC, 3) | ||
246 | #define S3C2410_GPC3_INP (0x00 << 6) | ||
247 | #define S3C2410_GPC3_OUTP (0x01 << 6) | ||
248 | #define S3C2410_GPC3_VFRAME (0x02 << 6) | ||
249 | |||
250 | #define S3C2410_GPC4 S3C2410_GPIONO(S3C2410_GPIO_BANKC, 4) | ||
251 | #define S3C2410_GPC4_INP (0x00 << 8) | ||
252 | #define S3C2410_GPC4_OUTP (0x01 << 8) | ||
253 | #define S3C2410_GPC4_VM (0x02 << 8) | ||
254 | |||
255 | #define S3C2410_GPC5 S3C2410_GPIONO(S3C2410_GPIO_BANKC, 5) | ||
256 | #define S3C2410_GPC5_INP (0x00 << 10) | ||
257 | #define S3C2410_GPC5_OUTP (0x01 << 10) | ||
258 | #define S3C2410_GPC5_LCDVF0 (0x02 << 10) | ||
259 | |||
260 | #define S3C2410_GPC6 S3C2410_GPIONO(S3C2410_GPIO_BANKC, 6) | ||
261 | #define S3C2410_GPC6_INP (0x00 << 12) | ||
262 | #define S3C2410_GPC6_OUTP (0x01 << 12) | ||
263 | #define S3C2410_GPC6_LCDVF1 (0x02 << 12) | ||
264 | |||
265 | #define S3C2410_GPC7 S3C2410_GPIONO(S3C2410_GPIO_BANKC, 7) | ||
266 | #define S3C2410_GPC7_INP (0x00 << 14) | ||
267 | #define S3C2410_GPC7_OUTP (0x01 << 14) | ||
268 | #define S3C2410_GPC7_LCDVF2 (0x02 << 14) | ||
269 | |||
270 | #define S3C2410_GPC8 S3C2410_GPIONO(S3C2410_GPIO_BANKC, 8) | ||
271 | #define S3C2410_GPC8_INP (0x00 << 16) | ||
272 | #define S3C2410_GPC8_OUTP (0x01 << 16) | ||
273 | #define S3C2410_GPC8_VD0 (0x02 << 16) | ||
274 | |||
275 | #define S3C2410_GPC9 S3C2410_GPIONO(S3C2410_GPIO_BANKC, 9) | ||
276 | #define S3C2410_GPC9_INP (0x00 << 18) | ||
277 | #define S3C2410_GPC9_OUTP (0x01 << 18) | ||
278 | #define S3C2410_GPC9_VD1 (0x02 << 18) | ||
279 | |||
280 | #define S3C2410_GPC10 S3C2410_GPIONO(S3C2410_GPIO_BANKC, 10) | ||
281 | #define S3C2410_GPC10_INP (0x00 << 20) | ||
282 | #define S3C2410_GPC10_OUTP (0x01 << 20) | ||
283 | #define S3C2410_GPC10_VD2 (0x02 << 20) | ||
284 | |||
285 | #define S3C2410_GPC11 S3C2410_GPIONO(S3C2410_GPIO_BANKC, 11) | ||
286 | #define S3C2410_GPC11_INP (0x00 << 22) | ||
287 | #define S3C2410_GPC11_OUTP (0x01 << 22) | ||
288 | #define S3C2410_GPC11_VD3 (0x02 << 22) | ||
289 | |||
290 | #define S3C2410_GPC12 S3C2410_GPIONO(S3C2410_GPIO_BANKC, 12) | ||
291 | #define S3C2410_GPC12_INP (0x00 << 24) | ||
292 | #define S3C2410_GPC12_OUTP (0x01 << 24) | ||
293 | #define S3C2410_GPC12_VD4 (0x02 << 24) | ||
294 | |||
295 | #define S3C2410_GPC13 S3C2410_GPIONO(S3C2410_GPIO_BANKC, 13) | ||
296 | #define S3C2410_GPC13_INP (0x00 << 26) | ||
297 | #define S3C2410_GPC13_OUTP (0x01 << 26) | ||
298 | #define S3C2410_GPC13_VD5 (0x02 << 26) | ||
299 | |||
300 | #define S3C2410_GPC14 S3C2410_GPIONO(S3C2410_GPIO_BANKC, 14) | ||
301 | #define S3C2410_GPC14_INP (0x00 << 28) | ||
302 | #define S3C2410_GPC14_OUTP (0x01 << 28) | ||
303 | #define S3C2410_GPC14_VD6 (0x02 << 28) | ||
304 | |||
305 | #define S3C2410_GPC15 S3C2410_GPIONO(S3C2410_GPIO_BANKC, 15) | ||
306 | #define S3C2410_GPC15_INP (0x00 << 30) | ||
307 | #define S3C2410_GPC15_OUTP (0x01 << 30) | ||
308 | #define S3C2410_GPC15_VD7 (0x02 << 30) | ||
309 | |||
310 | /* Port D consists of 16 GPIO/Special function | ||
311 | * | ||
312 | * almost identical setup to port b, but the special functions are mostly | ||
313 | * to do with the video system's data. | ||
314 | */ | ||
315 | |||
316 | #define S3C2410_GPDCON S3C2410_GPIOREG(0x30) | ||
317 | #define S3C2410_GPDDAT S3C2410_GPIOREG(0x34) | ||
318 | #define S3C2410_GPDUP S3C2410_GPIOREG(0x38) | ||
319 | |||
320 | #define S3C2410_GPD0 S3C2410_GPIONO(S3C2410_GPIO_BANKD, 0) | ||
321 | #define S3C2410_GPD0_INP (0x00 << 0) | ||
322 | #define S3C2410_GPD0_OUTP (0x01 << 0) | ||
323 | #define S3C2410_GPD0_VD8 (0x02 << 0) | ||
324 | |||
325 | #define S3C2410_GPD1 S3C2410_GPIONO(S3C2410_GPIO_BANKD, 1) | ||
326 | #define S3C2410_GPD1_INP (0x00 << 2) | ||
327 | #define S3C2410_GPD1_OUTP (0x01 << 2) | ||
328 | #define S3C2410_GPD1_VD9 (0x02 << 2) | ||
329 | |||
330 | #define S3C2410_GPD2 S3C2410_GPIONO(S3C2410_GPIO_BANKD, 2) | ||
331 | #define S3C2410_GPD2_INP (0x00 << 4) | ||
332 | #define S3C2410_GPD2_OUTP (0x01 << 4) | ||
333 | #define S3C2410_GPD2_VD10 (0x02 << 4) | ||
334 | |||
335 | #define S3C2410_GPD3 S3C2410_GPIONO(S3C2410_GPIO_BANKD, 3) | ||
336 | #define S3C2410_GPD3_INP (0x00 << 6) | ||
337 | #define S3C2410_GPD3_OUTP (0x01 << 6) | ||
338 | #define S3C2410_GPD3_VD11 (0x02 << 6) | ||
339 | |||
340 | #define S3C2410_GPD4 S3C2410_GPIONO(S3C2410_GPIO_BANKD, 4) | ||
341 | #define S3C2410_GPD4_INP (0x00 << 8) | ||
342 | #define S3C2410_GPD4_OUTP (0x01 << 8) | ||
343 | #define S3C2410_GPD4_VD12 (0x02 << 8) | ||
344 | |||
345 | #define S3C2410_GPD5 S3C2410_GPIONO(S3C2410_GPIO_BANKD, 5) | ||
346 | #define S3C2410_GPD5_INP (0x00 << 10) | ||
347 | #define S3C2410_GPD5_OUTP (0x01 << 10) | ||
348 | #define S3C2410_GPD5_VD13 (0x02 << 10) | ||
349 | |||
350 | #define S3C2410_GPD6 S3C2410_GPIONO(S3C2410_GPIO_BANKD, 6) | ||
351 | #define S3C2410_GPD6_INP (0x00 << 12) | ||
352 | #define S3C2410_GPD6_OUTP (0x01 << 12) | ||
353 | #define S3C2410_GPD6_VD14 (0x02 << 12) | ||
354 | |||
355 | #define S3C2410_GPD7 S3C2410_GPIONO(S3C2410_GPIO_BANKD, 7) | ||
356 | #define S3C2410_GPD7_INP (0x00 << 14) | ||
357 | #define S3C2410_GPD7_OUTP (0x01 << 14) | ||
358 | #define S3C2410_GPD7_VD15 (0x02 << 14) | ||
359 | |||
360 | #define S3C2410_GPD8 S3C2410_GPIONO(S3C2410_GPIO_BANKD, 8) | ||
361 | #define S3C2410_GPD8_INP (0x00 << 16) | ||
362 | #define S3C2410_GPD8_OUTP (0x01 << 16) | ||
363 | #define S3C2410_GPD8_VD16 (0x02 << 16) | ||
364 | |||
365 | #define S3C2410_GPD9 S3C2410_GPIONO(S3C2410_GPIO_BANKD, 9) | ||
366 | #define S3C2410_GPD9_INP (0x00 << 18) | ||
367 | #define S3C2410_GPD9_OUTP (0x01 << 18) | ||
368 | #define S3C2410_GPD9_VD17 (0x02 << 18) | ||
369 | |||
370 | #define S3C2410_GPD10 S3C2410_GPIONO(S3C2410_GPIO_BANKD, 10) | ||
371 | #define S3C2410_GPD10_INP (0x00 << 20) | ||
372 | #define S3C2410_GPD10_OUTP (0x01 << 20) | ||
373 | #define S3C2410_GPD10_VD18 (0x02 << 20) | ||
374 | |||
375 | #define S3C2410_GPD11 S3C2410_GPIONO(S3C2410_GPIO_BANKD, 11) | ||
376 | #define S3C2410_GPD11_INP (0x00 << 22) | ||
377 | #define S3C2410_GPD11_OUTP (0x01 << 22) | ||
378 | #define S3C2410_GPD11_VD19 (0x02 << 22) | ||
379 | |||
380 | #define S3C2410_GPD12 S3C2410_GPIONO(S3C2410_GPIO_BANKD, 12) | ||
381 | #define S3C2410_GPD12_INP (0x00 << 24) | ||
382 | #define S3C2410_GPD12_OUTP (0x01 << 24) | ||
383 | #define S3C2410_GPD12_VD20 (0x02 << 24) | ||
384 | |||
385 | #define S3C2410_GPD13 S3C2410_GPIONO(S3C2410_GPIO_BANKD, 13) | ||
386 | #define S3C2410_GPD13_INP (0x00 << 26) | ||
387 | #define S3C2410_GPD13_OUTP (0x01 << 26) | ||
388 | #define S3C2410_GPD13_VD21 (0x02 << 26) | ||
389 | |||
390 | #define S3C2410_GPD14 S3C2410_GPIONO(S3C2410_GPIO_BANKD, 14) | ||
391 | #define S3C2410_GPD14_INP (0x00 << 28) | ||
392 | #define S3C2410_GPD14_OUTP (0x01 << 28) | ||
393 | #define S3C2410_GPD14_VD22 (0x02 << 28) | ||
394 | |||
395 | #define S3C2410_GPD15 S3C2410_GPIONO(S3C2410_GPIO_BANKD, 15) | ||
396 | #define S3C2410_GPD15_INP (0x00 << 30) | ||
397 | #define S3C2410_GPD15_OUTP (0x01 << 30) | ||
398 | #define S3C2410_GPD15_VD23 (0x02 << 30) | ||
399 | |||
400 | /* Port E consists of 16 GPIO/Special function | ||
401 | * | ||
402 | * again, the same as port B, but dealing with I2S, SDI, and | ||
403 | * more miscellaneous functions | ||
404 | */ | ||
405 | |||
406 | #define S3C2410_GPECON S3C2410_GPIOREG(0x40) | ||
407 | #define S3C2410_GPEDAT S3C2410_GPIOREG(0x44) | ||
408 | #define S3C2410_GPEUP S3C2410_GPIOREG(0x48) | ||
409 | |||
410 | #define S3C2410_GPE0 S3C2410_GPIONO(S3C2410_GPIO_BANKE, 0) | ||
411 | #define S3C2410_GPE0_INP (0x00 << 0) | ||
412 | #define S3C2410_GPE0_OUTP (0x01 << 0) | ||
413 | #define S3C2410_GPE0_I2SLRCK (0x02 << 0) | ||
414 | #define S3C2410_GPE0_MASK (0x03 << 0) | ||
415 | |||
416 | #define S3C2410_GPE1 S3C2410_GPIONO(S3C2410_GPIO_BANKE, 1) | ||
417 | #define S3C2410_GPE1_INP (0x00 << 2) | ||
418 | #define S3C2410_GPE1_OUTP (0x01 << 2) | ||
419 | #define S3C2410_GPE1_I2SSCLK (0x02 << 2) | ||
420 | #define S3C2410_GPE1_MASK (0x03 << 2) | ||
421 | |||
422 | #define S3C2410_GPE2 S3C2410_GPIONO(S3C2410_GPIO_BANKE, 2) | ||
423 | #define S3C2410_GPE2_INP (0x00 << 4) | ||
424 | #define S3C2410_GPE2_OUTP (0x01 << 4) | ||
425 | #define S3C2410_GPE2_CDCLK (0x02 << 4) | ||
426 | |||
427 | #define S3C2410_GPE3 S3C2410_GPIONO(S3C2410_GPIO_BANKE, 3) | ||
428 | #define S3C2410_GPE3_INP (0x00 << 6) | ||
429 | #define S3C2410_GPE3_OUTP (0x01 << 6) | ||
430 | #define S3C2410_GPE3_I2SSDI (0x02 << 6) | ||
431 | #define S3C2410_GPE3_nSS0 (0x03 << 6) | ||
432 | #define S3C2410_GPE3_MASK (0x03 << 6) | ||
433 | |||
434 | #define S3C2410_GPE4 S3C2410_GPIONO(S3C2410_GPIO_BANKE, 4) | ||
435 | #define S3C2410_GPE4_INP (0x00 << 8) | ||
436 | #define S3C2410_GPE4_OUTP (0x01 << 8) | ||
437 | #define S3C2410_GPE4_I2SSDO (0x02 << 8) | ||
438 | #define S3C2410_GPE4_I2SSDI (0x03 << 8) | ||
439 | #define S3C2410_GPE4_MASK (0x03 << 8) | ||
440 | |||
441 | #define S3C2410_GPE5 S3C2410_GPIONO(S3C2410_GPIO_BANKE, 5) | ||
442 | #define S3C2410_GPE5_INP (0x00 << 10) | ||
443 | #define S3C2410_GPE5_OUTP (0x01 << 10) | ||
444 | #define S3C2410_GPE5_SDCLK (0x02 << 10) | ||
445 | |||
446 | #define S3C2410_GPE6 S3C2410_GPIONO(S3C2410_GPIO_BANKE, 6) | ||
447 | #define S3C2410_GPE6_INP (0x00 << 12) | ||
448 | #define S3C2410_GPE6_OUTP (0x01 << 12) | ||
449 | #define S3C2410_GPE6_SDCMD (0x02 << 12) | ||
450 | |||
451 | #define S3C2410_GPE7 S3C2410_GPIONO(S3C2410_GPIO_BANKE, 7) | ||
452 | #define S3C2410_GPE7_INP (0x00 << 14) | ||
453 | #define S3C2410_GPE7_OUTP (0x01 << 14) | ||
454 | #define S3C2410_GPE7_SDDAT0 (0x02 << 14) | ||
455 | |||
456 | #define S3C2410_GPE8 S3C2410_GPIONO(S3C2410_GPIO_BANKE, 8) | ||
457 | #define S3C2410_GPE8_INP (0x00 << 16) | ||
458 | #define S3C2410_GPE8_OUTP (0x01 << 16) | ||
459 | #define S3C2410_GPE8_SDDAT1 (0x02 << 16) | ||
460 | |||
461 | #define S3C2410_GPE9 S3C2410_GPIONO(S3C2410_GPIO_BANKE, 9) | ||
462 | #define S3C2410_GPE9_INP (0x00 << 18) | ||
463 | #define S3C2410_GPE9_OUTP (0x01 << 18) | ||
464 | #define S3C2410_GPE9_SDDAT2 (0x02 << 18) | ||
465 | |||
466 | #define S3C2410_GPE10 S3C2410_GPIONO(S3C2410_GPIO_BANKE, 10) | ||
467 | #define S3C2410_GPE10_INP (0x00 << 20) | ||
468 | #define S3C2410_GPE10_OUTP (0x01 << 20) | ||
469 | #define S3C2410_GPE10_SDDAT3 (0x02 << 20) | ||
470 | |||
471 | #define S3C2410_GPE11 S3C2410_GPIONO(S3C2410_GPIO_BANKE, 11) | ||
472 | #define S3C2410_GPE11_INP (0x00 << 22) | ||
473 | #define S3C2410_GPE11_OUTP (0x01 << 22) | ||
474 | #define S3C2410_GPE11_SPIMISO0 (0x02 << 22) | ||
475 | |||
476 | #define S3C2410_GPE12 S3C2410_GPIONO(S3C2410_GPIO_BANKE, 12) | ||
477 | #define S3C2410_GPE12_INP (0x00 << 24) | ||
478 | #define S3C2410_GPE12_OUTP (0x01 << 24) | ||
479 | #define S3C2410_GPE12_SPIMOSI0 (0x02 << 24) | ||
480 | |||
481 | #define S3C2410_GPE13 S3C2410_GPIONO(S3C2410_GPIO_BANKE, 13) | ||
482 | #define S3C2410_GPE13_INP (0x00 << 26) | ||
483 | #define S3C2410_GPE13_OUTP (0x01 << 26) | ||
484 | #define S3C2410_GPE13_SPICLK0 (0x02 << 26) | ||
485 | |||
486 | #define S3C2410_GPE14 S3C2410_GPIONO(S3C2410_GPIO_BANKE, 14) | ||
487 | #define S3C2410_GPE14_INP (0x00 << 28) | ||
488 | #define S3C2410_GPE14_OUTP (0x01 << 28) | ||
489 | #define S3C2410_GPE14_IICSCL (0x02 << 28) | ||
490 | #define S3C2410_GPE14_MASK (0x03 << 28) | ||
491 | |||
492 | #define S3C2410_GPE15 S3C2410_GPIONO(S3C2410_GPIO_BANKE, 15) | ||
493 | #define S3C2410_GPE15_INP (0x00 << 30) | ||
494 | #define S3C2410_GPE15_OUTP (0x01 << 30) | ||
495 | #define S3C2410_GPE15_IICSDA (0x02 << 30) | ||
496 | #define S3C2410_GPE15_MASK (0x03 << 30) | ||
497 | |||
498 | #define S3C2440_GPE0_ACSYNC (0x03 << 0) | ||
499 | #define S3C2440_GPE1_ACBITCLK (0x03 << 2) | ||
500 | #define S3C2440_GPE2_ACRESET (0x03 << 4) | ||
501 | #define S3C2440_GPE3_ACIN (0x03 << 6) | ||
502 | #define S3C2440_GPE4_ACOUT (0x03 << 8) | ||
503 | |||
504 | #define S3C2410_GPE_PUPDIS(x) (1<<(x)) | ||
505 | |||
506 | /* Port F consists of 8 GPIO/Special function | ||
507 | * | ||
508 | * GPIO / interrupt inputs | ||
509 | * | ||
510 | * GPFCON has 2 bits for each of the input pins on port F | ||
511 | * 00 = 0 input, 1 output, 2 interrupt (EINT0..7), 3 undefined | ||
512 | * | ||
513 | * pull up works like all other ports. | ||
514 | */ | ||
515 | |||
516 | #define S3C2410_GPFCON S3C2410_GPIOREG(0x50) | ||
517 | #define S3C2410_GPFDAT S3C2410_GPIOREG(0x54) | ||
518 | #define S3C2410_GPFUP S3C2410_GPIOREG(0x58) | ||
519 | |||
520 | #define S3C2410_GPF0 S3C2410_GPIONO(S3C2410_GPIO_BANKF, 0) | ||
521 | #define S3C2410_GPF0_INP (0x00 << 0) | ||
522 | #define S3C2410_GPF0_OUTP (0x01 << 0) | ||
523 | #define S3C2410_GPF0_EINT0 (0x02 << 0) | ||
524 | |||
525 | #define S3C2410_GPF1 S3C2410_GPIONO(S3C2410_GPIO_BANKF, 1) | ||
526 | #define S3C2410_GPF1_INP (0x00 << 2) | ||
527 | #define S3C2410_GPF1_OUTP (0x01 << 2) | ||
528 | #define S3C2410_GPF1_EINT1 (0x02 << 2) | ||
529 | |||
530 | #define S3C2410_GPF2 S3C2410_GPIONO(S3C2410_GPIO_BANKF, 2) | ||
531 | #define S3C2410_GPF2_INP (0x00 << 4) | ||
532 | #define S3C2410_GPF2_OUTP (0x01 << 4) | ||
533 | #define S3C2410_GPF2_EINT2 (0x02 << 4) | ||
534 | |||
535 | #define S3C2410_GPF3 S3C2410_GPIONO(S3C2410_GPIO_BANKF, 3) | ||
536 | #define S3C2410_GPF3_INP (0x00 << 6) | ||
537 | #define S3C2410_GPF3_OUTP (0x01 << 6) | ||
538 | #define S3C2410_GPF3_EINT3 (0x02 << 6) | ||
539 | |||
540 | #define S3C2410_GPF4 S3C2410_GPIONO(S3C2410_GPIO_BANKF, 4) | ||
541 | #define S3C2410_GPF4_INP (0x00 << 8) | ||
542 | #define S3C2410_GPF4_OUTP (0x01 << 8) | ||
543 | #define S3C2410_GPF4_EINT4 (0x02 << 8) | ||
544 | |||
545 | #define S3C2410_GPF5 S3C2410_GPIONO(S3C2410_GPIO_BANKF, 5) | ||
546 | #define S3C2410_GPF5_INP (0x00 << 10) | ||
547 | #define S3C2410_GPF5_OUTP (0x01 << 10) | ||
548 | #define S3C2410_GPF5_EINT5 (0x02 << 10) | ||
549 | |||
550 | #define S3C2410_GPF6 S3C2410_GPIONO(S3C2410_GPIO_BANKF, 6) | ||
551 | #define S3C2410_GPF6_INP (0x00 << 12) | ||
552 | #define S3C2410_GPF6_OUTP (0x01 << 12) | ||
553 | #define S3C2410_GPF6_EINT6 (0x02 << 12) | ||
554 | |||
555 | #define S3C2410_GPF7 S3C2410_GPIONO(S3C2410_GPIO_BANKF, 7) | ||
556 | #define S3C2410_GPF7_INP (0x00 << 14) | ||
557 | #define S3C2410_GPF7_OUTP (0x01 << 14) | ||
558 | #define S3C2410_GPF7_EINT7 (0x02 << 14) | ||
559 | |||
560 | /* Port G consists of 8 GPIO/IRQ/Special function | ||
561 | * | ||
562 | * GPGCON has 2 bits for each of the input pins on port F | ||
563 | * 00 = 0 input, 1 output, 2 interrupt (EINT0..7), 3 special func | ||
564 | * | ||
565 | * pull up works like all other ports. | ||
566 | */ | ||
567 | |||
568 | #define S3C2410_GPGCON S3C2410_GPIOREG(0x60) | ||
569 | #define S3C2410_GPGDAT S3C2410_GPIOREG(0x64) | ||
570 | #define S3C2410_GPGUP S3C2410_GPIOREG(0x68) | ||
571 | |||
572 | #define S3C2410_GPG0 S3C2410_GPIONO(S3C2410_GPIO_BANKG, 0) | ||
573 | #define S3C2410_GPG0_INP (0x00 << 0) | ||
574 | #define S3C2410_GPG0_OUTP (0x01 << 0) | ||
575 | #define S3C2410_GPG0_EINT8 (0x02 << 0) | ||
576 | |||
577 | #define S3C2410_GPG1 S3C2410_GPIONO(S3C2410_GPIO_BANKG, 1) | ||
578 | #define S3C2410_GPG1_INP (0x00 << 2) | ||
579 | #define S3C2410_GPG1_OUTP (0x01 << 2) | ||
580 | #define S3C2410_GPG1_EINT9 (0x02 << 2) | ||
581 | |||
582 | #define S3C2410_GPG2 S3C2410_GPIONO(S3C2410_GPIO_BANKG, 2) | ||
583 | #define S3C2410_GPG2_INP (0x00 << 4) | ||
584 | #define S3C2410_GPG2_OUTP (0x01 << 4) | ||
585 | #define S3C2410_GPG2_EINT10 (0x02 << 4) | ||
586 | |||
587 | #define S3C2410_GPG3 S3C2410_GPIONO(S3C2410_GPIO_BANKG, 3) | ||
588 | #define S3C2410_GPG3_INP (0x00 << 6) | ||
589 | #define S3C2410_GPG3_OUTP (0x01 << 6) | ||
590 | #define S3C2410_GPG3_EINT11 (0x02 << 6) | ||
591 | |||
592 | #define S3C2410_GPG4 S3C2410_GPIONO(S3C2410_GPIO_BANKG, 4) | ||
593 | #define S3C2410_GPG4_INP (0x00 << 8) | ||
594 | #define S3C2410_GPG4_OUTP (0x01 << 8) | ||
595 | #define S3C2410_GPG4_EINT12 (0x02 << 8) | ||
596 | #define S3C2410_GPG4_LCDPWREN (0x03 << 8) | ||
597 | |||
598 | #define S3C2410_GPG5 S3C2410_GPIONO(S3C2410_GPIO_BANKG, 5) | ||
599 | #define S3C2410_GPG5_INP (0x00 << 10) | ||
600 | #define S3C2410_GPG5_OUTP (0x01 << 10) | ||
601 | #define S3C2410_GPG5_EINT13 (0x02 << 10) | ||
602 | #define S3C2410_GPG5_SPIMISO1 (0x03 << 10) | ||
603 | |||
604 | #define S3C2410_GPG6 S3C2410_GPIONO(S3C2410_GPIO_BANKG, 6) | ||
605 | #define S3C2410_GPG6_INP (0x00 << 12) | ||
606 | #define S3C2410_GPG6_OUTP (0x01 << 12) | ||
607 | #define S3C2410_GPG6_EINT14 (0x02 << 12) | ||
608 | #define S3C2410_GPG6_SPIMOSI1 (0x03 << 12) | ||
609 | |||
610 | #define S3C2410_GPG7 S3C2410_GPIONO(S3C2410_GPIO_BANKG, 7) | ||
611 | #define S3C2410_GPG7_INP (0x00 << 14) | ||
612 | #define S3C2410_GPG7_OUTP (0x01 << 14) | ||
613 | #define S3C2410_GPG7_EINT15 (0x02 << 14) | ||
614 | #define S3C2410_GPG7_SPICLK1 (0x03 << 14) | ||
615 | |||
616 | #define S3C2410_GPG8 S3C2410_GPIONO(S3C2410_GPIO_BANKG, 8) | ||
617 | #define S3C2410_GPG8_INP (0x00 << 16) | ||
618 | #define S3C2410_GPG8_OUTP (0x01 << 16) | ||
619 | #define S3C2410_GPG8_EINT16 (0x02 << 16) | ||
620 | |||
621 | #define S3C2410_GPG9 S3C2410_GPIONO(S3C2410_GPIO_BANKG, 9) | ||
622 | #define S3C2410_GPG9_INP (0x00 << 18) | ||
623 | #define S3C2410_GPG9_OUTP (0x01 << 18) | ||
624 | #define S3C2410_GPG9_EINT17 (0x02 << 18) | ||
625 | |||
626 | #define S3C2410_GPG10 S3C2410_GPIONO(S3C2410_GPIO_BANKG, 10) | ||
627 | #define S3C2410_GPG10_INP (0x00 << 20) | ||
628 | #define S3C2410_GPG10_OUTP (0x01 << 20) | ||
629 | #define S3C2410_GPG10_EINT18 (0x02 << 20) | ||
630 | |||
631 | #define S3C2410_GPG11 S3C2410_GPIONO(S3C2410_GPIO_BANKG, 11) | ||
632 | #define S3C2410_GPG11_INP (0x00 << 22) | ||
633 | #define S3C2410_GPG11_OUTP (0x01 << 22) | ||
634 | #define S3C2410_GPG11_EINT19 (0x02 << 22) | ||
635 | #define S3C2410_GPG11_TCLK1 (0x03 << 22) | ||
636 | |||
637 | #define S3C2410_GPG12 S3C2410_GPIONO(S3C2410_GPIO_BANKG, 12) | ||
638 | #define S3C2410_GPG12_INP (0x00 << 24) | ||
639 | #define S3C2410_GPG12_OUTP (0x01 << 24) | ||
640 | #define S3C2410_GPG12_EINT20 (0x02 << 24) | ||
641 | #define S3C2410_GPG12_XMON (0x03 << 24) | ||
642 | |||
643 | #define S3C2410_GPG13 S3C2410_GPIONO(S3C2410_GPIO_BANKG, 13) | ||
644 | #define S3C2410_GPG13_INP (0x00 << 26) | ||
645 | #define S3C2410_GPG13_OUTP (0x01 << 26) | ||
646 | #define S3C2410_GPG13_EINT21 (0x02 << 26) | ||
647 | #define S3C2410_GPG13_nXPON (0x03 << 26) | ||
648 | |||
649 | #define S3C2410_GPG14 S3C2410_GPIONO(S3C2410_GPIO_BANKG, 14) | ||
650 | #define S3C2410_GPG14_INP (0x00 << 28) | ||
651 | #define S3C2410_GPG14_OUTP (0x01 << 28) | ||
652 | #define S3C2410_GPG14_EINT22 (0x02 << 28) | ||
653 | #define S3C2410_GPG14_YMON (0x03 << 28) | ||
654 | |||
655 | #define S3C2410_GPG15 S3C2410_GPIONO(S3C2410_GPIO_BANKG, 15) | ||
656 | #define S3C2410_GPG15_INP (0x00 << 30) | ||
657 | #define S3C2410_GPG15_OUTP (0x01 << 30) | ||
658 | #define S3C2410_GPG15_EINT23 (0x02 << 30) | ||
659 | #define S3C2410_GPG15_nYPON (0x03 << 30) | ||
660 | |||
661 | |||
662 | #define S3C2410_GPG_PUPDIS(x) (1<<(x)) | ||
663 | |||
664 | /* Port H consists of11 GPIO/serial/Misc pins | ||
665 | * | ||
666 | * GPGCON has 2 bits for each of the input pins on port F | ||
667 | * 00 = 0 input, 1 output, 2 interrupt (EINT0..7), 3 special func | ||
668 | * | ||
669 | * pull up works like all other ports. | ||
670 | */ | ||
671 | |||
672 | #define S3C2410_GPHCON S3C2410_GPIOREG(0x70) | ||
673 | #define S3C2410_GPHDAT S3C2410_GPIOREG(0x74) | ||
674 | #define S3C2410_GPHUP S3C2410_GPIOREG(0x78) | ||
675 | |||
676 | #define S3C2410_GPH0 S3C2410_GPIONO(S3C2410_GPIO_BANKH, 0) | ||
677 | #define S3C2410_GPH0_INP (0x00 << 0) | ||
678 | #define S3C2410_GPH0_OUTP (0x01 << 0) | ||
679 | #define S3C2410_GPH0_nCTS0 (0x02 << 0) | ||
680 | |||
681 | #define S3C2410_GPH1 S3C2410_GPIONO(S3C2410_GPIO_BANKH, 1) | ||
682 | #define S3C2410_GPH1_INP (0x00 << 2) | ||
683 | #define S3C2410_GPH1_OUTP (0x01 << 2) | ||
684 | #define S3C2410_GPH1_nRTS0 (0x02 << 2) | ||
685 | |||
686 | #define S3C2410_GPH2 S3C2410_GPIONO(S3C2410_GPIO_BANKH, 2) | ||
687 | #define S3C2410_GPH2_INP (0x00 << 4) | ||
688 | #define S3C2410_GPH2_OUTP (0x01 << 4) | ||
689 | #define S3C2410_GPH2_TXD0 (0x02 << 4) | ||
690 | |||
691 | #define S3C2410_GPH3 S3C2410_GPIONO(S3C2410_GPIO_BANKH, 3) | ||
692 | #define S3C2410_GPH3_INP (0x00 << 6) | ||
693 | #define S3C2410_GPH3_OUTP (0x01 << 6) | ||
694 | #define S3C2410_GPH3_RXD0 (0x02 << 6) | ||
695 | |||
696 | #define S3C2410_GPH4 S3C2410_GPIONO(S3C2410_GPIO_BANKH, 4) | ||
697 | #define S3C2410_GPH4_INP (0x00 << 8) | ||
698 | #define S3C2410_GPH4_OUTP (0x01 << 8) | ||
699 | #define S3C2410_GPH4_TXD1 (0x02 << 8) | ||
700 | |||
701 | #define S3C2410_GPH5 S3C2410_GPIONO(S3C2410_GPIO_BANKH, 5) | ||
702 | #define S3C2410_GPH5_INP (0x00 << 10) | ||
703 | #define S3C2410_GPH5_OUTP (0x01 << 10) | ||
704 | #define S3C2410_GPH5_RXD1 (0x02 << 10) | ||
705 | |||
706 | #define S3C2410_GPH6 S3C2410_GPIONO(S3C2410_GPIO_BANKH, 6) | ||
707 | #define S3C2410_GPH6_INP (0x00 << 12) | ||
708 | #define S3C2410_GPH6_OUTP (0x01 << 12) | ||
709 | #define S3C2410_GPH6_TXD2 (0x02 << 12) | ||
710 | #define S3C2410_GPH6_nRTS1 (0x03 << 12) | ||
711 | |||
712 | #define S3C2410_GPH7 S3C2410_GPIONO(S3C2410_GPIO_BANKH, 7) | ||
713 | #define S3C2410_GPH7_INP (0x00 << 14) | ||
714 | #define S3C2410_GPH7_OUTP (0x01 << 14) | ||
715 | #define S3C2410_GPH7_RXD2 (0x02 << 14) | ||
716 | #define S3C2410_GPH7_nCTS1 (0x03 << 14) | ||
717 | |||
718 | #define S3C2410_GPH8 S3C2410_GPIONO(S3C2410_GPIO_BANKH, 8) | ||
719 | #define S3C2410_GPH8_INP (0x00 << 16) | ||
720 | #define S3C2410_GPH8_OUTP (0x01 << 16) | ||
721 | #define S3C2410_GPH8_UCLK (0x02 << 16) | ||
722 | |||
723 | #define S3C2410_GPH9 S3C2410_GPIONO(S3C2410_GPIO_BANKH, 9) | ||
724 | #define S3C2410_GPH9_INP (0x00 << 18) | ||
725 | #define S3C2410_GPH9_OUTP (0x01 << 18) | ||
726 | #define S3C2410_GPH9_CLKOUT0 (0x02 << 18) | ||
727 | |||
728 | #define S3C2410_GPH10 S3C2410_GPIONO(S3C2410_GPIO_BANKH, 10) | ||
729 | #define S3C2410_GPH10_INP (0x00 << 20) | ||
730 | #define S3C2410_GPH10_OUTP (0x01 << 20) | ||
731 | #define S3C2410_GPH10_CLKOUT1 (0x02 << 20) | ||
732 | |||
733 | /* miscellaneous control */ | ||
734 | |||
735 | #define S3C2410_MISCCR S3C2410_GPIOREG(0x80) | ||
736 | #define S3C2410_DCLKCON S3C2410_GPIOREG(0x84) | ||
737 | |||
738 | /* see clock.h for dclk definitions */ | ||
739 | |||
740 | /* pullup control on databus */ | ||
741 | #define S3C2410_MISCCR_SPUCR_HEN (0) | ||
742 | #define S3C2410_MISCCR_SPUCR_HDIS (1<<0) | ||
743 | #define S3C2410_MISCCR_SPUCR_LEN (0) | ||
744 | #define S3C2410_MISCCR_SPUCR_LDIS (1<<1) | ||
745 | |||
746 | #define S3C2410_MISCCR_USBDEV (0) | ||
747 | #define S3C2410_MISCCR_USBHOST (1<<3) | ||
748 | |||
749 | #define S3C2410_MISCCR_CLK0_MPLL (0<<4) | ||
750 | #define S3C2410_MISCCR_CLK0_UPLL (1<<4) | ||
751 | #define S3C2410_MISCCR_CLK0_FCLK (2<<4) | ||
752 | #define S3C2410_MISCCR_CLK0_HCLK (3<<4) | ||
753 | #define S3C2410_MISCCR_CLK0_PCLK (4<<4) | ||
754 | #define S3C2410_MISCCR_CLK0_DCLK0 (5<<4) | ||
755 | |||
756 | #define S3C2410_MISCCR_CLK1_MPLL (0<<8) | ||
757 | #define S3C2410_MISCCR_CLK1_UPLL (1<<8) | ||
758 | #define S3C2410_MISCCR_CLK1_FCLK (2<<8) | ||
759 | #define S3C2410_MISCCR_CLK1_HCLK (3<<8) | ||
760 | #define S3C2410_MISCCR_CLK1_PCLK (4<<8) | ||
761 | #define S3C2410_MISCCR_CLK1_DCLK1 (5<<8) | ||
762 | |||
763 | #define S3C2410_MISCCR_USBSUSPND0 (1<<12) | ||
764 | #define S3C2410_MISCCR_USBSUSPND1 (1<<13) | ||
765 | |||
766 | #define S3C2410_MISCCR_nRSTCON (1<<16) | ||
767 | |||
768 | #define S3C2410_MISCCR_nEN_SCLK0 (1<<17) | ||
769 | #define S3C2410_MISCCR_nEN_SCLK1 (1<<18) | ||
770 | #define S3C2410_MISCCR_nEN_SCLKE (1<<19) | ||
771 | #define S3C2410_MISCCR_SDSLEEP (7<<17) | ||
772 | |||
773 | /* external interrupt control... */ | ||
774 | /* S3C2410_EXTINT0 -> irq sense control for EINT0..EINT7 | ||
775 | * S3C2410_EXTINT1 -> irq sense control for EINT8..EINT15 | ||
776 | * S3C2410_EXTINT2 -> irq sense control for EINT16..EINT23 | ||
777 | * | ||
778 | * note S3C2410_EXTINT2 has filtering options for EINT16..EINT23 | ||
779 | * | ||
780 | * Samsung datasheet p9-25 | ||
781 | */ | ||
782 | |||
783 | #define S3C2410_EXTINT0 S3C2410_GPIOREG(0x88) | ||
784 | #define S3C2410_EXTINT1 S3C2410_GPIOREG(0x8C) | ||
785 | #define S3C2410_EXTINT2 S3C2410_GPIOREG(0x90) | ||
786 | |||
787 | /* values for S3C2410_EXTINT0/1/2 */ | ||
788 | #define S3C2410_EXTINT_LOWLEV (0x00) | ||
789 | #define S3C2410_EXTINT_HILEV (0x01) | ||
790 | #define S3C2410_EXTINT_FALLEDGE (0x02) | ||
791 | #define S3C2410_EXTINT_RISEEDGE (0x04) | ||
792 | #define S3C2410_EXTINT_BOTHEDGE (0x06) | ||
793 | |||
794 | /* interrupt filtering conrrol for EINT16..EINT23 */ | ||
795 | #define S3C2410_EINFLT0 S3C2410_GPIOREG(0x94) | ||
796 | #define S3C2410_EINFLT1 S3C2410_GPIOREG(0x98) | ||
797 | #define S3C2410_EINFLT2 S3C2410_GPIOREG(0x9C) | ||
798 | #define S3C2410_EINFLT3 S3C2410_GPIOREG(0xA0) | ||
799 | |||
800 | /* values for interrupt filtering */ | ||
801 | #define S3C2410_EINTFLT_PCLK (0x00) | ||
802 | #define S3C2410_EINTFLT_EXTCLK (1<<7) | ||
803 | #define S3C2410_EINTFLT_WIDTHMSK(x) ((x) & 0x3f) | ||
804 | |||
805 | /* removed EINTxxxx defs from here, not meant for this */ | ||
806 | |||
807 | /* GSTATUS have miscellaneous information in them | ||
808 | * | ||
809 | */ | ||
810 | |||
811 | #define S3C2410_GSTATUS0 S3C2410_GPIOREG(0x0AC) | ||
812 | #define S3C2410_GSTATUS1 S3C2410_GPIOREG(0x0B0) | ||
813 | #define S3C2410_GSTATUS2 S3C2410_GPIOREG(0x0B4) | ||
814 | #define S3C2410_GSTATUS3 S3C2410_GPIOREG(0x0B8) | ||
815 | #define S3C2410_GSTATUS4 S3C2410_GPIOREG(0x0BC) | ||
816 | |||
817 | #define S3C2410_GSTATUS0_nWAIT (1<<3) | ||
818 | #define S3C2410_GSTATUS0_NCON (1<<2) | ||
819 | #define S3C2410_GSTATUS0_RnB (1<<1) | ||
820 | #define S3C2410_GSTATUS0_nBATTFLT (1<<0) | ||
821 | |||
822 | #define S3C2410_GSTATUS1_IDMASK (0xffff0000) | ||
823 | #define S3C2410_GSTATUS1_2410 (0x32410000) | ||
824 | #define S3C2410_GSTATUS1_2440 (0x32440000) | ||
825 | |||
826 | #define S3C2410_GSTATUS2_WTRESET (1<<2) | ||
827 | #define S3C2410_GSTATUS2_OFFRESET (1<<1) | ||
828 | #define S3C2410_GSTATUS2_PONRESET (1<<0) | ||
829 | |||
830 | #endif /* __ASM_ARCH_REGS_GPIO_H */ | ||
831 | |||
diff --git a/include/asm-arm/arch-s3c2410/regs-gpioj.h b/include/asm-arm/arch-s3c2410/regs-gpioj.h new file mode 100644 index 000000000000..3ad2324acc39 --- /dev/null +++ b/include/asm-arm/arch-s3c2410/regs-gpioj.h | |||
@@ -0,0 +1,101 @@ | |||
1 | /* linux/include/asm/hardware/s3c2410/regs-gpioj.h | ||
2 | * | ||
3 | * Copyright (c) 2004 Simtec Electronics <linux@simtec.co.uk> | ||
4 | * http://www.simtec.co.uk/products/SWLINUX/ | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | * S3C2440 GPIO J register definitions | ||
11 | * | ||
12 | * Changelog: | ||
13 | * 11-Aug-2004 BJD Created file | ||
14 | * 10-Feb-2005 BJD Fix GPJ12 definition (Guillaume Gourat) | ||
15 | */ | ||
16 | |||
17 | |||
18 | #ifndef __ASM_ARCH_REGS_GPIOJ_H | ||
19 | #define __ASM_ARCH_REGS_GPIOJ_H "gpioj" | ||
20 | |||
21 | /* Port J consists of 13 GPIO/Camera pins | ||
22 | * | ||
23 | * GPJCON has 2 bits for each of the input pins on port F | ||
24 | * 00 = 0 input, 1 output, 2 Camera | ||
25 | * | ||
26 | * pull up works like all other ports. | ||
27 | */ | ||
28 | |||
29 | #define S3C2440_GPIO_BANKJ (416) | ||
30 | |||
31 | #define S3C2440_GPJCON S3C2410_GPIOREG(0xd0) | ||
32 | #define S3C2440_GPJDAT S3C2410_GPIOREG(0xd4) | ||
33 | #define S3C2440_GPJUP S3C2410_GPIOREG(0xd8) | ||
34 | |||
35 | #define S3C2440_GPJ0 S3C2410_GPIONO(S3C2440_GPIO_BANKJ, 0) | ||
36 | #define S3C2440_GPJ0_INP (0x00 << 0) | ||
37 | #define S3C2440_GPJ0_OUTP (0x01 << 0) | ||
38 | #define S3C2440_GPJ0_CAMDATA0 (0x02 << 0) | ||
39 | |||
40 | #define S3C2440_GPJ1 S3C2410_GPIONO(S3C2440_GPIO_BANKJ, 1) | ||
41 | #define S3C2440_GPJ1_INP (0x00 << 2) | ||
42 | #define S3C2440_GPJ1_OUTP (0x01 << 2) | ||
43 | #define S3C2440_GPJ1_CAMDATA1 (0x02 << 2) | ||
44 | |||
45 | #define S3C2440_GPJ2 S3C2410_GPIONO(S3C2440_GPIO_BANKJ, 2) | ||
46 | #define S3C2440_GPJ2_INP (0x00 << 4) | ||
47 | #define S3C2440_GPJ2_OUTP (0x01 << 4) | ||
48 | #define S3C2440_GPJ2_CAMDATA2 (0x02 << 4) | ||
49 | |||
50 | #define S3C2440_GPJ3 S3C2410_GPIONO(S3C2440_GPIO_BANKJ, 3) | ||
51 | #define S3C2440_GPJ3_INP (0x00 << 6) | ||
52 | #define S3C2440_GPJ3_OUTP (0x01 << 6) | ||
53 | #define S3C2440_GPJ3_CAMDATA3 (0x02 << 6) | ||
54 | |||
55 | #define S3C2440_GPJ4 S3C2410_GPIONO(S3C2440_GPIO_BANKJ, 4) | ||
56 | #define S3C2440_GPJ4_INP (0x00 << 8) | ||
57 | #define S3C2440_GPJ4_OUTP (0x01 << 8) | ||
58 | #define S3C2440_GPJ4_CAMDATA4 (0x02 << 8) | ||
59 | |||
60 | #define S3C2440_GPJ5 S3C2410_GPIONO(S3C2440_GPIO_BANKJ, 5) | ||
61 | #define S3C2440_GPJ5_INP (0x00 << 10) | ||
62 | #define S3C2440_GPJ5_OUTP (0x01 << 10) | ||
63 | #define S3C2440_GPJ5_CAMDATA5 (0x02 << 10) | ||
64 | |||
65 | #define S3C2440_GPJ6 S3C2410_GPIONO(S3C2440_GPIO_BANKJ, 6) | ||
66 | #define S3C2440_GPJ6_INP (0x00 << 12) | ||
67 | #define S3C2440_GPJ6_OUTP (0x01 << 12) | ||
68 | #define S3C2440_GPJ6_CAMDATA6 (0x02 << 12) | ||
69 | |||
70 | #define S3C2440_GPJ7 S3C2410_GPIONO(S3C2440_GPIO_BANKJ, 7) | ||
71 | #define S3C2440_GPJ7_INP (0x00 << 14) | ||
72 | #define S3C2440_GPJ7_OUTP (0x01 << 14) | ||
73 | #define S3C2440_GPJ7_CAMDATA7 (0x02 << 14) | ||
74 | |||
75 | #define S3C2440_GPJ8 S3C2410_GPIONO(S3C2440_GPIO_BANKJ, 8) | ||
76 | #define S3C2440_GPJ8_INP (0x00 << 16) | ||
77 | #define S3C2440_GPJ8_OUTP (0x01 << 16) | ||
78 | #define S3C2440_GPJ8_CAMPCLK (0x02 << 16) | ||
79 | |||
80 | #define S3C2440_GPJ9 S3C2410_GPIONO(S3C2440_GPIO_BANKJ, 9) | ||
81 | #define S3C2440_GPJ9_INP (0x00 << 18) | ||
82 | #define S3C2440_GPJ9_OUTP (0x01 << 18) | ||
83 | #define S3C2440_GPJ9_CAMVSYNC (0x02 << 18) | ||
84 | |||
85 | #define S3C2440_GPJ10 S3C2410_GPIONO(S3C2440_GPIO_BANKJ, 10) | ||
86 | #define S3C2440_GPJ10_INP (0x00 << 20) | ||
87 | #define S3C2440_GPJ10_OUTP (0x01 << 20) | ||
88 | #define S3C2440_GPJ10_CAMHREF (0x02 << 20) | ||
89 | |||
90 | #define S3C2440_GPJ11 S3C2410_GPIONO(S3C2440_GPIO_BANKJ, 11) | ||
91 | #define S3C2440_GPJ11_INP (0x00 << 22) | ||
92 | #define S3C2440_GPJ11_OUTP (0x01 << 22) | ||
93 | #define S3C2440_GPJ11_CAMCLKOUT (0x02 << 22) | ||
94 | |||
95 | #define S3C2440_GPJ12 S3C2410_GPIONO(S3C2440_GPIO_BANKJ, 12) | ||
96 | #define S3C2440_GPJ12_INP (0x00 << 24) | ||
97 | #define S3C2440_GPJ12_OUTP (0x01 << 24) | ||
98 | #define S3C2440_GPJ12_CAMRESET (0x02 << 24) | ||
99 | |||
100 | #endif /* __ASM_ARCH_REGS_GPIOJ_H */ | ||
101 | |||
diff --git a/include/asm-arm/arch-s3c2410/regs-iic.h b/include/asm-arm/arch-s3c2410/regs-iic.h new file mode 100644 index 000000000000..fed3288e2046 --- /dev/null +++ b/include/asm-arm/arch-s3c2410/regs-iic.h | |||
@@ -0,0 +1,60 @@ | |||
1 | /* linux/include/asm-arm/arch-s3c2410/regs-iic.h | ||
2 | * | ||
3 | * Copyright (c) 2004 Simtec Electronics <linux@simtec.co.uk> | ||
4 | * http://www.simtec.co.uk/products/SWLINUX/ | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | * S3C2410 I2C Controller | ||
11 | * | ||
12 | * Changelog: | ||
13 | * 03-Oct-2004 BJD Initial include for Linux | ||
14 | * 08-Nov-2004 BJD Added S3C2440 filter register | ||
15 | */ | ||
16 | |||
17 | #ifndef __ASM_ARCH_REGS_IIC_H | ||
18 | #define __ASM_ARCH_REGS_IIC_H __FILE__ | ||
19 | |||
20 | /* see s3c2410x user guide, v1.1, section 9 (p447) for more info */ | ||
21 | |||
22 | #define S3C2410_IICREG(x) (x) | ||
23 | |||
24 | #define S3C2410_IICCON S3C2410_IICREG(0x00) | ||
25 | #define S3C2410_IICSTAT S3C2410_IICREG(0x04) | ||
26 | #define S3C2410_IICADD S3C2410_IICREG(0x08) | ||
27 | #define S3C2410_IICDS S3C2410_IICREG(0x0C) | ||
28 | #define S3C2440_IICLC S3C2410_IICREG(0x10) | ||
29 | |||
30 | #define S3C2410_IICCON_ACKEN (1<<7) | ||
31 | #define S3C2410_IICCON_TXDIV_16 (0<<6) | ||
32 | #define S3C2410_IICCON_TXDIV_512 (1<<6) | ||
33 | #define S3C2410_IICCON_IRQEN (1<<5) | ||
34 | #define S3C2410_IICCON_IRQPEND (1<<4) | ||
35 | #define S3C2410_IICCON_SCALE(x) ((x)&15) | ||
36 | #define S3C2410_IICCON_SCALEMASK (0xf) | ||
37 | |||
38 | #define S3C2410_IICSTAT_MASTER_RX (2<<6) | ||
39 | #define S3C2410_IICSTAT_MASTER_TX (3<<6) | ||
40 | #define S3C2410_IICSTAT_SLAVE_RX (0<<6) | ||
41 | #define S3C2410_IICSTAT_SLAVE_TX (1<<6) | ||
42 | #define S3C2410_IICSTAT_MODEMASK (3<<6) | ||
43 | |||
44 | #define S3C2410_IICSTAT_START (1<<5) | ||
45 | #define S3C2410_IICSTAT_BUSBUSY (1<<5) | ||
46 | #define S3C2410_IICSTAT_TXRXEN (1<<4) | ||
47 | #define S3C2410_IICSTAT_ARBITR (1<<3) | ||
48 | #define S3C2410_IICSTAT_ASSLAVE (1<<2) | ||
49 | #define S3C2410_IICSTAT_ADDR0 (1<<1) | ||
50 | #define S3C2410_IICSTAT_LASTBIT (1<<0) | ||
51 | |||
52 | #define S3C2410_IICLC_SDA_DELAY0 (0 << 0) | ||
53 | #define S3C2410_IICLC_SDA_DELAY5 (1 << 0) | ||
54 | #define S3C2410_IICLC_SDA_DELAY10 (2 << 0) | ||
55 | #define S3C2410_IICLC_SDA_DELAY15 (3 << 0) | ||
56 | #define S3C2410_IICLC_SDA_DELAY_MASK (3 << 0) | ||
57 | |||
58 | #define S3C2410_IICLC_FILTER_ON (1<<2) | ||
59 | |||
60 | #endif /* __ASM_ARCH_REGS_IIC_H */ | ||
diff --git a/include/asm-arm/arch-s3c2410/regs-iis.h b/include/asm-arm/arch-s3c2410/regs-iis.h new file mode 100644 index 000000000000..7ae8e1f45bc1 --- /dev/null +++ b/include/asm-arm/arch-s3c2410/regs-iis.h | |||
@@ -0,0 +1,72 @@ | |||
1 | /* linux/include/asm/arch-s3c2410/regs-iis.h | ||
2 | * | ||
3 | * Copyright (c) 2003 Simtec Electronics <linux@simtec.co.uk> | ||
4 | * http://www.simtec.co.uk/products/SWLINUX/ | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | * S3C2410 IIS register definition | ||
11 | * | ||
12 | * Changelog: | ||
13 | * 19-06-2003 BJD Created file | ||
14 | * 26-06-2003 BJD Finished off definitions for register addresses | ||
15 | * 12-03-2004 BJD Updated include protection | ||
16 | * 07-03-2005 BJD Added FIFO size flags and S3C2440 MPLL | ||
17 | */ | ||
18 | |||
19 | #ifndef __ASM_ARCH_REGS_IIS_H | ||
20 | #define __ASM_ARCH_REGS_IIS_H | ||
21 | |||
22 | #define S3C2410_IISCON (0x00) | ||
23 | |||
24 | #define S3C2440_IISCON_MPLL (1<<9) | ||
25 | #define S3C2410_IISCON_LRINDEX (1<<8) | ||
26 | #define S3C2410_IISCON_TXFIFORDY (1<<7) | ||
27 | #define S3C2410_IISCON_RXFIFORDY (1<<6) | ||
28 | #define S3C2410_IISCON_TXDMAEN (1<<5) | ||
29 | #define S3C2410_IISCON_RXDMAEN (1<<4) | ||
30 | #define S3C2410_IISCON_TXIDLE (1<<3) | ||
31 | #define S3C2410_IISCON_RXIDLE (1<<2) | ||
32 | #define S3C2410_IISCON_IISEN (1<<0) | ||
33 | |||
34 | #define S3C2410_IISMOD (0x04) | ||
35 | |||
36 | #define S3C2410_IISMOD_SLAVE (1<<8) | ||
37 | #define S3C2410_IISMOD_NOXFER (0<<6) | ||
38 | #define S3C2410_IISMOD_RXMODE (1<<6) | ||
39 | #define S3C2410_IISMOD_TXMODE (2<<6) | ||
40 | #define S3C2410_IISMOD_TXRXMODE (3<<6) | ||
41 | #define S3C2410_IISMOD_LR_LLOW (0<<5) | ||
42 | #define S3C2410_IISMOD_LR_RLOW (1<<5) | ||
43 | #define S3C2410_IISMOD_IIS (0<<4) | ||
44 | #define S3C2410_IISMOD_MSB (1<<4) | ||
45 | #define S3C2410_IISMOD_8BIT (0<<3) | ||
46 | #define S3C2410_IISMOD_16BIT (1<<3) | ||
47 | #define S3C2410_IISMOD_BITMASK (1<<3) | ||
48 | #define S3C2410_IISMOD_256FS (0<<1) | ||
49 | #define S3C2410_IISMOD_384FS (1<<1) | ||
50 | #define S3C2410_IISMOD_16FS (0<<0) | ||
51 | #define S3C2410_IISMOD_32FS (1<<0) | ||
52 | #define S3C2410_IISMOD_48FS (2<<0) | ||
53 | |||
54 | #define S3C2410_IISPSR (0x08) | ||
55 | #define S3C2410_IISPSR_INTMASK (31<<5) | ||
56 | #define S3C2410_IISPSR_INTSHIFT (5) | ||
57 | #define S3C2410_IISPSR_EXTMASK (31<<0) | ||
58 | #define S3C2410_IISPSR_EXTSHFIT (0) | ||
59 | |||
60 | #define S3C2410_IISFCON (0x0c) | ||
61 | |||
62 | #define S3C2410_IISFCON_TXDMA (1<<15) | ||
63 | #define S3C2410_IISFCON_RXDMA (1<<14) | ||
64 | #define S3C2410_IISFCON_TXENABLE (1<<13) | ||
65 | #define S3C2410_IISFCON_RXENABLE (1<<12) | ||
66 | #define S3C2410_IISFCON_TXMASK (0x3f << 6) | ||
67 | #define S3C2410_IISFCON_TXSHIFT (6) | ||
68 | #define S3C2410_IISFCON_RXMASK (0x3f) | ||
69 | #define S3C2410_IISFCON_RXSHIFT (0) | ||
70 | |||
71 | #define S3C2410_IISFIFO (0x10) | ||
72 | #endif /* __ASM_ARCH_REGS_IIS_H */ | ||
diff --git a/include/asm-arm/arch-s3c2410/regs-irq.h b/include/asm-arm/arch-s3c2410/regs-irq.h new file mode 100644 index 000000000000..24b7292df79e --- /dev/null +++ b/include/asm-arm/arch-s3c2410/regs-irq.h | |||
@@ -0,0 +1,44 @@ | |||
1 | /* linux/include/asm/arch-s3c2410/regs-irq.h | ||
2 | * | ||
3 | * Copyright (c) 2003 Simtec Electronics <linux@simtec.co.uk> | ||
4 | * http://www.simtec.co.uk/products/SWLINUX/ | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | * | ||
11 | * | ||
12 | * Changelog: | ||
13 | * 19-06-2003 BJD Created file | ||
14 | * 12-03-2004 BJD Updated include protection | ||
15 | * 10-03-2005 LCVR Changed S3C2410_VA to S3C24XX_VA | ||
16 | */ | ||
17 | |||
18 | |||
19 | #ifndef ___ASM_ARCH_REGS_IRQ_H | ||
20 | #define ___ASM_ARCH_REGS_IRQ_H "$Id: irq.h,v 1.3 2003/03/25 21:29:06 ben Exp $" | ||
21 | |||
22 | /* interrupt controller */ | ||
23 | |||
24 | #define S3C2410_IRQREG(x) ((x) + S3C24XX_VA_IRQ) | ||
25 | #define S3C2410_EINTREG(x) ((x) + S3C24XX_VA_GPIO) | ||
26 | |||
27 | #define S3C2410_SRCPND S3C2410_IRQREG(0x000) | ||
28 | #define S3C2410_INTMOD S3C2410_IRQREG(0x004) | ||
29 | #define S3C2410_INTMSK S3C2410_IRQREG(0x008) | ||
30 | #define S3C2410_PRIORITY S3C2410_IRQREG(0x00C) | ||
31 | #define S3C2410_INTPND S3C2410_IRQREG(0x010) | ||
32 | #define S3C2410_INTOFFSET S3C2410_IRQREG(0x014) | ||
33 | #define S3C2410_SUBSRCPND S3C2410_IRQREG(0x018) | ||
34 | #define S3C2410_INTSUBMSK S3C2410_IRQREG(0x01C) | ||
35 | |||
36 | /* mask: 0=enable, 1=disable | ||
37 | * 1 bit EINT, 4=EINT4, 23=EINT23 | ||
38 | * EINT0,1,2,3 are not handled here. | ||
39 | */ | ||
40 | |||
41 | #define S3C2410_EINTMASK S3C2410_EINTREG(0x0A4) | ||
42 | #define S3C2410_EINTPEND S3C2410_EINTREG(0X0A8) | ||
43 | |||
44 | #endif /* ___ASM_ARCH_REGS_IRQ_H */ | ||
diff --git a/include/asm-arm/arch-s3c2410/regs-lcd.h b/include/asm-arm/arch-s3c2410/regs-lcd.h new file mode 100644 index 000000000000..7f882ea92b2a --- /dev/null +++ b/include/asm-arm/arch-s3c2410/regs-lcd.h | |||
@@ -0,0 +1,114 @@ | |||
1 | /* linux/include/asm/arch-s3c2410/regs-lcd.h | ||
2 | * | ||
3 | * Copyright (c) 2003 Simtec Electronics <linux@simtec.co.uk> | ||
4 | * http://www.simtec.co.uk/products/SWLINUX/ | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | * | ||
11 | * | ||
12 | * Changelog: | ||
13 | * 12-06-2003 BJD Created file | ||
14 | * 26-06-2003 BJD Updated LCDCON register definitions | ||
15 | * 12-03-2004 BJD Updated include protection | ||
16 | * 10-03-2005 LCVR Changed S3C2410_VA to S3C24XX_VA | ||
17 | */ | ||
18 | |||
19 | |||
20 | #ifndef ___ASM_ARCH_REGS_LCD_H | ||
21 | #define ___ASM_ARCH_REGS_LCD_H "$Id: lcd.h,v 1.3 2003/06/26 13:25:06 ben Exp $" | ||
22 | |||
23 | #define S3C2410_LCDREG(x) ((x) + S3C24XX_VA_LCD) | ||
24 | |||
25 | /* LCD control registers */ | ||
26 | #define S3C2410_LCDCON1 S3C2410_LCDREG(0x00) | ||
27 | #define S3C2410_LCDCON2 S3C2410_LCDREG(0x04) | ||
28 | #define S3C2410_LCDCON3 S3C2410_LCDREG(0x08) | ||
29 | #define S3C2410_LCDCON4 S3C2410_LCDREG(0x0C) | ||
30 | #define S3C2410_LCDCON5 S3C2410_LCDREG(0x10) | ||
31 | |||
32 | #define S3C2410_LCDCON1_CLKVAL(x) ((x) << 8) | ||
33 | #define S3C2410_LCDCON1_MMODE (1<<7) | ||
34 | #define S3C2410_LCDCON1_DSCAN4 (0<<5) | ||
35 | #define S3C2410_LCDCON1_STN4 (1<<5) | ||
36 | #define S3C2410_LCDCON1_STN8 (2<<5) | ||
37 | #define S3C2410_LCDCON1_TFT (3<<5) | ||
38 | |||
39 | #define S3C2410_LCDCON1_STN1BPP (0<<1) | ||
40 | #define S3C2410_LCDCON1_STN2GREY (1<<1) | ||
41 | #define S3C2410_LCDCON1_STN4GREY (2<<1) | ||
42 | #define S3C2410_LCDCON1_STN8BPP (3<<1) | ||
43 | #define S3C2410_LCDCON1_STN12BPP (4<<1) | ||
44 | |||
45 | #define S3C2410_LCDCON1_TFT1BPP (8<<1) | ||
46 | #define S3C2410_LCDCON1_TFT2BPP (9<<1) | ||
47 | #define S3C2410_LCDCON1_TFT4BPP (10<<1) | ||
48 | #define S3C2410_LCDCON1_TFT8BPP (11<<1) | ||
49 | #define S3C2410_LCDCON1_TFT16BPP (12<<1) | ||
50 | #define S3C2410_LCDCON1_TFT24BPP (13<<1) | ||
51 | |||
52 | #define S3C2410_LCDCON1_ENVID (1) | ||
53 | |||
54 | #define S3C2410_LCDCON2_VBPD(x) ((x) << 24) | ||
55 | #define S3C2410_LCDCON2_LINEVAL(x) ((x) << 14) | ||
56 | #define S3C2410_LCDCON2_VFPD(x) ((x) << 6) | ||
57 | #define S3C2410_LCDCON2_VSPW(x) ((x) << 0) | ||
58 | |||
59 | #define S3C2410_LCDCON3_HBPD(x) ((x) << 19) | ||
60 | #define S3C2410_LCDCON3_WDLY(x) ((x) << 19) | ||
61 | #define S3C2410_LCDCON3_HOZVAL(x) ((x) << 8) | ||
62 | #define S3C2410_LCDCON3_HFPD(x) ((x) << 0) | ||
63 | #define S3C2410_LCDCON3_LINEBLANK(x)((x) << 0) | ||
64 | |||
65 | #define S3C2410_LCDCON4_MVAL(x) ((x) << 8) | ||
66 | #define S3C2410_LCDCON4_HSPW(x) ((x) << 0) | ||
67 | #define S3C2410_LCDCON4_WLH(x) ((x) << 0) | ||
68 | |||
69 | #define S3C2410_LCDCON5_BPP24BL (1<<12) | ||
70 | #define S3C2410_LCDCON5_FRM565 (1<<11) | ||
71 | #define S3C2410_LCDCON5_INVVCLK (1<<10) | ||
72 | #define S3C2410_LCDCON5_INVVLINE (1<<9) | ||
73 | #define S3C2410_LCDCON5_INVVFRAME (1<<8) | ||
74 | #define S3C2410_LCDCON5_INVVD (1<<7) | ||
75 | #define S3C2410_LCDCON5_INVVDEN (1<<6) | ||
76 | #define S3C2410_LCDCON5_INVPWREN (1<<5) | ||
77 | #define S3C2410_LCDCON5_INVLEND (1<<4) | ||
78 | #define S3C2410_LCDCON5_PWREN (1<<3) | ||
79 | #define S3C2410_LCDCON5_ENLEND (1<<2) | ||
80 | #define S3C2410_LCDCON5_BSWP (1<<1) | ||
81 | #define S3C2410_LCDCON5_HWSWP (1<<0) | ||
82 | |||
83 | /* framebuffer start addressed */ | ||
84 | #define S3C2410_LCDSADDR1 S3C2410_LCDREG(0x14) | ||
85 | #define S3C2410_LCDSADDR2 S3C2410_LCDREG(0x18) | ||
86 | #define S3C2410_LCDSADDR3 S3C2410_LCDREG(0x1C) | ||
87 | |||
88 | #define S3C2410_LCDBANK(x) ((x) << 21) | ||
89 | #define S3C2410_LCDBASEU(x) (x) | ||
90 | |||
91 | #define S3C2410_OFFSIZE(x) ((x) << 11) | ||
92 | #define S3C2410_PAGEWIDTH(x) (x) | ||
93 | |||
94 | /* colour lookup and miscellaneous controls */ | ||
95 | |||
96 | #define S3C2410_REDLUT S3C2410_LCDREG(0x20) | ||
97 | #define S3C2410_GREENLUT S3C2410_LCDREG(0x24) | ||
98 | #define S3C2410_BLUELUT S3C2410_LCDREG(0x28) | ||
99 | |||
100 | #define S3C2410_DITHMODE S3C2410_LCDREG(0x4C) | ||
101 | #define S3C2410_TPAL S3C2410_LCDREG(0x50) | ||
102 | |||
103 | /* interrupt info */ | ||
104 | #define S3C2410_LCDINTPND S3C2410_LCDREG(0x54) | ||
105 | #define S3C2410_LCDSRCPND S3C2410_LCDREG(0x58) | ||
106 | #define S3C2410_LCDINTMSK S3C2410_LCDREG(0x5C) | ||
107 | #define S3C2410_LPCSEL S3C2410_LCDREG(0x60) | ||
108 | |||
109 | #define S3C2410_TFTPAL(x) S3C2410_LCDREG((0x400 + (x)*4)) | ||
110 | |||
111 | #endif /* ___ASM_ARCH_REGS_LCD_H */ | ||
112 | |||
113 | |||
114 | |||
diff --git a/include/asm-arm/arch-s3c2410/regs-mem.h b/include/asm-arm/arch-s3c2410/regs-mem.h new file mode 100644 index 000000000000..1a1328ac0d79 --- /dev/null +++ b/include/asm-arm/arch-s3c2410/regs-mem.h | |||
@@ -0,0 +1,212 @@ | |||
1 | /* linux/include/asm-arm/arch-s3c2410/regs-mem.h | ||
2 | * | ||
3 | * Copyright (c) 2004 Simtec Electronics <linux@simtec.co.uk> | ||
4 | * http://www.simtec.co.uk/products/SWLINUX/ | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | * S3C2410 Memory Control register definitions | ||
11 | * | ||
12 | * Changelog: | ||
13 | * 29-Sep-2004 BJD Initial include for Linux | ||
14 | * 10-Mar-2005 LCVR Changed S3C2410_VA to S3C24XX_VA | ||
15 | * | ||
16 | */ | ||
17 | |||
18 | #ifndef __ASM_ARM_MEMREGS_H | ||
19 | #define __ASM_ARM_MEMREGS_H "$Id: regs.h,v 1.8 2003/05/01 15:55:41 ben Exp $" | ||
20 | |||
21 | #ifndef S3C2410_MEMREG | ||
22 | #define S3C2410_MEMREG(x) (S3C24XX_VA_MEMCTRL + (x)) | ||
23 | #endif | ||
24 | |||
25 | /* bus width, and wait state control */ | ||
26 | #define S3C2410_BWSCON S3C2410_MEMREG(0x0000) | ||
27 | |||
28 | /* bank zero config - note, pinstrapped from OM pins! */ | ||
29 | #define S3C2410_BWSCON_DW0_16 (1<<1) | ||
30 | #define S3C2410_BWSCON_DW0_32 (2<<1) | ||
31 | |||
32 | /* bank one configs */ | ||
33 | #define S3C2410_BWSCON_DW1_8 (0<<4) | ||
34 | #define S3C2410_BWSCON_DW1_16 (1<<4) | ||
35 | #define S3C2410_BWSCON_DW1_32 (2<<4) | ||
36 | #define S3C2410_BWSCON_WS1 (1<<6) | ||
37 | #define S3C2410_BWSCON_ST1 (1<<7) | ||
38 | |||
39 | /* bank 2 configurations */ | ||
40 | #define S3C2410_BWSCON_DW2_8 (0<<8) | ||
41 | #define S3C2410_BWSCON_DW2_16 (1<<8) | ||
42 | #define S3C2410_BWSCON_DW2_32 (2<<8) | ||
43 | #define S3C2410_BWSCON_WS2 (1<<10) | ||
44 | #define S3C2410_BWSCON_ST2 (1<<11) | ||
45 | |||
46 | /* bank 3 configurations */ | ||
47 | #define S3C2410_BWSCON_DW3_8 (0<<12) | ||
48 | #define S3C2410_BWSCON_DW3_16 (1<<12) | ||
49 | #define S3C2410_BWSCON_DW3_32 (2<<12) | ||
50 | #define S3C2410_BWSCON_WS3 (1<<14) | ||
51 | #define S3C2410_BWSCON_ST3 (1<<15) | ||
52 | |||
53 | /* bank 4 configurations */ | ||
54 | #define S3C2410_BWSCON_DW4_8 (0<<16) | ||
55 | #define S3C2410_BWSCON_DW4_16 (1<<16) | ||
56 | #define S3C2410_BWSCON_DW4_32 (2<<16) | ||
57 | #define S3C2410_BWSCON_WS4 (1<<18) | ||
58 | #define S3C2410_BWSCON_ST4 (1<<19) | ||
59 | |||
60 | /* bank 5 configurations */ | ||
61 | #define S3C2410_BWSCON_DW5_8 (0<<20) | ||
62 | #define S3C2410_BWSCON_DW5_16 (1<<20) | ||
63 | #define S3C2410_BWSCON_DW5_32 (2<<20) | ||
64 | #define S3C2410_BWSCON_WS5 (1<<22) | ||
65 | #define S3C2410_BWSCON_ST5 (1<<23) | ||
66 | |||
67 | /* bank 6 configurations */ | ||
68 | #define S3C2410_BWSCON_DW6_8 (0<<24) | ||
69 | #define S3C2410_BWSCON_DW6_16 (1<<24) | ||
70 | #define S3C2410_BWSCON_DW6_32 (2<<24) | ||
71 | #define S3C2410_BWSCON_WS6 (1<<26) | ||
72 | #define S3C2410_BWSCON_ST6 (1<<27) | ||
73 | |||
74 | /* bank 7 configurations */ | ||
75 | #define S3C2410_BWSCON_DW7_8 (0<<28) | ||
76 | #define S3C2410_BWSCON_DW7_16 (1<<28) | ||
77 | #define S3C2410_BWSCON_DW7_32 (2<<28) | ||
78 | #define S3C2410_BWSCON_WS7 (1<<30) | ||
79 | #define S3C2410_BWSCON_ST7 (1<<31) | ||
80 | |||
81 | /* memory set (rom, ram) */ | ||
82 | #define S3C2410_BANKCON0 S3C2410_MEMREG(0x0004) | ||
83 | #define S3C2410_BANKCON1 S3C2410_MEMREG(0x0008) | ||
84 | #define S3C2410_BANKCON2 S3C2410_MEMREG(0x000C) | ||
85 | #define S3C2410_BANKCON3 S3C2410_MEMREG(0x0010) | ||
86 | #define S3C2410_BANKCON4 S3C2410_MEMREG(0x0014) | ||
87 | #define S3C2410_BANKCON5 S3C2410_MEMREG(0x0018) | ||
88 | #define S3C2410_BANKCON6 S3C2410_MEMREG(0x001C) | ||
89 | #define S3C2410_BANKCON7 S3C2410_MEMREG(0x0020) | ||
90 | |||
91 | /* bank configuration registers */ | ||
92 | |||
93 | #define S3C2410_BANKCON_PMCnorm (0x00) | ||
94 | #define S3C2410_BANKCON_PMC4 (0x01) | ||
95 | #define S3C2410_BANKCON_PMC8 (0x02) | ||
96 | #define S3C2410_BANKCON_PMC16 (0x03) | ||
97 | |||
98 | /* bank configurations for banks 0..7, note banks | ||
99 | * 6 and 7 have differnt configurations depending on | ||
100 | * the memory type bits */ | ||
101 | |||
102 | #define S3C2410_BANKCON_Tacp2 (0x0 << 2) | ||
103 | #define S3C2410_BANKCON_Tacp3 (0x1 << 2) | ||
104 | #define S3C2410_BANKCON_Tacp4 (0x2 << 2) | ||
105 | #define S3C2410_BANKCON_Tacp6 (0x3 << 2) | ||
106 | |||
107 | #define S3C2410_BANKCON_Tcah0 (0x0 << 4) | ||
108 | #define S3C2410_BANKCON_Tcah1 (0x1 << 4) | ||
109 | #define S3C2410_BANKCON_Tcah2 (0x2 << 4) | ||
110 | #define S3C2410_BANKCON_Tcah4 (0x3 << 4) | ||
111 | |||
112 | #define S3C2410_BANKCON_Tcoh0 (0x0 << 6) | ||
113 | #define S3C2410_BANKCON_Tcoh1 (0x1 << 6) | ||
114 | #define S3C2410_BANKCON_Tcoh2 (0x2 << 6) | ||
115 | #define S3C2410_BANKCON_Tcoh4 (0x3 << 6) | ||
116 | |||
117 | #define S3C2410_BANKCON_Tacc1 (0x0 << 8) | ||
118 | #define S3C2410_BANKCON_Tacc2 (0x1 << 8) | ||
119 | #define S3C2410_BANKCON_Tacc3 (0x2 << 8) | ||
120 | #define S3C2410_BANKCON_Tacc4 (0x3 << 8) | ||
121 | #define S3C2410_BANKCON_Tacc6 (0x4 << 8) | ||
122 | #define S3C2410_BANKCON_Tacc8 (0x5 << 8) | ||
123 | #define S3C2410_BANKCON_Tacc10 (0x6 << 8) | ||
124 | #define S3C2410_BANKCON_Tacc14 (0x7 << 8) | ||
125 | |||
126 | #define S3C2410_BANKCON_Tcos0 (0x0 << 11) | ||
127 | #define S3C2410_BANKCON_Tcos1 (0x1 << 11) | ||
128 | #define S3C2410_BANKCON_Tcos2 (0x2 << 11) | ||
129 | #define S3C2410_BANKCON_Tcos4 (0x3 << 11) | ||
130 | |||
131 | #define S3C2410_BANKCON_Tacs0 (0x0 << 13) | ||
132 | #define S3C2410_BANKCON_Tacs1 (0x1 << 13) | ||
133 | #define S3C2410_BANKCON_Tacs2 (0x2 << 13) | ||
134 | #define S3C2410_BANKCON_Tacs4 (0x3 << 13) | ||
135 | |||
136 | #define S3C2410_BANKCON_SRAM (0x0 << 15) | ||
137 | #define S3C2400_BANKCON_EDODRAM (0x2 << 15) | ||
138 | #define S3C2410_BANKCON_SDRAM (0x3 << 15) | ||
139 | |||
140 | /* next bits only for EDO DRAM in 6,7 */ | ||
141 | #define S3C2400_BANKCON_EDO_Trdc1 (0x00 << 4) | ||
142 | #define S3C2400_BANKCON_EDO_Trdc2 (0x01 << 4) | ||
143 | #define S3C2400_BANKCON_EDO_Trdc3 (0x02 << 4) | ||
144 | #define S3C2400_BANKCON_EDO_Trdc4 (0x03 << 4) | ||
145 | |||
146 | /* CAS pulse width */ | ||
147 | #define S3C2400_BANKCON_EDO_PULSE1 (0x00 << 3) | ||
148 | #define S3C2400_BANKCON_EDO_PULSE2 (0x01 << 3) | ||
149 | |||
150 | /* CAS pre-charge */ | ||
151 | #define S3C2400_BANKCON_EDO_TCP1 (0x00 << 2) | ||
152 | #define S3C2400_BANKCON_EDO_TCP2 (0x01 << 2) | ||
153 | |||
154 | /* control column address select */ | ||
155 | #define S3C2400_BANKCON_EDO_SCANb8 (0x00 << 0) | ||
156 | #define S3C2400_BANKCON_EDO_SCANb9 (0x01 << 0) | ||
157 | #define S3C2400_BANKCON_EDO_SCANb10 (0x02 << 0) | ||
158 | #define S3C2400_BANKCON_EDO_SCANb11 (0x03 << 0) | ||
159 | |||
160 | /* next bits only for SDRAM in 6,7 */ | ||
161 | #define S3C2410_BANKCON_Trdc2 (0x00 << 2) | ||
162 | #define S3C2410_BANKCON_Trdc3 (0x01 << 2) | ||
163 | #define S3C2410_BANKCON_Trdc4 (0x02 << 2) | ||
164 | |||
165 | /* control column address select */ | ||
166 | #define S3C2410_BANKCON_SCANb8 (0x00 << 0) | ||
167 | #define S3C2410_BANKCON_SCANb9 (0x01 << 0) | ||
168 | #define S3C2410_BANKCON_SCANb10 (0x02 << 0) | ||
169 | |||
170 | #define S3C2410_REFRESH S3C2410_MEMREG(0x0024) | ||
171 | #define S3C2410_BANKSIZE S3C2410_MEMREG(0x0028) | ||
172 | #define S3C2410_MRSRB6 S3C2410_MEMREG(0x002C) | ||
173 | #define S3C2410_MRSRB7 S3C2410_MEMREG(0x0030) | ||
174 | |||
175 | /* refresh control */ | ||
176 | |||
177 | #define S3C2410_REFRESH_REFEN (1<<23) | ||
178 | #define S3C2410_REFRESH_SELF (1<<22) | ||
179 | #define S3C2410_REFRESH_REFCOUNTER ((1<<11)-1) | ||
180 | |||
181 | #define S3C2410_REFRESH_TRP_MASK (3<<20) | ||
182 | #define S3C2410_REFRESH_TRP_2clk (0<<20) | ||
183 | #define S3C2410_REFRESH_TRP_3clk (1<<20) | ||
184 | #define S3C2410_REFRESH_TRP_4clk (2<<20) | ||
185 | |||
186 | #define S3C2410_REFRESH_TSRC_MASK (3<<18) | ||
187 | #define S3C2410_REFRESH_TSRC_4clk (0<<18) | ||
188 | #define S3C2410_REFRESH_TSRC_5clk (1<<18) | ||
189 | #define S3C2410_REFRESH_TSRC_6clk (2<<18) | ||
190 | #define S3C2410_REFRESH_TSRC_7clk (3<<18) | ||
191 | |||
192 | |||
193 | /* mode select register(s) */ | ||
194 | |||
195 | #define S3C2410_MRSRB_CL1 (0x00 << 4) | ||
196 | #define S3C2410_MRSRB_CL2 (0x02 << 4) | ||
197 | #define S3C2410_MRSRB_CL3 (0x03 << 4) | ||
198 | |||
199 | /* bank size register */ | ||
200 | #define S3C2410_BANKSIZE_128M (0x2 << 0) | ||
201 | #define S3C2410_BANKSIZE_64M (0x1 << 0) | ||
202 | #define S3C2410_BANKSIZE_32M (0x0 << 0) | ||
203 | #define S3C2410_BANKSIZE_16M (0x7 << 0) | ||
204 | #define S3C2410_BANKSIZE_8M (0x6 << 0) | ||
205 | #define S3C2410_BANKSIZE_4M (0x5 << 0) | ||
206 | #define S3C2410_BANKSIZE_2M (0x4 << 0) | ||
207 | #define S3C2410_BANKSIZE_MASK (0x7 << 0) | ||
208 | #define S3C2410_BANKSIZE_SCLK_EN (1<<4) | ||
209 | #define S3C2410_BANKSIZE_SCKE_EN (1<<5) | ||
210 | #define S3C2410_BANKSIZE_BURST (1<<7) | ||
211 | |||
212 | #endif /* __ASM_ARM_MEMREGS_H */ | ||
diff --git a/include/asm-arm/arch-s3c2410/regs-nand.h b/include/asm-arm/arch-s3c2410/regs-nand.h new file mode 100644 index 000000000000..c443ac834698 --- /dev/null +++ b/include/asm-arm/arch-s3c2410/regs-nand.h | |||
@@ -0,0 +1,43 @@ | |||
1 | /* linux/include/asm-arm/arch-s3c2410/regs-nand.h | ||
2 | * | ||
3 | * Copyright (c) 2004 Simtec Electronics <linux@simtec.co.uk> | ||
4 | * http://www.simtec.co.uk/products/SWLINUX/ | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | * S3C2410 clock register definitions | ||
11 | * | ||
12 | * Changelog: | ||
13 | * 18-Aug-2004 BJD Copied file from 2.4 and updated | ||
14 | */ | ||
15 | |||
16 | #ifndef __ASM_ARM_REGS_NAND | ||
17 | #define __ASM_ARM_REGS_NAND "$Id: nand.h,v 1.3 2003/12/09 11:36:29 ben Exp $" | ||
18 | |||
19 | |||
20 | #define S3C2410_NFREG(x) (x) | ||
21 | |||
22 | #define S3C2410_NFCONF S3C2410_NFREG(0x00) | ||
23 | #define S3C2410_NFCMD S3C2410_NFREG(0x04) | ||
24 | #define S3C2410_NFADDR S3C2410_NFREG(0x08) | ||
25 | #define S3C2410_NFDATA S3C2410_NFREG(0x0C) | ||
26 | #define S3C2410_NFSTAT S3C2410_NFREG(0x10) | ||
27 | #define S3C2410_NFECC S3C2410_NFREG(0x14) | ||
28 | |||
29 | #define S3C2410_NFCONF_EN (1<<15) | ||
30 | #define S3C2410_NFCONF_512BYTE (1<<14) | ||
31 | #define S3C2410_NFCONF_4STEP (1<<13) | ||
32 | #define S3C2410_NFCONF_INITECC (1<<12) | ||
33 | #define S3C2410_NFCONF_nFCE (1<<11) | ||
34 | #define S3C2410_NFCONF_TACLS(x) ((x)<<8) | ||
35 | #define S3C2410_NFCONF_TWRPH0(x) ((x)<<4) | ||
36 | #define S3C2410_NFCONF_TWRPH1(x) ((x)<<0) | ||
37 | |||
38 | #define S3C2410_NFSTAT_BUSY (1<<0) | ||
39 | |||
40 | /* think ECC can only be 8bit read? */ | ||
41 | |||
42 | #endif /* __ASM_ARM_REGS_NAND */ | ||
43 | |||
diff --git a/include/asm-arm/arch-s3c2410/regs-rtc.h b/include/asm-arm/arch-s3c2410/regs-rtc.h new file mode 100644 index 000000000000..228983f89bc8 --- /dev/null +++ b/include/asm-arm/arch-s3c2410/regs-rtc.h | |||
@@ -0,0 +1,66 @@ | |||
1 | /* linux/include/asm/arch-s3c2410/regs-rtc.h | ||
2 | * | ||
3 | * Copyright (c) 2003 Simtec Electronics <linux@simtec.co.uk> | ||
4 | * http://www.simtec.co.uk/products/SWLINUX/ | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | * S3C2410 Internal RTC register definition | ||
11 | * | ||
12 | * Changelog: | ||
13 | * 19-06-2003 BJD Created file | ||
14 | * 12-03-2004 BJD Updated include protection | ||
15 | * 15-01-2005 LCVR Changed S3C2410_VA to S3C24XX_VA (s3c2400 support) | ||
16 | */ | ||
17 | |||
18 | #ifndef __ASM_ARCH_REGS_RTC_H | ||
19 | #define __ASM_ARCH_REGS_RTC_H __FILE__ | ||
20 | |||
21 | #define S3C2410_RTCREG(x) ((x) + S3C24XX_VA_RTC) | ||
22 | |||
23 | #define S3C2410_RTCCON S3C2410_RTCREG(0x40) | ||
24 | #define S3C2410_RTCCON_RTCEN (1<<0) | ||
25 | #define S3C2410_RTCCON_CLKSEL (1<<1) | ||
26 | #define S3C2410_RTCCON_CNTSEL (1<<2) | ||
27 | #define S3C2410_RTCCON_CLKRST (1<<3) | ||
28 | |||
29 | #define S3C2410_TICNT S3C2410_RTCREG(0x44) | ||
30 | #define S3C2410_TICNT_ENABLE (1<<7) | ||
31 | |||
32 | #define S3C2410_RTCALM S3C2410_RTCREG(0x50) | ||
33 | #define S3C2410_RTCALM_ALMEN (1<<6) | ||
34 | #define S3C2410_RTCALM_YEAREN (1<<5) | ||
35 | #define S3C2410_RTCALM_MONEN (1<<4) | ||
36 | #define S3C2410_RTCALM_DAYEN (1<<3) | ||
37 | #define S3C2410_RTCALM_HOUREN (1<<2) | ||
38 | #define S3C2410_RTCALM_MINEN (1<<1) | ||
39 | #define S3C2410_RTCALM_SECEN (1<<0) | ||
40 | |||
41 | #define S3C2410_RTCALM_ALL \ | ||
42 | S3C2410_RTCALM_ALMEN | S3C2410_RTCALM_YEAREN | S3C2410_RTCALM_MONEN |\ | ||
43 | S3C2410_RTCALM_DAYEN | S3C2410_RTCALM_HOUREN | S3C2410_RTCALM_MINEN |\ | ||
44 | S3C2410_RTCALM_SECEN | ||
45 | |||
46 | |||
47 | #define S3C2410_ALMSEC S3C2410_RTCREG(0x54) | ||
48 | #define S3C2410_ALMMIN S3C2410_RTCREG(0x58) | ||
49 | #define S3C2410_ALMHOUR S3C2410_RTCREG(0x5c) | ||
50 | |||
51 | #define S3C2410_ALMDATE S3C2410_RTCREG(0x60) | ||
52 | #define S3C2410_ALMMON S3C2410_RTCREG(0x64) | ||
53 | #define S3C2410_ALMYEAR S3C2410_RTCREG(0x68) | ||
54 | |||
55 | #define S3C2410_RTCRST S3C2410_RTCREG(0x6c) | ||
56 | |||
57 | #define S3C2410_RTCSEC S3C2410_RTCREG(0x70) | ||
58 | #define S3C2410_RTCMIN S3C2410_RTCREG(0x74) | ||
59 | #define S3C2410_RTCHOUR S3C2410_RTCREG(0x78) | ||
60 | #define S3C2410_RTCDATE S3C2410_RTCREG(0x7c) | ||
61 | #define S3C2410_RTCDAY S3C2410_RTCREG(0x80) | ||
62 | #define S3C2410_RTCMON S3C2410_RTCREG(0x84) | ||
63 | #define S3C2410_RTCYEAR S3C2410_RTCREG(0x88) | ||
64 | |||
65 | |||
66 | #endif /* __ASM_ARCH_REGS_RTC_H */ | ||
diff --git a/include/asm-arm/arch-s3c2410/regs-sdi.h b/include/asm-arm/arch-s3c2410/regs-sdi.h new file mode 100644 index 000000000000..ca9a26fbecec --- /dev/null +++ b/include/asm-arm/arch-s3c2410/regs-sdi.h | |||
@@ -0,0 +1,118 @@ | |||
1 | /* linux/include/asm/arch-s3c2410/regs-sdi.h | ||
2 | * | ||
3 | * Copyright (c) 2004 Simtec Electronics <linux@simtec.co.uk> | ||
4 | * http://www.simtec.co.uk/products/SWLINUX/ | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | * S3C2410 MMC/SDIO register definitions | ||
11 | * | ||
12 | * Changelog: | ||
13 | * 18-Aug-2004 Ben Dooks Created initial file | ||
14 | * 29-Nov-2004 Koen Martens Added some missing defines, fixed duplicates | ||
15 | * 29-Nov-2004 Ben Dooks Updated Koen's patch | ||
16 | */ | ||
17 | |||
18 | #ifndef __ASM_ARM_REGS_SDI | ||
19 | #define __ASM_ARM_REGS_SDI "regs-sdi.h" | ||
20 | |||
21 | #define S3C2410_SDICON (0x00) | ||
22 | #define S3C2410_SDIPRE (0x04) | ||
23 | #define S3C2410_SDICMDARG (0x08) | ||
24 | #define S3C2410_SDICMDCON (0x0C) | ||
25 | #define S3C2410_SDICMDSTAT (0x10) | ||
26 | #define S3C2410_SDIRSP0 (0x14) | ||
27 | #define S3C2410_SDIRSP1 (0x18) | ||
28 | #define S3C2410_SDIRSP2 (0x1C) | ||
29 | #define S3C2410_SDIRSP3 (0x20) | ||
30 | #define S3C2410_SDITIMER (0x24) | ||
31 | #define S3C2410_SDIBSIZE (0x28) | ||
32 | #define S3C2410_SDIDCON (0x2C) | ||
33 | #define S3C2410_SDIDCNT (0x30) | ||
34 | #define S3C2410_SDIDSTA (0x34) | ||
35 | #define S3C2410_SDIFSTA (0x38) | ||
36 | #define S3C2410_SDIDATA (0x3C) | ||
37 | #define S3C2410_SDIIMSK (0x40) | ||
38 | |||
39 | #define S3C2410_SDICON_BYTEORDER (1<<4) | ||
40 | #define S3C2410_SDICON_SDIOIRQ (1<<3) | ||
41 | #define S3C2410_SDICON_RWAITEN (1<<2) | ||
42 | #define S3C2410_SDICON_FIFORESET (1<<1) | ||
43 | #define S3C2410_SDICON_CLOCKTYPE (1<<0) | ||
44 | |||
45 | #define S3C2410_SDICMDCON_ABORT (1<<12) | ||
46 | #define S3C2410_SDICMDCON_WITHDATA (1<<11) | ||
47 | #define S3C2410_SDICMDCON_LONGRSP (1<<10) | ||
48 | #define S3C2410_SDICMDCON_WAITRSP (1<<9) | ||
49 | #define S3C2410_SDICMDCON_CMDSTART (1<<8) | ||
50 | #define S3C2410_SDICMDCON_INDEX (0xff) | ||
51 | |||
52 | #define S3C2410_SDICMDSTAT_CRCFAIL (1<<12) | ||
53 | #define S3C2410_SDICMDSTAT_CMDSENT (1<<11) | ||
54 | #define S3C2410_SDICMDSTAT_CMDTIMEOUT (1<<10) | ||
55 | #define S3C2410_SDICMDSTAT_RSPFIN (1<<9) | ||
56 | #define S3C2410_SDICMDSTAT_XFERING (1<<8) | ||
57 | #define S3C2410_SDICMDSTAT_INDEX (0xff) | ||
58 | |||
59 | #define S3C2410_SDIDCON_IRQPERIOD (1<<21) | ||
60 | #define S3C2410_SDIDCON_TXAFTERRESP (1<<20) | ||
61 | #define S3C2410_SDIDCON_RXAFTERCMD (1<<19) | ||
62 | #define S3C2410_SDIDCON_BUSYAFTERCMD (1<<18) | ||
63 | #define S3C2410_SDIDCON_BLOCKMODE (1<<17) | ||
64 | #define S3C2410_SDIDCON_WIDEBUS (1<<16) | ||
65 | #define S3C2410_SDIDCON_DMAEN (1<<15) | ||
66 | #define S3C2410_SDIDCON_STOP (1<<14) | ||
67 | #define S3C2410_SDIDCON_DATMODE (3<<12) | ||
68 | #define S3C2410_SDIDCON_BLKNUM (0x7ff) | ||
69 | |||
70 | /* constants for S3C2410_SDIDCON_DATMODE */ | ||
71 | #define S3C2410_SDIDCON_XFER_READY (0<<12) | ||
72 | #define S3C2410_SDIDCON_XFER_CHKSTART (1<<12) | ||
73 | #define S3C2410_SDIDCON_XFER_RXSTART (2<<12) | ||
74 | #define S3C2410_SDIDCON_XFER_TXSTART (3<<12) | ||
75 | |||
76 | #define S3C2410_SDIDCNT_BLKNUM_SHIFT (12) | ||
77 | |||
78 | #define S3C2410_SDIDSTA_RDYWAITREQ (1<<10) | ||
79 | #define S3C2410_SDIDSTA_SDIOIRQDETECT (1<<9) | ||
80 | #define S3C2410_SDIDSTA_FIFOFAIL (1<<8) /* reserved on 2440 */ | ||
81 | #define S3C2410_SDIDSTA_CRCFAIL (1<<7) | ||
82 | #define S3C2410_SDIDSTA_RXCRCFAIL (1<<6) | ||
83 | #define S3C2410_SDIDSTA_DATATIMEOUT (1<<5) | ||
84 | #define S3C2410_SDIDSTA_XFERFINISH (1<<4) | ||
85 | #define S3C2410_SDIDSTA_BUSYFINISH (1<<3) | ||
86 | #define S3C2410_SDIDSTA_SBITERR (1<<2) /* reserved on 2410a/2440 */ | ||
87 | #define S3C2410_SDIDSTA_TXDATAON (1<<1) | ||
88 | #define S3C2410_SDIDSTA_RXDATAON (1<<0) | ||
89 | |||
90 | #define S3C2410_SDIFSTA_TFDET (1<<13) | ||
91 | #define S3C2410_SDIFSTA_RFDET (1<<12) | ||
92 | #define S3C2410_SDIFSTA_TXHALF (1<<11) | ||
93 | #define S3C2410_SDIFSTA_TXEMPTY (1<<10) | ||
94 | #define S3C2410_SDIFSTA_RFLAST (1<<9) | ||
95 | #define S3C2410_SDIFSTA_RFFULL (1<<8) | ||
96 | #define S3C2410_SDIFSTA_RFHALF (1<<7) | ||
97 | #define S3C2410_SDIFSTA_COUNTMASK (0x7f) | ||
98 | |||
99 | #define S3C2410_SDIIMSK_RESPONSECRC (1<<17) | ||
100 | #define S3C2410_SDIIMSK_CMDSENT (1<<16) | ||
101 | #define S3C2410_SDIIMSK_CMDTIMEOUT (1<<15) | ||
102 | #define S3C2410_SDIIMSK_RESPONSEND (1<<14) | ||
103 | #define S3C2410_SDIIMSK_READWAIT (1<<13) | ||
104 | #define S3C2410_SDIIMSK_SDIOIRQ (1<<12) | ||
105 | #define S3C2410_SDIIMSK_FIFOFAIL (1<<11) | ||
106 | #define S3C2410_SDIIMSK_CRCSTATUS (1<<10) | ||
107 | #define S3C2410_SDIIMSK_DATACRC (1<<9) | ||
108 | #define S3C2410_SDIIMSK_DATATIMEOUT (1<<8) | ||
109 | #define S3C2410_SDIIMSK_DATAFINISH (1<<7) | ||
110 | #define S3C2410_SDIIMSK_BUSYFINISH (1<<6) | ||
111 | #define S3C2410_SDIIMSK_SBITERR (1<<5) /* reserved 2440/2410a */ | ||
112 | #define S3C2410_SDIIMSK_TXFIFOHALF (1<<4) | ||
113 | #define S3C2410_SDIIMSK_TXFIFOEMPTY (1<<3) | ||
114 | #define S3C2410_SDIIMSK_RXFIFOLAST (1<<2) | ||
115 | #define S3C2410_SDIIMSK_RXFIFOFULL (1<<1) | ||
116 | #define S3C2410_SDIIMSK_RXFIFOHALF (1<<0) | ||
117 | |||
118 | #endif /* __ASM_ARM_REGS_SDI */ | ||
diff --git a/include/asm-arm/arch-s3c2410/regs-serial.h b/include/asm-arm/arch-s3c2410/regs-serial.h new file mode 100644 index 000000000000..ce1bbbaad6d3 --- /dev/null +++ b/include/asm-arm/arch-s3c2410/regs-serial.h | |||
@@ -0,0 +1,209 @@ | |||
1 | /* linux/include/asm-arm/arch-s3c2410/regs-serial.h | ||
2 | * | ||
3 | * From linux/include/asm-arm/hardware/serial_s3c2410.h | ||
4 | * | ||
5 | * Internal header file for Samsung S3C2410 serial ports (UART0-2) | ||
6 | * | ||
7 | * Copyright (C) 2002 Shane Nay (shane@minirl.com) | ||
8 | * | ||
9 | * Additional defines, (c) 2003 Simtec Electronics (linux@simtec.co.uk) | ||
10 | * | ||
11 | * Adapted from: | ||
12 | * | ||
13 | * Internal header file for MX1ADS serial ports (UART1 & 2) | ||
14 | * | ||
15 | * Copyright (C) 2002 Shane Nay (shane@minirl.com) | ||
16 | * | ||
17 | * This program is free software; you can redistribute it and/or modify | ||
18 | * it under the terms of the GNU General Public License as published by | ||
19 | * the Free Software Foundation; either version 2 of the License, or | ||
20 | * (at your option) any later version. | ||
21 | * | ||
22 | * This program is distributed in the hope that it will be useful, | ||
23 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
24 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
25 | * GNU General Public License for more details. | ||
26 | * | ||
27 | * You should have received a copy of the GNU General Public License | ||
28 | * along with this program; if not, write to the Free Software | ||
29 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
30 | * | ||
31 | * Modifications: | ||
32 | * 10-Mar-2005 LCVR Changed S3C2410_VA to S3C24XX_VA (s3c2400 support) | ||
33 | */ | ||
34 | |||
35 | #ifndef __ASM_ARM_REGS_SERIAL_H | ||
36 | #define __ASM_ARM_REGS_SERIAL_H | ||
37 | |||
38 | #define S3C24XX_VA_UART0 (S3C24XX_VA_UART) | ||
39 | #define S3C24XX_VA_UART1 (S3C24XX_VA_UART + 0x4000 ) | ||
40 | #define S3C24XX_VA_UART2 (S3C24XX_VA_UART + 0x8000 ) | ||
41 | |||
42 | #define S3C2410_PA_UART0 (S3C2410_PA_UART) | ||
43 | #define S3C2410_PA_UART1 (S3C2410_PA_UART + 0x4000 ) | ||
44 | #define S3C2410_PA_UART2 (S3C2410_PA_UART + 0x8000 ) | ||
45 | |||
46 | #define S3C2410_URXH (0x24) | ||
47 | #define S3C2410_UTXH (0x20) | ||
48 | #define S3C2410_ULCON (0x00) | ||
49 | #define S3C2410_UCON (0x04) | ||
50 | #define S3C2410_UFCON (0x08) | ||
51 | #define S3C2410_UMCON (0x0C) | ||
52 | #define S3C2410_UBRDIV (0x28) | ||
53 | #define S3C2410_UTRSTAT (0x10) | ||
54 | #define S3C2410_UERSTAT (0x14) | ||
55 | #define S3C2410_UFSTAT (0x18) | ||
56 | #define S3C2410_UMSTAT (0x1C) | ||
57 | |||
58 | #define S3C2410_LCON_CFGMASK ((0xF<<3)|(0x3)) | ||
59 | |||
60 | #define S3C2410_LCON_CS5 (0x0) | ||
61 | #define S3C2410_LCON_CS6 (0x1) | ||
62 | #define S3C2410_LCON_CS7 (0x2) | ||
63 | #define S3C2410_LCON_CS8 (0x3) | ||
64 | #define S3C2410_LCON_CSMASK (0x3) | ||
65 | |||
66 | #define S3C2410_LCON_PNONE (0x0) | ||
67 | #define S3C2410_LCON_PEVEN (0x5 << 3) | ||
68 | #define S3C2410_LCON_PODD (0x4 << 3) | ||
69 | #define S3C2410_LCON_PMASK (0x7 << 3) | ||
70 | |||
71 | #define S3C2410_LCON_STOPB (1<<2) | ||
72 | #define S3C2410_LCON_IRM (1<<6) | ||
73 | |||
74 | #define S3C2440_UCON_CLKMASK (3<<10) | ||
75 | #define S3C2440_UCON_PCLK (0<<10) | ||
76 | #define S3C2440_UCON_UCLK (1<<10) | ||
77 | #define S3C2440_UCON_PCLK2 (2<<10) | ||
78 | #define S3C2440_UCON_FCLK (3<<10) | ||
79 | #define S3C2440_UCON2_FCLK_EN (1<<15) | ||
80 | #define S3C2440_UCON0_DIVMASK (15 << 12) | ||
81 | #define S3C2440_UCON1_DIVMASK (15 << 12) | ||
82 | #define S3C2440_UCON2_DIVMASK (7 << 12) | ||
83 | #define S3C2440_UCON_DIVSHIFT (12) | ||
84 | |||
85 | #define S3C2410_UCON_UCLK (1<<10) | ||
86 | #define S3C2410_UCON_SBREAK (1<<4) | ||
87 | |||
88 | #define S3C2410_UCON_TXILEVEL (1<<9) | ||
89 | #define S3C2410_UCON_RXILEVEL (1<<8) | ||
90 | #define S3C2410_UCON_TXIRQMODE (1<<2) | ||
91 | #define S3C2410_UCON_RXIRQMODE (1<<0) | ||
92 | #define S3C2410_UCON_RXFIFO_TOI (1<<7) | ||
93 | |||
94 | #define S3C2410_UCON_DEFAULT (S3C2410_UCON_TXILEVEL | \ | ||
95 | S3C2410_UCON_RXILEVEL | \ | ||
96 | S3C2410_UCON_TXIRQMODE | \ | ||
97 | S3C2410_UCON_RXIRQMODE | \ | ||
98 | S3C2410_UCON_RXFIFO_TOI) | ||
99 | |||
100 | #define S3C2410_UFCON_FIFOMODE (1<<0) | ||
101 | #define S3C2410_UFCON_TXTRIG0 (0<<6) | ||
102 | #define S3C2410_UFCON_RXTRIG8 (1<<4) | ||
103 | #define S3C2410_UFCON_RXTRIG12 (2<<4) | ||
104 | |||
105 | /* S3C2440 FIFO trigger levels */ | ||
106 | #define S3C2440_UFCON_RXTRIG1 (0<<4) | ||
107 | #define S3C2440_UFCON_RXTRIG8 (1<<4) | ||
108 | #define S3C2440_UFCON_RXTRIG16 (2<<4) | ||
109 | #define S3C2440_UFCON_RXTRIG32 (3<<4) | ||
110 | |||
111 | #define S3C2440_UFCON_TXTRIG0 (0<<6) | ||
112 | #define S3C2440_UFCON_TXTRIG16 (1<<6) | ||
113 | #define S3C2440_UFCON_TXTRIG32 (2<<6) | ||
114 | #define S3C2440_UFCON_TXTRIG48 (3<<6) | ||
115 | |||
116 | #define S3C2410_UFCON_RESETBOTH (3<<1) | ||
117 | #define S3C2410_UFCON_RESETTX (1<<2) | ||
118 | #define S3C2410_UFCON_RESETRX (1<<1) | ||
119 | |||
120 | #define S3C2410_UFCON_DEFAULT (S3C2410_UFCON_FIFOMODE | \ | ||
121 | S3C2410_UFCON_TXTRIG0 | \ | ||
122 | S3C2410_UFCON_RXTRIG8 ) | ||
123 | |||
124 | #define S3C2410_UMCOM_AFC (1<<4) | ||
125 | #define S3C2410_UMCOM_RTS_LOW (1<<0) | ||
126 | |||
127 | #define S3C2410_UFSTAT_TXFULL (1<<9) | ||
128 | #define S3C2410_UFSTAT_RXFULL (1<<8) | ||
129 | #define S3C2410_UFSTAT_TXMASK (15<<4) | ||
130 | #define S3C2410_UFSTAT_TXSHIFT (4) | ||
131 | #define S3C2410_UFSTAT_RXMASK (15<<0) | ||
132 | #define S3C2410_UFSTAT_RXSHIFT (0) | ||
133 | |||
134 | #define S3C2440_UFSTAT_TXFULL (1<<14) | ||
135 | #define S3C2440_UFSTAT_RXFULL (1<<6) | ||
136 | #define S3C2440_UFSTAT_TXSHIFT (8) | ||
137 | #define S3C2440_UFSTAT_RXSHIFT (0) | ||
138 | #define S3C2440_UFSTAT_TXMASK (63<<8) | ||
139 | #define S3C2440_UFSTAT_RXMASK (63) | ||
140 | |||
141 | #define S3C2410_UTRSTAT_TXE (1<<2) | ||
142 | #define S3C2410_UTRSTAT_TXFE (1<<1) | ||
143 | #define S3C2410_UTRSTAT_RXDR (1<<0) | ||
144 | |||
145 | #define S3C2410_UERSTAT_OVERRUN (1<<0) | ||
146 | #define S3C2410_UERSTAT_FRAME (1<<2) | ||
147 | #define S3C2410_UERSTAT_BREAK (1<<3) | ||
148 | #define S3C2410_UERSTAT_ANY (S3C2410_UERSTAT_OVERRUN | \ | ||
149 | S3C2410_UERSTAT_FRAME | \ | ||
150 | S3C2410_UERSTAT_BREAK) | ||
151 | |||
152 | #define S3C2410_UMSTAT_CTS (1<<0) | ||
153 | #define S3C2410_UMSTAT_DeltaCTS (1<<2) | ||
154 | |||
155 | #ifndef __ASSEMBLY__ | ||
156 | |||
157 | /* struct s3c24xx_uart_clksrc | ||
158 | * | ||
159 | * this structure defines a named clock source that can be used for the | ||
160 | * uart, so that the best clock can be selected for the requested baud | ||
161 | * rate. | ||
162 | * | ||
163 | * min_baud and max_baud define the range of baud-rates this clock is | ||
164 | * acceptable for, if they are both zero, it is assumed any baud rate that | ||
165 | * can be generated from this clock will be used. | ||
166 | * | ||
167 | * divisor gives the divisor from the clock to the one seen by the uart | ||
168 | */ | ||
169 | |||
170 | struct s3c24xx_uart_clksrc { | ||
171 | const char *name; | ||
172 | unsigned int divisor; | ||
173 | unsigned int min_baud; | ||
174 | unsigned int max_baud; | ||
175 | }; | ||
176 | |||
177 | /* configuration structure for per-machine configurations for the | ||
178 | * serial port | ||
179 | * | ||
180 | * the pointer is setup by the machine specific initialisation from the | ||
181 | * arch/arm/mach-s3c2410/ directory. | ||
182 | */ | ||
183 | |||
184 | struct s3c2410_uartcfg { | ||
185 | unsigned char hwport; /* hardware port number */ | ||
186 | unsigned char unused; | ||
187 | unsigned short flags; | ||
188 | unsigned long uart_flags; /* default uart flags */ | ||
189 | |||
190 | unsigned long ucon; /* value of ucon for port */ | ||
191 | unsigned long ulcon; /* value of ulcon for port */ | ||
192 | unsigned long ufcon; /* value of ufcon for port */ | ||
193 | |||
194 | struct s3c24xx_uart_clksrc *clocks; | ||
195 | unsigned int clocks_size; | ||
196 | }; | ||
197 | |||
198 | /* s3c24xx_uart_devs | ||
199 | * | ||
200 | * this is exported from the core as we cannot use driver_register(), | ||
201 | * or platform_add_device() before the console_initcall() | ||
202 | */ | ||
203 | |||
204 | extern struct platform_device *s3c24xx_uart_devs[3]; | ||
205 | |||
206 | #endif /* __ASSEMBLY__ */ | ||
207 | |||
208 | #endif /* __ASM_ARM_REGS_SERIAL_H */ | ||
209 | |||
diff --git a/include/asm-arm/arch-s3c2410/regs-spi.h b/include/asm-arm/arch-s3c2410/regs-spi.h new file mode 100644 index 000000000000..cb502a88158b --- /dev/null +++ b/include/asm-arm/arch-s3c2410/regs-spi.h | |||
@@ -0,0 +1,56 @@ | |||
1 | /* linux/include/asm-arm/arch-s3c2410/regs-spi.h | ||
2 | * | ||
3 | * Copyright (c) 2004 Fetron GmbH | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License version 2 as | ||
7 | * published by the Free Software Foundation. | ||
8 | * | ||
9 | * S3C2410 SPI register definition | ||
10 | * | ||
11 | * Changelog: | ||
12 | * 20-04-2004 KF Created file | ||
13 | * 04-10-2004 BJD Removed VA address (no longer mapped) | ||
14 | * tidied file for submission | ||
15 | */ | ||
16 | |||
17 | #ifndef __ASM_ARCH_REGS_SPI_H | ||
18 | #define __ASM_ARCH_REGS_SPI_H | ||
19 | |||
20 | |||
21 | #define S3C2410_SPCON (0x00) | ||
22 | |||
23 | #define S3C2410_SPCON_SMOD_DMA (2<<5) /* DMA mode */ | ||
24 | #define S3C2410_SPCON_SMOD_INT (1<<5) /* interrupt mode */ | ||
25 | #define S3C2410_SPCON_SMOD_POLL (0<<5) /* polling mode */ | ||
26 | #define S3C2410_SPCON_ENSCK (1<<4) /* Enable SCK */ | ||
27 | #define S3C2410_SPCON_MSTR (1<<3) /* Master/Slave select | ||
28 | 0: slave, 1: master */ | ||
29 | #define S3C2410_SPCON_CPOL_HIGH (1<<2) /* Clock polarity select */ | ||
30 | #define S3C2410_SPCON_CPOL_LOW (0<<2) /* Clock polarity select */ | ||
31 | |||
32 | #define S3C2410_SPCON_CPHA_FMTB (1<<1) /* Clock Phase Select */ | ||
33 | #define S3C2410_SPCON_CPHA_FMTA (0<<1) /* Clock Phase Select */ | ||
34 | |||
35 | #define S3C2410_SPCON_TAGD (1<<0) /* Tx auto garbage data mode */ | ||
36 | |||
37 | |||
38 | #define S3C2410_SPSTA (0x04) | ||
39 | |||
40 | #define S3C2410_SPSTA_DCOL (1<<2) /* Data Collision Error */ | ||
41 | #define S3C2410_SPSTA_MULD (1<<1) /* Multi Master Error */ | ||
42 | #define S3C2410_SPSTA_READY (1<<0) /* Data Tx/Rx ready */ | ||
43 | |||
44 | |||
45 | #define S3C2410_SPPIN (0x08) | ||
46 | |||
47 | #define S3C2410_SPPIN_ENMUL (1<<2) /* Multi Master Error detect */ | ||
48 | #define S3C2410_SPPIN_RESERVED (1<<1) | ||
49 | #define S3C2410_SPPIN_KEEP (1<<0) /* Master Out keep */ | ||
50 | |||
51 | |||
52 | #define S3C2410_SPPRE (0x0C) | ||
53 | #define S3C2410_SPTDAT (0x10) | ||
54 | #define S3C2410_SPRDAT (0x14) | ||
55 | |||
56 | #endif /* __ASM_ARCH_REGS_SPI_H */ | ||
diff --git a/include/asm-arm/arch-s3c2410/regs-timer.h b/include/asm-arm/arch-s3c2410/regs-timer.h new file mode 100644 index 000000000000..169064e27520 --- /dev/null +++ b/include/asm-arm/arch-s3c2410/regs-timer.h | |||
@@ -0,0 +1,113 @@ | |||
1 | /* linux/include/asm/arch-s3c2410/regs-timer.h | ||
2 | * | ||
3 | * Copyright (c) 2003 Simtec Electronics <linux@simtec.co.uk> | ||
4 | * http://www.simtec.co.uk/products/SWLINUX/ | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | * S3C2410 Timer configuration | ||
11 | * | ||
12 | * Changelog: | ||
13 | * 05-06-2003 BJD Created file | ||
14 | * 26-06-2003 BJD Added more timer definitions to mux / control | ||
15 | * 12-03-2004 BJD Updated include protection | ||
16 | * 10-02-2005 BJD Added S3C2410_TCFG1_MUX4_SHIFT (Guillaume Gourat) | ||
17 | * 10-03-2005 LCVR Changed S3C2410_VA to S3C24XX_VA | ||
18 | */ | ||
19 | |||
20 | |||
21 | #ifndef __ASM_ARCH_REGS_TIMER_H | ||
22 | #define __ASM_ARCH_REGS_TIMER_H "$Id: timer.h,v 1.4 2003/05/06 19:30:50 ben Exp $" | ||
23 | |||
24 | #define S3C2410_TIMERREG(x) (S3C24XX_VA_TIMER + (x)) | ||
25 | #define S3C2410_TIMERREG2(tmr,reg) S3C2410_TIMERREG((reg)+0x0c+((tmr)*0x0c)) | ||
26 | |||
27 | #define S3C2410_TCFG0 S3C2410_TIMERREG(0x00) | ||
28 | #define S3C2410_TCFG1 S3C2410_TIMERREG(0x04) | ||
29 | #define S3C2410_TCON S3C2410_TIMERREG(0x08) | ||
30 | |||
31 | #define S3C2410_TCFG_PRESCALER0_MASK (255<<0) | ||
32 | #define S3C2410_TCFG_PRESCALER1_MASK (255<<8) | ||
33 | #define S3C2410_TCFG_PRESCALER1_SHIFT (8) | ||
34 | #define S3C2410_TCFG_DEADZONE_MASK (255<<16) | ||
35 | #define S3C2410_TCFG_DEADZONE_SHIFT (16) | ||
36 | |||
37 | #define S3C2410_TCFG1_MUX4_DIV2 (0<<16) | ||
38 | #define S3C2410_TCFG1_MUX4_DIV4 (1<<16) | ||
39 | #define S3C2410_TCFG1_MUX4_DIV8 (2<<16) | ||
40 | #define S3C2410_TCFG1_MUX4_DIV16 (3<<16) | ||
41 | #define S3C2410_TCFG1_MUX4_TCLK1 (4<<16) | ||
42 | #define S3C2410_TCFG1_MUX4_MASK (15<<16) | ||
43 | #define S3C2410_TCFG1_MUX4_SHIFT (16) | ||
44 | |||
45 | #define S3C2410_TCFG1_MUX3_DIV2 (0<<12) | ||
46 | #define S3C2410_TCFG1_MUX3_DIV4 (1<<12) | ||
47 | #define S3C2410_TCFG1_MUX3_DIV8 (2<<12) | ||
48 | #define S3C2410_TCFG1_MUX3_DIV16 (3<<12) | ||
49 | #define S3C2410_TCFG1_MUX3_TCLK1 (4<<12) | ||
50 | #define S3C2410_TCFG1_MUX3_MASK (15<<12) | ||
51 | |||
52 | |||
53 | #define S3C2410_TCFG1_MUX2_DIV2 (0<<8) | ||
54 | #define S3C2410_TCFG1_MUX2_DIV4 (1<<8) | ||
55 | #define S3C2410_TCFG1_MUX2_DIV8 (2<<8) | ||
56 | #define S3C2410_TCFG1_MUX2_DIV16 (3<<8) | ||
57 | #define S3C2410_TCFG1_MUX2_TCLK1 (4<<8) | ||
58 | #define S3C2410_TCFG1_MUX2_MASK (15<<8) | ||
59 | |||
60 | |||
61 | #define S3C2410_TCFG1_MUX1_DIV2 (0<<4) | ||
62 | #define S3C2410_TCFG1_MUX1_DIV4 (1<<4) | ||
63 | #define S3C2410_TCFG1_MUX1_DIV8 (2<<4) | ||
64 | #define S3C2410_TCFG1_MUX1_DIV16 (3<<4) | ||
65 | #define S3C2410_TCFG1_MUX1_TCLK0 (4<<4) | ||
66 | #define S3C2410_TCFG1_MUX1_MASK (15<<4) | ||
67 | |||
68 | #define S3C2410_TCFG1_MUX0_DIV2 (0<<0) | ||
69 | #define S3C2410_TCFG1_MUX0_DIV4 (1<<0) | ||
70 | #define S3C2410_TCFG1_MUX0_DIV8 (2<<0) | ||
71 | #define S3C2410_TCFG1_MUX0_DIV16 (3<<0) | ||
72 | #define S3C2410_TCFG1_MUX0_TCLK0 (4<<0) | ||
73 | #define S3C2410_TCFG1_MUX0_MASK (15<<0) | ||
74 | |||
75 | /* for each timer, we have an count buffer, an compare buffer and | ||
76 | * an observation buffer | ||
77 | */ | ||
78 | |||
79 | /* WARNING - timer 4 has no buffer reg, and it's observation is at +4 */ | ||
80 | |||
81 | #define S3C2410_TCNTB(tmr) S3C2410_TIMERREG2(tmr, 0x00) | ||
82 | #define S3C2410_TCMPB(tmr) S3C2410_TIMERREG2(tmr, 0x04) | ||
83 | #define S3C2410_TCNTO(tmr) S3C2410_TIMERREG2(tmr, (((tmr) == 4) ? 0x04 : 0x08)) | ||
84 | |||
85 | #define S3C2410_TCON_T4RELOAD (1<<22) | ||
86 | #define S3C2410_TCON_T4MANUALUPD (1<<21) | ||
87 | #define S3C2410_TCON_T4START (1<<20) | ||
88 | |||
89 | #define S3C2410_TCON_T3RELOAD (1<<19) | ||
90 | #define S3C2410_TCON_T3INVERT (1<<18) | ||
91 | #define S3C2410_TCON_T3MANUALUPD (1<<17) | ||
92 | #define S3C2410_TCON_T3START (1<<16) | ||
93 | |||
94 | #define S3C2410_TCON_T2RELOAD (1<<15) | ||
95 | #define S3C2410_TCON_T2INVERT (1<<14) | ||
96 | #define S3C2410_TCON_T2MANUALUPD (1<<13) | ||
97 | #define S3C2410_TCON_T2START (1<<12) | ||
98 | |||
99 | #define S3C2410_TCON_T1RELOAD (1<<11) | ||
100 | #define S3C2410_TCON_T1INVERT (1<<10) | ||
101 | #define S3C2410_TCON_T1MANUALUPD (1<<9) | ||
102 | #define S3C2410_TCON_T1START (1<<8) | ||
103 | |||
104 | #define S3C2410_TCON_T0DEADZONE (1<<4) | ||
105 | #define S3C2410_TCON_T0RELOAD (1<<3) | ||
106 | #define S3C2410_TCON_T0INVERT (1<<2) | ||
107 | #define S3C2410_TCON_T0MANUALUPD (1<<1) | ||
108 | #define S3C2410_TCON_T0START (1<<0) | ||
109 | |||
110 | #endif /* __ASM_ARCH_REGS_TIMER_H */ | ||
111 | |||
112 | |||
113 | |||
diff --git a/include/asm-arm/arch-s3c2410/regs-udc.h b/include/asm-arm/arch-s3c2410/regs-udc.h new file mode 100644 index 000000000000..bf315b763252 --- /dev/null +++ b/include/asm-arm/arch-s3c2410/regs-udc.h | |||
@@ -0,0 +1,164 @@ | |||
1 | /* linux/include/asm/arch-s3c2410/regs-udc.h | ||
2 | * | ||
3 | * Copyright (C) 2004 Herbert Poetzl <herbert@13thfloor.at> | ||
4 | * | ||
5 | * This include file is free software; you can redistribute it and/or | ||
6 | * modify it under the terms of the GNU General Public License as | ||
7 | * published by the Free Software Foundation; either version 2 of | ||
8 | * the License, or (at your option) any later version. | ||
9 | * | ||
10 | * Changelog: | ||
11 | * 01-08-2004 Initial creation | ||
12 | * 12-09-2004 Cleanup for submission | ||
13 | * 24-10-2004 Fixed S3C2410_UDC_MAXP_REG definition | ||
14 | * 10-03-2005 Changed S3C2410_VA to S3C24XX_VA | ||
15 | */ | ||
16 | |||
17 | #ifndef __ASM_ARCH_REGS_UDC_H | ||
18 | #define __ASM_ARCH_REGS_UDC_H | ||
19 | |||
20 | |||
21 | #define S3C2410_USBDREG(x) ((x) + S3C24XX_VA_USBDEV) | ||
22 | |||
23 | #define S3C2410_UDC_FUNC_ADDR_REG S3C2410_USBDREG(0x0140) | ||
24 | #define S3C2410_UDC_PWR_REG S3C2410_USBDREG(0x0144) | ||
25 | #define S3C2410_UDC_EP_INT_REG S3C2410_USBDREG(0x0148) | ||
26 | |||
27 | #define S3C2410_UDC_USB_INT_REG S3C2410_USBDREG(0x0158) | ||
28 | #define S3C2410_UDC_EP_INT_EN_REG S3C2410_USBDREG(0x015c) | ||
29 | |||
30 | #define S3C2410_UDC_USB_INT_EN_REG S3C2410_USBDREG(0x016c) | ||
31 | |||
32 | #define S3C2410_UDC_FRAME_NUM1_REG S3C2410_USBDREG(0x0170) | ||
33 | #define S3C2410_UDC_FRAME_NUM2_REG S3C2410_USBDREG(0x0174) | ||
34 | |||
35 | #define S3C2410_UDC_EP0_FIFO_REG S3C2410_USBDREG(0x01c0) | ||
36 | #define S3C2410_UDC_EP1_FIFO_REG S3C2410_USBDREG(0x01c4) | ||
37 | #define S3C2410_UDC_EP2_FIFO_REG S3C2410_USBDREG(0x01c8) | ||
38 | #define S3C2410_UDC_EP3_FIFO_REG S3C2410_USBDREG(0x01cc) | ||
39 | #define S3C2410_UDC_EP4_FIFO_REG S3C2410_USBDREG(0x01d0) | ||
40 | |||
41 | #define S3C2410_UDC_EP1_DMA_CON S3C2410_USBDREG(0x0200) | ||
42 | #define S3C2410_UDC_EP1_DMA_UNIT S3C2410_USBDREG(0x0204) | ||
43 | #define S3C2410_UDC_EP1_DMA_FIFO S3C2410_USBDREG(0x0208) | ||
44 | #define S3C2410_UDC_EP1_DMA_TTC_L S3C2410_USBDREG(0x020c) | ||
45 | #define S3C2410_UDC_EP1_DMA_TTC_M S3C2410_USBDREG(0x0210) | ||
46 | #define S3C2410_UDC_EP1_DMA_TTC_H S3C2410_USBDREG(0x0214) | ||
47 | |||
48 | #define S3C2410_UDC_EP2_DMA_CON S3C2410_USBDREG(0x0218) | ||
49 | #define S3C2410_UDC_EP2_DMA_UNIT S3C2410_USBDREG(0x021c) | ||
50 | #define S3C2410_UDC_EP2_DMA_FIFO S3C2410_USBDREG(0x0220) | ||
51 | #define S3C2410_UDC_EP2_DMA_TTC_L S3C2410_USBDREG(0x0224) | ||
52 | #define S3C2410_UDC_EP2_DMA_TTC_M S3C2410_USBDREG(0x0228) | ||
53 | #define S3C2410_UDC_EP2_DMA_TTC_H S3C2410_USBDREG(0x022c) | ||
54 | |||
55 | #define S3C2410_UDC_EP3_DMA_CON S3C2410_USBDREG(0x0240) | ||
56 | #define S3C2410_UDC_EP3_DMA_UNIT S3C2410_USBDREG(0x0244) | ||
57 | #define S3C2410_UDC_EP3_DMA_FIFO S3C2410_USBDREG(0x0248) | ||
58 | #define S3C2410_UDC_EP3_DMA_TTC_L S3C2410_USBDREG(0x024c) | ||
59 | #define S3C2410_UDC_EP3_DMA_TTC_M S3C2410_USBDREG(0x0250) | ||
60 | #define S3C2410_UDC_EP3_DMA_TTC_H S3C2410_USBDREG(0x0254) | ||
61 | |||
62 | #define S3C2410_UDC_EP4_DMA_CON S3C2410_USBDREG(0x0258) | ||
63 | #define S3C2410_UDC_EP4_DMA_UNIT S3C2410_USBDREG(0x025c) | ||
64 | #define S3C2410_UDC_EP4_DMA_FIFO S3C2410_USBDREG(0x0260) | ||
65 | #define S3C2410_UDC_EP4_DMA_TTC_L S3C2410_USBDREG(0x0264) | ||
66 | #define S3C2410_UDC_EP4_DMA_TTC_M S3C2410_USBDREG(0x0268) | ||
67 | #define S3C2410_UDC_EP4_DMA_TTC_H S3C2410_USBDREG(0x026c) | ||
68 | |||
69 | #define S3C2410_UDC_INDEX_REG S3C2410_USBDREG(0x0178) | ||
70 | |||
71 | /* indexed registers */ | ||
72 | |||
73 | #define S3C2410_UDC_MAXP_REG S3C2410_USBDREG(0x0180) | ||
74 | |||
75 | #define S3C2410_UDC_EP0_CSR_REG S3C2410_USBDREG(0x0184) | ||
76 | |||
77 | #define S3C2410_UDC_IN_CSR1_REG S3C2410_USBDREG(0x0184) | ||
78 | #define S3C2410_UDC_IN_CSR2_REG S3C2410_USBDREG(0x0188) | ||
79 | |||
80 | #define S3C2410_UDC_OUT_CSR1_REG S3C2410_USBDREG(0x0190) | ||
81 | #define S3C2410_UDC_OUT_CSR2_REG S3C2410_USBDREG(0x0194) | ||
82 | #define S3C2410_UDC_OUT_FIFO_CNT1_REG S3C2410_USBDREG(0x0198) | ||
83 | #define S3C2410_UDC_OUT_FIFO_CNT2_REG S3C2410_USBDREG(0x019c) | ||
84 | |||
85 | |||
86 | |||
87 | #define S3C2410_UDC_PWR_ISOUP (1<<7) // R/W | ||
88 | #define S3C2410_UDC_PWR_RESET (1<<3) // R | ||
89 | #define S3C2410_UDC_PWR_RESUME (1<<2) // R/W | ||
90 | #define S3C2410_UDC_PWR_SUSPEND (1<<1) // R | ||
91 | #define S3C2410_UDC_PWR_ENSUSPEND (1<<0) // R/W | ||
92 | |||
93 | #define S3C2410_UDC_PWR_DEFAULT 0x00 | ||
94 | |||
95 | #define S3C2410_UDC_INT_EP4 (1<<4) // R/W (clear only) | ||
96 | #define S3C2410_UDC_INT_EP3 (1<<3) // R/W (clear only) | ||
97 | #define S3C2410_UDC_INT_EP2 (1<<2) // R/W (clear only) | ||
98 | #define S3C2410_UDC_INT_EP1 (1<<1) // R/W (clear only) | ||
99 | #define S3C2410_UDC_INT_EP0 (1<<0) // R/W (clear only) | ||
100 | |||
101 | #define S3C2410_UDC_USBINT_RESET (1<<2) // R/W (clear only) | ||
102 | #define S3C2410_UDC_USBINT_RESUME (1<<1) // R/W (clear only) | ||
103 | #define S3C2410_UDC_USBINT_SUSPEND (1<<0) // R/W (clear only) | ||
104 | |||
105 | #define S3C2410_UDC_INTE_EP4 (1<<4) // R/W | ||
106 | #define S3C2410_UDC_INTE_EP3 (1<<3) // R/W | ||
107 | #define S3C2410_UDC_INTE_EP2 (1<<2) // R/W | ||
108 | #define S3C2410_UDC_INTE_EP1 (1<<1) // R/W | ||
109 | #define S3C2410_UDC_INTE_EP0 (1<<0) // R/W | ||
110 | |||
111 | #define S3C2410_UDC_USBINTE_RESET (1<<2) // R/W | ||
112 | #define S3C2410_UDC_USBINTE_SUSPEND (1<<0) // R/W | ||
113 | |||
114 | |||
115 | #define S3C2410_UDC_INDEX_EP0 (0x00) | ||
116 | #define S3C2410_UDC_INDEX_EP1 (0x01) // ?? | ||
117 | #define S3C2410_UDC_INDEX_EP2 (0x02) // ?? | ||
118 | #define S3C2410_UDC_INDEX_EP3 (0x03) // ?? | ||
119 | #define S3C2410_UDC_INDEX_EP4 (0x04) // ?? | ||
120 | |||
121 | #define S3C2410_UDC_ICSR1_CLRDT (1<<6) // R/W | ||
122 | #define S3C2410_UDC_ICSR1_SENTSTL (1<<5) // R/W (clear only) | ||
123 | #define S3C2410_UDC_ICSR1_SENDSTL (1<<4) // R/W | ||
124 | #define S3C2410_UDC_ICSR1_FFLUSH (1<<3) // W (set only) | ||
125 | #define S3C2410_UDC_ICSR1_UNDRUN (1<<2) // R/W (clear only) | ||
126 | #define S3C2410_UDC_ICSR1_PKTRDY (1<<0) // R/W (set only) | ||
127 | |||
128 | #define S3C2410_UDC_ICSR2_AUTOSET (1<<7) // R/W | ||
129 | #define S3C2410_UDC_ICSR2_ISO (1<<6) // R/W | ||
130 | #define S3C2410_UDC_ICSR2_MODEIN (1<<5) // R/W | ||
131 | #define S3C2410_UDC_ICSR2_DMAIEN (1<<4) // R/W | ||
132 | |||
133 | #define S3C2410_UDC_OCSR1_CLRDT (1<<7) // R/W | ||
134 | #define S3C2410_UDC_OCSR1_SENTSTL (1<<6) // R/W (clear only) | ||
135 | #define S3C2410_UDC_OCSR1_SENDSTL (1<<5) // R/W | ||
136 | #define S3C2410_UDC_OCSR1_FFLUSH (1<<4) // R/W | ||
137 | #define S3C2410_UDC_OCSR1_DERROR (1<<3) // R | ||
138 | #define S3C2410_UDC_OCSR1_OVRRUN (1<<2) // R/W (clear only) | ||
139 | #define S3C2410_UDC_OCSR1_PKTRDY (1<<0) // R/W (clear only) | ||
140 | |||
141 | #define S3C2410_UDC_OCSR2_AUTOCLR (1<<7) // R/W | ||
142 | #define S3C2410_UDC_OCSR2_ISO (1<<6) // R/W | ||
143 | #define S3C2410_UDC_OCSR2_DMAIEN (1<<5) // R/W | ||
144 | |||
145 | #define S3C2410_UDC_SETIX(x) \ | ||
146 | __raw_writel(S3C2410_UDC_INDEX_ ## x, S3C2410_UDC_INDEX_REG); | ||
147 | |||
148 | |||
149 | #define S3C2410_UDC_EP0_CSR_OPKRDY (1<<0) | ||
150 | #define S3C2410_UDC_EP0_CSR_IPKRDY (1<<1) | ||
151 | #define S3C2410_UDC_EP0_CSR_SENTSTL (1<<2) | ||
152 | #define S3C2410_UDC_EP0_CSR_DE (1<<3) | ||
153 | #define S3C2410_UDC_EP0_CSR_SE (1<<4) | ||
154 | #define S3C2410_UDC_EP0_CSR_SENDSTL (1<<5) | ||
155 | #define S3C2410_UDC_EP0_CSR_SOPKTRDY (1<<6) | ||
156 | #define S3C2410_UDC_EP0_CSR_SSE (1<<7) | ||
157 | |||
158 | #define S3C2410_UDC_MAXP_8 (1<<0) | ||
159 | #define S3C2410_UDC_MAXP_16 (1<<1) | ||
160 | #define S3C2410_UDC_MAXP_32 (1<<2) | ||
161 | #define S3C2410_UDC_MAXP_64 (1<<3) | ||
162 | |||
163 | |||
164 | #endif | ||
diff --git a/include/asm-arm/arch-s3c2410/regs-watchdog.h b/include/asm-arm/arch-s3c2410/regs-watchdog.h new file mode 100644 index 000000000000..d199ca6aff22 --- /dev/null +++ b/include/asm-arm/arch-s3c2410/regs-watchdog.h | |||
@@ -0,0 +1,46 @@ | |||
1 | /* linux/include/asm/arch-s3c2410/regs0watchdog.h | ||
2 | * | ||
3 | * Copyright (c) 2003 Simtec Electronics <linux@simtec.co.uk> | ||
4 | * http://www.simtec.co.uk/products/SWLINUX/ | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | * S3C2410 Watchdog timer control | ||
11 | * | ||
12 | * Changelog: | ||
13 | * 21-06-2003 BJD Created file | ||
14 | * 12-03-2004 BJD Updated include protection | ||
15 | * 10-03-2005 LCVR Changed S3C2410_VA to S3C24XX_VA | ||
16 | */ | ||
17 | |||
18 | |||
19 | #ifndef __ASM_ARCH_REGS_WATCHDOG_H | ||
20 | #define __ASM_ARCH_REGS_WATCHDOG_H "$Id: watchdog.h,v 1.2 2003/04/29 13:31:09 ben Exp $" | ||
21 | |||
22 | #define S3C2410_WDOGREG(x) ((x) + S3C24XX_VA_WATCHDOG) | ||
23 | |||
24 | #define S3C2410_WTCON S3C2410_WDOGREG(0x00) | ||
25 | #define S3C2410_WTDAT S3C2410_WDOGREG(0x04) | ||
26 | #define S3C2410_WTCNT S3C2410_WDOGREG(0x08) | ||
27 | |||
28 | /* the watchdog can either generate a reset pulse, or an | ||
29 | * interrupt. | ||
30 | */ | ||
31 | |||
32 | #define S3C2410_WTCON_RSTEN (0x01) | ||
33 | #define S3C2410_WTCON_INTEN (1<<2) | ||
34 | #define S3C2410_WTCON_ENABLE (1<<5) | ||
35 | |||
36 | #define S3C2410_WTCON_DIV16 (0<<3) | ||
37 | #define S3C2410_WTCON_DIV32 (1<<3) | ||
38 | #define S3C2410_WTCON_DIV64 (2<<3) | ||
39 | #define S3C2410_WTCON_DIV128 (3<<3) | ||
40 | |||
41 | #define S3C2410_WTCON_PRESCALE(x) ((x) << 8) | ||
42 | #define S3C2410_WTCON_PRESCALE_MASK (0xff00) | ||
43 | |||
44 | #endif /* __ASM_ARCH_REGS_WATCHDOG_H */ | ||
45 | |||
46 | |||
diff --git a/include/asm-arm/arch-s3c2410/system.h b/include/asm-arm/arch-s3c2410/system.h new file mode 100644 index 000000000000..9b0d85024cb4 --- /dev/null +++ b/include/asm-arm/arch-s3c2410/system.h | |||
@@ -0,0 +1,90 @@ | |||
1 | /* linux/include/asm-arm/arch-s3c2410/system.h | ||
2 | * | ||
3 | * (c) 2003 Simtec Electronics | ||
4 | * Ben Dooks <ben@simtec.co.uk> | ||
5 | * | ||
6 | * S3C2410 - System function defines and includes | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | * | ||
12 | * Changelog: | ||
13 | * 12-May-2003 BJD Created file | ||
14 | * 14-May-2003 BJD Removed idle to aid debugging | ||
15 | * 12-Jun-2003 BJD Added reset via watchdog | ||
16 | * 04-Sep-2003 BJD Moved to v2.6 | ||
17 | * 28-Oct-2004 BJD Added over-ride for idle, and fixed reset panic() | ||
18 | */ | ||
19 | |||
20 | #include <asm/hardware.h> | ||
21 | #include <asm/io.h> | ||
22 | |||
23 | #include <asm/arch/map.h> | ||
24 | #include <asm/arch/idle.h> | ||
25 | |||
26 | #include <asm/arch/regs-watchdog.h> | ||
27 | #include <asm/arch/regs-clock.h> | ||
28 | |||
29 | void (*s3c24xx_idle)(void); | ||
30 | |||
31 | void s3c24xx_default_idle(void) | ||
32 | { | ||
33 | void __iomem *reg = S3C2410_CLKCON; | ||
34 | unsigned long tmp; | ||
35 | int i; | ||
36 | |||
37 | /* idle the system by using the idle mode which will wait for an | ||
38 | * interrupt to happen before restarting the system. | ||
39 | */ | ||
40 | |||
41 | /* Warning: going into idle state upsets jtag scanning */ | ||
42 | |||
43 | __raw_writel(__raw_readl(reg) | (1<<2), reg); | ||
44 | |||
45 | /* the samsung port seems to do a loop and then unset idle.. */ | ||
46 | for (i = 0; i < 50; i++) { | ||
47 | tmp += __raw_readl(reg); /* ensure loop not optimised out */ | ||
48 | } | ||
49 | |||
50 | /* this bit is not cleared on re-start... */ | ||
51 | |||
52 | __raw_writel(__raw_readl(reg) & ~(1<<2), reg); | ||
53 | } | ||
54 | |||
55 | static void arch_idle(void) | ||
56 | { | ||
57 | if (s3c24xx_idle != NULL) | ||
58 | (s3c24xx_idle)(); | ||
59 | else | ||
60 | s3c24xx_default_idle(); | ||
61 | } | ||
62 | |||
63 | |||
64 | static void | ||
65 | arch_reset(char mode) | ||
66 | { | ||
67 | if (mode == 's') { | ||
68 | cpu_reset(0); | ||
69 | } | ||
70 | |||
71 | printk("arch_reset: attempting watchdog reset\n"); | ||
72 | |||
73 | __raw_writel(0, S3C2410_WTCON); /* disable watchdog, to be safe */ | ||
74 | |||
75 | /* put initial values into count and data */ | ||
76 | __raw_writel(0x100, S3C2410_WTCNT); | ||
77 | __raw_writel(0x100, S3C2410_WTDAT); | ||
78 | |||
79 | /* set the watchdog to go and reset... */ | ||
80 | __raw_writel(S3C2410_WTCON_ENABLE|S3C2410_WTCON_DIV16|S3C2410_WTCON_RSTEN | | ||
81 | S3C2410_WTCON_PRESCALE(0x80), S3C2410_WTCON); | ||
82 | |||
83 | /* wait for reset to assert... */ | ||
84 | mdelay(5000); | ||
85 | |||
86 | printk(KERN_ERR "Watchdog reset failed to assert reset\n"); | ||
87 | |||
88 | /* we'll take a jump through zero as a poor second */ | ||
89 | cpu_reset(0); | ||
90 | } | ||
diff --git a/include/asm-arm/arch-s3c2410/timex.h b/include/asm-arm/arch-s3c2410/timex.h new file mode 100644 index 000000000000..3558a3a750bf --- /dev/null +++ b/include/asm-arm/arch-s3c2410/timex.h | |||
@@ -0,0 +1,32 @@ | |||
1 | /* linux/include/asm-arm/arch-s3c2410/timex.h | ||
2 | * | ||
3 | * (c) 2003-2005 Simtec Electronics | ||
4 | * Ben Dooks <ben@simtec.co.uk> | ||
5 | * | ||
6 | * S3C2410 - time parameters | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | * | ||
12 | * Changelog: | ||
13 | * 02-Sep-2003 BJD Created file | ||
14 | * 05-Jan-2004 BJD Updated for Linux 2.6.0 | ||
15 | * 22-Nov-2004 BJD Fixed CLOCK_TICK_RATE | ||
16 | * 10-Jan-2004 BJD Removed s3c2410_clock_tick_rate | ||
17 | */ | ||
18 | |||
19 | #ifndef __ASM_ARCH_TIMEX_H | ||
20 | #define __ASM_ARCH_TIMEX_H | ||
21 | |||
22 | /* CLOCK_TICK_RATE needs to be evaluatable by the cpp, so making it | ||
23 | * a variable is useless. It seems as long as we make our timers an | ||
24 | * exact multiple of HZ, any value that makes a 1->1 correspondence | ||
25 | * for the time conversion functions to/from jiffies is acceptable. | ||
26 | */ | ||
27 | |||
28 | |||
29 | #define CLOCK_TICK_RATE 12000000 | ||
30 | |||
31 | |||
32 | #endif /* __ASM_ARCH_TIMEX_H */ | ||
diff --git a/include/asm-arm/arch-s3c2410/uncompress.h b/include/asm-arm/arch-s3c2410/uncompress.h new file mode 100644 index 000000000000..ad4252e27799 --- /dev/null +++ b/include/asm-arm/arch-s3c2410/uncompress.h | |||
@@ -0,0 +1,158 @@ | |||
1 | /* linux/include/asm-arm/arch-s3c2410/uncompress.h | ||
2 | * | ||
3 | * (c) 2003 Simtec Electronics | ||
4 | * Ben Dooks <ben@simtec.co.uk> | ||
5 | * | ||
6 | * S3C2410 - uncompress code | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | * | ||
12 | * Changelog: | ||
13 | * 22-May-2003 BJD Created | ||
14 | * 08-Sep-2003 BJD Moved to linux v2.6 | ||
15 | * 12-Mar-2004 BJD Updated header protection | ||
16 | * 12-Oct-2004 BJD Take account of debug uart configuration | ||
17 | * 15-Nov-2004 BJD Fixed uart configuration | ||
18 | * 22-Feb-2005 BJD Added watchdog to uncompress | ||
19 | */ | ||
20 | |||
21 | #ifndef __ASM_ARCH_UNCOMPRESS_H | ||
22 | #define __ASM_ARCH_UNCOMPRESS_H | ||
23 | |||
24 | #include <linux/config.h> | ||
25 | |||
26 | /* defines for UART registers */ | ||
27 | #include "asm/arch/regs-serial.h" | ||
28 | #include "asm/arch/regs-gpio.h" | ||
29 | #include "asm/arch/regs-watchdog.h" | ||
30 | |||
31 | #include <asm/arch/map.h> | ||
32 | |||
33 | /* working in physical space... */ | ||
34 | #undef S3C2410_GPIOREG | ||
35 | #undef S3C2410_WDOGREG | ||
36 | |||
37 | #define S3C2410_GPIOREG(x) ((S3C2410_PA_GPIO + (x))) | ||
38 | #define S3C2410_WDOGREG(x) ((S3C2410_PA_WATCHDOG + (x))) | ||
39 | |||
40 | /* how many bytes we allow into the FIFO at a time in FIFO mode */ | ||
41 | #define FIFO_MAX (14) | ||
42 | |||
43 | #define uart_base S3C2410_PA_UART + (0x4000*CONFIG_S3C2410_LOWLEVEL_UART_PORT) | ||
44 | |||
45 | static __inline__ void | ||
46 | uart_wr(unsigned int reg, unsigned int val) | ||
47 | { | ||
48 | volatile unsigned int *ptr; | ||
49 | |||
50 | ptr = (volatile unsigned int *)(reg + uart_base); | ||
51 | *ptr = val; | ||
52 | } | ||
53 | |||
54 | static __inline__ unsigned int | ||
55 | uart_rd(unsigned int reg) | ||
56 | { | ||
57 | volatile unsigned int *ptr; | ||
58 | |||
59 | ptr = (volatile unsigned int *)(reg + uart_base); | ||
60 | return *ptr; | ||
61 | } | ||
62 | |||
63 | |||
64 | /* we can deal with the case the UARTs are being run | ||
65 | * in FIFO mode, so that we don't hold up our execution | ||
66 | * waiting for tx to happen... | ||
67 | */ | ||
68 | |||
69 | static void | ||
70 | putc(char ch) | ||
71 | { | ||
72 | int cpuid = *((volatile unsigned int *)S3C2410_GSTATUS1); | ||
73 | |||
74 | cpuid &= S3C2410_GSTATUS1_IDMASK; | ||
75 | |||
76 | if (ch == '\n') | ||
77 | putc('\r'); /* expand newline to \r\n */ | ||
78 | |||
79 | if (uart_rd(S3C2410_UFCON) & S3C2410_UFCON_FIFOMODE) { | ||
80 | int level; | ||
81 | |||
82 | while (1) { | ||
83 | level = uart_rd(S3C2410_UFSTAT); | ||
84 | |||
85 | if (cpuid == S3C2410_GSTATUS1_2440) { | ||
86 | level &= S3C2440_UFSTAT_TXMASK; | ||
87 | level >>= S3C2440_UFSTAT_TXSHIFT; | ||
88 | } else { | ||
89 | level &= S3C2410_UFSTAT_TXMASK; | ||
90 | level >>= S3C2410_UFSTAT_TXSHIFT; | ||
91 | } | ||
92 | |||
93 | if (level < FIFO_MAX) | ||
94 | break; | ||
95 | } | ||
96 | |||
97 | } else { | ||
98 | /* not using fifos */ | ||
99 | |||
100 | while ((uart_rd(S3C2410_UTRSTAT) & S3C2410_UTRSTAT_TXE) != S3C2410_UTRSTAT_TXE); | ||
101 | } | ||
102 | |||
103 | /* write byte to transmission register */ | ||
104 | uart_wr(S3C2410_UTXH, ch); | ||
105 | } | ||
106 | |||
107 | static void | ||
108 | putstr(const char *ptr) | ||
109 | { | ||
110 | for (; *ptr != '\0'; ptr++) { | ||
111 | putc(*ptr); | ||
112 | } | ||
113 | } | ||
114 | |||
115 | /* CONFIG_S3C2410_BOOT_WATCHDOG | ||
116 | * | ||
117 | * Simple boot-time watchdog setup, to reboot the system if there is | ||
118 | * any problem with the boot process | ||
119 | */ | ||
120 | |||
121 | #ifdef CONFIG_S3C2410_BOOT_WATCHDOG | ||
122 | |||
123 | #define WDOG_COUNT (0xff00) | ||
124 | |||
125 | #define __raw_writel(d,ad) do { *((volatile unsigned int *)(ad)) = (d); } while(0) | ||
126 | |||
127 | static inline void arch_decomp_wdog(void) | ||
128 | { | ||
129 | __raw_writel(WDOG_COUNT, S3C2410_WTCNT); | ||
130 | } | ||
131 | |||
132 | static void arch_decomp_wdog_start(void) | ||
133 | { | ||
134 | __raw_writel(WDOG_COUNT, S3C2410_WTDAT); | ||
135 | __raw_writel(WDOG_COUNT, S3C2410_WTCNT); | ||
136 | __raw_writel(S3C2410_WTCON_ENABLE | S3C2410_WTCON_DIV128 | S3C2410_WTCON_RSTEN | S3C2410_WTCON_PRESCALE(0x40), S3C2410_WTCON); | ||
137 | } | ||
138 | |||
139 | #else | ||
140 | #define arch_decomp_wdog_start() | ||
141 | #define arch_decomp_wdog() | ||
142 | #endif | ||
143 | |||
144 | static void error(char *err); | ||
145 | |||
146 | static void | ||
147 | arch_decomp_setup(void) | ||
148 | { | ||
149 | /* we may need to setup the uart(s) here if we are not running | ||
150 | * on an BAST... the BAST will have left the uarts configured | ||
151 | * after calling linux. | ||
152 | */ | ||
153 | |||
154 | arch_decomp_wdog_start(); | ||
155 | } | ||
156 | |||
157 | |||
158 | #endif /* __ASM_ARCH_UNCOMPRESS_H */ | ||
diff --git a/include/asm-arm/arch-s3c2410/usb-control.h b/include/asm-arm/arch-s3c2410/usb-control.h new file mode 100644 index 000000000000..1cc85a096b23 --- /dev/null +++ b/include/asm-arm/arch-s3c2410/usb-control.h | |||
@@ -0,0 +1,45 @@ | |||
1 | /* linux/include/asm-arm/arch-s3c2410/usb-control.h | ||
2 | * | ||
3 | * (c) 2004 Simtec Electronics | ||
4 | * Ben Dooks <ben@simtec.co.uk> | ||
5 | * | ||
6 | * S3C2410 - usb port information | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | * | ||
12 | * Changelog: | ||
13 | * 11-Sep-2004 BJD Created file | ||
14 | * 21-Sep-2004 BJD Updated port info | ||
15 | */ | ||
16 | |||
17 | #ifndef __ASM_ARCH_USBCONTROL_H | ||
18 | #define __ASM_ARCH_USBCONTROL_H "include/asm-arm/arch-s3c2410/usb-control.h" | ||
19 | |||
20 | #define S3C_HCDFLG_USED (1) | ||
21 | |||
22 | struct s3c2410_hcd_port { | ||
23 | unsigned char flags; | ||
24 | unsigned char power; | ||
25 | unsigned char oc_status; | ||
26 | unsigned char oc_changed; | ||
27 | }; | ||
28 | |||
29 | struct s3c2410_hcd_info { | ||
30 | struct usb_hcd *hcd; | ||
31 | struct s3c2410_hcd_port port[2]; | ||
32 | |||
33 | void (*power_control)(int port, int to); | ||
34 | void (*enable_oc)(struct s3c2410_hcd_info *, int on); | ||
35 | void (*report_oc)(struct s3c2410_hcd_info *, int ports); | ||
36 | }; | ||
37 | |||
38 | static void inline s3c2410_report_oc(struct s3c2410_hcd_info *info, int ports) | ||
39 | { | ||
40 | if (info->report_oc != NULL) { | ||
41 | (info->report_oc)(info, ports); | ||
42 | } | ||
43 | } | ||
44 | |||
45 | #endif /*__ASM_ARCH_USBCONTROL_H */ | ||
diff --git a/include/asm-arm/arch-s3c2410/vmalloc.h b/include/asm-arm/arch-s3c2410/vmalloc.h new file mode 100644 index 000000000000..5fe72ad70904 --- /dev/null +++ b/include/asm-arm/arch-s3c2410/vmalloc.h | |||
@@ -0,0 +1,36 @@ | |||
1 | /* linux/include/asm-arm/arch-s3c2410/vmalloc.h | ||
2 | * | ||
3 | * from linux/include/asm-arm/arch-iop3xx/vmalloc.h | ||
4 | * | ||
5 | * Copyright (c) 2003 Simtec Electronics <linux@simtec.co.uk> | ||
6 | * http://www.simtec.co.uk/products/SWLINUX/ | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | * | ||
12 | * S3C2410 vmalloc definition | ||
13 | * | ||
14 | * Changelog: | ||
15 | * 12-Mar-2004 BJD Fixed header, added include protection | ||
16 | * 12=Mar-2004 BJD Fixed VMALLOC_END definitions | ||
17 | */ | ||
18 | |||
19 | #ifndef __ASM_ARCH_VMALLOC_H | ||
20 | #define __ASM_ARCH_VMALLOC_H | ||
21 | |||
22 | /* | ||
23 | * Just any arbitrary offset to the start of the vmalloc VM area: the | ||
24 | * current 8MB value just means that there will be a 8MB "hole" after the | ||
25 | * physical memory until the kernel virtual memory starts. That means that | ||
26 | * any out-of-bounds memory accesses will hopefully be caught. | ||
27 | * The vmalloc() routines leaves a hole of 4kB between each vmalloced | ||
28 | * area for the same reason. ;) | ||
29 | */ | ||
30 | |||
31 | #define VMALLOC_OFFSET (8*1024*1024) | ||
32 | #define VMALLOC_START (((unsigned long)high_memory + VMALLOC_OFFSET) & ~(VMALLOC_OFFSET-1)) | ||
33 | #define VMALLOC_VMADDR(x) ((unsigned long)(x)) | ||
34 | #define VMALLOC_END (0xE0000000) | ||
35 | |||
36 | #endif /* __ASM_ARCH_VMALLOC_H */ | ||
diff --git a/include/asm-arm/arch-s3c2410/vr1000-cpld.h b/include/asm-arm/arch-s3c2410/vr1000-cpld.h new file mode 100644 index 000000000000..0ee373ac60d4 --- /dev/null +++ b/include/asm-arm/arch-s3c2410/vr1000-cpld.h | |||
@@ -0,0 +1,22 @@ | |||
1 | /* linux/include/asm-arm/arch-s3c2410/vr1000-cpld.h | ||
2 | * | ||
3 | * (c) 2003 Simtec Electronics | ||
4 | * Ben Dooks <ben@simtec.co.uk> | ||
5 | * | ||
6 | * VR1000 - CPLD control constants | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | * | ||
12 | * Changelog: | ||
13 | * 25-May-2003 BJD Created file, added CTRL1 registers | ||
14 | * 19-Mar-2004 BJD Added VR1000 CPLD definitions | ||
15 | */ | ||
16 | |||
17 | #ifndef __ASM_ARCH_VR1000CPLD_H | ||
18 | #define __ASM_ARCH_VR1000CPLD_H | ||
19 | |||
20 | #define VR1000_CPLD_CTRL2_RAMWEN (0x04) /* SRAM Write Enable */ | ||
21 | |||
22 | #endif /* __ASM_ARCH_VR1000CPLD_H */ | ||
diff --git a/include/asm-arm/arch-s3c2410/vr1000-irq.h b/include/asm-arm/arch-s3c2410/vr1000-irq.h new file mode 100644 index 000000000000..694f7715d2da --- /dev/null +++ b/include/asm-arm/arch-s3c2410/vr1000-irq.h | |||
@@ -0,0 +1,30 @@ | |||
1 | /* linux/include/asm-arm/arch-s3c2410/vr1000-irq.h | ||
2 | * | ||
3 | * (c) 2003,2004 Simtec Electronics | ||
4 | * Ben Dooks <ben@simtec.co.uk> | ||
5 | * | ||
6 | * Machine VR1000 - IRQ Number definitions | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | * | ||
12 | * Changelog: | ||
13 | * 06-Jan-2003 BJD Linux 2.6.0 version | ||
14 | * 19-Mar-2004 BJD Updates for VR1000 | ||
15 | */ | ||
16 | |||
17 | #ifndef __ASM_ARCH_VR1000IRQ_H | ||
18 | #define __ASM_ARCH_VR1000IRQ_H | ||
19 | |||
20 | /* irq numbers to onboard peripherals */ | ||
21 | |||
22 | #define IRQ_USBOC IRQ_EINT19 | ||
23 | #define IRQ_IDE0 IRQ_EINT16 | ||
24 | #define IRQ_IDE1 IRQ_EINT17 | ||
25 | #define IRQ_VR1000_SERIAL IRQ_EINT12 | ||
26 | #define IRQ_VR1000_DM9000A IRQ_EINT10 | ||
27 | #define IRQ_VR1000_DM9000N IRQ_EINT9 | ||
28 | #define IRQ_SMALERT IRQ_EINT8 | ||
29 | |||
30 | #endif /* __ASM_ARCH_VR1000IRQ_H */ | ||
diff --git a/include/asm-arm/arch-s3c2410/vr1000-map.h b/include/asm-arm/arch-s3c2410/vr1000-map.h new file mode 100644 index 000000000000..867c9355fd39 --- /dev/null +++ b/include/asm-arm/arch-s3c2410/vr1000-map.h | |||
@@ -0,0 +1,116 @@ | |||
1 | /* linux/include/asm-arm/arch-s3c2410/vr1000-map.h | ||
2 | * | ||
3 | * (c) 2003-2005 Simtec Electronics | ||
4 | * Ben Dooks <ben@simtec.co.uk> | ||
5 | * | ||
6 | * Machine VR1000 - Memory map definitions | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | * | ||
12 | * Changelog: | ||
13 | * 06-Jan-2003 BJD Linux 2.6.0 version, split specifics from arch/map.h | ||
14 | * 12-Mar-2004 BJD Fixed header include protection | ||
15 | * 19-Mar-2004 BJD Copied to VR1000 machine headers. | ||
16 | * 19-Jan-2005 BJD Updated map definitions | ||
17 | */ | ||
18 | |||
19 | /* needs arch/map.h including with this */ | ||
20 | |||
21 | /* ok, we've used up to 0x13000000, now we need to find space for the | ||
22 | * peripherals that live in the nGCS[x] areas, which are quite numerous | ||
23 | * in their space. We also have the board's CPLD to find register space | ||
24 | * for. | ||
25 | */ | ||
26 | |||
27 | #ifndef __ASM_ARCH_VR1000MAP_H | ||
28 | #define __ASM_ARCH_VR1000MAP_H | ||
29 | |||
30 | #include <asm/arch/bast-map.h> | ||
31 | |||
32 | #define VR1000_IOADDR(x) BAST_IOADDR(x) | ||
33 | |||
34 | /* we put the CPLD registers next, to get them out of the way */ | ||
35 | |||
36 | #define VR1000_VA_CTRL1 VR1000_IOADDR(0x00000000) /* 0x01300000 */ | ||
37 | #define VR1000_PA_CTRL1 (S3C2410_CS5 | 0x7800000) | ||
38 | |||
39 | #define VR1000_VA_CTRL2 VR1000_IOADDR(0x00100000) /* 0x01400000 */ | ||
40 | #define VR1000_PA_CTRL2 (S3C2410_CS1 | 0x6000000) | ||
41 | |||
42 | #define VR1000_VA_CTRL3 VR1000_IOADDR(0x00200000) /* 0x01500000 */ | ||
43 | #define VR1000_PA_CTRL3 (S3C2410_CS1 | 0x6800000) | ||
44 | |||
45 | #define VR1000_VA_CTRL4 VR1000_IOADDR(0x00300000) /* 0x01600000 */ | ||
46 | #define VR1000_PA_CTRL4 (S3C2410_CS1 | 0x7000000) | ||
47 | |||
48 | /* next, we have the PC104 ISA interrupt registers */ | ||
49 | |||
50 | #define VR1000_PA_PC104_IRQREQ (S3C2410_CS5 | 0x6000000) /* 0x01700000 */ | ||
51 | #define VR1000_VA_PC104_IRQREQ VR1000_IOADDR(0x00400000) | ||
52 | |||
53 | #define VR1000_PA_PC104_IRQRAW (S3C2410_CS5 | 0x6800000) /* 0x01800000 */ | ||
54 | #define VR1000_VA_PC104_IRQRAW VR1000_IOADDR(0x00500000) | ||
55 | |||
56 | #define VR1000_PA_PC104_IRQMASK (S3C2410_CS5 | 0x7000000) /* 0x01900000 */ | ||
57 | #define VR1000_VA_PC104_IRQMASK VR1000_IOADDR(0x00600000) | ||
58 | |||
59 | /* 0xE0000000 contains the IO space that is split by speed and | ||
60 | * wether the access is for 8 or 16bit IO... this ensures that | ||
61 | * the correct access is made | ||
62 | * | ||
63 | * 0x10000000 of space, partitioned as so: | ||
64 | * | ||
65 | * 0x00000000 to 0x04000000 8bit, slow | ||
66 | * 0x04000000 to 0x08000000 16bit, slow | ||
67 | * 0x08000000 to 0x0C000000 16bit, net | ||
68 | * 0x0C000000 to 0x10000000 16bit, fast | ||
69 | * | ||
70 | * each of these spaces has the following in: | ||
71 | * | ||
72 | * 0x02000000 to 0x02100000 1MB IDE primary channel | ||
73 | * 0x02100000 to 0x02200000 1MB IDE primary channel aux | ||
74 | * 0x02200000 to 0x02400000 1MB IDE secondary channel | ||
75 | * 0x02300000 to 0x02400000 1MB IDE secondary channel aux | ||
76 | * 0x02500000 to 0x02600000 1MB Davicom DM9000 ethernet controllers | ||
77 | * 0x02600000 to 0x02700000 1MB | ||
78 | * | ||
79 | * the phyiscal layout of the zones are: | ||
80 | * nGCS2 - 8bit, slow | ||
81 | * nGCS3 - 16bit, slow | ||
82 | * nGCS4 - 16bit, net | ||
83 | * nGCS5 - 16bit, fast | ||
84 | */ | ||
85 | |||
86 | #define VR1000_VA_MULTISPACE (0xE0000000) | ||
87 | |||
88 | #define VR1000_VA_ISAIO (VR1000_VA_MULTISPACE + 0x00000000) | ||
89 | #define VR1000_VA_ISAMEM (VR1000_VA_MULTISPACE + 0x01000000) | ||
90 | #define VR1000_VA_IDEPRI (VR1000_VA_MULTISPACE + 0x02000000) | ||
91 | #define VR1000_VA_IDEPRIAUX (VR1000_VA_MULTISPACE + 0x02100000) | ||
92 | #define VR1000_VA_IDESEC (VR1000_VA_MULTISPACE + 0x02200000) | ||
93 | #define VR1000_VA_IDESECAUX (VR1000_VA_MULTISPACE + 0x02300000) | ||
94 | #define VR1000_VA_ASIXNET (VR1000_VA_MULTISPACE + 0x02400000) | ||
95 | #define VR1000_VA_DM9000 (VR1000_VA_MULTISPACE + 0x02500000) | ||
96 | #define VR1000_VA_SUPERIO (VR1000_VA_MULTISPACE + 0x02600000) | ||
97 | |||
98 | /* physical offset addresses for the peripherals */ | ||
99 | |||
100 | #define VR1000_PA_IDEPRI (0x02000000) | ||
101 | #define VR1000_PA_IDEPRIAUX (0x02800000) | ||
102 | #define VR1000_PA_IDESEC (0x03000000) | ||
103 | #define VR1000_PA_IDESECAUX (0x03800000) | ||
104 | #define VR1000_PA_DM9000 (0x05000000) | ||
105 | |||
106 | #define VR1000_PA_SERIAL (0x11800000) | ||
107 | #define VR1000_VA_SERIAL (VR1000_IOADDR(0x00700000)) | ||
108 | |||
109 | /* VR1000 ram is in CS1, with A26..A24 = 2_101 */ | ||
110 | #define VR1000_PA_SRAM (S3C2410_CS1 | 0x05000000) | ||
111 | |||
112 | /* some configurations for the peripherals */ | ||
113 | |||
114 | #define VR1000_DM9000_CS VR1000_VAM_CS4 | ||
115 | |||
116 | #endif /* __ASM_ARCH_VR1000MAP_H */ | ||
diff --git a/include/asm-arm/arch-sa1100/SA-1100.h b/include/asm-arm/arch-sa1100/SA-1100.h new file mode 100644 index 000000000000..62aaf04a3906 --- /dev/null +++ b/include/asm-arm/arch-sa1100/SA-1100.h | |||
@@ -0,0 +1,2072 @@ | |||
1 | /* | ||
2 | * FILE SA-1100.h | ||
3 | * | ||
4 | * Version 1.2 | ||
5 | * Author Copyright (c) Marc A. Viredaz, 1998 | ||
6 | * DEC Western Research Laboratory, Palo Alto, CA | ||
7 | * Date January 1998 (April 1997) | ||
8 | * System StrongARM SA-1100 | ||
9 | * Language C or ARM Assembly | ||
10 | * Purpose Definition of constants related to the StrongARM | ||
11 | * SA-1100 microprocessor (Advanced RISC Machine (ARM) | ||
12 | * architecture version 4). This file is based on the | ||
13 | * StrongARM SA-1100 data sheet version 2.2. | ||
14 | * | ||
15 | */ | ||
16 | |||
17 | |||
18 | /* Be sure that virtual mapping is defined right */ | ||
19 | #ifndef __ASM_ARCH_HARDWARE_H | ||
20 | #error You must include hardware.h not SA-1100.h | ||
21 | #endif | ||
22 | |||
23 | #include "bitfield.h" | ||
24 | |||
25 | /* | ||
26 | * SA1100 CS line to physical address | ||
27 | */ | ||
28 | |||
29 | #define SA1100_CS0_PHYS 0x00000000 | ||
30 | #define SA1100_CS1_PHYS 0x08000000 | ||
31 | #define SA1100_CS2_PHYS 0x10000000 | ||
32 | #define SA1100_CS3_PHYS 0x18000000 | ||
33 | #define SA1100_CS4_PHYS 0x40000000 | ||
34 | #define SA1100_CS5_PHYS 0x48000000 | ||
35 | |||
36 | /* | ||
37 | * Personal Computer Memory Card International Association (PCMCIA) sockets | ||
38 | */ | ||
39 | |||
40 | #define PCMCIAPrtSp 0x04000000 /* PCMCIA Partition Space [byte] */ | ||
41 | #define PCMCIASp (4*PCMCIAPrtSp) /* PCMCIA Space [byte] */ | ||
42 | #define PCMCIAIOSp PCMCIAPrtSp /* PCMCIA I/O Space [byte] */ | ||
43 | #define PCMCIAAttrSp PCMCIAPrtSp /* PCMCIA Attribute Space [byte] */ | ||
44 | #define PCMCIAMemSp PCMCIAPrtSp /* PCMCIA Memory Space [byte] */ | ||
45 | |||
46 | #define PCMCIA0Sp PCMCIASp /* PCMCIA 0 Space [byte] */ | ||
47 | #define PCMCIA0IOSp PCMCIAIOSp /* PCMCIA 0 I/O Space [byte] */ | ||
48 | #define PCMCIA0AttrSp PCMCIAAttrSp /* PCMCIA 0 Attribute Space [byte] */ | ||
49 | #define PCMCIA0MemSp PCMCIAMemSp /* PCMCIA 0 Memory Space [byte] */ | ||
50 | |||
51 | #define PCMCIA1Sp PCMCIASp /* PCMCIA 1 Space [byte] */ | ||
52 | #define PCMCIA1IOSp PCMCIAIOSp /* PCMCIA 1 I/O Space [byte] */ | ||
53 | #define PCMCIA1AttrSp PCMCIAAttrSp /* PCMCIA 1 Attribute Space [byte] */ | ||
54 | #define PCMCIA1MemSp PCMCIAMemSp /* PCMCIA 1 Memory Space [byte] */ | ||
55 | |||
56 | #define _PCMCIA(Nb) /* PCMCIA [0..1] */ \ | ||
57 | (0x20000000 + (Nb)*PCMCIASp) | ||
58 | #define _PCMCIAIO(Nb) _PCMCIA (Nb) /* PCMCIA I/O [0..1] */ | ||
59 | #define _PCMCIAAttr(Nb) /* PCMCIA Attribute [0..1] */ \ | ||
60 | (_PCMCIA (Nb) + 2*PCMCIAPrtSp) | ||
61 | #define _PCMCIAMem(Nb) /* PCMCIA Memory [0..1] */ \ | ||
62 | (_PCMCIA (Nb) + 3*PCMCIAPrtSp) | ||
63 | |||
64 | #define _PCMCIA0 _PCMCIA (0) /* PCMCIA 0 */ | ||
65 | #define _PCMCIA0IO _PCMCIAIO (0) /* PCMCIA 0 I/O */ | ||
66 | #define _PCMCIA0Attr _PCMCIAAttr (0) /* PCMCIA 0 Attribute */ | ||
67 | #define _PCMCIA0Mem _PCMCIAMem (0) /* PCMCIA 0 Memory */ | ||
68 | |||
69 | #define _PCMCIA1 _PCMCIA (1) /* PCMCIA 1 */ | ||
70 | #define _PCMCIA1IO _PCMCIAIO (1) /* PCMCIA 1 I/O */ | ||
71 | #define _PCMCIA1Attr _PCMCIAAttr (1) /* PCMCIA 1 Attribute */ | ||
72 | #define _PCMCIA1Mem _PCMCIAMem (1) /* PCMCIA 1 Memory */ | ||
73 | |||
74 | |||
75 | /* | ||
76 | * Universal Serial Bus (USB) Device Controller (UDC) control registers | ||
77 | * | ||
78 | * Registers | ||
79 | * Ser0UDCCR Serial port 0 Universal Serial Bus (USB) Device | ||
80 | * Controller (UDC) Control Register (read/write). | ||
81 | * Ser0UDCAR Serial port 0 Universal Serial Bus (USB) Device | ||
82 | * Controller (UDC) Address Register (read/write). | ||
83 | * Ser0UDCOMP Serial port 0 Universal Serial Bus (USB) Device | ||
84 | * Controller (UDC) Output Maximum Packet size register | ||
85 | * (read/write). | ||
86 | * Ser0UDCIMP Serial port 0 Universal Serial Bus (USB) Device | ||
87 | * Controller (UDC) Input Maximum Packet size register | ||
88 | * (read/write). | ||
89 | * Ser0UDCCS0 Serial port 0 Universal Serial Bus (USB) Device | ||
90 | * Controller (UDC) Control/Status register end-point 0 | ||
91 | * (read/write). | ||
92 | * Ser0UDCCS1 Serial port 0 Universal Serial Bus (USB) Device | ||
93 | * Controller (UDC) Control/Status register end-point 1 | ||
94 | * (output, read/write). | ||
95 | * Ser0UDCCS2 Serial port 0 Universal Serial Bus (USB) Device | ||
96 | * Controller (UDC) Control/Status register end-point 2 | ||
97 | * (input, read/write). | ||
98 | * Ser0UDCD0 Serial port 0 Universal Serial Bus (USB) Device | ||
99 | * Controller (UDC) Data register end-point 0 | ||
100 | * (read/write). | ||
101 | * Ser0UDCWC Serial port 0 Universal Serial Bus (USB) Device | ||
102 | * Controller (UDC) Write Count register end-point 0 | ||
103 | * (read). | ||
104 | * Ser0UDCDR Serial port 0 Universal Serial Bus (USB) Device | ||
105 | * Controller (UDC) Data Register (read/write). | ||
106 | * Ser0UDCSR Serial port 0 Universal Serial Bus (USB) Device | ||
107 | * Controller (UDC) Status Register (read/write). | ||
108 | */ | ||
109 | |||
110 | #define Ser0UDCCR __REG(0x80000000) /* Ser. port 0 UDC Control Reg. */ | ||
111 | #define Ser0UDCAR __REG(0x80000004) /* Ser. port 0 UDC Address Reg. */ | ||
112 | #define Ser0UDCOMP __REG(0x80000008) /* Ser. port 0 UDC Output Maximum Packet size reg. */ | ||
113 | #define Ser0UDCIMP __REG(0x8000000C) /* Ser. port 0 UDC Input Maximum Packet size reg. */ | ||
114 | #define Ser0UDCCS0 __REG(0x80000010) /* Ser. port 0 UDC Control/Status reg. end-point 0 */ | ||
115 | #define Ser0UDCCS1 __REG(0x80000014) /* Ser. port 0 UDC Control/Status reg. end-point 1 (output) */ | ||
116 | #define Ser0UDCCS2 __REG(0x80000018) /* Ser. port 0 UDC Control/Status reg. end-point 2 (input) */ | ||
117 | #define Ser0UDCD0 __REG(0x8000001C) /* Ser. port 0 UDC Data reg. end-point 0 */ | ||
118 | #define Ser0UDCWC __REG(0x80000020) /* Ser. port 0 UDC Write Count reg. end-point 0 */ | ||
119 | #define Ser0UDCDR __REG(0x80000028) /* Ser. port 0 UDC Data Reg. */ | ||
120 | #define Ser0UDCSR __REG(0x80000030) /* Ser. port 0 UDC Status Reg. */ | ||
121 | |||
122 | #define UDCCR_UDD 0x00000001 /* UDC Disable */ | ||
123 | #define UDCCR_UDA 0x00000002 /* UDC Active (read) */ | ||
124 | #define UDCCR_RESIM 0x00000004 /* Resume Interrupt Mask, per errata */ | ||
125 | #define UDCCR_EIM 0x00000008 /* End-point 0 Interrupt Mask */ | ||
126 | /* (disable) */ | ||
127 | #define UDCCR_RIM 0x00000010 /* Receive Interrupt Mask */ | ||
128 | /* (disable) */ | ||
129 | #define UDCCR_TIM 0x00000020 /* Transmit Interrupt Mask */ | ||
130 | /* (disable) */ | ||
131 | #define UDCCR_SRM 0x00000040 /* Suspend/Resume interrupt Mask */ | ||
132 | /* (disable) */ | ||
133 | #define UDCCR_SUSIM UDCCR_SRM /* Per errata, SRM just masks suspend */ | ||
134 | #define UDCCR_REM 0x00000080 /* REset interrupt Mask (disable) */ | ||
135 | |||
136 | #define UDCAR_ADD Fld (7, 0) /* function ADDress */ | ||
137 | |||
138 | #define UDCOMP_OUTMAXP Fld (8, 0) /* OUTput MAXimum Packet size - 1 */ | ||
139 | /* [byte] */ | ||
140 | #define UDCOMP_OutMaxPkt(Size) /* Output Maximum Packet size */ \ | ||
141 | /* [1..256 byte] */ \ | ||
142 | (((Size) - 1) << FShft (UDCOMP_OUTMAXP)) | ||
143 | |||
144 | #define UDCIMP_INMAXP Fld (8, 0) /* INput MAXimum Packet size - 1 */ | ||
145 | /* [byte] */ | ||
146 | #define UDCIMP_InMaxPkt(Size) /* Input Maximum Packet size */ \ | ||
147 | /* [1..256 byte] */ \ | ||
148 | (((Size) - 1) << FShft (UDCIMP_INMAXP)) | ||
149 | |||
150 | #define UDCCS0_OPR 0x00000001 /* Output Packet Ready (read) */ | ||
151 | #define UDCCS0_IPR 0x00000002 /* Input Packet Ready */ | ||
152 | #define UDCCS0_SST 0x00000004 /* Sent STall */ | ||
153 | #define UDCCS0_FST 0x00000008 /* Force STall */ | ||
154 | #define UDCCS0_DE 0x00000010 /* Data End */ | ||
155 | #define UDCCS0_SE 0x00000020 /* Setup End (read) */ | ||
156 | #define UDCCS0_SO 0x00000040 /* Serviced Output packet ready */ | ||
157 | /* (write) */ | ||
158 | #define UDCCS0_SSE 0x00000080 /* Serviced Setup End (write) */ | ||
159 | |||
160 | #define UDCCS1_RFS 0x00000001 /* Receive FIFO 12-bytes or more */ | ||
161 | /* Service request (read) */ | ||
162 | #define UDCCS1_RPC 0x00000002 /* Receive Packet Complete */ | ||
163 | #define UDCCS1_RPE 0x00000004 /* Receive Packet Error (read) */ | ||
164 | #define UDCCS1_SST 0x00000008 /* Sent STall */ | ||
165 | #define UDCCS1_FST 0x00000010 /* Force STall */ | ||
166 | #define UDCCS1_RNE 0x00000020 /* Receive FIFO Not Empty (read) */ | ||
167 | |||
168 | #define UDCCS2_TFS 0x00000001 /* Transmit FIFO 8-bytes or less */ | ||
169 | /* Service request (read) */ | ||
170 | #define UDCCS2_TPC 0x00000002 /* Transmit Packet Complete */ | ||
171 | #define UDCCS2_TPE 0x00000004 /* Transmit Packet Error (read) */ | ||
172 | #define UDCCS2_TUR 0x00000008 /* Transmit FIFO Under-Run */ | ||
173 | #define UDCCS2_SST 0x00000010 /* Sent STall */ | ||
174 | #define UDCCS2_FST 0x00000020 /* Force STall */ | ||
175 | |||
176 | #define UDCD0_DATA Fld (8, 0) /* receive/transmit DATA FIFOs */ | ||
177 | |||
178 | #define UDCWC_WC Fld (4, 0) /* Write Count */ | ||
179 | |||
180 | #define UDCDR_DATA Fld (8, 0) /* receive/transmit DATA FIFOs */ | ||
181 | |||
182 | #define UDCSR_EIR 0x00000001 /* End-point 0 Interrupt Request */ | ||
183 | #define UDCSR_RIR 0x00000002 /* Receive Interrupt Request */ | ||
184 | #define UDCSR_TIR 0x00000004 /* Transmit Interrupt Request */ | ||
185 | #define UDCSR_SUSIR 0x00000008 /* SUSpend Interrupt Request */ | ||
186 | #define UDCSR_RESIR 0x00000010 /* RESume Interrupt Request */ | ||
187 | #define UDCSR_RSTIR 0x00000020 /* ReSeT Interrupt Request */ | ||
188 | |||
189 | |||
190 | /* | ||
191 | * Universal Asynchronous Receiver/Transmitter (UART) control registers | ||
192 | * | ||
193 | * Registers | ||
194 | * Ser1UTCR0 Serial port 1 Universal Asynchronous | ||
195 | * Receiver/Transmitter (UART) Control Register 0 | ||
196 | * (read/write). | ||
197 | * Ser1UTCR1 Serial port 1 Universal Asynchronous | ||
198 | * Receiver/Transmitter (UART) Control Register 1 | ||
199 | * (read/write). | ||
200 | * Ser1UTCR2 Serial port 1 Universal Asynchronous | ||
201 | * Receiver/Transmitter (UART) Control Register 2 | ||
202 | * (read/write). | ||
203 | * Ser1UTCR3 Serial port 1 Universal Asynchronous | ||
204 | * Receiver/Transmitter (UART) Control Register 3 | ||
205 | * (read/write). | ||
206 | * Ser1UTDR Serial port 1 Universal Asynchronous | ||
207 | * Receiver/Transmitter (UART) Data Register | ||
208 | * (read/write). | ||
209 | * Ser1UTSR0 Serial port 1 Universal Asynchronous | ||
210 | * Receiver/Transmitter (UART) Status Register 0 | ||
211 | * (read/write). | ||
212 | * Ser1UTSR1 Serial port 1 Universal Asynchronous | ||
213 | * Receiver/Transmitter (UART) Status Register 1 (read). | ||
214 | * | ||
215 | * Ser2UTCR0 Serial port 2 Universal Asynchronous | ||
216 | * Receiver/Transmitter (UART) Control Register 0 | ||
217 | * (read/write). | ||
218 | * Ser2UTCR1 Serial port 2 Universal Asynchronous | ||
219 | * Receiver/Transmitter (UART) Control Register 1 | ||
220 | * (read/write). | ||
221 | * Ser2UTCR2 Serial port 2 Universal Asynchronous | ||
222 | * Receiver/Transmitter (UART) Control Register 2 | ||
223 | * (read/write). | ||
224 | * Ser2UTCR3 Serial port 2 Universal Asynchronous | ||
225 | * Receiver/Transmitter (UART) Control Register 3 | ||
226 | * (read/write). | ||
227 | * Ser2UTCR4 Serial port 2 Universal Asynchronous | ||
228 | * Receiver/Transmitter (UART) Control Register 4 | ||
229 | * (read/write). | ||
230 | * Ser2UTDR Serial port 2 Universal Asynchronous | ||
231 | * Receiver/Transmitter (UART) Data Register | ||
232 | * (read/write). | ||
233 | * Ser2UTSR0 Serial port 2 Universal Asynchronous | ||
234 | * Receiver/Transmitter (UART) Status Register 0 | ||
235 | * (read/write). | ||
236 | * Ser2UTSR1 Serial port 2 Universal Asynchronous | ||
237 | * Receiver/Transmitter (UART) Status Register 1 (read). | ||
238 | * | ||
239 | * Ser3UTCR0 Serial port 3 Universal Asynchronous | ||
240 | * Receiver/Transmitter (UART) Control Register 0 | ||
241 | * (read/write). | ||
242 | * Ser3UTCR1 Serial port 3 Universal Asynchronous | ||
243 | * Receiver/Transmitter (UART) Control Register 1 | ||
244 | * (read/write). | ||
245 | * Ser3UTCR2 Serial port 3 Universal Asynchronous | ||
246 | * Receiver/Transmitter (UART) Control Register 2 | ||
247 | * (read/write). | ||
248 | * Ser3UTCR3 Serial port 3 Universal Asynchronous | ||
249 | * Receiver/Transmitter (UART) Control Register 3 | ||
250 | * (read/write). | ||
251 | * Ser3UTDR Serial port 3 Universal Asynchronous | ||
252 | * Receiver/Transmitter (UART) Data Register | ||
253 | * (read/write). | ||
254 | * Ser3UTSR0 Serial port 3 Universal Asynchronous | ||
255 | * Receiver/Transmitter (UART) Status Register 0 | ||
256 | * (read/write). | ||
257 | * Ser3UTSR1 Serial port 3 Universal Asynchronous | ||
258 | * Receiver/Transmitter (UART) Status Register 1 (read). | ||
259 | * | ||
260 | * Clocks | ||
261 | * fxtl, Txtl Frequency, period of the system crystal (3.6864 MHz | ||
262 | * or 3.5795 MHz). | ||
263 | * fua, Tua Frequency, period of the UART communication. | ||
264 | */ | ||
265 | |||
266 | #define _UTCR0(Nb) __REG(0x80010000 + ((Nb) - 1)*0x00020000) /* UART Control Reg. 0 [1..3] */ | ||
267 | #define _UTCR1(Nb) __REG(0x80010004 + ((Nb) - 1)*0x00020000) /* UART Control Reg. 1 [1..3] */ | ||
268 | #define _UTCR2(Nb) __REG(0x80010008 + ((Nb) - 1)*0x00020000) /* UART Control Reg. 2 [1..3] */ | ||
269 | #define _UTCR3(Nb) __REG(0x8001000C + ((Nb) - 1)*0x00020000) /* UART Control Reg. 3 [1..3] */ | ||
270 | #define _UTCR4(Nb) __REG(0x80010010 + ((Nb) - 1)*0x00020000) /* UART Control Reg. 4 [2] */ | ||
271 | #define _UTDR(Nb) __REG(0x80010014 + ((Nb) - 1)*0x00020000) /* UART Data Reg. [1..3] */ | ||
272 | #define _UTSR0(Nb) __REG(0x8001001C + ((Nb) - 1)*0x00020000) /* UART Status Reg. 0 [1..3] */ | ||
273 | #define _UTSR1(Nb) __REG(0x80010020 + ((Nb) - 1)*0x00020000) /* UART Status Reg. 1 [1..3] */ | ||
274 | |||
275 | #define Ser1UTCR0 _UTCR0 (1) /* Ser. port 1 UART Control Reg. 0 */ | ||
276 | #define Ser1UTCR1 _UTCR1 (1) /* Ser. port 1 UART Control Reg. 1 */ | ||
277 | #define Ser1UTCR2 _UTCR2 (1) /* Ser. port 1 UART Control Reg. 2 */ | ||
278 | #define Ser1UTCR3 _UTCR3 (1) /* Ser. port 1 UART Control Reg. 3 */ | ||
279 | #define Ser1UTDR _UTDR (1) /* Ser. port 1 UART Data Reg. */ | ||
280 | #define Ser1UTSR0 _UTSR0 (1) /* Ser. port 1 UART Status Reg. 0 */ | ||
281 | #define Ser1UTSR1 _UTSR1 (1) /* Ser. port 1 UART Status Reg. 1 */ | ||
282 | |||
283 | #define Ser2UTCR0 _UTCR0 (2) /* Ser. port 2 UART Control Reg. 0 */ | ||
284 | #define Ser2UTCR1 _UTCR1 (2) /* Ser. port 2 UART Control Reg. 1 */ | ||
285 | #define Ser2UTCR2 _UTCR2 (2) /* Ser. port 2 UART Control Reg. 2 */ | ||
286 | #define Ser2UTCR3 _UTCR3 (2) /* Ser. port 2 UART Control Reg. 3 */ | ||
287 | #define Ser2UTCR4 _UTCR4 (2) /* Ser. port 2 UART Control Reg. 4 */ | ||
288 | #define Ser2UTDR _UTDR (2) /* Ser. port 2 UART Data Reg. */ | ||
289 | #define Ser2UTSR0 _UTSR0 (2) /* Ser. port 2 UART Status Reg. 0 */ | ||
290 | #define Ser2UTSR1 _UTSR1 (2) /* Ser. port 2 UART Status Reg. 1 */ | ||
291 | |||
292 | #define Ser3UTCR0 _UTCR0 (3) /* Ser. port 3 UART Control Reg. 0 */ | ||
293 | #define Ser3UTCR1 _UTCR1 (3) /* Ser. port 3 UART Control Reg. 1 */ | ||
294 | #define Ser3UTCR2 _UTCR2 (3) /* Ser. port 3 UART Control Reg. 2 */ | ||
295 | #define Ser3UTCR3 _UTCR3 (3) /* Ser. port 3 UART Control Reg. 3 */ | ||
296 | #define Ser3UTDR _UTDR (3) /* Ser. port 3 UART Data Reg. */ | ||
297 | #define Ser3UTSR0 _UTSR0 (3) /* Ser. port 3 UART Status Reg. 0 */ | ||
298 | #define Ser3UTSR1 _UTSR1 (3) /* Ser. port 3 UART Status Reg. 1 */ | ||
299 | |||
300 | /* Those are still used in some places */ | ||
301 | #define _Ser1UTCR0 __PREG(Ser1UTCR0) | ||
302 | #define _Ser2UTCR0 __PREG(Ser2UTCR0) | ||
303 | #define _Ser3UTCR0 __PREG(Ser3UTCR0) | ||
304 | |||
305 | /* Register offsets */ | ||
306 | #define UTCR0 0x00 | ||
307 | #define UTCR1 0x04 | ||
308 | #define UTCR2 0x08 | ||
309 | #define UTCR3 0x0c | ||
310 | #define UTDR 0x14 | ||
311 | #define UTSR0 0x1c | ||
312 | #define UTSR1 0x20 | ||
313 | |||
314 | #define UTCR0_PE 0x00000001 /* Parity Enable */ | ||
315 | #define UTCR0_OES 0x00000002 /* Odd/Even parity Select */ | ||
316 | #define UTCR0_OddPar (UTCR0_OES*0) /* Odd Parity */ | ||
317 | #define UTCR0_EvenPar (UTCR0_OES*1) /* Even Parity */ | ||
318 | #define UTCR0_SBS 0x00000004 /* Stop Bit Select */ | ||
319 | #define UTCR0_1StpBit (UTCR0_SBS*0) /* 1 Stop Bit per frame */ | ||
320 | #define UTCR0_2StpBit (UTCR0_SBS*1) /* 2 Stop Bits per frame */ | ||
321 | #define UTCR0_DSS 0x00000008 /* Data Size Select */ | ||
322 | #define UTCR0_7BitData (UTCR0_DSS*0) /* 7-Bit Data */ | ||
323 | #define UTCR0_8BitData (UTCR0_DSS*1) /* 8-Bit Data */ | ||
324 | #define UTCR0_SCE 0x00000010 /* Sample Clock Enable */ | ||
325 | /* (ser. port 1: GPIO [18], */ | ||
326 | /* ser. port 3: GPIO [20]) */ | ||
327 | #define UTCR0_RCE 0x00000020 /* Receive Clock Edge select */ | ||
328 | #define UTCR0_RcRsEdg (UTCR0_RCE*0) /* Receive clock Rising-Edge */ | ||
329 | #define UTCR0_RcFlEdg (UTCR0_RCE*1) /* Receive clock Falling-Edge */ | ||
330 | #define UTCR0_TCE 0x00000040 /* Transmit Clock Edge select */ | ||
331 | #define UTCR0_TrRsEdg (UTCR0_TCE*0) /* Transmit clock Rising-Edge */ | ||
332 | #define UTCR0_TrFlEdg (UTCR0_TCE*1) /* Transmit clock Falling-Edge */ | ||
333 | #define UTCR0_Ser2IrDA /* Ser. port 2 IrDA settings */ \ | ||
334 | (UTCR0_1StpBit + UTCR0_8BitData) | ||
335 | |||
336 | #define UTCR1_BRD Fld (4, 0) /* Baud Rate Divisor/16 - 1 [11:8] */ | ||
337 | #define UTCR2_BRD Fld (8, 0) /* Baud Rate Divisor/16 - 1 [7:0] */ | ||
338 | /* fua = fxtl/(16*(BRD[11:0] + 1)) */ | ||
339 | /* Tua = 16*(BRD [11:0] + 1)*Txtl */ | ||
340 | #define UTCR1_BdRtDiv(Div) /* Baud Rate Divisor [16..65536] */ \ | ||
341 | (((Div) - 16)/16 >> FSize (UTCR2_BRD) << \ | ||
342 | FShft (UTCR1_BRD)) | ||
343 | #define UTCR2_BdRtDiv(Div) /* Baud Rate Divisor [16..65536] */ \ | ||
344 | (((Div) - 16)/16 & FAlnMsk (UTCR2_BRD) << \ | ||
345 | FShft (UTCR2_BRD)) | ||
346 | /* fua = fxtl/(16*Floor (Div/16)) */ | ||
347 | /* Tua = 16*Floor (Div/16)*Txtl */ | ||
348 | #define UTCR1_CeilBdRtDiv(Div) /* Ceil. of BdRtDiv [16..65536] */ \ | ||
349 | (((Div) - 1)/16 >> FSize (UTCR2_BRD) << \ | ||
350 | FShft (UTCR1_BRD)) | ||
351 | #define UTCR2_CeilBdRtDiv(Div) /* Ceil. of BdRtDiv [16..65536] */ \ | ||
352 | (((Div) - 1)/16 & FAlnMsk (UTCR2_BRD) << \ | ||
353 | FShft (UTCR2_BRD)) | ||
354 | /* fua = fxtl/(16*Ceil (Div/16)) */ | ||
355 | /* Tua = 16*Ceil (Div/16)*Txtl */ | ||
356 | |||
357 | #define UTCR3_RXE 0x00000001 /* Receive Enable */ | ||
358 | #define UTCR3_TXE 0x00000002 /* Transmit Enable */ | ||
359 | #define UTCR3_BRK 0x00000004 /* BReaK mode */ | ||
360 | #define UTCR3_RIE 0x00000008 /* Receive FIFO 1/3-to-2/3-full or */ | ||
361 | /* more Interrupt Enable */ | ||
362 | #define UTCR3_TIE 0x00000010 /* Transmit FIFO 1/2-full or less */ | ||
363 | /* Interrupt Enable */ | ||
364 | #define UTCR3_LBM 0x00000020 /* Look-Back Mode */ | ||
365 | #define UTCR3_Ser2IrDA /* Ser. port 2 IrDA settings (RIE, */ \ | ||
366 | /* TIE, LBM can be set or cleared) */ \ | ||
367 | (UTCR3_RXE + UTCR3_TXE) | ||
368 | |||
369 | #define UTCR4_HSE 0x00000001 /* Hewlett-Packard Serial InfraRed */ | ||
370 | /* (HP-SIR) modulation Enable */ | ||
371 | #define UTCR4_NRZ (UTCR4_HSE*0) /* Non-Return to Zero modulation */ | ||
372 | #define UTCR4_HPSIR (UTCR4_HSE*1) /* HP-SIR modulation */ | ||
373 | #define UTCR4_LPM 0x00000002 /* Low-Power Mode */ | ||
374 | #define UTCR4_Z3_16Bit (UTCR4_LPM*0) /* Zero pulse = 3/16 Bit time */ | ||
375 | #define UTCR4_Z1_6us (UTCR4_LPM*1) /* Zero pulse = 1.6 us */ | ||
376 | |||
377 | #define UTDR_DATA Fld (8, 0) /* receive/transmit DATA FIFOs */ | ||
378 | #if 0 /* Hidden receive FIFO bits */ | ||
379 | #define UTDR_PRE 0x00000100 /* receive PaRity Error (read) */ | ||
380 | #define UTDR_FRE 0x00000200 /* receive FRaming Error (read) */ | ||
381 | #define UTDR_ROR 0x00000400 /* Receive FIFO Over-Run (read) */ | ||
382 | #endif /* 0 */ | ||
383 | |||
384 | #define UTSR0_TFS 0x00000001 /* Transmit FIFO 1/2-full or less */ | ||
385 | /* Service request (read) */ | ||
386 | #define UTSR0_RFS 0x00000002 /* Receive FIFO 1/3-to-2/3-full or */ | ||
387 | /* more Service request (read) */ | ||
388 | #define UTSR0_RID 0x00000004 /* Receiver IDle */ | ||
389 | #define UTSR0_RBB 0x00000008 /* Receive Beginning of Break */ | ||
390 | #define UTSR0_REB 0x00000010 /* Receive End of Break */ | ||
391 | #define UTSR0_EIF 0x00000020 /* Error In FIFO (read) */ | ||
392 | |||
393 | #define UTSR1_TBY 0x00000001 /* Transmitter BusY (read) */ | ||
394 | #define UTSR1_RNE 0x00000002 /* Receive FIFO Not Empty (read) */ | ||
395 | #define UTSR1_TNF 0x00000004 /* Transmit FIFO Not Full (read) */ | ||
396 | #define UTSR1_PRE 0x00000008 /* receive PaRity Error (read) */ | ||
397 | #define UTSR1_FRE 0x00000010 /* receive FRaming Error (read) */ | ||
398 | #define UTSR1_ROR 0x00000020 /* Receive FIFO Over-Run (read) */ | ||
399 | |||
400 | |||
401 | /* | ||
402 | * Synchronous Data Link Controller (SDLC) control registers | ||
403 | * | ||
404 | * Registers | ||
405 | * Ser1SDCR0 Serial port 1 Synchronous Data Link Controller (SDLC) | ||
406 | * Control Register 0 (read/write). | ||
407 | * Ser1SDCR1 Serial port 1 Synchronous Data Link Controller (SDLC) | ||
408 | * Control Register 1 (read/write). | ||
409 | * Ser1SDCR2 Serial port 1 Synchronous Data Link Controller (SDLC) | ||
410 | * Control Register 2 (read/write). | ||
411 | * Ser1SDCR3 Serial port 1 Synchronous Data Link Controller (SDLC) | ||
412 | * Control Register 3 (read/write). | ||
413 | * Ser1SDCR4 Serial port 1 Synchronous Data Link Controller (SDLC) | ||
414 | * Control Register 4 (read/write). | ||
415 | * Ser1SDDR Serial port 1 Synchronous Data Link Controller (SDLC) | ||
416 | * Data Register (read/write). | ||
417 | * Ser1SDSR0 Serial port 1 Synchronous Data Link Controller (SDLC) | ||
418 | * Status Register 0 (read/write). | ||
419 | * Ser1SDSR1 Serial port 1 Synchronous Data Link Controller (SDLC) | ||
420 | * Status Register 1 (read/write). | ||
421 | * | ||
422 | * Clocks | ||
423 | * fxtl, Txtl Frequency, period of the system crystal (3.6864 MHz | ||
424 | * or 3.5795 MHz). | ||
425 | * fsd, Tsd Frequency, period of the SDLC communication. | ||
426 | */ | ||
427 | |||
428 | #define Ser1SDCR0 __REG(0x80020060) /* Ser. port 1 SDLC Control Reg. 0 */ | ||
429 | #define Ser1SDCR1 __REG(0x80020064) /* Ser. port 1 SDLC Control Reg. 1 */ | ||
430 | #define Ser1SDCR2 __REG(0x80020068) /* Ser. port 1 SDLC Control Reg. 2 */ | ||
431 | #define Ser1SDCR3 __REG(0x8002006C) /* Ser. port 1 SDLC Control Reg. 3 */ | ||
432 | #define Ser1SDCR4 __REG(0x80020070) /* Ser. port 1 SDLC Control Reg. 4 */ | ||
433 | #define Ser1SDDR __REG(0x80020078) /* Ser. port 1 SDLC Data Reg. */ | ||
434 | #define Ser1SDSR0 __REG(0x80020080) /* Ser. port 1 SDLC Status Reg. 0 */ | ||
435 | #define Ser1SDSR1 __REG(0x80020084) /* Ser. port 1 SDLC Status Reg. 1 */ | ||
436 | |||
437 | #define SDCR0_SUS 0x00000001 /* SDLC/UART Select */ | ||
438 | #define SDCR0_SDLC (SDCR0_SUS*0) /* SDLC mode (TXD1 & RXD1) */ | ||
439 | #define SDCR0_UART (SDCR0_SUS*1) /* UART mode (TXD1 & RXD1) */ | ||
440 | #define SDCR0_SDF 0x00000002 /* Single/Double start Flag select */ | ||
441 | #define SDCR0_SglFlg (SDCR0_SDF*0) /* Single start Flag */ | ||
442 | #define SDCR0_DblFlg (SDCR0_SDF*1) /* Double start Flag */ | ||
443 | #define SDCR0_LBM 0x00000004 /* Look-Back Mode */ | ||
444 | #define SDCR0_BMS 0x00000008 /* Bit Modulation Select */ | ||
445 | #define SDCR0_FM0 (SDCR0_BMS*0) /* Freq. Modulation zero (0) */ | ||
446 | #define SDCR0_NRZ (SDCR0_BMS*1) /* Non-Return to Zero modulation */ | ||
447 | #define SDCR0_SCE 0x00000010 /* Sample Clock Enable (GPIO [16]) */ | ||
448 | #define SDCR0_SCD 0x00000020 /* Sample Clock Direction select */ | ||
449 | /* (GPIO [16]) */ | ||
450 | #define SDCR0_SClkIn (SDCR0_SCD*0) /* Sample Clock Input */ | ||
451 | #define SDCR0_SClkOut (SDCR0_SCD*1) /* Sample Clock Output */ | ||
452 | #define SDCR0_RCE 0x00000040 /* Receive Clock Edge select */ | ||
453 | #define SDCR0_RcRsEdg (SDCR0_RCE*0) /* Receive clock Rising-Edge */ | ||
454 | #define SDCR0_RcFlEdg (SDCR0_RCE*1) /* Receive clock Falling-Edge */ | ||
455 | #define SDCR0_TCE 0x00000080 /* Transmit Clock Edge select */ | ||
456 | #define SDCR0_TrRsEdg (SDCR0_TCE*0) /* Transmit clock Rising-Edge */ | ||
457 | #define SDCR0_TrFlEdg (SDCR0_TCE*1) /* Transmit clock Falling-Edge */ | ||
458 | |||
459 | #define SDCR1_AAF 0x00000001 /* Abort After Frame enable */ | ||
460 | /* (GPIO [17]) */ | ||
461 | #define SDCR1_TXE 0x00000002 /* Transmit Enable */ | ||
462 | #define SDCR1_RXE 0x00000004 /* Receive Enable */ | ||
463 | #define SDCR1_RIE 0x00000008 /* Receive FIFO 1/3-to-2/3-full or */ | ||
464 | /* more Interrupt Enable */ | ||
465 | #define SDCR1_TIE 0x00000010 /* Transmit FIFO 1/2-full or less */ | ||
466 | /* Interrupt Enable */ | ||
467 | #define SDCR1_AME 0x00000020 /* Address Match Enable */ | ||
468 | #define SDCR1_TUS 0x00000040 /* Transmit FIFO Under-run Select */ | ||
469 | #define SDCR1_EFrmURn (SDCR1_TUS*0) /* End Frame on Under-Run */ | ||
470 | #define SDCR1_AbortURn (SDCR1_TUS*1) /* Abort on Under-Run */ | ||
471 | #define SDCR1_RAE 0x00000080 /* Receive Abort interrupt Enable */ | ||
472 | |||
473 | #define SDCR2_AMV Fld (8, 0) /* Address Match Value */ | ||
474 | |||
475 | #define SDCR3_BRD Fld (4, 0) /* Baud Rate Divisor/16 - 1 [11:8] */ | ||
476 | #define SDCR4_BRD Fld (8, 0) /* Baud Rate Divisor/16 - 1 [7:0] */ | ||
477 | /* fsd = fxtl/(16*(BRD[11:0] + 1)) */ | ||
478 | /* Tsd = 16*(BRD[11:0] + 1)*Txtl */ | ||
479 | #define SDCR3_BdRtDiv(Div) /* Baud Rate Divisor [16..65536] */ \ | ||
480 | (((Div) - 16)/16 >> FSize (SDCR4_BRD) << \ | ||
481 | FShft (SDCR3_BRD)) | ||
482 | #define SDCR4_BdRtDiv(Div) /* Baud Rate Divisor [16..65536] */ \ | ||
483 | (((Div) - 16)/16 & FAlnMsk (SDCR4_BRD) << \ | ||
484 | FShft (SDCR4_BRD)) | ||
485 | /* fsd = fxtl/(16*Floor (Div/16)) */ | ||
486 | /* Tsd = 16*Floor (Div/16)*Txtl */ | ||
487 | #define SDCR3_CeilBdRtDiv(Div) /* Ceil. of BdRtDiv [16..65536] */ \ | ||
488 | (((Div) - 1)/16 >> FSize (SDCR4_BRD) << \ | ||
489 | FShft (SDCR3_BRD)) | ||
490 | #define SDCR4_CeilBdRtDiv(Div) /* Ceil. of BdRtDiv [16..65536] */ \ | ||
491 | (((Div) - 1)/16 & FAlnMsk (SDCR4_BRD) << \ | ||
492 | FShft (SDCR4_BRD)) | ||
493 | /* fsd = fxtl/(16*Ceil (Div/16)) */ | ||
494 | /* Tsd = 16*Ceil (Div/16)*Txtl */ | ||
495 | |||
496 | #define SDDR_DATA Fld (8, 0) /* receive/transmit DATA FIFOs */ | ||
497 | #if 0 /* Hidden receive FIFO bits */ | ||
498 | #define SDDR_EOF 0x00000100 /* receive End-Of-Frame (read) */ | ||
499 | #define SDDR_CRE 0x00000200 /* receive CRC Error (read) */ | ||
500 | #define SDDR_ROR 0x00000400 /* Receive FIFO Over-Run (read) */ | ||
501 | #endif /* 0 */ | ||
502 | |||
503 | #define SDSR0_EIF 0x00000001 /* Error In FIFO (read) */ | ||
504 | #define SDSR0_TUR 0x00000002 /* Transmit FIFO Under-Run */ | ||
505 | #define SDSR0_RAB 0x00000004 /* Receive ABort */ | ||
506 | #define SDSR0_TFS 0x00000008 /* Transmit FIFO 1/2-full or less */ | ||
507 | /* Service request (read) */ | ||
508 | #define SDSR0_RFS 0x00000010 /* Receive FIFO 1/3-to-2/3-full or */ | ||
509 | /* more Service request (read) */ | ||
510 | |||
511 | #define SDSR1_RSY 0x00000001 /* Receiver SYnchronized (read) */ | ||
512 | #define SDSR1_TBY 0x00000002 /* Transmitter BusY (read) */ | ||
513 | #define SDSR1_RNE 0x00000004 /* Receive FIFO Not Empty (read) */ | ||
514 | #define SDSR1_TNF 0x00000008 /* Transmit FIFO Not Full (read) */ | ||
515 | #define SDSR1_RTD 0x00000010 /* Receive Transition Detected */ | ||
516 | #define SDSR1_EOF 0x00000020 /* receive End-Of-Frame (read) */ | ||
517 | #define SDSR1_CRE 0x00000040 /* receive CRC Error (read) */ | ||
518 | #define SDSR1_ROR 0x00000080 /* Receive FIFO Over-Run (read) */ | ||
519 | |||
520 | |||
521 | /* | ||
522 | * High-Speed Serial to Parallel controller (HSSP) control registers | ||
523 | * | ||
524 | * Registers | ||
525 | * Ser2HSCR0 Serial port 2 High-Speed Serial to Parallel | ||
526 | * controller (HSSP) Control Register 0 (read/write). | ||
527 | * Ser2HSCR1 Serial port 2 High-Speed Serial to Parallel | ||
528 | * controller (HSSP) Control Register 1 (read/write). | ||
529 | * Ser2HSDR Serial port 2 High-Speed Serial to Parallel | ||
530 | * controller (HSSP) Data Register (read/write). | ||
531 | * Ser2HSSR0 Serial port 2 High-Speed Serial to Parallel | ||
532 | * controller (HSSP) Status Register 0 (read/write). | ||
533 | * Ser2HSSR1 Serial port 2 High-Speed Serial to Parallel | ||
534 | * controller (HSSP) Status Register 1 (read). | ||
535 | * Ser2HSCR2 Serial port 2 High-Speed Serial to Parallel | ||
536 | * controller (HSSP) Control Register 2 (read/write). | ||
537 | * [The HSCR2 register is only implemented in | ||
538 | * versions 2.0 (rev. = 8) and higher of the StrongARM | ||
539 | * SA-1100.] | ||
540 | */ | ||
541 | |||
542 | #define Ser2HSCR0 __REG(0x80040060) /* Ser. port 2 HSSP Control Reg. 0 */ | ||
543 | #define Ser2HSCR1 __REG(0x80040064) /* Ser. port 2 HSSP Control Reg. 1 */ | ||
544 | #define Ser2HSDR __REG(0x8004006C) /* Ser. port 2 HSSP Data Reg. */ | ||
545 | #define Ser2HSSR0 __REG(0x80040074) /* Ser. port 2 HSSP Status Reg. 0 */ | ||
546 | #define Ser2HSSR1 __REG(0x80040078) /* Ser. port 2 HSSP Status Reg. 1 */ | ||
547 | #define Ser2HSCR2 __REG(0x90060028) /* Ser. port 2 HSSP Control Reg. 2 */ | ||
548 | |||
549 | #define HSCR0_ITR 0x00000001 /* IrDA Transmission Rate */ | ||
550 | #define HSCR0_UART (HSCR0_ITR*0) /* UART mode (115.2 kb/s if IrDA) */ | ||
551 | #define HSCR0_HSSP (HSCR0_ITR*1) /* HSSP mode (4 Mb/s) */ | ||
552 | #define HSCR0_LBM 0x00000002 /* Look-Back Mode */ | ||
553 | #define HSCR0_TUS 0x00000004 /* Transmit FIFO Under-run Select */ | ||
554 | #define HSCR0_EFrmURn (HSCR0_TUS*0) /* End Frame on Under-Run */ | ||
555 | #define HSCR0_AbortURn (HSCR0_TUS*1) /* Abort on Under-Run */ | ||
556 | #define HSCR0_TXE 0x00000008 /* Transmit Enable */ | ||
557 | #define HSCR0_RXE 0x00000010 /* Receive Enable */ | ||
558 | #define HSCR0_RIE 0x00000020 /* Receive FIFO 2/5-to-3/5-full or */ | ||
559 | /* more Interrupt Enable */ | ||
560 | #define HSCR0_TIE 0x00000040 /* Transmit FIFO 1/2-full or less */ | ||
561 | /* Interrupt Enable */ | ||
562 | #define HSCR0_AME 0x00000080 /* Address Match Enable */ | ||
563 | |||
564 | #define HSCR1_AMV Fld (8, 0) /* Address Match Value */ | ||
565 | |||
566 | #define HSDR_DATA Fld (8, 0) /* receive/transmit DATA FIFOs */ | ||
567 | #if 0 /* Hidden receive FIFO bits */ | ||
568 | #define HSDR_EOF 0x00000100 /* receive End-Of-Frame (read) */ | ||
569 | #define HSDR_CRE 0x00000200 /* receive CRC Error (read) */ | ||
570 | #define HSDR_ROR 0x00000400 /* Receive FIFO Over-Run (read) */ | ||
571 | #endif /* 0 */ | ||
572 | |||
573 | #define HSSR0_EIF 0x00000001 /* Error In FIFO (read) */ | ||
574 | #define HSSR0_TUR 0x00000002 /* Transmit FIFO Under-Run */ | ||
575 | #define HSSR0_RAB 0x00000004 /* Receive ABort */ | ||
576 | #define HSSR0_TFS 0x00000008 /* Transmit FIFO 1/2-full or less */ | ||
577 | /* Service request (read) */ | ||
578 | #define HSSR0_RFS 0x00000010 /* Receive FIFO 2/5-to-3/5-full or */ | ||
579 | /* more Service request (read) */ | ||
580 | #define HSSR0_FRE 0x00000020 /* receive FRaming Error */ | ||
581 | |||
582 | #define HSSR1_RSY 0x00000001 /* Receiver SYnchronized (read) */ | ||
583 | #define HSSR1_TBY 0x00000002 /* Transmitter BusY (read) */ | ||
584 | #define HSSR1_RNE 0x00000004 /* Receive FIFO Not Empty (read) */ | ||
585 | #define HSSR1_TNF 0x00000008 /* Transmit FIFO Not Full (read) */ | ||
586 | #define HSSR1_EOF 0x00000010 /* receive End-Of-Frame (read) */ | ||
587 | #define HSSR1_CRE 0x00000020 /* receive CRC Error (read) */ | ||
588 | #define HSSR1_ROR 0x00000040 /* Receive FIFO Over-Run (read) */ | ||
589 | |||
590 | #define HSCR2_TXP 0x00040000 /* Transmit data Polarity (TXD_2) */ | ||
591 | #define HSCR2_TrDataL (HSCR2_TXP*0) /* Transmit Data active Low */ | ||
592 | /* (inverted) */ | ||
593 | #define HSCR2_TrDataH (HSCR2_TXP*1) /* Transmit Data active High */ | ||
594 | /* (non-inverted) */ | ||
595 | #define HSCR2_RXP 0x00080000 /* Receive data Polarity (RXD_2) */ | ||
596 | #define HSCR2_RcDataL (HSCR2_RXP*0) /* Receive Data active Low */ | ||
597 | /* (inverted) */ | ||
598 | #define HSCR2_RcDataH (HSCR2_RXP*1) /* Receive Data active High */ | ||
599 | /* (non-inverted) */ | ||
600 | |||
601 | |||
602 | /* | ||
603 | * Multi-media Communications Port (MCP) control registers | ||
604 | * | ||
605 | * Registers | ||
606 | * Ser4MCCR0 Serial port 4 Multi-media Communications Port (MCP) | ||
607 | * Control Register 0 (read/write). | ||
608 | * Ser4MCDR0 Serial port 4 Multi-media Communications Port (MCP) | ||
609 | * Data Register 0 (audio, read/write). | ||
610 | * Ser4MCDR1 Serial port 4 Multi-media Communications Port (MCP) | ||
611 | * Data Register 1 (telecom, read/write). | ||
612 | * Ser4MCDR2 Serial port 4 Multi-media Communications Port (MCP) | ||
613 | * Data Register 2 (CODEC registers, read/write). | ||
614 | * Ser4MCSR Serial port 4 Multi-media Communications Port (MCP) | ||
615 | * Status Register (read/write). | ||
616 | * Ser4MCCR1 Serial port 4 Multi-media Communications Port (MCP) | ||
617 | * Control Register 1 (read/write). | ||
618 | * [The MCCR1 register is only implemented in | ||
619 | * versions 2.0 (rev. = 8) and higher of the StrongARM | ||
620 | * SA-1100.] | ||
621 | * | ||
622 | * Clocks | ||
623 | * fmc, Tmc Frequency, period of the MCP communication (10 MHz, | ||
624 | * 12 MHz, or GPIO [21]). | ||
625 | * faud, Taud Frequency, period of the audio sampling. | ||
626 | * ftcm, Ttcm Frequency, period of the telecom sampling. | ||
627 | */ | ||
628 | |||
629 | #define Ser4MCCR0 __REG(0x80060000) /* Ser. port 4 MCP Control Reg. 0 */ | ||
630 | #define Ser4MCDR0 __REG(0x80060008) /* Ser. port 4 MCP Data Reg. 0 (audio) */ | ||
631 | #define Ser4MCDR1 __REG(0x8006000C) /* Ser. port 4 MCP Data Reg. 1 (telecom) */ | ||
632 | #define Ser4MCDR2 __REG(0x80060010) /* Ser. port 4 MCP Data Reg. 2 (CODEC reg.) */ | ||
633 | #define Ser4MCSR __REG(0x80060018) /* Ser. port 4 MCP Status Reg. */ | ||
634 | #define Ser4MCCR1 __REG(0x90060030) /* Ser. port 4 MCP Control Reg. 1 */ | ||
635 | |||
636 | #define MCCR0_ASD Fld (7, 0) /* Audio Sampling rate Divisor/32 */ | ||
637 | /* [6..127] */ | ||
638 | /* faud = fmc/(32*ASD) */ | ||
639 | /* Taud = 32*ASD*Tmc */ | ||
640 | #define MCCR0_AudSmpDiv(Div) /* Audio Sampling rate Divisor */ \ | ||
641 | /* [192..4064] */ \ | ||
642 | ((Div)/32 << FShft (MCCR0_ASD)) | ||
643 | /* faud = fmc/(32*Floor (Div/32)) */ | ||
644 | /* Taud = 32*Floor (Div/32)*Tmc */ | ||
645 | #define MCCR0_CeilAudSmpDiv(Div) /* Ceil. of AudSmpDiv [192..4064] */ \ | ||
646 | (((Div) + 31)/32 << FShft (MCCR0_ASD)) | ||
647 | /* faud = fmc/(32*Ceil (Div/32)) */ | ||
648 | /* Taud = 32*Ceil (Div/32)*Tmc */ | ||
649 | #define MCCR0_TSD Fld (7, 8) /* Telecom Sampling rate */ | ||
650 | /* Divisor/32 [16..127] */ | ||
651 | /* ftcm = fmc/(32*TSD) */ | ||
652 | /* Ttcm = 32*TSD*Tmc */ | ||
653 | #define MCCR0_TcmSmpDiv(Div) /* Telecom Sampling rate Divisor */ \ | ||
654 | /* [512..4064] */ \ | ||
655 | ((Div)/32 << FShft (MCCR0_TSD)) | ||
656 | /* ftcm = fmc/(32*Floor (Div/32)) */ | ||
657 | /* Ttcm = 32*Floor (Div/32)*Tmc */ | ||
658 | #define MCCR0_CeilTcmSmpDiv(Div) /* Ceil. of TcmSmpDiv [512..4064] */ \ | ||
659 | (((Div) + 31)/32 << FShft (MCCR0_TSD)) | ||
660 | /* ftcm = fmc/(32*Ceil (Div/32)) */ | ||
661 | /* Ttcm = 32*Ceil (Div/32)*Tmc */ | ||
662 | #define MCCR0_MCE 0x00010000 /* MCP Enable */ | ||
663 | #define MCCR0_ECS 0x00020000 /* External Clock Select */ | ||
664 | #define MCCR0_IntClk (MCCR0_ECS*0) /* Internal Clock (10 or 12 MHz) */ | ||
665 | #define MCCR0_ExtClk (MCCR0_ECS*1) /* External Clock (GPIO [21]) */ | ||
666 | #define MCCR0_ADM 0x00040000 /* A/D (audio/telecom) data */ | ||
667 | /* sampling/storing Mode */ | ||
668 | #define MCCR0_VldBit (MCCR0_ADM*0) /* Valid Bit storing mode */ | ||
669 | #define MCCR0_SmpCnt (MCCR0_ADM*1) /* Sampling Counter storing mode */ | ||
670 | #define MCCR0_TTE 0x00080000 /* Telecom Transmit FIFO 1/2-full */ | ||
671 | /* or less interrupt Enable */ | ||
672 | #define MCCR0_TRE 0x00100000 /* Telecom Receive FIFO 1/2-full */ | ||
673 | /* or more interrupt Enable */ | ||
674 | #define MCCR0_ATE 0x00200000 /* Audio Transmit FIFO 1/2-full */ | ||
675 | /* or less interrupt Enable */ | ||
676 | #define MCCR0_ARE 0x00400000 /* Audio Receive FIFO 1/2-full or */ | ||
677 | /* more interrupt Enable */ | ||
678 | #define MCCR0_LBM 0x00800000 /* Look-Back Mode */ | ||
679 | #define MCCR0_ECP Fld (2, 24) /* External Clock Prescaler - 1 */ | ||
680 | #define MCCR0_ExtClkDiv(Div) /* External Clock Divisor [1..4] */ \ | ||
681 | (((Div) - 1) << FShft (MCCR0_ECP)) | ||
682 | |||
683 | #define MCDR0_DATA Fld (12, 4) /* receive/transmit audio DATA */ | ||
684 | /* FIFOs */ | ||
685 | |||
686 | #define MCDR1_DATA Fld (14, 2) /* receive/transmit telecom DATA */ | ||
687 | /* FIFOs */ | ||
688 | |||
689 | /* receive/transmit CODEC reg. */ | ||
690 | /* FIFOs: */ | ||
691 | #define MCDR2_DATA Fld (16, 0) /* reg. DATA */ | ||
692 | #define MCDR2_RW 0x00010000 /* reg. Read/Write (transmit) */ | ||
693 | #define MCDR2_Rd (MCDR2_RW*0) /* reg. Read */ | ||
694 | #define MCDR2_Wr (MCDR2_RW*1) /* reg. Write */ | ||
695 | #define MCDR2_ADD Fld (4, 17) /* reg. ADDress */ | ||
696 | |||
697 | #define MCSR_ATS 0x00000001 /* Audio Transmit FIFO 1/2-full */ | ||
698 | /* or less Service request (read) */ | ||
699 | #define MCSR_ARS 0x00000002 /* Audio Receive FIFO 1/2-full or */ | ||
700 | /* more Service request (read) */ | ||
701 | #define MCSR_TTS 0x00000004 /* Telecom Transmit FIFO 1/2-full */ | ||
702 | /* or less Service request (read) */ | ||
703 | #define MCSR_TRS 0x00000008 /* Telecom Receive FIFO 1/2-full */ | ||
704 | /* or more Service request (read) */ | ||
705 | #define MCSR_ATU 0x00000010 /* Audio Transmit FIFO Under-run */ | ||
706 | #define MCSR_ARO 0x00000020 /* Audio Receive FIFO Over-run */ | ||
707 | #define MCSR_TTU 0x00000040 /* Telecom Transmit FIFO Under-run */ | ||
708 | #define MCSR_TRO 0x00000080 /* Telecom Receive FIFO Over-run */ | ||
709 | #define MCSR_ANF 0x00000100 /* Audio transmit FIFO Not Full */ | ||
710 | /* (read) */ | ||
711 | #define MCSR_ANE 0x00000200 /* Audio receive FIFO Not Empty */ | ||
712 | /* (read) */ | ||
713 | #define MCSR_TNF 0x00000400 /* Telecom transmit FIFO Not Full */ | ||
714 | /* (read) */ | ||
715 | #define MCSR_TNE 0x00000800 /* Telecom receive FIFO Not Empty */ | ||
716 | /* (read) */ | ||
717 | #define MCSR_CWC 0x00001000 /* CODEC register Write Completed */ | ||
718 | /* (read) */ | ||
719 | #define MCSR_CRC 0x00002000 /* CODEC register Read Completed */ | ||
720 | /* (read) */ | ||
721 | #define MCSR_ACE 0x00004000 /* Audio CODEC Enabled (read) */ | ||
722 | #define MCSR_TCE 0x00008000 /* Telecom CODEC Enabled (read) */ | ||
723 | |||
724 | #define MCCR1_CFS 0x00100000 /* Clock Freq. Select */ | ||
725 | #define MCCR1_F12MHz (MCCR1_CFS*0) /* Freq. (fmc) = ~ 12 MHz */ | ||
726 | /* (11.981 MHz) */ | ||
727 | #define MCCR1_F10MHz (MCCR1_CFS*1) /* Freq. (fmc) = ~ 10 MHz */ | ||
728 | /* (9.585 MHz) */ | ||
729 | |||
730 | |||
731 | /* | ||
732 | * Synchronous Serial Port (SSP) control registers | ||
733 | * | ||
734 | * Registers | ||
735 | * Ser4SSCR0 Serial port 4 Synchronous Serial Port (SSP) Control | ||
736 | * Register 0 (read/write). | ||
737 | * Ser4SSCR1 Serial port 4 Synchronous Serial Port (SSP) Control | ||
738 | * Register 1 (read/write). | ||
739 | * [Bits SPO and SP are only implemented in versions 2.0 | ||
740 | * (rev. = 8) and higher of the StrongARM SA-1100.] | ||
741 | * Ser4SSDR Serial port 4 Synchronous Serial Port (SSP) Data | ||
742 | * Register (read/write). | ||
743 | * Ser4SSSR Serial port 4 Synchronous Serial Port (SSP) Status | ||
744 | * Register (read/write). | ||
745 | * | ||
746 | * Clocks | ||
747 | * fxtl, Txtl Frequency, period of the system crystal (3.6864 MHz | ||
748 | * or 3.5795 MHz). | ||
749 | * fss, Tss Frequency, period of the SSP communication. | ||
750 | */ | ||
751 | |||
752 | #define Ser4SSCR0 __REG(0x80070060) /* Ser. port 4 SSP Control Reg. 0 */ | ||
753 | #define Ser4SSCR1 __REG(0x80070064) /* Ser. port 4 SSP Control Reg. 1 */ | ||
754 | #define Ser4SSDR __REG(0x8007006C) /* Ser. port 4 SSP Data Reg. */ | ||
755 | #define Ser4SSSR __REG(0x80070074) /* Ser. port 4 SSP Status Reg. */ | ||
756 | |||
757 | #define SSCR0_DSS Fld (4, 0) /* Data Size - 1 Select [3..15] */ | ||
758 | #define SSCR0_DataSize(Size) /* Data Size Select [4..16] */ \ | ||
759 | (((Size) - 1) << FShft (SSCR0_DSS)) | ||
760 | #define SSCR0_FRF Fld (2, 4) /* FRame Format */ | ||
761 | #define SSCR0_Motorola /* Motorola Serial Peripheral */ \ | ||
762 | /* Interface (SPI) format */ \ | ||
763 | (0 << FShft (SSCR0_FRF)) | ||
764 | #define SSCR0_TI /* Texas Instruments Synchronous */ \ | ||
765 | /* Serial format */ \ | ||
766 | (1 << FShft (SSCR0_FRF)) | ||
767 | #define SSCR0_National /* National Microwire format */ \ | ||
768 | (2 << FShft (SSCR0_FRF)) | ||
769 | #define SSCR0_SSE 0x00000080 /* SSP Enable */ | ||
770 | #define SSCR0_SCR Fld (8, 8) /* Serial Clock Rate divisor/2 - 1 */ | ||
771 | /* fss = fxtl/(2*(SCR + 1)) */ | ||
772 | /* Tss = 2*(SCR + 1)*Txtl */ | ||
773 | #define SSCR0_SerClkDiv(Div) /* Serial Clock Divisor [2..512] */ \ | ||
774 | (((Div) - 2)/2 << FShft (SSCR0_SCR)) | ||
775 | /* fss = fxtl/(2*Floor (Div/2)) */ | ||
776 | /* Tss = 2*Floor (Div/2)*Txtl */ | ||
777 | #define SSCR0_CeilSerClkDiv(Div) /* Ceil. of SerClkDiv [2..512] */ \ | ||
778 | (((Div) - 1)/2 << FShft (SSCR0_SCR)) | ||
779 | /* fss = fxtl/(2*Ceil (Div/2)) */ | ||
780 | /* Tss = 2*Ceil (Div/2)*Txtl */ | ||
781 | |||
782 | #define SSCR1_RIE 0x00000001 /* Receive FIFO 1/2-full or more */ | ||
783 | /* Interrupt Enable */ | ||
784 | #define SSCR1_TIE 0x00000002 /* Transmit FIFO 1/2-full or less */ | ||
785 | /* Interrupt Enable */ | ||
786 | #define SSCR1_LBM 0x00000004 /* Look-Back Mode */ | ||
787 | #define SSCR1_SPO 0x00000008 /* Sample clock (SCLK) POlarity */ | ||
788 | #define SSCR1_SClkIactL (SSCR1_SPO*0) /* Sample Clock Inactive Low */ | ||
789 | #define SSCR1_SClkIactH (SSCR1_SPO*1) /* Sample Clock Inactive High */ | ||
790 | #define SSCR1_SP 0x00000010 /* Sample clock (SCLK) Phase */ | ||
791 | #define SSCR1_SClk1P (SSCR1_SP*0) /* Sample Clock active 1 Period */ | ||
792 | /* after frame (SFRM, 1st edge) */ | ||
793 | #define SSCR1_SClk1_2P (SSCR1_SP*1) /* Sample Clock active 1/2 Period */ | ||
794 | /* after frame (SFRM, 1st edge) */ | ||
795 | #define SSCR1_ECS 0x00000020 /* External Clock Select */ | ||
796 | #define SSCR1_IntClk (SSCR1_ECS*0) /* Internal Clock */ | ||
797 | #define SSCR1_ExtClk (SSCR1_ECS*1) /* External Clock (GPIO [19]) */ | ||
798 | |||
799 | #define SSDR_DATA Fld (16, 0) /* receive/transmit DATA FIFOs */ | ||
800 | |||
801 | #define SSSR_TNF 0x00000002 /* Transmit FIFO Not Full (read) */ | ||
802 | #define SSSR_RNE 0x00000004 /* Receive FIFO Not Empty (read) */ | ||
803 | #define SSSR_BSY 0x00000008 /* SSP BuSY (read) */ | ||
804 | #define SSSR_TFS 0x00000010 /* Transmit FIFO 1/2-full or less */ | ||
805 | /* Service request (read) */ | ||
806 | #define SSSR_RFS 0x00000020 /* Receive FIFO 1/2-full or more */ | ||
807 | /* Service request (read) */ | ||
808 | #define SSSR_ROR 0x00000040 /* Receive FIFO Over-Run */ | ||
809 | |||
810 | |||
811 | /* | ||
812 | * Operating System (OS) timer control registers | ||
813 | * | ||
814 | * Registers | ||
815 | * OSMR0 Operating System (OS) timer Match Register 0 | ||
816 | * (read/write). | ||
817 | * OSMR1 Operating System (OS) timer Match Register 1 | ||
818 | * (read/write). | ||
819 | * OSMR2 Operating System (OS) timer Match Register 2 | ||
820 | * (read/write). | ||
821 | * OSMR3 Operating System (OS) timer Match Register 3 | ||
822 | * (read/write). | ||
823 | * OSCR Operating System (OS) timer Counter Register | ||
824 | * (read/write). | ||
825 | * OSSR Operating System (OS) timer Status Register | ||
826 | * (read/write). | ||
827 | * OWER Operating System (OS) timer Watch-dog Enable Register | ||
828 | * (read/write). | ||
829 | * OIER Operating System (OS) timer Interrupt Enable Register | ||
830 | * (read/write). | ||
831 | */ | ||
832 | |||
833 | #define OSMR0 __REG(0x90000000) /* OS timer Match Reg. 0 */ | ||
834 | #define OSMR1 __REG(0x90000004) /* OS timer Match Reg. 1 */ | ||
835 | #define OSMR2 __REG(0x90000008) /* OS timer Match Reg. 2 */ | ||
836 | #define OSMR3 __REG(0x9000000c) /* OS timer Match Reg. 3 */ | ||
837 | #define OSCR __REG(0x90000010) /* OS timer Counter Reg. */ | ||
838 | #define OSSR __REG(0x90000014 ) /* OS timer Status Reg. */ | ||
839 | #define OWER __REG(0x90000018 ) /* OS timer Watch-dog Enable Reg. */ | ||
840 | #define OIER __REG(0x9000001C ) /* OS timer Interrupt Enable Reg. */ | ||
841 | |||
842 | #define OSSR_M(Nb) /* Match detected [0..3] */ \ | ||
843 | (0x00000001 << (Nb)) | ||
844 | #define OSSR_M0 OSSR_M (0) /* Match detected 0 */ | ||
845 | #define OSSR_M1 OSSR_M (1) /* Match detected 1 */ | ||
846 | #define OSSR_M2 OSSR_M (2) /* Match detected 2 */ | ||
847 | #define OSSR_M3 OSSR_M (3) /* Match detected 3 */ | ||
848 | |||
849 | #define OWER_WME 0x00000001 /* Watch-dog Match Enable */ | ||
850 | /* (set only) */ | ||
851 | |||
852 | #define OIER_E(Nb) /* match interrupt Enable [0..3] */ \ | ||
853 | (0x00000001 << (Nb)) | ||
854 | #define OIER_E0 OIER_E (0) /* match interrupt Enable 0 */ | ||
855 | #define OIER_E1 OIER_E (1) /* match interrupt Enable 1 */ | ||
856 | #define OIER_E2 OIER_E (2) /* match interrupt Enable 2 */ | ||
857 | #define OIER_E3 OIER_E (3) /* match interrupt Enable 3 */ | ||
858 | |||
859 | |||
860 | /* | ||
861 | * Real-Time Clock (RTC) control registers | ||
862 | * | ||
863 | * Registers | ||
864 | * RTAR Real-Time Clock (RTC) Alarm Register (read/write). | ||
865 | * RCNR Real-Time Clock (RTC) CouNt Register (read/write). | ||
866 | * RTTR Real-Time Clock (RTC) Trim Register (read/write). | ||
867 | * RTSR Real-Time Clock (RTC) Status Register (read/write). | ||
868 | * | ||
869 | * Clocks | ||
870 | * frtx, Trtx Frequency, period of the real-time clock crystal | ||
871 | * (32.768 kHz nominal). | ||
872 | * frtc, Trtc Frequency, period of the real-time clock counter | ||
873 | * (1 Hz nominal). | ||
874 | */ | ||
875 | |||
876 | #define RTAR __REG(0x90010000) /* RTC Alarm Reg. */ | ||
877 | #define RCNR __REG(0x90010004) /* RTC CouNt Reg. */ | ||
878 | #define RTTR __REG(0x90010008) /* RTC Trim Reg. */ | ||
879 | #define RTSR __REG(0x90010010) /* RTC Status Reg. */ | ||
880 | |||
881 | #define RTTR_C Fld (16, 0) /* clock divider Count - 1 */ | ||
882 | #define RTTR_D Fld (10, 16) /* trim Delete count */ | ||
883 | /* frtc = (1023*(C + 1) - D)*frtx/ */ | ||
884 | /* (1023*(C + 1)^2) */ | ||
885 | /* Trtc = (1023*(C + 1)^2)*Trtx/ */ | ||
886 | /* (1023*(C + 1) - D) */ | ||
887 | |||
888 | #define RTSR_AL 0x00000001 /* ALarm detected */ | ||
889 | #define RTSR_HZ 0x00000002 /* 1 Hz clock detected */ | ||
890 | #define RTSR_ALE 0x00000004 /* ALarm interrupt Enable */ | ||
891 | #define RTSR_HZE 0x00000008 /* 1 Hz clock interrupt Enable */ | ||
892 | |||
893 | |||
894 | /* | ||
895 | * Power Manager (PM) control registers | ||
896 | * | ||
897 | * Registers | ||
898 | * PMCR Power Manager (PM) Control Register (read/write). | ||
899 | * PSSR Power Manager (PM) Sleep Status Register (read/write). | ||
900 | * PSPR Power Manager (PM) Scratch-Pad Register (read/write). | ||
901 | * PWER Power Manager (PM) Wake-up Enable Register | ||
902 | * (read/write). | ||
903 | * PCFR Power Manager (PM) general ConFiguration Register | ||
904 | * (read/write). | ||
905 | * PPCR Power Manager (PM) Phase-Locked Loop (PLL) | ||
906 | * Configuration Register (read/write). | ||
907 | * PGSR Power Manager (PM) General-Purpose Input/Output (GPIO) | ||
908 | * Sleep state Register (read/write, see GPIO pins). | ||
909 | * POSR Power Manager (PM) Oscillator Status Register (read). | ||
910 | * | ||
911 | * Clocks | ||
912 | * fxtl, Txtl Frequency, period of the system crystal (3.6864 MHz | ||
913 | * or 3.5795 MHz). | ||
914 | * fcpu, Tcpu Frequency, period of the CPU core clock (CCLK). | ||
915 | */ | ||
916 | |||
917 | #define PMCR __REG(0x90020000) /* PM Control Reg. */ | ||
918 | #define PSSR __REG(0x90020004) /* PM Sleep Status Reg. */ | ||
919 | #define PSPR __REG(0x90020008) /* PM Scratch-Pad Reg. */ | ||
920 | #define PWER __REG(0x9002000C) /* PM Wake-up Enable Reg. */ | ||
921 | #define PCFR __REG(0x90020010) /* PM general ConFiguration Reg. */ | ||
922 | #define PPCR __REG(0x90020014) /* PM PLL Configuration Reg. */ | ||
923 | #define PGSR __REG(0x90020018) /* PM GPIO Sleep state Reg. */ | ||
924 | #define POSR __REG(0x9002001C) /* PM Oscillator Status Reg. */ | ||
925 | |||
926 | #define PMCR_SF 0x00000001 /* Sleep Force (set only) */ | ||
927 | |||
928 | #define PSSR_SS 0x00000001 /* Software Sleep */ | ||
929 | #define PSSR_BFS 0x00000002 /* Battery Fault Status */ | ||
930 | /* (BATT_FAULT) */ | ||
931 | #define PSSR_VFS 0x00000004 /* Vdd Fault Status (VDD_FAULT) */ | ||
932 | #define PSSR_DH 0x00000008 /* DRAM control Hold */ | ||
933 | #define PSSR_PH 0x00000010 /* Peripheral control Hold */ | ||
934 | |||
935 | #define PWER_GPIO(Nb) GPIO_GPIO (Nb) /* GPIO [0..27] wake-up enable */ | ||
936 | #define PWER_GPIO0 PWER_GPIO (0) /* GPIO [0] wake-up enable */ | ||
937 | #define PWER_GPIO1 PWER_GPIO (1) /* GPIO [1] wake-up enable */ | ||
938 | #define PWER_GPIO2 PWER_GPIO (2) /* GPIO [2] wake-up enable */ | ||
939 | #define PWER_GPIO3 PWER_GPIO (3) /* GPIO [3] wake-up enable */ | ||
940 | #define PWER_GPIO4 PWER_GPIO (4) /* GPIO [4] wake-up enable */ | ||
941 | #define PWER_GPIO5 PWER_GPIO (5) /* GPIO [5] wake-up enable */ | ||
942 | #define PWER_GPIO6 PWER_GPIO (6) /* GPIO [6] wake-up enable */ | ||
943 | #define PWER_GPIO7 PWER_GPIO (7) /* GPIO [7] wake-up enable */ | ||
944 | #define PWER_GPIO8 PWER_GPIO (8) /* GPIO [8] wake-up enable */ | ||
945 | #define PWER_GPIO9 PWER_GPIO (9) /* GPIO [9] wake-up enable */ | ||
946 | #define PWER_GPIO10 PWER_GPIO (10) /* GPIO [10] wake-up enable */ | ||
947 | #define PWER_GPIO11 PWER_GPIO (11) /* GPIO [11] wake-up enable */ | ||
948 | #define PWER_GPIO12 PWER_GPIO (12) /* GPIO [12] wake-up enable */ | ||
949 | #define PWER_GPIO13 PWER_GPIO (13) /* GPIO [13] wake-up enable */ | ||
950 | #define PWER_GPIO14 PWER_GPIO (14) /* GPIO [14] wake-up enable */ | ||
951 | #define PWER_GPIO15 PWER_GPIO (15) /* GPIO [15] wake-up enable */ | ||
952 | #define PWER_GPIO16 PWER_GPIO (16) /* GPIO [16] wake-up enable */ | ||
953 | #define PWER_GPIO17 PWER_GPIO (17) /* GPIO [17] wake-up enable */ | ||
954 | #define PWER_GPIO18 PWER_GPIO (18) /* GPIO [18] wake-up enable */ | ||
955 | #define PWER_GPIO19 PWER_GPIO (19) /* GPIO [19] wake-up enable */ | ||
956 | #define PWER_GPIO20 PWER_GPIO (20) /* GPIO [20] wake-up enable */ | ||
957 | #define PWER_GPIO21 PWER_GPIO (21) /* GPIO [21] wake-up enable */ | ||
958 | #define PWER_GPIO22 PWER_GPIO (22) /* GPIO [22] wake-up enable */ | ||
959 | #define PWER_GPIO23 PWER_GPIO (23) /* GPIO [23] wake-up enable */ | ||
960 | #define PWER_GPIO24 PWER_GPIO (24) /* GPIO [24] wake-up enable */ | ||
961 | #define PWER_GPIO25 PWER_GPIO (25) /* GPIO [25] wake-up enable */ | ||
962 | #define PWER_GPIO26 PWER_GPIO (26) /* GPIO [26] wake-up enable */ | ||
963 | #define PWER_GPIO27 PWER_GPIO (27) /* GPIO [27] wake-up enable */ | ||
964 | #define PWER_RTC 0x80000000 /* RTC alarm wake-up enable */ | ||
965 | |||
966 | #define PCFR_OPDE 0x00000001 /* Oscillator Power-Down Enable */ | ||
967 | #define PCFR_ClkRun (PCFR_OPDE*0) /* Clock Running in sleep mode */ | ||
968 | #define PCFR_ClkStp (PCFR_OPDE*1) /* Clock Stopped in sleep mode */ | ||
969 | #define PCFR_FP 0x00000002 /* Float PCMCIA pins */ | ||
970 | #define PCFR_PCMCIANeg (PCFR_FP*0) /* PCMCIA pins Negated (1) */ | ||
971 | #define PCFR_PCMCIAFlt (PCFR_FP*1) /* PCMCIA pins Floating */ | ||
972 | #define PCFR_FS 0x00000004 /* Float Static memory pins */ | ||
973 | #define PCFR_StMemNeg (PCFR_FS*0) /* Static Memory pins Negated (1) */ | ||
974 | #define PCFR_StMemFlt (PCFR_FS*1) /* Static Memory pins Floating */ | ||
975 | #define PCFR_FO 0x00000008 /* Force RTC oscillator */ | ||
976 | /* (32.768 kHz) enable On */ | ||
977 | |||
978 | #define PPCR_CCF Fld (5, 0) /* CPU core Clock (CCLK) Freq. */ | ||
979 | #define PPCR_Fx16 /* Freq. x 16 (fcpu = 16*fxtl) */ \ | ||
980 | (0x00 << FShft (PPCR_CCF)) | ||
981 | #define PPCR_Fx20 /* Freq. x 20 (fcpu = 20*fxtl) */ \ | ||
982 | (0x01 << FShft (PPCR_CCF)) | ||
983 | #define PPCR_Fx24 /* Freq. x 24 (fcpu = 24*fxtl) */ \ | ||
984 | (0x02 << FShft (PPCR_CCF)) | ||
985 | #define PPCR_Fx28 /* Freq. x 28 (fcpu = 28*fxtl) */ \ | ||
986 | (0x03 << FShft (PPCR_CCF)) | ||
987 | #define PPCR_Fx32 /* Freq. x 32 (fcpu = 32*fxtl) */ \ | ||
988 | (0x04 << FShft (PPCR_CCF)) | ||
989 | #define PPCR_Fx36 /* Freq. x 36 (fcpu = 36*fxtl) */ \ | ||
990 | (0x05 << FShft (PPCR_CCF)) | ||
991 | #define PPCR_Fx40 /* Freq. x 40 (fcpu = 40*fxtl) */ \ | ||
992 | (0x06 << FShft (PPCR_CCF)) | ||
993 | #define PPCR_Fx44 /* Freq. x 44 (fcpu = 44*fxtl) */ \ | ||
994 | (0x07 << FShft (PPCR_CCF)) | ||
995 | #define PPCR_Fx48 /* Freq. x 48 (fcpu = 48*fxtl) */ \ | ||
996 | (0x08 << FShft (PPCR_CCF)) | ||
997 | #define PPCR_Fx52 /* Freq. x 52 (fcpu = 52*fxtl) */ \ | ||
998 | (0x09 << FShft (PPCR_CCF)) | ||
999 | #define PPCR_Fx56 /* Freq. x 56 (fcpu = 56*fxtl) */ \ | ||
1000 | (0x0A << FShft (PPCR_CCF)) | ||
1001 | #define PPCR_Fx60 /* Freq. x 60 (fcpu = 60*fxtl) */ \ | ||
1002 | (0x0B << FShft (PPCR_CCF)) | ||
1003 | #define PPCR_Fx64 /* Freq. x 64 (fcpu = 64*fxtl) */ \ | ||
1004 | (0x0C << FShft (PPCR_CCF)) | ||
1005 | #define PPCR_Fx68 /* Freq. x 68 (fcpu = 68*fxtl) */ \ | ||
1006 | (0x0D << FShft (PPCR_CCF)) | ||
1007 | #define PPCR_Fx72 /* Freq. x 72 (fcpu = 72*fxtl) */ \ | ||
1008 | (0x0E << FShft (PPCR_CCF)) | ||
1009 | #define PPCR_Fx76 /* Freq. x 76 (fcpu = 76*fxtl) */ \ | ||
1010 | (0x0F << FShft (PPCR_CCF)) | ||
1011 | /* 3.6864 MHz crystal (fxtl): */ | ||
1012 | #define PPCR_F59_0MHz PPCR_Fx16 /* Freq. (fcpu) = 59.0 MHz */ | ||
1013 | #define PPCR_F73_7MHz PPCR_Fx20 /* Freq. (fcpu) = 73.7 MHz */ | ||
1014 | #define PPCR_F88_5MHz PPCR_Fx24 /* Freq. (fcpu) = 88.5 MHz */ | ||
1015 | #define PPCR_F103_2MHz PPCR_Fx28 /* Freq. (fcpu) = 103.2 MHz */ | ||
1016 | #define PPCR_F118_0MHz PPCR_Fx32 /* Freq. (fcpu) = 118.0 MHz */ | ||
1017 | #define PPCR_F132_7MHz PPCR_Fx36 /* Freq. (fcpu) = 132.7 MHz */ | ||
1018 | #define PPCR_F147_5MHz PPCR_Fx40 /* Freq. (fcpu) = 147.5 MHz */ | ||
1019 | #define PPCR_F162_2MHz PPCR_Fx44 /* Freq. (fcpu) = 162.2 MHz */ | ||
1020 | #define PPCR_F176_9MHz PPCR_Fx48 /* Freq. (fcpu) = 176.9 MHz */ | ||
1021 | #define PPCR_F191_7MHz PPCR_Fx52 /* Freq. (fcpu) = 191.7 MHz */ | ||
1022 | #define PPCR_F206_4MHz PPCR_Fx56 /* Freq. (fcpu) = 206.4 MHz */ | ||
1023 | #define PPCR_F221_2MHz PPCR_Fx60 /* Freq. (fcpu) = 221.2 MHz */ | ||
1024 | #define PPCR_F239_6MHz PPCR_Fx64 /* Freq. (fcpu) = 239.6 MHz */ | ||
1025 | #define PPCR_F250_7MHz PPCR_Fx68 /* Freq. (fcpu) = 250.7 MHz */ | ||
1026 | #define PPCR_F265_4MHz PPCR_Fx72 /* Freq. (fcpu) = 265.4 MHz */ | ||
1027 | #define PPCR_F280_2MHz PPCR_Fx76 /* Freq. (fcpu) = 280.2 MHz */ | ||
1028 | /* 3.5795 MHz crystal (fxtl): */ | ||
1029 | #define PPCR_F57_3MHz PPCR_Fx16 /* Freq. (fcpu) = 57.3 MHz */ | ||
1030 | #define PPCR_F71_6MHz PPCR_Fx20 /* Freq. (fcpu) = 71.6 MHz */ | ||
1031 | #define PPCR_F85_9MHz PPCR_Fx24 /* Freq. (fcpu) = 85.9 MHz */ | ||
1032 | #define PPCR_F100_2MHz PPCR_Fx28 /* Freq. (fcpu) = 100.2 MHz */ | ||
1033 | #define PPCR_F114_5MHz PPCR_Fx32 /* Freq. (fcpu) = 114.5 MHz */ | ||
1034 | #define PPCR_F128_9MHz PPCR_Fx36 /* Freq. (fcpu) = 128.9 MHz */ | ||
1035 | #define PPCR_F143_2MHz PPCR_Fx40 /* Freq. (fcpu) = 143.2 MHz */ | ||
1036 | #define PPCR_F157_5MHz PPCR_Fx44 /* Freq. (fcpu) = 157.5 MHz */ | ||
1037 | #define PPCR_F171_8MHz PPCR_Fx48 /* Freq. (fcpu) = 171.8 MHz */ | ||
1038 | #define PPCR_F186_1MHz PPCR_Fx52 /* Freq. (fcpu) = 186.1 MHz */ | ||
1039 | #define PPCR_F200_5MHz PPCR_Fx56 /* Freq. (fcpu) = 200.5 MHz */ | ||
1040 | #define PPCR_F214_8MHz PPCR_Fx60 /* Freq. (fcpu) = 214.8 MHz */ | ||
1041 | #define PPCR_F229_1MHz PPCR_Fx64 /* Freq. (fcpu) = 229.1 MHz */ | ||
1042 | #define PPCR_F243_4MHz PPCR_Fx68 /* Freq. (fcpu) = 243.4 MHz */ | ||
1043 | #define PPCR_F257_7MHz PPCR_Fx72 /* Freq. (fcpu) = 257.7 MHz */ | ||
1044 | #define PPCR_F272_0MHz PPCR_Fx76 /* Freq. (fcpu) = 272.0 MHz */ | ||
1045 | |||
1046 | #define POSR_OOK 0x00000001 /* RTC Oscillator (32.768 kHz) OK */ | ||
1047 | |||
1048 | |||
1049 | /* | ||
1050 | * Reset Controller (RC) control registers | ||
1051 | * | ||
1052 | * Registers | ||
1053 | * RSRR Reset Controller (RC) Software Reset Register | ||
1054 | * (read/write). | ||
1055 | * RCSR Reset Controller (RC) Status Register (read/write). | ||
1056 | */ | ||
1057 | |||
1058 | #define RSRR __REG(0x90030000) /* RC Software Reset Reg. */ | ||
1059 | #define RCSR __REG(0x90030004) /* RC Status Reg. */ | ||
1060 | |||
1061 | #define RSRR_SWR 0x00000001 /* SoftWare Reset (set only) */ | ||
1062 | |||
1063 | #define RCSR_HWR 0x00000001 /* HardWare Reset */ | ||
1064 | #define RCSR_SWR 0x00000002 /* SoftWare Reset */ | ||
1065 | #define RCSR_WDR 0x00000004 /* Watch-Dog Reset */ | ||
1066 | #define RCSR_SMR 0x00000008 /* Sleep-Mode Reset */ | ||
1067 | |||
1068 | |||
1069 | /* | ||
1070 | * Test unit control registers | ||
1071 | * | ||
1072 | * Registers | ||
1073 | * TUCR Test Unit Control Register (read/write). | ||
1074 | */ | ||
1075 | |||
1076 | #define TUCR __REG(0x90030008) /* Test Unit Control Reg. */ | ||
1077 | |||
1078 | #define TUCR_TIC 0x00000040 /* TIC mode */ | ||
1079 | #define TUCR_TTST 0x00000080 /* Trim TeST mode */ | ||
1080 | #define TUCR_RCRC 0x00000100 /* Richard's Cyclic Redundancy */ | ||
1081 | /* Check */ | ||
1082 | #define TUCR_PMD 0x00000200 /* Power Management Disable */ | ||
1083 | #define TUCR_MR 0x00000400 /* Memory Request mode */ | ||
1084 | #define TUCR_NoMB (TUCR_MR*0) /* No Memory Bus request & grant */ | ||
1085 | #define TUCR_MBGPIO (TUCR_MR*1) /* Memory Bus request (MBREQ) & */ | ||
1086 | /* grant (MBGNT) on GPIO [22:21] */ | ||
1087 | #define TUCR_CTB Fld (3, 20) /* Clock Test Bits */ | ||
1088 | #define TUCR_FDC 0x00800000 /* RTC Force Delete Count */ | ||
1089 | #define TUCR_FMC 0x01000000 /* Force Michelle's Control mode */ | ||
1090 | #define TUCR_TMC 0x02000000 /* RTC Trimmer Multiplexer Control */ | ||
1091 | #define TUCR_DPS 0x04000000 /* Disallow Pad Sleep */ | ||
1092 | #define TUCR_TSEL Fld (3, 29) /* clock Test SELect on GPIO [27] */ | ||
1093 | #define TUCR_32_768kHz /* 32.768 kHz osc. on GPIO [27] */ \ | ||
1094 | (0 << FShft (TUCR_TSEL)) | ||
1095 | #define TUCR_3_6864MHz /* 3.6864 MHz osc. on GPIO [27] */ \ | ||
1096 | (1 << FShft (TUCR_TSEL)) | ||
1097 | #define TUCR_VDD /* VDD ring osc./16 on GPIO [27] */ \ | ||
1098 | (2 << FShft (TUCR_TSEL)) | ||
1099 | #define TUCR_96MHzPLL /* 96 MHz PLL/4 on GPIO [27] */ \ | ||
1100 | (3 << FShft (TUCR_TSEL)) | ||
1101 | #define TUCR_Clock /* internal (fcpu/2) & 32.768 kHz */ \ | ||
1102 | /* Clocks on GPIO [26:27] */ \ | ||
1103 | (4 << FShft (TUCR_TSEL)) | ||
1104 | #define TUCR_3_6864MHzA /* 3.6864 MHz osc. on GPIO [27] */ \ | ||
1105 | /* (Alternative) */ \ | ||
1106 | (5 << FShft (TUCR_TSEL)) | ||
1107 | #define TUCR_MainPLL /* Main PLL/16 on GPIO [27] */ \ | ||
1108 | (6 << FShft (TUCR_TSEL)) | ||
1109 | #define TUCR_VDDL /* VDDL ring osc./4 on GPIO [27] */ \ | ||
1110 | (7 << FShft (TUCR_TSEL)) | ||
1111 | |||
1112 | |||
1113 | /* | ||
1114 | * General-Purpose Input/Output (GPIO) control registers | ||
1115 | * | ||
1116 | * Registers | ||
1117 | * GPLR General-Purpose Input/Output (GPIO) Pin Level | ||
1118 | * Register (read). | ||
1119 | * GPDR General-Purpose Input/Output (GPIO) Pin Direction | ||
1120 | * Register (read/write). | ||
1121 | * GPSR General-Purpose Input/Output (GPIO) Pin output Set | ||
1122 | * Register (write). | ||
1123 | * GPCR General-Purpose Input/Output (GPIO) Pin output Clear | ||
1124 | * Register (write). | ||
1125 | * GRER General-Purpose Input/Output (GPIO) Rising-Edge | ||
1126 | * detect Register (read/write). | ||
1127 | * GFER General-Purpose Input/Output (GPIO) Falling-Edge | ||
1128 | * detect Register (read/write). | ||
1129 | * GEDR General-Purpose Input/Output (GPIO) Edge Detect | ||
1130 | * status Register (read/write). | ||
1131 | * GAFR General-Purpose Input/Output (GPIO) Alternate | ||
1132 | * Function Register (read/write). | ||
1133 | * | ||
1134 | * Clock | ||
1135 | * fcpu, Tcpu Frequency, period of the CPU core clock (CCLK). | ||
1136 | */ | ||
1137 | |||
1138 | #define GPLR __REG(0x90040000) /* GPIO Pin Level Reg. */ | ||
1139 | #define GPDR __REG(0x90040004) /* GPIO Pin Direction Reg. */ | ||
1140 | #define GPSR __REG(0x90040008) /* GPIO Pin output Set Reg. */ | ||
1141 | #define GPCR __REG(0x9004000C) /* GPIO Pin output Clear Reg. */ | ||
1142 | #define GRER __REG(0x90040010) /* GPIO Rising-Edge detect Reg. */ | ||
1143 | #define GFER __REG(0x90040014) /* GPIO Falling-Edge detect Reg. */ | ||
1144 | #define GEDR __REG(0x90040018) /* GPIO Edge Detect status Reg. */ | ||
1145 | #define GAFR __REG(0x9004001C) /* GPIO Alternate Function Reg. */ | ||
1146 | |||
1147 | #define GPIO_MIN (0) | ||
1148 | #define GPIO_MAX (27) | ||
1149 | |||
1150 | #define GPIO_GPIO(Nb) /* GPIO [0..27] */ \ | ||
1151 | (0x00000001 << (Nb)) | ||
1152 | #define GPIO_GPIO0 GPIO_GPIO (0) /* GPIO [0] */ | ||
1153 | #define GPIO_GPIO1 GPIO_GPIO (1) /* GPIO [1] */ | ||
1154 | #define GPIO_GPIO2 GPIO_GPIO (2) /* GPIO [2] */ | ||
1155 | #define GPIO_GPIO3 GPIO_GPIO (3) /* GPIO [3] */ | ||
1156 | #define GPIO_GPIO4 GPIO_GPIO (4) /* GPIO [4] */ | ||
1157 | #define GPIO_GPIO5 GPIO_GPIO (5) /* GPIO [5] */ | ||
1158 | #define GPIO_GPIO6 GPIO_GPIO (6) /* GPIO [6] */ | ||
1159 | #define GPIO_GPIO7 GPIO_GPIO (7) /* GPIO [7] */ | ||
1160 | #define GPIO_GPIO8 GPIO_GPIO (8) /* GPIO [8] */ | ||
1161 | #define GPIO_GPIO9 GPIO_GPIO (9) /* GPIO [9] */ | ||
1162 | #define GPIO_GPIO10 GPIO_GPIO (10) /* GPIO [10] */ | ||
1163 | #define GPIO_GPIO11 GPIO_GPIO (11) /* GPIO [11] */ | ||
1164 | #define GPIO_GPIO12 GPIO_GPIO (12) /* GPIO [12] */ | ||
1165 | #define GPIO_GPIO13 GPIO_GPIO (13) /* GPIO [13] */ | ||
1166 | #define GPIO_GPIO14 GPIO_GPIO (14) /* GPIO [14] */ | ||
1167 | #define GPIO_GPIO15 GPIO_GPIO (15) /* GPIO [15] */ | ||
1168 | #define GPIO_GPIO16 GPIO_GPIO (16) /* GPIO [16] */ | ||
1169 | #define GPIO_GPIO17 GPIO_GPIO (17) /* GPIO [17] */ | ||
1170 | #define GPIO_GPIO18 GPIO_GPIO (18) /* GPIO [18] */ | ||
1171 | #define GPIO_GPIO19 GPIO_GPIO (19) /* GPIO [19] */ | ||
1172 | #define GPIO_GPIO20 GPIO_GPIO (20) /* GPIO [20] */ | ||
1173 | #define GPIO_GPIO21 GPIO_GPIO (21) /* GPIO [21] */ | ||
1174 | #define GPIO_GPIO22 GPIO_GPIO (22) /* GPIO [22] */ | ||
1175 | #define GPIO_GPIO23 GPIO_GPIO (23) /* GPIO [23] */ | ||
1176 | #define GPIO_GPIO24 GPIO_GPIO (24) /* GPIO [24] */ | ||
1177 | #define GPIO_GPIO25 GPIO_GPIO (25) /* GPIO [25] */ | ||
1178 | #define GPIO_GPIO26 GPIO_GPIO (26) /* GPIO [26] */ | ||
1179 | #define GPIO_GPIO27 GPIO_GPIO (27) /* GPIO [27] */ | ||
1180 | |||
1181 | #define GPIO_LDD(Nb) /* LCD Data [8..15] (O) */ \ | ||
1182 | GPIO_GPIO ((Nb) - 6) | ||
1183 | #define GPIO_LDD8 GPIO_LDD (8) /* LCD Data [8] (O) */ | ||
1184 | #define GPIO_LDD9 GPIO_LDD (9) /* LCD Data [9] (O) */ | ||
1185 | #define GPIO_LDD10 GPIO_LDD (10) /* LCD Data [10] (O) */ | ||
1186 | #define GPIO_LDD11 GPIO_LDD (11) /* LCD Data [11] (O) */ | ||
1187 | #define GPIO_LDD12 GPIO_LDD (12) /* LCD Data [12] (O) */ | ||
1188 | #define GPIO_LDD13 GPIO_LDD (13) /* LCD Data [13] (O) */ | ||
1189 | #define GPIO_LDD14 GPIO_LDD (14) /* LCD Data [14] (O) */ | ||
1190 | #define GPIO_LDD15 GPIO_LDD (15) /* LCD Data [15] (O) */ | ||
1191 | /* ser. port 4: */ | ||
1192 | #define GPIO_SSP_TXD GPIO_GPIO (10) /* SSP Transmit Data (O) */ | ||
1193 | #define GPIO_SSP_RXD GPIO_GPIO (11) /* SSP Receive Data (I) */ | ||
1194 | #define GPIO_SSP_SCLK GPIO_GPIO (12) /* SSP Sample CLocK (O) */ | ||
1195 | #define GPIO_SSP_SFRM GPIO_GPIO (13) /* SSP Sample FRaMe (O) */ | ||
1196 | /* ser. port 1: */ | ||
1197 | #define GPIO_UART_TXD GPIO_GPIO (14) /* UART Transmit Data (O) */ | ||
1198 | #define GPIO_UART_RXD GPIO_GPIO (15) /* UART Receive Data (I) */ | ||
1199 | #define GPIO_SDLC_SCLK GPIO_GPIO (16) /* SDLC Sample CLocK (I/O) */ | ||
1200 | #define GPIO_SDLC_AAF GPIO_GPIO (17) /* SDLC Abort After Frame (O) */ | ||
1201 | #define GPIO_UART_SCLK1 GPIO_GPIO (18) /* UART Sample CLocK 1 (I) */ | ||
1202 | /* ser. port 4: */ | ||
1203 | #define GPIO_SSP_CLK GPIO_GPIO (19) /* SSP external CLocK (I) */ | ||
1204 | /* ser. port 3: */ | ||
1205 | #define GPIO_UART_SCLK3 GPIO_GPIO (20) /* UART Sample CLocK 3 (I) */ | ||
1206 | /* ser. port 4: */ | ||
1207 | #define GPIO_MCP_CLK GPIO_GPIO (21) /* MCP CLocK (I) */ | ||
1208 | /* test controller: */ | ||
1209 | #define GPIO_TIC_ACK GPIO_GPIO (21) /* TIC ACKnowledge (O) */ | ||
1210 | #define GPIO_MBGNT GPIO_GPIO (21) /* Memory Bus GraNT (O) */ | ||
1211 | #define GPIO_TREQA GPIO_GPIO (22) /* TIC REQuest A (I) */ | ||
1212 | #define GPIO_MBREQ GPIO_GPIO (22) /* Memory Bus REQuest (I) */ | ||
1213 | #define GPIO_TREQB GPIO_GPIO (23) /* TIC REQuest B (I) */ | ||
1214 | #define GPIO_1Hz GPIO_GPIO (25) /* 1 Hz clock (O) */ | ||
1215 | #define GPIO_RCLK GPIO_GPIO (26) /* internal (R) CLocK (O, fcpu/2) */ | ||
1216 | #define GPIO_32_768kHz GPIO_GPIO (27) /* 32.768 kHz clock (O, RTC) */ | ||
1217 | |||
1218 | #define GPDR_In 0 /* Input */ | ||
1219 | #define GPDR_Out 1 /* Output */ | ||
1220 | |||
1221 | |||
1222 | /* | ||
1223 | * Interrupt Controller (IC) control registers | ||
1224 | * | ||
1225 | * Registers | ||
1226 | * ICIP Interrupt Controller (IC) Interrupt ReQuest (IRQ) | ||
1227 | * Pending register (read). | ||
1228 | * ICMR Interrupt Controller (IC) Mask Register (read/write). | ||
1229 | * ICLR Interrupt Controller (IC) Level Register (read/write). | ||
1230 | * ICCR Interrupt Controller (IC) Control Register | ||
1231 | * (read/write). | ||
1232 | * [The ICCR register is only implemented in versions 2.0 | ||
1233 | * (rev. = 8) and higher of the StrongARM SA-1100.] | ||
1234 | * ICFP Interrupt Controller (IC) Fast Interrupt reQuest | ||
1235 | * (FIQ) Pending register (read). | ||
1236 | * ICPR Interrupt Controller (IC) Pending Register (read). | ||
1237 | * [The ICPR register is active low (inverted) in | ||
1238 | * versions 1.0 (rev. = 1) and 1.1 (rev. = 2) of the | ||
1239 | * StrongARM SA-1100, it is active high (non-inverted) in | ||
1240 | * versions 2.0 (rev. = 8) and higher.] | ||
1241 | */ | ||
1242 | |||
1243 | #define ICIP __REG(0x90050000) /* IC IRQ Pending reg. */ | ||
1244 | #define ICMR __REG(0x90050004) /* IC Mask Reg. */ | ||
1245 | #define ICLR __REG(0x90050008) /* IC Level Reg. */ | ||
1246 | #define ICCR __REG(0x9005000C) /* IC Control Reg. */ | ||
1247 | #define ICFP __REG(0x90050010) /* IC FIQ Pending reg. */ | ||
1248 | #define ICPR __REG(0x90050020) /* IC Pending Reg. */ | ||
1249 | |||
1250 | #define IC_GPIO(Nb) /* GPIO [0..10] */ \ | ||
1251 | (0x00000001 << (Nb)) | ||
1252 | #define IC_GPIO0 IC_GPIO (0) /* GPIO [0] */ | ||
1253 | #define IC_GPIO1 IC_GPIO (1) /* GPIO [1] */ | ||
1254 | #define IC_GPIO2 IC_GPIO (2) /* GPIO [2] */ | ||
1255 | #define IC_GPIO3 IC_GPIO (3) /* GPIO [3] */ | ||
1256 | #define IC_GPIO4 IC_GPIO (4) /* GPIO [4] */ | ||
1257 | #define IC_GPIO5 IC_GPIO (5) /* GPIO [5] */ | ||
1258 | #define IC_GPIO6 IC_GPIO (6) /* GPIO [6] */ | ||
1259 | #define IC_GPIO7 IC_GPIO (7) /* GPIO [7] */ | ||
1260 | #define IC_GPIO8 IC_GPIO (8) /* GPIO [8] */ | ||
1261 | #define IC_GPIO9 IC_GPIO (9) /* GPIO [9] */ | ||
1262 | #define IC_GPIO10 IC_GPIO (10) /* GPIO [10] */ | ||
1263 | #define IC_GPIO11_27 0x00000800 /* GPIO [11:27] (ORed) */ | ||
1264 | #define IC_LCD 0x00001000 /* LCD controller */ | ||
1265 | #define IC_Ser0UDC 0x00002000 /* Ser. port 0 UDC */ | ||
1266 | #define IC_Ser1SDLC 0x00004000 /* Ser. port 1 SDLC */ | ||
1267 | #define IC_Ser1UART 0x00008000 /* Ser. port 1 UART */ | ||
1268 | #define IC_Ser2ICP 0x00010000 /* Ser. port 2 ICP */ | ||
1269 | #define IC_Ser3UART 0x00020000 /* Ser. port 3 UART */ | ||
1270 | #define IC_Ser4MCP 0x00040000 /* Ser. port 4 MCP */ | ||
1271 | #define IC_Ser4SSP 0x00080000 /* Ser. port 4 SSP */ | ||
1272 | #define IC_DMA(Nb) /* DMA controller channel [0..5] */ \ | ||
1273 | (0x00100000 << (Nb)) | ||
1274 | #define IC_DMA0 IC_DMA (0) /* DMA controller channel 0 */ | ||
1275 | #define IC_DMA1 IC_DMA (1) /* DMA controller channel 1 */ | ||
1276 | #define IC_DMA2 IC_DMA (2) /* DMA controller channel 2 */ | ||
1277 | #define IC_DMA3 IC_DMA (3) /* DMA controller channel 3 */ | ||
1278 | #define IC_DMA4 IC_DMA (4) /* DMA controller channel 4 */ | ||
1279 | #define IC_DMA5 IC_DMA (5) /* DMA controller channel 5 */ | ||
1280 | #define IC_OST(Nb) /* OS Timer match [0..3] */ \ | ||
1281 | (0x04000000 << (Nb)) | ||
1282 | #define IC_OST0 IC_OST (0) /* OS Timer match 0 */ | ||
1283 | #define IC_OST1 IC_OST (1) /* OS Timer match 1 */ | ||
1284 | #define IC_OST2 IC_OST (2) /* OS Timer match 2 */ | ||
1285 | #define IC_OST3 IC_OST (3) /* OS Timer match 3 */ | ||
1286 | #define IC_RTC1Hz 0x40000000 /* RTC 1 Hz clock */ | ||
1287 | #define IC_RTCAlrm 0x80000000 /* RTC Alarm */ | ||
1288 | |||
1289 | #define ICLR_IRQ 0 /* Interrupt ReQuest */ | ||
1290 | #define ICLR_FIQ 1 /* Fast Interrupt reQuest */ | ||
1291 | |||
1292 | #define ICCR_DIM 0x00000001 /* Disable Idle-mode interrupt */ | ||
1293 | /* Mask */ | ||
1294 | #define ICCR_IdleAllInt (ICCR_DIM*0) /* Idle-mode All Interrupt enable */ | ||
1295 | /* (ICMR ignored) */ | ||
1296 | #define ICCR_IdleMskInt (ICCR_DIM*1) /* Idle-mode non-Masked Interrupt */ | ||
1297 | /* enable (ICMR used) */ | ||
1298 | |||
1299 | |||
1300 | /* | ||
1301 | * Peripheral Pin Controller (PPC) control registers | ||
1302 | * | ||
1303 | * Registers | ||
1304 | * PPDR Peripheral Pin Controller (PPC) Pin Direction | ||
1305 | * Register (read/write). | ||
1306 | * PPSR Peripheral Pin Controller (PPC) Pin State Register | ||
1307 | * (read/write). | ||
1308 | * PPAR Peripheral Pin Controller (PPC) Pin Assignment | ||
1309 | * Register (read/write). | ||
1310 | * PSDR Peripheral Pin Controller (PPC) Sleep-mode pin | ||
1311 | * Direction Register (read/write). | ||
1312 | * PPFR Peripheral Pin Controller (PPC) Pin Flag Register | ||
1313 | * (read). | ||
1314 | */ | ||
1315 | |||
1316 | #define PPDR __REG(0x90060000) /* PPC Pin Direction Reg. */ | ||
1317 | #define PPSR __REG(0x90060004) /* PPC Pin State Reg. */ | ||
1318 | #define PPAR __REG(0x90060008) /* PPC Pin Assignment Reg. */ | ||
1319 | #define PSDR __REG(0x9006000C) /* PPC Sleep-mode pin Direction Reg. */ | ||
1320 | #define PPFR __REG(0x90060010) /* PPC Pin Flag Reg. */ | ||
1321 | |||
1322 | #define PPC_LDD(Nb) /* LCD Data [0..7] */ \ | ||
1323 | (0x00000001 << (Nb)) | ||
1324 | #define PPC_LDD0 PPC_LDD (0) /* LCD Data [0] */ | ||
1325 | #define PPC_LDD1 PPC_LDD (1) /* LCD Data [1] */ | ||
1326 | #define PPC_LDD2 PPC_LDD (2) /* LCD Data [2] */ | ||
1327 | #define PPC_LDD3 PPC_LDD (3) /* LCD Data [3] */ | ||
1328 | #define PPC_LDD4 PPC_LDD (4) /* LCD Data [4] */ | ||
1329 | #define PPC_LDD5 PPC_LDD (5) /* LCD Data [5] */ | ||
1330 | #define PPC_LDD6 PPC_LDD (6) /* LCD Data [6] */ | ||
1331 | #define PPC_LDD7 PPC_LDD (7) /* LCD Data [7] */ | ||
1332 | #define PPC_L_PCLK 0x00000100 /* LCD Pixel CLocK */ | ||
1333 | #define PPC_L_LCLK 0x00000200 /* LCD Line CLocK */ | ||
1334 | #define PPC_L_FCLK 0x00000400 /* LCD Frame CLocK */ | ||
1335 | #define PPC_L_BIAS 0x00000800 /* LCD AC BIAS */ | ||
1336 | /* ser. port 1: */ | ||
1337 | #define PPC_TXD1 0x00001000 /* SDLC/UART Transmit Data 1 */ | ||
1338 | #define PPC_RXD1 0x00002000 /* SDLC/UART Receive Data 1 */ | ||
1339 | /* ser. port 2: */ | ||
1340 | #define PPC_TXD2 0x00004000 /* IPC Transmit Data 2 */ | ||
1341 | #define PPC_RXD2 0x00008000 /* IPC Receive Data 2 */ | ||
1342 | /* ser. port 3: */ | ||
1343 | #define PPC_TXD3 0x00010000 /* UART Transmit Data 3 */ | ||
1344 | #define PPC_RXD3 0x00020000 /* UART Receive Data 3 */ | ||
1345 | /* ser. port 4: */ | ||
1346 | #define PPC_TXD4 0x00040000 /* MCP/SSP Transmit Data 4 */ | ||
1347 | #define PPC_RXD4 0x00080000 /* MCP/SSP Receive Data 4 */ | ||
1348 | #define PPC_SCLK 0x00100000 /* MCP/SSP Sample CLocK */ | ||
1349 | #define PPC_SFRM 0x00200000 /* MCP/SSP Sample FRaMe */ | ||
1350 | |||
1351 | #define PPDR_In 0 /* Input */ | ||
1352 | #define PPDR_Out 1 /* Output */ | ||
1353 | |||
1354 | /* ser. port 1: */ | ||
1355 | #define PPAR_UPR 0x00001000 /* UART Pin Reassignment */ | ||
1356 | #define PPAR_UARTTR (PPAR_UPR*0) /* UART on TXD_1 & RXD_1 */ | ||
1357 | #define PPAR_UARTGPIO (PPAR_UPR*1) /* UART on GPIO [14:15] */ | ||
1358 | /* ser. port 4: */ | ||
1359 | #define PPAR_SPR 0x00040000 /* SSP Pin Reassignment */ | ||
1360 | #define PPAR_SSPTRSS (PPAR_SPR*0) /* SSP on TXD_C, RXD_C, SCLK_C, */ | ||
1361 | /* & SFRM_C */ | ||
1362 | #define PPAR_SSPGPIO (PPAR_SPR*1) /* SSP on GPIO [10:13] */ | ||
1363 | |||
1364 | #define PSDR_OutL 0 /* Output Low in sleep mode */ | ||
1365 | #define PSDR_Flt 1 /* Floating (input) in sleep mode */ | ||
1366 | |||
1367 | #define PPFR_LCD 0x00000001 /* LCD controller */ | ||
1368 | #define PPFR_SP1TX 0x00001000 /* Ser. Port 1 SDLC/UART Transmit */ | ||
1369 | #define PPFR_SP1RX 0x00002000 /* Ser. Port 1 SDLC/UART Receive */ | ||
1370 | #define PPFR_SP2TX 0x00004000 /* Ser. Port 2 ICP Transmit */ | ||
1371 | #define PPFR_SP2RX 0x00008000 /* Ser. Port 2 ICP Receive */ | ||
1372 | #define PPFR_SP3TX 0x00010000 /* Ser. Port 3 UART Transmit */ | ||
1373 | #define PPFR_SP3RX 0x00020000 /* Ser. Port 3 UART Receive */ | ||
1374 | #define PPFR_SP4 0x00040000 /* Ser. Port 4 MCP/SSP */ | ||
1375 | #define PPFR_PerEn 0 /* Peripheral Enabled */ | ||
1376 | #define PPFR_PPCEn 1 /* PPC Enabled */ | ||
1377 | |||
1378 | |||
1379 | /* | ||
1380 | * Dynamic Random-Access Memory (DRAM) control registers | ||
1381 | * | ||
1382 | * Registers | ||
1383 | * MDCNFG Memory system: Dynamic Random-Access Memory (DRAM) | ||
1384 | * CoNFiGuration register (read/write). | ||
1385 | * MDCAS0 Memory system: Dynamic Random-Access Memory (DRAM) | ||
1386 | * Column Address Strobe (CAS) shift register 0 | ||
1387 | * (read/write). | ||
1388 | * MDCAS1 Memory system: Dynamic Random-Access Memory (DRAM) | ||
1389 | * Column Address Strobe (CAS) shift register 1 | ||
1390 | * (read/write). | ||
1391 | * MDCAS2 Memory system: Dynamic Random-Access Memory (DRAM) | ||
1392 | * Column Address Strobe (CAS) shift register 2 | ||
1393 | * (read/write). | ||
1394 | * | ||
1395 | * Clocks | ||
1396 | * fcpu, Tcpu Frequency, period of the CPU core clock (CCLK). | ||
1397 | * fmem, Tmem Frequency, period of the memory clock (fmem = fcpu/2). | ||
1398 | * fcas, Tcas Frequency, period of the DRAM CAS shift registers. | ||
1399 | */ | ||
1400 | |||
1401 | #define MDCNFG __REG(0xA0000000) /* DRAM CoNFiGuration reg. */ | ||
1402 | #define MDCAS0 __REG(0xA0000004) /* DRAM CAS shift reg. 0 */ | ||
1403 | #define MDCAS1 __REG(0xA0000008) /* DRAM CAS shift reg. 1 */ | ||
1404 | #define MDCAS2 __REG(0xA000000c) /* DRAM CAS shift reg. 2 */ | ||
1405 | |||
1406 | /* SA1100 MDCNFG values */ | ||
1407 | #define MDCNFG_DE(Nb) /* DRAM Enable bank [0..3] */ \ | ||
1408 | (0x00000001 << (Nb)) | ||
1409 | #define MDCNFG_DE0 MDCNFG_DE (0) /* DRAM Enable bank 0 */ | ||
1410 | #define MDCNFG_DE1 MDCNFG_DE (1) /* DRAM Enable bank 1 */ | ||
1411 | #define MDCNFG_DE2 MDCNFG_DE (2) /* DRAM Enable bank 2 */ | ||
1412 | #define MDCNFG_DE3 MDCNFG_DE (3) /* DRAM Enable bank 3 */ | ||
1413 | #define MDCNFG_DRAC Fld (2, 4) /* DRAM Row Address Count - 9 */ | ||
1414 | #define MDCNFG_RowAdd(Add) /* Row Address count [9..12] */ \ | ||
1415 | (((Add) - 9) << FShft (MDCNFG_DRAC)) | ||
1416 | #define MDCNFG_CDB2 0x00000040 /* shift reg. Clock Divide By 2 */ | ||
1417 | /* (fcas = fcpu/2) */ | ||
1418 | #define MDCNFG_TRP Fld (4, 7) /* Time RAS Pre-charge - 1 [Tmem] */ | ||
1419 | #define MDCNFG_PrChrg(Tcpu) /* Pre-Charge time [2..32 Tcpu] */ \ | ||
1420 | (((Tcpu) - 2)/2 << FShft (MDCNFG_TRP)) | ||
1421 | #define MDCNFG_CeilPrChrg(Tcpu) /* Ceil. of PrChrg [2..32 Tcpu] */ \ | ||
1422 | (((Tcpu) - 1)/2 << FShft (MDCNFG_TRP)) | ||
1423 | #define MDCNFG_TRASR Fld (4, 11) /* Time RAS Refresh - 1 [Tmem] */ | ||
1424 | #define MDCNFG_Ref(Tcpu) /* Refresh time [2..32 Tcpu] */ \ | ||
1425 | (((Tcpu) - 2)/2 << FShft (MDCNFG_TRASR)) | ||
1426 | #define MDCNFG_CeilRef(Tcpu) /* Ceil. of Ref [2..32 Tcpu] */ \ | ||
1427 | (((Tcpu) - 1)/2 << FShft (MDCNFG_TRASR)) | ||
1428 | #define MDCNFG_TDL Fld (2, 15) /* Time Data Latch [Tcpu] */ | ||
1429 | #define MDCNFG_DataLtch(Tcpu) /* Data Latch delay [0..3 Tcpu] */ \ | ||
1430 | ((Tcpu) << FShft (MDCNFG_TDL)) | ||
1431 | #define MDCNFG_DRI Fld (15, 17) /* min. DRAM Refresh Interval/4 */ | ||
1432 | /* [Tmem] */ | ||
1433 | #define MDCNFG_RefInt(Tcpu) /* min. Refresh Interval */ \ | ||
1434 | /* [0..262136 Tcpu] */ \ | ||
1435 | ((Tcpu)/8 << FShft (MDCNFG_DRI)) | ||
1436 | |||
1437 | /* SA1110 MDCNFG values */ | ||
1438 | #define MDCNFG_SA1110_DE0 0x00000001 /* DRAM Enable bank 0 */ | ||
1439 | #define MDCNFG_SA1110_DE1 0x00000002 /* DRAM Enable bank 1 */ | ||
1440 | #define MDCNFG_SA1110_DTIM0 0x00000004 /* DRAM timing type 0/1 */ | ||
1441 | #define MDCNFG_SA1110_DWID0 0x00000008 /* DRAM bus width 0/1 */ | ||
1442 | #define MDCNFG_SA1110_DRAC0 Fld(3, 4) /* DRAM row addr bit count */ | ||
1443 | /* bank 0/1 */ | ||
1444 | #define MDCNFG_SA1110_CDB20 0x00000080 /* Mem Clock divide by 2 0/1 */ | ||
1445 | #define MDCNFG_SA1110_TRP0 Fld(3, 8) /* RAS precharge 0/1 */ | ||
1446 | #define MDCNFG_SA1110_TDL0 Fld(2, 12) /* Data input latch after CAS*/ | ||
1447 | /* deassertion 0/1 */ | ||
1448 | #define MDCNFG_SA1110_TWR0 Fld(2, 14) /* SDRAM write recovery 0/1 */ | ||
1449 | #define MDCNFG_SA1110_DE2 0x00010000 /* DRAM Enable bank 0 */ | ||
1450 | #define MDCNFG_SA1110_DE3 0x00020000 /* DRAM Enable bank 1 */ | ||
1451 | #define MDCNFG_SA1110_DTIM2 0x00040000 /* DRAM timing type 0/1 */ | ||
1452 | #define MDCNFG_SA1110_DWID2 0x00080000 /* DRAM bus width 0/1 */ | ||
1453 | #define MDCNFG_SA1110_DRAC2 Fld(3, 20) /* DRAM row addr bit count */ | ||
1454 | /* bank 0/1 */ | ||
1455 | #define MDCNFG_SA1110_CDB22 0x00800000 /* Mem Clock divide by 2 0/1 */ | ||
1456 | #define MDCNFG_SA1110_TRP2 Fld(3, 24) /* RAS precharge 0/1 */ | ||
1457 | #define MDCNFG_SA1110_TDL2 Fld(2, 28) /* Data input latch after CAS*/ | ||
1458 | /* deassertion 0/1 */ | ||
1459 | #define MDCNFG_SA1110_TWR2 Fld(2, 30) /* SDRAM write recovery 0/1 */ | ||
1460 | |||
1461 | |||
1462 | /* | ||
1463 | * Static memory control registers | ||
1464 | * | ||
1465 | * Registers | ||
1466 | * MSC0 Memory system: Static memory Control register 0 | ||
1467 | * (read/write). | ||
1468 | * MSC1 Memory system: Static memory Control register 1 | ||
1469 | * (read/write). | ||
1470 | * | ||
1471 | * Clocks | ||
1472 | * fcpu, Tcpu Frequency, period of the CPU core clock (CCLK). | ||
1473 | * fmem, Tmem Frequency, period of the memory clock (fmem = fcpu/2). | ||
1474 | */ | ||
1475 | |||
1476 | #define MSC0 __REG(0xa0000010) /* Static memory Control reg. 0 */ | ||
1477 | #define MSC1 __REG(0xa0000014) /* Static memory Control reg. 1 */ | ||
1478 | #define MSC2 __REG(0xa000002c) /* Static memory Control reg. 2, not contiguous */ | ||
1479 | |||
1480 | #define MSC_Bnk(Nb) /* static memory Bank [0..3] */ \ | ||
1481 | Fld (16, ((Nb) Modulo 2)*16) | ||
1482 | #define MSC0_Bnk0 MSC_Bnk (0) /* static memory Bank 0 */ | ||
1483 | #define MSC0_Bnk1 MSC_Bnk (1) /* static memory Bank 1 */ | ||
1484 | #define MSC1_Bnk2 MSC_Bnk (2) /* static memory Bank 2 */ | ||
1485 | #define MSC1_Bnk3 MSC_Bnk (3) /* static memory Bank 3 */ | ||
1486 | |||
1487 | #define MSC_RT Fld (2, 0) /* ROM/static memory Type */ | ||
1488 | #define MSC_NonBrst /* Non-Burst static memory */ \ | ||
1489 | (0 << FShft (MSC_RT)) | ||
1490 | #define MSC_SRAM /* 32-bit byte-writable SRAM */ \ | ||
1491 | (1 << FShft (MSC_RT)) | ||
1492 | #define MSC_Brst4 /* Burst-of-4 static memory */ \ | ||
1493 | (2 << FShft (MSC_RT)) | ||
1494 | #define MSC_Brst8 /* Burst-of-8 static memory */ \ | ||
1495 | (3 << FShft (MSC_RT)) | ||
1496 | #define MSC_RBW 0x0004 /* ROM/static memory Bus Width */ | ||
1497 | #define MSC_32BitStMem (MSC_RBW*0) /* 32-Bit Static Memory */ | ||
1498 | #define MSC_16BitStMem (MSC_RBW*1) /* 16-Bit Static Memory */ | ||
1499 | #define MSC_RDF Fld (5, 3) /* ROM/static memory read Delay */ | ||
1500 | /* First access - 1(.5) [Tmem] */ | ||
1501 | #define MSC_1stRdAcc(Tcpu) /* 1st Read Access time (burst */ \ | ||
1502 | /* static memory) [3..65 Tcpu] */ \ | ||
1503 | ((((Tcpu) - 3)/2) << FShft (MSC_RDF)) | ||
1504 | #define MSC_Ceil1stRdAcc(Tcpu) /* Ceil. of 1stRdAcc [3..65 Tcpu] */ \ | ||
1505 | ((((Tcpu) - 2)/2) << FShft (MSC_RDF)) | ||
1506 | #define MSC_RdAcc(Tcpu) /* Read Access time (non-burst */ \ | ||
1507 | /* static memory) [2..64 Tcpu] */ \ | ||
1508 | ((((Tcpu) - 2)/2) << FShft (MSC_RDF)) | ||
1509 | #define MSC_CeilRdAcc(Tcpu) /* Ceil. of RdAcc [2..64 Tcpu] */ \ | ||
1510 | ((((Tcpu) - 1)/2) << FShft (MSC_RDF)) | ||
1511 | #define MSC_RDN Fld (5, 8) /* ROM/static memory read Delay */ | ||
1512 | /* Next access - 1 [Tmem] */ | ||
1513 | #define MSC_NxtRdAcc(Tcpu) /* Next Read Access time (burst */ \ | ||
1514 | /* static memory) [2..64 Tcpu] */ \ | ||
1515 | ((((Tcpu) - 2)/2) << FShft (MSC_RDN)) | ||
1516 | #define MSC_CeilNxtRdAcc(Tcpu) /* Ceil. of NxtRdAcc [2..64 Tcpu] */ \ | ||
1517 | ((((Tcpu) - 1)/2) << FShft (MSC_RDN)) | ||
1518 | #define MSC_WrAcc(Tcpu) /* Write Access time (non-burst */ \ | ||
1519 | /* static memory) [2..64 Tcpu] */ \ | ||
1520 | ((((Tcpu) - 2)/2) << FShft (MSC_RDN)) | ||
1521 | #define MSC_CeilWrAcc(Tcpu) /* Ceil. of WrAcc [2..64 Tcpu] */ \ | ||
1522 | ((((Tcpu) - 1)/2) << FShft (MSC_RDN)) | ||
1523 | #define MSC_RRR Fld (3, 13) /* ROM/static memory RecoveRy */ | ||
1524 | /* time/2 [Tmem] */ | ||
1525 | #define MSC_Rec(Tcpu) /* Recovery time [0..28 Tcpu] */ \ | ||
1526 | (((Tcpu)/4) << FShft (MSC_RRR)) | ||
1527 | #define MSC_CeilRec(Tcpu) /* Ceil. of Rec [0..28 Tcpu] */ \ | ||
1528 | ((((Tcpu) + 3)/4) << FShft (MSC_RRR)) | ||
1529 | |||
1530 | |||
1531 | /* | ||
1532 | * Personal Computer Memory Card International Association (PCMCIA) control | ||
1533 | * register | ||
1534 | * | ||
1535 | * Register | ||
1536 | * MECR Memory system: Expansion memory bus (PCMCIA) | ||
1537 | * Configuration Register (read/write). | ||
1538 | * | ||
1539 | * Clocks | ||
1540 | * fcpu, Tcpu Frequency, period of the CPU core clock (CCLK). | ||
1541 | * fmem, Tmem Frequency, period of the memory clock (fmem = fcpu/2). | ||
1542 | * fbclk, Tbclk Frequency, period of the PCMCIA clock (BCLK). | ||
1543 | */ | ||
1544 | |||
1545 | /* Memory system: */ | ||
1546 | #define MECR __REG(0xA0000018) /* Expansion memory bus (PCMCIA) Configuration Reg. */ | ||
1547 | |||
1548 | #define MECR_PCMCIA(Nb) /* PCMCIA [0..1] */ \ | ||
1549 | Fld (15, (Nb)*16) | ||
1550 | #define MECR_PCMCIA0 MECR_PCMCIA (0) /* PCMCIA 0 */ | ||
1551 | #define MECR_PCMCIA1 MECR_PCMCIA (1) /* PCMCIA 1 */ | ||
1552 | |||
1553 | #define MECR_BSIO Fld (5, 0) /* BCLK Select I/O - 1 [Tmem] */ | ||
1554 | #define MECR_IOClk(Tcpu) /* I/O Clock [2..64 Tcpu] */ \ | ||
1555 | ((((Tcpu) - 2)/2) << FShft (MECR_BSIO)) | ||
1556 | #define MECR_CeilIOClk(Tcpu) /* Ceil. of IOClk [2..64 Tcpu] */ \ | ||
1557 | ((((Tcpu) - 1)/2) << FShft (MECR_BSIO)) | ||
1558 | #define MECR_BSA Fld (5, 5) /* BCLK Select Attribute - 1 */ | ||
1559 | /* [Tmem] */ | ||
1560 | #define MECR_AttrClk(Tcpu) /* Attribute Clock [2..64 Tcpu] */ \ | ||
1561 | ((((Tcpu) - 2)/2) << FShft (MECR_BSA)) | ||
1562 | #define MECR_CeilAttrClk(Tcpu) /* Ceil. of AttrClk [2..64 Tcpu] */ \ | ||
1563 | ((((Tcpu) - 1)/2) << FShft (MECR_BSA)) | ||
1564 | #define MECR_BSM Fld (5, 10) /* BCLK Select Memory - 1 [Tmem] */ | ||
1565 | #define MECR_MemClk(Tcpu) /* Memory Clock [2..64 Tcpu] */ \ | ||
1566 | ((((Tcpu) - 2)/2) << FShft (MECR_BSM)) | ||
1567 | #define MECR_CeilMemClk(Tcpu) /* Ceil. of MemClk [2..64 Tcpu] */ \ | ||
1568 | ((((Tcpu) - 1)/2) << FShft (MECR_BSM)) | ||
1569 | |||
1570 | /* | ||
1571 | * On SA1110 only | ||
1572 | */ | ||
1573 | |||
1574 | #define MDREFR __REG(0xA000001C) | ||
1575 | |||
1576 | #define MDREFR_TRASR Fld (4, 0) | ||
1577 | #define MDREFR_DRI Fld (12, 4) | ||
1578 | #define MDREFR_E0PIN (1 << 16) | ||
1579 | #define MDREFR_K0RUN (1 << 17) | ||
1580 | #define MDREFR_K0DB2 (1 << 18) | ||
1581 | #define MDREFR_E1PIN (1 << 20) | ||
1582 | #define MDREFR_K1RUN (1 << 21) | ||
1583 | #define MDREFR_K1DB2 (1 << 22) | ||
1584 | #define MDREFR_K2RUN (1 << 25) | ||
1585 | #define MDREFR_K2DB2 (1 << 26) | ||
1586 | #define MDREFR_EAPD (1 << 28) | ||
1587 | #define MDREFR_KAPD (1 << 29) | ||
1588 | #define MDREFR_SLFRSH (1 << 31) | ||
1589 | |||
1590 | |||
1591 | /* | ||
1592 | * Direct Memory Access (DMA) control registers | ||
1593 | * | ||
1594 | * Registers | ||
1595 | * DDAR0 Direct Memory Access (DMA) Device Address Register | ||
1596 | * channel 0 (read/write). | ||
1597 | * DCSR0 Direct Memory Access (DMA) Control and Status | ||
1598 | * Register channel 0 (read/write). | ||
1599 | * DBSA0 Direct Memory Access (DMA) Buffer Start address | ||
1600 | * register A channel 0 (read/write). | ||
1601 | * DBTA0 Direct Memory Access (DMA) Buffer Transfer count | ||
1602 | * register A channel 0 (read/write). | ||
1603 | * DBSB0 Direct Memory Access (DMA) Buffer Start address | ||
1604 | * register B channel 0 (read/write). | ||
1605 | * DBTB0 Direct Memory Access (DMA) Buffer Transfer count | ||
1606 | * register B channel 0 (read/write). | ||
1607 | * | ||
1608 | * DDAR1 Direct Memory Access (DMA) Device Address Register | ||
1609 | * channel 1 (read/write). | ||
1610 | * DCSR1 Direct Memory Access (DMA) Control and Status | ||
1611 | * Register channel 1 (read/write). | ||
1612 | * DBSA1 Direct Memory Access (DMA) Buffer Start address | ||
1613 | * register A channel 1 (read/write). | ||
1614 | * DBTA1 Direct Memory Access (DMA) Buffer Transfer count | ||
1615 | * register A channel 1 (read/write). | ||
1616 | * DBSB1 Direct Memory Access (DMA) Buffer Start address | ||
1617 | * register B channel 1 (read/write). | ||
1618 | * DBTB1 Direct Memory Access (DMA) Buffer Transfer count | ||
1619 | * register B channel 1 (read/write). | ||
1620 | * | ||
1621 | * DDAR2 Direct Memory Access (DMA) Device Address Register | ||
1622 | * channel 2 (read/write). | ||
1623 | * DCSR2 Direct Memory Access (DMA) Control and Status | ||
1624 | * Register channel 2 (read/write). | ||
1625 | * DBSA2 Direct Memory Access (DMA) Buffer Start address | ||
1626 | * register A channel 2 (read/write). | ||
1627 | * DBTA2 Direct Memory Access (DMA) Buffer Transfer count | ||
1628 | * register A channel 2 (read/write). | ||
1629 | * DBSB2 Direct Memory Access (DMA) Buffer Start address | ||
1630 | * register B channel 2 (read/write). | ||
1631 | * DBTB2 Direct Memory Access (DMA) Buffer Transfer count | ||
1632 | * register B channel 2 (read/write). | ||
1633 | * | ||
1634 | * DDAR3 Direct Memory Access (DMA) Device Address Register | ||
1635 | * channel 3 (read/write). | ||
1636 | * DCSR3 Direct Memory Access (DMA) Control and Status | ||
1637 | * Register channel 3 (read/write). | ||
1638 | * DBSA3 Direct Memory Access (DMA) Buffer Start address | ||
1639 | * register A channel 3 (read/write). | ||
1640 | * DBTA3 Direct Memory Access (DMA) Buffer Transfer count | ||
1641 | * register A channel 3 (read/write). | ||
1642 | * DBSB3 Direct Memory Access (DMA) Buffer Start address | ||
1643 | * register B channel 3 (read/write). | ||
1644 | * DBTB3 Direct Memory Access (DMA) Buffer Transfer count | ||
1645 | * register B channel 3 (read/write). | ||
1646 | * | ||
1647 | * DDAR4 Direct Memory Access (DMA) Device Address Register | ||
1648 | * channel 4 (read/write). | ||
1649 | * DCSR4 Direct Memory Access (DMA) Control and Status | ||
1650 | * Register channel 4 (read/write). | ||
1651 | * DBSA4 Direct Memory Access (DMA) Buffer Start address | ||
1652 | * register A channel 4 (read/write). | ||
1653 | * DBTA4 Direct Memory Access (DMA) Buffer Transfer count | ||
1654 | * register A channel 4 (read/write). | ||
1655 | * DBSB4 Direct Memory Access (DMA) Buffer Start address | ||
1656 | * register B channel 4 (read/write). | ||
1657 | * DBTB4 Direct Memory Access (DMA) Buffer Transfer count | ||
1658 | * register B channel 4 (read/write). | ||
1659 | * | ||
1660 | * DDAR5 Direct Memory Access (DMA) Device Address Register | ||
1661 | * channel 5 (read/write). | ||
1662 | * DCSR5 Direct Memory Access (DMA) Control and Status | ||
1663 | * Register channel 5 (read/write). | ||
1664 | * DBSA5 Direct Memory Access (DMA) Buffer Start address | ||
1665 | * register A channel 5 (read/write). | ||
1666 | * DBTA5 Direct Memory Access (DMA) Buffer Transfer count | ||
1667 | * register A channel 5 (read/write). | ||
1668 | * DBSB5 Direct Memory Access (DMA) Buffer Start address | ||
1669 | * register B channel 5 (read/write). | ||
1670 | * DBTB5 Direct Memory Access (DMA) Buffer Transfer count | ||
1671 | * register B channel 5 (read/write). | ||
1672 | */ | ||
1673 | |||
1674 | #define DMASp 0x00000020 /* DMA control reg. Space [byte] */ | ||
1675 | |||
1676 | #define DDAR(Nb) __REG(0xB0000000 + (Nb)*DMASp) /* DMA Device Address Reg. channel [0..5] */ | ||
1677 | #define SetDCSR(Nb) __REG(0xB0000004 + (Nb)*DMASp) /* Set DMA Control & Status Reg. channel [0..5] (write) */ | ||
1678 | #define ClrDCSR(Nb) __REG(0xB0000008 + (Nb)*DMASp) /* Clear DMA Control & Status Reg. channel [0..5] (write) */ | ||
1679 | #define RdDCSR(Nb) __REG(0xB000000C + (Nb)*DMASp) /* Read DMA Control & Status Reg. channel [0..5] (read) */ | ||
1680 | #define DBSA(Nb) __REG(0xB0000010 + (Nb)*DMASp) /* DMA Buffer Start address reg. A channel [0..5] */ | ||
1681 | #define DBTA(Nb) __REG(0xB0000014 + (Nb)*DMASp) /* DMA Buffer Transfer count reg. A channel [0..5] */ | ||
1682 | #define DBSB(Nb) __REG(0xB0000018 + (Nb)*DMASp) /* DMA Buffer Start address reg. B channel [0..5] */ | ||
1683 | #define DBTB(Nb) __REG(0xB000001C + (Nb)*DMASp) /* DMA Buffer Transfer count reg. B channel [0..5] */ | ||
1684 | |||
1685 | #define DDAR_RW 0x00000001 /* device data Read/Write */ | ||
1686 | #define DDAR_DevWr (DDAR_RW*0) /* Device data Write */ | ||
1687 | /* (memory -> device) */ | ||
1688 | #define DDAR_DevRd (DDAR_RW*1) /* Device data Read */ | ||
1689 | /* (device -> memory) */ | ||
1690 | #define DDAR_E 0x00000002 /* big/little Endian device */ | ||
1691 | #define DDAR_LtlEnd (DDAR_E*0) /* Little Endian device */ | ||
1692 | #define DDAR_BigEnd (DDAR_E*1) /* Big Endian device */ | ||
1693 | #define DDAR_BS 0x00000004 /* device Burst Size */ | ||
1694 | #define DDAR_Brst4 (DDAR_BS*0) /* Burst-of-4 device */ | ||
1695 | #define DDAR_Brst8 (DDAR_BS*1) /* Burst-of-8 device */ | ||
1696 | #define DDAR_DW 0x00000008 /* device Data Width */ | ||
1697 | #define DDAR_8BitDev (DDAR_DW*0) /* 8-Bit Device */ | ||
1698 | #define DDAR_16BitDev (DDAR_DW*1) /* 16-Bit Device */ | ||
1699 | #define DDAR_DS Fld (4, 4) /* Device Select */ | ||
1700 | #define DDAR_Ser0UDCTr /* Ser. port 0 UDC Transmit */ \ | ||
1701 | (0x0 << FShft (DDAR_DS)) | ||
1702 | #define DDAR_Ser0UDCRc /* Ser. port 0 UDC Receive */ \ | ||
1703 | (0x1 << FShft (DDAR_DS)) | ||
1704 | #define DDAR_Ser1SDLCTr /* Ser. port 1 SDLC Transmit */ \ | ||
1705 | (0x2 << FShft (DDAR_DS)) | ||
1706 | #define DDAR_Ser1SDLCRc /* Ser. port 1 SDLC Receive */ \ | ||
1707 | (0x3 << FShft (DDAR_DS)) | ||
1708 | #define DDAR_Ser1UARTTr /* Ser. port 1 UART Transmit */ \ | ||
1709 | (0x4 << FShft (DDAR_DS)) | ||
1710 | #define DDAR_Ser1UARTRc /* Ser. port 1 UART Receive */ \ | ||
1711 | (0x5 << FShft (DDAR_DS)) | ||
1712 | #define DDAR_Ser2ICPTr /* Ser. port 2 ICP Transmit */ \ | ||
1713 | (0x6 << FShft (DDAR_DS)) | ||
1714 | #define DDAR_Ser2ICPRc /* Ser. port 2 ICP Receive */ \ | ||
1715 | (0x7 << FShft (DDAR_DS)) | ||
1716 | #define DDAR_Ser3UARTTr /* Ser. port 3 UART Transmit */ \ | ||
1717 | (0x8 << FShft (DDAR_DS)) | ||
1718 | #define DDAR_Ser3UARTRc /* Ser. port 3 UART Receive */ \ | ||
1719 | (0x9 << FShft (DDAR_DS)) | ||
1720 | #define DDAR_Ser4MCP0Tr /* Ser. port 4 MCP 0 Transmit */ \ | ||
1721 | /* (audio) */ \ | ||
1722 | (0xA << FShft (DDAR_DS)) | ||
1723 | #define DDAR_Ser4MCP0Rc /* Ser. port 4 MCP 0 Receive */ \ | ||
1724 | /* (audio) */ \ | ||
1725 | (0xB << FShft (DDAR_DS)) | ||
1726 | #define DDAR_Ser4MCP1Tr /* Ser. port 4 MCP 1 Transmit */ \ | ||
1727 | /* (telecom) */ \ | ||
1728 | (0xC << FShft (DDAR_DS)) | ||
1729 | #define DDAR_Ser4MCP1Rc /* Ser. port 4 MCP 1 Receive */ \ | ||
1730 | /* (telecom) */ \ | ||
1731 | (0xD << FShft (DDAR_DS)) | ||
1732 | #define DDAR_Ser4SSPTr /* Ser. port 4 SSP Transmit */ \ | ||
1733 | (0xE << FShft (DDAR_DS)) | ||
1734 | #define DDAR_Ser4SSPRc /* Ser. port 4 SSP Receive */ \ | ||
1735 | (0xF << FShft (DDAR_DS)) | ||
1736 | #define DDAR_DA Fld (24, 8) /* Device Address */ | ||
1737 | #define DDAR_DevAdd(Add) /* Device Address */ \ | ||
1738 | (((Add) & 0xF0000000) | \ | ||
1739 | (((Add) & 0X003FFFFC) << (FShft (DDAR_DA) - 2))) | ||
1740 | #define DDAR_Ser0UDCWr /* Ser. port 0 UDC Write */ \ | ||
1741 | (DDAR_DevWr + DDAR_Brst8 + DDAR_8BitDev + \ | ||
1742 | DDAR_Ser0UDCTr + DDAR_DevAdd (__PREG(Ser0UDCDR))) | ||
1743 | #define DDAR_Ser0UDCRd /* Ser. port 0 UDC Read */ \ | ||
1744 | (DDAR_DevRd + DDAR_Brst8 + DDAR_8BitDev + \ | ||
1745 | DDAR_Ser0UDCRc + DDAR_DevAdd (__PREG(Ser0UDCDR))) | ||
1746 | #define DDAR_Ser1UARTWr /* Ser. port 1 UART Write */ \ | ||
1747 | (DDAR_DevWr + DDAR_Brst4 + DDAR_8BitDev + \ | ||
1748 | DDAR_Ser1UARTTr + DDAR_DevAdd (__PREG(Ser1UTDR))) | ||
1749 | #define DDAR_Ser1UARTRd /* Ser. port 1 UART Read */ \ | ||
1750 | (DDAR_DevRd + DDAR_Brst4 + DDAR_8BitDev + \ | ||
1751 | DDAR_Ser1UARTRc + DDAR_DevAdd (__PREG(Ser1UTDR))) | ||
1752 | #define DDAR_Ser1SDLCWr /* Ser. port 1 SDLC Write */ \ | ||
1753 | (DDAR_DevWr + DDAR_Brst4 + DDAR_8BitDev + \ | ||
1754 | DDAR_Ser1SDLCTr + DDAR_DevAdd (__PREG(Ser1SDDR))) | ||
1755 | #define DDAR_Ser1SDLCRd /* Ser. port 1 SDLC Read */ \ | ||
1756 | (DDAR_DevRd + DDAR_Brst4 + DDAR_8BitDev + \ | ||
1757 | DDAR_Ser1SDLCRc + DDAR_DevAdd (__PREG(Ser1SDDR))) | ||
1758 | #define DDAR_Ser2UARTWr /* Ser. port 2 UART Write */ \ | ||
1759 | (DDAR_DevWr + DDAR_Brst4 + DDAR_8BitDev + \ | ||
1760 | DDAR_Ser2ICPTr + DDAR_DevAdd (__PREG(Ser2UTDR))) | ||
1761 | #define DDAR_Ser2UARTRd /* Ser. port 2 UART Read */ \ | ||
1762 | (DDAR_DevRd + DDAR_Brst4 + DDAR_8BitDev + \ | ||
1763 | DDAR_Ser2ICPRc + DDAR_DevAdd (__PREG(Ser2UTDR))) | ||
1764 | #define DDAR_Ser2HSSPWr /* Ser. port 2 HSSP Write */ \ | ||
1765 | (DDAR_DevWr + DDAR_Brst8 + DDAR_8BitDev + \ | ||
1766 | DDAR_Ser2ICPTr + DDAR_DevAdd (__PREG(Ser2HSDR))) | ||
1767 | #define DDAR_Ser2HSSPRd /* Ser. port 2 HSSP Read */ \ | ||
1768 | (DDAR_DevRd + DDAR_Brst8 + DDAR_8BitDev + \ | ||
1769 | DDAR_Ser2ICPRc + DDAR_DevAdd (__PREG(Ser2HSDR))) | ||
1770 | #define DDAR_Ser3UARTWr /* Ser. port 3 UART Write */ \ | ||
1771 | (DDAR_DevWr + DDAR_Brst4 + DDAR_8BitDev + \ | ||
1772 | DDAR_Ser3UARTTr + DDAR_DevAdd (__PREG(Ser3UTDR))) | ||
1773 | #define DDAR_Ser3UARTRd /* Ser. port 3 UART Read */ \ | ||
1774 | (DDAR_DevRd + DDAR_Brst4 + DDAR_8BitDev + \ | ||
1775 | DDAR_Ser3UARTRc + DDAR_DevAdd (__PREG(Ser3UTDR))) | ||
1776 | #define DDAR_Ser4MCP0Wr /* Ser. port 4 MCP 0 Write (audio) */ \ | ||
1777 | (DDAR_DevWr + DDAR_Brst4 + DDAR_16BitDev + \ | ||
1778 | DDAR_Ser4MCP0Tr + DDAR_DevAdd (__PREG(Ser4MCDR0))) | ||
1779 | #define DDAR_Ser4MCP0Rd /* Ser. port 4 MCP 0 Read (audio) */ \ | ||
1780 | (DDAR_DevRd + DDAR_Brst4 + DDAR_16BitDev + \ | ||
1781 | DDAR_Ser4MCP0Rc + DDAR_DevAdd (__PREG(Ser4MCDR0))) | ||
1782 | #define DDAR_Ser4MCP1Wr /* Ser. port 4 MCP 1 Write */ \ | ||
1783 | /* (telecom) */ \ | ||
1784 | (DDAR_DevWr + DDAR_Brst4 + DDAR_16BitDev + \ | ||
1785 | DDAR_Ser4MCP1Tr + DDAR_DevAdd (__PREG(Ser4MCDR1))) | ||
1786 | #define DDAR_Ser4MCP1Rd /* Ser. port 4 MCP 1 Read */ \ | ||
1787 | /* (telecom) */ \ | ||
1788 | (DDAR_DevRd + DDAR_Brst4 + DDAR_16BitDev + \ | ||
1789 | DDAR_Ser4MCP1Rc + DDAR_DevAdd (__PREG(Ser4MCDR1))) | ||
1790 | #define DDAR_Ser4SSPWr /* Ser. port 4 SSP Write (16 bits) */ \ | ||
1791 | (DDAR_DevWr + DDAR_Brst4 + DDAR_16BitDev + \ | ||
1792 | DDAR_Ser4SSPTr + DDAR_DevAdd (__PREG(Ser4SSDR))) | ||
1793 | #define DDAR_Ser4SSPRd /* Ser. port 4 SSP Read (16 bits) */ \ | ||
1794 | (DDAR_DevRd + DDAR_Brst4 + DDAR_16BitDev + \ | ||
1795 | DDAR_Ser4SSPRc + DDAR_DevAdd (__PREG(Ser4SSDR))) | ||
1796 | |||
1797 | #define DCSR_RUN 0x00000001 /* DMA RUNing */ | ||
1798 | #define DCSR_IE 0x00000002 /* DMA Interrupt Enable */ | ||
1799 | #define DCSR_ERROR 0x00000004 /* DMA ERROR */ | ||
1800 | #define DCSR_DONEA 0x00000008 /* DONE DMA transfer buffer A */ | ||
1801 | #define DCSR_STRTA 0x00000010 /* STaRTed DMA transfer buffer A */ | ||
1802 | #define DCSR_DONEB 0x00000020 /* DONE DMA transfer buffer B */ | ||
1803 | #define DCSR_STRTB 0x00000040 /* STaRTed DMA transfer buffer B */ | ||
1804 | #define DCSR_BIU 0x00000080 /* DMA Buffer In Use */ | ||
1805 | #define DCSR_BufA (DCSR_BIU*0) /* DMA Buffer A in use */ | ||
1806 | #define DCSR_BufB (DCSR_BIU*1) /* DMA Buffer B in use */ | ||
1807 | |||
1808 | #define DBT_TC Fld (13, 0) /* Transfer Count */ | ||
1809 | #define DBTA_TCA DBT_TC /* Transfer Count buffer A */ | ||
1810 | #define DBTB_TCB DBT_TC /* Transfer Count buffer B */ | ||
1811 | |||
1812 | |||
1813 | /* | ||
1814 | * Liquid Crystal Display (LCD) control registers | ||
1815 | * | ||
1816 | * Registers | ||
1817 | * LCCR0 Liquid Crystal Display (LCD) Control Register 0 | ||
1818 | * (read/write). | ||
1819 | * [Bits LDM, BAM, and ERM are only implemented in | ||
1820 | * versions 2.0 (rev. = 8) and higher of the StrongARM | ||
1821 | * SA-1100.] | ||
1822 | * LCSR Liquid Crystal Display (LCD) Status Register | ||
1823 | * (read/write). | ||
1824 | * [Bit LDD can be only read in versions 1.0 (rev. = 1) | ||
1825 | * and 1.1 (rev. = 2) of the StrongARM SA-1100, it can be | ||
1826 | * read and written (cleared) in versions 2.0 (rev. = 8) | ||
1827 | * and higher.] | ||
1828 | * DBAR1 Liquid Crystal Display (LCD) Direct Memory Access | ||
1829 | * (DMA) Base Address Register channel 1 (read/write). | ||
1830 | * DCAR1 Liquid Crystal Display (LCD) Direct Memory Access | ||
1831 | * (DMA) Current Address Register channel 1 (read). | ||
1832 | * DBAR2 Liquid Crystal Display (LCD) Direct Memory Access | ||
1833 | * (DMA) Base Address Register channel 2 (read/write). | ||
1834 | * DCAR2 Liquid Crystal Display (LCD) Direct Memory Access | ||
1835 | * (DMA) Current Address Register channel 2 (read). | ||
1836 | * LCCR1 Liquid Crystal Display (LCD) Control Register 1 | ||
1837 | * (read/write). | ||
1838 | * [The LCCR1 register can be only written in | ||
1839 | * versions 1.0 (rev. = 1) and 1.1 (rev. = 2) of the | ||
1840 | * StrongARM SA-1100, it can be written and read in | ||
1841 | * versions 2.0 (rev. = 8) and higher.] | ||
1842 | * LCCR2 Liquid Crystal Display (LCD) Control Register 2 | ||
1843 | * (read/write). | ||
1844 | * [The LCCR1 register can be only written in | ||
1845 | * versions 1.0 (rev. = 1) and 1.1 (rev. = 2) of the | ||
1846 | * StrongARM SA-1100, it can be written and read in | ||
1847 | * versions 2.0 (rev. = 8) and higher.] | ||
1848 | * LCCR3 Liquid Crystal Display (LCD) Control Register 3 | ||
1849 | * (read/write). | ||
1850 | * [The LCCR1 register can be only written in | ||
1851 | * versions 1.0 (rev. = 1) and 1.1 (rev. = 2) of the | ||
1852 | * StrongARM SA-1100, it can be written and read in | ||
1853 | * versions 2.0 (rev. = 8) and higher. Bit PCP is only | ||
1854 | * implemented in versions 2.0 (rev. = 8) and higher of | ||
1855 | * the StrongARM SA-1100.] | ||
1856 | * | ||
1857 | * Clocks | ||
1858 | * fcpu, Tcpu Frequency, period of the CPU core clock (CCLK). | ||
1859 | * fmem, Tmem Frequency, period of the memory clock (fmem = fcpu/2). | ||
1860 | * fpix, Tpix Frequency, period of the pixel clock. | ||
1861 | * fln, Tln Frequency, period of the line clock. | ||
1862 | * fac, Tac Frequency, period of the AC bias clock. | ||
1863 | */ | ||
1864 | |||
1865 | #define LCD_PEntrySp 2 /* LCD Palette Entry Space [byte] */ | ||
1866 | #define LCD_4BitPSp /* LCD 4-Bit pixel Palette Space */ \ | ||
1867 | /* [byte] */ \ | ||
1868 | (16*LCD_PEntrySp) | ||
1869 | #define LCD_8BitPSp /* LCD 8-Bit pixel Palette Space */ \ | ||
1870 | /* [byte] */ \ | ||
1871 | (256*LCD_PEntrySp) | ||
1872 | #define LCD_12_16BitPSp /* LCD 12/16-Bit pixel */ \ | ||
1873 | /* dummy-Palette Space [byte] */ \ | ||
1874 | (16*LCD_PEntrySp) | ||
1875 | |||
1876 | #define LCD_PGrey Fld (4, 0) /* LCD Palette entry Grey value */ | ||
1877 | #define LCD_PBlue Fld (4, 0) /* LCD Palette entry Blue value */ | ||
1878 | #define LCD_PGreen Fld (4, 4) /* LCD Palette entry Green value */ | ||
1879 | #define LCD_PRed Fld (4, 8) /* LCD Palette entry Red value */ | ||
1880 | #define LCD_PBS Fld (2, 12) /* LCD Pixel Bit Size */ | ||
1881 | #define LCD_4Bit /* LCD 4-Bit pixel mode */ \ | ||
1882 | (0 << FShft (LCD_PBS)) | ||
1883 | #define LCD_8Bit /* LCD 8-Bit pixel mode */ \ | ||
1884 | (1 << FShft (LCD_PBS)) | ||
1885 | #define LCD_12_16Bit /* LCD 12/16-Bit pixel mode */ \ | ||
1886 | (2 << FShft (LCD_PBS)) | ||
1887 | |||
1888 | #define LCD_Int0_0 0x0 /* LCD Intensity = 0.0% = 0 */ | ||
1889 | #define LCD_Int11_1 0x1 /* LCD Intensity = 11.1% = 1/9 */ | ||
1890 | #define LCD_Int20_0 0x2 /* LCD Intensity = 20.0% = 1/5 */ | ||
1891 | #define LCD_Int26_7 0x3 /* LCD Intensity = 26.7% = 4/15 */ | ||
1892 | #define LCD_Int33_3 0x4 /* LCD Intensity = 33.3% = 3/9 */ | ||
1893 | #define LCD_Int40_0 0x5 /* LCD Intensity = 40.0% = 2/5 */ | ||
1894 | #define LCD_Int44_4 0x6 /* LCD Intensity = 44.4% = 4/9 */ | ||
1895 | #define LCD_Int50_0 0x7 /* LCD Intensity = 50.0% = 1/2 */ | ||
1896 | #define LCD_Int55_6 0x8 /* LCD Intensity = 55.6% = 5/9 */ | ||
1897 | #define LCD_Int60_0 0x9 /* LCD Intensity = 60.0% = 3/5 */ | ||
1898 | #define LCD_Int66_7 0xA /* LCD Intensity = 66.7% = 6/9 */ | ||
1899 | #define LCD_Int73_3 0xB /* LCD Intensity = 73.3% = 11/15 */ | ||
1900 | #define LCD_Int80_0 0xC /* LCD Intensity = 80.0% = 4/5 */ | ||
1901 | #define LCD_Int88_9 0xD /* LCD Intensity = 88.9% = 8/9 */ | ||
1902 | #define LCD_Int100_0 0xE /* LCD Intensity = 100.0% = 1 */ | ||
1903 | #define LCD_Int100_0A 0xF /* LCD Intensity = 100.0% = 1 */ | ||
1904 | /* (Alternative) */ | ||
1905 | |||
1906 | #define LCCR0 __REG(0xB0100000) /* LCD Control Reg. 0 */ | ||
1907 | #define LCSR __REG(0xB0100004) /* LCD Status Reg. */ | ||
1908 | #define DBAR1 __REG(0xB0100010) /* LCD DMA Base Address Reg. channel 1 */ | ||
1909 | #define DCAR1 __REG(0xB0100014) /* LCD DMA Current Address Reg. channel 1 */ | ||
1910 | #define DBAR2 __REG(0xB0100018) /* LCD DMA Base Address Reg. channel 2 */ | ||
1911 | #define DCAR2 __REG(0xB010001C) /* LCD DMA Current Address Reg. channel 2 */ | ||
1912 | #define LCCR1 __REG(0xB0100020) /* LCD Control Reg. 1 */ | ||
1913 | #define LCCR2 __REG(0xB0100024) /* LCD Control Reg. 2 */ | ||
1914 | #define LCCR3 __REG(0xB0100028) /* LCD Control Reg. 3 */ | ||
1915 | |||
1916 | #define LCCR0_LEN 0x00000001 /* LCD ENable */ | ||
1917 | #define LCCR0_CMS 0x00000002 /* Color/Monochrome display Select */ | ||
1918 | #define LCCR0_Color (LCCR0_CMS*0) /* Color display */ | ||
1919 | #define LCCR0_Mono (LCCR0_CMS*1) /* Monochrome display */ | ||
1920 | #define LCCR0_SDS 0x00000004 /* Single/Dual panel display */ | ||
1921 | /* Select */ | ||
1922 | #define LCCR0_Sngl (LCCR0_SDS*0) /* Single panel display */ | ||
1923 | #define LCCR0_Dual (LCCR0_SDS*1) /* Dual panel display */ | ||
1924 | #define LCCR0_LDM 0x00000008 /* LCD Disable done (LDD) */ | ||
1925 | /* interrupt Mask (disable) */ | ||
1926 | #define LCCR0_BAM 0x00000010 /* Base Address update (BAU) */ | ||
1927 | /* interrupt Mask (disable) */ | ||
1928 | #define LCCR0_ERM 0x00000020 /* LCD ERror (BER, IOL, IUL, IOU, */ | ||
1929 | /* IUU, OOL, OUL, OOU, and OUU) */ | ||
1930 | /* interrupt Mask (disable) */ | ||
1931 | #define LCCR0_PAS 0x00000080 /* Passive/Active display Select */ | ||
1932 | #define LCCR0_Pas (LCCR0_PAS*0) /* Passive display (STN) */ | ||
1933 | #define LCCR0_Act (LCCR0_PAS*1) /* Active display (TFT) */ | ||
1934 | #define LCCR0_BLE 0x00000100 /* Big/Little Endian select */ | ||
1935 | #define LCCR0_LtlEnd (LCCR0_BLE*0) /* Little Endian frame buffer */ | ||
1936 | #define LCCR0_BigEnd (LCCR0_BLE*1) /* Big Endian frame buffer */ | ||
1937 | #define LCCR0_DPD 0x00000200 /* Double Pixel Data (monochrome */ | ||
1938 | /* display mode) */ | ||
1939 | #define LCCR0_4PixMono (LCCR0_DPD*0) /* 4-Pixel/clock Monochrome */ | ||
1940 | /* display */ | ||
1941 | #define LCCR0_8PixMono (LCCR0_DPD*1) /* 8-Pixel/clock Monochrome */ | ||
1942 | /* display */ | ||
1943 | #define LCCR0_PDD Fld (8, 12) /* Palette DMA request Delay */ | ||
1944 | /* [Tmem] */ | ||
1945 | #define LCCR0_DMADel(Tcpu) /* palette DMA request Delay */ \ | ||
1946 | /* [0..510 Tcpu] */ \ | ||
1947 | ((Tcpu)/2 << FShft (LCCR0_PDD)) | ||
1948 | |||
1949 | #define LCSR_LDD 0x00000001 /* LCD Disable Done */ | ||
1950 | #define LCSR_BAU 0x00000002 /* Base Address Update (read) */ | ||
1951 | #define LCSR_BER 0x00000004 /* Bus ERror */ | ||
1952 | #define LCSR_ABC 0x00000008 /* AC Bias clock Count */ | ||
1953 | #define LCSR_IOL 0x00000010 /* Input FIFO Over-run Lower */ | ||
1954 | /* panel */ | ||
1955 | #define LCSR_IUL 0x00000020 /* Input FIFO Under-run Lower */ | ||
1956 | /* panel */ | ||
1957 | #define LCSR_IOU 0x00000040 /* Input FIFO Over-run Upper */ | ||
1958 | /* panel */ | ||
1959 | #define LCSR_IUU 0x00000080 /* Input FIFO Under-run Upper */ | ||
1960 | /* panel */ | ||
1961 | #define LCSR_OOL 0x00000100 /* Output FIFO Over-run Lower */ | ||
1962 | /* panel */ | ||
1963 | #define LCSR_OUL 0x00000200 /* Output FIFO Under-run Lower */ | ||
1964 | /* panel */ | ||
1965 | #define LCSR_OOU 0x00000400 /* Output FIFO Over-run Upper */ | ||
1966 | /* panel */ | ||
1967 | #define LCSR_OUU 0x00000800 /* Output FIFO Under-run Upper */ | ||
1968 | /* panel */ | ||
1969 | |||
1970 | #define LCCR1_PPL Fld (6, 4) /* Pixels Per Line/16 - 1 */ | ||
1971 | #define LCCR1_DisWdth(Pixel) /* Display Width [16..1024 pix.] */ \ | ||
1972 | (((Pixel) - 16)/16 << FShft (LCCR1_PPL)) | ||
1973 | #define LCCR1_HSW Fld (6, 10) /* Horizontal Synchronization */ | ||
1974 | /* pulse Width - 1 [Tpix] (L_LCLK) */ | ||
1975 | #define LCCR1_HorSnchWdth(Tpix) /* Horizontal Synchronization */ \ | ||
1976 | /* pulse Width [1..64 Tpix] */ \ | ||
1977 | (((Tpix) - 1) << FShft (LCCR1_HSW)) | ||
1978 | #define LCCR1_ELW Fld (8, 16) /* End-of-Line pixel clock Wait */ | ||
1979 | /* count - 1 [Tpix] */ | ||
1980 | #define LCCR1_EndLnDel(Tpix) /* End-of-Line Delay */ \ | ||
1981 | /* [1..256 Tpix] */ \ | ||
1982 | (((Tpix) - 1) << FShft (LCCR1_ELW)) | ||
1983 | #define LCCR1_BLW Fld (8, 24) /* Beginning-of-Line pixel clock */ | ||
1984 | /* Wait count - 1 [Tpix] */ | ||
1985 | #define LCCR1_BegLnDel(Tpix) /* Beginning-of-Line Delay */ \ | ||
1986 | /* [1..256 Tpix] */ \ | ||
1987 | (((Tpix) - 1) << FShft (LCCR1_BLW)) | ||
1988 | |||
1989 | #define LCCR2_LPP Fld (10, 0) /* Line Per Panel - 1 */ | ||
1990 | #define LCCR2_DisHght(Line) /* Display Height [1..1024 lines] */ \ | ||
1991 | (((Line) - 1) << FShft (LCCR2_LPP)) | ||
1992 | #define LCCR2_VSW Fld (6, 10) /* Vertical Synchronization pulse */ | ||
1993 | /* Width - 1 [Tln] (L_FCLK) */ | ||
1994 | #define LCCR2_VrtSnchWdth(Tln) /* Vertical Synchronization pulse */ \ | ||
1995 | /* Width [1..64 Tln] */ \ | ||
1996 | (((Tln) - 1) << FShft (LCCR2_VSW)) | ||
1997 | #define LCCR2_EFW Fld (8, 16) /* End-of-Frame line clock Wait */ | ||
1998 | /* count [Tln] */ | ||
1999 | #define LCCR2_EndFrmDel(Tln) /* End-of-Frame Delay */ \ | ||
2000 | /* [0..255 Tln] */ \ | ||
2001 | ((Tln) << FShft (LCCR2_EFW)) | ||
2002 | #define LCCR2_BFW Fld (8, 24) /* Beginning-of-Frame line clock */ | ||
2003 | /* Wait count [Tln] */ | ||
2004 | #define LCCR2_BegFrmDel(Tln) /* Beginning-of-Frame Delay */ \ | ||
2005 | /* [0..255 Tln] */ \ | ||
2006 | ((Tln) << FShft (LCCR2_BFW)) | ||
2007 | |||
2008 | #define LCCR3_PCD Fld (8, 0) /* Pixel Clock Divisor/2 - 2 */ | ||
2009 | /* [1..255] (L_PCLK) */ | ||
2010 | /* fpix = fcpu/(2*(PCD + 2)) */ | ||
2011 | /* Tpix = 2*(PCD + 2)*Tcpu */ | ||
2012 | #define LCCR3_PixClkDiv(Div) /* Pixel Clock Divisor [6..514] */ \ | ||
2013 | (((Div) - 4)/2 << FShft (LCCR3_PCD)) | ||
2014 | /* fpix = fcpu/(2*Floor (Div/2)) */ | ||
2015 | /* Tpix = 2*Floor (Div/2)*Tcpu */ | ||
2016 | #define LCCR3_CeilPixClkDiv(Div) /* Ceil. of PixClkDiv [6..514] */ \ | ||
2017 | (((Div) - 3)/2 << FShft (LCCR3_PCD)) | ||
2018 | /* fpix = fcpu/(2*Ceil (Div/2)) */ | ||
2019 | /* Tpix = 2*Ceil (Div/2)*Tcpu */ | ||
2020 | #define LCCR3_ACB Fld (8, 8) /* AC Bias clock half period - 1 */ | ||
2021 | /* [Tln] (L_BIAS) */ | ||
2022 | #define LCCR3_ACBsDiv(Div) /* AC Bias clock Divisor [2..512] */ \ | ||
2023 | (((Div) - 2)/2 << FShft (LCCR3_ACB)) | ||
2024 | /* fac = fln/(2*Floor (Div/2)) */ | ||
2025 | /* Tac = 2*Floor (Div/2)*Tln */ | ||
2026 | #define LCCR3_CeilACBsDiv(Div) /* Ceil. of ACBsDiv [2..512] */ \ | ||
2027 | (((Div) - 1)/2 << FShft (LCCR3_ACB)) | ||
2028 | /* fac = fln/(2*Ceil (Div/2)) */ | ||
2029 | /* Tac = 2*Ceil (Div/2)*Tln */ | ||
2030 | #define LCCR3_API Fld (4, 16) /* AC bias Pin transitions per */ | ||
2031 | /* Interrupt */ | ||
2032 | #define LCCR3_ACBsCntOff /* AC Bias clock transition Count */ \ | ||
2033 | /* Off */ \ | ||
2034 | (0 << FShft (LCCR3_API)) | ||
2035 | #define LCCR3_ACBsCnt(Trans) /* AC Bias clock transition Count */ \ | ||
2036 | /* [1..15] */ \ | ||
2037 | ((Trans) << FShft (LCCR3_API)) | ||
2038 | #define LCCR3_VSP 0x00100000 /* Vertical Synchronization pulse */ | ||
2039 | /* Polarity (L_FCLK) */ | ||
2040 | #define LCCR3_VrtSnchH (LCCR3_VSP*0) /* Vertical Synchronization pulse */ | ||
2041 | /* active High */ | ||
2042 | #define LCCR3_VrtSnchL (LCCR3_VSP*1) /* Vertical Synchronization pulse */ | ||
2043 | /* active Low */ | ||
2044 | #define LCCR3_HSP 0x00200000 /* Horizontal Synchronization */ | ||
2045 | /* pulse Polarity (L_LCLK) */ | ||
2046 | #define LCCR3_HorSnchH (LCCR3_HSP*0) /* Horizontal Synchronization */ | ||
2047 | /* pulse active High */ | ||
2048 | #define LCCR3_HorSnchL (LCCR3_HSP*1) /* Horizontal Synchronization */ | ||
2049 | /* pulse active Low */ | ||
2050 | #define LCCR3_PCP 0x00400000 /* Pixel Clock Polarity (L_PCLK) */ | ||
2051 | #define LCCR3_PixRsEdg (LCCR3_PCP*0) /* Pixel clock Rising-Edge */ | ||
2052 | #define LCCR3_PixFlEdg (LCCR3_PCP*1) /* Pixel clock Falling-Edge */ | ||
2053 | #define LCCR3_OEP 0x00800000 /* Output Enable Polarity (L_BIAS, */ | ||
2054 | /* active display mode) */ | ||
2055 | #define LCCR3_OutEnH (LCCR3_OEP*0) /* Output Enable active High */ | ||
2056 | #define LCCR3_OutEnL (LCCR3_OEP*1) /* Output Enable active Low */ | ||
2057 | |||
2058 | #ifndef __ASSEMBLY__ | ||
2059 | extern unsigned int processor_id; | ||
2060 | #endif | ||
2061 | |||
2062 | #define CPU_REVISION (processor_id & 15) | ||
2063 | #define CPU_SA1110_A0 (0) | ||
2064 | #define CPU_SA1110_B0 (4) | ||
2065 | #define CPU_SA1110_B1 (5) | ||
2066 | #define CPU_SA1110_B2 (6) | ||
2067 | #define CPU_SA1110_B4 (8) | ||
2068 | |||
2069 | #define CPU_SA1100_ID (0x4401a110) | ||
2070 | #define CPU_SA1100_MASK (0xfffffff0) | ||
2071 | #define CPU_SA1110_ID (0x6901b110) | ||
2072 | #define CPU_SA1110_MASK (0xfffffff0) | ||
diff --git a/include/asm-arm/arch-sa1100/SA-1101.h b/include/asm-arm/arch-sa1100/SA-1101.h new file mode 100644 index 000000000000..527d887f1ee3 --- /dev/null +++ b/include/asm-arm/arch-sa1100/SA-1101.h | |||
@@ -0,0 +1,925 @@ | |||
1 | /* | ||
2 | * SA-1101.h | ||
3 | * | ||
4 | * Copyright (c) Peter Danielsson 1999 | ||
5 | * | ||
6 | * Definition of constants related to the sa1101 | ||
7 | * support chip for the sa1100 | ||
8 | * | ||
9 | */ | ||
10 | |||
11 | |||
12 | /* Be sure that virtual mapping is defined right */ | ||
13 | #ifndef __ASM_ARCH_HARDWARE_H | ||
14 | #error You must include hardware.h not SA-1101.h | ||
15 | #endif | ||
16 | |||
17 | #ifndef SA1101_BASE | ||
18 | #error You must define SA-1101 physical base address | ||
19 | #endif | ||
20 | |||
21 | #ifndef LANGUAGE | ||
22 | # ifdef __ASSEMBLY__ | ||
23 | # define LANGUAGE Assembly | ||
24 | # else | ||
25 | # define LANGUAGE C | ||
26 | # endif | ||
27 | #endif | ||
28 | |||
29 | /* | ||
30 | * We have mapped the sa1101 depending on the value of SA1101_BASE. | ||
31 | * It then appears from 0xf4000000. | ||
32 | */ | ||
33 | |||
34 | #define SA1101_p2v( x ) ((x) - SA1101_BASE + 0xf4000000) | ||
35 | #define SA1101_v2p( x ) ((x) - 0xf4000000 + SA1101_BASE) | ||
36 | |||
37 | #ifndef SA1101_p2v | ||
38 | #define SA1101_p2v(PhAdd) (PhAdd) | ||
39 | #endif | ||
40 | |||
41 | #include <asm/arch/bitfield.h> | ||
42 | |||
43 | #define C 0 | ||
44 | #define Assembly 1 | ||
45 | |||
46 | |||
47 | /* | ||
48 | * Memory map | ||
49 | */ | ||
50 | |||
51 | #define __SHMEM_CONTROL0 0x00000000 | ||
52 | #define __SYSTEM_CONTROL1 0x00000400 | ||
53 | #define __ARBITER 0x00020000 | ||
54 | #define __SYSTEM_CONTROL2 0x00040000 | ||
55 | #define __SYSTEM_CONTROL3 0x00060000 | ||
56 | #define __PARALLEL_PORT 0x00080000 | ||
57 | #define __VIDMEM_CONTROL 0x00100000 | ||
58 | #define __UPDATE_FIFO 0x00120000 | ||
59 | #define __SHMEM_CONTROL1 0x00140000 | ||
60 | #define __INTERRUPT_CONTROL 0x00160000 | ||
61 | #define __USB_CONTROL 0x00180000 | ||
62 | #define __TRACK_INTERFACE 0x001a0000 | ||
63 | #define __MOUSE_INTERFACE 0x001b0000 | ||
64 | #define __KEYPAD_INTERFACE 0x001c0000 | ||
65 | #define __PCMCIA_INTERFACE 0x001e0000 | ||
66 | #define __VGA_CONTROL 0x00200000 | ||
67 | #define __GPIO_INTERFACE 0x00300000 | ||
68 | |||
69 | /* | ||
70 | * Macro that calculates real address for registers in the SA-1101 | ||
71 | */ | ||
72 | |||
73 | #define _SA1101( x ) ((x) + SA1101_BASE) | ||
74 | |||
75 | /* | ||
76 | * Interface and shared memory controller registers | ||
77 | * | ||
78 | * Registers | ||
79 | * SKCR SA-1101 control register (read/write) | ||
80 | * SMCR Shared Memory Controller Register | ||
81 | * SNPR Snoop Register | ||
82 | */ | ||
83 | |||
84 | #define _SKCR _SA1101( 0x00000000 ) /* SA-1101 Control Reg. */ | ||
85 | #define _SMCR _SA1101( 0x00140000 ) /* Shared Mem. Control Reg. */ | ||
86 | #define _SNPR _SA1101( 0x00140400 ) /* Snoop Reg. */ | ||
87 | |||
88 | #if LANGUAGE == C | ||
89 | #define SKCR (*((volatile Word *) SA1101_p2v (_SKCR))) | ||
90 | #define SMCR (*((volatile Word *) SA1101_p2v (_SMCR))) | ||
91 | #define SNPR (*((volatile Word *) SA1101_p2v (_SNPR))) | ||
92 | |||
93 | #define SKCR_PLLEn 0x0001 /* Enable On-Chip PLL */ | ||
94 | #define SKCR_BCLKEn 0x0002 /* Enables BCLK */ | ||
95 | #define SKCR_Sleep 0x0004 /* Sleep Mode */ | ||
96 | #define SKCR_IRefEn 0x0008 /* DAC Iref input enable */ | ||
97 | #define SKCR_VCOON 0x0010 /* VCO bias */ | ||
98 | #define SKCR_ScanTestEn 0x0020 /* Enables scan test */ | ||
99 | #define SKCR_ClockTestEn 0x0040 /* Enables clock test */ | ||
100 | |||
101 | #define SMCR_DCAC Fld(2,0) /* Number of column address bits */ | ||
102 | #define SMCR_DRAC Fld(2,2) /* Number of row address bits */ | ||
103 | #define SMCR_ArbiterBias 0x0008 /* favor video or USB */ | ||
104 | #define SMCR_TopVidMem Fld(4,5) /* Top 4 bits of vidmem addr. */ | ||
105 | |||
106 | #define SMCR_ColAdrBits( x ) /* col. addr bits 8..11 */ \ | ||
107 | (( (x) - 8 ) << FShft (SMCR_DCAC)) | ||
108 | #define SMCR_RowAdrBits( x ) /* row addr bits 9..12 */\ | ||
109 | (( (x) - 9 ) << FShft (SMCR_DRAC) | ||
110 | |||
111 | #define SNPR_VFBstart Fld(12,0) /* Video frame buffer addr */ | ||
112 | #define SNPR_VFBsize Fld(11,12) /* Video frame buffer size */ | ||
113 | #define SNPR_WholeBank (1 << 23) /* Whole bank bit */ | ||
114 | #define SNPR_BankSelect Fld(2,27) /* Bank select */ | ||
115 | #define SNPR_SnoopEn (1 << 31) /* Enable snoop operation */ | ||
116 | |||
117 | #define SNPR_Set_VFBsize( x ) /* set frame buffer size (in kb) */ \ | ||
118 | ( (x) << FShft (SNPR_VFBsize)) | ||
119 | #define SNPR_Select_Bank(x) /* select bank 0 or 1 */ \ | ||
120 | (( (x) + 1 ) << FShft (SNPR_BankSelect )) | ||
121 | |||
122 | #endif /* LANGUAGE == C */ | ||
123 | |||
124 | /* | ||
125 | * Video Memory Controller | ||
126 | * | ||
127 | * Registers | ||
128 | * VMCCR Configuration register | ||
129 | * VMCAR VMC address register | ||
130 | * VMCDR VMC data register | ||
131 | * | ||
132 | */ | ||
133 | |||
134 | #define _VMCCR _SA1101( 0x00100000 ) /* Configuration register */ | ||
135 | #define _VMCAR _SA1101( 0x00101000 ) /* VMC address register */ | ||
136 | #define _VMCDR _SA1101( 0x00101400 ) /* VMC data register */ | ||
137 | |||
138 | #if LANGUAGE == C | ||
139 | #define VMCCR (*((volatile Word *) SA1101_p2v (_VMCCR))) | ||
140 | #define VMCAR (*((volatile Word *) SA1101_p2v (_VMCAR))) | ||
141 | #define VMCDR (*((volatile Word *) SA1101_p2v (_VMCDR))) | ||
142 | |||
143 | #define VMCCR_RefreshEn 0x0000 /* Enable memory refresh */ | ||
144 | #define VMCCR_Config 0x0001 /* DRAM size */ | ||
145 | #define VMCCR_RefPeriod Fld(2,3) /* Refresh period */ | ||
146 | #define VMCCR_StaleDataWait Fld(4,5) /* Stale FIFO data timeout counter */ | ||
147 | #define VMCCR_SleepState (1<<9) /* State of interface pins in sleep*/ | ||
148 | #define VMCCR_RefTest (1<<10) /* refresh test */ | ||
149 | #define VMCCR_RefLow Fld(6,11) /* refresh low counter */ | ||
150 | #define VMCCR_RefHigh Fld(7,17) /* refresh high counter */ | ||
151 | #define VMCCR_SDTCTest Fld(7,24) /* stale data timeout counter */ | ||
152 | #define VMCCR_ForceSelfRef (1<<31) /* Force self refresh */ | ||
153 | |||
154 | #endif LANGUAGE == C | ||
155 | |||
156 | |||
157 | /* Update FIFO | ||
158 | * | ||
159 | * Registers | ||
160 | * UFCR Update FIFO Control Register | ||
161 | * UFSR Update FIFO Status Register | ||
162 | * UFLVLR update FIFO level register | ||
163 | * UFDR update FIFO data register | ||
164 | */ | ||
165 | |||
166 | #define _UFCR _SA1101(0x00120000) /* Update FIFO Control Reg. */ | ||
167 | #define _UFSR _SA1101(0x00120400) /* Update FIFO Status Reg. */ | ||
168 | #define _UFLVLR _SA1101(0x00120800) /* Update FIFO level reg. */ | ||
169 | #define _UFDR _SA1101(0x00120c00) /* Update FIFO data reg. */ | ||
170 | |||
171 | #if LANGUAGE == C | ||
172 | |||
173 | #define UFCR (*((volatile Word *) SA1101_p2v (_UFCR))) | ||
174 | #define UFSR (*((volatile Word *) SA1101_p2v (_UFSR))) | ||
175 | #define UFLVLR (*((volatile Word *) SA1101_p2v (_UFLVLR))) | ||
176 | #define UFDR (*((volatile Word *) SA1101_p2v (_UFDR))) | ||
177 | |||
178 | |||
179 | #define UFCR_FifoThreshhold Fld(7,0) /* Level for FifoGTn flag */ | ||
180 | |||
181 | #define UFSR_FifoGTnFlag 0x01 /* FifoGTn flag */#define UFSR_FifoEmpty 0x80 /* FIFO is empty */ | ||
182 | |||
183 | #endif /* LANGUAGE == C */ | ||
184 | |||
185 | /* System Controller | ||
186 | * | ||
187 | * Registers | ||
188 | * SKPCR Power Control Register | ||
189 | * SKCDR Clock Divider Register | ||
190 | * DACDR1 DAC1 Data register | ||
191 | * DACDR2 DAC2 Data register | ||
192 | */ | ||
193 | |||
194 | #define _SKPCR _SA1101(0x00000400) | ||
195 | #define _SKCDR _SA1101(0x00040000) | ||
196 | #define _DACDR1 _SA1101(0x00060000) | ||
197 | #define _DACDR2 _SA1101(0x00060400) | ||
198 | |||
199 | #if LANGUAGE == C | ||
200 | #define SKPCR (*((volatile Word *) SA1101_p2v (_SKPCR))) | ||
201 | #define SKCDR (*((volatile Word *) SA1101_p2v (_SKCDR))) | ||
202 | #define DACDR1 (*((volatile Word *) SA1101_p2v (_DACDR1))) | ||
203 | #define DACDR2 (*((volatile Word *) SA1101_p2v (_DACDR2))) | ||
204 | |||
205 | #define SKPCR_UCLKEn 0x01 /* USB Enable */ | ||
206 | #define SKPCR_PCLKEn 0x02 /* PS/2 Enable */ | ||
207 | #define SKPCR_ICLKEn 0x04 /* Interrupt Controller Enable */ | ||
208 | #define SKPCR_VCLKEn 0x08 /* Video Controller Enable */ | ||
209 | #define SKPCR_PICLKEn 0x10 /* parallel port Enable */ | ||
210 | #define SKPCR_DCLKEn 0x20 /* DACs Enable */ | ||
211 | #define SKPCR_nKPADEn 0x40 /* Multiplexer */ | ||
212 | |||
213 | #define SKCDR_PLLMul Fld(7,0) /* PLL Multiplier */ | ||
214 | #define SKCDR_VCLKEn Fld(2,7) /* Video controller clock divider */ | ||
215 | #define SKDCR_BCLKEn (1<<9) /* BCLK Divider */ | ||
216 | #define SKDCR_UTESTCLKEn (1<<10) /* Route USB clock during test mode */ | ||
217 | #define SKDCR_DivRValue Fld(6,11) /* Input clock divider for PLL */ | ||
218 | #define SKDCR_DivNValue Fld(5,17) /* Output clock divider for PLL */ | ||
219 | #define SKDCR_PLLRSH Fld(3,22) /* PLL bandwidth control */ | ||
220 | #define SKDCR_ChargePump (1<<25) /* Charge pump control */ | ||
221 | #define SKDCR_ClkTestMode (1<<26) /* Clock output test mode */ | ||
222 | #define SKDCR_ClkTestEn (1<<27) /* Test clock generator */ | ||
223 | #define SKDCR_ClkJitterCntl Fld(3,28) /* video clock jitter compensation */ | ||
224 | |||
225 | #define DACDR_DACCount Fld(8,0) /* Count value */ | ||
226 | #define DACDR1_DACCount DACDR_DACCount | ||
227 | #define DACDR2_DACCount DACDR_DACCount | ||
228 | |||
229 | #endif /* LANGUAGE == C */ | ||
230 | |||
231 | /* | ||
232 | * Parallel Port Interface | ||
233 | * | ||
234 | * Registers | ||
235 | * IEEE_Config IEEE mode selection and programmable attributes | ||
236 | * IEEE_Control Controls the states of IEEE port control outputs | ||
237 | * IEEE_Data Forward transfer data register | ||
238 | * IEEE_Addr Forward transfer address register | ||
239 | * IEEE_Status Port IO signal status register | ||
240 | * IEEE_IntStatus Port interrupts status register | ||
241 | * IEEE_FifoLevels Rx and Tx FIFO interrupt generation levels | ||
242 | * IEEE_InitTime Forward timeout counter initial value | ||
243 | * IEEE_TimerStatus Forward timeout counter current value | ||
244 | * IEEE_FifoReset Reset forward transfer FIFO | ||
245 | * IEEE_ReloadValue Counter reload value | ||
246 | * IEEE_TestControl Control testmode | ||
247 | * IEEE_TestDataIn Test data register | ||
248 | * IEEE_TestDataInEn Enable test data | ||
249 | * IEEE_TestCtrlIn Test control signals | ||
250 | * IEEE_TestCtrlInEn Enable test control signals | ||
251 | * IEEE_TestDataStat Current data bus value | ||
252 | * | ||
253 | */ | ||
254 | |||
255 | /* | ||
256 | * The control registers are defined as offsets from a base address | ||
257 | */ | ||
258 | |||
259 | #define _IEEE( x ) _SA1101( (x) + __PARALLEL_PORT ) | ||
260 | |||
261 | #define _IEEE_Config _IEEE( 0x0000 ) | ||
262 | #define _IEEE_Control _IEEE( 0x0400 ) | ||
263 | #define _IEEE_Data _IEEE( 0x4000 ) | ||
264 | #define _IEEE_Addr _IEEE( 0x0800 ) | ||
265 | #define _IEEE_Status _IEEE( 0x0c00 ) | ||
266 | #define _IEEE_IntStatus _IEEE( 0x1000 ) | ||
267 | #define _IEEE_FifoLevels _IEEE( 0x1400 ) | ||
268 | #define _IEEE_InitTime _IEEE( 0x1800 ) | ||
269 | #define _IEEE_TimerStatus _IEEE( 0x1c00 ) | ||
270 | #define _IEEE_FifoReset _IEEE( 0x2000 ) | ||
271 | #define _IEEE_ReloadValue _IEEE( 0x3c00 ) | ||
272 | #define _IEEE_TestControl _IEEE( 0x2400 ) | ||
273 | #define _IEEE_TestDataIn _IEEE( 0x2800 ) | ||
274 | #define _IEEE_TestDataInEn _IEEE( 0x2c00 ) | ||
275 | #define _IEEE_TestCtrlIn _IEEE( 0x3000 ) | ||
276 | #define _IEEE_TestCtrlInEn _IEEE( 0x3400 ) | ||
277 | #define _IEEE_TestDataStat _IEEE( 0x3800 ) | ||
278 | |||
279 | |||
280 | #if LANGUAGE == C | ||
281 | #define IEEE_Config (*((volatile Word *) SA1101_p2v (_IEEE_Config))) | ||
282 | #define IEEE_Control (*((volatile Word *) SA1101_p2v (_IEEE_Control))) | ||
283 | #define IEEE_Data (*((volatile Word *) SA1101_p2v (_IEEE_Data))) | ||
284 | #define IEEE_Addr (*((volatile Word *) SA1101_p2v (_IEEE_Addr))) | ||
285 | #define IEEE_Status (*((volatile Word *) SA1101_p2v (_IEEE_Status))) | ||
286 | #define IEEE_IntStatus (*((volatile Word *) SA1101_p2v (_IEEE_IntStatus))) | ||
287 | #define IEEE_FifoLevels (*((volatile Word *) SA1101_p2v (_IEEE_FifoLevels))) | ||
288 | #define IEEE_InitTime (*((volatile Word *) SA1101_p2v (_IEEE_InitTime))) | ||
289 | #define IEEE_TimerStatus (*((volatile Word *) SA1101_p2v (_IEEE_TimerStatus))) | ||
290 | #define IEEE_FifoReset (*((volatile Word *) SA1101_p2v (_IEEE_FifoReset))) | ||
291 | #define IEEE_ReloadValue (*((volatile Word *) SA1101_p2v (_IEEE_ReloadValue))) | ||
292 | #define IEEE_TestControl (*((volatile Word *) SA1101_p2v (_IEEE_TestControl))) | ||
293 | #define IEEE_TestDataIn (*((volatile Word *) SA1101_p2v (_IEEE_TestDataIn))) | ||
294 | #define IEEE_TestDataInEn (*((volatile Word *) SA1101_p2v (_IEEE_TestDataInEn))) | ||
295 | #define IEEE_TestCtrlIn (*((volatile Word *) SA1101_p2v (_IEEE_TestCtrlIn))) | ||
296 | #define IEEE_TestCtrlInEn (*((volatile Word *) SA1101_p2v (_IEEE_TestCtrlInEn))) | ||
297 | #define IEEE_TestDataStat (*((volatile Word *) SA1101_p2v (_IEEE_TestDataStat))) | ||
298 | |||
299 | |||
300 | #define IEEE_Config_M Fld(3,0) /* Mode select */ | ||
301 | #define IEEE_Config_D 0x04 /* FIFO access enable */ | ||
302 | #define IEEE_Config_B 0x08 /* 9-bit word enable */ | ||
303 | #define IEEE_Config_T 0x10 /* Data transfer enable */ | ||
304 | #define IEEE_Config_A 0x20 /* Data transfer direction */ | ||
305 | #define IEEE_Config_E 0x40 /* Timer enable */ | ||
306 | #define IEEE_Control_A 0x08 /* AutoFd output */ | ||
307 | #define IEEE_Control_E 0x04 /* Selectin output */ | ||
308 | #define IEEE_Control_T 0x02 /* Strobe output */ | ||
309 | #define IEEE_Control_I 0x01 /* Port init output */ | ||
310 | #define IEEE_Data_C (1<<31) /* Byte count */ | ||
311 | #define IEEE_Data_Db Fld(9,16) /* Data byte 2 */ | ||
312 | #define IEEE_Data_Da Fld(9,0) /* Data byte 1 */ | ||
313 | #define IEEE_Addr_A Fld(8,0) /* forward address transfer byte */ | ||
314 | #define IEEE_Status_A 0x0100 /* nAutoFd port output status */ | ||
315 | #define IEEE_Status_E 0x0080 /* nSelectIn port output status */ | ||
316 | #define IEEE_Status_T 0x0040 /* nStrobe port output status */ | ||
317 | #define IEEE_Status_I 0x0020 /* nInit port output status */ | ||
318 | #define IEEE_Status_B 0x0010 /* Busy port inout status */ | ||
319 | #define IEEE_Status_S 0x0008 /* Select port input status */ | ||
320 | #define IEEE_Status_K 0x0004 /* nAck port input status */ | ||
321 | #define IEEE_Status_F 0x0002 /* nFault port input status */ | ||
322 | #define IEEE_Status_R 0x0001 /* pError port input status */ | ||
323 | |||
324 | #define IEEE_IntStatus_IntReqDat 0x0100 | ||
325 | #define IEEE_IntStatus_IntReqEmp 0x0080 | ||
326 | #define IEEE_IntStatus_IntReqInt 0x0040 | ||
327 | #define IEEE_IntStatus_IntReqRav 0x0020 | ||
328 | #define IEEE_IntStatus_IntReqTim 0x0010 | ||
329 | #define IEEE_IntStatus_RevAddrComp 0x0008 | ||
330 | #define IEEE_IntStatus_RevDataComp 0x0004 | ||
331 | #define IEEE_IntStatus_FwdAddrComp 0x0002 | ||
332 | #define IEEE_IntStatus_FwdDataComp 0x0001 | ||
333 | #define IEEE_FifoLevels_RevFifoLevel 2 | ||
334 | #define IEEE_FifoLevels_FwdFifoLevel 1 | ||
335 | #define IEEE_InitTime_TimValInit Fld(22,0) | ||
336 | #define IEEE_TimerStatus_TimValStat Fld(22,0) | ||
337 | #define IEEE_ReloadValue_Reload Fld(4,0) | ||
338 | |||
339 | #define IEEE_TestControl_RegClk 0x04 | ||
340 | #define IEEE_TestControl_ClockSelect Fld(2,1) | ||
341 | #define IEEE_TestControl_TimerTestModeEn 0x01 | ||
342 | #define IEEE_TestCtrlIn_PError 0x10 | ||
343 | #define IEEE_TestCtrlIn_nFault 0x08 | ||
344 | #define IEEE_TestCtrlIn_nAck 0x04 | ||
345 | #define IEEE_TestCtrlIn_PSel 0x02 | ||
346 | #define IEEE_TestCtrlIn_Busy 0x01 | ||
347 | |||
348 | #endif /* LANGUAGE == C */ | ||
349 | |||
350 | /* | ||
351 | * VGA Controller | ||
352 | * | ||
353 | * Registers | ||
354 | * VideoControl Video Control Register | ||
355 | * VgaTiming0 VGA Timing Register 0 | ||
356 | * VgaTiming1 VGA Timing Register 1 | ||
357 | * VgaTiming2 VGA Timing Register 2 | ||
358 | * VgaTiming3 VGA Timing Register 3 | ||
359 | * VgaBorder VGA Border Color Register | ||
360 | * VgaDBAR VGADMA Base Address Register | ||
361 | * VgaDCAR VGADMA Channel Current Address Register | ||
362 | * VgaStatus VGA Status Register | ||
363 | * VgaInterruptMask VGA Interrupt Mask Register | ||
364 | * VgaPalette VGA Palette Registers | ||
365 | * DacControl DAC Control Register | ||
366 | * VgaTest VGA Controller Test Register | ||
367 | */ | ||
368 | |||
369 | #define _VGA( x ) _SA1101( ( x ) + __VGA_CONTROL ) | ||
370 | |||
371 | #define _VideoControl _VGA( 0x0000 ) | ||
372 | #define _VgaTiming0 _VGA( 0x0400 ) | ||
373 | #define _VgaTiming1 _VGA( 0x0800 ) | ||
374 | #define _VgaTiming2 _VGA( 0x0c00 ) | ||
375 | #define _VgaTiming3 _VGA( 0x1000 ) | ||
376 | #define _VgaBorder _VGA( 0x1400 ) | ||
377 | #define _VgaDBAR _VGA( 0x1800 ) | ||
378 | #define _VgaDCAR _VGA( 0x1c00 ) | ||
379 | #define _VgaStatus _VGA( 0x2000 ) | ||
380 | #define _VgaInterruptMask _VGA( 0x2400 ) | ||
381 | #define _VgaPalette _VGA( 0x40000 ) | ||
382 | #define _DacControl _VGA( 0x3000 ) | ||
383 | #define _VgaTest _VGA( 0x2c00 ) | ||
384 | |||
385 | #if (LANGUAGE == C) | ||
386 | #define VideoControl (*((volatile Word *) SA1101_p2v (_VideoControl))) | ||
387 | #define VgaTiming0 (*((volatile Word *) SA1101_p2v (_VgaTiming0))) | ||
388 | #define VgaTiming1 (*((volatile Word *) SA1101_p2v (_VgaTiming1))) | ||
389 | #define VgaTiming2 (*((volatile Word *) SA1101_p2v (_VgaTiming2))) | ||
390 | #define VgaTiming3 (*((volatile Word *) SA1101_p2v (_VgaTiming3))) | ||
391 | #define VgaBorder (*((volatile Word *) SA1101_p2v (_VgaBorder))) | ||
392 | #define VgaDBAR (*((volatile Word *) SA1101_p2v (_VgaDBAR))) | ||
393 | #define VgaDCAR (*((volatile Word *) SA1101_p2v (_VgaDCAR))) | ||
394 | #define VgaStatus (*((volatile Word *) SA1101_p2v (_VgaStatus))) | ||
395 | #define VgaInterruptMask (*((volatile Word *) SA1101_p2v (_VgaInterruptMask))) | ||
396 | #define VgaPalette (*((volatile Word *) SA1101_p2v (_VgaPalette))) | ||
397 | #define DacControl (*((volatile Word *) SA1101_p2v (_DacControl)) | ||
398 | #define VgaTest (*((volatile Word *) SA1101_p2v (_VgaTest))) | ||
399 | |||
400 | #define VideoControl_VgaEn 0x00000000 | ||
401 | #define VideoControl_BGR 0x00000001 | ||
402 | #define VideoControl_VCompVal Fld(2,2) | ||
403 | #define VideoControl_VgaReq Fld(4,4) | ||
404 | #define VideoControl_VBurstL Fld(4,8) | ||
405 | #define VideoControl_VMode (1<<12) | ||
406 | #define VideoControl_PalRead (1<<13) | ||
407 | |||
408 | #define VgaTiming0_PPL Fld(6,2) | ||
409 | #define VgaTiming0_HSW Fld(8,8) | ||
410 | #define VgaTiming0_HFP Fld(8,16) | ||
411 | #define VgaTiming0_HBP Fld(8,24) | ||
412 | |||
413 | #define VgaTiming1_LPS Fld(10,0) | ||
414 | #define VgaTiming1_VSW Fld(6,10) | ||
415 | #define VgaTiming1_VFP Fld(8,16) | ||
416 | #define VgaTiming1_VBP Fld(8,24) | ||
417 | |||
418 | #define VgaTiming2_IVS 0x01 | ||
419 | #define VgaTiming2_IHS 0x02 | ||
420 | #define VgaTiming2_CVS 0x04 | ||
421 | #define VgaTiming2_CHS 0x08 | ||
422 | |||
423 | #define VgaTiming3_HBS Fld(8,0) | ||
424 | #define VgaTiming3_HBE Fld(8,8) | ||
425 | #define VgaTiming3_VBS Fld(8,16) | ||
426 | #define VgaTiming3_VBE Fld(8,24) | ||
427 | |||
428 | #define VgaBorder_BCOL Fld(24,0) | ||
429 | |||
430 | #define VgaStatus_VFUF 0x01 | ||
431 | #define VgaStatus_VNext 0x02 | ||
432 | #define VgaStatus_VComp 0x04 | ||
433 | |||
434 | #define VgaInterruptMask_VFUFMask 0x00 | ||
435 | #define VgaInterruptMask_VNextMask 0x01 | ||
436 | #define VgaInterruptMask_VCompMask 0x02 | ||
437 | |||
438 | #define VgaPalette_R Fld(8,0) | ||
439 | #define VgaPalette_G Fld(8,8) | ||
440 | #define VgaPalette_B Fld(8,16) | ||
441 | |||
442 | #define DacControl_DACON 0x0001 | ||
443 | #define DacControl_COMPON 0x0002 | ||
444 | #define DacControl_PEDON 0x0004 | ||
445 | #define DacControl_RTrim Fld(5,4) | ||
446 | #define DacControl_GTrim Fld(5,9) | ||
447 | #define DacControl_BTrim Fld(5,14) | ||
448 | |||
449 | #define VgaTest_TDAC 0x00 | ||
450 | #define VgaTest_Datatest Fld(4,1) | ||
451 | #define VgaTest_DACTESTDAC 0x10 | ||
452 | #define VgaTest_DACTESTOUT Fld(3,5) | ||
453 | |||
454 | #endif /* LANGUAGE == C */ | ||
455 | |||
456 | /* | ||
457 | * USB Host Interface Controller | ||
458 | * | ||
459 | * Registers | ||
460 | * Revision | ||
461 | * Control | ||
462 | * CommandStatus | ||
463 | * InterruptStatus | ||
464 | * InterruptEnable | ||
465 | * HCCA | ||
466 | * PeriodCurrentED | ||
467 | * ControlHeadED | ||
468 | * BulkHeadED | ||
469 | * BulkCurrentED | ||
470 | * DoneHead | ||
471 | * FmInterval | ||
472 | * FmRemaining | ||
473 | * FmNumber | ||
474 | * PeriodicStart | ||
475 | * LSThreshold | ||
476 | * RhDescriptorA | ||
477 | * RhDescriptorB | ||
478 | * RhStatus | ||
479 | * RhPortStatus | ||
480 | * USBStatus | ||
481 | * USBReset | ||
482 | * USTAR | ||
483 | * USWER | ||
484 | * USRFR | ||
485 | * USNFR | ||
486 | * USTCSR | ||
487 | * USSR | ||
488 | * | ||
489 | */ | ||
490 | |||
491 | #define _USB( x ) _SA1101( ( x ) + __USB_CONTROL ) | ||
492 | |||
493 | |||
494 | #define _Revision _USB( 0x0000 ) | ||
495 | #define _Control _USB( 0x0888 ) | ||
496 | #define _CommandStatus _USB( 0x0c00 ) | ||
497 | #define _InterruptStatus _USB( 0x1000 ) | ||
498 | #define _InterruptEnable _USB( 0x1400 ) | ||
499 | #define _HCCA _USB( 0x1800 ) | ||
500 | #define _PeriodCurrentED _USB( 0x1c00 ) | ||
501 | #define _ControlHeadED _USB( 0x2000 ) | ||
502 | #define _BulkHeadED _USB( 0x2800 ) | ||
503 | #define _BulkCurrentED _USB( 0x2c00 ) | ||
504 | #define _DoneHead _USB( 0x3000 ) | ||
505 | #define _FmInterval _USB( 0x3400 ) | ||
506 | #define _FmRemaining _USB( 0x3800 ) | ||
507 | #define _FmNumber _USB( 0x3c00 ) | ||
508 | #define _PeriodicStart _USB( 0x4000 ) | ||
509 | #define _LSThreshold _USB( 0x4400 ) | ||
510 | #define _RhDescriptorA _USB( 0x4800 ) | ||
511 | #define _RhDescriptorB _USB( 0x4c00 ) | ||
512 | #define _RhStatus _USB( 0x5000 ) | ||
513 | #define _RhPortStatus _USB( 0x5400 ) | ||
514 | #define _USBStatus _USB( 0x11800 ) | ||
515 | #define _USBReset _USB( 0x11c00 ) | ||
516 | |||
517 | #define _USTAR _USB( 0x10400 ) | ||
518 | #define _USWER _USB( 0x10800 ) | ||
519 | #define _USRFR _USB( 0x10c00 ) | ||
520 | #define _USNFR _USB( 0x11000 ) | ||
521 | #define _USTCSR _USB( 0x11400 ) | ||
522 | #define _USSR _USB( 0x11800 ) | ||
523 | |||
524 | |||
525 | #if (LANGUAGE == C) | ||
526 | |||
527 | #define Revision (*((volatile Word *) SA1101_p2v (_Revision))) | ||
528 | #define Control (*((volatile Word *) SA1101_p2v (_Control))) | ||
529 | #define CommandStatus (*((volatile Word *) SA1101_p2v (_CommandStatus))) | ||
530 | #define InterruptStatus (*((volatile Word *) SA1101_p2v (_InterruptStatus))) | ||
531 | #define InterruptEnable (*((volatile Word *) SA1101_p2v (_InterruptEnable))) | ||
532 | #define HCCA (*((volatile Word *) SA1101_p2v (_HCCA))) | ||
533 | #define PeriodCurrentED (*((volatile Word *) SA1101_p2v (_PeriodCurrentED))) | ||
534 | #define ControlHeadED (*((volatile Word *) SA1101_p2v (_ControlHeadED))) | ||
535 | #define BulkHeadED (*((volatile Word *) SA1101_p2v (_BulkHeadED))) | ||
536 | #define BulkCurrentED (*((volatile Word *) SA1101_p2v (_BulkCurrentED))) | ||
537 | #define DoneHead (*((volatile Word *) SA1101_p2v (_DoneHead))) | ||
538 | #define FmInterval (*((volatile Word *) SA1101_p2v (_FmInterval))) | ||
539 | #define FmRemaining (*((volatile Word *) SA1101_p2v (_FmRemaining))) | ||
540 | #define FmNumber (*((volatile Word *) SA1101_p2v (_FmNumber))) | ||
541 | #define PeriodicStart (*((volatile Word *) SA1101_p2v (_PeriodicStart))) | ||
542 | #define LSThreshold (*((volatile Word *) SA1101_p2v (_LSThreshold))) | ||
543 | #define RhDescriptorA (*((volatile Word *) SA1101_p2v (_RhDescriptorA))) | ||
544 | #define RhDescriptorB (*((volatile Word *) SA1101_p2v (_RhDescriptorB))) | ||
545 | #define RhStatus (*((volatile Word *) SA1101_p2v (_RhStatus))) | ||
546 | #define RhPortStatus (*((volatile Word *) SA1101_p2v (_RhPortStatus))) | ||
547 | #define USBStatus (*((volatile Word *) SA1101_p2v (_USBStatus))) | ||
548 | #define USBReset (*((volatile Word *) SA1101_p2v (_USBReset))) | ||
549 | #define USTAR (*((volatile Word *) SA1101_p2v (_USTAR))) | ||
550 | #define USWER (*((volatile Word *) SA1101_p2v (_USWER))) | ||
551 | #define USRFR (*((volatile Word *) SA1101_p2v (_USRFR))) | ||
552 | #define USNFR (*((volatile Word *) SA1101_p2v (_USNFR))) | ||
553 | #define USTCSR (*((volatile Word *) SA1101_p2v (_USTCSR))) | ||
554 | #define USSR (*((volatile Word *) SA1101_p2v (_USSR))) | ||
555 | |||
556 | |||
557 | #define USBStatus_IrqHciRmtWkp (1<<7) | ||
558 | #define USBStatus_IrqHciBuffAcc (1<<8) | ||
559 | #define USBStatus_nIrqHciM (1<<9) | ||
560 | #define USBStatus_nHciMFClr (1<<10) | ||
561 | |||
562 | #define USBReset_ForceIfReset 0x01 | ||
563 | #define USBReset_ForceHcReset 0x02 | ||
564 | #define USBReset_ClkGenReset 0x04 | ||
565 | |||
566 | #define USTCR_RdBstCntrl Fld(3,0) | ||
567 | #define USTCR_ByteEnable Fld(4,3) | ||
568 | #define USTCR_WriteEn (1<<7) | ||
569 | #define USTCR_FifoCir (1<<8) | ||
570 | #define USTCR_TestXferSel (1<<9) | ||
571 | #define USTCR_FifoCirAtEnd (1<<10) | ||
572 | #define USTCR_nSimScaleDownClk (1<<11) | ||
573 | |||
574 | #define USSR_nAppMDEmpty 0x01 | ||
575 | #define USSR_nAppMDFirst 0x02 | ||
576 | #define USSR_nAppMDLast 0x04 | ||
577 | #define USSR_nAppMDFull 0x08 | ||
578 | #define USSR_nAppMAFull 0x10 | ||
579 | #define USSR_XferReq 0x20 | ||
580 | #define USSR_XferEnd 0x40 | ||
581 | |||
582 | #endif /* LANGUAGE == C */ | ||
583 | |||
584 | |||
585 | /* | ||
586 | * Interrupt Controller | ||
587 | * | ||
588 | * Registers | ||
589 | * INTTEST0 Test register 0 | ||
590 | * INTTEST1 Test register 1 | ||
591 | * INTENABLE0 Interrupt Enable register 0 | ||
592 | * INTENABLE1 Interrupt Enable register 1 | ||
593 | * INTPOL0 Interrupt Polarity selection 0 | ||
594 | * INTPOL1 Interrupt Polarity selection 1 | ||
595 | * INTTSTSEL Interrupt source selection | ||
596 | * INTSTATCLR0 Interrupt Status 0 | ||
597 | * INTSTATCLR1 Interrupt Status 1 | ||
598 | * INTSET0 Interrupt Set 0 | ||
599 | * INTSET1 Interrupt Set 1 | ||
600 | */ | ||
601 | |||
602 | #define _INT( x ) _SA1101( ( x ) + __INTERRUPT_CONTROL) | ||
603 | |||
604 | #define _INTTEST0 _INT( 0x1000 ) | ||
605 | #define _INTTEST1 _INT( 0x1400 ) | ||
606 | #define _INTENABLE0 _INT( 0x2000 ) | ||
607 | #define _INTENABLE1 _INT( 0x2400 ) | ||
608 | #define _INTPOL0 _INT( 0x3000 ) | ||
609 | #define _INTPOL1 _INT( 0x3400 ) | ||
610 | #define _INTTSTSEL _INT( 0x5000 ) | ||
611 | #define _INTSTATCLR0 _INT( 0x6000 ) | ||
612 | #define _INTSTATCLR1 _INT( 0x6400 ) | ||
613 | #define _INTSET0 _INT( 0x7000 ) | ||
614 | #define _INTSET1 _INT( 0x7400 ) | ||
615 | |||
616 | #if ( LANGUAGE == C ) | ||
617 | #define INTTEST0 (*((volatile Word *) SA1101_p2v (_INTTEST0))) | ||
618 | #define INTTEST1 (*((volatile Word *) SA1101_p2v (_INTTEST1))) | ||
619 | #define INTENABLE0 (*((volatile Word *) SA1101_p2v (_INTENABLE0))) | ||
620 | #define INTENABLE1 (*((volatile Word *) SA1101_p2v (_INTENABLE1))) | ||
621 | #define INTPOL0 (*((volatile Word *) SA1101_p2v (_INTPOL0))) | ||
622 | #define INTPOL1 (*((volatile Word *) SA1101_p2v (_INTPOL1))) | ||
623 | #define INTTSTSEL (*((volatile Word *) SA1101_p2v (_INTTSTSEL))) | ||
624 | #define INTSTATCLR0 (*((volatile Word *) SA1101_p2v (_INTSTATCLR0))) | ||
625 | #define INTSTATCLR1 (*((volatile Word *) SA1101_p2v (_INTSTATCLR1))) | ||
626 | #define INTSET0 (*((volatile Word *) SA1101_p2v (_INTSET0))) | ||
627 | #define INTSET1 (*((volatile Word *) SA1101_p2v (_INTSET1))) | ||
628 | |||
629 | #endif /* LANGUAGE == C */ | ||
630 | |||
631 | /* | ||
632 | * PS/2 Trackpad and Mouse Interfaces | ||
633 | * | ||
634 | * Registers (prefix kbd applies to trackpad interface, mse to mouse) | ||
635 | * KBDCR Control Register | ||
636 | * KBDSTAT Status Register | ||
637 | * KBDDATA Transmit/Receive Data register | ||
638 | * KBDCLKDIV Clock Division Register | ||
639 | * KBDPRECNT Clock Precount Register | ||
640 | * KBDTEST1 Test register 1 | ||
641 | * KBDTEST2 Test register 2 | ||
642 | * KBDTEST3 Test register 3 | ||
643 | * KBDTEST4 Test register 4 | ||
644 | * MSECR | ||
645 | * MSESTAT | ||
646 | * MSEDATA | ||
647 | * MSECLKDIV | ||
648 | * MSEPRECNT | ||
649 | * MSETEST1 | ||
650 | * MSETEST2 | ||
651 | * MSETEST3 | ||
652 | * MSETEST4 | ||
653 | * | ||
654 | */ | ||
655 | |||
656 | #define _KBD( x ) _SA1101( ( x ) + __TRACK_INTERFACE ) | ||
657 | #define _MSE( x ) _SA1101( ( x ) + __MOUSE_INTERFACE ) | ||
658 | |||
659 | #define _KBDCR _KBD( 0x0000 ) | ||
660 | #define _KBDSTAT _KBD( 0x0400 ) | ||
661 | #define _KBDDATA _KBD( 0x0800 ) | ||
662 | #define _KBDCLKDIV _KBD( 0x0c00 ) | ||
663 | #define _KBDPRECNT _KBD( 0x1000 ) | ||
664 | #define _KBDTEST1 _KBD( 0x2000 ) | ||
665 | #define _KBDTEST2 _KBD( 0x2400 ) | ||
666 | #define _KBDTEST3 _KBD( 0x2800 ) | ||
667 | #define _KBDTEST4 _KBD( 0x2c00 ) | ||
668 | #define _MSECR _MSE( 0x0000 ) | ||
669 | #define _MSESTAT _MSE( 0x0400 ) | ||
670 | #define _MSEDATA _MSE( 0x0800 ) | ||
671 | #define _MSECLKDIV _MSE( 0x0c00 ) | ||
672 | #define _MSEPRECNT _MSE( 0x1000 ) | ||
673 | #define _MSETEST1 _MSE( 0x2000 ) | ||
674 | #define _MSETEST2 _MSE( 0x2400 ) | ||
675 | #define _MSETEST3 _MSE( 0x2800 ) | ||
676 | #define _MSETEST4 _MSE( 0x2c00 ) | ||
677 | |||
678 | #if ( LANGUAGE == C ) | ||
679 | |||
680 | #define KBDCR (*((volatile Word *) SA1101_p2v (_KBDCR))) | ||
681 | #define KBDSTAT (*((volatile Word *) SA1101_p2v (_KBDSTAT))) | ||
682 | #define KBDDATA (*((volatile Word *) SA1101_p2v (_KBDDATA))) | ||
683 | #define KBDCLKDIV (*((volatile Word *) SA1101_p2v (_KBDCLKDIV))) | ||
684 | #define KBDPRECNT (*((volatile Word *) SA1101_p2v (_KBDPRECNT))) | ||
685 | #define KBDTEST1 (*((volatile Word *) SA1101_p2v (_KBDTEST1))) | ||
686 | #define KBDTEST2 (*((volatile Word *) SA1101_p2v (_KBDTEST2))) | ||
687 | #define KBDTEST3 (*((volatile Word *) SA1101_p2v (_KBDTEST3))) | ||
688 | #define KBDTEST4 (*((volatile Word *) SA1101_p2v (_KBDTEST4))) | ||
689 | #define MSECR (*((volatile Word *) SA1101_p2v (_MSECR))) | ||
690 | #define MSESTAT (*((volatile Word *) SA1101_p2v (_MSESTAT))) | ||
691 | #define MSEDATA (*((volatile Word *) SA1101_p2v (_MSEDATA))) | ||
692 | #define MSECLKDIV (*((volatile Word *) SA1101_p2v (_MSECLKDIV))) | ||
693 | #define MSEPRECNT (*((volatile Word *) SA1101_p2v (_MSEPRECNT))) | ||
694 | #define MSETEST1 (*((volatile Word *) SA1101_p2v (_MSETEST1))) | ||
695 | #define MSETEST2 (*((volatile Word *) SA1101_p2v (_MSETEST2))) | ||
696 | #define MSETEST3 (*((volatile Word *) SA1101_p2v (_MSETEST3))) | ||
697 | #define MSETEST4 (*((volatile Word *) SA1101_p2v (_MSETEST4))) | ||
698 | |||
699 | |||
700 | #define KBDCR_ENA 0x08 | ||
701 | #define KBDCR_FKD 0x02 | ||
702 | #define KBDCR_FKC 0x01 | ||
703 | |||
704 | #define KBDSTAT_TXE 0x80 | ||
705 | #define KBDSTAT_TXB 0x40 | ||
706 | #define KBDSTAT_RXF 0x20 | ||
707 | #define KBDSTAT_RXB 0x10 | ||
708 | #define KBDSTAT_ENA 0x08 | ||
709 | #define KBDSTAT_RXP 0x04 | ||
710 | #define KBDSTAT_KBD 0x02 | ||
711 | #define KBDSTAT_KBC 0x01 | ||
712 | |||
713 | #define KBDCLKDIV_DivVal Fld(4,0) | ||
714 | |||
715 | #define MSECR_ENA 0x08 | ||
716 | #define MSECR_FKD 0x02 | ||
717 | #define MSECR_FKC 0x01 | ||
718 | |||
719 | #define MSESTAT_TXE 0x80 | ||
720 | #define MSESTAT_TXB 0x40 | ||
721 | #define MSESTAT_RXF 0x20 | ||
722 | #define MSESTAT_RXB 0x10 | ||
723 | #define MSESTAT_ENA 0x08 | ||
724 | #define MSESTAT_RXP 0x04 | ||
725 | #define MSESTAT_MSD 0x02 | ||
726 | #define MSESTAT_MSC 0x01 | ||
727 | |||
728 | #define MSECLKDIV_DivVal Fld(4,0) | ||
729 | |||
730 | #define KBDTEST1_CD 0x80 | ||
731 | #define KBDTEST1_RC1 0x40 | ||
732 | #define KBDTEST1_MC 0x20 | ||
733 | #define KBDTEST1_C Fld(2,3) | ||
734 | #define KBDTEST1_T2 0x40 | ||
735 | #define KBDTEST1_T1 0x20 | ||
736 | #define KBDTEST1_T0 0x10 | ||
737 | #define KBDTEST2_TICBnRES 0x08 | ||
738 | #define KBDTEST2_RKC 0x04 | ||
739 | #define KBDTEST2_RKD 0x02 | ||
740 | #define KBDTEST2_SEL 0x01 | ||
741 | #define KBDTEST3_ms_16 0x80 | ||
742 | #define KBDTEST3_us_64 0x40 | ||
743 | #define KBDTEST3_us_16 0x20 | ||
744 | #define KBDTEST3_DIV8 0x10 | ||
745 | #define KBDTEST3_DIn 0x08 | ||
746 | #define KBDTEST3_CIn 0x04 | ||
747 | #define KBDTEST3_KD 0x02 | ||
748 | #define KBDTEST3_KC 0x01 | ||
749 | #define KBDTEST4_BC12 0x80 | ||
750 | #define KBDTEST4_BC11 0x40 | ||
751 | #define KBDTEST4_TRES 0x20 | ||
752 | #define KBDTEST4_CLKOE 0x10 | ||
753 | #define KBDTEST4_CRES 0x08 | ||
754 | #define KBDTEST4_RXB 0x04 | ||
755 | #define KBDTEST4_TXB 0x02 | ||
756 | #define KBDTEST4_SRX 0x01 | ||
757 | |||
758 | #define MSETEST1_CD 0x80 | ||
759 | #define MSETEST1_RC1 0x40 | ||
760 | #define MSETEST1_MC 0x20 | ||
761 | #define MSETEST1_C Fld(2,3) | ||
762 | #define MSETEST1_T2 0x40 | ||
763 | #define MSETEST1_T1 0x20 | ||
764 | #define MSETEST1_T0 0x10 | ||
765 | #define MSETEST2_TICBnRES 0x08 | ||
766 | #define MSETEST2_RKC 0x04 | ||
767 | #define MSETEST2_RKD 0x02 | ||
768 | #define MSETEST2_SEL 0x01 | ||
769 | #define MSETEST3_ms_16 0x80 | ||
770 | #define MSETEST3_us_64 0x40 | ||
771 | #define MSETEST3_us_16 0x20 | ||
772 | #define MSETEST3_DIV8 0x10 | ||
773 | #define MSETEST3_DIn 0x08 | ||
774 | #define MSETEST3_CIn 0x04 | ||
775 | #define MSETEST3_KD 0x02 | ||
776 | #define MSETEST3_KC 0x01 | ||
777 | #define MSETEST4_BC12 0x80 | ||
778 | #define MSETEST4_BC11 0x40 | ||
779 | #define MSETEST4_TRES 0x20 | ||
780 | #define MSETEST4_CLKOE 0x10 | ||
781 | #define MSETEST4_CRES 0x08 | ||
782 | #define MSETEST4_RXB 0x04 | ||
783 | #define MSETEST4_TXB 0x02 | ||
784 | #define MSETEST4_SRX 0x01 | ||
785 | |||
786 | #endif /* LANGUAGE == C */ | ||
787 | |||
788 | |||
789 | /* | ||
790 | * General-Purpose I/O Interface | ||
791 | * | ||
792 | * Registers | ||
793 | * PADWR Port A Data Write Register | ||
794 | * PBDWR Port B Data Write Register | ||
795 | * PADRR Port A Data Read Register | ||
796 | * PBDRR Port B Data Read Register | ||
797 | * PADDR Port A Data Direction Register | ||
798 | * PBDDR Port B Data Direction Register | ||
799 | * PASSR Port A Sleep State Register | ||
800 | * PBSSR Port B Sleep State Register | ||
801 | * | ||
802 | */ | ||
803 | |||
804 | #define _PIO( x ) _SA1101( ( x ) + __GPIO_INTERFACE ) | ||
805 | |||
806 | #define _PADWR _PIO( 0x0000 ) | ||
807 | #define _PBDWR _PIO( 0x0400 ) | ||
808 | #define _PADRR _PIO( 0x0000 ) | ||
809 | #define _PBDRR _PIO( 0x0400 ) | ||
810 | #define _PADDR _PIO( 0x0800 ) | ||
811 | #define _PBDDR _PIO( 0x0c00 ) | ||
812 | #define _PASSR _PIO( 0x1000 ) | ||
813 | #define _PBSSR _PIO( 0x1400 ) | ||
814 | |||
815 | |||
816 | #if ( LANGUAGE == C ) | ||
817 | |||
818 | |||
819 | #define PADWR (*((volatile Word *) SA1101_p2v (_PADWR))) | ||
820 | #define PBDWR (*((volatile Word *) SA1101_p2v (_PBDWR))) | ||
821 | #define PADRR (*((volatile Word *) SA1101_p2v (_PADRR))) | ||
822 | #define PBDRR (*((volatile Word *) SA1101_p2v (_PBDRR))) | ||
823 | #define PADDR (*((volatile Word *) SA1101_p2v (_PADDR))) | ||
824 | #define PBDDR (*((volatile Word *) SA1101_p2v (_PBDDR))) | ||
825 | #define PASSR (*((volatile Word *) SA1101_p2v (_PASSR))) | ||
826 | #define PBSSR (*((volatile Word *) SA1101_p2v (_PBSSR))) | ||
827 | |||
828 | #endif | ||
829 | |||
830 | |||
831 | |||
832 | /* | ||
833 | * Keypad Interface | ||
834 | * | ||
835 | * Registers | ||
836 | * PXDWR | ||
837 | * PXDRR | ||
838 | * PYDWR | ||
839 | * PYDRR | ||
840 | * | ||
841 | */ | ||
842 | |||
843 | #define _KEYPAD( x ) _SA1101( ( x ) + __KEYPAD_INTERFACE ) | ||
844 | |||
845 | #define _PXDWR _KEYPAD( 0x0000 ) | ||
846 | #define _PXDRR _KEYPAD( 0x0000 ) | ||
847 | #define _PYDWR _KEYPAD( 0x0400 ) | ||
848 | #define _PYDRR _KEYPAD( 0x0400 ) | ||
849 | |||
850 | #if ( LANGUAGE == C ) | ||
851 | |||
852 | |||
853 | #define PXDWR (*((volatile Word *) SA1101_p2v (_PXDWR))) | ||
854 | #define PXDRR (*((volatile Word *) SA1101_p2v (_PXDRR))) | ||
855 | #define PYDWR (*((volatile Word *) SA1101_p2v (_PYDWR))) | ||
856 | #define PYDRR (*((volatile Word *) SA1101_p2v (_PYDRR))) | ||
857 | |||
858 | #endif | ||
859 | |||
860 | |||
861 | |||
862 | /* | ||
863 | * PCMCIA Interface | ||
864 | * | ||
865 | * Registers | ||
866 | * PCSR Status Register | ||
867 | * PCCR Control Register | ||
868 | * PCSSR Sleep State Register | ||
869 | * | ||
870 | */ | ||
871 | |||
872 | #define _CARD( x ) _SA1101( ( x ) + __PCMCIA_INTERFACE ) | ||
873 | |||
874 | #define _PCSR _CARD( 0x0000 ) | ||
875 | #define _PCCR _CARD( 0x0400 ) | ||
876 | #define _PCSSR _CARD( 0x0800 ) | ||
877 | |||
878 | #if ( LANGUAGE == C ) | ||
879 | #define PCSR (*((volatile Word *) SA1101_p2v (_PCSR))) | ||
880 | #define PCCR (*((volatile Word *) SA1101_p2v (_PCCR))) | ||
881 | #define PCSSR (*((volatile Word *) SA1101_p2v (_PCSSR))) | ||
882 | |||
883 | #define PCSR_S0_ready 0x0001 | ||
884 | #define PCSR_S1_ready 0x0002 | ||
885 | #define PCSR_S0_detected 0x0004 | ||
886 | #define PCSR_S1_detected 0x0008 | ||
887 | #define PCSR_S0_VS1 0x0010 | ||
888 | #define PCSR_S0_VS2 0x0020 | ||
889 | #define PCSR_S1_VS1 0x0040 | ||
890 | #define PCSR_S1_VS2 0x0080 | ||
891 | #define PCSR_S0_WP 0x0100 | ||
892 | #define PCSR_S1_WP 0x0200 | ||
893 | #define PCSR_S0_BVD1_nSTSCHG 0x0400 | ||
894 | #define PCSR_S0_BVD2_nSPKR 0x0800 | ||
895 | #define PCSR_S1_BVD1_nSTSCHG 0x1000 | ||
896 | #define PCSR_S1_BVD2_nSPKR 0x2000 | ||
897 | |||
898 | #define PCCR_S0_VPP0 0x0001 | ||
899 | #define PCCR_S0_VPP1 0x0002 | ||
900 | #define PCCR_S0_VCC0 0x0004 | ||
901 | #define PCCR_S0_VCC1 0x0008 | ||
902 | #define PCCR_S1_VPP0 0x0010 | ||
903 | #define PCCR_S1_VPP1 0x0020 | ||
904 | #define PCCR_S1_VCC0 0x0040 | ||
905 | #define PCCR_S1_VCC1 0x0080 | ||
906 | #define PCCR_S0_reset 0x0100 | ||
907 | #define PCCR_S1_reset 0x0200 | ||
908 | #define PCCR_S0_float 0x0400 | ||
909 | #define PCCR_S1_float 0x0800 | ||
910 | |||
911 | #define PCSSR_S0_VCC0 0x0001 | ||
912 | #define PCSSR_S0_VCC1 0x0002 | ||
913 | #define PCSSR_S0_VPP0 0x0004 | ||
914 | #define PCSSR_S0_VPP1 0x0008 | ||
915 | #define PCSSR_S0_control 0x0010 | ||
916 | #define PCSSR_S1_VCC0 0x0020 | ||
917 | #define PCSSR_S1_VCC1 0x0040 | ||
918 | #define PCSSR_S1_VPP0 0x0080 | ||
919 | #define PCSSR_S1_VPP1 0x0100 | ||
920 | #define PCSSR_S1_control 0x0200 | ||
921 | |||
922 | #endif | ||
923 | |||
924 | #undef C | ||
925 | #undef Assembly | ||
diff --git a/include/asm-arm/arch-sa1100/SA-1111.h b/include/asm-arm/arch-sa1100/SA-1111.h new file mode 100644 index 000000000000..c38f60915cb6 --- /dev/null +++ b/include/asm-arm/arch-sa1100/SA-1111.h | |||
@@ -0,0 +1,5 @@ | |||
1 | /* | ||
2 | * Moved to new location | ||
3 | */ | ||
4 | #warning using old SA-1111.h - update to <asm/hardware/sa1111.h> | ||
5 | #include <asm/hardware/sa1111.h> | ||
diff --git a/include/asm-arm/arch-sa1100/assabet.h b/include/asm-arm/arch-sa1100/assabet.h new file mode 100644 index 000000000000..1f59b368c3f6 --- /dev/null +++ b/include/asm-arm/arch-sa1100/assabet.h | |||
@@ -0,0 +1,106 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-sa1100/assabet.h | ||
3 | * | ||
4 | * Created 2000/06/05 by Nicolas Pitre <nico@cam.org> | ||
5 | * | ||
6 | * This file contains the hardware specific definitions for Assabet | ||
7 | * Only include this file from SA1100-specific files. | ||
8 | * | ||
9 | * 2000/05/23 John Dorsey <john+@cs.cmu.edu> | ||
10 | * Definitions for Neponset added. | ||
11 | */ | ||
12 | #ifndef __ASM_ARCH_ASSABET_H | ||
13 | #define __ASM_ARCH_ASSABET_H | ||
14 | |||
15 | #include <linux/config.h> | ||
16 | |||
17 | /* System Configuration Register flags */ | ||
18 | |||
19 | #define ASSABET_SCR_SDRAM_LOW (1<<2) /* SDRAM size (low bit) */ | ||
20 | #define ASSABET_SCR_SDRAM_HIGH (1<<3) /* SDRAM size (high bit) */ | ||
21 | #define ASSABET_SCR_FLASH_LOW (1<<4) /* Flash size (low bit) */ | ||
22 | #define ASSABET_SCR_FLASH_HIGH (1<<5) /* Flash size (high bit) */ | ||
23 | #define ASSABET_SCR_GFX (1<<8) /* Graphics Accelerator (0 = present) */ | ||
24 | #define ASSABET_SCR_SA1111 (1<<9) /* Neponset (0 = present) */ | ||
25 | |||
26 | #define ASSABET_SCR_INIT -1 | ||
27 | |||
28 | extern unsigned long SCR_value; | ||
29 | |||
30 | #ifdef CONFIG_ASSABET_NEPONSET | ||
31 | #define machine_has_neponset() ((SCR_value & ASSABET_SCR_SA1111) == 0) | ||
32 | #else | ||
33 | #define machine_has_neponset() (0) | ||
34 | #endif | ||
35 | |||
36 | /* Board Control Register */ | ||
37 | |||
38 | #define ASSABET_BCR_BASE 0xf1000000 | ||
39 | #define ASSABET_BCR (*(volatile unsigned int *)(ASSABET_BCR_BASE)) | ||
40 | |||
41 | #define ASSABET_BCR_CF_PWR (1<<0) /* Compact Flash Power (1 = 3.3v, 0 = off) */ | ||
42 | #define ASSABET_BCR_CF_RST (1<<1) /* Compact Flash Reset (1 = power up reset) */ | ||
43 | #define ASSABET_BCR_GFX_RST (1<<1) /* Graphics Accelerator Reset (0 = hold reset) */ | ||
44 | #define ASSABET_BCR_CODEC_RST (1<<2) /* 0 = Holds UCB1300, ADI7171, and UDA1341 in reset */ | ||
45 | #define ASSABET_BCR_IRDA_FSEL (1<<3) /* IRDA Frequency select (0 = SIR, 1 = MIR/ FIR) */ | ||
46 | #define ASSABET_BCR_IRDA_MD0 (1<<4) /* Range/Power select */ | ||
47 | #define ASSABET_BCR_IRDA_MD1 (1<<5) /* Range/Power select */ | ||
48 | #define ASSABET_BCR_STEREO_LB (1<<6) /* Stereo Loopback */ | ||
49 | #define ASSABET_BCR_CF_BUS_OFF (1<<7) /* Compact Flash bus (0 = on, 1 = off (float)) */ | ||
50 | #define ASSABET_BCR_AUDIO_ON (1<<8) /* Audio power on */ | ||
51 | #define ASSABET_BCR_LIGHT_ON (1<<9) /* Backlight */ | ||
52 | #define ASSABET_BCR_LCD_12RGB (1<<10) /* 0 = 16RGB, 1 = 12RGB */ | ||
53 | #define ASSABET_BCR_LCD_ON (1<<11) /* LCD power on */ | ||
54 | #define ASSABET_BCR_RS232EN (1<<12) /* RS232 transceiver enable */ | ||
55 | #define ASSABET_BCR_LED_RED (1<<13) /* D9 (0 = on, 1 = off) */ | ||
56 | #define ASSABET_BCR_LED_GREEN (1<<14) /* D8 (0 = on, 1 = off) */ | ||
57 | #define ASSABET_BCR_VIB_ON (1<<15) /* Vibration motor (quiet alert) */ | ||
58 | #define ASSABET_BCR_COM_DTR (1<<16) /* COMport Data Terminal Ready */ | ||
59 | #define ASSABET_BCR_COM_RTS (1<<17) /* COMport Request To Send */ | ||
60 | #define ASSABET_BCR_RAD_WU (1<<18) /* Radio wake up interrupt */ | ||
61 | #define ASSABET_BCR_SMB_EN (1<<19) /* System management bus enable */ | ||
62 | #define ASSABET_BCR_TV_IR_DEC (1<<20) /* TV IR Decode Enable (not implemented) */ | ||
63 | #define ASSABET_BCR_QMUTE (1<<21) /* Quick Mute */ | ||
64 | #define ASSABET_BCR_RAD_ON (1<<22) /* Radio Power On */ | ||
65 | #define ASSABET_BCR_SPK_OFF (1<<23) /* 1 = Speaker amplifier power off */ | ||
66 | |||
67 | #ifdef CONFIG_SA1100_ASSABET | ||
68 | extern void ASSABET_BCR_frob(unsigned int mask, unsigned int set); | ||
69 | #else | ||
70 | #define ASSABET_BCR_frob(x,y) do { } while (0) | ||
71 | #endif | ||
72 | |||
73 | #define ASSABET_BCR_set(x) ASSABET_BCR_frob((x), (x)) | ||
74 | #define ASSABET_BCR_clear(x) ASSABET_BCR_frob((x), 0) | ||
75 | |||
76 | #define ASSABET_BSR_BASE 0xf1000000 | ||
77 | #define ASSABET_BSR (*(volatile unsigned int*)(ASSABET_BSR_BASE)) | ||
78 | |||
79 | #define ASSABET_BSR_RS232_VALID (1 << 24) | ||
80 | #define ASSABET_BSR_COM_DCD (1 << 25) | ||
81 | #define ASSABET_BSR_COM_CTS (1 << 26) | ||
82 | #define ASSABET_BSR_COM_DSR (1 << 27) | ||
83 | #define ASSABET_BSR_RAD_CTS (1 << 28) | ||
84 | #define ASSABET_BSR_RAD_DSR (1 << 29) | ||
85 | #define ASSABET_BSR_RAD_DCD (1 << 30) | ||
86 | #define ASSABET_BSR_RAD_RI (1 << 31) | ||
87 | |||
88 | |||
89 | /* GPIOs for which the generic definition doesn't say much */ | ||
90 | #define ASSABET_GPIO_RADIO_IRQ GPIO_GPIO (14) /* Radio interrupt request */ | ||
91 | #define ASSABET_GPIO_PS_MODE_SYNC GPIO_GPIO (16) /* Power supply mode/sync */ | ||
92 | #define ASSABET_GPIO_STEREO_64FS_CLK GPIO_GPIO (19) /* SSP UDA1341 clock input */ | ||
93 | #define ASSABET_GPIO_CF_IRQ GPIO_GPIO (21) /* CF IRQ */ | ||
94 | #define ASSABET_GPIO_CF_CD GPIO_GPIO (22) /* CF CD */ | ||
95 | #define ASSABET_GPIO_CF_BVD2 GPIO_GPIO (24) /* CF BVD */ | ||
96 | #define ASSABET_GPIO_GFX_IRQ GPIO_GPIO (24) /* Graphics IRQ */ | ||
97 | #define ASSABET_GPIO_CF_BVD1 GPIO_GPIO (25) /* CF BVD */ | ||
98 | #define ASSABET_GPIO_BATT_LOW GPIO_GPIO (26) /* Low battery */ | ||
99 | #define ASSABET_GPIO_RCLK GPIO_GPIO (26) /* CCLK/2 */ | ||
100 | |||
101 | #define ASSABET_IRQ_GPIO_CF_IRQ IRQ_GPIO21 | ||
102 | #define ASSABET_IRQ_GPIO_CF_CD IRQ_GPIO22 | ||
103 | #define ASSABET_IRQ_GPIO_CF_BVD2 IRQ_GPIO24 | ||
104 | #define ASSABET_IRQ_GPIO_CF_BVD1 IRQ_GPIO25 | ||
105 | |||
106 | #endif | ||
diff --git a/include/asm-arm/arch-sa1100/badge4.h b/include/asm-arm/arch-sa1100/badge4.h new file mode 100644 index 000000000000..8d7a671492db --- /dev/null +++ b/include/asm-arm/arch-sa1100/badge4.h | |||
@@ -0,0 +1,75 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-sa1100/badge4.h | ||
3 | * | ||
4 | * Tim Connors <connors@hpl.hp.com> | ||
5 | * Christopher Hoover <ch@hpl.hp.com> | ||
6 | * | ||
7 | * Copyright (C) 2002 Hewlett-Packard Company | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or modify | ||
10 | * it under the terms of the GNU General Public License version 2 as | ||
11 | * published by the Free Software Foundation. | ||
12 | * | ||
13 | */ | ||
14 | |||
15 | #ifndef __ASM_ARCH_HARDWARE_H | ||
16 | #error "include <asm/hardware.h> instead" | ||
17 | #endif | ||
18 | |||
19 | #define BADGE4_SA1111_BASE (0x48000000) | ||
20 | |||
21 | /* GPIOs on the BadgePAD 4 */ | ||
22 | #define BADGE4_GPIO_INT_1111 GPIO_GPIO0 /* SA-1111 IRQ */ | ||
23 | |||
24 | #define BADGE4_GPIO_INT_VID GPIO_GPIO1 /* Video expansion */ | ||
25 | #define BADGE4_GPIO_LGP2 GPIO_GPIO2 /* GPIO_LDD8 */ | ||
26 | #define BADGE4_GPIO_LGP3 GPIO_GPIO3 /* GPIO_LDD9 */ | ||
27 | #define BADGE4_GPIO_LGP4 GPIO_GPIO4 /* GPIO_LDD10 */ | ||
28 | #define BADGE4_GPIO_LGP5 GPIO_GPIO5 /* GPIO_LDD11 */ | ||
29 | #define BADGE4_GPIO_LGP6 GPIO_GPIO6 /* GPIO_LDD12 */ | ||
30 | #define BADGE4_GPIO_LGP7 GPIO_GPIO7 /* GPIO_LDD13 */ | ||
31 | #define BADGE4_GPIO_LGP8 GPIO_GPIO8 /* GPIO_LDD14 */ | ||
32 | #define BADGE4_GPIO_LGP9 GPIO_GPIO9 /* GPIO_LDD15 */ | ||
33 | #define BADGE4_GPIO_GPA_VID GPIO_GPIO10 /* Video expansion */ | ||
34 | #define BADGE4_GPIO_GPB_VID GPIO_GPIO11 /* Video expansion */ | ||
35 | #define BADGE4_GPIO_GPC_VID GPIO_GPIO12 /* Video expansion */ | ||
36 | |||
37 | #define BADGE4_GPIO_UART_HS1 GPIO_GPIO13 | ||
38 | #define BADGE4_GPIO_UART_HS2 GPIO_GPIO14 | ||
39 | |||
40 | #define BADGE4_GPIO_MUXSEL0 GPIO_GPIO15 | ||
41 | #define BADGE4_GPIO_TESTPT_J7 GPIO_GPIO16 | ||
42 | |||
43 | #define BADGE4_GPIO_SDSDA GPIO_GPIO17 /* SDRAM SPD Data */ | ||
44 | #define BADGE4_GPIO_SDSCL GPIO_GPIO18 /* SDRAM SPD Clock */ | ||
45 | #define BADGE4_GPIO_SDTYP0 GPIO_GPIO19 /* SDRAM Type Control */ | ||
46 | #define BADGE4_GPIO_SDTYP1 GPIO_GPIO20 /* SDRAM Type Control */ | ||
47 | |||
48 | #define BADGE4_GPIO_BGNT_1111 GPIO_GPIO21 /* GPIO_MBGNT */ | ||
49 | #define BADGE4_GPIO_BREQ_1111 GPIO_GPIO22 /* GPIO_TREQA */ | ||
50 | |||
51 | #define BADGE4_GPIO_TESTPT_J6 GPIO_GPIO23 | ||
52 | |||
53 | #define BADGE4_GPIO_PCMEN5V GPIO_GPIO24 /* 5V power */ | ||
54 | |||
55 | #define BADGE4_GPIO_SA1111_NRST GPIO_GPIO25 /* SA-1111 nRESET */ | ||
56 | |||
57 | #define BADGE4_GPIO_TESTPT_J5 GPIO_GPIO26 | ||
58 | |||
59 | #define BADGE4_GPIO_CLK_1111 GPIO_GPIO27 /* GPIO_32_768kHz */ | ||
60 | |||
61 | /* Interrupts on the BadgePAD 4 */ | ||
62 | #define BADGE4_IRQ_GPIO_SA1111 IRQ_GPIO0 /* SA-1111 interrupt */ | ||
63 | |||
64 | |||
65 | /* PCM5ENV Usage tracking */ | ||
66 | |||
67 | #define BADGE4_5V_PCMCIA_SOCK0 (1<<0) | ||
68 | #define BADGE4_5V_PCMCIA_SOCK1 (1<<1) | ||
69 | #define BADGE4_5V_PCMCIA_SOCK(n) (1<<(n)) | ||
70 | #define BADGE4_5V_USB (1<<2) | ||
71 | #define BADGE4_5V_INITIALLY (1<<3) | ||
72 | |||
73 | #ifndef __ASSEMBLY__ | ||
74 | extern void badge4_set_5V(unsigned subsystem, int on); | ||
75 | #endif | ||
diff --git a/include/asm-arm/arch-sa1100/bitfield.h b/include/asm-arm/arch-sa1100/bitfield.h new file mode 100644 index 000000000000..f1f0e3387d9c --- /dev/null +++ b/include/asm-arm/arch-sa1100/bitfield.h | |||
@@ -0,0 +1,113 @@ | |||
1 | /* | ||
2 | * FILE bitfield.h | ||
3 | * | ||
4 | * Version 1.1 | ||
5 | * Author Copyright (c) Marc A. Viredaz, 1998 | ||
6 | * DEC Western Research Laboratory, Palo Alto, CA | ||
7 | * Date April 1998 (April 1997) | ||
8 | * System Advanced RISC Machine (ARM) | ||
9 | * Language C or ARM Assembly | ||
10 | * Purpose Definition of macros to operate on bit fields. | ||
11 | */ | ||
12 | |||
13 | |||
14 | |||
15 | #ifndef __BITFIELD_H | ||
16 | #define __BITFIELD_H | ||
17 | |||
18 | #ifndef __ASSEMBLY__ | ||
19 | #define UData(Data) ((unsigned long) (Data)) | ||
20 | #else | ||
21 | #define UData(Data) (Data) | ||
22 | #endif | ||
23 | |||
24 | |||
25 | /* | ||
26 | * MACRO: Fld | ||
27 | * | ||
28 | * Purpose | ||
29 | * The macro "Fld" encodes a bit field, given its size and its shift value | ||
30 | * with respect to bit 0. | ||
31 | * | ||
32 | * Note | ||
33 | * A more intuitive way to encode bit fields would have been to use their | ||
34 | * mask. However, extracting size and shift value information from a bit | ||
35 | * field's mask is cumbersome and might break the assembler (255-character | ||
36 | * line-size limit). | ||
37 | * | ||
38 | * Input | ||
39 | * Size Size of the bit field, in number of bits. | ||
40 | * Shft Shift value of the bit field with respect to bit 0. | ||
41 | * | ||
42 | * Output | ||
43 | * Fld Encoded bit field. | ||
44 | */ | ||
45 | |||
46 | #define Fld(Size, Shft) (((Size) << 16) + (Shft)) | ||
47 | |||
48 | |||
49 | /* | ||
50 | * MACROS: FSize, FShft, FMsk, FAlnMsk, F1stBit | ||
51 | * | ||
52 | * Purpose | ||
53 | * The macros "FSize", "FShft", "FMsk", "FAlnMsk", and "F1stBit" return | ||
54 | * the size, shift value, mask, aligned mask, and first bit of a | ||
55 | * bit field. | ||
56 | * | ||
57 | * Input | ||
58 | * Field Encoded bit field (using the macro "Fld"). | ||
59 | * | ||
60 | * Output | ||
61 | * FSize Size of the bit field, in number of bits. | ||
62 | * FShft Shift value of the bit field with respect to bit 0. | ||
63 | * FMsk Mask for the bit field. | ||
64 | * FAlnMsk Mask for the bit field, aligned on bit 0. | ||
65 | * F1stBit First bit of the bit field. | ||
66 | */ | ||
67 | |||
68 | #define FSize(Field) ((Field) >> 16) | ||
69 | #define FShft(Field) ((Field) & 0x0000FFFF) | ||
70 | #define FMsk(Field) (((UData (1) << FSize (Field)) - 1) << FShft (Field)) | ||
71 | #define FAlnMsk(Field) ((UData (1) << FSize (Field)) - 1) | ||
72 | #define F1stBit(Field) (UData (1) << FShft (Field)) | ||
73 | |||
74 | |||
75 | /* | ||
76 | * MACRO: FInsrt | ||
77 | * | ||
78 | * Purpose | ||
79 | * The macro "FInsrt" inserts a value into a bit field by shifting the | ||
80 | * former appropriately. | ||
81 | * | ||
82 | * Input | ||
83 | * Value Bit-field value. | ||
84 | * Field Encoded bit field (using the macro "Fld"). | ||
85 | * | ||
86 | * Output | ||
87 | * FInsrt Bit-field value positioned appropriately. | ||
88 | */ | ||
89 | |||
90 | #define FInsrt(Value, Field) \ | ||
91 | (UData (Value) << FShft (Field)) | ||
92 | |||
93 | |||
94 | /* | ||
95 | * MACRO: FExtr | ||
96 | * | ||
97 | * Purpose | ||
98 | * The macro "FExtr" extracts the value of a bit field by masking and | ||
99 | * shifting it appropriately. | ||
100 | * | ||
101 | * Input | ||
102 | * Data Data containing the bit-field to be extracted. | ||
103 | * Field Encoded bit field (using the macro "Fld"). | ||
104 | * | ||
105 | * Output | ||
106 | * FExtr Bit-field value. | ||
107 | */ | ||
108 | |||
109 | #define FExtr(Data, Field) \ | ||
110 | ((UData (Data) >> FShft (Field)) & FAlnMsk (Field)) | ||
111 | |||
112 | |||
113 | #endif /* __BITFIELD_H */ | ||
diff --git a/include/asm-arm/arch-sa1100/cerf.h b/include/asm-arm/arch-sa1100/cerf.h new file mode 100644 index 000000000000..356d5ba88991 --- /dev/null +++ b/include/asm-arm/arch-sa1100/cerf.h | |||
@@ -0,0 +1,29 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-sa1100/cerf.h | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify | ||
5 | * it under the terms of the GNU General Public License version 2 as | ||
6 | * published by the Free Software Foundation. | ||
7 | * | ||
8 | * Apr-2003 : Removed some old PDA crud [FB] | ||
9 | */ | ||
10 | #ifndef _INCLUDE_CERF_H_ | ||
11 | #define _INCLUDE_CERF_H_ | ||
12 | |||
13 | #include <linux/config.h> | ||
14 | |||
15 | #define CERF_ETH_IO 0xf0000000 | ||
16 | #define CERF_ETH_IRQ IRQ_GPIO26 | ||
17 | |||
18 | #define CERF_GPIO_CF_BVD2 GPIO_GPIO (19) | ||
19 | #define CERF_GPIO_CF_BVD1 GPIO_GPIO (20) | ||
20 | #define CERF_GPIO_CF_RESET GPIO_GPIO (21) | ||
21 | #define CERF_GPIO_CF_IRQ GPIO_GPIO (22) | ||
22 | #define CERF_GPIO_CF_CD GPIO_GPIO (23) | ||
23 | |||
24 | #define CERF_IRQ_GPIO_CF_BVD2 IRQ_GPIO19 | ||
25 | #define CERF_IRQ_GPIO_CF_BVD1 IRQ_GPIO20 | ||
26 | #define CERF_IRQ_GPIO_CF_IRQ IRQ_GPIO22 | ||
27 | #define CERF_IRQ_GPIO_CF_CD IRQ_GPIO23 | ||
28 | |||
29 | #endif // _INCLUDE_CERF_H_ | ||
diff --git a/include/asm-arm/arch-sa1100/collie.h b/include/asm-arm/arch-sa1100/collie.h new file mode 100644 index 000000000000..d49e5ff63ca4 --- /dev/null +++ b/include/asm-arm/arch-sa1100/collie.h | |||
@@ -0,0 +1,85 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-sa1100/collie.h | ||
3 | * | ||
4 | * This file contains the hardware specific definitions for Assabet | ||
5 | * Only include this file from SA1100-specific files. | ||
6 | * | ||
7 | * ChangeLog: | ||
8 | * 04-06-2001 Lineo Japan, Inc. | ||
9 | * 04-16-2001 SHARP Corporation | ||
10 | * 07-07-2002 Chris Larson <clarson@digi.com> | ||
11 | * | ||
12 | */ | ||
13 | #ifndef __ASM_ARCH_COLLIE_H | ||
14 | #define __ASM_ARCH_COLLIE_H | ||
15 | |||
16 | #include <linux/config.h> | ||
17 | |||
18 | #define COLLIE_SCP_CHARGE_ON SCOOP_GPCR_PA11 | ||
19 | #define COLLIE_SCP_DIAG_BOOT1 SCOOP_GPCR_PA12 | ||
20 | #define COLLIE_SCP_DIAG_BOOT2 SCOOP_GPCR_PA13 | ||
21 | #define COLLIE_SCP_MUTE_L SCOOP_GPCR_PA14 | ||
22 | #define COLLIE_SCP_MUTE_R SCOOP_GPCR_PA15 | ||
23 | #define COLLIE_SCP_5VON SCOOP_GPCR_PA16 | ||
24 | #define COLLIE_SCP_AMP_ON SCOOP_GPCR_PA17 | ||
25 | #define COLLIE_SCP_VPEN SCOOP_GPCR_PA18 | ||
26 | #define COLLIE_SCP_LB_VOL_CHG SCOOP_GPCR_PA19 | ||
27 | |||
28 | #define COLLIE_SCOOP_IO_DIR ( COLLIE_SCP_CHARGE_ON | COLLIE_SCP_MUTE_L | COLLIE_SCP_MUTE_R | \ | ||
29 | COLLIE_SCP_5VON | COLLIE_SCP_AMP_ON | COLLIE_SCP_VPEN | \ | ||
30 | COLLIE_SCP_LB_VOL_CHG ) | ||
31 | #define COLLIE_SCOOP_IO_OUT ( COLLIE_SCP_MUTE_L | COLLIE_SCP_MUTE_R | COLLIE_SCP_VPEN | \ | ||
32 | COLLIE_SCP_CHARGE_ON ) | ||
33 | |||
34 | /* GPIOs for which the generic definition doesn't say much */ | ||
35 | |||
36 | #define COLLIE_GPIO_ON_KEY GPIO_GPIO (0) | ||
37 | #define COLLIE_GPIO_AC_IN GPIO_GPIO (1) | ||
38 | #define COLLIE_GPIO_CF_IRQ GPIO_GPIO (14) | ||
39 | #define COLLIE_GPIO_nREMOCON_INT GPIO_GPIO (15) | ||
40 | #define COLLIE_GPIO_UCB1x00_RESET GPIO_GPIO (16) | ||
41 | #define COLLIE_GPIO_CO GPIO_GPIO (20) | ||
42 | #define COLLIE_GPIO_MCP_CLK GPIO_GPIO (21) | ||
43 | #define COLLIE_GPIO_CF_CD GPIO_GPIO (22) | ||
44 | #define COLLIE_GPIO_UCB1x00_IRQ GPIO_GPIO (23) | ||
45 | #define COLLIE_GPIO_WAKEUP GPIO_GPIO (24) | ||
46 | #define COLLIE_GPIO_GA_INT GPIO_GPIO (25) | ||
47 | #define COLLIE_GPIO_MAIN_BAT_LOW GPIO_GPIO (26) | ||
48 | |||
49 | /* Interrupts */ | ||
50 | |||
51 | #define COLLIE_IRQ_GPIO_ON_KEY IRQ_GPIO0 | ||
52 | #define COLLIE_IRQ_GPIO_AC_IN IRQ_GPIO1 | ||
53 | #define COLLIE_IRQ_GPIO_CF_IRQ IRQ_GPIO14 | ||
54 | #define COLLIE_IRQ_GPIO_nREMOCON_INT IRQ_GPIO15 | ||
55 | #define COLLIE_IRQ_GPIO_CO IRQ_GPIO20 | ||
56 | #define COLLIE_IRQ_GPIO_CF_CD IRQ_GPIO22 | ||
57 | #define COLLIE_IRQ_GPIO_UCB1x00_IRQ IRQ_GPIO23 | ||
58 | #define COLLIE_IRQ_GPIO_WAKEUP IRQ_GPIO24 | ||
59 | #define COLLIE_IRQ_GPIO_GA_INT IRQ_GPIO25 | ||
60 | #define COLLIE_IRQ_GPIO_MAIN_BAT_LOW IRQ_GPIO26 | ||
61 | |||
62 | #define COLLIE_LCM_IRQ_GPIO_RTS IRQ_LOCOMO_GPIO0 | ||
63 | #define COLLIE_LCM_IRQ_GPIO_CTS IRQ_LOCOMO_GPIO1 | ||
64 | #define COLLIE_LCM_IRQ_GPIO_DSR IRQ_LOCOMO_GPIO2 | ||
65 | #define COLLIE_LCM_IRQ_GPIO_DTR IRQ_LOCOMO_GPIO3 | ||
66 | #define COLLIE_LCM_IRQ_GPIO_nSD_DETECT IRQ_LOCOMO_GPIO13 | ||
67 | #define COLLIE_LCM_IRQ_GPIO_nSD_WP IRQ_LOCOMO_GPIO14 | ||
68 | |||
69 | /* GPIO's on the TC35143AF (Toshiba Analog Frontend) */ | ||
70 | #define COLLIE_TC35143_GPIO_VERSION0 UCB_IO_0 /* GPIO0=Version */ | ||
71 | #define COLLIE_TC35143_GPIO_TBL_CHK UCB_IO_1 /* GPIO1=TBL_CHK */ | ||
72 | #define COLLIE_TC35143_GPIO_VPEN_ON UCB_IO_2 /* GPIO2=VPNE_ON */ | ||
73 | #define COLLIE_TC35143_GPIO_IR_ON UCB_IO_3 /* GPIO3=IR_ON */ | ||
74 | #define COLLIE_TC35143_GPIO_AMP_ON UCB_IO_4 /* GPIO4=AMP_ON */ | ||
75 | #define COLLIE_TC35143_GPIO_VERSION1 UCB_IO_5 /* GPIO5=Version */ | ||
76 | #define COLLIE_TC35143_GPIO_FS8KLPF UCB_IO_5 /* GPIO5=fs 8k LPF */ | ||
77 | #define COLLIE_TC35143_GPIO_BUZZER_BIAS UCB_IO_6 /* GPIO6=BUZZER BIAS */ | ||
78 | #define COLLIE_TC35143_GPIO_MBAT_ON UCB_IO_7 /* GPIO7=MBAT_ON */ | ||
79 | #define COLLIE_TC35143_GPIO_BBAT_ON UCB_IO_8 /* GPIO8=BBAT_ON */ | ||
80 | #define COLLIE_TC35143_GPIO_TMP_ON UCB_IO_9 /* GPIO9=TMP_ON */ | ||
81 | #define COLLIE_TC35143_GPIO_IN ( UCB_IO_0 | UCB_IO_2 | UCB_IO_5 ) | ||
82 | #define COLLIE_TC35143_GPIO_OUT ( UCB_IO_1 | UCB_IO_3 | UCB_IO_4 | UCB_IO_6 | \ | ||
83 | UCB_IO_7 | UCB_IO_8 | UCB_IO_9 ) | ||
84 | |||
85 | #endif | ||
diff --git a/include/asm-arm/arch-sa1100/debug-macro.S b/include/asm-arm/arch-sa1100/debug-macro.S new file mode 100644 index 000000000000..755fa3453862 --- /dev/null +++ b/include/asm-arm/arch-sa1100/debug-macro.S | |||
@@ -0,0 +1,57 @@ | |||
1 | /* linux/include/asm-arm/arch-sa1100/debug-macro.S | ||
2 | * | ||
3 | * Debugging macro include header | ||
4 | * | ||
5 | * Copyright (C) 1994-1999 Russell King | ||
6 | * Moved from linux/arch/arm/kernel/debug.S by Ben Dooks | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | * | ||
12 | */ | ||
13 | |||
14 | .macro addruart,rx | ||
15 | mrc p15, 0, \rx, c1, c0 | ||
16 | tst \rx, #1 @ MMU enabled? | ||
17 | moveq \rx, #0x80000000 @ physical base address | ||
18 | movne \rx, #0xf8000000 @ virtual address | ||
19 | |||
20 | @ We probe for the active serial port here, coherently with | ||
21 | @ the comment in include/asm-arm/arch-sa1100/uncompress.h. | ||
22 | @ We assume r1 can be clobbered. | ||
23 | |||
24 | @ see if Ser3 is active | ||
25 | add \rx, \rx, #0x00050000 | ||
26 | ldr r1, [\rx, #UTCR3] | ||
27 | tst r1, #UTCR3_TXE | ||
28 | |||
29 | @ if Ser3 is inactive, then try Ser1 | ||
30 | addeq \rx, \rx, #(0x00010000 - 0x00050000) | ||
31 | ldreq r1, [\rx, #UTCR3] | ||
32 | tsteq r1, #UTCR3_TXE | ||
33 | |||
34 | @ if Ser1 is inactive, then try Ser2 | ||
35 | addeq \rx, \rx, #(0x00030000 - 0x00010000) | ||
36 | ldreq r1, [\rx, #UTCR3] | ||
37 | tsteq r1, #UTCR3_TXE | ||
38 | |||
39 | @ if all ports are inactive, then there is nothing we can do | ||
40 | moveq pc, lr | ||
41 | .endm | ||
42 | |||
43 | .macro senduart,rd,rx | ||
44 | str \rd, [\rx, #UTDR] | ||
45 | .endm | ||
46 | |||
47 | .macro waituart,rd,rx | ||
48 | 1001: ldr \rd, [\rx, #UTSR1] | ||
49 | tst \rd, #UTSR1_TNF | ||
50 | beq 1001b | ||
51 | .endm | ||
52 | |||
53 | .macro busyuart,rd,rx | ||
54 | 1001: ldr \rd, [\rx, #UTSR1] | ||
55 | tst \rd, #UTSR1_TBY | ||
56 | bne 1001b | ||
57 | .endm | ||
diff --git a/include/asm-arm/arch-sa1100/dma.h b/include/asm-arm/arch-sa1100/dma.h new file mode 100644 index 000000000000..3d60ed9f8c34 --- /dev/null +++ b/include/asm-arm/arch-sa1100/dma.h | |||
@@ -0,0 +1,132 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-sa1100/dma.h | ||
3 | * | ||
4 | * Generic SA1100 DMA support | ||
5 | * | ||
6 | * Copyright (C) 2000 Nicolas Pitre | ||
7 | * | ||
8 | */ | ||
9 | |||
10 | #ifndef __ASM_ARCH_DMA_H | ||
11 | #define __ASM_ARCH_DMA_H | ||
12 | |||
13 | #include <linux/config.h> | ||
14 | #include "hardware.h" | ||
15 | |||
16 | |||
17 | /* | ||
18 | * This is the maximum DMA address that can be DMAd to. | ||
19 | */ | ||
20 | #define MAX_DMA_ADDRESS 0xffffffff | ||
21 | |||
22 | |||
23 | /* | ||
24 | * The regular generic DMA interface is inappropriate for the | ||
25 | * SA1100 DMA model. None of the SA1100 specific drivers using | ||
26 | * DMA are portable anyway so it's pointless to try to twist the | ||
27 | * regular DMA API to accommodate them. | ||
28 | */ | ||
29 | #define MAX_DMA_CHANNELS 0 | ||
30 | |||
31 | /* | ||
32 | * The SA1100 has six internal DMA channels. | ||
33 | */ | ||
34 | #define SA1100_DMA_CHANNELS 6 | ||
35 | |||
36 | /* | ||
37 | * Maximum physical DMA buffer size | ||
38 | */ | ||
39 | #define MAX_DMA_SIZE 0x1fff | ||
40 | #define CUT_DMA_SIZE 0x1000 | ||
41 | |||
42 | /* | ||
43 | * All possible SA1100 devices a DMA channel can be attached to. | ||
44 | */ | ||
45 | typedef enum { | ||
46 | DMA_Ser0UDCWr = DDAR_Ser0UDCWr, /* Ser. port 0 UDC Write */ | ||
47 | DMA_Ser0UDCRd = DDAR_Ser0UDCRd, /* Ser. port 0 UDC Read */ | ||
48 | DMA_Ser1UARTWr = DDAR_Ser1UARTWr, /* Ser. port 1 UART Write */ | ||
49 | DMA_Ser1UARTRd = DDAR_Ser1UARTRd, /* Ser. port 1 UART Read */ | ||
50 | DMA_Ser1SDLCWr = DDAR_Ser1SDLCWr, /* Ser. port 1 SDLC Write */ | ||
51 | DMA_Ser1SDLCRd = DDAR_Ser1SDLCRd, /* Ser. port 1 SDLC Read */ | ||
52 | DMA_Ser2UARTWr = DDAR_Ser2UARTWr, /* Ser. port 2 UART Write */ | ||
53 | DMA_Ser2UARTRd = DDAR_Ser2UARTRd, /* Ser. port 2 UART Read */ | ||
54 | DMA_Ser2HSSPWr = DDAR_Ser2HSSPWr, /* Ser. port 2 HSSP Write */ | ||
55 | DMA_Ser2HSSPRd = DDAR_Ser2HSSPRd, /* Ser. port 2 HSSP Read */ | ||
56 | DMA_Ser3UARTWr = DDAR_Ser3UARTWr, /* Ser. port 3 UART Write */ | ||
57 | DMA_Ser3UARTRd = DDAR_Ser3UARTRd, /* Ser. port 3 UART Read */ | ||
58 | DMA_Ser4MCP0Wr = DDAR_Ser4MCP0Wr, /* Ser. port 4 MCP 0 Write (audio) */ | ||
59 | DMA_Ser4MCP0Rd = DDAR_Ser4MCP0Rd, /* Ser. port 4 MCP 0 Read (audio) */ | ||
60 | DMA_Ser4MCP1Wr = DDAR_Ser4MCP1Wr, /* Ser. port 4 MCP 1 Write */ | ||
61 | DMA_Ser4MCP1Rd = DDAR_Ser4MCP1Rd, /* Ser. port 4 MCP 1 Read */ | ||
62 | DMA_Ser4SSPWr = DDAR_Ser4SSPWr, /* Ser. port 4 SSP Write (16 bits) */ | ||
63 | DMA_Ser4SSPRd = DDAR_Ser4SSPRd /* Ser. port 4 SSP Read (16 bits) */ | ||
64 | } dma_device_t; | ||
65 | |||
66 | typedef struct { | ||
67 | volatile u_long DDAR; | ||
68 | volatile u_long SetDCSR; | ||
69 | volatile u_long ClrDCSR; | ||
70 | volatile u_long RdDCSR; | ||
71 | volatile dma_addr_t DBSA; | ||
72 | volatile u_long DBTA; | ||
73 | volatile dma_addr_t DBSB; | ||
74 | volatile u_long DBTB; | ||
75 | } dma_regs_t; | ||
76 | |||
77 | typedef void (*dma_callback_t)(void *data); | ||
78 | |||
79 | /* | ||
80 | * DMA function prototypes | ||
81 | */ | ||
82 | |||
83 | extern int sa1100_request_dma( dma_device_t device, const char *device_id, | ||
84 | dma_callback_t callback, void *data, | ||
85 | dma_regs_t **regs ); | ||
86 | extern void sa1100_free_dma( dma_regs_t *regs ); | ||
87 | extern int sa1100_start_dma( dma_regs_t *regs, dma_addr_t dma_ptr, u_int size ); | ||
88 | extern dma_addr_t sa1100_get_dma_pos(dma_regs_t *regs); | ||
89 | extern void sa1100_reset_dma(dma_regs_t *regs); | ||
90 | |||
91 | /** | ||
92 | * sa1100_stop_dma - stop DMA in progress | ||
93 | * @regs: identifier for the channel to use | ||
94 | * | ||
95 | * This stops DMA without clearing buffer pointers. Unlike | ||
96 | * sa1100_clear_dma() this allows subsequent use of sa1100_resume_dma() | ||
97 | * or sa1100_get_dma_pos(). | ||
98 | * | ||
99 | * The @regs identifier is provided by a successful call to | ||
100 | * sa1100_request_dma(). | ||
101 | **/ | ||
102 | |||
103 | #define sa1100_stop_dma(regs) ((regs)->ClrDCSR = DCSR_IE|DCSR_RUN) | ||
104 | |||
105 | /** | ||
106 | * sa1100_resume_dma - resume DMA on a stopped channel | ||
107 | * @regs: identifier for the channel to use | ||
108 | * | ||
109 | * This resumes DMA on a channel previously stopped with | ||
110 | * sa1100_stop_dma(). | ||
111 | * | ||
112 | * The @regs identifier is provided by a successful call to | ||
113 | * sa1100_request_dma(). | ||
114 | **/ | ||
115 | |||
116 | #define sa1100_resume_dma(regs) ((regs)->SetDCSR = DCSR_IE|DCSR_RUN) | ||
117 | |||
118 | /** | ||
119 | * sa1100_clear_dma - clear DMA pointers | ||
120 | * @regs: identifier for the channel to use | ||
121 | * | ||
122 | * This clear any DMA state so the DMA engine is ready to restart | ||
123 | * with new buffers through sa1100_start_dma(). Any buffers in flight | ||
124 | * are discarded. | ||
125 | * | ||
126 | * The @regs identifier is provided by a successful call to | ||
127 | * sa1100_request_dma(). | ||
128 | **/ | ||
129 | |||
130 | #define sa1100_clear_dma(regs) ((regs)->ClrDCSR = DCSR_IE|DCSR_RUN|DCSR_STRTA|DCSR_STRTB) | ||
131 | |||
132 | #endif /* _ASM_ARCH_DMA_H */ | ||
diff --git a/include/asm-arm/arch-sa1100/entry-macro.S b/include/asm-arm/arch-sa1100/entry-macro.S new file mode 100644 index 000000000000..51fb50ce1169 --- /dev/null +++ b/include/asm-arm/arch-sa1100/entry-macro.S | |||
@@ -0,0 +1,41 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-sa1100/entry-macro.S | ||
3 | * | ||
4 | * Low-level IRQ helper macros for SA1100-based platforms | ||
5 | * | ||
6 | * This file is licensed under the terms of the GNU General Public | ||
7 | * License version 2. This program is licensed "as is" without any | ||
8 | * warranty of any kind, whether express or implied. | ||
9 | */ | ||
10 | |||
11 | .macro disable_fiq | ||
12 | .endm | ||
13 | |||
14 | .macro get_irqnr_and_base, irqnr, irqstat, base, tmp | ||
15 | mov r4, #0xfa000000 @ ICIP = 0xfa050000 | ||
16 | add r4, r4, #0x00050000 | ||
17 | ldr \irqstat, [r4] @ get irqs | ||
18 | ldr \irqnr, [r4, #4] @ ICMR = 0xfa050004 | ||
19 | ands \irqstat, \irqstat, \irqnr | ||
20 | mov \irqnr, #0 | ||
21 | beq 1001f | ||
22 | tst \irqstat, #0xff | ||
23 | moveq \irqstat, \irqstat, lsr #8 | ||
24 | addeq \irqnr, \irqnr, #8 | ||
25 | tsteq \irqstat, #0xff | ||
26 | moveq \irqstat, \irqstat, lsr #8 | ||
27 | addeq \irqnr, \irqnr, #8 | ||
28 | tsteq \irqstat, #0xff | ||
29 | moveq \irqstat, \irqstat, lsr #8 | ||
30 | addeq \irqnr, \irqnr, #8 | ||
31 | tst \irqstat, #0x0f | ||
32 | moveq \irqstat, \irqstat, lsr #4 | ||
33 | addeq \irqnr, \irqnr, #4 | ||
34 | tst \irqstat, #0x03 | ||
35 | moveq \irqstat, \irqstat, lsr #2 | ||
36 | addeq \irqnr, \irqnr, #2 | ||
37 | tst \irqstat, #0x01 | ||
38 | addeqs \irqnr, \irqnr, #1 | ||
39 | 1001: | ||
40 | .endm | ||
41 | |||
diff --git a/include/asm-arm/arch-sa1100/h3600.h b/include/asm-arm/arch-sa1100/h3600.h new file mode 100644 index 000000000000..1b6355971574 --- /dev/null +++ b/include/asm-arm/arch-sa1100/h3600.h | |||
@@ -0,0 +1,164 @@ | |||
1 | /* | ||
2 | * | ||
3 | * Definitions for H3600 Handheld Computer | ||
4 | * | ||
5 | * Copyright 2000 Compaq Computer Corporation. | ||
6 | * | ||
7 | * Use consistent with the GNU GPL is permitted, | ||
8 | * provided that this copyright notice is | ||
9 | * preserved in its entirety in all copies and derived works. | ||
10 | * | ||
11 | * COMPAQ COMPUTER CORPORATION MAKES NO WARRANTIES, EXPRESSED OR IMPLIED, | ||
12 | * AS TO THE USEFULNESS OR CORRECTNESS OF THIS CODE OR ITS | ||
13 | * FITNESS FOR ANY PARTICULAR PURPOSE. | ||
14 | * | ||
15 | * Author: Jamey Hicks. | ||
16 | * | ||
17 | * History: | ||
18 | * | ||
19 | * 2001-10-?? Andrew Christian Added support for iPAQ H3800 | ||
20 | * | ||
21 | */ | ||
22 | |||
23 | #ifndef _INCLUDE_H3600_H_ | ||
24 | #define _INCLUDE_H3600_H_ | ||
25 | |||
26 | /* generalized support for H3xxx series Compaq Pocket PC's */ | ||
27 | #define machine_is_h3xxx() (machine_is_h3100() || machine_is_h3600() || machine_is_h3800()) | ||
28 | |||
29 | /* Physical memory regions corresponding to chip selects */ | ||
30 | #define H3600_EGPIO_PHYS (SA1100_CS5_PHYS + 0x01000000) | ||
31 | #define H3600_BANK_2_PHYS SA1100_CS2_PHYS | ||
32 | #define H3600_BANK_4_PHYS SA1100_CS4_PHYS | ||
33 | |||
34 | /* Virtual memory regions corresponding to chip selects 2 & 4 (used on sleeves) */ | ||
35 | #define H3600_EGPIO_VIRT 0xf0000000 | ||
36 | #define H3600_BANK_2_VIRT 0xf1000000 | ||
37 | #define H3600_BANK_4_VIRT 0xf3800000 | ||
38 | |||
39 | /* | ||
40 | Machine-independent GPIO definitions | ||
41 | --- these are common across all current iPAQ platforms | ||
42 | */ | ||
43 | |||
44 | #define GPIO_H3600_NPOWER_BUTTON GPIO_GPIO (0) /* Also known as the "off button" */ | ||
45 | |||
46 | #define GPIO_H3600_PCMCIA_CD1 GPIO_GPIO (10) | ||
47 | #define GPIO_H3600_PCMCIA_IRQ1 GPIO_GPIO (11) | ||
48 | |||
49 | /* UDA1341 L3 Interface */ | ||
50 | #define GPIO_H3600_L3_DATA GPIO_GPIO (14) | ||
51 | #define GPIO_H3600_L3_MODE GPIO_GPIO (15) | ||
52 | #define GPIO_H3600_L3_CLOCK GPIO_GPIO (16) | ||
53 | |||
54 | #define GPIO_H3600_PCMCIA_CD0 GPIO_GPIO (17) | ||
55 | #define GPIO_H3600_SYS_CLK GPIO_GPIO (19) | ||
56 | #define GPIO_H3600_PCMCIA_IRQ0 GPIO_GPIO (21) | ||
57 | |||
58 | #define GPIO_H3600_COM_DCD GPIO_GPIO (23) | ||
59 | #define GPIO_H3600_OPT_IRQ GPIO_GPIO (24) | ||
60 | #define GPIO_H3600_COM_CTS GPIO_GPIO (25) | ||
61 | #define GPIO_H3600_COM_RTS GPIO_GPIO (26) | ||
62 | |||
63 | #define IRQ_GPIO_H3600_NPOWER_BUTTON IRQ_GPIO0 | ||
64 | #define IRQ_GPIO_H3600_PCMCIA_CD1 IRQ_GPIO10 | ||
65 | #define IRQ_GPIO_H3600_PCMCIA_IRQ1 IRQ_GPIO11 | ||
66 | #define IRQ_GPIO_H3600_PCMCIA_CD0 IRQ_GPIO17 | ||
67 | #define IRQ_GPIO_H3600_PCMCIA_IRQ0 IRQ_GPIO21 | ||
68 | #define IRQ_GPIO_H3600_COM_DCD IRQ_GPIO23 | ||
69 | #define IRQ_GPIO_H3600_OPT_IRQ IRQ_GPIO24 | ||
70 | #define IRQ_GPIO_H3600_COM_CTS IRQ_GPIO25 | ||
71 | |||
72 | |||
73 | #ifndef __ASSEMBLY__ | ||
74 | |||
75 | enum ipaq_egpio_type { | ||
76 | IPAQ_EGPIO_LCD_POWER, /* Power to the LCD panel */ | ||
77 | IPAQ_EGPIO_CODEC_NRESET, /* Clear to reset the audio codec (remember to return high) */ | ||
78 | IPAQ_EGPIO_AUDIO_ON, /* Audio power */ | ||
79 | IPAQ_EGPIO_QMUTE, /* Audio muting */ | ||
80 | IPAQ_EGPIO_OPT_NVRAM_ON, /* Non-volatile RAM on extension sleeves (SPI interface) */ | ||
81 | IPAQ_EGPIO_OPT_ON, /* Power to extension sleeves */ | ||
82 | IPAQ_EGPIO_CARD_RESET, /* Reset PCMCIA cards on extension sleeve (???) */ | ||
83 | IPAQ_EGPIO_OPT_RESET, /* Reset option pack (???) */ | ||
84 | IPAQ_EGPIO_IR_ON, /* IR sensor/emitter power */ | ||
85 | IPAQ_EGPIO_IR_FSEL, /* IR speed selection 1->fast, 0->slow */ | ||
86 | IPAQ_EGPIO_RS232_ON, /* Maxim RS232 chip power */ | ||
87 | IPAQ_EGPIO_VPP_ON, /* Turn on power to flash programming */ | ||
88 | IPAQ_EGPIO_LCD_ENABLE, /* Enable/disable LCD controller */ | ||
89 | }; | ||
90 | |||
91 | struct ipaq_model_ops { | ||
92 | const char *generic_name; | ||
93 | void (*control)(enum ipaq_egpio_type, int); | ||
94 | unsigned long (*read)(void); | ||
95 | void (*blank_callback)(int blank); | ||
96 | int (*pm_callback)(int req); /* Primary model callback */ | ||
97 | int (*pm_callback_aux)(int req); /* Secondary callback (used by HAL modules) */ | ||
98 | }; | ||
99 | |||
100 | extern struct ipaq_model_ops ipaq_model_ops; | ||
101 | |||
102 | static __inline__ const char * h3600_generic_name(void) | ||
103 | { | ||
104 | return ipaq_model_ops.generic_name; | ||
105 | } | ||
106 | |||
107 | static __inline__ void assign_h3600_egpio(enum ipaq_egpio_type x, int level) | ||
108 | { | ||
109 | if (ipaq_model_ops.control) | ||
110 | ipaq_model_ops.control(x,level); | ||
111 | } | ||
112 | |||
113 | static __inline__ void clr_h3600_egpio(enum ipaq_egpio_type x) | ||
114 | { | ||
115 | if (ipaq_model_ops.control) | ||
116 | ipaq_model_ops.control(x,0); | ||
117 | } | ||
118 | |||
119 | static __inline__ void set_h3600_egpio(enum ipaq_egpio_type x) | ||
120 | { | ||
121 | if (ipaq_model_ops.control) | ||
122 | ipaq_model_ops.control(x,1); | ||
123 | } | ||
124 | |||
125 | static __inline__ unsigned long read_h3600_egpio(void) | ||
126 | { | ||
127 | if (ipaq_model_ops.read) | ||
128 | return ipaq_model_ops.read(); | ||
129 | return 0; | ||
130 | } | ||
131 | |||
132 | static __inline__ int h3600_register_blank_callback(void (*f)(int)) | ||
133 | { | ||
134 | ipaq_model_ops.blank_callback = f; | ||
135 | return 0; | ||
136 | } | ||
137 | |||
138 | static __inline__ void h3600_unregister_blank_callback(void (*f)(int)) | ||
139 | { | ||
140 | ipaq_model_ops.blank_callback = NULL; | ||
141 | } | ||
142 | |||
143 | |||
144 | static __inline__ int h3600_register_pm_callback(int (*f)(int)) | ||
145 | { | ||
146 | ipaq_model_ops.pm_callback_aux = f; | ||
147 | return 0; | ||
148 | } | ||
149 | |||
150 | static __inline__ void h3600_unregister_pm_callback(int (*f)(int)) | ||
151 | { | ||
152 | ipaq_model_ops.pm_callback_aux = NULL; | ||
153 | } | ||
154 | |||
155 | static __inline__ int h3600_power_management(int req) | ||
156 | { | ||
157 | if (ipaq_model_ops.pm_callback) | ||
158 | return ipaq_model_ops.pm_callback(req); | ||
159 | return 0; | ||
160 | } | ||
161 | |||
162 | #endif /* ASSEMBLY */ | ||
163 | |||
164 | #endif /* _INCLUDE_H3600_H_ */ | ||
diff --git a/include/asm-arm/arch-sa1100/h3600_gpio.h b/include/asm-arm/arch-sa1100/h3600_gpio.h new file mode 100644 index 000000000000..62b0b7879685 --- /dev/null +++ b/include/asm-arm/arch-sa1100/h3600_gpio.h | |||
@@ -0,0 +1,540 @@ | |||
1 | /* | ||
2 | * | ||
3 | * Definitions for H3600 Handheld Computer | ||
4 | * | ||
5 | * Copyright 2000 Compaq Computer Corporation. | ||
6 | * | ||
7 | * Use consistent with the GNU GPL is permitted, | ||
8 | * provided that this copyright notice is | ||
9 | * preserved in its entirety in all copies and derived works. | ||
10 | * | ||
11 | * COMPAQ COMPUTER CORPORATION MAKES NO WARRANTIES, EXPRESSED OR IMPLIED, | ||
12 | * AS TO THE USEFULNESS OR CORRECTNESS OF THIS CODE OR ITS | ||
13 | * FITNESS FOR ANY PARTICULAR PURPOSE. | ||
14 | * | ||
15 | * Author: Jamey Hicks. | ||
16 | * | ||
17 | * History: | ||
18 | * | ||
19 | * 2001-10-?? Andrew Christian Added support for iPAQ H3800 | ||
20 | * | ||
21 | */ | ||
22 | |||
23 | #ifndef _INCLUDE_H3600_GPIO_H_ | ||
24 | #define _INCLUDE_H3600_GPIO_H_ | ||
25 | |||
26 | /* | ||
27 | * GPIO lines that are common across ALL iPAQ models are in "h3600.h" | ||
28 | * This file contains machine-specific definitions | ||
29 | */ | ||
30 | |||
31 | #define GPIO_H3600_SUSPEND GPIO_GPIO (0) | ||
32 | /* GPIO[2:9] used by LCD on H3600/3800, used as GPIO on H3100 */ | ||
33 | #define GPIO_H3100_BT_ON GPIO_GPIO (2) | ||
34 | #define GPIO_H3100_GPIO3 GPIO_GPIO (3) | ||
35 | #define GPIO_H3100_QMUTE GPIO_GPIO (4) | ||
36 | #define GPIO_H3100_LCD_3V_ON GPIO_GPIO (5) | ||
37 | #define GPIO_H3100_AUD_ON GPIO_GPIO (6) | ||
38 | #define GPIO_H3100_AUD_PWR_ON GPIO_GPIO (7) | ||
39 | #define GPIO_H3100_IR_ON GPIO_GPIO (8) | ||
40 | #define GPIO_H3100_IR_FSEL GPIO_GPIO (9) | ||
41 | |||
42 | /* for H3600, audio sample rate clock generator */ | ||
43 | #define GPIO_H3600_CLK_SET0 GPIO_GPIO (12) | ||
44 | #define GPIO_H3600_CLK_SET1 GPIO_GPIO (13) | ||
45 | |||
46 | #define GPIO_H3600_ACTION_BUTTON GPIO_GPIO (18) | ||
47 | #define GPIO_H3600_SOFT_RESET GPIO_GPIO (20) /* Also known as BATT_FAULT */ | ||
48 | #define GPIO_H3600_OPT_LOCK GPIO_GPIO (22) | ||
49 | #define GPIO_H3600_OPT_DET GPIO_GPIO (27) | ||
50 | |||
51 | /* H3800 specific pins */ | ||
52 | #define GPIO_H3800_AC_IN GPIO_GPIO (12) | ||
53 | #define GPIO_H3800_COM_DSR GPIO_GPIO (13) | ||
54 | #define GPIO_H3800_MMC_INT GPIO_GPIO (18) | ||
55 | #define GPIO_H3800_NOPT_IND GPIO_GPIO (20) /* Almost exactly the same as GPIO_H3600_OPT_DET */ | ||
56 | #define GPIO_H3800_OPT_BAT_FAULT GPIO_GPIO (22) | ||
57 | #define GPIO_H3800_CLK_OUT GPIO_GPIO (27) | ||
58 | |||
59 | /****************************************************/ | ||
60 | |||
61 | #define IRQ_GPIO_H3600_ACTION_BUTTON IRQ_GPIO18 | ||
62 | #define IRQ_GPIO_H3600_OPT_DET IRQ_GPIO27 | ||
63 | |||
64 | #define IRQ_GPIO_H3800_MMC_INT IRQ_GPIO18 | ||
65 | #define IRQ_GPIO_H3800_NOPT_IND IRQ_GPIO20 /* almost same as OPT_DET */ | ||
66 | |||
67 | /* H3100 / 3600 EGPIO pins */ | ||
68 | #define EGPIO_H3600_VPP_ON (1 << 0) | ||
69 | #define EGPIO_H3600_CARD_RESET (1 << 1) /* reset the attached pcmcia/compactflash card. active high. */ | ||
70 | #define EGPIO_H3600_OPT_RESET (1 << 2) /* reset the attached option pack. active high. */ | ||
71 | #define EGPIO_H3600_CODEC_NRESET (1 << 3) /* reset the onboard UDA1341. active low. */ | ||
72 | #define EGPIO_H3600_OPT_NVRAM_ON (1 << 4) /* apply power to optionpack nvram, active high. */ | ||
73 | #define EGPIO_H3600_OPT_ON (1 << 5) /* full power to option pack. active high. */ | ||
74 | #define EGPIO_H3600_LCD_ON (1 << 6) /* enable 3.3V to LCD. active high. */ | ||
75 | #define EGPIO_H3600_RS232_ON (1 << 7) /* UART3 transceiver force on. Active high. */ | ||
76 | |||
77 | /* H3600 only EGPIO pins */ | ||
78 | #define EGPIO_H3600_LCD_PCI (1 << 8) /* LCD control IC enable. active high. */ | ||
79 | #define EGPIO_H3600_IR_ON (1 << 9) /* apply power to IR module. active high. */ | ||
80 | #define EGPIO_H3600_AUD_AMP_ON (1 << 10) /* apply power to audio power amp. active high. */ | ||
81 | #define EGPIO_H3600_AUD_PWR_ON (1 << 11) /* apply power to reset of audio circuit. active high. */ | ||
82 | #define EGPIO_H3600_QMUTE (1 << 12) /* mute control for onboard UDA1341. active high. */ | ||
83 | #define EGPIO_H3600_IR_FSEL (1 << 13) /* IR speed select: 1->fast, 0->slow */ | ||
84 | #define EGPIO_H3600_LCD_5V_ON (1 << 14) /* enable 5V to LCD. active high. */ | ||
85 | #define EGPIO_H3600_LVDD_ON (1 << 15) /* enable 9V and -6.5V to LCD. */ | ||
86 | |||
87 | /********************* H3800, ASIC #2 ********************/ | ||
88 | |||
89 | #define _H3800_ASIC2_Base (H3600_EGPIO_VIRT) | ||
90 | #define H3800_ASIC2_OFFSET(s,x,y) \ | ||
91 | (*((volatile s *) (_H3800_ASIC2_Base + _H3800_ASIC2_ ## x ## _Base + _H3800_ASIC2_ ## x ## _ ## y))) | ||
92 | #define H3800_ASIC2_NOFFSET(s,x,n,y) \ | ||
93 | (*((volatile s *) (_H3800_ASIC2_Base + _H3800_ASIC2_ ## x ## _ ## n ## _Base + _H3800_ASIC2_ ## x ## _ ## y))) | ||
94 | |||
95 | #define _H3800_ASIC2_GPIO_Base 0x0000 | ||
96 | #define _H3800_ASIC2_GPIO_Direction 0x0000 /* R/W, 16 bits 1:input, 0:output */ | ||
97 | #define _H3800_ASIC2_GPIO_InterruptType 0x0004 /* R/W, 12 bits 1:edge, 0:level */ | ||
98 | #define _H3800_ASIC2_GPIO_InterruptEdgeType 0x0008 /* R/W, 12 bits 1:rising, 0:falling */ | ||
99 | #define _H3800_ASIC2_GPIO_InterruptLevelType 0x000C /* R/W, 12 bits 1:high, 0:low */ | ||
100 | #define _H3800_ASIC2_GPIO_InterruptClear 0x0010 /* W, 12 bits */ | ||
101 | #define _H3800_ASIC2_GPIO_InterruptFlag 0x0010 /* R, 12 bits - reads int status */ | ||
102 | #define _H3800_ASIC2_GPIO_Data 0x0014 /* R/W, 16 bits */ | ||
103 | #define _H3800_ASIC2_GPIO_BattFaultOut 0x0018 /* R/W, 16 bit - sets level on batt fault */ | ||
104 | #define _H3800_ASIC2_GPIO_InterruptEnable 0x001c /* R/W, 12 bits 1:enable interrupt */ | ||
105 | #define _H3800_ASIC2_GPIO_Alternate 0x003c /* R/W, 12+1 bits - set alternate functions */ | ||
106 | |||
107 | #define H3800_ASIC2_GPIO_Direction H3800_ASIC2_OFFSET( u16, GPIO, Direction ) | ||
108 | #define H3800_ASIC2_GPIO_InterruptType H3800_ASIC2_OFFSET( u16, GPIO, InterruptType ) | ||
109 | #define H3800_ASIC2_GPIO_InterruptEdgeType H3800_ASIC2_OFFSET( u16, GPIO, InterruptEdgeType ) | ||
110 | #define H3800_ASIC2_GPIO_InterruptLevelType H3800_ASIC2_OFFSET( u16, GPIO, InterruptLevelType ) | ||
111 | #define H3800_ASIC2_GPIO_InterruptClear H3800_ASIC2_OFFSET( u16, GPIO, InterruptClear ) | ||
112 | #define H3800_ASIC2_GPIO_InterruptFlag H3800_ASIC2_OFFSET( u16, GPIO, InterruptFlag ) | ||
113 | #define H3800_ASIC2_GPIO_Data H3800_ASIC2_OFFSET( u16, GPIO, Data ) | ||
114 | #define H3800_ASIC2_GPIO_BattFaultOut H3800_ASIC2_OFFSET( u16, GPIO, BattFaultOut ) | ||
115 | #define H3800_ASIC2_GPIO_InterruptEnable H3800_ASIC2_OFFSET( u16, GPIO, InterruptEnable ) | ||
116 | #define H3800_ASIC2_GPIO_Alternate H3800_ASIC2_OFFSET( u16, GPIO, Alternate ) | ||
117 | |||
118 | #define GPIO_H3800_ASIC2_IN_Y1_N (1 << 0) /* Output: Touchscreen Y1 */ | ||
119 | #define GPIO_H3800_ASIC2_IN_X0 (1 << 1) /* Output: Touchscreen X0 */ | ||
120 | #define GPIO_H3800_ASIC2_IN_Y0 (1 << 2) /* Output: Touchscreen Y0 */ | ||
121 | #define GPIO_H3800_ASIC2_IN_X1_N (1 << 3) /* Output: Touchscreen X1 */ | ||
122 | #define GPIO_H3800_ASIC2_BT_RST (1 << 4) /* Output: Bluetooth reset */ | ||
123 | #define GPIO_H3800_ASIC2_PEN_IRQ (1 << 5) /* Input : Pen down */ | ||
124 | #define GPIO_H3800_ASIC2_SD_DETECT (1 << 6) /* Input : SD detect */ | ||
125 | #define GPIO_H3800_ASIC2_EAR_IN_N (1 << 7) /* Input : Audio jack plug inserted */ | ||
126 | #define GPIO_H3800_ASIC2_OPT_PCM_RESET (1 << 8) /* Output: */ | ||
127 | #define GPIO_H3800_ASIC2_OPT_RESET (1 << 9) /* Output: */ | ||
128 | #define GPIO_H3800_ASIC2_USB_DETECT_N (1 << 10) /* Input : */ | ||
129 | #define GPIO_H3800_ASIC2_SD_CON_SLT (1 << 11) /* Input : */ | ||
130 | |||
131 | #define _H3800_ASIC2_KPIO_Base 0x0200 | ||
132 | #define _H3800_ASIC2_KPIO_Direction 0x0000 /* R/W, 12 bits 1:input, 0:output */ | ||
133 | #define _H3800_ASIC2_KPIO_InterruptType 0x0004 /* R/W, 12 bits 1:edge, 0:level */ | ||
134 | #define _H3800_ASIC2_KPIO_InterruptEdgeType 0x0008 /* R/W, 12 bits 1:rising, 0:falling */ | ||
135 | #define _H3800_ASIC2_KPIO_InterruptLevelType 0x000C /* R/W, 12 bits 1:high, 0:low */ | ||
136 | #define _H3800_ASIC2_KPIO_InterruptClear 0x0010 /* W, 20 bits - 8 special */ | ||
137 | #define _H3800_ASIC2_KPIO_InterruptFlag 0x0010 /* R, 20 bits - 8 special - reads int status */ | ||
138 | #define _H3800_ASIC2_KPIO_Data 0x0014 /* R/W, 16 bits */ | ||
139 | #define _H3800_ASIC2_KPIO_BattFaultOut 0x0018 /* R/W, 16 bit - sets level on batt fault */ | ||
140 | #define _H3800_ASIC2_KPIO_InterruptEnable 0x001c /* R/W, 20 bits - 8 special */ | ||
141 | #define _H3800_ASIC2_KPIO_Alternate 0x003c /* R/W, 6 bits */ | ||
142 | |||
143 | #define H3800_ASIC2_KPIO_Direction H3800_ASIC2_OFFSET( u16, KPIO, Direction ) | ||
144 | #define H3800_ASIC2_KPIO_InterruptType H3800_ASIC2_OFFSET( u16, KPIO, InterruptType ) | ||
145 | #define H3800_ASIC2_KPIO_InterruptEdgeType H3800_ASIC2_OFFSET( u16, KPIO, InterruptEdgeType ) | ||
146 | #define H3800_ASIC2_KPIO_InterruptLevelType H3800_ASIC2_OFFSET( u16, KPIO, InterruptLevelType ) | ||
147 | #define H3800_ASIC2_KPIO_InterruptClear H3800_ASIC2_OFFSET( u32, KPIO, InterruptClear ) | ||
148 | #define H3800_ASIC2_KPIO_InterruptFlag H3800_ASIC2_OFFSET( u32, KPIO, InterruptFlag ) | ||
149 | #define H3800_ASIC2_KPIO_Data H3800_ASIC2_OFFSET( u16, KPIO, Data ) | ||
150 | #define H3800_ASIC2_KPIO_BattFaultOut H3800_ASIC2_OFFSET( u16, KPIO, BattFaultOut ) | ||
151 | #define H3800_ASIC2_KPIO_InterruptEnable H3800_ASIC2_OFFSET( u32, KPIO, InterruptEnable ) | ||
152 | #define H3800_ASIC2_KPIO_Alternate H3800_ASIC2_OFFSET( u16, KPIO, Alternate ) | ||
153 | |||
154 | #define H3800_ASIC2_KPIO_SPI_INT ( 1 << 16 ) | ||
155 | #define H3800_ASIC2_KPIO_OWM_INT ( 1 << 17 ) | ||
156 | #define H3800_ASIC2_KPIO_ADC_INT ( 1 << 18 ) | ||
157 | #define H3800_ASIC2_KPIO_UART_0_INT ( 1 << 19 ) | ||
158 | #define H3800_ASIC2_KPIO_UART_1_INT ( 1 << 20 ) | ||
159 | #define H3800_ASIC2_KPIO_TIMER_0_INT ( 1 << 21 ) | ||
160 | #define H3800_ASIC2_KPIO_TIMER_1_INT ( 1 << 22 ) | ||
161 | #define H3800_ASIC2_KPIO_TIMER_2_INT ( 1 << 23 ) | ||
162 | |||
163 | #define KPIO_H3800_ASIC2_RECORD_BTN_N (1 << 0) /* Record button */ | ||
164 | #define KPIO_H3800_ASIC2_KEY_5W1_N (1 << 1) /* Keypad */ | ||
165 | #define KPIO_H3800_ASIC2_KEY_5W2_N (1 << 2) /* */ | ||
166 | #define KPIO_H3800_ASIC2_KEY_5W3_N (1 << 3) /* */ | ||
167 | #define KPIO_H3800_ASIC2_KEY_5W4_N (1 << 4) /* */ | ||
168 | #define KPIO_H3800_ASIC2_KEY_5W5_N (1 << 5) /* */ | ||
169 | #define KPIO_H3800_ASIC2_KEY_LEFT_N (1 << 6) /* */ | ||
170 | #define KPIO_H3800_ASIC2_KEY_RIGHT_N (1 << 7) /* */ | ||
171 | #define KPIO_H3800_ASIC2_KEY_AP1_N (1 << 8) /* Old "Calendar" */ | ||
172 | #define KPIO_H3800_ASIC2_KEY_AP2_N (1 << 9) /* Old "Schedule" */ | ||
173 | #define KPIO_H3800_ASIC2_KEY_AP3_N (1 << 10) /* Old "Q" */ | ||
174 | #define KPIO_H3800_ASIC2_KEY_AP4_N (1 << 11) /* Old "Undo" */ | ||
175 | |||
176 | /* Alternate KPIO functions (set by default) */ | ||
177 | #define KPIO_ALT_H3800_ASIC2_KEY_5W1_N (1 << 1) /* Action key */ | ||
178 | #define KPIO_ALT_H3800_ASIC2_KEY_5W2_N (1 << 2) /* J1 of keypad input */ | ||
179 | #define KPIO_ALT_H3800_ASIC2_KEY_5W3_N (1 << 3) /* J2 of keypad input */ | ||
180 | #define KPIO_ALT_H3800_ASIC2_KEY_5W4_N (1 << 4) /* J3 of keypad input */ | ||
181 | #define KPIO_ALT_H3800_ASIC2_KEY_5W5_N (1 << 5) /* J4 of keypad input */ | ||
182 | |||
183 | #define _H3800_ASIC2_SPI_Base 0x0400 | ||
184 | #define _H3800_ASIC2_SPI_Control 0x0000 /* R/W 8 bits */ | ||
185 | #define _H3800_ASIC2_SPI_Data 0x0004 /* R/W 8 bits */ | ||
186 | #define _H3800_ASIC2_SPI_ChipSelectDisabled 0x0008 /* W 8 bits */ | ||
187 | |||
188 | #define H3800_ASIC2_SPI_Control H3800_ASIC2_OFFSET( u8, SPI, Control ) | ||
189 | #define H3800_ASIC2_SPI_Data H3800_ASIC2_OFFSET( u8, SPI, Data ) | ||
190 | #define H3800_ASIC2_SPI_ChipSelectDisabled H3800_ASIC2_OFFSET( u8, SPI, ChipSelectDisabled ) | ||
191 | |||
192 | #define _H3800_ASIC2_PWM_0_Base 0x0600 | ||
193 | #define _H3800_ASIC2_PWM_1_Base 0x0700 | ||
194 | #define _H3800_ASIC2_PWM_TimeBase 0x0000 /* R/W 6 bits */ | ||
195 | #define _H3800_ASIC2_PWM_PeriodTime 0x0004 /* R/W 12 bits */ | ||
196 | #define _H3800_ASIC2_PWM_DutyTime 0x0008 /* R/W 12 bits */ | ||
197 | |||
198 | #define H3800_ASIC2_PWM_0_TimeBase H3800_ASIC2_NOFFSET( u8, PWM, 0, TimeBase ) | ||
199 | #define H3800_ASIC2_PWM_0_PeriodTime H3800_ASIC2_NOFFSET( u16, PWM, 0, PeriodTime ) | ||
200 | #define H3800_ASIC2_PWM_0_DutyTime H3800_ASIC2_NOFFSET( u16, PWM, 0, DutyTime ) | ||
201 | |||
202 | #define H3800_ASIC2_PWM_1_TimeBase H3800_ASIC2_NOFFSET( u8, PWM, 1, TimeBase ) | ||
203 | #define H3800_ASIC2_PWM_1_PeriodTime H3800_ASIC2_NOFFSET( u16, PWM, 1, PeriodTime ) | ||
204 | #define H3800_ASIC2_PWM_1_DutyTime H3800_ASIC2_NOFFSET( u16, PWM, 1, DutyTime ) | ||
205 | |||
206 | #define H3800_ASIC2_PWM_TIMEBASE_MASK 0xf /* Low 4 bits sets time base, max = 8 */ | ||
207 | #define H3800_ASIC2_PWM_TIMEBASE_ENABLE ( 1 << 4 ) /* Enable clock */ | ||
208 | #define H3800_ASIC2_PWM_TIMEBASE_CLEAR ( 1 << 5 ) /* Clear the PWM */ | ||
209 | |||
210 | #define _H3800_ASIC2_LED_0_Base 0x0800 | ||
211 | #define _H3800_ASIC2_LED_1_Base 0x0880 | ||
212 | #define _H3800_ASIC2_LED_2_Base 0x0900 | ||
213 | #define _H3800_ASIC2_LED_TimeBase 0x0000 /* R/W 7 bits */ | ||
214 | #define _H3800_ASIC2_LED_PeriodTime 0x0004 /* R/W 12 bits */ | ||
215 | #define _H3800_ASIC2_LED_DutyTime 0x0008 /* R/W 12 bits */ | ||
216 | #define _H3800_ASIC2_LED_AutoStopCount 0x000c /* R/W 16 bits */ | ||
217 | |||
218 | #define H3800_ASIC2_LED_0_TimeBase H3800_ASIC2_NOFFSET( u8, LED, 0, TimeBase ) | ||
219 | #define H3800_ASIC2_LED_0_PeriodTime H3800_ASIC2_NOFFSET( u16, LED, 0, PeriodTime ) | ||
220 | #define H3800_ASIC2_LED_0_DutyTime H3800_ASIC2_NOFFSET( u16, LED, 0, DutyTime ) | ||
221 | #define H3800_ASIC2_LED_0_AutoStopClock H3800_ASIC2_NOFFSET( u16, LED, 0, AutoStopClock ) | ||
222 | |||
223 | #define H3800_ASIC2_LED_1_TimeBase H3800_ASIC2_NOFFSET( u8, LED, 1, TimeBase ) | ||
224 | #define H3800_ASIC2_LED_1_PeriodTime H3800_ASIC2_NOFFSET( u16, LED, 1, PeriodTime ) | ||
225 | #define H3800_ASIC2_LED_1_DutyTime H3800_ASIC2_NOFFSET( u16, LED, 1, DutyTime ) | ||
226 | #define H3800_ASIC2_LED_1_AutoStopClock H3800_ASIC2_NOFFSET( u16, LED, 1, AutoStopClock ) | ||
227 | |||
228 | #define H3800_ASIC2_LED_2_TimeBase H3800_ASIC2_NOFFSET( u8, LED, 2, TimeBase ) | ||
229 | #define H3800_ASIC2_LED_2_PeriodTime H3800_ASIC2_NOFFSET( u16, LED, 2, PeriodTime ) | ||
230 | #define H3800_ASIC2_LED_2_DutyTime H3800_ASIC2_NOFFSET( u16, LED, 2, DutyTime ) | ||
231 | #define H3800_ASIC2_LED_2_AutoStopClock H3800_ASIC2_NOFFSET( u16, LED, 2, AutoStopClock ) | ||
232 | |||
233 | #define H3800_ASIC2_LED_TIMEBASE_MASK 0x0f /* Low 4 bits sets time base, max = 13 */ | ||
234 | #define H3800_ASIC2_LED_TIMEBASE_BLINK ( 1 << 4 ) /* Enable blinking */ | ||
235 | #define H3800_ASIC2_LED_TIMEBASE_AUTOSTOP ( 1 << 5 ) | ||
236 | #define H3800_ASIC2_LED_TIMEBASE_ALWAYS ( 1 << 6 ) /* Enable blink always */ | ||
237 | |||
238 | #define _H3800_ASIC2_UART_0_Base 0x0A00 | ||
239 | #define _H3800_ASIC2_UART_1_Base 0x0C00 | ||
240 | #define _H3800_ASIC2_UART_Receive 0x0000 /* R 8 bits */ | ||
241 | #define _H3800_ASIC2_UART_Transmit 0x0000 /* W 8 bits */ | ||
242 | #define _H3800_ASIC2_UART_IntEnable 0x0004 /* R/W 8 bits */ | ||
243 | #define _H3800_ASIC2_UART_IntVerify 0x0008 /* R/W 8 bits */ | ||
244 | #define _H3800_ASIC2_UART_FIFOControl 0x000c /* R/W 8 bits */ | ||
245 | #define _H3800_ASIC2_UART_LineControl 0x0010 /* R/W 8 bits */ | ||
246 | #define _H3800_ASIC2_UART_ModemStatus 0x0014 /* R/W 8 bits */ | ||
247 | #define _H3800_ASIC2_UART_LineStatus 0x0018 /* R/W 8 bits */ | ||
248 | #define _H3800_ASIC2_UART_ScratchPad 0x001c /* R/W 8 bits */ | ||
249 | #define _H3800_ASIC2_UART_DivisorLatchL 0x0020 /* R/W 8 bits */ | ||
250 | #define _H3800_ASIC2_UART_DivisorLatchH 0x0024 /* R/W 8 bits */ | ||
251 | |||
252 | #define H3800_ASIC2_UART_0_Receive H3800_ASIC2_NOFFSET( u8, UART, 0, Receive ) | ||
253 | #define H3800_ASIC2_UART_0_Transmit H3800_ASIC2_NOFFSET( u8, UART, 0, Transmit ) | ||
254 | #define H3800_ASIC2_UART_0_IntEnable H3800_ASIC2_NOFFSET( u8, UART, 0, IntEnable ) | ||
255 | #define H3800_ASIC2_UART_0_IntVerify H3800_ASIC2_NOFFSET( u8, UART, 0, IntVerify ) | ||
256 | #define H3800_ASIC2_UART_0_FIFOControl H3800_ASIC2_NOFFSET( u8, UART, 0, FIFOControl ) | ||
257 | #define H3800_ASIC2_UART_0_LineControl H3800_ASIC2_NOFFSET( u8, UART, 0, LineControl ) | ||
258 | #define H3800_ASIC2_UART_0_ModemStatus H3800_ASIC2_NOFFSET( u8, UART, 0, ModemStatus ) | ||
259 | #define H3800_ASIC2_UART_0_LineStatus H3800_ASIC2_NOFFSET( u8, UART, 0, LineStatus ) | ||
260 | #define H3800_ASIC2_UART_0_ScratchPad H3800_ASIC2_NOFFSET( u8, UART, 0, ScratchPad ) | ||
261 | #define H3800_ASIC2_UART_0_DivisorLatchL H3800_ASIC2_NOFFSET( u8, UART, 0, DivisorLatchL ) | ||
262 | #define H3800_ASIC2_UART_0_DivisorLatchH H3800_ASIC2_NOFFSET( u8, UART, 0, DivisorLatchH ) | ||
263 | |||
264 | #define H3800_ASIC2_UART_1_Receive H3800_ASIC2_NOFFSET( u8, UART, 1, Receive ) | ||
265 | #define H3800_ASIC2_UART_1_Transmit H3800_ASIC2_NOFFSET( u8, UART, 1, Transmit ) | ||
266 | #define H3800_ASIC2_UART_1_IntEnable H3800_ASIC2_NOFFSET( u8, UART, 1, IntEnable ) | ||
267 | #define H3800_ASIC2_UART_1_IntVerify H3800_ASIC2_NOFFSET( u8, UART, 1, IntVerify ) | ||
268 | #define H3800_ASIC2_UART_1_FIFOControl H3800_ASIC2_NOFFSET( u8, UART, 1, FIFOControl ) | ||
269 | #define H3800_ASIC2_UART_1_LineControl H3800_ASIC2_NOFFSET( u8, UART, 1, LineControl ) | ||
270 | #define H3800_ASIC2_UART_1_ModemStatus H3800_ASIC2_NOFFSET( u8, UART, 1, ModemStatus ) | ||
271 | #define H3800_ASIC2_UART_1_LineStatus H3800_ASIC2_NOFFSET( u8, UART, 1, LineStatus ) | ||
272 | #define H3800_ASIC2_UART_1_ScratchPad H3800_ASIC2_NOFFSET( u8, UART, 1, ScratchPad ) | ||
273 | #define H3800_ASIC2_UART_1_DivisorLatchL H3800_ASIC2_NOFFSET( u8, UART, 1, DivisorLatchL ) | ||
274 | #define H3800_ASIC2_UART_1_DivisorLatchH H3800_ASIC2_NOFFSET( u8, UART, 1, DivisorLatchH ) | ||
275 | |||
276 | #define _H3800_ASIC2_TIMER_Base 0x0E00 | ||
277 | #define _H3800_ASIC2_TIMER_Command 0x0000 /* R/W 8 bits */ | ||
278 | |||
279 | #define H3800_ASIC2_TIMER_Command H3800_ASIC2_OFFSET( u8, Timer, Command ) | ||
280 | |||
281 | #define H3800_ASIC2_TIMER_GAT_0 ( 1 << 0 ) /* Gate enable, counter 0 */ | ||
282 | #define H3800_ASIC2_TIMER_GAT_1 ( 1 << 1 ) /* Gate enable, counter 1 */ | ||
283 | #define H3800_ASIC2_TIMER_GAT_2 ( 1 << 2 ) /* Gate enable, counter 2 */ | ||
284 | #define H3800_ASIC2_TIMER_CLK_0 ( 1 << 3 ) /* Clock enable, counter 0 */ | ||
285 | #define H3800_ASIC2_TIMER_CLK_1 ( 1 << 4 ) /* Clock enable, counter 1 */ | ||
286 | #define H3800_ASIC2_TIMER_CLK_2 ( 1 << 5 ) /* Clock enable, counter 2 */ | ||
287 | #define H3800_ASIC2_TIMER_MODE_0 ( 1 << 6 ) /* Mode 0 enable, counter 0 */ | ||
288 | #define H3800_ASIC2_TIMER_MODE_1 ( 1 << 7 ) /* Mode 0 enable, counter 1 */ | ||
289 | |||
290 | #define _H3800_ASIC2_CLOCK_Base 0x1000 | ||
291 | #define _H3800_ASIC2_CLOCK_Enable 0x0000 /* R/W 18 bits */ | ||
292 | |||
293 | #define H3800_ASIC2_CLOCK_Enable H3800_ASIC2_OFFSET( u32, CLOCK, Enable ) | ||
294 | |||
295 | #define H3800_ASIC2_CLOCK_AUDIO_1 0x0001 /* Enable 4.1 MHz clock for 8Khz and 4khz sample rate */ | ||
296 | #define H3800_ASIC2_CLOCK_AUDIO_2 0x0002 /* Enable 12.3 MHz clock for 48Khz and 32khz sample rate */ | ||
297 | #define H3800_ASIC2_CLOCK_AUDIO_3 0x0004 /* Enable 5.6 MHz clock for 11 kHZ sample rate */ | ||
298 | #define H3800_ASIC2_CLOCK_AUDIO_4 0x0008 /* Enable 11.289 MHz clock for 44 and 22 kHz sample rate */ | ||
299 | #define H3800_ASIC2_CLOCK_ADC ( 1 << 4 ) /* 1.024 MHz clock to ADC */ | ||
300 | #define H3800_ASIC2_CLOCK_SPI ( 1 << 5 ) /* 4.096 MHz clock to SPI */ | ||
301 | #define H3800_ASIC2_CLOCK_OWM ( 1 << 6 ) /* 4.096 MHz clock to OWM */ | ||
302 | #define H3800_ASIC2_CLOCK_PWM ( 1 << 7 ) /* 2.048 MHz clock to PWM */ | ||
303 | #define H3800_ASIC2_CLOCK_UART_1 ( 1 << 8 ) /* 24.576 MHz clock to UART1 (turn off bit 16) */ | ||
304 | #define H3800_ASIC2_CLOCK_UART_0 ( 1 << 9 ) /* 24.576 MHz clock to UART0 (turn off bit 17) */ | ||
305 | #define H3800_ASIC2_CLOCK_SD_1 ( 1 << 10 ) /* 16.934 MHz to SD */ | ||
306 | #define H3800_ASIC2_CLOCK_SD_2 ( 2 << 10 ) /* 24.576 MHz to SD */ | ||
307 | #define H3800_ASIC2_CLOCK_SD_3 ( 3 << 10 ) /* 33.869 MHz to SD */ | ||
308 | #define H3800_ASIC2_CLOCK_SD_4 ( 4 << 10 ) /* 49.152 MHz to SD */ | ||
309 | #define H3800_ASIC2_CLOCK_EX0 ( 1 << 13 ) /* Enable 32.768 kHz crystal */ | ||
310 | #define H3800_ASIC2_CLOCK_EX1 ( 1 << 14 ) /* Enable 24.576 MHz crystal */ | ||
311 | #define H3800_ASIC2_CLOCK_EX2 ( 1 << 15 ) /* Enable 33.869 MHz crystal */ | ||
312 | #define H3800_ASIC2_CLOCK_SLOW_UART_1 ( 1 << 16 ) /* Enable 3.686 MHz to UART1 (turn off bit 8) */ | ||
313 | #define H3800_ASIC2_CLOCK_SLOW_UART_0 ( 1 << 17 ) /* Enable 3.686 MHz to UART0 (turn off bit 9) */ | ||
314 | |||
315 | #define _H3800_ASIC2_ADC_Base 0x1200 | ||
316 | #define _H3800_ASIC2_ADC_Multiplexer 0x0000 /* R/W 4 bits - low 3 bits set channel */ | ||
317 | #define _H3800_ASIC2_ADC_ControlStatus 0x0004 /* R/W 8 bits */ | ||
318 | #define _H3800_ASIC2_ADC_Data 0x0008 /* R 10 bits */ | ||
319 | |||
320 | #define H3800_ASIC2_ADC_Multiplexer H3800_ASIC2_OFFSET( u8, ADC, Multiplexer ) | ||
321 | #define H3800_ASIC2_ADC_ControlStatus H3800_ASIC2_OFFSET( u8, ADC, ControlStatus ) | ||
322 | #define H3800_ASIC2_ADC_Data H3800_ASIC2_OFFSET( u16, ADC, Data ) | ||
323 | |||
324 | #define H3600_ASIC2_ADC_MUX_CHANNEL_MASK 0x07 /* Low 3 bits sets channel. max = 4 */ | ||
325 | #define H3600_ASIC2_ADC_MUX_CLKEN ( 1 << 3 ) /* Enable clock */ | ||
326 | |||
327 | #define H3600_ASIC2_ADC_CSR_ADPS_MASK 0x0f /* Low 4 bits sets prescale, max = 8 */ | ||
328 | #define H3600_ASIC2_ADC_CSR_FREE_RUN ( 1 << 4 ) | ||
329 | #define H3600_ASIC2_ADC_CSR_INT_ENABLE ( 1 << 5 ) | ||
330 | #define H3600_ASIC2_ADC_CSR_START ( 1 << 6 ) /* Set to start conversion. Goes to 0 when done */ | ||
331 | #define H3600_ASIC2_ADC_CSR_ENABLE ( 1 << 7 ) /* 1:power up ADC, 0:power down */ | ||
332 | |||
333 | |||
334 | #define _H3800_ASIC2_INTR_Base 0x1600 | ||
335 | #define _H3800_ASIC2_INTR_MaskAndFlag 0x0000 /* R/(W) 8bits */ | ||
336 | #define _H3800_ASIC2_INTR_ClockPrescale 0x0004 /* R/(W) 5bits */ | ||
337 | #define _H3800_ASIC2_INTR_TimerSet 0x0008 /* R/(W) 8bits */ | ||
338 | |||
339 | #define H3800_ASIC2_INTR_MaskAndFlag H3800_ASIC2_OFFSET( u8, INTR, MaskAndFlag ) | ||
340 | #define H3800_ASIC2_INTR_ClockPrescale H3800_ASIC2_OFFSET( u8, INTR, ClockPrescale ) | ||
341 | #define H3800_ASIC2_INTR_TimerSet H3800_ASIC2_OFFSET( u8, INTR, TimerSet ) | ||
342 | |||
343 | #define H3800_ASIC2_INTR_GLOBAL_MASK ( 1 << 0 ) /* Global interrupt mask */ | ||
344 | #define H3800_ASIC2_INTR_POWER_ON_RESET ( 1 << 1 ) /* 01: Power on reset (bits 1 & 2 ) */ | ||
345 | #define H3800_ASIC2_INTR_EXTERNAL_RESET ( 2 << 1 ) /* 10: External reset (bits 1 & 2 ) */ | ||
346 | #define H3800_ASIC2_INTR_MASK_UART_0 ( 1 << 4 ) | ||
347 | #define H3800_ASIC2_INTR_MASK_UART_1 ( 1 << 5 ) | ||
348 | #define H3800_ASIC2_INTR_MASK_TIMER ( 1 << 6 ) | ||
349 | #define H3800_ASIC2_INTR_MASK_OWM ( 1 << 7 ) | ||
350 | |||
351 | #define H3800_ASIC2_INTR_CLOCK_PRESCALE 0x0f /* 4 bits, max 14 */ | ||
352 | #define H3800_ASIC2_INTR_SET ( 1 << 4 ) /* Time base enable */ | ||
353 | |||
354 | |||
355 | #define _H3800_ASIC2_OWM_Base 0x1800 | ||
356 | #define _H3800_ASIC2_OWM_Command 0x0000 /* R/W 4 bits command register */ | ||
357 | #define _H3800_ASIC2_OWM_Data 0x0004 /* R/W 8 bits, transmit / receive buffer */ | ||
358 | #define _H3800_ASIC2_OWM_Interrupt 0x0008 /* R/W Command register */ | ||
359 | #define _H3800_ASIC2_OWM_InterruptEnable 0x000c /* R/W Command register */ | ||
360 | #define _H3800_ASIC2_OWM_ClockDivisor 0x0010 /* R/W 5 bits of divisor and pre-scale */ | ||
361 | |||
362 | #define H3800_ASIC2_OWM_Command H3800_ASIC2_OFFSET( u8, OWM, Command ) | ||
363 | #define H3800_ASIC2_OWM_Data H3800_ASIC2_OFFSET( u8, OWM, Data ) | ||
364 | #define H3800_ASIC2_OWM_Interrupt H3800_ASIC2_OFFSET( u8, OWM, Interrupt ) | ||
365 | #define H3800_ASIC2_OWM_InterruptEnable H3800_ASIC2_OFFSET( u8, OWM, InterruptEnable ) | ||
366 | #define H3800_ASIC2_OWM_ClockDivisor H3800_ASIC2_OFFSET( u8, OWM, ClockDivisor ) | ||
367 | |||
368 | #define H3800_ASIC2_OWM_CMD_ONE_WIRE_RESET ( 1 << 0 ) /* Set to force reset on 1-wire bus */ | ||
369 | #define H3800_ASIC2_OWM_CMD_SRA ( 1 << 1 ) /* Set to switch to Search ROM accelerator mode */ | ||
370 | #define H3800_ASIC2_OWM_CMD_DQ_OUTPUT ( 1 << 2 ) /* Write only - forces bus low */ | ||
371 | #define H3800_ASIC2_OWM_CMD_DQ_INPUT ( 1 << 3 ) /* Read only - reflects state of bus */ | ||
372 | |||
373 | #define H3800_ASIC2_OWM_INT_PD ( 1 << 0 ) /* Presence detect */ | ||
374 | #define H3800_ASIC2_OWM_INT_PDR ( 1 << 1 ) /* Presence detect result */ | ||
375 | #define H3800_ASIC2_OWM_INT_TBE ( 1 << 2 ) /* Transmit buffer empty */ | ||
376 | #define H3800_ASIC2_OWM_INT_TEMT ( 1 << 3 ) /* Transmit shift register empty */ | ||
377 | #define H3800_ASIC2_OWM_INT_RBF ( 1 << 4 ) /* Receive buffer full */ | ||
378 | |||
379 | #define H3800_ASIC2_OWM_INTEN_EPD ( 1 << 0 ) /* Enable receive buffer full interrupt */ | ||
380 | #define H3800_ASIC2_OWM_INTEN_IAS ( 1 << 1 ) /* Enable transmit shift register empty interrupt */ | ||
381 | #define H3800_ASIC2_OWM_INTEN_ETBE ( 1 << 2 ) /* Enable transmit buffer empty interrupt */ | ||
382 | #define H3800_ASIC2_OWM_INTEN_ETMT ( 1 << 3 ) /* INTR active state */ | ||
383 | #define H3800_ASIC2_OWM_INTEN_ERBF ( 1 << 4 ) /* Enable presence detect interrupt */ | ||
384 | |||
385 | #define _H3800_ASIC2_FlashCtl_Base 0x1A00 | ||
386 | |||
387 | /****************************************************/ | ||
388 | /* H3800, ASIC #1 | ||
389 | * This ASIC is accesed through ASIC #2, and | ||
390 | * mapped into the 1c00 - 1f00 region | ||
391 | */ | ||
392 | |||
393 | #define H3800_ASIC1_OFFSET(s,x,y) \ | ||
394 | (*((volatile s *) (_H3800_ASIC2_Base + _H3800_ASIC1_ ## x ## _Base + (_H3800_ASIC1_ ## x ## _ ## y << 1)))) | ||
395 | |||
396 | #define _H3800_ASIC1_MMC_Base 0x1c00 | ||
397 | |||
398 | #define _H3800_ASIC1_MMC_StartStopClock 0x00 /* R/W 8bit */ | ||
399 | #define _H3800_ASIC1_MMC_Status 0x02 /* R See below, default 0x0040 */ | ||
400 | #define _H3800_ASIC1_MMC_ClockRate 0x04 /* R/W 8bit, low 3 bits are clock divisor */ | ||
401 | #define _H3800_ASIC1_MMC_SPIRegister 0x08 /* R/W 8bit, see below */ | ||
402 | #define _H3800_ASIC1_MMC_CmdDataCont 0x0a /* R/W 8bit, write to start MMC adapter */ | ||
403 | #define _H3800_ASIC1_MMC_ResponseTimeout 0x0c /* R/W 8bit, clocks before response timeout */ | ||
404 | #define _H3800_ASIC1_MMC_ReadTimeout 0x0e /* R/W 16bit, clocks before received data timeout */ | ||
405 | #define _H3800_ASIC1_MMC_BlockLength 0x10 /* R/W 10bit */ | ||
406 | #define _H3800_ASIC1_MMC_NumOfBlocks 0x12 /* R/W 16bit, in block mode, number of blocks */ | ||
407 | #define _H3800_ASIC1_MMC_InterruptMask 0x1a /* R/W 8bit */ | ||
408 | #define _H3800_ASIC1_MMC_CommandNumber 0x1c /* R/W 6 bits */ | ||
409 | #define _H3800_ASIC1_MMC_ArgumentH 0x1e /* R/W 16 bits */ | ||
410 | #define _H3800_ASIC1_MMC_ArgumentL 0x20 /* R/W 16 bits */ | ||
411 | #define _H3800_ASIC1_MMC_ResFifo 0x22 /* R 8 x 16 bits - contains response FIFO */ | ||
412 | #define _H3800_ASIC1_MMC_BufferPartFull 0x28 /* R/W 8 bits */ | ||
413 | |||
414 | #define H3800_ASIC1_MMC_StartStopClock H3800_ASIC1_OFFSET( u8, MMC, StartStopClock ) | ||
415 | #define H3800_ASIC1_MMC_Status H3800_ASIC1_OFFSET( u16, MMC, Status ) | ||
416 | #define H3800_ASIC1_MMC_ClockRate H3800_ASIC1_OFFSET( u8, MMC, ClockRate ) | ||
417 | #define H3800_ASIC1_MMC_SPIRegister H3800_ASIC1_OFFSET( u8, MMC, SPIRegister ) | ||
418 | #define H3800_ASIC1_MMC_CmdDataCont H3800_ASIC1_OFFSET( u8, MMC, CmdDataCont ) | ||
419 | #define H3800_ASIC1_MMC_ResponseTimeout H3800_ASIC1_OFFSET( u8, MMC, ResponseTimeout ) | ||
420 | #define H3800_ASIC1_MMC_ReadTimeout H3800_ASIC1_OFFSET( u16, MMC, ReadTimeout ) | ||
421 | #define H3800_ASIC1_MMC_BlockLength H3800_ASIC1_OFFSET( u16, MMC, BlockLength ) | ||
422 | #define H3800_ASIC1_MMC_NumOfBlocks H3800_ASIC1_OFFSET( u16, MMC, NumOfBlocks ) | ||
423 | #define H3800_ASIC1_MMC_InterruptMask H3800_ASIC1_OFFSET( u8, MMC, InterruptMask ) | ||
424 | #define H3800_ASIC1_MMC_CommandNumber H3800_ASIC1_OFFSET( u8, MMC, CommandNumber ) | ||
425 | #define H3800_ASIC1_MMC_ArgumentH H3800_ASIC1_OFFSET( u16, MMC, ArgumentH ) | ||
426 | #define H3800_ASIC1_MMC_ArgumentL H3800_ASIC1_OFFSET( u16, MMC, ArgumentL ) | ||
427 | #define H3800_ASIC1_MMC_ResFifo H3800_ASIC1_OFFSET( u16, MMC, ResFifo ) | ||
428 | #define H3800_ASIC1_MMC_BufferPartFull H3800_ASIC1_OFFSET( u8, MMC, BufferPartFull ) | ||
429 | |||
430 | #define H3800_ASIC1_MMC_STOP_CLOCK (1 << 0) /* Write to "StartStopClock" register */ | ||
431 | #define H3800_ASIC1_MMC_START_CLOCK (1 << 1) | ||
432 | |||
433 | #define H3800_ASIC1_MMC_STATUS_READ_TIMEOUT (1 << 0) | ||
434 | #define H3800_ASIC1_MMC_STATUS_RESPONSE_TIMEOUT (1 << 1) | ||
435 | #define H3800_ASIC1_MMC_STATUS_CRC_WRITE_ERROR (1 << 2) | ||
436 | #define H3800_ASIC1_MMC_STATUS_CRC_READ_ERROR (1 << 3) | ||
437 | #define H3800_ASIC1_MMC_STATUS_SPI_READ_ERROR (1 << 4) /* SPI data token error received */ | ||
438 | #define H3800_ASIC1_MMC_STATUS_CRC_RESPONSE_ERROR (1 << 5) | ||
439 | #define H3800_ASIC1_MMC_STATUS_FIFO_EMPTY (1 << 6) | ||
440 | #define H3800_ASIC1_MMC_STATUS_FIFO_FULL (1 << 7) | ||
441 | #define H3800_ASIC1_MMC_STATUS_CLOCK_ENABLE (1 << 8) /* MultiMediaCard clock stopped */ | ||
442 | #define H3800_ASIC1_MMC_STATUS_DATA_TRANSFER_DONE (1 << 11) /* Write operation, indicates transfer finished */ | ||
443 | #define H3800_ASIC1_MMC_STATUS_END_PROGRAM (1 << 12) /* End write and read operations */ | ||
444 | #define H3800_ASIC1_MMC_STATUS_END_COMMAND_RESPONSE (1 << 13) /* End command response */ | ||
445 | |||
446 | #define H3800_ASIC1_MMC_SPI_REG_SPI_ENABLE (1 << 0) /* Enables SPI mode */ | ||
447 | #define H3800_ASIC1_MMC_SPI_REG_CRC_ON (1 << 1) /* 1:turn on CRC */ | ||
448 | #define H3800_ASIC1_MMC_SPI_REG_SPI_CS_ENABLE (1 << 2) /* 1:turn on SPI CS */ | ||
449 | #define H3800_ASIC1_MMC_SPI_REG_CS_ADDRESS_MASK 0x38 /* Bits 3,4,5 are the SPI CS relative address */ | ||
450 | |||
451 | #define H3800_ASIC1_MMC_CMD_DATA_CONT_FORMAT_NO_RESPONSE 0x00 | ||
452 | #define H3800_ASIC1_MMC_CMD_DATA_CONT_FORMAT_R1 0x01 | ||
453 | #define H3800_ASIC1_MMC_CMD_DATA_CONT_FORMAT_R2 0x02 | ||
454 | #define H3800_ASIC1_MMC_CMD_DATA_CONT_FORMAT_R3 0x03 | ||
455 | #define H3800_ASIC1_MMC_CMD_DATA_CONT_DATA_ENABLE (1 << 2) /* This command contains a data transfer */ | ||
456 | #define H3800_ASIC1_MMC_CMD_DATA_CONT_WRITE (1 << 3) /* This data transfer is a write */ | ||
457 | #define H3800_ASIC1_MMC_CMD_DATA_CONT_STREAM_MODE (1 << 4) /* This data transfer is in stream mode */ | ||
458 | #define H3800_ASIC1_MMC_CMD_DATA_CONT_BUSY_BIT (1 << 5) /* Busy signal expected after current cmd */ | ||
459 | #define H3800_ASIC1_MMC_CMD_DATA_CONT_INITIALIZE (1 << 6) /* Enables the 80 bits for initializing card */ | ||
460 | |||
461 | #define H3800_ASIC1_MMC_INT_MASK_DATA_TRANSFER_DONE (1 << 0) | ||
462 | #define H3800_ASIC1_MMC_INT_MASK_PROGRAM_DONE (1 << 1) | ||
463 | #define H3800_ASIC1_MMC_INT_MASK_END_COMMAND_RESPONSE (1 << 2) | ||
464 | #define H3800_ASIC1_MMC_INT_MASK_BUFFER_READY (1 << 3) | ||
465 | |||
466 | #define H3800_ASIC1_MMC_BUFFER_PART_FULL (1 << 0) | ||
467 | |||
468 | /********* GPIO **********/ | ||
469 | |||
470 | #define _H3800_ASIC1_GPIO_Base 0x1e00 | ||
471 | |||
472 | #define _H3800_ASIC1_GPIO_Mask 0x30 /* R/W 0:don't mask, 1:mask interrupt */ | ||
473 | #define _H3800_ASIC1_GPIO_Direction 0x32 /* R/W 0:input, 1:output */ | ||
474 | #define _H3800_ASIC1_GPIO_Out 0x34 /* R/W 0:output low, 1:output high */ | ||
475 | #define _H3800_ASIC1_GPIO_TriggerType 0x36 /* R/W 0:level, 1:edge */ | ||
476 | #define _H3800_ASIC1_GPIO_EdgeTrigger 0x38 /* R/W 0:falling, 1:rising */ | ||
477 | #define _H3800_ASIC1_GPIO_LevelTrigger 0x3A /* R/W 0:low, 1:high level detect */ | ||
478 | #define _H3800_ASIC1_GPIO_LevelStatus 0x3C /* R/W 0:none, 1:detect */ | ||
479 | #define _H3800_ASIC1_GPIO_EdgeStatus 0x3E /* R/W 0:none, 1:detect */ | ||
480 | #define _H3800_ASIC1_GPIO_State 0x40 /* R See masks below (default 0) */ | ||
481 | #define _H3800_ASIC1_GPIO_Reset 0x42 /* R/W See masks below (default 0x04) */ | ||
482 | #define _H3800_ASIC1_GPIO_SleepMask 0x44 /* R/W 0:don't mask, 1:mask trigger in sleep mode */ | ||
483 | #define _H3800_ASIC1_GPIO_SleepDir 0x46 /* R/W direction 0:input, 1:output in sleep mode */ | ||
484 | #define _H3800_ASIC1_GPIO_SleepOut 0x48 /* R/W level 0:low, 1:high in sleep mode */ | ||
485 | #define _H3800_ASIC1_GPIO_Status 0x4A /* R Pin status */ | ||
486 | #define _H3800_ASIC1_GPIO_BattFaultDir 0x4C /* R/W direction 0:input, 1:output in batt_fault */ | ||
487 | #define _H3800_ASIC1_GPIO_BattFaultOut 0x4E /* R/W level 0:low, 1:high in batt_fault */ | ||
488 | |||
489 | #define H3800_ASIC1_GPIO_Mask H3800_ASIC1_OFFSET( u16, GPIO, Mask ) | ||
490 | #define H3800_ASIC1_GPIO_Direction H3800_ASIC1_OFFSET( u16, GPIO, Direction ) | ||
491 | #define H3800_ASIC1_GPIO_Out H3800_ASIC1_OFFSET( u16, GPIO, Out ) | ||
492 | #define H3800_ASIC1_GPIO_TriggerType H3800_ASIC1_OFFSET( u16, GPIO, TriggerType ) | ||
493 | #define H3800_ASIC1_GPIO_EdgeTrigger H3800_ASIC1_OFFSET( u16, GPIO, EdgeTrigger ) | ||
494 | #define H3800_ASIC1_GPIO_LevelTrigger H3800_ASIC1_OFFSET( u16, GPIO, LevelTrigger ) | ||
495 | #define H3800_ASIC1_GPIO_LevelStatus H3800_ASIC1_OFFSET( u16, GPIO, LevelStatus ) | ||
496 | #define H3800_ASIC1_GPIO_EdgeStatus H3800_ASIC1_OFFSET( u16, GPIO, EdgeStatus ) | ||
497 | #define H3800_ASIC1_GPIO_State H3800_ASIC1_OFFSET( u8, GPIO, State ) | ||
498 | #define H3800_ASIC1_GPIO_Reset H3800_ASIC1_OFFSET( u8, GPIO, Reset ) | ||
499 | #define H3800_ASIC1_GPIO_SleepMask H3800_ASIC1_OFFSET( u16, GPIO, SleepMask ) | ||
500 | #define H3800_ASIC1_GPIO_SleepDir H3800_ASIC1_OFFSET( u16, GPIO, SleepDir ) | ||
501 | #define H3800_ASIC1_GPIO_SleepOut H3800_ASIC1_OFFSET( u16, GPIO, SleepOut ) | ||
502 | #define H3800_ASIC1_GPIO_Status H3800_ASIC1_OFFSET( u16, GPIO, Status ) | ||
503 | #define H3800_ASIC1_GPIO_BattFaultDir H3800_ASIC1_OFFSET( u16, GPIO, BattFaultDir ) | ||
504 | #define H3800_ASIC1_GPIO_BattFaultOut H3800_ASIC1_OFFSET( u16, GPIO, BattFaultOut ) | ||
505 | |||
506 | #define H3800_ASIC1_GPIO_STATE_MASK (1 << 0) | ||
507 | #define H3800_ASIC1_GPIO_STATE_DIRECTION (1 << 1) | ||
508 | #define H3800_ASIC1_GPIO_STATE_OUT (1 << 2) | ||
509 | #define H3800_ASIC1_GPIO_STATE_TRIGGER_TYPE (1 << 3) | ||
510 | #define H3800_ASIC1_GPIO_STATE_EDGE_TRIGGER (1 << 4) | ||
511 | #define H3800_ASIC1_GPIO_STATE_LEVEL_TRIGGER (1 << 5) | ||
512 | |||
513 | #define H3800_ASIC1_GPIO_RESET_SOFTWARE (1 << 0) | ||
514 | #define H3800_ASIC1_GPIO_RESET_AUTO_SLEEP (1 << 1) | ||
515 | #define H3800_ASIC1_GPIO_RESET_FIRST_PWR_ON (1 << 2) | ||
516 | |||
517 | /* These are all outputs */ | ||
518 | #define GPIO_H3800_ASIC1_IR_ON_N (1 << 0) /* Apply power to the IR Module */ | ||
519 | #define GPIO_H3800_ASIC1_SD_PWR_ON (1 << 1) /* Secure Digital power on */ | ||
520 | #define GPIO_H3800_ASIC1_RS232_ON (1 << 2) /* Turn on power to the RS232 chip ? */ | ||
521 | #define GPIO_H3800_ASIC1_PULSE_GEN (1 << 3) /* Goes to speaker / earphone */ | ||
522 | #define GPIO_H3800_ASIC1_CH_TIMER (1 << 4) /* */ | ||
523 | #define GPIO_H3800_ASIC1_LCD_5V_ON (1 << 5) /* Enables LCD_5V */ | ||
524 | #define GPIO_H3800_ASIC1_LCD_ON (1 << 6) /* Enables LCD_3V */ | ||
525 | #define GPIO_H3800_ASIC1_LCD_PCI (1 << 7) /* Connects to PDWN on LCD controller */ | ||
526 | #define GPIO_H3800_ASIC1_VGH_ON (1 << 8) /* Drives VGH on the LCD (+9??) */ | ||
527 | #define GPIO_H3800_ASIC1_VGL_ON (1 << 9) /* Drivers VGL on the LCD (-6??) */ | ||
528 | #define GPIO_H3800_ASIC1_FL_PWR_ON (1 << 10) /* Frontlight power on */ | ||
529 | #define GPIO_H3800_ASIC1_BT_PWR_ON (1 << 11) /* Bluetooth power on */ | ||
530 | #define GPIO_H3800_ASIC1_SPK_ON (1 << 12) /* */ | ||
531 | #define GPIO_H3800_ASIC1_EAR_ON_N (1 << 13) /* */ | ||
532 | #define GPIO_H3800_ASIC1_AUD_PWR_ON (1 << 14) /* */ | ||
533 | |||
534 | /* Write enable for the flash */ | ||
535 | |||
536 | #define _H3800_ASIC1_FlashWP_Base 0x1F00 | ||
537 | #define _H3800_ASIC1_FlashWP_VPP_ON 0x00 /* R 1: write, 0: protect */ | ||
538 | #define H3800_ASIC1_FlashWP_VPP_ON H3800_ASIC1_OFFSET( u8, FlashWP, VPP_ON ) | ||
539 | |||
540 | #endif /* _INCLUDE_H3600_GPIO_H_ */ | ||
diff --git a/include/asm-arm/arch-sa1100/hardware.h b/include/asm-arm/arch-sa1100/hardware.h new file mode 100644 index 000000000000..10c62db34362 --- /dev/null +++ b/include/asm-arm/arch-sa1100/hardware.h | |||
@@ -0,0 +1,83 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-sa1100/hardware.h | ||
3 | * | ||
4 | * Copyright (C) 1998 Nicolas Pitre <nico@cam.org> | ||
5 | * | ||
6 | * This file contains the hardware definitions for SA1100 architecture | ||
7 | * | ||
8 | * 2000/05/23 John Dorsey <john+@cs.cmu.edu> | ||
9 | * Definitions for SA1111 added. | ||
10 | */ | ||
11 | |||
12 | #ifndef __ASM_ARCH_HARDWARE_H | ||
13 | #define __ASM_ARCH_HARDWARE_H | ||
14 | |||
15 | #include <linux/config.h> | ||
16 | |||
17 | /* Flushing areas */ | ||
18 | #define FLUSH_BASE_PHYS 0xe0000000 /* SA1100 zero bank */ | ||
19 | #define FLUSH_BASE 0xf5000000 | ||
20 | #define FLUSH_BASE_MINICACHE 0xf5800000 | ||
21 | #define UNCACHEABLE_ADDR 0xfa050000 | ||
22 | |||
23 | |||
24 | /* | ||
25 | * We requires absolute addresses i.e. (PCMCIA_IO_0_BASE + 0x3f8) for | ||
26 | * in*()/out*() macros to be usable for all cases. | ||
27 | */ | ||
28 | #define PCIO_BASE 0 | ||
29 | |||
30 | |||
31 | /* | ||
32 | * SA1100 internal I/O mappings | ||
33 | * | ||
34 | * We have the following mapping: | ||
35 | * phys virt | ||
36 | * 80000000 f8000000 | ||
37 | * 90000000 fa000000 | ||
38 | * a0000000 fc000000 | ||
39 | * b0000000 fe000000 | ||
40 | */ | ||
41 | |||
42 | #define VIO_BASE 0xf8000000 /* virtual start of IO space */ | ||
43 | #define VIO_SHIFT 3 /* x = IO space shrink power */ | ||
44 | #define PIO_START 0x80000000 /* physical start of IO space */ | ||
45 | |||
46 | #define io_p2v( x ) \ | ||
47 | ( (((x)&0x00ffffff) | (((x)&0x30000000)>>VIO_SHIFT)) + VIO_BASE ) | ||
48 | #define io_v2p( x ) \ | ||
49 | ( (((x)&0x00ffffff) | (((x)&(0x30000000>>VIO_SHIFT))<<VIO_SHIFT)) + PIO_START ) | ||
50 | |||
51 | #ifndef __ASSEMBLY__ | ||
52 | #include <asm/types.h> | ||
53 | |||
54 | #if 0 | ||
55 | # define __REG(x) (*((volatile u32 *)io_p2v(x))) | ||
56 | #else | ||
57 | /* | ||
58 | * This __REG() version gives the same results as the one above, except | ||
59 | * that we are fooling gcc somehow so it generates far better and smaller | ||
60 | * assembly code for access to contigous registers. It's a shame that gcc | ||
61 | * doesn't guess this by itself. | ||
62 | */ | ||
63 | typedef struct { volatile u32 offset[4096]; } __regbase; | ||
64 | # define __REGP(x) ((__regbase *)((x)&~4095))->offset[((x)&4095)>>2] | ||
65 | # define __REG(x) __REGP(io_p2v(x)) | ||
66 | #endif | ||
67 | |||
68 | # define __PREG(x) (io_v2p((u32)&(x))) | ||
69 | |||
70 | #else | ||
71 | |||
72 | # define __REG(x) io_p2v(x) | ||
73 | # define __PREG(x) io_v2p(x) | ||
74 | |||
75 | #endif | ||
76 | |||
77 | #include "SA-1100.h" | ||
78 | |||
79 | #ifdef CONFIG_SA1101 | ||
80 | #include "SA-1101.h" | ||
81 | #endif | ||
82 | |||
83 | #endif /* _ASM_ARCH_HARDWARE_H */ | ||
diff --git a/include/asm-arm/arch-sa1100/ide.h b/include/asm-arm/arch-sa1100/ide.h new file mode 100644 index 000000000000..2153538069c7 --- /dev/null +++ b/include/asm-arm/arch-sa1100/ide.h | |||
@@ -0,0 +1,76 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-sa1100/ide.h | ||
3 | * | ||
4 | * Copyright (c) 1998 Hugo Fiennes & Nicolas Pitre | ||
5 | * | ||
6 | * 18-aug-2000: Cleanup by Erik Mouw (J.A.K.Mouw@its.tudelft.nl) | ||
7 | * Get rid of the special ide_init_hwif_ports() functions | ||
8 | * and make a generalised function that can be used by all | ||
9 | * architectures. | ||
10 | */ | ||
11 | |||
12 | #include <linux/config.h> | ||
13 | #include <asm/irq.h> | ||
14 | #include <asm/hardware.h> | ||
15 | #include <asm/mach-types.h> | ||
16 | |||
17 | #error "This code is broken and needs update to match with current ide support" | ||
18 | |||
19 | |||
20 | /* | ||
21 | * Set up a hw structure for a specified data port, control port and IRQ. | ||
22 | * This should follow whatever the default interface uses. | ||
23 | */ | ||
24 | static inline void ide_init_hwif_ports(hw_regs_t *hw, unsigned long data_port, | ||
25 | unsigned long ctrl_port, int *irq) | ||
26 | { | ||
27 | unsigned long reg = data_port; | ||
28 | int i; | ||
29 | int regincr = 1; | ||
30 | |||
31 | /* The Empeg board has the first two address lines unused */ | ||
32 | if (machine_is_empeg()) | ||
33 | regincr = 1 << 2; | ||
34 | |||
35 | /* The LART doesn't use A0 for IDE */ | ||
36 | if (machine_is_lart()) | ||
37 | regincr = 1 << 1; | ||
38 | |||
39 | memset(hw, 0, sizeof(*hw)); | ||
40 | |||
41 | for (i = IDE_DATA_OFFSET; i <= IDE_STATUS_OFFSET; i++) { | ||
42 | hw->io_ports[i] = reg; | ||
43 | reg += regincr; | ||
44 | } | ||
45 | |||
46 | hw->io_ports[IDE_CONTROL_OFFSET] = ctrl_port; | ||
47 | |||
48 | if (irq) | ||
49 | *irq = 0; | ||
50 | } | ||
51 | |||
52 | /* | ||
53 | * This registers the standard ports for this architecture with the IDE | ||
54 | * driver. | ||
55 | */ | ||
56 | static __inline__ void | ||
57 | ide_init_default_hwifs(void) | ||
58 | { | ||
59 | if (machine_is_lart()) { | ||
60 | #ifdef CONFIG_SA1100_LART | ||
61 | hw_regs_t hw; | ||
62 | |||
63 | /* Enable GPIO as interrupt line */ | ||
64 | GPDR &= ~LART_GPIO_IDE; | ||
65 | set_irq_type(LART_IRQ_IDE, IRQT_RISING); | ||
66 | |||
67 | /* set PCMCIA interface timing */ | ||
68 | MECR = 0x00060006; | ||
69 | |||
70 | /* init the interface */ | ||
71 | ide_init_hwif_ports(&hw, PCMCIA_IO_0_BASE + 0x0000, PCMCIA_IO_0_BASE + 0x1000, NULL); | ||
72 | hw.irq = LART_IRQ_IDE; | ||
73 | ide_register_hw(&hw); | ||
74 | #endif | ||
75 | } | ||
76 | } | ||
diff --git a/include/asm-arm/arch-sa1100/io.h b/include/asm-arm/arch-sa1100/io.h new file mode 100644 index 000000000000..7d969ffbd3bb --- /dev/null +++ b/include/asm-arm/arch-sa1100/io.h | |||
@@ -0,0 +1,23 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-sa1100/io.h | ||
3 | * | ||
4 | * Copyright (C) 1997-1999 Russell King | ||
5 | * | ||
6 | * Modifications: | ||
7 | * 06-12-1997 RMK Created. | ||
8 | * 07-04-1999 RMK Major cleanup | ||
9 | */ | ||
10 | #ifndef __ASM_ARM_ARCH_IO_H | ||
11 | #define __ASM_ARM_ARCH_IO_H | ||
12 | |||
13 | #define IO_SPACE_LIMIT 0xffffffff | ||
14 | |||
15 | /* | ||
16 | * We don't actually have real ISA nor PCI buses, but there is so many | ||
17 | * drivers out there that might just work if we fake them... | ||
18 | */ | ||
19 | #define __io(a) ((void __iomem *)(PCIO_BASE + (a))) | ||
20 | #define __mem_pci(a) (a) | ||
21 | #define __mem_isa(a) (a) | ||
22 | |||
23 | #endif | ||
diff --git a/include/asm-arm/arch-sa1100/irqs.h b/include/asm-arm/arch-sa1100/irqs.h new file mode 100644 index 000000000000..eabd3be3d705 --- /dev/null +++ b/include/asm-arm/arch-sa1100/irqs.h | |||
@@ -0,0 +1,198 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-sa1100/irqs.h | ||
3 | * | ||
4 | * Copyright (C) 1996 Russell King | ||
5 | * Copyright (C) 1998 Deborah Wallach (updates for SA1100/Brutus). | ||
6 | * Copyright (C) 1999 Nicolas Pitre (full GPIO irq isolation) | ||
7 | * | ||
8 | * 2001/11/14 RMK Cleaned up and standardised a lot of the IRQs. | ||
9 | */ | ||
10 | #include <linux/config.h> | ||
11 | |||
12 | #define IRQ_GPIO0 0 | ||
13 | #define IRQ_GPIO1 1 | ||
14 | #define IRQ_GPIO2 2 | ||
15 | #define IRQ_GPIO3 3 | ||
16 | #define IRQ_GPIO4 4 | ||
17 | #define IRQ_GPIO5 5 | ||
18 | #define IRQ_GPIO6 6 | ||
19 | #define IRQ_GPIO7 7 | ||
20 | #define IRQ_GPIO8 8 | ||
21 | #define IRQ_GPIO9 9 | ||
22 | #define IRQ_GPIO10 10 | ||
23 | #define IRQ_GPIO11_27 11 | ||
24 | #define IRQ_LCD 12 /* LCD controller */ | ||
25 | #define IRQ_Ser0UDC 13 /* Ser. port 0 UDC */ | ||
26 | #define IRQ_Ser1SDLC 14 /* Ser. port 1 SDLC */ | ||
27 | #define IRQ_Ser1UART 15 /* Ser. port 1 UART */ | ||
28 | #define IRQ_Ser2ICP 16 /* Ser. port 2 ICP */ | ||
29 | #define IRQ_Ser3UART 17 /* Ser. port 3 UART */ | ||
30 | #define IRQ_Ser4MCP 18 /* Ser. port 4 MCP */ | ||
31 | #define IRQ_Ser4SSP 19 /* Ser. port 4 SSP */ | ||
32 | #define IRQ_DMA0 20 /* DMA controller channel 0 */ | ||
33 | #define IRQ_DMA1 21 /* DMA controller channel 1 */ | ||
34 | #define IRQ_DMA2 22 /* DMA controller channel 2 */ | ||
35 | #define IRQ_DMA3 23 /* DMA controller channel 3 */ | ||
36 | #define IRQ_DMA4 24 /* DMA controller channel 4 */ | ||
37 | #define IRQ_DMA5 25 /* DMA controller channel 5 */ | ||
38 | #define IRQ_OST0 26 /* OS Timer match 0 */ | ||
39 | #define IRQ_OST1 27 /* OS Timer match 1 */ | ||
40 | #define IRQ_OST2 28 /* OS Timer match 2 */ | ||
41 | #define IRQ_OST3 29 /* OS Timer match 3 */ | ||
42 | #define IRQ_RTC1Hz 30 /* RTC 1 Hz clock */ | ||
43 | #define IRQ_RTCAlrm 31 /* RTC Alarm */ | ||
44 | |||
45 | #define IRQ_GPIO11 32 | ||
46 | #define IRQ_GPIO12 33 | ||
47 | #define IRQ_GPIO13 34 | ||
48 | #define IRQ_GPIO14 35 | ||
49 | #define IRQ_GPIO15 36 | ||
50 | #define IRQ_GPIO16 37 | ||
51 | #define IRQ_GPIO17 38 | ||
52 | #define IRQ_GPIO18 39 | ||
53 | #define IRQ_GPIO19 40 | ||
54 | #define IRQ_GPIO20 41 | ||
55 | #define IRQ_GPIO21 42 | ||
56 | #define IRQ_GPIO22 43 | ||
57 | #define IRQ_GPIO23 44 | ||
58 | #define IRQ_GPIO24 45 | ||
59 | #define IRQ_GPIO25 46 | ||
60 | #define IRQ_GPIO26 47 | ||
61 | #define IRQ_GPIO27 48 | ||
62 | |||
63 | /* | ||
64 | * The next 16 interrupts are for board specific purposes. Since | ||
65 | * the kernel can only run on one machine at a time, we can re-use | ||
66 | * these. If you need more, increase IRQ_BOARD_END, but keep it | ||
67 | * within sensible limits. IRQs 49 to 64 are available. | ||
68 | */ | ||
69 | #define IRQ_BOARD_START 49 | ||
70 | #define IRQ_BOARD_END 65 | ||
71 | |||
72 | #define IRQ_SA1111_START (IRQ_BOARD_END) | ||
73 | #define IRQ_GPAIN0 (IRQ_BOARD_END + 0) | ||
74 | #define IRQ_GPAIN1 (IRQ_BOARD_END + 1) | ||
75 | #define IRQ_GPAIN2 (IRQ_BOARD_END + 2) | ||
76 | #define IRQ_GPAIN3 (IRQ_BOARD_END + 3) | ||
77 | #define IRQ_GPBIN0 (IRQ_BOARD_END + 4) | ||
78 | #define IRQ_GPBIN1 (IRQ_BOARD_END + 5) | ||
79 | #define IRQ_GPBIN2 (IRQ_BOARD_END + 6) | ||
80 | #define IRQ_GPBIN3 (IRQ_BOARD_END + 7) | ||
81 | #define IRQ_GPBIN4 (IRQ_BOARD_END + 8) | ||
82 | #define IRQ_GPBIN5 (IRQ_BOARD_END + 9) | ||
83 | #define IRQ_GPCIN0 (IRQ_BOARD_END + 10) | ||
84 | #define IRQ_GPCIN1 (IRQ_BOARD_END + 11) | ||
85 | #define IRQ_GPCIN2 (IRQ_BOARD_END + 12) | ||
86 | #define IRQ_GPCIN3 (IRQ_BOARD_END + 13) | ||
87 | #define IRQ_GPCIN4 (IRQ_BOARD_END + 14) | ||
88 | #define IRQ_GPCIN5 (IRQ_BOARD_END + 15) | ||
89 | #define IRQ_GPCIN6 (IRQ_BOARD_END + 16) | ||
90 | #define IRQ_GPCIN7 (IRQ_BOARD_END + 17) | ||
91 | #define IRQ_MSTXINT (IRQ_BOARD_END + 18) | ||
92 | #define IRQ_MSRXINT (IRQ_BOARD_END + 19) | ||
93 | #define IRQ_MSSTOPERRINT (IRQ_BOARD_END + 20) | ||
94 | #define IRQ_TPTXINT (IRQ_BOARD_END + 21) | ||
95 | #define IRQ_TPRXINT (IRQ_BOARD_END + 22) | ||
96 | #define IRQ_TPSTOPERRINT (IRQ_BOARD_END + 23) | ||
97 | #define SSPXMTINT (IRQ_BOARD_END + 24) | ||
98 | #define SSPRCVINT (IRQ_BOARD_END + 25) | ||
99 | #define SSPROR (IRQ_BOARD_END + 26) | ||
100 | #define AUDXMTDMADONEA (IRQ_BOARD_END + 32) | ||
101 | #define AUDRCVDMADONEA (IRQ_BOARD_END + 33) | ||
102 | #define AUDXMTDMADONEB (IRQ_BOARD_END + 34) | ||
103 | #define AUDRCVDMADONEB (IRQ_BOARD_END + 35) | ||
104 | #define AUDTFSR (IRQ_BOARD_END + 36) | ||
105 | #define AUDRFSR (IRQ_BOARD_END + 37) | ||
106 | #define AUDTUR (IRQ_BOARD_END + 38) | ||
107 | #define AUDROR (IRQ_BOARD_END + 39) | ||
108 | #define AUDDTS (IRQ_BOARD_END + 40) | ||
109 | #define AUDRDD (IRQ_BOARD_END + 41) | ||
110 | #define AUDSTO (IRQ_BOARD_END + 42) | ||
111 | #define IRQ_USBPWR (IRQ_BOARD_END + 43) | ||
112 | #define IRQ_HCIM (IRQ_BOARD_END + 44) | ||
113 | #define IRQ_HCIBUFFACC (IRQ_BOARD_END + 45) | ||
114 | #define IRQ_HCIRMTWKP (IRQ_BOARD_END + 46) | ||
115 | #define IRQ_NHCIMFCIR (IRQ_BOARD_END + 47) | ||
116 | #define IRQ_USB_PORT_RESUME (IRQ_BOARD_END + 48) | ||
117 | #define IRQ_S0_READY_NINT (IRQ_BOARD_END + 49) | ||
118 | #define IRQ_S1_READY_NINT (IRQ_BOARD_END + 50) | ||
119 | #define IRQ_S0_CD_VALID (IRQ_BOARD_END + 51) | ||
120 | #define IRQ_S1_CD_VALID (IRQ_BOARD_END + 52) | ||
121 | #define IRQ_S0_BVD1_STSCHG (IRQ_BOARD_END + 53) | ||
122 | #define IRQ_S1_BVD1_STSCHG (IRQ_BOARD_END + 54) | ||
123 | |||
124 | #define IRQ_LOCOMO_START (IRQ_BOARD_END) | ||
125 | #define IRQ_LOCOMO_KEY (IRQ_BOARD_END + 0) | ||
126 | #define IRQ_LOCOMO_GPIO0 (IRQ_BOARD_END + 1) | ||
127 | #define IRQ_LOCOMO_GPIO1 (IRQ_BOARD_END + 2) | ||
128 | #define IRQ_LOCOMO_GPIO2 (IRQ_BOARD_END + 3) | ||
129 | #define IRQ_LOCOMO_GPIO3 (IRQ_BOARD_END + 4) | ||
130 | #define IRQ_LOCOMO_GPIO4 (IRQ_BOARD_END + 5) | ||
131 | #define IRQ_LOCOMO_GPIO5 (IRQ_BOARD_END + 6) | ||
132 | #define IRQ_LOCOMO_GPIO6 (IRQ_BOARD_END + 7) | ||
133 | #define IRQ_LOCOMO_GPIO7 (IRQ_BOARD_END + 8) | ||
134 | #define IRQ_LOCOMO_GPIO8 (IRQ_BOARD_END + 9) | ||
135 | #define IRQ_LOCOMO_GPIO9 (IRQ_BOARD_END + 10) | ||
136 | #define IRQ_LOCOMO_GPIO10 (IRQ_BOARD_END + 11) | ||
137 | #define IRQ_LOCOMO_GPIO11 (IRQ_BOARD_END + 12) | ||
138 | #define IRQ_LOCOMO_GPIO12 (IRQ_BOARD_END + 13) | ||
139 | #define IRQ_LOCOMO_GPIO13 (IRQ_BOARD_END + 14) | ||
140 | #define IRQ_LOCOMO_GPIO14 (IRQ_BOARD_END + 15) | ||
141 | #define IRQ_LOCOMO_GPIO15 (IRQ_BOARD_END + 16) | ||
142 | #define IRQ_LOCOMO_LT (IRQ_BOARD_END + 17) | ||
143 | #define IRQ_LOCOMO_SPI_RFR (IRQ_BOARD_END + 18) | ||
144 | #define IRQ_LOCOMO_SPI_RFW (IRQ_BOARD_END + 19) | ||
145 | #define IRQ_LOCOMO_SPI_OVRN (IRQ_BOARD_END + 20) | ||
146 | #define IRQ_LOCOMO_SPI_TEND (IRQ_BOARD_END + 21) | ||
147 | |||
148 | /* | ||
149 | * Figure out the MAX IRQ number. | ||
150 | * | ||
151 | * If we have an SA1111, the max IRQ is S1_BVD1_STSCHG+1. | ||
152 | * If we have an LoCoMo, the max IRQ is IRQ_LOCOMO_SPI_TEND+1 | ||
153 | * Otherwise, we have the standard IRQs only. | ||
154 | */ | ||
155 | #ifdef CONFIG_SA1111 | ||
156 | #define NR_IRQS (IRQ_S1_BVD1_STSCHG + 1) | ||
157 | #elif defined(CONFIG_SA1100_H3800) | ||
158 | #define NR_IRQS (IRQ_BOARD_END) | ||
159 | #elif defined(CONFIG_SHARP_LOCOMO) | ||
160 | #define NR_IRQS (IRQ_LOCOMO_SPI_TEND + 1) | ||
161 | #else | ||
162 | #define NR_IRQS (IRQ_BOARD_START) | ||
163 | #endif | ||
164 | |||
165 | /* | ||
166 | * Board specific IRQs. Define them here. | ||
167 | * Do not surround them with ifdefs. | ||
168 | */ | ||
169 | #define IRQ_NEPONSET_SMC9196 (IRQ_BOARD_START + 0) | ||
170 | #define IRQ_NEPONSET_USAR (IRQ_BOARD_START + 1) | ||
171 | #define IRQ_NEPONSET_SA1111 (IRQ_BOARD_START + 2) | ||
172 | |||
173 | /* LoCoMo Interrupts (CONFIG_SHARP_LOCOMO) */ | ||
174 | #define IRQ_LOCOMO_KEY_BASE (IRQ_BOARD_START + 0) | ||
175 | #define IRQ_LOCOMO_GPIO_BASE (IRQ_BOARD_START + 1) | ||
176 | #define IRQ_LOCOMO_LT_BASE (IRQ_BOARD_START + 2) | ||
177 | #define IRQ_LOCOMO_SPI_BASE (IRQ_BOARD_START + 3) | ||
178 | |||
179 | /* H3800-specific IRQs (CONFIG_SA1100_H3800) */ | ||
180 | #define H3800_KPIO_IRQ_START (IRQ_BOARD_START) | ||
181 | #define IRQ_H3800_KEY (IRQ_BOARD_START + 0) | ||
182 | #define IRQ_H3800_SPI (IRQ_BOARD_START + 1) | ||
183 | #define IRQ_H3800_OWM (IRQ_BOARD_START + 2) | ||
184 | #define IRQ_H3800_ADC (IRQ_BOARD_START + 3) | ||
185 | #define IRQ_H3800_UART_0 (IRQ_BOARD_START + 4) | ||
186 | #define IRQ_H3800_UART_1 (IRQ_BOARD_START + 5) | ||
187 | #define IRQ_H3800_TIMER_0 (IRQ_BOARD_START + 6) | ||
188 | #define IRQ_H3800_TIMER_1 (IRQ_BOARD_START + 7) | ||
189 | #define IRQ_H3800_TIMER_2 (IRQ_BOARD_START + 8) | ||
190 | #define H3800_KPIO_IRQ_COUNT 9 | ||
191 | |||
192 | #define H3800_GPIO_IRQ_START (IRQ_BOARD_START + 9) | ||
193 | #define IRQ_H3800_PEN (IRQ_BOARD_START + 9) | ||
194 | #define IRQ_H3800_SD_DETECT (IRQ_BOARD_START + 10) | ||
195 | #define IRQ_H3800_EAR_IN (IRQ_BOARD_START + 11) | ||
196 | #define IRQ_H3800_USB_DETECT (IRQ_BOARD_START + 12) | ||
197 | #define IRQ_H3800_SD_CON_SLT (IRQ_BOARD_START + 13) | ||
198 | #define H3800_GPIO_IRQ_COUNT 5 | ||
diff --git a/include/asm-arm/arch-sa1100/jornada720.h b/include/asm-arm/arch-sa1100/jornada720.h new file mode 100644 index 000000000000..1b8e8a304800 --- /dev/null +++ b/include/asm-arm/arch-sa1100/jornada720.h | |||
@@ -0,0 +1,28 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-sa1100/jornada720.h | ||
3 | * | ||
4 | * Created 2000/11/29 by John Ankcorn <jca@lcs.mit.edu> | ||
5 | * | ||
6 | * This file contains the hardware specific definitions for HP Jornada 720 | ||
7 | * | ||
8 | */ | ||
9 | |||
10 | #ifndef __ASM_ARCH_HARDWARE_H | ||
11 | #error "include <asm/hardware.h> instead" | ||
12 | #endif | ||
13 | |||
14 | #define SA1111_BASE (0x40000000) | ||
15 | |||
16 | #define GPIO_JORNADA720_KEYBOARD GPIO_GPIO(0) | ||
17 | #define GPIO_JORNADA720_MOUSE GPIO_GPIO(9) | ||
18 | |||
19 | #define GPIO_JORNADA720_KEYBOARD_IRQ IRQ_GPIO0 | ||
20 | #define GPIO_JORNADA720_MOUSE_IRQ IRQ_GPIO9 | ||
21 | |||
22 | #ifndef __ASSEMBLY__ | ||
23 | |||
24 | void jornada720_mcu_init(void); | ||
25 | void jornada_contrast(int arg_contrast); | ||
26 | void jornada720_battery(void); | ||
27 | int jornada720_getkey(unsigned char *data, int size); | ||
28 | #endif | ||
diff --git a/include/asm-arm/arch-sa1100/lart.h b/include/asm-arm/arch-sa1100/lart.h new file mode 100644 index 000000000000..8a5482d908db --- /dev/null +++ b/include/asm-arm/arch-sa1100/lart.h | |||
@@ -0,0 +1,13 @@ | |||
1 | #ifndef _INCLUDE_LART_H | ||
2 | #define _INCLUDE_LART_H | ||
3 | |||
4 | #define LART_GPIO_ETH0 GPIO_GPIO0 | ||
5 | #define LART_IRQ_ETH0 IRQ_GPIO0 | ||
6 | |||
7 | #define LART_GPIO_IDE GPIO_GPIO1 | ||
8 | #define LART_IRQ_IDE IRQ_GPIO1 | ||
9 | |||
10 | #define LART_GPIO_UCB1200 GPIO_GPIO18 | ||
11 | #define LART_IRQ_UCB1200 IRQ_GPIO18 | ||
12 | |||
13 | #endif | ||
diff --git a/include/asm-arm/arch-sa1100/memory.h b/include/asm-arm/arch-sa1100/memory.h new file mode 100644 index 000000000000..32d3d5bde34d --- /dev/null +++ b/include/asm-arm/arch-sa1100/memory.h | |||
@@ -0,0 +1,108 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-sa1100/memory.h | ||
3 | * | ||
4 | * Copyright (C) 1999-2000 Nicolas Pitre <nico@cam.org> | ||
5 | */ | ||
6 | |||
7 | #ifndef __ASM_ARCH_MEMORY_H | ||
8 | #define __ASM_ARCH_MEMORY_H | ||
9 | |||
10 | #include <linux/config.h> | ||
11 | #include <asm/sizes.h> | ||
12 | |||
13 | /* | ||
14 | * Physical DRAM offset is 0xc0000000 on the SA1100 | ||
15 | */ | ||
16 | #define PHYS_OFFSET (0xc0000000UL) | ||
17 | |||
18 | #ifndef __ASSEMBLY__ | ||
19 | |||
20 | #ifdef CONFIG_SA1111 | ||
21 | static inline void | ||
22 | __arch_adjust_zones(int node, unsigned long *size, unsigned long *holes) | ||
23 | { | ||
24 | unsigned int sz = SZ_1M >> PAGE_SHIFT; | ||
25 | |||
26 | if (node != 0) | ||
27 | sz = 0; | ||
28 | |||
29 | size[1] = size[0] - sz; | ||
30 | size[0] = sz; | ||
31 | } | ||
32 | |||
33 | #define arch_adjust_zones(node, size, holes) \ | ||
34 | __arch_adjust_zones(node, size, holes) | ||
35 | |||
36 | #define ISA_DMA_THRESHOLD (PHYS_OFFSET + SZ_1M - 1) | ||
37 | |||
38 | #endif | ||
39 | #endif | ||
40 | |||
41 | /* | ||
42 | * Virtual view <-> DMA view memory address translations | ||
43 | * virt_to_bus: Used to translate the virtual address to an | ||
44 | * address suitable to be passed to set_dma_addr | ||
45 | * bus_to_virt: Used to convert an address for DMA operations | ||
46 | * to an address that the kernel can use. | ||
47 | * | ||
48 | * On the SA1100, bus addresses are equivalent to physical addresses. | ||
49 | */ | ||
50 | #define __virt_to_bus(x) __virt_to_phys(x) | ||
51 | #define __bus_to_virt(x) __phys_to_virt(x) | ||
52 | |||
53 | #ifdef CONFIG_DISCONTIGMEM | ||
54 | /* | ||
55 | * Because of the wide memory address space between physical RAM banks on the | ||
56 | * SA1100, it's much convenient to use Linux's NUMA support to implement our | ||
57 | * memory map representation. Assuming all memory nodes have equal access | ||
58 | * characteristics, we then have generic discontiguous memory support. | ||
59 | * | ||
60 | * Of course, all this isn't mandatory for SA1100 implementations with only | ||
61 | * one used memory bank. For those, simply undefine CONFIG_DISCONTIGMEM. | ||
62 | * | ||
63 | * The nodes are matched with the physical memory bank addresses which are | ||
64 | * incidentally the same as virtual addresses. | ||
65 | * | ||
66 | * node 0: 0xc0000000 - 0xc7ffffff | ||
67 | * node 1: 0xc8000000 - 0xcfffffff | ||
68 | * node 2: 0xd0000000 - 0xd7ffffff | ||
69 | * node 3: 0xd8000000 - 0xdfffffff | ||
70 | */ | ||
71 | |||
72 | /* | ||
73 | * Given a kernel address, find the home node of the underlying memory. | ||
74 | */ | ||
75 | #define KVADDR_TO_NID(addr) (((unsigned long)(addr) - PAGE_OFFSET) >> 27) | ||
76 | |||
77 | /* | ||
78 | * Given a page frame number, convert it to a node id. | ||
79 | */ | ||
80 | #define PFN_TO_NID(pfn) (((pfn) - PHYS_PFN_OFFSET) >> (27 - PAGE_SHIFT)) | ||
81 | |||
82 | /* | ||
83 | * Given a kaddr, ADDR_TO_MAPBASE finds the owning node of the memory | ||
84 | * and return the mem_map of that node. | ||
85 | */ | ||
86 | #define ADDR_TO_MAPBASE(kaddr) NODE_MEM_MAP(KVADDR_TO_NID(kaddr)) | ||
87 | |||
88 | /* | ||
89 | * Given a page frame number, find the owning node of the memory | ||
90 | * and return the mem_map of that node. | ||
91 | */ | ||
92 | #define PFN_TO_MAPBASE(pfn) NODE_MEM_MAP(PFN_TO_NID(pfn)) | ||
93 | |||
94 | /* | ||
95 | * Given a kaddr, LOCAL_MEM_MAP finds the owning node of the memory | ||
96 | * and returns the index corresponding to the appropriate page in the | ||
97 | * node's mem_map. | ||
98 | */ | ||
99 | #define LOCAL_MAP_NR(addr) \ | ||
100 | (((unsigned long)(addr) & 0x07ffffff) >> PAGE_SHIFT) | ||
101 | |||
102 | #else | ||
103 | |||
104 | #define PFN_TO_NID(addr) (0) | ||
105 | |||
106 | #endif | ||
107 | |||
108 | #endif | ||
diff --git a/include/asm-arm/arch-sa1100/neponset.h b/include/asm-arm/arch-sa1100/neponset.h new file mode 100644 index 000000000000..8051fd73a80b --- /dev/null +++ b/include/asm-arm/arch-sa1100/neponset.h | |||
@@ -0,0 +1,74 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-sa1100/assabet.h | ||
3 | * | ||
4 | * Created 2000/06/05 by Nicolas Pitre <nico@cam.org> | ||
5 | * | ||
6 | * This file contains the hardware specific definitions for Assabet | ||
7 | * Only include this file from SA1100-specific files. | ||
8 | * | ||
9 | * 2000/05/23 John Dorsey <john+@cs.cmu.edu> | ||
10 | * Definitions for Neponset added. | ||
11 | */ | ||
12 | #ifndef __ASM_ARCH_NEPONSET_H | ||
13 | #define __ASM_ARCH_NEPONSET_H | ||
14 | |||
15 | /* | ||
16 | * Neponset definitions: | ||
17 | */ | ||
18 | |||
19 | #define NEPONSET_CPLD_BASE (0x10000000) | ||
20 | #define Nep_p2v( x ) ((x) - NEPONSET_CPLD_BASE + 0xf3000000) | ||
21 | #define Nep_v2p( x ) ((x) - 0xf3000000 + NEPONSET_CPLD_BASE) | ||
22 | |||
23 | #define _IRR 0x10000024 /* Interrupt Reason Register */ | ||
24 | #define _AUD_CTL 0x100000c0 /* Audio controls (RW) */ | ||
25 | #define _MDM_CTL_0 0x100000b0 /* Modem control 0 (RW) */ | ||
26 | #define _MDM_CTL_1 0x100000b4 /* Modem control 1 (RW) */ | ||
27 | #define _NCR_0 0x100000a0 /* Control Register (RW) */ | ||
28 | #define _KP_X_OUT 0x10000090 /* Keypad row write (RW) */ | ||
29 | #define _KP_Y_IN 0x10000080 /* Keypad column read (RO) */ | ||
30 | #define _SWPK 0x10000020 /* Switch pack (RO) */ | ||
31 | #define _WHOAMI 0x10000000 /* System ID Register (RO) */ | ||
32 | |||
33 | #define _LEDS 0x10000010 /* LEDs [31:0] (WO) */ | ||
34 | |||
35 | #define IRR (*((volatile u_char *) Nep_p2v(_IRR))) | ||
36 | #define AUD_CTL (*((volatile u_char *) Nep_p2v(_AUD_CTL))) | ||
37 | #define MDM_CTL_0 (*((volatile u_char *) Nep_p2v(_MDM_CTL_0))) | ||
38 | #define MDM_CTL_1 (*((volatile u_char *) Nep_p2v(_MDM_CTL_1))) | ||
39 | #define NCR_0 (*((volatile u_char *) Nep_p2v(_NCR_0))) | ||
40 | #define KP_X_OUT (*((volatile u_char *) Nep_p2v(_KP_X_OUT))) | ||
41 | #define KP_Y_IN (*((volatile u_char *) Nep_p2v(_KP_Y_IN))) | ||
42 | #define SWPK (*((volatile u_char *) Nep_p2v(_SWPK))) | ||
43 | #define WHOAMI (*((volatile u_char *) Nep_p2v(_WHOAMI))) | ||
44 | |||
45 | #define LEDS (*((volatile Word *) Nep_p2v(_LEDS))) | ||
46 | |||
47 | #define IRR_ETHERNET (1<<0) | ||
48 | #define IRR_USAR (1<<1) | ||
49 | #define IRR_SA1111 (1<<2) | ||
50 | |||
51 | #define AUD_SEL_1341 (1<<0) | ||
52 | #define AUD_MUTE_1341 (1<<1) | ||
53 | |||
54 | #define MDM_CTL0_RTS1 (1 << 0) | ||
55 | #define MDM_CTL0_DTR1 (1 << 1) | ||
56 | #define MDM_CTL0_RTS2 (1 << 2) | ||
57 | #define MDM_CTL0_DTR2 (1 << 3) | ||
58 | |||
59 | #define MDM_CTL1_CTS1 (1 << 0) | ||
60 | #define MDM_CTL1_DSR1 (1 << 1) | ||
61 | #define MDM_CTL1_DCD1 (1 << 2) | ||
62 | #define MDM_CTL1_CTS2 (1 << 3) | ||
63 | #define MDM_CTL1_DSR2 (1 << 4) | ||
64 | #define MDM_CTL1_DCD2 (1 << 5) | ||
65 | |||
66 | #define NCR_GP01_OFF (1<<0) | ||
67 | #define NCR_TP_PWR_EN (1<<1) | ||
68 | #define NCR_MS_PWR_EN (1<<2) | ||
69 | #define NCR_ENET_OSC_EN (1<<3) | ||
70 | #define NCR_SPI_KB_WK_UP (1<<4) | ||
71 | #define NCR_A0VPP (1<<5) | ||
72 | #define NCR_A1VPP (1<<6) | ||
73 | |||
74 | #endif | ||
diff --git a/include/asm-arm/arch-sa1100/param.h b/include/asm-arm/arch-sa1100/param.h new file mode 100644 index 000000000000..867488909ecd --- /dev/null +++ b/include/asm-arm/arch-sa1100/param.h | |||
@@ -0,0 +1,3 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-sa1100/param.h | ||
3 | */ | ||
diff --git a/include/asm-arm/arch-sa1100/shannon.h b/include/asm-arm/arch-sa1100/shannon.h new file mode 100644 index 000000000000..ec27d6e12140 --- /dev/null +++ b/include/asm-arm/arch-sa1100/shannon.h | |||
@@ -0,0 +1,43 @@ | |||
1 | #ifndef _INCLUDE_SHANNON_H | ||
2 | #define _INCLUDE_SHANNON_H | ||
3 | |||
4 | /* taken from comp.os.inferno Tue, 12 Sep 2000 09:21:50 GMT, | ||
5 | * written by <forsyth@vitanuova.com> */ | ||
6 | |||
7 | #define SHANNON_GPIO_SPI_FLASH GPIO_GPIO (0) /* Output - Driven low, enables SPI to flash */ | ||
8 | #define SHANNON_GPIO_SPI_DSP GPIO_GPIO (1) /* Output - Driven low, enables SPI to DSP */ | ||
9 | /* lcd lower = GPIO 2-9 */ | ||
10 | #define SHANNON_GPIO_SPI_OUTPUT GPIO_GPIO (10) /* Output - SPI output to DSP */ | ||
11 | #define SHANNON_GPIO_SPI_INPUT GPIO_GPIO (11) /* Input - SPI input from DSP */ | ||
12 | #define SHANNON_GPIO_SPI_CLOCK GPIO_GPIO (12) /* Output - Clock for SPI */ | ||
13 | #define SHANNON_GPIO_SPI_FRAME GPIO_GPIO (13) /* Output - Frame marker - not used */ | ||
14 | #define SHANNON_GPIO_SPI_RTS GPIO_GPIO (14) /* Input - SPI Ready to Send */ | ||
15 | #define SHANNON_IRQ_GPIO_SPI_RTS IRQ_GPIO14 | ||
16 | #define SHANNON_GPIO_SPI_CTS GPIO_GPIO (15) /* Output - SPI Clear to Send */ | ||
17 | #define SHANNON_GPIO_IRQ_CODEC GPIO_GPIO (16) /* in, irq from ucb1200 */ | ||
18 | #define SHANNON_IRQ_GPIO_IRQ_CODEC IRQ_GPIO16 | ||
19 | #define SHANNON_GPIO_DSP_RESET GPIO_GPIO (17) /* Output - Drive low to reset the DSP */ | ||
20 | #define SHANNON_GPIO_CODEC_RESET GPIO_GPIO (18) /* Output - Drive low to reset the UCB1x00 */ | ||
21 | #define SHANNON_GPIO_U3_RTS GPIO_GPIO (19) /* ?? */ | ||
22 | #define SHANNON_GPIO_U3_CTS GPIO_GPIO (20) /* ?? */ | ||
23 | #define SHANNON_GPIO_SENSE_12V GPIO_GPIO (21) /* Input, 12v flash unprotect detected */ | ||
24 | #define SHANNON_GPIO_DISP_EN GPIO_GPIO (22) /* out */ | ||
25 | /* XXX GPIO 23 unaccounted for */ | ||
26 | #define SHANNON_GPIO_EJECT_0 GPIO_GPIO (24) /* in */ | ||
27 | #define SHANNON_IRQ_GPIO_EJECT_0 IRQ_GPIO24 | ||
28 | #define SHANNON_GPIO_EJECT_1 GPIO_GPIO (25) /* in */ | ||
29 | #define SHANNON_IRQ_GPIO_EJECT_1 IRQ_GPIO25 | ||
30 | #define SHANNON_GPIO_RDY_0 GPIO_GPIO (26) /* in */ | ||
31 | #define SHANNON_IRQ_GPIO_RDY_0 IRQ_GPIO26 | ||
32 | #define SHANNON_GPIO_RDY_1 GPIO_GPIO (27) /* in */ | ||
33 | #define SHANNON_IRQ_GPIO_RDY_1 IRQ_GPIO27 | ||
34 | |||
35 | /* MCP UCB codec GPIO pins... */ | ||
36 | |||
37 | #define SHANNON_UCB_GPIO_BACKLIGHT 9 | ||
38 | #define SHANNON_UCB_GPIO_BRIGHT_MASK 7 | ||
39 | #define SHANNON_UCB_GPIO_BRIGHT 6 | ||
40 | #define SHANNON_UCB_GPIO_CONTRAST_MASK 0x3f | ||
41 | #define SHANNON_UCB_GPIO_CONTRAST 0 | ||
42 | |||
43 | #endif | ||
diff --git a/include/asm-arm/arch-sa1100/simpad.h b/include/asm-arm/arch-sa1100/simpad.h new file mode 100644 index 000000000000..034301d23f60 --- /dev/null +++ b/include/asm-arm/arch-sa1100/simpad.h | |||
@@ -0,0 +1,112 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-sa1100/simpad.h | ||
3 | * | ||
4 | * based of assabet.h same as HUW_Webpanel | ||
5 | * | ||
6 | * This file contains the hardware specific definitions for SIMpad | ||
7 | * | ||
8 | * 2001/05/14 Juergen Messerer <juergen.messerer@freesurf.ch> | ||
9 | */ | ||
10 | |||
11 | #ifndef __ASM_ARCH_SIMPAD_H | ||
12 | #define __ASM_ARCH_SIMPAD_H | ||
13 | |||
14 | |||
15 | #define GPIO_UART1_RTS GPIO_GPIO14 | ||
16 | #define GPIO_UART1_DTR GPIO_GPIO7 | ||
17 | #define GPIO_UART1_CTS GPIO_GPIO8 | ||
18 | #define GPIO_UART1_DCD GPIO_GPIO23 | ||
19 | #define GPIO_UART1_DSR GPIO_GPIO6 | ||
20 | |||
21 | #define GPIO_UART3_RTS GPIO_GPIO12 | ||
22 | #define GPIO_UART3_DTR GPIO_GPIO16 | ||
23 | #define GPIO_UART3_CTS GPIO_GPIO13 | ||
24 | #define GPIO_UART3_DCD GPIO_GPIO18 | ||
25 | #define GPIO_UART3_DSR GPIO_GPIO17 | ||
26 | |||
27 | #define GPIO_POWER_BUTTON GPIO_GPIO0 | ||
28 | #define GPIO_UCB1300_IRQ GPIO_GPIO22 /* UCB GPIO and touchscreen */ | ||
29 | |||
30 | #define IRQ_UART1_CTS IRQ_GPIO15 | ||
31 | #define IRQ_UART1_DCD GPIO_GPIO23 | ||
32 | #define IRQ_UART1_DSR GPIO_GPIO6 | ||
33 | #define IRQ_UART3_CTS GPIO_GPIO13 | ||
34 | #define IRQ_UART3_DCD GPIO_GPIO18 | ||
35 | #define IRQ_UART3_DSR GPIO_GPIO17 | ||
36 | |||
37 | #define IRQ_GPIO_UCB1300_IRQ IRQ_GPIO22 | ||
38 | #define IRQ_GPIO_POWER_BUTTON IRQ_GPIO0 | ||
39 | |||
40 | |||
41 | /*--- PCMCIA ---*/ | ||
42 | #define GPIO_CF_CD GPIO_GPIO24 | ||
43 | #define GPIO_CF_IRQ GPIO_GPIO1 | ||
44 | #define IRQ_GPIO_CF_IRQ IRQ_GPIO1 | ||
45 | #define IRQ_GPIO_CF_CD IRQ_GPIO24 | ||
46 | |||
47 | /*--- SmartCard ---*/ | ||
48 | #define GPIO_SMART_CARD GPIO_GPIO10 | ||
49 | #define IRQ_GPIO_SMARD_CARD IRQ_GPIO10 | ||
50 | |||
51 | // CS3 Latch is write only, a shadow is necessary | ||
52 | |||
53 | #define CS3BUSTYPE unsigned volatile long | ||
54 | #define CS3_BASE 0xf1000000 | ||
55 | |||
56 | #define VCC_5V_EN 0x0001 // For 5V PCMCIA | ||
57 | #define VCC_3V_EN 0x0002 // FOR 3.3V PCMCIA | ||
58 | #define EN1 0x0004 // This is only for EPROM's | ||
59 | #define EN0 0x0008 // Both should be enable for 3.3V or 5V | ||
60 | #define DISPLAY_ON 0x0010 | ||
61 | #define PCMCIA_BUFF_DIS 0x0020 | ||
62 | #define MQ_RESET 0x0040 | ||
63 | #define PCMCIA_RESET 0x0080 | ||
64 | #define DECT_POWER_ON 0x0100 | ||
65 | #define IRDA_SD 0x0200 // Shutdown for powersave | ||
66 | #define RS232_ON 0x0400 | ||
67 | #define SD_MEDIAQ 0x0800 // Shutdown for powersave | ||
68 | #define LED2_ON 0x1000 | ||
69 | #define IRDA_MODE 0x2000 // Fast/Slow IrDA mode | ||
70 | #define ENABLE_5V 0x4000 // Enable 5V circuit | ||
71 | #define RESET_SIMCARD 0x8000 | ||
72 | |||
73 | #define RS232_ENABLE 0x0440 | ||
74 | #define PCMCIAMASK 0x402f | ||
75 | |||
76 | |||
77 | struct simpad_battery { | ||
78 | unsigned char ac_status; /* line connected yes/no */ | ||
79 | unsigned char status; /* battery loading yes/no */ | ||
80 | unsigned char percentage; /* percentage loaded */ | ||
81 | unsigned short life; /* life till empty */ | ||
82 | }; | ||
83 | |||
84 | /* These should match the apm_bios.h definitions */ | ||
85 | #define SIMPAD_AC_STATUS_AC_OFFLINE 0x00 | ||
86 | #define SIMPAD_AC_STATUS_AC_ONLINE 0x01 | ||
87 | #define SIMPAD_AC_STATUS_AC_BACKUP 0x02 /* What does this mean? */ | ||
88 | #define SIMPAD_AC_STATUS_AC_UNKNOWN 0xff | ||
89 | |||
90 | /* These bitfields are rarely "or'd" together */ | ||
91 | #define SIMPAD_BATT_STATUS_HIGH 0x01 | ||
92 | #define SIMPAD_BATT_STATUS_LOW 0x02 | ||
93 | #define SIMPAD_BATT_STATUS_CRITICAL 0x04 | ||
94 | #define SIMPAD_BATT_STATUS_CHARGING 0x08 | ||
95 | #define SIMPAD_BATT_STATUS_CHARGE_MAIN 0x10 | ||
96 | #define SIMPAD_BATT_STATUS_DEAD 0x20 /* Battery will not charge */ | ||
97 | #define SIMPAD_BATT_NOT_INSTALLED 0x20 /* For expansion pack batteries */ | ||
98 | #define SIMPAD_BATT_STATUS_FULL 0x40 /* Battery fully charged (and connected to AC) */ | ||
99 | #define SIMPAD_BATT_STATUS_NOBATT 0x80 | ||
100 | #define SIMPAD_BATT_STATUS_UNKNOWN 0xff | ||
101 | |||
102 | extern int simpad_get_battery(struct simpad_battery* ); | ||
103 | |||
104 | #endif // __ASM_ARCH_SIMPAD_H | ||
105 | |||
106 | |||
107 | |||
108 | |||
109 | |||
110 | |||
111 | |||
112 | |||
diff --git a/include/asm-arm/arch-sa1100/system.h b/include/asm-arm/arch-sa1100/system.h new file mode 100644 index 000000000000..6f52118ba1a4 --- /dev/null +++ b/include/asm-arm/arch-sa1100/system.h | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-sa1100/system.h | ||
3 | * | ||
4 | * Copyright (c) 1999 Nicolas Pitre <nico@cam.org> | ||
5 | */ | ||
6 | #include <linux/config.h> | ||
7 | |||
8 | static inline void arch_idle(void) | ||
9 | { | ||
10 | cpu_do_idle(); | ||
11 | } | ||
12 | |||
13 | static inline void arch_reset(char mode) | ||
14 | { | ||
15 | if (mode == 's') { | ||
16 | /* Jump into ROM at address 0 */ | ||
17 | cpu_reset(0); | ||
18 | } else { | ||
19 | /* Use on-chip reset capability */ | ||
20 | RSRR = RSRR_SWR; | ||
21 | } | ||
22 | } | ||
diff --git a/include/asm-arm/arch-sa1100/timex.h b/include/asm-arm/arch-sa1100/timex.h new file mode 100644 index 000000000000..837be9b797dd --- /dev/null +++ b/include/asm-arm/arch-sa1100/timex.h | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-sa1100/timex.h | ||
3 | * | ||
4 | * SA1100 architecture timex specifications | ||
5 | * | ||
6 | * Copyright (C) 1998 | ||
7 | */ | ||
8 | |||
9 | /* | ||
10 | * SA1100 timer | ||
11 | */ | ||
12 | #define CLOCK_TICK_RATE 3686400 | ||
diff --git a/include/asm-arm/arch-sa1100/uncompress.h b/include/asm-arm/arch-sa1100/uncompress.h new file mode 100644 index 000000000000..43453501ee66 --- /dev/null +++ b/include/asm-arm/arch-sa1100/uncompress.h | |||
@@ -0,0 +1,53 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-brutus/uncompress.h | ||
3 | * | ||
4 | * (C) 1999 Nicolas Pitre <nico@cam.org> | ||
5 | * | ||
6 | * Reorganised to be machine independent. | ||
7 | */ | ||
8 | |||
9 | #include "hardware.h" | ||
10 | |||
11 | /* | ||
12 | * The following code assumes the serial port has already been | ||
13 | * initialized by the bootloader. We search for the first enabled | ||
14 | * port in the most probable order. If you didn't setup a port in | ||
15 | * your bootloader then nothing will appear (which might be desired). | ||
16 | */ | ||
17 | |||
18 | #define UART(x) (*(volatile unsigned long *)(serial_port + (x))) | ||
19 | |||
20 | static void putstr( const char *s ) | ||
21 | { | ||
22 | unsigned long serial_port; | ||
23 | |||
24 | do { | ||
25 | serial_port = _Ser3UTCR0; | ||
26 | if (UART(UTCR3) & UTCR3_TXE) break; | ||
27 | serial_port = _Ser1UTCR0; | ||
28 | if (UART(UTCR3) & UTCR3_TXE) break; | ||
29 | serial_port = _Ser2UTCR0; | ||
30 | if (UART(UTCR3) & UTCR3_TXE) break; | ||
31 | return; | ||
32 | } while (0); | ||
33 | |||
34 | for (; *s; s++) { | ||
35 | /* wait for space in the UART's transmitter */ | ||
36 | while (!(UART(UTSR1) & UTSR1_TNF)); | ||
37 | |||
38 | /* send the character out. */ | ||
39 | UART(UTDR) = *s; | ||
40 | |||
41 | /* if a LF, also do CR... */ | ||
42 | if (*s == 10) { | ||
43 | while (!(UART(UTSR1) & UTSR1_TNF)); | ||
44 | UART(UTDR) = 13; | ||
45 | } | ||
46 | } | ||
47 | } | ||
48 | |||
49 | /* | ||
50 | * Nothing to do for these | ||
51 | */ | ||
52 | #define arch_decomp_setup() | ||
53 | #define arch_decomp_wdog() | ||
diff --git a/include/asm-arm/arch-sa1100/vmalloc.h b/include/asm-arm/arch-sa1100/vmalloc.h new file mode 100644 index 000000000000..135bc9493c06 --- /dev/null +++ b/include/asm-arm/arch-sa1100/vmalloc.h | |||
@@ -0,0 +1,15 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-sa1100/vmalloc.h | ||
3 | */ | ||
4 | |||
5 | /* | ||
6 | * Just any arbitrary offset to the start of the vmalloc VM area: the | ||
7 | * current 8MB value just means that there will be a 8MB "hole" after the | ||
8 | * physical memory until the kernel virtual memory starts. That means that | ||
9 | * any out-of-bounds memory accesses will hopefully be caught. | ||
10 | * The vmalloc() routines leaves a hole of 4kB between each vmalloced | ||
11 | * area for the same reason. ;) | ||
12 | */ | ||
13 | #define VMALLOC_OFFSET (8*1024*1024) | ||
14 | #define VMALLOC_START (((unsigned long)high_memory + VMALLOC_OFFSET) & ~(VMALLOC_OFFSET-1)) | ||
15 | #define VMALLOC_END (0xe8000000) | ||
diff --git a/include/asm-arm/arch-shark/debug-macro.S b/include/asm-arm/arch-shark/debug-macro.S new file mode 100644 index 000000000000..7cb37f78825e --- /dev/null +++ b/include/asm-arm/arch-shark/debug-macro.S | |||
@@ -0,0 +1,31 @@ | |||
1 | /* linux/include/asm-arm/arch-shark/debug-macro.S | ||
2 | * | ||
3 | * Debugging macro include header | ||
4 | * | ||
5 | * Copyright (C) 1994-1999 Russell King | ||
6 | * Moved from linux/arch/arm/kernel/debug.S by Ben Dooks | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | * | ||
12 | */ | ||
13 | |||
14 | .macro addruart,rx | ||
15 | mov \rx, #0xe0000000 | ||
16 | orr \rx, \rx, #0x000003f8 | ||
17 | .endm | ||
18 | |||
19 | .macro senduart,rd,rx | ||
20 | strb \rd, [\rx] | ||
21 | .endm | ||
22 | |||
23 | .macro busyuart,rd,rx | ||
24 | mov \rd, #0 | ||
25 | 1001: add \rd, \rd, #1 | ||
26 | teq \rd, #0x10000 | ||
27 | bne 1001b | ||
28 | .endm | ||
29 | |||
30 | .macro waituart,rd,rx | ||
31 | .endm | ||
diff --git a/include/asm-arm/arch-shark/dma.h b/include/asm-arm/arch-shark/dma.h new file mode 100644 index 000000000000..fc985d5e62af --- /dev/null +++ b/include/asm-arm/arch-shark/dma.h | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-shark/dma.h | ||
3 | * | ||
4 | * by Alexander Schulz | ||
5 | */ | ||
6 | #ifndef __ASM_ARCH_DMA_H | ||
7 | #define __ASM_ARCH_DMA_H | ||
8 | |||
9 | /* Use only the lowest 4MB, nothing else works. | ||
10 | * The rest is not DMAable. See dev / .properties | ||
11 | * in OpenFirmware. | ||
12 | */ | ||
13 | #define MAX_DMA_ADDRESS 0xC0400000 | ||
14 | #define MAX_DMA_CHANNELS 8 | ||
15 | #define DMA_ISA_CASCADE 4 | ||
16 | |||
17 | #endif /* _ASM_ARCH_DMA_H */ | ||
18 | |||
diff --git a/include/asm-arm/arch-shark/entry-macro.S b/include/asm-arm/arch-shark/entry-macro.S new file mode 100644 index 000000000000..a924f27fb8d9 --- /dev/null +++ b/include/asm-arm/arch-shark/entry-macro.S | |||
@@ -0,0 +1,35 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-shark/entry-macro.S | ||
3 | * | ||
4 | * Low-level IRQ helper macros for Shark platform | ||
5 | * | ||
6 | * This file is licensed under the terms of the GNU General Public | ||
7 | * License version 2. This program is licensed "as is" without any | ||
8 | * warranty of any kind, whether express or implied. | ||
9 | */ | ||
10 | .macro disable_fiq | ||
11 | .endm | ||
12 | |||
13 | .macro get_irqnr_and_base, irqnr, irqstat, base, tmp | ||
14 | mov r4, #0xe0000000 | ||
15 | |||
16 | mov \irqstat, #0x0C | ||
17 | strb \irqstat, [r4, #0x20] @outb(0x0C, 0x20) /* Poll command */ | ||
18 | ldrb \irqnr, [r4, #0x20] @irq = inb(0x20) & 7 | ||
19 | and \irqstat, \irqnr, #0x80 | ||
20 | teq \irqstat, #0 | ||
21 | beq 43f | ||
22 | and \irqnr, \irqnr, #7 | ||
23 | teq \irqnr, #2 | ||
24 | bne 44f | ||
25 | 43: mov \irqstat, #0x0C | ||
26 | strb \irqstat, [r4, #0xa0] @outb(0x0C, 0xA0) /* Poll command */ | ||
27 | ldrb \irqnr, [r4, #0xa0] @irq = (inb(0xA0) & 7) + 8 | ||
28 | and \irqstat, \irqnr, #0x80 | ||
29 | teq \irqstat, #0 | ||
30 | beq 44f | ||
31 | and \irqnr, \irqnr, #7 | ||
32 | add \irqnr, \irqnr, #8 | ||
33 | 44: teq \irqstat, #0 | ||
34 | .endm | ||
35 | |||
diff --git a/include/asm-arm/arch-shark/hardware.h b/include/asm-arm/arch-shark/hardware.h new file mode 100644 index 000000000000..4d35f8c154c3 --- /dev/null +++ b/include/asm-arm/arch-shark/hardware.h | |||
@@ -0,0 +1,57 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-shark/hardware.h | ||
3 | * | ||
4 | * by Alexander Schulz | ||
5 | * | ||
6 | * derived from: | ||
7 | * linux/include/asm-arm/arch-ebsa110/hardware.h | ||
8 | * Copyright (C) 1996-1999 Russell King. | ||
9 | */ | ||
10 | #ifndef __ASM_ARCH_HARDWARE_H | ||
11 | #define __ASM_ARCH_HARDWARE_H | ||
12 | |||
13 | #ifndef __ASSEMBLY__ | ||
14 | |||
15 | /* | ||
16 | * Mapping areas | ||
17 | */ | ||
18 | #define IO_BASE 0xe0000000 | ||
19 | |||
20 | /* | ||
21 | * RAM definitions | ||
22 | */ | ||
23 | #define FLUSH_BASE_PHYS 0x80000000 | ||
24 | |||
25 | #else | ||
26 | |||
27 | #define IO_BASE 0 | ||
28 | |||
29 | #endif | ||
30 | |||
31 | #define IO_SIZE 0x08000000 | ||
32 | #define IO_START 0x40000000 | ||
33 | #define ROMCARD_SIZE 0x08000000 | ||
34 | #define ROMCARD_START 0x10000000 | ||
35 | |||
36 | #define FLUSH_BASE 0xdf000000 | ||
37 | #define PCIO_BASE 0xe0000000 | ||
38 | |||
39 | |||
40 | /* defines for the Framebuffer */ | ||
41 | #define FB_START 0x06000000 | ||
42 | #define FB_SIZE 0x01000000 | ||
43 | |||
44 | #define UNCACHEABLE_ADDR 0xdf010000 | ||
45 | |||
46 | #define SEQUOIA_LED_GREEN (1<<6) | ||
47 | #define SEQUOIA_LED_AMBER (1<<5) | ||
48 | #define SEQUOIA_LED_BACK (1<<7) | ||
49 | |||
50 | #define pcibios_assign_all_busses() 1 | ||
51 | |||
52 | #define PCIBIOS_MIN_IO 0x6000 | ||
53 | #define PCIBIOS_MIN_MEM 0x50000000 | ||
54 | #define PCIMEM_BASE 0xe8000000 | ||
55 | |||
56 | #endif | ||
57 | |||
diff --git a/include/asm-arm/arch-shark/io.h b/include/asm-arm/arch-shark/io.h new file mode 100644 index 000000000000..1e7f26bc2e1d --- /dev/null +++ b/include/asm-arm/arch-shark/io.h | |||
@@ -0,0 +1,199 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-shark/io.h | ||
3 | * | ||
4 | * by Alexander Schulz | ||
5 | * | ||
6 | * derived from: | ||
7 | * linux/include/asm-arm/arch-ebsa110/io.h | ||
8 | * Copyright (C) 1997,1998 Russell King | ||
9 | */ | ||
10 | |||
11 | #ifndef __ASM_ARM_ARCH_IO_H | ||
12 | #define __ASM_ARM_ARCH_IO_H | ||
13 | |||
14 | #define IO_SPACE_LIMIT 0xffffffff | ||
15 | |||
16 | /* | ||
17 | * We use two different types of addressing - PC style addresses, and ARM | ||
18 | * addresses. PC style accesses the PC hardware with the normal PC IO | ||
19 | * addresses, eg 0x3f8 for serial#1. ARM addresses are 0x80000000+ | ||
20 | * and are translated to the start of IO. | ||
21 | */ | ||
22 | #define __PORT_PCIO(x) (!((x) & 0x80000000)) | ||
23 | |||
24 | /* | ||
25 | * Dynamic IO functions - let the compiler | ||
26 | * optimize the expressions | ||
27 | */ | ||
28 | #define DECLARE_DYN_OUT(fnsuffix,instr) \ | ||
29 | static inline void __out##fnsuffix (unsigned int value, unsigned int port) \ | ||
30 | { \ | ||
31 | unsigned long temp; \ | ||
32 | __asm__ __volatile__( \ | ||
33 | "tst %2, #0x80000000\n\t" \ | ||
34 | "mov %0, %4\n\t" \ | ||
35 | "addeq %0, %0, %3\n\t" \ | ||
36 | "str" instr " %1, [%0, %2] @ out" #fnsuffix \ | ||
37 | : "=&r" (temp) \ | ||
38 | : "r" (value), "r" (port), "Ir" (PCIO_BASE - IO_BASE), "Ir" (IO_BASE) \ | ||
39 | : "cc"); \ | ||
40 | } | ||
41 | |||
42 | #define DECLARE_DYN_IN(sz,fnsuffix,instr) \ | ||
43 | static inline unsigned sz __in##fnsuffix (unsigned int port) \ | ||
44 | { \ | ||
45 | unsigned long temp, value; \ | ||
46 | __asm__ __volatile__( \ | ||
47 | "tst %2, #0x80000000\n\t" \ | ||
48 | "mov %0, %4\n\t" \ | ||
49 | "addeq %0, %0, %3\n\t" \ | ||
50 | "ldr" instr " %1, [%0, %2] @ in" #fnsuffix \ | ||
51 | : "=&r" (temp), "=r" (value) \ | ||
52 | : "r" (port), "Ir" (PCIO_BASE - IO_BASE), "Ir" (IO_BASE) \ | ||
53 | : "cc"); \ | ||
54 | return (unsigned sz)value; \ | ||
55 | } | ||
56 | |||
57 | static inline unsigned int __ioaddr (unsigned int port) \ | ||
58 | { \ | ||
59 | if (__PORT_PCIO(port)) \ | ||
60 | return (unsigned int)(PCIO_BASE + (port)); \ | ||
61 | else \ | ||
62 | return (unsigned int)(IO_BASE + (port)); \ | ||
63 | } | ||
64 | |||
65 | #define DECLARE_IO(sz,fnsuffix,instr) \ | ||
66 | DECLARE_DYN_OUT(fnsuffix,instr) \ | ||
67 | DECLARE_DYN_IN(sz,fnsuffix,instr) | ||
68 | |||
69 | DECLARE_IO(char,b,"b") | ||
70 | DECLARE_IO(short,w,"h") | ||
71 | DECLARE_IO(long,l,"") | ||
72 | |||
73 | #undef DECLARE_IO | ||
74 | #undef DECLARE_DYN_OUT | ||
75 | #undef DECLARE_DYN_IN | ||
76 | |||
77 | /* | ||
78 | * Constant address IO functions | ||
79 | * | ||
80 | * These have to be macros for the 'J' constraint to work - | ||
81 | * +/-4096 immediate operand. | ||
82 | */ | ||
83 | #define __outbc(value,port) \ | ||
84 | ({ \ | ||
85 | if (__PORT_PCIO((port))) \ | ||
86 | __asm__ __volatile__( \ | ||
87 | "strb %0, [%1, %2] @ outbc" \ | ||
88 | : : "r" (value), "r" (PCIO_BASE), "Jr" (port)); \ | ||
89 | else \ | ||
90 | __asm__ __volatile__( \ | ||
91 | "strb %0, [%1, %2] @ outbc" \ | ||
92 | : : "r" (value), "r" (IO_BASE), "r" (port)); \ | ||
93 | }) | ||
94 | |||
95 | #define __inbc(port) \ | ||
96 | ({ \ | ||
97 | unsigned char result; \ | ||
98 | if (__PORT_PCIO((port))) \ | ||
99 | __asm__ __volatile__( \ | ||
100 | "ldrb %0, [%1, %2] @ inbc" \ | ||
101 | : "=r" (result) : "r" (PCIO_BASE), "Jr" (port)); \ | ||
102 | else \ | ||
103 | __asm__ __volatile__( \ | ||
104 | "ldrb %0, [%1, %2] @ inbc" \ | ||
105 | : "=r" (result) : "r" (IO_BASE), "r" (port)); \ | ||
106 | result; \ | ||
107 | }) | ||
108 | |||
109 | #define __outwc(value,port) \ | ||
110 | ({ \ | ||
111 | unsigned long v = value; \ | ||
112 | if (__PORT_PCIO((port))) \ | ||
113 | __asm__ __volatile__( \ | ||
114 | "strh %0, [%1, %2] @ outwc" \ | ||
115 | : : "r" (v|v<<16), "r" (PCIO_BASE), "Jr" (port)); \ | ||
116 | else \ | ||
117 | __asm__ __volatile__( \ | ||
118 | "strh %0, [%1, %2] @ outwc" \ | ||
119 | : : "r" (v|v<<16), "r" (IO_BASE), "r" (port)); \ | ||
120 | }) | ||
121 | |||
122 | #define __inwc(port) \ | ||
123 | ({ \ | ||
124 | unsigned short result; \ | ||
125 | if (__PORT_PCIO((port))) \ | ||
126 | __asm__ __volatile__( \ | ||
127 | "ldrh %0, [%1, %2] @ inwc" \ | ||
128 | : "=r" (result) : "r" (PCIO_BASE), "Jr" (port)); \ | ||
129 | else \ | ||
130 | __asm__ __volatile__( \ | ||
131 | "ldrh %0, [%1, %2] @ inwc" \ | ||
132 | : "=r" (result) : "r" (IO_BASE), "r" (port)); \ | ||
133 | result & 0xffff; \ | ||
134 | }) | ||
135 | |||
136 | #define __outlc(value,port) \ | ||
137 | ({ \ | ||
138 | unsigned long v = value; \ | ||
139 | if (__PORT_PCIO((port))) \ | ||
140 | __asm__ __volatile__( \ | ||
141 | "str %0, [%1, %2] @ outlc" \ | ||
142 | : : "r" (v), "r" (PCIO_BASE), "Jr" (port)); \ | ||
143 | else \ | ||
144 | __asm__ __volatile__( \ | ||
145 | "str %0, [%1, %2] @ outlc" \ | ||
146 | : : "r" (v), "r" (IO_BASE), "r" (port)); \ | ||
147 | }) | ||
148 | |||
149 | #define __inlc(port) \ | ||
150 | ({ \ | ||
151 | unsigned long result; \ | ||
152 | if (__PORT_PCIO((port))) \ | ||
153 | __asm__ __volatile__( \ | ||
154 | "ldr %0, [%1, %2] @ inlc" \ | ||
155 | : "=r" (result) : "r" (PCIO_BASE), "Jr" (port)); \ | ||
156 | else \ | ||
157 | __asm__ __volatile__( \ | ||
158 | "ldr %0, [%1, %2] @ inlc" \ | ||
159 | : "=r" (result) : "r" (IO_BASE), "r" (port)); \ | ||
160 | result; \ | ||
161 | }) | ||
162 | |||
163 | #define __ioaddrc(port) \ | ||
164 | ({ \ | ||
165 | unsigned long addr; \ | ||
166 | if (__PORT_PCIO((port))) \ | ||
167 | addr = PCIO_BASE + (port); \ | ||
168 | else \ | ||
169 | addr = IO_BASE + (port); \ | ||
170 | addr; \ | ||
171 | }) | ||
172 | |||
173 | #define __mem_pci(addr) (addr) | ||
174 | |||
175 | #define inb(p) (__builtin_constant_p((p)) ? __inbc(p) : __inb(p)) | ||
176 | #define inw(p) (__builtin_constant_p((p)) ? __inwc(p) : __inw(p)) | ||
177 | #define inl(p) (__builtin_constant_p((p)) ? __inlc(p) : __inl(p)) | ||
178 | #define outb(v,p) (__builtin_constant_p((p)) ? __outbc(v,p) : __outb(v,p)) | ||
179 | #define outw(v,p) (__builtin_constant_p((p)) ? __outwc(v,p) : __outw(v,p)) | ||
180 | #define outl(v,p) (__builtin_constant_p((p)) ? __outlc(v,p) : __outl(v,p)) | ||
181 | |||
182 | /* | ||
183 | * Translated address IO functions | ||
184 | * | ||
185 | * IO address has already been translated to a virtual address | ||
186 | */ | ||
187 | #define outb_t(v,p) \ | ||
188 | (*(volatile unsigned char *)(p) = (v)) | ||
189 | |||
190 | #define inb_t(p) \ | ||
191 | (*(volatile unsigned char *)(p)) | ||
192 | |||
193 | #define outl_t(v,p) \ | ||
194 | (*(volatile unsigned long *)(p) = (v)) | ||
195 | |||
196 | #define inl_t(p) \ | ||
197 | (*(volatile unsigned long *)(p)) | ||
198 | |||
199 | #endif | ||
diff --git a/include/asm-arm/arch-shark/irqs.h b/include/asm-arm/arch-shark/irqs.h new file mode 100644 index 000000000000..b36cc975b290 --- /dev/null +++ b/include/asm-arm/arch-shark/irqs.h | |||
@@ -0,0 +1,13 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-shark/irqs.h | ||
3 | * | ||
4 | * by Alexander Schulz | ||
5 | */ | ||
6 | |||
7 | #define NR_IRQS 16 | ||
8 | |||
9 | #define IRQ_ISA_KEYBOARD 1 | ||
10 | #define RTC_IRQ 8 | ||
11 | #define I8042_KBD_IRQ 1 | ||
12 | #define I8042_AUX_IRQ 12 | ||
13 | #define IRQ_HARDDISK 14 | ||
diff --git a/include/asm-arm/arch-shark/memory.h b/include/asm-arm/arch-shark/memory.h new file mode 100644 index 000000000000..8ff956d25463 --- /dev/null +++ b/include/asm-arm/arch-shark/memory.h | |||
@@ -0,0 +1,42 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-shark/memory.h | ||
3 | * | ||
4 | * by Alexander Schulz | ||
5 | * | ||
6 | * derived from: | ||
7 | * linux/include/asm-arm/arch-ebsa110/memory.h | ||
8 | * Copyright (c) 1996-1999 Russell King. | ||
9 | */ | ||
10 | #ifndef __ASM_ARCH_MEMORY_H | ||
11 | #define __ASM_ARCH_MEMORY_H | ||
12 | |||
13 | #include <asm/sizes.h> | ||
14 | |||
15 | /* | ||
16 | * Physical DRAM offset. | ||
17 | */ | ||
18 | #define PHYS_OFFSET (0x08000000UL) | ||
19 | |||
20 | #ifndef __ASSEMBLY__ | ||
21 | |||
22 | static inline void __arch_adjust_zones(int node, unsigned long *zone_size, unsigned long *zhole_size) | ||
23 | { | ||
24 | if (node != 0) return; | ||
25 | /* Only the first 4 MB (=1024 Pages) are usable for DMA */ | ||
26 | zone_size[1] = zone_size[0] - 1024; | ||
27 | zone_size[0] = 1024; | ||
28 | zhole_size[1] = zhole_size[0]; | ||
29 | zhole_size[0] = 0; | ||
30 | } | ||
31 | |||
32 | #define arch_adjust_zones(node, size, holes) \ | ||
33 | __arch_adjust_zones(node, size, holes) | ||
34 | |||
35 | #define ISA_DMA_THRESHOLD (PHYS_OFFSET + SZ_4M - 1) | ||
36 | |||
37 | #endif | ||
38 | |||
39 | #define __virt_to_bus(x) __virt_to_phys(x) | ||
40 | #define __bus_to_virt(x) __phys_to_virt(x) | ||
41 | |||
42 | #endif | ||
diff --git a/include/asm-arm/arch-shark/param.h b/include/asm-arm/arch-shark/param.h new file mode 100644 index 000000000000..997eeb71de00 --- /dev/null +++ b/include/asm-arm/arch-shark/param.h | |||
@@ -0,0 +1,5 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-shark/param.h | ||
3 | * | ||
4 | * by Alexander Schulz | ||
5 | */ | ||
diff --git a/include/asm-arm/arch-shark/system.h b/include/asm-arm/arch-shark/system.h new file mode 100644 index 000000000000..f12d771ab4ce --- /dev/null +++ b/include/asm-arm/arch-shark/system.h | |||
@@ -0,0 +1,28 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-shark/system.h | ||
3 | * | ||
4 | * by Alexander Schulz | ||
5 | */ | ||
6 | #ifndef __ASM_ARCH_SYSTEM_H | ||
7 | #define __ASM_ARCH_SYSTEM_H | ||
8 | |||
9 | #include <asm/io.h> | ||
10 | |||
11 | static void arch_reset(char mode) | ||
12 | { | ||
13 | short temp; | ||
14 | local_irq_disable(); | ||
15 | /* Reset the Machine via pc[3] of the sequoia chipset */ | ||
16 | outw(0x09,0x24); | ||
17 | temp=inw(0x26); | ||
18 | temp = temp | (1<<3) | (1<<10); | ||
19 | outw(0x09,0x24); | ||
20 | outw(temp,0x26); | ||
21 | |||
22 | } | ||
23 | |||
24 | static inline void arch_idle(void) | ||
25 | { | ||
26 | } | ||
27 | |||
28 | #endif | ||
diff --git a/include/asm-arm/arch-shark/timex.h b/include/asm-arm/arch-shark/timex.h new file mode 100644 index 000000000000..0d02d255513b --- /dev/null +++ b/include/asm-arm/arch-shark/timex.h | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-shark/timex.h | ||
3 | * | ||
4 | * by Alexander Schulz | ||
5 | */ | ||
6 | |||
7 | #define CLOCK_TICK_RATE 1193180 | ||
diff --git a/include/asm-arm/arch-shark/uncompress.h b/include/asm-arm/arch-shark/uncompress.h new file mode 100644 index 000000000000..910a8e0a0ca5 --- /dev/null +++ b/include/asm-arm/arch-shark/uncompress.h | |||
@@ -0,0 +1,60 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-shark/uncompress.h | ||
3 | * by Alexander Schulz | ||
4 | * | ||
5 | * derived from: | ||
6 | * linux/include/asm-arm/arch-ebsa285/uncompress.h | ||
7 | * Copyright (C) 1996,1997,1998 Russell King | ||
8 | */ | ||
9 | |||
10 | #define SERIAL_BASE ((volatile unsigned char *)0x400003f8) | ||
11 | |||
12 | static __inline__ void putc(char c) | ||
13 | { | ||
14 | int t; | ||
15 | |||
16 | SERIAL_BASE[0] = c; | ||
17 | t=0x10000; | ||
18 | while (t--); | ||
19 | } | ||
20 | |||
21 | /* | ||
22 | * This does not append a newline | ||
23 | */ | ||
24 | static void putstr(const char *s) | ||
25 | { | ||
26 | while (*s) { | ||
27 | putc(*s); | ||
28 | if (*s == '\n') | ||
29 | putc('\r'); | ||
30 | s++; | ||
31 | } | ||
32 | } | ||
33 | |||
34 | #ifdef DEBUG | ||
35 | static void putn(unsigned long z) | ||
36 | { | ||
37 | int i; | ||
38 | char x; | ||
39 | |||
40 | putc('0'); | ||
41 | putc('x'); | ||
42 | for (i=0;i<8;i++) { | ||
43 | x='0'+((z>>((7-i)*4))&0xf); | ||
44 | if (x>'9') x=x-'0'+'A'-10; | ||
45 | putc(x); | ||
46 | } | ||
47 | } | ||
48 | |||
49 | static void putr() | ||
50 | { | ||
51 | putc('\n'); | ||
52 | putc('\r'); | ||
53 | } | ||
54 | #endif | ||
55 | |||
56 | /* | ||
57 | * nothing to do | ||
58 | */ | ||
59 | #define arch_decomp_setup() | ||
60 | #define arch_decomp_wdog() | ||
diff --git a/include/asm-arm/arch-shark/vmalloc.h b/include/asm-arm/arch-shark/vmalloc.h new file mode 100644 index 000000000000..1cc20098f690 --- /dev/null +++ b/include/asm-arm/arch-shark/vmalloc.h | |||
@@ -0,0 +1,15 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-rpc/vmalloc.h | ||
3 | */ | ||
4 | |||
5 | /* | ||
6 | * Just any arbitrary offset to the start of the vmalloc VM area: the | ||
7 | * current 8MB value just means that there will be a 8MB "hole" after the | ||
8 | * physical memory until the kernel virtual memory starts. That means that | ||
9 | * any out-of-bounds memory accesses will hopefully be caught. | ||
10 | * The vmalloc() routines leaves a hole of 4kB between each vmalloced | ||
11 | * area for the same reason. ;) | ||
12 | */ | ||
13 | #define VMALLOC_OFFSET (8*1024*1024) | ||
14 | #define VMALLOC_START (((unsigned long)high_memory + VMALLOC_OFFSET) & ~(VMALLOC_OFFSET-1)) | ||
15 | #define VMALLOC_END (PAGE_OFFSET + 0x10000000) | ||
diff --git a/include/asm-arm/arch-versatile/debug-macro.S b/include/asm-arm/arch-versatile/debug-macro.S new file mode 100644 index 000000000000..89e38ac1444e --- /dev/null +++ b/include/asm-arm/arch-versatile/debug-macro.S | |||
@@ -0,0 +1,39 @@ | |||
1 | /* linux/include/asm-arm/arch-versatile/debug-macro.S | ||
2 | * | ||
3 | * Debugging macro include header | ||
4 | * | ||
5 | * Copyright (C) 1994-1999 Russell King | ||
6 | * Moved from linux/arch/arm/kernel/debug.S by Ben Dooks | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | * | ||
12 | */ | ||
13 | |||
14 | #include <asm/hardware/amba_serial.h> | ||
15 | |||
16 | .macro addruart,rx | ||
17 | mrc p15, 0, \rx, c1, c0 | ||
18 | tst \rx, #1 @ MMU enabled? | ||
19 | moveq \rx, #0x10000000 | ||
20 | movne \rx, #0xf1000000 @ virtual base | ||
21 | orr \rx, \rx, #0x001F0000 | ||
22 | orr \rx, \rx, #0x00001000 | ||
23 | .endm | ||
24 | |||
25 | .macro senduart,rd,rx | ||
26 | strb \rd, [\rx, #UART01x_DR] | ||
27 | .endm | ||
28 | |||
29 | .macro waituart,rd,rx | ||
30 | 1001: ldr \rd, [\rx, #0x18] @ UARTFLG | ||
31 | tst \rd, #1 << 5 @ UARTFLGUTXFF - 1 when full | ||
32 | bne 1001b | ||
33 | .endm | ||
34 | |||
35 | .macro busyuart,rd,rx | ||
36 | 1001: ldr \rd, [\rx, #0x18] @ UARTFLG | ||
37 | tst \rd, #1 << 3 @ UARTFLGUBUSY - 1 when busy | ||
38 | bne 1001b | ||
39 | .endm | ||
diff --git a/include/asm-arm/arch-versatile/dma.h b/include/asm-arm/arch-versatile/dma.h new file mode 100644 index 000000000000..dcc8ac26eac0 --- /dev/null +++ b/include/asm-arm/arch-versatile/dma.h | |||
@@ -0,0 +1,27 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-versatile/dma.h | ||
3 | * | ||
4 | * Copyright (C) 2003 ARM Limited. | ||
5 | * Copyright (C) 1997,1998 Russell King | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License as published by | ||
9 | * the Free Software Foundation; either version 2 of the License, or | ||
10 | * (at your option) any later version. | ||
11 | * | ||
12 | * This program is distributed in the hope that it will be useful, | ||
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
15 | * GNU General Public License for more details. | ||
16 | * | ||
17 | * You should have received a copy of the GNU General Public License | ||
18 | * along with this program; if not, write to the Free Software | ||
19 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
20 | */ | ||
21 | #ifndef __ASM_ARCH_DMA_H | ||
22 | #define __ASM_ARCH_DMA_H | ||
23 | |||
24 | #define MAX_DMA_ADDRESS 0xffffffff | ||
25 | #define MAX_DMA_CHANNELS 0 | ||
26 | |||
27 | #endif /* _ASM_ARCH_DMA_H */ | ||
diff --git a/include/asm-arm/arch-versatile/entry-macro.S b/include/asm-arm/arch-versatile/entry-macro.S new file mode 100644 index 000000000000..90e4e970d253 --- /dev/null +++ b/include/asm-arm/arch-versatile/entry-macro.S | |||
@@ -0,0 +1,35 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-versatile/entry-macro.S | ||
3 | * | ||
4 | * Low-level IRQ helper macros for Versatile platforms | ||
5 | * | ||
6 | * This file is licensed under the terms of the GNU General Public | ||
7 | * License version 2. This program is licensed "as is" without any | ||
8 | * warranty of any kind, whether express or implied. | ||
9 | */ | ||
10 | .macro disable_fiq | ||
11 | .endm | ||
12 | |||
13 | .macro get_irqnr_and_base, irqnr, irqstat, base, tmp | ||
14 | ldr \base, =IO_ADDRESS(VERSATILE_VIC_BASE) | ||
15 | ldr \irqstat, [\base, #VIC_IRQ_STATUS] @ get masked status | ||
16 | mov \irqnr, #0 | ||
17 | teq \irqstat, #0 | ||
18 | beq 1003f | ||
19 | |||
20 | 1001: tst \irqstat, #15 | ||
21 | bne 1002f | ||
22 | add \irqnr, \irqnr, #4 | ||
23 | movs \irqstat, \irqstat, lsr #4 | ||
24 | bne 1001b | ||
25 | 1002: tst \irqstat, #1 | ||
26 | bne 1003f | ||
27 | add \irqnr, \irqnr, #1 | ||
28 | movs \irqstat, \irqstat, lsr #1 | ||
29 | bne 1002b | ||
30 | 1003: /* EQ will be set if no irqs pending */ | ||
31 | |||
32 | @ clz \irqnr, \irqstat | ||
33 | @1003: /* EQ will be set if we reach MAXIRQNUM */ | ||
34 | .endm | ||
35 | |||
diff --git a/include/asm-arm/arch-versatile/hardware.h b/include/asm-arm/arch-versatile/hardware.h new file mode 100644 index 000000000000..d5fb4a251e7f --- /dev/null +++ b/include/asm-arm/arch-versatile/hardware.h | |||
@@ -0,0 +1,45 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-versatile/hardware.h | ||
3 | * | ||
4 | * This file contains the hardware definitions of the Versatile boards. | ||
5 | * | ||
6 | * Copyright (C) 2003 ARM Limited. | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License as published by | ||
10 | * the Free Software Foundation; either version 2 of the License, or | ||
11 | * (at your option) any later version. | ||
12 | * | ||
13 | * This program is distributed in the hope that it will be useful, | ||
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
16 | * GNU General Public License for more details. | ||
17 | * | ||
18 | * You should have received a copy of the GNU General Public License | ||
19 | * along with this program; if not, write to the Free Software | ||
20 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
21 | */ | ||
22 | #ifndef __ASM_ARCH_HARDWARE_H | ||
23 | #define __ASM_ARCH_HARDWARE_H | ||
24 | |||
25 | #include <asm/sizes.h> | ||
26 | #include <asm/arch/platform.h> | ||
27 | |||
28 | // FIXME = PCI settings need to be fixed!!!!! | ||
29 | |||
30 | /* | ||
31 | * Similar to above, but for PCI addresses (memory, IO, Config and the | ||
32 | * V3 chip itself). WARNING: this has to mirror definitions in platform.h | ||
33 | */ | ||
34 | #define PCI_MEMORY_VADDR 0xe8000000 | ||
35 | #define PCI_CONFIG_VADDR 0xec000000 | ||
36 | #define PCI_V3_VADDR 0xed000000 | ||
37 | #define PCI_IO_VADDR 0xee000000 | ||
38 | |||
39 | #define PCIO_BASE PCI_IO_VADDR | ||
40 | #define PCIMEM_BASE PCI_MEMORY_VADDR | ||
41 | |||
42 | /* macro to get at IO space when running virtually */ | ||
43 | #define IO_ADDRESS(x) (((x) & 0x0fffffff) + (((x) >> 4) & 0x0f000000) + 0xf0000000) | ||
44 | |||
45 | #endif | ||
diff --git a/include/asm-arm/arch-versatile/io.h b/include/asm-arm/arch-versatile/io.h new file mode 100644 index 000000000000..dbb7158788fc --- /dev/null +++ b/include/asm-arm/arch-versatile/io.h | |||
@@ -0,0 +1,29 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-versatile/io.h | ||
3 | * | ||
4 | * Copyright (C) 2003 ARM Limited | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | * GNU General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License | ||
17 | * along with this program; if not, write to the Free Software | ||
18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
19 | */ | ||
20 | #ifndef __ASM_ARM_ARCH_IO_H | ||
21 | #define __ASM_ARM_ARCH_IO_H | ||
22 | |||
23 | #define IO_SPACE_LIMIT 0xffff | ||
24 | |||
25 | #define __io(a) ((void __iomem *)(a)) | ||
26 | #define __mem_pci(a) (a) | ||
27 | #define __mem_isa(a) (a) | ||
28 | |||
29 | #endif | ||
diff --git a/include/asm-arm/arch-versatile/irqs.h b/include/asm-arm/arch-versatile/irqs.h new file mode 100644 index 000000000000..745aa841b31a --- /dev/null +++ b/include/asm-arm/arch-versatile/irqs.h | |||
@@ -0,0 +1,211 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-versatile/irqs.h | ||
3 | * | ||
4 | * Copyright (C) 2003 ARM Limited | ||
5 | * Copyright (C) 2000 Deep Blue Solutions Ltd. | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License as published by | ||
9 | * the Free Software Foundation; either version 2 of the License, or | ||
10 | * (at your option) any later version. | ||
11 | * | ||
12 | * This program is distributed in the hope that it will be useful, | ||
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
15 | * GNU General Public License for more details. | ||
16 | * | ||
17 | * You should have received a copy of the GNU General Public License | ||
18 | * along with this program; if not, write to the Free Software | ||
19 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
20 | */ | ||
21 | |||
22 | #include <asm/arch/platform.h> | ||
23 | |||
24 | /* | ||
25 | * IRQ interrupts definitions are the same the INT definitions | ||
26 | * held within platform.h | ||
27 | */ | ||
28 | #define IRQ_VIC_START 0 | ||
29 | #define IRQ_WDOGINT (IRQ_VIC_START + INT_WDOGINT) | ||
30 | #define IRQ_SOFTINT (IRQ_VIC_START + INT_SOFTINT) | ||
31 | #define IRQ_COMMRx (IRQ_VIC_START + INT_COMMRx) | ||
32 | #define IRQ_COMMTx (IRQ_VIC_START + INT_COMMTx) | ||
33 | #define IRQ_TIMERINT0_1 (IRQ_VIC_START + INT_TIMERINT0_1) | ||
34 | #define IRQ_TIMERINT2_3 (IRQ_VIC_START + INT_TIMERINT2_3) | ||
35 | #define IRQ_GPIOINT0 (IRQ_VIC_START + INT_GPIOINT0) | ||
36 | #define IRQ_GPIOINT1 (IRQ_VIC_START + INT_GPIOINT1) | ||
37 | #define IRQ_GPIOINT2 (IRQ_VIC_START + INT_GPIOINT2) | ||
38 | #define IRQ_GPIOINT3 (IRQ_VIC_START + INT_GPIOINT3) | ||
39 | #define IRQ_RTCINT (IRQ_VIC_START + INT_RTCINT) | ||
40 | #define IRQ_SSPINT (IRQ_VIC_START + INT_SSPINT) | ||
41 | #define IRQ_UARTINT0 (IRQ_VIC_START + INT_UARTINT0) | ||
42 | #define IRQ_UARTINT1 (IRQ_VIC_START + INT_UARTINT1) | ||
43 | #define IRQ_UARTINT2 (IRQ_VIC_START + INT_UARTINT2) | ||
44 | #define IRQ_SCIINT (IRQ_VIC_START + INT_SCIINT) | ||
45 | #define IRQ_CLCDINT (IRQ_VIC_START + INT_CLCDINT) | ||
46 | #define IRQ_DMAINT (IRQ_VIC_START + INT_DMAINT) | ||
47 | #define IRQ_PWRFAILINT (IRQ_VIC_START + INT_PWRFAILINT) | ||
48 | #define IRQ_MBXINT (IRQ_VIC_START + INT_MBXINT) | ||
49 | #define IRQ_GNDINT (IRQ_VIC_START + INT_GNDINT) | ||
50 | #define IRQ_VICSOURCE21 (IRQ_VIC_START + INT_VICSOURCE21) | ||
51 | #define IRQ_VICSOURCE22 (IRQ_VIC_START + INT_VICSOURCE22) | ||
52 | #define IRQ_VICSOURCE23 (IRQ_VIC_START + INT_VICSOURCE23) | ||
53 | #define IRQ_VICSOURCE24 (IRQ_VIC_START + INT_VICSOURCE24) | ||
54 | #define IRQ_VICSOURCE25 (IRQ_VIC_START + INT_VICSOURCE25) | ||
55 | #define IRQ_VICSOURCE26 (IRQ_VIC_START + INT_VICSOURCE26) | ||
56 | #define IRQ_VICSOURCE27 (IRQ_VIC_START + INT_VICSOURCE27) | ||
57 | #define IRQ_VICSOURCE28 (IRQ_VIC_START + INT_VICSOURCE28) | ||
58 | #define IRQ_VICSOURCE29 (IRQ_VIC_START + INT_VICSOURCE29) | ||
59 | #define IRQ_VICSOURCE30 (IRQ_VIC_START + INT_VICSOURCE30) | ||
60 | #define IRQ_VICSOURCE31 (IRQ_VIC_START + INT_VICSOURCE31) | ||
61 | #define IRQ_VIC_END (IRQ_VIC_START + 31) | ||
62 | |||
63 | #define IRQMASK_WDOGINT INTMASK_WDOGINT | ||
64 | #define IRQMASK_SOFTINT INTMASK_SOFTINT | ||
65 | #define IRQMASK_COMMRx INTMASK_COMMRx | ||
66 | #define IRQMASK_COMMTx INTMASK_COMMTx | ||
67 | #define IRQMASK_TIMERINT0_1 INTMASK_TIMERINT0_1 | ||
68 | #define IRQMASK_TIMERINT2_3 INTMASK_TIMERINT2_3 | ||
69 | #define IRQMASK_GPIOINT0 INTMASK_GPIOINT0 | ||
70 | #define IRQMASK_GPIOINT1 INTMASK_GPIOINT1 | ||
71 | #define IRQMASK_GPIOINT2 INTMASK_GPIOINT2 | ||
72 | #define IRQMASK_GPIOINT3 INTMASK_GPIOINT3 | ||
73 | #define IRQMASK_RTCINT INTMASK_RTCINT | ||
74 | #define IRQMASK_SSPINT INTMASK_SSPINT | ||
75 | #define IRQMASK_UARTINT0 INTMASK_UARTINT0 | ||
76 | #define IRQMASK_UARTINT1 INTMASK_UARTINT1 | ||
77 | #define IRQMASK_UARTINT2 INTMASK_UARTINT2 | ||
78 | #define IRQMASK_SCIINT INTMASK_SCIINT | ||
79 | #define IRQMASK_CLCDINT INTMASK_CLCDINT | ||
80 | #define IRQMASK_DMAINT INTMASK_DMAINT | ||
81 | #define IRQMASK_PWRFAILINT INTMASK_PWRFAILINT | ||
82 | #define IRQMASK_MBXINT INTMASK_MBXINT | ||
83 | #define IRQMASK_GNDINT INTMASK_GNDINT | ||
84 | #define IRQMASK_VICSOURCE21 INTMASK_VICSOURCE21 | ||
85 | #define IRQMASK_VICSOURCE22 INTMASK_VICSOURCE22 | ||
86 | #define IRQMASK_VICSOURCE23 INTMASK_VICSOURCE23 | ||
87 | #define IRQMASK_VICSOURCE24 INTMASK_VICSOURCE24 | ||
88 | #define IRQMASK_VICSOURCE25 INTMASK_VICSOURCE25 | ||
89 | #define IRQMASK_VICSOURCE26 INTMASK_VICSOURCE26 | ||
90 | #define IRQMASK_VICSOURCE27 INTMASK_VICSOURCE27 | ||
91 | #define IRQMASK_VICSOURCE28 INTMASK_VICSOURCE28 | ||
92 | #define IRQMASK_VICSOURCE29 INTMASK_VICSOURCE29 | ||
93 | #define IRQMASK_VICSOURCE30 INTMASK_VICSOURCE30 | ||
94 | #define IRQMASK_VICSOURCE31 INTMASK_VICSOURCE31 | ||
95 | |||
96 | /* | ||
97 | * FIQ interrupts definitions are the same the INT definitions. | ||
98 | */ | ||
99 | #define FIQ_WDOGINT INT_WDOGINT | ||
100 | #define FIQ_SOFTINT INT_SOFTINT | ||
101 | #define FIQ_COMMRx INT_COMMRx | ||
102 | #define FIQ_COMMTx INT_COMMTx | ||
103 | #define FIQ_TIMERINT0_1 INT_TIMERINT0_1 | ||
104 | #define FIQ_TIMERINT2_3 INT_TIMERINT2_3 | ||
105 | #define FIQ_GPIOINT0 INT_GPIOINT0 | ||
106 | #define FIQ_GPIOINT1 INT_GPIOINT1 | ||
107 | #define FIQ_GPIOINT2 INT_GPIOINT2 | ||
108 | #define FIQ_GPIOINT3 INT_GPIOINT3 | ||
109 | #define FIQ_RTCINT INT_RTCINT | ||
110 | #define FIQ_SSPINT INT_SSPINT | ||
111 | #define FIQ_UARTINT0 INT_UARTINT0 | ||
112 | #define FIQ_UARTINT1 INT_UARTINT1 | ||
113 | #define FIQ_UARTINT2 INT_UARTINT2 | ||
114 | #define FIQ_SCIINT INT_SCIINT | ||
115 | #define FIQ_CLCDINT INT_CLCDINT | ||
116 | #define FIQ_DMAINT INT_DMAINT | ||
117 | #define FIQ_PWRFAILINT INT_PWRFAILINT | ||
118 | #define FIQ_MBXINT INT_MBXINT | ||
119 | #define FIQ_GNDINT INT_GNDINT | ||
120 | #define FIQ_VICSOURCE21 INT_VICSOURCE21 | ||
121 | #define FIQ_VICSOURCE22 INT_VICSOURCE22 | ||
122 | #define FIQ_VICSOURCE23 INT_VICSOURCE23 | ||
123 | #define FIQ_VICSOURCE24 INT_VICSOURCE24 | ||
124 | #define FIQ_VICSOURCE25 INT_VICSOURCE25 | ||
125 | #define FIQ_VICSOURCE26 INT_VICSOURCE26 | ||
126 | #define FIQ_VICSOURCE27 INT_VICSOURCE27 | ||
127 | #define FIQ_VICSOURCE28 INT_VICSOURCE28 | ||
128 | #define FIQ_VICSOURCE29 INT_VICSOURCE29 | ||
129 | #define FIQ_VICSOURCE30 INT_VICSOURCE30 | ||
130 | #define FIQ_VICSOURCE31 INT_VICSOURCE31 | ||
131 | |||
132 | |||
133 | #define FIQMASK_WDOGINT INTMASK_WDOGINT | ||
134 | #define FIQMASK_SOFTINT INTMASK_SOFTINT | ||
135 | #define FIQMASK_COMMRx INTMASK_COMMRx | ||
136 | #define FIQMASK_COMMTx INTMASK_COMMTx | ||
137 | #define FIQMASK_TIMERINT0_1 INTMASK_TIMERINT0_1 | ||
138 | #define FIQMASK_TIMERINT2_3 INTMASK_TIMERINT2_3 | ||
139 | #define FIQMASK_GPIOINT0 INTMASK_GPIOINT0 | ||
140 | #define FIQMASK_GPIOINT1 INTMASK_GPIOINT1 | ||
141 | #define FIQMASK_GPIOINT2 INTMASK_GPIOINT2 | ||
142 | #define FIQMASK_GPIOINT3 INTMASK_GPIOINT3 | ||
143 | #define FIQMASK_RTCINT INTMASK_RTCINT | ||
144 | #define FIQMASK_SSPINT INTMASK_SSPINT | ||
145 | #define FIQMASK_UARTINT0 INTMASK_UARTINT0 | ||
146 | #define FIQMASK_UARTINT1 INTMASK_UARTINT1 | ||
147 | #define FIQMASK_UARTINT2 INTMASK_UARTINT2 | ||
148 | #define FIQMASK_SCIINT INTMASK_SCIINT | ||
149 | #define FIQMASK_CLCDINT INTMASK_CLCDINT | ||
150 | #define FIQMASK_DMAINT INTMASK_DMAINT | ||
151 | #define FIQMASK_PWRFAILINT INTMASK_PWRFAILINT | ||
152 | #define FIQMASK_MBXINT INTMASK_MBXINT | ||
153 | #define FIQMASK_GNDINT INTMASK_GNDINT | ||
154 | #define FIQMASK_VICSOURCE21 INTMASK_VICSOURCE21 | ||
155 | #define FIQMASK_VICSOURCE22 INTMASK_VICSOURCE22 | ||
156 | #define FIQMASK_VICSOURCE23 INTMASK_VICSOURCE23 | ||
157 | #define FIQMASK_VICSOURCE24 INTMASK_VICSOURCE24 | ||
158 | #define FIQMASK_VICSOURCE25 INTMASK_VICSOURCE25 | ||
159 | #define FIQMASK_VICSOURCE26 INTMASK_VICSOURCE26 | ||
160 | #define FIQMASK_VICSOURCE27 INTMASK_VICSOURCE27 | ||
161 | #define FIQMASK_VICSOURCE28 INTMASK_VICSOURCE28 | ||
162 | #define FIQMASK_VICSOURCE29 INTMASK_VICSOURCE29 | ||
163 | #define FIQMASK_VICSOURCE30 INTMASK_VICSOURCE30 | ||
164 | #define FIQMASK_VICSOURCE31 INTMASK_VICSOURCE31 | ||
165 | |||
166 | /* | ||
167 | * Secondary interrupt controller | ||
168 | */ | ||
169 | #define IRQ_SIC_START 32 | ||
170 | #define IRQ_SIC_MMCI0B (IRQ_SIC_START + SIC_INT_MMCI0B) | ||
171 | #define IRQ_SIC_MMCI1B (IRQ_SIC_START + SIC_INT_MMCI1B) | ||
172 | #define IRQ_SIC_KMI0 (IRQ_SIC_START + SIC_INT_KMI0) | ||
173 | #define IRQ_SIC_KMI1 (IRQ_SIC_START + SIC_INT_KMI1) | ||
174 | #define IRQ_SIC_SCI3 (IRQ_SIC_START + SIC_INT_SCI3) | ||
175 | #define IRQ_SIC_UART3 (IRQ_SIC_START + SIC_INT_UART3) | ||
176 | #define IRQ_SIC_CLCD (IRQ_SIC_START + SIC_INT_CLCD) | ||
177 | #define IRQ_SIC_TOUCH (IRQ_SIC_START + SIC_INT_TOUCH) | ||
178 | #define IRQ_SIC_KEYPAD (IRQ_SIC_START + SIC_INT_KEYPAD) | ||
179 | #define IRQ_SIC_DoC (IRQ_SIC_START + SIC_INT_DoC) | ||
180 | #define IRQ_SIC_MMCI0A (IRQ_SIC_START + SIC_INT_MMCI0A) | ||
181 | #define IRQ_SIC_MMCI1A (IRQ_SIC_START + SIC_INT_MMCI1A) | ||
182 | #define IRQ_SIC_AACI (IRQ_SIC_START + SIC_INT_AACI) | ||
183 | #define IRQ_SIC_ETH (IRQ_SIC_START + SIC_INT_ETH) | ||
184 | #define IRQ_SIC_USB (IRQ_SIC_START + SIC_INT_USB) | ||
185 | #define IRQ_SIC_PCI0 (IRQ_SIC_START + SIC_INT_PCI0) | ||
186 | #define IRQ_SIC_PCI1 (IRQ_SIC_START + SIC_INT_PCI1) | ||
187 | #define IRQ_SIC_PCI2 (IRQ_SIC_START + SIC_INT_PCI2) | ||
188 | #define IRQ_SIC_PCI3 (IRQ_SIC_START + SIC_INT_PCI3) | ||
189 | #define IRQ_SIC_END 63 | ||
190 | |||
191 | #define SIC_IRQMASK_MMCI0B SIC_INTMASK_MMCI0B | ||
192 | #define SIC_IRQMASK_MMCI1B SIC_INTMASK_MMCI1B | ||
193 | #define SIC_IRQMASK_KMI0 SIC_INTMASK_KMI0 | ||
194 | #define SIC_IRQMASK_KMI1 SIC_INTMASK_KMI1 | ||
195 | #define SIC_IRQMASK_SCI3 SIC_INTMASK_SCI3 | ||
196 | #define SIC_IRQMASK_UART3 SIC_INTMASK_UART3 | ||
197 | #define SIC_IRQMASK_CLCD SIC_INTMASK_CLCD | ||
198 | #define SIC_IRQMASK_TOUCH SIC_INTMASK_TOUCH | ||
199 | #define SIC_IRQMASK_KEYPAD SIC_INTMASK_KEYPAD | ||
200 | #define SIC_IRQMASK_DoC SIC_INTMASK_DoC | ||
201 | #define SIC_IRQMASK_MMCI0A SIC_INTMASK_MMCI0A | ||
202 | #define SIC_IRQMASK_MMCI1A SIC_INTMASK_MMCI1A | ||
203 | #define SIC_IRQMASK_AACI SIC_INTMASK_AACI | ||
204 | #define SIC_IRQMASK_ETH SIC_INTMASK_ETH | ||
205 | #define SIC_IRQMASK_USB SIC_INTMASK_USB | ||
206 | #define SIC_IRQMASK_PCI0 SIC_INTMASK_PCI0 | ||
207 | #define SIC_IRQMASK_PCI1 SIC_INTMASK_PCI1 | ||
208 | #define SIC_IRQMASK_PCI2 SIC_INTMASK_PCI2 | ||
209 | #define SIC_IRQMASK_PCI3 SIC_INTMASK_PCI3 | ||
210 | |||
211 | #define NR_IRQS 64 | ||
diff --git a/include/asm-arm/arch-versatile/memory.h b/include/asm-arm/arch-versatile/memory.h new file mode 100644 index 000000000000..7b8b7cc422fa --- /dev/null +++ b/include/asm-arm/arch-versatile/memory.h | |||
@@ -0,0 +1,38 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-versatile/memory.h | ||
3 | * | ||
4 | * Copyright (C) 2003 ARM Limited | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | * GNU General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License | ||
17 | * along with this program; if not, write to the Free Software | ||
18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
19 | */ | ||
20 | #ifndef __ASM_ARCH_MEMORY_H | ||
21 | #define __ASM_ARCH_MEMORY_H | ||
22 | |||
23 | /* | ||
24 | * Physical DRAM offset. | ||
25 | */ | ||
26 | #define PHYS_OFFSET (0x00000000UL) | ||
27 | |||
28 | /* | ||
29 | * Virtual view <-> DMA view memory address translations | ||
30 | * virt_to_bus: Used to translate the virtual address to an | ||
31 | * address suitable to be passed to set_dma_addr | ||
32 | * bus_to_virt: Used to convert an address for DMA operations | ||
33 | * to an address that the kernel can use. | ||
34 | */ | ||
35 | #define __virt_to_bus(x) ((x) - PAGE_OFFSET) | ||
36 | #define __bus_to_virt(x) ((x) + PAGE_OFFSET) | ||
37 | |||
38 | #endif | ||
diff --git a/include/asm-arm/arch-versatile/param.h b/include/asm-arm/arch-versatile/param.h new file mode 100644 index 000000000000..34b897335f87 --- /dev/null +++ b/include/asm-arm/arch-versatile/param.h | |||
@@ -0,0 +1,19 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-versatile/param.h | ||
3 | * | ||
4 | * Copyright (C) 2002 ARM Limited | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | * GNU General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License | ||
17 | * along with this program; if not, write to the Free Software | ||
18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
19 | */ | ||
diff --git a/include/asm-arm/arch-versatile/platform.h b/include/asm-arm/arch-versatile/platform.h new file mode 100644 index 000000000000..2598d1f08548 --- /dev/null +++ b/include/asm-arm/arch-versatile/platform.h | |||
@@ -0,0 +1,510 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-versatile/platform.h | ||
3 | * | ||
4 | * Copyright (c) ARM Limited 2003. All rights reserved. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | * GNU General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License | ||
17 | * along with this program; if not, write to the Free Software | ||
18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
19 | */ | ||
20 | |||
21 | #ifndef __address_h | ||
22 | #define __address_h 1 | ||
23 | |||
24 | /* | ||
25 | * Memory definitions | ||
26 | */ | ||
27 | #define VERSATILE_BOOT_ROM_LO 0x30000000 /* DoC Base (64Mb)...*/ | ||
28 | #define VERSATILE_BOOT_ROM_HI 0x30000000 | ||
29 | #define VERSATILE_BOOT_ROM_BASE VERSATILE_BOOT_ROM_HI /* Normal position */ | ||
30 | #define VERSATILE_BOOT_ROM_SIZE SZ_64M | ||
31 | |||
32 | #define VERSATILE_SSRAM_BASE /* VERSATILE_SSMC_BASE ? */ | ||
33 | #define VERSATILE_SSRAM_SIZE SZ_2M | ||
34 | |||
35 | #define VERSATILE_FLASH_BASE 0x34000000 | ||
36 | #define VERSATILE_FLASH_SIZE SZ_64M | ||
37 | |||
38 | /* | ||
39 | * SDRAM | ||
40 | */ | ||
41 | #define VERSATILE_SDRAM_BASE 0x00000000 | ||
42 | |||
43 | /* | ||
44 | * Logic expansion modules | ||
45 | * | ||
46 | */ | ||
47 | |||
48 | |||
49 | /* ------------------------------------------------------------------------ | ||
50 | * Versatile Registers | ||
51 | * ------------------------------------------------------------------------ | ||
52 | * | ||
53 | */ | ||
54 | #define VERSATILE_SYS_ID_OFFSET 0x00 | ||
55 | #define VERSATILE_SYS_SW_OFFSET 0x04 | ||
56 | #define VERSATILE_SYS_LED_OFFSET 0x08 | ||
57 | #define VERSATILE_SYS_OSC0_OFFSET 0x0C | ||
58 | |||
59 | #if defined(CONFIG_ARCH_VERSATILE_PB) | ||
60 | #define VERSATILE_SYS_OSC1_OFFSET 0x10 | ||
61 | #define VERSATILE_SYS_OSC2_OFFSET 0x14 | ||
62 | #define VERSATILE_SYS_OSC3_OFFSET 0x18 | ||
63 | #define VERSATILE_SYS_OSC4_OFFSET 0x1C | ||
64 | #elif defined(CONFIG_MACH_VERSATILE_AB) | ||
65 | #define VERSATILE_SYS_OSC1_OFFSET 0x1C | ||
66 | #endif | ||
67 | |||
68 | #define VERSATILE_SYS_LOCK_OFFSET 0x20 | ||
69 | #define VERSATILE_SYS_100HZ_OFFSET 0x24 | ||
70 | #define VERSATILE_SYS_CFGDATA1_OFFSET 0x28 | ||
71 | #define VERSATILE_SYS_CFGDATA2_OFFSET 0x2C | ||
72 | #define VERSATILE_SYS_FLAGS_OFFSET 0x30 | ||
73 | #define VERSATILE_SYS_FLAGSSET_OFFSET 0x30 | ||
74 | #define VERSATILE_SYS_FLAGSCLR_OFFSET 0x34 | ||
75 | #define VERSATILE_SYS_NVFLAGS_OFFSET 0x38 | ||
76 | #define VERSATILE_SYS_NVFLAGSSET_OFFSET 0x38 | ||
77 | #define VERSATILE_SYS_NVFLAGSCLR_OFFSET 0x3C | ||
78 | #define VERSATILE_SYS_RESETCTL_OFFSET 0x40 | ||
79 | #define VERSATILE_SYS_PICCTL_OFFSET 0x44 | ||
80 | #define VERSATILE_SYS_MCI_OFFSET 0x48 | ||
81 | #define VERSATILE_SYS_FLASH_OFFSET 0x4C | ||
82 | #define VERSATILE_SYS_CLCD_OFFSET 0x50 | ||
83 | #define VERSATILE_SYS_CLCDSER_OFFSET 0x54 | ||
84 | #define VERSATILE_SYS_BOOTCS_OFFSET 0x58 | ||
85 | #define VERSATILE_SYS_24MHz_OFFSET 0x5C | ||
86 | #define VERSATILE_SYS_MISC_OFFSET 0x60 | ||
87 | #define VERSATILE_SYS_TEST_OSC0_OFFSET 0x80 | ||
88 | #define VERSATILE_SYS_TEST_OSC1_OFFSET 0x84 | ||
89 | #define VERSATILE_SYS_TEST_OSC2_OFFSET 0x88 | ||
90 | #define VERSATILE_SYS_TEST_OSC3_OFFSET 0x8C | ||
91 | #define VERSATILE_SYS_TEST_OSC4_OFFSET 0x90 | ||
92 | |||
93 | #define VERSATILE_SYS_BASE 0x10000000 | ||
94 | #define VERSATILE_SYS_ID (VERSATILE_SYS_BASE + VERSATILE_SYS_ID_OFFSET) | ||
95 | #define VERSATILE_SYS_SW (VERSATILE_SYS_BASE + VERSATILE_SYS_SW_OFFSET) | ||
96 | #define VERSATILE_SYS_LED (VERSATILE_SYS_BASE + VERSATILE_SYS_LED_OFFSET) | ||
97 | #define VERSATILE_SYS_OSC0 (VERSATILE_SYS_BASE + VERSATILE_SYS_OSC0_OFFSET) | ||
98 | #define VERSATILE_SYS_OSC1 (VERSATILE_SYS_BASE + VERSATILE_SYS_OSC1_OFFSET) | ||
99 | |||
100 | #if defined(CONFIG_ARCH_VERSATILE_PB) | ||
101 | #define VERSATILE_SYS_OSC2 (VERSATILE_SYS_BASE + VERSATILE_SYS_OSC2_OFFSET) | ||
102 | #define VERSATILE_SYS_OSC3 (VERSATILE_SYS_BASE + VERSATILE_SYS_OSC3_OFFSET) | ||
103 | #define VERSATILE_SYS_OSC4 (VERSATILE_SYS_BASE + VERSATILE_SYS_OSC4_OFFSET) | ||
104 | #endif | ||
105 | |||
106 | #define VERSATILE_SYS_LOCK (VERSATILE_SYS_BASE + VERSATILE_SYS_LOCK_OFFSET) | ||
107 | #define VERSATILE_SYS_100HZ (VERSATILE_SYS_BASE + VERSATILE_SYS_100HZ_OFFSET) | ||
108 | #define VERSATILE_SYS_CFGDATA1 (VERSATILE_SYS_BASE + VERSATILE_SYS_CFGDATA1_OFFSET) | ||
109 | #define VERSATILE_SYS_CFGDATA2 (VERSATILE_SYS_BASE + VERSATILE_SYS_CFGDATA2_OFFSET) | ||
110 | #define VERSATILE_SYS_FLAGS (VERSATILE_SYS_BASE + VERSATILE_SYS_FLAGS_OFFSET) | ||
111 | #define VERSATILE_SYS_FLAGSSET (VERSATILE_SYS_BASE + VERSATILE_SYS_FLAGSSET_OFFSET) | ||
112 | #define VERSATILE_SYS_FLAGSCLR (VERSATILE_SYS_BASE + VERSATILE_SYS_FLAGSCLR_OFFSET) | ||
113 | #define VERSATILE_SYS_NVFLAGS (VERSATILE_SYS_BASE + VERSATILE_SYS_NVFLAGS_OFFSET) | ||
114 | #define VERSATILE_SYS_NVFLAGSSET (VERSATILE_SYS_BASE + VERSATILE_SYS_NVFLAGSSET_OFFSET) | ||
115 | #define VERSATILE_SYS_NVFLAGSCLR (VERSATILE_SYS_BASE + VERSATILE_SYS_NVFLAGSCLR_OFFSET) | ||
116 | #define VERSATILE_SYS_RESETCTL (VERSATILE_SYS_BASE + VERSATILE_SYS_RESETCTL_OFFSET) | ||
117 | #define VERSATILE_SYS_PICCTL (VERSATILE_SYS_BASE + VERSATILE_SYS_PICCTL_OFFSET) | ||
118 | #define VERSATILE_SYS_MCI (VERSATILE_SYS_BASE + VERSATILE_SYS_MCI_OFFSET) | ||
119 | #define VERSATILE_SYS_FLASH (VERSATILE_SYS_BASE + VERSATILE_SYS_FLASH_OFFSET) | ||
120 | #define VERSATILE_SYS_CLCD (VERSATILE_SYS_BASE + VERSATILE_SYS_CLCD_OFFSET) | ||
121 | #define VERSATILE_SYS_CLCDSER (VERSATILE_SYS_BASE + VERSATILE_SYS_CLCDSER_OFFSET) | ||
122 | #define VERSATILE_SYS_BOOTCS (VERSATILE_SYS_BASE + VERSATILE_SYS_BOOTCS_OFFSET) | ||
123 | #define VERSATILE_SYS_24MHz (VERSATILE_SYS_BASE + VERSATILE_SYS_24MHz_OFFSET) | ||
124 | #define VERSATILE_SYS_MISC (VERSATILE_SYS_BASE + VERSATILE_SYS_MISC_OFFSET) | ||
125 | #define VERSATILE_SYS_TEST_OSC0 (VERSATILE_SYS_BASE + VERSATILE_SYS_TEST_OSC0_OFFSET) | ||
126 | #define VERSATILE_SYS_TEST_OSC1 (VERSATILE_SYS_BASE + VERSATILE_SYS_TEST_OSC1_OFFSET) | ||
127 | #define VERSATILE_SYS_TEST_OSC2 (VERSATILE_SYS_BASE + VERSATILE_SYS_TEST_OSC2_OFFSET) | ||
128 | #define VERSATILE_SYS_TEST_OSC3 (VERSATILE_SYS_BASE + VERSATILE_SYS_TEST_OSC3_OFFSET) | ||
129 | #define VERSATILE_SYS_TEST_OSC4 (VERSATILE_SYS_BASE + VERSATILE_SYS_TEST_OSC4_OFFSET) | ||
130 | |||
131 | /* | ||
132 | * Values for VERSATILE_SYS_RESET_CTRL | ||
133 | */ | ||
134 | #define VERSATILE_SYS_CTRL_RESET_CONFIGCLR 0x01 | ||
135 | #define VERSATILE_SYS_CTRL_RESET_CONFIGINIT 0x02 | ||
136 | #define VERSATILE_SYS_CTRL_RESET_DLLRESET 0x03 | ||
137 | #define VERSATILE_SYS_CTRL_RESET_PLLRESET 0x04 | ||
138 | #define VERSATILE_SYS_CTRL_RESET_POR 0x05 | ||
139 | #define VERSATILE_SYS_CTRL_RESET_DoC 0x06 | ||
140 | |||
141 | #define VERSATILE_SYS_CTRL_LED (1 << 0) | ||
142 | |||
143 | |||
144 | /* ------------------------------------------------------------------------ | ||
145 | * Versatile control registers | ||
146 | * ------------------------------------------------------------------------ | ||
147 | */ | ||
148 | |||
149 | /* | ||
150 | * VERSATILE_IDFIELD | ||
151 | * | ||
152 | * 31:24 = manufacturer (0x41 = ARM) | ||
153 | * 23:16 = architecture (0x08 = AHB system bus, ASB processor bus) | ||
154 | * 15:12 = FPGA (0x3 = XVC600 or XVC600E) | ||
155 | * 11:4 = build value | ||
156 | * 3:0 = revision number (0x1 = rev B (AHB)) | ||
157 | */ | ||
158 | |||
159 | /* | ||
160 | * VERSATILE_SYS_LOCK | ||
161 | * control access to SYS_OSCx, SYS_CFGDATAx, SYS_RESETCTL, | ||
162 | * SYS_CLD, SYS_BOOTCS | ||
163 | */ | ||
164 | #define VERSATILE_SYS_LOCK_LOCKED (1 << 16) | ||
165 | #define VERSATILE_SYS_LOCKVAL_MASK 0xFFFF /* write 0xA05F to enable write access */ | ||
166 | |||
167 | /* | ||
168 | * VERSATILE_SYS_FLASH | ||
169 | */ | ||
170 | #define VERSATILE_FLASHPROG_FLVPPEN (1 << 0) /* Enable writing to flash */ | ||
171 | |||
172 | /* | ||
173 | * VERSATILE_INTREG | ||
174 | * - used to acknowledge and control MMCI and UART interrupts | ||
175 | */ | ||
176 | #define VERSATILE_INTREG_WPROT 0x00 /* MMC protection status (no interrupt generated) */ | ||
177 | #define VERSATILE_INTREG_RI0 0x01 /* Ring indicator UART0 is asserted, */ | ||
178 | #define VERSATILE_INTREG_CARDIN 0x08 /* MMCI card in detect */ | ||
179 | /* write 1 to acknowledge and clear */ | ||
180 | #define VERSATILE_INTREG_RI1 0x02 /* Ring indicator UART1 is asserted, */ | ||
181 | #define VERSATILE_INTREG_CARDINSERT 0x03 /* Signal insertion of MMC card */ | ||
182 | |||
183 | /* | ||
184 | * VERSATILE peripheral addresses | ||
185 | */ | ||
186 | #define VERSATILE_PCI_CORE_BASE 0x10001000 /* PCI core control */ | ||
187 | #define VERSATILE_I2C_BASE 0x10002000 /* I2C control */ | ||
188 | #define VERSATILE_SIC_BASE 0x10003000 /* Secondary interrupt controller */ | ||
189 | #define VERSATILE_AACI_BASE 0x10004000 /* Audio */ | ||
190 | #define VERSATILE_MMCI0_BASE 0x10005000 /* MMC interface */ | ||
191 | #define VERSATILE_KMI0_BASE 0x10006000 /* KMI interface */ | ||
192 | #define VERSATILE_KMI1_BASE 0x10007000 /* KMI 2nd interface */ | ||
193 | #define VERSATILE_CHAR_LCD_BASE 0x10008000 /* Character LCD */ | ||
194 | #define VERSATILE_UART3_BASE 0x10009000 /* UART 3 */ | ||
195 | #define VERSATILE_SCI1_BASE 0x1000A000 | ||
196 | #define VERSATILE_MMCI1_BASE 0x1000B000 /* MMC Interface */ | ||
197 | /* 0x1000C000 - 0x1000CFFF = reserved */ | ||
198 | #define VERSATILE_ETH_BASE 0x10010000 /* Ethernet */ | ||
199 | #define VERSATILE_USB_BASE 0x10020000 /* USB */ | ||
200 | /* 0x10030000 - 0x100FFFFF = reserved */ | ||
201 | #define VERSATILE_SMC_BASE 0x10100000 /* SMC */ | ||
202 | #define VERSATILE_MPMC_BASE 0x10110000 /* MPMC */ | ||
203 | #define VERSATILE_CLCD_BASE 0x10120000 /* CLCD */ | ||
204 | #define VERSATILE_DMAC_BASE 0x10130000 /* DMA controller */ | ||
205 | #define VERSATILE_VIC_BASE 0x10140000 /* Vectored interrupt controller */ | ||
206 | #define VERSATILE_PERIPH_BASE 0x10150000 /* off-chip peripherals alias from */ | ||
207 | /* 0x10000000 - 0x100FFFFF */ | ||
208 | #define VERSATILE_AHBM_BASE 0x101D0000 /* AHB monitor */ | ||
209 | #define VERSATILE_SCTL_BASE 0x101E0000 /* System controller */ | ||
210 | #define VERSATILE_WATCHDOG_BASE 0x101E1000 /* Watchdog */ | ||
211 | #define VERSATILE_TIMER0_1_BASE 0x101E2000 /* Timer 0 and 1 */ | ||
212 | #define VERSATILE_TIMER2_3_BASE 0x101E3000 /* Timer 2 and 3 */ | ||
213 | #define VERSATILE_GPIO0_BASE 0x101E4000 /* GPIO port 0 */ | ||
214 | #define VERSATILE_GPIO1_BASE 0x101E5000 /* GPIO port 1 */ | ||
215 | #define VERSATILE_GPIO2_BASE 0x101E6000 /* GPIO port 2 */ | ||
216 | #define VERSATILE_GPIO3_BASE 0x101E7000 /* GPIO port 3 */ | ||
217 | #define VERSATILE_RTC_BASE 0x101E8000 /* Real Time Clock */ | ||
218 | /* 0x101E9000 - reserved */ | ||
219 | #define VERSATILE_SCI_BASE 0x101F0000 /* Smart card controller */ | ||
220 | #define VERSATILE_UART0_BASE 0x101F1000 /* Uart 0 */ | ||
221 | #define VERSATILE_UART1_BASE 0x101F2000 /* Uart 1 */ | ||
222 | #define VERSATILE_UART2_BASE 0x101F3000 /* Uart 2 */ | ||
223 | #define VERSATILE_SSP_BASE 0x101F4000 /* Synchronous Serial Port */ | ||
224 | |||
225 | #define VERSATILE_SSMC_BASE 0x20000000 /* SSMC */ | ||
226 | #define VERSATILE_IB2_BASE 0x24000000 /* IB2 module */ | ||
227 | #define VERSATILE_MBX_BASE 0x40000000 /* MBX */ | ||
228 | #define VERSATILE_PCI_BASE 0x41000000 /* PCI Interface */ | ||
229 | #define VERSATILE_SDRAM67_BASE 0x70000000 /* SDRAM banks 6 and 7 */ | ||
230 | #define VERSATILE_LT_BASE 0x80000000 /* Logic Tile expansion */ | ||
231 | |||
232 | /* | ||
233 | * Disk on Chip | ||
234 | */ | ||
235 | #define VERSATILE_DOC_BASE 0x2C000000 | ||
236 | #define VERSATILE_DOC_SIZE (16 << 20) | ||
237 | #define VERSATILE_DOC_PAGE_SIZE 512 | ||
238 | #define VERSATILE_DOC_TOTAL_PAGES (DOC_SIZE / PAGE_SIZE) | ||
239 | |||
240 | #define ERASE_UNIT_PAGES 32 | ||
241 | #define START_PAGE 0x80 | ||
242 | |||
243 | /* | ||
244 | * LED settings, bits [7:0] | ||
245 | */ | ||
246 | #define VERSATILE_SYS_LED0 (1 << 0) | ||
247 | #define VERSATILE_SYS_LED1 (1 << 1) | ||
248 | #define VERSATILE_SYS_LED2 (1 << 2) | ||
249 | #define VERSATILE_SYS_LED3 (1 << 3) | ||
250 | #define VERSATILE_SYS_LED4 (1 << 4) | ||
251 | #define VERSATILE_SYS_LED5 (1 << 5) | ||
252 | #define VERSATILE_SYS_LED6 (1 << 6) | ||
253 | #define VERSATILE_SYS_LED7 (1 << 7) | ||
254 | |||
255 | #define ALL_LEDS 0xFF | ||
256 | |||
257 | #define LED_BANK VERSATILE_SYS_LED | ||
258 | |||
259 | /* | ||
260 | * Control registers | ||
261 | */ | ||
262 | #define VERSATILE_IDFIELD_OFFSET 0x0 /* Versatile build information */ | ||
263 | #define VERSATILE_FLASHPROG_OFFSET 0x4 /* Flash devices */ | ||
264 | #define VERSATILE_INTREG_OFFSET 0x8 /* Interrupt control */ | ||
265 | #define VERSATILE_DECODE_OFFSET 0xC /* Fitted logic modules */ | ||
266 | |||
267 | |||
268 | /* ------------------------------------------------------------------------ | ||
269 | * Versatile Interrupt Controller - control registers | ||
270 | * ------------------------------------------------------------------------ | ||
271 | * | ||
272 | * Offsets from interrupt controller base | ||
273 | * | ||
274 | * System Controller interrupt controller base is | ||
275 | * | ||
276 | * VERSATILE_IC_BASE | ||
277 | * | ||
278 | * Core Module interrupt controller base is | ||
279 | * | ||
280 | * VERSATILE_SYS_IC | ||
281 | * | ||
282 | */ | ||
283 | #define VIC_IRQ_STATUS 0 | ||
284 | #define VIC_FIQ_STATUS 0x04 | ||
285 | #define VIC_IRQ_RAW_STATUS 0x08 | ||
286 | #define VIC_INT_SELECT 0x0C /* 1 = FIQ, 0 = IRQ */ | ||
287 | #define VIC_IRQ_ENABLE 0x10 /* 1 = enable, 0 = disable */ | ||
288 | #define VIC_IRQ_ENABLE_CLEAR 0x14 | ||
289 | #define VIC_IRQ_SOFT 0x18 | ||
290 | #define VIC_IRQ_SOFT_CLEAR 0x1C | ||
291 | #define VIC_PROTECT 0x20 | ||
292 | #define VIC_VECT_ADDR 0x30 | ||
293 | #define VIC_DEF_VECT_ADDR 0x34 | ||
294 | #define VIC_VECT_ADDR0 0x100 /* 0 to 15 */ | ||
295 | #define VIC_VECT_CNTL0 0x200 /* 0 to 15 */ | ||
296 | #define VIC_ITCR 0x300 /* VIC test control register */ | ||
297 | |||
298 | #define VIC_FIQ_RAW_STATUS 0x08 | ||
299 | #define VIC_FIQ_ENABLE 0x10 /* 1 = enable, 0 = disable */ | ||
300 | #define VIC_FIQ_ENABLE_CLEAR 0x14 | ||
301 | #define VIC_FIQ_SOFT 0x18 | ||
302 | #define VIC_FIQ_SOFT_CLEAR 0x1C | ||
303 | |||
304 | #define SIC_IRQ_STATUS 0 | ||
305 | #define SIC_IRQ_RAW_STATUS 0x04 | ||
306 | #define SIC_IRQ_ENABLE 0x08 | ||
307 | #define SIC_IRQ_ENABLE_SET 0x08 | ||
308 | #define SIC_IRQ_ENABLE_CLEAR 0x0C | ||
309 | #define SIC_INT_SOFT_SET 0x10 | ||
310 | #define SIC_INT_SOFT_CLEAR 0x14 | ||
311 | #define SIC_INT_PIC_ENABLE 0x20 /* read status of pass through mask */ | ||
312 | #define SIC_INT_PIC_ENABLES 0x20 /* set interrupt pass through bits */ | ||
313 | #define SIC_INT_PIC_ENABLEC 0x24 /* Clear interrupt pass through bits */ | ||
314 | |||
315 | #define VICVectCntl_Enable (1 << 5) | ||
316 | |||
317 | /* ------------------------------------------------------------------------ | ||
318 | * Interrupts - bit assignment (primary) | ||
319 | * ------------------------------------------------------------------------ | ||
320 | */ | ||
321 | |||
322 | #define INT_WDOGINT 0 /* Watchdog timer */ | ||
323 | #define INT_SOFTINT 1 /* Software interrupt */ | ||
324 | #define INT_COMMRx 2 /* Debug Comm Rx interrupt */ | ||
325 | #define INT_COMMTx 3 /* Debug Comm Tx interrupt */ | ||
326 | #define INT_TIMERINT0_1 4 /* Timer 0 and 1 */ | ||
327 | #define INT_TIMERINT2_3 5 /* Timer 2 and 3 */ | ||
328 | #define INT_GPIOINT0 6 /* GPIO 0 */ | ||
329 | #define INT_GPIOINT1 7 /* GPIO 1 */ | ||
330 | #define INT_GPIOINT2 8 /* GPIO 2 */ | ||
331 | #define INT_GPIOINT3 9 /* GPIO 3 */ | ||
332 | #define INT_RTCINT 10 /* Real Time Clock */ | ||
333 | #define INT_SSPINT 11 /* Synchronous Serial Port */ | ||
334 | #define INT_UARTINT0 12 /* UART 0 on development chip */ | ||
335 | #define INT_UARTINT1 13 /* UART 1 on development chip */ | ||
336 | #define INT_UARTINT2 14 /* UART 2 on development chip */ | ||
337 | #define INT_SCIINT 15 /* Smart Card Interface */ | ||
338 | #define INT_CLCDINT 16 /* CLCD controller */ | ||
339 | #define INT_DMAINT 17 /* DMA controller */ | ||
340 | #define INT_PWRFAILINT 18 /* Power failure */ | ||
341 | #define INT_MBXINT 19 /* Graphics processor */ | ||
342 | #define INT_GNDINT 20 /* Reserved */ | ||
343 | /* External interrupt signals from logic tiles or secondary controller */ | ||
344 | #define INT_VICSOURCE21 21 /* Disk on Chip */ | ||
345 | #define INT_VICSOURCE22 22 /* MCI0A */ | ||
346 | #define INT_VICSOURCE23 23 /* MCI1A */ | ||
347 | #define INT_VICSOURCE24 24 /* AACI */ | ||
348 | #define INT_VICSOURCE25 25 /* Ethernet */ | ||
349 | #define INT_VICSOURCE26 26 /* USB */ | ||
350 | #define INT_VICSOURCE27 27 /* PCI 0 */ | ||
351 | #define INT_VICSOURCE28 28 /* PCI 1 */ | ||
352 | #define INT_VICSOURCE29 29 /* PCI 2 */ | ||
353 | #define INT_VICSOURCE30 30 /* PCI 3 */ | ||
354 | #define INT_VICSOURCE31 31 /* SIC source */ | ||
355 | |||
356 | /* | ||
357 | * Interrupt bit positions | ||
358 | * | ||
359 | */ | ||
360 | #define INTMASK_WDOGINT (1 << INT_WDOGINT) | ||
361 | #define INTMASK_SOFTINT (1 << INT_SOFTINT) | ||
362 | #define INTMASK_COMMRx (1 << INT_COMMRx) | ||
363 | #define INTMASK_COMMTx (1 << INT_COMMTx) | ||
364 | #define INTMASK_TIMERINT0_1 (1 << INT_TIMERINT0_1) | ||
365 | #define INTMASK_TIMERINT2_3 (1 << INT_TIMERINT2_3) | ||
366 | #define INTMASK_GPIOINT0 (1 << INT_GPIOINT0) | ||
367 | #define INTMASK_GPIOINT1 (1 << INT_GPIOINT1) | ||
368 | #define INTMASK_GPIOINT2 (1 << INT_GPIOINT2) | ||
369 | #define INTMASK_GPIOINT3 (1 << INT_GPIOINT3) | ||
370 | #define INTMASK_RTCINT (1 << INT_RTCINT) | ||
371 | #define INTMASK_SSPINT (1 << INT_SSPINT) | ||
372 | #define INTMASK_UARTINT0 (1 << INT_UARTINT0) | ||
373 | #define INTMASK_UARTINT1 (1 << INT_UARTINT1) | ||
374 | #define INTMASK_UARTINT2 (1 << INT_UARTINT2) | ||
375 | #define INTMASK_SCIINT (1 << INT_SCIINT) | ||
376 | #define INTMASK_CLCDINT (1 << INT_CLCDINT) | ||
377 | #define INTMASK_DMAINT (1 << INT_DMAINT) | ||
378 | #define INTMASK_PWRFAILINT (1 << INT_PWRFAILINT) | ||
379 | #define INTMASK_MBXINT (1 << INT_MBXINT) | ||
380 | #define INTMASK_GNDINT (1 << INT_GNDINT) | ||
381 | #define INTMASK_VICSOURCE21 (1 << INT_VICSOURCE21) | ||
382 | #define INTMASK_VICSOURCE22 (1 << INT_VICSOURCE22) | ||
383 | #define INTMASK_VICSOURCE23 (1 << INT_VICSOURCE23) | ||
384 | #define INTMASK_VICSOURCE24 (1 << INT_VICSOURCE24) | ||
385 | #define INTMASK_VICSOURCE25 (1 << INT_VICSOURCE25) | ||
386 | #define INTMASK_VICSOURCE26 (1 << INT_VICSOURCE26) | ||
387 | #define INTMASK_VICSOURCE27 (1 << INT_VICSOURCE27) | ||
388 | #define INTMASK_VICSOURCE28 (1 << INT_VICSOURCE28) | ||
389 | #define INTMASK_VICSOURCE29 (1 << INT_VICSOURCE29) | ||
390 | #define INTMASK_VICSOURCE30 (1 << INT_VICSOURCE30) | ||
391 | #define INTMASK_VICSOURCE31 (1 << INT_VICSOURCE31) | ||
392 | |||
393 | |||
394 | #define VERSATILE_SC_VALID_INT 0x003FFFFF | ||
395 | |||
396 | #define MAXIRQNUM 31 | ||
397 | #define MAXFIQNUM 31 | ||
398 | #define MAXSWINUM 31 | ||
399 | |||
400 | /* ------------------------------------------------------------------------ | ||
401 | * Interrupts - bit assignment (secondary) | ||
402 | * ------------------------------------------------------------------------ | ||
403 | */ | ||
404 | #define SIC_INT_MMCI0B 1 /* Multimedia Card 0B */ | ||
405 | #define SIC_INT_MMCI1B 2 /* Multimedia Card 1B */ | ||
406 | #define SIC_INT_KMI0 3 /* Keyboard/Mouse port 0 */ | ||
407 | #define SIC_INT_KMI1 4 /* Keyboard/Mouse port 1 */ | ||
408 | #define SIC_INT_SCI3 5 /* Smart Card interface */ | ||
409 | #define SIC_INT_UART3 6 /* UART 3 empty or data available */ | ||
410 | #define SIC_INT_CLCD 7 /* Character LCD */ | ||
411 | #define SIC_INT_TOUCH 8 /* Touchscreen */ | ||
412 | #define SIC_INT_KEYPAD 9 /* Key pressed on display keypad */ | ||
413 | /* 10:20 - reserved */ | ||
414 | #define SIC_INT_DoC 21 /* Disk on Chip memory controller */ | ||
415 | #define SIC_INT_MMCI0A 22 /* MMC 0A */ | ||
416 | #define SIC_INT_MMCI1A 23 /* MMC 1A */ | ||
417 | #define SIC_INT_AACI 24 /* Audio Codec */ | ||
418 | #define SIC_INT_ETH 25 /* Ethernet controller */ | ||
419 | #define SIC_INT_USB 26 /* USB controller */ | ||
420 | #define SIC_INT_PCI0 27 | ||
421 | #define SIC_INT_PCI1 28 | ||
422 | #define SIC_INT_PCI2 29 | ||
423 | #define SIC_INT_PCI3 30 | ||
424 | |||
425 | |||
426 | #define SIC_INTMASK_MMCI0B (1 << SIC_INT_MMCI0B) | ||
427 | #define SIC_INTMASK_MMCI1B (1 << SIC_INT_MMCI1B) | ||
428 | #define SIC_INTMASK_KMI0 (1 << SIC_INT_KMI0) | ||
429 | #define SIC_INTMASK_KMI1 (1 << SIC_INT_KMI1) | ||
430 | #define SIC_INTMASK_SCI3 (1 << SIC_INT_SCI3) | ||
431 | #define SIC_INTMASK_UART3 (1 << SIC_INT_UART3) | ||
432 | #define SIC_INTMASK_CLCD (1 << SIC_INT_CLCD) | ||
433 | #define SIC_INTMASK_TOUCH (1 << SIC_INT_TOUCH) | ||
434 | #define SIC_INTMASK_KEYPAD (1 << SIC_INT_KEYPAD) | ||
435 | #define SIC_INTMASK_DoC (1 << SIC_INT_DoC) | ||
436 | #define SIC_INTMASK_MMCI0A (1 << SIC_INT_MMCI0A) | ||
437 | #define SIC_INTMASK_MMCI1A (1 << SIC_INT_MMCI1A) | ||
438 | #define SIC_INTMASK_AACI (1 << SIC_INT_AACI) | ||
439 | #define SIC_INTMASK_ETH (1 << SIC_INT_ETH) | ||
440 | #define SIC_INTMASK_USB (1 << SIC_INT_USB) | ||
441 | #define SIC_INTMASK_PCI0 (1 << SIC_INT_PCI0) | ||
442 | #define SIC_INTMASK_PCI1 (1 << SIC_INT_PCI1) | ||
443 | #define SIC_INTMASK_PCI2 (1 << SIC_INT_PCI2) | ||
444 | #define SIC_INTMASK_PCI3 (1 << SIC_INT_PCI3) | ||
445 | /* | ||
446 | * Application Flash | ||
447 | * | ||
448 | */ | ||
449 | #define FLASH_BASE VERSATILE_FLASH_BASE | ||
450 | #define FLASH_SIZE VERSATILE_FLASH_SIZE | ||
451 | #define FLASH_END (FLASH_BASE + FLASH_SIZE - 1) | ||
452 | #define FLASH_BLOCK_SIZE SZ_128K | ||
453 | |||
454 | /* | ||
455 | * Boot Flash | ||
456 | * | ||
457 | */ | ||
458 | #define EPROM_BASE VERSATILE_BOOT_ROM_HI | ||
459 | #define EPROM_SIZE VERSATILE_BOOT_ROM_SIZE | ||
460 | #define EPROM_END (EPROM_BASE + EPROM_SIZE - 1) | ||
461 | |||
462 | /* | ||
463 | * Clean base - dummy | ||
464 | * | ||
465 | */ | ||
466 | #define CLEAN_BASE EPROM_BASE | ||
467 | |||
468 | /* | ||
469 | * System controller bit assignment | ||
470 | */ | ||
471 | #define VERSATILE_REFCLK 0 | ||
472 | #define VERSATILE_TIMCLK 1 | ||
473 | |||
474 | #define VERSATILE_TIMER1_EnSel 15 | ||
475 | #define VERSATILE_TIMER2_EnSel 17 | ||
476 | #define VERSATILE_TIMER3_EnSel 19 | ||
477 | #define VERSATILE_TIMER4_EnSel 21 | ||
478 | |||
479 | |||
480 | #define MAX_TIMER 2 | ||
481 | #define MAX_PERIOD 699050 | ||
482 | #define TICKS_PER_uSEC 1 | ||
483 | |||
484 | /* | ||
485 | * These are useconds NOT ticks. | ||
486 | * | ||
487 | */ | ||
488 | #define mSEC_1 1000 | ||
489 | #define mSEC_5 (mSEC_1 * 5) | ||
490 | #define mSEC_10 (mSEC_1 * 10) | ||
491 | #define mSEC_25 (mSEC_1 * 25) | ||
492 | #define SEC_1 (mSEC_1 * 1000) | ||
493 | |||
494 | #define VERSATILE_CSR_BASE 0x10000000 | ||
495 | #define VERSATILE_CSR_SIZE 0x10000000 | ||
496 | |||
497 | #ifdef CONFIG_MACH_VERSATILE_AB | ||
498 | /* | ||
499 | * IB2 Versatile/AB expansion board definitions | ||
500 | */ | ||
501 | #define VERSATILE_IB2_CAMERA_BANK 0x24000000 | ||
502 | #define VERSATILE_IB2_KBD_DATAREG 0x25000000 | ||
503 | #define VERSATILE_IB2_IER 0x26000000 /* for VICINTSOURCE27 */ | ||
504 | #define VERSATILE_IB2_CTRL 0x27000000 | ||
505 | #define VERSATILE_IB2_STAT 0x27000004 | ||
506 | #endif | ||
507 | |||
508 | #endif | ||
509 | |||
510 | /* END */ | ||
diff --git a/include/asm-arm/arch-versatile/system.h b/include/asm-arm/arch-versatile/system.h new file mode 100644 index 000000000000..8889a189739f --- /dev/null +++ b/include/asm-arm/arch-versatile/system.h | |||
@@ -0,0 +1,51 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-versatile/system.h | ||
3 | * | ||
4 | * Copyright (C) 2003 ARM Limited | ||
5 | * Copyright (C) 2000 Deep Blue Solutions Ltd | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License as published by | ||
9 | * the Free Software Foundation; either version 2 of the License, or | ||
10 | * (at your option) any later version. | ||
11 | * | ||
12 | * This program is distributed in the hope that it will be useful, | ||
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
15 | * GNU General Public License for more details. | ||
16 | * | ||
17 | * You should have received a copy of the GNU General Public License | ||
18 | * along with this program; if not, write to the Free Software | ||
19 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
20 | */ | ||
21 | #ifndef __ASM_ARCH_SYSTEM_H | ||
22 | #define __ASM_ARCH_SYSTEM_H | ||
23 | |||
24 | #include <asm/hardware.h> | ||
25 | #include <asm/io.h> | ||
26 | #include <asm/arch/platform.h> | ||
27 | |||
28 | static inline void arch_idle(void) | ||
29 | { | ||
30 | /* | ||
31 | * This should do all the clock switching | ||
32 | * and wait for interrupt tricks | ||
33 | */ | ||
34 | cpu_do_idle(); | ||
35 | } | ||
36 | |||
37 | static inline void arch_reset(char mode) | ||
38 | { | ||
39 | unsigned int hdr_ctrl = (IO_ADDRESS(VERSATILE_SYS_BASE) + VERSATILE_SYS_RESETCTL_OFFSET); | ||
40 | unsigned int val; | ||
41 | |||
42 | /* | ||
43 | * To reset, we hit the on-board reset register | ||
44 | * in the system FPGA | ||
45 | */ | ||
46 | val = __raw_readl(hdr_ctrl); | ||
47 | val |= VERSATILE_SYS_CTRL_RESET_CONFIGCLR; | ||
48 | __raw_writel(val, hdr_ctrl); | ||
49 | } | ||
50 | |||
51 | #endif | ||
diff --git a/include/asm-arm/arch-versatile/timex.h b/include/asm-arm/arch-versatile/timex.h new file mode 100644 index 000000000000..38fd04fc9141 --- /dev/null +++ b/include/asm-arm/arch-versatile/timex.h | |||
@@ -0,0 +1,23 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-versatile/timex.h | ||
3 | * | ||
4 | * Versatile architecture timex specifications | ||
5 | * | ||
6 | * Copyright (C) 2003 ARM Limited | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License as published by | ||
10 | * the Free Software Foundation; either version 2 of the License, or | ||
11 | * (at your option) any later version. | ||
12 | * | ||
13 | * This program is distributed in the hope that it will be useful, | ||
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
16 | * GNU General Public License for more details. | ||
17 | * | ||
18 | * You should have received a copy of the GNU General Public License | ||
19 | * along with this program; if not, write to the Free Software | ||
20 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
21 | */ | ||
22 | |||
23 | #define CLOCK_TICK_RATE (50000000 / 16) | ||
diff --git a/include/asm-arm/arch-versatile/uncompress.h b/include/asm-arm/arch-versatile/uncompress.h new file mode 100644 index 000000000000..2f57499c7b92 --- /dev/null +++ b/include/asm-arm/arch-versatile/uncompress.h | |||
@@ -0,0 +1,52 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-versatile/uncompress.h | ||
3 | * | ||
4 | * Copyright (C) 2003 ARM Limited | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | * GNU General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License | ||
17 | * along with this program; if not, write to the Free Software | ||
18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
19 | */ | ||
20 | #define AMBA_UART_DR (*(volatile unsigned char *)0x101F1000) | ||
21 | #define AMBA_UART_LCRH (*(volatile unsigned char *)0x101F102C) | ||
22 | #define AMBA_UART_CR (*(volatile unsigned char *)0x101F1030) | ||
23 | #define AMBA_UART_FR (*(volatile unsigned char *)0x101F1018) | ||
24 | |||
25 | /* | ||
26 | * This does not append a newline | ||
27 | */ | ||
28 | static void putstr(const char *s) | ||
29 | { | ||
30 | while (*s) { | ||
31 | while (AMBA_UART_FR & (1 << 5)) | ||
32 | barrier(); | ||
33 | |||
34 | AMBA_UART_DR = *s; | ||
35 | |||
36 | if (*s == '\n') { | ||
37 | while (AMBA_UART_FR & (1 << 5)) | ||
38 | barrier(); | ||
39 | |||
40 | AMBA_UART_DR = '\r'; | ||
41 | } | ||
42 | s++; | ||
43 | } | ||
44 | while (AMBA_UART_FR & (1 << 3)) | ||
45 | barrier(); | ||
46 | } | ||
47 | |||
48 | /* | ||
49 | * nothing to do | ||
50 | */ | ||
51 | #define arch_decomp_setup() | ||
52 | #define arch_decomp_wdog() | ||
diff --git a/include/asm-arm/arch-versatile/vmalloc.h b/include/asm-arm/arch-versatile/vmalloc.h new file mode 100644 index 000000000000..adfb34829bfc --- /dev/null +++ b/include/asm-arm/arch-versatile/vmalloc.h | |||
@@ -0,0 +1,33 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/arch-versatile/vmalloc.h | ||
3 | * | ||
4 | * Copyright (C) 2003 ARM Limited | ||
5 | * Copyright (C) 2000 Russell King. | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License as published by | ||
9 | * the Free Software Foundation; either version 2 of the License, or | ||
10 | * (at your option) any later version. | ||
11 | * | ||
12 | * This program is distributed in the hope that it will be useful, | ||
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
15 | * GNU General Public License for more details. | ||
16 | * | ||
17 | * You should have received a copy of the GNU General Public License | ||
18 | * along with this program; if not, write to the Free Software | ||
19 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
20 | */ | ||
21 | |||
22 | /* | ||
23 | * Just any arbitrary offset to the start of the vmalloc VM area: the | ||
24 | * current 8MB value just means that there will be a 8MB "hole" after the | ||
25 | * physical memory until the kernel virtual memory starts. That means that | ||
26 | * any out-of-bounds memory accesses will hopefully be caught. | ||
27 | * The vmalloc() routines leaves a hole of 4kB between each vmalloced | ||
28 | * area for the same reason. ;) | ||
29 | */ | ||
30 | #define VMALLOC_OFFSET (8*1024*1024) | ||
31 | #define VMALLOC_START (((unsigned long)high_memory + VMALLOC_OFFSET) & ~(VMALLOC_OFFSET-1)) | ||
32 | #define VMALLOC_VMADDR(x) ((unsigned long)(x)) | ||
33 | #define VMALLOC_END (PAGE_OFFSET + 0x18000000) | ||
diff --git a/include/asm-arm/assembler.h b/include/asm-arm/assembler.h new file mode 100644 index 000000000000..69a28f96bee2 --- /dev/null +++ b/include/asm-arm/assembler.h | |||
@@ -0,0 +1,117 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/assembler.h | ||
3 | * | ||
4 | * Copyright (C) 1996-2000 Russell King | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | * This file contains arm architecture specific defines | ||
11 | * for the different processors. | ||
12 | * | ||
13 | * Do not include any C declarations in this file - it is included by | ||
14 | * assembler source. | ||
15 | */ | ||
16 | #ifndef __ASSEMBLY__ | ||
17 | #error "Only include this from assembly code" | ||
18 | #endif | ||
19 | |||
20 | #include <asm/ptrace.h> | ||
21 | |||
22 | /* | ||
23 | * Endian independent macros for shifting bytes within registers. | ||
24 | */ | ||
25 | #ifndef __ARMEB__ | ||
26 | #define pull lsr | ||
27 | #define push lsl | ||
28 | #define get_byte_0 lsl #0 | ||
29 | #define get_byte_1 lsr #8 | ||
30 | #define get_byte_2 lsr #16 | ||
31 | #define get_byte_3 lsr #24 | ||
32 | #define put_byte_0 lsl #0 | ||
33 | #define put_byte_1 lsl #8 | ||
34 | #define put_byte_2 lsl #16 | ||
35 | #define put_byte_3 lsl #24 | ||
36 | #else | ||
37 | #define pull lsl | ||
38 | #define push lsr | ||
39 | #define get_byte_0 lsr #24 | ||
40 | #define get_byte_1 lsr #16 | ||
41 | #define get_byte_2 lsr #8 | ||
42 | #define get_byte_3 lsl #0 | ||
43 | #define put_byte_0 lsl #24 | ||
44 | #define put_byte_1 lsl #16 | ||
45 | #define put_byte_2 lsl #8 | ||
46 | #define put_byte_3 lsl #0 | ||
47 | #endif | ||
48 | |||
49 | /* | ||
50 | * Data preload for architectures that support it | ||
51 | */ | ||
52 | #if __LINUX_ARM_ARCH__ >= 5 | ||
53 | #define PLD(code...) code | ||
54 | #else | ||
55 | #define PLD(code...) | ||
56 | #endif | ||
57 | |||
58 | #define MODE_USR USR_MODE | ||
59 | #define MODE_FIQ FIQ_MODE | ||
60 | #define MODE_IRQ IRQ_MODE | ||
61 | #define MODE_SVC SVC_MODE | ||
62 | |||
63 | #define DEFAULT_FIQ MODE_FIQ | ||
64 | |||
65 | /* | ||
66 | * LOADREGS - ldm with PC in register list (eg, ldmfd sp!, {pc}) | ||
67 | */ | ||
68 | #ifdef __STDC__ | ||
69 | #define LOADREGS(cond, base, reglist...)\ | ||
70 | ldm##cond base,reglist | ||
71 | #else | ||
72 | #define LOADREGS(cond, base, reglist...)\ | ||
73 | ldm/**/cond base,reglist | ||
74 | #endif | ||
75 | |||
76 | /* | ||
77 | * Build a return instruction for this processor type. | ||
78 | */ | ||
79 | #define RETINSTR(instr, regs...)\ | ||
80 | instr regs | ||
81 | |||
82 | /* | ||
83 | * Save the current IRQ state and disable IRQs. Note that this macro | ||
84 | * assumes FIQs are enabled, and that the processor is in SVC mode. | ||
85 | */ | ||
86 | .macro save_and_disable_irqs, oldcpsr, temp | ||
87 | mrs \oldcpsr, cpsr | ||
88 | mov \temp, #PSR_I_BIT | MODE_SVC | ||
89 | msr cpsr_c, \temp | ||
90 | .endm | ||
91 | |||
92 | /* | ||
93 | * Restore interrupt state previously stored in a register. We don't | ||
94 | * guarantee that this will preserve the flags. | ||
95 | */ | ||
96 | .macro restore_irqs, oldcpsr | ||
97 | msr cpsr_c, \oldcpsr | ||
98 | .endm | ||
99 | |||
100 | /* | ||
101 | * These two are used to save LR/restore PC over a user-based access. | ||
102 | * The old 26-bit architecture requires that we do. On 32-bit | ||
103 | * architecture, we can safely ignore this requirement. | ||
104 | */ | ||
105 | .macro save_lr | ||
106 | .endm | ||
107 | |||
108 | .macro restore_pc | ||
109 | mov pc, lr | ||
110 | .endm | ||
111 | |||
112 | #define USER(x...) \ | ||
113 | 9999: x; \ | ||
114 | .section __ex_table,"a"; \ | ||
115 | .align 3; \ | ||
116 | .long 9999b,9001f; \ | ||
117 | .previous | ||
diff --git a/include/asm-arm/atomic.h b/include/asm-arm/atomic.h new file mode 100644 index 000000000000..2885972b0855 --- /dev/null +++ b/include/asm-arm/atomic.h | |||
@@ -0,0 +1,165 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/atomic.h | ||
3 | * | ||
4 | * Copyright (C) 1996 Russell King. | ||
5 | * Copyright (C) 2002 Deep Blue Solutions Ltd. | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License version 2 as | ||
9 | * published by the Free Software Foundation. | ||
10 | */ | ||
11 | #ifndef __ASM_ARM_ATOMIC_H | ||
12 | #define __ASM_ARM_ATOMIC_H | ||
13 | |||
14 | #include <linux/config.h> | ||
15 | |||
16 | typedef struct { volatile int counter; } atomic_t; | ||
17 | |||
18 | #define ATOMIC_INIT(i) { (i) } | ||
19 | |||
20 | #ifdef __KERNEL__ | ||
21 | |||
22 | #define atomic_read(v) ((v)->counter) | ||
23 | |||
24 | #if __LINUX_ARM_ARCH__ >= 6 | ||
25 | |||
26 | /* | ||
27 | * ARMv6 UP and SMP safe atomic ops. We use load exclusive and | ||
28 | * store exclusive to ensure that these are atomic. We may loop | ||
29 | * to ensure that the update happens. Writing to 'v->counter' | ||
30 | * without using the following operations WILL break the atomic | ||
31 | * nature of these ops. | ||
32 | */ | ||
33 | static inline void atomic_set(atomic_t *v, int i) | ||
34 | { | ||
35 | unsigned long tmp; | ||
36 | |||
37 | __asm__ __volatile__("@ atomic_set\n" | ||
38 | "1: ldrex %0, [%1]\n" | ||
39 | " strex %0, %2, [%1]\n" | ||
40 | " teq %0, #0\n" | ||
41 | " bne 1b" | ||
42 | : "=&r" (tmp) | ||
43 | : "r" (&v->counter), "r" (i) | ||
44 | : "cc"); | ||
45 | } | ||
46 | |||
47 | static inline int atomic_add_return(int i, atomic_t *v) | ||
48 | { | ||
49 | unsigned long tmp; | ||
50 | int result; | ||
51 | |||
52 | __asm__ __volatile__("@ atomic_add_return\n" | ||
53 | "1: ldrex %0, [%2]\n" | ||
54 | " add %0, %0, %3\n" | ||
55 | " strex %1, %0, [%2]\n" | ||
56 | " teq %1, #0\n" | ||
57 | " bne 1b" | ||
58 | : "=&r" (result), "=&r" (tmp) | ||
59 | : "r" (&v->counter), "Ir" (i) | ||
60 | : "cc"); | ||
61 | |||
62 | return result; | ||
63 | } | ||
64 | |||
65 | static inline int atomic_sub_return(int i, atomic_t *v) | ||
66 | { | ||
67 | unsigned long tmp; | ||
68 | int result; | ||
69 | |||
70 | __asm__ __volatile__("@ atomic_sub_return\n" | ||
71 | "1: ldrex %0, [%2]\n" | ||
72 | " sub %0, %0, %3\n" | ||
73 | " strex %1, %0, [%2]\n" | ||
74 | " teq %1, #0\n" | ||
75 | " bne 1b" | ||
76 | : "=&r" (result), "=&r" (tmp) | ||
77 | : "r" (&v->counter), "Ir" (i) | ||
78 | : "cc"); | ||
79 | |||
80 | return result; | ||
81 | } | ||
82 | |||
83 | static inline void atomic_clear_mask(unsigned long mask, unsigned long *addr) | ||
84 | { | ||
85 | unsigned long tmp, tmp2; | ||
86 | |||
87 | __asm__ __volatile__("@ atomic_clear_mask\n" | ||
88 | "1: ldrex %0, %2\n" | ||
89 | " bic %0, %0, %3\n" | ||
90 | " strex %1, %0, %2\n" | ||
91 | " teq %1, #0\n" | ||
92 | " bne 1b" | ||
93 | : "=&r" (tmp), "=&r" (tmp2) | ||
94 | : "r" (addr), "Ir" (mask) | ||
95 | : "cc"); | ||
96 | } | ||
97 | |||
98 | #else /* ARM_ARCH_6 */ | ||
99 | |||
100 | #include <asm/system.h> | ||
101 | |||
102 | #ifdef CONFIG_SMP | ||
103 | #error SMP not supported on pre-ARMv6 CPUs | ||
104 | #endif | ||
105 | |||
106 | #define atomic_set(v,i) (((v)->counter) = (i)) | ||
107 | |||
108 | static inline int atomic_add_return(int i, atomic_t *v) | ||
109 | { | ||
110 | unsigned long flags; | ||
111 | int val; | ||
112 | |||
113 | local_irq_save(flags); | ||
114 | val = v->counter; | ||
115 | v->counter = val += i; | ||
116 | local_irq_restore(flags); | ||
117 | |||
118 | return val; | ||
119 | } | ||
120 | |||
121 | static inline int atomic_sub_return(int i, atomic_t *v) | ||
122 | { | ||
123 | unsigned long flags; | ||
124 | int val; | ||
125 | |||
126 | local_irq_save(flags); | ||
127 | val = v->counter; | ||
128 | v->counter = val -= i; | ||
129 | local_irq_restore(flags); | ||
130 | |||
131 | return val; | ||
132 | } | ||
133 | |||
134 | static inline void atomic_clear_mask(unsigned long mask, unsigned long *addr) | ||
135 | { | ||
136 | unsigned long flags; | ||
137 | |||
138 | local_irq_save(flags); | ||
139 | *addr &= ~mask; | ||
140 | local_irq_restore(flags); | ||
141 | } | ||
142 | |||
143 | #endif /* __LINUX_ARM_ARCH__ */ | ||
144 | |||
145 | #define atomic_add(i, v) (void) atomic_add_return(i, v) | ||
146 | #define atomic_inc(v) (void) atomic_add_return(1, v) | ||
147 | #define atomic_sub(i, v) (void) atomic_sub_return(i, v) | ||
148 | #define atomic_dec(v) (void) atomic_sub_return(1, v) | ||
149 | |||
150 | #define atomic_inc_and_test(v) (atomic_add_return(1, v) == 0) | ||
151 | #define atomic_dec_and_test(v) (atomic_sub_return(1, v) == 0) | ||
152 | #define atomic_inc_return(v) (atomic_add_return(1, v)) | ||
153 | #define atomic_dec_return(v) (atomic_sub_return(1, v)) | ||
154 | #define atomic_sub_and_test(i, v) (atomic_sub_return(i, v) == 0) | ||
155 | |||
156 | #define atomic_add_negative(i,v) (atomic_add_return(i, v) < 0) | ||
157 | |||
158 | /* Atomic operations are already serializing on ARM */ | ||
159 | #define smp_mb__before_atomic_dec() barrier() | ||
160 | #define smp_mb__after_atomic_dec() barrier() | ||
161 | #define smp_mb__before_atomic_inc() barrier() | ||
162 | #define smp_mb__after_atomic_inc() barrier() | ||
163 | |||
164 | #endif | ||
165 | #endif | ||
diff --git a/include/asm-arm/bitops.h b/include/asm-arm/bitops.h new file mode 100644 index 000000000000..4edd4dc40c5b --- /dev/null +++ b/include/asm-arm/bitops.h | |||
@@ -0,0 +1,416 @@ | |||
1 | /* | ||
2 | * Copyright 1995, Russell King. | ||
3 | * Various bits and pieces copyrights include: | ||
4 | * Linus Torvalds (test_bit). | ||
5 | * Big endian support: Copyright 2001, Nicolas Pitre | ||
6 | * reworked by rmk. | ||
7 | * | ||
8 | * bit 0 is the LSB of an "unsigned long" quantity. | ||
9 | * | ||
10 | * Please note that the code in this file should never be included | ||
11 | * from user space. Many of these are not implemented in assembler | ||
12 | * since they would be too costly. Also, they require privileged | ||
13 | * instructions (which are not available from user mode) to ensure | ||
14 | * that they are atomic. | ||
15 | */ | ||
16 | |||
17 | #ifndef __ASM_ARM_BITOPS_H | ||
18 | #define __ASM_ARM_BITOPS_H | ||
19 | |||
20 | #ifdef __KERNEL__ | ||
21 | |||
22 | #include <asm/system.h> | ||
23 | |||
24 | #define smp_mb__before_clear_bit() do { } while (0) | ||
25 | #define smp_mb__after_clear_bit() do { } while (0) | ||
26 | |||
27 | /* | ||
28 | * These functions are the basis of our bit ops. | ||
29 | * | ||
30 | * First, the atomic bitops. These use native endian. | ||
31 | */ | ||
32 | static inline void ____atomic_set_bit(unsigned int bit, volatile unsigned long *p) | ||
33 | { | ||
34 | unsigned long flags; | ||
35 | unsigned long mask = 1UL << (bit & 31); | ||
36 | |||
37 | p += bit >> 5; | ||
38 | |||
39 | local_irq_save(flags); | ||
40 | *p |= mask; | ||
41 | local_irq_restore(flags); | ||
42 | } | ||
43 | |||
44 | static inline void ____atomic_clear_bit(unsigned int bit, volatile unsigned long *p) | ||
45 | { | ||
46 | unsigned long flags; | ||
47 | unsigned long mask = 1UL << (bit & 31); | ||
48 | |||
49 | p += bit >> 5; | ||
50 | |||
51 | local_irq_save(flags); | ||
52 | *p &= ~mask; | ||
53 | local_irq_restore(flags); | ||
54 | } | ||
55 | |||
56 | static inline void ____atomic_change_bit(unsigned int bit, volatile unsigned long *p) | ||
57 | { | ||
58 | unsigned long flags; | ||
59 | unsigned long mask = 1UL << (bit & 31); | ||
60 | |||
61 | p += bit >> 5; | ||
62 | |||
63 | local_irq_save(flags); | ||
64 | *p ^= mask; | ||
65 | local_irq_restore(flags); | ||
66 | } | ||
67 | |||
68 | static inline int | ||
69 | ____atomic_test_and_set_bit(unsigned int bit, volatile unsigned long *p) | ||
70 | { | ||
71 | unsigned long flags; | ||
72 | unsigned int res; | ||
73 | unsigned long mask = 1UL << (bit & 31); | ||
74 | |||
75 | p += bit >> 5; | ||
76 | |||
77 | local_irq_save(flags); | ||
78 | res = *p; | ||
79 | *p = res | mask; | ||
80 | local_irq_restore(flags); | ||
81 | |||
82 | return res & mask; | ||
83 | } | ||
84 | |||
85 | static inline int | ||
86 | ____atomic_test_and_clear_bit(unsigned int bit, volatile unsigned long *p) | ||
87 | { | ||
88 | unsigned long flags; | ||
89 | unsigned int res; | ||
90 | unsigned long mask = 1UL << (bit & 31); | ||
91 | |||
92 | p += bit >> 5; | ||
93 | |||
94 | local_irq_save(flags); | ||
95 | res = *p; | ||
96 | *p = res & ~mask; | ||
97 | local_irq_restore(flags); | ||
98 | |||
99 | return res & mask; | ||
100 | } | ||
101 | |||
102 | static inline int | ||
103 | ____atomic_test_and_change_bit(unsigned int bit, volatile unsigned long *p) | ||
104 | { | ||
105 | unsigned long flags; | ||
106 | unsigned int res; | ||
107 | unsigned long mask = 1UL << (bit & 31); | ||
108 | |||
109 | p += bit >> 5; | ||
110 | |||
111 | local_irq_save(flags); | ||
112 | res = *p; | ||
113 | *p = res ^ mask; | ||
114 | local_irq_restore(flags); | ||
115 | |||
116 | return res & mask; | ||
117 | } | ||
118 | |||
119 | /* | ||
120 | * Now the non-atomic variants. We let the compiler handle all | ||
121 | * optimisations for these. These are all _native_ endian. | ||
122 | */ | ||
123 | static inline void __set_bit(int nr, volatile unsigned long *p) | ||
124 | { | ||
125 | p[nr >> 5] |= (1UL << (nr & 31)); | ||
126 | } | ||
127 | |||
128 | static inline void __clear_bit(int nr, volatile unsigned long *p) | ||
129 | { | ||
130 | p[nr >> 5] &= ~(1UL << (nr & 31)); | ||
131 | } | ||
132 | |||
133 | static inline void __change_bit(int nr, volatile unsigned long *p) | ||
134 | { | ||
135 | p[nr >> 5] ^= (1UL << (nr & 31)); | ||
136 | } | ||
137 | |||
138 | static inline int __test_and_set_bit(int nr, volatile unsigned long *p) | ||
139 | { | ||
140 | unsigned long oldval, mask = 1UL << (nr & 31); | ||
141 | |||
142 | p += nr >> 5; | ||
143 | |||
144 | oldval = *p; | ||
145 | *p = oldval | mask; | ||
146 | return oldval & mask; | ||
147 | } | ||
148 | |||
149 | static inline int __test_and_clear_bit(int nr, volatile unsigned long *p) | ||
150 | { | ||
151 | unsigned long oldval, mask = 1UL << (nr & 31); | ||
152 | |||
153 | p += nr >> 5; | ||
154 | |||
155 | oldval = *p; | ||
156 | *p = oldval & ~mask; | ||
157 | return oldval & mask; | ||
158 | } | ||
159 | |||
160 | static inline int __test_and_change_bit(int nr, volatile unsigned long *p) | ||
161 | { | ||
162 | unsigned long oldval, mask = 1UL << (nr & 31); | ||
163 | |||
164 | p += nr >> 5; | ||
165 | |||
166 | oldval = *p; | ||
167 | *p = oldval ^ mask; | ||
168 | return oldval & mask; | ||
169 | } | ||
170 | |||
171 | /* | ||
172 | * This routine doesn't need to be atomic. | ||
173 | */ | ||
174 | static inline int __test_bit(int nr, const volatile unsigned long * p) | ||
175 | { | ||
176 | return (p[nr >> 5] >> (nr & 31)) & 1UL; | ||
177 | } | ||
178 | |||
179 | /* | ||
180 | * A note about Endian-ness. | ||
181 | * ------------------------- | ||
182 | * | ||
183 | * When the ARM is put into big endian mode via CR15, the processor | ||
184 | * merely swaps the order of bytes within words, thus: | ||
185 | * | ||
186 | * ------------ physical data bus bits ----------- | ||
187 | * D31 ... D24 D23 ... D16 D15 ... D8 D7 ... D0 | ||
188 | * little byte 3 byte 2 byte 1 byte 0 | ||
189 | * big byte 0 byte 1 byte 2 byte 3 | ||
190 | * | ||
191 | * This means that reading a 32-bit word at address 0 returns the same | ||
192 | * value irrespective of the endian mode bit. | ||
193 | * | ||
194 | * Peripheral devices should be connected with the data bus reversed in | ||
195 | * "Big Endian" mode. ARM Application Note 61 is applicable, and is | ||
196 | * available from http://www.arm.com/. | ||
197 | * | ||
198 | * The following assumes that the data bus connectivity for big endian | ||
199 | * mode has been followed. | ||
200 | * | ||
201 | * Note that bit 0 is defined to be 32-bit word bit 0, not byte 0 bit 0. | ||
202 | */ | ||
203 | |||
204 | /* | ||
205 | * Little endian assembly bitops. nr = 0 -> byte 0 bit 0. | ||
206 | */ | ||
207 | extern void _set_bit_le(int nr, volatile unsigned long * p); | ||
208 | extern void _clear_bit_le(int nr, volatile unsigned long * p); | ||
209 | extern void _change_bit_le(int nr, volatile unsigned long * p); | ||
210 | extern int _test_and_set_bit_le(int nr, volatile unsigned long * p); | ||
211 | extern int _test_and_clear_bit_le(int nr, volatile unsigned long * p); | ||
212 | extern int _test_and_change_bit_le(int nr, volatile unsigned long * p); | ||
213 | extern int _find_first_zero_bit_le(const void * p, unsigned size); | ||
214 | extern int _find_next_zero_bit_le(const void * p, int size, int offset); | ||
215 | extern int _find_first_bit_le(const unsigned long *p, unsigned size); | ||
216 | extern int _find_next_bit_le(const unsigned long *p, int size, int offset); | ||
217 | |||
218 | /* | ||
219 | * Big endian assembly bitops. nr = 0 -> byte 3 bit 0. | ||
220 | */ | ||
221 | extern void _set_bit_be(int nr, volatile unsigned long * p); | ||
222 | extern void _clear_bit_be(int nr, volatile unsigned long * p); | ||
223 | extern void _change_bit_be(int nr, volatile unsigned long * p); | ||
224 | extern int _test_and_set_bit_be(int nr, volatile unsigned long * p); | ||
225 | extern int _test_and_clear_bit_be(int nr, volatile unsigned long * p); | ||
226 | extern int _test_and_change_bit_be(int nr, volatile unsigned long * p); | ||
227 | extern int _find_first_zero_bit_be(const void * p, unsigned size); | ||
228 | extern int _find_next_zero_bit_be(const void * p, int size, int offset); | ||
229 | extern int _find_first_bit_be(const unsigned long *p, unsigned size); | ||
230 | extern int _find_next_bit_be(const unsigned long *p, int size, int offset); | ||
231 | |||
232 | /* | ||
233 | * The __* form of bitops are non-atomic and may be reordered. | ||
234 | */ | ||
235 | #define ATOMIC_BITOP_LE(name,nr,p) \ | ||
236 | (__builtin_constant_p(nr) ? \ | ||
237 | ____atomic_##name(nr, p) : \ | ||
238 | _##name##_le(nr,p)) | ||
239 | |||
240 | #define ATOMIC_BITOP_BE(name,nr,p) \ | ||
241 | (__builtin_constant_p(nr) ? \ | ||
242 | ____atomic_##name(nr, p) : \ | ||
243 | _##name##_be(nr,p)) | ||
244 | |||
245 | #define NONATOMIC_BITOP(name,nr,p) \ | ||
246 | (____nonatomic_##name(nr, p)) | ||
247 | |||
248 | #ifndef __ARMEB__ | ||
249 | /* | ||
250 | * These are the little endian, atomic definitions. | ||
251 | */ | ||
252 | #define set_bit(nr,p) ATOMIC_BITOP_LE(set_bit,nr,p) | ||
253 | #define clear_bit(nr,p) ATOMIC_BITOP_LE(clear_bit,nr,p) | ||
254 | #define change_bit(nr,p) ATOMIC_BITOP_LE(change_bit,nr,p) | ||
255 | #define test_and_set_bit(nr,p) ATOMIC_BITOP_LE(test_and_set_bit,nr,p) | ||
256 | #define test_and_clear_bit(nr,p) ATOMIC_BITOP_LE(test_and_clear_bit,nr,p) | ||
257 | #define test_and_change_bit(nr,p) ATOMIC_BITOP_LE(test_and_change_bit,nr,p) | ||
258 | #define test_bit(nr,p) __test_bit(nr,p) | ||
259 | #define find_first_zero_bit(p,sz) _find_first_zero_bit_le(p,sz) | ||
260 | #define find_next_zero_bit(p,sz,off) _find_next_zero_bit_le(p,sz,off) | ||
261 | #define find_first_bit(p,sz) _find_first_bit_le(p,sz) | ||
262 | #define find_next_bit(p,sz,off) _find_next_bit_le(p,sz,off) | ||
263 | |||
264 | #define WORD_BITOFF_TO_LE(x) ((x)) | ||
265 | |||
266 | #else | ||
267 | |||
268 | /* | ||
269 | * These are the big endian, atomic definitions. | ||
270 | */ | ||
271 | #define set_bit(nr,p) ATOMIC_BITOP_BE(set_bit,nr,p) | ||
272 | #define clear_bit(nr,p) ATOMIC_BITOP_BE(clear_bit,nr,p) | ||
273 | #define change_bit(nr,p) ATOMIC_BITOP_BE(change_bit,nr,p) | ||
274 | #define test_and_set_bit(nr,p) ATOMIC_BITOP_BE(test_and_set_bit,nr,p) | ||
275 | #define test_and_clear_bit(nr,p) ATOMIC_BITOP_BE(test_and_clear_bit,nr,p) | ||
276 | #define test_and_change_bit(nr,p) ATOMIC_BITOP_BE(test_and_change_bit,nr,p) | ||
277 | #define test_bit(nr,p) __test_bit(nr,p) | ||
278 | #define find_first_zero_bit(p,sz) _find_first_zero_bit_be(p,sz) | ||
279 | #define find_next_zero_bit(p,sz,off) _find_next_zero_bit_be(p,sz,off) | ||
280 | #define find_first_bit(p,sz) _find_first_bit_be(p,sz) | ||
281 | #define find_next_bit(p,sz,off) _find_next_bit_be(p,sz,off) | ||
282 | |||
283 | #define WORD_BITOFF_TO_LE(x) ((x) ^ 0x18) | ||
284 | |||
285 | #endif | ||
286 | |||
287 | #if __LINUX_ARM_ARCH__ < 5 | ||
288 | |||
289 | /* | ||
290 | * ffz = Find First Zero in word. Undefined if no zero exists, | ||
291 | * so code should check against ~0UL first.. | ||
292 | */ | ||
293 | static inline unsigned long ffz(unsigned long word) | ||
294 | { | ||
295 | int k; | ||
296 | |||
297 | word = ~word; | ||
298 | k = 31; | ||
299 | if (word & 0x0000ffff) { k -= 16; word <<= 16; } | ||
300 | if (word & 0x00ff0000) { k -= 8; word <<= 8; } | ||
301 | if (word & 0x0f000000) { k -= 4; word <<= 4; } | ||
302 | if (word & 0x30000000) { k -= 2; word <<= 2; } | ||
303 | if (word & 0x40000000) { k -= 1; } | ||
304 | return k; | ||
305 | } | ||
306 | |||
307 | /* | ||
308 | * ffz = Find First Zero in word. Undefined if no zero exists, | ||
309 | * so code should check against ~0UL first.. | ||
310 | */ | ||
311 | static inline unsigned long __ffs(unsigned long word) | ||
312 | { | ||
313 | int k; | ||
314 | |||
315 | k = 31; | ||
316 | if (word & 0x0000ffff) { k -= 16; word <<= 16; } | ||
317 | if (word & 0x00ff0000) { k -= 8; word <<= 8; } | ||
318 | if (word & 0x0f000000) { k -= 4; word <<= 4; } | ||
319 | if (word & 0x30000000) { k -= 2; word <<= 2; } | ||
320 | if (word & 0x40000000) { k -= 1; } | ||
321 | return k; | ||
322 | } | ||
323 | |||
324 | /* | ||
325 | * fls: find last bit set. | ||
326 | */ | ||
327 | |||
328 | #define fls(x) generic_fls(x) | ||
329 | |||
330 | /* | ||
331 | * ffs: find first bit set. This is defined the same way as | ||
332 | * the libc and compiler builtin ffs routines, therefore | ||
333 | * differs in spirit from the above ffz (man ffs). | ||
334 | */ | ||
335 | |||
336 | #define ffs(x) generic_ffs(x) | ||
337 | |||
338 | #else | ||
339 | |||
340 | /* | ||
341 | * On ARMv5 and above those functions can be implemented around | ||
342 | * the clz instruction for much better code efficiency. | ||
343 | */ | ||
344 | |||
345 | static __inline__ int generic_fls(int x); | ||
346 | #define fls(x) \ | ||
347 | ( __builtin_constant_p(x) ? generic_fls(x) : \ | ||
348 | ({ int __r; asm("clz\t%0, %1" : "=r"(__r) : "r"(x) : "cc"); 32-__r; }) ) | ||
349 | #define ffs(x) ({ unsigned long __t = (x); fls(__t & -__t); }) | ||
350 | #define __ffs(x) (ffs(x) - 1) | ||
351 | #define ffz(x) __ffs( ~(x) ) | ||
352 | |||
353 | #endif | ||
354 | |||
355 | /* | ||
356 | * Find first bit set in a 168-bit bitmap, where the first | ||
357 | * 128 bits are unlikely to be set. | ||
358 | */ | ||
359 | static inline int sched_find_first_bit(const unsigned long *b) | ||
360 | { | ||
361 | unsigned long v; | ||
362 | unsigned int off; | ||
363 | |||
364 | for (off = 0; v = b[off], off < 4; off++) { | ||
365 | if (unlikely(v)) | ||
366 | break; | ||
367 | } | ||
368 | return __ffs(v) + off * 32; | ||
369 | } | ||
370 | |||
371 | /* | ||
372 | * hweightN: returns the hamming weight (i.e. the number | ||
373 | * of bits set) of a N-bit word | ||
374 | */ | ||
375 | |||
376 | #define hweight32(x) generic_hweight32(x) | ||
377 | #define hweight16(x) generic_hweight16(x) | ||
378 | #define hweight8(x) generic_hweight8(x) | ||
379 | |||
380 | /* | ||
381 | * Ext2 is defined to use little-endian byte ordering. | ||
382 | * These do not need to be atomic. | ||
383 | */ | ||
384 | #define ext2_set_bit(nr,p) \ | ||
385 | __test_and_set_bit(WORD_BITOFF_TO_LE(nr), (unsigned long *)(p)) | ||
386 | #define ext2_set_bit_atomic(lock,nr,p) \ | ||
387 | test_and_set_bit(WORD_BITOFF_TO_LE(nr), (unsigned long *)(p)) | ||
388 | #define ext2_clear_bit(nr,p) \ | ||
389 | __test_and_clear_bit(WORD_BITOFF_TO_LE(nr), (unsigned long *)(p)) | ||
390 | #define ext2_clear_bit_atomic(lock,nr,p) \ | ||
391 | test_and_clear_bit(WORD_BITOFF_TO_LE(nr), (unsigned long *)(p)) | ||
392 | #define ext2_test_bit(nr,p) \ | ||
393 | __test_bit(WORD_BITOFF_TO_LE(nr), (unsigned long *)(p)) | ||
394 | #define ext2_find_first_zero_bit(p,sz) \ | ||
395 | _find_first_zero_bit_le(p,sz) | ||
396 | #define ext2_find_next_zero_bit(p,sz,off) \ | ||
397 | _find_next_zero_bit_le(p,sz,off) | ||
398 | |||
399 | /* | ||
400 | * Minix is defined to use little-endian byte ordering. | ||
401 | * These do not need to be atomic. | ||
402 | */ | ||
403 | #define minix_set_bit(nr,p) \ | ||
404 | __set_bit(WORD_BITOFF_TO_LE(nr), (unsigned long *)(p)) | ||
405 | #define minix_test_bit(nr,p) \ | ||
406 | __test_bit(WORD_BITOFF_TO_LE(nr), (unsigned long *)(p)) | ||
407 | #define minix_test_and_set_bit(nr,p) \ | ||
408 | __test_and_set_bit(WORD_BITOFF_TO_LE(nr), (unsigned long *)(p)) | ||
409 | #define minix_test_and_clear_bit(nr,p) \ | ||
410 | __test_and_clear_bit(WORD_BITOFF_TO_LE(nr), (unsigned long *)(p)) | ||
411 | #define minix_find_first_zero_bit(p,sz) \ | ||
412 | _find_first_zero_bit_le(p,sz) | ||
413 | |||
414 | #endif /* __KERNEL__ */ | ||
415 | |||
416 | #endif /* _ARM_BITOPS_H */ | ||
diff --git a/include/asm-arm/bug.h b/include/asm-arm/bug.h new file mode 100644 index 000000000000..5e91b90a8181 --- /dev/null +++ b/include/asm-arm/bug.h | |||
@@ -0,0 +1,22 @@ | |||
1 | #ifndef _ASMARM_BUG_H | ||
2 | #define _ASMARM_BUG_H | ||
3 | |||
4 | #include <linux/config.h> | ||
5 | |||
6 | #ifdef CONFIG_DEBUG_BUGVERBOSE | ||
7 | extern volatile void __bug(const char *file, int line, void *data); | ||
8 | |||
9 | /* give file/line information */ | ||
10 | #define BUG() __bug(__FILE__, __LINE__, NULL) | ||
11 | |||
12 | #else | ||
13 | |||
14 | /* this just causes an oops */ | ||
15 | #define BUG() (*(int *)0 = 0) | ||
16 | |||
17 | #endif | ||
18 | |||
19 | #define HAVE_ARCH_BUG | ||
20 | #include <asm-generic/bug.h> | ||
21 | |||
22 | #endif | ||
diff --git a/include/asm-arm/bugs.h b/include/asm-arm/bugs.h new file mode 100644 index 000000000000..4c80ec519d45 --- /dev/null +++ b/include/asm-arm/bugs.h | |||
@@ -0,0 +1,17 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/bugs.h | ||
3 | * | ||
4 | * Copyright (C) 1995-2003 Russell King | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | */ | ||
10 | #ifndef __ASM_BUGS_H | ||
11 | #define __ASM_BUGS_H | ||
12 | |||
13 | extern void check_writebuffer_bugs(void); | ||
14 | |||
15 | #define check_bugs() check_writebuffer_bugs() | ||
16 | |||
17 | #endif | ||
diff --git a/include/asm-arm/byteorder.h b/include/asm-arm/byteorder.h new file mode 100644 index 000000000000..d648a1915c33 --- /dev/null +++ b/include/asm-arm/byteorder.h | |||
@@ -0,0 +1,33 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/byteorder.h | ||
3 | * | ||
4 | * ARM Endian-ness. In little endian mode, the data bus is connected such | ||
5 | * that byte accesses appear as: | ||
6 | * 0 = d0...d7, 1 = d8...d15, 2 = d16...d23, 3 = d24...d31 | ||
7 | * and word accesses (data or instruction) appear as: | ||
8 | * d0...d31 | ||
9 | * | ||
10 | * When in big endian mode, byte accesses appear as: | ||
11 | * 0 = d24...d31, 1 = d16...d23, 2 = d8...d15, 3 = d0...d7 | ||
12 | * and word accesses (data or instruction) appear as: | ||
13 | * d0...d31 | ||
14 | */ | ||
15 | #ifndef __ASM_ARM_BYTEORDER_H | ||
16 | #define __ASM_ARM_BYTEORDER_H | ||
17 | |||
18 | |||
19 | #include <asm/types.h> | ||
20 | |||
21 | #if !defined(__STRICT_ANSI__) || defined(__KERNEL__) | ||
22 | # define __BYTEORDER_HAS_U64__ | ||
23 | # define __SWAB_64_THRU_32__ | ||
24 | #endif | ||
25 | |||
26 | #ifdef __ARMEB__ | ||
27 | #include <linux/byteorder/big_endian.h> | ||
28 | #else | ||
29 | #include <linux/byteorder/little_endian.h> | ||
30 | #endif | ||
31 | |||
32 | #endif | ||
33 | |||
diff --git a/include/asm-arm/cache.h b/include/asm-arm/cache.h new file mode 100644 index 000000000000..8d161f7c87ff --- /dev/null +++ b/include/asm-arm/cache.h | |||
@@ -0,0 +1,15 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/cache.h | ||
3 | */ | ||
4 | #ifndef __ASMARM_CACHE_H | ||
5 | #define __ASMARM_CACHE_H | ||
6 | |||
7 | #define L1_CACHE_SHIFT 5 | ||
8 | #define L1_CACHE_BYTES (1 << L1_CACHE_SHIFT) | ||
9 | |||
10 | /* | ||
11 | * largest L1 which this arch supports | ||
12 | */ | ||
13 | #define L1_CACHE_SHIFT_MAX 5 | ||
14 | |||
15 | #endif | ||
diff --git a/include/asm-arm/cacheflush.h b/include/asm-arm/cacheflush.h new file mode 100644 index 000000000000..09ffeed507c2 --- /dev/null +++ b/include/asm-arm/cacheflush.h | |||
@@ -0,0 +1,387 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/cacheflush.h | ||
3 | * | ||
4 | * Copyright (C) 1999-2002 Russell King | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | */ | ||
10 | #ifndef _ASMARM_CACHEFLUSH_H | ||
11 | #define _ASMARM_CACHEFLUSH_H | ||
12 | |||
13 | #include <linux/config.h> | ||
14 | #include <linux/sched.h> | ||
15 | #include <linux/mm.h> | ||
16 | |||
17 | #include <asm/mman.h> | ||
18 | #include <asm/glue.h> | ||
19 | |||
20 | /* | ||
21 | * Cache Model | ||
22 | * =========== | ||
23 | */ | ||
24 | #undef _CACHE | ||
25 | #undef MULTI_CACHE | ||
26 | |||
27 | #if defined(CONFIG_CPU_ARM610) || defined(CONFIG_CPU_ARM710) | ||
28 | # ifdef _CACHE | ||
29 | # define MULTI_CACHE 1 | ||
30 | # else | ||
31 | # define _CACHE v3 | ||
32 | # endif | ||
33 | #endif | ||
34 | |||
35 | #if defined(CONFIG_CPU_ARM720T) | ||
36 | # ifdef _CACHE | ||
37 | # define MULTI_CACHE 1 | ||
38 | # else | ||
39 | # define _CACHE v4 | ||
40 | # endif | ||
41 | #endif | ||
42 | |||
43 | #if defined(CONFIG_CPU_ARM920T) || defined(CONFIG_CPU_ARM922T) || \ | ||
44 | defined(CONFIG_CPU_ARM925T) || defined(CONFIG_CPU_ARM1020) | ||
45 | # define MULTI_CACHE 1 | ||
46 | #endif | ||
47 | |||
48 | #if defined(CONFIG_CPU_ARM926T) | ||
49 | # ifdef _CACHE | ||
50 | # define MULTI_CACHE 1 | ||
51 | # else | ||
52 | # define _CACHE arm926 | ||
53 | # endif | ||
54 | #endif | ||
55 | |||
56 | #if defined(CONFIG_CPU_SA110) || defined(CONFIG_CPU_SA1100) | ||
57 | # ifdef _CACHE | ||
58 | # define MULTI_CACHE 1 | ||
59 | # else | ||
60 | # define _CACHE v4wb | ||
61 | # endif | ||
62 | #endif | ||
63 | |||
64 | #if defined(CONFIG_CPU_XSCALE) | ||
65 | # ifdef _CACHE | ||
66 | # define MULTI_CACHE 1 | ||
67 | # else | ||
68 | # define _CACHE xscale | ||
69 | # endif | ||
70 | #endif | ||
71 | |||
72 | #if defined(CONFIG_CPU_V6) | ||
73 | //# ifdef _CACHE | ||
74 | # define MULTI_CACHE 1 | ||
75 | //# else | ||
76 | //# define _CACHE v6 | ||
77 | //# endif | ||
78 | #endif | ||
79 | |||
80 | #if !defined(_CACHE) && !defined(MULTI_CACHE) | ||
81 | #error Unknown cache maintainence model | ||
82 | #endif | ||
83 | |||
84 | /* | ||
85 | * This flag is used to indicate that the page pointed to by a pte | ||
86 | * is dirty and requires cleaning before returning it to the user. | ||
87 | */ | ||
88 | #define PG_dcache_dirty PG_arch_1 | ||
89 | |||
90 | /* | ||
91 | * MM Cache Management | ||
92 | * =================== | ||
93 | * | ||
94 | * The arch/arm/mm/cache-*.S and arch/arm/mm/proc-*.S files | ||
95 | * implement these methods. | ||
96 | * | ||
97 | * Start addresses are inclusive and end addresses are exclusive; | ||
98 | * start addresses should be rounded down, end addresses up. | ||
99 | * | ||
100 | * See Documentation/cachetlb.txt for more information. | ||
101 | * Please note that the implementation of these, and the required | ||
102 | * effects are cache-type (VIVT/VIPT/PIPT) specific. | ||
103 | * | ||
104 | * flush_cache_kern_all() | ||
105 | * | ||
106 | * Unconditionally clean and invalidate the entire cache. | ||
107 | * | ||
108 | * flush_cache_user_mm(mm) | ||
109 | * | ||
110 | * Clean and invalidate all user space cache entries | ||
111 | * before a change of page tables. | ||
112 | * | ||
113 | * flush_cache_user_range(start, end, flags) | ||
114 | * | ||
115 | * Clean and invalidate a range of cache entries in the | ||
116 | * specified address space before a change of page tables. | ||
117 | * - start - user start address (inclusive, page aligned) | ||
118 | * - end - user end address (exclusive, page aligned) | ||
119 | * - flags - vma->vm_flags field | ||
120 | * | ||
121 | * coherent_kern_range(start, end) | ||
122 | * | ||
123 | * Ensure coherency between the Icache and the Dcache in the | ||
124 | * region described by start, end. If you have non-snooping | ||
125 | * Harvard caches, you need to implement this function. | ||
126 | * - start - virtual start address | ||
127 | * - end - virtual end address | ||
128 | * | ||
129 | * DMA Cache Coherency | ||
130 | * =================== | ||
131 | * | ||
132 | * dma_inv_range(start, end) | ||
133 | * | ||
134 | * Invalidate (discard) the specified virtual address range. | ||
135 | * May not write back any entries. If 'start' or 'end' | ||
136 | * are not cache line aligned, those lines must be written | ||
137 | * back. | ||
138 | * - start - virtual start address | ||
139 | * - end - virtual end address | ||
140 | * | ||
141 | * dma_clean_range(start, end) | ||
142 | * | ||
143 | * Clean (write back) the specified virtual address range. | ||
144 | * - start - virtual start address | ||
145 | * - end - virtual end address | ||
146 | * | ||
147 | * dma_flush_range(start, end) | ||
148 | * | ||
149 | * Clean and invalidate the specified virtual address range. | ||
150 | * - start - virtual start address | ||
151 | * - end - virtual end address | ||
152 | */ | ||
153 | |||
154 | struct cpu_cache_fns { | ||
155 | void (*flush_kern_all)(void); | ||
156 | void (*flush_user_all)(void); | ||
157 | void (*flush_user_range)(unsigned long, unsigned long, unsigned int); | ||
158 | |||
159 | void (*coherent_kern_range)(unsigned long, unsigned long); | ||
160 | void (*coherent_user_range)(unsigned long, unsigned long); | ||
161 | void (*flush_kern_dcache_page)(void *); | ||
162 | |||
163 | void (*dma_inv_range)(unsigned long, unsigned long); | ||
164 | void (*dma_clean_range)(unsigned long, unsigned long); | ||
165 | void (*dma_flush_range)(unsigned long, unsigned long); | ||
166 | }; | ||
167 | |||
168 | /* | ||
169 | * Select the calling method | ||
170 | */ | ||
171 | #ifdef MULTI_CACHE | ||
172 | |||
173 | extern struct cpu_cache_fns cpu_cache; | ||
174 | |||
175 | #define __cpuc_flush_kern_all cpu_cache.flush_kern_all | ||
176 | #define __cpuc_flush_user_all cpu_cache.flush_user_all | ||
177 | #define __cpuc_flush_user_range cpu_cache.flush_user_range | ||
178 | #define __cpuc_coherent_kern_range cpu_cache.coherent_kern_range | ||
179 | #define __cpuc_coherent_user_range cpu_cache.coherent_user_range | ||
180 | #define __cpuc_flush_dcache_page cpu_cache.flush_kern_dcache_page | ||
181 | |||
182 | /* | ||
183 | * These are private to the dma-mapping API. Do not use directly. | ||
184 | * Their sole purpose is to ensure that data held in the cache | ||
185 | * is visible to DMA, or data written by DMA to system memory is | ||
186 | * visible to the CPU. | ||
187 | */ | ||
188 | #define dmac_inv_range cpu_cache.dma_inv_range | ||
189 | #define dmac_clean_range cpu_cache.dma_clean_range | ||
190 | #define dmac_flush_range cpu_cache.dma_flush_range | ||
191 | |||
192 | #else | ||
193 | |||
194 | #define __cpuc_flush_kern_all __glue(_CACHE,_flush_kern_cache_all) | ||
195 | #define __cpuc_flush_user_all __glue(_CACHE,_flush_user_cache_all) | ||
196 | #define __cpuc_flush_user_range __glue(_CACHE,_flush_user_cache_range) | ||
197 | #define __cpuc_coherent_kern_range __glue(_CACHE,_coherent_kern_range) | ||
198 | #define __cpuc_coherent_user_range __glue(_CACHE,_coherent_user_range) | ||
199 | #define __cpuc_flush_dcache_page __glue(_CACHE,_flush_kern_dcache_page) | ||
200 | |||
201 | extern void __cpuc_flush_kern_all(void); | ||
202 | extern void __cpuc_flush_user_all(void); | ||
203 | extern void __cpuc_flush_user_range(unsigned long, unsigned long, unsigned int); | ||
204 | extern void __cpuc_coherent_kern_range(unsigned long, unsigned long); | ||
205 | extern void __cpuc_coherent_user_range(unsigned long, unsigned long); | ||
206 | extern void __cpuc_flush_dcache_page(void *); | ||
207 | |||
208 | /* | ||
209 | * These are private to the dma-mapping API. Do not use directly. | ||
210 | * Their sole purpose is to ensure that data held in the cache | ||
211 | * is visible to DMA, or data written by DMA to system memory is | ||
212 | * visible to the CPU. | ||
213 | */ | ||
214 | #define dmac_inv_range __glue(_CACHE,_dma_inv_range) | ||
215 | #define dmac_clean_range __glue(_CACHE,_dma_clean_range) | ||
216 | #define dmac_flush_range __glue(_CACHE,_dma_flush_range) | ||
217 | |||
218 | extern void dmac_inv_range(unsigned long, unsigned long); | ||
219 | extern void dmac_clean_range(unsigned long, unsigned long); | ||
220 | extern void dmac_flush_range(unsigned long, unsigned long); | ||
221 | |||
222 | #endif | ||
223 | |||
224 | /* | ||
225 | * flush_cache_vmap() is used when creating mappings (eg, via vmap, | ||
226 | * vmalloc, ioremap etc) in kernel space for pages. Since the | ||
227 | * direct-mappings of these pages may contain cached data, we need | ||
228 | * to do a full cache flush to ensure that writebacks don't corrupt | ||
229 | * data placed into these pages via the new mappings. | ||
230 | */ | ||
231 | #define flush_cache_vmap(start, end) flush_cache_all() | ||
232 | #define flush_cache_vunmap(start, end) flush_cache_all() | ||
233 | |||
234 | /* | ||
235 | * Copy user data from/to a page which is mapped into a different | ||
236 | * processes address space. Really, we want to allow our "user | ||
237 | * space" model to handle this. | ||
238 | */ | ||
239 | #define copy_to_user_page(vma, page, vaddr, dst, src, len) \ | ||
240 | do { \ | ||
241 | flush_cache_page(vma, vaddr, page_to_pfn(page));\ | ||
242 | memcpy(dst, src, len); \ | ||
243 | flush_dcache_page(page); \ | ||
244 | } while (0) | ||
245 | |||
246 | #define copy_from_user_page(vma, page, vaddr, dst, src, len) \ | ||
247 | do { \ | ||
248 | flush_cache_page(vma, vaddr, page_to_pfn(page));\ | ||
249 | memcpy(dst, src, len); \ | ||
250 | } while (0) | ||
251 | |||
252 | /* | ||
253 | * Convert calls to our calling convention. | ||
254 | */ | ||
255 | #define flush_cache_all() __cpuc_flush_kern_all() | ||
256 | |||
257 | static inline void flush_cache_mm(struct mm_struct *mm) | ||
258 | { | ||
259 | if (cpu_isset(smp_processor_id(), mm->cpu_vm_mask)) | ||
260 | __cpuc_flush_user_all(); | ||
261 | } | ||
262 | |||
263 | static inline void | ||
264 | flush_cache_range(struct vm_area_struct *vma, unsigned long start, unsigned long end) | ||
265 | { | ||
266 | if (cpu_isset(smp_processor_id(), vma->vm_mm->cpu_vm_mask)) | ||
267 | __cpuc_flush_user_range(start & PAGE_MASK, PAGE_ALIGN(end), | ||
268 | vma->vm_flags); | ||
269 | } | ||
270 | |||
271 | static inline void | ||
272 | flush_cache_page(struct vm_area_struct *vma, unsigned long user_addr, unsigned long pfn) | ||
273 | { | ||
274 | if (cpu_isset(smp_processor_id(), vma->vm_mm->cpu_vm_mask)) { | ||
275 | unsigned long addr = user_addr & PAGE_MASK; | ||
276 | __cpuc_flush_user_range(addr, addr + PAGE_SIZE, vma->vm_flags); | ||
277 | } | ||
278 | } | ||
279 | |||
280 | /* | ||
281 | * flush_cache_user_range is used when we want to ensure that the | ||
282 | * Harvard caches are synchronised for the user space address range. | ||
283 | * This is used for the ARM private sys_cacheflush system call. | ||
284 | */ | ||
285 | #define flush_cache_user_range(vma,start,end) \ | ||
286 | __cpuc_coherent_user_range((start) & PAGE_MASK, PAGE_ALIGN(end)) | ||
287 | |||
288 | /* | ||
289 | * Perform necessary cache operations to ensure that data previously | ||
290 | * stored within this range of addresses can be executed by the CPU. | ||
291 | */ | ||
292 | #define flush_icache_range(s,e) __cpuc_coherent_kern_range(s,e) | ||
293 | |||
294 | /* | ||
295 | * Perform necessary cache operations to ensure that the TLB will | ||
296 | * see data written in the specified area. | ||
297 | */ | ||
298 | #define clean_dcache_area(start,size) cpu_dcache_clean_area(start, size) | ||
299 | |||
300 | /* | ||
301 | * flush_dcache_page is used when the kernel has written to the page | ||
302 | * cache page at virtual address page->virtual. | ||
303 | * | ||
304 | * If this page isn't mapped (ie, page_mapping == NULL), or it might | ||
305 | * have userspace mappings, then we _must_ always clean + invalidate | ||
306 | * the dcache entries associated with the kernel mapping. | ||
307 | * | ||
308 | * Otherwise we can defer the operation, and clean the cache when we are | ||
309 | * about to change to user space. This is the same method as used on SPARC64. | ||
310 | * See update_mmu_cache for the user space part. | ||
311 | */ | ||
312 | extern void flush_dcache_page(struct page *); | ||
313 | |||
314 | #define flush_dcache_mmap_lock(mapping) \ | ||
315 | write_lock_irq(&(mapping)->tree_lock) | ||
316 | #define flush_dcache_mmap_unlock(mapping) \ | ||
317 | write_unlock_irq(&(mapping)->tree_lock) | ||
318 | |||
319 | #define flush_icache_user_range(vma,page,addr,len) \ | ||
320 | flush_dcache_page(page) | ||
321 | |||
322 | /* | ||
323 | * We don't appear to need to do anything here. In fact, if we did, we'd | ||
324 | * duplicate cache flushing elsewhere performed by flush_dcache_page(). | ||
325 | */ | ||
326 | #define flush_icache_page(vma,page) do { } while (0) | ||
327 | |||
328 | #define __cacheid_present(val) (val != read_cpuid(CPUID_ID)) | ||
329 | #define __cacheid_vivt(val) ((val & (15 << 25)) != (14 << 25)) | ||
330 | #define __cacheid_vipt(val) ((val & (15 << 25)) == (14 << 25)) | ||
331 | #define __cacheid_vipt_nonaliasing(val) ((val & (15 << 25 | 1 << 23)) == (14 << 25)) | ||
332 | #define __cacheid_vipt_aliasing(val) ((val & (15 << 25 | 1 << 23)) == (14 << 25 | 1 << 23)) | ||
333 | |||
334 | #if defined(CONFIG_CPU_CACHE_VIVT) && !defined(CONFIG_CPU_CACHE_VIPT) | ||
335 | |||
336 | #define cache_is_vivt() 1 | ||
337 | #define cache_is_vipt() 0 | ||
338 | #define cache_is_vipt_nonaliasing() 0 | ||
339 | #define cache_is_vipt_aliasing() 0 | ||
340 | |||
341 | #elif defined(CONFIG_CPU_CACHE_VIPT) | ||
342 | |||
343 | #define cache_is_vivt() 0 | ||
344 | #define cache_is_vipt() 1 | ||
345 | #define cache_is_vipt_nonaliasing() \ | ||
346 | ({ \ | ||
347 | unsigned int __val = read_cpuid(CPUID_CACHETYPE); \ | ||
348 | __cacheid_vipt_nonaliasing(__val); \ | ||
349 | }) | ||
350 | |||
351 | #define cache_is_vipt_aliasing() \ | ||
352 | ({ \ | ||
353 | unsigned int __val = read_cpuid(CPUID_CACHETYPE); \ | ||
354 | __cacheid_vipt_aliasing(__val); \ | ||
355 | }) | ||
356 | |||
357 | #else | ||
358 | |||
359 | #define cache_is_vivt() \ | ||
360 | ({ \ | ||
361 | unsigned int __val = read_cpuid(CPUID_CACHETYPE); \ | ||
362 | (!__cacheid_present(__val)) || __cacheid_vivt(__val); \ | ||
363 | }) | ||
364 | |||
365 | #define cache_is_vipt() \ | ||
366 | ({ \ | ||
367 | unsigned int __val = read_cpuid(CPUID_CACHETYPE); \ | ||
368 | __cacheid_present(__val) && __cacheid_vipt(__val); \ | ||
369 | }) | ||
370 | |||
371 | #define cache_is_vipt_nonaliasing() \ | ||
372 | ({ \ | ||
373 | unsigned int __val = read_cpuid(CPUID_CACHETYPE); \ | ||
374 | __cacheid_present(__val) && \ | ||
375 | __cacheid_vipt_nonaliasing(__val); \ | ||
376 | }) | ||
377 | |||
378 | #define cache_is_vipt_aliasing() \ | ||
379 | ({ \ | ||
380 | unsigned int __val = read_cpuid(CPUID_CACHETYPE); \ | ||
381 | __cacheid_present(__val) && \ | ||
382 | __cacheid_vipt_aliasing(__val); \ | ||
383 | }) | ||
384 | |||
385 | #endif | ||
386 | |||
387 | #endif | ||
diff --git a/include/asm-arm/checksum.h b/include/asm-arm/checksum.h new file mode 100644 index 000000000000..d4256d5f3a7c --- /dev/null +++ b/include/asm-arm/checksum.h | |||
@@ -0,0 +1,160 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/checksum.h | ||
3 | * | ||
4 | * IP checksum routines | ||
5 | * | ||
6 | * Copyright (C) Original authors of ../asm-i386/checksum.h | ||
7 | * Copyright (C) 1996-1999 Russell King | ||
8 | */ | ||
9 | #ifndef __ASM_ARM_CHECKSUM_H | ||
10 | #define __ASM_ARM_CHECKSUM_H | ||
11 | |||
12 | #include <linux/in6.h> | ||
13 | |||
14 | /* | ||
15 | * computes the checksum of a memory block at buff, length len, | ||
16 | * and adds in "sum" (32-bit) | ||
17 | * | ||
18 | * returns a 32-bit number suitable for feeding into itself | ||
19 | * or csum_tcpudp_magic | ||
20 | * | ||
21 | * this function must be called with even lengths, except | ||
22 | * for the last fragment, which may be odd | ||
23 | * | ||
24 | * it's best to have buff aligned on a 32-bit boundary | ||
25 | */ | ||
26 | unsigned int csum_partial(const unsigned char * buff, int len, unsigned int sum); | ||
27 | |||
28 | /* | ||
29 | * the same as csum_partial, but copies from src while it | ||
30 | * checksums, and handles user-space pointer exceptions correctly, when needed. | ||
31 | * | ||
32 | * here even more important to align src and dst on a 32-bit (or even | ||
33 | * better 64-bit) boundary | ||
34 | */ | ||
35 | |||
36 | unsigned int | ||
37 | csum_partial_copy_nocheck(const char *src, char *dst, int len, int sum); | ||
38 | |||
39 | unsigned int | ||
40 | csum_partial_copy_from_user(const char __user *src, char *dst, int len, int sum, int *err_ptr); | ||
41 | |||
42 | /* | ||
43 | * This is the old (and unsafe) way of doing checksums, a warning message will | ||
44 | * be printed if it is used and an exception occurs. | ||
45 | * | ||
46 | * this functions should go away after some time. | ||
47 | */ | ||
48 | #define csum_partial_copy(src,dst,len,sum) csum_partial_copy_nocheck(src,dst,len,sum) | ||
49 | |||
50 | /* | ||
51 | * This is a version of ip_compute_csum() optimized for IP headers, | ||
52 | * which always checksum on 4 octet boundaries. | ||
53 | */ | ||
54 | static inline unsigned short | ||
55 | ip_fast_csum(unsigned char * iph, unsigned int ihl) | ||
56 | { | ||
57 | unsigned int sum, tmp1; | ||
58 | |||
59 | __asm__ __volatile__( | ||
60 | "ldr %0, [%1], #4 @ ip_fast_csum \n\ | ||
61 | ldr %3, [%1], #4 \n\ | ||
62 | sub %2, %2, #5 \n\ | ||
63 | adds %0, %0, %3 \n\ | ||
64 | ldr %3, [%1], #4 \n\ | ||
65 | adcs %0, %0, %3 \n\ | ||
66 | ldr %3, [%1], #4 \n\ | ||
67 | 1: adcs %0, %0, %3 \n\ | ||
68 | ldr %3, [%1], #4 \n\ | ||
69 | tst %2, #15 @ do this carefully \n\ | ||
70 | subne %2, %2, #1 @ without destroying \n\ | ||
71 | bne 1b @ the carry flag \n\ | ||
72 | adcs %0, %0, %3 \n\ | ||
73 | adc %0, %0, #0 \n\ | ||
74 | adds %0, %0, %0, lsl #16 \n\ | ||
75 | addcs %0, %0, #0x10000 \n\ | ||
76 | mvn %0, %0 \n\ | ||
77 | mov %0, %0, lsr #16" | ||
78 | : "=r" (sum), "=r" (iph), "=r" (ihl), "=r" (tmp1) | ||
79 | : "1" (iph), "2" (ihl) | ||
80 | : "cc"); | ||
81 | return sum; | ||
82 | } | ||
83 | |||
84 | /* | ||
85 | * Fold a partial checksum without adding pseudo headers | ||
86 | */ | ||
87 | static inline unsigned int | ||
88 | csum_fold(unsigned int sum) | ||
89 | { | ||
90 | __asm__( | ||
91 | "adds %0, %1, %1, lsl #16 @ csum_fold \n\ | ||
92 | addcs %0, %0, #0x10000" | ||
93 | : "=r" (sum) | ||
94 | : "r" (sum) | ||
95 | : "cc"); | ||
96 | return (~sum) >> 16; | ||
97 | } | ||
98 | |||
99 | static inline unsigned int | ||
100 | csum_tcpudp_nofold(unsigned long saddr, unsigned long daddr, unsigned short len, | ||
101 | unsigned int proto, unsigned int sum) | ||
102 | { | ||
103 | __asm__( | ||
104 | "adds %0, %1, %2 @ csum_tcpudp_nofold \n\ | ||
105 | adcs %0, %0, %3 \n\ | ||
106 | adcs %0, %0, %4 \n\ | ||
107 | adcs %0, %0, %5 \n\ | ||
108 | adc %0, %0, #0" | ||
109 | : "=&r"(sum) | ||
110 | : "r" (sum), "r" (daddr), "r" (saddr), "r" (ntohs(len)), "Ir" (ntohs(proto)) | ||
111 | : "cc"); | ||
112 | return sum; | ||
113 | } | ||
114 | /* | ||
115 | * computes the checksum of the TCP/UDP pseudo-header | ||
116 | * returns a 16-bit checksum, already complemented | ||
117 | */ | ||
118 | static inline unsigned short int | ||
119 | csum_tcpudp_magic(unsigned long saddr, unsigned long daddr, unsigned short len, | ||
120 | unsigned int proto, unsigned int sum) | ||
121 | { | ||
122 | __asm__( | ||
123 | "adds %0, %1, %2 @ csum_tcpudp_magic \n\ | ||
124 | adcs %0, %0, %3 \n\ | ||
125 | adcs %0, %0, %4 \n\ | ||
126 | adcs %0, %0, %5 \n\ | ||
127 | adc %0, %0, #0 \n\ | ||
128 | adds %0, %0, %0, lsl #16 \n\ | ||
129 | addcs %0, %0, #0x10000 \n\ | ||
130 | mvn %0, %0" | ||
131 | : "=&r"(sum) | ||
132 | : "r" (sum), "r" (daddr), "r" (saddr), "r" (ntohs(len)), "Ir" (ntohs(proto)) | ||
133 | : "cc"); | ||
134 | return sum >> 16; | ||
135 | } | ||
136 | |||
137 | |||
138 | /* | ||
139 | * this routine is used for miscellaneous IP-like checksums, mainly | ||
140 | * in icmp.c | ||
141 | */ | ||
142 | static inline unsigned short | ||
143 | ip_compute_csum(unsigned char * buff, int len) | ||
144 | { | ||
145 | return csum_fold(csum_partial(buff, len, 0)); | ||
146 | } | ||
147 | |||
148 | #define _HAVE_ARCH_IPV6_CSUM | ||
149 | extern unsigned long | ||
150 | __csum_ipv6_magic(struct in6_addr *saddr, struct in6_addr *daddr, __u32 len, | ||
151 | __u32 proto, unsigned int sum); | ||
152 | |||
153 | static inline unsigned short int | ||
154 | csum_ipv6_magic(struct in6_addr *saddr, struct in6_addr *daddr, __u32 len, | ||
155 | unsigned short proto, unsigned int sum) | ||
156 | { | ||
157 | return csum_fold(__csum_ipv6_magic(saddr, daddr, htonl(len), | ||
158 | htonl(proto), sum)); | ||
159 | } | ||
160 | #endif | ||
diff --git a/include/asm-arm/cpu-multi32.h b/include/asm-arm/cpu-multi32.h new file mode 100644 index 000000000000..ff48022e4720 --- /dev/null +++ b/include/asm-arm/cpu-multi32.h | |||
@@ -0,0 +1,64 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/cpu-multi32.h | ||
3 | * | ||
4 | * Copyright (C) 2000 Russell King | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | */ | ||
10 | #include <asm/page.h> | ||
11 | |||
12 | struct mm_struct; | ||
13 | |||
14 | /* | ||
15 | * Don't change this structure - ASM code | ||
16 | * relies on it. | ||
17 | */ | ||
18 | extern struct processor { | ||
19 | /* MISC | ||
20 | * get data abort address/flags | ||
21 | */ | ||
22 | void (*_data_abort)(unsigned long pc); | ||
23 | /* | ||
24 | * Set up any processor specifics | ||
25 | */ | ||
26 | void (*_proc_init)(void); | ||
27 | /* | ||
28 | * Disable any processor specifics | ||
29 | */ | ||
30 | void (*_proc_fin)(void); | ||
31 | /* | ||
32 | * Special stuff for a reset | ||
33 | */ | ||
34 | volatile void (*reset)(unsigned long addr); | ||
35 | /* | ||
36 | * Idle the processor | ||
37 | */ | ||
38 | int (*_do_idle)(void); | ||
39 | /* | ||
40 | * Processor architecture specific | ||
41 | */ | ||
42 | /* | ||
43 | * clean a virtual address range from the | ||
44 | * D-cache without flushing the cache. | ||
45 | */ | ||
46 | void (*dcache_clean_area)(void *addr, int size); | ||
47 | |||
48 | /* | ||
49 | * Set the page table | ||
50 | */ | ||
51 | void (*switch_mm)(unsigned long pgd_phys, struct mm_struct *mm); | ||
52 | /* | ||
53 | * Set a PTE | ||
54 | */ | ||
55 | void (*set_pte)(pte_t *ptep, pte_t pte); | ||
56 | } processor; | ||
57 | |||
58 | #define cpu_proc_init() processor._proc_init() | ||
59 | #define cpu_proc_fin() processor._proc_fin() | ||
60 | #define cpu_reset(addr) processor.reset(addr) | ||
61 | #define cpu_do_idle() processor._do_idle() | ||
62 | #define cpu_dcache_clean_area(addr,sz) processor.dcache_clean_area(addr,sz) | ||
63 | #define cpu_set_pte(ptep, pte) processor.set_pte(ptep, pte) | ||
64 | #define cpu_do_switch_mm(pgd,mm) processor.switch_mm(pgd,mm) | ||
diff --git a/include/asm-arm/cpu-single.h b/include/asm-arm/cpu-single.h new file mode 100644 index 000000000000..b5ec5d54665d --- /dev/null +++ b/include/asm-arm/cpu-single.h | |||
@@ -0,0 +1,44 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/cpu-single.h | ||
3 | * | ||
4 | * Copyright (C) 2000 Russell King | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | */ | ||
10 | /* | ||
11 | * Single CPU | ||
12 | */ | ||
13 | #ifdef __STDC__ | ||
14 | #define __catify_fn(name,x) name##x | ||
15 | #else | ||
16 | #define __catify_fn(name,x) name/**/x | ||
17 | #endif | ||
18 | #define __cpu_fn(name,x) __catify_fn(name,x) | ||
19 | |||
20 | /* | ||
21 | * If we are supporting multiple CPUs, then we must use a table of | ||
22 | * function pointers for this lot. Otherwise, we can optimise the | ||
23 | * table away. | ||
24 | */ | ||
25 | #define cpu_proc_init __cpu_fn(CPU_NAME,_proc_init) | ||
26 | #define cpu_proc_fin __cpu_fn(CPU_NAME,_proc_fin) | ||
27 | #define cpu_reset __cpu_fn(CPU_NAME,_reset) | ||
28 | #define cpu_do_idle __cpu_fn(CPU_NAME,_do_idle) | ||
29 | #define cpu_dcache_clean_area __cpu_fn(CPU_NAME,_dcache_clean_area) | ||
30 | #define cpu_do_switch_mm __cpu_fn(CPU_NAME,_switch_mm) | ||
31 | #define cpu_set_pte __cpu_fn(CPU_NAME,_set_pte) | ||
32 | |||
33 | #include <asm/page.h> | ||
34 | |||
35 | struct mm_struct; | ||
36 | |||
37 | /* declare all the functions as extern */ | ||
38 | extern void cpu_proc_init(void); | ||
39 | extern void cpu_proc_fin(void); | ||
40 | extern int cpu_do_idle(void); | ||
41 | extern void cpu_dcache_clean_area(void *, int); | ||
42 | extern void cpu_do_switch_mm(unsigned long pgd_phys, struct mm_struct *mm); | ||
43 | extern void cpu_set_pte(pte_t *ptep, pte_t pte); | ||
44 | extern volatile void cpu_reset(unsigned long addr); | ||
diff --git a/include/asm-arm/cpu.h b/include/asm-arm/cpu.h new file mode 100644 index 000000000000..fcbdd40cb667 --- /dev/null +++ b/include/asm-arm/cpu.h | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/cpu.h | ||
3 | * | ||
4 | * Copyright (C) 2004-2005 ARM Ltd. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | */ | ||
10 | #ifndef __ASM_ARM_CPU_H | ||
11 | #define __ASM_ARM_CPU_H | ||
12 | |||
13 | #include <linux/config.h> | ||
14 | #include <linux/percpu.h> | ||
15 | |||
16 | struct cpuinfo_arm { | ||
17 | struct cpu cpu; | ||
18 | #ifdef CONFIG_SMP | ||
19 | unsigned int loops_per_jiffy; | ||
20 | #endif | ||
21 | }; | ||
22 | |||
23 | DECLARE_PER_CPU(struct cpuinfo_arm, cpu_data); | ||
24 | |||
25 | #endif | ||
diff --git a/include/asm-arm/cputime.h b/include/asm-arm/cputime.h new file mode 100644 index 000000000000..3a8002a5fec7 --- /dev/null +++ b/include/asm-arm/cputime.h | |||
@@ -0,0 +1,6 @@ | |||
1 | #ifndef __ARM_CPUTIME_H | ||
2 | #define __ARM_CPUTIME_H | ||
3 | |||
4 | #include <asm-generic/cputime.h> | ||
5 | |||
6 | #endif /* __ARM_CPUTIME_H */ | ||
diff --git a/include/asm-arm/current.h b/include/asm-arm/current.h new file mode 100644 index 000000000000..75d21e2a3ff7 --- /dev/null +++ b/include/asm-arm/current.h | |||
@@ -0,0 +1,15 @@ | |||
1 | #ifndef _ASMARM_CURRENT_H | ||
2 | #define _ASMARM_CURRENT_H | ||
3 | |||
4 | #include <linux/thread_info.h> | ||
5 | |||
6 | static inline struct task_struct *get_current(void) __attribute_const__; | ||
7 | |||
8 | static inline struct task_struct *get_current(void) | ||
9 | { | ||
10 | return current_thread_info()->task; | ||
11 | } | ||
12 | |||
13 | #define current (get_current()) | ||
14 | |||
15 | #endif /* _ASMARM_CURRENT_H */ | ||
diff --git a/include/asm-arm/delay.h b/include/asm-arm/delay.h new file mode 100644 index 000000000000..1704360e9699 --- /dev/null +++ b/include/asm-arm/delay.h | |||
@@ -0,0 +1,42 @@ | |||
1 | /* | ||
2 | * Copyright (C) 1995-2004 Russell King | ||
3 | * | ||
4 | * Delay routines, using a pre-computed "loops_per_second" value. | ||
5 | */ | ||
6 | #ifndef __ASM_ARM_DELAY_H | ||
7 | #define __ASM_ARM_DELAY_H | ||
8 | |||
9 | extern void __delay(int loops); | ||
10 | |||
11 | /* | ||
12 | * This function intentionally does not exist; if you see references to | ||
13 | * it, it means that you're calling udelay() with an out of range value. | ||
14 | * | ||
15 | * With currently imposed limits, this means that we support a max delay | ||
16 | * of 2000us and 671 bogomips | ||
17 | */ | ||
18 | extern void __bad_udelay(void); | ||
19 | |||
20 | /* | ||
21 | * division by multiplication: you don't have to worry about | ||
22 | * loss of precision. | ||
23 | * | ||
24 | * Use only for very small delays ( < 1 msec). Should probably use a | ||
25 | * lookup table, really, as the multiplications take much too long with | ||
26 | * short delays. This is a "reasonable" implementation, though (and the | ||
27 | * first constant multiplications gets optimized away if the delay is | ||
28 | * a constant) | ||
29 | */ | ||
30 | extern void __udelay(unsigned long usecs); | ||
31 | extern void __const_udelay(unsigned long); | ||
32 | |||
33 | #define MAX_UDELAY_MS 2 | ||
34 | |||
35 | #define udelay(n) \ | ||
36 | (__builtin_constant_p(n) ? \ | ||
37 | ((n) > (MAX_UDELAY_MS * 1000) ? __bad_udelay() : \ | ||
38 | __const_udelay((n) * 0x68dbul)) : \ | ||
39 | __udelay(n)) | ||
40 | |||
41 | #endif /* defined(_ARM_DELAY_H) */ | ||
42 | |||
diff --git a/include/asm-arm/div64.h b/include/asm-arm/div64.h new file mode 100644 index 000000000000..3682616804ca --- /dev/null +++ b/include/asm-arm/div64.h | |||
@@ -0,0 +1,48 @@ | |||
1 | #ifndef __ASM_ARM_DIV64 | ||
2 | #define __ASM_ARM_DIV64 | ||
3 | |||
4 | #include <asm/system.h> | ||
5 | |||
6 | /* | ||
7 | * The semantics of do_div() are: | ||
8 | * | ||
9 | * uint32_t do_div(uint64_t *n, uint32_t base) | ||
10 | * { | ||
11 | * uint32_t remainder = *n % base; | ||
12 | * *n = *n / base; | ||
13 | * return remainder; | ||
14 | * } | ||
15 | * | ||
16 | * In other words, a 64-bit dividend with a 32-bit divisor producing | ||
17 | * a 64-bit result and a 32-bit remainder. To accomplish this optimally | ||
18 | * we call a special __do_div64 helper with completely non standard | ||
19 | * calling convention for arguments and results (beware). | ||
20 | */ | ||
21 | |||
22 | #ifdef __ARMEB__ | ||
23 | #define __xh "r0" | ||
24 | #define __xl "r1" | ||
25 | #else | ||
26 | #define __xl "r0" | ||
27 | #define __xh "r1" | ||
28 | #endif | ||
29 | |||
30 | #define do_div(n,base) \ | ||
31 | ({ \ | ||
32 | register unsigned int __base asm("r4") = base; \ | ||
33 | register unsigned long long __n asm("r0") = n; \ | ||
34 | register unsigned long long __res asm("r2"); \ | ||
35 | register unsigned int __rem asm(__xh); \ | ||
36 | asm( __asmeq("%0", __xh) \ | ||
37 | __asmeq("%1", "r2") \ | ||
38 | __asmeq("%2", "r0") \ | ||
39 | __asmeq("%3", "r4") \ | ||
40 | "bl __do_div64" \ | ||
41 | : "=r" (__rem), "=r" (__res) \ | ||
42 | : "r" (__n), "r" (__base) \ | ||
43 | : "ip", "lr", "cc"); \ | ||
44 | n = __res; \ | ||
45 | __rem; \ | ||
46 | }) | ||
47 | |||
48 | #endif | ||
diff --git a/include/asm-arm/dma-mapping.h b/include/asm-arm/dma-mapping.h new file mode 100644 index 000000000000..925d016dd4b5 --- /dev/null +++ b/include/asm-arm/dma-mapping.h | |||
@@ -0,0 +1,426 @@ | |||
1 | #ifndef ASMARM_DMA_MAPPING_H | ||
2 | #define ASMARM_DMA_MAPPING_H | ||
3 | |||
4 | #ifdef __KERNEL__ | ||
5 | |||
6 | #include <linux/config.h> | ||
7 | #include <linux/mm.h> /* need struct page */ | ||
8 | |||
9 | #include <asm/scatterlist.h> | ||
10 | |||
11 | /* | ||
12 | * DMA-consistent mapping functions. These allocate/free a region of | ||
13 | * uncached, unwrite-buffered mapped memory space for use with DMA | ||
14 | * devices. This is the "generic" version. The PCI specific version | ||
15 | * is in pci.h | ||
16 | */ | ||
17 | extern void consistent_sync(void *kaddr, size_t size, int rw); | ||
18 | |||
19 | /* | ||
20 | * Return whether the given device DMA address mask can be supported | ||
21 | * properly. For example, if your device can only drive the low 24-bits | ||
22 | * during bus mastering, then you would pass 0x00ffffff as the mask | ||
23 | * to this function. | ||
24 | */ | ||
25 | static inline int dma_supported(struct device *dev, u64 mask) | ||
26 | { | ||
27 | return dev->dma_mask && *dev->dma_mask != 0; | ||
28 | } | ||
29 | |||
30 | static inline int dma_set_mask(struct device *dev, u64 dma_mask) | ||
31 | { | ||
32 | if (!dev->dma_mask || !dma_supported(dev, dma_mask)) | ||
33 | return -EIO; | ||
34 | |||
35 | *dev->dma_mask = dma_mask; | ||
36 | |||
37 | return 0; | ||
38 | } | ||
39 | |||
40 | static inline int dma_get_cache_alignment(void) | ||
41 | { | ||
42 | return 32; | ||
43 | } | ||
44 | |||
45 | static inline int dma_is_consistent(dma_addr_t handle) | ||
46 | { | ||
47 | return 0; | ||
48 | } | ||
49 | |||
50 | /* | ||
51 | * DMA errors are defined by all-bits-set in the DMA address. | ||
52 | */ | ||
53 | static inline int dma_mapping_error(dma_addr_t dma_addr) | ||
54 | { | ||
55 | return dma_addr == ~0; | ||
56 | } | ||
57 | |||
58 | /** | ||
59 | * dma_alloc_coherent - allocate consistent memory for DMA | ||
60 | * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices | ||
61 | * @size: required memory size | ||
62 | * @handle: bus-specific DMA address | ||
63 | * | ||
64 | * Allocate some uncached, unbuffered memory for a device for | ||
65 | * performing DMA. This function allocates pages, and will | ||
66 | * return the CPU-viewed address, and sets @handle to be the | ||
67 | * device-viewed address. | ||
68 | */ | ||
69 | extern void * | ||
70 | dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *handle, int gfp); | ||
71 | |||
72 | /** | ||
73 | * dma_free_coherent - free memory allocated by dma_alloc_coherent | ||
74 | * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices | ||
75 | * @size: size of memory originally requested in dma_alloc_coherent | ||
76 | * @cpu_addr: CPU-view address returned from dma_alloc_coherent | ||
77 | * @handle: device-view address returned from dma_alloc_coherent | ||
78 | * | ||
79 | * Free (and unmap) a DMA buffer previously allocated by | ||
80 | * dma_alloc_coherent(). | ||
81 | * | ||
82 | * References to memory and mappings associated with cpu_addr/handle | ||
83 | * during and after this call executing are illegal. | ||
84 | */ | ||
85 | extern void | ||
86 | dma_free_coherent(struct device *dev, size_t size, void *cpu_addr, | ||
87 | dma_addr_t handle); | ||
88 | |||
89 | /** | ||
90 | * dma_mmap_coherent - map a coherent DMA allocation into user space | ||
91 | * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices | ||
92 | * @vma: vm_area_struct describing requested user mapping | ||
93 | * @cpu_addr: kernel CPU-view address returned from dma_alloc_coherent | ||
94 | * @handle: device-view address returned from dma_alloc_coherent | ||
95 | * @size: size of memory originally requested in dma_alloc_coherent | ||
96 | * | ||
97 | * Map a coherent DMA buffer previously allocated by dma_alloc_coherent | ||
98 | * into user space. The coherent DMA buffer must not be freed by the | ||
99 | * driver until the user space mapping has been released. | ||
100 | */ | ||
101 | int dma_mmap_coherent(struct device *dev, struct vm_area_struct *vma, | ||
102 | void *cpu_addr, dma_addr_t handle, size_t size); | ||
103 | |||
104 | |||
105 | /** | ||
106 | * dma_alloc_writecombine - allocate writecombining memory for DMA | ||
107 | * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices | ||
108 | * @size: required memory size | ||
109 | * @handle: bus-specific DMA address | ||
110 | * | ||
111 | * Allocate some uncached, buffered memory for a device for | ||
112 | * performing DMA. This function allocates pages, and will | ||
113 | * return the CPU-viewed address, and sets @handle to be the | ||
114 | * device-viewed address. | ||
115 | */ | ||
116 | extern void * | ||
117 | dma_alloc_writecombine(struct device *dev, size_t size, dma_addr_t *handle, int gfp); | ||
118 | |||
119 | #define dma_free_writecombine(dev,size,cpu_addr,handle) \ | ||
120 | dma_free_coherent(dev,size,cpu_addr,handle) | ||
121 | |||
122 | int dma_mmap_writecombine(struct device *dev, struct vm_area_struct *vma, | ||
123 | void *cpu_addr, dma_addr_t handle, size_t size); | ||
124 | |||
125 | |||
126 | /** | ||
127 | * dma_map_single - map a single buffer for streaming DMA | ||
128 | * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices | ||
129 | * @cpu_addr: CPU direct mapped address of buffer | ||
130 | * @size: size of buffer to map | ||
131 | * @dir: DMA transfer direction | ||
132 | * | ||
133 | * Ensure that any data held in the cache is appropriately discarded | ||
134 | * or written back. | ||
135 | * | ||
136 | * The device owns this memory once this call has completed. The CPU | ||
137 | * can regain ownership by calling dma_unmap_single() or | ||
138 | * dma_sync_single_for_cpu(). | ||
139 | */ | ||
140 | #ifndef CONFIG_DMABOUNCE | ||
141 | static inline dma_addr_t | ||
142 | dma_map_single(struct device *dev, void *cpu_addr, size_t size, | ||
143 | enum dma_data_direction dir) | ||
144 | { | ||
145 | consistent_sync(cpu_addr, size, dir); | ||
146 | return virt_to_dma(dev, (unsigned long)cpu_addr); | ||
147 | } | ||
148 | #else | ||
149 | extern dma_addr_t dma_map_single(struct device *,void *, size_t, enum dma_data_direction); | ||
150 | #endif | ||
151 | |||
152 | /** | ||
153 | * dma_map_page - map a portion of a page for streaming DMA | ||
154 | * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices | ||
155 | * @page: page that buffer resides in | ||
156 | * @offset: offset into page for start of buffer | ||
157 | * @size: size of buffer to map | ||
158 | * @dir: DMA transfer direction | ||
159 | * | ||
160 | * Ensure that any data held in the cache is appropriately discarded | ||
161 | * or written back. | ||
162 | * | ||
163 | * The device owns this memory once this call has completed. The CPU | ||
164 | * can regain ownership by calling dma_unmap_page() or | ||
165 | * dma_sync_single_for_cpu(). | ||
166 | */ | ||
167 | static inline dma_addr_t | ||
168 | dma_map_page(struct device *dev, struct page *page, | ||
169 | unsigned long offset, size_t size, | ||
170 | enum dma_data_direction dir) | ||
171 | { | ||
172 | return dma_map_single(dev, page_address(page) + offset, size, (int)dir); | ||
173 | } | ||
174 | |||
175 | /** | ||
176 | * dma_unmap_single - unmap a single buffer previously mapped | ||
177 | * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices | ||
178 | * @handle: DMA address of buffer | ||
179 | * @size: size of buffer to map | ||
180 | * @dir: DMA transfer direction | ||
181 | * | ||
182 | * Unmap a single streaming mode DMA translation. The handle and size | ||
183 | * must match what was provided in the previous dma_map_single() call. | ||
184 | * All other usages are undefined. | ||
185 | * | ||
186 | * After this call, reads by the CPU to the buffer are guaranteed to see | ||
187 | * whatever the device wrote there. | ||
188 | */ | ||
189 | #ifndef CONFIG_DMABOUNCE | ||
190 | static inline void | ||
191 | dma_unmap_single(struct device *dev, dma_addr_t handle, size_t size, | ||
192 | enum dma_data_direction dir) | ||
193 | { | ||
194 | /* nothing to do */ | ||
195 | } | ||
196 | #else | ||
197 | extern void dma_unmap_single(struct device *, dma_addr_t, size_t, enum dma_data_direction); | ||
198 | #endif | ||
199 | |||
200 | /** | ||
201 | * dma_unmap_page - unmap a buffer previously mapped through dma_map_page() | ||
202 | * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices | ||
203 | * @handle: DMA address of buffer | ||
204 | * @size: size of buffer to map | ||
205 | * @dir: DMA transfer direction | ||
206 | * | ||
207 | * Unmap a single streaming mode DMA translation. The handle and size | ||
208 | * must match what was provided in the previous dma_map_single() call. | ||
209 | * All other usages are undefined. | ||
210 | * | ||
211 | * After this call, reads by the CPU to the buffer are guaranteed to see | ||
212 | * whatever the device wrote there. | ||
213 | */ | ||
214 | static inline void | ||
215 | dma_unmap_page(struct device *dev, dma_addr_t handle, size_t size, | ||
216 | enum dma_data_direction dir) | ||
217 | { | ||
218 | dma_unmap_single(dev, handle, size, (int)dir); | ||
219 | } | ||
220 | |||
221 | /** | ||
222 | * dma_map_sg - map a set of SG buffers for streaming mode DMA | ||
223 | * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices | ||
224 | * @sg: list of buffers | ||
225 | * @nents: number of buffers to map | ||
226 | * @dir: DMA transfer direction | ||
227 | * | ||
228 | * Map a set of buffers described by scatterlist in streaming | ||
229 | * mode for DMA. This is the scatter-gather version of the | ||
230 | * above dma_map_single interface. Here the scatter gather list | ||
231 | * elements are each tagged with the appropriate dma address | ||
232 | * and length. They are obtained via sg_dma_{address,length}(SG). | ||
233 | * | ||
234 | * NOTE: An implementation may be able to use a smaller number of | ||
235 | * DMA address/length pairs than there are SG table elements. | ||
236 | * (for example via virtual mapping capabilities) | ||
237 | * The routine returns the number of addr/length pairs actually | ||
238 | * used, at most nents. | ||
239 | * | ||
240 | * Device ownership issues as mentioned above for dma_map_single are | ||
241 | * the same here. | ||
242 | */ | ||
243 | #ifndef CONFIG_DMABOUNCE | ||
244 | static inline int | ||
245 | dma_map_sg(struct device *dev, struct scatterlist *sg, int nents, | ||
246 | enum dma_data_direction dir) | ||
247 | { | ||
248 | int i; | ||
249 | |||
250 | for (i = 0; i < nents; i++, sg++) { | ||
251 | char *virt; | ||
252 | |||
253 | sg->dma_address = page_to_dma(dev, sg->page) + sg->offset; | ||
254 | virt = page_address(sg->page) + sg->offset; | ||
255 | consistent_sync(virt, sg->length, dir); | ||
256 | } | ||
257 | |||
258 | return nents; | ||
259 | } | ||
260 | #else | ||
261 | extern int dma_map_sg(struct device *, struct scatterlist *, int, enum dma_data_direction); | ||
262 | #endif | ||
263 | |||
264 | /** | ||
265 | * dma_unmap_sg - unmap a set of SG buffers mapped by dma_map_sg | ||
266 | * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices | ||
267 | * @sg: list of buffers | ||
268 | * @nents: number of buffers to map | ||
269 | * @dir: DMA transfer direction | ||
270 | * | ||
271 | * Unmap a set of streaming mode DMA translations. | ||
272 | * Again, CPU read rules concerning calls here are the same as for | ||
273 | * dma_unmap_single() above. | ||
274 | */ | ||
275 | #ifndef CONFIG_DMABOUNCE | ||
276 | static inline void | ||
277 | dma_unmap_sg(struct device *dev, struct scatterlist *sg, int nents, | ||
278 | enum dma_data_direction dir) | ||
279 | { | ||
280 | |||
281 | /* nothing to do */ | ||
282 | } | ||
283 | #else | ||
284 | extern void dma_unmap_sg(struct device *, struct scatterlist *, int, enum dma_data_direction); | ||
285 | #endif | ||
286 | |||
287 | |||
288 | /** | ||
289 | * dma_sync_single_for_cpu | ||
290 | * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices | ||
291 | * @handle: DMA address of buffer | ||
292 | * @size: size of buffer to map | ||
293 | * @dir: DMA transfer direction | ||
294 | * | ||
295 | * Make physical memory consistent for a single streaming mode DMA | ||
296 | * translation after a transfer. | ||
297 | * | ||
298 | * If you perform a dma_map_single() but wish to interrogate the | ||
299 | * buffer using the cpu, yet do not wish to teardown the PCI dma | ||
300 | * mapping, you must call this function before doing so. At the | ||
301 | * next point you give the PCI dma address back to the card, you | ||
302 | * must first the perform a dma_sync_for_device, and then the | ||
303 | * device again owns the buffer. | ||
304 | */ | ||
305 | #ifndef CONFIG_DMABOUNCE | ||
306 | static inline void | ||
307 | dma_sync_single_for_cpu(struct device *dev, dma_addr_t handle, size_t size, | ||
308 | enum dma_data_direction dir) | ||
309 | { | ||
310 | consistent_sync((void *)dma_to_virt(dev, handle), size, dir); | ||
311 | } | ||
312 | |||
313 | static inline void | ||
314 | dma_sync_single_for_device(struct device *dev, dma_addr_t handle, size_t size, | ||
315 | enum dma_data_direction dir) | ||
316 | { | ||
317 | consistent_sync((void *)dma_to_virt(dev, handle), size, dir); | ||
318 | } | ||
319 | #else | ||
320 | extern void dma_sync_single_for_cpu(struct device*, dma_addr_t, size_t, enum dma_data_direction); | ||
321 | extern void dma_sync_single_for_device(struct device*, dma_addr_t, size_t, enum dma_data_direction); | ||
322 | #endif | ||
323 | |||
324 | |||
325 | /** | ||
326 | * dma_sync_sg_for_cpu | ||
327 | * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices | ||
328 | * @sg: list of buffers | ||
329 | * @nents: number of buffers to map | ||
330 | * @dir: DMA transfer direction | ||
331 | * | ||
332 | * Make physical memory consistent for a set of streaming | ||
333 | * mode DMA translations after a transfer. | ||
334 | * | ||
335 | * The same as dma_sync_single_for_* but for a scatter-gather list, | ||
336 | * same rules and usage. | ||
337 | */ | ||
338 | #ifndef CONFIG_DMABOUNCE | ||
339 | static inline void | ||
340 | dma_sync_sg_for_cpu(struct device *dev, struct scatterlist *sg, int nents, | ||
341 | enum dma_data_direction dir) | ||
342 | { | ||
343 | int i; | ||
344 | |||
345 | for (i = 0; i < nents; i++, sg++) { | ||
346 | char *virt = page_address(sg->page) + sg->offset; | ||
347 | consistent_sync(virt, sg->length, dir); | ||
348 | } | ||
349 | } | ||
350 | |||
351 | static inline void | ||
352 | dma_sync_sg_for_device(struct device *dev, struct scatterlist *sg, int nents, | ||
353 | enum dma_data_direction dir) | ||
354 | { | ||
355 | int i; | ||
356 | |||
357 | for (i = 0; i < nents; i++, sg++) { | ||
358 | char *virt = page_address(sg->page) + sg->offset; | ||
359 | consistent_sync(virt, sg->length, dir); | ||
360 | } | ||
361 | } | ||
362 | #else | ||
363 | extern void dma_sync_sg_for_cpu(struct device*, struct scatterlist*, int, enum dma_data_direction); | ||
364 | extern void dma_sync_sg_for_device(struct device*, struct scatterlist*, int, enum dma_data_direction); | ||
365 | #endif | ||
366 | |||
367 | #ifdef CONFIG_DMABOUNCE | ||
368 | /* | ||
369 | * For SA-1111, IXP425, and ADI systems the dma-mapping functions are "magic" | ||
370 | * and utilize bounce buffers as needed to work around limited DMA windows. | ||
371 | * | ||
372 | * On the SA-1111, a bug limits DMA to only certain regions of RAM. | ||
373 | * On the IXP425, the PCI inbound window is 64MB (256MB total RAM) | ||
374 | * On some ADI engineering sytems, PCI inbound window is 32MB (12MB total RAM) | ||
375 | * | ||
376 | * The following are helper functions used by the dmabounce subystem | ||
377 | * | ||
378 | */ | ||
379 | |||
380 | /** | ||
381 | * dmabounce_register_dev | ||
382 | * | ||
383 | * @dev: valid struct device pointer | ||
384 | * @small_buf_size: size of buffers to use with small buffer pool | ||
385 | * @large_buf_size: size of buffers to use with large buffer pool (can be 0) | ||
386 | * | ||
387 | * This function should be called by low-level platform code to register | ||
388 | * a device as requireing DMA buffer bouncing. The function will allocate | ||
389 | * appropriate DMA pools for the device. | ||
390 | * | ||
391 | */ | ||
392 | extern int dmabounce_register_dev(struct device *, unsigned long, unsigned long); | ||
393 | |||
394 | /** | ||
395 | * dmabounce_unregister_dev | ||
396 | * | ||
397 | * @dev: valid struct device pointer | ||
398 | * | ||
399 | * This function should be called by low-level platform code when device | ||
400 | * that was previously registered with dmabounce_register_dev is removed | ||
401 | * from the system. | ||
402 | * | ||
403 | */ | ||
404 | extern void dmabounce_unregister_dev(struct device *); | ||
405 | |||
406 | /** | ||
407 | * dma_needs_bounce | ||
408 | * | ||
409 | * @dev: valid struct device pointer | ||
410 | * @dma_handle: dma_handle of unbounced buffer | ||
411 | * @size: size of region being mapped | ||
412 | * | ||
413 | * Platforms that utilize the dmabounce mechanism must implement | ||
414 | * this function. | ||
415 | * | ||
416 | * The dmabounce routines call this function whenever a dma-mapping | ||
417 | * is requested to determine whether a given buffer needs to be bounced | ||
418 | * or not. The function must return 0 if the the buffer is OK for | ||
419 | * DMA access and 1 if the buffer needs to be bounced. | ||
420 | * | ||
421 | */ | ||
422 | extern int dma_needs_bounce(struct device*, dma_addr_t, size_t); | ||
423 | #endif /* CONFIG_DMABOUNCE */ | ||
424 | |||
425 | #endif /* __KERNEL__ */ | ||
426 | #endif | ||
diff --git a/include/asm-arm/dma.h b/include/asm-arm/dma.h new file mode 100644 index 000000000000..ef41df43a584 --- /dev/null +++ b/include/asm-arm/dma.h | |||
@@ -0,0 +1,135 @@ | |||
1 | #ifndef __ASM_ARM_DMA_H | ||
2 | #define __ASM_ARM_DMA_H | ||
3 | |||
4 | typedef unsigned int dmach_t; | ||
5 | |||
6 | #include <linux/config.h> | ||
7 | #include <linux/spinlock.h> | ||
8 | #include <asm/system.h> | ||
9 | #include <asm/scatterlist.h> | ||
10 | #include <asm/arch/dma.h> | ||
11 | |||
12 | /* | ||
13 | * DMA modes | ||
14 | */ | ||
15 | typedef unsigned int dmamode_t; | ||
16 | |||
17 | #define DMA_MODE_MASK 3 | ||
18 | |||
19 | #define DMA_MODE_READ 0 | ||
20 | #define DMA_MODE_WRITE 1 | ||
21 | #define DMA_MODE_CASCADE 2 | ||
22 | #define DMA_AUTOINIT 4 | ||
23 | |||
24 | extern spinlock_t dma_spin_lock; | ||
25 | |||
26 | static inline unsigned long claim_dma_lock(void) | ||
27 | { | ||
28 | unsigned long flags; | ||
29 | spin_lock_irqsave(&dma_spin_lock, flags); | ||
30 | return flags; | ||
31 | } | ||
32 | |||
33 | static inline void release_dma_lock(unsigned long flags) | ||
34 | { | ||
35 | spin_unlock_irqrestore(&dma_spin_lock, flags); | ||
36 | } | ||
37 | |||
38 | /* Clear the 'DMA Pointer Flip Flop'. | ||
39 | * Write 0 for LSB/MSB, 1 for MSB/LSB access. | ||
40 | */ | ||
41 | #define clear_dma_ff(channel) | ||
42 | |||
43 | /* Set only the page register bits of the transfer address. | ||
44 | * | ||
45 | * NOTE: This is an architecture specific function, and should | ||
46 | * be hidden from the drivers | ||
47 | */ | ||
48 | extern void set_dma_page(dmach_t channel, char pagenr); | ||
49 | |||
50 | /* Request a DMA channel | ||
51 | * | ||
52 | * Some architectures may need to do allocate an interrupt | ||
53 | */ | ||
54 | extern int request_dma(dmach_t channel, const char * device_id); | ||
55 | |||
56 | /* Free a DMA channel | ||
57 | * | ||
58 | * Some architectures may need to do free an interrupt | ||
59 | */ | ||
60 | extern void free_dma(dmach_t channel); | ||
61 | |||
62 | /* Enable DMA for this channel | ||
63 | * | ||
64 | * On some architectures, this may have other side effects like | ||
65 | * enabling an interrupt and setting the DMA registers. | ||
66 | */ | ||
67 | extern void enable_dma(dmach_t channel); | ||
68 | |||
69 | /* Disable DMA for this channel | ||
70 | * | ||
71 | * On some architectures, this may have other side effects like | ||
72 | * disabling an interrupt or whatever. | ||
73 | */ | ||
74 | extern void disable_dma(dmach_t channel); | ||
75 | |||
76 | /* Test whether the specified channel has an active DMA transfer | ||
77 | */ | ||
78 | extern int dma_channel_active(dmach_t channel); | ||
79 | |||
80 | /* Set the DMA scatter gather list for this channel | ||
81 | * | ||
82 | * This should not be called if a DMA channel is enabled, | ||
83 | * especially since some DMA architectures don't update the | ||
84 | * DMA address immediately, but defer it to the enable_dma(). | ||
85 | */ | ||
86 | extern void set_dma_sg(dmach_t channel, struct scatterlist *sg, int nr_sg); | ||
87 | |||
88 | /* Set the DMA address for this channel | ||
89 | * | ||
90 | * This should not be called if a DMA channel is enabled, | ||
91 | * especially since some DMA architectures don't update the | ||
92 | * DMA address immediately, but defer it to the enable_dma(). | ||
93 | */ | ||
94 | extern void set_dma_addr(dmach_t channel, unsigned long physaddr); | ||
95 | |||
96 | /* Set the DMA byte count for this channel | ||
97 | * | ||
98 | * This should not be called if a DMA channel is enabled, | ||
99 | * especially since some DMA architectures don't update the | ||
100 | * DMA count immediately, but defer it to the enable_dma(). | ||
101 | */ | ||
102 | extern void set_dma_count(dmach_t channel, unsigned long count); | ||
103 | |||
104 | /* Set the transfer direction for this channel | ||
105 | * | ||
106 | * This should not be called if a DMA channel is enabled, | ||
107 | * especially since some DMA architectures don't update the | ||
108 | * DMA transfer direction immediately, but defer it to the | ||
109 | * enable_dma(). | ||
110 | */ | ||
111 | extern void set_dma_mode(dmach_t channel, dmamode_t mode); | ||
112 | |||
113 | /* Set the transfer speed for this channel | ||
114 | */ | ||
115 | extern void set_dma_speed(dmach_t channel, int cycle_ns); | ||
116 | |||
117 | /* Get DMA residue count. After a DMA transfer, this | ||
118 | * should return zero. Reading this while a DMA transfer is | ||
119 | * still in progress will return unpredictable results. | ||
120 | * If called before the channel has been used, it may return 1. | ||
121 | * Otherwise, it returns the number of _bytes_ left to transfer. | ||
122 | */ | ||
123 | extern int get_dma_residue(dmach_t channel); | ||
124 | |||
125 | #ifndef NO_DMA | ||
126 | #define NO_DMA 255 | ||
127 | #endif | ||
128 | |||
129 | #ifdef CONFIG_PCI | ||
130 | extern int isa_dma_bridge_buggy; | ||
131 | #else | ||
132 | #define isa_dma_bridge_buggy (0) | ||
133 | #endif | ||
134 | |||
135 | #endif /* _ARM_DMA_H */ | ||
diff --git a/include/asm-arm/domain.h b/include/asm-arm/domain.h new file mode 100644 index 000000000000..da1d960387d9 --- /dev/null +++ b/include/asm-arm/domain.h | |||
@@ -0,0 +1,52 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/domain.h | ||
3 | * | ||
4 | * Copyright (C) 1999 Russell King. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | */ | ||
10 | #ifndef __ASM_PROC_DOMAIN_H | ||
11 | #define __ASM_PROC_DOMAIN_H | ||
12 | |||
13 | /* | ||
14 | * Domain numbers | ||
15 | * | ||
16 | * DOMAIN_IO - domain 2 includes all IO only | ||
17 | * DOMAIN_USER - domain 1 includes all user memory only | ||
18 | * DOMAIN_KERNEL - domain 0 includes all kernel memory only | ||
19 | */ | ||
20 | #define DOMAIN_KERNEL 0 | ||
21 | #define DOMAIN_TABLE 0 | ||
22 | #define DOMAIN_USER 1 | ||
23 | #define DOMAIN_IO 2 | ||
24 | |||
25 | /* | ||
26 | * Domain types | ||
27 | */ | ||
28 | #define DOMAIN_NOACCESS 0 | ||
29 | #define DOMAIN_CLIENT 1 | ||
30 | #define DOMAIN_MANAGER 3 | ||
31 | |||
32 | #define domain_val(dom,type) ((type) << (2*(dom))) | ||
33 | |||
34 | #ifndef __ASSEMBLY__ | ||
35 | #define set_domain(x) \ | ||
36 | do { \ | ||
37 | __asm__ __volatile__( \ | ||
38 | "mcr p15, 0, %0, c3, c0 @ set domain" \ | ||
39 | : : "r" (x)); \ | ||
40 | } while (0) | ||
41 | |||
42 | #define modify_domain(dom,type) \ | ||
43 | do { \ | ||
44 | struct thread_info *thread = current_thread_info(); \ | ||
45 | unsigned int domain = thread->cpu_domain; \ | ||
46 | domain &= ~domain_val(dom, DOMAIN_MANAGER); \ | ||
47 | thread->cpu_domain = domain | domain_val(dom, type); \ | ||
48 | set_domain(thread->cpu_domain); \ | ||
49 | } while (0) | ||
50 | |||
51 | #endif | ||
52 | #endif /* !__ASSEMBLY__ */ | ||
diff --git a/include/asm-arm/ecard.h b/include/asm-arm/ecard.h new file mode 100644 index 000000000000..a0ae2b954d29 --- /dev/null +++ b/include/asm-arm/ecard.h | |||
@@ -0,0 +1,298 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/ecard.h | ||
3 | * | ||
4 | * definitions for expansion cards | ||
5 | * | ||
6 | * This is a new system as from Linux 1.2.3 | ||
7 | * | ||
8 | * Changelog: | ||
9 | * 11-12-1996 RMK Further minor improvements | ||
10 | * 12-09-1997 RMK Added interrupt enable/disable for card level | ||
11 | * | ||
12 | * Reference: Acorns Risc OS 3 Programmers Reference Manuals. | ||
13 | */ | ||
14 | |||
15 | #ifndef __ASM_ECARD_H | ||
16 | #define __ASM_ECARD_H | ||
17 | |||
18 | /* | ||
19 | * Currently understood cards (but not necessarily | ||
20 | * supported): | ||
21 | * Manufacturer Product ID | ||
22 | */ | ||
23 | #define MANU_ACORN 0x0000 | ||
24 | #define PROD_ACORN_SCSI 0x0002 | ||
25 | #define PROD_ACORN_ETHER1 0x0003 | ||
26 | #define PROD_ACORN_MFM 0x000b | ||
27 | |||
28 | #define MANU_ANT2 0x0011 | ||
29 | #define PROD_ANT_ETHER3 0x00a4 | ||
30 | |||
31 | #define MANU_ATOMWIDE 0x0017 | ||
32 | #define PROD_ATOMWIDE_3PSERIAL 0x0090 | ||
33 | |||
34 | #define MANU_IRLAM_INSTRUMENTS 0x001f | ||
35 | #define MANU_IRLAM_INSTRUMENTS_ETHERN 0x5678 | ||
36 | |||
37 | #define MANU_OAK 0x0021 | ||
38 | #define PROD_OAK_SCSI 0x0058 | ||
39 | |||
40 | #define MANU_MORLEY 0x002b | ||
41 | #define PROD_MORLEY_SCSI_UNCACHED 0x0067 | ||
42 | |||
43 | #define MANU_CUMANA 0x003a | ||
44 | #define PROD_CUMANA_SCSI_2 0x003a | ||
45 | #define PROD_CUMANA_SCSI_1 0x00a0 | ||
46 | |||
47 | #define MANU_ICS 0x003c | ||
48 | #define PROD_ICS_IDE 0x00ae | ||
49 | |||
50 | #define MANU_ICS2 0x003d | ||
51 | #define PROD_ICS2_IDE 0x00ae | ||
52 | |||
53 | #define MANU_SERPORT 0x003f | ||
54 | #define PROD_SERPORT_DSPORT 0x00b9 | ||
55 | |||
56 | #define MANU_ARXE 0x0041 | ||
57 | #define PROD_ARXE_SCSI 0x00be | ||
58 | |||
59 | #define MANU_I3 0x0046 | ||
60 | #define PROD_I3_ETHERLAN500 0x00d4 | ||
61 | #define PROD_I3_ETHERLAN600 0x00ec | ||
62 | #define PROD_I3_ETHERLAN600A 0x011e | ||
63 | |||
64 | #define MANU_ANT 0x0053 | ||
65 | #define PROD_ANT_ETHERM 0x00d8 | ||
66 | #define PROD_ANT_ETHERB 0x00e4 | ||
67 | |||
68 | #define MANU_ALSYSTEMS 0x005b | ||
69 | #define PROD_ALSYS_SCSIATAPI 0x0107 | ||
70 | |||
71 | #define MANU_MCS 0x0063 | ||
72 | #define PROD_MCS_CONNECT32 0x0125 | ||
73 | |||
74 | #define MANU_EESOX 0x0064 | ||
75 | #define PROD_EESOX_SCSI2 0x008c | ||
76 | |||
77 | #define MANU_YELLOWSTONE 0x0096 | ||
78 | #define PROD_YELLOWSTONE_RAPIDE32 0x0120 | ||
79 | |||
80 | #ifdef ECARD_C | ||
81 | #define CONST | ||
82 | #else | ||
83 | #define CONST const | ||
84 | #endif | ||
85 | |||
86 | #define MAX_ECARDS 9 | ||
87 | |||
88 | typedef enum { /* Cards address space */ | ||
89 | ECARD_IOC, | ||
90 | ECARD_MEMC, | ||
91 | ECARD_EASI | ||
92 | } card_type_t; | ||
93 | |||
94 | typedef enum { /* Speed for ECARD_IOC space */ | ||
95 | ECARD_SLOW = 0, | ||
96 | ECARD_MEDIUM = 1, | ||
97 | ECARD_FAST = 2, | ||
98 | ECARD_SYNC = 3 | ||
99 | } card_speed_t; | ||
100 | |||
101 | struct ecard_id { /* Card ID structure */ | ||
102 | unsigned short manufacturer; | ||
103 | unsigned short product; | ||
104 | void *data; | ||
105 | }; | ||
106 | |||
107 | struct in_ecid { /* Packed card ID information */ | ||
108 | unsigned short product; /* Product code */ | ||
109 | unsigned short manufacturer; /* Manufacturer code */ | ||
110 | unsigned char id:4; /* Simple ID */ | ||
111 | unsigned char cd:1; /* Chunk dir present */ | ||
112 | unsigned char is:1; /* Interrupt status pointers */ | ||
113 | unsigned char w:2; /* Width */ | ||
114 | unsigned char country; /* Country */ | ||
115 | unsigned char irqmask; /* IRQ mask */ | ||
116 | unsigned char fiqmask; /* FIQ mask */ | ||
117 | unsigned long irqoff; /* IRQ offset */ | ||
118 | unsigned long fiqoff; /* FIQ offset */ | ||
119 | }; | ||
120 | |||
121 | typedef struct expansion_card ecard_t; | ||
122 | typedef unsigned long *loader_t; | ||
123 | |||
124 | typedef struct { /* Card handler routines */ | ||
125 | void (*irqenable)(ecard_t *ec, int irqnr); | ||
126 | void (*irqdisable)(ecard_t *ec, int irqnr); | ||
127 | int (*irqpending)(ecard_t *ec); | ||
128 | void (*fiqenable)(ecard_t *ec, int fiqnr); | ||
129 | void (*fiqdisable)(ecard_t *ec, int fiqnr); | ||
130 | int (*fiqpending)(ecard_t *ec); | ||
131 | } expansioncard_ops_t; | ||
132 | |||
133 | #define ECARD_NUM_RESOURCES (6) | ||
134 | |||
135 | #define ECARD_RES_IOCSLOW (0) | ||
136 | #define ECARD_RES_IOCMEDIUM (1) | ||
137 | #define ECARD_RES_IOCFAST (2) | ||
138 | #define ECARD_RES_IOCSYNC (3) | ||
139 | #define ECARD_RES_MEMC (4) | ||
140 | #define ECARD_RES_EASI (5) | ||
141 | |||
142 | #define ecard_resource_start(ec,nr) ((ec)->resource[nr].start) | ||
143 | #define ecard_resource_end(ec,nr) ((ec)->resource[nr].end) | ||
144 | #define ecard_resource_len(ec,nr) ((ec)->resource[nr].end - \ | ||
145 | (ec)->resource[nr].start + 1) | ||
146 | #define ecard_resource_flags(ec,nr) ((ec)->resource[nr].flags) | ||
147 | |||
148 | /* | ||
149 | * This contains all the info needed on an expansion card | ||
150 | */ | ||
151 | struct expansion_card { | ||
152 | struct expansion_card *next; | ||
153 | |||
154 | struct device dev; | ||
155 | struct resource resource[ECARD_NUM_RESOURCES]; | ||
156 | |||
157 | /* Public data */ | ||
158 | void __iomem *irqaddr; /* address of IRQ register */ | ||
159 | void __iomem *fiqaddr; /* address of FIQ register */ | ||
160 | unsigned char irqmask; /* IRQ mask */ | ||
161 | unsigned char fiqmask; /* FIQ mask */ | ||
162 | unsigned char claimed; /* Card claimed? */ | ||
163 | |||
164 | void *irq_data; /* Data for use for IRQ by card */ | ||
165 | void *fiq_data; /* Data for use for FIQ by card */ | ||
166 | const expansioncard_ops_t *ops; /* Enable/Disable Ops for card */ | ||
167 | |||
168 | CONST unsigned int slot_no; /* Slot number */ | ||
169 | CONST unsigned int dma; /* DMA number (for request_dma) */ | ||
170 | CONST unsigned int irq; /* IRQ number (for request_irq) */ | ||
171 | CONST unsigned int fiq; /* FIQ number (for request_irq) */ | ||
172 | CONST card_type_t type; /* Type of card */ | ||
173 | CONST struct in_ecid cid; /* Card Identification */ | ||
174 | |||
175 | /* Private internal data */ | ||
176 | const char *card_desc; /* Card description */ | ||
177 | CONST unsigned int podaddr; /* Base Linux address for card */ | ||
178 | CONST loader_t loader; /* loader program */ | ||
179 | u64 dma_mask; | ||
180 | }; | ||
181 | |||
182 | struct in_chunk_dir { | ||
183 | unsigned int start_offset; | ||
184 | union { | ||
185 | unsigned char string[256]; | ||
186 | unsigned char data[1]; | ||
187 | } d; | ||
188 | }; | ||
189 | |||
190 | /* | ||
191 | * ecard_claim: claim an expansion card entry | ||
192 | */ | ||
193 | #define ecard_claim(ec) ((ec)->claimed = 1) | ||
194 | |||
195 | /* | ||
196 | * ecard_release: release an expansion card entry | ||
197 | */ | ||
198 | #define ecard_release(ec) ((ec)->claimed = 0) | ||
199 | |||
200 | /* | ||
201 | * Read a chunk from an expansion card | ||
202 | * cd : where to put read data | ||
203 | * ec : expansion card info struct | ||
204 | * id : id number to find | ||
205 | * num: (n+1)'th id to find. | ||
206 | */ | ||
207 | extern int ecard_readchunk (struct in_chunk_dir *cd, struct expansion_card *ec, int id, int num); | ||
208 | |||
209 | /* | ||
210 | * Obtain the address of a card. This returns the "old style" address | ||
211 | * and should no longer be used. | ||
212 | */ | ||
213 | static inline unsigned int __deprecated | ||
214 | ecard_address(struct expansion_card *ec, card_type_t type, card_speed_t speed) | ||
215 | { | ||
216 | extern unsigned int __ecard_address(struct expansion_card *, | ||
217 | card_type_t, card_speed_t); | ||
218 | return __ecard_address(ec, type, speed); | ||
219 | } | ||
220 | |||
221 | /* | ||
222 | * Request and release ecard resources | ||
223 | */ | ||
224 | extern int ecard_request_resources(struct expansion_card *ec); | ||
225 | extern void ecard_release_resources(struct expansion_card *ec); | ||
226 | |||
227 | #ifdef ECARD_C | ||
228 | /* Definitions internal to ecard.c - for it's use only!! | ||
229 | * | ||
230 | * External expansion card header as read from the card | ||
231 | */ | ||
232 | struct ex_ecid { | ||
233 | unsigned char r_irq:1; | ||
234 | unsigned char r_zero:1; | ||
235 | unsigned char r_fiq:1; | ||
236 | unsigned char r_id:4; | ||
237 | unsigned char r_a:1; | ||
238 | |||
239 | unsigned char r_cd:1; | ||
240 | unsigned char r_is:1; | ||
241 | unsigned char r_w:2; | ||
242 | unsigned char r_r1:4; | ||
243 | |||
244 | unsigned char r_r2:8; | ||
245 | |||
246 | unsigned char r_prod[2]; | ||
247 | |||
248 | unsigned char r_manu[2]; | ||
249 | |||
250 | unsigned char r_country; | ||
251 | |||
252 | unsigned char r_fiqmask; | ||
253 | unsigned char r_fiqoff[3]; | ||
254 | |||
255 | unsigned char r_irqmask; | ||
256 | unsigned char r_irqoff[3]; | ||
257 | }; | ||
258 | |||
259 | /* | ||
260 | * Chunk directory entry as read from the card | ||
261 | */ | ||
262 | struct ex_chunk_dir { | ||
263 | unsigned char r_id; | ||
264 | unsigned char r_len[3]; | ||
265 | unsigned long r_start; | ||
266 | union { | ||
267 | char string[256]; | ||
268 | char data[1]; | ||
269 | } d; | ||
270 | #define c_id(x) ((x)->r_id) | ||
271 | #define c_len(x) ((x)->r_len[0]|((x)->r_len[1]<<8)|((x)->r_len[2]<<16)) | ||
272 | #define c_start(x) ((x)->r_start) | ||
273 | }; | ||
274 | |||
275 | #endif | ||
276 | |||
277 | extern struct bus_type ecard_bus_type; | ||
278 | |||
279 | #define ECARD_DEV(_d) container_of((_d), struct expansion_card, dev) | ||
280 | |||
281 | struct ecard_driver { | ||
282 | int (*probe)(struct expansion_card *, const struct ecard_id *id); | ||
283 | void (*remove)(struct expansion_card *); | ||
284 | void (*shutdown)(struct expansion_card *); | ||
285 | const struct ecard_id *id_table; | ||
286 | unsigned int id; | ||
287 | struct device_driver drv; | ||
288 | }; | ||
289 | |||
290 | #define ECARD_DRV(_d) container_of((_d), struct ecard_driver, drv) | ||
291 | |||
292 | #define ecard_set_drvdata(ec,data) dev_set_drvdata(&(ec)->dev, (data)) | ||
293 | #define ecard_get_drvdata(ec) dev_get_drvdata(&(ec)->dev) | ||
294 | |||
295 | int ecard_register_driver(struct ecard_driver *); | ||
296 | void ecard_remove_driver(struct ecard_driver *); | ||
297 | |||
298 | #endif | ||
diff --git a/include/asm-arm/elf.h b/include/asm-arm/elf.h new file mode 100644 index 000000000000..cbceacbe5afa --- /dev/null +++ b/include/asm-arm/elf.h | |||
@@ -0,0 +1,133 @@ | |||
1 | #ifndef __ASMARM_ELF_H | ||
2 | #define __ASMARM_ELF_H | ||
3 | |||
4 | #include <linux/config.h> | ||
5 | |||
6 | /* | ||
7 | * ELF register definitions.. | ||
8 | */ | ||
9 | |||
10 | #include <asm/ptrace.h> | ||
11 | #include <asm/user.h> | ||
12 | #include <asm/procinfo.h> | ||
13 | |||
14 | typedef unsigned long elf_greg_t; | ||
15 | typedef unsigned long elf_freg_t[3]; | ||
16 | |||
17 | #define EM_ARM 40 | ||
18 | #define EF_ARM_APCS26 0x08 | ||
19 | #define EF_ARM_SOFT_FLOAT 0x200 | ||
20 | #define EF_ARM_EABI_MASK 0xFF000000 | ||
21 | |||
22 | #define R_ARM_NONE 0 | ||
23 | #define R_ARM_PC24 1 | ||
24 | #define R_ARM_ABS32 2 | ||
25 | |||
26 | #define ELF_NGREG (sizeof (struct pt_regs) / sizeof(elf_greg_t)) | ||
27 | typedef elf_greg_t elf_gregset_t[ELF_NGREG]; | ||
28 | |||
29 | typedef struct user_fp elf_fpregset_t; | ||
30 | |||
31 | /* | ||
32 | * This is used to ensure we don't load something for the wrong architecture. | ||
33 | */ | ||
34 | #define elf_check_arch(x) ( ((x)->e_machine == EM_ARM) && (ELF_PROC_OK((x))) ) | ||
35 | |||
36 | /* | ||
37 | * These are used to set parameters in the core dumps. | ||
38 | */ | ||
39 | #define ELF_CLASS ELFCLASS32 | ||
40 | #ifdef __ARMEB__ | ||
41 | #define ELF_DATA ELFDATA2MSB; | ||
42 | #else | ||
43 | #define ELF_DATA ELFDATA2LSB; | ||
44 | #endif | ||
45 | #define ELF_ARCH EM_ARM | ||
46 | |||
47 | #define USE_ELF_CORE_DUMP | ||
48 | #define ELF_EXEC_PAGESIZE 4096 | ||
49 | |||
50 | /* This is the location that an ET_DYN program is loaded if exec'ed. Typical | ||
51 | use of this is to invoke "./ld.so someprog" to test out a new version of | ||
52 | the loader. We need to make sure that it is out of the way of the program | ||
53 | that it will "exec", and that there is sufficient room for the brk. */ | ||
54 | |||
55 | #define ELF_ET_DYN_BASE (2 * TASK_SIZE / 3) | ||
56 | |||
57 | /* When the program starts, a1 contains a pointer to a function to be | ||
58 | registered with atexit, as per the SVR4 ABI. A value of 0 means we | ||
59 | have no such handler. */ | ||
60 | #define ELF_PLAT_INIT(_r, load_addr) (_r)->ARM_r0 = 0 | ||
61 | |||
62 | /* This yields a mask that user programs can use to figure out what | ||
63 | instruction set this cpu supports. */ | ||
64 | |||
65 | #define ELF_HWCAP (elf_hwcap) | ||
66 | |||
67 | /* This yields a string that ld.so will use to load implementation | ||
68 | specific libraries for optimization. This is more specific in | ||
69 | intent than poking at uname or /proc/cpuinfo. */ | ||
70 | |||
71 | /* For now we just provide a fairly general string that describes the | ||
72 | processor family. This could be made more specific later if someone | ||
73 | implemented optimisations that require it. 26-bit CPUs give you | ||
74 | "v1l" for ARM2 (no SWP) and "v2l" for anything else (ARM1 isn't | ||
75 | supported). 32-bit CPUs give you "v3[lb]" for anything based on an | ||
76 | ARM6 or ARM7 core and "armv4[lb]" for anything based on a StrongARM-1 | ||
77 | core. */ | ||
78 | |||
79 | #define ELF_PLATFORM_SIZE 8 | ||
80 | extern char elf_platform[]; | ||
81 | #define ELF_PLATFORM (elf_platform) | ||
82 | |||
83 | #ifdef __KERNEL__ | ||
84 | |||
85 | /* | ||
86 | * 32-bit code is always OK. Some cpus can do 26-bit, some can't. | ||
87 | */ | ||
88 | #define ELF_PROC_OK(x) (ELF_THUMB_OK(x) && ELF_26BIT_OK(x)) | ||
89 | |||
90 | #define ELF_THUMB_OK(x) \ | ||
91 | (( (elf_hwcap & HWCAP_THUMB) && ((x)->e_entry & 1) == 1) || \ | ||
92 | ((x)->e_entry & 3) == 0) | ||
93 | |||
94 | #define ELF_26BIT_OK(x) \ | ||
95 | (( (elf_hwcap & HWCAP_26BIT) && (x)->e_flags & EF_ARM_APCS26) || \ | ||
96 | ((x)->e_flags & EF_ARM_APCS26) == 0) | ||
97 | |||
98 | #ifndef CONFIG_IWMMXT | ||
99 | |||
100 | /* Old NetWinder binaries were compiled in such a way that the iBCS | ||
101 | heuristic always trips on them. Until these binaries become uncommon | ||
102 | enough not to care, don't trust the `ibcs' flag here. In any case | ||
103 | there is no other ELF system currently supported by iBCS. | ||
104 | @@ Could print a warning message to encourage users to upgrade. */ | ||
105 | #define SET_PERSONALITY(ex,ibcs2) \ | ||
106 | set_personality(((ex).e_flags&EF_ARM_APCS26 ?PER_LINUX :PER_LINUX_32BIT)) | ||
107 | |||
108 | #else | ||
109 | |||
110 | /* | ||
111 | * All iWMMXt capable CPUs don't support 26-bit mode. Yet they can run | ||
112 | * legacy binaries which used to contain FPA11 floating point instructions | ||
113 | * that have always been emulated by the kernel. PFA11 and iWMMXt overlap | ||
114 | * on coprocessor 1 space though. We therefore must decide if given task | ||
115 | * is allowed to use CP 0 and 1 for iWMMXt, or if they should be blocked | ||
116 | * at all times for the prefetch exception handler to catch FPA11 opcodes | ||
117 | * and emulate them. The best indication to discriminate those two cases | ||
118 | * is the SOFT_FLOAT flag in the ELF header. | ||
119 | */ | ||
120 | |||
121 | #define SET_PERSONALITY(ex,ibcs2) \ | ||
122 | do { \ | ||
123 | set_personality(PER_LINUX_32BIT); \ | ||
124 | if (((ex).e_flags & EF_ARM_EABI_MASK) || \ | ||
125 | ((ex).e_flags & EF_ARM_SOFT_FLOAT)) \ | ||
126 | set_thread_flag(TIF_USING_IWMMXT); \ | ||
127 | } while (0) | ||
128 | |||
129 | #endif | ||
130 | |||
131 | #endif | ||
132 | |||
133 | #endif | ||
diff --git a/include/asm-arm/errno.h b/include/asm-arm/errno.h new file mode 100644 index 000000000000..6e60f0612bb6 --- /dev/null +++ b/include/asm-arm/errno.h | |||
@@ -0,0 +1,6 @@ | |||
1 | #ifndef _ARM_ERRNO_H | ||
2 | #define _ARM_ERRNO_H | ||
3 | |||
4 | #include <asm-generic/errno.h> | ||
5 | |||
6 | #endif | ||
diff --git a/include/asm-arm/fcntl.h b/include/asm-arm/fcntl.h new file mode 100644 index 000000000000..485b6bdf4d7a --- /dev/null +++ b/include/asm-arm/fcntl.h | |||
@@ -0,0 +1,87 @@ | |||
1 | #ifndef _ARM_FCNTL_H | ||
2 | #define _ARM_FCNTL_H | ||
3 | |||
4 | /* open/fcntl - O_SYNC is only implemented on blocks devices and on files | ||
5 | located on an ext2 file system */ | ||
6 | #define O_ACCMODE 0003 | ||
7 | #define O_RDONLY 00 | ||
8 | #define O_WRONLY 01 | ||
9 | #define O_RDWR 02 | ||
10 | #define O_CREAT 0100 /* not fcntl */ | ||
11 | #define O_EXCL 0200 /* not fcntl */ | ||
12 | #define O_NOCTTY 0400 /* not fcntl */ | ||
13 | #define O_TRUNC 01000 /* not fcntl */ | ||
14 | #define O_APPEND 02000 | ||
15 | #define O_NONBLOCK 04000 | ||
16 | #define O_NDELAY O_NONBLOCK | ||
17 | #define O_SYNC 010000 | ||
18 | #define FASYNC 020000 /* fcntl, for BSD compatibility */ | ||
19 | #define O_DIRECTORY 040000 /* must be a directory */ | ||
20 | #define O_NOFOLLOW 0100000 /* don't follow links */ | ||
21 | #define O_DIRECT 0200000 /* direct disk access hint - currently ignored */ | ||
22 | #define O_LARGEFILE 0400000 | ||
23 | #define O_NOATIME 01000000 | ||
24 | |||
25 | #define F_DUPFD 0 /* dup */ | ||
26 | #define F_GETFD 1 /* get close_on_exec */ | ||
27 | #define F_SETFD 2 /* set/clear close_on_exec */ | ||
28 | #define F_GETFL 3 /* get file->f_flags */ | ||
29 | #define F_SETFL 4 /* set file->f_flags */ | ||
30 | #define F_GETLK 5 | ||
31 | #define F_SETLK 6 | ||
32 | #define F_SETLKW 7 | ||
33 | |||
34 | #define F_SETOWN 8 /* for sockets. */ | ||
35 | #define F_GETOWN 9 /* for sockets. */ | ||
36 | #define F_SETSIG 10 /* for sockets. */ | ||
37 | #define F_GETSIG 11 /* for sockets. */ | ||
38 | |||
39 | #define F_GETLK64 12 /* using 'struct flock64' */ | ||
40 | #define F_SETLK64 13 | ||
41 | #define F_SETLKW64 14 | ||
42 | |||
43 | /* for F_[GET|SET]FL */ | ||
44 | #define FD_CLOEXEC 1 /* actually anything with low bit set goes */ | ||
45 | |||
46 | /* for posix fcntl() and lockf() */ | ||
47 | #define F_RDLCK 0 | ||
48 | #define F_WRLCK 1 | ||
49 | #define F_UNLCK 2 | ||
50 | |||
51 | /* for old implementation of bsd flock () */ | ||
52 | #define F_EXLCK 4 /* or 3 */ | ||
53 | #define F_SHLCK 8 /* or 4 */ | ||
54 | |||
55 | /* for leases */ | ||
56 | #define F_INPROGRESS 16 | ||
57 | |||
58 | /* operations for bsd flock(), also used by the kernel implementation */ | ||
59 | #define LOCK_SH 1 /* shared lock */ | ||
60 | #define LOCK_EX 2 /* exclusive lock */ | ||
61 | #define LOCK_NB 4 /* or'd with one of the above to prevent | ||
62 | blocking */ | ||
63 | #define LOCK_UN 8 /* remove lock */ | ||
64 | |||
65 | #define LOCK_MAND 32 /* This is a mandatory flock */ | ||
66 | #define LOCK_READ 64 /* ... Which allows concurrent read operations */ | ||
67 | #define LOCK_WRITE 128 /* ... Which allows concurrent write operations */ | ||
68 | #define LOCK_RW 192 /* ... Which allows concurrent read & write ops */ | ||
69 | |||
70 | struct flock { | ||
71 | short l_type; | ||
72 | short l_whence; | ||
73 | off_t l_start; | ||
74 | off_t l_len; | ||
75 | pid_t l_pid; | ||
76 | }; | ||
77 | |||
78 | struct flock64 { | ||
79 | short l_type; | ||
80 | short l_whence; | ||
81 | loff_t l_start; | ||
82 | loff_t l_len; | ||
83 | pid_t l_pid; | ||
84 | }; | ||
85 | |||
86 | #define F_LINUX_SPECIFIC_BASE 1024 | ||
87 | #endif | ||
diff --git a/include/asm-arm/fiq.h b/include/asm-arm/fiq.h new file mode 100644 index 000000000000..a3bad09e825c --- /dev/null +++ b/include/asm-arm/fiq.h | |||
@@ -0,0 +1,37 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/fiq.h | ||
3 | * | ||
4 | * Support for FIQ on ARM architectures. | ||
5 | * Written by Philip Blundell <philb@gnu.org>, 1998 | ||
6 | * Re-written by Russell King | ||
7 | */ | ||
8 | |||
9 | #ifndef __ASM_FIQ_H | ||
10 | #define __ASM_FIQ_H | ||
11 | |||
12 | #include <asm/ptrace.h> | ||
13 | |||
14 | struct fiq_handler { | ||
15 | struct fiq_handler *next; | ||
16 | /* Name | ||
17 | */ | ||
18 | const char *name; | ||
19 | /* Called to ask driver to relinquish/ | ||
20 | * reacquire FIQ | ||
21 | * return zero to accept, or -<errno> | ||
22 | */ | ||
23 | int (*fiq_op)(void *, int relinquish); | ||
24 | /* data for the relinquish/reacquire functions | ||
25 | */ | ||
26 | void *dev_id; | ||
27 | }; | ||
28 | |||
29 | extern int claim_fiq(struct fiq_handler *f); | ||
30 | extern void release_fiq(struct fiq_handler *f); | ||
31 | extern void set_fiq_handler(void *start, unsigned int length); | ||
32 | extern void set_fiq_regs(struct pt_regs *regs); | ||
33 | extern void get_fiq_regs(struct pt_regs *regs); | ||
34 | extern void enable_fiq(int fiq); | ||
35 | extern void disable_fiq(int fiq); | ||
36 | |||
37 | #endif | ||
diff --git a/include/asm-arm/floppy.h b/include/asm-arm/floppy.h new file mode 100644 index 000000000000..6ea657c886b9 --- /dev/null +++ b/include/asm-arm/floppy.h | |||
@@ -0,0 +1,144 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/floppy.h | ||
3 | * | ||
4 | * Copyright (C) 1996-2000 Russell King | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | * Note that we don't touch FLOPPY_DMA nor FLOPPY_IRQ here | ||
11 | */ | ||
12 | #ifndef __ASM_ARM_FLOPPY_H | ||
13 | #define __ASM_ARM_FLOPPY_H | ||
14 | #if 0 | ||
15 | #include <asm/arch/floppy.h> | ||
16 | #endif | ||
17 | |||
18 | #define fd_outb(val,port) \ | ||
19 | do { \ | ||
20 | if ((port) == FD_DOR) \ | ||
21 | fd_setdor((val)); \ | ||
22 | else \ | ||
23 | outb((val),(port)); \ | ||
24 | } while(0) | ||
25 | |||
26 | #define fd_inb(port) inb((port)) | ||
27 | #define fd_request_irq() request_irq(IRQ_FLOPPYDISK,floppy_interrupt,\ | ||
28 | SA_INTERRUPT|SA_SAMPLE_RANDOM,"floppy",NULL) | ||
29 | #define fd_free_irq() free_irq(IRQ_FLOPPYDISK,NULL) | ||
30 | #define fd_disable_irq() disable_irq(IRQ_FLOPPYDISK) | ||
31 | #define fd_enable_irq() enable_irq(IRQ_FLOPPYDISK) | ||
32 | |||
33 | #define fd_request_dma() request_dma(DMA_FLOPPY,"floppy") | ||
34 | #define fd_free_dma() free_dma(DMA_FLOPPY) | ||
35 | #define fd_disable_dma() disable_dma(DMA_FLOPPY) | ||
36 | #define fd_enable_dma() enable_dma(DMA_FLOPPY) | ||
37 | #define fd_clear_dma_ff() clear_dma_ff(DMA_FLOPPY) | ||
38 | #define fd_set_dma_mode(mode) set_dma_mode(DMA_FLOPPY, (mode)) | ||
39 | #define fd_set_dma_addr(addr) set_dma_addr(DMA_FLOPPY, virt_to_bus((addr))) | ||
40 | #define fd_set_dma_count(len) set_dma_count(DMA_FLOPPY, (len)) | ||
41 | #define fd_cacheflush(addr,sz) | ||
42 | |||
43 | /* need to clean up dma.h */ | ||
44 | #define DMA_FLOPPYDISK DMA_FLOPPY | ||
45 | |||
46 | /* Floppy_selects is the list of DOR's to select drive fd | ||
47 | * | ||
48 | * On initialisation, the floppy list is scanned, and the drives allocated | ||
49 | * in the order that they are found. This is done by seeking the drive | ||
50 | * to a non-zero track, and then restoring it to track 0. If an error occurs, | ||
51 | * then there is no floppy drive present. [to be put back in again] | ||
52 | */ | ||
53 | static unsigned char floppy_selects[2][4] = | ||
54 | { | ||
55 | { 0x10, 0x21, 0x23, 0x33 }, | ||
56 | { 0x10, 0x21, 0x23, 0x33 } | ||
57 | }; | ||
58 | |||
59 | #define fd_setdor(dor) \ | ||
60 | do { \ | ||
61 | int new_dor = (dor); \ | ||
62 | if (new_dor & 0xf0) \ | ||
63 | new_dor = (new_dor & 0x0c) | floppy_selects[fdc][new_dor & 3]; \ | ||
64 | else \ | ||
65 | new_dor &= 0x0c; \ | ||
66 | outb(new_dor, FD_DOR); \ | ||
67 | } while (0) | ||
68 | |||
69 | /* | ||
70 | * Someday, we'll automatically detect which drives are present... | ||
71 | */ | ||
72 | static inline void fd_scandrives (void) | ||
73 | { | ||
74 | #if 0 | ||
75 | int floppy, drive_count; | ||
76 | |||
77 | fd_disable_irq(); | ||
78 | raw_cmd = &default_raw_cmd; | ||
79 | raw_cmd->flags = FD_RAW_SPIN | FD_RAW_NEED_SEEK; | ||
80 | raw_cmd->track = 0; | ||
81 | raw_cmd->rate = ?; | ||
82 | drive_count = 0; | ||
83 | for (floppy = 0; floppy < 4; floppy ++) { | ||
84 | current_drive = drive_count; | ||
85 | /* | ||
86 | * Turn on floppy motor | ||
87 | */ | ||
88 | if (start_motor(redo_fd_request)) | ||
89 | continue; | ||
90 | /* | ||
91 | * Set up FDC | ||
92 | */ | ||
93 | fdc_specify(); | ||
94 | /* | ||
95 | * Tell FDC to recalibrate | ||
96 | */ | ||
97 | output_byte(FD_RECALIBRATE); | ||
98 | LAST_OUT(UNIT(floppy)); | ||
99 | /* wait for command to complete */ | ||
100 | if (!successful) { | ||
101 | int i; | ||
102 | for (i = drive_count; i < 3; i--) | ||
103 | floppy_selects[fdc][i] = floppy_selects[fdc][i + 1]; | ||
104 | floppy_selects[fdc][3] = 0; | ||
105 | floppy -= 1; | ||
106 | } else | ||
107 | drive_count++; | ||
108 | } | ||
109 | #else | ||
110 | floppy_selects[0][0] = 0x10; | ||
111 | floppy_selects[0][1] = 0x21; | ||
112 | floppy_selects[0][2] = 0x23; | ||
113 | floppy_selects[0][3] = 0x33; | ||
114 | #endif | ||
115 | } | ||
116 | |||
117 | #define FDC1 (0x3f0) | ||
118 | |||
119 | #define FLOPPY0_TYPE 4 | ||
120 | #define FLOPPY1_TYPE 4 | ||
121 | |||
122 | #define N_FDC 1 | ||
123 | #define N_DRIVE 4 | ||
124 | |||
125 | #define FLOPPY_MOTOR_MASK 0xf0 | ||
126 | |||
127 | #define CROSS_64KB(a,s) (0) | ||
128 | |||
129 | /* | ||
130 | * This allows people to reverse the order of | ||
131 | * fd0 and fd1, in case their hardware is | ||
132 | * strangely connected (as some RiscPCs | ||
133 | * and A5000s seem to be). | ||
134 | */ | ||
135 | static void driveswap(int *ints, int dummy, int dummy2) | ||
136 | { | ||
137 | floppy_selects[0][0] ^= floppy_selects[0][1]; | ||
138 | floppy_selects[0][1] ^= floppy_selects[0][0]; | ||
139 | floppy_selects[0][0] ^= floppy_selects[0][1]; | ||
140 | } | ||
141 | |||
142 | #define EXTRA_FLOPPY_PARAMS ,{ "driveswap", &driveswap, NULL, 0, 0 } | ||
143 | |||
144 | #endif | ||
diff --git a/include/asm-arm/fpstate.h b/include/asm-arm/fpstate.h new file mode 100644 index 000000000000..f7430e3aa55d --- /dev/null +++ b/include/asm-arm/fpstate.h | |||
@@ -0,0 +1,74 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/fpstate.h | ||
3 | * | ||
4 | * Copyright (C) 1995 Russell King | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | */ | ||
10 | |||
11 | #ifndef __ASM_ARM_FPSTATE_H | ||
12 | #define __ASM_ARM_FPSTATE_H | ||
13 | |||
14 | #include <linux/config.h> | ||
15 | |||
16 | #ifndef __ASSEMBLY__ | ||
17 | |||
18 | /* | ||
19 | * VFP storage area has: | ||
20 | * - FPEXC, FPSCR, FPINST and FPINST2. | ||
21 | * - 16 double precision data registers | ||
22 | * - an implementation-dependant word of state for FLDMX/FSTMX | ||
23 | * | ||
24 | * FPEXC will always be non-zero once the VFP has been used in this process. | ||
25 | */ | ||
26 | |||
27 | struct vfp_hard_struct { | ||
28 | __u64 fpregs[16]; | ||
29 | __u32 fpmx_state; | ||
30 | __u32 fpexc; | ||
31 | __u32 fpscr; | ||
32 | /* | ||
33 | * VFP implementation specific state | ||
34 | */ | ||
35 | __u32 fpinst; | ||
36 | __u32 fpinst2; | ||
37 | }; | ||
38 | |||
39 | union vfp_state { | ||
40 | struct vfp_hard_struct hard; | ||
41 | }; | ||
42 | |||
43 | extern void vfp_flush_thread(union vfp_state *); | ||
44 | extern void vfp_release_thread(union vfp_state *); | ||
45 | |||
46 | #define FP_HARD_SIZE 35 | ||
47 | |||
48 | struct fp_hard_struct { | ||
49 | unsigned int save[FP_HARD_SIZE]; /* as yet undefined */ | ||
50 | }; | ||
51 | |||
52 | #define FP_SOFT_SIZE 35 | ||
53 | |||
54 | struct fp_soft_struct { | ||
55 | unsigned int save[FP_SOFT_SIZE]; /* undefined information */ | ||
56 | }; | ||
57 | |||
58 | struct iwmmxt_struct { | ||
59 | unsigned int save[0x98/sizeof(int) + 1]; | ||
60 | }; | ||
61 | |||
62 | union fp_state { | ||
63 | struct fp_hard_struct hard; | ||
64 | struct fp_soft_struct soft; | ||
65 | #ifdef CONFIG_IWMMXT | ||
66 | struct iwmmxt_struct iwmmxt; | ||
67 | #endif | ||
68 | }; | ||
69 | |||
70 | #define FP_SIZE (sizeof(union fp_state) / sizeof(int)) | ||
71 | |||
72 | #endif | ||
73 | |||
74 | #endif | ||
diff --git a/include/asm-arm/glue.h b/include/asm-arm/glue.h new file mode 100644 index 000000000000..223e0d6c41be --- /dev/null +++ b/include/asm-arm/glue.h | |||
@@ -0,0 +1,114 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/glue.h | ||
3 | * | ||
4 | * Copyright (C) 1997-1999 Russell King | ||
5 | * Copyright (C) 2000-2002 Deep Blue Solutions Ltd. | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License version 2 as | ||
9 | * published by the Free Software Foundation. | ||
10 | * | ||
11 | * This file provides the glue to stick the processor-specific bits | ||
12 | * into the kernel in an efficient manner. The idea is to use branches | ||
13 | * when we're only targetting one class of TLB, or indirect calls | ||
14 | * when we're targetting multiple classes of TLBs. | ||
15 | */ | ||
16 | #ifdef __KERNEL__ | ||
17 | |||
18 | #include <linux/config.h> | ||
19 | |||
20 | #ifdef __STDC__ | ||
21 | #define ____glue(name,fn) name##fn | ||
22 | #else | ||
23 | #define ____glue(name,fn) name/**/fn | ||
24 | #endif | ||
25 | #define __glue(name,fn) ____glue(name,fn) | ||
26 | |||
27 | |||
28 | |||
29 | /* | ||
30 | * Data Abort Model | ||
31 | * ================ | ||
32 | * | ||
33 | * We have the following to choose from: | ||
34 | * arm6 - ARM6 style | ||
35 | * arm7 - ARM7 style | ||
36 | * v4_early - ARMv4 without Thumb early abort handler | ||
37 | * v4t_late - ARMv4 with Thumb late abort handler | ||
38 | * v4t_early - ARMv4 with Thumb early abort handler | ||
39 | * v5tej_early - ARMv5 with Thumb and Java early abort handler | ||
40 | * xscale - ARMv5 with Thumb with Xscale extensions | ||
41 | * v6_early - ARMv6 generic early abort handler | ||
42 | */ | ||
43 | #undef CPU_ABORT_HANDLER | ||
44 | #undef MULTI_ABORT | ||
45 | |||
46 | #if defined(CONFIG_CPU_ARM610) | ||
47 | # ifdef CPU_ABORT_HANDLER | ||
48 | # define MULTI_ABORT 1 | ||
49 | # else | ||
50 | # define CPU_ABORT_HANDLER cpu_arm6_data_abort | ||
51 | # endif | ||
52 | #endif | ||
53 | |||
54 | #if defined(CONFIG_CPU_ARM710) | ||
55 | # ifdef CPU_ABORT_HANDLER | ||
56 | # define MULTI_ABORT 1 | ||
57 | # else | ||
58 | # define CPU_ABORT_HANDLER cpu_arm7_data_abort | ||
59 | # endif | ||
60 | #endif | ||
61 | |||
62 | #ifdef CONFIG_CPU_ABRT_LV4T | ||
63 | # ifdef CPU_ABORT_HANDLER | ||
64 | # define MULTI_ABORT 1 | ||
65 | # else | ||
66 | # define CPU_ABORT_HANDLER v4t_late_abort | ||
67 | # endif | ||
68 | #endif | ||
69 | |||
70 | #ifdef CONFIG_CPU_ABRT_EV4 | ||
71 | # ifdef CPU_ABORT_HANDLER | ||
72 | # define MULTI_ABORT 1 | ||
73 | # else | ||
74 | # define CPU_ABORT_HANDLER v4_early_abort | ||
75 | # endif | ||
76 | #endif | ||
77 | |||
78 | #ifdef CONFIG_CPU_ABRT_EV4T | ||
79 | # ifdef CPU_ABORT_HANDLER | ||
80 | # define MULTI_ABORT 1 | ||
81 | # else | ||
82 | # define CPU_ABORT_HANDLER v4t_early_abort | ||
83 | # endif | ||
84 | #endif | ||
85 | |||
86 | #ifdef CONFIG_CPU_ABRT_EV5TJ | ||
87 | # ifdef CPU_ABORT_HANDLER | ||
88 | # define MULTI_ABORT 1 | ||
89 | # else | ||
90 | # define CPU_ABORT_HANDLER v5tj_early_abort | ||
91 | # endif | ||
92 | #endif | ||
93 | |||
94 | #ifdef CONFIG_CPU_ABRT_EV5T | ||
95 | # ifdef CPU_ABORT_HANDLER | ||
96 | # define MULTI_ABORT 1 | ||
97 | # else | ||
98 | # define CPU_ABORT_HANDLER v5t_early_abort | ||
99 | # endif | ||
100 | #endif | ||
101 | |||
102 | #ifdef CONFIG_CPU_ABRT_EV6 | ||
103 | # ifdef CPU_ABORT_HANDLER | ||
104 | # define MULTI_ABORT 1 | ||
105 | # else | ||
106 | # define CPU_ABORT_HANDLER v6_early_abort | ||
107 | # endif | ||
108 | #endif | ||
109 | |||
110 | #ifndef CPU_ABORT_HANDLER | ||
111 | #error Unknown data abort handler type | ||
112 | #endif | ||
113 | |||
114 | #endif | ||
diff --git a/include/asm-arm/hardirq.h b/include/asm-arm/hardirq.h new file mode 100644 index 000000000000..e5ccb6b8ff83 --- /dev/null +++ b/include/asm-arm/hardirq.h | |||
@@ -0,0 +1,32 @@ | |||
1 | #ifndef __ASM_HARDIRQ_H | ||
2 | #define __ASM_HARDIRQ_H | ||
3 | |||
4 | #include <linux/config.h> | ||
5 | #include <linux/cache.h> | ||
6 | #include <linux/threads.h> | ||
7 | #include <asm/irq.h> | ||
8 | |||
9 | typedef struct { | ||
10 | unsigned int __softirq_pending; | ||
11 | } ____cacheline_aligned irq_cpustat_t; | ||
12 | |||
13 | #include <linux/irq_cpustat.h> /* Standard mappings for irq_cpustat_t above */ | ||
14 | |||
15 | #if NR_IRQS > 256 | ||
16 | #define HARDIRQ_BITS 9 | ||
17 | #else | ||
18 | #define HARDIRQ_BITS 8 | ||
19 | #endif | ||
20 | |||
21 | /* | ||
22 | * The hardirq mask has to be large enough to have space | ||
23 | * for potentially all IRQ sources in the system nesting | ||
24 | * on a single CPU: | ||
25 | */ | ||
26 | #if (1 << HARDIRQ_BITS) < NR_IRQS | ||
27 | # error HARDIRQ_BITS is too low! | ||
28 | #endif | ||
29 | |||
30 | #define __ARCH_IRQ_EXIT_IRQS_DISABLED 1 | ||
31 | |||
32 | #endif /* __ASM_HARDIRQ_H */ | ||
diff --git a/include/asm-arm/hardware.h b/include/asm-arm/hardware.h new file mode 100644 index 000000000000..1fd1a5b6504b --- /dev/null +++ b/include/asm-arm/hardware.h | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/hardware.h | ||
3 | * | ||
4 | * Copyright (C) 1996 Russell King | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | * Common hardware definitions | ||
11 | */ | ||
12 | |||
13 | #ifndef __ASM_HARDWARE_H | ||
14 | #define __ASM_HARDWARE_H | ||
15 | |||
16 | #include <asm/arch/hardware.h> | ||
17 | |||
18 | #endif | ||
diff --git a/include/asm-arm/hardware/amba.h b/include/asm-arm/hardware/amba.h new file mode 100644 index 000000000000..51e6e54b2aa1 --- /dev/null +++ b/include/asm-arm/hardware/amba.h | |||
@@ -0,0 +1,55 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/hardware/amba.h | ||
3 | * | ||
4 | * Copyright (C) 2003 Deep Blue Solutions Ltd, All Rights Reserved. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | */ | ||
10 | #ifndef ASMARM_AMBA_H | ||
11 | #define ASMARM_AMBA_H | ||
12 | |||
13 | #define AMBA_NR_IRQS 2 | ||
14 | |||
15 | struct amba_device { | ||
16 | struct device dev; | ||
17 | struct resource res; | ||
18 | u64 dma_mask; | ||
19 | unsigned int periphid; | ||
20 | unsigned int irq[AMBA_NR_IRQS]; | ||
21 | }; | ||
22 | |||
23 | struct amba_id { | ||
24 | unsigned int id; | ||
25 | unsigned int mask; | ||
26 | void *data; | ||
27 | }; | ||
28 | |||
29 | struct amba_driver { | ||
30 | struct device_driver drv; | ||
31 | int (*probe)(struct amba_device *, void *); | ||
32 | int (*remove)(struct amba_device *); | ||
33 | void (*shutdown)(struct amba_device *); | ||
34 | int (*suspend)(struct amba_device *, pm_message_t); | ||
35 | int (*resume)(struct amba_device *); | ||
36 | struct amba_id *id_table; | ||
37 | }; | ||
38 | |||
39 | #define amba_get_drvdata(d) dev_get_drvdata(&d->dev) | ||
40 | #define amba_set_drvdata(d,p) dev_set_drvdata(&d->dev, p) | ||
41 | |||
42 | int amba_driver_register(struct amba_driver *); | ||
43 | void amba_driver_unregister(struct amba_driver *); | ||
44 | int amba_device_register(struct amba_device *, struct resource *); | ||
45 | void amba_device_unregister(struct amba_device *); | ||
46 | struct amba_device *amba_find_device(const char *, struct device *, unsigned int, unsigned int); | ||
47 | int amba_request_regions(struct amba_device *, const char *); | ||
48 | void amba_release_regions(struct amba_device *); | ||
49 | |||
50 | #define amba_config(d) (((d)->periphid >> 24) & 0xff) | ||
51 | #define amba_rev(d) (((d)->periphid >> 20) & 0x0f) | ||
52 | #define amba_manf(d) (((d)->periphid >> 12) & 0xff) | ||
53 | #define amba_part(d) ((d)->periphid & 0xfff) | ||
54 | |||
55 | #endif | ||
diff --git a/include/asm-arm/hardware/amba_clcd.h b/include/asm-arm/hardware/amba_clcd.h new file mode 100644 index 000000000000..2149be7c7023 --- /dev/null +++ b/include/asm-arm/hardware/amba_clcd.h | |||
@@ -0,0 +1,264 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/hardware/amba_clcd.h -- Integrator LCD panel. | ||
3 | * | ||
4 | * David A Rusling | ||
5 | * | ||
6 | * Copyright (C) 2001 ARM Limited | ||
7 | * | ||
8 | * This file is subject to the terms and conditions of the GNU General Public | ||
9 | * License. See the file COPYING in the main directory of this archive | ||
10 | * for more details. | ||
11 | */ | ||
12 | #include <linux/config.h> | ||
13 | #include <linux/fb.h> | ||
14 | |||
15 | /* | ||
16 | * CLCD Controller Internal Register addresses | ||
17 | */ | ||
18 | #define CLCD_TIM0 0x00000000 | ||
19 | #define CLCD_TIM1 0x00000004 | ||
20 | #define CLCD_TIM2 0x00000008 | ||
21 | #define CLCD_TIM3 0x0000000c | ||
22 | #define CLCD_UBAS 0x00000010 | ||
23 | #define CLCD_LBAS 0x00000014 | ||
24 | |||
25 | #ifndef CONFIG_ARCH_VERSATILE | ||
26 | #define CLCD_IENB 0x00000018 | ||
27 | #define CLCD_CNTL 0x0000001c | ||
28 | #else | ||
29 | /* | ||
30 | * Someone rearranged these two registers on the Versatile | ||
31 | * platform... | ||
32 | */ | ||
33 | #define CLCD_IENB 0x0000001c | ||
34 | #define CLCD_CNTL 0x00000018 | ||
35 | #endif | ||
36 | |||
37 | #define CLCD_STAT 0x00000020 | ||
38 | #define CLCD_INTR 0x00000024 | ||
39 | #define CLCD_UCUR 0x00000028 | ||
40 | #define CLCD_LCUR 0x0000002C | ||
41 | #define CLCD_PALL 0x00000200 | ||
42 | #define CLCD_PALETTE 0x00000200 | ||
43 | |||
44 | #define TIM2_CLKSEL (1 << 5) | ||
45 | #define TIM2_IVS (1 << 11) | ||
46 | #define TIM2_IHS (1 << 12) | ||
47 | #define TIM2_IPC (1 << 13) | ||
48 | #define TIM2_IOE (1 << 14) | ||
49 | #define TIM2_BCD (1 << 26) | ||
50 | |||
51 | #define CNTL_LCDEN (1 << 0) | ||
52 | #define CNTL_LCDBPP1 (0 << 1) | ||
53 | #define CNTL_LCDBPP2 (1 << 1) | ||
54 | #define CNTL_LCDBPP4 (2 << 1) | ||
55 | #define CNTL_LCDBPP8 (3 << 1) | ||
56 | #define CNTL_LCDBPP16 (4 << 1) | ||
57 | #define CNTL_LCDBPP24 (5 << 1) | ||
58 | #define CNTL_LCDBW (1 << 4) | ||
59 | #define CNTL_LCDTFT (1 << 5) | ||
60 | #define CNTL_LCDMONO8 (1 << 6) | ||
61 | #define CNTL_LCDDUAL (1 << 7) | ||
62 | #define CNTL_BGR (1 << 8) | ||
63 | #define CNTL_BEBO (1 << 9) | ||
64 | #define CNTL_BEPO (1 << 10) | ||
65 | #define CNTL_LCDPWR (1 << 11) | ||
66 | #define CNTL_LCDVCOMP(x) ((x) << 12) | ||
67 | #define CNTL_LDMAFIFOTIME (1 << 15) | ||
68 | #define CNTL_WATERMARK (1 << 16) | ||
69 | |||
70 | struct clcd_panel { | ||
71 | struct fb_videomode mode; | ||
72 | signed short width; /* width in mm */ | ||
73 | signed short height; /* height in mm */ | ||
74 | u32 tim2; | ||
75 | u32 tim3; | ||
76 | u32 cntl; | ||
77 | unsigned int bpp:8, | ||
78 | fixedtimings:1, | ||
79 | grayscale:1; | ||
80 | unsigned int connector; | ||
81 | }; | ||
82 | |||
83 | struct clcd_regs { | ||
84 | u32 tim0; | ||
85 | u32 tim1; | ||
86 | u32 tim2; | ||
87 | u32 tim3; | ||
88 | u32 cntl; | ||
89 | unsigned long pixclock; | ||
90 | }; | ||
91 | |||
92 | struct clcd_fb; | ||
93 | |||
94 | /* | ||
95 | * the board-type specific routines | ||
96 | */ | ||
97 | struct clcd_board { | ||
98 | const char *name; | ||
99 | |||
100 | /* | ||
101 | * Optional. Check whether the var structure is acceptable | ||
102 | * for this display. | ||
103 | */ | ||
104 | int (*check)(struct clcd_fb *fb, struct fb_var_screeninfo *var); | ||
105 | |||
106 | /* | ||
107 | * Compulsary. Decode fb->fb.var into regs->*. In the case of | ||
108 | * fixed timing, set regs->* to the register values required. | ||
109 | */ | ||
110 | void (*decode)(struct clcd_fb *fb, struct clcd_regs *regs); | ||
111 | |||
112 | /* | ||
113 | * Optional. Disable any extra display hardware. | ||
114 | */ | ||
115 | void (*disable)(struct clcd_fb *); | ||
116 | |||
117 | /* | ||
118 | * Optional. Enable any extra display hardware. | ||
119 | */ | ||
120 | void (*enable)(struct clcd_fb *); | ||
121 | |||
122 | /* | ||
123 | * Setup platform specific parts of CLCD driver | ||
124 | */ | ||
125 | int (*setup)(struct clcd_fb *); | ||
126 | |||
127 | /* | ||
128 | * mmap the framebuffer memory | ||
129 | */ | ||
130 | int (*mmap)(struct clcd_fb *, struct vm_area_struct *); | ||
131 | |||
132 | /* | ||
133 | * Remove platform specific parts of CLCD driver | ||
134 | */ | ||
135 | void (*remove)(struct clcd_fb *); | ||
136 | }; | ||
137 | |||
138 | struct amba_device; | ||
139 | struct clk; | ||
140 | |||
141 | /* this data structure describes each frame buffer device we find */ | ||
142 | struct clcd_fb { | ||
143 | struct fb_info fb; | ||
144 | struct amba_device *dev; | ||
145 | struct clk *clk; | ||
146 | struct clcd_panel *panel; | ||
147 | struct clcd_board *board; | ||
148 | void *board_data; | ||
149 | void __iomem *regs; | ||
150 | u32 clcd_cntl; | ||
151 | u32 cmap[16]; | ||
152 | }; | ||
153 | |||
154 | static inline void clcdfb_decode(struct clcd_fb *fb, struct clcd_regs *regs) | ||
155 | { | ||
156 | u32 val; | ||
157 | |||
158 | /* | ||
159 | * Program the CLCD controller registers and start the CLCD | ||
160 | */ | ||
161 | val = ((fb->fb.var.xres / 16) - 1) << 2; | ||
162 | val |= (fb->fb.var.hsync_len - 1) << 8; | ||
163 | val |= (fb->fb.var.right_margin - 1) << 16; | ||
164 | val |= (fb->fb.var.left_margin - 1) << 24; | ||
165 | regs->tim0 = val; | ||
166 | |||
167 | val = fb->fb.var.yres - 1; | ||
168 | val |= (fb->fb.var.vsync_len - 1) << 10; | ||
169 | val |= fb->fb.var.lower_margin << 16; | ||
170 | val |= fb->fb.var.upper_margin << 24; | ||
171 | regs->tim1 = val; | ||
172 | |||
173 | val = fb->panel->tim2; | ||
174 | val |= fb->fb.var.sync & FB_SYNC_HOR_HIGH_ACT ? 0 : TIM2_IHS; | ||
175 | val |= fb->fb.var.sync & FB_SYNC_VERT_HIGH_ACT ? 0 : TIM2_IVS; | ||
176 | |||
177 | if (fb->panel->cntl & CNTL_LCDTFT) | ||
178 | val |= (fb->fb.var.xres_virtual - 1) << 16; | ||
179 | else if (fb->panel->cntl & CNTL_LCDBW) | ||
180 | printk("what value for CPL for stnmono panels?"); | ||
181 | else | ||
182 | val |= ((fb->fb.var.xres_virtual * 8 / 3) - 1) << 16; | ||
183 | regs->tim2 = val; | ||
184 | |||
185 | regs->tim3 = fb->panel->tim3; | ||
186 | |||
187 | val = fb->panel->cntl; | ||
188 | if (fb->fb.var.grayscale) | ||
189 | val |= CNTL_LCDBW; | ||
190 | |||
191 | switch (fb->fb.var.bits_per_pixel) { | ||
192 | case 1: | ||
193 | val |= CNTL_LCDBPP1; | ||
194 | break; | ||
195 | case 2: | ||
196 | val |= CNTL_LCDBPP2; | ||
197 | break; | ||
198 | case 4: | ||
199 | val |= CNTL_LCDBPP4; | ||
200 | break; | ||
201 | case 8: | ||
202 | val |= CNTL_LCDBPP8; | ||
203 | break; | ||
204 | case 16: | ||
205 | val |= CNTL_LCDBPP16; | ||
206 | break; | ||
207 | case 24: | ||
208 | val |= CNTL_LCDBPP24; | ||
209 | break; | ||
210 | } | ||
211 | |||
212 | regs->cntl = val; | ||
213 | regs->pixclock = fb->fb.var.pixclock; | ||
214 | } | ||
215 | |||
216 | static inline int clcdfb_check(struct clcd_fb *fb, struct fb_var_screeninfo *var) | ||
217 | { | ||
218 | var->xres_virtual = var->xres = (var->xres + 7) & ~7; | ||
219 | var->yres_virtual = var->yres; | ||
220 | |||
221 | #define CHECK(e,l,h) (var->e < l || var->e > h) | ||
222 | if (CHECK(right_margin, (5+1), 256) || /* back porch */ | ||
223 | CHECK(left_margin, (5+1), 256) || /* front porch */ | ||
224 | CHECK(hsync_len, (5+1), 256) || | ||
225 | var->xres > 4096 || | ||
226 | var->lower_margin > 255 || /* back porch */ | ||
227 | var->upper_margin > 255 || /* front porch */ | ||
228 | var->vsync_len > 32 || | ||
229 | var->yres > 1024) | ||
230 | return -EINVAL; | ||
231 | #undef CHECK | ||
232 | |||
233 | /* single panel mode: PCD = max(PCD, 1) */ | ||
234 | /* dual panel mode: PCD = max(PCD, 5) */ | ||
235 | |||
236 | /* | ||
237 | * You can't change the grayscale setting, and | ||
238 | * we can only do non-interlaced video. | ||
239 | */ | ||
240 | if (var->grayscale != fb->fb.var.grayscale || | ||
241 | (var->vmode & FB_VMODE_MASK) != FB_VMODE_NONINTERLACED) | ||
242 | return -EINVAL; | ||
243 | |||
244 | #define CHECK(e) (var->e != fb->fb.var.e) | ||
245 | if (fb->panel->fixedtimings && | ||
246 | (CHECK(xres) || | ||
247 | CHECK(yres) || | ||
248 | CHECK(bits_per_pixel) || | ||
249 | CHECK(pixclock) || | ||
250 | CHECK(left_margin) || | ||
251 | CHECK(right_margin) || | ||
252 | CHECK(upper_margin) || | ||
253 | CHECK(lower_margin) || | ||
254 | CHECK(hsync_len) || | ||
255 | CHECK(vsync_len) || | ||
256 | CHECK(sync))) | ||
257 | return -EINVAL; | ||
258 | #undef CHECK | ||
259 | |||
260 | var->nonstd = 0; | ||
261 | var->accel_flags = 0; | ||
262 | |||
263 | return 0; | ||
264 | } | ||
diff --git a/include/asm-arm/hardware/amba_kmi.h b/include/asm-arm/hardware/amba_kmi.h new file mode 100644 index 000000000000..a39e5be751b3 --- /dev/null +++ b/include/asm-arm/hardware/amba_kmi.h | |||
@@ -0,0 +1,92 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/hardware/amba_kmi.h | ||
3 | * | ||
4 | * Internal header file for AMBA KMI ports | ||
5 | * | ||
6 | * Copyright (C) 2000 Deep Blue Solutions Ltd. | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License as published by | ||
10 | * the Free Software Foundation; either version 2 of the License, or | ||
11 | * (at your option) any later version. | ||
12 | * | ||
13 | * This program is distributed in the hope that it will be useful, | ||
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
16 | * GNU General Public License for more details. | ||
17 | * | ||
18 | * You should have received a copy of the GNU General Public License | ||
19 | * along with this program; if not, write to the Free Software | ||
20 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
21 | * | ||
22 | * | ||
23 | * --------------------------------------------------------------------------- | ||
24 | * From ARM PrimeCell(tm) PS2 Keyboard/Mouse Interface (PL050) Technical | ||
25 | * Reference Manual - ARM DDI 0143B - see http://www.arm.com/ | ||
26 | * --------------------------------------------------------------------------- | ||
27 | */ | ||
28 | #ifndef ASM_ARM_HARDWARE_AMBA_KMI_H | ||
29 | #define ASM_ARM_HARDWARE_AMBA_KMI_H | ||
30 | |||
31 | /* | ||
32 | * KMI control register: | ||
33 | * KMICR_TYPE 0 = PS2/AT mode, 1 = No line control bit mode | ||
34 | * KMICR_RXINTREN 1 = enable RX interrupts | ||
35 | * KMICR_TXINTREN 1 = enable TX interrupts | ||
36 | * KMICR_EN 1 = enable KMI | ||
37 | * KMICR_FD 1 = force KMI data low | ||
38 | * KMICR_FC 1 = force KMI clock low | ||
39 | */ | ||
40 | #define KMICR (KMI_BASE + 0x00) | ||
41 | #define KMICR_TYPE (1 << 5) | ||
42 | #define KMICR_RXINTREN (1 << 4) | ||
43 | #define KMICR_TXINTREN (1 << 3) | ||
44 | #define KMICR_EN (1 << 2) | ||
45 | #define KMICR_FD (1 << 1) | ||
46 | #define KMICR_FC (1 << 0) | ||
47 | |||
48 | /* | ||
49 | * KMI status register: | ||
50 | * KMISTAT_TXEMPTY 1 = transmitter register empty | ||
51 | * KMISTAT_TXBUSY 1 = currently sending data | ||
52 | * KMISTAT_RXFULL 1 = receiver register ready to be read | ||
53 | * KMISTAT_RXBUSY 1 = currently receiving data | ||
54 | * KMISTAT_RXPARITY parity of last databyte received | ||
55 | * KMISTAT_IC current level of KMI clock input | ||
56 | * KMISTAT_ID current level of KMI data input | ||
57 | */ | ||
58 | #define KMISTAT (KMI_BASE + 0x04) | ||
59 | #define KMISTAT_TXEMPTY (1 << 6) | ||
60 | #define KMISTAT_TXBUSY (1 << 5) | ||
61 | #define KMISTAT_RXFULL (1 << 4) | ||
62 | #define KMISTAT_RXBUSY (1 << 3) | ||
63 | #define KMISTAT_RXPARITY (1 << 2) | ||
64 | #define KMISTAT_IC (1 << 1) | ||
65 | #define KMISTAT_ID (1 << 0) | ||
66 | |||
67 | /* | ||
68 | * KMI data register | ||
69 | */ | ||
70 | #define KMIDATA (KMI_BASE + 0x08) | ||
71 | |||
72 | /* | ||
73 | * KMI clock divisor: to generate 8MHz internal clock | ||
74 | * div = (ref / 8MHz) - 1; 0 <= div <= 15 | ||
75 | */ | ||
76 | #define KMICLKDIV (KMI_BASE + 0x0c) | ||
77 | |||
78 | /* | ||
79 | * KMI interrupt register: | ||
80 | * KMIIR_TXINTR 1 = transmit interrupt asserted | ||
81 | * KMIIR_RXINTR 1 = receive interrupt asserted | ||
82 | */ | ||
83 | #define KMIIR (KMI_BASE + 0x10) | ||
84 | #define KMIIR_TXINTR (1 << 1) | ||
85 | #define KMIIR_RXINTR (1 << 0) | ||
86 | |||
87 | /* | ||
88 | * The size of the KMI primecell | ||
89 | */ | ||
90 | #define KMI_SIZE (0x100) | ||
91 | |||
92 | #endif | ||
diff --git a/include/asm-arm/hardware/amba_serial.h b/include/asm-arm/hardware/amba_serial.h new file mode 100644 index 000000000000..71770aa6389f --- /dev/null +++ b/include/asm-arm/hardware/amba_serial.h | |||
@@ -0,0 +1,156 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/hardware/serial_amba.h | ||
3 | * | ||
4 | * Internal header file for AMBA serial ports | ||
5 | * | ||
6 | * Copyright (C) ARM Limited | ||
7 | * Copyright (C) 2000 Deep Blue Solutions Ltd. | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or modify | ||
10 | * it under the terms of the GNU General Public License as published by | ||
11 | * the Free Software Foundation; either version 2 of the License, or | ||
12 | * (at your option) any later version. | ||
13 | * | ||
14 | * This program is distributed in the hope that it will be useful, | ||
15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
17 | * GNU General Public License for more details. | ||
18 | * | ||
19 | * You should have received a copy of the GNU General Public License | ||
20 | * along with this program; if not, write to the Free Software | ||
21 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
22 | */ | ||
23 | #ifndef ASM_ARM_HARDWARE_SERIAL_AMBA_H | ||
24 | #define ASM_ARM_HARDWARE_SERIAL_AMBA_H | ||
25 | |||
26 | /* ------------------------------------------------------------------------------- | ||
27 | * From AMBA UART (PL010) Block Specification | ||
28 | * ------------------------------------------------------------------------------- | ||
29 | * UART Register Offsets. | ||
30 | */ | ||
31 | #define UART01x_DR 0x00 /* Data read or written from the interface. */ | ||
32 | #define UART01x_RSR 0x04 /* Receive status register (Read). */ | ||
33 | #define UART01x_ECR 0x04 /* Error clear register (Write). */ | ||
34 | #define UART010_LCRH 0x08 /* Line control register, high byte. */ | ||
35 | #define UART010_LCRM 0x0C /* Line control register, middle byte. */ | ||
36 | #define UART010_LCRL 0x10 /* Line control register, low byte. */ | ||
37 | #define UART010_CR 0x14 /* Control register. */ | ||
38 | #define UART01x_FR 0x18 /* Flag register (Read only). */ | ||
39 | #define UART010_IIR 0x1C /* Interrupt indentification register (Read). */ | ||
40 | #define UART010_ICR 0x1C /* Interrupt clear register (Write). */ | ||
41 | #define UART01x_ILPR 0x20 /* IrDA low power counter register. */ | ||
42 | #define UART011_IBRD 0x24 /* Integer baud rate divisor register. */ | ||
43 | #define UART011_FBRD 0x28 /* Fractional baud rate divisor register. */ | ||
44 | #define UART011_LCRH 0x2c /* Line control register. */ | ||
45 | #define UART011_CR 0x30 /* Control register. */ | ||
46 | #define UART011_IFLS 0x34 /* Interrupt fifo level select. */ | ||
47 | #define UART011_IMSC 0x38 /* Interrupt mask. */ | ||
48 | #define UART011_RIS 0x3c /* Raw interrupt status. */ | ||
49 | #define UART011_MIS 0x40 /* Masked interrupt status. */ | ||
50 | #define UART011_ICR 0x44 /* Interrupt clear register. */ | ||
51 | #define UART011_DMACR 0x48 /* DMA control register. */ | ||
52 | |||
53 | #define UART01x_RSR_OE 0x08 | ||
54 | #define UART01x_RSR_BE 0x04 | ||
55 | #define UART01x_RSR_PE 0x02 | ||
56 | #define UART01x_RSR_FE 0x01 | ||
57 | |||
58 | #define UART011_FR_RI 0x100 | ||
59 | #define UART011_FR_TXFE 0x080 | ||
60 | #define UART011_FR_RXFF 0x040 | ||
61 | #define UART01x_FR_TXFF 0x020 | ||
62 | #define UART01x_FR_RXFE 0x010 | ||
63 | #define UART01x_FR_BUSY 0x008 | ||
64 | #define UART01x_FR_DCD 0x004 | ||
65 | #define UART01x_FR_DSR 0x002 | ||
66 | #define UART01x_FR_CTS 0x001 | ||
67 | #define UART01x_FR_TMSK (UART01x_FR_TXFF + UART01x_FR_BUSY) | ||
68 | |||
69 | #define UART011_CR_CTSEN 0x8000 /* CTS hardware flow control */ | ||
70 | #define UART011_CR_RTSEN 0x4000 /* RTS hardware flow control */ | ||
71 | #define UART011_CR_OUT2 0x2000 /* OUT2 */ | ||
72 | #define UART011_CR_OUT1 0x1000 /* OUT1 */ | ||
73 | #define UART011_CR_RTS 0x0800 /* RTS */ | ||
74 | #define UART011_CR_DTR 0x0400 /* DTR */ | ||
75 | #define UART011_CR_RXE 0x0200 /* receive enable */ | ||
76 | #define UART011_CR_TXE 0x0100 /* transmit enable */ | ||
77 | #define UART011_CR_LBE 0x0080 /* loopback enable */ | ||
78 | #define UART010_CR_RTIE 0x0040 | ||
79 | #define UART010_CR_TIE 0x0020 | ||
80 | #define UART010_CR_RIE 0x0010 | ||
81 | #define UART010_CR_MSIE 0x0008 | ||
82 | #define UART01x_CR_IIRLP 0x0004 /* SIR low power mode */ | ||
83 | #define UART01x_CR_SIREN 0x0002 /* SIR enable */ | ||
84 | #define UART01x_CR_UARTEN 0x0001 /* UART enable */ | ||
85 | |||
86 | #define UART011_LCRH_SPS 0x80 | ||
87 | #define UART01x_LCRH_WLEN_8 0x60 | ||
88 | #define UART01x_LCRH_WLEN_7 0x40 | ||
89 | #define UART01x_LCRH_WLEN_6 0x20 | ||
90 | #define UART01x_LCRH_WLEN_5 0x00 | ||
91 | #define UART01x_LCRH_FEN 0x10 | ||
92 | #define UART01x_LCRH_STP2 0x08 | ||
93 | #define UART01x_LCRH_EPS 0x04 | ||
94 | #define UART01x_LCRH_PEN 0x02 | ||
95 | #define UART01x_LCRH_BRK 0x01 | ||
96 | |||
97 | #define UART010_IIR_RTIS 0x08 | ||
98 | #define UART010_IIR_TIS 0x04 | ||
99 | #define UART010_IIR_RIS 0x02 | ||
100 | #define UART010_IIR_MIS 0x01 | ||
101 | |||
102 | #define UART011_IFLS_RX1_8 (0 << 3) | ||
103 | #define UART011_IFLS_RX2_8 (1 << 3) | ||
104 | #define UART011_IFLS_RX4_8 (2 << 3) | ||
105 | #define UART011_IFLS_RX6_8 (3 << 3) | ||
106 | #define UART011_IFLS_RX7_8 (4 << 3) | ||
107 | #define UART011_IFLS_TX1_8 (0 << 0) | ||
108 | #define UART011_IFLS_TX2_8 (1 << 0) | ||
109 | #define UART011_IFLS_TX4_8 (2 << 0) | ||
110 | #define UART011_IFLS_TX6_8 (3 << 0) | ||
111 | #define UART011_IFLS_TX7_8 (4 << 0) | ||
112 | |||
113 | #define UART011_OEIM (1 << 10) /* overrun error interrupt mask */ | ||
114 | #define UART011_BEIM (1 << 9) /* break error interrupt mask */ | ||
115 | #define UART011_PEIM (1 << 8) /* parity error interrupt mask */ | ||
116 | #define UART011_FEIM (1 << 7) /* framing error interrupt mask */ | ||
117 | #define UART011_RTIM (1 << 6) /* receive timeout interrupt mask */ | ||
118 | #define UART011_TXIM (1 << 5) /* transmit interrupt mask */ | ||
119 | #define UART011_RXIM (1 << 4) /* receive interrupt mask */ | ||
120 | #define UART011_DSRMIM (1 << 3) /* DSR interrupt mask */ | ||
121 | #define UART011_DCDMIM (1 << 2) /* DCD interrupt mask */ | ||
122 | #define UART011_CTSMIM (1 << 1) /* CTS interrupt mask */ | ||
123 | #define UART011_RIMIM (1 << 0) /* RI interrupt mask */ | ||
124 | |||
125 | #define UART011_OEIS (1 << 10) /* overrun error interrupt status */ | ||
126 | #define UART011_BEIS (1 << 9) /* break error interrupt status */ | ||
127 | #define UART011_PEIS (1 << 8) /* parity error interrupt status */ | ||
128 | #define UART011_FEIS (1 << 7) /* framing error interrupt status */ | ||
129 | #define UART011_RTIS (1 << 6) /* receive timeout interrupt status */ | ||
130 | #define UART011_TXIS (1 << 5) /* transmit interrupt status */ | ||
131 | #define UART011_RXIS (1 << 4) /* receive interrupt status */ | ||
132 | #define UART011_DSRMIS (1 << 3) /* DSR interrupt status */ | ||
133 | #define UART011_DCDMIS (1 << 2) /* DCD interrupt status */ | ||
134 | #define UART011_CTSMIS (1 << 1) /* CTS interrupt status */ | ||
135 | #define UART011_RIMIS (1 << 0) /* RI interrupt status */ | ||
136 | |||
137 | #define UART011_OEIC (1 << 10) /* overrun error interrupt clear */ | ||
138 | #define UART011_BEIC (1 << 9) /* break error interrupt clear */ | ||
139 | #define UART011_PEIC (1 << 8) /* parity error interrupt clear */ | ||
140 | #define UART011_FEIC (1 << 7) /* framing error interrupt clear */ | ||
141 | #define UART011_RTIC (1 << 6) /* receive timeout interrupt clear */ | ||
142 | #define UART011_TXIC (1 << 5) /* transmit interrupt clear */ | ||
143 | #define UART011_RXIC (1 << 4) /* receive interrupt clear */ | ||
144 | #define UART011_DSRMIC (1 << 3) /* DSR interrupt clear */ | ||
145 | #define UART011_DCDMIC (1 << 2) /* DCD interrupt clear */ | ||
146 | #define UART011_CTSMIC (1 << 1) /* CTS interrupt clear */ | ||
147 | #define UART011_RIMIC (1 << 0) /* RI interrupt clear */ | ||
148 | |||
149 | #define UART011_DMAONERR (1 << 2) /* disable dma on error */ | ||
150 | #define UART011_TXDMAE (1 << 1) /* enable transmit dma */ | ||
151 | #define UART011_RXDMAE (1 << 0) /* enable receive dma */ | ||
152 | |||
153 | #define UART01x_RSR_ANY (UART01x_RSR_OE|UART01x_RSR_BE|UART01x_RSR_PE|UART01x_RSR_FE) | ||
154 | #define UART01x_FR_MODEM_ANY (UART01x_FR_DCD|UART01x_FR_DSR|UART01x_FR_CTS) | ||
155 | |||
156 | #endif | ||
diff --git a/include/asm-arm/hardware/clock.h b/include/asm-arm/hardware/clock.h new file mode 100644 index 000000000000..4983449ff2c7 --- /dev/null +++ b/include/asm-arm/hardware/clock.h | |||
@@ -0,0 +1,121 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/hardware/clock.h | ||
3 | * | ||
4 | * Copyright (C) 2004 ARM Limited. | ||
5 | * Written by Deep Blue Solutions Limited. | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License version 2 as | ||
9 | * published by the Free Software Foundation. | ||
10 | */ | ||
11 | #ifndef ASMARM_CLOCK_H | ||
12 | #define ASMARM_CLOCK_H | ||
13 | |||
14 | struct device; | ||
15 | |||
16 | /* | ||
17 | * The base API. | ||
18 | */ | ||
19 | |||
20 | |||
21 | /* | ||
22 | * struct clk - an machine class defined object / cookie. | ||
23 | */ | ||
24 | struct clk; | ||
25 | |||
26 | /** | ||
27 | * clk_get - lookup and obtain a reference to a clock producer. | ||
28 | * @dev: device for clock "consumer" | ||
29 | * @id: device ID | ||
30 | * | ||
31 | * Returns a struct clk corresponding to the clock producer, or | ||
32 | * valid IS_ERR() condition containing errno. | ||
33 | */ | ||
34 | struct clk *clk_get(struct device *dev, const char *id); | ||
35 | |||
36 | /** | ||
37 | * clk_enable - inform the system when the clock source should be running. | ||
38 | * @clk: clock source | ||
39 | * | ||
40 | * If the clock can not be enabled/disabled, this should return success. | ||
41 | * | ||
42 | * Returns success (0) or negative errno. | ||
43 | */ | ||
44 | int clk_enable(struct clk *clk); | ||
45 | |||
46 | /** | ||
47 | * clk_disable - inform the system when the clock source is no longer required. | ||
48 | * @clk: clock source | ||
49 | */ | ||
50 | void clk_disable(struct clk *clk); | ||
51 | |||
52 | /** | ||
53 | * clk_use - increment the use count | ||
54 | * @clk: clock source | ||
55 | * | ||
56 | * Returns success (0) or negative errno. | ||
57 | */ | ||
58 | int clk_use(struct clk *clk); | ||
59 | |||
60 | /** | ||
61 | * clk_unuse - decrement the use count | ||
62 | * @clk: clock source | ||
63 | */ | ||
64 | void clk_unuse(struct clk *clk); | ||
65 | |||
66 | /** | ||
67 | * clk_get_rate - obtain the current clock rate (in Hz) for a clock source. | ||
68 | * This is only valid once the clock source has been enabled. | ||
69 | * @clk: clock source | ||
70 | */ | ||
71 | unsigned long clk_get_rate(struct clk *clk); | ||
72 | |||
73 | /** | ||
74 | * clk_put - "free" the clock source | ||
75 | * @clk: clock source | ||
76 | */ | ||
77 | void clk_put(struct clk *clk); | ||
78 | |||
79 | |||
80 | /* | ||
81 | * The remaining APIs are optional for machine class support. | ||
82 | */ | ||
83 | |||
84 | |||
85 | /** | ||
86 | * clk_round_rate - adjust a rate to the exact rate a clock can provide | ||
87 | * @clk: clock source | ||
88 | * @rate: desired clock rate in Hz | ||
89 | * | ||
90 | * Returns rounded clock rate in Hz, or negative errno. | ||
91 | */ | ||
92 | long clk_round_rate(struct clk *clk, unsigned long rate); | ||
93 | |||
94 | /** | ||
95 | * clk_set_rate - set the clock rate for a clock source | ||
96 | * @clk: clock source | ||
97 | * @rate: desired clock rate in Hz | ||
98 | * | ||
99 | * Returns success (0) or negative errno. | ||
100 | */ | ||
101 | int clk_set_rate(struct clk *clk, unsigned long rate); | ||
102 | |||
103 | /** | ||
104 | * clk_set_parent - set the parent clock source for this clock | ||
105 | * @clk: clock source | ||
106 | * @parent: parent clock source | ||
107 | * | ||
108 | * Returns success (0) or negative errno. | ||
109 | */ | ||
110 | int clk_set_parent(struct clk *clk, struct clk *parent); | ||
111 | |||
112 | /** | ||
113 | * clk_get_parent - get the parent clock source for this clock | ||
114 | * @clk: clock source | ||
115 | * | ||
116 | * Returns struct clk corresponding to parent clock source, or | ||
117 | * valid IS_ERR() condition containing errno. | ||
118 | */ | ||
119 | struct clk *clk_get_parent(struct clk *clk); | ||
120 | |||
121 | #endif | ||
diff --git a/include/asm-arm/hardware/clps7111.h b/include/asm-arm/hardware/clps7111.h new file mode 100644 index 000000000000..8d3228dc1778 --- /dev/null +++ b/include/asm-arm/hardware/clps7111.h | |||
@@ -0,0 +1,184 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/hardware/clps7111.h | ||
3 | * | ||
4 | * This file contains the hardware definitions of the CLPS7111 internal | ||
5 | * registers. | ||
6 | * | ||
7 | * Copyright (C) 2000 Deep Blue Solutions Ltd. | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or modify | ||
10 | * it under the terms of the GNU General Public License as published by | ||
11 | * the Free Software Foundation; either version 2 of the License, or | ||
12 | * (at your option) any later version. | ||
13 | * | ||
14 | * This program is distributed in the hope that it will be useful, | ||
15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
17 | * GNU General Public License for more details. | ||
18 | * | ||
19 | * You should have received a copy of the GNU General Public License | ||
20 | * along with this program; if not, write to the Free Software | ||
21 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
22 | */ | ||
23 | #ifndef __ASM_HARDWARE_CLPS7111_H | ||
24 | #define __ASM_HARDWARE_CLPS7111_H | ||
25 | |||
26 | #define CLPS7111_PHYS_BASE (0x80000000) | ||
27 | |||
28 | #ifndef __ASSEMBLY__ | ||
29 | #define clps_readb(off) __raw_readb(CLPS7111_BASE + (off)) | ||
30 | #define clps_readw(off) __raw_readw(CLPS7111_BASE + (off)) | ||
31 | #define clps_readl(off) __raw_readl(CLPS7111_BASE + (off)) | ||
32 | #define clps_writeb(val,off) __raw_writeb(val, CLPS7111_BASE + (off)) | ||
33 | #define clps_writew(val,off) __raw_writew(val, CLPS7111_BASE + (off)) | ||
34 | #define clps_writel(val,off) __raw_writel(val, CLPS7111_BASE + (off)) | ||
35 | #endif | ||
36 | |||
37 | #define PADR (0x0000) | ||
38 | #define PBDR (0x0001) | ||
39 | #define PDDR (0x0003) | ||
40 | #define PADDR (0x0040) | ||
41 | #define PBDDR (0x0041) | ||
42 | #define PDDDR (0x0043) | ||
43 | #define PEDR (0x0080) | ||
44 | #define PEDDR (0x00c0) | ||
45 | #define SYSCON1 (0x0100) | ||
46 | #define SYSFLG1 (0x0140) | ||
47 | #define MEMCFG1 (0x0180) | ||
48 | #define MEMCFG2 (0x01c0) | ||
49 | #define DRFPR (0x0200) | ||
50 | #define INTSR1 (0x0240) | ||
51 | #define INTMR1 (0x0280) | ||
52 | #define LCDCON (0x02c0) | ||
53 | #define TC1D (0x0300) | ||
54 | #define TC2D (0x0340) | ||
55 | #define RTCDR (0x0380) | ||
56 | #define RTCMR (0x03c0) | ||
57 | #define PMPCON (0x0400) | ||
58 | #define CODR (0x0440) | ||
59 | #define UARTDR1 (0x0480) | ||
60 | #define UBRLCR1 (0x04c0) | ||
61 | #define SYNCIO (0x0500) | ||
62 | #define PALLSW (0x0540) | ||
63 | #define PALMSW (0x0580) | ||
64 | #define STFCLR (0x05c0) | ||
65 | #define BLEOI (0x0600) | ||
66 | #define MCEOI (0x0640) | ||
67 | #define TEOI (0x0680) | ||
68 | #define TC1EOI (0x06c0) | ||
69 | #define TC2EOI (0x0700) | ||
70 | #define RTCEOI (0x0740) | ||
71 | #define UMSEOI (0x0780) | ||
72 | #define COEOI (0x07c0) | ||
73 | #define HALT (0x0800) | ||
74 | #define STDBY (0x0840) | ||
75 | |||
76 | #define FBADDR (0x1000) | ||
77 | #define SYSCON2 (0x1100) | ||
78 | #define SYSFLG2 (0x1140) | ||
79 | #define INTSR2 (0x1240) | ||
80 | #define INTMR2 (0x1280) | ||
81 | #define UARTDR2 (0x1480) | ||
82 | #define UBRLCR2 (0x14c0) | ||
83 | #define SS2DR (0x1500) | ||
84 | #define SRXEOF (0x1600) | ||
85 | #define SS2POP (0x16c0) | ||
86 | #define KBDEOI (0x1700) | ||
87 | |||
88 | /* common bits: SYSCON1 / SYSCON2 */ | ||
89 | #define SYSCON_UARTEN (1 << 8) | ||
90 | |||
91 | #define SYSCON1_KBDSCAN(x) ((x) & 15) | ||
92 | #define SYSCON1_KBDSCANMASK (15) | ||
93 | #define SYSCON1_TC1M (1 << 4) | ||
94 | #define SYSCON1_TC1S (1 << 5) | ||
95 | #define SYSCON1_TC2M (1 << 6) | ||
96 | #define SYSCON1_TC2S (1 << 7) | ||
97 | #define SYSCON1_UART1EN SYSCON_UARTEN | ||
98 | #define SYSCON1_BZTOG (1 << 9) | ||
99 | #define SYSCON1_BZMOD (1 << 10) | ||
100 | #define SYSCON1_DBGEN (1 << 11) | ||
101 | #define SYSCON1_LCDEN (1 << 12) | ||
102 | #define SYSCON1_CDENTX (1 << 13) | ||
103 | #define SYSCON1_CDENRX (1 << 14) | ||
104 | #define SYSCON1_SIREN (1 << 15) | ||
105 | #define SYSCON1_ADCKSEL(x) (((x) & 3) << 16) | ||
106 | #define SYSCON1_ADCKSEL_MASK (3 << 16) | ||
107 | #define SYSCON1_EXCKEN (1 << 18) | ||
108 | #define SYSCON1_WAKEDIS (1 << 19) | ||
109 | #define SYSCON1_IRTXM (1 << 20) | ||
110 | |||
111 | /* common bits: SYSFLG1 / SYSFLG2 */ | ||
112 | #define SYSFLG_UBUSY (1 << 11) | ||
113 | #define SYSFLG_URXFE (1 << 22) | ||
114 | #define SYSFLG_UTXFF (1 << 23) | ||
115 | |||
116 | #define SYSFLG1_MCDR (1 << 0) | ||
117 | #define SYSFLG1_DCDET (1 << 1) | ||
118 | #define SYSFLG1_WUDR (1 << 2) | ||
119 | #define SYSFLG1_WUON (1 << 3) | ||
120 | #define SYSFLG1_CTS (1 << 8) | ||
121 | #define SYSFLG1_DSR (1 << 9) | ||
122 | #define SYSFLG1_DCD (1 << 10) | ||
123 | #define SYSFLG1_UBUSY SYSFLG_UBUSY | ||
124 | #define SYSFLG1_NBFLG (1 << 12) | ||
125 | #define SYSFLG1_RSTFLG (1 << 13) | ||
126 | #define SYSFLG1_PFFLG (1 << 14) | ||
127 | #define SYSFLG1_CLDFLG (1 << 15) | ||
128 | #define SYSFLG1_URXFE SYSFLG_URXFE | ||
129 | #define SYSFLG1_UTXFF SYSFLG_UTXFF | ||
130 | #define SYSFLG1_CRXFE (1 << 24) | ||
131 | #define SYSFLG1_CTXFF (1 << 25) | ||
132 | #define SYSFLG1_SSIBUSY (1 << 26) | ||
133 | #define SYSFLG1_ID (1 << 29) | ||
134 | |||
135 | #define SYSFLG2_SSRXOF (1 << 0) | ||
136 | #define SYSFLG2_RESVAL (1 << 1) | ||
137 | #define SYSFLG2_RESFRM (1 << 2) | ||
138 | #define SYSFLG2_SS2RXFE (1 << 3) | ||
139 | #define SYSFLG2_SS2TXFF (1 << 4) | ||
140 | #define SYSFLG2_SS2TXUF (1 << 5) | ||
141 | #define SYSFLG2_CKMODE (1 << 6) | ||
142 | #define SYSFLG2_UBUSY SYSFLG_UBUSY | ||
143 | #define SYSFLG2_URXFE SYSFLG_URXFE | ||
144 | #define SYSFLG2_UTXFF SYSFLG_UTXFF | ||
145 | |||
146 | #define LCDCON_GSEN (1 << 30) | ||
147 | #define LCDCON_GSMD (1 << 31) | ||
148 | |||
149 | #define SYSCON2_SERSEL (1 << 0) | ||
150 | #define SYSCON2_KBD6 (1 << 1) | ||
151 | #define SYSCON2_DRAMZ (1 << 2) | ||
152 | #define SYSCON2_KBWEN (1 << 3) | ||
153 | #define SYSCON2_SS2TXEN (1 << 4) | ||
154 | #define SYSCON2_PCCARD1 (1 << 5) | ||
155 | #define SYSCON2_PCCARD2 (1 << 6) | ||
156 | #define SYSCON2_SS2RXEN (1 << 7) | ||
157 | #define SYSCON2_UART2EN SYSCON_UARTEN | ||
158 | #define SYSCON2_SS2MAEN (1 << 9) | ||
159 | #define SYSCON2_OSTB (1 << 12) | ||
160 | #define SYSCON2_CLKENSL (1 << 13) | ||
161 | #define SYSCON2_BUZFREQ (1 << 14) | ||
162 | |||
163 | /* common bits: UARTDR1 / UARTDR2 */ | ||
164 | #define UARTDR_FRMERR (1 << 8) | ||
165 | #define UARTDR_PARERR (1 << 9) | ||
166 | #define UARTDR_OVERR (1 << 10) | ||
167 | |||
168 | /* common bits: UBRLCR1 / UBRLCR2 */ | ||
169 | #define UBRLCR_BAUD_MASK ((1 << 12) - 1) | ||
170 | #define UBRLCR_BREAK (1 << 12) | ||
171 | #define UBRLCR_PRTEN (1 << 13) | ||
172 | #define UBRLCR_EVENPRT (1 << 14) | ||
173 | #define UBRLCR_XSTOP (1 << 15) | ||
174 | #define UBRLCR_FIFOEN (1 << 16) | ||
175 | #define UBRLCR_WRDLEN5 (0 << 17) | ||
176 | #define UBRLCR_WRDLEN6 (1 << 17) | ||
177 | #define UBRLCR_WRDLEN7 (2 << 17) | ||
178 | #define UBRLCR_WRDLEN8 (3 << 17) | ||
179 | #define UBRLCR_WRDLEN_MASK (3 << 17) | ||
180 | |||
181 | #define SYNCIO_SMCKEN (1 << 13) | ||
182 | #define SYNCIO_TXFRMEN (1 << 14) | ||
183 | |||
184 | #endif /* __ASM_HARDWARE_CLPS7111_H */ | ||
diff --git a/include/asm-arm/hardware/cs89712.h b/include/asm-arm/hardware/cs89712.h new file mode 100644 index 000000000000..ad99a3e1b802 --- /dev/null +++ b/include/asm-arm/hardware/cs89712.h | |||
@@ -0,0 +1,49 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/hardware/cs89712.h | ||
3 | * | ||
4 | * This file contains the hardware definitions of the CS89712 | ||
5 | * additional internal registers. | ||
6 | * | ||
7 | * Copyright (C) 2001 Thomas Gleixner autronix automation <gleixner@autronix.de> | ||
8 | * | ||
9 | * | ||
10 | * This program is free software; you can redistribute it and/or modify | ||
11 | * it under the terms of the GNU General Public License as published by | ||
12 | * the Free Software Foundation; either version 2 of the License, or | ||
13 | * (at your option) any later version. | ||
14 | * | ||
15 | * This program is distributed in the hope that it will be useful, | ||
16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
18 | * GNU General Public License for more details. | ||
19 | * | ||
20 | * You should have received a copy of the GNU General Public License | ||
21 | * along with this program; if not, write to the Free Software | ||
22 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
23 | */ | ||
24 | #ifndef __ASM_HARDWARE_CS89712_H | ||
25 | #define __ASM_HARDWARE_CS89712_H | ||
26 | |||
27 | /* | ||
28 | * CS89712 additional registers | ||
29 | */ | ||
30 | |||
31 | #define PCDR 0x0002 /* Port C Data register ---------------------------- */ | ||
32 | #define PCDDR 0x0042 /* Port C Data Direction register ------------------ */ | ||
33 | #define SDCONF 0x2300 /* SDRAM Configuration register ---------------------*/ | ||
34 | #define SDRFPR 0x2340 /* SDRAM Refresh period register --------------------*/ | ||
35 | |||
36 | #define SDCONF_ACTIVE (1 << 10) | ||
37 | #define SDCONF_CLKCTL (1 << 9) | ||
38 | #define SDCONF_WIDTH_4 (0 << 7) | ||
39 | #define SDCONF_WIDTH_8 (1 << 7) | ||
40 | #define SDCONF_WIDTH_16 (2 << 7) | ||
41 | #define SDCONF_WIDTH_32 (3 << 7) | ||
42 | #define SDCONF_SIZE_16 (0 << 5) | ||
43 | #define SDCONF_SIZE_64 (1 << 5) | ||
44 | #define SDCONF_SIZE_128 (2 << 5) | ||
45 | #define SDCONF_SIZE_256 (3 << 5) | ||
46 | #define SDCONF_CASLAT_2 (2) | ||
47 | #define SDCONF_CASLAT_3 (3) | ||
48 | |||
49 | #endif /* __ASM_HARDWARE_CS89712_H */ | ||
diff --git a/include/asm-arm/hardware/dec21285.h b/include/asm-arm/hardware/dec21285.h new file mode 100644 index 000000000000..9049f0ddaecf --- /dev/null +++ b/include/asm-arm/hardware/dec21285.h | |||
@@ -0,0 +1,148 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/hardware/dec21285.h | ||
3 | * | ||
4 | * Copyright (C) 1998 Russell King | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | * DC21285 registers | ||
11 | */ | ||
12 | #define DC21285_PCI_IACK 0x79000000 | ||
13 | #define DC21285_ARMCSR_BASE 0x42000000 | ||
14 | #define DC21285_PCI_TYPE_0_CONFIG 0x7b000000 | ||
15 | #define DC21285_PCI_TYPE_1_CONFIG 0x7a000000 | ||
16 | #define DC21285_OUTBOUND_WRITE_FLUSH 0x78000000 | ||
17 | #define DC21285_FLASH 0x41000000 | ||
18 | #define DC21285_PCI_IO 0x7c000000 | ||
19 | #define DC21285_PCI_MEM 0x80000000 | ||
20 | |||
21 | #include <linux/config.h> | ||
22 | #ifndef __ASSEMBLY__ | ||
23 | #include <asm/arch/hardware.h> | ||
24 | #define DC21285_IO(x) ((volatile unsigned long *)(ARMCSR_BASE+(x))) | ||
25 | #else | ||
26 | #define DC21285_IO(x) (x) | ||
27 | #endif | ||
28 | |||
29 | #define CSR_PCICMD DC21285_IO(0x0004) | ||
30 | #define CSR_CLASSREV DC21285_IO(0x0008) | ||
31 | #define CSR_PCICACHELINESIZE DC21285_IO(0x000c) | ||
32 | #define CSR_PCICSRBASE DC21285_IO(0x0010) | ||
33 | #define CSR_PCICSRIOBASE DC21285_IO(0x0014) | ||
34 | #define CSR_PCISDRAMBASE DC21285_IO(0x0018) | ||
35 | #define CSR_PCIROMBASE DC21285_IO(0x0030) | ||
36 | #define CSR_MBOX0 DC21285_IO(0x0050) | ||
37 | #define CSR_MBOX1 DC21285_IO(0x0054) | ||
38 | #define CSR_MBOX2 DC21285_IO(0x0058) | ||
39 | #define CSR_MBOX3 DC21285_IO(0x005c) | ||
40 | #define CSR_DOORBELL DC21285_IO(0x0060) | ||
41 | #define CSR_DOORBELL_SETUP DC21285_IO(0x0064) | ||
42 | #define CSR_ROMWRITEREG DC21285_IO(0x0068) | ||
43 | #define CSR_CSRBASEMASK DC21285_IO(0x00f8) | ||
44 | #define CSR_CSRBASEOFFSET DC21285_IO(0x00fc) | ||
45 | #define CSR_SDRAMBASEMASK DC21285_IO(0x0100) | ||
46 | #define CSR_SDRAMBASEOFFSET DC21285_IO(0x0104) | ||
47 | #define CSR_ROMBASEMASK DC21285_IO(0x0108) | ||
48 | #define CSR_SDRAMTIMING DC21285_IO(0x010c) | ||
49 | #define CSR_SDRAMADDRSIZE0 DC21285_IO(0x0110) | ||
50 | #define CSR_SDRAMADDRSIZE1 DC21285_IO(0x0114) | ||
51 | #define CSR_SDRAMADDRSIZE2 DC21285_IO(0x0118) | ||
52 | #define CSR_SDRAMADDRSIZE3 DC21285_IO(0x011c) | ||
53 | #define CSR_I2O_INFREEHEAD DC21285_IO(0x0120) | ||
54 | #define CSR_I2O_INPOSTTAIL DC21285_IO(0x0124) | ||
55 | #define CSR_I2O_OUTPOSTHEAD DC21285_IO(0x0128) | ||
56 | #define CSR_I2O_OUTFREETAIL DC21285_IO(0x012c) | ||
57 | #define CSR_I2O_INFREECOUNT DC21285_IO(0x0130) | ||
58 | #define CSR_I2O_OUTPOSTCOUNT DC21285_IO(0x0134) | ||
59 | #define CSR_I2O_INPOSTCOUNT DC21285_IO(0x0138) | ||
60 | #define CSR_SA110_CNTL DC21285_IO(0x013c) | ||
61 | #define SA110_CNTL_INITCMPLETE (1 << 0) | ||
62 | #define SA110_CNTL_ASSERTSERR (1 << 1) | ||
63 | #define SA110_CNTL_RXSERR (1 << 3) | ||
64 | #define SA110_CNTL_SA110DRAMPARITY (1 << 4) | ||
65 | #define SA110_CNTL_PCISDRAMPARITY (1 << 5) | ||
66 | #define SA110_CNTL_DMASDRAMPARITY (1 << 6) | ||
67 | #define SA110_CNTL_DISCARDTIMER (1 << 8) | ||
68 | #define SA110_CNTL_PCINRESET (1 << 9) | ||
69 | #define SA110_CNTL_I2O_256 (0 << 10) | ||
70 | #define SA110_CNTL_I20_512 (1 << 10) | ||
71 | #define SA110_CNTL_I2O_1024 (2 << 10) | ||
72 | #define SA110_CNTL_I2O_2048 (3 << 10) | ||
73 | #define SA110_CNTL_I2O_4096 (4 << 10) | ||
74 | #define SA110_CNTL_I2O_8192 (5 << 10) | ||
75 | #define SA110_CNTL_I2O_16384 (6 << 10) | ||
76 | #define SA110_CNTL_I2O_32768 (7 << 10) | ||
77 | #define SA110_CNTL_WATCHDOG (1 << 13) | ||
78 | #define SA110_CNTL_ROMWIDTH_UNDEF (0 << 14) | ||
79 | #define SA110_CNTL_ROMWIDTH_16 (1 << 14) | ||
80 | #define SA110_CNTL_ROMWIDTH_32 (2 << 14) | ||
81 | #define SA110_CNTL_ROMWIDTH_8 (3 << 14) | ||
82 | #define SA110_CNTL_ROMACCESSTIME(x) ((x)<<16) | ||
83 | #define SA110_CNTL_ROMBURSTTIME(x) ((x)<<20) | ||
84 | #define SA110_CNTL_ROMTRISTATETIME(x) ((x)<<24) | ||
85 | #define SA110_CNTL_XCSDIR(x) ((x)<<28) | ||
86 | #define SA110_CNTL_PCICFN (1 << 31) | ||
87 | |||
88 | /* | ||
89 | * footbridge_cfn_mode() is used when we want | ||
90 | * to check whether we are the central function | ||
91 | */ | ||
92 | #define __footbridge_cfn_mode() (*CSR_SA110_CNTL & SA110_CNTL_PCICFN) | ||
93 | #if defined(CONFIG_FOOTBRIDGE_HOST) && defined(CONFIG_FOOTBRIDGE_ADDIN) | ||
94 | #define footbridge_cfn_mode() __footbridge_cfn_mode() | ||
95 | #elif defined(CONFIG_FOOTBRIDGE_HOST) | ||
96 | #define footbridge_cfn_mode() (1) | ||
97 | #else | ||
98 | #define footbridge_cfn_mode() (0) | ||
99 | #endif | ||
100 | |||
101 | #define CSR_PCIADDR_EXTN DC21285_IO(0x0140) | ||
102 | #define CSR_PREFETCHMEMRANGE DC21285_IO(0x0144) | ||
103 | #define CSR_XBUS_CYCLE DC21285_IO(0x0148) | ||
104 | #define CSR_XBUS_IOSTROBE DC21285_IO(0x014c) | ||
105 | #define CSR_DOORBELL_PCI DC21285_IO(0x0150) | ||
106 | #define CSR_DOORBELL_SA110 DC21285_IO(0x0154) | ||
107 | #define CSR_UARTDR DC21285_IO(0x0160) | ||
108 | #define CSR_RXSTAT DC21285_IO(0x0164) | ||
109 | #define CSR_H_UBRLCR DC21285_IO(0x0168) | ||
110 | #define CSR_M_UBRLCR DC21285_IO(0x016c) | ||
111 | #define CSR_L_UBRLCR DC21285_IO(0x0170) | ||
112 | #define CSR_UARTCON DC21285_IO(0x0174) | ||
113 | #define CSR_UARTFLG DC21285_IO(0x0178) | ||
114 | #define CSR_IRQ_STATUS DC21285_IO(0x0180) | ||
115 | #define CSR_IRQ_RAWSTATUS DC21285_IO(0x0184) | ||
116 | #define CSR_IRQ_ENABLE DC21285_IO(0x0188) | ||
117 | #define CSR_IRQ_DISABLE DC21285_IO(0x018c) | ||
118 | #define CSR_IRQ_SOFT DC21285_IO(0x0190) | ||
119 | #define CSR_FIQ_STATUS DC21285_IO(0x0280) | ||
120 | #define CSR_FIQ_RAWSTATUS DC21285_IO(0x0284) | ||
121 | #define CSR_FIQ_ENABLE DC21285_IO(0x0288) | ||
122 | #define CSR_FIQ_DISABLE DC21285_IO(0x028c) | ||
123 | #define CSR_FIQ_SOFT DC21285_IO(0x0290) | ||
124 | #define CSR_TIMER1_LOAD DC21285_IO(0x0300) | ||
125 | #define CSR_TIMER1_VALUE DC21285_IO(0x0304) | ||
126 | #define CSR_TIMER1_CNTL DC21285_IO(0x0308) | ||
127 | #define CSR_TIMER1_CLR DC21285_IO(0x030c) | ||
128 | #define CSR_TIMER2_LOAD DC21285_IO(0x0320) | ||
129 | #define CSR_TIMER2_VALUE DC21285_IO(0x0324) | ||
130 | #define CSR_TIMER2_CNTL DC21285_IO(0x0328) | ||
131 | #define CSR_TIMER2_CLR DC21285_IO(0x032c) | ||
132 | #define CSR_TIMER3_LOAD DC21285_IO(0x0340) | ||
133 | #define CSR_TIMER3_VALUE DC21285_IO(0x0344) | ||
134 | #define CSR_TIMER3_CNTL DC21285_IO(0x0348) | ||
135 | #define CSR_TIMER3_CLR DC21285_IO(0x034c) | ||
136 | #define CSR_TIMER4_LOAD DC21285_IO(0x0360) | ||
137 | #define CSR_TIMER4_VALUE DC21285_IO(0x0364) | ||
138 | #define CSR_TIMER4_CNTL DC21285_IO(0x0368) | ||
139 | #define CSR_TIMER4_CLR DC21285_IO(0x036c) | ||
140 | |||
141 | #define TIMER_CNTL_ENABLE (1 << 7) | ||
142 | #define TIMER_CNTL_AUTORELOAD (1 << 6) | ||
143 | #define TIMER_CNTL_DIV1 (0) | ||
144 | #define TIMER_CNTL_DIV16 (1 << 2) | ||
145 | #define TIMER_CNTL_DIV256 (2 << 2) | ||
146 | #define TIMER_CNTL_CNTEXT (3 << 2) | ||
147 | |||
148 | |||
diff --git a/include/asm-arm/hardware/entry-macro-iomd.S b/include/asm-arm/hardware/entry-macro-iomd.S new file mode 100644 index 000000000000..30c7b92c2416 --- /dev/null +++ b/include/asm-arm/hardware/entry-macro-iomd.S | |||
@@ -0,0 +1,145 @@ | |||
1 | /* | ||
2 | * arch/arm/commond/entry-macro-iomd.S | ||
3 | * | ||
4 | * Low-level IRQ helper macros for IOC/IOMD based platforms | ||
5 | * | ||
6 | * This file is licensed under the terms of the GNU General Public | ||
7 | * License version 2. This program is licensed "as is" without any | ||
8 | * warranty of any kind, whether express or implied. | ||
9 | */ | ||
10 | |||
11 | /* IOC / IOMD based hardware */ | ||
12 | #include <asm/hardware/iomd.h> | ||
13 | |||
14 | .equ ioc_base_high, IOC_BASE & 0xff000000 | ||
15 | .equ ioc_base_low, IOC_BASE & 0x00ff0000 | ||
16 | .macro disable_fiq | ||
17 | mov r12, #ioc_base_high | ||
18 | .if ioc_base_low | ||
19 | orr r12, r12, #ioc_base_low | ||
20 | .endif | ||
21 | strb r12, [r12, #0x38] @ Disable FIQ register | ||
22 | .endm | ||
23 | |||
24 | .macro get_irqnr_and_base, irqnr, irqstat, base, tmp | ||
25 | mov r4, #ioc_base_high @ point at IOC | ||
26 | .if ioc_base_low | ||
27 | orr r4, r4, #ioc_base_low | ||
28 | .endif | ||
29 | ldrb \irqstat, [r4, #IOMD_IRQREQB] @ get high priority first | ||
30 | ldr \base, =irq_prio_h | ||
31 | teq \irqstat, #0 | ||
32 | #ifdef IOMD_BASE | ||
33 | ldreqb \irqstat, [r4, #IOMD_DMAREQ] @ get dma | ||
34 | addeq \base, \base, #256 @ irq_prio_h table size | ||
35 | teqeq \irqstat, #0 | ||
36 | bne 2406f | ||
37 | #endif | ||
38 | ldreqb \irqstat, [r4, #IOMD_IRQREQA] @ get low priority | ||
39 | addeq \base, \base, #256 @ irq_prio_d table size | ||
40 | teqeq \irqstat, #0 | ||
41 | #ifdef IOMD_IRQREQC | ||
42 | ldreqb \irqstat, [r4, #IOMD_IRQREQC] | ||
43 | addeq \base, \base, #256 @ irq_prio_l table size | ||
44 | teqeq \irqstat, #0 | ||
45 | #endif | ||
46 | #ifdef IOMD_IRQREQD | ||
47 | ldreqb \irqstat, [r4, #IOMD_IRQREQD] | ||
48 | addeq \base, \base, #256 @ irq_prio_lc table size | ||
49 | teqeq \irqstat, #0 | ||
50 | #endif | ||
51 | 2406: ldrneb \irqnr, [\base, \irqstat] @ get IRQ number | ||
52 | .endm | ||
53 | |||
54 | /* | ||
55 | * Interrupt table (incorporates priority). Please note that we | ||
56 | * rely on the order of these tables (see above code). | ||
57 | */ | ||
58 | .align 5 | ||
59 | irq_prio_h: .byte 0, 8, 9, 8,10,10,10,10,11,11,11,11,10,10,10,10 | ||
60 | .byte 12, 8, 9, 8,10,10,10,10,11,11,11,11,10,10,10,10 | ||
61 | .byte 13,13,13,13,10,10,10,10,11,11,11,11,10,10,10,10 | ||
62 | .byte 13,13,13,13,10,10,10,10,11,11,11,11,10,10,10,10 | ||
63 | .byte 14,14,14,14,10,10,10,10,11,11,11,11,10,10,10,10 | ||
64 | .byte 14,14,14,14,10,10,10,10,11,11,11,11,10,10,10,10 | ||
65 | .byte 13,13,13,13,10,10,10,10,11,11,11,11,10,10,10,10 | ||
66 | .byte 13,13,13,13,10,10,10,10,11,11,11,11,10,10,10,10 | ||
67 | .byte 15,15,15,15,10,10,10,10,11,11,11,11,10,10,10,10 | ||
68 | .byte 15,15,15,15,10,10,10,10,11,11,11,11,10,10,10,10 | ||
69 | .byte 13,13,13,13,10,10,10,10,11,11,11,11,10,10,10,10 | ||
70 | .byte 13,13,13,13,10,10,10,10,11,11,11,11,10,10,10,10 | ||
71 | .byte 15,15,15,15,10,10,10,10,11,11,11,11,10,10,10,10 | ||
72 | .byte 15,15,15,15,10,10,10,10,11,11,11,11,10,10,10,10 | ||
73 | .byte 13,13,13,13,10,10,10,10,11,11,11,11,10,10,10,10 | ||
74 | .byte 13,13,13,13,10,10,10,10,11,11,11,11,10,10,10,10 | ||
75 | #ifdef IOMD_BASE | ||
76 | irq_prio_d: .byte 0,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16 | ||
77 | .byte 20,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16 | ||
78 | .byte 21,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16 | ||
79 | .byte 21,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16 | ||
80 | .byte 22,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16 | ||
81 | .byte 22,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16 | ||
82 | .byte 21,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16 | ||
83 | .byte 21,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16 | ||
84 | .byte 23,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16 | ||
85 | .byte 23,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16 | ||
86 | .byte 21,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16 | ||
87 | .byte 21,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16 | ||
88 | .byte 22,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16 | ||
89 | .byte 22,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16 | ||
90 | .byte 21,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16 | ||
91 | .byte 21,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16 | ||
92 | #endif | ||
93 | irq_prio_l: .byte 0, 0, 1, 0, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3 | ||
94 | .byte 4, 0, 1, 0, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3 | ||
95 | .byte 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 | ||
96 | .byte 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 | ||
97 | .byte 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 3, 3, 3, 3 | ||
98 | .byte 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 3, 3, 3, 3 | ||
99 | .byte 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 | ||
100 | .byte 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 | ||
101 | .byte 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7 | ||
102 | .byte 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7 | ||
103 | .byte 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7 | ||
104 | .byte 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7 | ||
105 | .byte 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7 | ||
106 | .byte 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7 | ||
107 | .byte 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7 | ||
108 | .byte 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7 | ||
109 | #ifdef IOMD_IRQREQC | ||
110 | irq_prio_lc: .byte 24,24,25,24,26,26,26,26,27,27,27,27,27,27,27,27 | ||
111 | .byte 28,24,25,24,26,26,26,26,27,27,27,27,27,27,27,27 | ||
112 | .byte 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29 | ||
113 | .byte 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29 | ||
114 | .byte 30,30,30,30,30,30,30,30,27,27,27,27,27,27,27,27 | ||
115 | .byte 30,30,30,30,30,30,30,30,27,27,27,27,27,27,27,27 | ||
116 | .byte 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29 | ||
117 | .byte 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29 | ||
118 | .byte 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31 | ||
119 | .byte 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31 | ||
120 | .byte 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31 | ||
121 | .byte 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31 | ||
122 | .byte 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31 | ||
123 | .byte 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31 | ||
124 | .byte 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31 | ||
125 | .byte 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31 | ||
126 | #endif | ||
127 | #ifdef IOMD_IRQREQD | ||
128 | irq_prio_ld: .byte 40,40,41,40,42,42,42,42,43,43,43,43,43,43,43,43 | ||
129 | .byte 44,40,41,40,42,42,42,42,43,43,43,43,43,43,43,43 | ||
130 | .byte 45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45 | ||
131 | .byte 45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45 | ||
132 | .byte 46,46,46,46,46,46,46,46,43,43,43,43,43,43,43,43 | ||
133 | .byte 46,46,46,46,46,46,46,46,43,43,43,43,43,43,43,43 | ||
134 | .byte 45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45 | ||
135 | .byte 45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45 | ||
136 | .byte 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 | ||
137 | .byte 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 | ||
138 | .byte 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 | ||
139 | .byte 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 | ||
140 | .byte 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 | ||
141 | .byte 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 | ||
142 | .byte 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 | ||
143 | .byte 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 | ||
144 | #endif | ||
145 | |||
diff --git a/include/asm-arm/hardware/ep7211.h b/include/asm-arm/hardware/ep7211.h new file mode 100644 index 000000000000..017aa68f612d --- /dev/null +++ b/include/asm-arm/hardware/ep7211.h | |||
@@ -0,0 +1,40 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/hardware/ep7211.h | ||
3 | * | ||
4 | * This file contains the hardware definitions of the EP7211 internal | ||
5 | * registers. | ||
6 | * | ||
7 | * Copyright (C) 2001 Blue Mug, Inc. All Rights Reserved. | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or modify | ||
10 | * it under the terms of the GNU General Public License as published by | ||
11 | * the Free Software Foundation; either version 2 of the License, or | ||
12 | * (at your option) any later version. | ||
13 | * | ||
14 | * This program is distributed in the hope that it will be useful, | ||
15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
17 | * GNU General Public License for more details. | ||
18 | * | ||
19 | * You should have received a copy of the GNU General Public License | ||
20 | * along with this program; if not, write to the Free Software | ||
21 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
22 | */ | ||
23 | #ifndef __ASM_HARDWARE_EP7211_H | ||
24 | #define __ASM_HARDWARE_EP7211_H | ||
25 | |||
26 | #include <asm/hardware/clps7111.h> | ||
27 | |||
28 | /* | ||
29 | * define EP7211_BASE to be the base address of the region | ||
30 | * you want to access. | ||
31 | */ | ||
32 | |||
33 | #define EP7211_PHYS_BASE (0x80000000) | ||
34 | |||
35 | /* | ||
36 | * XXX miket@bluemug.com: need to introduce EP7211 registers (those not | ||
37 | * present in 7212) here. | ||
38 | */ | ||
39 | |||
40 | #endif /* __ASM_HARDWARE_EP7211_H */ | ||
diff --git a/include/asm-arm/hardware/ep7212.h b/include/asm-arm/hardware/ep7212.h new file mode 100644 index 000000000000..0e952e747073 --- /dev/null +++ b/include/asm-arm/hardware/ep7212.h | |||
@@ -0,0 +1,83 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/hardware/ep7212.h | ||
3 | * | ||
4 | * This file contains the hardware definitions of the EP7212 internal | ||
5 | * registers. | ||
6 | * | ||
7 | * Copyright (C) 2000 Deep Blue Solutions Ltd. | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or modify | ||
10 | * it under the terms of the GNU General Public License as published by | ||
11 | * the Free Software Foundation; either version 2 of the License, or | ||
12 | * (at your option) any later version. | ||
13 | * | ||
14 | * This program is distributed in the hope that it will be useful, | ||
15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
17 | * GNU General Public License for more details. | ||
18 | * | ||
19 | * You should have received a copy of the GNU General Public License | ||
20 | * along with this program; if not, write to the Free Software | ||
21 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
22 | */ | ||
23 | #ifndef __ASM_HARDWARE_EP7212_H | ||
24 | #define __ASM_HARDWARE_EP7212_H | ||
25 | |||
26 | /* | ||
27 | * define EP7212_BASE to be the base address of the region | ||
28 | * you want to access. | ||
29 | */ | ||
30 | |||
31 | #define EP7212_PHYS_BASE (0x80000000) | ||
32 | |||
33 | #ifndef __ASSEMBLY__ | ||
34 | #define ep_readl(off) __raw_readl(EP7212_BASE + (off)) | ||
35 | #define ep_writel(val,off) __raw_writel(val, EP7212_BASE + (off)) | ||
36 | #endif | ||
37 | |||
38 | /* | ||
39 | * These registers are specific to the EP7212 only | ||
40 | */ | ||
41 | #define DAIR 0x2000 | ||
42 | #define DAIR0 0x2040 | ||
43 | #define DAIDR1 0x2080 | ||
44 | #define DAIDR2 0x20c0 | ||
45 | #define DAISR 0x2100 | ||
46 | #define SYSCON3 0x2200 | ||
47 | #define INTSR3 0x2240 | ||
48 | #define INTMR3 0x2280 | ||
49 | #define LEDFLSH 0x22c0 | ||
50 | |||
51 | #define DAIR_DAIEN (1 << 16) | ||
52 | #define DAIR_ECS (1 << 17) | ||
53 | #define DAIR_LCTM (1 << 19) | ||
54 | #define DAIR_LCRM (1 << 20) | ||
55 | #define DAIR_RCTM (1 << 21) | ||
56 | #define DAIR_RCRM (1 << 22) | ||
57 | #define DAIR_LBM (1 << 23) | ||
58 | |||
59 | #define DAIDR2_FIFOEN (1 << 15) | ||
60 | #define DAIDR2_FIFOLEFT (0x0d << 16) | ||
61 | #define DAIDR2_FIFORIGHT (0x11 << 16) | ||
62 | |||
63 | #define DAISR_RCTS (1 << 0) | ||
64 | #define DAISR_RCRS (1 << 1) | ||
65 | #define DAISR_LCTS (1 << 2) | ||
66 | #define DAISR_LCRS (1 << 3) | ||
67 | #define DAISR_RCTU (1 << 4) | ||
68 | #define DAISR_RCRO (1 << 5) | ||
69 | #define DAISR_LCTU (1 << 6) | ||
70 | #define DAISR_LCRO (1 << 7) | ||
71 | #define DAISR_RCNF (1 << 8) | ||
72 | #define DAISR_RCNE (1 << 9) | ||
73 | #define DAISR_LCNF (1 << 10) | ||
74 | #define DAISR_LCNE (1 << 11) | ||
75 | #define DAISR_FIFO (1 << 12) | ||
76 | |||
77 | #define SYSCON3_ADCCON (1 << 0) | ||
78 | #define SYSCON3_DAISEL (1 << 3) | ||
79 | #define SYSCON3_ADCCKNSEN (1 << 4) | ||
80 | #define SYSCON3_FASTWAKE (1 << 8) | ||
81 | #define SYSCON3_DAIEN (1 << 9) | ||
82 | |||
83 | #endif /* __ASM_HARDWARE_EP7212_H */ | ||
diff --git a/include/asm-arm/hardware/icst307.h b/include/asm-arm/hardware/icst307.h new file mode 100644 index 000000000000..ff8618a441c0 --- /dev/null +++ b/include/asm-arm/hardware/icst307.h | |||
@@ -0,0 +1,38 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/hardware/icst307.h | ||
3 | * | ||
4 | * Copyright (C) 2003 Deep Blue Solutions, Ltd, All Rights Reserved. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | * Support functions for calculating clocks/divisors for the ICS307 | ||
11 | * clock generators. See http://www.icst.com/ for more information | ||
12 | * on these devices. | ||
13 | * | ||
14 | * This file is similar to the icst525.h file | ||
15 | */ | ||
16 | #ifndef ASMARM_HARDWARE_ICST307_H | ||
17 | #define ASMARM_HARDWARE_ICST307_H | ||
18 | |||
19 | struct icst307_params { | ||
20 | unsigned long ref; | ||
21 | unsigned long vco_max; /* inclusive */ | ||
22 | unsigned short vd_min; /* inclusive */ | ||
23 | unsigned short vd_max; /* inclusive */ | ||
24 | unsigned char rd_min; /* inclusive */ | ||
25 | unsigned char rd_max; /* inclusive */ | ||
26 | }; | ||
27 | |||
28 | struct icst307_vco { | ||
29 | unsigned short v; | ||
30 | unsigned char r; | ||
31 | unsigned char s; | ||
32 | }; | ||
33 | |||
34 | unsigned long icst307_khz(const struct icst307_params *p, struct icst307_vco vco); | ||
35 | struct icst307_vco icst307_khz_to_vco(const struct icst307_params *p, unsigned long freq); | ||
36 | struct icst307_vco icst307_ps_to_vco(const struct icst307_params *p, unsigned long period); | ||
37 | |||
38 | #endif | ||
diff --git a/include/asm-arm/hardware/icst525.h b/include/asm-arm/hardware/icst525.h new file mode 100644 index 000000000000..edd5a5704406 --- /dev/null +++ b/include/asm-arm/hardware/icst525.h | |||
@@ -0,0 +1,36 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/hardware/icst525.h | ||
3 | * | ||
4 | * Copyright (C) 2003 Deep Blue Solutions, Ltd, All Rights Reserved. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | * Support functions for calculating clocks/divisors for the ICST525 | ||
11 | * clock generators. See http://www.icst.com/ for more information | ||
12 | * on these devices. | ||
13 | */ | ||
14 | #ifndef ASMARM_HARDWARE_ICST525_H | ||
15 | #define ASMARM_HARDWARE_ICST525_H | ||
16 | |||
17 | struct icst525_params { | ||
18 | unsigned long ref; | ||
19 | unsigned long vco_max; /* inclusive */ | ||
20 | unsigned short vd_min; /* inclusive */ | ||
21 | unsigned short vd_max; /* inclusive */ | ||
22 | unsigned char rd_min; /* inclusive */ | ||
23 | unsigned char rd_max; /* inclusive */ | ||
24 | }; | ||
25 | |||
26 | struct icst525_vco { | ||
27 | unsigned short v; | ||
28 | unsigned char r; | ||
29 | unsigned char s; | ||
30 | }; | ||
31 | |||
32 | unsigned long icst525_khz(const struct icst525_params *p, struct icst525_vco vco); | ||
33 | struct icst525_vco icst525_khz_to_vco(const struct icst525_params *p, unsigned long freq); | ||
34 | struct icst525_vco icst525_ps_to_vco(const struct icst525_params *p, unsigned long period); | ||
35 | |||
36 | #endif | ||
diff --git a/include/asm-arm/hardware/ioc.h b/include/asm-arm/hardware/ioc.h new file mode 100644 index 000000000000..b3b46ef65943 --- /dev/null +++ b/include/asm-arm/hardware/ioc.h | |||
@@ -0,0 +1,72 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/hardware/ioc.h | ||
3 | * | ||
4 | * Copyright (C) Russell King | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | * Use these macros to read/write the IOC. All it does is perform the actual | ||
11 | * read/write. | ||
12 | */ | ||
13 | #ifndef __ASMARM_HARDWARE_IOC_H | ||
14 | #define __ASMARM_HARDWARE_IOC_H | ||
15 | |||
16 | #ifndef __ASSEMBLY__ | ||
17 | |||
18 | /* | ||
19 | * We use __raw_base variants here so that we give the compiler the | ||
20 | * chance to keep IOC_BASE in a register. | ||
21 | */ | ||
22 | #define ioc_readb(off) __raw_readb(IOC_BASE + (off)) | ||
23 | #define ioc_writeb(val,off) __raw_writeb(val, IOC_BASE + (off)) | ||
24 | |||
25 | #endif | ||
26 | |||
27 | #define IOC_CONTROL (0x00) | ||
28 | #define IOC_KARTTX (0x04) | ||
29 | #define IOC_KARTRX (0x04) | ||
30 | |||
31 | #define IOC_IRQSTATA (0x10) | ||
32 | #define IOC_IRQREQA (0x14) | ||
33 | #define IOC_IRQCLRA (0x14) | ||
34 | #define IOC_IRQMASKA (0x18) | ||
35 | |||
36 | #define IOC_IRQSTATB (0x20) | ||
37 | #define IOC_IRQREQB (0x24) | ||
38 | #define IOC_IRQMASKB (0x28) | ||
39 | |||
40 | #define IOC_FIQSTAT (0x30) | ||
41 | #define IOC_FIQREQ (0x34) | ||
42 | #define IOC_FIQMASK (0x38) | ||
43 | |||
44 | #define IOC_T0CNTL (0x40) | ||
45 | #define IOC_T0LTCHL (0x40) | ||
46 | #define IOC_T0CNTH (0x44) | ||
47 | #define IOC_T0LTCHH (0x44) | ||
48 | #define IOC_T0GO (0x48) | ||
49 | #define IOC_T0LATCH (0x4c) | ||
50 | |||
51 | #define IOC_T1CNTL (0x50) | ||
52 | #define IOC_T1LTCHL (0x50) | ||
53 | #define IOC_T1CNTH (0x54) | ||
54 | #define IOC_T1LTCHH (0x54) | ||
55 | #define IOC_T1GO (0x58) | ||
56 | #define IOC_T1LATCH (0x5c) | ||
57 | |||
58 | #define IOC_T2CNTL (0x60) | ||
59 | #define IOC_T2LTCHL (0x60) | ||
60 | #define IOC_T2CNTH (0x64) | ||
61 | #define IOC_T2LTCHH (0x64) | ||
62 | #define IOC_T2GO (0x68) | ||
63 | #define IOC_T2LATCH (0x6c) | ||
64 | |||
65 | #define IOC_T3CNTL (0x70) | ||
66 | #define IOC_T3LTCHL (0x70) | ||
67 | #define IOC_T3CNTH (0x74) | ||
68 | #define IOC_T3LTCHH (0x74) | ||
69 | #define IOC_T3GO (0x78) | ||
70 | #define IOC_T3LATCH (0x7c) | ||
71 | |||
72 | #endif | ||
diff --git a/include/asm-arm/hardware/iomd.h b/include/asm-arm/hardware/iomd.h new file mode 100644 index 000000000000..82fa2c279a18 --- /dev/null +++ b/include/asm-arm/hardware/iomd.h | |||
@@ -0,0 +1,227 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/hardware/iomd.h | ||
3 | * | ||
4 | * Copyright (C) 1999 Russell King | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | * This file contains information out the IOMD ASIC used in the | ||
11 | * Acorn RiscPC and subsequently integrated into the CLPS7500 chips. | ||
12 | */ | ||
13 | #ifndef __ASMARM_HARDWARE_IOMD_H | ||
14 | #define __ASMARM_HARDWARE_IOMD_H | ||
15 | |||
16 | #include <linux/config.h> | ||
17 | |||
18 | #ifndef __ASSEMBLY__ | ||
19 | |||
20 | /* | ||
21 | * We use __raw_base variants here so that we give the compiler the | ||
22 | * chance to keep IOC_BASE in a register. | ||
23 | */ | ||
24 | #define iomd_readb(off) __raw_readb(IOMD_BASE + (off)) | ||
25 | #define iomd_readl(off) __raw_readl(IOMD_BASE + (off)) | ||
26 | #define iomd_writeb(val,off) __raw_writeb(val, IOMD_BASE + (off)) | ||
27 | #define iomd_writel(val,off) __raw_writel(val, IOMD_BASE + (off)) | ||
28 | |||
29 | #endif | ||
30 | |||
31 | #define IOMD_CONTROL (0x000) | ||
32 | #define IOMD_KARTTX (0x004) | ||
33 | #define IOMD_KARTRX (0x004) | ||
34 | #define IOMD_KCTRL (0x008) | ||
35 | |||
36 | #ifdef CONFIG_ARCH_CLPS7500 | ||
37 | #define IOMD_IOLINES (0x00C) | ||
38 | #endif | ||
39 | |||
40 | #define IOMD_IRQSTATA (0x010) | ||
41 | #define IOMD_IRQREQA (0x014) | ||
42 | #define IOMD_IRQCLRA (0x014) | ||
43 | #define IOMD_IRQMASKA (0x018) | ||
44 | |||
45 | #ifdef CONFIG_ARCH_CLPS7500 | ||
46 | #define IOMD_SUSMODE (0x01C) | ||
47 | #endif | ||
48 | |||
49 | #define IOMD_IRQSTATB (0x020) | ||
50 | #define IOMD_IRQREQB (0x024) | ||
51 | #define IOMD_IRQMASKB (0x028) | ||
52 | |||
53 | #define IOMD_FIQSTAT (0x030) | ||
54 | #define IOMD_FIQREQ (0x034) | ||
55 | #define IOMD_FIQMASK (0x038) | ||
56 | |||
57 | #ifdef CONFIG_ARCH_CLPS7500 | ||
58 | #define IOMD_CLKCTL (0x03C) | ||
59 | #endif | ||
60 | |||
61 | #define IOMD_T0CNTL (0x040) | ||
62 | #define IOMD_T0LTCHL (0x040) | ||
63 | #define IOMD_T0CNTH (0x044) | ||
64 | #define IOMD_T0LTCHH (0x044) | ||
65 | #define IOMD_T0GO (0x048) | ||
66 | #define IOMD_T0LATCH (0x04c) | ||
67 | |||
68 | #define IOMD_T1CNTL (0x050) | ||
69 | #define IOMD_T1LTCHL (0x050) | ||
70 | #define IOMD_T1CNTH (0x054) | ||
71 | #define IOMD_T1LTCHH (0x054) | ||
72 | #define IOMD_T1GO (0x058) | ||
73 | #define IOMD_T1LATCH (0x05c) | ||
74 | |||
75 | #ifdef CONFIG_ARCH_CLPS7500 | ||
76 | #define IOMD_IRQSTATC (0x060) | ||
77 | #define IOMD_IRQREQC (0x064) | ||
78 | #define IOMD_IRQMASKC (0x068) | ||
79 | |||
80 | #define IOMD_VIDMUX (0x06c) | ||
81 | |||
82 | #define IOMD_IRQSTATD (0x070) | ||
83 | #define IOMD_IRQREQD (0x074) | ||
84 | #define IOMD_IRQMASKD (0x078) | ||
85 | #endif | ||
86 | |||
87 | #define IOMD_ROMCR0 (0x080) | ||
88 | #define IOMD_ROMCR1 (0x084) | ||
89 | #ifdef CONFIG_ARCH_RPC | ||
90 | #define IOMD_DRAMCR (0x088) | ||
91 | #endif | ||
92 | #define IOMD_REFCR (0x08C) | ||
93 | |||
94 | #define IOMD_FSIZE (0x090) | ||
95 | #define IOMD_ID0 (0x094) | ||
96 | #define IOMD_ID1 (0x098) | ||
97 | #define IOMD_VERSION (0x09C) | ||
98 | |||
99 | #ifdef CONFIG_ARCH_RPC | ||
100 | #define IOMD_MOUSEX (0x0A0) | ||
101 | #define IOMD_MOUSEY (0x0A4) | ||
102 | #endif | ||
103 | |||
104 | #ifdef CONFIG_ARCH_CLPS7500 | ||
105 | #define IOMD_MSEDAT (0x0A8) | ||
106 | #define IOMD_MSECTL (0x0Ac) | ||
107 | #endif | ||
108 | |||
109 | #ifdef CONFIG_ARCH_RPC | ||
110 | #define IOMD_DMATCR (0x0C0) | ||
111 | #endif | ||
112 | #define IOMD_IOTCR (0x0C4) | ||
113 | #define IOMD_ECTCR (0x0C8) | ||
114 | #ifdef CONFIG_ARCH_RPC | ||
115 | #define IOMD_DMAEXT (0x0CC) | ||
116 | #endif | ||
117 | #ifdef CONFIG_ARCH_CLPS7500 | ||
118 | #define IOMD_ASTCR (0x0CC) | ||
119 | #define IOMD_DRAMCR (0x0D0) | ||
120 | #define IOMD_SELFREF (0x0D4) | ||
121 | #define IOMD_ATODICR (0x0E0) | ||
122 | #define IOMD_ATODSR (0x0E4) | ||
123 | #define IOMD_ATODCC (0x0E8) | ||
124 | #define IOMD_ATODCNT1 (0x0EC) | ||
125 | #define IOMD_ATODCNT2 (0x0F0) | ||
126 | #define IOMD_ATODCNT3 (0x0F4) | ||
127 | #define IOMD_ATODCNT4 (0x0F8) | ||
128 | #endif | ||
129 | |||
130 | #ifdef CONFIG_ARCH_RPC | ||
131 | #define DMA_EXT_IO0 1 | ||
132 | #define DMA_EXT_IO1 2 | ||
133 | #define DMA_EXT_IO2 4 | ||
134 | #define DMA_EXT_IO3 8 | ||
135 | |||
136 | #define IOMD_IO0CURA (0x100) | ||
137 | #define IOMD_IO0ENDA (0x104) | ||
138 | #define IOMD_IO0CURB (0x108) | ||
139 | #define IOMD_IO0ENDB (0x10C) | ||
140 | #define IOMD_IO0CR (0x110) | ||
141 | #define IOMD_IO0ST (0x114) | ||
142 | |||
143 | #define IOMD_IO1CURA (0x120) | ||
144 | #define IOMD_IO1ENDA (0x124) | ||
145 | #define IOMD_IO1CURB (0x128) | ||
146 | #define IOMD_IO1ENDB (0x12C) | ||
147 | #define IOMD_IO1CR (0x130) | ||
148 | #define IOMD_IO1ST (0x134) | ||
149 | |||
150 | #define IOMD_IO2CURA (0x140) | ||
151 | #define IOMD_IO2ENDA (0x144) | ||
152 | #define IOMD_IO2CURB (0x148) | ||
153 | #define IOMD_IO2ENDB (0x14C) | ||
154 | #define IOMD_IO2CR (0x150) | ||
155 | #define IOMD_IO2ST (0x154) | ||
156 | |||
157 | #define IOMD_IO3CURA (0x160) | ||
158 | #define IOMD_IO3ENDA (0x164) | ||
159 | #define IOMD_IO3CURB (0x168) | ||
160 | #define IOMD_IO3ENDB (0x16C) | ||
161 | #define IOMD_IO3CR (0x170) | ||
162 | #define IOMD_IO3ST (0x174) | ||
163 | #endif | ||
164 | |||
165 | #define IOMD_SD0CURA (0x180) | ||
166 | #define IOMD_SD0ENDA (0x184) | ||
167 | #define IOMD_SD0CURB (0x188) | ||
168 | #define IOMD_SD0ENDB (0x18C) | ||
169 | #define IOMD_SD0CR (0x190) | ||
170 | #define IOMD_SD0ST (0x194) | ||
171 | |||
172 | #ifdef CONFIG_ARCH_RPC | ||
173 | #define IOMD_SD1CURA (0x1A0) | ||
174 | #define IOMD_SD1ENDA (0x1A4) | ||
175 | #define IOMD_SD1CURB (0x1A8) | ||
176 | #define IOMD_SD1ENDB (0x1AC) | ||
177 | #define IOMD_SD1CR (0x1B0) | ||
178 | #define IOMD_SD1ST (0x1B4) | ||
179 | #endif | ||
180 | |||
181 | #define IOMD_CURSCUR (0x1C0) | ||
182 | #define IOMD_CURSINIT (0x1C4) | ||
183 | |||
184 | #define IOMD_VIDCUR (0x1D0) | ||
185 | #define IOMD_VIDEND (0x1D4) | ||
186 | #define IOMD_VIDSTART (0x1D8) | ||
187 | #define IOMD_VIDINIT (0x1DC) | ||
188 | #define IOMD_VIDCR (0x1E0) | ||
189 | |||
190 | #define IOMD_DMASTAT (0x1F0) | ||
191 | #define IOMD_DMAREQ (0x1F4) | ||
192 | #define IOMD_DMAMASK (0x1F8) | ||
193 | |||
194 | #define DMA_END_S (1 << 31) | ||
195 | #define DMA_END_L (1 << 30) | ||
196 | |||
197 | #define DMA_CR_C 0x80 | ||
198 | #define DMA_CR_D 0x40 | ||
199 | #define DMA_CR_E 0x20 | ||
200 | |||
201 | #define DMA_ST_OFL 4 | ||
202 | #define DMA_ST_INT 2 | ||
203 | #define DMA_ST_AB 1 | ||
204 | |||
205 | /* | ||
206 | * DMA (MEMC) compatibility | ||
207 | */ | ||
208 | #define HALF_SAM vram_half_sam | ||
209 | #define VDMA_ALIGNMENT (HALF_SAM * 2) | ||
210 | #define VDMA_XFERSIZE (HALF_SAM) | ||
211 | #define VDMA_INIT IOMD_VIDINIT | ||
212 | #define VDMA_START IOMD_VIDSTART | ||
213 | #define VDMA_END IOMD_VIDEND | ||
214 | |||
215 | #ifndef __ASSEMBLY__ | ||
216 | extern unsigned int vram_half_sam; | ||
217 | #define video_set_dma(start,end,offset) \ | ||
218 | do { \ | ||
219 | outl (SCREEN_START + start, VDMA_START); \ | ||
220 | outl (SCREEN_START + end - VDMA_XFERSIZE, VDMA_END); \ | ||
221 | if (offset >= end - VDMA_XFERSIZE) \ | ||
222 | offset |= 0x40000000; \ | ||
223 | outl (SCREEN_START + offset, VDMA_INIT); \ | ||
224 | } while (0) | ||
225 | #endif | ||
226 | |||
227 | #endif | ||
diff --git a/include/asm-arm/hardware/linkup-l1110.h b/include/asm-arm/hardware/linkup-l1110.h new file mode 100644 index 000000000000..7ec91168a576 --- /dev/null +++ b/include/asm-arm/hardware/linkup-l1110.h | |||
@@ -0,0 +1,48 @@ | |||
1 | /* | ||
2 | * | ||
3 | * Definitions for H3600 Handheld Computer | ||
4 | * | ||
5 | * Copyright 2001 Compaq Computer Corporation. | ||
6 | * | ||
7 | * Use consistent with the GNU GPL is permitted, | ||
8 | * provided that this copyright notice is | ||
9 | * preserved in its entirety in all copies and derived works. | ||
10 | * | ||
11 | * COMPAQ COMPUTER CORPORATION MAKES NO WARRANTIES, EXPRESSED OR IMPLIED, | ||
12 | * AS TO THE USEFULNESS OR CORRECTNESS OF THIS CODE OR ITS | ||
13 | * FITNESS FOR ANY PARTICULAR PURPOSE. | ||
14 | * | ||
15 | * Author: Jamey Hicks. | ||
16 | * | ||
17 | */ | ||
18 | |||
19 | /* LinkUp Systems PCCard/CompactFlash Interface for SA-1100 */ | ||
20 | |||
21 | /* PC Card Status Register */ | ||
22 | #define LINKUP_PRS_S1 (1 << 0) /* voltage control bits S1-S4 */ | ||
23 | #define LINKUP_PRS_S2 (1 << 1) | ||
24 | #define LINKUP_PRS_S3 (1 << 2) | ||
25 | #define LINKUP_PRS_S4 (1 << 3) | ||
26 | #define LINKUP_PRS_BVD1 (1 << 4) | ||
27 | #define LINKUP_PRS_BVD2 (1 << 5) | ||
28 | #define LINKUP_PRS_VS1 (1 << 6) | ||
29 | #define LINKUP_PRS_VS2 (1 << 7) | ||
30 | #define LINKUP_PRS_RDY (1 << 8) | ||
31 | #define LINKUP_PRS_CD1 (1 << 9) | ||
32 | #define LINKUP_PRS_CD2 (1 << 10) | ||
33 | |||
34 | /* PC Card Command Register */ | ||
35 | #define LINKUP_PRC_S1 (1 << 0) | ||
36 | #define LINKUP_PRC_S2 (1 << 1) | ||
37 | #define LINKUP_PRC_S3 (1 << 2) | ||
38 | #define LINKUP_PRC_S4 (1 << 3) | ||
39 | #define LINKUP_PRC_RESET (1 << 4) | ||
40 | #define LINKUP_PRC_APOE (1 << 5) /* Auto Power Off Enable: clears S1-S4 when either nCD goes high */ | ||
41 | #define LINKUP_PRC_CFE (1 << 6) /* CompactFlash mode Enable: addresses A[10:0] only, A[25:11] high */ | ||
42 | #define LINKUP_PRC_SOE (1 << 7) /* signal output driver enable */ | ||
43 | #define LINKUP_PRC_SSP (1 << 8) /* sock select polarity: 0 for socket 0, 1 for socket 1 */ | ||
44 | #define LINKUP_PRC_MBZ (1 << 15) /* must be zero */ | ||
45 | |||
46 | struct linkup_l1110 { | ||
47 | volatile short prc; | ||
48 | }; | ||
diff --git a/include/asm-arm/hardware/locomo.h b/include/asm-arm/hardware/locomo.h new file mode 100644 index 000000000000..5f10048ec54e --- /dev/null +++ b/include/asm-arm/hardware/locomo.h | |||
@@ -0,0 +1,206 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/hardware/locomo.h | ||
3 | * | ||
4 | * This file contains the definitions for the LoCoMo G/A Chip | ||
5 | * | ||
6 | * (C) Copyright 2004 John Lenz | ||
7 | * | ||
8 | * May be copied or modified under the terms of the GNU General Public | ||
9 | * License. See linux/COPYING for more information. | ||
10 | * | ||
11 | * Based on sa1111.h | ||
12 | */ | ||
13 | #ifndef _ASM_ARCH_LOCOMO | ||
14 | #define _ASM_ARCH_LOCOMO | ||
15 | |||
16 | #define locomo_writel(val,addr) ({ *(volatile u16 *)(addr) = (val); }) | ||
17 | #define locomo_readl(addr) (*(volatile u16 *)(addr)) | ||
18 | |||
19 | /* LOCOMO version */ | ||
20 | #define LOCOMO_VER 0x00 | ||
21 | |||
22 | /* Pin status */ | ||
23 | #define LOCOMO_ST 0x04 | ||
24 | |||
25 | /* Pin status */ | ||
26 | #define LOCOMO_C32K 0x08 | ||
27 | |||
28 | /* Interrupt controller */ | ||
29 | #define LOCOMO_ICR 0x0C | ||
30 | |||
31 | /* MCS decoder for boot selecting */ | ||
32 | #define LOCOMO_MCSX0 0x10 | ||
33 | #define LOCOMO_MCSX1 0x14 | ||
34 | #define LOCOMO_MCSX2 0x18 | ||
35 | #define LOCOMO_MCSX3 0x1c | ||
36 | |||
37 | /* Touch panel controller */ | ||
38 | #define LOCOMO_ASD 0x20 /* AD start delay */ | ||
39 | #define LOCOMO_HSD 0x28 /* HSYS delay */ | ||
40 | #define LOCOMO_HSC 0x2c /* HSYS period */ | ||
41 | #define LOCOMO_TADC 0x30 /* tablet ADC clock */ | ||
42 | |||
43 | |||
44 | /* Long time timer */ | ||
45 | #define LOCOMO_LTC 0xd8 /* LTC interrupt setting */ | ||
46 | #define LOCOMO_LTINT 0xdc /* LTC interrupt */ | ||
47 | |||
48 | /* DAC control signal for LCD (COMADJ ) */ | ||
49 | #define LOCOMO_DAC 0xe0 | ||
50 | /* DAC control */ | ||
51 | #define LOCOMO_DAC_SCLOEB 0x08 /* SCL pin output data */ | ||
52 | #define LOCOMO_DAC_TEST 0x04 /* Test bit */ | ||
53 | #define LOCOMO_DAC_SDA 0x02 /* SDA pin level (read-only) */ | ||
54 | #define LOCOMO_DAC_SDAOEB 0x01 /* SDA pin output data */ | ||
55 | |||
56 | /* SPI interface */ | ||
57 | #define LOCOMO_SPIMD 0x60 /* SPI mode setting */ | ||
58 | #define LOCOMO_SPICT 0x64 /* SPI mode control */ | ||
59 | #define LOCOMO_SPIST 0x68 /* SPI status */ | ||
60 | #define LOCOMO_SPIIS 0x70 /* SPI interrupt status */ | ||
61 | #define LOCOMO_SPIWE 0x74 /* SPI interrupt status write enable */ | ||
62 | #define LOCOMO_SPIIE 0x78 /* SPI interrupt enable */ | ||
63 | #define LOCOMO_SPIIR 0x7c /* SPI interrupt request */ | ||
64 | #define LOCOMO_SPITD 0x80 /* SPI transfer data write */ | ||
65 | #define LOCOMO_SPIRD 0x84 /* SPI receive data read */ | ||
66 | #define LOCOMO_SPITS 0x88 /* SPI transfer data shift */ | ||
67 | #define LOCOMO_SPIRS 0x8C /* SPI receive data shift */ | ||
68 | #define LOCOMO_SPI_TEND (1 << 3) /* Transfer end bit */ | ||
69 | #define LOCOMO_SPI_OVRN (1 << 2) /* Over Run bit */ | ||
70 | #define LOCOMO_SPI_RFW (1 << 1) /* write buffer bit */ | ||
71 | #define LOCOMO_SPI_RFR (1) /* read buffer bit */ | ||
72 | |||
73 | /* GPIO */ | ||
74 | #define LOCOMO_GPD 0x90 /* GPIO direction */ | ||
75 | #define LOCOMO_GPE 0x94 /* GPIO input enable */ | ||
76 | #define LOCOMO_GPL 0x98 /* GPIO level */ | ||
77 | #define LOCOMO_GPO 0x9c /* GPIO out data setteing */ | ||
78 | #define LOCOMO_GRIE 0xa0 /* GPIO rise detection */ | ||
79 | #define LOCOMO_GFIE 0xa4 /* GPIO fall detection */ | ||
80 | #define LOCOMO_GIS 0xa8 /* GPIO edge detection status */ | ||
81 | #define LOCOMO_GWE 0xac /* GPIO status write enable */ | ||
82 | #define LOCOMO_GIE 0xb0 /* GPIO interrupt enable */ | ||
83 | #define LOCOMO_GIR 0xb4 /* GPIO interrupt request */ | ||
84 | #define LOCOMO_GPIO(Nb) (0x01 << (Nb)) | ||
85 | #define LOCOMO_GPIO_RTS LOCOMO_GPIO(0) | ||
86 | #define LOCOMO_GPIO_CTS LOCOMO_GPIO(1) | ||
87 | #define LOCOMO_GPIO_DSR LOCOMO_GPIO(2) | ||
88 | #define LOCOMO_GPIO_DTR LOCOMO_GPIO(3) | ||
89 | #define LOCOMO_GPIO_LCD_VSHA_ON LOCOMO_GPIO(4) | ||
90 | #define LOCOMO_GPIO_LCD_VSHD_ON LOCOMO_GPIO(5) | ||
91 | #define LOCOMO_GPIO_LCD_VEE_ON LOCOMO_GPIO(6) | ||
92 | #define LOCOMO_GPIO_LCD_MOD LOCOMO_GPIO(7) | ||
93 | #define LOCOMO_GPIO_DAC_ON LOCOMO_GPIO(8) | ||
94 | #define LOCOMO_GPIO_FL_VR LOCOMO_GPIO(9) | ||
95 | #define LOCOMO_GPIO_DAC_SDATA LOCOMO_GPIO(10) | ||
96 | #define LOCOMO_GPIO_DAC_SCK LOCOMO_GPIO(11) | ||
97 | #define LOCOMO_GPIO_DAC_SLOAD LOCOMO_GPIO(12) | ||
98 | |||
99 | /* Start the definitions of the devices. Each device has an initial | ||
100 | * base address and a series of offsets from that base address. */ | ||
101 | |||
102 | /* Keyboard controller */ | ||
103 | #define LOCOMO_KEYBOARD 0x40 | ||
104 | #define LOCOMO_KIB 0x00 /* KIB level */ | ||
105 | #define LOCOMO_KSC 0x04 /* KSTRB control */ | ||
106 | #define LOCOMO_KCMD 0x08 /* KSTRB command */ | ||
107 | #define LOCOMO_KIC 0x0c /* Key interrupt */ | ||
108 | |||
109 | /* Front light adjustment controller */ | ||
110 | #define LOCOMO_FRONTLIGHT 0xc8 | ||
111 | #define LOCOMO_ALS 0x00 /* Adjust light cycle */ | ||
112 | #define LOCOMO_ALD 0x04 /* Adjust light duty */ | ||
113 | |||
114 | /* Backlight controller: TFT signal */ | ||
115 | #define LOCOMO_BACKLIGHT 0x38 | ||
116 | #define LOCOMO_TC 0x00 /* TFT control signal */ | ||
117 | #define LOCOMO_CPSD 0x04 /* CPS delay */ | ||
118 | |||
119 | /* Audio controller */ | ||
120 | #define LOCOMO_AUDIO 0x54 | ||
121 | #define LOCOMO_ACC 0x00 /* Audio clock */ | ||
122 | #define LOCOMO_PAIF 0x7C /* PCM audio interface */ | ||
123 | /* Audio clock */ | ||
124 | #define LOCOMO_ACC_XON 0x80 | ||
125 | #define LOCOMO_ACC_XEN 0x40 | ||
126 | #define LOCOMO_ACC_XSEL0 0x00 | ||
127 | #define LOCOMO_ACC_XSEL1 0x20 | ||
128 | #define LOCOMO_ACC_MCLKEN 0x10 | ||
129 | #define LOCOMO_ACC_64FSEN 0x08 | ||
130 | #define LOCOMO_ACC_CLKSEL000 0x00 /* mclk 2 */ | ||
131 | #define LOCOMO_ACC_CLKSEL001 0x01 /* mclk 3 */ | ||
132 | #define LOCOMO_ACC_CLKSEL010 0x02 /* mclk 4 */ | ||
133 | #define LOCOMO_ACC_CLKSEL011 0x03 /* mclk 6 */ | ||
134 | #define LOCOMO_ACC_CLKSEL100 0x04 /* mclk 8 */ | ||
135 | #define LOCOMO_ACC_CLKSEL101 0x05 /* mclk 12 */ | ||
136 | /* PCM audio interface */ | ||
137 | #define LOCOMO_PAIF_SCINV 0x20 | ||
138 | #define LOCOMO_PAIF_SCEN 0x10 | ||
139 | #define LOCOMO_PAIF_LRCRST 0x08 | ||
140 | #define LOCOMO_PAIF_LRCEVE 0x04 | ||
141 | #define LOCOMO_PAIF_LRCINV 0x02 | ||
142 | #define LOCOMO_PAIF_LRCEN 0x01 | ||
143 | |||
144 | /* LED controller */ | ||
145 | #define LOCOMO_LED 0xe8 | ||
146 | #define LOCOMO_LPT0 0x00 | ||
147 | #define LOCOMO_LPT1 0x04 | ||
148 | /* LED control */ | ||
149 | #define LOCOMO_LPT_TOFH 0x80 | ||
150 | #define LOCOMO_LPT_TOFL 0x08 | ||
151 | #define LOCOMO_LPT_TOH(TOH) ((TOH & 0x7) << 4) | ||
152 | #define LOCOMO_LPT_TOL(TOL) ((TOL & 0x7)) | ||
153 | |||
154 | extern struct bus_type locomo_bus_type; | ||
155 | |||
156 | #define LOCOMO_DEVID_KEYBOARD 0 | ||
157 | #define LOCOMO_DEVID_FRONTLIGHT 1 | ||
158 | #define LOCOMO_DEVID_BACKLIGHT 2 | ||
159 | #define LOCOMO_DEVID_AUDIO 3 | ||
160 | #define LOCOMO_DEVID_LED 4 | ||
161 | #define LOCOMO_DEVID_UART 5 | ||
162 | |||
163 | struct locomo_dev { | ||
164 | struct device dev; | ||
165 | unsigned int devid; | ||
166 | unsigned int irq[1]; | ||
167 | |||
168 | void *mapbase; | ||
169 | unsigned long length; | ||
170 | |||
171 | u64 dma_mask; | ||
172 | }; | ||
173 | |||
174 | #define LOCOMO_DEV(_d) container_of((_d), struct locomo_dev, dev) | ||
175 | |||
176 | #define locomo_get_drvdata(d) dev_get_drvdata(&(d)->dev) | ||
177 | #define locomo_set_drvdata(d,p) dev_set_drvdata(&(d)->dev, p) | ||
178 | |||
179 | struct locomo_driver { | ||
180 | struct device_driver drv; | ||
181 | unsigned int devid; | ||
182 | int (*probe)(struct locomo_dev *); | ||
183 | int (*remove)(struct locomo_dev *); | ||
184 | int (*suspend)(struct locomo_dev *, pm_message_t); | ||
185 | int (*resume)(struct locomo_dev *); | ||
186 | }; | ||
187 | |||
188 | #define LOCOMO_DRV(_d) container_of((_d), struct locomo_driver, drv) | ||
189 | |||
190 | #define LOCOMO_DRIVER_NAME(_ldev) ((_ldev)->dev.driver->name) | ||
191 | |||
192 | void locomo_lcd_power(struct locomo_dev *, int, unsigned int); | ||
193 | |||
194 | int locomo_driver_register(struct locomo_driver *); | ||
195 | void locomo_driver_unregister(struct locomo_driver *); | ||
196 | |||
197 | /* GPIO control functions */ | ||
198 | void locomo_gpio_set_dir(struct locomo_dev *ldev, unsigned int bits, unsigned int dir); | ||
199 | unsigned int locomo_gpio_read_level(struct locomo_dev *ldev, unsigned int bits); | ||
200 | unsigned int locomo_gpio_read_output(struct locomo_dev *ldev, unsigned int bits); | ||
201 | void locomo_gpio_write(struct locomo_dev *ldev, unsigned int bits, unsigned int set); | ||
202 | |||
203 | /* M62332 control function */ | ||
204 | void locomo_m62332_senddata(struct locomo_dev *ldev, unsigned int dac_data, int channel); | ||
205 | |||
206 | #endif | ||
diff --git a/include/asm-arm/hardware/memc.h b/include/asm-arm/hardware/memc.h new file mode 100644 index 000000000000..8aef5aa0e01b --- /dev/null +++ b/include/asm-arm/hardware/memc.h | |||
@@ -0,0 +1,26 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/hardware/memc.h | ||
3 | * | ||
4 | * Copyright (C) Russell King. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | */ | ||
10 | #define VDMA_ALIGNMENT PAGE_SIZE | ||
11 | #define VDMA_XFERSIZE 16 | ||
12 | #define VDMA_INIT 0 | ||
13 | #define VDMA_START 1 | ||
14 | #define VDMA_END 2 | ||
15 | |||
16 | #ifndef __ASSEMBLY__ | ||
17 | extern void memc_write(unsigned int reg, unsigned long val); | ||
18 | |||
19 | #define video_set_dma(start,end,offset) \ | ||
20 | do { \ | ||
21 | memc_write (VDMA_START, (start >> 2)); \ | ||
22 | memc_write (VDMA_END, (end - VDMA_XFERSIZE) >> 2); \ | ||
23 | memc_write (VDMA_INIT, (offset >> 2)); \ | ||
24 | } while (0) | ||
25 | |||
26 | #endif | ||
diff --git a/include/asm-arm/hardware/pci_v3.h b/include/asm-arm/hardware/pci_v3.h new file mode 100644 index 000000000000..4d497bdb9a97 --- /dev/null +++ b/include/asm-arm/hardware/pci_v3.h | |||
@@ -0,0 +1,186 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/hardware/pci_v3.h | ||
3 | * | ||
4 | * Internal header file PCI V3 chip | ||
5 | * | ||
6 | * Copyright (C) ARM Limited | ||
7 | * Copyright (C) 2000-2001 Deep Blue Solutions Ltd. | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or modify | ||
10 | * it under the terms of the GNU General Public License as published by | ||
11 | * the Free Software Foundation; either version 2 of the License, or | ||
12 | * (at your option) any later version. | ||
13 | * | ||
14 | * This program is distributed in the hope that it will be useful, | ||
15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
17 | * GNU General Public License for more details. | ||
18 | * | ||
19 | * You should have received a copy of the GNU General Public License | ||
20 | * along with this program; if not, write to the Free Software | ||
21 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
22 | */ | ||
23 | #ifndef ASM_ARM_HARDWARE_PCI_V3_H | ||
24 | #define ASM_ARM_HARDWARE_PCI_V3_H | ||
25 | |||
26 | /* ------------------------------------------------------------------------------- | ||
27 | * V3 Local Bus to PCI Bridge definitions | ||
28 | * ------------------------------------------------------------------------------- | ||
29 | * Registers (these are taken from page 129 of the EPC User's Manual Rev 1.04 | ||
30 | * All V3 register names are prefaced by V3_ to avoid clashing with any other | ||
31 | * PCI definitions. Their names match the user's manual. | ||
32 | * | ||
33 | * I'm assuming that I20 is disabled. | ||
34 | * | ||
35 | */ | ||
36 | #define V3_PCI_VENDOR 0x00000000 | ||
37 | #define V3_PCI_DEVICE 0x00000002 | ||
38 | #define V3_PCI_CMD 0x00000004 | ||
39 | #define V3_PCI_STAT 0x00000006 | ||
40 | #define V3_PCI_CC_REV 0x00000008 | ||
41 | #define V3_PCI_HDR_CFG 0x0000000C | ||
42 | #define V3_PCI_IO_BASE 0x00000010 | ||
43 | #define V3_PCI_BASE0 0x00000014 | ||
44 | #define V3_PCI_BASE1 0x00000018 | ||
45 | #define V3_PCI_SUB_VENDOR 0x0000002C | ||
46 | #define V3_PCI_SUB_ID 0x0000002E | ||
47 | #define V3_PCI_ROM 0x00000030 | ||
48 | #define V3_PCI_BPARAM 0x0000003C | ||
49 | #define V3_PCI_MAP0 0x00000040 | ||
50 | #define V3_PCI_MAP1 0x00000044 | ||
51 | #define V3_PCI_INT_STAT 0x00000048 | ||
52 | #define V3_PCI_INT_CFG 0x0000004C | ||
53 | #define V3_LB_BASE0 0x00000054 | ||
54 | #define V3_LB_BASE1 0x00000058 | ||
55 | #define V3_LB_MAP0 0x0000005E | ||
56 | #define V3_LB_MAP1 0x00000062 | ||
57 | #define V3_LB_BASE2 0x00000064 | ||
58 | #define V3_LB_MAP2 0x00000066 | ||
59 | #define V3_LB_SIZE 0x00000068 | ||
60 | #define V3_LB_IO_BASE 0x0000006E | ||
61 | #define V3_FIFO_CFG 0x00000070 | ||
62 | #define V3_FIFO_PRIORITY 0x00000072 | ||
63 | #define V3_FIFO_STAT 0x00000074 | ||
64 | #define V3_LB_ISTAT 0x00000076 | ||
65 | #define V3_LB_IMASK 0x00000077 | ||
66 | #define V3_SYSTEM 0x00000078 | ||
67 | #define V3_LB_CFG 0x0000007A | ||
68 | #define V3_PCI_CFG 0x0000007C | ||
69 | #define V3_DMA_PCI_ADR0 0x00000080 | ||
70 | #define V3_DMA_PCI_ADR1 0x00000090 | ||
71 | #define V3_DMA_LOCAL_ADR0 0x00000084 | ||
72 | #define V3_DMA_LOCAL_ADR1 0x00000094 | ||
73 | #define V3_DMA_LENGTH0 0x00000088 | ||
74 | #define V3_DMA_LENGTH1 0x00000098 | ||
75 | #define V3_DMA_CSR0 0x0000008B | ||
76 | #define V3_DMA_CSR1 0x0000009B | ||
77 | #define V3_DMA_CTLB_ADR0 0x0000008C | ||
78 | #define V3_DMA_CTLB_ADR1 0x0000009C | ||
79 | #define V3_DMA_DELAY 0x000000E0 | ||
80 | #define V3_MAIL_DATA 0x000000C0 | ||
81 | #define V3_PCI_MAIL_IEWR 0x000000D0 | ||
82 | #define V3_PCI_MAIL_IERD 0x000000D2 | ||
83 | #define V3_LB_MAIL_IEWR 0x000000D4 | ||
84 | #define V3_LB_MAIL_IERD 0x000000D6 | ||
85 | #define V3_MAIL_WR_STAT 0x000000D8 | ||
86 | #define V3_MAIL_RD_STAT 0x000000DA | ||
87 | #define V3_QBA_MAP 0x000000DC | ||
88 | |||
89 | /* PCI COMMAND REGISTER bits | ||
90 | */ | ||
91 | #define V3_COMMAND_M_FBB_EN (1 << 9) | ||
92 | #define V3_COMMAND_M_SERR_EN (1 << 8) | ||
93 | #define V3_COMMAND_M_PAR_EN (1 << 6) | ||
94 | #define V3_COMMAND_M_MASTER_EN (1 << 2) | ||
95 | #define V3_COMMAND_M_MEM_EN (1 << 1) | ||
96 | #define V3_COMMAND_M_IO_EN (1 << 0) | ||
97 | |||
98 | /* SYSTEM REGISTER bits | ||
99 | */ | ||
100 | #define V3_SYSTEM_M_RST_OUT (1 << 15) | ||
101 | #define V3_SYSTEM_M_LOCK (1 << 14) | ||
102 | |||
103 | /* PCI_CFG bits | ||
104 | */ | ||
105 | #define V3_PCI_CFG_M_I2O_EN (1 << 15) | ||
106 | #define V3_PCI_CFG_M_IO_REG_DIS (1 << 14) | ||
107 | #define V3_PCI_CFG_M_IO_DIS (1 << 13) | ||
108 | #define V3_PCI_CFG_M_EN3V (1 << 12) | ||
109 | #define V3_PCI_CFG_M_RETRY_EN (1 << 10) | ||
110 | #define V3_PCI_CFG_M_AD_LOW1 (1 << 9) | ||
111 | #define V3_PCI_CFG_M_AD_LOW0 (1 << 8) | ||
112 | |||
113 | /* PCI_BASE register bits (PCI -> Local Bus) | ||
114 | */ | ||
115 | #define V3_PCI_BASE_M_ADR_BASE 0xFFF00000 | ||
116 | #define V3_PCI_BASE_M_ADR_BASEL 0x000FFF00 | ||
117 | #define V3_PCI_BASE_M_PREFETCH (1 << 3) | ||
118 | #define V3_PCI_BASE_M_TYPE (3 << 1) | ||
119 | #define V3_PCI_BASE_M_IO (1 << 0) | ||
120 | |||
121 | /* PCI MAP register bits (PCI -> Local bus) | ||
122 | */ | ||
123 | #define V3_PCI_MAP_M_MAP_ADR 0xFFF00000 | ||
124 | #define V3_PCI_MAP_M_RD_POST_INH (1 << 15) | ||
125 | #define V3_PCI_MAP_M_ROM_SIZE (3 << 10) | ||
126 | #define V3_PCI_MAP_M_SWAP (3 << 8) | ||
127 | #define V3_PCI_MAP_M_ADR_SIZE 0x000000F0 | ||
128 | #define V3_PCI_MAP_M_REG_EN (1 << 1) | ||
129 | #define V3_PCI_MAP_M_ENABLE (1 << 0) | ||
130 | |||
131 | /* | ||
132 | * LB_BASE0,1 register bits (Local bus -> PCI) | ||
133 | */ | ||
134 | #define V3_LB_BASE_ADR_BASE 0xfff00000 | ||
135 | #define V3_LB_BASE_SWAP (3 << 8) | ||
136 | #define V3_LB_BASE_ADR_SIZE (15 << 4) | ||
137 | #define V3_LB_BASE_PREFETCH (1 << 3) | ||
138 | #define V3_LB_BASE_ENABLE (1 << 0) | ||
139 | |||
140 | #define V3_LB_BASE_ADR_SIZE_1MB (0 << 4) | ||
141 | #define V3_LB_BASE_ADR_SIZE_2MB (1 << 4) | ||
142 | #define V3_LB_BASE_ADR_SIZE_4MB (2 << 4) | ||
143 | #define V3_LB_BASE_ADR_SIZE_8MB (3 << 4) | ||
144 | #define V3_LB_BASE_ADR_SIZE_16MB (4 << 4) | ||
145 | #define V3_LB_BASE_ADR_SIZE_32MB (5 << 4) | ||
146 | #define V3_LB_BASE_ADR_SIZE_64MB (6 << 4) | ||
147 | #define V3_LB_BASE_ADR_SIZE_128MB (7 << 4) | ||
148 | #define V3_LB_BASE_ADR_SIZE_256MB (8 << 4) | ||
149 | #define V3_LB_BASE_ADR_SIZE_512MB (9 << 4) | ||
150 | #define V3_LB_BASE_ADR_SIZE_1GB (10 << 4) | ||
151 | #define V3_LB_BASE_ADR_SIZE_2GB (11 << 4) | ||
152 | |||
153 | #define v3_addr_to_lb_base(a) ((a) & V3_LB_BASE_ADR_BASE) | ||
154 | |||
155 | /* | ||
156 | * LB_MAP0,1 register bits (Local bus -> PCI) | ||
157 | */ | ||
158 | #define V3_LB_MAP_MAP_ADR 0xfff0 | ||
159 | #define V3_LB_MAP_TYPE (7 << 1) | ||
160 | #define V3_LB_MAP_AD_LOW_EN (1 << 0) | ||
161 | |||
162 | #define V3_LB_MAP_TYPE_IACK (0 << 1) | ||
163 | #define V3_LB_MAP_TYPE_IO (1 << 1) | ||
164 | #define V3_LB_MAP_TYPE_MEM (3 << 1) | ||
165 | #define V3_LB_MAP_TYPE_CONFIG (5 << 1) | ||
166 | #define V3_LB_MAP_TYPE_MEM_MULTIPLE (6 << 1) | ||
167 | |||
168 | #define v3_addr_to_lb_map(a) (((a) >> 16) & V3_LB_MAP_MAP_ADR) | ||
169 | |||
170 | /* | ||
171 | * LB_BASE2 register bits (Local bus -> PCI IO) | ||
172 | */ | ||
173 | #define V3_LB_BASE2_ADR_BASE 0xff00 | ||
174 | #define V3_LB_BASE2_SWAP (3 << 6) | ||
175 | #define V3_LB_BASE2_ENABLE (1 << 0) | ||
176 | |||
177 | #define v3_addr_to_lb_base2(a) (((a) >> 16) & V3_LB_BASE2_ADR_BASE) | ||
178 | |||
179 | /* | ||
180 | * LB_MAP2 register bits (Local bus -> PCI IO) | ||
181 | */ | ||
182 | #define V3_LB_MAP2_MAP_ADR 0xff00 | ||
183 | |||
184 | #define v3_addr_to_lb_map2(a) (((a) >> 16) & V3_LB_MAP2_MAP_ADR) | ||
185 | |||
186 | #endif | ||
diff --git a/include/asm-arm/hardware/sa1111.h b/include/asm-arm/hardware/sa1111.h new file mode 100644 index 000000000000..319aea064c36 --- /dev/null +++ b/include/asm-arm/hardware/sa1111.h | |||
@@ -0,0 +1,602 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/hardware/SA-1111.h | ||
3 | * | ||
4 | * Copyright (C) 2000 John G Dorsey <john+@cs.cmu.edu> | ||
5 | * | ||
6 | * This file contains definitions for the SA-1111 Companion Chip. | ||
7 | * (Structure and naming borrowed from SA-1101.h, by Peter Danielsson.) | ||
8 | * | ||
9 | * Macro that calculates real address for registers in the SA-1111 | ||
10 | */ | ||
11 | |||
12 | #ifndef _ASM_ARCH_SA1111 | ||
13 | #define _ASM_ARCH_SA1111 | ||
14 | |||
15 | #include <asm/arch/bitfield.h> | ||
16 | |||
17 | /* | ||
18 | * The SA1111 is always located at virtual 0xf4000000, and is always | ||
19 | * "native" endian. | ||
20 | */ | ||
21 | |||
22 | #define SA1111_VBASE 0xf4000000 | ||
23 | |||
24 | /* Don't use these! */ | ||
25 | #define SA1111_p2v( x ) ((x) - SA1111_BASE + SA1111_VBASE) | ||
26 | #define SA1111_v2p( x ) ((x) - SA1111_VBASE + SA1111_BASE) | ||
27 | |||
28 | #ifndef __ASSEMBLY__ | ||
29 | #define _SA1111(x) ((x) + sa1111->resource.start) | ||
30 | #endif | ||
31 | |||
32 | /* | ||
33 | * 26 bits of the SA-1110 address bus are available to the SA-1111. | ||
34 | * Use these when feeding target addresses to the DMA engines. | ||
35 | */ | ||
36 | |||
37 | #define SA1111_ADDR_WIDTH (26) | ||
38 | #define SA1111_ADDR_MASK ((1<<SA1111_ADDR_WIDTH)-1) | ||
39 | #define SA1111_DMA_ADDR(x) ((x)&SA1111_ADDR_MASK) | ||
40 | |||
41 | /* | ||
42 | * Don't ask the (SAC) DMA engines to move less than this amount. | ||
43 | */ | ||
44 | |||
45 | #define SA1111_SAC_DMA_MIN_XFER (0x800) | ||
46 | |||
47 | /* | ||
48 | * SA1111 register definitions. | ||
49 | */ | ||
50 | #define __CCREG(x) __REGP(SA1111_VBASE + (x)) | ||
51 | |||
52 | #define sa1111_writel(val,addr) __raw_writel(val, addr) | ||
53 | #define sa1111_readl(addr) __raw_readl(addr) | ||
54 | |||
55 | /* | ||
56 | * System Bus Interface (SBI) | ||
57 | * | ||
58 | * Registers | ||
59 | * SKCR Control Register | ||
60 | * SMCR Shared Memory Controller Register | ||
61 | * SKID ID Register | ||
62 | */ | ||
63 | #define SA1111_SKCR 0x0000 | ||
64 | #define SA1111_SMCR 0x0004 | ||
65 | #define SA1111_SKID 0x0008 | ||
66 | |||
67 | #define SKCR_PLL_BYPASS (1<<0) | ||
68 | #define SKCR_RCLKEN (1<<1) | ||
69 | #define SKCR_SLEEP (1<<2) | ||
70 | #define SKCR_DOZE (1<<3) | ||
71 | #define SKCR_VCO_OFF (1<<4) | ||
72 | #define SKCR_SCANTSTEN (1<<5) | ||
73 | #define SKCR_CLKTSTEN (1<<6) | ||
74 | #define SKCR_RDYEN (1<<7) | ||
75 | #define SKCR_SELAC (1<<8) | ||
76 | #define SKCR_OPPC (1<<9) | ||
77 | #define SKCR_PLLTSTEN (1<<10) | ||
78 | #define SKCR_USBIOTSTEN (1<<11) | ||
79 | /* | ||
80 | * Don't believe the specs! Take them, throw them outside. Leave them | ||
81 | * there for a week. Spit on them. Walk on them. Stamp on them. | ||
82 | * Pour gasoline over them and finally burn them. Now think about coding. | ||
83 | * - The October 1999 errata (278260-007) says its bit 13, 1 to enable. | ||
84 | * - The Feb 2001 errata (278260-010) says that the previous errata | ||
85 | * (278260-009) is wrong, and its bit actually 12, fixed in spec | ||
86 | * 278242-003. | ||
87 | * - The SA1111 manual (278242) says bit 12, but 0 to enable. | ||
88 | * - Reality is bit 13, 1 to enable. | ||
89 | * -- rmk | ||
90 | */ | ||
91 | #define SKCR_OE_EN (1<<13) | ||
92 | |||
93 | #define SMCR_DTIM (1<<0) | ||
94 | #define SMCR_MBGE (1<<1) | ||
95 | #define SMCR_DRAC_0 (1<<2) | ||
96 | #define SMCR_DRAC_1 (1<<3) | ||
97 | #define SMCR_DRAC_2 (1<<4) | ||
98 | #define SMCR_DRAC Fld(3, 2) | ||
99 | #define SMCR_CLAT (1<<5) | ||
100 | |||
101 | #define SKID_SIREV_MASK (0x000000f0) | ||
102 | #define SKID_MTREV_MASK (0x0000000f) | ||
103 | #define SKID_ID_MASK (0xffffff00) | ||
104 | #define SKID_SA1111_ID (0x690cc200) | ||
105 | |||
106 | /* | ||
107 | * System Controller | ||
108 | * | ||
109 | * Registers | ||
110 | * SKPCR Power Control Register | ||
111 | * SKCDR Clock Divider Register | ||
112 | * SKAUD Audio Clock Divider Register | ||
113 | * SKPMC PS/2 Mouse Clock Divider Register | ||
114 | * SKPTC PS/2 Track Pad Clock Divider Register | ||
115 | * SKPEN0 PWM0 Enable Register | ||
116 | * SKPWM0 PWM0 Clock Register | ||
117 | * SKPEN1 PWM1 Enable Register | ||
118 | * SKPWM1 PWM1 Clock Register | ||
119 | */ | ||
120 | #define SA1111_SKPCR 0x0200 | ||
121 | #define SA1111_SKCDR 0x0204 | ||
122 | #define SA1111_SKAUD 0x0208 | ||
123 | #define SA1111_SKPMC 0x020c | ||
124 | #define SA1111_SKPTC 0x0210 | ||
125 | #define SA1111_SKPEN0 0x0214 | ||
126 | #define SA1111_SKPWM0 0x0218 | ||
127 | #define SA1111_SKPEN1 0x021c | ||
128 | #define SA1111_SKPWM1 0x0220 | ||
129 | |||
130 | #define SKPCR_UCLKEN (1<<0) | ||
131 | #define SKPCR_ACCLKEN (1<<1) | ||
132 | #define SKPCR_I2SCLKEN (1<<2) | ||
133 | #define SKPCR_L3CLKEN (1<<3) | ||
134 | #define SKPCR_SCLKEN (1<<4) | ||
135 | #define SKPCR_PMCLKEN (1<<5) | ||
136 | #define SKPCR_PTCLKEN (1<<6) | ||
137 | #define SKPCR_DCLKEN (1<<7) | ||
138 | #define SKPCR_PWMCLKEN (1<<8) | ||
139 | |||
140 | /* | ||
141 | * USB Host controller | ||
142 | */ | ||
143 | #define SA1111_USB 0x0400 | ||
144 | |||
145 | /* | ||
146 | * Offsets from SA1111_USB_BASE | ||
147 | */ | ||
148 | #define SA1111_USB_STATUS 0x0118 | ||
149 | #define SA1111_USB_RESET 0x011c | ||
150 | #define SA1111_USB_IRQTEST 0x0120 | ||
151 | |||
152 | #define USB_RESET_FORCEIFRESET (1 << 0) | ||
153 | #define USB_RESET_FORCEHCRESET (1 << 1) | ||
154 | #define USB_RESET_CLKGENRESET (1 << 2) | ||
155 | #define USB_RESET_SIMSCALEDOWN (1 << 3) | ||
156 | #define USB_RESET_USBINTTEST (1 << 4) | ||
157 | #define USB_RESET_SLEEPSTBYEN (1 << 5) | ||
158 | #define USB_RESET_PWRSENSELOW (1 << 6) | ||
159 | #define USB_RESET_PWRCTRLLOW (1 << 7) | ||
160 | |||
161 | #define USB_STATUS_IRQHCIRMTWKUP (1 << 7) | ||
162 | #define USB_STATUS_IRQHCIBUFFACC (1 << 8) | ||
163 | #define USB_STATUS_NIRQHCIM (1 << 9) | ||
164 | #define USB_STATUS_NHCIMFCLR (1 << 10) | ||
165 | #define USB_STATUS_USBPWRSENSE (1 << 11) | ||
166 | |||
167 | /* | ||
168 | * Serial Audio Controller | ||
169 | * | ||
170 | * Registers | ||
171 | * SACR0 Serial Audio Common Control Register | ||
172 | * SACR1 Serial Audio Alternate Mode (I2C/MSB) Control Register | ||
173 | * SACR2 Serial Audio AC-link Control Register | ||
174 | * SASR0 Serial Audio I2S/MSB Interface & FIFO Status Register | ||
175 | * SASR1 Serial Audio AC-link Interface & FIFO Status Register | ||
176 | * SASCR Serial Audio Status Clear Register | ||
177 | * L3_CAR L3 Control Bus Address Register | ||
178 | * L3_CDR L3 Control Bus Data Register | ||
179 | * ACCAR AC-link Command Address Register | ||
180 | * ACCDR AC-link Command Data Register | ||
181 | * ACSAR AC-link Status Address Register | ||
182 | * ACSDR AC-link Status Data Register | ||
183 | * SADTCS Serial Audio DMA Transmit Control/Status Register | ||
184 | * SADTSA Serial Audio DMA Transmit Buffer Start Address A | ||
185 | * SADTCA Serial Audio DMA Transmit Buffer Count Register A | ||
186 | * SADTSB Serial Audio DMA Transmit Buffer Start Address B | ||
187 | * SADTCB Serial Audio DMA Transmit Buffer Count Register B | ||
188 | * SADRCS Serial Audio DMA Receive Control/Status Register | ||
189 | * SADRSA Serial Audio DMA Receive Buffer Start Address A | ||
190 | * SADRCA Serial Audio DMA Receive Buffer Count Register A | ||
191 | * SADRSB Serial Audio DMA Receive Buffer Start Address B | ||
192 | * SADRCB Serial Audio DMA Receive Buffer Count Register B | ||
193 | * SAITR Serial Audio Interrupt Test Register | ||
194 | * SADR Serial Audio Data Register (16 x 32-bit) | ||
195 | */ | ||
196 | |||
197 | #define _SACR0 _SA1111( 0x0600 ) | ||
198 | #define _SACR1 _SA1111( 0x0604 ) | ||
199 | #define _SACR2 _SA1111( 0x0608 ) | ||
200 | #define _SASR0 _SA1111( 0x060c ) | ||
201 | #define _SASR1 _SA1111( 0x0610 ) | ||
202 | #define _SASCR _SA1111( 0x0618 ) | ||
203 | #define _L3_CAR _SA1111( 0x061c ) | ||
204 | #define _L3_CDR _SA1111( 0x0620 ) | ||
205 | #define _ACCAR _SA1111( 0x0624 ) | ||
206 | #define _ACCDR _SA1111( 0x0628 ) | ||
207 | #define _ACSAR _SA1111( 0x062c ) | ||
208 | #define _ACSDR _SA1111( 0x0630 ) | ||
209 | #define _SADTCS _SA1111( 0x0634 ) | ||
210 | #define _SADTSA _SA1111( 0x0638 ) | ||
211 | #define _SADTCA _SA1111( 0x063c ) | ||
212 | #define _SADTSB _SA1111( 0x0640 ) | ||
213 | #define _SADTCB _SA1111( 0x0644 ) | ||
214 | #define _SADRCS _SA1111( 0x0648 ) | ||
215 | #define _SADRSA _SA1111( 0x064c ) | ||
216 | #define _SADRCA _SA1111( 0x0650 ) | ||
217 | #define _SADRSB _SA1111( 0x0654 ) | ||
218 | #define _SADRCB _SA1111( 0x0658 ) | ||
219 | #define _SAITR _SA1111( 0x065c ) | ||
220 | #define _SADR _SA1111( 0x0680 ) | ||
221 | |||
222 | #define SACR0 __CCREG(0x0600) | ||
223 | #define SACR1 __CCREG(0x0604) | ||
224 | #define SACR2 __CCREG(0x0608) | ||
225 | #define SASR0 __CCREG(0x060c) | ||
226 | #define SASR1 __CCREG(0x0610) | ||
227 | #define SASCR __CCREG(0x0618) | ||
228 | #define L3_CAR __CCREG(0x061c) | ||
229 | #define L3_CDR __CCREG(0x0620) | ||
230 | #define ACCAR __CCREG(0x0624) | ||
231 | #define ACCDR __CCREG(0x0628) | ||
232 | #define ACSAR __CCREG(0x062c) | ||
233 | #define ACSDR __CCREG(0x0630) | ||
234 | #define SADTCS __CCREG(0x0634) | ||
235 | #define SADTSA __CCREG(0x0638) | ||
236 | #define SADTCA __CCREG(0x063c) | ||
237 | #define SADTSB __CCREG(0x0640) | ||
238 | #define SADTCB __CCREG(0x0644) | ||
239 | #define SADRCS __CCREG(0x0648) | ||
240 | #define SADRSA __CCREG(0x064c) | ||
241 | #define SADRCA __CCREG(0x0650) | ||
242 | #define SADRSB __CCREG(0x0654) | ||
243 | #define SADRCB __CCREG(0x0658) | ||
244 | #define SAITR __CCREG(0x065c) | ||
245 | #define SADR __CCREG(0x0680) | ||
246 | |||
247 | #define SACR0_ENB (1<<0) | ||
248 | #define SACR0_BCKD (1<<2) | ||
249 | #define SACR0_RST (1<<3) | ||
250 | |||
251 | #define SACR1_AMSL (1<<0) | ||
252 | #define SACR1_L3EN (1<<1) | ||
253 | #define SACR1_L3MB (1<<2) | ||
254 | #define SACR1_DREC (1<<3) | ||
255 | #define SACR1_DRPL (1<<4) | ||
256 | #define SACR1_ENLBF (1<<5) | ||
257 | |||
258 | #define SACR2_TS3V (1<<0) | ||
259 | #define SACR2_TS4V (1<<1) | ||
260 | #define SACR2_WKUP (1<<2) | ||
261 | #define SACR2_DREC (1<<3) | ||
262 | #define SACR2_DRPL (1<<4) | ||
263 | #define SACR2_ENLBF (1<<5) | ||
264 | #define SACR2_RESET (1<<6) | ||
265 | |||
266 | #define SASR0_TNF (1<<0) | ||
267 | #define SASR0_RNE (1<<1) | ||
268 | #define SASR0_BSY (1<<2) | ||
269 | #define SASR0_TFS (1<<3) | ||
270 | #define SASR0_RFS (1<<4) | ||
271 | #define SASR0_TUR (1<<5) | ||
272 | #define SASR0_ROR (1<<6) | ||
273 | #define SASR0_L3WD (1<<16) | ||
274 | #define SASR0_L3RD (1<<17) | ||
275 | |||
276 | #define SASR1_TNF (1<<0) | ||
277 | #define SASR1_RNE (1<<1) | ||
278 | #define SASR1_BSY (1<<2) | ||
279 | #define SASR1_TFS (1<<3) | ||
280 | #define SASR1_RFS (1<<4) | ||
281 | #define SASR1_TUR (1<<5) | ||
282 | #define SASR1_ROR (1<<6) | ||
283 | #define SASR1_CADT (1<<16) | ||
284 | #define SASR1_SADR (1<<17) | ||
285 | #define SASR1_RSTO (1<<18) | ||
286 | #define SASR1_CLPM (1<<19) | ||
287 | #define SASR1_CRDY (1<<20) | ||
288 | #define SASR1_RS3V (1<<21) | ||
289 | #define SASR1_RS4V (1<<22) | ||
290 | |||
291 | #define SASCR_TUR (1<<5) | ||
292 | #define SASCR_ROR (1<<6) | ||
293 | #define SASCR_DTS (1<<16) | ||
294 | #define SASCR_RDD (1<<17) | ||
295 | #define SASCR_STO (1<<18) | ||
296 | |||
297 | #define SADTCS_TDEN (1<<0) | ||
298 | #define SADTCS_TDIE (1<<1) | ||
299 | #define SADTCS_TDBDA (1<<3) | ||
300 | #define SADTCS_TDSTA (1<<4) | ||
301 | #define SADTCS_TDBDB (1<<5) | ||
302 | #define SADTCS_TDSTB (1<<6) | ||
303 | #define SADTCS_TBIU (1<<7) | ||
304 | |||
305 | #define SADRCS_RDEN (1<<0) | ||
306 | #define SADRCS_RDIE (1<<1) | ||
307 | #define SADRCS_RDBDA (1<<3) | ||
308 | #define SADRCS_RDSTA (1<<4) | ||
309 | #define SADRCS_RDBDB (1<<5) | ||
310 | #define SADRCS_RDSTB (1<<6) | ||
311 | #define SADRCS_RBIU (1<<7) | ||
312 | |||
313 | #define SAD_CS_DEN (1<<0) | ||
314 | #define SAD_CS_DIE (1<<1) /* Not functional on metal 1 */ | ||
315 | #define SAD_CS_DBDA (1<<3) /* Not functional on metal 1 */ | ||
316 | #define SAD_CS_DSTA (1<<4) | ||
317 | #define SAD_CS_DBDB (1<<5) /* Not functional on metal 1 */ | ||
318 | #define SAD_CS_DSTB (1<<6) | ||
319 | #define SAD_CS_BIU (1<<7) /* Not functional on metal 1 */ | ||
320 | |||
321 | #define SAITR_TFS (1<<0) | ||
322 | #define SAITR_RFS (1<<1) | ||
323 | #define SAITR_TUR (1<<2) | ||
324 | #define SAITR_ROR (1<<3) | ||
325 | #define SAITR_CADT (1<<4) | ||
326 | #define SAITR_SADR (1<<5) | ||
327 | #define SAITR_RSTO (1<<6) | ||
328 | #define SAITR_TDBDA (1<<8) | ||
329 | #define SAITR_TDBDB (1<<9) | ||
330 | #define SAITR_RDBDA (1<<10) | ||
331 | #define SAITR_RDBDB (1<<11) | ||
332 | |||
333 | /* | ||
334 | * General-Purpose I/O Interface | ||
335 | * | ||
336 | * Registers | ||
337 | * PA_DDR GPIO Block A Data Direction | ||
338 | * PA_DRR/PA_DWR GPIO Block A Data Value Register (read/write) | ||
339 | * PA_SDR GPIO Block A Sleep Direction | ||
340 | * PA_SSR GPIO Block A Sleep State | ||
341 | * PB_DDR GPIO Block B Data Direction | ||
342 | * PB_DRR/PB_DWR GPIO Block B Data Value Register (read/write) | ||
343 | * PB_SDR GPIO Block B Sleep Direction | ||
344 | * PB_SSR GPIO Block B Sleep State | ||
345 | * PC_DDR GPIO Block C Data Direction | ||
346 | * PC_DRR/PC_DWR GPIO Block C Data Value Register (read/write) | ||
347 | * PC_SDR GPIO Block C Sleep Direction | ||
348 | * PC_SSR GPIO Block C Sleep State | ||
349 | */ | ||
350 | |||
351 | #define _PA_DDR _SA1111( 0x1000 ) | ||
352 | #define _PA_DRR _SA1111( 0x1004 ) | ||
353 | #define _PA_DWR _SA1111( 0x1004 ) | ||
354 | #define _PA_SDR _SA1111( 0x1008 ) | ||
355 | #define _PA_SSR _SA1111( 0x100c ) | ||
356 | #define _PB_DDR _SA1111( 0x1010 ) | ||
357 | #define _PB_DRR _SA1111( 0x1014 ) | ||
358 | #define _PB_DWR _SA1111( 0x1014 ) | ||
359 | #define _PB_SDR _SA1111( 0x1018 ) | ||
360 | #define _PB_SSR _SA1111( 0x101c ) | ||
361 | #define _PC_DDR _SA1111( 0x1020 ) | ||
362 | #define _PC_DRR _SA1111( 0x1024 ) | ||
363 | #define _PC_DWR _SA1111( 0x1024 ) | ||
364 | #define _PC_SDR _SA1111( 0x1028 ) | ||
365 | #define _PC_SSR _SA1111( 0x102c ) | ||
366 | |||
367 | #define SA1111_GPIO 0x1000 | ||
368 | |||
369 | #define SA1111_GPIO_PADDR (0x000) | ||
370 | #define SA1111_GPIO_PADRR (0x004) | ||
371 | #define SA1111_GPIO_PADWR (0x004) | ||
372 | #define SA1111_GPIO_PASDR (0x008) | ||
373 | #define SA1111_GPIO_PASSR (0x00c) | ||
374 | #define SA1111_GPIO_PBDDR (0x010) | ||
375 | #define SA1111_GPIO_PBDRR (0x014) | ||
376 | #define SA1111_GPIO_PBDWR (0x014) | ||
377 | #define SA1111_GPIO_PBSDR (0x018) | ||
378 | #define SA1111_GPIO_PBSSR (0x01c) | ||
379 | #define SA1111_GPIO_PCDDR (0x020) | ||
380 | #define SA1111_GPIO_PCDRR (0x024) | ||
381 | #define SA1111_GPIO_PCDWR (0x024) | ||
382 | #define SA1111_GPIO_PCSDR (0x028) | ||
383 | #define SA1111_GPIO_PCSSR (0x02c) | ||
384 | |||
385 | #define GPIO_A0 (1 << 0) | ||
386 | #define GPIO_A1 (1 << 1) | ||
387 | #define GPIO_A2 (1 << 2) | ||
388 | #define GPIO_A3 (1 << 3) | ||
389 | |||
390 | #define GPIO_B0 (1 << 8) | ||
391 | #define GPIO_B1 (1 << 9) | ||
392 | #define GPIO_B2 (1 << 10) | ||
393 | #define GPIO_B3 (1 << 11) | ||
394 | #define GPIO_B4 (1 << 12) | ||
395 | #define GPIO_B5 (1 << 13) | ||
396 | #define GPIO_B6 (1 << 14) | ||
397 | #define GPIO_B7 (1 << 15) | ||
398 | |||
399 | #define GPIO_C0 (1 << 16) | ||
400 | #define GPIO_C1 (1 << 17) | ||
401 | #define GPIO_C2 (1 << 18) | ||
402 | #define GPIO_C3 (1 << 19) | ||
403 | #define GPIO_C4 (1 << 20) | ||
404 | #define GPIO_C5 (1 << 21) | ||
405 | #define GPIO_C6 (1 << 22) | ||
406 | #define GPIO_C7 (1 << 23) | ||
407 | |||
408 | /* | ||
409 | * Interrupt Controller | ||
410 | * | ||
411 | * Registers | ||
412 | * INTTEST0 Test register 0 | ||
413 | * INTTEST1 Test register 1 | ||
414 | * INTEN0 Interrupt Enable register 0 | ||
415 | * INTEN1 Interrupt Enable register 1 | ||
416 | * INTPOL0 Interrupt Polarity selection 0 | ||
417 | * INTPOL1 Interrupt Polarity selection 1 | ||
418 | * INTTSTSEL Interrupt source selection | ||
419 | * INTSTATCLR0 Interrupt Status/Clear 0 | ||
420 | * INTSTATCLR1 Interrupt Status/Clear 1 | ||
421 | * INTSET0 Interrupt source set 0 | ||
422 | * INTSET1 Interrupt source set 1 | ||
423 | * WAKE_EN0 Wake-up source enable 0 | ||
424 | * WAKE_EN1 Wake-up source enable 1 | ||
425 | * WAKE_POL0 Wake-up polarity selection 0 | ||
426 | * WAKE_POL1 Wake-up polarity selection 1 | ||
427 | */ | ||
428 | #define SA1111_INTC 0x1600 | ||
429 | |||
430 | /* | ||
431 | * These are offsets from the above base. | ||
432 | */ | ||
433 | #define SA1111_INTTEST0 0x0000 | ||
434 | #define SA1111_INTTEST1 0x0004 | ||
435 | #define SA1111_INTEN0 0x0008 | ||
436 | #define SA1111_INTEN1 0x000c | ||
437 | #define SA1111_INTPOL0 0x0010 | ||
438 | #define SA1111_INTPOL1 0x0014 | ||
439 | #define SA1111_INTTSTSEL 0x0018 | ||
440 | #define SA1111_INTSTATCLR0 0x001c | ||
441 | #define SA1111_INTSTATCLR1 0x0020 | ||
442 | #define SA1111_INTSET0 0x0024 | ||
443 | #define SA1111_INTSET1 0x0028 | ||
444 | #define SA1111_WAKEEN0 0x002c | ||
445 | #define SA1111_WAKEEN1 0x0030 | ||
446 | #define SA1111_WAKEPOL0 0x0034 | ||
447 | #define SA1111_WAKEPOL1 0x0038 | ||
448 | |||
449 | /* | ||
450 | * PS/2 Trackpad and Mouse Interfaces | ||
451 | * | ||
452 | * Registers | ||
453 | * PS2CR Control Register | ||
454 | * PS2STAT Status Register | ||
455 | * PS2DATA Transmit/Receive Data register | ||
456 | * PS2CLKDIV Clock Division Register | ||
457 | * PS2PRECNT Clock Precount Register | ||
458 | * PS2TEST1 Test register 1 | ||
459 | * PS2TEST2 Test register 2 | ||
460 | * PS2TEST3 Test register 3 | ||
461 | * PS2TEST4 Test register 4 | ||
462 | */ | ||
463 | |||
464 | #define SA1111_KBD 0x0a00 | ||
465 | #define SA1111_MSE 0x0c00 | ||
466 | |||
467 | /* | ||
468 | * These are offsets from the above bases. | ||
469 | */ | ||
470 | #define SA1111_PS2CR 0x0000 | ||
471 | #define SA1111_PS2STAT 0x0004 | ||
472 | #define SA1111_PS2DATA 0x0008 | ||
473 | #define SA1111_PS2CLKDIV 0x000c | ||
474 | #define SA1111_PS2PRECNT 0x0010 | ||
475 | |||
476 | #define PS2CR_ENA 0x08 | ||
477 | #define PS2CR_FKD 0x02 | ||
478 | #define PS2CR_FKC 0x01 | ||
479 | |||
480 | #define PS2STAT_STP 0x0100 | ||
481 | #define PS2STAT_TXE 0x0080 | ||
482 | #define PS2STAT_TXB 0x0040 | ||
483 | #define PS2STAT_RXF 0x0020 | ||
484 | #define PS2STAT_RXB 0x0010 | ||
485 | #define PS2STAT_ENA 0x0008 | ||
486 | #define PS2STAT_RXP 0x0004 | ||
487 | #define PS2STAT_KBD 0x0002 | ||
488 | #define PS2STAT_KBC 0x0001 | ||
489 | |||
490 | /* | ||
491 | * PCMCIA Interface | ||
492 | * | ||
493 | * Registers | ||
494 | * PCSR Status Register | ||
495 | * PCCR Control Register | ||
496 | * PCSSR Sleep State Register | ||
497 | */ | ||
498 | |||
499 | #define SA1111_PCMCIA 0x1600 | ||
500 | |||
501 | /* | ||
502 | * These are offsets from the above base. | ||
503 | */ | ||
504 | #define SA1111_PCCR 0x0000 | ||
505 | #define SA1111_PCSSR 0x0004 | ||
506 | #define SA1111_PCSR 0x0008 | ||
507 | |||
508 | #define PCSR_S0_READY (1<<0) | ||
509 | #define PCSR_S1_READY (1<<1) | ||
510 | #define PCSR_S0_DETECT (1<<2) | ||
511 | #define PCSR_S1_DETECT (1<<3) | ||
512 | #define PCSR_S0_VS1 (1<<4) | ||
513 | #define PCSR_S0_VS2 (1<<5) | ||
514 | #define PCSR_S1_VS1 (1<<6) | ||
515 | #define PCSR_S1_VS2 (1<<7) | ||
516 | #define PCSR_S0_WP (1<<8) | ||
517 | #define PCSR_S1_WP (1<<9) | ||
518 | #define PCSR_S0_BVD1 (1<<10) | ||
519 | #define PCSR_S0_BVD2 (1<<11) | ||
520 | #define PCSR_S1_BVD1 (1<<12) | ||
521 | #define PCSR_S1_BVD2 (1<<13) | ||
522 | |||
523 | #define PCCR_S0_RST (1<<0) | ||
524 | #define PCCR_S1_RST (1<<1) | ||
525 | #define PCCR_S0_FLT (1<<2) | ||
526 | #define PCCR_S1_FLT (1<<3) | ||
527 | #define PCCR_S0_PWAITEN (1<<4) | ||
528 | #define PCCR_S1_PWAITEN (1<<5) | ||
529 | #define PCCR_S0_PSE (1<<6) | ||
530 | #define PCCR_S1_PSE (1<<7) | ||
531 | |||
532 | #define PCSSR_S0_SLEEP (1<<0) | ||
533 | #define PCSSR_S1_SLEEP (1<<1) | ||
534 | |||
535 | |||
536 | |||
537 | |||
538 | extern struct bus_type sa1111_bus_type; | ||
539 | |||
540 | #define SA1111_DEVID_SBI 0 | ||
541 | #define SA1111_DEVID_SK 1 | ||
542 | #define SA1111_DEVID_USB 2 | ||
543 | #define SA1111_DEVID_SAC 3 | ||
544 | #define SA1111_DEVID_SSP 4 | ||
545 | #define SA1111_DEVID_PS2 5 | ||
546 | #define SA1111_DEVID_GPIO 6 | ||
547 | #define SA1111_DEVID_INT 7 | ||
548 | #define SA1111_DEVID_PCMCIA 8 | ||
549 | |||
550 | struct sa1111_dev { | ||
551 | struct device dev; | ||
552 | unsigned int devid; | ||
553 | struct resource res; | ||
554 | void __iomem *mapbase; | ||
555 | unsigned int skpcr_mask; | ||
556 | unsigned int irq[6]; | ||
557 | u64 dma_mask; | ||
558 | }; | ||
559 | |||
560 | #define SA1111_DEV(_d) container_of((_d), struct sa1111_dev, dev) | ||
561 | |||
562 | #define sa1111_get_drvdata(d) dev_get_drvdata(&(d)->dev) | ||
563 | #define sa1111_set_drvdata(d,p) dev_set_drvdata(&(d)->dev, p) | ||
564 | |||
565 | struct sa1111_driver { | ||
566 | struct device_driver drv; | ||
567 | unsigned int devid; | ||
568 | int (*probe)(struct sa1111_dev *); | ||
569 | int (*remove)(struct sa1111_dev *); | ||
570 | int (*suspend)(struct sa1111_dev *, pm_message_t); | ||
571 | int (*resume)(struct sa1111_dev *); | ||
572 | }; | ||
573 | |||
574 | #define SA1111_DRV(_d) container_of((_d), struct sa1111_driver, drv) | ||
575 | |||
576 | #define SA1111_DRIVER_NAME(_sadev) ((_sadev)->dev.driver->name) | ||
577 | |||
578 | /* | ||
579 | * These frob the SKPCR register. | ||
580 | */ | ||
581 | void sa1111_enable_device(struct sa1111_dev *); | ||
582 | void sa1111_disable_device(struct sa1111_dev *); | ||
583 | |||
584 | unsigned int sa1111_pll_clock(struct sa1111_dev *); | ||
585 | |||
586 | #define SA1111_AUDIO_ACLINK 0 | ||
587 | #define SA1111_AUDIO_I2S 1 | ||
588 | |||
589 | void sa1111_select_audio_mode(struct sa1111_dev *sadev, int mode); | ||
590 | int sa1111_set_audio_rate(struct sa1111_dev *sadev, int rate); | ||
591 | int sa1111_get_audio_rate(struct sa1111_dev *sadev); | ||
592 | |||
593 | int sa1111_check_dma_bug(dma_addr_t addr); | ||
594 | |||
595 | int sa1111_driver_register(struct sa1111_driver *); | ||
596 | void sa1111_driver_unregister(struct sa1111_driver *); | ||
597 | |||
598 | void sa1111_set_io_dir(struct sa1111_dev *sadev, unsigned int bits, unsigned int dir, unsigned int sleep_dir); | ||
599 | void sa1111_set_io(struct sa1111_dev *sadev, unsigned int bits, unsigned int v); | ||
600 | void sa1111_set_sleep_io(struct sa1111_dev *sadev, unsigned int bits, unsigned int v); | ||
601 | |||
602 | #endif /* _ASM_ARCH_SA1111 */ | ||
diff --git a/include/asm-arm/hardware/scoop.h b/include/asm-arm/hardware/scoop.h new file mode 100644 index 000000000000..7ea771ff6144 --- /dev/null +++ b/include/asm-arm/hardware/scoop.h | |||
@@ -0,0 +1,47 @@ | |||
1 | /* | ||
2 | * Definitions for the SCOOP interface found on various Sharp PDAs | ||
3 | * | ||
4 | * Copyright (c) 2004 Richard Purdie | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | */ | ||
11 | |||
12 | #define SCOOP_MCR 0x00 | ||
13 | #define SCOOP_CDR 0x04 | ||
14 | #define SCOOP_CSR 0x08 | ||
15 | #define SCOOP_CPR 0x0C | ||
16 | #define SCOOP_CCR 0x10 | ||
17 | #define SCOOP_IRR 0x14 | ||
18 | #define SCOOP_IRM 0x14 | ||
19 | #define SCOOP_IMR 0x18 | ||
20 | #define SCOOP_ISR 0x1C | ||
21 | #define SCOOP_GPCR 0x20 | ||
22 | #define SCOOP_GPWR 0x24 | ||
23 | #define SCOOP_GPRR 0x28 | ||
24 | |||
25 | #define SCOOP_GPCR_PA22 ( 1 << 12 ) | ||
26 | #define SCOOP_GPCR_PA21 ( 1 << 11 ) | ||
27 | #define SCOOP_GPCR_PA20 ( 1 << 10 ) | ||
28 | #define SCOOP_GPCR_PA19 ( 1 << 9 ) | ||
29 | #define SCOOP_GPCR_PA18 ( 1 << 8 ) | ||
30 | #define SCOOP_GPCR_PA17 ( 1 << 7 ) | ||
31 | #define SCOOP_GPCR_PA16 ( 1 << 6 ) | ||
32 | #define SCOOP_GPCR_PA15 ( 1 << 5 ) | ||
33 | #define SCOOP_GPCR_PA14 ( 1 << 4 ) | ||
34 | #define SCOOP_GPCR_PA13 ( 1 << 3 ) | ||
35 | #define SCOOP_GPCR_PA12 ( 1 << 2 ) | ||
36 | #define SCOOP_GPCR_PA11 ( 1 << 1 ) | ||
37 | |||
38 | struct scoop_config { | ||
39 | unsigned short io_out; | ||
40 | unsigned short io_dir; | ||
41 | }; | ||
42 | |||
43 | void reset_scoop(struct device *dev); | ||
44 | unsigned short set_scoop_gpio(struct device *dev, unsigned short bit); | ||
45 | unsigned short reset_scoop_gpio(struct device *dev, unsigned short bit); | ||
46 | unsigned short read_scoop_reg(struct device *dev, unsigned short reg); | ||
47 | void write_scoop_reg(struct device *dev, unsigned short reg, unsigned short data); | ||
diff --git a/include/asm-arm/hardware/ssp.h b/include/asm-arm/hardware/ssp.h new file mode 100644 index 000000000000..28aa11b769cd --- /dev/null +++ b/include/asm-arm/hardware/ssp.h | |||
@@ -0,0 +1,28 @@ | |||
1 | /* | ||
2 | * ssp.h | ||
3 | * | ||
4 | * Copyright (C) 2003 Russell King, All Rights Reserved. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | */ | ||
10 | #ifndef SSP_H | ||
11 | #define SSP_H | ||
12 | |||
13 | struct ssp_state { | ||
14 | unsigned int cr0; | ||
15 | unsigned int cr1; | ||
16 | }; | ||
17 | |||
18 | int ssp_write_word(u16 data); | ||
19 | int ssp_read_word(void); | ||
20 | void ssp_flush(void); | ||
21 | void ssp_enable(void); | ||
22 | void ssp_disable(void); | ||
23 | void ssp_save_state(struct ssp_state *ssp); | ||
24 | void ssp_restore_state(struct ssp_state *ssp); | ||
25 | int ssp_init(void); | ||
26 | void ssp_exit(void); | ||
27 | |||
28 | #endif | ||
diff --git a/include/asm-arm/hdreg.h b/include/asm-arm/hdreg.h new file mode 100644 index 000000000000..7f7fd1af0af3 --- /dev/null +++ b/include/asm-arm/hdreg.h | |||
@@ -0,0 +1 @@ | |||
#include <asm-generic/hdreg.h> | |||
diff --git a/include/asm-arm/ide.h b/include/asm-arm/ide.h new file mode 100644 index 000000000000..2114acb3d237 --- /dev/null +++ b/include/asm-arm/ide.h | |||
@@ -0,0 +1,36 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/ide.h | ||
3 | * | ||
4 | * Copyright (C) 1994-1996 Linus Torvalds & authors | ||
5 | */ | ||
6 | |||
7 | /* | ||
8 | * This file contains the i386 architecture specific IDE code. | ||
9 | */ | ||
10 | |||
11 | #ifndef __ASMARM_IDE_H | ||
12 | #define __ASMARM_IDE_H | ||
13 | |||
14 | #ifdef __KERNEL__ | ||
15 | |||
16 | #ifndef MAX_HWIFS | ||
17 | #define MAX_HWIFS 4 | ||
18 | #endif | ||
19 | |||
20 | #if !defined(CONFIG_ARCH_L7200) | ||
21 | # define IDE_ARCH_OBSOLETE_INIT | ||
22 | # ifdef CONFIG_ARCH_CLPS7500 | ||
23 | # define ide_default_io_ctl(base) ((base) + 0x206) /* obsolete */ | ||
24 | # else | ||
25 | # define ide_default_io_ctl(base) (0) | ||
26 | # endif | ||
27 | #endif /* !ARCH_L7200 */ | ||
28 | |||
29 | #define __ide_mm_insw(port,addr,len) readsw(port,addr,len) | ||
30 | #define __ide_mm_insl(port,addr,len) readsl(port,addr,len) | ||
31 | #define __ide_mm_outsw(port,addr,len) writesw(port,addr,len) | ||
32 | #define __ide_mm_outsl(port,addr,len) writesl(port,addr,len) | ||
33 | |||
34 | #endif /* __KERNEL__ */ | ||
35 | |||
36 | #endif /* __ASMARM_IDE_H */ | ||
diff --git a/include/asm-arm/io.h b/include/asm-arm/io.h new file mode 100644 index 000000000000..69bc7a3e8160 --- /dev/null +++ b/include/asm-arm/io.h | |||
@@ -0,0 +1,286 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/io.h | ||
3 | * | ||
4 | * Copyright (C) 1996-2000 Russell King | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | * Modifications: | ||
11 | * 16-Sep-1996 RMK Inlined the inx/outx functions & optimised for both | ||
12 | * constant addresses and variable addresses. | ||
13 | * 04-Dec-1997 RMK Moved a lot of this stuff to the new architecture | ||
14 | * specific IO header files. | ||
15 | * 27-Mar-1999 PJB Second parameter of memcpy_toio is const.. | ||
16 | * 04-Apr-1999 PJB Added check_signature. | ||
17 | * 12-Dec-1999 RMK More cleanups | ||
18 | * 18-Jun-2000 RMK Removed virt_to_* and friends definitions | ||
19 | * 05-Oct-2004 BJD Moved memory string functions to use void __iomem | ||
20 | */ | ||
21 | #ifndef __ASM_ARM_IO_H | ||
22 | #define __ASM_ARM_IO_H | ||
23 | |||
24 | #ifdef __KERNEL__ | ||
25 | |||
26 | #include <linux/types.h> | ||
27 | #include <asm/byteorder.h> | ||
28 | #include <asm/memory.h> | ||
29 | #include <asm/arch/hardware.h> | ||
30 | |||
31 | /* | ||
32 | * ISA I/O bus memory addresses are 1:1 with the physical address. | ||
33 | */ | ||
34 | #define isa_virt_to_bus virt_to_phys | ||
35 | #define isa_page_to_bus page_to_phys | ||
36 | #define isa_bus_to_virt phys_to_virt | ||
37 | |||
38 | /* | ||
39 | * Generic IO read/write. These perform native-endian accesses. Note | ||
40 | * that some architectures will want to re-define __raw_{read,write}w. | ||
41 | */ | ||
42 | extern void __raw_writesb(void __iomem *addr, const void *data, int bytelen); | ||
43 | extern void __raw_writesw(void __iomem *addr, const void *data, int wordlen); | ||
44 | extern void __raw_writesl(void __iomem *addr, const void *data, int longlen); | ||
45 | |||
46 | extern void __raw_readsb(void __iomem *addr, void *data, int bytelen); | ||
47 | extern void __raw_readsw(void __iomem *addr, void *data, int wordlen); | ||
48 | extern void __raw_readsl(void __iomem *addr, void *data, int longlen); | ||
49 | |||
50 | #define __raw_writeb(v,a) (__chk_io_ptr(a), *(volatile unsigned char __force *)(a) = (v)) | ||
51 | #define __raw_writew(v,a) (__chk_io_ptr(a), *(volatile unsigned short __force *)(a) = (v)) | ||
52 | #define __raw_writel(v,a) (__chk_io_ptr(a), *(volatile unsigned int __force *)(a) = (v)) | ||
53 | |||
54 | #define __raw_readb(a) (__chk_io_ptr(a), *(volatile unsigned char __force *)(a)) | ||
55 | #define __raw_readw(a) (__chk_io_ptr(a), *(volatile unsigned short __force *)(a)) | ||
56 | #define __raw_readl(a) (__chk_io_ptr(a), *(volatile unsigned int __force *)(a)) | ||
57 | |||
58 | /* | ||
59 | * Bad read/write accesses... | ||
60 | */ | ||
61 | extern void __readwrite_bug(const char *fn); | ||
62 | |||
63 | /* | ||
64 | * Now, pick up the machine-defined IO definitions | ||
65 | */ | ||
66 | #include <asm/arch/io.h> | ||
67 | |||
68 | #ifdef __io_pci | ||
69 | #warning machine class uses buggy __io_pci | ||
70 | #endif | ||
71 | #if defined(__arch_putb) || defined(__arch_putw) || defined(__arch_putl) || \ | ||
72 | defined(__arch_getb) || defined(__arch_getw) || defined(__arch_getl) | ||
73 | #warning machine class uses old __arch_putw or __arch_getw | ||
74 | #endif | ||
75 | |||
76 | /* | ||
77 | * IO port access primitives | ||
78 | * ------------------------- | ||
79 | * | ||
80 | * The ARM doesn't have special IO access instructions; all IO is memory | ||
81 | * mapped. Note that these are defined to perform little endian accesses | ||
82 | * only. Their primary purpose is to access PCI and ISA peripherals. | ||
83 | * | ||
84 | * Note that for a big endian machine, this implies that the following | ||
85 | * big endian mode connectivity is in place, as described by numerious | ||
86 | * ARM documents: | ||
87 | * | ||
88 | * PCI: D0-D7 D8-D15 D16-D23 D24-D31 | ||
89 | * ARM: D24-D31 D16-D23 D8-D15 D0-D7 | ||
90 | * | ||
91 | * The machine specific io.h include defines __io to translate an "IO" | ||
92 | * address to a memory address. | ||
93 | * | ||
94 | * Note that we prevent GCC re-ordering or caching values in expressions | ||
95 | * by introducing sequence points into the in*() definitions. Note that | ||
96 | * __raw_* do not guarantee this behaviour. | ||
97 | * | ||
98 | * The {in,out}[bwl] macros are for emulating x86-style PCI/ISA IO space. | ||
99 | */ | ||
100 | #ifdef __io | ||
101 | #define outb(v,p) __raw_writeb(v,__io(p)) | ||
102 | #define outw(v,p) __raw_writew(cpu_to_le16(v),__io(p)) | ||
103 | #define outl(v,p) __raw_writel(cpu_to_le32(v),__io(p)) | ||
104 | |||
105 | #define inb(p) ({ unsigned int __v = __raw_readb(__io(p)); __v; }) | ||
106 | #define inw(p) ({ unsigned int __v = le16_to_cpu(__raw_readw(__io(p))); __v; }) | ||
107 | #define inl(p) ({ unsigned int __v = le32_to_cpu(__raw_readl(__io(p))); __v; }) | ||
108 | |||
109 | #define outsb(p,d,l) __raw_writesb(__io(p),d,l) | ||
110 | #define outsw(p,d,l) __raw_writesw(__io(p),d,l) | ||
111 | #define outsl(p,d,l) __raw_writesl(__io(p),d,l) | ||
112 | |||
113 | #define insb(p,d,l) __raw_readsb(__io(p),d,l) | ||
114 | #define insw(p,d,l) __raw_readsw(__io(p),d,l) | ||
115 | #define insl(p,d,l) __raw_readsl(__io(p),d,l) | ||
116 | #endif | ||
117 | |||
118 | #define outb_p(val,port) outb((val),(port)) | ||
119 | #define outw_p(val,port) outw((val),(port)) | ||
120 | #define outl_p(val,port) outl((val),(port)) | ||
121 | #define inb_p(port) inb((port)) | ||
122 | #define inw_p(port) inw((port)) | ||
123 | #define inl_p(port) inl((port)) | ||
124 | |||
125 | #define outsb_p(port,from,len) outsb(port,from,len) | ||
126 | #define outsw_p(port,from,len) outsw(port,from,len) | ||
127 | #define outsl_p(port,from,len) outsl(port,from,len) | ||
128 | #define insb_p(port,to,len) insb(port,to,len) | ||
129 | #define insw_p(port,to,len) insw(port,to,len) | ||
130 | #define insl_p(port,to,len) insl(port,to,len) | ||
131 | |||
132 | /* | ||
133 | * String version of IO memory access ops: | ||
134 | */ | ||
135 | extern void _memcpy_fromio(void *, void __iomem *, size_t); | ||
136 | extern void _memcpy_toio(void __iomem *, const void *, size_t); | ||
137 | extern void _memset_io(void __iomem *, int, size_t); | ||
138 | |||
139 | #define mmiowb() | ||
140 | |||
141 | /* | ||
142 | * Memory access primitives | ||
143 | * ------------------------ | ||
144 | * | ||
145 | * These perform PCI memory accesses via an ioremap region. They don't | ||
146 | * take an address as such, but a cookie. | ||
147 | * | ||
148 | * Again, this are defined to perform little endian accesses. See the | ||
149 | * IO port primitives for more information. | ||
150 | */ | ||
151 | #ifdef __mem_pci | ||
152 | #define readb(c) ({ unsigned int __v = __raw_readb(__mem_pci(c)); __v; }) | ||
153 | #define readw(c) ({ unsigned int __v = le16_to_cpu(__raw_readw(__mem_pci(c))); __v; }) | ||
154 | #define readl(c) ({ unsigned int __v = le32_to_cpu(__raw_readl(__mem_pci(c))); __v; }) | ||
155 | #define readb_relaxed(addr) readb(addr) | ||
156 | #define readw_relaxed(addr) readw(addr) | ||
157 | #define readl_relaxed(addr) readl(addr) | ||
158 | |||
159 | #define readsb(p,d,l) __raw_readsb(__mem_pci(p),d,l) | ||
160 | #define readsw(p,d,l) __raw_readsw(__mem_pci(p),d,l) | ||
161 | #define readsl(p,d,l) __raw_readsl(__mem_pci(p),d,l) | ||
162 | |||
163 | #define writeb(v,c) __raw_writeb(v,__mem_pci(c)) | ||
164 | #define writew(v,c) __raw_writew(cpu_to_le16(v),__mem_pci(c)) | ||
165 | #define writel(v,c) __raw_writel(cpu_to_le32(v),__mem_pci(c)) | ||
166 | |||
167 | #define writesb(p,d,l) __raw_writesb(__mem_pci(p),d,l) | ||
168 | #define writesw(p,d,l) __raw_writesw(__mem_pci(p),d,l) | ||
169 | #define writesl(p,d,l) __raw_writesl(__mem_pci(p),d,l) | ||
170 | |||
171 | #define memset_io(c,v,l) _memset_io(__mem_pci(c),(v),(l)) | ||
172 | #define memcpy_fromio(a,c,l) _memcpy_fromio((a),__mem_pci(c),(l)) | ||
173 | #define memcpy_toio(c,a,l) _memcpy_toio(__mem_pci(c),(a),(l)) | ||
174 | |||
175 | #define eth_io_copy_and_sum(s,c,l,b) \ | ||
176 | eth_copy_and_sum((s),__mem_pci(c),(l),(b)) | ||
177 | |||
178 | static inline int | ||
179 | check_signature(void __iomem *io_addr, const unsigned char *signature, | ||
180 | int length) | ||
181 | { | ||
182 | int retval = 0; | ||
183 | do { | ||
184 | if (readb(io_addr) != *signature) | ||
185 | goto out; | ||
186 | io_addr++; | ||
187 | signature++; | ||
188 | length--; | ||
189 | } while (length); | ||
190 | retval = 1; | ||
191 | out: | ||
192 | return retval; | ||
193 | } | ||
194 | |||
195 | #elif !defined(readb) | ||
196 | |||
197 | #define readb(c) (__readwrite_bug("readb"),0) | ||
198 | #define readw(c) (__readwrite_bug("readw"),0) | ||
199 | #define readl(c) (__readwrite_bug("readl"),0) | ||
200 | #define writeb(v,c) __readwrite_bug("writeb") | ||
201 | #define writew(v,c) __readwrite_bug("writew") | ||
202 | #define writel(v,c) __readwrite_bug("writel") | ||
203 | |||
204 | #define eth_io_copy_and_sum(s,c,l,b) __readwrite_bug("eth_io_copy_and_sum") | ||
205 | |||
206 | #define check_signature(io,sig,len) (0) | ||
207 | |||
208 | #endif /* __mem_pci */ | ||
209 | |||
210 | /* | ||
211 | * If this architecture has ISA IO, then define the isa_read/isa_write | ||
212 | * macros. | ||
213 | */ | ||
214 | #ifdef __mem_isa | ||
215 | |||
216 | #define isa_readb(addr) __raw_readb(__mem_isa(addr)) | ||
217 | #define isa_readw(addr) __raw_readw(__mem_isa(addr)) | ||
218 | #define isa_readl(addr) __raw_readl(__mem_isa(addr)) | ||
219 | #define isa_writeb(val,addr) __raw_writeb(val,__mem_isa(addr)) | ||
220 | #define isa_writew(val,addr) __raw_writew(val,__mem_isa(addr)) | ||
221 | #define isa_writel(val,addr) __raw_writel(val,__mem_isa(addr)) | ||
222 | #define isa_memset_io(a,b,c) _memset_io(__mem_isa(a),(b),(c)) | ||
223 | #define isa_memcpy_fromio(a,b,c) _memcpy_fromio((a),__mem_isa(b),(c)) | ||
224 | #define isa_memcpy_toio(a,b,c) _memcpy_toio(__mem_isa((a)),(b),(c)) | ||
225 | |||
226 | #define isa_eth_io_copy_and_sum(a,b,c,d) \ | ||
227 | eth_copy_and_sum((a),__mem_isa(b),(c),(d)) | ||
228 | |||
229 | #else /* __mem_isa */ | ||
230 | |||
231 | #define isa_readb(addr) (__readwrite_bug("isa_readb"),0) | ||
232 | #define isa_readw(addr) (__readwrite_bug("isa_readw"),0) | ||
233 | #define isa_readl(addr) (__readwrite_bug("isa_readl"),0) | ||
234 | #define isa_writeb(val,addr) __readwrite_bug("isa_writeb") | ||
235 | #define isa_writew(val,addr) __readwrite_bug("isa_writew") | ||
236 | #define isa_writel(val,addr) __readwrite_bug("isa_writel") | ||
237 | #define isa_memset_io(a,b,c) __readwrite_bug("isa_memset_io") | ||
238 | #define isa_memcpy_fromio(a,b,c) __readwrite_bug("isa_memcpy_fromio") | ||
239 | #define isa_memcpy_toio(a,b,c) __readwrite_bug("isa_memcpy_toio") | ||
240 | |||
241 | #define isa_eth_io_copy_and_sum(a,b,c,d) \ | ||
242 | __readwrite_bug("isa_eth_io_copy_and_sum") | ||
243 | |||
244 | #endif /* __mem_isa */ | ||
245 | |||
246 | /* | ||
247 | * ioremap and friends. | ||
248 | * | ||
249 | * ioremap takes a PCI memory address, as specified in | ||
250 | * Documentation/IO-mapping.txt. | ||
251 | */ | ||
252 | extern void __iomem * __ioremap(unsigned long, size_t, unsigned long, unsigned long); | ||
253 | extern void __iounmap(void __iomem *addr); | ||
254 | |||
255 | #ifndef __arch_ioremap | ||
256 | #define ioremap(cookie,size) __ioremap(cookie,size,0,1) | ||
257 | #define ioremap_nocache(cookie,size) __ioremap(cookie,size,0,1) | ||
258 | #define ioremap_cached(cookie,size) __ioremap(cookie,size,L_PTE_CACHEABLE,1) | ||
259 | #define iounmap(cookie) __iounmap(cookie) | ||
260 | #else | ||
261 | #define ioremap(cookie,size) __arch_ioremap((cookie),(size),0,1) | ||
262 | #define ioremap_nocache(cookie,size) __arch_ioremap((cookie),(size),0,1) | ||
263 | #define ioremap_cached(cookie,size) __arch_ioremap((cookie),(size),L_PTE_CACHEABLE,1) | ||
264 | #define iounmap(cookie) __arch_iounmap(cookie) | ||
265 | #endif | ||
266 | |||
267 | /* | ||
268 | * can the hardware map this into one segment or not, given no other | ||
269 | * constraints. | ||
270 | */ | ||
271 | #define BIOVEC_MERGEABLE(vec1, vec2) \ | ||
272 | ((bvec_to_phys((vec1)) + (vec1)->bv_len) == bvec_to_phys((vec2))) | ||
273 | |||
274 | /* | ||
275 | * Convert a physical pointer to a virtual kernel pointer for /dev/mem | ||
276 | * access | ||
277 | */ | ||
278 | #define xlate_dev_mem_ptr(p) __va(p) | ||
279 | |||
280 | /* | ||
281 | * Convert a virtual cached pointer to an uncached pointer | ||
282 | */ | ||
283 | #define xlate_dev_kmem_ptr(p) p | ||
284 | |||
285 | #endif /* __KERNEL__ */ | ||
286 | #endif /* __ASM_ARM_IO_H */ | ||
diff --git a/include/asm-arm/ioctl.h b/include/asm-arm/ioctl.h new file mode 100644 index 000000000000..2cbb7d0e9dc6 --- /dev/null +++ b/include/asm-arm/ioctl.h | |||
@@ -0,0 +1,74 @@ | |||
1 | /* | ||
2 | * linux/ioctl.h for Linux by H.H. Bergman. | ||
3 | */ | ||
4 | |||
5 | #ifndef _ASMARM_IOCTL_H | ||
6 | #define _ASMARM_IOCTL_H | ||
7 | |||
8 | /* ioctl command encoding: 32 bits total, command in lower 16 bits, | ||
9 | * size of the parameter structure in the lower 14 bits of the | ||
10 | * upper 16 bits. | ||
11 | * Encoding the size of the parameter structure in the ioctl request | ||
12 | * is useful for catching programs compiled with old versions | ||
13 | * and to avoid overwriting user space outside the user buffer area. | ||
14 | * The highest 2 bits are reserved for indicating the ``access mode''. | ||
15 | * NOTE: This limits the max parameter size to 16kB -1 ! | ||
16 | */ | ||
17 | |||
18 | /* | ||
19 | * The following is for compatibility across the various Linux | ||
20 | * platforms. The i386 ioctl numbering scheme doesn't really enforce | ||
21 | * a type field. De facto, however, the top 8 bits of the lower 16 | ||
22 | * bits are indeed used as a type field, so we might just as well make | ||
23 | * this explicit here. Please be sure to use the decoding macros | ||
24 | * below from now on. | ||
25 | */ | ||
26 | #define _IOC_NRBITS 8 | ||
27 | #define _IOC_TYPEBITS 8 | ||
28 | #define _IOC_SIZEBITS 14 | ||
29 | #define _IOC_DIRBITS 2 | ||
30 | |||
31 | #define _IOC_NRMASK ((1 << _IOC_NRBITS)-1) | ||
32 | #define _IOC_TYPEMASK ((1 << _IOC_TYPEBITS)-1) | ||
33 | #define _IOC_SIZEMASK ((1 << _IOC_SIZEBITS)-1) | ||
34 | #define _IOC_DIRMASK ((1 << _IOC_DIRBITS)-1) | ||
35 | |||
36 | #define _IOC_NRSHIFT 0 | ||
37 | #define _IOC_TYPESHIFT (_IOC_NRSHIFT+_IOC_NRBITS) | ||
38 | #define _IOC_SIZESHIFT (_IOC_TYPESHIFT+_IOC_TYPEBITS) | ||
39 | #define _IOC_DIRSHIFT (_IOC_SIZESHIFT+_IOC_SIZEBITS) | ||
40 | |||
41 | /* | ||
42 | * Direction bits. | ||
43 | */ | ||
44 | #define _IOC_NONE 0U | ||
45 | #define _IOC_WRITE 1U | ||
46 | #define _IOC_READ 2U | ||
47 | |||
48 | #define _IOC(dir,type,nr,size) \ | ||
49 | (((dir) << _IOC_DIRSHIFT) | \ | ||
50 | ((type) << _IOC_TYPESHIFT) | \ | ||
51 | ((nr) << _IOC_NRSHIFT) | \ | ||
52 | ((size) << _IOC_SIZESHIFT)) | ||
53 | |||
54 | /* used to create numbers */ | ||
55 | #define _IO(type,nr) _IOC(_IOC_NONE,(type),(nr),0) | ||
56 | #define _IOR(type,nr,size) _IOC(_IOC_READ,(type),(nr),sizeof(size)) | ||
57 | #define _IOW(type,nr,size) _IOC(_IOC_WRITE,(type),(nr),sizeof(size)) | ||
58 | #define _IOWR(type,nr,size) _IOC(_IOC_READ|_IOC_WRITE,(type),(nr),sizeof(size)) | ||
59 | |||
60 | /* used to decode ioctl numbers.. */ | ||
61 | #define _IOC_DIR(nr) (((nr) >> _IOC_DIRSHIFT) & _IOC_DIRMASK) | ||
62 | #define _IOC_TYPE(nr) (((nr) >> _IOC_TYPESHIFT) & _IOC_TYPEMASK) | ||
63 | #define _IOC_NR(nr) (((nr) >> _IOC_NRSHIFT) & _IOC_NRMASK) | ||
64 | #define _IOC_SIZE(nr) (((nr) >> _IOC_SIZESHIFT) & _IOC_SIZEMASK) | ||
65 | |||
66 | /* ...and for the drivers/sound files... */ | ||
67 | |||
68 | #define IOC_IN (_IOC_WRITE << _IOC_DIRSHIFT) | ||
69 | #define IOC_OUT (_IOC_READ << _IOC_DIRSHIFT) | ||
70 | #define IOC_INOUT ((_IOC_WRITE|_IOC_READ) << _IOC_DIRSHIFT) | ||
71 | #define IOCSIZE_MASK (_IOC_SIZEMASK << _IOC_SIZESHIFT) | ||
72 | #define IOCSIZE_SHIFT (_IOC_SIZESHIFT) | ||
73 | |||
74 | #endif /* _ASMARM_IOCTL_H */ | ||
diff --git a/include/asm-arm/ioctls.h b/include/asm-arm/ioctls.h new file mode 100644 index 000000000000..bb9a7aa10c12 --- /dev/null +++ b/include/asm-arm/ioctls.h | |||
@@ -0,0 +1,80 @@ | |||
1 | #ifndef __ASM_ARM_IOCTLS_H | ||
2 | #define __ASM_ARM_IOCTLS_H | ||
3 | |||
4 | #include <asm/ioctl.h> | ||
5 | |||
6 | /* 0x54 is just a magic number to make these relatively unique ('T') */ | ||
7 | |||
8 | #define TCGETS 0x5401 | ||
9 | #define TCSETS 0x5402 | ||
10 | #define TCSETSW 0x5403 | ||
11 | #define TCSETSF 0x5404 | ||
12 | #define TCGETA 0x5405 | ||
13 | #define TCSETA 0x5406 | ||
14 | #define TCSETAW 0x5407 | ||
15 | #define TCSETAF 0x5408 | ||
16 | #define TCSBRK 0x5409 | ||
17 | #define TCXONC 0x540A | ||
18 | #define TCFLSH 0x540B | ||
19 | #define TIOCEXCL 0x540C | ||
20 | #define TIOCNXCL 0x540D | ||
21 | #define TIOCSCTTY 0x540E | ||
22 | #define TIOCGPGRP 0x540F | ||
23 | #define TIOCSPGRP 0x5410 | ||
24 | #define TIOCOUTQ 0x5411 | ||
25 | #define TIOCSTI 0x5412 | ||
26 | #define TIOCGWINSZ 0x5413 | ||
27 | #define TIOCSWINSZ 0x5414 | ||
28 | #define TIOCMGET 0x5415 | ||
29 | #define TIOCMBIS 0x5416 | ||
30 | #define TIOCMBIC 0x5417 | ||
31 | #define TIOCMSET 0x5418 | ||
32 | #define TIOCGSOFTCAR 0x5419 | ||
33 | #define TIOCSSOFTCAR 0x541A | ||
34 | #define FIONREAD 0x541B | ||
35 | #define TIOCINQ FIONREAD | ||
36 | #define TIOCLINUX 0x541C | ||
37 | #define TIOCCONS 0x541D | ||
38 | #define TIOCGSERIAL 0x541E | ||
39 | #define TIOCSSERIAL 0x541F | ||
40 | #define TIOCPKT 0x5420 | ||
41 | #define FIONBIO 0x5421 | ||
42 | #define TIOCNOTTY 0x5422 | ||
43 | #define TIOCSETD 0x5423 | ||
44 | #define TIOCGETD 0x5424 | ||
45 | #define TCSBRKP 0x5425 /* Needed for POSIX tcsendbreak() */ | ||
46 | #define TIOCSBRK 0x5427 /* BSD compatibility */ | ||
47 | #define TIOCCBRK 0x5428 /* BSD compatibility */ | ||
48 | #define TIOCGSID 0x5429 /* Return the session ID of FD */ | ||
49 | #define TIOCGPTN _IOR('T',0x30, unsigned int) /* Get Pty Number (of pty-mux device) */ | ||
50 | #define TIOCSPTLCK _IOW('T',0x31, int) /* Lock/unlock Pty */ | ||
51 | |||
52 | #define FIONCLEX 0x5450 /* these numbers need to be adjusted. */ | ||
53 | #define FIOCLEX 0x5451 | ||
54 | #define FIOASYNC 0x5452 | ||
55 | #define TIOCSERCONFIG 0x5453 | ||
56 | #define TIOCSERGWILD 0x5454 | ||
57 | #define TIOCSERSWILD 0x5455 | ||
58 | #define TIOCGLCKTRMIOS 0x5456 | ||
59 | #define TIOCSLCKTRMIOS 0x5457 | ||
60 | #define TIOCSERGSTRUCT 0x5458 /* For debugging only */ | ||
61 | #define TIOCSERGETLSR 0x5459 /* Get line status register */ | ||
62 | #define TIOCSERGETMULTI 0x545A /* Get multiport config */ | ||
63 | #define TIOCSERSETMULTI 0x545B /* Set multiport config */ | ||
64 | |||
65 | #define TIOCMIWAIT 0x545C /* wait for a change on serial input line(s) */ | ||
66 | #define TIOCGICOUNT 0x545D /* read serial port inline interrupt counts */ | ||
67 | #define FIOQSIZE 0x545E | ||
68 | |||
69 | /* Used for packet mode */ | ||
70 | #define TIOCPKT_DATA 0 | ||
71 | #define TIOCPKT_FLUSHREAD 1 | ||
72 | #define TIOCPKT_FLUSHWRITE 2 | ||
73 | #define TIOCPKT_STOP 4 | ||
74 | #define TIOCPKT_START 8 | ||
75 | #define TIOCPKT_NOSTOP 16 | ||
76 | #define TIOCPKT_DOSTOP 32 | ||
77 | |||
78 | #define TIOCSER_TEMT 0x01 /* Transmitter physically empty */ | ||
79 | |||
80 | #endif | ||
diff --git a/include/asm-arm/ipc.h b/include/asm-arm/ipc.h new file mode 100644 index 000000000000..a46e3d9c2a3f --- /dev/null +++ b/include/asm-arm/ipc.h | |||
@@ -0,0 +1 @@ | |||
#include <asm-generic/ipc.h> | |||
diff --git a/include/asm-arm/ipcbuf.h b/include/asm-arm/ipcbuf.h new file mode 100644 index 000000000000..97683975f7df --- /dev/null +++ b/include/asm-arm/ipcbuf.h | |||
@@ -0,0 +1,29 @@ | |||
1 | #ifndef __ASMARM_IPCBUF_H | ||
2 | #define __ASMARM_IPCBUF_H | ||
3 | |||
4 | /* | ||
5 | * The ipc64_perm structure for arm architecture. | ||
6 | * Note extra padding because this structure is passed back and forth | ||
7 | * between kernel and user space. | ||
8 | * | ||
9 | * Pad space is left for: | ||
10 | * - 32-bit mode_t and seq | ||
11 | * - 2 miscellaneous 32-bit values | ||
12 | */ | ||
13 | |||
14 | struct ipc64_perm | ||
15 | { | ||
16 | __kernel_key_t key; | ||
17 | __kernel_uid32_t uid; | ||
18 | __kernel_gid32_t gid; | ||
19 | __kernel_uid32_t cuid; | ||
20 | __kernel_gid32_t cgid; | ||
21 | __kernel_mode_t mode; | ||
22 | unsigned short __pad1; | ||
23 | unsigned short seq; | ||
24 | unsigned short __pad2; | ||
25 | unsigned long __unused1; | ||
26 | unsigned long __unused2; | ||
27 | }; | ||
28 | |||
29 | #endif /* __ASMARM_IPCBUF_H */ | ||
diff --git a/include/asm-arm/irq.h b/include/asm-arm/irq.h new file mode 100644 index 000000000000..f97912fbb10f --- /dev/null +++ b/include/asm-arm/irq.h | |||
@@ -0,0 +1,51 @@ | |||
1 | #ifndef __ASM_ARM_IRQ_H | ||
2 | #define __ASM_ARM_IRQ_H | ||
3 | |||
4 | #include <asm/arch/irqs.h> | ||
5 | |||
6 | #ifndef irq_canonicalize | ||
7 | #define irq_canonicalize(i) (i) | ||
8 | #endif | ||
9 | |||
10 | #ifndef NR_IRQS | ||
11 | #define NR_IRQS 128 | ||
12 | #endif | ||
13 | |||
14 | /* | ||
15 | * Use this value to indicate lack of interrupt | ||
16 | * capability | ||
17 | */ | ||
18 | #ifndef NO_IRQ | ||
19 | #define NO_IRQ ((unsigned int)(-1)) | ||
20 | #endif | ||
21 | |||
22 | struct irqaction; | ||
23 | |||
24 | extern void disable_irq_nosync(unsigned int); | ||
25 | extern void disable_irq(unsigned int); | ||
26 | extern void enable_irq(unsigned int); | ||
27 | |||
28 | #define __IRQT_FALEDGE (1 << 0) | ||
29 | #define __IRQT_RISEDGE (1 << 1) | ||
30 | #define __IRQT_LOWLVL (1 << 2) | ||
31 | #define __IRQT_HIGHLVL (1 << 3) | ||
32 | |||
33 | #define IRQT_NOEDGE (0) | ||
34 | #define IRQT_RISING (__IRQT_RISEDGE) | ||
35 | #define IRQT_FALLING (__IRQT_FALEDGE) | ||
36 | #define IRQT_BOTHEDGE (__IRQT_RISEDGE|__IRQT_FALEDGE) | ||
37 | #define IRQT_LOW (__IRQT_LOWLVL) | ||
38 | #define IRQT_HIGH (__IRQT_HIGHLVL) | ||
39 | #define IRQT_PROBE (1 << 4) | ||
40 | |||
41 | int set_irq_type(unsigned int irq, unsigned int type); | ||
42 | void disable_irq_wake(unsigned int irq); | ||
43 | void enable_irq_wake(unsigned int irq); | ||
44 | int setup_irq(unsigned int, struct irqaction *); | ||
45 | |||
46 | struct irqaction; | ||
47 | struct pt_regs; | ||
48 | int handle_IRQ_event(unsigned int, struct pt_regs *, struct irqaction *); | ||
49 | |||
50 | #endif | ||
51 | |||
diff --git a/include/asm-arm/kmap_types.h b/include/asm-arm/kmap_types.h new file mode 100644 index 000000000000..45def13ee17a --- /dev/null +++ b/include/asm-arm/kmap_types.h | |||
@@ -0,0 +1,24 @@ | |||
1 | #ifndef __ARM_KMAP_TYPES_H | ||
2 | #define __ARM_KMAP_TYPES_H | ||
3 | |||
4 | /* | ||
5 | * This is the "bare minimum". AIO seems to require this. | ||
6 | */ | ||
7 | enum km_type { | ||
8 | KM_BOUNCE_READ, | ||
9 | KM_SKB_SUNRPC_DATA, | ||
10 | KM_SKB_DATA_SOFTIRQ, | ||
11 | KM_USER0, | ||
12 | KM_USER1, | ||
13 | KM_BIO_SRC_IRQ, | ||
14 | KM_BIO_DST_IRQ, | ||
15 | KM_PTE0, | ||
16 | KM_PTE1, | ||
17 | KM_IRQ0, | ||
18 | KM_IRQ1, | ||
19 | KM_SOFTIRQ0, | ||
20 | KM_SOFTIRQ1, | ||
21 | KM_TYPE_NR | ||
22 | }; | ||
23 | |||
24 | #endif | ||
diff --git a/include/asm-arm/leds.h b/include/asm-arm/leds.h new file mode 100644 index 000000000000..88ce4124f854 --- /dev/null +++ b/include/asm-arm/leds.h | |||
@@ -0,0 +1,51 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/leds.h | ||
3 | * | ||
4 | * Copyright (C) 1998 Russell King | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | * Event-driven interface for LEDs on machines | ||
11 | * Added led_start and led_stop- Alex Holden, 28th Dec 1998. | ||
12 | */ | ||
13 | #ifndef ASM_ARM_LEDS_H | ||
14 | #define ASM_ARM_LEDS_H | ||
15 | |||
16 | #include <linux/config.h> | ||
17 | |||
18 | typedef enum { | ||
19 | led_idle_start, | ||
20 | led_idle_end, | ||
21 | led_timer, | ||
22 | led_start, | ||
23 | led_stop, | ||
24 | led_claim, /* override idle & timer leds */ | ||
25 | led_release, /* restore idle & timer leds */ | ||
26 | led_start_timer_mode, | ||
27 | led_stop_timer_mode, | ||
28 | led_green_on, | ||
29 | led_green_off, | ||
30 | led_amber_on, | ||
31 | led_amber_off, | ||
32 | led_red_on, | ||
33 | led_red_off, | ||
34 | led_blue_on, | ||
35 | led_blue_off, | ||
36 | /* | ||
37 | * I want this between led_timer and led_start, but | ||
38 | * someone has decided to export this to user space | ||
39 | */ | ||
40 | led_halted | ||
41 | } led_event_t; | ||
42 | |||
43 | /* Use this routine to handle LEDs */ | ||
44 | |||
45 | #ifdef CONFIG_LEDS | ||
46 | extern void (*leds_event)(led_event_t); | ||
47 | #else | ||
48 | #define leds_event(e) | ||
49 | #endif | ||
50 | |||
51 | #endif | ||
diff --git a/include/asm-arm/limits.h b/include/asm-arm/limits.h new file mode 100644 index 000000000000..08d8c6600804 --- /dev/null +++ b/include/asm-arm/limits.h | |||
@@ -0,0 +1,11 @@ | |||
1 | #ifndef __ASM_PIPE_H | ||
2 | #define __ASM_PIPE_H | ||
3 | |||
4 | #ifndef PAGE_SIZE | ||
5 | #include <asm/page.h> | ||
6 | #endif | ||
7 | |||
8 | #define PIPE_BUF PAGE_SIZE | ||
9 | |||
10 | #endif | ||
11 | |||
diff --git a/include/asm-arm/linkage.h b/include/asm-arm/linkage.h new file mode 100644 index 000000000000..dbe4b4e31a5b --- /dev/null +++ b/include/asm-arm/linkage.h | |||
@@ -0,0 +1,7 @@ | |||
1 | #ifndef __ASM_LINKAGE_H | ||
2 | #define __ASM_LINKAGE_H | ||
3 | |||
4 | #define __ALIGN .align 0 | ||
5 | #define __ALIGN_STR ".align 0" | ||
6 | |||
7 | #endif | ||
diff --git a/include/asm-arm/local.h b/include/asm-arm/local.h new file mode 100644 index 000000000000..c11c530f74d0 --- /dev/null +++ b/include/asm-arm/local.h | |||
@@ -0,0 +1 @@ | |||
#include <asm-generic/local.h> | |||
diff --git a/include/asm-arm/locks.h b/include/asm-arm/locks.h new file mode 100644 index 000000000000..c26298f3891f --- /dev/null +++ b/include/asm-arm/locks.h | |||
@@ -0,0 +1,262 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/locks.h | ||
3 | * | ||
4 | * Copyright (C) 2000 Russell King | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | * Interrupt safe locking assembler. | ||
11 | */ | ||
12 | #ifndef __ASM_PROC_LOCKS_H | ||
13 | #define __ASM_PROC_LOCKS_H | ||
14 | |||
15 | #if __LINUX_ARM_ARCH__ >= 6 | ||
16 | |||
17 | #define __down_op(ptr,fail) \ | ||
18 | ({ \ | ||
19 | __asm__ __volatile__( \ | ||
20 | "@ down_op\n" \ | ||
21 | "1: ldrex lr, [%0]\n" \ | ||
22 | " sub lr, lr, %1\n" \ | ||
23 | " strex ip, lr, [%0]\n" \ | ||
24 | " teq ip, #0\n" \ | ||
25 | " bne 1b\n" \ | ||
26 | " teq lr, #0\n" \ | ||
27 | " movmi ip, %0\n" \ | ||
28 | " blmi " #fail \ | ||
29 | : \ | ||
30 | : "r" (ptr), "I" (1) \ | ||
31 | : "ip", "lr", "cc", "memory"); \ | ||
32 | }) | ||
33 | |||
34 | #define __down_op_ret(ptr,fail) \ | ||
35 | ({ \ | ||
36 | unsigned int ret; \ | ||
37 | __asm__ __volatile__( \ | ||
38 | "@ down_op_ret\n" \ | ||
39 | "1: ldrex lr, [%1]\n" \ | ||
40 | " sub lr, lr, %2\n" \ | ||
41 | " strex ip, lr, [%1]\n" \ | ||
42 | " teq ip, #0\n" \ | ||
43 | " bne 1b\n" \ | ||
44 | " teq lr, #0\n" \ | ||
45 | " movmi ip, %1\n" \ | ||
46 | " movpl ip, #0\n" \ | ||
47 | " blmi " #fail "\n" \ | ||
48 | " mov %0, ip" \ | ||
49 | : "=&r" (ret) \ | ||
50 | : "r" (ptr), "I" (1) \ | ||
51 | : "ip", "lr", "cc", "memory"); \ | ||
52 | ret; \ | ||
53 | }) | ||
54 | |||
55 | #define __up_op(ptr,wake) \ | ||
56 | ({ \ | ||
57 | __asm__ __volatile__( \ | ||
58 | "@ up_op\n" \ | ||
59 | "1: ldrex lr, [%0]\n" \ | ||
60 | " add lr, lr, %1\n" \ | ||
61 | " strex ip, lr, [%0]\n" \ | ||
62 | " teq ip, #0\n" \ | ||
63 | " bne 1b\n" \ | ||
64 | " teq lr, #0\n" \ | ||
65 | " movle ip, %0\n" \ | ||
66 | " blle " #wake \ | ||
67 | : \ | ||
68 | : "r" (ptr), "I" (1) \ | ||
69 | : "ip", "lr", "cc", "memory"); \ | ||
70 | }) | ||
71 | |||
72 | /* | ||
73 | * The value 0x01000000 supports up to 128 processors and | ||
74 | * lots of processes. BIAS must be chosen such that sub'ing | ||
75 | * BIAS once per CPU will result in the long remaining | ||
76 | * negative. | ||
77 | */ | ||
78 | #define RW_LOCK_BIAS 0x01000000 | ||
79 | #define RW_LOCK_BIAS_STR "0x01000000" | ||
80 | |||
81 | #define __down_op_write(ptr,fail) \ | ||
82 | ({ \ | ||
83 | __asm__ __volatile__( \ | ||
84 | "@ down_op_write\n" \ | ||
85 | "1: ldrex lr, [%0]\n" \ | ||
86 | " sub lr, lr, %1\n" \ | ||
87 | " strex ip, lr, [%0]\n" \ | ||
88 | " teq ip, #0\n" \ | ||
89 | " bne 1b\n" \ | ||
90 | " teq lr, #0\n" \ | ||
91 | " movne ip, %0\n" \ | ||
92 | " blne " #fail \ | ||
93 | : \ | ||
94 | : "r" (ptr), "I" (RW_LOCK_BIAS) \ | ||
95 | : "ip", "lr", "cc", "memory"); \ | ||
96 | }) | ||
97 | |||
98 | #define __up_op_write(ptr,wake) \ | ||
99 | ({ \ | ||
100 | __asm__ __volatile__( \ | ||
101 | "@ up_op_read\n" \ | ||
102 | "1: ldrex lr, [%0]\n" \ | ||
103 | " add lr, lr, %1\n" \ | ||
104 | " strex ip, lr, [%0]\n" \ | ||
105 | " teq ip, #0\n" \ | ||
106 | " bne 1b\n" \ | ||
107 | " movcs ip, %0\n" \ | ||
108 | " blcs " #wake \ | ||
109 | : \ | ||
110 | : "r" (ptr), "I" (RW_LOCK_BIAS) \ | ||
111 | : "ip", "lr", "cc", "memory"); \ | ||
112 | }) | ||
113 | |||
114 | #define __down_op_read(ptr,fail) \ | ||
115 | __down_op(ptr, fail) | ||
116 | |||
117 | #define __up_op_read(ptr,wake) \ | ||
118 | ({ \ | ||
119 | __asm__ __volatile__( \ | ||
120 | "@ up_op_read\n" \ | ||
121 | "1: ldrex lr, [%0]\n" \ | ||
122 | " add lr, lr, %1\n" \ | ||
123 | " strex ip, lr, [%0]\n" \ | ||
124 | " teq ip, #0\n" \ | ||
125 | " bne 1b\n" \ | ||
126 | " teq lr, #0\n" \ | ||
127 | " moveq ip, %0\n" \ | ||
128 | " bleq " #wake \ | ||
129 | : \ | ||
130 | : "r" (ptr), "I" (1) \ | ||
131 | : "ip", "lr", "cc", "memory"); \ | ||
132 | }) | ||
133 | |||
134 | #else | ||
135 | |||
136 | #define __down_op(ptr,fail) \ | ||
137 | ({ \ | ||
138 | __asm__ __volatile__( \ | ||
139 | "@ down_op\n" \ | ||
140 | " mrs ip, cpsr\n" \ | ||
141 | " orr lr, ip, #128\n" \ | ||
142 | " msr cpsr_c, lr\n" \ | ||
143 | " ldr lr, [%0]\n" \ | ||
144 | " subs lr, lr, %1\n" \ | ||
145 | " str lr, [%0]\n" \ | ||
146 | " msr cpsr_c, ip\n" \ | ||
147 | " movmi ip, %0\n" \ | ||
148 | " blmi " #fail \ | ||
149 | : \ | ||
150 | : "r" (ptr), "I" (1) \ | ||
151 | : "ip", "lr", "cc", "memory"); \ | ||
152 | }) | ||
153 | |||
154 | #define __down_op_ret(ptr,fail) \ | ||
155 | ({ \ | ||
156 | unsigned int ret; \ | ||
157 | __asm__ __volatile__( \ | ||
158 | "@ down_op_ret\n" \ | ||
159 | " mrs ip, cpsr\n" \ | ||
160 | " orr lr, ip, #128\n" \ | ||
161 | " msr cpsr_c, lr\n" \ | ||
162 | " ldr lr, [%1]\n" \ | ||
163 | " subs lr, lr, %2\n" \ | ||
164 | " str lr, [%1]\n" \ | ||
165 | " msr cpsr_c, ip\n" \ | ||
166 | " movmi ip, %1\n" \ | ||
167 | " movpl ip, #0\n" \ | ||
168 | " blmi " #fail "\n" \ | ||
169 | " mov %0, ip" \ | ||
170 | : "=&r" (ret) \ | ||
171 | : "r" (ptr), "I" (1) \ | ||
172 | : "ip", "lr", "cc", "memory"); \ | ||
173 | ret; \ | ||
174 | }) | ||
175 | |||
176 | #define __up_op(ptr,wake) \ | ||
177 | ({ \ | ||
178 | __asm__ __volatile__( \ | ||
179 | "@ up_op\n" \ | ||
180 | " mrs ip, cpsr\n" \ | ||
181 | " orr lr, ip, #128\n" \ | ||
182 | " msr cpsr_c, lr\n" \ | ||
183 | " ldr lr, [%0]\n" \ | ||
184 | " adds lr, lr, %1\n" \ | ||
185 | " str lr, [%0]\n" \ | ||
186 | " msr cpsr_c, ip\n" \ | ||
187 | " movle ip, %0\n" \ | ||
188 | " blle " #wake \ | ||
189 | : \ | ||
190 | : "r" (ptr), "I" (1) \ | ||
191 | : "ip", "lr", "cc", "memory"); \ | ||
192 | }) | ||
193 | |||
194 | /* | ||
195 | * The value 0x01000000 supports up to 128 processors and | ||
196 | * lots of processes. BIAS must be chosen such that sub'ing | ||
197 | * BIAS once per CPU will result in the long remaining | ||
198 | * negative. | ||
199 | */ | ||
200 | #define RW_LOCK_BIAS 0x01000000 | ||
201 | #define RW_LOCK_BIAS_STR "0x01000000" | ||
202 | |||
203 | #define __down_op_write(ptr,fail) \ | ||
204 | ({ \ | ||
205 | __asm__ __volatile__( \ | ||
206 | "@ down_op_write\n" \ | ||
207 | " mrs ip, cpsr\n" \ | ||
208 | " orr lr, ip, #128\n" \ | ||
209 | " msr cpsr_c, lr\n" \ | ||
210 | " ldr lr, [%0]\n" \ | ||
211 | " subs lr, lr, %1\n" \ | ||
212 | " str lr, [%0]\n" \ | ||
213 | " msr cpsr_c, ip\n" \ | ||
214 | " movne ip, %0\n" \ | ||
215 | " blne " #fail \ | ||
216 | : \ | ||
217 | : "r" (ptr), "I" (RW_LOCK_BIAS) \ | ||
218 | : "ip", "lr", "cc", "memory"); \ | ||
219 | }) | ||
220 | |||
221 | #define __up_op_write(ptr,wake) \ | ||
222 | ({ \ | ||
223 | __asm__ __volatile__( \ | ||
224 | "@ up_op_read\n" \ | ||
225 | " mrs ip, cpsr\n" \ | ||
226 | " orr lr, ip, #128\n" \ | ||
227 | " msr cpsr_c, lr\n" \ | ||
228 | " ldr lr, [%0]\n" \ | ||
229 | " adds lr, lr, %1\n" \ | ||
230 | " str lr, [%0]\n" \ | ||
231 | " msr cpsr_c, ip\n" \ | ||
232 | " movcs ip, %0\n" \ | ||
233 | " blcs " #wake \ | ||
234 | : \ | ||
235 | : "r" (ptr), "I" (RW_LOCK_BIAS) \ | ||
236 | : "ip", "lr", "cc", "memory"); \ | ||
237 | }) | ||
238 | |||
239 | #define __down_op_read(ptr,fail) \ | ||
240 | __down_op(ptr, fail) | ||
241 | |||
242 | #define __up_op_read(ptr,wake) \ | ||
243 | ({ \ | ||
244 | __asm__ __volatile__( \ | ||
245 | "@ up_op_read\n" \ | ||
246 | " mrs ip, cpsr\n" \ | ||
247 | " orr lr, ip, #128\n" \ | ||
248 | " msr cpsr_c, lr\n" \ | ||
249 | " ldr lr, [%0]\n" \ | ||
250 | " adds lr, lr, %1\n" \ | ||
251 | " str lr, [%0]\n" \ | ||
252 | " msr cpsr_c, ip\n" \ | ||
253 | " moveq ip, %0\n" \ | ||
254 | " bleq " #wake \ | ||
255 | : \ | ||
256 | : "r" (ptr), "I" (1) \ | ||
257 | : "ip", "lr", "cc", "memory"); \ | ||
258 | }) | ||
259 | |||
260 | #endif | ||
261 | |||
262 | #endif | ||
diff --git a/include/asm-arm/mach/arch.h b/include/asm-arm/mach/arch.h new file mode 100644 index 000000000000..3a32e929ec8c --- /dev/null +++ b/include/asm-arm/mach/arch.h | |||
@@ -0,0 +1,92 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/mach/arch.h | ||
3 | * | ||
4 | * Copyright (C) 2000 Russell King | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | */ | ||
10 | |||
11 | #ifndef __ASSEMBLY__ | ||
12 | |||
13 | struct tag; | ||
14 | struct meminfo; | ||
15 | struct sys_timer; | ||
16 | |||
17 | struct machine_desc { | ||
18 | /* | ||
19 | * Note! The first five elements are used | ||
20 | * by assembler code in head-armv.S | ||
21 | */ | ||
22 | unsigned int nr; /* architecture number */ | ||
23 | unsigned int phys_ram; /* start of physical ram */ | ||
24 | unsigned int phys_io; /* start of physical io */ | ||
25 | unsigned int io_pg_offst; /* byte offset for io | ||
26 | * page tabe entry */ | ||
27 | |||
28 | const char *name; /* architecture name */ | ||
29 | unsigned int param_offset; /* parameter page */ | ||
30 | |||
31 | unsigned int video_start; /* start of video RAM */ | ||
32 | unsigned int video_end; /* end of video RAM */ | ||
33 | |||
34 | unsigned int reserve_lp0 :1; /* never has lp0 */ | ||
35 | unsigned int reserve_lp1 :1; /* never has lp1 */ | ||
36 | unsigned int reserve_lp2 :1; /* never has lp2 */ | ||
37 | unsigned int soft_reboot :1; /* soft reboot */ | ||
38 | void (*fixup)(struct machine_desc *, | ||
39 | struct tag *, char **, | ||
40 | struct meminfo *); | ||
41 | void (*map_io)(void);/* IO mapping function */ | ||
42 | void (*init_irq)(void); | ||
43 | struct sys_timer *timer; /* system tick timer */ | ||
44 | void (*init_machine)(void); | ||
45 | }; | ||
46 | |||
47 | /* | ||
48 | * Set of macros to define architecture features. This is built into | ||
49 | * a table by the linker. | ||
50 | */ | ||
51 | #define MACHINE_START(_type,_name) \ | ||
52 | const struct machine_desc __mach_desc_##_type \ | ||
53 | __attribute__((__section__(".arch.info"))) = { \ | ||
54 | .nr = MACH_TYPE_##_type, \ | ||
55 | .name = _name, | ||
56 | |||
57 | #define MAINTAINER(n) | ||
58 | |||
59 | #define BOOT_MEM(_pram,_pio,_vio) \ | ||
60 | .phys_ram = _pram, \ | ||
61 | .phys_io = _pio, \ | ||
62 | .io_pg_offst = ((_vio)>>18)&0xfffc, | ||
63 | |||
64 | #define BOOT_PARAMS(_params) \ | ||
65 | .param_offset = _params, | ||
66 | |||
67 | #define VIDEO(_start,_end) \ | ||
68 | .video_start = _start, \ | ||
69 | .video_end = _end, | ||
70 | |||
71 | #define DISABLE_PARPORT(_n) \ | ||
72 | .reserve_lp##_n = 1, | ||
73 | |||
74 | #define SOFT_REBOOT \ | ||
75 | .soft_reboot = 1, | ||
76 | |||
77 | #define FIXUP(_func) \ | ||
78 | .fixup = _func, | ||
79 | |||
80 | #define MAPIO(_func) \ | ||
81 | .map_io = _func, | ||
82 | |||
83 | #define INITIRQ(_func) \ | ||
84 | .init_irq = _func, | ||
85 | |||
86 | #define INIT_MACHINE(_func) \ | ||
87 | .init_machine = _func, | ||
88 | |||
89 | #define MACHINE_END \ | ||
90 | }; | ||
91 | |||
92 | #endif | ||
diff --git a/include/asm-arm/mach/dma.h b/include/asm-arm/mach/dma.h new file mode 100644 index 000000000000..31bf716106ee --- /dev/null +++ b/include/asm-arm/mach/dma.h | |||
@@ -0,0 +1,55 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/mach/dma.h | ||
3 | * | ||
4 | * Copyright (C) 1998-2000 Russell King | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | * This header file describes the interface between the generic DMA handler | ||
11 | * (dma.c) and the architecture-specific DMA backends (dma-*.c) | ||
12 | */ | ||
13 | |||
14 | struct dma_struct; | ||
15 | typedef struct dma_struct dma_t; | ||
16 | |||
17 | struct dma_ops { | ||
18 | int (*request)(dmach_t, dma_t *); /* optional */ | ||
19 | void (*free)(dmach_t, dma_t *); /* optional */ | ||
20 | void (*enable)(dmach_t, dma_t *); /* mandatory */ | ||
21 | void (*disable)(dmach_t, dma_t *); /* mandatory */ | ||
22 | int (*residue)(dmach_t, dma_t *); /* optional */ | ||
23 | int (*setspeed)(dmach_t, dma_t *, int); /* optional */ | ||
24 | char *type; | ||
25 | }; | ||
26 | |||
27 | struct dma_struct { | ||
28 | struct scatterlist buf; /* single DMA */ | ||
29 | int sgcount; /* number of DMA SG */ | ||
30 | struct scatterlist *sg; /* DMA Scatter-Gather List */ | ||
31 | |||
32 | unsigned int active:1; /* Transfer active */ | ||
33 | unsigned int invalid:1; /* Address/Count changed */ | ||
34 | unsigned int using_sg:1; /* using scatter list? */ | ||
35 | dmamode_t dma_mode; /* DMA mode */ | ||
36 | int speed; /* DMA speed */ | ||
37 | |||
38 | unsigned int lock; /* Device is allocated */ | ||
39 | const char *device_id; /* Device name */ | ||
40 | |||
41 | unsigned int dma_base; /* Controller base address */ | ||
42 | int dma_irq; /* Controller IRQ */ | ||
43 | struct scatterlist cur_sg; /* Current controller buffer */ | ||
44 | unsigned int state; | ||
45 | |||
46 | struct dma_ops *d_ops; | ||
47 | }; | ||
48 | |||
49 | /* Prototype: void arch_dma_init(dma) | ||
50 | * Purpose : Initialise architecture specific DMA | ||
51 | * Params : dma - pointer to array of DMA structures | ||
52 | */ | ||
53 | extern void arch_dma_init(dma_t *dma); | ||
54 | |||
55 | extern void isa_init_dma(dma_t *dma); | ||
diff --git a/include/asm-arm/mach/flash.h b/include/asm-arm/mach/flash.h new file mode 100644 index 000000000000..a92887d4b2cb --- /dev/null +++ b/include/asm-arm/mach/flash.h | |||
@@ -0,0 +1,34 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/mach/flash.h | ||
3 | * | ||
4 | * Copyright (C) 2003 Russell King, All Rights Reserved. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | */ | ||
10 | #ifndef ASMARM_MACH_FLASH_H | ||
11 | #define ASMARM_MACH_FLASH_H | ||
12 | |||
13 | struct mtd_partition; | ||
14 | |||
15 | /* | ||
16 | * map_name: the map probe function name | ||
17 | * width: width of mapped device | ||
18 | * init: method called at driver/device initialisation | ||
19 | * exit: method called at driver/device removal | ||
20 | * set_vpp: method called to enable or disable VPP | ||
21 | * parts: optional array of mtd_partitions for static partitioning | ||
22 | * nr_parts: number of mtd_partitions for static partitoning | ||
23 | */ | ||
24 | struct flash_platform_data { | ||
25 | const char *map_name; | ||
26 | unsigned int width; | ||
27 | int (*init)(void); | ||
28 | void (*exit)(void); | ||
29 | void (*set_vpp)(int on); | ||
30 | struct mtd_partition *parts; | ||
31 | unsigned int nr_parts; | ||
32 | }; | ||
33 | |||
34 | #endif | ||
diff --git a/include/asm-arm/mach/irda.h b/include/asm-arm/mach/irda.h new file mode 100644 index 000000000000..58984d9c0b0b --- /dev/null +++ b/include/asm-arm/mach/irda.h | |||
@@ -0,0 +1,20 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/mach/irda.h | ||
3 | * | ||
4 | * Copyright (C) 2004 Russell King. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | */ | ||
10 | #ifndef __ASM_ARM_MACH_IRDA_H | ||
11 | #define __ASM_ARM_MACH_IRDA_H | ||
12 | |||
13 | struct irda_platform_data { | ||
14 | int (*startup)(struct device *); | ||
15 | void (*shutdown)(struct device *); | ||
16 | int (*set_power)(struct device *, unsigned int state); | ||
17 | void (*set_speed)(struct device *, unsigned int speed); | ||
18 | }; | ||
19 | |||
20 | #endif | ||
diff --git a/include/asm-arm/mach/irq.h b/include/asm-arm/mach/irq.h new file mode 100644 index 000000000000..a43a353f6c7b --- /dev/null +++ b/include/asm-arm/mach/irq.h | |||
@@ -0,0 +1,127 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/mach/irq.h | ||
3 | * | ||
4 | * Copyright (C) 1995-2000 Russell King. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | */ | ||
10 | #ifndef __ASM_ARM_MACH_IRQ_H | ||
11 | #define __ASM_ARM_MACH_IRQ_H | ||
12 | |||
13 | struct irqdesc; | ||
14 | struct pt_regs; | ||
15 | struct seq_file; | ||
16 | |||
17 | typedef void (*irq_handler_t)(unsigned int, struct irqdesc *, struct pt_regs *); | ||
18 | typedef void (*irq_control_t)(unsigned int); | ||
19 | |||
20 | struct irqchip { | ||
21 | /* | ||
22 | * Acknowledge the IRQ. | ||
23 | * If this is a level-based IRQ, then it is expected to mask the IRQ | ||
24 | * as well. | ||
25 | */ | ||
26 | void (*ack)(unsigned int); | ||
27 | /* | ||
28 | * Mask the IRQ in hardware. | ||
29 | */ | ||
30 | void (*mask)(unsigned int); | ||
31 | /* | ||
32 | * Unmask the IRQ in hardware. | ||
33 | */ | ||
34 | void (*unmask)(unsigned int); | ||
35 | /* | ||
36 | * Ask the hardware to re-trigger the IRQ. | ||
37 | * Note: This method _must_ _not_ call the interrupt handler. | ||
38 | * If you are unable to retrigger the interrupt, do not | ||
39 | * provide a function, or if you do, return non-zero. | ||
40 | */ | ||
41 | int (*retrigger)(unsigned int); | ||
42 | /* | ||
43 | * Set the type of the IRQ. | ||
44 | */ | ||
45 | int (*type)(unsigned int, unsigned int); | ||
46 | /* | ||
47 | * Set wakeup-enable on the selected IRQ | ||
48 | */ | ||
49 | int (*wake)(unsigned int, unsigned int); | ||
50 | |||
51 | #ifdef CONFIG_SMP | ||
52 | /* | ||
53 | * Route an interrupt to a CPU | ||
54 | */ | ||
55 | void (*set_cpu)(struct irqdesc *desc, unsigned int irq, unsigned int cpu); | ||
56 | #endif | ||
57 | }; | ||
58 | |||
59 | struct irqdesc { | ||
60 | irq_handler_t handle; | ||
61 | struct irqchip *chip; | ||
62 | struct irqaction *action; | ||
63 | struct list_head pend; | ||
64 | void *chipdata; | ||
65 | void *data; | ||
66 | unsigned int disable_depth; | ||
67 | |||
68 | unsigned int triggered: 1; /* IRQ has occurred */ | ||
69 | unsigned int running : 1; /* IRQ is running */ | ||
70 | unsigned int pending : 1; /* IRQ is pending */ | ||
71 | unsigned int probing : 1; /* IRQ in use for a probe */ | ||
72 | unsigned int probe_ok : 1; /* IRQ can be used for probe */ | ||
73 | unsigned int valid : 1; /* IRQ claimable */ | ||
74 | unsigned int noautoenable : 1; /* don't automatically enable IRQ */ | ||
75 | unsigned int unused :25; | ||
76 | |||
77 | struct proc_dir_entry *procdir; | ||
78 | |||
79 | #ifdef CONFIG_SMP | ||
80 | cpumask_t affinity; | ||
81 | unsigned int cpu; | ||
82 | #endif | ||
83 | |||
84 | /* | ||
85 | * IRQ lock detection | ||
86 | */ | ||
87 | unsigned int lck_cnt; | ||
88 | unsigned int lck_pc; | ||
89 | unsigned int lck_jif; | ||
90 | }; | ||
91 | |||
92 | extern struct irqdesc irq_desc[]; | ||
93 | |||
94 | /* | ||
95 | * This is internal. Do not use it. | ||
96 | */ | ||
97 | extern void (*init_arch_irq)(void); | ||
98 | extern void init_FIQ(void); | ||
99 | extern int show_fiq_list(struct seq_file *, void *); | ||
100 | void __set_irq_handler(unsigned int irq, irq_handler_t, int); | ||
101 | |||
102 | /* | ||
103 | * External stuff. | ||
104 | */ | ||
105 | #define set_irq_handler(irq,handler) __set_irq_handler(irq,handler,0) | ||
106 | #define set_irq_chained_handler(irq,handler) __set_irq_handler(irq,handler,1) | ||
107 | #define set_irq_data(irq,d) do { irq_desc[irq].data = d; } while (0) | ||
108 | #define set_irq_chipdata(irq,d) do { irq_desc[irq].chipdata = d; } while (0) | ||
109 | #define get_irq_chipdata(irq) (irq_desc[irq].chipdata) | ||
110 | |||
111 | void set_irq_chip(unsigned int irq, struct irqchip *); | ||
112 | void set_irq_flags(unsigned int irq, unsigned int flags); | ||
113 | |||
114 | #define IRQF_VALID (1 << 0) | ||
115 | #define IRQF_PROBE (1 << 1) | ||
116 | #define IRQF_NOAUTOEN (1 << 2) | ||
117 | |||
118 | /* | ||
119 | * Built-in IRQ handlers. | ||
120 | */ | ||
121 | void do_level_IRQ(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs); | ||
122 | void do_edge_IRQ(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs); | ||
123 | void do_simple_IRQ(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs); | ||
124 | void do_bad_IRQ(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs); | ||
125 | void dummy_mask_unmask_irq(unsigned int irq); | ||
126 | |||
127 | #endif | ||
diff --git a/include/asm-arm/mach/map.h b/include/asm-arm/mach/map.h new file mode 100644 index 000000000000..9ac47cf8d2e4 --- /dev/null +++ b/include/asm-arm/mach/map.h | |||
@@ -0,0 +1,33 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/map.h | ||
3 | * | ||
4 | * Copyright (C) 1999-2000 Russell King | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | * Page table mapping constructs and function prototypes | ||
11 | */ | ||
12 | struct map_desc { | ||
13 | unsigned long virtual; | ||
14 | unsigned long physical; | ||
15 | unsigned long length; | ||
16 | unsigned int type; | ||
17 | }; | ||
18 | |||
19 | struct meminfo; | ||
20 | |||
21 | #define MT_DEVICE 0 | ||
22 | #define MT_CACHECLEAN 1 | ||
23 | #define MT_MINICLEAN 2 | ||
24 | #define MT_LOW_VECTORS 3 | ||
25 | #define MT_HIGH_VECTORS 4 | ||
26 | #define MT_MEMORY 5 | ||
27 | #define MT_ROM 6 | ||
28 | #define MT_IXP2000_DEVICE 7 | ||
29 | |||
30 | extern void create_memmap_holes(struct meminfo *); | ||
31 | extern void memtable_init(struct meminfo *); | ||
32 | extern void iotable_init(struct map_desc *, int); | ||
33 | extern void setup_io_desc(void); | ||
diff --git a/include/asm-arm/mach/mmc.h b/include/asm-arm/mach/mmc.h new file mode 100644 index 000000000000..1b3555d4b41e --- /dev/null +++ b/include/asm-arm/mach/mmc.h | |||
@@ -0,0 +1,15 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/mach/mmc.h | ||
3 | */ | ||
4 | #ifndef ASMARM_MACH_MMC_H | ||
5 | #define ASMARM_MACH_MMC_H | ||
6 | |||
7 | #include <linux/mmc/protocol.h> | ||
8 | |||
9 | struct mmc_platform_data { | ||
10 | unsigned int ocr_mask; /* available voltages */ | ||
11 | u32 (*translate_vdd)(struct device *, unsigned int); | ||
12 | unsigned int (*status)(struct device *); | ||
13 | }; | ||
14 | |||
15 | #endif | ||
diff --git a/include/asm-arm/mach/pci.h b/include/asm-arm/mach/pci.h new file mode 100644 index 000000000000..25d540ed0079 --- /dev/null +++ b/include/asm-arm/mach/pci.h | |||
@@ -0,0 +1,75 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/mach/pci.h | ||
3 | * | ||
4 | * Copyright (C) 2000 Russell King | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | */ | ||
10 | |||
11 | struct pci_sys_data; | ||
12 | struct pci_bus; | ||
13 | |||
14 | struct hw_pci { | ||
15 | struct list_head buses; | ||
16 | int nr_controllers; | ||
17 | int (*setup)(int nr, struct pci_sys_data *); | ||
18 | struct pci_bus *(*scan)(int nr, struct pci_sys_data *); | ||
19 | void (*preinit)(void); | ||
20 | void (*postinit)(void); | ||
21 | u8 (*swizzle)(struct pci_dev *dev, u8 *pin); | ||
22 | int (*map_irq)(struct pci_dev *dev, u8 slot, u8 pin); | ||
23 | }; | ||
24 | |||
25 | /* | ||
26 | * Per-controller structure | ||
27 | */ | ||
28 | struct pci_sys_data { | ||
29 | struct list_head node; | ||
30 | int busnr; /* primary bus number */ | ||
31 | unsigned long mem_offset; /* bus->cpu memory mapping offset */ | ||
32 | unsigned long io_offset; /* bus->cpu IO mapping offset */ | ||
33 | struct pci_bus *bus; /* PCI bus */ | ||
34 | struct resource *resource[3]; /* Primary PCI bus resources */ | ||
35 | /* Bridge swizzling */ | ||
36 | u8 (*swizzle)(struct pci_dev *, u8 *); | ||
37 | /* IRQ mapping */ | ||
38 | int (*map_irq)(struct pci_dev *, u8, u8); | ||
39 | struct hw_pci *hw; | ||
40 | }; | ||
41 | |||
42 | /* | ||
43 | * This is the standard PCI-PCI bridge swizzling algorithm. | ||
44 | */ | ||
45 | u8 pci_std_swizzle(struct pci_dev *dev, u8 *pinp); | ||
46 | |||
47 | /* | ||
48 | * Call this with your hw_pci struct to initialise the PCI system. | ||
49 | */ | ||
50 | void pci_common_init(struct hw_pci *); | ||
51 | |||
52 | /* | ||
53 | * PCI controllers | ||
54 | */ | ||
55 | extern int iop321_setup(int nr, struct pci_sys_data *); | ||
56 | extern struct pci_bus *iop321_scan_bus(int nr, struct pci_sys_data *); | ||
57 | extern void iop321_init(void); | ||
58 | |||
59 | extern int iop331_setup(int nr, struct pci_sys_data *); | ||
60 | extern struct pci_bus *iop331_scan_bus(int nr, struct pci_sys_data *); | ||
61 | extern void iop331_init(void); | ||
62 | |||
63 | extern int dc21285_setup(int nr, struct pci_sys_data *); | ||
64 | extern struct pci_bus *dc21285_scan_bus(int nr, struct pci_sys_data *); | ||
65 | extern void dc21285_preinit(void); | ||
66 | extern void dc21285_postinit(void); | ||
67 | |||
68 | extern int via82c505_setup(int nr, struct pci_sys_data *); | ||
69 | extern struct pci_bus *via82c505_scan_bus(int nr, struct pci_sys_data *); | ||
70 | extern void via82c505_init(void *sysdata); | ||
71 | |||
72 | extern int pci_v3_setup(int nr, struct pci_sys_data *); | ||
73 | extern struct pci_bus *pci_v3_scan_bus(int nr, struct pci_sys_data *); | ||
74 | extern void pci_v3_preinit(void); | ||
75 | extern void pci_v3_postinit(void); | ||
diff --git a/include/asm-arm/mach/serial_sa1100.h b/include/asm-arm/mach/serial_sa1100.h new file mode 100644 index 000000000000..9162018585df --- /dev/null +++ b/include/asm-arm/mach/serial_sa1100.h | |||
@@ -0,0 +1,32 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/mach/serial_sa1100.h | ||
3 | * | ||
4 | * Author: Nicolas Pitre | ||
5 | * | ||
6 | * Moved to include/asm-arm/mach and changed lots, Russell King | ||
7 | * | ||
8 | * Low level machine dependent UART functions. | ||
9 | */ | ||
10 | #include <linux/config.h> | ||
11 | |||
12 | struct uart_port; | ||
13 | struct uart_info; | ||
14 | |||
15 | /* | ||
16 | * This is a temporary structure for registering these | ||
17 | * functions; it is intended to be discarded after boot. | ||
18 | */ | ||
19 | struct sa1100_port_fns { | ||
20 | void (*set_mctrl)(struct uart_port *, u_int); | ||
21 | u_int (*get_mctrl)(struct uart_port *); | ||
22 | void (*pm)(struct uart_port *, u_int, u_int); | ||
23 | int (*set_wake)(struct uart_port *, u_int); | ||
24 | }; | ||
25 | |||
26 | #ifdef CONFIG_SERIAL_SA1100 | ||
27 | void sa1100_register_uart_fns(struct sa1100_port_fns *fns); | ||
28 | void sa1100_register_uart(int idx, int port); | ||
29 | #else | ||
30 | #define sa1100_register_uart_fns(fns) do { } while (0) | ||
31 | #define sa1100_register_uart(idx,port) do { } while (0) | ||
32 | #endif | ||
diff --git a/include/asm-arm/mach/sharpsl_param.h b/include/asm-arm/mach/sharpsl_param.h new file mode 100644 index 000000000000..7a24ecf04220 --- /dev/null +++ b/include/asm-arm/mach/sharpsl_param.h | |||
@@ -0,0 +1,37 @@ | |||
1 | /* | ||
2 | * Hardware parameter area specific to Sharp SL series devices | ||
3 | * | ||
4 | * Copyright (c) 2005 Richard Purdie | ||
5 | * | ||
6 | * Based on Sharp's 2.4 kernel patches | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | * | ||
12 | */ | ||
13 | |||
14 | struct sharpsl_param_info { | ||
15 | unsigned int comadj_keyword; | ||
16 | unsigned int comadj; | ||
17 | |||
18 | unsigned int uuid_keyword; | ||
19 | unsigned char uuid[16]; | ||
20 | |||
21 | unsigned int touch_keyword; | ||
22 | unsigned int touch_xp; | ||
23 | unsigned int touch_yp; | ||
24 | unsigned int touch_xd; | ||
25 | unsigned int touch_yd; | ||
26 | |||
27 | unsigned int adadj_keyword; | ||
28 | unsigned int adadj; | ||
29 | |||
30 | unsigned int phad_keyword; | ||
31 | unsigned int phadadj; | ||
32 | } __attribute__((packed)); | ||
33 | |||
34 | |||
35 | extern struct sharpsl_param_info sharpsl_param; | ||
36 | extern void sharpsl_save_param(void); | ||
37 | |||
diff --git a/include/asm-arm/mach/time.h b/include/asm-arm/mach/time.h new file mode 100644 index 000000000000..5cf4fd659fd5 --- /dev/null +++ b/include/asm-arm/mach/time.h | |||
@@ -0,0 +1,54 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/mach/time.h | ||
3 | * | ||
4 | * Copyright (C) 2004 MontaVista Software, Inc. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | */ | ||
10 | #ifndef __ASM_ARM_MACH_TIME_H | ||
11 | #define __ASM_ARM_MACH_TIME_H | ||
12 | |||
13 | #include <linux/sysdev.h> | ||
14 | |||
15 | /* | ||
16 | * This is our kernel timer structure. | ||
17 | * | ||
18 | * - init | ||
19 | * Initialise the kernels jiffy timer source, claim interrupt | ||
20 | * using setup_irq. This is called early on during initialisation | ||
21 | * while interrupts are still disabled on the local CPU. | ||
22 | * - suspend | ||
23 | * Suspend the kernel jiffy timer source, if necessary. This | ||
24 | * is called with interrupts disabled, after all normal devices | ||
25 | * have been suspended. If no action is required, set this to | ||
26 | * NULL. | ||
27 | * - resume | ||
28 | * Resume the kernel jiffy timer source, if necessary. This | ||
29 | * is called with interrupts disabled before any normal devices | ||
30 | * are resumed. If no action is required, set this to NULL. | ||
31 | * - offset | ||
32 | * Return the timer offset in microseconds since the last timer | ||
33 | * interrupt. Note: this must take account of any unprocessed | ||
34 | * timer interrupt which may be pending. | ||
35 | */ | ||
36 | struct sys_timer { | ||
37 | struct sys_device dev; | ||
38 | void (*init)(void); | ||
39 | void (*suspend)(void); | ||
40 | void (*resume)(void); | ||
41 | unsigned long (*offset)(void); | ||
42 | }; | ||
43 | |||
44 | extern struct sys_timer *system_timer; | ||
45 | extern void timer_tick(struct pt_regs *); | ||
46 | |||
47 | /* | ||
48 | * Kernel time keeping support. | ||
49 | */ | ||
50 | extern int (*set_rtc)(void); | ||
51 | extern void save_time_delta(struct timespec *delta, struct timespec *rtc); | ||
52 | extern void restore_time_delta(struct timespec *delta, struct timespec *rtc); | ||
53 | |||
54 | #endif | ||
diff --git a/include/asm-arm/mc146818rtc.h b/include/asm-arm/mc146818rtc.h new file mode 100644 index 000000000000..7b81e0c42543 --- /dev/null +++ b/include/asm-arm/mc146818rtc.h | |||
@@ -0,0 +1,28 @@ | |||
1 | /* | ||
2 | * Machine dependent access functions for RTC registers. | ||
3 | */ | ||
4 | #ifndef _ASM_MC146818RTC_H | ||
5 | #define _ASM_MC146818RTC_H | ||
6 | |||
7 | #include <asm/arch/irqs.h> | ||
8 | #include <asm/io.h> | ||
9 | |||
10 | #ifndef RTC_PORT | ||
11 | #define RTC_PORT(x) (0x70 + (x)) | ||
12 | #define RTC_ALWAYS_BCD 1 /* RTC operates in binary mode */ | ||
13 | #endif | ||
14 | |||
15 | /* | ||
16 | * The yet supported machines all access the RTC index register via | ||
17 | * an ISA port access but the way to access the date register differs ... | ||
18 | */ | ||
19 | #define CMOS_READ(addr) ({ \ | ||
20 | outb_p((addr),RTC_PORT(0)); \ | ||
21 | inb_p(RTC_PORT(1)); \ | ||
22 | }) | ||
23 | #define CMOS_WRITE(val, addr) ({ \ | ||
24 | outb_p((addr),RTC_PORT(0)); \ | ||
25 | outb_p((val),RTC_PORT(1)); \ | ||
26 | }) | ||
27 | |||
28 | #endif /* _ASM_MC146818RTC_H */ | ||
diff --git a/include/asm-arm/memory.h b/include/asm-arm/memory.h new file mode 100644 index 000000000000..e47bea7d1723 --- /dev/null +++ b/include/asm-arm/memory.h | |||
@@ -0,0 +1,200 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/memory.h | ||
3 | * | ||
4 | * Copyright (C) 2000-2002 Russell King | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | * Note: this file should not be included by non-asm/.h files | ||
11 | */ | ||
12 | #ifndef __ASM_ARM_MEMORY_H | ||
13 | #define __ASM_ARM_MEMORY_H | ||
14 | |||
15 | #include <linux/config.h> | ||
16 | #include <linux/compiler.h> | ||
17 | #include <asm/arch/memory.h> | ||
18 | |||
19 | #ifndef TASK_SIZE | ||
20 | /* | ||
21 | * TASK_SIZE - the maximum size of a user space task. | ||
22 | * TASK_UNMAPPED_BASE - the lower boundary of the mmap VM area | ||
23 | */ | ||
24 | #define TASK_SIZE (0xbf000000UL) | ||
25 | #define TASK_UNMAPPED_BASE (0x40000000UL) | ||
26 | #endif | ||
27 | |||
28 | /* | ||
29 | * The maximum size of a 26-bit user space task. | ||
30 | */ | ||
31 | #define TASK_SIZE_26 (0x04000000UL) | ||
32 | |||
33 | /* | ||
34 | * Page offset: 3GB | ||
35 | */ | ||
36 | #ifndef PAGE_OFFSET | ||
37 | #define PAGE_OFFSET (0xc0000000UL) | ||
38 | #endif | ||
39 | |||
40 | /* | ||
41 | * Physical vs virtual RAM address space conversion. These are | ||
42 | * private definitions which should NOT be used outside memory.h | ||
43 | * files. Use virt_to_phys/phys_to_virt/__pa/__va instead. | ||
44 | */ | ||
45 | #ifndef __virt_to_phys | ||
46 | #define __virt_to_phys(x) ((x) - PAGE_OFFSET + PHYS_OFFSET) | ||
47 | #define __phys_to_virt(x) ((x) - PHYS_OFFSET + PAGE_OFFSET) | ||
48 | #endif | ||
49 | |||
50 | /* | ||
51 | * The module space lives between the addresses given by TASK_SIZE | ||
52 | * and PAGE_OFFSET - it must be within 32MB of the kernel text. | ||
53 | */ | ||
54 | #define MODULE_END (PAGE_OFFSET) | ||
55 | #define MODULE_START (MODULE_END - 16*1048576) | ||
56 | |||
57 | #if TASK_SIZE > MODULE_START | ||
58 | #error Top of user space clashes with start of module space | ||
59 | #endif | ||
60 | |||
61 | #ifndef __ASSEMBLY__ | ||
62 | |||
63 | /* | ||
64 | * The DMA mask corresponding to the maximum bus address allocatable | ||
65 | * using GFP_DMA. The default here places no restriction on DMA | ||
66 | * allocations. This must be the smallest DMA mask in the system, | ||
67 | * so a successful GFP_DMA allocation will always satisfy this. | ||
68 | */ | ||
69 | #ifndef ISA_DMA_THRESHOLD | ||
70 | #define ISA_DMA_THRESHOLD (0xffffffffULL) | ||
71 | #endif | ||
72 | |||
73 | #ifndef arch_adjust_zones | ||
74 | #define arch_adjust_zones(node,size,holes) do { } while (0) | ||
75 | #endif | ||
76 | |||
77 | /* | ||
78 | * PFNs are used to describe any physical page; this means | ||
79 | * PFN 0 == physical address 0. | ||
80 | * | ||
81 | * This is the PFN of the first RAM page in the kernel | ||
82 | * direct-mapped view. We assume this is the first page | ||
83 | * of RAM in the mem_map as well. | ||
84 | */ | ||
85 | #define PHYS_PFN_OFFSET (PHYS_OFFSET >> PAGE_SHIFT) | ||
86 | |||
87 | /* | ||
88 | * These are *only* valid on the kernel direct mapped RAM memory. | ||
89 | * Note: Drivers should NOT use these. They are the wrong | ||
90 | * translation for translating DMA addresses. Use the driver | ||
91 | * DMA support - see dma-mapping.h. | ||
92 | */ | ||
93 | static inline unsigned long virt_to_phys(void *x) | ||
94 | { | ||
95 | return __virt_to_phys((unsigned long)(x)); | ||
96 | } | ||
97 | |||
98 | static inline void *phys_to_virt(unsigned long x) | ||
99 | { | ||
100 | return (void *)(__phys_to_virt((unsigned long)(x))); | ||
101 | } | ||
102 | |||
103 | /* | ||
104 | * Drivers should NOT use these either. | ||
105 | */ | ||
106 | #define __pa(x) __virt_to_phys((unsigned long)(x)) | ||
107 | #define __va(x) ((void *)__phys_to_virt((unsigned long)(x))) | ||
108 | |||
109 | /* | ||
110 | * Virtual <-> DMA view memory address translations | ||
111 | * Again, these are *only* valid on the kernel direct mapped RAM | ||
112 | * memory. Use of these is *deprecated* (and that doesn't mean | ||
113 | * use the __ prefixed forms instead.) See dma-mapping.h. | ||
114 | */ | ||
115 | static inline __deprecated unsigned long virt_to_bus(void *x) | ||
116 | { | ||
117 | return __virt_to_bus((unsigned long)x); | ||
118 | } | ||
119 | |||
120 | static inline __deprecated void *bus_to_virt(unsigned long x) | ||
121 | { | ||
122 | return (void *)__bus_to_virt(x); | ||
123 | } | ||
124 | |||
125 | /* | ||
126 | * Conversion between a struct page and a physical address. | ||
127 | * | ||
128 | * Note: when converting an unknown physical address to a | ||
129 | * struct page, the resulting pointer must be validated | ||
130 | * using VALID_PAGE(). It must return an invalid struct page | ||
131 | * for any physical address not corresponding to a system | ||
132 | * RAM address. | ||
133 | * | ||
134 | * page_to_pfn(page) convert a struct page * to a PFN number | ||
135 | * pfn_to_page(pfn) convert a _valid_ PFN number to struct page * | ||
136 | * pfn_valid(pfn) indicates whether a PFN number is valid | ||
137 | * | ||
138 | * virt_to_page(k) convert a _valid_ virtual address to struct page * | ||
139 | * virt_addr_valid(k) indicates whether a virtual address is valid | ||
140 | */ | ||
141 | #ifndef CONFIG_DISCONTIGMEM | ||
142 | |||
143 | #define page_to_pfn(page) (((page) - mem_map) + PHYS_PFN_OFFSET) | ||
144 | #define pfn_to_page(pfn) ((mem_map + (pfn)) - PHYS_PFN_OFFSET) | ||
145 | #define pfn_valid(pfn) ((pfn) >= PHYS_PFN_OFFSET && (pfn) < (PHYS_PFN_OFFSET + max_mapnr)) | ||
146 | |||
147 | #define virt_to_page(kaddr) (pfn_to_page(__pa(kaddr) >> PAGE_SHIFT)) | ||
148 | #define virt_addr_valid(kaddr) ((unsigned long)(kaddr) >= PAGE_OFFSET && (unsigned long)(kaddr) < (unsigned long)high_memory) | ||
149 | |||
150 | #define PHYS_TO_NID(addr) (0) | ||
151 | |||
152 | #else /* CONFIG_DISCONTIGMEM */ | ||
153 | |||
154 | /* | ||
155 | * This is more complex. We have a set of mem_map arrays spread | ||
156 | * around in memory. | ||
157 | */ | ||
158 | #include <linux/numa.h> | ||
159 | |||
160 | #define page_to_pfn(page) \ | ||
161 | (( (page) - page_zone(page)->zone_mem_map) \ | ||
162 | + page_zone(page)->zone_start_pfn) | ||
163 | #define pfn_to_page(pfn) \ | ||
164 | (PFN_TO_MAPBASE(pfn) + LOCAL_MAP_NR((pfn) << PAGE_SHIFT)) | ||
165 | #define pfn_valid(pfn) (PFN_TO_NID(pfn) < MAX_NUMNODES) | ||
166 | |||
167 | #define virt_to_page(kaddr) \ | ||
168 | (ADDR_TO_MAPBASE(kaddr) + LOCAL_MAP_NR(kaddr)) | ||
169 | #define virt_addr_valid(kaddr) (KVADDR_TO_NID(kaddr) < MAX_NUMNODES) | ||
170 | |||
171 | /* | ||
172 | * Common discontigmem stuff. | ||
173 | * PHYS_TO_NID is used by the ARM kernel/setup.c | ||
174 | */ | ||
175 | #define PHYS_TO_NID(addr) PFN_TO_NID((addr) >> PAGE_SHIFT) | ||
176 | |||
177 | #endif /* !CONFIG_DISCONTIGMEM */ | ||
178 | |||
179 | /* | ||
180 | * For BIO. "will die". Kill me when bio_to_phys() and bvec_to_phys() die. | ||
181 | */ | ||
182 | #define page_to_phys(page) (page_to_pfn(page) << PAGE_SHIFT) | ||
183 | |||
184 | /* | ||
185 | * Optional device DMA address remapping. Do _not_ use directly! | ||
186 | * We should really eliminate virt_to_bus() here - it's deprecated. | ||
187 | */ | ||
188 | #ifndef __arch_page_to_dma | ||
189 | #define page_to_dma(dev, page) ((dma_addr_t)__virt_to_bus((unsigned long)page_address(page))) | ||
190 | #define dma_to_virt(dev, addr) ((void *)__bus_to_virt(addr)) | ||
191 | #define virt_to_dma(dev, addr) ((dma_addr_t)__virt_to_bus((unsigned long)(addr))) | ||
192 | #else | ||
193 | #define page_to_dma(dev, page) (__arch_page_to_dma(dev, page)) | ||
194 | #define dma_to_virt(dev, addr) (__arch_dma_to_virt(dev, addr)) | ||
195 | #define virt_to_dma(dev, addr) (__arch_virt_to_dma(dev, addr)) | ||
196 | #endif | ||
197 | |||
198 | #endif | ||
199 | |||
200 | #endif | ||
diff --git a/include/asm-arm/mman.h b/include/asm-arm/mman.h new file mode 100644 index 000000000000..8e4f69c4fa5f --- /dev/null +++ b/include/asm-arm/mman.h | |||
@@ -0,0 +1,43 @@ | |||
1 | #ifndef __ARM_MMAN_H__ | ||
2 | #define __ARM_MMAN_H__ | ||
3 | |||
4 | #define PROT_READ 0x1 /* page can be read */ | ||
5 | #define PROT_WRITE 0x2 /* page can be written */ | ||
6 | #define PROT_EXEC 0x4 /* page can be executed */ | ||
7 | #define PROT_SEM 0x8 /* page may be used for atomic ops */ | ||
8 | #define PROT_NONE 0x0 /* page can not be accessed */ | ||
9 | #define PROT_GROWSDOWN 0x01000000 /* mprotect flag: extend change to start of growsdown vma */ | ||
10 | #define PROT_GROWSUP 0x02000000 /* mprotect flag: extend change to end of growsup vma */ | ||
11 | |||
12 | #define MAP_SHARED 0x01 /* Share changes */ | ||
13 | #define MAP_PRIVATE 0x02 /* Changes are private */ | ||
14 | #define MAP_TYPE 0x0f /* Mask for type of mapping */ | ||
15 | #define MAP_FIXED 0x10 /* Interpret addr exactly */ | ||
16 | #define MAP_ANONYMOUS 0x20 /* don't use a file */ | ||
17 | |||
18 | #define MAP_GROWSDOWN 0x0100 /* stack-like segment */ | ||
19 | #define MAP_DENYWRITE 0x0800 /* ETXTBSY */ | ||
20 | #define MAP_EXECUTABLE 0x1000 /* mark it as an executable */ | ||
21 | #define MAP_LOCKED 0x2000 /* pages are locked */ | ||
22 | #define MAP_NORESERVE 0x4000 /* don't check for reservations */ | ||
23 | #define MAP_POPULATE 0x8000 /* populate (prefault) page tables */ | ||
24 | #define MAP_NONBLOCK 0x10000 /* do not block on IO */ | ||
25 | |||
26 | #define MS_ASYNC 1 /* sync memory asynchronously */ | ||
27 | #define MS_INVALIDATE 2 /* invalidate the caches */ | ||
28 | #define MS_SYNC 4 /* synchronous memory sync */ | ||
29 | |||
30 | #define MCL_CURRENT 1 /* lock all current mappings */ | ||
31 | #define MCL_FUTURE 2 /* lock all future mappings */ | ||
32 | |||
33 | #define MADV_NORMAL 0x0 /* default page-in behavior */ | ||
34 | #define MADV_RANDOM 0x1 /* page-in minimum required */ | ||
35 | #define MADV_SEQUENTIAL 0x2 /* read-ahead aggressively */ | ||
36 | #define MADV_WILLNEED 0x3 /* pre-fault pages */ | ||
37 | #define MADV_DONTNEED 0x4 /* discard these pages */ | ||
38 | |||
39 | /* compatibility flags */ | ||
40 | #define MAP_ANON MAP_ANONYMOUS | ||
41 | #define MAP_FILE 0 | ||
42 | |||
43 | #endif /* __ARM_MMAN_H__ */ | ||
diff --git a/include/asm-arm/mmu.h b/include/asm-arm/mmu.h new file mode 100644 index 000000000000..a457cb71984f --- /dev/null +++ b/include/asm-arm/mmu.h | |||
@@ -0,0 +1,16 @@ | |||
1 | #ifndef __ARM_MMU_H | ||
2 | #define __ARM_MMU_H | ||
3 | |||
4 | typedef struct { | ||
5 | #if __LINUX_ARM_ARCH__ >= 6 | ||
6 | unsigned int id; | ||
7 | #endif | ||
8 | } mm_context_t; | ||
9 | |||
10 | #if __LINUX_ARM_ARCH__ >= 6 | ||
11 | #define ASID(mm) ((mm)->context.id & 255) | ||
12 | #else | ||
13 | #define ASID(mm) (0) | ||
14 | #endif | ||
15 | |||
16 | #endif | ||
diff --git a/include/asm-arm/mmu_context.h b/include/asm-arm/mmu_context.h new file mode 100644 index 000000000000..4af9c411c617 --- /dev/null +++ b/include/asm-arm/mmu_context.h | |||
@@ -0,0 +1,96 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/mmu_context.h | ||
3 | * | ||
4 | * Copyright (C) 1996 Russell King. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | * Changelog: | ||
11 | * 27-06-1996 RMK Created | ||
12 | */ | ||
13 | #ifndef __ASM_ARM_MMU_CONTEXT_H | ||
14 | #define __ASM_ARM_MMU_CONTEXT_H | ||
15 | |||
16 | #include <asm/proc-fns.h> | ||
17 | |||
18 | #if __LINUX_ARM_ARCH__ >= 6 | ||
19 | |||
20 | /* | ||
21 | * On ARMv6, we have the following structure in the Context ID: | ||
22 | * | ||
23 | * 31 7 0 | ||
24 | * +-------------------------+-----------+ | ||
25 | * | process ID | ASID | | ||
26 | * +-------------------------+-----------+ | ||
27 | * | context ID | | ||
28 | * +-------------------------------------+ | ||
29 | * | ||
30 | * The ASID is used to tag entries in the CPU caches and TLBs. | ||
31 | * The context ID is used by debuggers and trace logic, and | ||
32 | * should be unique within all running processes. | ||
33 | */ | ||
34 | #define ASID_BITS 8 | ||
35 | #define ASID_MASK ((~0) << ASID_BITS) | ||
36 | |||
37 | extern unsigned int cpu_last_asid; | ||
38 | |||
39 | void __init_new_context(struct task_struct *tsk, struct mm_struct *mm); | ||
40 | void __new_context(struct mm_struct *mm); | ||
41 | |||
42 | static inline void check_context(struct mm_struct *mm) | ||
43 | { | ||
44 | if (unlikely((mm->context.id ^ cpu_last_asid) >> ASID_BITS)) | ||
45 | __new_context(mm); | ||
46 | } | ||
47 | |||
48 | #define init_new_context(tsk,mm) (__init_new_context(tsk,mm),0) | ||
49 | |||
50 | #else | ||
51 | |||
52 | #define check_context(mm) do { } while (0) | ||
53 | #define init_new_context(tsk,mm) 0 | ||
54 | |||
55 | #endif | ||
56 | |||
57 | #define destroy_context(mm) do { } while(0) | ||
58 | |||
59 | /* | ||
60 | * This is called when "tsk" is about to enter lazy TLB mode. | ||
61 | * | ||
62 | * mm: describes the currently active mm context | ||
63 | * tsk: task which is entering lazy tlb | ||
64 | * cpu: cpu number which is entering lazy tlb | ||
65 | * | ||
66 | * tsk->mm will be NULL | ||
67 | */ | ||
68 | static inline void | ||
69 | enter_lazy_tlb(struct mm_struct *mm, struct task_struct *tsk) | ||
70 | { | ||
71 | } | ||
72 | |||
73 | /* | ||
74 | * This is the actual mm switch as far as the scheduler | ||
75 | * is concerned. No registers are touched. We avoid | ||
76 | * calling the CPU specific function when the mm hasn't | ||
77 | * actually changed. | ||
78 | */ | ||
79 | static inline void | ||
80 | switch_mm(struct mm_struct *prev, struct mm_struct *next, | ||
81 | struct task_struct *tsk) | ||
82 | { | ||
83 | unsigned int cpu = smp_processor_id(); | ||
84 | |||
85 | if (prev != next) { | ||
86 | cpu_set(cpu, next->cpu_vm_mask); | ||
87 | check_context(next); | ||
88 | cpu_switch_mm(next->pgd, next); | ||
89 | cpu_clear(cpu, prev->cpu_vm_mask); | ||
90 | } | ||
91 | } | ||
92 | |||
93 | #define deactivate_mm(tsk,mm) do { } while (0) | ||
94 | #define activate_mm(prev,next) switch_mm(prev, next, NULL) | ||
95 | |||
96 | #endif | ||
diff --git a/include/asm-arm/mmzone.h b/include/asm-arm/mmzone.h new file mode 100644 index 000000000000..b87de151f0a4 --- /dev/null +++ b/include/asm-arm/mmzone.h | |||
@@ -0,0 +1,30 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/mmzone.h | ||
3 | * | ||
4 | * 1999-12-29 Nicolas Pitre Created | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | */ | ||
10 | #ifndef __ASM_MMZONE_H | ||
11 | #define __ASM_MMZONE_H | ||
12 | |||
13 | /* | ||
14 | * Currently defined in arch/arm/mm/discontig.c | ||
15 | */ | ||
16 | extern pg_data_t discontig_node_data[]; | ||
17 | |||
18 | /* | ||
19 | * Return a pointer to the node data for node n. | ||
20 | */ | ||
21 | #define NODE_DATA(nid) (&discontig_node_data[nid]) | ||
22 | |||
23 | /* | ||
24 | * NODE_MEM_MAP gives the kaddr for the mem_map of the node. | ||
25 | */ | ||
26 | #define NODE_MEM_MAP(nid) (NODE_DATA(nid)->node_mem_map) | ||
27 | |||
28 | #include <asm/arch/memory.h> | ||
29 | |||
30 | #endif | ||
diff --git a/include/asm-arm/module.h b/include/asm-arm/module.h new file mode 100644 index 000000000000..24b168dc31a3 --- /dev/null +++ b/include/asm-arm/module.h | |||
@@ -0,0 +1,18 @@ | |||
1 | #ifndef _ASM_ARM_MODULE_H | ||
2 | #define _ASM_ARM_MODULE_H | ||
3 | |||
4 | struct mod_arch_specific | ||
5 | { | ||
6 | int foo; | ||
7 | }; | ||
8 | |||
9 | #define Elf_Shdr Elf32_Shdr | ||
10 | #define Elf_Sym Elf32_Sym | ||
11 | #define Elf_Ehdr Elf32_Ehdr | ||
12 | |||
13 | /* | ||
14 | * Include the ARM architecture version. | ||
15 | */ | ||
16 | #define MODULE_ARCH_VERMAGIC "ARMv" __stringify(__LINUX_ARM_ARCH__) " " | ||
17 | |||
18 | #endif /* _ASM_ARM_MODULE_H */ | ||
diff --git a/include/asm-arm/msgbuf.h b/include/asm-arm/msgbuf.h new file mode 100644 index 000000000000..33b35b946eaa --- /dev/null +++ b/include/asm-arm/msgbuf.h | |||
@@ -0,0 +1,31 @@ | |||
1 | #ifndef _ASMARM_MSGBUF_H | ||
2 | #define _ASMARM_MSGBUF_H | ||
3 | |||
4 | /* | ||
5 | * The msqid64_ds structure for arm architecture. | ||
6 | * Note extra padding because this structure is passed back and forth | ||
7 | * between kernel and user space. | ||
8 | * | ||
9 | * Pad space is left for: | ||
10 | * - 64-bit time_t to solve y2038 problem | ||
11 | * - 2 miscellaneous 32-bit values | ||
12 | */ | ||
13 | |||
14 | struct msqid64_ds { | ||
15 | struct ipc64_perm msg_perm; | ||
16 | __kernel_time_t msg_stime; /* last msgsnd time */ | ||
17 | unsigned long __unused1; | ||
18 | __kernel_time_t msg_rtime; /* last msgrcv time */ | ||
19 | unsigned long __unused2; | ||
20 | __kernel_time_t msg_ctime; /* last change time */ | ||
21 | unsigned long __unused3; | ||
22 | unsigned long msg_cbytes; /* current number of bytes on queue */ | ||
23 | unsigned long msg_qnum; /* number of messages in queue */ | ||
24 | unsigned long msg_qbytes; /* max number of bytes on queue */ | ||
25 | __kernel_pid_t msg_lspid; /* pid of last msgsnd */ | ||
26 | __kernel_pid_t msg_lrpid; /* last receive pid */ | ||
27 | unsigned long __unused4; | ||
28 | unsigned long __unused5; | ||
29 | }; | ||
30 | |||
31 | #endif /* _ASMARM_MSGBUF_H */ | ||
diff --git a/include/asm-arm/namei.h b/include/asm-arm/namei.h new file mode 100644 index 000000000000..a402d3b9d0f7 --- /dev/null +++ b/include/asm-arm/namei.h | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/namei.h | ||
3 | * | ||
4 | * Routines to handle famous /usr/gnemul | ||
5 | * Derived from the Sparc version of this file | ||
6 | * | ||
7 | * Included from linux/fs/namei.c | ||
8 | */ | ||
9 | |||
10 | #ifndef __ASMARM_NAMEI_H | ||
11 | #define __ASMARM_NAMEI_H | ||
12 | |||
13 | #define ARM_BSD_EMUL "usr/gnemul/bsd/" | ||
14 | |||
15 | static inline char *__emul_prefix(void) | ||
16 | { | ||
17 | switch (current->personality) { | ||
18 | case PER_BSD: | ||
19 | return ARM_BSD_EMUL; | ||
20 | default: | ||
21 | return NULL; | ||
22 | } | ||
23 | } | ||
24 | |||
25 | #endif /* __ASMARM_NAMEI_H */ | ||
diff --git a/include/asm-arm/numnodes.h b/include/asm-arm/numnodes.h new file mode 100644 index 000000000000..5d2a1034a02e --- /dev/null +++ b/include/asm-arm/numnodes.h | |||
@@ -0,0 +1,24 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/numnodes.h | ||
3 | * | ||
4 | * Copyright (C) 2002 Russell King | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | */ | ||
10 | |||
11 | /* This declaration for the size of the NUMA (CONFIG_DISCONTIGMEM) | ||
12 | * memory node table is the default. | ||
13 | * | ||
14 | * A good place to override this value is include/asm/arch/memory.h. | ||
15 | */ | ||
16 | |||
17 | #ifndef __ASM_ARM_NUMNODES_H | ||
18 | #define __ASM_ARM_NUMNODES_H | ||
19 | |||
20 | #ifndef NODES_SHIFT | ||
21 | # define NODES_SHIFT 2 /* Normally, Max 4 Nodes */ | ||
22 | #endif | ||
23 | |||
24 | #endif | ||
diff --git a/include/asm-arm/nwflash.h b/include/asm-arm/nwflash.h new file mode 100644 index 000000000000..04e5a557a884 --- /dev/null +++ b/include/asm-arm/nwflash.h | |||
@@ -0,0 +1,9 @@ | |||
1 | #ifndef _FLASH_H | ||
2 | #define _FLASH_H | ||
3 | |||
4 | #define FLASH_MINOR 160 /* MAJOR is 10 - miscdevice */ | ||
5 | #define CMD_WRITE_DISABLE 0 | ||
6 | #define CMD_WRITE_ENABLE 0x28 | ||
7 | #define CMD_WRITE_BASE64K_ENABLE 0x47 | ||
8 | |||
9 | #endif /* _FLASH_H */ | ||
diff --git a/include/asm-arm/page.h b/include/asm-arm/page.h new file mode 100644 index 000000000000..4ca3a8e9348f --- /dev/null +++ b/include/asm-arm/page.h | |||
@@ -0,0 +1,197 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/page.h | ||
3 | * | ||
4 | * Copyright (C) 1995-2003 Russell King | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | */ | ||
10 | #ifndef _ASMARM_PAGE_H | ||
11 | #define _ASMARM_PAGE_H | ||
12 | |||
13 | #include <linux/config.h> | ||
14 | |||
15 | /* PAGE_SHIFT determines the page size */ | ||
16 | #define PAGE_SHIFT 12 | ||
17 | #define PAGE_SIZE (1UL << PAGE_SHIFT) | ||
18 | #define PAGE_MASK (~(PAGE_SIZE-1)) | ||
19 | |||
20 | #ifdef __KERNEL__ | ||
21 | |||
22 | /* to align the pointer to the (next) page boundary */ | ||
23 | #define PAGE_ALIGN(addr) (((addr)+PAGE_SIZE-1)&PAGE_MASK) | ||
24 | |||
25 | #ifndef __ASSEMBLY__ | ||
26 | |||
27 | #include <asm/glue.h> | ||
28 | |||
29 | /* | ||
30 | * User Space Model | ||
31 | * ================ | ||
32 | * | ||
33 | * This section selects the correct set of functions for dealing with | ||
34 | * page-based copying and clearing for user space for the particular | ||
35 | * processor(s) we're building for. | ||
36 | * | ||
37 | * We have the following to choose from: | ||
38 | * v3 - ARMv3 | ||
39 | * v4wt - ARMv4 with writethrough cache, without minicache | ||
40 | * v4wb - ARMv4 with writeback cache, without minicache | ||
41 | * v4_mc - ARMv4 with minicache | ||
42 | * xscale - Xscale | ||
43 | */ | ||
44 | #undef _USER | ||
45 | #undef MULTI_USER | ||
46 | |||
47 | #ifdef CONFIG_CPU_COPY_V3 | ||
48 | # ifdef _USER | ||
49 | # define MULTI_USER 1 | ||
50 | # else | ||
51 | # define _USER v3 | ||
52 | # endif | ||
53 | #endif | ||
54 | |||
55 | #ifdef CONFIG_CPU_COPY_V4WT | ||
56 | # ifdef _USER | ||
57 | # define MULTI_USER 1 | ||
58 | # else | ||
59 | # define _USER v4wt | ||
60 | # endif | ||
61 | #endif | ||
62 | |||
63 | #ifdef CONFIG_CPU_COPY_V4WB | ||
64 | # ifdef _USER | ||
65 | # define MULTI_USER 1 | ||
66 | # else | ||
67 | # define _USER v4wb | ||
68 | # endif | ||
69 | #endif | ||
70 | |||
71 | #ifdef CONFIG_CPU_SA1100 | ||
72 | # ifdef _USER | ||
73 | # define MULTI_USER 1 | ||
74 | # else | ||
75 | # define _USER v4_mc | ||
76 | # endif | ||
77 | #endif | ||
78 | |||
79 | #ifdef CONFIG_CPU_XSCALE | ||
80 | # ifdef _USER | ||
81 | # define MULTI_USER 1 | ||
82 | # else | ||
83 | # define _USER xscale_mc | ||
84 | # endif | ||
85 | #endif | ||
86 | |||
87 | #ifdef CONFIG_CPU_COPY_V6 | ||
88 | # define MULTI_USER 1 | ||
89 | #endif | ||
90 | |||
91 | #if !defined(_USER) && !defined(MULTI_USER) | ||
92 | #error Unknown user operations model | ||
93 | #endif | ||
94 | |||
95 | struct cpu_user_fns { | ||
96 | void (*cpu_clear_user_page)(void *p, unsigned long user); | ||
97 | void (*cpu_copy_user_page)(void *to, const void *from, | ||
98 | unsigned long user); | ||
99 | }; | ||
100 | |||
101 | #ifdef MULTI_USER | ||
102 | extern struct cpu_user_fns cpu_user; | ||
103 | |||
104 | #define __cpu_clear_user_page cpu_user.cpu_clear_user_page | ||
105 | #define __cpu_copy_user_page cpu_user.cpu_copy_user_page | ||
106 | |||
107 | #else | ||
108 | |||
109 | #define __cpu_clear_user_page __glue(_USER,_clear_user_page) | ||
110 | #define __cpu_copy_user_page __glue(_USER,_copy_user_page) | ||
111 | |||
112 | extern void __cpu_clear_user_page(void *p, unsigned long user); | ||
113 | extern void __cpu_copy_user_page(void *to, const void *from, | ||
114 | unsigned long user); | ||
115 | #endif | ||
116 | |||
117 | #define clear_user_page(addr,vaddr,pg) \ | ||
118 | do { \ | ||
119 | preempt_disable(); \ | ||
120 | __cpu_clear_user_page(addr, vaddr); \ | ||
121 | preempt_enable(); \ | ||
122 | } while (0) | ||
123 | |||
124 | #define copy_user_page(to,from,vaddr,pg) \ | ||
125 | do { \ | ||
126 | preempt_disable(); \ | ||
127 | __cpu_copy_user_page(to, from, vaddr); \ | ||
128 | preempt_enable(); \ | ||
129 | } while (0) | ||
130 | |||
131 | #define clear_page(page) memzero((void *)(page), PAGE_SIZE) | ||
132 | extern void copy_page(void *to, const void *from); | ||
133 | |||
134 | #undef STRICT_MM_TYPECHECKS | ||
135 | |||
136 | #ifdef STRICT_MM_TYPECHECKS | ||
137 | /* | ||
138 | * These are used to make use of C type-checking.. | ||
139 | */ | ||
140 | typedef struct { unsigned long pte; } pte_t; | ||
141 | typedef struct { unsigned long pmd; } pmd_t; | ||
142 | typedef struct { unsigned long pgd[2]; } pgd_t; | ||
143 | typedef struct { unsigned long pgprot; } pgprot_t; | ||
144 | |||
145 | #define pte_val(x) ((x).pte) | ||
146 | #define pmd_val(x) ((x).pmd) | ||
147 | #define pgd_val(x) ((x).pgd[0]) | ||
148 | #define pgprot_val(x) ((x).pgprot) | ||
149 | |||
150 | #define __pte(x) ((pte_t) { (x) } ) | ||
151 | #define __pmd(x) ((pmd_t) { (x) } ) | ||
152 | #define __pgprot(x) ((pgprot_t) { (x) } ) | ||
153 | |||
154 | #else | ||
155 | /* | ||
156 | * .. while these make it easier on the compiler | ||
157 | */ | ||
158 | typedef unsigned long pte_t; | ||
159 | typedef unsigned long pmd_t; | ||
160 | typedef unsigned long pgd_t[2]; | ||
161 | typedef unsigned long pgprot_t; | ||
162 | |||
163 | #define pte_val(x) (x) | ||
164 | #define pmd_val(x) (x) | ||
165 | #define pgd_val(x) ((x)[0]) | ||
166 | #define pgprot_val(x) (x) | ||
167 | |||
168 | #define __pte(x) (x) | ||
169 | #define __pmd(x) (x) | ||
170 | #define __pgprot(x) (x) | ||
171 | |||
172 | #endif /* STRICT_MM_TYPECHECKS */ | ||
173 | |||
174 | /* Pure 2^n version of get_order */ | ||
175 | static inline int get_order(unsigned long size) | ||
176 | { | ||
177 | int order; | ||
178 | |||
179 | size = (size-1) >> (PAGE_SHIFT-1); | ||
180 | order = -1; | ||
181 | do { | ||
182 | size >>= 1; | ||
183 | order++; | ||
184 | } while (size); | ||
185 | return order; | ||
186 | } | ||
187 | |||
188 | #include <asm/memory.h> | ||
189 | |||
190 | #endif /* !__ASSEMBLY__ */ | ||
191 | |||
192 | #define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | VM_EXEC | \ | ||
193 | VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC) | ||
194 | |||
195 | #endif /* __KERNEL__ */ | ||
196 | |||
197 | #endif | ||
diff --git a/include/asm-arm/param.h b/include/asm-arm/param.h new file mode 100644 index 000000000000..94223d4d7e88 --- /dev/null +++ b/include/asm-arm/param.h | |||
@@ -0,0 +1,36 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/param.h | ||
3 | * | ||
4 | * Copyright (C) 1995-1999 Russell King | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | */ | ||
10 | #ifndef __ASM_PARAM_H | ||
11 | #define __ASM_PARAM_H | ||
12 | |||
13 | #ifdef __KERNEL__ | ||
14 | # include <asm/arch/param.h> /* for kernel version of HZ */ | ||
15 | |||
16 | # ifndef HZ | ||
17 | # define HZ 100 /* Internal kernel timer frequency */ | ||
18 | # endif | ||
19 | |||
20 | # define USER_HZ 100 /* User interfaces are in "ticks" */ | ||
21 | # define CLOCKS_PER_SEC (USER_HZ) /* like times() */ | ||
22 | #else | ||
23 | # define HZ 100 | ||
24 | #endif | ||
25 | |||
26 | #define EXEC_PAGESIZE 4096 | ||
27 | |||
28 | #ifndef NOGROUP | ||
29 | #define NOGROUP (-1) | ||
30 | #endif | ||
31 | |||
32 | /* max length of hostname */ | ||
33 | #define MAXHOSTNAMELEN 64 | ||
34 | |||
35 | #endif | ||
36 | |||
diff --git a/include/asm-arm/parport.h b/include/asm-arm/parport.h new file mode 100644 index 000000000000..f2f90c76ddd1 --- /dev/null +++ b/include/asm-arm/parport.h | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/parport.h: ARM-specific parport initialisation | ||
3 | * | ||
4 | * Copyright (C) 1999, 2000 Tim Waugh <tim@cyberelk.demon.co.uk> | ||
5 | * | ||
6 | * This file should only be included by drivers/parport/parport_pc.c. | ||
7 | */ | ||
8 | |||
9 | #ifndef __ASMARM_PARPORT_H | ||
10 | #define __ASMARM_PARPORT_H | ||
11 | |||
12 | static int __devinit parport_pc_find_isa_ports (int autoirq, int autodma); | ||
13 | static int __devinit parport_pc_find_nonpci_ports (int autoirq, int autodma) | ||
14 | { | ||
15 | return parport_pc_find_isa_ports (autoirq, autodma); | ||
16 | } | ||
17 | |||
18 | #endif /* !(_ASMARM_PARPORT_H) */ | ||
diff --git a/include/asm-arm/pci.h b/include/asm-arm/pci.h new file mode 100644 index 000000000000..40ffaefbeb1a --- /dev/null +++ b/include/asm-arm/pci.h | |||
@@ -0,0 +1,59 @@ | |||
1 | #ifndef ASMARM_PCI_H | ||
2 | #define ASMARM_PCI_H | ||
3 | |||
4 | #ifdef __KERNEL__ | ||
5 | #include <linux/config.h> | ||
6 | #include <asm-generic/pci-dma-compat.h> | ||
7 | |||
8 | #include <asm/hardware.h> /* for PCIBIOS_MIN_* */ | ||
9 | |||
10 | #define pcibios_scan_all_fns(a, b) 0 | ||
11 | |||
12 | static inline void pcibios_set_master(struct pci_dev *dev) | ||
13 | { | ||
14 | /* No special bus mastering setup handling */ | ||
15 | } | ||
16 | |||
17 | static inline void pcibios_penalize_isa_irq(int irq) | ||
18 | { | ||
19 | /* We don't do dynamic PCI IRQ allocation */ | ||
20 | } | ||
21 | |||
22 | /* | ||
23 | * The PCI address space does equal the physical memory address space. | ||
24 | * The networking and block device layers use this boolean for bounce | ||
25 | * buffer decisions. | ||
26 | */ | ||
27 | #define PCI_DMA_BUS_IS_PHYS (0) | ||
28 | |||
29 | /* | ||
30 | * We don't support DAC DMA cycles. | ||
31 | */ | ||
32 | #define pci_dac_dma_supported(pci_dev, mask) (0) | ||
33 | |||
34 | /* | ||
35 | * Whether pci_unmap_{single,page} is a nop depends upon the | ||
36 | * configuration. | ||
37 | */ | ||
38 | #define DECLARE_PCI_UNMAP_ADDR(ADDR_NAME) dma_addr_t ADDR_NAME; | ||
39 | #define DECLARE_PCI_UNMAP_LEN(LEN_NAME) __u32 LEN_NAME; | ||
40 | #define pci_unmap_addr(PTR, ADDR_NAME) ((PTR)->ADDR_NAME) | ||
41 | #define pci_unmap_addr_set(PTR, ADDR_NAME, VAL) (((PTR)->ADDR_NAME) = (VAL)) | ||
42 | #define pci_unmap_len(PTR, LEN_NAME) ((PTR)->LEN_NAME) | ||
43 | #define pci_unmap_len_set(PTR, LEN_NAME, VAL) (((PTR)->LEN_NAME) = (VAL)) | ||
44 | |||
45 | #define HAVE_PCI_MMAP | ||
46 | extern int pci_mmap_page_range(struct pci_dev *dev, struct vm_area_struct *vma, | ||
47 | enum pci_mmap_state mmap_state, int write_combine); | ||
48 | |||
49 | extern void | ||
50 | pcibios_resource_to_bus(struct pci_dev *dev, struct pci_bus_region *region, | ||
51 | struct resource *res); | ||
52 | |||
53 | static inline void pcibios_add_platform_entries(struct pci_dev *dev) | ||
54 | { | ||
55 | } | ||
56 | |||
57 | #endif /* __KERNEL__ */ | ||
58 | |||
59 | #endif | ||
diff --git a/include/asm-arm/percpu.h b/include/asm-arm/percpu.h new file mode 100644 index 000000000000..b4e32d8ec072 --- /dev/null +++ b/include/asm-arm/percpu.h | |||
@@ -0,0 +1,6 @@ | |||
1 | #ifndef __ARM_PERCPU | ||
2 | #define __ARM_PERCPU | ||
3 | |||
4 | #include <asm-generic/percpu.h> | ||
5 | |||
6 | #endif | ||
diff --git a/include/asm-arm/pgalloc.h b/include/asm-arm/pgalloc.h new file mode 100644 index 000000000000..e814f8144f8b --- /dev/null +++ b/include/asm-arm/pgalloc.h | |||
@@ -0,0 +1,130 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/pgalloc.h | ||
3 | * | ||
4 | * Copyright (C) 2000-2001 Russell King | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | */ | ||
10 | #ifndef _ASMARM_PGALLOC_H | ||
11 | #define _ASMARM_PGALLOC_H | ||
12 | |||
13 | #include <asm/processor.h> | ||
14 | #include <asm/cacheflush.h> | ||
15 | #include <asm/tlbflush.h> | ||
16 | |||
17 | /* | ||
18 | * Since we have only two-level page tables, these are trivial | ||
19 | */ | ||
20 | #define pmd_alloc_one(mm,addr) ({ BUG(); ((pmd_t *)2); }) | ||
21 | #define pmd_free(pmd) do { } while (0) | ||
22 | #define pgd_populate(mm,pmd,pte) BUG() | ||
23 | |||
24 | extern pgd_t *get_pgd_slow(struct mm_struct *mm); | ||
25 | extern void free_pgd_slow(pgd_t *pgd); | ||
26 | |||
27 | #define pgd_alloc(mm) get_pgd_slow(mm) | ||
28 | #define pgd_free(pgd) free_pgd_slow(pgd) | ||
29 | |||
30 | #define check_pgt_cache() do { } while (0) | ||
31 | |||
32 | /* | ||
33 | * Allocate one PTE table. | ||
34 | * | ||
35 | * This actually allocates two hardware PTE tables, but we wrap this up | ||
36 | * into one table thus: | ||
37 | * | ||
38 | * +------------+ | ||
39 | * | h/w pt 0 | | ||
40 | * +------------+ | ||
41 | * | h/w pt 1 | | ||
42 | * +------------+ | ||
43 | * | Linux pt 0 | | ||
44 | * +------------+ | ||
45 | * | Linux pt 1 | | ||
46 | * +------------+ | ||
47 | */ | ||
48 | static inline pte_t * | ||
49 | pte_alloc_one_kernel(struct mm_struct *mm, unsigned long addr) | ||
50 | { | ||
51 | pte_t *pte; | ||
52 | |||
53 | pte = (pte_t *)__get_free_page(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO); | ||
54 | if (pte) { | ||
55 | clean_dcache_area(pte, sizeof(pte_t) * PTRS_PER_PTE); | ||
56 | pte += PTRS_PER_PTE; | ||
57 | } | ||
58 | |||
59 | return pte; | ||
60 | } | ||
61 | |||
62 | static inline struct page * | ||
63 | pte_alloc_one(struct mm_struct *mm, unsigned long addr) | ||
64 | { | ||
65 | struct page *pte; | ||
66 | |||
67 | pte = alloc_pages(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO, 0); | ||
68 | if (pte) { | ||
69 | void *page = page_address(pte); | ||
70 | clean_dcache_area(page, sizeof(pte_t) * PTRS_PER_PTE); | ||
71 | } | ||
72 | |||
73 | return pte; | ||
74 | } | ||
75 | |||
76 | /* | ||
77 | * Free one PTE table. | ||
78 | */ | ||
79 | static inline void pte_free_kernel(pte_t *pte) | ||
80 | { | ||
81 | if (pte) { | ||
82 | pte -= PTRS_PER_PTE; | ||
83 | free_page((unsigned long)pte); | ||
84 | } | ||
85 | } | ||
86 | |||
87 | static inline void pte_free(struct page *pte) | ||
88 | { | ||
89 | __free_page(pte); | ||
90 | } | ||
91 | |||
92 | /* | ||
93 | * Populate the pmdp entry with a pointer to the pte. This pmd is part | ||
94 | * of the mm address space. | ||
95 | * | ||
96 | * Ensure that we always set both PMD entries. | ||
97 | */ | ||
98 | static inline void | ||
99 | pmd_populate_kernel(struct mm_struct *mm, pmd_t *pmdp, pte_t *ptep) | ||
100 | { | ||
101 | unsigned long pte_ptr = (unsigned long)ptep; | ||
102 | unsigned long pmdval; | ||
103 | |||
104 | BUG_ON(mm != &init_mm); | ||
105 | |||
106 | /* | ||
107 | * The pmd must be loaded with the physical | ||
108 | * address of the PTE table | ||
109 | */ | ||
110 | pte_ptr -= PTRS_PER_PTE * sizeof(void *); | ||
111 | pmdval = __pa(pte_ptr) | _PAGE_KERNEL_TABLE; | ||
112 | pmdp[0] = __pmd(pmdval); | ||
113 | pmdp[1] = __pmd(pmdval + 256 * sizeof(pte_t)); | ||
114 | flush_pmd_entry(pmdp); | ||
115 | } | ||
116 | |||
117 | static inline void | ||
118 | pmd_populate(struct mm_struct *mm, pmd_t *pmdp, struct page *ptep) | ||
119 | { | ||
120 | unsigned long pmdval; | ||
121 | |||
122 | BUG_ON(mm == &init_mm); | ||
123 | |||
124 | pmdval = page_to_pfn(ptep) << PAGE_SHIFT | _PAGE_USER_TABLE; | ||
125 | pmdp[0] = __pmd(pmdval); | ||
126 | pmdp[1] = __pmd(pmdval + 256 * sizeof(pte_t)); | ||
127 | flush_pmd_entry(pmdp); | ||
128 | } | ||
129 | |||
130 | #endif | ||
diff --git a/include/asm-arm/pgtable.h b/include/asm-arm/pgtable.h new file mode 100644 index 000000000000..91ffb1f4cd10 --- /dev/null +++ b/include/asm-arm/pgtable.h | |||
@@ -0,0 +1,433 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/pgtable.h | ||
3 | * | ||
4 | * Copyright (C) 1995-2002 Russell King | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | */ | ||
10 | #ifndef _ASMARM_PGTABLE_H | ||
11 | #define _ASMARM_PGTABLE_H | ||
12 | |||
13 | #include <asm-generic/4level-fixup.h> | ||
14 | |||
15 | #include <asm/memory.h> | ||
16 | #include <asm/proc-fns.h> | ||
17 | #include <asm/arch/vmalloc.h> | ||
18 | |||
19 | /* | ||
20 | * Hardware-wise, we have a two level page table structure, where the first | ||
21 | * level has 4096 entries, and the second level has 256 entries. Each entry | ||
22 | * is one 32-bit word. Most of the bits in the second level entry are used | ||
23 | * by hardware, and there aren't any "accessed" and "dirty" bits. | ||
24 | * | ||
25 | * Linux on the other hand has a three level page table structure, which can | ||
26 | * be wrapped to fit a two level page table structure easily - using the PGD | ||
27 | * and PTE only. However, Linux also expects one "PTE" table per page, and | ||
28 | * at least a "dirty" bit. | ||
29 | * | ||
30 | * Therefore, we tweak the implementation slightly - we tell Linux that we | ||
31 | * have 2048 entries in the first level, each of which is 8 bytes (iow, two | ||
32 | * hardware pointers to the second level.) The second level contains two | ||
33 | * hardware PTE tables arranged contiguously, followed by Linux versions | ||
34 | * which contain the state information Linux needs. We, therefore, end up | ||
35 | * with 512 entries in the "PTE" level. | ||
36 | * | ||
37 | * This leads to the page tables having the following layout: | ||
38 | * | ||
39 | * pgd pte | ||
40 | * | | | ||
41 | * +--------+ +0 | ||
42 | * | |-----> +------------+ +0 | ||
43 | * +- - - - + +4 | h/w pt 0 | | ||
44 | * | |-----> +------------+ +1024 | ||
45 | * +--------+ +8 | h/w pt 1 | | ||
46 | * | | +------------+ +2048 | ||
47 | * +- - - - + | Linux pt 0 | | ||
48 | * | | +------------+ +3072 | ||
49 | * +--------+ | Linux pt 1 | | ||
50 | * | | +------------+ +4096 | ||
51 | * | ||
52 | * See L_PTE_xxx below for definitions of bits in the "Linux pt", and | ||
53 | * PTE_xxx for definitions of bits appearing in the "h/w pt". | ||
54 | * | ||
55 | * PMD_xxx definitions refer to bits in the first level page table. | ||
56 | * | ||
57 | * The "dirty" bit is emulated by only granting hardware write permission | ||
58 | * iff the page is marked "writable" and "dirty" in the Linux PTE. This | ||
59 | * means that a write to a clean page will cause a permission fault, and | ||
60 | * the Linux MM layer will mark the page dirty via handle_pte_fault(). | ||
61 | * For the hardware to notice the permission change, the TLB entry must | ||
62 | * be flushed, and ptep_establish() does that for us. | ||
63 | * | ||
64 | * The "accessed" or "young" bit is emulated by a similar method; we only | ||
65 | * allow accesses to the page if the "young" bit is set. Accesses to the | ||
66 | * page will cause a fault, and handle_pte_fault() will set the young bit | ||
67 | * for us as long as the page is marked present in the corresponding Linux | ||
68 | * PTE entry. Again, ptep_establish() will ensure that the TLB is up to | ||
69 | * date. | ||
70 | * | ||
71 | * However, when the "young" bit is cleared, we deny access to the page | ||
72 | * by clearing the hardware PTE. Currently Linux does not flush the TLB | ||
73 | * for us in this case, which means the TLB will retain the transation | ||
74 | * until either the TLB entry is evicted under pressure, or a context | ||
75 | * switch which changes the user space mapping occurs. | ||
76 | */ | ||
77 | #define PTRS_PER_PTE 512 | ||
78 | #define PTRS_PER_PMD 1 | ||
79 | #define PTRS_PER_PGD 2048 | ||
80 | |||
81 | /* | ||
82 | * PMD_SHIFT determines the size of the area a second-level page table can map | ||
83 | * PGDIR_SHIFT determines what a third-level page table entry can map | ||
84 | */ | ||
85 | #define PMD_SHIFT 21 | ||
86 | #define PGDIR_SHIFT 21 | ||
87 | |||
88 | #define LIBRARY_TEXT_START 0x0c000000 | ||
89 | |||
90 | #ifndef __ASSEMBLY__ | ||
91 | extern void __pte_error(const char *file, int line, unsigned long val); | ||
92 | extern void __pmd_error(const char *file, int line, unsigned long val); | ||
93 | extern void __pgd_error(const char *file, int line, unsigned long val); | ||
94 | |||
95 | #define pte_ERROR(pte) __pte_error(__FILE__, __LINE__, pte_val(pte)) | ||
96 | #define pmd_ERROR(pmd) __pmd_error(__FILE__, __LINE__, pmd_val(pmd)) | ||
97 | #define pgd_ERROR(pgd) __pgd_error(__FILE__, __LINE__, pgd_val(pgd)) | ||
98 | #endif /* !__ASSEMBLY__ */ | ||
99 | |||
100 | #define PMD_SIZE (1UL << PMD_SHIFT) | ||
101 | #define PMD_MASK (~(PMD_SIZE-1)) | ||
102 | #define PGDIR_SIZE (1UL << PGDIR_SHIFT) | ||
103 | #define PGDIR_MASK (~(PGDIR_SIZE-1)) | ||
104 | |||
105 | #define FIRST_USER_PGD_NR 1 | ||
106 | #define USER_PTRS_PER_PGD ((TASK_SIZE/PGDIR_SIZE) - FIRST_USER_PGD_NR) | ||
107 | |||
108 | /* | ||
109 | * ARMv6 supersection address mask and size definitions. | ||
110 | */ | ||
111 | #define SUPERSECTION_SHIFT 24 | ||
112 | #define SUPERSECTION_SIZE (1UL << SUPERSECTION_SHIFT) | ||
113 | #define SUPERSECTION_MASK (~(SUPERSECTION_SIZE-1)) | ||
114 | |||
115 | /* | ||
116 | * Hardware page table definitions. | ||
117 | * | ||
118 | * + Level 1 descriptor (PMD) | ||
119 | * - common | ||
120 | */ | ||
121 | #define PMD_TYPE_MASK (3 << 0) | ||
122 | #define PMD_TYPE_FAULT (0 << 0) | ||
123 | #define PMD_TYPE_TABLE (1 << 0) | ||
124 | #define PMD_TYPE_SECT (2 << 0) | ||
125 | #define PMD_BIT4 (1 << 4) | ||
126 | #define PMD_DOMAIN(x) ((x) << 5) | ||
127 | #define PMD_PROTECTION (1 << 9) /* v5 */ | ||
128 | /* | ||
129 | * - section | ||
130 | */ | ||
131 | #define PMD_SECT_BUFFERABLE (1 << 2) | ||
132 | #define PMD_SECT_CACHEABLE (1 << 3) | ||
133 | #define PMD_SECT_AP_WRITE (1 << 10) | ||
134 | #define PMD_SECT_AP_READ (1 << 11) | ||
135 | #define PMD_SECT_TEX(x) ((x) << 12) /* v5 */ | ||
136 | #define PMD_SECT_APX (1 << 15) /* v6 */ | ||
137 | #define PMD_SECT_S (1 << 16) /* v6 */ | ||
138 | #define PMD_SECT_nG (1 << 17) /* v6 */ | ||
139 | #define PMD_SECT_SUPER (1 << 18) /* v6 */ | ||
140 | |||
141 | #define PMD_SECT_UNCACHED (0) | ||
142 | #define PMD_SECT_BUFFERED (PMD_SECT_BUFFERABLE) | ||
143 | #define PMD_SECT_WT (PMD_SECT_CACHEABLE) | ||
144 | #define PMD_SECT_WB (PMD_SECT_CACHEABLE | PMD_SECT_BUFFERABLE) | ||
145 | #define PMD_SECT_MINICACHE (PMD_SECT_TEX(1) | PMD_SECT_CACHEABLE) | ||
146 | #define PMD_SECT_WBWA (PMD_SECT_TEX(1) | PMD_SECT_CACHEABLE | PMD_SECT_BUFFERABLE) | ||
147 | |||
148 | /* | ||
149 | * - coarse table (not used) | ||
150 | */ | ||
151 | |||
152 | /* | ||
153 | * + Level 2 descriptor (PTE) | ||
154 | * - common | ||
155 | */ | ||
156 | #define PTE_TYPE_MASK (3 << 0) | ||
157 | #define PTE_TYPE_FAULT (0 << 0) | ||
158 | #define PTE_TYPE_LARGE (1 << 0) | ||
159 | #define PTE_TYPE_SMALL (2 << 0) | ||
160 | #define PTE_TYPE_EXT (3 << 0) /* v5 */ | ||
161 | #define PTE_BUFFERABLE (1 << 2) | ||
162 | #define PTE_CACHEABLE (1 << 3) | ||
163 | |||
164 | /* | ||
165 | * - extended small page/tiny page | ||
166 | */ | ||
167 | #define PTE_EXT_AP_MASK (3 << 4) | ||
168 | #define PTE_EXT_AP_UNO_SRO (0 << 4) | ||
169 | #define PTE_EXT_AP_UNO_SRW (1 << 4) | ||
170 | #define PTE_EXT_AP_URO_SRW (2 << 4) | ||
171 | #define PTE_EXT_AP_URW_SRW (3 << 4) | ||
172 | #define PTE_EXT_TEX(x) ((x) << 6) /* v5 */ | ||
173 | |||
174 | /* | ||
175 | * - small page | ||
176 | */ | ||
177 | #define PTE_SMALL_AP_MASK (0xff << 4) | ||
178 | #define PTE_SMALL_AP_UNO_SRO (0x00 << 4) | ||
179 | #define PTE_SMALL_AP_UNO_SRW (0x55 << 4) | ||
180 | #define PTE_SMALL_AP_URO_SRW (0xaa << 4) | ||
181 | #define PTE_SMALL_AP_URW_SRW (0xff << 4) | ||
182 | |||
183 | /* | ||
184 | * "Linux" PTE definitions. | ||
185 | * | ||
186 | * We keep two sets of PTEs - the hardware and the linux version. | ||
187 | * This allows greater flexibility in the way we map the Linux bits | ||
188 | * onto the hardware tables, and allows us to have YOUNG and DIRTY | ||
189 | * bits. | ||
190 | * | ||
191 | * The PTE table pointer refers to the hardware entries; the "Linux" | ||
192 | * entries are stored 1024 bytes below. | ||
193 | */ | ||
194 | #define L_PTE_PRESENT (1 << 0) | ||
195 | #define L_PTE_FILE (1 << 1) /* only when !PRESENT */ | ||
196 | #define L_PTE_YOUNG (1 << 1) | ||
197 | #define L_PTE_BUFFERABLE (1 << 2) /* matches PTE */ | ||
198 | #define L_PTE_CACHEABLE (1 << 3) /* matches PTE */ | ||
199 | #define L_PTE_USER (1 << 4) | ||
200 | #define L_PTE_WRITE (1 << 5) | ||
201 | #define L_PTE_EXEC (1 << 6) | ||
202 | #define L_PTE_DIRTY (1 << 7) | ||
203 | |||
204 | #ifndef __ASSEMBLY__ | ||
205 | |||
206 | #include <asm/domain.h> | ||
207 | |||
208 | #define _PAGE_USER_TABLE (PMD_TYPE_TABLE | PMD_BIT4 | PMD_DOMAIN(DOMAIN_USER)) | ||
209 | #define _PAGE_KERNEL_TABLE (PMD_TYPE_TABLE | PMD_BIT4 | PMD_DOMAIN(DOMAIN_KERNEL)) | ||
210 | |||
211 | /* | ||
212 | * The following macros handle the cache and bufferable bits... | ||
213 | */ | ||
214 | #define _L_PTE_DEFAULT L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_CACHEABLE | L_PTE_BUFFERABLE | ||
215 | #define _L_PTE_READ L_PTE_USER | L_PTE_EXEC | ||
216 | |||
217 | extern pgprot_t pgprot_kernel; | ||
218 | |||
219 | #define PAGE_NONE __pgprot(_L_PTE_DEFAULT) | ||
220 | #define PAGE_COPY __pgprot(_L_PTE_DEFAULT | _L_PTE_READ) | ||
221 | #define PAGE_SHARED __pgprot(_L_PTE_DEFAULT | _L_PTE_READ | L_PTE_WRITE) | ||
222 | #define PAGE_READONLY __pgprot(_L_PTE_DEFAULT | _L_PTE_READ) | ||
223 | #define PAGE_KERNEL pgprot_kernel | ||
224 | |||
225 | #endif /* __ASSEMBLY__ */ | ||
226 | |||
227 | /* | ||
228 | * The table below defines the page protection levels that we insert into our | ||
229 | * Linux page table version. These get translated into the best that the | ||
230 | * architecture can perform. Note that on most ARM hardware: | ||
231 | * 1) We cannot do execute protection | ||
232 | * 2) If we could do execute protection, then read is implied | ||
233 | * 3) write implies read permissions | ||
234 | */ | ||
235 | #define __P000 PAGE_NONE | ||
236 | #define __P001 PAGE_READONLY | ||
237 | #define __P010 PAGE_COPY | ||
238 | #define __P011 PAGE_COPY | ||
239 | #define __P100 PAGE_READONLY | ||
240 | #define __P101 PAGE_READONLY | ||
241 | #define __P110 PAGE_COPY | ||
242 | #define __P111 PAGE_COPY | ||
243 | |||
244 | #define __S000 PAGE_NONE | ||
245 | #define __S001 PAGE_READONLY | ||
246 | #define __S010 PAGE_SHARED | ||
247 | #define __S011 PAGE_SHARED | ||
248 | #define __S100 PAGE_READONLY | ||
249 | #define __S101 PAGE_READONLY | ||
250 | #define __S110 PAGE_SHARED | ||
251 | #define __S111 PAGE_SHARED | ||
252 | |||
253 | #ifndef __ASSEMBLY__ | ||
254 | /* | ||
255 | * ZERO_PAGE is a global shared page that is always zero: used | ||
256 | * for zero-mapped memory areas etc.. | ||
257 | */ | ||
258 | extern struct page *empty_zero_page; | ||
259 | #define ZERO_PAGE(vaddr) (empty_zero_page) | ||
260 | |||
261 | #define pte_pfn(pte) (pte_val(pte) >> PAGE_SHIFT) | ||
262 | #define pfn_pte(pfn,prot) (__pte(((pfn) << PAGE_SHIFT) | pgprot_val(prot))) | ||
263 | |||
264 | #define pte_none(pte) (!pte_val(pte)) | ||
265 | #define pte_clear(mm,addr,ptep) set_pte_at((mm),(addr),(ptep), __pte(0)) | ||
266 | #define pte_page(pte) (pfn_to_page(pte_pfn(pte))) | ||
267 | #define pte_offset_kernel(dir,addr) (pmd_page_kernel(*(dir)) + __pte_index(addr)) | ||
268 | #define pte_offset_map(dir,addr) (pmd_page_kernel(*(dir)) + __pte_index(addr)) | ||
269 | #define pte_offset_map_nested(dir,addr) (pmd_page_kernel(*(dir)) + __pte_index(addr)) | ||
270 | #define pte_unmap(pte) do { } while (0) | ||
271 | #define pte_unmap_nested(pte) do { } while (0) | ||
272 | |||
273 | #define set_pte(ptep, pte) cpu_set_pte(ptep,pte) | ||
274 | #define set_pte_at(mm,addr,ptep,pteval) set_pte(ptep,pteval) | ||
275 | |||
276 | /* | ||
277 | * The following only work if pte_present() is true. | ||
278 | * Undefined behaviour if not.. | ||
279 | */ | ||
280 | #define pte_present(pte) (pte_val(pte) & L_PTE_PRESENT) | ||
281 | #define pte_read(pte) (pte_val(pte) & L_PTE_USER) | ||
282 | #define pte_write(pte) (pte_val(pte) & L_PTE_WRITE) | ||
283 | #define pte_exec(pte) (pte_val(pte) & L_PTE_EXEC) | ||
284 | #define pte_dirty(pte) (pte_val(pte) & L_PTE_DIRTY) | ||
285 | #define pte_young(pte) (pte_val(pte) & L_PTE_YOUNG) | ||
286 | |||
287 | /* | ||
288 | * The following only works if pte_present() is not true. | ||
289 | */ | ||
290 | #define pte_file(pte) (pte_val(pte) & L_PTE_FILE) | ||
291 | #define pte_to_pgoff(x) (pte_val(x) >> 2) | ||
292 | #define pgoff_to_pte(x) __pte(((x) << 2) | L_PTE_FILE) | ||
293 | |||
294 | #define PTE_FILE_MAX_BITS 30 | ||
295 | |||
296 | #define PTE_BIT_FUNC(fn,op) \ | ||
297 | static inline pte_t pte_##fn(pte_t pte) { pte_val(pte) op; return pte; } | ||
298 | |||
299 | /*PTE_BIT_FUNC(rdprotect, &= ~L_PTE_USER);*/ | ||
300 | /*PTE_BIT_FUNC(mkread, |= L_PTE_USER);*/ | ||
301 | PTE_BIT_FUNC(wrprotect, &= ~L_PTE_WRITE); | ||
302 | PTE_BIT_FUNC(mkwrite, |= L_PTE_WRITE); | ||
303 | PTE_BIT_FUNC(exprotect, &= ~L_PTE_EXEC); | ||
304 | PTE_BIT_FUNC(mkexec, |= L_PTE_EXEC); | ||
305 | PTE_BIT_FUNC(mkclean, &= ~L_PTE_DIRTY); | ||
306 | PTE_BIT_FUNC(mkdirty, |= L_PTE_DIRTY); | ||
307 | PTE_BIT_FUNC(mkold, &= ~L_PTE_YOUNG); | ||
308 | PTE_BIT_FUNC(mkyoung, |= L_PTE_YOUNG); | ||
309 | |||
310 | /* | ||
311 | * Mark the prot value as uncacheable and unbufferable. | ||
312 | */ | ||
313 | #define pgprot_noncached(prot) __pgprot(pgprot_val(prot) & ~(L_PTE_CACHEABLE | L_PTE_BUFFERABLE)) | ||
314 | #define pgprot_writecombine(prot) __pgprot(pgprot_val(prot) & ~L_PTE_CACHEABLE) | ||
315 | |||
316 | #define pmd_none(pmd) (!pmd_val(pmd)) | ||
317 | #define pmd_present(pmd) (pmd_val(pmd)) | ||
318 | #define pmd_bad(pmd) (pmd_val(pmd) & 2) | ||
319 | |||
320 | #define copy_pmd(pmdpd,pmdps) \ | ||
321 | do { \ | ||
322 | pmdpd[0] = pmdps[0]; \ | ||
323 | pmdpd[1] = pmdps[1]; \ | ||
324 | flush_pmd_entry(pmdpd); \ | ||
325 | } while (0) | ||
326 | |||
327 | #define pmd_clear(pmdp) \ | ||
328 | do { \ | ||
329 | pmdp[0] = __pmd(0); \ | ||
330 | pmdp[1] = __pmd(0); \ | ||
331 | clean_pmd_entry(pmdp); \ | ||
332 | } while (0) | ||
333 | |||
334 | static inline pte_t *pmd_page_kernel(pmd_t pmd) | ||
335 | { | ||
336 | unsigned long ptr; | ||
337 | |||
338 | ptr = pmd_val(pmd) & ~(PTRS_PER_PTE * sizeof(void *) - 1); | ||
339 | ptr += PTRS_PER_PTE * sizeof(void *); | ||
340 | |||
341 | return __va(ptr); | ||
342 | } | ||
343 | |||
344 | #define pmd_page(pmd) virt_to_page(__va(pmd_val(pmd))) | ||
345 | |||
346 | /* | ||
347 | * Permanent address of a page. We never have highmem, so this is trivial. | ||
348 | */ | ||
349 | #define pages_to_mb(x) ((x) >> (20 - PAGE_SHIFT)) | ||
350 | |||
351 | /* | ||
352 | * Conversion functions: convert a page and protection to a page entry, | ||
353 | * and a page entry and page directory to the page they refer to. | ||
354 | */ | ||
355 | #define mk_pte(page,prot) pfn_pte(page_to_pfn(page),prot) | ||
356 | |||
357 | /* | ||
358 | * The "pgd_xxx()" functions here are trivial for a folded two-level | ||
359 | * setup: the pgd is never bad, and a pmd always exists (as it's folded | ||
360 | * into the pgd entry) | ||
361 | */ | ||
362 | #define pgd_none(pgd) (0) | ||
363 | #define pgd_bad(pgd) (0) | ||
364 | #define pgd_present(pgd) (1) | ||
365 | #define pgd_clear(pgdp) do { } while (0) | ||
366 | #define set_pgd(pgd,pgdp) do { } while (0) | ||
367 | |||
368 | #define page_pte_prot(page,prot) mk_pte(page, prot) | ||
369 | #define page_pte(page) mk_pte(page, __pgprot(0)) | ||
370 | |||
371 | /* to find an entry in a page-table-directory */ | ||
372 | #define pgd_index(addr) ((addr) >> PGDIR_SHIFT) | ||
373 | |||
374 | #define pgd_offset(mm, addr) ((mm)->pgd+pgd_index(addr)) | ||
375 | |||
376 | /* to find an entry in a kernel page-table-directory */ | ||
377 | #define pgd_offset_k(addr) pgd_offset(&init_mm, addr) | ||
378 | |||
379 | /* Find an entry in the second-level page table.. */ | ||
380 | #define pmd_offset(dir, addr) ((pmd_t *)(dir)) | ||
381 | |||
382 | /* Find an entry in the third-level page table.. */ | ||
383 | #define __pte_index(addr) (((addr) >> PAGE_SHIFT) & (PTRS_PER_PTE - 1)) | ||
384 | |||
385 | static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) | ||
386 | { | ||
387 | const unsigned long mask = L_PTE_EXEC | L_PTE_WRITE | L_PTE_USER; | ||
388 | pte_val(pte) = (pte_val(pte) & ~mask) | (pgprot_val(newprot) & mask); | ||
389 | return pte; | ||
390 | } | ||
391 | |||
392 | extern pgd_t swapper_pg_dir[PTRS_PER_PGD]; | ||
393 | |||
394 | /* Encode and decode a swap entry. | ||
395 | * | ||
396 | * We support up to 32GB of swap on 4k machines | ||
397 | */ | ||
398 | #define __swp_type(x) (((x).val >> 2) & 0x7f) | ||
399 | #define __swp_offset(x) ((x).val >> 9) | ||
400 | #define __swp_entry(type,offset) ((swp_entry_t) { ((type) << 2) | ((offset) << 9) }) | ||
401 | #define __pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) }) | ||
402 | #define __swp_entry_to_pte(swp) ((pte_t) { (swp).val }) | ||
403 | |||
404 | /* Needs to be defined here and not in linux/mm.h, as it is arch dependent */ | ||
405 | /* FIXME: this is not correct */ | ||
406 | #define kern_addr_valid(addr) (1) | ||
407 | |||
408 | #include <asm-generic/pgtable.h> | ||
409 | |||
410 | /* | ||
411 | * We provide our own arch_get_unmapped_area to cope with VIPT caches. | ||
412 | */ | ||
413 | #define HAVE_ARCH_UNMAPPED_AREA | ||
414 | |||
415 | /* | ||
416 | * remap a physical address `phys' of size `size' with page protection `prot' | ||
417 | * into virtual address `from' | ||
418 | */ | ||
419 | #define io_remap_page_range(vma,from,phys,size,prot) \ | ||
420 | remap_pfn_range(vma, from, (phys) >> PAGE_SHIFT, size, prot) | ||
421 | |||
422 | #define io_remap_pfn_range(vma,from,pfn,size,prot) \ | ||
423 | remap_pfn_range(vma, from, pfn, size, prot) | ||
424 | |||
425 | #define MK_IOSPACE_PFN(space, pfn) (pfn) | ||
426 | #define GET_IOSPACE(pfn) 0 | ||
427 | #define GET_PFN(pfn) (pfn) | ||
428 | |||
429 | #define pgtable_cache_init() do { } while (0) | ||
430 | |||
431 | #endif /* !__ASSEMBLY__ */ | ||
432 | |||
433 | #endif /* _ASMARM_PGTABLE_H */ | ||
diff --git a/include/asm-arm/poll.h b/include/asm-arm/poll.h new file mode 100644 index 000000000000..2744ca831f5d --- /dev/null +++ b/include/asm-arm/poll.h | |||
@@ -0,0 +1,26 @@ | |||
1 | #ifndef __ASMARM_POLL_H | ||
2 | #define __ASMARM_POLL_H | ||
3 | |||
4 | /* These are specified by iBCS2 */ | ||
5 | #define POLLIN 0x0001 | ||
6 | #define POLLPRI 0x0002 | ||
7 | #define POLLOUT 0x0004 | ||
8 | #define POLLERR 0x0008 | ||
9 | #define POLLHUP 0x0010 | ||
10 | #define POLLNVAL 0x0020 | ||
11 | |||
12 | /* The rest seem to be more-or-less nonstandard. Check them! */ | ||
13 | #define POLLRDNORM 0x0040 | ||
14 | #define POLLRDBAND 0x0080 | ||
15 | #define POLLWRNORM 0x0100 | ||
16 | #define POLLWRBAND 0x0200 | ||
17 | #define POLLMSG 0x0400 | ||
18 | #define POLLREMOVE 0x1000 | ||
19 | |||
20 | struct pollfd { | ||
21 | int fd; | ||
22 | short events; | ||
23 | short revents; | ||
24 | }; | ||
25 | |||
26 | #endif | ||
diff --git a/include/asm-arm/posix_types.h b/include/asm-arm/posix_types.h new file mode 100644 index 000000000000..e142a2a016ca --- /dev/null +++ b/include/asm-arm/posix_types.h | |||
@@ -0,0 +1,81 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/posix_types.h | ||
3 | * | ||
4 | * Copyright (C) 1996-1998 Russell King. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | * Changelog: | ||
11 | * 27-06-1996 RMK Created | ||
12 | */ | ||
13 | #ifndef __ARCH_ARM_POSIX_TYPES_H | ||
14 | #define __ARCH_ARM_POSIX_TYPES_H | ||
15 | |||
16 | /* | ||
17 | * This file is generally used by user-level software, so you need to | ||
18 | * be a little careful about namespace pollution etc. Also, we cannot | ||
19 | * assume GCC is being used. | ||
20 | */ | ||
21 | |||
22 | typedef unsigned long __kernel_ino_t; | ||
23 | typedef unsigned short __kernel_mode_t; | ||
24 | typedef unsigned short __kernel_nlink_t; | ||
25 | typedef long __kernel_off_t; | ||
26 | typedef int __kernel_pid_t; | ||
27 | typedef unsigned short __kernel_ipc_pid_t; | ||
28 | typedef unsigned short __kernel_uid_t; | ||
29 | typedef unsigned short __kernel_gid_t; | ||
30 | typedef unsigned int __kernel_size_t; | ||
31 | typedef int __kernel_ssize_t; | ||
32 | typedef int __kernel_ptrdiff_t; | ||
33 | typedef long __kernel_time_t; | ||
34 | typedef long __kernel_suseconds_t; | ||
35 | typedef long __kernel_clock_t; | ||
36 | typedef int __kernel_timer_t; | ||
37 | typedef int __kernel_clockid_t; | ||
38 | typedef int __kernel_daddr_t; | ||
39 | typedef char * __kernel_caddr_t; | ||
40 | typedef unsigned short __kernel_uid16_t; | ||
41 | typedef unsigned short __kernel_gid16_t; | ||
42 | typedef unsigned int __kernel_uid32_t; | ||
43 | typedef unsigned int __kernel_gid32_t; | ||
44 | |||
45 | typedef unsigned short __kernel_old_uid_t; | ||
46 | typedef unsigned short __kernel_old_gid_t; | ||
47 | typedef unsigned short __kernel_old_dev_t; | ||
48 | |||
49 | #ifdef __GNUC__ | ||
50 | typedef long long __kernel_loff_t; | ||
51 | #endif | ||
52 | |||
53 | typedef struct { | ||
54 | #if defined(__KERNEL__) || defined(__USE_ALL) | ||
55 | int val[2]; | ||
56 | #else /* !defined(__KERNEL__) && !defined(__USE_ALL) */ | ||
57 | int __val[2]; | ||
58 | #endif /* !defined(__KERNEL__) && !defined(__USE_ALL) */ | ||
59 | } __kernel_fsid_t; | ||
60 | |||
61 | #if defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ < 2) | ||
62 | |||
63 | #undef __FD_SET | ||
64 | #define __FD_SET(fd, fdsetp) \ | ||
65 | (((fd_set *)(fdsetp))->fds_bits[(fd) >> 5] |= (1<<((fd) & 31))) | ||
66 | |||
67 | #undef __FD_CLR | ||
68 | #define __FD_CLR(fd, fdsetp) \ | ||
69 | (((fd_set *)(fdsetp))->fds_bits[(fd) >> 5] &= ~(1<<((fd) & 31))) | ||
70 | |||
71 | #undef __FD_ISSET | ||
72 | #define __FD_ISSET(fd, fdsetp) \ | ||
73 | ((((fd_set *)(fdsetp))->fds_bits[(fd) >> 5] & (1<<((fd) & 31))) != 0) | ||
74 | |||
75 | #undef __FD_ZERO | ||
76 | #define __FD_ZERO(fdsetp) \ | ||
77 | (memset (fdsetp, 0, sizeof (*(fd_set *)(fdsetp)))) | ||
78 | |||
79 | #endif | ||
80 | |||
81 | #endif | ||
diff --git a/include/asm-arm/proc-fns.h b/include/asm-arm/proc-fns.h new file mode 100644 index 000000000000..7bef2bf6be51 --- /dev/null +++ b/include/asm-arm/proc-fns.h | |||
@@ -0,0 +1,174 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/proc-fns.h | ||
3 | * | ||
4 | * Copyright (C) 1997-1999 Russell King | ||
5 | * Copyright (C) 2000 Deep Blue Solutions Ltd | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License version 2 as | ||
9 | * published by the Free Software Foundation. | ||
10 | */ | ||
11 | #ifndef __ASM_PROCFNS_H | ||
12 | #define __ASM_PROCFNS_H | ||
13 | |||
14 | #ifdef __KERNEL__ | ||
15 | |||
16 | #include <linux/config.h> | ||
17 | |||
18 | /* | ||
19 | * Work out if we need multiple CPU support | ||
20 | */ | ||
21 | #undef MULTI_CPU | ||
22 | #undef CPU_NAME | ||
23 | |||
24 | /* | ||
25 | * CPU_NAME - the prefix for CPU related functions | ||
26 | */ | ||
27 | |||
28 | #ifdef CONFIG_CPU_32 | ||
29 | # ifdef CONFIG_CPU_ARM610 | ||
30 | # ifdef CPU_NAME | ||
31 | # undef MULTI_CPU | ||
32 | # define MULTI_CPU | ||
33 | # else | ||
34 | # define CPU_NAME cpu_arm6 | ||
35 | # endif | ||
36 | # endif | ||
37 | # ifdef CONFIG_CPU_ARM710 | ||
38 | # ifdef CPU_NAME | ||
39 | # undef MULTI_CPU | ||
40 | # define MULTI_CPU | ||
41 | # else | ||
42 | # define CPU_NAME cpu_arm7 | ||
43 | # endif | ||
44 | # endif | ||
45 | # ifdef CONFIG_CPU_ARM720T | ||
46 | # ifdef CPU_NAME | ||
47 | # undef MULTI_CPU | ||
48 | # define MULTI_CPU | ||
49 | # else | ||
50 | # define CPU_NAME cpu_arm720 | ||
51 | # endif | ||
52 | # endif | ||
53 | # ifdef CONFIG_CPU_ARM920T | ||
54 | # ifdef CPU_NAME | ||
55 | # undef MULTI_CPU | ||
56 | # define MULTI_CPU | ||
57 | # else | ||
58 | # define CPU_NAME cpu_arm920 | ||
59 | # endif | ||
60 | # endif | ||
61 | # ifdef CONFIG_CPU_ARM922T | ||
62 | # ifdef CPU_NAME | ||
63 | # undef MULTI_CPU | ||
64 | # define MULTI_CPU | ||
65 | # else | ||
66 | # define CPU_NAME cpu_arm922 | ||
67 | # endif | ||
68 | # endif | ||
69 | # ifdef CONFIG_CPU_ARM925T | ||
70 | # ifdef CPU_NAME | ||
71 | # undef MULTI_CPU | ||
72 | # define MULTI_CPU | ||
73 | # else | ||
74 | # define CPU_NAME cpu_arm925 | ||
75 | # endif | ||
76 | # endif | ||
77 | # ifdef CONFIG_CPU_ARM926T | ||
78 | # ifdef CPU_NAME | ||
79 | # undef MULTI_CPU | ||
80 | # define MULTI_CPU | ||
81 | # else | ||
82 | # define CPU_NAME cpu_arm926 | ||
83 | # endif | ||
84 | # endif | ||
85 | # ifdef CONFIG_CPU_SA110 | ||
86 | # ifdef CPU_NAME | ||
87 | # undef MULTI_CPU | ||
88 | # define MULTI_CPU | ||
89 | # else | ||
90 | # define CPU_NAME cpu_sa110 | ||
91 | # endif | ||
92 | # endif | ||
93 | # ifdef CONFIG_CPU_SA1100 | ||
94 | # ifdef CPU_NAME | ||
95 | # undef MULTI_CPU | ||
96 | # define MULTI_CPU | ||
97 | # else | ||
98 | # define CPU_NAME cpu_sa1100 | ||
99 | # endif | ||
100 | # endif | ||
101 | # ifdef CONFIG_CPU_ARM1020 | ||
102 | # ifdef CPU_NAME | ||
103 | # undef MULTI_CPU | ||
104 | # define MULTI_CPU | ||
105 | # else | ||
106 | # define CPU_NAME cpu_arm1020 | ||
107 | # endif | ||
108 | # endif | ||
109 | # ifdef CONFIG_CPU_ARM1020E | ||
110 | # ifdef CPU_NAME | ||
111 | # undef MULTI_CPU | ||
112 | # define MULTI_CPU | ||
113 | # else | ||
114 | # define CPU_NAME cpu_arm1020e | ||
115 | # endif | ||
116 | # endif | ||
117 | # ifdef CONFIG_CPU_ARM1022 | ||
118 | # ifdef CPU_NAME | ||
119 | # undef MULTI_CPU | ||
120 | # define MULTI_CPU | ||
121 | # else | ||
122 | # define CPU_NAME cpu_arm1022 | ||
123 | # endif | ||
124 | # endif | ||
125 | # ifdef CONFIG_CPU_ARM1026 | ||
126 | # ifdef CPU_NAME | ||
127 | # undef MULTI_CPU | ||
128 | # define MULTI_CPU | ||
129 | # else | ||
130 | # define CPU_NAME cpu_arm1026 | ||
131 | # endif | ||
132 | # endif | ||
133 | # ifdef CONFIG_CPU_XSCALE | ||
134 | # ifdef CPU_NAME | ||
135 | # undef MULTI_CPU | ||
136 | # define MULTI_CPU | ||
137 | # else | ||
138 | # define CPU_NAME cpu_xscale | ||
139 | # endif | ||
140 | # endif | ||
141 | # ifdef CONFIG_CPU_V6 | ||
142 | # ifdef CPU_NAME | ||
143 | # undef MULTI_CPU | ||
144 | # define MULTI_CPU | ||
145 | # else | ||
146 | # define CPU_NAME cpu_v6 | ||
147 | # endif | ||
148 | # endif | ||
149 | #endif | ||
150 | |||
151 | #ifndef __ASSEMBLY__ | ||
152 | |||
153 | #ifndef MULTI_CPU | ||
154 | #include "asm/cpu-single.h" | ||
155 | #else | ||
156 | #include "asm/cpu-multi32.h" | ||
157 | #endif | ||
158 | |||
159 | #include <asm/memory.h> | ||
160 | |||
161 | #define cpu_switch_mm(pgd,mm) cpu_do_switch_mm(virt_to_phys(pgd),mm) | ||
162 | |||
163 | #define cpu_get_pgd() \ | ||
164 | ({ \ | ||
165 | unsigned long pg; \ | ||
166 | __asm__("mrc p15, 0, %0, c2, c0, 0" \ | ||
167 | : "=r" (pg) : : "cc"); \ | ||
168 | pg &= ~0x3fff; \ | ||
169 | (pgd_t *)phys_to_virt(pg); \ | ||
170 | }) | ||
171 | |||
172 | #endif /* __ASSEMBLY__ */ | ||
173 | #endif /* __KERNEL__ */ | ||
174 | #endif /* __ASM_PROCFNS_H */ | ||
diff --git a/include/asm-arm/processor.h b/include/asm-arm/processor.h new file mode 100644 index 000000000000..4a9845997a75 --- /dev/null +++ b/include/asm-arm/processor.h | |||
@@ -0,0 +1,118 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/processor.h | ||
3 | * | ||
4 | * Copyright (C) 1995-1999 Russell King | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | */ | ||
10 | |||
11 | #ifndef __ASM_ARM_PROCESSOR_H | ||
12 | #define __ASM_ARM_PROCESSOR_H | ||
13 | |||
14 | /* | ||
15 | * Default implementation of macro that returns current | ||
16 | * instruction pointer ("program counter"). | ||
17 | */ | ||
18 | #define current_text_addr() ({ __label__ _l; _l: &&_l;}) | ||
19 | |||
20 | #ifdef __KERNEL__ | ||
21 | |||
22 | #include <asm/ptrace.h> | ||
23 | #include <asm/procinfo.h> | ||
24 | #include <asm/types.h> | ||
25 | |||
26 | #define KERNEL_STACK_SIZE PAGE_SIZE | ||
27 | |||
28 | union debug_insn { | ||
29 | u32 arm; | ||
30 | u16 thumb; | ||
31 | }; | ||
32 | |||
33 | struct debug_entry { | ||
34 | u32 address; | ||
35 | union debug_insn insn; | ||
36 | }; | ||
37 | |||
38 | struct debug_info { | ||
39 | int nsaved; | ||
40 | struct debug_entry bp[2]; | ||
41 | }; | ||
42 | |||
43 | struct thread_struct { | ||
44 | /* fault info */ | ||
45 | unsigned long address; | ||
46 | unsigned long trap_no; | ||
47 | unsigned long error_code; | ||
48 | /* debugging */ | ||
49 | struct debug_info debug; | ||
50 | }; | ||
51 | |||
52 | #define INIT_THREAD { } | ||
53 | |||
54 | #define start_thread(regs,pc,sp) \ | ||
55 | ({ \ | ||
56 | unsigned long *stack = (unsigned long *)sp; \ | ||
57 | set_fs(USER_DS); \ | ||
58 | memzero(regs->uregs, sizeof(regs->uregs)); \ | ||
59 | if (current->personality & ADDR_LIMIT_32BIT) \ | ||
60 | regs->ARM_cpsr = USR_MODE; \ | ||
61 | else \ | ||
62 | regs->ARM_cpsr = USR26_MODE; \ | ||
63 | if (elf_hwcap & HWCAP_THUMB && pc & 1) \ | ||
64 | regs->ARM_cpsr |= PSR_T_BIT; \ | ||
65 | regs->ARM_pc = pc & ~1; /* pc */ \ | ||
66 | regs->ARM_sp = sp; /* sp */ \ | ||
67 | regs->ARM_r2 = stack[2]; /* r2 (envp) */ \ | ||
68 | regs->ARM_r1 = stack[1]; /* r1 (argv) */ \ | ||
69 | regs->ARM_r0 = stack[0]; /* r0 (argc) */ \ | ||
70 | }) | ||
71 | |||
72 | /* Forward declaration, a strange C thing */ | ||
73 | struct task_struct; | ||
74 | |||
75 | /* Free all resources held by a thread. */ | ||
76 | extern void release_thread(struct task_struct *); | ||
77 | |||
78 | /* Prepare to copy thread state - unlazy all lazy status */ | ||
79 | #define prepare_to_copy(tsk) do { } while (0) | ||
80 | |||
81 | unsigned long get_wchan(struct task_struct *p); | ||
82 | |||
83 | #define cpu_relax() barrier() | ||
84 | |||
85 | /* | ||
86 | * Create a new kernel thread | ||
87 | */ | ||
88 | extern int kernel_thread(int (*fn)(void *), void *arg, unsigned long flags); | ||
89 | |||
90 | #define KSTK_EIP(tsk) (((unsigned long *)(4096+(unsigned long)(tsk)->thread_info))[1019]) | ||
91 | #define KSTK_ESP(tsk) (((unsigned long *)(4096+(unsigned long)(tsk)->thread_info))[1017]) | ||
92 | |||
93 | /* | ||
94 | * Prefetching support - only ARMv5. | ||
95 | */ | ||
96 | #if __LINUX_ARM_ARCH__ >= 5 | ||
97 | |||
98 | #define ARCH_HAS_PREFETCH | ||
99 | #define prefetch(ptr) \ | ||
100 | ({ \ | ||
101 | __asm__ __volatile__( \ | ||
102 | "pld\t%0" \ | ||
103 | : \ | ||
104 | : "o" (*(char *)(ptr)) \ | ||
105 | : "cc"); \ | ||
106 | }) | ||
107 | |||
108 | #define ARCH_HAS_PREFETCHW | ||
109 | #define prefetchw(ptr) prefetch(ptr) | ||
110 | |||
111 | #define ARCH_HAS_SPINLOCK_PREFETCH | ||
112 | #define spin_lock_prefetch(x) do { } while (0) | ||
113 | |||
114 | #endif | ||
115 | |||
116 | #endif | ||
117 | |||
118 | #endif /* __ASM_ARM_PROCESSOR_H */ | ||
diff --git a/include/asm-arm/procinfo.h b/include/asm-arm/procinfo.h new file mode 100644 index 000000000000..a9c75b2c314f --- /dev/null +++ b/include/asm-arm/procinfo.h | |||
@@ -0,0 +1,60 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/procinfo.h | ||
3 | * | ||
4 | * Copyright (C) 1996-1999 Russell King | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | */ | ||
10 | #ifndef __ASM_PROCINFO_H | ||
11 | #define __ASM_PROCINFO_H | ||
12 | |||
13 | #ifndef __ASSEMBLY__ | ||
14 | |||
15 | struct cpu_tlb_fns; | ||
16 | struct cpu_user_fns; | ||
17 | struct cpu_cache_fns; | ||
18 | struct processor; | ||
19 | |||
20 | /* | ||
21 | * Note! struct processor is always defined if we're | ||
22 | * using MULTI_CPU, otherwise this entry is unused, | ||
23 | * but still exists. | ||
24 | * | ||
25 | * NOTE! The following structure is defined by assembly | ||
26 | * language, NOT C code. For more information, check: | ||
27 | * arch/arm/mm/proc-*.S and arch/arm/kernel/head.S | ||
28 | */ | ||
29 | struct proc_info_list { | ||
30 | unsigned int cpu_val; | ||
31 | unsigned int cpu_mask; | ||
32 | unsigned long __cpu_mmu_flags; /* used by head.S */ | ||
33 | unsigned long __cpu_flush; /* used by head.S */ | ||
34 | const char *arch_name; | ||
35 | const char *elf_name; | ||
36 | unsigned int elf_hwcap; | ||
37 | const char *cpu_name; | ||
38 | struct processor *proc; | ||
39 | struct cpu_tlb_fns *tlb; | ||
40 | struct cpu_user_fns *user; | ||
41 | struct cpu_cache_fns *cache; | ||
42 | }; | ||
43 | |||
44 | extern unsigned int elf_hwcap; | ||
45 | |||
46 | #endif /* __ASSEMBLY__ */ | ||
47 | |||
48 | #define PROC_INFO_SZ 48 | ||
49 | |||
50 | #define HWCAP_SWP 1 | ||
51 | #define HWCAP_HALF 2 | ||
52 | #define HWCAP_THUMB 4 | ||
53 | #define HWCAP_26BIT 8 /* Play it safe */ | ||
54 | #define HWCAP_FAST_MULT 16 | ||
55 | #define HWCAP_FPA 32 | ||
56 | #define HWCAP_VFP 64 | ||
57 | #define HWCAP_EDSP 128 | ||
58 | #define HWCAP_JAVA 256 | ||
59 | |||
60 | #endif | ||
diff --git a/include/asm-arm/ptrace.h b/include/asm-arm/ptrace.h new file mode 100644 index 000000000000..604e3a186cf9 --- /dev/null +++ b/include/asm-arm/ptrace.h | |||
@@ -0,0 +1,155 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/ptrace.h | ||
3 | * | ||
4 | * Copyright (C) 1996-2003 Russell King | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | */ | ||
10 | #ifndef __ASM_ARM_PTRACE_H | ||
11 | #define __ASM_ARM_PTRACE_H | ||
12 | |||
13 | #include <linux/config.h> | ||
14 | |||
15 | #define PTRACE_GETREGS 12 | ||
16 | #define PTRACE_SETREGS 13 | ||
17 | #define PTRACE_GETFPREGS 14 | ||
18 | #define PTRACE_SETFPREGS 15 | ||
19 | |||
20 | #define PTRACE_GETWMMXREGS 18 | ||
21 | #define PTRACE_SETWMMXREGS 19 | ||
22 | |||
23 | #define PTRACE_OLDSETOPTIONS 21 | ||
24 | |||
25 | #define PTRACE_GET_THREAD_AREA 22 | ||
26 | /* | ||
27 | * PSR bits | ||
28 | */ | ||
29 | #define USR26_MODE 0x00000000 | ||
30 | #define FIQ26_MODE 0x00000001 | ||
31 | #define IRQ26_MODE 0x00000002 | ||
32 | #define SVC26_MODE 0x00000003 | ||
33 | #define USR_MODE 0x00000010 | ||
34 | #define FIQ_MODE 0x00000011 | ||
35 | #define IRQ_MODE 0x00000012 | ||
36 | #define SVC_MODE 0x00000013 | ||
37 | #define ABT_MODE 0x00000017 | ||
38 | #define UND_MODE 0x0000001b | ||
39 | #define SYSTEM_MODE 0x0000001f | ||
40 | #define MODE32_BIT 0x00000010 | ||
41 | #define MODE_MASK 0x0000001f | ||
42 | #define PSR_T_BIT 0x00000020 | ||
43 | #define PSR_F_BIT 0x00000040 | ||
44 | #define PSR_I_BIT 0x00000080 | ||
45 | #define PSR_J_BIT 0x01000000 | ||
46 | #define PSR_Q_BIT 0x08000000 | ||
47 | #define PSR_V_BIT 0x10000000 | ||
48 | #define PSR_C_BIT 0x20000000 | ||
49 | #define PSR_Z_BIT 0x40000000 | ||
50 | #define PSR_N_BIT 0x80000000 | ||
51 | #define PCMASK 0 | ||
52 | |||
53 | /* | ||
54 | * Groups of PSR bits | ||
55 | */ | ||
56 | #define PSR_f 0xff000000 /* Flags */ | ||
57 | #define PSR_s 0x00ff0000 /* Status */ | ||
58 | #define PSR_x 0x0000ff00 /* Extension */ | ||
59 | #define PSR_c 0x000000ff /* Control */ | ||
60 | |||
61 | #ifndef __ASSEMBLY__ | ||
62 | |||
63 | /* this struct defines the way the registers are stored on the | ||
64 | stack during a system call. */ | ||
65 | |||
66 | struct pt_regs { | ||
67 | long uregs[18]; | ||
68 | }; | ||
69 | |||
70 | #define ARM_cpsr uregs[16] | ||
71 | #define ARM_pc uregs[15] | ||
72 | #define ARM_lr uregs[14] | ||
73 | #define ARM_sp uregs[13] | ||
74 | #define ARM_ip uregs[12] | ||
75 | #define ARM_fp uregs[11] | ||
76 | #define ARM_r10 uregs[10] | ||
77 | #define ARM_r9 uregs[9] | ||
78 | #define ARM_r8 uregs[8] | ||
79 | #define ARM_r7 uregs[7] | ||
80 | #define ARM_r6 uregs[6] | ||
81 | #define ARM_r5 uregs[5] | ||
82 | #define ARM_r4 uregs[4] | ||
83 | #define ARM_r3 uregs[3] | ||
84 | #define ARM_r2 uregs[2] | ||
85 | #define ARM_r1 uregs[1] | ||
86 | #define ARM_r0 uregs[0] | ||
87 | #define ARM_ORIG_r0 uregs[17] | ||
88 | |||
89 | #ifdef __KERNEL__ | ||
90 | |||
91 | #define user_mode(regs) \ | ||
92 | (((regs)->ARM_cpsr & 0xf) == 0) | ||
93 | |||
94 | #ifdef CONFIG_ARM_THUMB | ||
95 | #define thumb_mode(regs) \ | ||
96 | (((regs)->ARM_cpsr & PSR_T_BIT)) | ||
97 | #else | ||
98 | #define thumb_mode(regs) (0) | ||
99 | #endif | ||
100 | |||
101 | #define processor_mode(regs) \ | ||
102 | ((regs)->ARM_cpsr & MODE_MASK) | ||
103 | |||
104 | #define interrupts_enabled(regs) \ | ||
105 | (!((regs)->ARM_cpsr & PSR_I_BIT)) | ||
106 | |||
107 | #define fast_interrupts_enabled(regs) \ | ||
108 | (!((regs)->ARM_cpsr & PSR_F_BIT)) | ||
109 | |||
110 | #define condition_codes(regs) \ | ||
111 | ((regs)->ARM_cpsr & (PSR_V_BIT|PSR_C_BIT|PSR_Z_BIT|PSR_N_BIT)) | ||
112 | |||
113 | /* Are the current registers suitable for user mode? | ||
114 | * (used to maintain security in signal handlers) | ||
115 | */ | ||
116 | static inline int valid_user_regs(struct pt_regs *regs) | ||
117 | { | ||
118 | if (user_mode(regs) && | ||
119 | (regs->ARM_cpsr & (PSR_F_BIT|PSR_I_BIT)) == 0) | ||
120 | return 1; | ||
121 | |||
122 | /* | ||
123 | * Force CPSR to something logical... | ||
124 | */ | ||
125 | regs->ARM_cpsr &= PSR_f | PSR_s | PSR_x | PSR_T_BIT | MODE32_BIT; | ||
126 | |||
127 | return 0; | ||
128 | } | ||
129 | |||
130 | #endif /* __KERNEL__ */ | ||
131 | |||
132 | #define pc_pointer(v) \ | ||
133 | ((v) & ~PCMASK) | ||
134 | |||
135 | #define instruction_pointer(regs) \ | ||
136 | (pc_pointer((regs)->ARM_pc)) | ||
137 | |||
138 | #ifdef CONFIG_SMP | ||
139 | extern unsigned long profile_pc(struct pt_regs *regs); | ||
140 | #else | ||
141 | #define profile_pc(regs) instruction_pointer(regs) | ||
142 | #endif | ||
143 | |||
144 | #ifdef __KERNEL__ | ||
145 | extern void show_regs(struct pt_regs *); | ||
146 | |||
147 | #define predicate(x) (x & 0xf0000000) | ||
148 | #define PREDICATE_ALWAYS 0xe0000000 | ||
149 | |||
150 | #endif | ||
151 | |||
152 | #endif /* __ASSEMBLY__ */ | ||
153 | |||
154 | #endif | ||
155 | |||
diff --git a/include/asm-arm/resource.h b/include/asm-arm/resource.h new file mode 100644 index 000000000000..734b581b5b6a --- /dev/null +++ b/include/asm-arm/resource.h | |||
@@ -0,0 +1,6 @@ | |||
1 | #ifndef _ARM_RESOURCE_H | ||
2 | #define _ARM_RESOURCE_H | ||
3 | |||
4 | #include <asm-generic/resource.h> | ||
5 | |||
6 | #endif | ||
diff --git a/include/asm-arm/rtc.h b/include/asm-arm/rtc.h new file mode 100644 index 000000000000..aa7e16b2e225 --- /dev/null +++ b/include/asm-arm/rtc.h | |||
@@ -0,0 +1,46 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/rtc.h | ||
3 | * | ||
4 | * Copyright (C) 2003 Deep Blue Solutions Ltd. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | */ | ||
10 | #ifndef ASMARM_RTC_H | ||
11 | #define ASMARM_RTC_H | ||
12 | |||
13 | struct module; | ||
14 | |||
15 | struct rtc_ops { | ||
16 | struct module *owner; | ||
17 | int (*open)(void); | ||
18 | void (*release)(void); | ||
19 | int (*ioctl)(unsigned int, unsigned long); | ||
20 | |||
21 | void (*read_time)(struct rtc_time *); | ||
22 | int (*set_time)(struct rtc_time *); | ||
23 | void (*read_alarm)(struct rtc_wkalrm *); | ||
24 | int (*set_alarm)(struct rtc_wkalrm *); | ||
25 | int (*proc)(char *buf); | ||
26 | }; | ||
27 | |||
28 | void rtc_time_to_tm(unsigned long, struct rtc_time *); | ||
29 | int rtc_tm_to_time(struct rtc_time *, unsigned long *); | ||
30 | int rtc_valid_tm(struct rtc_time *); | ||
31 | void rtc_next_alarm_time(struct rtc_time *, struct rtc_time *, struct rtc_time *); | ||
32 | void rtc_update(unsigned long, unsigned long); | ||
33 | int register_rtc(struct rtc_ops *); | ||
34 | void unregister_rtc(struct rtc_ops *); | ||
35 | |||
36 | static inline int rtc_periodic_alarm(struct rtc_time *tm) | ||
37 | { | ||
38 | return (tm->tm_year == -1) || | ||
39 | ((unsigned)tm->tm_mon >= 12) || | ||
40 | ((unsigned)(tm->tm_mday - 1) >= 31) || | ||
41 | ((unsigned)tm->tm_hour > 23) || | ||
42 | ((unsigned)tm->tm_min > 59) || | ||
43 | ((unsigned)tm->tm_sec > 59); | ||
44 | } | ||
45 | |||
46 | #endif | ||
diff --git a/include/asm-arm/scatterlist.h b/include/asm-arm/scatterlist.h new file mode 100644 index 000000000000..83b876fb04cc --- /dev/null +++ b/include/asm-arm/scatterlist.h | |||
@@ -0,0 +1,25 @@ | |||
1 | #ifndef _ASMARM_SCATTERLIST_H | ||
2 | #define _ASMARM_SCATTERLIST_H | ||
3 | |||
4 | #include <asm/memory.h> | ||
5 | #include <asm/types.h> | ||
6 | |||
7 | struct scatterlist { | ||
8 | struct page *page; /* buffer page */ | ||
9 | unsigned int offset; /* buffer offset */ | ||
10 | dma_addr_t dma_address; /* dma address */ | ||
11 | unsigned int length; /* length */ | ||
12 | char *__address; /* for set_dma_addr */ | ||
13 | }; | ||
14 | |||
15 | /* | ||
16 | * These macros should be used after a pci_map_sg call has been done | ||
17 | * to get bus addresses of each of the SG entries and their lengths. | ||
18 | * You should only work with the number of sg entries pci_map_sg | ||
19 | * returns, or alternatively stop on the first sg_dma_len(sg) which | ||
20 | * is 0. | ||
21 | */ | ||
22 | #define sg_dma_address(sg) ((sg)->dma_address) | ||
23 | #define sg_dma_len(sg) ((sg)->length) | ||
24 | |||
25 | #endif /* _ASMARM_SCATTERLIST_H */ | ||
diff --git a/include/asm-arm/sections.h b/include/asm-arm/sections.h new file mode 100644 index 000000000000..2b8c5160388f --- /dev/null +++ b/include/asm-arm/sections.h | |||
@@ -0,0 +1 @@ | |||
#include <asm-generic/sections.h> | |||
diff --git a/include/asm-arm/segment.h b/include/asm-arm/segment.h new file mode 100644 index 000000000000..9e24c21f6304 --- /dev/null +++ b/include/asm-arm/segment.h | |||
@@ -0,0 +1,11 @@ | |||
1 | #ifndef __ASM_ARM_SEGMENT_H | ||
2 | #define __ASM_ARM_SEGMENT_H | ||
3 | |||
4 | #define __KERNEL_CS 0x0 | ||
5 | #define __KERNEL_DS 0x0 | ||
6 | |||
7 | #define __USER_CS 0x1 | ||
8 | #define __USER_DS 0x1 | ||
9 | |||
10 | #endif /* __ASM_ARM_SEGMENT_H */ | ||
11 | |||
diff --git a/include/asm-arm/semaphore-helper.h b/include/asm-arm/semaphore-helper.h new file mode 100644 index 000000000000..1d7f1987edb9 --- /dev/null +++ b/include/asm-arm/semaphore-helper.h | |||
@@ -0,0 +1,84 @@ | |||
1 | #ifndef ASMARM_SEMAPHORE_HELPER_H | ||
2 | #define ASMARM_SEMAPHORE_HELPER_H | ||
3 | |||
4 | /* | ||
5 | * These two _must_ execute atomically wrt each other. | ||
6 | */ | ||
7 | static inline void wake_one_more(struct semaphore * sem) | ||
8 | { | ||
9 | unsigned long flags; | ||
10 | |||
11 | spin_lock_irqsave(&semaphore_wake_lock, flags); | ||
12 | if (atomic_read(&sem->count) <= 0) | ||
13 | sem->waking++; | ||
14 | spin_unlock_irqrestore(&semaphore_wake_lock, flags); | ||
15 | } | ||
16 | |||
17 | static inline int waking_non_zero(struct semaphore *sem) | ||
18 | { | ||
19 | unsigned long flags; | ||
20 | int ret = 0; | ||
21 | |||
22 | spin_lock_irqsave(&semaphore_wake_lock, flags); | ||
23 | if (sem->waking > 0) { | ||
24 | sem->waking--; | ||
25 | ret = 1; | ||
26 | } | ||
27 | spin_unlock_irqrestore(&semaphore_wake_lock, flags); | ||
28 | return ret; | ||
29 | } | ||
30 | |||
31 | /* | ||
32 | * waking non zero interruptible | ||
33 | * 1 got the lock | ||
34 | * 0 go to sleep | ||
35 | * -EINTR interrupted | ||
36 | * | ||
37 | * We must undo the sem->count down_interruptible() increment while we are | ||
38 | * protected by the spinlock in order to make this atomic_inc() with the | ||
39 | * atomic_read() in wake_one_more(), otherwise we can race. -arca | ||
40 | */ | ||
41 | static inline int waking_non_zero_interruptible(struct semaphore *sem, | ||
42 | struct task_struct *tsk) | ||
43 | { | ||
44 | unsigned long flags; | ||
45 | int ret = 0; | ||
46 | |||
47 | spin_lock_irqsave(&semaphore_wake_lock, flags); | ||
48 | if (sem->waking > 0) { | ||
49 | sem->waking--; | ||
50 | ret = 1; | ||
51 | } else if (signal_pending(tsk)) { | ||
52 | atomic_inc(&sem->count); | ||
53 | ret = -EINTR; | ||
54 | } | ||
55 | spin_unlock_irqrestore(&semaphore_wake_lock, flags); | ||
56 | return ret; | ||
57 | } | ||
58 | |||
59 | /* | ||
60 | * waking_non_zero_try_lock: | ||
61 | * 1 failed to lock | ||
62 | * 0 got the lock | ||
63 | * | ||
64 | * We must undo the sem->count down_interruptible() increment while we are | ||
65 | * protected by the spinlock in order to make this atomic_inc() with the | ||
66 | * atomic_read() in wake_one_more(), otherwise we can race. -arca | ||
67 | */ | ||
68 | static inline int waking_non_zero_trylock(struct semaphore *sem) | ||
69 | { | ||
70 | unsigned long flags; | ||
71 | int ret = 1; | ||
72 | |||
73 | spin_lock_irqsave(&semaphore_wake_lock, flags); | ||
74 | if (sem->waking <= 0) | ||
75 | atomic_inc(&sem->count); | ||
76 | else { | ||
77 | sem->waking--; | ||
78 | ret = 0; | ||
79 | } | ||
80 | spin_unlock_irqrestore(&semaphore_wake_lock, flags); | ||
81 | return ret; | ||
82 | } | ||
83 | |||
84 | #endif | ||
diff --git a/include/asm-arm/semaphore.h b/include/asm-arm/semaphore.h new file mode 100644 index 000000000000..60f33e6eb800 --- /dev/null +++ b/include/asm-arm/semaphore.h | |||
@@ -0,0 +1,106 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/semaphore.h | ||
3 | */ | ||
4 | #ifndef __ASM_ARM_SEMAPHORE_H | ||
5 | #define __ASM_ARM_SEMAPHORE_H | ||
6 | |||
7 | #include <linux/linkage.h> | ||
8 | #include <linux/spinlock.h> | ||
9 | #include <linux/wait.h> | ||
10 | #include <linux/rwsem.h> | ||
11 | |||
12 | #include <asm/atomic.h> | ||
13 | #include <asm/locks.h> | ||
14 | |||
15 | struct semaphore { | ||
16 | atomic_t count; | ||
17 | int sleepers; | ||
18 | wait_queue_head_t wait; | ||
19 | }; | ||
20 | |||
21 | #define __SEMAPHORE_INIT(name, cnt) \ | ||
22 | { \ | ||
23 | .count = ATOMIC_INIT(cnt), \ | ||
24 | .wait = __WAIT_QUEUE_HEAD_INITIALIZER((name).wait), \ | ||
25 | } | ||
26 | |||
27 | #define __MUTEX_INITIALIZER(name) __SEMAPHORE_INIT(name,1) | ||
28 | |||
29 | #define __DECLARE_SEMAPHORE_GENERIC(name,count) \ | ||
30 | struct semaphore name = __SEMAPHORE_INIT(name,count) | ||
31 | |||
32 | #define DECLARE_MUTEX(name) __DECLARE_SEMAPHORE_GENERIC(name,1) | ||
33 | #define DECLARE_MUTEX_LOCKED(name) __DECLARE_SEMAPHORE_GENERIC(name,0) | ||
34 | |||
35 | static inline void sema_init(struct semaphore *sem, int val) | ||
36 | { | ||
37 | atomic_set(&sem->count, val); | ||
38 | sem->sleepers = 0; | ||
39 | init_waitqueue_head(&sem->wait); | ||
40 | } | ||
41 | |||
42 | static inline void init_MUTEX(struct semaphore *sem) | ||
43 | { | ||
44 | sema_init(sem, 1); | ||
45 | } | ||
46 | |||
47 | static inline void init_MUTEX_LOCKED(struct semaphore *sem) | ||
48 | { | ||
49 | sema_init(sem, 0); | ||
50 | } | ||
51 | |||
52 | static inline int sema_count(struct semaphore *sem) | ||
53 | { | ||
54 | return atomic_read(&sem->count); | ||
55 | } | ||
56 | |||
57 | /* | ||
58 | * special register calling convention | ||
59 | */ | ||
60 | asmlinkage void __down_failed(void); | ||
61 | asmlinkage int __down_interruptible_failed(void); | ||
62 | asmlinkage int __down_trylock_failed(void); | ||
63 | asmlinkage void __up_wakeup(void); | ||
64 | |||
65 | extern void __down(struct semaphore * sem); | ||
66 | extern int __down_interruptible(struct semaphore * sem); | ||
67 | extern int __down_trylock(struct semaphore * sem); | ||
68 | extern void __up(struct semaphore * sem); | ||
69 | |||
70 | /* | ||
71 | * This is ugly, but we want the default case to fall through. | ||
72 | * "__down" is the actual routine that waits... | ||
73 | */ | ||
74 | static inline void down(struct semaphore * sem) | ||
75 | { | ||
76 | might_sleep(); | ||
77 | __down_op(sem, __down_failed); | ||
78 | } | ||
79 | |||
80 | /* | ||
81 | * This is ugly, but we want the default case to fall through. | ||
82 | * "__down_interruptible" is the actual routine that waits... | ||
83 | */ | ||
84 | static inline int down_interruptible (struct semaphore * sem) | ||
85 | { | ||
86 | might_sleep(); | ||
87 | return __down_op_ret(sem, __down_interruptible_failed); | ||
88 | } | ||
89 | |||
90 | static inline int down_trylock(struct semaphore *sem) | ||
91 | { | ||
92 | return __down_op_ret(sem, __down_trylock_failed); | ||
93 | } | ||
94 | |||
95 | /* | ||
96 | * Note! This is subtle. We jump to wake people up only if | ||
97 | * the semaphore was negative (== somebody was waiting on it). | ||
98 | * The default case (no contention) will result in NO | ||
99 | * jumps for both down() and up(). | ||
100 | */ | ||
101 | static inline void up(struct semaphore * sem) | ||
102 | { | ||
103 | __up_op(sem, __up_wakeup); | ||
104 | } | ||
105 | |||
106 | #endif | ||
diff --git a/include/asm-arm/sembuf.h b/include/asm-arm/sembuf.h new file mode 100644 index 000000000000..1c0283954289 --- /dev/null +++ b/include/asm-arm/sembuf.h | |||
@@ -0,0 +1,25 @@ | |||
1 | #ifndef _ASMARM_SEMBUF_H | ||
2 | #define _ASMARM_SEMBUF_H | ||
3 | |||
4 | /* | ||
5 | * The semid64_ds structure for arm architecture. | ||
6 | * Note extra padding because this structure is passed back and forth | ||
7 | * between kernel and user space. | ||
8 | * | ||
9 | * Pad space is left for: | ||
10 | * - 64-bit time_t to solve y2038 problem | ||
11 | * - 2 miscellaneous 32-bit values | ||
12 | */ | ||
13 | |||
14 | struct semid64_ds { | ||
15 | struct ipc64_perm sem_perm; /* permissions .. see ipc.h */ | ||
16 | __kernel_time_t sem_otime; /* last semop time */ | ||
17 | unsigned long __unused1; | ||
18 | __kernel_time_t sem_ctime; /* last change time */ | ||
19 | unsigned long __unused2; | ||
20 | unsigned long sem_nsems; /* no. of semaphores in array */ | ||
21 | unsigned long __unused3; | ||
22 | unsigned long __unused4; | ||
23 | }; | ||
24 | |||
25 | #endif /* _ASMARM_SEMBUF_H */ | ||
diff --git a/include/asm-arm/serial.h b/include/asm-arm/serial.h new file mode 100644 index 000000000000..015b262dc145 --- /dev/null +++ b/include/asm-arm/serial.h | |||
@@ -0,0 +1,19 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/serial.h | ||
3 | * | ||
4 | * Copyright (C) 1996 Russell King. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | * Changelog: | ||
11 | * 15-10-1996 RMK Created | ||
12 | */ | ||
13 | |||
14 | #ifndef __ASM_SERIAL_H | ||
15 | #define __ASM_SERIAL_H | ||
16 | |||
17 | #define BASE_BAUD (1843200 / 16) | ||
18 | |||
19 | #endif | ||
diff --git a/include/asm-arm/setup.h b/include/asm-arm/setup.h new file mode 100644 index 000000000000..adcbd79762bf --- /dev/null +++ b/include/asm-arm/setup.h | |||
@@ -0,0 +1,218 @@ | |||
1 | /* | ||
2 | * linux/include/asm/setup.h | ||
3 | * | ||
4 | * Copyright (C) 1997-1999 Russell King | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | * Structure passed to kernel to tell it about the | ||
11 | * hardware it's running on. See Documentation/arm/Setup | ||
12 | * for more info. | ||
13 | */ | ||
14 | #ifndef __ASMARM_SETUP_H | ||
15 | #define __ASMARM_SETUP_H | ||
16 | |||
17 | #define COMMAND_LINE_SIZE 1024 | ||
18 | |||
19 | /* The list ends with an ATAG_NONE node. */ | ||
20 | #define ATAG_NONE 0x00000000 | ||
21 | |||
22 | struct tag_header { | ||
23 | u32 size; | ||
24 | u32 tag; | ||
25 | }; | ||
26 | |||
27 | /* The list must start with an ATAG_CORE node */ | ||
28 | #define ATAG_CORE 0x54410001 | ||
29 | |||
30 | struct tag_core { | ||
31 | u32 flags; /* bit 0 = read-only */ | ||
32 | u32 pagesize; | ||
33 | u32 rootdev; | ||
34 | }; | ||
35 | |||
36 | /* it is allowed to have multiple ATAG_MEM nodes */ | ||
37 | #define ATAG_MEM 0x54410002 | ||
38 | |||
39 | struct tag_mem32 { | ||
40 | u32 size; | ||
41 | u32 start; /* physical start address */ | ||
42 | }; | ||
43 | |||
44 | /* VGA text type displays */ | ||
45 | #define ATAG_VIDEOTEXT 0x54410003 | ||
46 | |||
47 | struct tag_videotext { | ||
48 | u8 x; | ||
49 | u8 y; | ||
50 | u16 video_page; | ||
51 | u8 video_mode; | ||
52 | u8 video_cols; | ||
53 | u16 video_ega_bx; | ||
54 | u8 video_lines; | ||
55 | u8 video_isvga; | ||
56 | u16 video_points; | ||
57 | }; | ||
58 | |||
59 | /* describes how the ramdisk will be used in kernel */ | ||
60 | #define ATAG_RAMDISK 0x54410004 | ||
61 | |||
62 | struct tag_ramdisk { | ||
63 | u32 flags; /* bit 0 = load, bit 1 = prompt */ | ||
64 | u32 size; /* decompressed ramdisk size in _kilo_ bytes */ | ||
65 | u32 start; /* starting block of floppy-based RAM disk image */ | ||
66 | }; | ||
67 | |||
68 | /* describes where the compressed ramdisk image lives (virtual address) */ | ||
69 | /* | ||
70 | * this one accidentally used virtual addresses - as such, | ||
71 | * it's deprecated. | ||
72 | */ | ||
73 | #define ATAG_INITRD 0x54410005 | ||
74 | |||
75 | /* describes where the compressed ramdisk image lives (physical address) */ | ||
76 | #define ATAG_INITRD2 0x54420005 | ||
77 | |||
78 | struct tag_initrd { | ||
79 | u32 start; /* physical start address */ | ||
80 | u32 size; /* size of compressed ramdisk image in bytes */ | ||
81 | }; | ||
82 | |||
83 | /* board serial number. "64 bits should be enough for everybody" */ | ||
84 | #define ATAG_SERIAL 0x54410006 | ||
85 | |||
86 | struct tag_serialnr { | ||
87 | u32 low; | ||
88 | u32 high; | ||
89 | }; | ||
90 | |||
91 | /* board revision */ | ||
92 | #define ATAG_REVISION 0x54410007 | ||
93 | |||
94 | struct tag_revision { | ||
95 | u32 rev; | ||
96 | }; | ||
97 | |||
98 | /* initial values for vesafb-type framebuffers. see struct screen_info | ||
99 | * in include/linux/tty.h | ||
100 | */ | ||
101 | #define ATAG_VIDEOLFB 0x54410008 | ||
102 | |||
103 | struct tag_videolfb { | ||
104 | u16 lfb_width; | ||
105 | u16 lfb_height; | ||
106 | u16 lfb_depth; | ||
107 | u16 lfb_linelength; | ||
108 | u32 lfb_base; | ||
109 | u32 lfb_size; | ||
110 | u8 red_size; | ||
111 | u8 red_pos; | ||
112 | u8 green_size; | ||
113 | u8 green_pos; | ||
114 | u8 blue_size; | ||
115 | u8 blue_pos; | ||
116 | u8 rsvd_size; | ||
117 | u8 rsvd_pos; | ||
118 | }; | ||
119 | |||
120 | /* command line: \0 terminated string */ | ||
121 | #define ATAG_CMDLINE 0x54410009 | ||
122 | |||
123 | struct tag_cmdline { | ||
124 | char cmdline[1]; /* this is the minimum size */ | ||
125 | }; | ||
126 | |||
127 | /* acorn RiscPC specific information */ | ||
128 | #define ATAG_ACORN 0x41000101 | ||
129 | |||
130 | struct tag_acorn { | ||
131 | u32 memc_control_reg; | ||
132 | u32 vram_pages; | ||
133 | u8 sounddefault; | ||
134 | u8 adfsdrives; | ||
135 | }; | ||
136 | |||
137 | /* footbridge memory clock, see arch/arm/mach-footbridge/arch.c */ | ||
138 | #define ATAG_MEMCLK 0x41000402 | ||
139 | |||
140 | struct tag_memclk { | ||
141 | u32 fmemclk; | ||
142 | }; | ||
143 | |||
144 | struct tag { | ||
145 | struct tag_header hdr; | ||
146 | union { | ||
147 | struct tag_core core; | ||
148 | struct tag_mem32 mem; | ||
149 | struct tag_videotext videotext; | ||
150 | struct tag_ramdisk ramdisk; | ||
151 | struct tag_initrd initrd; | ||
152 | struct tag_serialnr serialnr; | ||
153 | struct tag_revision revision; | ||
154 | struct tag_videolfb videolfb; | ||
155 | struct tag_cmdline cmdline; | ||
156 | |||
157 | /* | ||
158 | * Acorn specific | ||
159 | */ | ||
160 | struct tag_acorn acorn; | ||
161 | |||
162 | /* | ||
163 | * DC21285 specific | ||
164 | */ | ||
165 | struct tag_memclk memclk; | ||
166 | } u; | ||
167 | }; | ||
168 | |||
169 | struct tagtable { | ||
170 | u32 tag; | ||
171 | int (*parse)(const struct tag *); | ||
172 | }; | ||
173 | |||
174 | #define __tag __attribute_used__ __attribute__((__section__(".taglist"))) | ||
175 | #define __tagtable(tag, fn) \ | ||
176 | static struct tagtable __tagtable_##fn __tag = { tag, fn } | ||
177 | |||
178 | #define tag_member_present(tag,member) \ | ||
179 | ((unsigned long)(&((struct tag *)0L)->member + 1) \ | ||
180 | <= (tag)->hdr.size * 4) | ||
181 | |||
182 | #define tag_next(t) ((struct tag *)((u32 *)(t) + (t)->hdr.size)) | ||
183 | #define tag_size(type) ((sizeof(struct tag_header) + sizeof(struct type)) >> 2) | ||
184 | |||
185 | #define for_each_tag(t,base) \ | ||
186 | for (t = base; t->hdr.size; t = tag_next(t)) | ||
187 | |||
188 | /* | ||
189 | * Memory map description | ||
190 | */ | ||
191 | #ifdef CONFIG_ARCH_LH7A40X | ||
192 | # define NR_BANKS 16 | ||
193 | #else | ||
194 | # define NR_BANKS 8 | ||
195 | #endif | ||
196 | |||
197 | struct meminfo { | ||
198 | int nr_banks; | ||
199 | struct { | ||
200 | unsigned long start; | ||
201 | unsigned long size; | ||
202 | int node; | ||
203 | } bank[NR_BANKS]; | ||
204 | }; | ||
205 | |||
206 | /* | ||
207 | * Early command line parameters. | ||
208 | */ | ||
209 | struct early_params { | ||
210 | const char *arg; | ||
211 | void (*fn)(char **p); | ||
212 | }; | ||
213 | |||
214 | #define __early_param(name,fn) \ | ||
215 | static struct early_params __early_##fn __attribute_used__ \ | ||
216 | __attribute__((__section__("__early_param"))) = { name, fn } | ||
217 | |||
218 | #endif | ||
diff --git a/include/asm-arm/shmbuf.h b/include/asm-arm/shmbuf.h new file mode 100644 index 000000000000..2e5c67ba1c97 --- /dev/null +++ b/include/asm-arm/shmbuf.h | |||
@@ -0,0 +1,42 @@ | |||
1 | #ifndef _ASMARM_SHMBUF_H | ||
2 | #define _ASMARM_SHMBUF_H | ||
3 | |||
4 | /* | ||
5 | * The shmid64_ds structure for arm architecture. | ||
6 | * Note extra padding because this structure is passed back and forth | ||
7 | * between kernel and user space. | ||
8 | * | ||
9 | * Pad space is left for: | ||
10 | * - 64-bit time_t to solve y2038 problem | ||
11 | * - 2 miscellaneous 32-bit values | ||
12 | */ | ||
13 | |||
14 | struct shmid64_ds { | ||
15 | struct ipc64_perm shm_perm; /* operation perms */ | ||
16 | size_t shm_segsz; /* size of segment (bytes) */ | ||
17 | __kernel_time_t shm_atime; /* last attach time */ | ||
18 | unsigned long __unused1; | ||
19 | __kernel_time_t shm_dtime; /* last detach time */ | ||
20 | unsigned long __unused2; | ||
21 | __kernel_time_t shm_ctime; /* last change time */ | ||
22 | unsigned long __unused3; | ||
23 | __kernel_pid_t shm_cpid; /* pid of creator */ | ||
24 | __kernel_pid_t shm_lpid; /* pid of last operator */ | ||
25 | unsigned long shm_nattch; /* no. of current attaches */ | ||
26 | unsigned long __unused4; | ||
27 | unsigned long __unused5; | ||
28 | }; | ||
29 | |||
30 | struct shminfo64 { | ||
31 | unsigned long shmmax; | ||
32 | unsigned long shmmin; | ||
33 | unsigned long shmmni; | ||
34 | unsigned long shmseg; | ||
35 | unsigned long shmall; | ||
36 | unsigned long __unused1; | ||
37 | unsigned long __unused2; | ||
38 | unsigned long __unused3; | ||
39 | unsigned long __unused4; | ||
40 | }; | ||
41 | |||
42 | #endif /* _ASMARM_SHMBUF_H */ | ||
diff --git a/include/asm-arm/shmparam.h b/include/asm-arm/shmparam.h new file mode 100644 index 000000000000..a5223b3a9bf9 --- /dev/null +++ b/include/asm-arm/shmparam.h | |||
@@ -0,0 +1,16 @@ | |||
1 | #ifndef _ASMARM_SHMPARAM_H | ||
2 | #define _ASMARM_SHMPARAM_H | ||
3 | |||
4 | /* | ||
5 | * This should be the size of the virtually indexed cache/ways, | ||
6 | * or page size, whichever is greater since the cache aliases | ||
7 | * every size/ways bytes. | ||
8 | */ | ||
9 | #define SHMLBA (4 * PAGE_SIZE) /* attach addr a multiple of this */ | ||
10 | |||
11 | /* | ||
12 | * Enforce SHMLBA in shmat | ||
13 | */ | ||
14 | #define __ARCH_FORCE_SHMLBA | ||
15 | |||
16 | #endif /* _ASMARM_SHMPARAM_H */ | ||
diff --git a/include/asm-arm/sigcontext.h b/include/asm-arm/sigcontext.h new file mode 100644 index 000000000000..fc0b80b6a6fc --- /dev/null +++ b/include/asm-arm/sigcontext.h | |||
@@ -0,0 +1,34 @@ | |||
1 | #ifndef _ASMARM_SIGCONTEXT_H | ||
2 | #define _ASMARM_SIGCONTEXT_H | ||
3 | |||
4 | /* | ||
5 | * Signal context structure - contains all info to do with the state | ||
6 | * before the signal handler was invoked. Note: only add new entries | ||
7 | * to the end of the structure. | ||
8 | */ | ||
9 | struct sigcontext { | ||
10 | unsigned long trap_no; | ||
11 | unsigned long error_code; | ||
12 | unsigned long oldmask; | ||
13 | unsigned long arm_r0; | ||
14 | unsigned long arm_r1; | ||
15 | unsigned long arm_r2; | ||
16 | unsigned long arm_r3; | ||
17 | unsigned long arm_r4; | ||
18 | unsigned long arm_r5; | ||
19 | unsigned long arm_r6; | ||
20 | unsigned long arm_r7; | ||
21 | unsigned long arm_r8; | ||
22 | unsigned long arm_r9; | ||
23 | unsigned long arm_r10; | ||
24 | unsigned long arm_fp; | ||
25 | unsigned long arm_ip; | ||
26 | unsigned long arm_sp; | ||
27 | unsigned long arm_lr; | ||
28 | unsigned long arm_pc; | ||
29 | unsigned long arm_cpsr; | ||
30 | unsigned long fault_address; | ||
31 | }; | ||
32 | |||
33 | |||
34 | #endif | ||
diff --git a/include/asm-arm/siginfo.h b/include/asm-arm/siginfo.h new file mode 100644 index 000000000000..5e21852e6039 --- /dev/null +++ b/include/asm-arm/siginfo.h | |||
@@ -0,0 +1,6 @@ | |||
1 | #ifndef _ASMARM_SIGINFO_H | ||
2 | #define _ASMARM_SIGINFO_H | ||
3 | |||
4 | #include <asm-generic/siginfo.h> | ||
5 | |||
6 | #endif | ||
diff --git a/include/asm-arm/signal.h b/include/asm-arm/signal.h new file mode 100644 index 000000000000..b033e5fd60fa --- /dev/null +++ b/include/asm-arm/signal.h | |||
@@ -0,0 +1,194 @@ | |||
1 | #ifndef _ASMARM_SIGNAL_H | ||
2 | #define _ASMARM_SIGNAL_H | ||
3 | |||
4 | #include <linux/types.h> | ||
5 | |||
6 | /* Avoid too many header ordering problems. */ | ||
7 | struct siginfo; | ||
8 | |||
9 | #ifdef __KERNEL__ | ||
10 | /* Most things should be clean enough to redefine this at will, if care | ||
11 | is taken to make libc match. */ | ||
12 | |||
13 | #define _NSIG 64 | ||
14 | #define _NSIG_BPW 32 | ||
15 | #define _NSIG_WORDS (_NSIG / _NSIG_BPW) | ||
16 | |||
17 | typedef unsigned long old_sigset_t; /* at least 32 bits */ | ||
18 | |||
19 | typedef struct { | ||
20 | unsigned long sig[_NSIG_WORDS]; | ||
21 | } sigset_t; | ||
22 | |||
23 | #else | ||
24 | /* Here we must cater to libcs that poke about in kernel headers. */ | ||
25 | |||
26 | #define NSIG 32 | ||
27 | typedef unsigned long sigset_t; | ||
28 | |||
29 | #endif /* __KERNEL__ */ | ||
30 | |||
31 | #define SIGHUP 1 | ||
32 | #define SIGINT 2 | ||
33 | #define SIGQUIT 3 | ||
34 | #define SIGILL 4 | ||
35 | #define SIGTRAP 5 | ||
36 | #define SIGABRT 6 | ||
37 | #define SIGIOT 6 | ||
38 | #define SIGBUS 7 | ||
39 | #define SIGFPE 8 | ||
40 | #define SIGKILL 9 | ||
41 | #define SIGUSR1 10 | ||
42 | #define SIGSEGV 11 | ||
43 | #define SIGUSR2 12 | ||
44 | #define SIGPIPE 13 | ||
45 | #define SIGALRM 14 | ||
46 | #define SIGTERM 15 | ||
47 | #define SIGSTKFLT 16 | ||
48 | #define SIGCHLD 17 | ||
49 | #define SIGCONT 18 | ||
50 | #define SIGSTOP 19 | ||
51 | #define SIGTSTP 20 | ||
52 | #define SIGTTIN 21 | ||
53 | #define SIGTTOU 22 | ||
54 | #define SIGURG 23 | ||
55 | #define SIGXCPU 24 | ||
56 | #define SIGXFSZ 25 | ||
57 | #define SIGVTALRM 26 | ||
58 | #define SIGPROF 27 | ||
59 | #define SIGWINCH 28 | ||
60 | #define SIGIO 29 | ||
61 | #define SIGPOLL SIGIO | ||
62 | /* | ||
63 | #define SIGLOST 29 | ||
64 | */ | ||
65 | #define SIGPWR 30 | ||
66 | #define SIGSYS 31 | ||
67 | #define SIGUNUSED 31 | ||
68 | |||
69 | /* These should not be considered constants from userland. */ | ||
70 | #define SIGRTMIN 32 | ||
71 | #define SIGRTMAX _NSIG | ||
72 | |||
73 | #define SIGSWI 32 | ||
74 | |||
75 | /* | ||
76 | * SA_FLAGS values: | ||
77 | * | ||
78 | * SA_NOCLDSTOP flag to turn off SIGCHLD when children stop. | ||
79 | * SA_NOCLDWAIT flag on SIGCHLD to inhibit zombies. | ||
80 | * SA_SIGINFO deliver the signal with SIGINFO structs | ||
81 | * SA_THIRTYTWO delivers the signal in 32-bit mode, even if the task | ||
82 | * is running in 26-bit. | ||
83 | * SA_ONSTACK allows alternate signal stacks (see sigaltstack(2)). | ||
84 | * SA_RESTART flag to get restarting signals (which were the default long ago) | ||
85 | * SA_INTERRUPT is a no-op, but left due to historical reasons. Use the | ||
86 | * SA_NODEFER prevents the current signal from being masked in the handler. | ||
87 | * SA_RESETHAND clears the handler when the signal is delivered. | ||
88 | * | ||
89 | * SA_ONESHOT and SA_NOMASK are the historical Linux names for the Single | ||
90 | * Unix names RESETHAND and NODEFER respectively. | ||
91 | */ | ||
92 | #define SA_NOCLDSTOP 0x00000001 | ||
93 | #define SA_NOCLDWAIT 0x00000002 | ||
94 | #define SA_SIGINFO 0x00000004 | ||
95 | #define SA_THIRTYTWO 0x02000000 | ||
96 | #define SA_RESTORER 0x04000000 | ||
97 | #define SA_ONSTACK 0x08000000 | ||
98 | #define SA_RESTART 0x10000000 | ||
99 | #define SA_NODEFER 0x40000000 | ||
100 | #define SA_RESETHAND 0x80000000 | ||
101 | |||
102 | #define SA_NOMASK SA_NODEFER | ||
103 | #define SA_ONESHOT SA_RESETHAND | ||
104 | #define SA_INTERRUPT 0x20000000 /* dummy -- ignored */ | ||
105 | |||
106 | |||
107 | /* | ||
108 | * sigaltstack controls | ||
109 | */ | ||
110 | #define SS_ONSTACK 1 | ||
111 | #define SS_DISABLE 2 | ||
112 | |||
113 | #define MINSIGSTKSZ 2048 | ||
114 | #define SIGSTKSZ 8192 | ||
115 | |||
116 | #ifdef __KERNEL__ | ||
117 | |||
118 | /* | ||
119 | * These values of sa_flags are used only by the kernel as part of the | ||
120 | * irq handling routines. | ||
121 | * | ||
122 | * SA_INTERRUPT is also used by the irq handling routines. | ||
123 | * SA_SHIRQ is for shared interrupt support on PCI and EISA. | ||
124 | */ | ||
125 | #define SA_PROBE 0x80000000 | ||
126 | #define SA_SAMPLE_RANDOM 0x10000000 | ||
127 | #define SA_IRQNOMASK 0x08000000 | ||
128 | #define SA_SHIRQ 0x04000000 | ||
129 | #endif | ||
130 | |||
131 | #define SIG_BLOCK 0 /* for blocking signals */ | ||
132 | #define SIG_UNBLOCK 1 /* for unblocking signals */ | ||
133 | #define SIG_SETMASK 2 /* for setting the signal mask */ | ||
134 | |||
135 | /* Type of a signal handler. */ | ||
136 | typedef void __signalfn_t(int); | ||
137 | typedef __signalfn_t __user *__sighandler_t; | ||
138 | |||
139 | typedef void __restorefn_t(void); | ||
140 | typedef __restorefn_t __user *__sigrestore_t; | ||
141 | |||
142 | #define SIG_DFL ((__sighandler_t)0) /* default signal handling */ | ||
143 | #define SIG_IGN ((__sighandler_t)1) /* ignore signal */ | ||
144 | #define SIG_ERR ((__sighandler_t)-1) /* error return from signal */ | ||
145 | |||
146 | #ifdef __KERNEL__ | ||
147 | struct old_sigaction { | ||
148 | __sighandler_t sa_handler; | ||
149 | old_sigset_t sa_mask; | ||
150 | unsigned long sa_flags; | ||
151 | __sigrestore_t sa_restorer; | ||
152 | }; | ||
153 | |||
154 | struct sigaction { | ||
155 | __sighandler_t sa_handler; | ||
156 | unsigned long sa_flags; | ||
157 | __sigrestore_t sa_restorer; | ||
158 | sigset_t sa_mask; /* mask last for extensibility */ | ||
159 | }; | ||
160 | |||
161 | struct k_sigaction { | ||
162 | struct sigaction sa; | ||
163 | }; | ||
164 | |||
165 | #else | ||
166 | /* Here we must cater to libcs that poke about in kernel headers. */ | ||
167 | |||
168 | struct sigaction { | ||
169 | union { | ||
170 | __sighandler_t _sa_handler; | ||
171 | void (*_sa_sigaction)(int, struct siginfo *, void *); | ||
172 | } _u; | ||
173 | sigset_t sa_mask; | ||
174 | unsigned long sa_flags; | ||
175 | void (*sa_restorer)(void); | ||
176 | }; | ||
177 | |||
178 | #define sa_handler _u._sa_handler | ||
179 | #define sa_sigaction _u._sa_sigaction | ||
180 | |||
181 | #endif /* __KERNEL__ */ | ||
182 | |||
183 | typedef struct sigaltstack { | ||
184 | void __user *ss_sp; | ||
185 | int ss_flags; | ||
186 | size_t ss_size; | ||
187 | } stack_t; | ||
188 | |||
189 | #ifdef __KERNEL__ | ||
190 | #include <asm/sigcontext.h> | ||
191 | #define ptrace_signal_deliver(regs, cookie) do { } while (0) | ||
192 | #endif | ||
193 | |||
194 | #endif | ||
diff --git a/include/asm-arm/sizes.h b/include/asm-arm/sizes.h new file mode 100644 index 000000000000..7f50ae0edf1b --- /dev/null +++ b/include/asm-arm/sizes.h | |||
@@ -0,0 +1,52 @@ | |||
1 | /* | ||
2 | * This program is free software; you can redistribute it and/or modify | ||
3 | * it under the terms of the GNU General Public License as published by | ||
4 | * the Free Software Foundation; either version 2 of the License, or | ||
5 | * (at your option) any later version. | ||
6 | * | ||
7 | * This program is distributed in the hope that it will be useful, | ||
8 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
9 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
10 | * GNU General Public License for more details. | ||
11 | * | ||
12 | * You should have received a copy of the GNU General Public License | ||
13 | * along with this program; if not, write to the Free Software | ||
14 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
15 | */ | ||
16 | /* DO NOT EDIT!! - this file automatically generated | ||
17 | * from .s file by awk -f s2h.awk | ||
18 | */ | ||
19 | /* Size definitions | ||
20 | * Copyright (C) ARM Limited 1998. All rights reserved. | ||
21 | */ | ||
22 | |||
23 | #ifndef __sizes_h | ||
24 | #define __sizes_h 1 | ||
25 | |||
26 | /* handy sizes */ | ||
27 | #define SZ_1K 0x00000400 | ||
28 | #define SZ_4K 0x00001000 | ||
29 | #define SZ_8K 0x00002000 | ||
30 | #define SZ_16K 0x00004000 | ||
31 | #define SZ_64K 0x00010000 | ||
32 | #define SZ_128K 0x00020000 | ||
33 | #define SZ_256K 0x00040000 | ||
34 | #define SZ_512K 0x00080000 | ||
35 | |||
36 | #define SZ_1M 0x00100000 | ||
37 | #define SZ_2M 0x00200000 | ||
38 | #define SZ_4M 0x00400000 | ||
39 | #define SZ_8M 0x00800000 | ||
40 | #define SZ_16M 0x01000000 | ||
41 | #define SZ_32M 0x02000000 | ||
42 | #define SZ_64M 0x04000000 | ||
43 | #define SZ_128M 0x08000000 | ||
44 | #define SZ_256M 0x10000000 | ||
45 | #define SZ_512M 0x20000000 | ||
46 | |||
47 | #define SZ_1G 0x40000000 | ||
48 | #define SZ_2G 0x80000000 | ||
49 | |||
50 | #endif | ||
51 | |||
52 | /* END */ | ||
diff --git a/include/asm-arm/smp.h b/include/asm-arm/smp.h new file mode 100644 index 000000000000..f21fd8f6bcdd --- /dev/null +++ b/include/asm-arm/smp.h | |||
@@ -0,0 +1,58 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/smp.h | ||
3 | * | ||
4 | * Copyright (C) 2004-2005 ARM Ltd. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | */ | ||
10 | #ifndef __ASM_ARM_SMP_H | ||
11 | #define __ASM_ARM_SMP_H | ||
12 | |||
13 | #include <linux/config.h> | ||
14 | #include <linux/threads.h> | ||
15 | #include <linux/cpumask.h> | ||
16 | #include <linux/thread_info.h> | ||
17 | |||
18 | #include <asm/arch/smp.h> | ||
19 | |||
20 | #ifndef CONFIG_SMP | ||
21 | # error "<asm-arm/smp.h> included in non-SMP build" | ||
22 | #endif | ||
23 | |||
24 | #define smp_processor_id() (current_thread_info()->cpu) | ||
25 | |||
26 | extern cpumask_t cpu_present_mask; | ||
27 | #define cpu_possible_map cpu_present_mask | ||
28 | |||
29 | /* | ||
30 | * at the moment, there's not a big penalty for changing CPUs | ||
31 | * (the >big< penalty is running SMP in the first place) | ||
32 | */ | ||
33 | #define PROC_CHANGE_PENALTY 15 | ||
34 | |||
35 | struct seq_file; | ||
36 | |||
37 | /* | ||
38 | * generate IPI list text | ||
39 | */ | ||
40 | extern void show_ipi_list(struct seq_file *p); | ||
41 | |||
42 | /* | ||
43 | * Move global data into per-processor storage. | ||
44 | */ | ||
45 | extern void smp_store_cpu_info(unsigned int cpuid); | ||
46 | |||
47 | /* | ||
48 | * Raise an IPI cross call on CPUs in callmap. | ||
49 | */ | ||
50 | extern void smp_cross_call(cpumask_t callmap); | ||
51 | |||
52 | /* | ||
53 | * Boot a secondary CPU, and assign it the specified idle task. | ||
54 | * This also gives us the initial stack to use for this CPU. | ||
55 | */ | ||
56 | extern int boot_secondary(unsigned int cpu, struct task_struct *); | ||
57 | |||
58 | #endif /* ifndef __ASM_ARM_SMP_H */ | ||
diff --git a/include/asm-arm/socket.h b/include/asm-arm/socket.h new file mode 100644 index 000000000000..46d20585d951 --- /dev/null +++ b/include/asm-arm/socket.h | |||
@@ -0,0 +1,50 @@ | |||
1 | #ifndef _ASMARM_SOCKET_H | ||
2 | #define _ASMARM_SOCKET_H | ||
3 | |||
4 | #include <asm/sockios.h> | ||
5 | |||
6 | /* For setsockopt(2) */ | ||
7 | #define SOL_SOCKET 1 | ||
8 | |||
9 | #define SO_DEBUG 1 | ||
10 | #define SO_REUSEADDR 2 | ||
11 | #define SO_TYPE 3 | ||
12 | #define SO_ERROR 4 | ||
13 | #define SO_DONTROUTE 5 | ||
14 | #define SO_BROADCAST 6 | ||
15 | #define SO_SNDBUF 7 | ||
16 | #define SO_RCVBUF 8 | ||
17 | #define SO_KEEPALIVE 9 | ||
18 | #define SO_OOBINLINE 10 | ||
19 | #define SO_NO_CHECK 11 | ||
20 | #define SO_PRIORITY 12 | ||
21 | #define SO_LINGER 13 | ||
22 | #define SO_BSDCOMPAT 14 | ||
23 | /* To add :#define SO_REUSEPORT 15 */ | ||
24 | #define SO_PASSCRED 16 | ||
25 | #define SO_PEERCRED 17 | ||
26 | #define SO_RCVLOWAT 18 | ||
27 | #define SO_SNDLOWAT 19 | ||
28 | #define SO_RCVTIMEO 20 | ||
29 | #define SO_SNDTIMEO 21 | ||
30 | |||
31 | /* Security levels - as per NRL IPv6 - don't actually do anything */ | ||
32 | #define SO_SECURITY_AUTHENTICATION 22 | ||
33 | #define SO_SECURITY_ENCRYPTION_TRANSPORT 23 | ||
34 | #define SO_SECURITY_ENCRYPTION_NETWORK 24 | ||
35 | |||
36 | #define SO_BINDTODEVICE 25 | ||
37 | |||
38 | /* Socket filtering */ | ||
39 | #define SO_ATTACH_FILTER 26 | ||
40 | #define SO_DETACH_FILTER 27 | ||
41 | |||
42 | #define SO_PEERNAME 28 | ||
43 | #define SO_TIMESTAMP 29 | ||
44 | #define SCM_TIMESTAMP SO_TIMESTAMP | ||
45 | |||
46 | #define SO_ACCEPTCONN 30 | ||
47 | |||
48 | #define SO_PEERSEC 31 | ||
49 | |||
50 | #endif /* _ASM_SOCKET_H */ | ||
diff --git a/include/asm-arm/sockios.h b/include/asm-arm/sockios.h new file mode 100644 index 000000000000..77c34087d513 --- /dev/null +++ b/include/asm-arm/sockios.h | |||
@@ -0,0 +1,12 @@ | |||
1 | #ifndef __ARCH_ARM_SOCKIOS_H | ||
2 | #define __ARCH_ARM_SOCKIOS_H | ||
3 | |||
4 | /* Socket-level I/O control calls. */ | ||
5 | #define FIOSETOWN 0x8901 | ||
6 | #define SIOCSPGRP 0x8902 | ||
7 | #define FIOGETOWN 0x8903 | ||
8 | #define SIOCGPGRP 0x8904 | ||
9 | #define SIOCATMARK 0x8905 | ||
10 | #define SIOCGSTAMP 0x8906 /* Get stamp */ | ||
11 | |||
12 | #endif | ||
diff --git a/include/asm-arm/spinlock.h b/include/asm-arm/spinlock.h new file mode 100644 index 000000000000..182323619caa --- /dev/null +++ b/include/asm-arm/spinlock.h | |||
@@ -0,0 +1,169 @@ | |||
1 | #ifndef __ASM_SPINLOCK_H | ||
2 | #define __ASM_SPINLOCK_H | ||
3 | |||
4 | #if __LINUX_ARM_ARCH__ < 6 | ||
5 | #error SMP not supported on pre-ARMv6 CPUs | ||
6 | #endif | ||
7 | |||
8 | /* | ||
9 | * ARMv6 Spin-locking. | ||
10 | * | ||
11 | * We (exclusively) read the old value, and decrement it. If it | ||
12 | * hits zero, we may have won the lock, so we try (exclusively) | ||
13 | * storing it. | ||
14 | * | ||
15 | * Unlocked value: 0 | ||
16 | * Locked value: 1 | ||
17 | */ | ||
18 | typedef struct { | ||
19 | volatile unsigned int lock; | ||
20 | #ifdef CONFIG_PREEMPT | ||
21 | unsigned int break_lock; | ||
22 | #endif | ||
23 | } spinlock_t; | ||
24 | |||
25 | #define SPIN_LOCK_UNLOCKED (spinlock_t) { 0 } | ||
26 | |||
27 | #define spin_lock_init(x) do { *(x) = SPIN_LOCK_UNLOCKED; } while (0) | ||
28 | #define spin_is_locked(x) ((x)->lock != 0) | ||
29 | #define spin_unlock_wait(x) do { barrier(); } while (spin_is_locked(x)) | ||
30 | #define _raw_spin_lock_flags(lock, flags) _raw_spin_lock(lock) | ||
31 | |||
32 | static inline void _raw_spin_lock(spinlock_t *lock) | ||
33 | { | ||
34 | unsigned long tmp; | ||
35 | |||
36 | __asm__ __volatile__( | ||
37 | "1: ldrex %0, [%1]\n" | ||
38 | " teq %0, #0\n" | ||
39 | " strexeq %0, %2, [%1]\n" | ||
40 | " teqeq %0, #0\n" | ||
41 | " bne 1b" | ||
42 | : "=&r" (tmp) | ||
43 | : "r" (&lock->lock), "r" (1) | ||
44 | : "cc", "memory"); | ||
45 | } | ||
46 | |||
47 | static inline int _raw_spin_trylock(spinlock_t *lock) | ||
48 | { | ||
49 | unsigned long tmp; | ||
50 | |||
51 | __asm__ __volatile__( | ||
52 | " ldrex %0, [%1]\n" | ||
53 | " teq %0, #0\n" | ||
54 | " strexeq %0, %2, [%1]" | ||
55 | : "=&r" (tmp) | ||
56 | : "r" (&lock->lock), "r" (1) | ||
57 | : "cc", "memory"); | ||
58 | |||
59 | return tmp == 0; | ||
60 | } | ||
61 | |||
62 | static inline void _raw_spin_unlock(spinlock_t *lock) | ||
63 | { | ||
64 | __asm__ __volatile__( | ||
65 | " str %1, [%0]" | ||
66 | : | ||
67 | : "r" (&lock->lock), "r" (0) | ||
68 | : "cc", "memory"); | ||
69 | } | ||
70 | |||
71 | /* | ||
72 | * RWLOCKS | ||
73 | */ | ||
74 | typedef struct { | ||
75 | volatile unsigned int lock; | ||
76 | #ifdef CONFIG_PREEMPT | ||
77 | unsigned int break_lock; | ||
78 | #endif | ||
79 | } rwlock_t; | ||
80 | |||
81 | #define RW_LOCK_UNLOCKED (rwlock_t) { 0 } | ||
82 | #define rwlock_init(x) do { *(x) + RW_LOCK_UNLOCKED; } while (0) | ||
83 | |||
84 | /* | ||
85 | * Write locks are easy - we just set bit 31. When unlocking, we can | ||
86 | * just write zero since the lock is exclusively held. | ||
87 | */ | ||
88 | static inline void _raw_write_lock(rwlock_t *rw) | ||
89 | { | ||
90 | unsigned long tmp; | ||
91 | |||
92 | __asm__ __volatile__( | ||
93 | "1: ldrex %0, [%1]\n" | ||
94 | " teq %0, #0\n" | ||
95 | " strexeq %0, %2, [%1]\n" | ||
96 | " teq %0, #0\n" | ||
97 | " bne 1b" | ||
98 | : "=&r" (tmp) | ||
99 | : "r" (&rw->lock), "r" (0x80000000) | ||
100 | : "cc", "memory"); | ||
101 | } | ||
102 | |||
103 | static inline void _raw_write_unlock(rwlock_t *rw) | ||
104 | { | ||
105 | __asm__ __volatile__( | ||
106 | "str %1, [%0]" | ||
107 | : | ||
108 | : "r" (&rw->lock), "r" (0) | ||
109 | : "cc", "memory"); | ||
110 | } | ||
111 | |||
112 | /* | ||
113 | * Read locks are a bit more hairy: | ||
114 | * - Exclusively load the lock value. | ||
115 | * - Increment it. | ||
116 | * - Store new lock value if positive, and we still own this location. | ||
117 | * If the value is negative, we've already failed. | ||
118 | * - If we failed to store the value, we want a negative result. | ||
119 | * - If we failed, try again. | ||
120 | * Unlocking is similarly hairy. We may have multiple read locks | ||
121 | * currently active. However, we know we won't have any write | ||
122 | * locks. | ||
123 | */ | ||
124 | static inline void _raw_read_lock(rwlock_t *rw) | ||
125 | { | ||
126 | unsigned long tmp, tmp2; | ||
127 | |||
128 | __asm__ __volatile__( | ||
129 | "1: ldrex %0, [%2]\n" | ||
130 | " adds %0, %0, #1\n" | ||
131 | " strexpl %1, %0, [%2]\n" | ||
132 | " rsbpls %0, %1, #0\n" | ||
133 | " bmi 1b" | ||
134 | : "=&r" (tmp), "=&r" (tmp2) | ||
135 | : "r" (&rw->lock) | ||
136 | : "cc", "memory"); | ||
137 | } | ||
138 | |||
139 | static inline void _raw_read_unlock(rwlock_t *rw) | ||
140 | { | ||
141 | __asm__ __volatile__( | ||
142 | "1: ldrex %0, [%2]\n" | ||
143 | " sub %0, %0, #1\n" | ||
144 | " strex %1, %0, [%2]\n" | ||
145 | " teq %1, #0\n" | ||
146 | " bne 1b" | ||
147 | : "=&r" (tmp), "=&r" (tmp2) | ||
148 | : "r" (&rw->lock) | ||
149 | : "cc", "memory"); | ||
150 | } | ||
151 | |||
152 | #define _raw_read_trylock(lock) generic_raw_read_trylock(lock) | ||
153 | |||
154 | static inline int _raw_write_trylock(rwlock_t *rw) | ||
155 | { | ||
156 | unsigned long tmp; | ||
157 | |||
158 | __asm__ __volatile__( | ||
159 | "1: ldrex %0, [%1]\n" | ||
160 | " teq %0, #0\n" | ||
161 | " strexeq %0, %2, [%1]" | ||
162 | : "=&r" (tmp) | ||
163 | : "r" (&rw->lock), "r" (0x80000000) | ||
164 | : "cc", "memory"); | ||
165 | |||
166 | return tmp == 0; | ||
167 | } | ||
168 | |||
169 | #endif /* __ASM_SPINLOCK_H */ | ||
diff --git a/include/asm-arm/stat.h b/include/asm-arm/stat.h new file mode 100644 index 000000000000..ca8e7a8436da --- /dev/null +++ b/include/asm-arm/stat.h | |||
@@ -0,0 +1,94 @@ | |||
1 | #ifndef _ASMARM_STAT_H | ||
2 | #define _ASMARM_STAT_H | ||
3 | |||
4 | struct __old_kernel_stat { | ||
5 | unsigned short st_dev; | ||
6 | unsigned short st_ino; | ||
7 | unsigned short st_mode; | ||
8 | unsigned short st_nlink; | ||
9 | unsigned short st_uid; | ||
10 | unsigned short st_gid; | ||
11 | unsigned short st_rdev; | ||
12 | unsigned long st_size; | ||
13 | unsigned long st_atime; | ||
14 | unsigned long st_mtime; | ||
15 | unsigned long st_ctime; | ||
16 | }; | ||
17 | |||
18 | #define STAT_HAVE_NSEC | ||
19 | |||
20 | struct stat { | ||
21 | #if defined(__ARMEB__) | ||
22 | unsigned short st_dev; | ||
23 | unsigned short __pad1; | ||
24 | #else | ||
25 | unsigned long st_dev; | ||
26 | #endif | ||
27 | unsigned long st_ino; | ||
28 | unsigned short st_mode; | ||
29 | unsigned short st_nlink; | ||
30 | unsigned short st_uid; | ||
31 | unsigned short st_gid; | ||
32 | #if defined(__ARMEB__) | ||
33 | unsigned short st_rdev; | ||
34 | unsigned short __pad2; | ||
35 | #else | ||
36 | unsigned long st_rdev; | ||
37 | #endif | ||
38 | unsigned long st_size; | ||
39 | unsigned long st_blksize; | ||
40 | unsigned long st_blocks; | ||
41 | unsigned long st_atime; | ||
42 | unsigned long st_atime_nsec; | ||
43 | unsigned long st_mtime; | ||
44 | unsigned long st_mtime_nsec; | ||
45 | unsigned long st_ctime; | ||
46 | unsigned long st_ctime_nsec; | ||
47 | unsigned long __unused4; | ||
48 | unsigned long __unused5; | ||
49 | }; | ||
50 | |||
51 | /* This matches struct stat64 in glibc2.1, hence the absolutely | ||
52 | * insane amounts of padding around dev_t's. | ||
53 | * Note: The kernel zero's the padded region because glibc might read them | ||
54 | * in the hope that the kernel has stretched to using larger sizes. | ||
55 | */ | ||
56 | struct stat64 { | ||
57 | unsigned long long st_dev; | ||
58 | unsigned char __pad0[4]; | ||
59 | |||
60 | #define STAT64_HAS_BROKEN_ST_INO 1 | ||
61 | unsigned long __st_ino; | ||
62 | unsigned int st_mode; | ||
63 | unsigned int st_nlink; | ||
64 | |||
65 | unsigned long st_uid; | ||
66 | unsigned long st_gid; | ||
67 | |||
68 | unsigned long long st_rdev; | ||
69 | unsigned char __pad3[4]; | ||
70 | |||
71 | long long st_size; | ||
72 | unsigned long st_blksize; | ||
73 | |||
74 | #if defined(__ARMEB__) | ||
75 | unsigned long __pad4; /* Future possible st_blocks hi bits */ | ||
76 | unsigned long st_blocks; /* Number 512-byte blocks allocated. */ | ||
77 | #else /* Must be little */ | ||
78 | unsigned long st_blocks; /* Number 512-byte blocks allocated. */ | ||
79 | unsigned long __pad4; /* Future possible st_blocks hi bits */ | ||
80 | #endif | ||
81 | |||
82 | unsigned long st_atime; | ||
83 | unsigned long st_atime_nsec; | ||
84 | |||
85 | unsigned long st_mtime; | ||
86 | unsigned long st_mtime_nsec; | ||
87 | |||
88 | unsigned long st_ctime; | ||
89 | unsigned long st_ctime_nsec; | ||
90 | |||
91 | unsigned long long st_ino; | ||
92 | }; | ||
93 | |||
94 | #endif | ||
diff --git a/include/asm-arm/statfs.h b/include/asm-arm/statfs.h new file mode 100644 index 000000000000..e81f82783b87 --- /dev/null +++ b/include/asm-arm/statfs.h | |||
@@ -0,0 +1,6 @@ | |||
1 | #ifndef _ASMARM_STATFS_H | ||
2 | #define _ASMARM_STATFS_H | ||
3 | |||
4 | #include <asm-generic/statfs.h> | ||
5 | |||
6 | #endif | ||
diff --git a/include/asm-arm/string.h b/include/asm-arm/string.h new file mode 100644 index 000000000000..2a8ab162412f --- /dev/null +++ b/include/asm-arm/string.h | |||
@@ -0,0 +1,43 @@ | |||
1 | #ifndef __ASM_ARM_STRING_H | ||
2 | #define __ASM_ARM_STRING_H | ||
3 | |||
4 | /* | ||
5 | * We don't do inline string functions, since the | ||
6 | * optimised inline asm versions are not small. | ||
7 | */ | ||
8 | |||
9 | #define __HAVE_ARCH_STRRCHR | ||
10 | extern char * strrchr(const char * s, int c); | ||
11 | |||
12 | #define __HAVE_ARCH_STRCHR | ||
13 | extern char * strchr(const char * s, int c); | ||
14 | |||
15 | #define __HAVE_ARCH_MEMCPY | ||
16 | extern void * memcpy(void *, const void *, __kernel_size_t); | ||
17 | |||
18 | #define __HAVE_ARCH_MEMMOVE | ||
19 | extern void * memmove(void *, const void *, __kernel_size_t); | ||
20 | |||
21 | #define __HAVE_ARCH_MEMCHR | ||
22 | extern void * memchr(const void *, int, __kernel_size_t); | ||
23 | |||
24 | #define __HAVE_ARCH_MEMZERO | ||
25 | #define __HAVE_ARCH_MEMSET | ||
26 | extern void * memset(void *, int, __kernel_size_t); | ||
27 | |||
28 | extern void __memzero(void *ptr, __kernel_size_t n); | ||
29 | |||
30 | #define memset(p,v,n) \ | ||
31 | ({ \ | ||
32 | if ((n) != 0) { \ | ||
33 | if (__builtin_constant_p((v)) && (v) == 0) \ | ||
34 | __memzero((p),(n)); \ | ||
35 | else \ | ||
36 | memset((p),(v),(n)); \ | ||
37 | } \ | ||
38 | (p); \ | ||
39 | }) | ||
40 | |||
41 | #define memzero(p,n) ({ if ((n) != 0) __memzero((p),(n)); (p); }) | ||
42 | |||
43 | #endif | ||
diff --git a/include/asm-arm/suspend.h b/include/asm-arm/suspend.h new file mode 100644 index 000000000000..cf0d0bdee74d --- /dev/null +++ b/include/asm-arm/suspend.h | |||
@@ -0,0 +1,4 @@ | |||
1 | #ifndef _ASMARM_SUSPEND_H | ||
2 | #define _ASMARM_SUSPEND_H | ||
3 | |||
4 | #endif | ||
diff --git a/include/asm-arm/system.h b/include/asm-arm/system.h new file mode 100644 index 000000000000..b5731290b4e5 --- /dev/null +++ b/include/asm-arm/system.h | |||
@@ -0,0 +1,390 @@ | |||
1 | #ifndef __ASM_ARM_SYSTEM_H | ||
2 | #define __ASM_ARM_SYSTEM_H | ||
3 | |||
4 | #ifdef __KERNEL__ | ||
5 | |||
6 | #include <linux/config.h> | ||
7 | |||
8 | #define CPU_ARCH_UNKNOWN 0 | ||
9 | #define CPU_ARCH_ARMv3 1 | ||
10 | #define CPU_ARCH_ARMv4 2 | ||
11 | #define CPU_ARCH_ARMv4T 3 | ||
12 | #define CPU_ARCH_ARMv5 4 | ||
13 | #define CPU_ARCH_ARMv5T 5 | ||
14 | #define CPU_ARCH_ARMv5TE 6 | ||
15 | #define CPU_ARCH_ARMv5TEJ 7 | ||
16 | #define CPU_ARCH_ARMv6 8 | ||
17 | |||
18 | /* | ||
19 | * CR1 bits (CP#15 CR1) | ||
20 | */ | ||
21 | #define CR_M (1 << 0) /* MMU enable */ | ||
22 | #define CR_A (1 << 1) /* Alignment abort enable */ | ||
23 | #define CR_C (1 << 2) /* Dcache enable */ | ||
24 | #define CR_W (1 << 3) /* Write buffer enable */ | ||
25 | #define CR_P (1 << 4) /* 32-bit exception handler */ | ||
26 | #define CR_D (1 << 5) /* 32-bit data address range */ | ||
27 | #define CR_L (1 << 6) /* Implementation defined */ | ||
28 | #define CR_B (1 << 7) /* Big endian */ | ||
29 | #define CR_S (1 << 8) /* System MMU protection */ | ||
30 | #define CR_R (1 << 9) /* ROM MMU protection */ | ||
31 | #define CR_F (1 << 10) /* Implementation defined */ | ||
32 | #define CR_Z (1 << 11) /* Implementation defined */ | ||
33 | #define CR_I (1 << 12) /* Icache enable */ | ||
34 | #define CR_V (1 << 13) /* Vectors relocated to 0xffff0000 */ | ||
35 | #define CR_RR (1 << 14) /* Round Robin cache replacement */ | ||
36 | #define CR_L4 (1 << 15) /* LDR pc can set T bit */ | ||
37 | #define CR_DT (1 << 16) | ||
38 | #define CR_IT (1 << 18) | ||
39 | #define CR_ST (1 << 19) | ||
40 | #define CR_FI (1 << 21) /* Fast interrupt (lower latency mode) */ | ||
41 | #define CR_U (1 << 22) /* Unaligned access operation */ | ||
42 | #define CR_XP (1 << 23) /* Extended page tables */ | ||
43 | #define CR_VE (1 << 24) /* Vectored interrupts */ | ||
44 | |||
45 | #define CPUID_ID 0 | ||
46 | #define CPUID_CACHETYPE 1 | ||
47 | #define CPUID_TCM 2 | ||
48 | #define CPUID_TLBTYPE 3 | ||
49 | |||
50 | #define read_cpuid(reg) \ | ||
51 | ({ \ | ||
52 | unsigned int __val; \ | ||
53 | asm("mrc p15, 0, %0, c0, c0, " __stringify(reg) \ | ||
54 | : "=r" (__val) \ | ||
55 | : \ | ||
56 | : "cc"); \ | ||
57 | __val; \ | ||
58 | }) | ||
59 | |||
60 | /* | ||
61 | * This is used to ensure the compiler did actually allocate the register we | ||
62 | * asked it for some inline assembly sequences. Apparently we can't trust | ||
63 | * the compiler from one version to another so a bit of paranoia won't hurt. | ||
64 | * This string is meant to be concatenated with the inline asm string and | ||
65 | * will cause compilation to stop on mismatch. | ||
66 | * (for details, see gcc PR 15089) | ||
67 | */ | ||
68 | #define __asmeq(x, y) ".ifnc " x "," y " ; .err ; .endif\n\t" | ||
69 | |||
70 | #ifndef __ASSEMBLY__ | ||
71 | |||
72 | #include <linux/linkage.h> | ||
73 | |||
74 | struct thread_info; | ||
75 | struct task_struct; | ||
76 | |||
77 | /* information about the system we're running on */ | ||
78 | extern unsigned int system_rev; | ||
79 | extern unsigned int system_serial_low; | ||
80 | extern unsigned int system_serial_high; | ||
81 | extern unsigned int mem_fclk_21285; | ||
82 | |||
83 | struct pt_regs; | ||
84 | |||
85 | void die(const char *msg, struct pt_regs *regs, int err) | ||
86 | __attribute__((noreturn)); | ||
87 | |||
88 | void die_if_kernel(const char *str, struct pt_regs *regs, int err); | ||
89 | |||
90 | void hook_fault_code(int nr, int (*fn)(unsigned long, unsigned int, | ||
91 | struct pt_regs *), | ||
92 | int sig, const char *name); | ||
93 | |||
94 | #include <asm/proc-fns.h> | ||
95 | |||
96 | #define xchg(ptr,x) \ | ||
97 | ((__typeof__(*(ptr)))__xchg((unsigned long)(x),(ptr),sizeof(*(ptr)))) | ||
98 | |||
99 | #define tas(ptr) (xchg((ptr),1)) | ||
100 | |||
101 | extern asmlinkage void __backtrace(void); | ||
102 | |||
103 | extern int cpu_architecture(void); | ||
104 | |||
105 | #define set_cr(x) \ | ||
106 | __asm__ __volatile__( \ | ||
107 | "mcr p15, 0, %0, c1, c0, 0 @ set CR" \ | ||
108 | : : "r" (x) : "cc") | ||
109 | |||
110 | #define get_cr() \ | ||
111 | ({ \ | ||
112 | unsigned int __val; \ | ||
113 | __asm__ __volatile__( \ | ||
114 | "mrc p15, 0, %0, c1, c0, 0 @ get CR" \ | ||
115 | : "=r" (__val) : : "cc"); \ | ||
116 | __val; \ | ||
117 | }) | ||
118 | |||
119 | extern unsigned long cr_no_alignment; /* defined in entry-armv.S */ | ||
120 | extern unsigned long cr_alignment; /* defined in entry-armv.S */ | ||
121 | |||
122 | #define UDBG_UNDEFINED (1 << 0) | ||
123 | #define UDBG_SYSCALL (1 << 1) | ||
124 | #define UDBG_BADABORT (1 << 2) | ||
125 | #define UDBG_SEGV (1 << 3) | ||
126 | #define UDBG_BUS (1 << 4) | ||
127 | |||
128 | extern unsigned int user_debug; | ||
129 | |||
130 | #if __LINUX_ARM_ARCH__ >= 4 | ||
131 | #define vectors_high() (cr_alignment & CR_V) | ||
132 | #else | ||
133 | #define vectors_high() (0) | ||
134 | #endif | ||
135 | |||
136 | #define mb() __asm__ __volatile__ ("" : : : "memory") | ||
137 | #define rmb() mb() | ||
138 | #define wmb() mb() | ||
139 | #define read_barrier_depends() do { } while(0) | ||
140 | #define set_mb(var, value) do { var = value; mb(); } while (0) | ||
141 | #define set_wmb(var, value) do { var = value; wmb(); } while (0) | ||
142 | #define nop() __asm__ __volatile__("mov\tr0,r0\t@ nop\n\t"); | ||
143 | |||
144 | #ifdef CONFIG_SMP | ||
145 | /* | ||
146 | * Define our own context switch locking. This allows us to enable | ||
147 | * interrupts over the context switch, otherwise we end up with high | ||
148 | * interrupt latency. The real problem area is switch_mm() which may | ||
149 | * do a full cache flush. | ||
150 | */ | ||
151 | #define prepare_arch_switch(rq,next) \ | ||
152 | do { \ | ||
153 | spin_lock(&(next)->switch_lock); \ | ||
154 | spin_unlock_irq(&(rq)->lock); \ | ||
155 | } while (0) | ||
156 | |||
157 | #define finish_arch_switch(rq,prev) \ | ||
158 | spin_unlock(&(prev)->switch_lock) | ||
159 | |||
160 | #define task_running(rq,p) \ | ||
161 | ((rq)->curr == (p) || spin_is_locked(&(p)->switch_lock)) | ||
162 | #else | ||
163 | /* | ||
164 | * Our UP-case is more simple, but we assume knowledge of how | ||
165 | * spin_unlock_irq() and friends are implemented. This avoids | ||
166 | * us needlessly decrementing and incrementing the preempt count. | ||
167 | */ | ||
168 | #define prepare_arch_switch(rq,next) local_irq_enable() | ||
169 | #define finish_arch_switch(rq,prev) spin_unlock(&(rq)->lock) | ||
170 | #define task_running(rq,p) ((rq)->curr == (p)) | ||
171 | #endif | ||
172 | |||
173 | /* | ||
174 | * switch_to(prev, next) should switch from task `prev' to `next' | ||
175 | * `prev' will never be the same as `next'. schedule() itself | ||
176 | * contains the memory barrier to tell GCC not to cache `current'. | ||
177 | */ | ||
178 | extern struct task_struct *__switch_to(struct task_struct *, struct thread_info *, struct thread_info *); | ||
179 | |||
180 | #define switch_to(prev,next,last) \ | ||
181 | do { \ | ||
182 | last = __switch_to(prev,prev->thread_info,next->thread_info); \ | ||
183 | } while (0) | ||
184 | |||
185 | /* | ||
186 | * CPU interrupt mask handling. | ||
187 | */ | ||
188 | #if __LINUX_ARM_ARCH__ >= 6 | ||
189 | |||
190 | #define local_irq_save(x) \ | ||
191 | ({ \ | ||
192 | __asm__ __volatile__( \ | ||
193 | "mrs %0, cpsr @ local_irq_save\n" \ | ||
194 | "cpsid i" \ | ||
195 | : "=r" (x) : : "memory", "cc"); \ | ||
196 | }) | ||
197 | |||
198 | #define local_irq_enable() __asm__("cpsie i @ __sti" : : : "memory", "cc") | ||
199 | #define local_irq_disable() __asm__("cpsid i @ __cli" : : : "memory", "cc") | ||
200 | #define local_fiq_enable() __asm__("cpsie f @ __stf" : : : "memory", "cc") | ||
201 | #define local_fiq_disable() __asm__("cpsid f @ __clf" : : : "memory", "cc") | ||
202 | |||
203 | #else | ||
204 | |||
205 | /* | ||
206 | * Save the current interrupt enable state & disable IRQs | ||
207 | */ | ||
208 | #define local_irq_save(x) \ | ||
209 | ({ \ | ||
210 | unsigned long temp; \ | ||
211 | (void) (&temp == &x); \ | ||
212 | __asm__ __volatile__( \ | ||
213 | "mrs %0, cpsr @ local_irq_save\n" \ | ||
214 | " orr %1, %0, #128\n" \ | ||
215 | " msr cpsr_c, %1" \ | ||
216 | : "=r" (x), "=r" (temp) \ | ||
217 | : \ | ||
218 | : "memory", "cc"); \ | ||
219 | }) | ||
220 | |||
221 | /* | ||
222 | * Enable IRQs | ||
223 | */ | ||
224 | #define local_irq_enable() \ | ||
225 | ({ \ | ||
226 | unsigned long temp; \ | ||
227 | __asm__ __volatile__( \ | ||
228 | "mrs %0, cpsr @ local_irq_enable\n" \ | ||
229 | " bic %0, %0, #128\n" \ | ||
230 | " msr cpsr_c, %0" \ | ||
231 | : "=r" (temp) \ | ||
232 | : \ | ||
233 | : "memory", "cc"); \ | ||
234 | }) | ||
235 | |||
236 | /* | ||
237 | * Disable IRQs | ||
238 | */ | ||
239 | #define local_irq_disable() \ | ||
240 | ({ \ | ||
241 | unsigned long temp; \ | ||
242 | __asm__ __volatile__( \ | ||
243 | "mrs %0, cpsr @ local_irq_disable\n" \ | ||
244 | " orr %0, %0, #128\n" \ | ||
245 | " msr cpsr_c, %0" \ | ||
246 | : "=r" (temp) \ | ||
247 | : \ | ||
248 | : "memory", "cc"); \ | ||
249 | }) | ||
250 | |||
251 | /* | ||
252 | * Enable FIQs | ||
253 | */ | ||
254 | #define local_fiq_enable() \ | ||
255 | ({ \ | ||
256 | unsigned long temp; \ | ||
257 | __asm__ __volatile__( \ | ||
258 | "mrs %0, cpsr @ stf\n" \ | ||
259 | " bic %0, %0, #64\n" \ | ||
260 | " msr cpsr_c, %0" \ | ||
261 | : "=r" (temp) \ | ||
262 | : \ | ||
263 | : "memory", "cc"); \ | ||
264 | }) | ||
265 | |||
266 | /* | ||
267 | * Disable FIQs | ||
268 | */ | ||
269 | #define local_fiq_disable() \ | ||
270 | ({ \ | ||
271 | unsigned long temp; \ | ||
272 | __asm__ __volatile__( \ | ||
273 | "mrs %0, cpsr @ clf\n" \ | ||
274 | " orr %0, %0, #64\n" \ | ||
275 | " msr cpsr_c, %0" \ | ||
276 | : "=r" (temp) \ | ||
277 | : \ | ||
278 | : "memory", "cc"); \ | ||
279 | }) | ||
280 | |||
281 | #endif | ||
282 | |||
283 | /* | ||
284 | * Save the current interrupt enable state. | ||
285 | */ | ||
286 | #define local_save_flags(x) \ | ||
287 | ({ \ | ||
288 | __asm__ __volatile__( \ | ||
289 | "mrs %0, cpsr @ local_save_flags" \ | ||
290 | : "=r" (x) : : "memory", "cc"); \ | ||
291 | }) | ||
292 | |||
293 | /* | ||
294 | * restore saved IRQ & FIQ state | ||
295 | */ | ||
296 | #define local_irq_restore(x) \ | ||
297 | __asm__ __volatile__( \ | ||
298 | "msr cpsr_c, %0 @ local_irq_restore\n" \ | ||
299 | : \ | ||
300 | : "r" (x) \ | ||
301 | : "memory", "cc") | ||
302 | |||
303 | #define irqs_disabled() \ | ||
304 | ({ \ | ||
305 | unsigned long flags; \ | ||
306 | local_save_flags(flags); \ | ||
307 | flags & PSR_I_BIT; \ | ||
308 | }) | ||
309 | |||
310 | #ifdef CONFIG_SMP | ||
311 | #error SMP not supported | ||
312 | |||
313 | #define smp_mb() mb() | ||
314 | #define smp_rmb() rmb() | ||
315 | #define smp_wmb() wmb() | ||
316 | #define smp_read_barrier_depends() read_barrier_depends() | ||
317 | |||
318 | #else | ||
319 | |||
320 | #define smp_mb() barrier() | ||
321 | #define smp_rmb() barrier() | ||
322 | #define smp_wmb() barrier() | ||
323 | #define smp_read_barrier_depends() do { } while(0) | ||
324 | |||
325 | #if defined(CONFIG_CPU_SA1100) || defined(CONFIG_CPU_SA110) | ||
326 | /* | ||
327 | * On the StrongARM, "swp" is terminally broken since it bypasses the | ||
328 | * cache totally. This means that the cache becomes inconsistent, and, | ||
329 | * since we use normal loads/stores as well, this is really bad. | ||
330 | * Typically, this causes oopsen in filp_close, but could have other, | ||
331 | * more disasterous effects. There are two work-arounds: | ||
332 | * 1. Disable interrupts and emulate the atomic swap | ||
333 | * 2. Clean the cache, perform atomic swap, flush the cache | ||
334 | * | ||
335 | * We choose (1) since its the "easiest" to achieve here and is not | ||
336 | * dependent on the processor type. | ||
337 | */ | ||
338 | #define swp_is_buggy | ||
339 | #endif | ||
340 | |||
341 | static inline unsigned long __xchg(unsigned long x, volatile void *ptr, int size) | ||
342 | { | ||
343 | extern void __bad_xchg(volatile void *, int); | ||
344 | unsigned long ret; | ||
345 | #ifdef swp_is_buggy | ||
346 | unsigned long flags; | ||
347 | #endif | ||
348 | |||
349 | switch (size) { | ||
350 | #ifdef swp_is_buggy | ||
351 | case 1: | ||
352 | local_irq_save(flags); | ||
353 | ret = *(volatile unsigned char *)ptr; | ||
354 | *(volatile unsigned char *)ptr = x; | ||
355 | local_irq_restore(flags); | ||
356 | break; | ||
357 | |||
358 | case 4: | ||
359 | local_irq_save(flags); | ||
360 | ret = *(volatile unsigned long *)ptr; | ||
361 | *(volatile unsigned long *)ptr = x; | ||
362 | local_irq_restore(flags); | ||
363 | break; | ||
364 | #else | ||
365 | case 1: __asm__ __volatile__ ("swpb %0, %1, [%2]" | ||
366 | : "=&r" (ret) | ||
367 | : "r" (x), "r" (ptr) | ||
368 | : "memory", "cc"); | ||
369 | break; | ||
370 | case 4: __asm__ __volatile__ ("swp %0, %1, [%2]" | ||
371 | : "=&r" (ret) | ||
372 | : "r" (x), "r" (ptr) | ||
373 | : "memory", "cc"); | ||
374 | break; | ||
375 | #endif | ||
376 | default: __bad_xchg(ptr, size), ret = 0; | ||
377 | } | ||
378 | |||
379 | return ret; | ||
380 | } | ||
381 | |||
382 | #endif /* CONFIG_SMP */ | ||
383 | |||
384 | #endif /* __ASSEMBLY__ */ | ||
385 | |||
386 | #define arch_align_stack(x) (x) | ||
387 | |||
388 | #endif /* __KERNEL__ */ | ||
389 | |||
390 | #endif | ||
diff --git a/include/asm-arm/termbits.h b/include/asm-arm/termbits.h new file mode 100644 index 000000000000..bbc6e1d24d3f --- /dev/null +++ b/include/asm-arm/termbits.h | |||
@@ -0,0 +1,171 @@ | |||
1 | #ifndef __ASM_ARM_TERMBITS_H | ||
2 | #define __ASM_ARM_TERMBITS_H | ||
3 | |||
4 | typedef unsigned char cc_t; | ||
5 | typedef unsigned int speed_t; | ||
6 | typedef unsigned int tcflag_t; | ||
7 | |||
8 | #define NCCS 19 | ||
9 | struct termios { | ||
10 | tcflag_t c_iflag; /* input mode flags */ | ||
11 | tcflag_t c_oflag; /* output mode flags */ | ||
12 | tcflag_t c_cflag; /* control mode flags */ | ||
13 | tcflag_t c_lflag; /* local mode flags */ | ||
14 | cc_t c_line; /* line discipline */ | ||
15 | cc_t c_cc[NCCS]; /* control characters */ | ||
16 | }; | ||
17 | |||
18 | /* c_cc characters */ | ||
19 | #define VINTR 0 | ||
20 | #define VQUIT 1 | ||
21 | #define VERASE 2 | ||
22 | #define VKILL 3 | ||
23 | #define VEOF 4 | ||
24 | #define VTIME 5 | ||
25 | #define VMIN 6 | ||
26 | #define VSWTC 7 | ||
27 | #define VSTART 8 | ||
28 | #define VSTOP 9 | ||
29 | #define VSUSP 10 | ||
30 | #define VEOL 11 | ||
31 | #define VREPRINT 12 | ||
32 | #define VDISCARD 13 | ||
33 | #define VWERASE 14 | ||
34 | #define VLNEXT 15 | ||
35 | #define VEOL2 16 | ||
36 | |||
37 | /* c_iflag bits */ | ||
38 | #define IGNBRK 0000001 | ||
39 | #define BRKINT 0000002 | ||
40 | #define IGNPAR 0000004 | ||
41 | #define PARMRK 0000010 | ||
42 | #define INPCK 0000020 | ||
43 | #define ISTRIP 0000040 | ||
44 | #define INLCR 0000100 | ||
45 | #define IGNCR 0000200 | ||
46 | #define ICRNL 0000400 | ||
47 | #define IUCLC 0001000 | ||
48 | #define IXON 0002000 | ||
49 | #define IXANY 0004000 | ||
50 | #define IXOFF 0010000 | ||
51 | #define IMAXBEL 0020000 | ||
52 | #define IUTF8 0040000 | ||
53 | |||
54 | /* c_oflag bits */ | ||
55 | #define OPOST 0000001 | ||
56 | #define OLCUC 0000002 | ||
57 | #define ONLCR 0000004 | ||
58 | #define OCRNL 0000010 | ||
59 | #define ONOCR 0000020 | ||
60 | #define ONLRET 0000040 | ||
61 | #define OFILL 0000100 | ||
62 | #define OFDEL 0000200 | ||
63 | #define NLDLY 0000400 | ||
64 | #define NL0 0000000 | ||
65 | #define NL1 0000400 | ||
66 | #define CRDLY 0003000 | ||
67 | #define CR0 0000000 | ||
68 | #define CR1 0001000 | ||
69 | #define CR2 0002000 | ||
70 | #define CR3 0003000 | ||
71 | #define TABDLY 0014000 | ||
72 | #define TAB0 0000000 | ||
73 | #define TAB1 0004000 | ||
74 | #define TAB2 0010000 | ||
75 | #define TAB3 0014000 | ||
76 | #define XTABS 0014000 | ||
77 | #define BSDLY 0020000 | ||
78 | #define BS0 0000000 | ||
79 | #define BS1 0020000 | ||
80 | #define VTDLY 0040000 | ||
81 | #define VT0 0000000 | ||
82 | #define VT1 0040000 | ||
83 | #define FFDLY 0100000 | ||
84 | #define FF0 0000000 | ||
85 | #define FF1 0100000 | ||
86 | |||
87 | /* c_cflag bit meaning */ | ||
88 | #define CBAUD 0010017 | ||
89 | #define B0 0000000 /* hang up */ | ||
90 | #define B50 0000001 | ||
91 | #define B75 0000002 | ||
92 | #define B110 0000003 | ||
93 | #define B134 0000004 | ||
94 | #define B150 0000005 | ||
95 | #define B200 0000006 | ||
96 | #define B300 0000007 | ||
97 | #define B600 0000010 | ||
98 | #define B1200 0000011 | ||
99 | #define B1800 0000012 | ||
100 | #define B2400 0000013 | ||
101 | #define B4800 0000014 | ||
102 | #define B9600 0000015 | ||
103 | #define B19200 0000016 | ||
104 | #define B38400 0000017 | ||
105 | #define EXTA B19200 | ||
106 | #define EXTB B38400 | ||
107 | #define CSIZE 0000060 | ||
108 | #define CS5 0000000 | ||
109 | #define CS6 0000020 | ||
110 | #define CS7 0000040 | ||
111 | #define CS8 0000060 | ||
112 | #define CSTOPB 0000100 | ||
113 | #define CREAD 0000200 | ||
114 | #define PARENB 0000400 | ||
115 | #define PARODD 0001000 | ||
116 | #define HUPCL 0002000 | ||
117 | #define CLOCAL 0004000 | ||
118 | #define CBAUDEX 0010000 | ||
119 | #define B57600 0010001 | ||
120 | #define B115200 0010002 | ||
121 | #define B230400 0010003 | ||
122 | #define B460800 0010004 | ||
123 | #define B500000 0010005 | ||
124 | #define B576000 0010006 | ||
125 | #define B921600 0010007 | ||
126 | #define B1000000 0010010 | ||
127 | #define B1152000 0010011 | ||
128 | #define B1500000 0010012 | ||
129 | #define B2000000 0010013 | ||
130 | #define B2500000 0010014 | ||
131 | #define B3000000 0010015 | ||
132 | #define B3500000 0010016 | ||
133 | #define B4000000 0010017 | ||
134 | #define CIBAUD 002003600000 /* input baud rate (not used) */ | ||
135 | #define CMSPAR 010000000000 /* mark or space (stick) parity */ | ||
136 | #define CRTSCTS 020000000000 /* flow control */ | ||
137 | |||
138 | /* c_lflag bits */ | ||
139 | #define ISIG 0000001 | ||
140 | #define ICANON 0000002 | ||
141 | #define XCASE 0000004 | ||
142 | #define ECHO 0000010 | ||
143 | #define ECHOE 0000020 | ||
144 | #define ECHOK 0000040 | ||
145 | #define ECHONL 0000100 | ||
146 | #define NOFLSH 0000200 | ||
147 | #define TOSTOP 0000400 | ||
148 | #define ECHOCTL 0001000 | ||
149 | #define ECHOPRT 0002000 | ||
150 | #define ECHOKE 0004000 | ||
151 | #define FLUSHO 0010000 | ||
152 | #define PENDIN 0040000 | ||
153 | #define IEXTEN 0100000 | ||
154 | |||
155 | /* tcflow() and TCXONC use these */ | ||
156 | #define TCOOFF 0 | ||
157 | #define TCOON 1 | ||
158 | #define TCIOFF 2 | ||
159 | #define TCION 3 | ||
160 | |||
161 | /* tcflush() and TCFLSH use these */ | ||
162 | #define TCIFLUSH 0 | ||
163 | #define TCOFLUSH 1 | ||
164 | #define TCIOFLUSH 2 | ||
165 | |||
166 | /* tcsetattr uses these */ | ||
167 | #define TCSANOW 0 | ||
168 | #define TCSADRAIN 1 | ||
169 | #define TCSAFLUSH 2 | ||
170 | |||
171 | #endif /* __ASM_ARM_TERMBITS_H */ | ||
diff --git a/include/asm-arm/termios.h b/include/asm-arm/termios.h new file mode 100644 index 000000000000..7b8f5e8ae063 --- /dev/null +++ b/include/asm-arm/termios.h | |||
@@ -0,0 +1,108 @@ | |||
1 | #ifndef __ASM_ARM_TERMIOS_H | ||
2 | #define __ASM_ARM_TERMIOS_H | ||
3 | |||
4 | #include <asm/termbits.h> | ||
5 | #include <asm/ioctls.h> | ||
6 | |||
7 | struct winsize { | ||
8 | unsigned short ws_row; | ||
9 | unsigned short ws_col; | ||
10 | unsigned short ws_xpixel; | ||
11 | unsigned short ws_ypixel; | ||
12 | }; | ||
13 | |||
14 | #define NCC 8 | ||
15 | struct termio { | ||
16 | unsigned short c_iflag; /* input mode flags */ | ||
17 | unsigned short c_oflag; /* output mode flags */ | ||
18 | unsigned short c_cflag; /* control mode flags */ | ||
19 | unsigned short c_lflag; /* local mode flags */ | ||
20 | unsigned char c_line; /* line discipline */ | ||
21 | unsigned char c_cc[NCC]; /* control characters */ | ||
22 | }; | ||
23 | |||
24 | #ifdef __KERNEL__ | ||
25 | /* intr=^C quit=^| erase=del kill=^U | ||
26 | eof=^D vtime=\0 vmin=\1 sxtc=\0 | ||
27 | start=^Q stop=^S susp=^Z eol=\0 | ||
28 | reprint=^R discard=^U werase=^W lnext=^V | ||
29 | eol2=\0 | ||
30 | */ | ||
31 | #define INIT_C_CC "\003\034\177\025\004\0\1\0\021\023\032\0\022\017\027\026\0" | ||
32 | #endif | ||
33 | |||
34 | /* modem lines */ | ||
35 | #define TIOCM_LE 0x001 | ||
36 | #define TIOCM_DTR 0x002 | ||
37 | #define TIOCM_RTS 0x004 | ||
38 | #define TIOCM_ST 0x008 | ||
39 | #define TIOCM_SR 0x010 | ||
40 | #define TIOCM_CTS 0x020 | ||
41 | #define TIOCM_CAR 0x040 | ||
42 | #define TIOCM_RNG 0x080 | ||
43 | #define TIOCM_DSR 0x100 | ||
44 | #define TIOCM_CD TIOCM_CAR | ||
45 | #define TIOCM_RI TIOCM_RNG | ||
46 | #define TIOCM_OUT1 0x2000 | ||
47 | #define TIOCM_OUT2 0x4000 | ||
48 | #define TIOCM_LOOP 0x8000 | ||
49 | |||
50 | /* ioctl (fd, TIOCSERGETLSR, &result) where result may be as below */ | ||
51 | |||
52 | /* line disciplines */ | ||
53 | #define N_TTY 0 | ||
54 | #define N_SLIP 1 | ||
55 | #define N_MOUSE 2 | ||
56 | #define N_PPP 3 | ||
57 | #define N_STRIP 4 | ||
58 | #define N_AX25 5 | ||
59 | #define N_X25 6 /* X.25 async */ | ||
60 | #define N_6PACK 7 | ||
61 | #define N_MASC 8 /* Reserved for Mobitex module <kaz@cafe.net> */ | ||
62 | #define N_R3964 9 /* Reserved for Simatic R3964 module */ | ||
63 | #define N_PROFIBUS_FDL 10 /* Reserved for Profibus <Dave@mvhi.com> */ | ||
64 | #define N_IRDA 11 /* Linux IrDa - http://irda.sourceforge.net/ */ | ||
65 | #define N_SMSBLOCK 12 /* SMS block mode - for talking to GSM data cards about SMS messages */ | ||
66 | #define N_HDLC 13 /* synchronous HDLC */ | ||
67 | #define N_SYNC_PPP 14 | ||
68 | #define N_HCI 15 /* Bluetooth HCI UART */ | ||
69 | |||
70 | #ifdef __KERNEL__ | ||
71 | |||
72 | /* | ||
73 | * Translate a "termio" structure into a "termios". Ugh. | ||
74 | */ | ||
75 | #define SET_LOW_TERMIOS_BITS(termios, termio, x) { \ | ||
76 | unsigned short __tmp; \ | ||
77 | get_user(__tmp,&(termio)->x); \ | ||
78 | *(unsigned short *) &(termios)->x = __tmp; \ | ||
79 | } | ||
80 | |||
81 | #define user_termio_to_kernel_termios(termios, termio) \ | ||
82 | ({ \ | ||
83 | SET_LOW_TERMIOS_BITS(termios, termio, c_iflag); \ | ||
84 | SET_LOW_TERMIOS_BITS(termios, termio, c_oflag); \ | ||
85 | SET_LOW_TERMIOS_BITS(termios, termio, c_cflag); \ | ||
86 | SET_LOW_TERMIOS_BITS(termios, termio, c_lflag); \ | ||
87 | copy_from_user((termios)->c_cc, (termio)->c_cc, NCC); \ | ||
88 | }) | ||
89 | |||
90 | /* | ||
91 | * Translate a "termios" structure into a "termio". Ugh. | ||
92 | */ | ||
93 | #define kernel_termios_to_user_termio(termio, termios) \ | ||
94 | ({ \ | ||
95 | put_user((termios)->c_iflag, &(termio)->c_iflag); \ | ||
96 | put_user((termios)->c_oflag, &(termio)->c_oflag); \ | ||
97 | put_user((termios)->c_cflag, &(termio)->c_cflag); \ | ||
98 | put_user((termios)->c_lflag, &(termio)->c_lflag); \ | ||
99 | put_user((termios)->c_line, &(termio)->c_line); \ | ||
100 | copy_to_user((termio)->c_cc, (termios)->c_cc, NCC); \ | ||
101 | }) | ||
102 | |||
103 | #define user_termios_to_kernel_termios(k, u) copy_from_user(k, u, sizeof(struct termios)) | ||
104 | #define kernel_termios_to_user_termios(u, k) copy_to_user(u, k, sizeof(struct termios)) | ||
105 | |||
106 | #endif /* __KERNEL__ */ | ||
107 | |||
108 | #endif /* __ASM_ARM_TERMIOS_H */ | ||
diff --git a/include/asm-arm/therm.h b/include/asm-arm/therm.h new file mode 100644 index 000000000000..e51c923ecdf3 --- /dev/null +++ b/include/asm-arm/therm.h | |||
@@ -0,0 +1,28 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/therm.h: Definitions for Dallas Semiconductor | ||
3 | * DS1620 thermometer driver (as used in the Rebel.com NetWinder) | ||
4 | */ | ||
5 | #ifndef __ASM_THERM_H | ||
6 | #define __ASM_THERM_H | ||
7 | |||
8 | /* ioctl numbers for /dev/therm */ | ||
9 | #define CMD_SET_THERMOSTATE 0x53 | ||
10 | #define CMD_GET_THERMOSTATE 0x54 | ||
11 | #define CMD_GET_STATUS 0x56 | ||
12 | #define CMD_GET_TEMPERATURE 0x57 | ||
13 | #define CMD_SET_THERMOSTATE2 0x58 | ||
14 | #define CMD_GET_THERMOSTATE2 0x59 | ||
15 | #define CMD_GET_TEMPERATURE2 0x5a | ||
16 | #define CMD_GET_FAN 0x5b | ||
17 | #define CMD_SET_FAN 0x5c | ||
18 | |||
19 | #define FAN_OFF 0 | ||
20 | #define FAN_ON 1 | ||
21 | #define FAN_ALWAYS_ON 2 | ||
22 | |||
23 | struct therm { | ||
24 | int hi; | ||
25 | int lo; | ||
26 | }; | ||
27 | |||
28 | #endif | ||
diff --git a/include/asm-arm/thread_info.h b/include/asm-arm/thread_info.h new file mode 100644 index 000000000000..a61618fb433c --- /dev/null +++ b/include/asm-arm/thread_info.h | |||
@@ -0,0 +1,147 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/thread_info.h | ||
3 | * | ||
4 | * Copyright (C) 2002 Russell King. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | */ | ||
10 | #ifndef __ASM_ARM_THREAD_INFO_H | ||
11 | #define __ASM_ARM_THREAD_INFO_H | ||
12 | |||
13 | #ifdef __KERNEL__ | ||
14 | |||
15 | #include <asm/fpstate.h> | ||
16 | |||
17 | #ifndef __ASSEMBLY__ | ||
18 | |||
19 | struct task_struct; | ||
20 | struct exec_domain; | ||
21 | |||
22 | #include <asm/ptrace.h> | ||
23 | #include <asm/types.h> | ||
24 | #include <asm/domain.h> | ||
25 | |||
26 | typedef unsigned long mm_segment_t; | ||
27 | |||
28 | struct cpu_context_save { | ||
29 | __u32 r4; | ||
30 | __u32 r5; | ||
31 | __u32 r6; | ||
32 | __u32 r7; | ||
33 | __u32 r8; | ||
34 | __u32 r9; | ||
35 | __u32 sl; | ||
36 | __u32 fp; | ||
37 | __u32 sp; | ||
38 | __u32 pc; | ||
39 | __u32 extra[2]; /* Xscale 'acc' register, etc */ | ||
40 | }; | ||
41 | |||
42 | /* | ||
43 | * low level task data that entry.S needs immediate access to. | ||
44 | * __switch_to() assumes cpu_context follows immediately after cpu_domain. | ||
45 | */ | ||
46 | struct thread_info { | ||
47 | unsigned long flags; /* low level flags */ | ||
48 | __s32 preempt_count; /* 0 => preemptable, <0 => bug */ | ||
49 | mm_segment_t addr_limit; /* address limit */ | ||
50 | struct task_struct *task; /* main task structure */ | ||
51 | struct exec_domain *exec_domain; /* execution domain */ | ||
52 | __u32 cpu; /* cpu */ | ||
53 | __u32 cpu_domain; /* cpu domain */ | ||
54 | struct cpu_context_save cpu_context; /* cpu context */ | ||
55 | __u8 used_cp[16]; /* thread used copro */ | ||
56 | unsigned long tp_value; | ||
57 | union fp_state fpstate; | ||
58 | union vfp_state vfpstate; | ||
59 | struct restart_block restart_block; | ||
60 | }; | ||
61 | |||
62 | #define INIT_THREAD_INFO(tsk) \ | ||
63 | { \ | ||
64 | .task = &tsk, \ | ||
65 | .exec_domain = &default_exec_domain, \ | ||
66 | .flags = 0, \ | ||
67 | .preempt_count = 1, \ | ||
68 | .addr_limit = KERNEL_DS, \ | ||
69 | .cpu_domain = domain_val(DOMAIN_USER, DOMAIN_MANAGER) | \ | ||
70 | domain_val(DOMAIN_KERNEL, DOMAIN_MANAGER) | \ | ||
71 | domain_val(DOMAIN_IO, DOMAIN_CLIENT), \ | ||
72 | .restart_block = { \ | ||
73 | .fn = do_no_restart_syscall, \ | ||
74 | }, \ | ||
75 | } | ||
76 | |||
77 | #define init_thread_info (init_thread_union.thread_info) | ||
78 | #define init_stack (init_thread_union.stack) | ||
79 | |||
80 | #define THREAD_SIZE 8192 | ||
81 | |||
82 | /* | ||
83 | * how to get the thread information struct from C | ||
84 | */ | ||
85 | static inline struct thread_info *current_thread_info(void) __attribute_const__; | ||
86 | |||
87 | static inline struct thread_info *current_thread_info(void) | ||
88 | { | ||
89 | register unsigned long sp asm ("sp"); | ||
90 | return (struct thread_info *)(sp & ~(THREAD_SIZE - 1)); | ||
91 | } | ||
92 | |||
93 | extern struct thread_info *alloc_thread_info(struct task_struct *task); | ||
94 | extern void free_thread_info(struct thread_info *); | ||
95 | |||
96 | #define get_thread_info(ti) get_task_struct((ti)->task) | ||
97 | #define put_thread_info(ti) put_task_struct((ti)->task) | ||
98 | |||
99 | #define thread_saved_pc(tsk) \ | ||
100 | ((unsigned long)(pc_pointer((tsk)->thread_info->cpu_context.pc))) | ||
101 | #define thread_saved_fp(tsk) \ | ||
102 | ((unsigned long)((tsk)->thread_info->cpu_context.fp)) | ||
103 | |||
104 | extern void iwmmxt_task_disable(struct thread_info *); | ||
105 | extern void iwmmxt_task_copy(struct thread_info *, void *); | ||
106 | extern void iwmmxt_task_restore(struct thread_info *, void *); | ||
107 | extern void iwmmxt_task_release(struct thread_info *); | ||
108 | |||
109 | #endif | ||
110 | |||
111 | /* | ||
112 | * We use bit 30 of the preempt_count to indicate that kernel | ||
113 | * preemption is occuring. See include/asm-arm/hardirq.h. | ||
114 | */ | ||
115 | #define PREEMPT_ACTIVE 0x40000000 | ||
116 | |||
117 | /* | ||
118 | * thread information flags: | ||
119 | * TIF_SYSCALL_TRACE - syscall trace active | ||
120 | * TIF_NOTIFY_RESUME - resumption notification requested | ||
121 | * TIF_SIGPENDING - signal pending | ||
122 | * TIF_NEED_RESCHED - rescheduling necessary | ||
123 | * TIF_USEDFPU - FPU was used by this task this quantum (SMP) | ||
124 | * TIF_POLLING_NRFLAG - true if poll_idle() is polling TIF_NEED_RESCHED | ||
125 | */ | ||
126 | #define TIF_NOTIFY_RESUME 0 | ||
127 | #define TIF_SIGPENDING 1 | ||
128 | #define TIF_NEED_RESCHED 2 | ||
129 | #define TIF_SYSCALL_TRACE 8 | ||
130 | #define TIF_POLLING_NRFLAG 16 | ||
131 | #define TIF_USING_IWMMXT 17 | ||
132 | #define TIF_MEMDIE 18 | ||
133 | |||
134 | #define _TIF_NOTIFY_RESUME (1 << TIF_NOTIFY_RESUME) | ||
135 | #define _TIF_SIGPENDING (1 << TIF_SIGPENDING) | ||
136 | #define _TIF_NEED_RESCHED (1 << TIF_NEED_RESCHED) | ||
137 | #define _TIF_SYSCALL_TRACE (1 << TIF_SYSCALL_TRACE) | ||
138 | #define _TIF_POLLING_NRFLAG (1 << TIF_POLLING_NRFLAG) | ||
139 | #define _TIF_USING_IWMMXT (1 << TIF_USING_IWMMXT) | ||
140 | |||
141 | /* | ||
142 | * Change these and you break ASM code in entry-common.S | ||
143 | */ | ||
144 | #define _TIF_WORK_MASK 0x000000ff | ||
145 | |||
146 | #endif /* __KERNEL__ */ | ||
147 | #endif /* __ASM_ARM_THREAD_INFO_H */ | ||
diff --git a/include/asm-arm/timex.h b/include/asm-arm/timex.h new file mode 100644 index 000000000000..7b8d4cb24be0 --- /dev/null +++ b/include/asm-arm/timex.h | |||
@@ -0,0 +1,24 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/timex.h | ||
3 | * | ||
4 | * Copyright (C) 1997,1998 Russell King | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | * Architecture Specific TIME specifications | ||
11 | */ | ||
12 | #ifndef _ASMARM_TIMEX_H | ||
13 | #define _ASMARM_TIMEX_H | ||
14 | |||
15 | #include <asm/arch/timex.h> | ||
16 | |||
17 | typedef unsigned long cycles_t; | ||
18 | |||
19 | static inline cycles_t get_cycles (void) | ||
20 | { | ||
21 | return 0; | ||
22 | } | ||
23 | |||
24 | #endif | ||
diff --git a/include/asm-arm/tlb.h b/include/asm-arm/tlb.h new file mode 100644 index 000000000000..9bb325c54645 --- /dev/null +++ b/include/asm-arm/tlb.h | |||
@@ -0,0 +1,102 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/tlb.h | ||
3 | * | ||
4 | * Copyright (C) 2002 Russell King | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | * Experimentation shows that on a StrongARM, it appears to be faster | ||
11 | * to use the "invalidate whole tlb" rather than "invalidate single | ||
12 | * tlb" for this. | ||
13 | * | ||
14 | * This appears true for both the process fork+exit case, as well as | ||
15 | * the munmap-large-area case. | ||
16 | */ | ||
17 | #ifndef __ASMARM_TLB_H | ||
18 | #define __ASMARM_TLB_H | ||
19 | |||
20 | #include <asm/cacheflush.h> | ||
21 | #include <asm/tlbflush.h> | ||
22 | #include <asm/pgalloc.h> | ||
23 | |||
24 | /* | ||
25 | * TLB handling. This allows us to remove pages from the page | ||
26 | * tables, and efficiently handle the TLB issues. | ||
27 | */ | ||
28 | struct mmu_gather { | ||
29 | struct mm_struct *mm; | ||
30 | unsigned int freed; | ||
31 | unsigned int fullmm; | ||
32 | |||
33 | unsigned int flushes; | ||
34 | unsigned int avoided_flushes; | ||
35 | }; | ||
36 | |||
37 | DECLARE_PER_CPU(struct mmu_gather, mmu_gathers); | ||
38 | |||
39 | static inline struct mmu_gather * | ||
40 | tlb_gather_mmu(struct mm_struct *mm, unsigned int full_mm_flush) | ||
41 | { | ||
42 | int cpu = smp_processor_id(); | ||
43 | struct mmu_gather *tlb = &per_cpu(mmu_gathers, cpu); | ||
44 | |||
45 | tlb->mm = mm; | ||
46 | tlb->freed = 0; | ||
47 | tlb->fullmm = full_mm_flush; | ||
48 | |||
49 | return tlb; | ||
50 | } | ||
51 | |||
52 | static inline void | ||
53 | tlb_finish_mmu(struct mmu_gather *tlb, unsigned long start, unsigned long end) | ||
54 | { | ||
55 | struct mm_struct *mm = tlb->mm; | ||
56 | unsigned long freed = tlb->freed; | ||
57 | int rss = get_mm_counter(mm, rss); | ||
58 | |||
59 | if (rss < freed) | ||
60 | freed = rss; | ||
61 | add_mm_counter(mm, rss, -freed); | ||
62 | |||
63 | if (tlb->fullmm) | ||
64 | flush_tlb_mm(mm); | ||
65 | |||
66 | /* keep the page table cache within bounds */ | ||
67 | check_pgt_cache(); | ||
68 | } | ||
69 | |||
70 | static inline unsigned int tlb_is_full_mm(struct mmu_gather *tlb) | ||
71 | { | ||
72 | return tlb->fullmm; | ||
73 | } | ||
74 | |||
75 | #define tlb_remove_tlb_entry(tlb,ptep,address) do { } while (0) | ||
76 | |||
77 | /* | ||
78 | * In the case of tlb vma handling, we can optimise these away in the | ||
79 | * case where we're doing a full MM flush. When we're doing a munmap, | ||
80 | * the vmas are adjusted to only cover the region to be torn down. | ||
81 | */ | ||
82 | static inline void | ||
83 | tlb_start_vma(struct mmu_gather *tlb, struct vm_area_struct *vma) | ||
84 | { | ||
85 | if (!tlb->fullmm) | ||
86 | flush_cache_range(vma, vma->vm_start, vma->vm_end); | ||
87 | } | ||
88 | |||
89 | static inline void | ||
90 | tlb_end_vma(struct mmu_gather *tlb, struct vm_area_struct *vma) | ||
91 | { | ||
92 | if (!tlb->fullmm) | ||
93 | flush_tlb_range(vma, vma->vm_start, vma->vm_end); | ||
94 | } | ||
95 | |||
96 | #define tlb_remove_page(tlb,page) free_page_and_swap_cache(page) | ||
97 | #define pte_free_tlb(tlb,ptep) pte_free(ptep) | ||
98 | #define pmd_free_tlb(tlb,pmdp) pmd_free(pmdp) | ||
99 | |||
100 | #define tlb_migrate_finish(mm) do { } while (0) | ||
101 | |||
102 | #endif | ||
diff --git a/include/asm-arm/tlbflush.h b/include/asm-arm/tlbflush.h new file mode 100644 index 000000000000..8a864b118569 --- /dev/null +++ b/include/asm-arm/tlbflush.h | |||
@@ -0,0 +1,404 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/tlbflush.h | ||
3 | * | ||
4 | * Copyright (C) 1999-2003 Russell King | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | */ | ||
10 | #ifndef _ASMARM_TLBFLUSH_H | ||
11 | #define _ASMARM_TLBFLUSH_H | ||
12 | |||
13 | #include <linux/config.h> | ||
14 | #include <asm/glue.h> | ||
15 | |||
16 | #define TLB_V3_PAGE (1 << 0) | ||
17 | #define TLB_V4_U_PAGE (1 << 1) | ||
18 | #define TLB_V4_D_PAGE (1 << 2) | ||
19 | #define TLB_V4_I_PAGE (1 << 3) | ||
20 | #define TLB_V6_U_PAGE (1 << 4) | ||
21 | #define TLB_V6_D_PAGE (1 << 5) | ||
22 | #define TLB_V6_I_PAGE (1 << 6) | ||
23 | |||
24 | #define TLB_V3_FULL (1 << 8) | ||
25 | #define TLB_V4_U_FULL (1 << 9) | ||
26 | #define TLB_V4_D_FULL (1 << 10) | ||
27 | #define TLB_V4_I_FULL (1 << 11) | ||
28 | #define TLB_V6_U_FULL (1 << 12) | ||
29 | #define TLB_V6_D_FULL (1 << 13) | ||
30 | #define TLB_V6_I_FULL (1 << 14) | ||
31 | |||
32 | #define TLB_V6_U_ASID (1 << 16) | ||
33 | #define TLB_V6_D_ASID (1 << 17) | ||
34 | #define TLB_V6_I_ASID (1 << 18) | ||
35 | |||
36 | #define TLB_DCLEAN (1 << 30) | ||
37 | #define TLB_WB (1 << 31) | ||
38 | |||
39 | /* | ||
40 | * MMU TLB Model | ||
41 | * ============= | ||
42 | * | ||
43 | * We have the following to choose from: | ||
44 | * v3 - ARMv3 | ||
45 | * v4 - ARMv4 without write buffer | ||
46 | * v4wb - ARMv4 with write buffer without I TLB flush entry instruction | ||
47 | * v4wbi - ARMv4 with write buffer with I TLB flush entry instruction | ||
48 | * v6wbi - ARMv6 with write buffer with I TLB flush entry instruction | ||
49 | */ | ||
50 | #undef _TLB | ||
51 | #undef MULTI_TLB | ||
52 | |||
53 | #define v3_tlb_flags (TLB_V3_FULL | TLB_V3_PAGE) | ||
54 | |||
55 | #ifdef CONFIG_CPU_TLB_V3 | ||
56 | # define v3_possible_flags v3_tlb_flags | ||
57 | # define v3_always_flags v3_tlb_flags | ||
58 | # ifdef _TLB | ||
59 | # define MULTI_TLB 1 | ||
60 | # else | ||
61 | # define _TLB v3 | ||
62 | # endif | ||
63 | #else | ||
64 | # define v3_possible_flags 0 | ||
65 | # define v3_always_flags (-1UL) | ||
66 | #endif | ||
67 | |||
68 | #define v4_tlb_flags (TLB_V4_U_FULL | TLB_V4_U_PAGE) | ||
69 | |||
70 | #ifdef CONFIG_CPU_TLB_V4WT | ||
71 | # define v4_possible_flags v4_tlb_flags | ||
72 | # define v4_always_flags v4_tlb_flags | ||
73 | # ifdef _TLB | ||
74 | # define MULTI_TLB 1 | ||
75 | # else | ||
76 | # define _TLB v4 | ||
77 | # endif | ||
78 | #else | ||
79 | # define v4_possible_flags 0 | ||
80 | # define v4_always_flags (-1UL) | ||
81 | #endif | ||
82 | |||
83 | #define v4wbi_tlb_flags (TLB_WB | TLB_DCLEAN | \ | ||
84 | TLB_V4_I_FULL | TLB_V4_D_FULL | \ | ||
85 | TLB_V4_I_PAGE | TLB_V4_D_PAGE) | ||
86 | |||
87 | #ifdef CONFIG_CPU_TLB_V4WBI | ||
88 | # define v4wbi_possible_flags v4wbi_tlb_flags | ||
89 | # define v4wbi_always_flags v4wbi_tlb_flags | ||
90 | # ifdef _TLB | ||
91 | # define MULTI_TLB 1 | ||
92 | # else | ||
93 | # define _TLB v4wbi | ||
94 | # endif | ||
95 | #else | ||
96 | # define v4wbi_possible_flags 0 | ||
97 | # define v4wbi_always_flags (-1UL) | ||
98 | #endif | ||
99 | |||
100 | #define v4wb_tlb_flags (TLB_WB | TLB_DCLEAN | \ | ||
101 | TLB_V4_I_FULL | TLB_V4_D_FULL | \ | ||
102 | TLB_V4_D_PAGE) | ||
103 | |||
104 | #ifdef CONFIG_CPU_TLB_V4WB | ||
105 | # define v4wb_possible_flags v4wb_tlb_flags | ||
106 | # define v4wb_always_flags v4wb_tlb_flags | ||
107 | # ifdef _TLB | ||
108 | # define MULTI_TLB 1 | ||
109 | # else | ||
110 | # define _TLB v4wb | ||
111 | # endif | ||
112 | #else | ||
113 | # define v4wb_possible_flags 0 | ||
114 | # define v4wb_always_flags (-1UL) | ||
115 | #endif | ||
116 | |||
117 | #define v6wbi_tlb_flags (TLB_WB | TLB_DCLEAN | \ | ||
118 | TLB_V6_I_FULL | TLB_V6_D_FULL | \ | ||
119 | TLB_V6_I_PAGE | TLB_V6_D_PAGE | \ | ||
120 | TLB_V6_I_ASID | TLB_V6_D_ASID) | ||
121 | |||
122 | #ifdef CONFIG_CPU_TLB_V6 | ||
123 | # define v6wbi_possible_flags v6wbi_tlb_flags | ||
124 | # define v6wbi_always_flags v6wbi_tlb_flags | ||
125 | # ifdef _TLB | ||
126 | # define MULTI_TLB 1 | ||
127 | # else | ||
128 | # define _TLB v6wbi | ||
129 | # endif | ||
130 | #else | ||
131 | # define v6wbi_possible_flags 0 | ||
132 | # define v6wbi_always_flags (-1UL) | ||
133 | #endif | ||
134 | |||
135 | #ifndef _TLB | ||
136 | #error Unknown TLB model | ||
137 | #endif | ||
138 | |||
139 | #ifndef __ASSEMBLY__ | ||
140 | |||
141 | struct cpu_tlb_fns { | ||
142 | void (*flush_user_range)(unsigned long, unsigned long, struct vm_area_struct *); | ||
143 | void (*flush_kern_range)(unsigned long, unsigned long); | ||
144 | unsigned long tlb_flags; | ||
145 | }; | ||
146 | |||
147 | /* | ||
148 | * Select the calling method | ||
149 | */ | ||
150 | #ifdef MULTI_TLB | ||
151 | |||
152 | #define __cpu_flush_user_tlb_range cpu_tlb.flush_user_range | ||
153 | #define __cpu_flush_kern_tlb_range cpu_tlb.flush_kern_range | ||
154 | |||
155 | #else | ||
156 | |||
157 | #define __cpu_flush_user_tlb_range __glue(_TLB,_flush_user_tlb_range) | ||
158 | #define __cpu_flush_kern_tlb_range __glue(_TLB,_flush_kern_tlb_range) | ||
159 | |||
160 | extern void __cpu_flush_user_tlb_range(unsigned long, unsigned long, struct vm_area_struct *); | ||
161 | extern void __cpu_flush_kern_tlb_range(unsigned long, unsigned long); | ||
162 | |||
163 | #endif | ||
164 | |||
165 | extern struct cpu_tlb_fns cpu_tlb; | ||
166 | |||
167 | #define __cpu_tlb_flags cpu_tlb.tlb_flags | ||
168 | |||
169 | /* | ||
170 | * TLB Management | ||
171 | * ============== | ||
172 | * | ||
173 | * The arch/arm/mm/tlb-*.S files implement these methods. | ||
174 | * | ||
175 | * The TLB specific code is expected to perform whatever tests it | ||
176 | * needs to determine if it should invalidate the TLB for each | ||
177 | * call. Start addresses are inclusive and end addresses are | ||
178 | * exclusive; it is safe to round these addresses down. | ||
179 | * | ||
180 | * flush_tlb_all() | ||
181 | * | ||
182 | * Invalidate the entire TLB. | ||
183 | * | ||
184 | * flush_tlb_mm(mm) | ||
185 | * | ||
186 | * Invalidate all TLB entries in a particular address | ||
187 | * space. | ||
188 | * - mm - mm_struct describing address space | ||
189 | * | ||
190 | * flush_tlb_range(mm,start,end) | ||
191 | * | ||
192 | * Invalidate a range of TLB entries in the specified | ||
193 | * address space. | ||
194 | * - mm - mm_struct describing address space | ||
195 | * - start - start address (may not be aligned) | ||
196 | * - end - end address (exclusive, may not be aligned) | ||
197 | * | ||
198 | * flush_tlb_page(vaddr,vma) | ||
199 | * | ||
200 | * Invalidate the specified page in the specified address range. | ||
201 | * - vaddr - virtual address (may not be aligned) | ||
202 | * - vma - vma_struct describing address range | ||
203 | * | ||
204 | * flush_kern_tlb_page(kaddr) | ||
205 | * | ||
206 | * Invalidate the TLB entry for the specified page. The address | ||
207 | * will be in the kernels virtual memory space. Current uses | ||
208 | * only require the D-TLB to be invalidated. | ||
209 | * - kaddr - Kernel virtual memory address | ||
210 | */ | ||
211 | |||
212 | /* | ||
213 | * We optimise the code below by: | ||
214 | * - building a set of TLB flags that might be set in __cpu_tlb_flags | ||
215 | * - building a set of TLB flags that will always be set in __cpu_tlb_flags | ||
216 | * - if we're going to need __cpu_tlb_flags, access it once and only once | ||
217 | * | ||
218 | * This allows us to build optimal assembly for the single-CPU type case, | ||
219 | * and as close to optimal given the compiler constrants for multi-CPU | ||
220 | * case. We could do better for the multi-CPU case if the compiler | ||
221 | * implemented the "%?" method, but this has been discontinued due to too | ||
222 | * many people getting it wrong. | ||
223 | */ | ||
224 | #define possible_tlb_flags (v3_possible_flags | \ | ||
225 | v4_possible_flags | \ | ||
226 | v4wbi_possible_flags | \ | ||
227 | v4wb_possible_flags | \ | ||
228 | v6wbi_possible_flags) | ||
229 | |||
230 | #define always_tlb_flags (v3_always_flags & \ | ||
231 | v4_always_flags & \ | ||
232 | v4wbi_always_flags & \ | ||
233 | v4wb_always_flags & \ | ||
234 | v6wbi_always_flags) | ||
235 | |||
236 | #define tlb_flag(f) ((always_tlb_flags & (f)) || (__tlb_flag & possible_tlb_flags & (f))) | ||
237 | |||
238 | static inline void flush_tlb_all(void) | ||
239 | { | ||
240 | const int zero = 0; | ||
241 | const unsigned int __tlb_flag = __cpu_tlb_flags; | ||
242 | |||
243 | if (tlb_flag(TLB_WB)) | ||
244 | asm("mcr%? p15, 0, %0, c7, c10, 4" : : "r" (zero)); | ||
245 | |||
246 | if (tlb_flag(TLB_V3_FULL)) | ||
247 | asm("mcr%? p15, 0, %0, c6, c0, 0" : : "r" (zero)); | ||
248 | if (tlb_flag(TLB_V4_U_FULL | TLB_V6_U_FULL)) | ||
249 | asm("mcr%? p15, 0, %0, c8, c7, 0" : : "r" (zero)); | ||
250 | if (tlb_flag(TLB_V4_D_FULL | TLB_V6_D_FULL)) | ||
251 | asm("mcr%? p15, 0, %0, c8, c6, 0" : : "r" (zero)); | ||
252 | if (tlb_flag(TLB_V4_I_FULL | TLB_V6_I_FULL)) | ||
253 | asm("mcr%? p15, 0, %0, c8, c5, 0" : : "r" (zero)); | ||
254 | } | ||
255 | |||
256 | static inline void flush_tlb_mm(struct mm_struct *mm) | ||
257 | { | ||
258 | const int zero = 0; | ||
259 | const int asid = ASID(mm); | ||
260 | const unsigned int __tlb_flag = __cpu_tlb_flags; | ||
261 | |||
262 | if (tlb_flag(TLB_WB)) | ||
263 | asm("mcr%? p15, 0, %0, c7, c10, 4" : : "r" (zero)); | ||
264 | |||
265 | if (cpu_isset(smp_processor_id(), mm->cpu_vm_mask)) { | ||
266 | if (tlb_flag(TLB_V3_FULL)) | ||
267 | asm("mcr%? p15, 0, %0, c6, c0, 0" : : "r" (zero)); | ||
268 | if (tlb_flag(TLB_V4_U_FULL)) | ||
269 | asm("mcr%? p15, 0, %0, c8, c7, 0" : : "r" (zero)); | ||
270 | if (tlb_flag(TLB_V4_D_FULL)) | ||
271 | asm("mcr%? p15, 0, %0, c8, c6, 0" : : "r" (zero)); | ||
272 | if (tlb_flag(TLB_V4_I_FULL)) | ||
273 | asm("mcr%? p15, 0, %0, c8, c5, 0" : : "r" (zero)); | ||
274 | } | ||
275 | |||
276 | if (tlb_flag(TLB_V6_U_ASID)) | ||
277 | asm("mcr%? p15, 0, %0, c8, c7, 2" : : "r" (asid)); | ||
278 | if (tlb_flag(TLB_V6_D_ASID)) | ||
279 | asm("mcr%? p15, 0, %0, c8, c6, 2" : : "r" (asid)); | ||
280 | if (tlb_flag(TLB_V6_I_ASID)) | ||
281 | asm("mcr%? p15, 0, %0, c8, c5, 2" : : "r" (asid)); | ||
282 | } | ||
283 | |||
284 | static inline void | ||
285 | flush_tlb_page(struct vm_area_struct *vma, unsigned long uaddr) | ||
286 | { | ||
287 | const int zero = 0; | ||
288 | const unsigned int __tlb_flag = __cpu_tlb_flags; | ||
289 | |||
290 | uaddr = (uaddr & PAGE_MASK) | ASID(vma->vm_mm); | ||
291 | |||
292 | if (tlb_flag(TLB_WB)) | ||
293 | asm("mcr%? p15, 0, %0, c7, c10, 4" : : "r" (zero)); | ||
294 | |||
295 | if (cpu_isset(smp_processor_id(), vma->vm_mm->cpu_vm_mask)) { | ||
296 | if (tlb_flag(TLB_V3_PAGE)) | ||
297 | asm("mcr%? p15, 0, %0, c6, c0, 0" : : "r" (uaddr)); | ||
298 | if (tlb_flag(TLB_V4_U_PAGE)) | ||
299 | asm("mcr%? p15, 0, %0, c8, c7, 1" : : "r" (uaddr)); | ||
300 | if (tlb_flag(TLB_V4_D_PAGE)) | ||
301 | asm("mcr%? p15, 0, %0, c8, c6, 1" : : "r" (uaddr)); | ||
302 | if (tlb_flag(TLB_V4_I_PAGE)) | ||
303 | asm("mcr%? p15, 0, %0, c8, c5, 1" : : "r" (uaddr)); | ||
304 | if (!tlb_flag(TLB_V4_I_PAGE) && tlb_flag(TLB_V4_I_FULL)) | ||
305 | asm("mcr%? p15, 0, %0, c8, c5, 0" : : "r" (zero)); | ||
306 | } | ||
307 | |||
308 | if (tlb_flag(TLB_V6_U_PAGE)) | ||
309 | asm("mcr%? p15, 0, %0, c8, c7, 1" : : "r" (uaddr)); | ||
310 | if (tlb_flag(TLB_V6_D_PAGE)) | ||
311 | asm("mcr%? p15, 0, %0, c8, c6, 1" : : "r" (uaddr)); | ||
312 | if (tlb_flag(TLB_V6_I_PAGE)) | ||
313 | asm("mcr%? p15, 0, %0, c8, c5, 1" : : "r" (uaddr)); | ||
314 | } | ||
315 | |||
316 | static inline void flush_tlb_kernel_page(unsigned long kaddr) | ||
317 | { | ||
318 | const int zero = 0; | ||
319 | const unsigned int __tlb_flag = __cpu_tlb_flags; | ||
320 | |||
321 | kaddr &= PAGE_MASK; | ||
322 | |||
323 | if (tlb_flag(TLB_WB)) | ||
324 | asm("mcr%? p15, 0, %0, c7, c10, 4" : : "r" (zero)); | ||
325 | |||
326 | if (tlb_flag(TLB_V3_PAGE)) | ||
327 | asm("mcr%? p15, 0, %0, c6, c0, 0" : : "r" (kaddr)); | ||
328 | if (tlb_flag(TLB_V4_U_PAGE)) | ||
329 | asm("mcr%? p15, 0, %0, c8, c7, 1" : : "r" (kaddr)); | ||
330 | if (tlb_flag(TLB_V4_D_PAGE)) | ||
331 | asm("mcr%? p15, 0, %0, c8, c6, 1" : : "r" (kaddr)); | ||
332 | if (tlb_flag(TLB_V4_I_PAGE)) | ||
333 | asm("mcr%? p15, 0, %0, c8, c5, 1" : : "r" (kaddr)); | ||
334 | if (!tlb_flag(TLB_V4_I_PAGE) && tlb_flag(TLB_V4_I_FULL)) | ||
335 | asm("mcr%? p15, 0, %0, c8, c5, 0" : : "r" (zero)); | ||
336 | |||
337 | if (tlb_flag(TLB_V6_U_PAGE)) | ||
338 | asm("mcr%? p15, 0, %0, c8, c7, 1" : : "r" (kaddr)); | ||
339 | if (tlb_flag(TLB_V6_D_PAGE)) | ||
340 | asm("mcr%? p15, 0, %0, c8, c6, 1" : : "r" (kaddr)); | ||
341 | if (tlb_flag(TLB_V6_I_PAGE)) | ||
342 | asm("mcr%? p15, 0, %0, c8, c5, 1" : : "r" (kaddr)); | ||
343 | } | ||
344 | |||
345 | /* | ||
346 | * flush_pmd_entry | ||
347 | * | ||
348 | * Flush a PMD entry (word aligned, or double-word aligned) to | ||
349 | * RAM if the TLB for the CPU we are running on requires this. | ||
350 | * This is typically used when we are creating PMD entries. | ||
351 | * | ||
352 | * clean_pmd_entry | ||
353 | * | ||
354 | * Clean (but don't drain the write buffer) if the CPU requires | ||
355 | * these operations. This is typically used when we are removing | ||
356 | * PMD entries. | ||
357 | */ | ||
358 | static inline void flush_pmd_entry(pmd_t *pmd) | ||
359 | { | ||
360 | const unsigned int zero = 0; | ||
361 | const unsigned int __tlb_flag = __cpu_tlb_flags; | ||
362 | |||
363 | if (tlb_flag(TLB_DCLEAN)) | ||
364 | asm("mcr%? p15, 0, %0, c7, c10, 1 @ flush_pmd" | ||
365 | : : "r" (pmd)); | ||
366 | if (tlb_flag(TLB_WB)) | ||
367 | asm("mcr%? p15, 0, %0, c7, c10, 4 @ flush_pmd" | ||
368 | : : "r" (zero)); | ||
369 | } | ||
370 | |||
371 | static inline void clean_pmd_entry(pmd_t *pmd) | ||
372 | { | ||
373 | const unsigned int __tlb_flag = __cpu_tlb_flags; | ||
374 | |||
375 | if (tlb_flag(TLB_DCLEAN)) | ||
376 | asm("mcr%? p15, 0, %0, c7, c10, 1 @ flush_pmd" | ||
377 | : : "r" (pmd)); | ||
378 | } | ||
379 | |||
380 | #undef tlb_flag | ||
381 | #undef always_tlb_flags | ||
382 | #undef possible_tlb_flags | ||
383 | |||
384 | /* | ||
385 | * Convert calls to our calling convention. | ||
386 | */ | ||
387 | #define flush_tlb_range(vma,start,end) __cpu_flush_user_tlb_range(start,end,vma) | ||
388 | #define flush_tlb_kernel_range(s,e) __cpu_flush_kern_tlb_range(s,e) | ||
389 | |||
390 | /* | ||
391 | * if PG_dcache_dirty is set for the page, we need to ensure that any | ||
392 | * cache entries for the kernels virtual memory range are written | ||
393 | * back to the page. | ||
394 | */ | ||
395 | extern void update_mmu_cache(struct vm_area_struct *vma, unsigned long addr, pte_t pte); | ||
396 | |||
397 | /* | ||
398 | * ARM processors do not cache TLB tables in RAM. | ||
399 | */ | ||
400 | #define flush_tlb_pgtables(mm,start,end) do { } while (0) | ||
401 | |||
402 | #endif | ||
403 | |||
404 | #endif | ||
diff --git a/include/asm-arm/topology.h b/include/asm-arm/topology.h new file mode 100644 index 000000000000..accbd7cad9b5 --- /dev/null +++ b/include/asm-arm/topology.h | |||
@@ -0,0 +1,6 @@ | |||
1 | #ifndef _ASM_ARM_TOPOLOGY_H | ||
2 | #define _ASM_ARM_TOPOLOGY_H | ||
3 | |||
4 | #include <asm-generic/topology.h> | ||
5 | |||
6 | #endif /* _ASM_ARM_TOPOLOGY_H */ | ||
diff --git a/include/asm-arm/traps.h b/include/asm-arm/traps.h new file mode 100644 index 000000000000..d4f34dc83eb0 --- /dev/null +++ b/include/asm-arm/traps.h | |||
@@ -0,0 +1,18 @@ | |||
1 | #ifndef _ASMARM_TRAP_H | ||
2 | #define _ASMARM_TRAP_H | ||
3 | |||
4 | #include <linux/list.h> | ||
5 | |||
6 | struct undef_hook { | ||
7 | struct list_head node; | ||
8 | u32 instr_mask; | ||
9 | u32 instr_val; | ||
10 | u32 cpsr_mask; | ||
11 | u32 cpsr_val; | ||
12 | int (*fn)(struct pt_regs *regs, unsigned int instr); | ||
13 | }; | ||
14 | |||
15 | void register_undef_hook(struct undef_hook *hook); | ||
16 | void unregister_undef_hook(struct undef_hook *hook); | ||
17 | |||
18 | #endif | ||
diff --git a/include/asm-arm/types.h b/include/asm-arm/types.h new file mode 100644 index 000000000000..f4c92e4c8c02 --- /dev/null +++ b/include/asm-arm/types.h | |||
@@ -0,0 +1,62 @@ | |||
1 | #ifndef __ASM_ARM_TYPES_H | ||
2 | #define __ASM_ARM_TYPES_H | ||
3 | |||
4 | #ifndef __ASSEMBLY__ | ||
5 | |||
6 | typedef unsigned short umode_t; | ||
7 | |||
8 | /* | ||
9 | * __xx is ok: it doesn't pollute the POSIX namespace. Use these in the | ||
10 | * header files exported to user space | ||
11 | */ | ||
12 | |||
13 | typedef __signed__ char __s8; | ||
14 | typedef unsigned char __u8; | ||
15 | |||
16 | typedef __signed__ short __s16; | ||
17 | typedef unsigned short __u16; | ||
18 | |||
19 | typedef __signed__ int __s32; | ||
20 | typedef unsigned int __u32; | ||
21 | |||
22 | #if defined(__GNUC__) && !defined(__STRICT_ANSI__) | ||
23 | typedef __signed__ long long __s64; | ||
24 | typedef unsigned long long __u64; | ||
25 | #endif | ||
26 | |||
27 | #endif /* __ASSEMBLY__ */ | ||
28 | |||
29 | /* | ||
30 | * These aren't exported outside the kernel to avoid name space clashes | ||
31 | */ | ||
32 | #ifdef __KERNEL__ | ||
33 | |||
34 | #define BITS_PER_LONG 32 | ||
35 | |||
36 | #ifndef __ASSEMBLY__ | ||
37 | |||
38 | typedef signed char s8; | ||
39 | typedef unsigned char u8; | ||
40 | |||
41 | typedef signed short s16; | ||
42 | typedef unsigned short u16; | ||
43 | |||
44 | typedef signed int s32; | ||
45 | typedef unsigned int u32; | ||
46 | |||
47 | typedef signed long long s64; | ||
48 | typedef unsigned long long u64; | ||
49 | |||
50 | /* Dma addresses are 32-bits wide. */ | ||
51 | |||
52 | typedef u32 dma_addr_t; | ||
53 | typedef u32 dma64_addr_t; | ||
54 | |||
55 | typedef unsigned int kmem_bufctl_t; | ||
56 | |||
57 | #endif /* __ASSEMBLY__ */ | ||
58 | |||
59 | #endif /* __KERNEL__ */ | ||
60 | |||
61 | #endif | ||
62 | |||
diff --git a/include/asm-arm/uaccess.h b/include/asm-arm/uaccess.h new file mode 100644 index 000000000000..a7c018b8a0d4 --- /dev/null +++ b/include/asm-arm/uaccess.h | |||
@@ -0,0 +1,438 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/uaccess.h | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify | ||
5 | * it under the terms of the GNU General Public License version 2 as | ||
6 | * published by the Free Software Foundation. | ||
7 | */ | ||
8 | #ifndef _ASMARM_UACCESS_H | ||
9 | #define _ASMARM_UACCESS_H | ||
10 | |||
11 | /* | ||
12 | * User space memory access functions | ||
13 | */ | ||
14 | #include <linux/sched.h> | ||
15 | #include <asm/errno.h> | ||
16 | #include <asm/memory.h> | ||
17 | #include <asm/domain.h> | ||
18 | #include <asm/system.h> | ||
19 | |||
20 | #define VERIFY_READ 0 | ||
21 | #define VERIFY_WRITE 1 | ||
22 | |||
23 | /* | ||
24 | * The exception table consists of pairs of addresses: the first is the | ||
25 | * address of an instruction that is allowed to fault, and the second is | ||
26 | * the address at which the program should continue. No registers are | ||
27 | * modified, so it is entirely up to the continuation code to figure out | ||
28 | * what to do. | ||
29 | * | ||
30 | * All the routines below use bits of fixup code that are out of line | ||
31 | * with the main instruction path. This means when everything is well, | ||
32 | * we don't even have to jump over them. Further, they do not intrude | ||
33 | * on our cache or tlb entries. | ||
34 | */ | ||
35 | |||
36 | struct exception_table_entry | ||
37 | { | ||
38 | unsigned long insn, fixup; | ||
39 | }; | ||
40 | |||
41 | extern int fixup_exception(struct pt_regs *regs); | ||
42 | |||
43 | /* | ||
44 | * Note that this is actually 0x1,0000,0000 | ||
45 | */ | ||
46 | #define KERNEL_DS 0x00000000 | ||
47 | #define USER_DS TASK_SIZE | ||
48 | |||
49 | #define get_ds() (KERNEL_DS) | ||
50 | #define get_fs() (current_thread_info()->addr_limit) | ||
51 | |||
52 | static inline void set_fs (mm_segment_t fs) | ||
53 | { | ||
54 | current_thread_info()->addr_limit = fs; | ||
55 | modify_domain(DOMAIN_KERNEL, fs ? DOMAIN_CLIENT : DOMAIN_MANAGER); | ||
56 | } | ||
57 | |||
58 | #define segment_eq(a,b) ((a) == (b)) | ||
59 | |||
60 | #define __addr_ok(addr) ({ \ | ||
61 | unsigned long flag; \ | ||
62 | __asm__("cmp %2, %0; movlo %0, #0" \ | ||
63 | : "=&r" (flag) \ | ||
64 | : "0" (current_thread_info()->addr_limit), "r" (addr) \ | ||
65 | : "cc"); \ | ||
66 | (flag == 0); }) | ||
67 | |||
68 | /* We use 33-bit arithmetic here... */ | ||
69 | #define __range_ok(addr,size) ({ \ | ||
70 | unsigned long flag, sum; \ | ||
71 | __chk_user_ptr(addr); \ | ||
72 | __asm__("adds %1, %2, %3; sbcccs %1, %1, %0; movcc %0, #0" \ | ||
73 | : "=&r" (flag), "=&r" (sum) \ | ||
74 | : "r" (addr), "Ir" (size), "0" (current_thread_info()->addr_limit) \ | ||
75 | : "cc"); \ | ||
76 | flag; }) | ||
77 | |||
78 | #define access_ok(type,addr,size) (__range_ok(addr,size) == 0) | ||
79 | |||
80 | /* this function will go away soon - use access_ok() instead */ | ||
81 | static inline int __deprecated verify_area(int type, const void __user *addr, unsigned long size) | ||
82 | { | ||
83 | return access_ok(type, addr, size) ? 0 : -EFAULT; | ||
84 | } | ||
85 | |||
86 | /* | ||
87 | * Single-value transfer routines. They automatically use the right | ||
88 | * size if we just have the right pointer type. Note that the functions | ||
89 | * which read from user space (*get_*) need to take care not to leak | ||
90 | * kernel data even if the calling code is buggy and fails to check | ||
91 | * the return value. This means zeroing out the destination variable | ||
92 | * or buffer on error. Normally this is done out of line by the | ||
93 | * fixup code, but there are a few places where it intrudes on the | ||
94 | * main code path. When we only write to user space, there is no | ||
95 | * problem. | ||
96 | * | ||
97 | * The "__xxx" versions of the user access functions do not verify the | ||
98 | * address space - it must have been done previously with a separate | ||
99 | * "access_ok()" call. | ||
100 | * | ||
101 | * The "xxx_error" versions set the third argument to EFAULT if an | ||
102 | * error occurs, and leave it unchanged on success. Note that these | ||
103 | * versions are void (ie, don't return a value as such). | ||
104 | */ | ||
105 | |||
106 | extern int __get_user_1(void *); | ||
107 | extern int __get_user_2(void *); | ||
108 | extern int __get_user_4(void *); | ||
109 | extern int __get_user_8(void *); | ||
110 | extern int __get_user_bad(void); | ||
111 | |||
112 | #define __get_user_x(__r2,__p,__e,__s,__i...) \ | ||
113 | __asm__ __volatile__ ( \ | ||
114 | __asmeq("%0", "r0") __asmeq("%1", "r2") \ | ||
115 | "bl __get_user_" #__s \ | ||
116 | : "=&r" (__e), "=r" (__r2) \ | ||
117 | : "0" (__p) \ | ||
118 | : __i, "cc") | ||
119 | |||
120 | #define get_user(x,p) \ | ||
121 | ({ \ | ||
122 | const register typeof(*(p)) __user *__p asm("r0") = (p);\ | ||
123 | register typeof(*(p)) __r2 asm("r2"); \ | ||
124 | register int __e asm("r0"); \ | ||
125 | switch (sizeof(*(__p))) { \ | ||
126 | case 1: \ | ||
127 | __get_user_x(__r2, __p, __e, 1, "lr"); \ | ||
128 | break; \ | ||
129 | case 2: \ | ||
130 | __get_user_x(__r2, __p, __e, 2, "r3", "lr"); \ | ||
131 | break; \ | ||
132 | case 4: \ | ||
133 | __get_user_x(__r2, __p, __e, 4, "lr"); \ | ||
134 | break; \ | ||
135 | case 8: \ | ||
136 | __get_user_x(__r2, __p, __e, 8, "lr"); \ | ||
137 | break; \ | ||
138 | default: __e = __get_user_bad(); break; \ | ||
139 | } \ | ||
140 | x = __r2; \ | ||
141 | __e; \ | ||
142 | }) | ||
143 | |||
144 | #define __get_user(x,ptr) \ | ||
145 | ({ \ | ||
146 | long __gu_err = 0; \ | ||
147 | __get_user_err((x),(ptr),__gu_err); \ | ||
148 | __gu_err; \ | ||
149 | }) | ||
150 | |||
151 | #define __get_user_error(x,ptr,err) \ | ||
152 | ({ \ | ||
153 | __get_user_err((x),(ptr),err); \ | ||
154 | (void) 0; \ | ||
155 | }) | ||
156 | |||
157 | #define __get_user_err(x,ptr,err) \ | ||
158 | do { \ | ||
159 | unsigned long __gu_addr = (unsigned long)(ptr); \ | ||
160 | unsigned long __gu_val; \ | ||
161 | __chk_user_ptr(ptr); \ | ||
162 | switch (sizeof(*(ptr))) { \ | ||
163 | case 1: __get_user_asm_byte(__gu_val,__gu_addr,err); break; \ | ||
164 | case 2: __get_user_asm_half(__gu_val,__gu_addr,err); break; \ | ||
165 | case 4: __get_user_asm_word(__gu_val,__gu_addr,err); break; \ | ||
166 | default: (__gu_val) = __get_user_bad(); \ | ||
167 | } \ | ||
168 | (x) = (__typeof__(*(ptr)))__gu_val; \ | ||
169 | } while (0) | ||
170 | |||
171 | #define __get_user_asm_byte(x,addr,err) \ | ||
172 | __asm__ __volatile__( \ | ||
173 | "1: ldrbt %1,[%2],#0\n" \ | ||
174 | "2:\n" \ | ||
175 | " .section .fixup,\"ax\"\n" \ | ||
176 | " .align 2\n" \ | ||
177 | "3: mov %0, %3\n" \ | ||
178 | " mov %1, #0\n" \ | ||
179 | " b 2b\n" \ | ||
180 | " .previous\n" \ | ||
181 | " .section __ex_table,\"a\"\n" \ | ||
182 | " .align 3\n" \ | ||
183 | " .long 1b, 3b\n" \ | ||
184 | " .previous" \ | ||
185 | : "+r" (err), "=&r" (x) \ | ||
186 | : "r" (addr), "i" (-EFAULT) \ | ||
187 | : "cc") | ||
188 | |||
189 | #ifndef __ARMEB__ | ||
190 | #define __get_user_asm_half(x,__gu_addr,err) \ | ||
191 | ({ \ | ||
192 | unsigned long __b1, __b2; \ | ||
193 | __get_user_asm_byte(__b1, __gu_addr, err); \ | ||
194 | __get_user_asm_byte(__b2, __gu_addr + 1, err); \ | ||
195 | (x) = __b1 | (__b2 << 8); \ | ||
196 | }) | ||
197 | #else | ||
198 | #define __get_user_asm_half(x,__gu_addr,err) \ | ||
199 | ({ \ | ||
200 | unsigned long __b1, __b2; \ | ||
201 | __get_user_asm_byte(__b1, __gu_addr, err); \ | ||
202 | __get_user_asm_byte(__b2, __gu_addr + 1, err); \ | ||
203 | (x) = (__b1 << 8) | __b2; \ | ||
204 | }) | ||
205 | #endif | ||
206 | |||
207 | #define __get_user_asm_word(x,addr,err) \ | ||
208 | __asm__ __volatile__( \ | ||
209 | "1: ldrt %1,[%2],#0\n" \ | ||
210 | "2:\n" \ | ||
211 | " .section .fixup,\"ax\"\n" \ | ||
212 | " .align 2\n" \ | ||
213 | "3: mov %0, %3\n" \ | ||
214 | " mov %1, #0\n" \ | ||
215 | " b 2b\n" \ | ||
216 | " .previous\n" \ | ||
217 | " .section __ex_table,\"a\"\n" \ | ||
218 | " .align 3\n" \ | ||
219 | " .long 1b, 3b\n" \ | ||
220 | " .previous" \ | ||
221 | : "+r" (err), "=&r" (x) \ | ||
222 | : "r" (addr), "i" (-EFAULT) \ | ||
223 | : "cc") | ||
224 | |||
225 | extern int __put_user_1(void *, unsigned int); | ||
226 | extern int __put_user_2(void *, unsigned int); | ||
227 | extern int __put_user_4(void *, unsigned int); | ||
228 | extern int __put_user_8(void *, unsigned long long); | ||
229 | extern int __put_user_bad(void); | ||
230 | |||
231 | #define __put_user_x(__r2,__p,__e,__s) \ | ||
232 | __asm__ __volatile__ ( \ | ||
233 | __asmeq("%0", "r0") __asmeq("%2", "r2") \ | ||
234 | "bl __put_user_" #__s \ | ||
235 | : "=&r" (__e) \ | ||
236 | : "0" (__p), "r" (__r2) \ | ||
237 | : "ip", "lr", "cc") | ||
238 | |||
239 | #define put_user(x,p) \ | ||
240 | ({ \ | ||
241 | const register typeof(*(p)) __r2 asm("r2") = (x); \ | ||
242 | const register typeof(*(p)) __user *__p asm("r0") = (p);\ | ||
243 | register int __e asm("r0"); \ | ||
244 | switch (sizeof(*(__p))) { \ | ||
245 | case 1: \ | ||
246 | __put_user_x(__r2, __p, __e, 1); \ | ||
247 | break; \ | ||
248 | case 2: \ | ||
249 | __put_user_x(__r2, __p, __e, 2); \ | ||
250 | break; \ | ||
251 | case 4: \ | ||
252 | __put_user_x(__r2, __p, __e, 4); \ | ||
253 | break; \ | ||
254 | case 8: \ | ||
255 | __put_user_x(__r2, __p, __e, 8); \ | ||
256 | break; \ | ||
257 | default: __e = __put_user_bad(); break; \ | ||
258 | } \ | ||
259 | __e; \ | ||
260 | }) | ||
261 | |||
262 | #define __put_user(x,ptr) \ | ||
263 | ({ \ | ||
264 | long __pu_err = 0; \ | ||
265 | __put_user_err((x),(ptr),__pu_err); \ | ||
266 | __pu_err; \ | ||
267 | }) | ||
268 | |||
269 | #define __put_user_error(x,ptr,err) \ | ||
270 | ({ \ | ||
271 | __put_user_err((x),(ptr),err); \ | ||
272 | (void) 0; \ | ||
273 | }) | ||
274 | |||
275 | #define __put_user_err(x,ptr,err) \ | ||
276 | do { \ | ||
277 | unsigned long __pu_addr = (unsigned long)(ptr); \ | ||
278 | __typeof__(*(ptr)) __pu_val = (x); \ | ||
279 | __chk_user_ptr(ptr); \ | ||
280 | switch (sizeof(*(ptr))) { \ | ||
281 | case 1: __put_user_asm_byte(__pu_val,__pu_addr,err); break; \ | ||
282 | case 2: __put_user_asm_half(__pu_val,__pu_addr,err); break; \ | ||
283 | case 4: __put_user_asm_word(__pu_val,__pu_addr,err); break; \ | ||
284 | case 8: __put_user_asm_dword(__pu_val,__pu_addr,err); break; \ | ||
285 | default: __put_user_bad(); \ | ||
286 | } \ | ||
287 | } while (0) | ||
288 | |||
289 | #define __put_user_asm_byte(x,__pu_addr,err) \ | ||
290 | __asm__ __volatile__( \ | ||
291 | "1: strbt %1,[%2],#0\n" \ | ||
292 | "2:\n" \ | ||
293 | " .section .fixup,\"ax\"\n" \ | ||
294 | " .align 2\n" \ | ||
295 | "3: mov %0, %3\n" \ | ||
296 | " b 2b\n" \ | ||
297 | " .previous\n" \ | ||
298 | " .section __ex_table,\"a\"\n" \ | ||
299 | " .align 3\n" \ | ||
300 | " .long 1b, 3b\n" \ | ||
301 | " .previous" \ | ||
302 | : "+r" (err) \ | ||
303 | : "r" (x), "r" (__pu_addr), "i" (-EFAULT) \ | ||
304 | : "cc") | ||
305 | |||
306 | #ifndef __ARMEB__ | ||
307 | #define __put_user_asm_half(x,__pu_addr,err) \ | ||
308 | ({ \ | ||
309 | unsigned long __temp = (unsigned long)(x); \ | ||
310 | __put_user_asm_byte(__temp, __pu_addr, err); \ | ||
311 | __put_user_asm_byte(__temp >> 8, __pu_addr + 1, err); \ | ||
312 | }) | ||
313 | #else | ||
314 | #define __put_user_asm_half(x,__pu_addr,err) \ | ||
315 | ({ \ | ||
316 | unsigned long __temp = (unsigned long)(x); \ | ||
317 | __put_user_asm_byte(__temp >> 8, __pu_addr, err); \ | ||
318 | __put_user_asm_byte(__temp, __pu_addr + 1, err); \ | ||
319 | }) | ||
320 | #endif | ||
321 | |||
322 | #define __put_user_asm_word(x,__pu_addr,err) \ | ||
323 | __asm__ __volatile__( \ | ||
324 | "1: strt %1,[%2],#0\n" \ | ||
325 | "2:\n" \ | ||
326 | " .section .fixup,\"ax\"\n" \ | ||
327 | " .align 2\n" \ | ||
328 | "3: mov %0, %3\n" \ | ||
329 | " b 2b\n" \ | ||
330 | " .previous\n" \ | ||
331 | " .section __ex_table,\"a\"\n" \ | ||
332 | " .align 3\n" \ | ||
333 | " .long 1b, 3b\n" \ | ||
334 | " .previous" \ | ||
335 | : "+r" (err) \ | ||
336 | : "r" (x), "r" (__pu_addr), "i" (-EFAULT) \ | ||
337 | : "cc") | ||
338 | |||
339 | #ifndef __ARMEB__ | ||
340 | #define __reg_oper0 "%R2" | ||
341 | #define __reg_oper1 "%Q2" | ||
342 | #else | ||
343 | #define __reg_oper0 "%Q2" | ||
344 | #define __reg_oper1 "%R2" | ||
345 | #endif | ||
346 | |||
347 | #define __put_user_asm_dword(x,__pu_addr,err) \ | ||
348 | __asm__ __volatile__( \ | ||
349 | "1: strt " __reg_oper1 ", [%1], #4\n" \ | ||
350 | "2: strt " __reg_oper0 ", [%1], #0\n" \ | ||
351 | "3:\n" \ | ||
352 | " .section .fixup,\"ax\"\n" \ | ||
353 | " .align 2\n" \ | ||
354 | "4: mov %0, %3\n" \ | ||
355 | " b 3b\n" \ | ||
356 | " .previous\n" \ | ||
357 | " .section __ex_table,\"a\"\n" \ | ||
358 | " .align 3\n" \ | ||
359 | " .long 1b, 4b\n" \ | ||
360 | " .long 2b, 4b\n" \ | ||
361 | " .previous" \ | ||
362 | : "+r" (err), "+r" (__pu_addr) \ | ||
363 | : "r" (x), "i" (-EFAULT) \ | ||
364 | : "cc") | ||
365 | |||
366 | extern unsigned long __arch_copy_from_user(void *to, const void __user *from, unsigned long n); | ||
367 | extern unsigned long __arch_copy_to_user(void __user *to, const void *from, unsigned long n); | ||
368 | extern unsigned long __arch_clear_user(void __user *addr, unsigned long n); | ||
369 | extern unsigned long __arch_strncpy_from_user(char *to, const char __user *from, unsigned long count); | ||
370 | extern unsigned long __arch_strnlen_user(const char __user *s, long n); | ||
371 | |||
372 | static inline unsigned long copy_from_user(void *to, const void __user *from, unsigned long n) | ||
373 | { | ||
374 | if (access_ok(VERIFY_READ, from, n)) | ||
375 | n = __arch_copy_from_user(to, from, n); | ||
376 | else /* security hole - plug it */ | ||
377 | memzero(to, n); | ||
378 | return n; | ||
379 | } | ||
380 | |||
381 | static inline unsigned long __copy_from_user(void *to, const void __user *from, unsigned long n) | ||
382 | { | ||
383 | return __arch_copy_from_user(to, from, n); | ||
384 | } | ||
385 | |||
386 | static inline unsigned long copy_to_user(void __user *to, const void *from, unsigned long n) | ||
387 | { | ||
388 | if (access_ok(VERIFY_WRITE, to, n)) | ||
389 | n = __arch_copy_to_user(to, from, n); | ||
390 | return n; | ||
391 | } | ||
392 | |||
393 | static inline unsigned long __copy_to_user(void __user *to, const void *from, unsigned long n) | ||
394 | { | ||
395 | return __arch_copy_to_user(to, from, n); | ||
396 | } | ||
397 | |||
398 | #define __copy_to_user_inatomic __copy_to_user | ||
399 | #define __copy_from_user_inatomic __copy_from_user | ||
400 | |||
401 | static inline unsigned long clear_user (void __user *to, unsigned long n) | ||
402 | { | ||
403 | if (access_ok(VERIFY_WRITE, to, n)) | ||
404 | n = __arch_clear_user(to, n); | ||
405 | return n; | ||
406 | } | ||
407 | |||
408 | static inline unsigned long __clear_user (void __user *to, unsigned long n) | ||
409 | { | ||
410 | return __arch_clear_user(to, n); | ||
411 | } | ||
412 | |||
413 | static inline long strncpy_from_user (char *dst, const char __user *src, long count) | ||
414 | { | ||
415 | long res = -EFAULT; | ||
416 | if (access_ok(VERIFY_READ, src, 1)) | ||
417 | res = __arch_strncpy_from_user(dst, src, count); | ||
418 | return res; | ||
419 | } | ||
420 | |||
421 | static inline long __strncpy_from_user (char *dst, const char __user *src, long count) | ||
422 | { | ||
423 | return __arch_strncpy_from_user(dst, src, count); | ||
424 | } | ||
425 | |||
426 | #define strlen_user(s) strnlen_user(s, ~0UL >> 1) | ||
427 | |||
428 | static inline long strnlen_user(const char __user *s, long n) | ||
429 | { | ||
430 | unsigned long res = 0; | ||
431 | |||
432 | if (__addr_ok(s)) | ||
433 | res = __arch_strnlen_user(s, n); | ||
434 | |||
435 | return res; | ||
436 | } | ||
437 | |||
438 | #endif /* _ASMARM_UACCESS_H */ | ||
diff --git a/include/asm-arm/ucontext.h b/include/asm-arm/ucontext.h new file mode 100644 index 000000000000..f853130137cc --- /dev/null +++ b/include/asm-arm/ucontext.h | |||
@@ -0,0 +1,12 @@ | |||
1 | #ifndef _ASMARM_UCONTEXT_H | ||
2 | #define _ASMARM_UCONTEXT_H | ||
3 | |||
4 | struct ucontext { | ||
5 | unsigned long uc_flags; | ||
6 | struct ucontext *uc_link; | ||
7 | stack_t uc_stack; | ||
8 | struct sigcontext uc_mcontext; | ||
9 | sigset_t uc_sigmask; /* mask last for extensibility */ | ||
10 | }; | ||
11 | |||
12 | #endif /* !_ASMARM_UCONTEXT_H */ | ||
diff --git a/include/asm-arm/unaligned.h b/include/asm-arm/unaligned.h new file mode 100644 index 000000000000..1b39c2f322c9 --- /dev/null +++ b/include/asm-arm/unaligned.h | |||
@@ -0,0 +1,191 @@ | |||
1 | #ifndef __ASM_ARM_UNALIGNED_H | ||
2 | #define __ASM_ARM_UNALIGNED_H | ||
3 | |||
4 | #include <asm/types.h> | ||
5 | |||
6 | extern int __bug_unaligned_x(void *ptr); | ||
7 | |||
8 | /* | ||
9 | * What is the most efficient way of loading/storing an unaligned value? | ||
10 | * | ||
11 | * That is the subject of this file. Efficiency here is defined as | ||
12 | * minimum code size with minimum register usage for the common cases. | ||
13 | * It is currently not believed that long longs are common, so we | ||
14 | * trade efficiency for the chars, shorts and longs against the long | ||
15 | * longs. | ||
16 | * | ||
17 | * Current stats with gcc 2.7.2.2 for these functions: | ||
18 | * | ||
19 | * ptrsize get: code regs put: code regs | ||
20 | * 1 1 1 1 2 | ||
21 | * 2 3 2 3 2 | ||
22 | * 4 7 3 7 3 | ||
23 | * 8 20 6 16 6 | ||
24 | * | ||
25 | * gcc 2.95.1 seems to code differently: | ||
26 | * | ||
27 | * ptrsize get: code regs put: code regs | ||
28 | * 1 1 1 1 2 | ||
29 | * 2 3 2 3 2 | ||
30 | * 4 7 4 7 4 | ||
31 | * 8 19 8 15 6 | ||
32 | * | ||
33 | * which may or may not be more efficient (depending upon whether | ||
34 | * you can afford the extra registers). Hopefully the gcc 2.95 | ||
35 | * is inteligent enough to decide if it is better to use the | ||
36 | * extra register, but evidence so far seems to suggest otherwise. | ||
37 | * | ||
38 | * Unfortunately, gcc is not able to optimise the high word | ||
39 | * out of long long >> 32, or the low word from long long << 32 | ||
40 | */ | ||
41 | |||
42 | #define __get_unaligned_2_le(__p) \ | ||
43 | (__p[0] | __p[1] << 8) | ||
44 | |||
45 | #define __get_unaligned_2_be(__p) \ | ||
46 | (__p[0] << 8 | __p[1]) | ||
47 | |||
48 | #define __get_unaligned_4_le(__p) \ | ||
49 | (__p[0] | __p[1] << 8 | __p[2] << 16 | __p[3] << 24) | ||
50 | |||
51 | #define __get_unaligned_4_be(__p) \ | ||
52 | (__p[0] << 24 | __p[1] << 16 | __p[2] << 8 | __p[3]) | ||
53 | |||
54 | #define __get_unaligned_le(ptr) \ | ||
55 | ({ \ | ||
56 | __typeof__(*(ptr)) __v; \ | ||
57 | __u8 *__p = (__u8 *)(ptr); \ | ||
58 | switch (sizeof(*(ptr))) { \ | ||
59 | case 1: __v = *(ptr); break; \ | ||
60 | case 2: __v = __get_unaligned_2_le(__p); break; \ | ||
61 | case 4: __v = __get_unaligned_4_le(__p); break; \ | ||
62 | case 8: { \ | ||
63 | unsigned int __v1, __v2; \ | ||
64 | __v2 = __get_unaligned_4_le((__p+4)); \ | ||
65 | __v1 = __get_unaligned_4_le(__p); \ | ||
66 | __v = ((unsigned long long)__v2 << 32 | __v1); \ | ||
67 | } \ | ||
68 | break; \ | ||
69 | default: __v = __bug_unaligned_x(__p); break; \ | ||
70 | } \ | ||
71 | __v; \ | ||
72 | }) | ||
73 | |||
74 | #define __get_unaligned_be(ptr) \ | ||
75 | ({ \ | ||
76 | __typeof__(*(ptr)) __v; \ | ||
77 | __u8 *__p = (__u8 *)(ptr); \ | ||
78 | switch (sizeof(*(ptr))) { \ | ||
79 | case 1: __v = *(ptr); break; \ | ||
80 | case 2: __v = __get_unaligned_2_be(__p); break; \ | ||
81 | case 4: __v = __get_unaligned_4_be(__p); break; \ | ||
82 | case 8: { \ | ||
83 | unsigned int __v1, __v2; \ | ||
84 | __v2 = __get_unaligned_4_be(__p); \ | ||
85 | __v1 = __get_unaligned_4_be((__p+4)); \ | ||
86 | __v = ((unsigned long long)__v2 << 32 | __v1); \ | ||
87 | } \ | ||
88 | break; \ | ||
89 | default: __v = __bug_unaligned_x(__p); break; \ | ||
90 | } \ | ||
91 | __v; \ | ||
92 | }) | ||
93 | |||
94 | |||
95 | static inline void __put_unaligned_2_le(__u32 __v, register __u8 *__p) | ||
96 | { | ||
97 | *__p++ = __v; | ||
98 | *__p++ = __v >> 8; | ||
99 | } | ||
100 | |||
101 | static inline void __put_unaligned_2_be(__u32 __v, register __u8 *__p) | ||
102 | { | ||
103 | *__p++ = __v >> 8; | ||
104 | *__p++ = __v; | ||
105 | } | ||
106 | |||
107 | static inline void __put_unaligned_4_le(__u32 __v, register __u8 *__p) | ||
108 | { | ||
109 | __put_unaligned_2_le(__v >> 16, __p + 2); | ||
110 | __put_unaligned_2_le(__v, __p); | ||
111 | } | ||
112 | |||
113 | static inline void __put_unaligned_4_be(__u32 __v, register __u8 *__p) | ||
114 | { | ||
115 | __put_unaligned_2_be(__v >> 16, __p); | ||
116 | __put_unaligned_2_be(__v, __p + 2); | ||
117 | } | ||
118 | |||
119 | static inline void __put_unaligned_8_le(const unsigned long long __v, register __u8 *__p) | ||
120 | { | ||
121 | /* | ||
122 | * tradeoff: 8 bytes of stack for all unaligned puts (2 | ||
123 | * instructions), or an extra register in the long long | ||
124 | * case - go for the extra register. | ||
125 | */ | ||
126 | __put_unaligned_4_le(__v >> 32, __p+4); | ||
127 | __put_unaligned_4_le(__v, __p); | ||
128 | } | ||
129 | |||
130 | static inline void __put_unaligned_8_be(const unsigned long long __v, register __u8 *__p) | ||
131 | { | ||
132 | /* | ||
133 | * tradeoff: 8 bytes of stack for all unaligned puts (2 | ||
134 | * instructions), or an extra register in the long long | ||
135 | * case - go for the extra register. | ||
136 | */ | ||
137 | __put_unaligned_4_be(__v >> 32, __p); | ||
138 | __put_unaligned_4_be(__v, __p+4); | ||
139 | } | ||
140 | |||
141 | /* | ||
142 | * Try to store an unaligned value as efficiently as possible. | ||
143 | */ | ||
144 | #define __put_unaligned_le(val,ptr) \ | ||
145 | ({ \ | ||
146 | switch (sizeof(*(ptr))) { \ | ||
147 | case 1: \ | ||
148 | *(ptr) = (val); \ | ||
149 | break; \ | ||
150 | case 2: __put_unaligned_2_le((val),(__u8 *)(ptr)); \ | ||
151 | break; \ | ||
152 | case 4: __put_unaligned_4_le((val),(__u8 *)(ptr)); \ | ||
153 | break; \ | ||
154 | case 8: __put_unaligned_8_le((val),(__u8 *)(ptr)); \ | ||
155 | break; \ | ||
156 | default: __bug_unaligned_x(ptr); \ | ||
157 | break; \ | ||
158 | } \ | ||
159 | (void) 0; \ | ||
160 | }) | ||
161 | |||
162 | #define __put_unaligned_be(val,ptr) \ | ||
163 | ({ \ | ||
164 | switch (sizeof(*(ptr))) { \ | ||
165 | case 1: \ | ||
166 | *(ptr) = (val); \ | ||
167 | break; \ | ||
168 | case 2: __put_unaligned_2_be((val),(__u8 *)(ptr)); \ | ||
169 | break; \ | ||
170 | case 4: __put_unaligned_4_be((val),(__u8 *)(ptr)); \ | ||
171 | break; \ | ||
172 | case 8: __put_unaligned_8_be((val),(__u8 *)(ptr)); \ | ||
173 | break; \ | ||
174 | default: __bug_unaligned_x(ptr); \ | ||
175 | break; \ | ||
176 | } \ | ||
177 | (void) 0; \ | ||
178 | }) | ||
179 | |||
180 | /* | ||
181 | * Select endianness | ||
182 | */ | ||
183 | #ifndef __ARMEB__ | ||
184 | #define get_unaligned __get_unaligned_le | ||
185 | #define put_unaligned __put_unaligned_le | ||
186 | #else | ||
187 | #define get_unaligned __get_unaligned_be | ||
188 | #define put_unaligned __put_unaligned_be | ||
189 | #endif | ||
190 | |||
191 | #endif | ||
diff --git a/include/asm-arm/unistd.h b/include/asm-arm/unistd.h new file mode 100644 index 000000000000..a19ec09eaa01 --- /dev/null +++ b/include/asm-arm/unistd.h | |||
@@ -0,0 +1,558 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/unistd.h | ||
3 | * | ||
4 | * Copyright (C) 2001-2005 Russell King | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | * Please forward _all_ changes to this file to rmk@arm.linux.org.uk, | ||
11 | * no matter what the change is. Thanks! | ||
12 | */ | ||
13 | #ifndef __ASM_ARM_UNISTD_H | ||
14 | #define __ASM_ARM_UNISTD_H | ||
15 | |||
16 | #include <linux/linkage.h> | ||
17 | |||
18 | #if defined(__thumb__) | ||
19 | #define __NR_SYSCALL_BASE 0 | ||
20 | #else | ||
21 | #define __NR_SYSCALL_BASE 0x900000 | ||
22 | #endif | ||
23 | |||
24 | /* | ||
25 | * This file contains the system call numbers. | ||
26 | */ | ||
27 | |||
28 | #define __NR_restart_syscall (__NR_SYSCALL_BASE+ 0) | ||
29 | #define __NR_exit (__NR_SYSCALL_BASE+ 1) | ||
30 | #define __NR_fork (__NR_SYSCALL_BASE+ 2) | ||
31 | #define __NR_read (__NR_SYSCALL_BASE+ 3) | ||
32 | #define __NR_write (__NR_SYSCALL_BASE+ 4) | ||
33 | #define __NR_open (__NR_SYSCALL_BASE+ 5) | ||
34 | #define __NR_close (__NR_SYSCALL_BASE+ 6) | ||
35 | /* 7 was sys_waitpid */ | ||
36 | #define __NR_creat (__NR_SYSCALL_BASE+ 8) | ||
37 | #define __NR_link (__NR_SYSCALL_BASE+ 9) | ||
38 | #define __NR_unlink (__NR_SYSCALL_BASE+ 10) | ||
39 | #define __NR_execve (__NR_SYSCALL_BASE+ 11) | ||
40 | #define __NR_chdir (__NR_SYSCALL_BASE+ 12) | ||
41 | #define __NR_time (__NR_SYSCALL_BASE+ 13) | ||
42 | #define __NR_mknod (__NR_SYSCALL_BASE+ 14) | ||
43 | #define __NR_chmod (__NR_SYSCALL_BASE+ 15) | ||
44 | #define __NR_lchown (__NR_SYSCALL_BASE+ 16) | ||
45 | /* 17 was sys_break */ | ||
46 | /* 18 was sys_stat */ | ||
47 | #define __NR_lseek (__NR_SYSCALL_BASE+ 19) | ||
48 | #define __NR_getpid (__NR_SYSCALL_BASE+ 20) | ||
49 | #define __NR_mount (__NR_SYSCALL_BASE+ 21) | ||
50 | #define __NR_umount (__NR_SYSCALL_BASE+ 22) | ||
51 | #define __NR_setuid (__NR_SYSCALL_BASE+ 23) | ||
52 | #define __NR_getuid (__NR_SYSCALL_BASE+ 24) | ||
53 | #define __NR_stime (__NR_SYSCALL_BASE+ 25) | ||
54 | #define __NR_ptrace (__NR_SYSCALL_BASE+ 26) | ||
55 | #define __NR_alarm (__NR_SYSCALL_BASE+ 27) | ||
56 | /* 28 was sys_fstat */ | ||
57 | #define __NR_pause (__NR_SYSCALL_BASE+ 29) | ||
58 | #define __NR_utime (__NR_SYSCALL_BASE+ 30) | ||
59 | /* 31 was sys_stty */ | ||
60 | /* 32 was sys_gtty */ | ||
61 | #define __NR_access (__NR_SYSCALL_BASE+ 33) | ||
62 | #define __NR_nice (__NR_SYSCALL_BASE+ 34) | ||
63 | /* 35 was sys_ftime */ | ||
64 | #define __NR_sync (__NR_SYSCALL_BASE+ 36) | ||
65 | #define __NR_kill (__NR_SYSCALL_BASE+ 37) | ||
66 | #define __NR_rename (__NR_SYSCALL_BASE+ 38) | ||
67 | #define __NR_mkdir (__NR_SYSCALL_BASE+ 39) | ||
68 | #define __NR_rmdir (__NR_SYSCALL_BASE+ 40) | ||
69 | #define __NR_dup (__NR_SYSCALL_BASE+ 41) | ||
70 | #define __NR_pipe (__NR_SYSCALL_BASE+ 42) | ||
71 | #define __NR_times (__NR_SYSCALL_BASE+ 43) | ||
72 | /* 44 was sys_prof */ | ||
73 | #define __NR_brk (__NR_SYSCALL_BASE+ 45) | ||
74 | #define __NR_setgid (__NR_SYSCALL_BASE+ 46) | ||
75 | #define __NR_getgid (__NR_SYSCALL_BASE+ 47) | ||
76 | /* 48 was sys_signal */ | ||
77 | #define __NR_geteuid (__NR_SYSCALL_BASE+ 49) | ||
78 | #define __NR_getegid (__NR_SYSCALL_BASE+ 50) | ||
79 | #define __NR_acct (__NR_SYSCALL_BASE+ 51) | ||
80 | #define __NR_umount2 (__NR_SYSCALL_BASE+ 52) | ||
81 | /* 53 was sys_lock */ | ||
82 | #define __NR_ioctl (__NR_SYSCALL_BASE+ 54) | ||
83 | #define __NR_fcntl (__NR_SYSCALL_BASE+ 55) | ||
84 | /* 56 was sys_mpx */ | ||
85 | #define __NR_setpgid (__NR_SYSCALL_BASE+ 57) | ||
86 | /* 58 was sys_ulimit */ | ||
87 | /* 59 was sys_olduname */ | ||
88 | #define __NR_umask (__NR_SYSCALL_BASE+ 60) | ||
89 | #define __NR_chroot (__NR_SYSCALL_BASE+ 61) | ||
90 | #define __NR_ustat (__NR_SYSCALL_BASE+ 62) | ||
91 | #define __NR_dup2 (__NR_SYSCALL_BASE+ 63) | ||
92 | #define __NR_getppid (__NR_SYSCALL_BASE+ 64) | ||
93 | #define __NR_getpgrp (__NR_SYSCALL_BASE+ 65) | ||
94 | #define __NR_setsid (__NR_SYSCALL_BASE+ 66) | ||
95 | #define __NR_sigaction (__NR_SYSCALL_BASE+ 67) | ||
96 | /* 68 was sys_sgetmask */ | ||
97 | /* 69 was sys_ssetmask */ | ||
98 | #define __NR_setreuid (__NR_SYSCALL_BASE+ 70) | ||
99 | #define __NR_setregid (__NR_SYSCALL_BASE+ 71) | ||
100 | #define __NR_sigsuspend (__NR_SYSCALL_BASE+ 72) | ||
101 | #define __NR_sigpending (__NR_SYSCALL_BASE+ 73) | ||
102 | #define __NR_sethostname (__NR_SYSCALL_BASE+ 74) | ||
103 | #define __NR_setrlimit (__NR_SYSCALL_BASE+ 75) | ||
104 | #define __NR_getrlimit (__NR_SYSCALL_BASE+ 76) /* Back compat 2GB limited rlimit */ | ||
105 | #define __NR_getrusage (__NR_SYSCALL_BASE+ 77) | ||
106 | #define __NR_gettimeofday (__NR_SYSCALL_BASE+ 78) | ||
107 | #define __NR_settimeofday (__NR_SYSCALL_BASE+ 79) | ||
108 | #define __NR_getgroups (__NR_SYSCALL_BASE+ 80) | ||
109 | #define __NR_setgroups (__NR_SYSCALL_BASE+ 81) | ||
110 | #define __NR_select (__NR_SYSCALL_BASE+ 82) | ||
111 | #define __NR_symlink (__NR_SYSCALL_BASE+ 83) | ||
112 | /* 84 was sys_lstat */ | ||
113 | #define __NR_readlink (__NR_SYSCALL_BASE+ 85) | ||
114 | #define __NR_uselib (__NR_SYSCALL_BASE+ 86) | ||
115 | #define __NR_swapon (__NR_SYSCALL_BASE+ 87) | ||
116 | #define __NR_reboot (__NR_SYSCALL_BASE+ 88) | ||
117 | #define __NR_readdir (__NR_SYSCALL_BASE+ 89) | ||
118 | #define __NR_mmap (__NR_SYSCALL_BASE+ 90) | ||
119 | #define __NR_munmap (__NR_SYSCALL_BASE+ 91) | ||
120 | #define __NR_truncate (__NR_SYSCALL_BASE+ 92) | ||
121 | #define __NR_ftruncate (__NR_SYSCALL_BASE+ 93) | ||
122 | #define __NR_fchmod (__NR_SYSCALL_BASE+ 94) | ||
123 | #define __NR_fchown (__NR_SYSCALL_BASE+ 95) | ||
124 | #define __NR_getpriority (__NR_SYSCALL_BASE+ 96) | ||
125 | #define __NR_setpriority (__NR_SYSCALL_BASE+ 97) | ||
126 | /* 98 was sys_profil */ | ||
127 | #define __NR_statfs (__NR_SYSCALL_BASE+ 99) | ||
128 | #define __NR_fstatfs (__NR_SYSCALL_BASE+100) | ||
129 | /* 101 was sys_ioperm */ | ||
130 | #define __NR_socketcall (__NR_SYSCALL_BASE+102) | ||
131 | #define __NR_syslog (__NR_SYSCALL_BASE+103) | ||
132 | #define __NR_setitimer (__NR_SYSCALL_BASE+104) | ||
133 | #define __NR_getitimer (__NR_SYSCALL_BASE+105) | ||
134 | #define __NR_stat (__NR_SYSCALL_BASE+106) | ||
135 | #define __NR_lstat (__NR_SYSCALL_BASE+107) | ||
136 | #define __NR_fstat (__NR_SYSCALL_BASE+108) | ||
137 | /* 109 was sys_uname */ | ||
138 | /* 110 was sys_iopl */ | ||
139 | #define __NR_vhangup (__NR_SYSCALL_BASE+111) | ||
140 | /* 112 was sys_idle */ | ||
141 | #define __NR_syscall (__NR_SYSCALL_BASE+113) /* syscall to call a syscall! */ | ||
142 | #define __NR_wait4 (__NR_SYSCALL_BASE+114) | ||
143 | #define __NR_swapoff (__NR_SYSCALL_BASE+115) | ||
144 | #define __NR_sysinfo (__NR_SYSCALL_BASE+116) | ||
145 | #define __NR_ipc (__NR_SYSCALL_BASE+117) | ||
146 | #define __NR_fsync (__NR_SYSCALL_BASE+118) | ||
147 | #define __NR_sigreturn (__NR_SYSCALL_BASE+119) | ||
148 | #define __NR_clone (__NR_SYSCALL_BASE+120) | ||
149 | #define __NR_setdomainname (__NR_SYSCALL_BASE+121) | ||
150 | #define __NR_uname (__NR_SYSCALL_BASE+122) | ||
151 | /* 123 was sys_modify_ldt */ | ||
152 | #define __NR_adjtimex (__NR_SYSCALL_BASE+124) | ||
153 | #define __NR_mprotect (__NR_SYSCALL_BASE+125) | ||
154 | #define __NR_sigprocmask (__NR_SYSCALL_BASE+126) | ||
155 | /* 127 was sys_create_module */ | ||
156 | #define __NR_init_module (__NR_SYSCALL_BASE+128) | ||
157 | #define __NR_delete_module (__NR_SYSCALL_BASE+129) | ||
158 | /* 130 was sys_get_kernel_syms */ | ||
159 | #define __NR_quotactl (__NR_SYSCALL_BASE+131) | ||
160 | #define __NR_getpgid (__NR_SYSCALL_BASE+132) | ||
161 | #define __NR_fchdir (__NR_SYSCALL_BASE+133) | ||
162 | #define __NR_bdflush (__NR_SYSCALL_BASE+134) | ||
163 | #define __NR_sysfs (__NR_SYSCALL_BASE+135) | ||
164 | #define __NR_personality (__NR_SYSCALL_BASE+136) | ||
165 | /* 137 was sys_afs_syscall */ | ||
166 | #define __NR_setfsuid (__NR_SYSCALL_BASE+138) | ||
167 | #define __NR_setfsgid (__NR_SYSCALL_BASE+139) | ||
168 | #define __NR__llseek (__NR_SYSCALL_BASE+140) | ||
169 | #define __NR_getdents (__NR_SYSCALL_BASE+141) | ||
170 | #define __NR__newselect (__NR_SYSCALL_BASE+142) | ||
171 | #define __NR_flock (__NR_SYSCALL_BASE+143) | ||
172 | #define __NR_msync (__NR_SYSCALL_BASE+144) | ||
173 | #define __NR_readv (__NR_SYSCALL_BASE+145) | ||
174 | #define __NR_writev (__NR_SYSCALL_BASE+146) | ||
175 | #define __NR_getsid (__NR_SYSCALL_BASE+147) | ||
176 | #define __NR_fdatasync (__NR_SYSCALL_BASE+148) | ||
177 | #define __NR__sysctl (__NR_SYSCALL_BASE+149) | ||
178 | #define __NR_mlock (__NR_SYSCALL_BASE+150) | ||
179 | #define __NR_munlock (__NR_SYSCALL_BASE+151) | ||
180 | #define __NR_mlockall (__NR_SYSCALL_BASE+152) | ||
181 | #define __NR_munlockall (__NR_SYSCALL_BASE+153) | ||
182 | #define __NR_sched_setparam (__NR_SYSCALL_BASE+154) | ||
183 | #define __NR_sched_getparam (__NR_SYSCALL_BASE+155) | ||
184 | #define __NR_sched_setscheduler (__NR_SYSCALL_BASE+156) | ||
185 | #define __NR_sched_getscheduler (__NR_SYSCALL_BASE+157) | ||
186 | #define __NR_sched_yield (__NR_SYSCALL_BASE+158) | ||
187 | #define __NR_sched_get_priority_max (__NR_SYSCALL_BASE+159) | ||
188 | #define __NR_sched_get_priority_min (__NR_SYSCALL_BASE+160) | ||
189 | #define __NR_sched_rr_get_interval (__NR_SYSCALL_BASE+161) | ||
190 | #define __NR_nanosleep (__NR_SYSCALL_BASE+162) | ||
191 | #define __NR_mremap (__NR_SYSCALL_BASE+163) | ||
192 | #define __NR_setresuid (__NR_SYSCALL_BASE+164) | ||
193 | #define __NR_getresuid (__NR_SYSCALL_BASE+165) | ||
194 | /* 166 was sys_vm86 */ | ||
195 | /* 167 was sys_query_module */ | ||
196 | #define __NR_poll (__NR_SYSCALL_BASE+168) | ||
197 | #define __NR_nfsservctl (__NR_SYSCALL_BASE+169) | ||
198 | #define __NR_setresgid (__NR_SYSCALL_BASE+170) | ||
199 | #define __NR_getresgid (__NR_SYSCALL_BASE+171) | ||
200 | #define __NR_prctl (__NR_SYSCALL_BASE+172) | ||
201 | #define __NR_rt_sigreturn (__NR_SYSCALL_BASE+173) | ||
202 | #define __NR_rt_sigaction (__NR_SYSCALL_BASE+174) | ||
203 | #define __NR_rt_sigprocmask (__NR_SYSCALL_BASE+175) | ||
204 | #define __NR_rt_sigpending (__NR_SYSCALL_BASE+176) | ||
205 | #define __NR_rt_sigtimedwait (__NR_SYSCALL_BASE+177) | ||
206 | #define __NR_rt_sigqueueinfo (__NR_SYSCALL_BASE+178) | ||
207 | #define __NR_rt_sigsuspend (__NR_SYSCALL_BASE+179) | ||
208 | #define __NR_pread64 (__NR_SYSCALL_BASE+180) | ||
209 | #define __NR_pwrite64 (__NR_SYSCALL_BASE+181) | ||
210 | #define __NR_chown (__NR_SYSCALL_BASE+182) | ||
211 | #define __NR_getcwd (__NR_SYSCALL_BASE+183) | ||
212 | #define __NR_capget (__NR_SYSCALL_BASE+184) | ||
213 | #define __NR_capset (__NR_SYSCALL_BASE+185) | ||
214 | #define __NR_sigaltstack (__NR_SYSCALL_BASE+186) | ||
215 | #define __NR_sendfile (__NR_SYSCALL_BASE+187) | ||
216 | /* 188 reserved */ | ||
217 | /* 189 reserved */ | ||
218 | #define __NR_vfork (__NR_SYSCALL_BASE+190) | ||
219 | #define __NR_ugetrlimit (__NR_SYSCALL_BASE+191) /* SuS compliant getrlimit */ | ||
220 | #define __NR_mmap2 (__NR_SYSCALL_BASE+192) | ||
221 | #define __NR_truncate64 (__NR_SYSCALL_BASE+193) | ||
222 | #define __NR_ftruncate64 (__NR_SYSCALL_BASE+194) | ||
223 | #define __NR_stat64 (__NR_SYSCALL_BASE+195) | ||
224 | #define __NR_lstat64 (__NR_SYSCALL_BASE+196) | ||
225 | #define __NR_fstat64 (__NR_SYSCALL_BASE+197) | ||
226 | #define __NR_lchown32 (__NR_SYSCALL_BASE+198) | ||
227 | #define __NR_getuid32 (__NR_SYSCALL_BASE+199) | ||
228 | #define __NR_getgid32 (__NR_SYSCALL_BASE+200) | ||
229 | #define __NR_geteuid32 (__NR_SYSCALL_BASE+201) | ||
230 | #define __NR_getegid32 (__NR_SYSCALL_BASE+202) | ||
231 | #define __NR_setreuid32 (__NR_SYSCALL_BASE+203) | ||
232 | #define __NR_setregid32 (__NR_SYSCALL_BASE+204) | ||
233 | #define __NR_getgroups32 (__NR_SYSCALL_BASE+205) | ||
234 | #define __NR_setgroups32 (__NR_SYSCALL_BASE+206) | ||
235 | #define __NR_fchown32 (__NR_SYSCALL_BASE+207) | ||
236 | #define __NR_setresuid32 (__NR_SYSCALL_BASE+208) | ||
237 | #define __NR_getresuid32 (__NR_SYSCALL_BASE+209) | ||
238 | #define __NR_setresgid32 (__NR_SYSCALL_BASE+210) | ||
239 | #define __NR_getresgid32 (__NR_SYSCALL_BASE+211) | ||
240 | #define __NR_chown32 (__NR_SYSCALL_BASE+212) | ||
241 | #define __NR_setuid32 (__NR_SYSCALL_BASE+213) | ||
242 | #define __NR_setgid32 (__NR_SYSCALL_BASE+214) | ||
243 | #define __NR_setfsuid32 (__NR_SYSCALL_BASE+215) | ||
244 | #define __NR_setfsgid32 (__NR_SYSCALL_BASE+216) | ||
245 | #define __NR_getdents64 (__NR_SYSCALL_BASE+217) | ||
246 | #define __NR_pivot_root (__NR_SYSCALL_BASE+218) | ||
247 | #define __NR_mincore (__NR_SYSCALL_BASE+219) | ||
248 | #define __NR_madvise (__NR_SYSCALL_BASE+220) | ||
249 | #define __NR_fcntl64 (__NR_SYSCALL_BASE+221) | ||
250 | /* 222 for tux */ | ||
251 | /* 223 is unused */ | ||
252 | #define __NR_gettid (__NR_SYSCALL_BASE+224) | ||
253 | #define __NR_readahead (__NR_SYSCALL_BASE+225) | ||
254 | #define __NR_setxattr (__NR_SYSCALL_BASE+226) | ||
255 | #define __NR_lsetxattr (__NR_SYSCALL_BASE+227) | ||
256 | #define __NR_fsetxattr (__NR_SYSCALL_BASE+228) | ||
257 | #define __NR_getxattr (__NR_SYSCALL_BASE+229) | ||
258 | #define __NR_lgetxattr (__NR_SYSCALL_BASE+230) | ||
259 | #define __NR_fgetxattr (__NR_SYSCALL_BASE+231) | ||
260 | #define __NR_listxattr (__NR_SYSCALL_BASE+232) | ||
261 | #define __NR_llistxattr (__NR_SYSCALL_BASE+233) | ||
262 | #define __NR_flistxattr (__NR_SYSCALL_BASE+234) | ||
263 | #define __NR_removexattr (__NR_SYSCALL_BASE+235) | ||
264 | #define __NR_lremovexattr (__NR_SYSCALL_BASE+236) | ||
265 | #define __NR_fremovexattr (__NR_SYSCALL_BASE+237) | ||
266 | #define __NR_tkill (__NR_SYSCALL_BASE+238) | ||
267 | #define __NR_sendfile64 (__NR_SYSCALL_BASE+239) | ||
268 | #define __NR_futex (__NR_SYSCALL_BASE+240) | ||
269 | #define __NR_sched_setaffinity (__NR_SYSCALL_BASE+241) | ||
270 | #define __NR_sched_getaffinity (__NR_SYSCALL_BASE+242) | ||
271 | #define __NR_io_setup (__NR_SYSCALL_BASE+243) | ||
272 | #define __NR_io_destroy (__NR_SYSCALL_BASE+244) | ||
273 | #define __NR_io_getevents (__NR_SYSCALL_BASE+245) | ||
274 | #define __NR_io_submit (__NR_SYSCALL_BASE+246) | ||
275 | #define __NR_io_cancel (__NR_SYSCALL_BASE+247) | ||
276 | #define __NR_exit_group (__NR_SYSCALL_BASE+248) | ||
277 | #define __NR_lookup_dcookie (__NR_SYSCALL_BASE+249) | ||
278 | #define __NR_epoll_create (__NR_SYSCALL_BASE+250) | ||
279 | #define __NR_epoll_ctl (__NR_SYSCALL_BASE+251) | ||
280 | #define __NR_epoll_wait (__NR_SYSCALL_BASE+252) | ||
281 | #define __NR_remap_file_pages (__NR_SYSCALL_BASE+253) | ||
282 | /* 254 for set_thread_area */ | ||
283 | /* 255 for get_thread_area */ | ||
284 | #define __NR_set_tid_address (__NR_SYSCALL_BASE+256) | ||
285 | #define __NR_timer_create (__NR_SYSCALL_BASE+257) | ||
286 | #define __NR_timer_settime (__NR_SYSCALL_BASE+258) | ||
287 | #define __NR_timer_gettime (__NR_SYSCALL_BASE+259) | ||
288 | #define __NR_timer_getoverrun (__NR_SYSCALL_BASE+260) | ||
289 | #define __NR_timer_delete (__NR_SYSCALL_BASE+261) | ||
290 | #define __NR_clock_settime (__NR_SYSCALL_BASE+262) | ||
291 | #define __NR_clock_gettime (__NR_SYSCALL_BASE+263) | ||
292 | #define __NR_clock_getres (__NR_SYSCALL_BASE+264) | ||
293 | #define __NR_clock_nanosleep (__NR_SYSCALL_BASE+265) | ||
294 | #define __NR_statfs64 (__NR_SYSCALL_BASE+266) | ||
295 | #define __NR_fstatfs64 (__NR_SYSCALL_BASE+267) | ||
296 | #define __NR_tgkill (__NR_SYSCALL_BASE+268) | ||
297 | #define __NR_utimes (__NR_SYSCALL_BASE+269) | ||
298 | #define __NR_fadvise64_64 (__NR_SYSCALL_BASE+270) | ||
299 | #define __NR_pciconfig_iobase (__NR_SYSCALL_BASE+271) | ||
300 | #define __NR_pciconfig_read (__NR_SYSCALL_BASE+272) | ||
301 | #define __NR_pciconfig_write (__NR_SYSCALL_BASE+273) | ||
302 | #define __NR_mq_open (__NR_SYSCALL_BASE+274) | ||
303 | #define __NR_mq_unlink (__NR_SYSCALL_BASE+275) | ||
304 | #define __NR_mq_timedsend (__NR_SYSCALL_BASE+276) | ||
305 | #define __NR_mq_timedreceive (__NR_SYSCALL_BASE+277) | ||
306 | #define __NR_mq_notify (__NR_SYSCALL_BASE+278) | ||
307 | #define __NR_mq_getsetattr (__NR_SYSCALL_BASE+279) | ||
308 | #define __NR_waitid (__NR_SYSCALL_BASE+280) | ||
309 | |||
310 | #if 0 /* reserve these for un-muxing socketcall */ | ||
311 | #define __NR_socket (__NR_SYSCALL_BASE+281) | ||
312 | #define __NR_bind (__NR_SYSCALL_BASE+282) | ||
313 | #define __NR_connect (__NR_SYSCALL_BASE+283) | ||
314 | #define __NR_listen (__NR_SYSCALL_BASE+284) | ||
315 | #define __NR_accept (__NR_SYSCALL_BASE+285) | ||
316 | #define __NR_getsockname (__NR_SYSCALL_BASE+286) | ||
317 | #define __NR_getpeername (__NR_SYSCALL_BASE+287) | ||
318 | #define __NR_socketpair (__NR_SYSCALL_BASE+288) | ||
319 | #define __NR_send (__NR_SYSCALL_BASE+289) | ||
320 | #define __NR_sendto (__NR_SYSCALL_BASE+290) | ||
321 | #define __NR_recv (__NR_SYSCALL_BASE+291) | ||
322 | #define __NR_recvfrom (__NR_SYSCALL_BASE+292) | ||
323 | #define __NR_shutdown (__NR_SYSCALL_BASE+293) | ||
324 | #define __NR_setsockopt (__NR_SYSCALL_BASE+294) | ||
325 | #define __NR_getsockopt (__NR_SYSCALL_BASE+295) | ||
326 | #define __NR_sendmsg (__NR_SYSCALL_BASE+296) | ||
327 | #define __NR_recvmsg (__NR_SYSCALL_BASE+297) | ||
328 | #endif | ||
329 | |||
330 | #if 0 /* reserve these for un-muxing ipc */ | ||
331 | #define __NR_semop (__NR_SYSCALL_BASE+298) | ||
332 | #define __NR_semget (__NR_SYSCALL_BASE+299) | ||
333 | #define __NR_semctl (__NR_SYSCALL_BASE+300) | ||
334 | #define __NR_msgsnd (__NR_SYSCALL_BASE+301) | ||
335 | #define __NR_msgrcv (__NR_SYSCALL_BASE+302) | ||
336 | #define __NR_msgget (__NR_SYSCALL_BASE+303) | ||
337 | #define __NR_msgctl (__NR_SYSCALL_BASE+304) | ||
338 | #define __NR_shmat (__NR_SYSCALL_BASE+305) | ||
339 | #define __NR_shmdt (__NR_SYSCALL_BASE+306) | ||
340 | #define __NR_shmget (__NR_SYSCALL_BASE+307) | ||
341 | #define __NR_shmctl (__NR_SYSCALL_BASE+308) | ||
342 | #endif | ||
343 | |||
344 | #define __NR_add_key (__NR_SYSCALL_BASE+309) | ||
345 | #define __NR_request_key (__NR_SYSCALL_BASE+310) | ||
346 | #define __NR_keyctl (__NR_SYSCALL_BASE+311) | ||
347 | |||
348 | #if 0 /* reserved for un-muxing ipc */ | ||
349 | #define __NR_semtimedop (__NR_SYSCALL_BASE+312) | ||
350 | #endif | ||
351 | |||
352 | #define __NR_vserver (__NR_SYSCALL_BASE+313) | ||
353 | |||
354 | /* | ||
355 | * The following SWIs are ARM private. | ||
356 | */ | ||
357 | #define __ARM_NR_BASE (__NR_SYSCALL_BASE+0x0f0000) | ||
358 | #define __ARM_NR_breakpoint (__ARM_NR_BASE+1) | ||
359 | #define __ARM_NR_cacheflush (__ARM_NR_BASE+2) | ||
360 | #define __ARM_NR_usr26 (__ARM_NR_BASE+3) | ||
361 | #define __ARM_NR_usr32 (__ARM_NR_BASE+4) | ||
362 | |||
363 | #define __ARM_NR_set_tls (__ARM_NR_BASE+0x800) | ||
364 | |||
365 | #define __sys2(x) #x | ||
366 | #define __sys1(x) __sys2(x) | ||
367 | |||
368 | #ifndef __syscall | ||
369 | #if defined(__thumb__) | ||
370 | #define __syscall(name) \ | ||
371 | "push {r7}\n\t" \ | ||
372 | "mov r7, #" __sys1(__NR_##name) "\n\t" \ | ||
373 | "swi 0\n\t" \ | ||
374 | "pop {r7}" | ||
375 | #else | ||
376 | #define __syscall(name) "swi\t" __sys1(__NR_##name) "" | ||
377 | #endif | ||
378 | #endif | ||
379 | |||
380 | #define __syscall_return(type, res) \ | ||
381 | do { \ | ||
382 | if ((unsigned long)(res) >= (unsigned long)(-129)) { \ | ||
383 | errno = -(res); \ | ||
384 | res = -1; \ | ||
385 | } \ | ||
386 | return (type) (res); \ | ||
387 | } while (0) | ||
388 | |||
389 | #define _syscall0(type,name) \ | ||
390 | type name(void) { \ | ||
391 | register long __res_r0 __asm__("r0"); \ | ||
392 | long __res; \ | ||
393 | __asm__ __volatile__ ( \ | ||
394 | __syscall(name) \ | ||
395 | : "=r" (__res_r0) \ | ||
396 | : \ | ||
397 | : "lr"); \ | ||
398 | __res = __res_r0; \ | ||
399 | __syscall_return(type,__res); \ | ||
400 | } | ||
401 | |||
402 | #define _syscall1(type,name,type1,arg1) \ | ||
403 | type name(type1 arg1) { \ | ||
404 | register long __r0 __asm__("r0") = (long)arg1; \ | ||
405 | register long __res_r0 __asm__("r0"); \ | ||
406 | long __res; \ | ||
407 | __asm__ __volatile__ ( \ | ||
408 | __syscall(name) \ | ||
409 | : "=r" (__res_r0) \ | ||
410 | : "r" (__r0) \ | ||
411 | : "lr"); \ | ||
412 | __res = __res_r0; \ | ||
413 | __syscall_return(type,__res); \ | ||
414 | } | ||
415 | |||
416 | #define _syscall2(type,name,type1,arg1,type2,arg2) \ | ||
417 | type name(type1 arg1,type2 arg2) { \ | ||
418 | register long __r0 __asm__("r0") = (long)arg1; \ | ||
419 | register long __r1 __asm__("r1") = (long)arg2; \ | ||
420 | register long __res_r0 __asm__("r0"); \ | ||
421 | long __res; \ | ||
422 | __asm__ __volatile__ ( \ | ||
423 | __syscall(name) \ | ||
424 | : "=r" (__res_r0) \ | ||
425 | : "r" (__r0),"r" (__r1) \ | ||
426 | : "lr"); \ | ||
427 | __res = __res_r0; \ | ||
428 | __syscall_return(type,__res); \ | ||
429 | } | ||
430 | |||
431 | |||
432 | #define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \ | ||
433 | type name(type1 arg1,type2 arg2,type3 arg3) { \ | ||
434 | register long __r0 __asm__("r0") = (long)arg1; \ | ||
435 | register long __r1 __asm__("r1") = (long)arg2; \ | ||
436 | register long __r2 __asm__("r2") = (long)arg3; \ | ||
437 | register long __res_r0 __asm__("r0"); \ | ||
438 | long __res; \ | ||
439 | __asm__ __volatile__ ( \ | ||
440 | __syscall(name) \ | ||
441 | : "=r" (__res_r0) \ | ||
442 | : "r" (__r0),"r" (__r1),"r" (__r2) \ | ||
443 | : "lr"); \ | ||
444 | __res = __res_r0; \ | ||
445 | __syscall_return(type,__res); \ | ||
446 | } | ||
447 | |||
448 | |||
449 | #define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4)\ | ||
450 | type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4) { \ | ||
451 | register long __r0 __asm__("r0") = (long)arg1; \ | ||
452 | register long __r1 __asm__("r1") = (long)arg2; \ | ||
453 | register long __r2 __asm__("r2") = (long)arg3; \ | ||
454 | register long __r3 __asm__("r3") = (long)arg4; \ | ||
455 | register long __res_r0 __asm__("r0"); \ | ||
456 | long __res; \ | ||
457 | __asm__ __volatile__ ( \ | ||
458 | __syscall(name) \ | ||
459 | : "=r" (__res_r0) \ | ||
460 | : "r" (__r0),"r" (__r1),"r" (__r2),"r" (__r3) \ | ||
461 | : "lr"); \ | ||
462 | __res = __res_r0; \ | ||
463 | __syscall_return(type,__res); \ | ||
464 | } | ||
465 | |||
466 | |||
467 | #define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5) \ | ||
468 | type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5) { \ | ||
469 | register long __r0 __asm__("r0") = (long)arg1; \ | ||
470 | register long __r1 __asm__("r1") = (long)arg2; \ | ||
471 | register long __r2 __asm__("r2") = (long)arg3; \ | ||
472 | register long __r3 __asm__("r3") = (long)arg4; \ | ||
473 | register long __r4 __asm__("r4") = (long)arg5; \ | ||
474 | register long __res_r0 __asm__("r0"); \ | ||
475 | long __res; \ | ||
476 | __asm__ __volatile__ ( \ | ||
477 | __syscall(name) \ | ||
478 | : "=r" (__res_r0) \ | ||
479 | : "r" (__r0),"r" (__r1),"r" (__r2),"r" (__r3),"r" (__r4) \ | ||
480 | : "lr"); \ | ||
481 | __res = __res_r0; \ | ||
482 | __syscall_return(type,__res); \ | ||
483 | } | ||
484 | |||
485 | #define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5,type6,arg6) \ | ||
486 | type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5, type6 arg6) { \ | ||
487 | register long __r0 __asm__("r0") = (long)arg1; \ | ||
488 | register long __r1 __asm__("r1") = (long)arg2; \ | ||
489 | register long __r2 __asm__("r2") = (long)arg3; \ | ||
490 | register long __r3 __asm__("r3") = (long)arg4; \ | ||
491 | register long __r4 __asm__("r4") = (long)arg5; \ | ||
492 | register long __r5 __asm__("r5") = (long)arg6; \ | ||
493 | register long __res_r0 __asm__("r0"); \ | ||
494 | long __res; \ | ||
495 | __asm__ __volatile__ ( \ | ||
496 | __syscall(name) \ | ||
497 | : "=r" (__res_r0) \ | ||
498 | : "r" (__r0),"r" (__r1),"r" (__r2),"r" (__r3), "r" (__r4),"r" (__r5) \ | ||
499 | : "lr"); \ | ||
500 | __res = __res_r0; \ | ||
501 | __syscall_return(type,__res); \ | ||
502 | } | ||
503 | |||
504 | #ifdef __KERNEL__ | ||
505 | #define __ARCH_WANT_IPC_PARSE_VERSION | ||
506 | #define __ARCH_WANT_OLD_READDIR | ||
507 | #define __ARCH_WANT_STAT64 | ||
508 | #define __ARCH_WANT_SYS_ALARM | ||
509 | #define __ARCH_WANT_SYS_GETHOSTNAME | ||
510 | #define __ARCH_WANT_SYS_PAUSE | ||
511 | #define __ARCH_WANT_SYS_TIME | ||
512 | #define __ARCH_WANT_SYS_UTIME | ||
513 | #define __ARCH_WANT_SYS_SOCKETCALL | ||
514 | #define __ARCH_WANT_SYS_FADVISE64 | ||
515 | #define __ARCH_WANT_SYS_GETPGRP | ||
516 | #define __ARCH_WANT_SYS_LLSEEK | ||
517 | #define __ARCH_WANT_SYS_NICE | ||
518 | #define __ARCH_WANT_SYS_OLD_GETRLIMIT | ||
519 | #define __ARCH_WANT_SYS_OLDUMOUNT | ||
520 | #define __ARCH_WANT_SYS_SIGPENDING | ||
521 | #define __ARCH_WANT_SYS_SIGPROCMASK | ||
522 | #define __ARCH_WANT_SYS_RT_SIGACTION | ||
523 | #endif | ||
524 | |||
525 | #ifdef __KERNEL_SYSCALLS__ | ||
526 | |||
527 | #include <linux/compiler.h> | ||
528 | #include <linux/types.h> | ||
529 | #include <linux/syscalls.h> | ||
530 | |||
531 | extern long execve(const char *file, char **argv, char **envp); | ||
532 | |||
533 | struct pt_regs; | ||
534 | asmlinkage int sys_execve(char *filenamei, char **argv, char **envp, | ||
535 | struct pt_regs *regs); | ||
536 | asmlinkage int sys_clone(unsigned long clone_flags, unsigned long newsp, | ||
537 | struct pt_regs *regs); | ||
538 | asmlinkage int sys_fork(struct pt_regs *regs); | ||
539 | asmlinkage int sys_vfork(struct pt_regs *regs); | ||
540 | asmlinkage int sys_pipe(unsigned long *fildes); | ||
541 | asmlinkage int sys_ptrace(long request, long pid, long addr, long data); | ||
542 | struct sigaction; | ||
543 | asmlinkage long sys_rt_sigaction(int sig, | ||
544 | const struct sigaction __user *act, | ||
545 | struct sigaction __user *oact, | ||
546 | size_t sigsetsize); | ||
547 | |||
548 | #endif | ||
549 | |||
550 | /* | ||
551 | * "Conditional" syscalls | ||
552 | * | ||
553 | * What we want is __attribute__((weak,alias("sys_ni_syscall"))), | ||
554 | * but it doesn't work on all toolchains, so we just do it by hand | ||
555 | */ | ||
556 | #define cond_syscall(x) asm(".weak\t" #x "\n\t.set\t" #x ",sys_ni_syscall") | ||
557 | |||
558 | #endif /* __ASM_ARM_UNISTD_H */ | ||
diff --git a/include/asm-arm/user.h b/include/asm-arm/user.h new file mode 100644 index 000000000000..3e8b0f879159 --- /dev/null +++ b/include/asm-arm/user.h | |||
@@ -0,0 +1,84 @@ | |||
1 | #ifndef _ARM_USER_H | ||
2 | #define _ARM_USER_H | ||
3 | |||
4 | #include <asm/page.h> | ||
5 | #include <asm/ptrace.h> | ||
6 | /* Core file format: The core file is written in such a way that gdb | ||
7 | can understand it and provide useful information to the user (under | ||
8 | linux we use the 'trad-core' bfd). There are quite a number of | ||
9 | obstacles to being able to view the contents of the floating point | ||
10 | registers, and until these are solved you will not be able to view the | ||
11 | contents of them. Actually, you can read in the core file and look at | ||
12 | the contents of the user struct to find out what the floating point | ||
13 | registers contain. | ||
14 | The actual file contents are as follows: | ||
15 | UPAGE: 1 page consisting of a user struct that tells gdb what is present | ||
16 | in the file. Directly after this is a copy of the task_struct, which | ||
17 | is currently not used by gdb, but it may come in useful at some point. | ||
18 | All of the registers are stored as part of the upage. The upage should | ||
19 | always be only one page. | ||
20 | DATA: The data area is stored. We use current->end_text to | ||
21 | current->brk to pick up all of the user variables, plus any memory | ||
22 | that may have been malloced. No attempt is made to determine if a page | ||
23 | is demand-zero or if a page is totally unused, we just cover the entire | ||
24 | range. All of the addresses are rounded in such a way that an integral | ||
25 | number of pages is written. | ||
26 | STACK: We need the stack information in order to get a meaningful | ||
27 | backtrace. We need to write the data from (esp) to | ||
28 | current->start_stack, so we round each of these off in order to be able | ||
29 | to write an integer number of pages. | ||
30 | The minimum core file size is 3 pages, or 12288 bytes. | ||
31 | */ | ||
32 | |||
33 | struct user_fp { | ||
34 | struct fp_reg { | ||
35 | unsigned int sign1:1; | ||
36 | unsigned int unused:15; | ||
37 | unsigned int sign2:1; | ||
38 | unsigned int exponent:14; | ||
39 | unsigned int j:1; | ||
40 | unsigned int mantissa1:31; | ||
41 | unsigned int mantissa0:32; | ||
42 | } fpregs[8]; | ||
43 | unsigned int fpsr:32; | ||
44 | unsigned int fpcr:32; | ||
45 | unsigned char ftype[8]; | ||
46 | unsigned int init_flag; | ||
47 | }; | ||
48 | |||
49 | /* When the kernel dumps core, it starts by dumping the user struct - | ||
50 | this will be used by gdb to figure out where the data and stack segments | ||
51 | are within the file, and what virtual addresses to use. */ | ||
52 | struct user{ | ||
53 | /* We start with the registers, to mimic the way that "memory" is returned | ||
54 | from the ptrace(3,...) function. */ | ||
55 | struct pt_regs regs; /* Where the registers are actually stored */ | ||
56 | /* ptrace does not yet supply these. Someday.... */ | ||
57 | int u_fpvalid; /* True if math co-processor being used. */ | ||
58 | /* for this mess. Not yet used. */ | ||
59 | /* The rest of this junk is to help gdb figure out what goes where */ | ||
60 | unsigned long int u_tsize; /* Text segment size (pages). */ | ||
61 | unsigned long int u_dsize; /* Data segment size (pages). */ | ||
62 | unsigned long int u_ssize; /* Stack segment size (pages). */ | ||
63 | unsigned long start_code; /* Starting virtual address of text. */ | ||
64 | unsigned long start_stack; /* Starting virtual address of stack area. | ||
65 | This is actually the bottom of the stack, | ||
66 | the top of the stack is always found in the | ||
67 | esp register. */ | ||
68 | long int signal; /* Signal that caused the core dump. */ | ||
69 | int reserved; /* No longer used */ | ||
70 | struct pt_regs * u_ar0; /* Used by gdb to help find the values for */ | ||
71 | /* the registers. */ | ||
72 | unsigned long magic; /* To uniquely identify a core file */ | ||
73 | char u_comm[32]; /* User command that was responsible */ | ||
74 | int u_debugreg[8]; | ||
75 | struct user_fp u_fp; /* FP state */ | ||
76 | struct user_fp_struct * u_fp0;/* Used by gdb to help find the values for */ | ||
77 | /* the FP registers. */ | ||
78 | }; | ||
79 | #define NBPG PAGE_SIZE | ||
80 | #define UPAGES 1 | ||
81 | #define HOST_TEXT_START_ADDR (u.start_code) | ||
82 | #define HOST_STACK_END_ADDR (u.start_stack + u.u_ssize * NBPG) | ||
83 | |||
84 | #endif /* _ARM_USER_H */ | ||
diff --git a/include/asm-arm/vfp.h b/include/asm-arm/vfp.h new file mode 100644 index 000000000000..14c5e0946c47 --- /dev/null +++ b/include/asm-arm/vfp.h | |||
@@ -0,0 +1,78 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/vfp.h | ||
3 | * | ||
4 | * VFP register definitions. | ||
5 | * First, the standard VFP set. | ||
6 | */ | ||
7 | |||
8 | #define FPSID cr0 | ||
9 | #define FPSCR cr1 | ||
10 | #define FPEXC cr8 | ||
11 | |||
12 | /* FPSID bits */ | ||
13 | #define FPSID_IMPLEMENTER_BIT (24) | ||
14 | #define FPSID_IMPLEMENTER_MASK (0xff << FPSID_IMPLEMENTER_BIT) | ||
15 | #define FPSID_SOFTWARE (1<<23) | ||
16 | #define FPSID_FORMAT_BIT (21) | ||
17 | #define FPSID_FORMAT_MASK (0x3 << FPSID_FORMAT_BIT) | ||
18 | #define FPSID_NODOUBLE (1<<20) | ||
19 | #define FPSID_ARCH_BIT (16) | ||
20 | #define FPSID_ARCH_MASK (0xF << FPSID_ARCH_BIT) | ||
21 | #define FPSID_PART_BIT (8) | ||
22 | #define FPSID_PART_MASK (0xFF << FPSID_PART_BIT) | ||
23 | #define FPSID_VARIANT_BIT (4) | ||
24 | #define FPSID_VARIANT_MASK (0xF << FPSID_VARIANT_BIT) | ||
25 | #define FPSID_REV_BIT (0) | ||
26 | #define FPSID_REV_MASK (0xF << FPSID_REV_BIT) | ||
27 | |||
28 | /* FPEXC bits */ | ||
29 | #define FPEXC_EXCEPTION (1<<31) | ||
30 | #define FPEXC_ENABLE (1<<30) | ||
31 | |||
32 | /* FPSCR bits */ | ||
33 | #define FPSCR_DEFAULT_NAN (1<<25) | ||
34 | #define FPSCR_FLUSHTOZERO (1<<24) | ||
35 | #define FPSCR_ROUND_NEAREST (0<<22) | ||
36 | #define FPSCR_ROUND_PLUSINF (1<<22) | ||
37 | #define FPSCR_ROUND_MINUSINF (2<<22) | ||
38 | #define FPSCR_ROUND_TOZERO (3<<22) | ||
39 | #define FPSCR_RMODE_BIT (22) | ||
40 | #define FPSCR_RMODE_MASK (3 << FPSCR_RMODE_BIT) | ||
41 | #define FPSCR_STRIDE_BIT (20) | ||
42 | #define FPSCR_STRIDE_MASK (3 << FPSCR_STRIDE_BIT) | ||
43 | #define FPSCR_LENGTH_BIT (16) | ||
44 | #define FPSCR_LENGTH_MASK (7 << FPSCR_LENGTH_BIT) | ||
45 | #define FPSCR_IOE (1<<8) | ||
46 | #define FPSCR_DZE (1<<9) | ||
47 | #define FPSCR_OFE (1<<10) | ||
48 | #define FPSCR_UFE (1<<11) | ||
49 | #define FPSCR_IXE (1<<12) | ||
50 | #define FPSCR_IDE (1<<15) | ||
51 | #define FPSCR_IOC (1<<0) | ||
52 | #define FPSCR_DZC (1<<1) | ||
53 | #define FPSCR_OFC (1<<2) | ||
54 | #define FPSCR_UFC (1<<3) | ||
55 | #define FPSCR_IXC (1<<4) | ||
56 | #define FPSCR_IDC (1<<7) | ||
57 | |||
58 | /* | ||
59 | * VFP9-S specific. | ||
60 | */ | ||
61 | #define FPINST cr9 | ||
62 | #define FPINST2 cr10 | ||
63 | |||
64 | /* FPEXC bits */ | ||
65 | #define FPEXC_FPV2 (1<<28) | ||
66 | #define FPEXC_LENGTH_BIT (8) | ||
67 | #define FPEXC_LENGTH_MASK (7 << FPEXC_LENGTH_BIT) | ||
68 | #define FPEXC_INV (1 << 7) | ||
69 | #define FPEXC_UFC (1 << 3) | ||
70 | #define FPEXC_OFC (1 << 2) | ||
71 | #define FPEXC_IOC (1 << 0) | ||
72 | |||
73 | /* Bit patterns for decoding the packaged operation descriptors */ | ||
74 | #define VFPOPDESC_LENGTH_BIT (9) | ||
75 | #define VFPOPDESC_LENGTH_MASK (0x07 << VFPOPDESC_LENGTH_BIT) | ||
76 | #define VFPOPDESC_UNUSED_BIT (24) | ||
77 | #define VFPOPDESC_UNUSED_MASK (0xFF << VFPOPDESC_UNUSED_BIT) | ||
78 | #define VFPOPDESC_OPDESC_MASK (~(VFPOPDESC_LENGTH_MASK | VFPOPDESC_UNUSED_MASK)) | ||
diff --git a/include/asm-arm/vfpmacros.h b/include/asm-arm/vfpmacros.h new file mode 100644 index 000000000000..15bd6e74c9cf --- /dev/null +++ b/include/asm-arm/vfpmacros.h | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/vfpmacros.h | ||
3 | * | ||
4 | * Assembler-only file containing VFP macros and register definitions. | ||
5 | */ | ||
6 | #include "vfp.h" | ||
7 | |||
8 | @ Macros to allow building with old toolkits (with no VFP support) | ||
9 | .macro VFPFMRX, rd, sysreg, cond | ||
10 | MRC\cond p10, 7, \rd, \sysreg, cr0, 0 @ FMRX \rd, \sysreg | ||
11 | .endm | ||
12 | |||
13 | .macro VFPFMXR, sysreg, rd, cond | ||
14 | MCR\cond p10, 7, \rd, \sysreg, cr0, 0 @ FMXR \sysreg, \rd | ||
15 | .endm | ||
16 | |||
17 | @ read all the working registers back into the VFP | ||
18 | .macro VFPFLDMIA, base | ||
19 | LDC p11, cr0, [\base],#33*4 @ FLDMIAX \base!, {d0-d15} | ||
20 | .endm | ||
21 | |||
22 | @ write all the working registers out of the VFP | ||
23 | .macro VFPFSTMIA, base | ||
24 | STC p11, cr0, [\base],#33*4 @ FSTMIAX \base!, {d0-d15} | ||
25 | .endm | ||
diff --git a/include/asm-arm/vga.h b/include/asm-arm/vga.h new file mode 100644 index 000000000000..926e5ee128e9 --- /dev/null +++ b/include/asm-arm/vga.h | |||
@@ -0,0 +1,12 @@ | |||
1 | #ifndef ASMARM_VGA_H | ||
2 | #define ASMARM_VGA_H | ||
3 | |||
4 | #include <asm/hardware.h> | ||
5 | #include <asm/io.h> | ||
6 | |||
7 | #define VGA_MAP_MEM(x) (PCIMEM_BASE + (x)) | ||
8 | |||
9 | #define vga_readb(x) (*((volatile unsigned char *)x)) | ||
10 | #define vga_writeb(x,y) (*((volatile unsigned char *)y) = (x)) | ||
11 | |||
12 | #endif | ||
diff --git a/include/asm-arm/xor.h b/include/asm-arm/xor.h new file mode 100644 index 000000000000..e7c4cf58bed1 --- /dev/null +++ b/include/asm-arm/xor.h | |||
@@ -0,0 +1,141 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/xor.h | ||
3 | * | ||
4 | * Copyright (C) 2001 Russell King | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | */ | ||
10 | #include <asm-generic/xor.h> | ||
11 | |||
12 | #define __XOR(a1, a2) a1 ^= a2 | ||
13 | |||
14 | #define GET_BLOCK_2(dst) \ | ||
15 | __asm__("ldmia %0, {%1, %2}" \ | ||
16 | : "=r" (dst), "=r" (a1), "=r" (a2) \ | ||
17 | : "0" (dst)) | ||
18 | |||
19 | #define GET_BLOCK_4(dst) \ | ||
20 | __asm__("ldmia %0, {%1, %2, %3, %4}" \ | ||
21 | : "=r" (dst), "=r" (a1), "=r" (a2), "=r" (a3), "=r" (a4) \ | ||
22 | : "0" (dst)) | ||
23 | |||
24 | #define XOR_BLOCK_2(src) \ | ||
25 | __asm__("ldmia %0!, {%1, %2}" \ | ||
26 | : "=r" (src), "=r" (b1), "=r" (b2) \ | ||
27 | : "0" (src)); \ | ||
28 | __XOR(a1, b1); __XOR(a2, b2); | ||
29 | |||
30 | #define XOR_BLOCK_4(src) \ | ||
31 | __asm__("ldmia %0!, {%1, %2, %3, %4}" \ | ||
32 | : "=r" (src), "=r" (b1), "=r" (b2), "=r" (b3), "=r" (b4) \ | ||
33 | : "0" (src)); \ | ||
34 | __XOR(a1, b1); __XOR(a2, b2); __XOR(a3, b3); __XOR(a4, b4) | ||
35 | |||
36 | #define PUT_BLOCK_2(dst) \ | ||
37 | __asm__ __volatile__("stmia %0!, {%2, %3}" \ | ||
38 | : "=r" (dst) \ | ||
39 | : "0" (dst), "r" (a1), "r" (a2)) | ||
40 | |||
41 | #define PUT_BLOCK_4(dst) \ | ||
42 | __asm__ __volatile__("stmia %0!, {%2, %3, %4, %5}" \ | ||
43 | : "=r" (dst) \ | ||
44 | : "0" (dst), "r" (a1), "r" (a2), "r" (a3), "r" (a4)) | ||
45 | |||
46 | static void | ||
47 | xor_arm4regs_2(unsigned long bytes, unsigned long *p1, unsigned long *p2) | ||
48 | { | ||
49 | unsigned int lines = bytes / sizeof(unsigned long) / 4; | ||
50 | register unsigned int a1 __asm__("r4"); | ||
51 | register unsigned int a2 __asm__("r5"); | ||
52 | register unsigned int a3 __asm__("r6"); | ||
53 | register unsigned int a4 __asm__("r7"); | ||
54 | register unsigned int b1 __asm__("r8"); | ||
55 | register unsigned int b2 __asm__("r9"); | ||
56 | register unsigned int b3 __asm__("ip"); | ||
57 | register unsigned int b4 __asm__("lr"); | ||
58 | |||
59 | do { | ||
60 | GET_BLOCK_4(p1); | ||
61 | XOR_BLOCK_4(p2); | ||
62 | PUT_BLOCK_4(p1); | ||
63 | } while (--lines); | ||
64 | } | ||
65 | |||
66 | static void | ||
67 | xor_arm4regs_3(unsigned long bytes, unsigned long *p1, unsigned long *p2, | ||
68 | unsigned long *p3) | ||
69 | { | ||
70 | unsigned int lines = bytes / sizeof(unsigned long) / 4; | ||
71 | register unsigned int a1 __asm__("r4"); | ||
72 | register unsigned int a2 __asm__("r5"); | ||
73 | register unsigned int a3 __asm__("r6"); | ||
74 | register unsigned int a4 __asm__("r7"); | ||
75 | register unsigned int b1 __asm__("r8"); | ||
76 | register unsigned int b2 __asm__("r9"); | ||
77 | register unsigned int b3 __asm__("ip"); | ||
78 | register unsigned int b4 __asm__("lr"); | ||
79 | |||
80 | do { | ||
81 | GET_BLOCK_4(p1); | ||
82 | XOR_BLOCK_4(p2); | ||
83 | XOR_BLOCK_4(p3); | ||
84 | PUT_BLOCK_4(p1); | ||
85 | } while (--lines); | ||
86 | } | ||
87 | |||
88 | static void | ||
89 | xor_arm4regs_4(unsigned long bytes, unsigned long *p1, unsigned long *p2, | ||
90 | unsigned long *p3, unsigned long *p4) | ||
91 | { | ||
92 | unsigned int lines = bytes / sizeof(unsigned long) / 2; | ||
93 | register unsigned int a1 __asm__("r8"); | ||
94 | register unsigned int a2 __asm__("r9"); | ||
95 | register unsigned int b1 __asm__("ip"); | ||
96 | register unsigned int b2 __asm__("lr"); | ||
97 | |||
98 | do { | ||
99 | GET_BLOCK_2(p1); | ||
100 | XOR_BLOCK_2(p2); | ||
101 | XOR_BLOCK_2(p3); | ||
102 | XOR_BLOCK_2(p4); | ||
103 | PUT_BLOCK_2(p1); | ||
104 | } while (--lines); | ||
105 | } | ||
106 | |||
107 | static void | ||
108 | xor_arm4regs_5(unsigned long bytes, unsigned long *p1, unsigned long *p2, | ||
109 | unsigned long *p3, unsigned long *p4, unsigned long *p5) | ||
110 | { | ||
111 | unsigned int lines = bytes / sizeof(unsigned long) / 2; | ||
112 | register unsigned int a1 __asm__("r8"); | ||
113 | register unsigned int a2 __asm__("r9"); | ||
114 | register unsigned int b1 __asm__("ip"); | ||
115 | register unsigned int b2 __asm__("lr"); | ||
116 | |||
117 | do { | ||
118 | GET_BLOCK_2(p1); | ||
119 | XOR_BLOCK_2(p2); | ||
120 | XOR_BLOCK_2(p3); | ||
121 | XOR_BLOCK_2(p4); | ||
122 | XOR_BLOCK_2(p5); | ||
123 | PUT_BLOCK_2(p1); | ||
124 | } while (--lines); | ||
125 | } | ||
126 | |||
127 | static struct xor_block_template xor_block_arm4regs = { | ||
128 | .name = "arm4regs", | ||
129 | .do_2 = xor_arm4regs_2, | ||
130 | .do_3 = xor_arm4regs_3, | ||
131 | .do_4 = xor_arm4regs_4, | ||
132 | .do_5 = xor_arm4regs_5, | ||
133 | }; | ||
134 | |||
135 | #undef XOR_TRY_TEMPLATES | ||
136 | #define XOR_TRY_TEMPLATES \ | ||
137 | do { \ | ||
138 | xor_speed(&xor_block_arm4regs); \ | ||
139 | xor_speed(&xor_block_8regs); \ | ||
140 | xor_speed(&xor_block_32regs); \ | ||
141 | } while (0) | ||