aboutsummaryrefslogtreecommitdiffstats
path: root/arch/sh/boards
diff options
context:
space:
mode:
authorPaul Mundt <lethal@linux-sh.org>2007-03-12 01:38:59 -0400
committerPaul Mundt <lethal@hera.kernel.org>2007-05-06 22:10:53 -0400
commit32351a28a7e1f2c68afbe559dd35e1ad0301be6d (patch)
tree289c28c605da6876125fa2105d880860b88b5017 /arch/sh/boards
parentbe782df54c51b50dd4dbc363a5a5afa04565fc60 (diff)
sh: Add SH7785 Highlander board support (R7785RP).
This adds preliminary support for the SH7785-based Highlander board. Some of the Highlander support code is reordered so that most of it can be reused directly. This also plugs in missing SH7785 checks in the places that need it, as this is the first board to support the CPU. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Diffstat (limited to 'arch/sh/boards')
-rw-r--r--arch/sh/boards/renesas/r7780rp/Kconfig18
-rw-r--r--arch/sh/boards/renesas/r7780rp/Makefile6
-rw-r--r--arch/sh/boards/renesas/r7780rp/irq-r7780rp.c21
-rw-r--r--arch/sh/boards/renesas/r7780rp/irq-r7785rp.c29
-rw-r--r--arch/sh/boards/renesas/r7780rp/irq.c25
-rw-r--r--arch/sh/boards/renesas/r7780rp/setup.c74
6 files changed, 105 insertions, 68 deletions
diff --git a/arch/sh/boards/renesas/r7780rp/Kconfig b/arch/sh/boards/renesas/r7780rp/Kconfig
index c26d9813d239..9fb11641fe13 100644
--- a/arch/sh/boards/renesas/r7780rp/Kconfig
+++ b/arch/sh/boards/renesas/r7780rp/Kconfig
@@ -1,14 +1,24 @@
1if SH_R7780RP 1if SH_HIGHLANDER
2 2
3menu "R7780RP options" 3choice
4 prompt "Highlander options"
5 default SH_R7780MP
6
7config SH_R7780RP
8 bool "R7780RP-1 board support"
9 select CPU_SUBTYPE_SH7780
4 10
5config SH_R7780MP 11config SH_R7780MP
6 bool "R7780MP board support" 12 bool "R7780MP board support"
7 default y 13 select CPU_SUBTYPE_SH7780
8 help 14 help
9 Selecting this option will enable support for the mass-production 15 Selecting this option will enable support for the mass-production
10 version of the R7780RP. If in doubt, say Y. 16 version of the R7780RP. If in doubt, say Y.
11 17
12endmenu 18config SH_R7785RP
19 bool "R7785RP board support"
20 select CPU_SUBTYPE_SH7785
21
22endchoice
13 23
14endif 24endif
diff --git a/arch/sh/boards/renesas/r7780rp/Makefile b/arch/sh/boards/renesas/r7780rp/Makefile
index ed5f5a9a3b3e..609e5d50dde8 100644
--- a/arch/sh/boards/renesas/r7780rp/Makefile
+++ b/arch/sh/boards/renesas/r7780rp/Makefile
@@ -1,7 +1,7 @@
1# 1#
2# Makefile for the R7780RP-1 specific parts of the kernel 2# Makefile for the R7780RP-1 specific parts of the kernel
3# 3#
4 4irqinit-y := irq-r7780rp.o
5obj-y := setup.o irq.o 5irqinit-$(CONFIG_SH_R7785RP) := irq-r7785rp.o
6
7obj-$(CONFIG_PUSH_SWITCH) += psw.o 6obj-$(CONFIG_PUSH_SWITCH) += psw.o
7obj-y := setup.o irq.o $(irqinit-y)
diff --git a/arch/sh/boards/renesas/r7780rp/irq-r7780rp.c b/arch/sh/boards/renesas/r7780rp/irq-r7780rp.c
new file mode 100644
index 000000000000..f5f358746c9e
--- /dev/null
+++ b/arch/sh/boards/renesas/r7780rp/irq-r7780rp.c
@@ -0,0 +1,21 @@
1/*
2 * Renesas Solutions Highlander R7780RP-1 Support.
3 *
4 * Copyright (C) 2002 Atom Create Engineering Co., Ltd.
5 * Copyright (C) 2006 Paul Mundt
6 *
7 * This file is subject to the terms and conditions of the GNU General Public
8 * License. See the file "COPYING" in the main directory of this archive
9 * for more details.
10 */
11#include <linux/init.h>
12#include <asm/io.h>
13#include <asm/r7780rp.h>
14
15void __init highlander_init_irq(void)
16{
17 int i;
18
19 for (i = 0; i < 15; i++)
20 make_r7780rp_irq(i);
21}
diff --git a/arch/sh/boards/renesas/r7780rp/irq-r7785rp.c b/arch/sh/boards/renesas/r7780rp/irq-r7785rp.c
new file mode 100644
index 000000000000..dd6ec4ce44dc
--- /dev/null
+++ b/arch/sh/boards/renesas/r7780rp/irq-r7785rp.c
@@ -0,0 +1,29 @@
1/*
2 * Renesas Solutions Highlander R7780RP-1 Support.
3 *
4 * Copyright (C) 2002 Atom Create Engineering Co., Ltd.
5 * Copyright (C) 2006 Paul Mundt
6 *
7 * This file is subject to the terms and conditions of the GNU General Public
8 * License. See the file "COPYING" in the main directory of this archive
9 * for more details.
10 */
11#include <linux/init.h>
12#include <asm/io.h>
13#include <asm/r7780rp.h>
14
15void __init highlander_init_irq(void)
16{
17 ctrl_outw(0x0000, PA_IRLSSR1); /* FPGA IRLSSR1(CF_CD clear) */
18
19 /* Setup the FPGA IRL */
20 ctrl_outw(0x0000, PA_IRLPRA); /* FPGA IRLA */
21 ctrl_outw(0xe598, PA_IRLPRB); /* FPGA IRLB */
22 ctrl_outw(0x7060, PA_IRLPRC); /* FPGA IRLC */
23 ctrl_outw(0x0000, PA_IRLPRD); /* FPGA IRLD */
24 ctrl_outw(0x4321, PA_IRLPRE); /* FPGA IRLE */
25 ctrl_outw(0x0000, PA_IRLPRF); /* FPGA IRLF */
26
27 make_r7780rp_irq(1); /* CF card */
28 make_r7780rp_irq(10); /* On-board ethernet */
29}
diff --git a/arch/sh/boards/renesas/r7780rp/irq.c b/arch/sh/boards/renesas/r7780rp/irq.c
index cc381e197783..e0b8eb52f376 100644
--- a/arch/sh/boards/renesas/r7780rp/irq.c
+++ b/arch/sh/boards/renesas/r7780rp/irq.c
@@ -14,10 +14,12 @@
14#include <linux/io.h> 14#include <linux/io.h>
15#include <asm/r7780rp.h> 15#include <asm/r7780rp.h>
16 16
17#ifdef CONFIG_SH_R7780MP 17#ifdef CONFIG_SH_R7780RP
18static int mask_pos[] = {12, 11, 9, 14, 15, 8, 13, 6, 5, 4, 3, 2, 0, 0, 1, 0};
19#else
20static int mask_pos[] = {15, 14, 13, 12, 11, 10, 9, 8, 7, 5, 6, 4, 0, 1, 2, 0}; 18static int mask_pos[] = {15, 14, 13, 12, 11, 10, 9, 8, 7, 5, 6, 4, 0, 1, 2, 0};
19#elif defined(CONFIG_SH_R7780MP)
20static int mask_pos[] = {12, 11, 9, 14, 15, 8, 13, 6, 5, 4, 3, 2, 0, 0, 1, 0};
21#elif defined(CONFIG_SH_R7785RP)
22static int mask_pos[] = {2, 11, 2, 2, 2, 2, 9, 8, 7, 5, 10, 2, 2, 2, 2, 2};
21#endif 23#endif
22 24
23static void enable_r7780rp_irq(unsigned int irq) 25static void enable_r7780rp_irq(unsigned int irq)
@@ -40,17 +42,10 @@ static struct irq_chip r7780rp_irq_chip __read_mostly = {
40 .mask_ack = disable_r7780rp_irq, 42 .mask_ack = disable_r7780rp_irq,
41}; 43};
42 44
43/* 45void make_r7780rp_irq(unsigned int irq)
44 * Initialize IRQ setting
45 */
46void __init init_r7780rp_IRQ(void)
47{ 46{
48 int i; 47 disable_irq_nosync(irq);
49 48 set_irq_chip_and_handler_name(irq, &r7780rp_irq_chip,
50 for (i = 0; i < 15; i++) { 49 handle_level_irq, "level");
51 disable_irq_nosync(i); 50 enable_r7780rp_irq(irq);
52 set_irq_chip_and_handler_name(i, &r7780rp_irq_chip,
53 handle_level_irq, "level");
54 enable_r7780rp_irq(i);
55 }
56} 51}
diff --git a/arch/sh/boards/renesas/r7780rp/setup.c b/arch/sh/boards/renesas/r7780rp/setup.c
index 2faba6679e64..6af0cc35ceb7 100644
--- a/arch/sh/boards/renesas/r7780rp/setup.c
+++ b/arch/sh/boards/renesas/r7780rp/setup.c
@@ -1,10 +1,13 @@
1/* 1/*
2 * arch/sh/boards/renesas/r7780rp/setup.c 2 * arch/sh/boards/renesas/r7780rp/setup.c
3 * 3 *
4 * Renesas Solutions Highlander Support.
5 *
4 * Copyright (C) 2002 Atom Create Engineering Co., Ltd. 6 * Copyright (C) 2002 Atom Create Engineering Co., Ltd.
5 * Copyright (C) 2005 - 2007 Paul Mundt 7 * Copyright (C) 2005 - 2007 Paul Mundt
6 * 8 *
7 * Renesas Solutions Highlander R7780RP-1 Support. 9 * This contains support for the R7780RP-1, R7780MP, and R7785RP
10 * Highlander modules.
8 * 11 *
9 * This file is subject to the terms and conditions of the GNU General Public 12 * 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 13 * License. See the file "COPYING" in the main directory of this archive
@@ -18,32 +21,6 @@
18#include <asm/clock.h> 21#include <asm/clock.h>
19#include <asm/io.h> 22#include <asm/io.h>
20 23
21extern void init_r7780rp_IRQ(void);
22
23static struct resource m66596_usb_host_resources[] = {
24 [0] = {
25 .start = 0xa4800000,
26 .end = 0xa4ffffff,
27 .flags = IORESOURCE_MEM,
28 },
29 [1] = {
30 .start = 6, /* irq number */
31 .end = 6,
32 .flags = IORESOURCE_IRQ,
33 },
34};
35
36static struct platform_device m66596_usb_host_device = {
37 .name = "m66596-hcd",
38 .id = 0,
39 .dev = {
40 .dma_mask = NULL, /* don't use dma */
41 .coherent_dma_mask = 0xffffffff,
42 },
43 .num_resources = ARRAY_SIZE(m66596_usb_host_resources),
44 .resource = m66596_usb_host_resources,
45};
46
47static struct resource cf_ide_resources[] = { 24static struct resource cf_ide_resources[] = {
48 [0] = { 25 [0] = {
49 .start = PA_AREA5_IO + 0x1000, 26 .start = PA_AREA5_IO + 0x1000,
@@ -56,10 +33,10 @@ static struct resource cf_ide_resources[] = {
56 .flags = IORESOURCE_MEM, 33 .flags = IORESOURCE_MEM,
57 }, 34 },
58 [2] = { 35 [2] = {
59#ifdef CONFIG_SH_R7780MP 36#ifdef CONFIG_SH_R7780RP
60 .start = 1,
61#else
62 .start = 4, 37 .start = 4,
38#else
39 .start = 1,
63#endif 40#endif
64 .flags = IORESOURCE_IRQ, 41 .flags = IORESOURCE_IRQ,
65 }, 42 },
@@ -92,15 +69,18 @@ static struct resource heartbeat_resources[] = {
92static struct platform_device heartbeat_device = { 69static struct platform_device heartbeat_device = {
93 .name = "heartbeat", 70 .name = "heartbeat",
94 .id = -1, 71 .id = -1,
72
73 /* R7785RP has a slightly more sensible FPGA.. */
74#ifndef CONFIG_SH_R7785RP
95 .dev = { 75 .dev = {
96 .platform_data = heartbeat_bit_pos, 76 .platform_data = heartbeat_bit_pos,
97 }, 77 },
78#endif
98 .num_resources = ARRAY_SIZE(heartbeat_resources), 79 .num_resources = ARRAY_SIZE(heartbeat_resources),
99 .resource = heartbeat_resources, 80 .resource = heartbeat_resources,
100}; 81};
101 82
102static struct platform_device *r7780rp_devices[] __initdata = { 83static struct platform_device *r7780rp_devices[] __initdata = {
103 &m66596_usb_host_device,
104 &cf_ide_device, 84 &cf_ide_device,
105 &heartbeat_device, 85 &heartbeat_device,
106}; 86};
@@ -110,6 +90,7 @@ static int __init r7780rp_devices_setup(void)
110 return platform_add_devices(r7780rp_devices, 90 return platform_add_devices(r7780rp_devices,
111 ARRAY_SIZE(r7780rp_devices)); 91 ARRAY_SIZE(r7780rp_devices));
112} 92}
93device_initcall(r7780rp_devices_setup);
113 94
114/* 95/*
115 * Platform specific clocks 96 * Platform specific clocks
@@ -140,22 +121,22 @@ static struct clk *r7780rp_clocks[] = {
140 121
141static void r7780rp_power_off(void) 122static void r7780rp_power_off(void)
142{ 123{
143#ifdef CONFIG_SH_R7780MP 124 if (mach_is_r7780mp() || mach_is_r7785rp())
144 ctrl_outw(0x0001, PA_POFF); 125 ctrl_outw(0x0001, PA_POFF);
145#endif
146} 126}
147 127
148/* 128/*
149 * Initialize the board 129 * Initialize the board
150 */ 130 */
151static void __init r7780rp_setup(char **cmdline_p) 131static void __init highlander_setup(char **cmdline_p)
152{ 132{
153 u16 ver = ctrl_inw(PA_VERREG); 133 u16 ver = ctrl_inw(PA_VERREG);
154 int i; 134 int i;
155 135
156 device_initcall(r7780rp_devices_setup); 136 printk(KERN_INFO "Renesas Solutions Highlander %s support.\n",
157 137 mach_is_r7780rp() ? "R7780RP-1" :
158 printk(KERN_INFO "Renesas Solutions Highlander R7780RP-1 support.\n"); 138 mach_is_r7780mp() ? "R7780MP" :
139 "R7785RP");
159 140
160 printk(KERN_INFO "Board version: %d (revision %d), " 141 printk(KERN_INFO "Board version: %d (revision %d), "
161 "FPGA version: %d (revision %d)\n", 142 "FPGA version: %d (revision %d)\n",
@@ -173,9 +154,10 @@ static void __init r7780rp_setup(char **cmdline_p)
173 } 154 }
174 155
175 ctrl_outw(0x0000, PA_OBLED); /* Clear LED. */ 156 ctrl_outw(0x0000, PA_OBLED); /* Clear LED. */
176#ifndef CONFIG_SH_R7780MP 157
177 ctrl_outw(0x0001, PA_SDPOW); /* SD Power ON */ 158 if (mach_is_r7780rp())
178#endif 159 ctrl_outw(0x0001, PA_SDPOW); /* SD Power ON */
160
179 ctrl_outw(ctrl_inw(PA_IVDRCTL) | 0x01, PA_IVDRCTL); /* Si13112 */ 161 ctrl_outw(ctrl_inw(PA_IVDRCTL) | 0x01, PA_IVDRCTL); /* Si13112 */
180 162
181 pm_power_off = r7780rp_power_off; 163 pm_power_off = r7780rp_power_off;
@@ -184,10 +166,10 @@ static void __init r7780rp_setup(char **cmdline_p)
184/* 166/*
185 * The Machine Vector 167 * The Machine Vector
186 */ 168 */
187struct sh_machine_vector mv_r7780rp __initmv = { 169struct sh_machine_vector mv_highlander __initmv = {
188 .mv_name = "Highlander R7780RP-1", 170 .mv_name = "Highlander",
189 .mv_setup = r7780rp_setup,
190 .mv_nr_irqs = 109, 171 .mv_nr_irqs = 109,
191 .mv_init_irq = init_r7780rp_IRQ, 172 .mv_setup = highlander_setup,
173 .mv_init_irq = highlander_init_irq,
192}; 174};
193ALIAS_MV(r7780rp) 175ALIAS_MV(highlander)