diff options
Diffstat (limited to 'arch/sh/boards/se/770x')
-rw-r--r-- | arch/sh/boards/se/770x/Makefile | 4 | ||||
-rw-r--r-- | arch/sh/boards/se/770x/io.c | 61 | ||||
-rw-r--r-- | arch/sh/boards/se/770x/irq.c | 2 | ||||
-rw-r--r-- | arch/sh/boards/se/770x/led.c | 17 | ||||
-rw-r--r-- | arch/sh/boards/se/770x/mach.c | 67 | ||||
-rw-r--r-- | arch/sh/boards/se/770x/setup.c | 65 |
6 files changed, 63 insertions, 153 deletions
diff --git a/arch/sh/boards/se/770x/Makefile b/arch/sh/boards/se/770x/Makefile index be89a73cc41..9a5035f80ec 100644 --- a/arch/sh/boards/se/770x/Makefile +++ b/arch/sh/boards/se/770x/Makefile | |||
@@ -2,5 +2,5 @@ | |||
2 | # Makefile for the 770x SolutionEngine specific parts of the kernel | 2 | # Makefile for the 770x SolutionEngine specific parts of the kernel |
3 | # | 3 | # |
4 | 4 | ||
5 | obj-y := mach.o setup.o io.o irq.o led.o | 5 | obj-y := setup.o io.o irq.o |
6 | 6 | obj-$(CONFIG_HEARTBEAT) += led.o | |
diff --git a/arch/sh/boards/se/770x/io.c b/arch/sh/boards/se/770x/io.c index 9a39ee96314..9941949331a 100644 --- a/arch/sh/boards/se/770x/io.c +++ b/arch/sh/boards/se/770x/io.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $Id: io.c,v 1.5 2004/02/22 23:08:43 kkojima Exp $ | 1 | /* $Id: io.c,v 1.7 2006/02/05 21:55:29 lethal Exp $ |
2 | * | 2 | * |
3 | * linux/arch/sh/kernel/io_se.c | 3 | * linux/arch/sh/kernel/io_se.c |
4 | * | 4 | * |
@@ -11,7 +11,7 @@ | |||
11 | #include <linux/kernel.h> | 11 | #include <linux/kernel.h> |
12 | #include <linux/types.h> | 12 | #include <linux/types.h> |
13 | #include <asm/io.h> | 13 | #include <asm/io.h> |
14 | #include <asm/se/se.h> | 14 | #include <asm/se.h> |
15 | 15 | ||
16 | /* SH pcmcia io window base, start and end. */ | 16 | /* SH pcmcia io window base, start and end. */ |
17 | int sh_pcic_io_wbase = 0xb8400000; | 17 | int sh_pcic_io_wbase = 0xb8400000; |
@@ -20,11 +20,6 @@ int sh_pcic_io_stop; | |||
20 | int sh_pcic_io_type; | 20 | int sh_pcic_io_type; |
21 | int sh_pcic_io_dummy; | 21 | int sh_pcic_io_dummy; |
22 | 22 | ||
23 | static inline void delay(void) | ||
24 | { | ||
25 | ctrl_inw(0xa0000000); | ||
26 | } | ||
27 | |||
28 | /* MS7750 requires special versions of in*, out* routines, since | 23 | /* MS7750 requires special versions of in*, out* routines, since |
29 | PC-like io ports are located at upper half byte of 16-bit word which | 24 | PC-like io ports are located at upper half byte of 16-bit word which |
30 | can be accessed only with 16-bit wide. */ | 25 | can be accessed only with 16-bit wide. */ |
@@ -52,10 +47,6 @@ shifted_port(unsigned long port) | |||
52 | return 1; | 47 | return 1; |
53 | } | 48 | } |
54 | 49 | ||
55 | #define maybebadio(name,port) \ | ||
56 | printk("bad PC-like io %s for port 0x%lx at 0x%08x\n", \ | ||
57 | #name, (port), (__u32) __builtin_return_address(0)) | ||
58 | |||
59 | unsigned char se_inb(unsigned long port) | 50 | unsigned char se_inb(unsigned long port) |
60 | { | 51 | { |
61 | if (sh_pcic_io_start <= port && port <= sh_pcic_io_stop) | 52 | if (sh_pcic_io_start <= port && port <= sh_pcic_io_stop) |
@@ -76,7 +67,7 @@ unsigned char se_inb_p(unsigned long port) | |||
76 | v = (*port2adr(port) >> 8); | 67 | v = (*port2adr(port) >> 8); |
77 | else | 68 | else |
78 | v = (*port2adr(port))&0xff; | 69 | v = (*port2adr(port))&0xff; |
79 | delay(); | 70 | ctrl_delay(); |
80 | return v; | 71 | return v; |
81 | } | 72 | } |
82 | 73 | ||
@@ -86,13 +77,13 @@ unsigned short se_inw(unsigned long port) | |||
86 | (sh_pcic_io_start <= port && port <= sh_pcic_io_stop)) | 77 | (sh_pcic_io_start <= port && port <= sh_pcic_io_stop)) |
87 | return *port2adr(port); | 78 | return *port2adr(port); |
88 | else | 79 | else |
89 | maybebadio(inw, port); | 80 | maybebadio(port); |
90 | return 0; | 81 | return 0; |
91 | } | 82 | } |
92 | 83 | ||
93 | unsigned int se_inl(unsigned long port) | 84 | unsigned int se_inl(unsigned long port) |
94 | { | 85 | { |
95 | maybebadio(inl, port); | 86 | maybebadio(port); |
96 | return 0; | 87 | return 0; |
97 | } | 88 | } |
98 | 89 | ||
@@ -114,7 +105,7 @@ void se_outb_p(unsigned char value, unsigned long port) | |||
114 | *(port2adr(port)) = value << 8; | 105 | *(port2adr(port)) = value << 8; |
115 | else | 106 | else |
116 | *(port2adr(port)) = value; | 107 | *(port2adr(port)) = value; |
117 | delay(); | 108 | ctrl_delay(); |
118 | } | 109 | } |
119 | 110 | ||
120 | void se_outw(unsigned short value, unsigned long port) | 111 | void se_outw(unsigned short value, unsigned long port) |
@@ -123,12 +114,12 @@ void se_outw(unsigned short value, unsigned long port) | |||
123 | (sh_pcic_io_start <= port && port <= sh_pcic_io_stop)) | 114 | (sh_pcic_io_start <= port && port <= sh_pcic_io_stop)) |
124 | *port2adr(port) = value; | 115 | *port2adr(port) = value; |
125 | else | 116 | else |
126 | maybebadio(outw, port); | 117 | maybebadio(port); |
127 | } | 118 | } |
128 | 119 | ||
129 | void se_outl(unsigned int value, unsigned long port) | 120 | void se_outl(unsigned int value, unsigned long port) |
130 | { | 121 | { |
131 | maybebadio(outl, port); | 122 | maybebadio(port); |
132 | } | 123 | } |
133 | 124 | ||
134 | void se_insb(unsigned long port, void *addr, unsigned long count) | 125 | void se_insb(unsigned long port, void *addr, unsigned long count) |
@@ -159,7 +150,7 @@ void se_insw(unsigned long port, void *addr, unsigned long count) | |||
159 | 150 | ||
160 | void se_insl(unsigned long port, void *addr, unsigned long count) | 151 | void se_insl(unsigned long port, void *addr, unsigned long count) |
161 | { | 152 | { |
162 | maybebadio(insl, port); | 153 | maybebadio(port); |
163 | } | 154 | } |
164 | 155 | ||
165 | void se_outsb(unsigned long port, const void *addr, unsigned long count) | 156 | void se_outsb(unsigned long port, const void *addr, unsigned long count) |
@@ -190,37 +181,5 @@ void se_outsw(unsigned long port, const void *addr, unsigned long count) | |||
190 | 181 | ||
191 | void se_outsl(unsigned long port, const void *addr, unsigned long count) | 182 | void se_outsl(unsigned long port, const void *addr, unsigned long count) |
192 | { | 183 | { |
193 | maybebadio(outsw, port); | 184 | maybebadio(port); |
194 | } | ||
195 | |||
196 | /* Map ISA bus address to the real address. Only for PCMCIA. */ | ||
197 | |||
198 | /* ISA page descriptor. */ | ||
199 | static __u32 sh_isa_memmap[256]; | ||
200 | |||
201 | static int | ||
202 | sh_isa_mmap(__u32 start, __u32 length, __u32 offset) | ||
203 | { | ||
204 | int idx; | ||
205 | |||
206 | if (start >= 0x100000 || (start & 0xfff) || (length != 0x1000)) | ||
207 | return -1; | ||
208 | |||
209 | idx = start >> 12; | ||
210 | sh_isa_memmap[idx] = 0xb8000000 + (offset &~ 0xfff); | ||
211 | #if 0 | ||
212 | printk("sh_isa_mmap: start %x len %x offset %x (idx %x paddr %x)\n", | ||
213 | start, length, offset, idx, sh_isa_memmap[idx]); | ||
214 | #endif | ||
215 | return 0; | ||
216 | } | ||
217 | |||
218 | unsigned long | ||
219 | se_isa_port2addr(unsigned long offset) | ||
220 | { | ||
221 | int idx; | ||
222 | |||
223 | idx = (offset >> 12) & 0xff; | ||
224 | offset &= 0xfff; | ||
225 | return sh_isa_memmap[idx] + offset; | ||
226 | } | 185 | } |
diff --git a/arch/sh/boards/se/770x/irq.c b/arch/sh/boards/se/770x/irq.c index 3e558716ce1..cff6700bbaf 100644 --- a/arch/sh/boards/se/770x/irq.c +++ b/arch/sh/boards/se/770x/irq.c | |||
@@ -11,7 +11,7 @@ | |||
11 | #include <linux/irq.h> | 11 | #include <linux/irq.h> |
12 | #include <asm/irq.h> | 12 | #include <asm/irq.h> |
13 | #include <asm/io.h> | 13 | #include <asm/io.h> |
14 | #include <asm/se/se.h> | 14 | #include <asm/se.h> |
15 | 15 | ||
16 | /* | 16 | /* |
17 | * Initialize IRQ setting | 17 | * Initialize IRQ setting |
diff --git a/arch/sh/boards/se/770x/led.c b/arch/sh/boards/se/770x/led.c index 3cddbda025f..daf7b1ee786 100644 --- a/arch/sh/boards/se/770x/led.c +++ b/arch/sh/boards/se/770x/led.c | |||
@@ -9,22 +9,8 @@ | |||
9 | * This file contains Solution Engine specific LED code. | 9 | * This file contains Solution Engine specific LED code. |
10 | */ | 10 | */ |
11 | 11 | ||
12 | #include <asm/se/se.h> | ||
13 | |||
14 | static void mach_led(int position, int value) | ||
15 | { | ||
16 | volatile unsigned short* p = (volatile unsigned short*)PA_LED; | ||
17 | |||
18 | if (value) { | ||
19 | *p |= (1<<8); | ||
20 | } else { | ||
21 | *p &= ~(1<<8); | ||
22 | } | ||
23 | } | ||
24 | |||
25 | #ifdef CONFIG_HEARTBEAT | ||
26 | |||
27 | #include <linux/sched.h> | 12 | #include <linux/sched.h> |
13 | #include <asm/se.h> | ||
28 | 14 | ||
29 | /* Cycle the LED's in the clasic Knightrider/Sun pattern */ | 15 | /* Cycle the LED's in the clasic Knightrider/Sun pattern */ |
30 | void heartbeat_se(void) | 16 | void heartbeat_se(void) |
@@ -64,4 +50,3 @@ void heartbeat_se(void) | |||
64 | *p = 1<<(bit+8); | 50 | *p = 1<<(bit+8); |
65 | 51 | ||
66 | } | 52 | } |
67 | #endif /* CONFIG_HEARTBEAT */ | ||
diff --git a/arch/sh/boards/se/770x/mach.c b/arch/sh/boards/se/770x/mach.c deleted file mode 100644 index 6ec07bd3dcf..00000000000 --- a/arch/sh/boards/se/770x/mach.c +++ /dev/null | |||
@@ -1,67 +0,0 @@ | |||
1 | /* | ||
2 | * linux/arch/sh/kernel/mach_se.c | ||
3 | * | ||
4 | * Copyright (C) 2000 Stuart Menefy (stuart.menefy@st.com) | ||
5 | * | ||
6 | * May be copied or modified under the terms of the GNU General Public | ||
7 | * License. See linux/COPYING for more information. | ||
8 | * | ||
9 | * Machine vector for the Hitachi SolutionEngine | ||
10 | */ | ||
11 | |||
12 | #include <linux/init.h> | ||
13 | |||
14 | #include <asm/machvec.h> | ||
15 | #include <asm/rtc.h> | ||
16 | #include <asm/machvec_init.h> | ||
17 | |||
18 | #include <asm/se/io.h> | ||
19 | |||
20 | void heartbeat_se(void); | ||
21 | void setup_se(void); | ||
22 | void init_se_IRQ(void); | ||
23 | |||
24 | /* | ||
25 | * The Machine Vector | ||
26 | */ | ||
27 | |||
28 | struct sh_machine_vector mv_se __initmv = { | ||
29 | #if defined(CONFIG_CPU_SH4) | ||
30 | .mv_nr_irqs = 48, | ||
31 | #elif defined(CONFIG_CPU_SUBTYPE_SH7708) | ||
32 | .mv_nr_irqs = 32, | ||
33 | #elif defined(CONFIG_CPU_SUBTYPE_SH7709) | ||
34 | .mv_nr_irqs = 61, | ||
35 | #elif defined(CONFIG_CPU_SUBTYPE_SH7705) | ||
36 | .mv_nr_irqs = 86, | ||
37 | #endif | ||
38 | |||
39 | .mv_inb = se_inb, | ||
40 | .mv_inw = se_inw, | ||
41 | .mv_inl = se_inl, | ||
42 | .mv_outb = se_outb, | ||
43 | .mv_outw = se_outw, | ||
44 | .mv_outl = se_outl, | ||
45 | |||
46 | .mv_inb_p = se_inb_p, | ||
47 | .mv_inw_p = se_inw, | ||
48 | .mv_inl_p = se_inl, | ||
49 | .mv_outb_p = se_outb_p, | ||
50 | .mv_outw_p = se_outw, | ||
51 | .mv_outl_p = se_outl, | ||
52 | |||
53 | .mv_insb = se_insb, | ||
54 | .mv_insw = se_insw, | ||
55 | .mv_insl = se_insl, | ||
56 | .mv_outsb = se_outsb, | ||
57 | .mv_outsw = se_outsw, | ||
58 | .mv_outsl = se_outsl, | ||
59 | |||
60 | .mv_isa_port2addr = se_isa_port2addr, | ||
61 | |||
62 | .mv_init_irq = init_se_IRQ, | ||
63 | #ifdef CONFIG_HEARTBEAT | ||
64 | .mv_heartbeat = heartbeat_se, | ||
65 | #endif | ||
66 | }; | ||
67 | ALIAS_MV(se) | ||
diff --git a/arch/sh/boards/se/770x/setup.c b/arch/sh/boards/se/770x/setup.c index 7d1a071727c..f3f82b7c821 100644 --- a/arch/sh/boards/se/770x/setup.c +++ b/arch/sh/boards/se/770x/setup.c | |||
@@ -7,15 +7,17 @@ | |||
7 | * Hitachi SolutionEngine Support. | 7 | * Hitachi SolutionEngine Support. |
8 | * | 8 | * |
9 | */ | 9 | */ |
10 | |||
11 | #include <linux/init.h> | 10 | #include <linux/init.h> |
12 | #include <linux/irq.h> | 11 | #include <linux/irq.h> |
13 | |||
14 | #include <linux/hdreg.h> | 12 | #include <linux/hdreg.h> |
15 | #include <linux/ide.h> | 13 | #include <linux/ide.h> |
16 | #include <asm/io.h> | 14 | #include <asm/io.h> |
17 | #include <asm/se/se.h> | 15 | #include <asm/se.h> |
18 | #include <asm/se/smc37c93x.h> | 16 | #include <asm/smc37c93x.h> |
17 | #include <asm/machvec.h> | ||
18 | |||
19 | void heartbeat_se(void); | ||
20 | void init_se_IRQ(void); | ||
19 | 21 | ||
20 | /* | 22 | /* |
21 | * Configure the Super I/O chip | 23 | * Configure the Super I/O chip |
@@ -26,7 +28,8 @@ static void __init smsc_config(int index, int data) | |||
26 | outb_p(data, DATA_PORT); | 28 | outb_p(data, DATA_PORT); |
27 | } | 29 | } |
28 | 30 | ||
29 | static void __init init_smsc(void) | 31 | /* XXX: Another candidate for a more generic cchip machine vector */ |
32 | static void __init smsc_setup(char **cmdline_p) | ||
30 | { | 33 | { |
31 | outb_p(CONFIG_ENTER, CONFIG_PORT); | 34 | outb_p(CONFIG_ENTER, CONFIG_PORT); |
32 | outb_p(CONFIG_ENTER, CONFIG_PORT); | 35 | outb_p(CONFIG_ENTER, CONFIG_PORT); |
@@ -69,16 +72,46 @@ static void __init init_smsc(void) | |||
69 | outb_p(CONFIG_EXIT, CONFIG_PORT); | 72 | outb_p(CONFIG_EXIT, CONFIG_PORT); |
70 | } | 73 | } |
71 | 74 | ||
72 | const char *get_system_type(void) | ||
73 | { | ||
74 | return "SolutionEngine"; | ||
75 | } | ||
76 | |||
77 | /* | 75 | /* |
78 | * Initialize the board | 76 | * The Machine Vector |
79 | */ | 77 | */ |
80 | void __init platform_setup(void) | 78 | struct sh_machine_vector mv_se __initmv = { |
81 | { | 79 | .mv_name = "SolutionEngine", |
82 | init_smsc(); | 80 | .mv_setup = smsc_setup, |
83 | /* XXX: RTC setting comes here */ | 81 | #if defined(CONFIG_CPU_SH4) |
84 | } | 82 | .mv_nr_irqs = 48, |
83 | #elif defined(CONFIG_CPU_SUBTYPE_SH7708) | ||
84 | .mv_nr_irqs = 32, | ||
85 | #elif defined(CONFIG_CPU_SUBTYPE_SH7709) | ||
86 | .mv_nr_irqs = 61, | ||
87 | #elif defined(CONFIG_CPU_SUBTYPE_SH7705) | ||
88 | .mv_nr_irqs = 86, | ||
89 | #endif | ||
90 | |||
91 | .mv_inb = se_inb, | ||
92 | .mv_inw = se_inw, | ||
93 | .mv_inl = se_inl, | ||
94 | .mv_outb = se_outb, | ||
95 | .mv_outw = se_outw, | ||
96 | .mv_outl = se_outl, | ||
97 | |||
98 | .mv_inb_p = se_inb_p, | ||
99 | .mv_inw_p = se_inw, | ||
100 | .mv_inl_p = se_inl, | ||
101 | .mv_outb_p = se_outb_p, | ||
102 | .mv_outw_p = se_outw, | ||
103 | .mv_outl_p = se_outl, | ||
104 | |||
105 | .mv_insb = se_insb, | ||
106 | .mv_insw = se_insw, | ||
107 | .mv_insl = se_insl, | ||
108 | .mv_outsb = se_outsb, | ||
109 | .mv_outsw = se_outsw, | ||
110 | .mv_outsl = se_outsl, | ||
111 | |||
112 | .mv_init_irq = init_se_IRQ, | ||
113 | #ifdef CONFIG_HEARTBEAT | ||
114 | .mv_heartbeat = heartbeat_se, | ||
115 | #endif | ||
116 | }; | ||
117 | ALIAS_MV(se) | ||