]> git.karo-electronics.de Git - karo-tx-linux.git/blob - arch/arm/mach-shmobile/board-armadillo800eva-reference.c
ARM: shmobile: r8a7740: Add restart callback
[karo-tx-linux.git] / arch / arm / mach-shmobile / board-armadillo800eva-reference.c
1 /*
2  * armadillo 800 eva board support
3  *
4  * Copyright (C) 2012 Renesas Solutions Corp.
5  * Copyright (C) 2012 Kuninori Morimoto <kuninori.morimoto.gx@renesas.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; version 2 of the License.
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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
19  *
20  */
21
22 #include <linux/clk.h>
23 #include <linux/err.h>
24 #include <linux/kernel.h>
25 #include <linux/gpio.h>
26 #include <linux/io.h>
27 #include <linux/of_platform.h>
28
29 #include <asm/mach/arch.h>
30 #include <asm/hardware/cache-l2x0.h>
31
32 #include "common.h"
33 #include "r8a7740.h"
34
35 /*
36  * CON1         Camera Module
37  * CON2         Extension Bus
38  * CON3         HDMI Output
39  * CON4         Composite Video Output
40  * CON5         H-UDI JTAG
41  * CON6         ARM JTAG
42  * CON7         SD1
43  * CON8         SD2
44  * CON9         RTC BackUp
45  * CON10        Monaural Mic Input
46  * CON11        Stereo Headphone Output
47  * CON12        Audio Line Output(L)
48  * CON13        Audio Line Output(R)
49  * CON14        AWL13 Module
50  * CON15        Extension
51  * CON16        LCD1
52  * CON17        LCD2
53  * CON19        Power Input
54  * CON20        USB1
55  * CON21        USB2
56  * CON22        Serial
57  * CON23        LAN
58  * CON24        USB3
59  * LED1         Camera LED (Yellow)
60  * LED2         Power LED (Green)
61  * LED3-LED6    User LED (Yellow)
62  * LED7         LAN link LED (Green)
63  * LED8         LAN activity LED (Yellow)
64  */
65
66 /*
67  * DipSwitch
68  *
69  *                    SW1
70  *
71  * -12345678-+---------------+----------------------------
72  *  1        | boot          | hermit
73  *  0        | boot          | OS auto boot
74  * -12345678-+---------------+----------------------------
75  *   00      | boot device   | eMMC
76  *   10      | boot device   | SDHI0 (CON7)
77  *   01      | boot device   | -
78  *   11      | boot device   | Extension Buss (CS0)
79  * -12345678-+---------------+----------------------------
80  *     0     | Extension Bus | D8-D15 disable, eMMC enable
81  *     1     | Extension Bus | D8-D15 enable,  eMMC disable
82  * -12345678-+---------------+----------------------------
83  *      0    | SDHI1         | COM8 disable, COM14 enable
84  *      1    | SDHI1         | COM8 enable,  COM14 disable
85  * -12345678-+---------------+----------------------------
86  *       0   | USB0          | COM20 enable,  COM24 disable
87  *       1   | USB0          | COM20 disable, COM24 enable
88  * -12345678-+---------------+----------------------------
89  *        00 | JTAG          | SH-X2
90  *        10 | JTAG          | ARM
91  *        01 | JTAG          | -
92  *        11 | JTAG          | Boundary Scan
93  *-----------+---------------+----------------------------
94  */
95
96 /*
97  * FSI-WM8978
98  *
99  * this command is required when playback.
100  *
101  * # amixer set "Headphone" 50
102  *
103  * this command is required when capture.
104  *
105  * # amixer set "Input PGA" 15
106  * # amixer set "Left Input Mixer MicP" on
107  * # amixer set "Left Input Mixer MicN" on
108  * # amixer set "Right Input Mixer MicN" on
109  * # amixer set "Right Input Mixer MicP" on
110  */
111
112 /*
113  * USB function
114  *
115  * When you use USB Function,
116  * set SW1.6 ON, and connect cable to CN24.
117  *
118  * USBF needs workaround on R8A7740 chip.
119  * These are a little bit complex.
120  * see
121  *      usbhsf_power_ctrl()
122  */
123
124 static void __init eva_clock_init(void)
125 {
126         struct clk *system      = clk_get(NULL, "system_clk");
127         struct clk *xtal1       = clk_get(NULL, "extal1");
128         struct clk *usb24s      = clk_get(NULL, "usb24s");
129         struct clk *fsibck      = clk_get(NULL, "fsibck");
130
131         if (IS_ERR(system)      ||
132             IS_ERR(xtal1)       ||
133             IS_ERR(usb24s)      ||
134             IS_ERR(fsibck)) {
135                 pr_err("armadillo800eva board clock init failed\n");
136                 goto clock_error;
137         }
138
139         /* armadillo 800 eva extal1 is 24MHz */
140         clk_set_rate(xtal1, 24000000);
141
142         /* usb24s use extal1 (= system) clock (= 24MHz) */
143         clk_set_parent(usb24s, system);
144
145         /* FSIBCK is 12.288MHz, and it is parent of FSI-B */
146         clk_set_rate(fsibck, 12288000);
147
148 clock_error:
149         if (!IS_ERR(system))
150                 clk_put(system);
151         if (!IS_ERR(xtal1))
152                 clk_put(xtal1);
153         if (!IS_ERR(usb24s))
154                 clk_put(usb24s);
155         if (!IS_ERR(fsibck))
156                 clk_put(fsibck);
157 }
158
159 /*
160  * board init
161  */
162 static void __init eva_init(void)
163 {
164         r8a7740_clock_init(MD_CK0 | MD_CK2);
165         eva_clock_init();
166
167         r8a7740_meram_workaround();
168
169 #ifdef CONFIG_CACHE_L2X0
170         /* Shared attribute override enable, 32K*8way */
171         l2x0_init(IOMEM(0xf0002000), 0x00400000, 0xc20f0fff);
172 #endif
173
174         of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
175
176         r8a7740_pm_init();
177 }
178
179 #define RESCNT2 IOMEM(0xe6188020)
180 static void eva_restart(enum reboot_mode mode, const char *cmd)
181 {
182         /* Do soft power on reset */
183         writel(1 << 31, RESCNT2);
184 }
185
186 static const char *eva_boards_compat_dt[] __initdata = {
187         "renesas,armadillo800eva-reference",
188         NULL,
189 };
190
191 DT_MACHINE_START(ARMADILLO800EVA_DT, "armadillo800eva-reference")
192         .map_io         = r8a7740_map_io,
193         .init_early     = shmobile_init_delay,
194         .init_irq       = r8a7740_init_irq_of,
195         .init_machine   = eva_init,
196         .init_late      = shmobile_init_late,
197         .dt_compat      = eva_boards_compat_dt,
198         .restart        = eva_restart,
199 MACHINE_END