diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2013-09-09 19:33:57 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-09-09 19:33:57 -0400 |
| commit | fa91515cbf2375a64c8bd0a033a05b0859dff591 (patch) | |
| tree | 78d426e740152fa7abd6500b19ca0218190a2729 | |
| parent | a35c6322e52c550b61a04a44df27d22394ee0a2c (diff) | |
| parent | 25475030ec0e2c4c05f3ecb2c068f6e42944fd04 (diff) | |
Merge tag 'renesas-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc
Pull ARM Renesas SoC cleanup, refactoring and more SMP support from Kevin Hilman:
"Lots of cleanup and refactoring and some SMP additions for Renesas
platforms. Due to some inter-dependencies with other arm-soc
branches, this Renesas stuff was separated out for sending after the
other branches were merged.
Highlights:
- remove unused board support and cleanup of unused headers
- refactoring of init and device registration
- simplify IRQ initialization"
* tag 'renesas-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc: (68 commits)
ARM: shmobile: Per-CPU SMP boot / sleep code for SCU SoCs
ARM: shmobile: Introduce per-CPU SMP boot / sleep code
ARM: shmobile: Use shared SCU CPU Hotplug code on r8a7779
ARM: shmobile: Use shared SCU CPU Hotplug code on sh73a0
ARM: shmobile: Add shared SCU CPU Hotplug code
ARM: shmobile: Use shared SCU SMP boot code on emev2
ARM: shmobile: Use shared SCU SMP boot code on r8a7779
ARM: shmobile: Use shared SCU SMP boot code on sh73a0
ARM: shmobile: Introduce shared SCU SMP boot code
ARM: shmobile: sh73a0: Remove global GPIO_NR definition
ARM: shmobile: kzm9d: remove nfsroot settings from bootargs
ARM: shmobile: armadillo800eva: remove nfsroot settings from bootargs
ARM: shmobile: r8a7779: move r8a7779_init_irq_xxx() to setup
ARM: shmobile: r8a7740: move r8a7740_init_irq_of() to setup
ARM: shmobile: bockw: add missing __initdata
ARM: shmobile: r8a7790: add missing __initdata
ARM: shmobile: r8a7779: add missing __initdata
ARM: shmobile: Remove unused shmobile_init_time()
ARM: shmobile: Use clocksource_of_init() on r8a7790
ARM: shmobile: Use default ->init_time() on KZM9G DT ref
...
62 files changed, 856 insertions, 1900 deletions
diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile index 000cf7628e6e..4e02f1b6c8a2 100644 --- a/arch/arm/boot/dts/Makefile +++ b/arch/arm/boot/dts/Makefile | |||
| @@ -198,12 +198,16 @@ dtb-$(CONFIG_ARCH_SHMOBILE) += emev2-kzm9d.dtb \ | |||
| 198 | emev2-kzm9d-reference.dtb \ | 198 | emev2-kzm9d-reference.dtb \ |
| 199 | r8a7740-armadillo800eva.dtb \ | 199 | r8a7740-armadillo800eva.dtb \ |
| 200 | r8a7778-bockw.dtb \ | 200 | r8a7778-bockw.dtb \ |
| 201 | r8a7778-bockw-reference.dtb \ | ||
| 201 | r8a7740-armadillo800eva-reference.dtb \ | 202 | r8a7740-armadillo800eva-reference.dtb \ |
| 203 | r8a7779-marzen.dtb \ | ||
| 202 | r8a7779-marzen-reference.dtb \ | 204 | r8a7779-marzen-reference.dtb \ |
| 203 | r8a7790-lager.dtb \ | 205 | r8a7790-lager.dtb \ |
| 206 | r8a7790-lager-reference.dtb \ | ||
| 204 | sh73a0-kzm9g.dtb \ | 207 | sh73a0-kzm9g.dtb \ |
| 205 | sh73a0-kzm9g-reference.dtb \ | 208 | sh73a0-kzm9g-reference.dtb \ |
| 206 | r8a73a4-ape6evm.dtb \ | 209 | r8a73a4-ape6evm.dtb \ |
| 210 | r8a73a4-ape6evm-reference.dtb \ | ||
| 207 | sh7372-mackerel.dtb | 211 | sh7372-mackerel.dtb |
| 208 | dtb-$(CONFIG_ARCH_SHMOBILE_MULTI) += emev2-kzm9d-reference.dtb | 212 | dtb-$(CONFIG_ARCH_SHMOBILE_MULTI) += emev2-kzm9d-reference.dtb |
| 209 | dtb-$(CONFIG_ARCH_SOCFPGA) += socfpga_cyclone5.dtb \ | 213 | dtb-$(CONFIG_ARCH_SOCFPGA) += socfpga_cyclone5.dtb \ |
diff --git a/arch/arm/boot/dts/emev2-kzm9d-reference.dts b/arch/arm/boot/dts/emev2-kzm9d-reference.dts index bed676b95c27..cceefda268b6 100644 --- a/arch/arm/boot/dts/emev2-kzm9d-reference.dts +++ b/arch/arm/boot/dts/emev2-kzm9d-reference.dts | |||
| @@ -21,7 +21,7 @@ | |||
| 21 | }; | 21 | }; |
| 22 | 22 | ||
| 23 | chosen { | 23 | chosen { |
| 24 | bootargs = "console=ttyS1,115200n81 ignore_loglevel root=/dev/nfs ip=dhcp nfsroot=,rsize=4096,wsize=4096"; | 24 | bootargs = "console=ttyS1,115200n81 ignore_loglevel root=/dev/nfs ip=dhcp"; |
| 25 | }; | 25 | }; |
| 26 | 26 | ||
| 27 | reg_1p8v: regulator@0 { | 27 | reg_1p8v: regulator@0 { |
diff --git a/arch/arm/boot/dts/emev2-kzm9d.dts b/arch/arm/boot/dts/emev2-kzm9d.dts index dda13bc02f9f..f92e812fdd9f 100644 --- a/arch/arm/boot/dts/emev2-kzm9d.dts +++ b/arch/arm/boot/dts/emev2-kzm9d.dts | |||
| @@ -21,6 +21,6 @@ | |||
| 21 | }; | 21 | }; |
| 22 | 22 | ||
| 23 | chosen { | 23 | chosen { |
| 24 | bootargs = "console=ttyS1,115200n81 ignore_loglevel root=/dev/nfs ip=dhcp nfsroot=,rsize=4096,wsize=4096"; | 24 | bootargs = "console=ttyS1,115200n81 ignore_loglevel root=/dev/nfs ip=dhcp"; |
| 25 | }; | 25 | }; |
| 26 | }; | 26 | }; |
diff --git a/arch/arm/boot/dts/emev2.dtsi b/arch/arm/boot/dts/emev2.dtsi index 99ad2b2e8e14..9063a4434d6a 100644 --- a/arch/arm/boot/dts/emev2.dtsi +++ b/arch/arm/boot/dts/emev2.dtsi | |||
| @@ -46,6 +46,12 @@ | |||
| 46 | <0xe0020000 0x0100>; | 46 | <0xe0020000 0x0100>; |
| 47 | }; | 47 | }; |
| 48 | 48 | ||
| 49 | pmu { | ||
| 50 | compatible = "arm,cortex-a9-pmu"; | ||
| 51 | interrupts = <0 120 4>, | ||
| 52 | <0 121 4>; | ||
| 53 | }; | ||
| 54 | |||
| 49 | sti@e0180000 { | 55 | sti@e0180000 { |
| 50 | compatible = "renesas,em-sti"; | 56 | compatible = "renesas,em-sti"; |
| 51 | reg = <0xe0180000 0x54>; | 57 | reg = <0xe0180000 0x54>; |
diff --git a/arch/arm/boot/dts/r8a73a4-ape6evm-reference.dts b/arch/arm/boot/dts/r8a73a4-ape6evm-reference.dts new file mode 100644 index 000000000000..f444624eb097 --- /dev/null +++ b/arch/arm/boot/dts/r8a73a4-ape6evm-reference.dts | |||
| @@ -0,0 +1,65 @@ | |||
| 1 | /* | ||
| 2 | * Device Tree Source for the APE6EVM board | ||
| 3 | * | ||
| 4 | * Copyright (C) 2013 Renesas Solutions Corp. | ||
| 5 | * | ||
| 6 | * This file is licensed under the terms of the GNU General Public License | ||
| 7 | * version 2. This program is licensed "as is" without any warranty of any | ||
| 8 | * kind, whether express or implied. | ||
| 9 | */ | ||
| 10 | |||
| 11 | /dts-v1/; | ||
| 12 | /include/ "r8a73a4.dtsi" | ||
| 13 | |||
| 14 | / { | ||
| 15 | model = "APE6EVM"; | ||
| 16 | compatible = "renesas,ape6evm-reference", "renesas,r8a73a4"; | ||
| 17 | |||
| 18 | chosen { | ||
| 19 | bootargs = "console=ttySC0,115200 ignore_loglevel rw"; | ||
| 20 | }; | ||
| 21 | |||
| 22 | memory@40000000 { | ||
| 23 | device_type = "memory"; | ||
| 24 | reg = <0 0x40000000 0 0x40000000>; | ||
| 25 | }; | ||
| 26 | |||
| 27 | lbsc { | ||
| 28 | compatible = "simple-bus"; | ||
| 29 | #address-cells = <1>; | ||
| 30 | #size-cells = <1>; | ||
| 31 | ranges = <0 0 0 0x80000000>; | ||
| 32 | }; | ||
| 33 | }; | ||
| 34 | |||
| 35 | &i2c5 { | ||
| 36 | vdd_dvfs: max8973@1b { | ||
| 37 | compatible = "maxim,max8973"; | ||
| 38 | reg = <0x1b>; | ||
| 39 | |||
| 40 | regulator-min-microvolt = <935000>; | ||
| 41 | regulator-max-microvolt = <1200000>; | ||
| 42 | regulator-boot-on; | ||
| 43 | regulator-always-on; | ||
| 44 | }; | ||
| 45 | }; | ||
| 46 | |||
| 47 | &cpu0 { | ||
| 48 | cpu0-supply = <&vdd_dvfs>; | ||
| 49 | operating-points = < | ||
| 50 | /* kHz uV */ | ||
| 51 | 1950000 1115000 | ||
| 52 | 1462500 995000 | ||
| 53 | >; | ||
| 54 | voltage-tolerance = <1>; /* 1% */ | ||
| 55 | }; | ||
| 56 | |||
| 57 | &pfc { | ||
| 58 | pinctrl-0 = <&scifa0_pins>; | ||
| 59 | pinctrl-names = "default"; | ||
| 60 | |||
| 61 | scifa0_pins: scifa0 { | ||
| 62 | renesas,groups = "scifa0_data"; | ||
| 63 | renesas,function = "scifa0"; | ||
| 64 | }; | ||
| 65 | }; | ||
diff --git a/arch/arm/boot/dts/r8a73a4-ape6evm.dts b/arch/arm/boot/dts/r8a73a4-ape6evm.dts index e657a9db1666..72f867e65791 100644 --- a/arch/arm/boot/dts/r8a73a4-ape6evm.dts +++ b/arch/arm/boot/dts/r8a73a4-ape6evm.dts | |||
| @@ -16,7 +16,7 @@ | |||
| 16 | compatible = "renesas,ape6evm", "renesas,r8a73a4"; | 16 | compatible = "renesas,ape6evm", "renesas,r8a73a4"; |
| 17 | 17 | ||
| 18 | chosen { | 18 | chosen { |
| 19 | bootargs = "console=ttySC0,115200 ignore_loglevel root=/dev/nfs ip=dhcp"; | 19 | bootargs = "console=ttySC0,115200 ignore_loglevel root=/dev/nfs ip=dhcp rw"; |
| 20 | }; | 20 | }; |
| 21 | 21 | ||
| 22 | memory@40000000 { | 22 | memory@40000000 { |
diff --git a/arch/arm/boot/dts/r8a7740-armadillo800eva-reference.dts b/arch/arm/boot/dts/r8a7740-armadillo800eva-reference.dts index 366f72989dc3..c638e4ab91b8 100644 --- a/arch/arm/boot/dts/r8a7740-armadillo800eva-reference.dts +++ b/arch/arm/boot/dts/r8a7740-armadillo800eva-reference.dts | |||
| @@ -17,7 +17,7 @@ | |||
| 17 | compatible = "renesas,armadillo800eva-reference", "renesas,r8a7740"; | 17 | compatible = "renesas,armadillo800eva-reference", "renesas,r8a7740"; |
| 18 | 18 | ||
| 19 | chosen { | 19 | chosen { |
| 20 | bootargs = "console=tty0 console=ttySC1,115200 earlyprintk=sh-sci.1,115200 ignore_loglevel root=/dev/nfs ip=dhcp nfsroot=,rsize=4096,wsize=4096 rw"; | 20 | bootargs = "console=tty0 console=ttySC1,115200 earlyprintk=sh-sci.1,115200 ignore_loglevel root=/dev/nfs ip=dhcp rw"; |
| 21 | }; | 21 | }; |
| 22 | 22 | ||
| 23 | memory { | 23 | memory { |
diff --git a/arch/arm/boot/dts/r8a7740-armadillo800eva.dts b/arch/arm/boot/dts/r8a7740-armadillo800eva.dts index 93da655b2598..426cd9c3e1c4 100644 --- a/arch/arm/boot/dts/r8a7740-armadillo800eva.dts +++ b/arch/arm/boot/dts/r8a7740-armadillo800eva.dts | |||
| @@ -16,7 +16,7 @@ | |||
| 16 | compatible = "renesas,armadillo800eva"; | 16 | compatible = "renesas,armadillo800eva"; |
| 17 | 17 | ||
| 18 | chosen { | 18 | chosen { |
| 19 | bootargs = "console=tty0 console=ttySC1,115200 earlyprintk=sh-sci.1,115200 ignore_loglevel root=/dev/nfs ip=dhcp nfsroot=,rsize=4096,wsize=4096 rw"; | 19 | bootargs = "console=tty0 console=ttySC1,115200 earlyprintk=sh-sci.1,115200 ignore_loglevel root=/dev/nfs ip=dhcp rw"; |
| 20 | }; | 20 | }; |
| 21 | 21 | ||
| 22 | memory { | 22 | memory { |
diff --git a/arch/arm/boot/dts/r8a7740.dtsi b/arch/arm/boot/dts/r8a7740.dtsi index e18a195b55f3..44d3d520e01f 100644 --- a/arch/arm/boot/dts/r8a7740.dtsi +++ b/arch/arm/boot/dts/r8a7740.dtsi | |||
| @@ -32,6 +32,11 @@ | |||
| 32 | <0xc2000000 0x1000>; | 32 | <0xc2000000 0x1000>; |
| 33 | }; | 33 | }; |
| 34 | 34 | ||
| 35 | pmu { | ||
| 36 | compatible = "arm,cortex-a9-pmu"; | ||
| 37 | interrupts = <0 83 4>; | ||
| 38 | }; | ||
| 39 | |||
| 35 | /* irqpin0: IRQ0 - IRQ7 */ | 40 | /* irqpin0: IRQ0 - IRQ7 */ |
| 36 | irqpin0: irqpin@e6900000 { | 41 | irqpin0: irqpin@e6900000 { |
| 37 | compatible = "renesas,intc-irqpin"; | 42 | compatible = "renesas,intc-irqpin"; |
| @@ -147,4 +152,11 @@ | |||
| 147 | gpio-controller; | 152 | gpio-controller; |
| 148 | #gpio-cells = <2>; | 153 | #gpio-cells = <2>; |
| 149 | }; | 154 | }; |
| 155 | |||
| 156 | tpu: pwm@e6600000 { | ||
| 157 | compatible = "renesas,tpu-r8a7740", "renesas,tpu"; | ||
| 158 | reg = <0xe6600000 0x100>; | ||
| 159 | status = "disabled"; | ||
| 160 | #pwm-cells = <3>; | ||
| 161 | }; | ||
| 150 | }; | 162 | }; |
diff --git a/arch/arm/boot/dts/r8a7778-bockw-reference.dts b/arch/arm/boot/dts/r8a7778-bockw-reference.dts new file mode 100644 index 000000000000..9bb903a3230d --- /dev/null +++ b/arch/arm/boot/dts/r8a7778-bockw-reference.dts | |||
| @@ -0,0 +1,32 @@ | |||
| 1 | /* | ||
| 2 | * Reference Device Tree Source for the Bock-W board | ||
| 3 | * | ||
| 4 | * Copyright (C) 2013 Renesas Solutions Corp. | ||
| 5 | * Copyright (C) 2013 Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> | ||
| 6 | * | ||
| 7 | * based on r8a7779 | ||
| 8 | * | ||
| 9 | * Copyright (C) 2013 Renesas Solutions Corp. | ||
| 10 | * Copyright (C) 2013 Simon Horman | ||
| 11 | * | ||
| 12 | * This file is licensed under the terms of the GNU General Public License | ||
| 13 | * version 2. This program is licensed "as is" without any warranty of any | ||
| 14 | * kind, whether express or implied. | ||
| 15 | */ | ||
| 16 | |||
| 17 | /dts-v1/; | ||
| 18 | /include/ "r8a7778.dtsi" | ||
| 19 | |||
| 20 | / { | ||
| 21 | model = "bockw"; | ||
| 22 | compatible = "renesas,bockw-reference", "renesas,r8a7778"; | ||
| 23 | |||
| 24 | chosen { | ||
| 25 | bootargs = "console=ttySC0,115200 ignore_loglevel rw"; | ||
| 26 | }; | ||
| 27 | |||
| 28 | memory { | ||
| 29 | device_type = "memory"; | ||
| 30 | reg = <0x60000000 0x10000000>; | ||
| 31 | }; | ||
| 32 | }; | ||
diff --git a/arch/arm/boot/dts/r8a7778-bockw.dts b/arch/arm/boot/dts/r8a7778-bockw.dts index 0076b1e8a0fb..12bbebc9c955 100644 --- a/arch/arm/boot/dts/r8a7778-bockw.dts +++ b/arch/arm/boot/dts/r8a7778-bockw.dts | |||
| @@ -22,7 +22,7 @@ | |||
| 22 | compatible = "renesas,bockw", "renesas,r8a7778"; | 22 | compatible = "renesas,bockw", "renesas,r8a7778"; |
| 23 | 23 | ||
| 24 | chosen { | 24 | chosen { |
| 25 | bootargs = "console=ttySC0,115200 ignore_loglevel ip=dhcp root=/dev/nfs"; | 25 | bootargs = "console=ttySC0,115200 ignore_loglevel ip=dhcp root=/dev/nfs rw"; |
| 26 | }; | 26 | }; |
| 27 | 27 | ||
| 28 | memory { | 28 | memory { |
diff --git a/arch/arm/boot/dts/r8a7779-marzen-reference.dts b/arch/arm/boot/dts/r8a7779-marzen-reference.dts index b64705be258d..6d5508392252 100644 --- a/arch/arm/boot/dts/r8a7779-marzen-reference.dts +++ b/arch/arm/boot/dts/r8a7779-marzen-reference.dts | |||
| @@ -18,7 +18,7 @@ | |||
| 18 | compatible = "renesas,marzen-reference", "renesas,r8a7779"; | 18 | compatible = "renesas,marzen-reference", "renesas,r8a7779"; |
| 19 | 19 | ||
| 20 | chosen { | 20 | chosen { |
| 21 | bootargs = "console=ttySC2,115200 earlyprintk=sh-sci.2,115200 ignore_loglevel root=/dev/nfs ip=on"; | 21 | bootargs = "console=ttySC2,115200 earlyprintk=sh-sci.2,115200 ignore_loglevel root=/dev/nfs ip=on rw"; |
| 22 | }; | 22 | }; |
| 23 | 23 | ||
| 24 | memory { | 24 | memory { |
diff --git a/arch/arm/boot/dts/r8a7779-marzen.dts b/arch/arm/boot/dts/r8a7779-marzen.dts new file mode 100644 index 000000000000..f3f7f7999736 --- /dev/null +++ b/arch/arm/boot/dts/r8a7779-marzen.dts | |||
| @@ -0,0 +1,27 @@ | |||
| 1 | /* | ||
| 2 | * Device Tree Source for the Marzen board | ||
| 3 | * | ||
| 4 | * Copyright (C) 2013 Renesas Solutions Corp. | ||
| 5 | * Copyright (C) 2013 Simon Horman | ||
| 6 | * | ||
| 7 | * This file is licensed under the terms of the GNU General Public License | ||
| 8 | * version 2. This program is licensed "as is" without any warranty of any | ||
| 9 | * kind, whether express or implied. | ||
| 10 | */ | ||
| 11 | |||
| 12 | /dts-v1/; | ||
| 13 | /include/ "r8a7779.dtsi" | ||
| 14 | |||
| 15 | / { | ||
| 16 | model = "marzen"; | ||
| 17 | compatible = "renesas,marzen", "renesas,r8a7779"; | ||
| 18 | |||
| 19 | chosen { | ||
| 20 | bootargs = "console=ttySC2,115200 earlyprintk=sh-sci.2,115200 ignore_loglevel root=/dev/nfs ip=on"; | ||
| 21 | }; | ||
| 22 | |||
| 23 | memory { | ||
| 24 | device_type = "memory"; | ||
| 25 | reg = <0x60000000 0x40000000>; | ||
| 26 | }; | ||
| 27 | }; | ||
diff --git a/arch/arm/boot/dts/r8a7779.dtsi b/arch/arm/boot/dts/r8a7779.dtsi index e9fbe3d572d7..23a62447359c 100644 --- a/arch/arm/boot/dts/r8a7779.dtsi +++ b/arch/arm/boot/dts/r8a7779.dtsi | |||
| @@ -149,7 +149,7 @@ | |||
| 149 | sense-bitfield-width = <2>; | 149 | sense-bitfield-width = <2>; |
| 150 | }; | 150 | }; |
| 151 | 151 | ||
| 152 | i2c0: i2c@0xffc70000 { | 152 | i2c0: i2c@ffc70000 { |
| 153 | #address-cells = <1>; | 153 | #address-cells = <1>; |
| 154 | #size-cells = <0>; | 154 | #size-cells = <0>; |
| 155 | compatible = "renesas,rmobile-iic"; | 155 | compatible = "renesas,rmobile-iic"; |
| @@ -158,7 +158,7 @@ | |||
| 158 | interrupts = <0 79 0x4>; | 158 | interrupts = <0 79 0x4>; |
| 159 | }; | 159 | }; |
| 160 | 160 | ||
| 161 | i2c1: i2c@0xffc71000 { | 161 | i2c1: i2c@ffc71000 { |
| 162 | #address-cells = <1>; | 162 | #address-cells = <1>; |
| 163 | #size-cells = <0>; | 163 | #size-cells = <0>; |
| 164 | compatible = "renesas,rmobile-iic"; | 164 | compatible = "renesas,rmobile-iic"; |
| @@ -167,7 +167,7 @@ | |||
| 167 | interrupts = <0 82 0x4>; | 167 | interrupts = <0 82 0x4>; |
| 168 | }; | 168 | }; |
| 169 | 169 | ||
| 170 | i2c2: i2c@0xffc72000 { | 170 | i2c2: i2c@ffc72000 { |
| 171 | #address-cells = <1>; | 171 | #address-cells = <1>; |
| 172 | #size-cells = <0>; | 172 | #size-cells = <0>; |
| 173 | compatible = "renesas,rmobile-iic"; | 173 | compatible = "renesas,rmobile-iic"; |
| @@ -176,7 +176,7 @@ | |||
| 176 | interrupts = <0 80 0x4>; | 176 | interrupts = <0 80 0x4>; |
| 177 | }; | 177 | }; |
| 178 | 178 | ||
| 179 | i2c3: i2c@0xffc73000 { | 179 | i2c3: i2c@ffc73000 { |
| 180 | #address-cells = <1>; | 180 | #address-cells = <1>; |
| 181 | #size-cells = <0>; | 181 | #size-cells = <0>; |
| 182 | compatible = "renesas,rmobile-iic"; | 182 | compatible = "renesas,rmobile-iic"; |
diff --git a/arch/arm/boot/dts/r8a7790-lager-reference.dts b/arch/arm/boot/dts/r8a7790-lager-reference.dts new file mode 100644 index 000000000000..c462ef138922 --- /dev/null +++ b/arch/arm/boot/dts/r8a7790-lager-reference.dts | |||
| @@ -0,0 +1,45 @@ | |||
| 1 | /* | ||
| 2 | * Device Tree Source for the Lager board | ||
| 3 | * | ||
| 4 | * Copyright (C) 2013 Renesas Solutions Corp. | ||
| 5 | * | ||
| 6 | * This file is licensed under the terms of the GNU General Public License | ||
| 7 | * version 2. This program is licensed "as is" without any warranty of any | ||
| 8 | * kind, whether express or implied. | ||
| 9 | */ | ||
| 10 | |||
| 11 | /dts-v1/; | ||
| 12 | /include/ "r8a7790.dtsi" | ||
| 13 | #include <dt-bindings/gpio/gpio.h> | ||
| 14 | |||
| 15 | / { | ||
| 16 | model = "Lager"; | ||
| 17 | compatible = "renesas,lager-reference", "renesas,r8a7790"; | ||
| 18 | |||
| 19 | chosen { | ||
| 20 | bootargs = "console=ttySC6,115200 ignore_loglevel rw"; | ||
| 21 | }; | ||
| 22 | |||
| 23 | memory@40000000 { | ||
| 24 | device_type = "memory"; | ||
| 25 | reg = <0 0x40000000 0 0x80000000>; | ||
| 26 | }; | ||
| 27 | |||
| 28 | lbsc { | ||
| 29 | #address-cells = <1>; | ||
| 30 | #size-cells = <1>; | ||
| 31 | }; | ||
| 32 | |||
| 33 | leds { | ||
| 34 | compatible = "gpio-leds"; | ||
| 35 | led6 { | ||
| 36 | gpios = <&gpio4 22 GPIO_ACTIVE_HIGH>; | ||
| 37 | }; | ||
| 38 | led7 { | ||
| 39 | gpios = <&gpio4 23 GPIO_ACTIVE_HIGH>; | ||
| 40 | }; | ||
| 41 | led8 { | ||
| 42 | gpios = <&gpio5 17 GPIO_ACTIVE_HIGH>; | ||
| 43 | }; | ||
| 44 | }; | ||
| 45 | }; | ||
diff --git a/arch/arm/boot/dts/r8a7790-lager.dts b/arch/arm/boot/dts/r8a7790-lager.dts index 09a84fce89d6..203bd089af29 100644 --- a/arch/arm/boot/dts/r8a7790-lager.dts +++ b/arch/arm/boot/dts/r8a7790-lager.dts | |||
| @@ -16,7 +16,7 @@ | |||
| 16 | compatible = "renesas,lager", "renesas,r8a7790"; | 16 | compatible = "renesas,lager", "renesas,r8a7790"; |
| 17 | 17 | ||
| 18 | chosen { | 18 | chosen { |
| 19 | bootargs = "console=ttySC6,115200 ignore_loglevel"; | 19 | bootargs = "console=ttySC6,115200 ignore_loglevel rw root=/dev/nfs ip=dhcp"; |
| 20 | }; | 20 | }; |
| 21 | 21 | ||
| 22 | memory@40000000 { | 22 | memory@40000000 { |
diff --git a/arch/arm/boot/dts/sh73a0-kzm9g-reference.dts b/arch/arm/boot/dts/sh73a0-kzm9g-reference.dts index b99e890def54..212230629f27 100644 --- a/arch/arm/boot/dts/sh73a0-kzm9g-reference.dts +++ b/arch/arm/boot/dts/sh73a0-kzm9g-reference.dts | |||
| @@ -33,7 +33,7 @@ | |||
| 33 | }; | 33 | }; |
| 34 | 34 | ||
| 35 | chosen { | 35 | chosen { |
| 36 | bootargs = "console=tty0 console=ttySC4,115200 root=/dev/nfs ip=dhcp ignore_loglevel earlyprintk=sh-sci.4,115200"; | 36 | bootargs = "console=tty0 console=ttySC4,115200 root=/dev/nfs ip=dhcp ignore_loglevel earlyprintk=sh-sci.4,115200 rw"; |
| 37 | }; | 37 | }; |
| 38 | 38 | ||
| 39 | memory { | 39 | memory { |
diff --git a/arch/arm/boot/dts/sh73a0-kzm9g.dts b/arch/arm/boot/dts/sh73a0-kzm9g.dts index 7c4071e7790c..0f1ca7792c46 100644 --- a/arch/arm/boot/dts/sh73a0-kzm9g.dts +++ b/arch/arm/boot/dts/sh73a0-kzm9g.dts | |||
| @@ -16,7 +16,7 @@ | |||
| 16 | compatible = "renesas,kzm9g", "renesas,sh73a0"; | 16 | compatible = "renesas,kzm9g", "renesas,sh73a0"; |
| 17 | 17 | ||
| 18 | chosen { | 18 | chosen { |
| 19 | bootargs = "console=tty0 console=ttySC4,115200 root=/dev/nfs ip=dhcp ignore_loglevel earlyprintk=sh-sci.4,115200"; | 19 | bootargs = "console=tty0 console=ttySC4,115200 root=/dev/nfs ip=dhcp ignore_loglevel earlyprintk=sh-sci.4,115200 rw"; |
| 20 | }; | 20 | }; |
| 21 | 21 | ||
| 22 | memory { | 22 | memory { |
diff --git a/arch/arm/boot/dts/sh73a0.dtsi b/arch/arm/boot/dts/sh73a0.dtsi index 86e79feb7560..ba59a5875a10 100644 --- a/arch/arm/boot/dts/sh73a0.dtsi +++ b/arch/arm/boot/dts/sh73a0.dtsi | |||
| @@ -38,6 +38,12 @@ | |||
| 38 | <0xf0000100 0x100>; | 38 | <0xf0000100 0x100>; |
| 39 | }; | 39 | }; |
| 40 | 40 | ||
| 41 | pmu { | ||
| 42 | compatible = "arm,cortex-a9-pmu"; | ||
| 43 | interrupts = <0 55 4>, | ||
| 44 | <0 56 4>; | ||
| 45 | }; | ||
| 46 | |||
| 41 | irqpin0: irqpin@e6900000 { | 47 | irqpin0: irqpin@e6900000 { |
| 42 | compatible = "renesas,intc-irqpin"; | 48 | compatible = "renesas,intc-irqpin"; |
| 43 | #interrupt-cells = <2>; | 49 | #interrupt-cells = <2>; |
diff --git a/arch/arm/configs/ag5evm_defconfig b/arch/arm/configs/ag5evm_defconfig deleted file mode 100644 index 212ead354a6b..000000000000 --- a/arch/arm/configs/ag5evm_defconfig +++ /dev/null | |||
| @@ -1,83 +0,0 @@ | |||
| 1 | CONFIG_EXPERIMENTAL=y | ||
| 2 | CONFIG_SYSVIPC=y | ||
| 3 | CONFIG_IKCONFIG=y | ||
| 4 | CONFIG_IKCONFIG_PROC=y | ||
| 5 | CONFIG_LOG_BUF_SHIFT=16 | ||
| 6 | CONFIG_NAMESPACES=y | ||
| 7 | # CONFIG_UTS_NS is not set | ||
| 8 | # CONFIG_IPC_NS is not set | ||
| 9 | # CONFIG_USER_NS is not set | ||
| 10 | # CONFIG_PID_NS is not set | ||
| 11 | CONFIG_BLK_DEV_INITRD=y | ||
| 12 | CONFIG_INITRAMFS_SOURCE="" | ||
| 13 | CONFIG_EXPERT=y | ||
| 14 | CONFIG_SLAB=y | ||
| 15 | # CONFIG_BLK_DEV_BSG is not set | ||
| 16 | # CONFIG_IOSCHED_DEADLINE is not set | ||
| 17 | # CONFIG_IOSCHED_CFQ is not set | ||
| 18 | CONFIG_ARCH_SHMOBILE=y | ||
| 19 | CONFIG_ARCH_SH73A0=y | ||
| 20 | CONFIG_MACH_AG5EVM=y | ||
| 21 | CONFIG_MEMORY_SIZE=0x10000000 | ||
| 22 | CONFIG_CPU_BPREDICT_DISABLE=y | ||
| 23 | CONFIG_ARM_ERRATA_430973=y | ||
| 24 | CONFIG_ARM_ERRATA_458693=y | ||
| 25 | CONFIG_NO_HZ=y | ||
| 26 | CONFIG_AEABI=y | ||
| 27 | # CONFIG_OABI_COMPAT is not set | ||
| 28 | CONFIG_HIGHMEM=y | ||
| 29 | CONFIG_ZBOOT_ROM_TEXT=0x0 | ||
| 30 | CONFIG_ZBOOT_ROM_BSS=0x0 | ||
| 31 | CONFIG_CMDLINE="console=tty0 console=ttySC2,115200 earlyprintk=sh-sci.2,115200 ignore_loglevel" | ||
| 32 | CONFIG_CMDLINE_FORCE=y | ||
| 33 | CONFIG_KEXEC=y | ||
| 34 | # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set | ||
| 35 | CONFIG_PM=y | ||
| 36 | # CONFIG_SUSPEND is not set | ||
| 37 | CONFIG_PM_RUNTIME=y | ||
| 38 | CONFIG_NET=y | ||
| 39 | CONFIG_PACKET=y | ||
| 40 | CONFIG_UNIX=y | ||
| 41 | CONFIG_INET=y | ||
| 42 | # CONFIG_INET_XFRM_MODE_TRANSPORT is not set | ||
| 43 | # CONFIG_INET_XFRM_MODE_TUNNEL is not set | ||
| 44 | # CONFIG_INET_XFRM_MODE_BEET is not set | ||
| 45 | # CONFIG_INET_LRO is not set | ||
| 46 | # CONFIG_INET_DIAG is not set | ||
| 47 | # CONFIG_IPV6 is not set | ||
| 48 | # CONFIG_WIRELESS is not set | ||
| 49 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | ||
| 50 | # CONFIG_BLK_DEV is not set | ||
| 51 | CONFIG_NETDEVICES=y | ||
| 52 | CONFIG_NET_ETHERNET=y | ||
| 53 | CONFIG_SMSC911X=y | ||
| 54 | # CONFIG_NETDEV_1000 is not set | ||
| 55 | # CONFIG_NETDEV_10000 is not set | ||
| 56 | # CONFIG_WLAN is not set | ||
| 57 | CONFIG_INPUT_SPARSEKMAP=y | ||
| 58 | # CONFIG_INPUT_MOUSEDEV_PSAUX is not set | ||
| 59 | CONFIG_INPUT_EVDEV=y | ||
| 60 | # CONFIG_INPUT_KEYBOARD is not set | ||
| 61 | # CONFIG_INPUT_MOUSE is not set | ||
| 62 | CONFIG_SERIAL_SH_SCI=y | ||
| 63 | CONFIG_SERIAL_SH_SCI_NR_UARTS=9 | ||
| 64 | CONFIG_SERIAL_SH_SCI_CONSOLE=y | ||
| 65 | # CONFIG_LEGACY_PTYS is not set | ||
| 66 | # CONFIG_HW_RANDOM is not set | ||
| 67 | CONFIG_I2C=y | ||
| 68 | CONFIG_I2C_SH_MOBILE=y | ||
| 69 | # CONFIG_HWMON is not set | ||
| 70 | # CONFIG_MFD_SUPPORT is not set | ||
| 71 | CONFIG_FB=y | ||
| 72 | CONFIG_FB_SH_MOBILE_LCDC=y | ||
| 73 | CONFIG_FRAMEBUFFER_CONSOLE=y | ||
| 74 | CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y | ||
| 75 | # CONFIG_HID_SUPPORT is not set | ||
| 76 | # CONFIG_USB_SUPPORT is not set | ||
| 77 | # CONFIG_DNOTIFY is not set | ||
| 78 | # CONFIG_INOTIFY_USER is not set | ||
| 79 | CONFIG_TMPFS=y | ||
| 80 | # CONFIG_MISC_FILESYSTEMS is not set | ||
| 81 | CONFIG_MAGIC_SYSRQ=y | ||
| 82 | CONFIG_DEBUG_KERNEL=y | ||
| 83 | # CONFIG_FTRACE is not set | ||
diff --git a/arch/arm/configs/kota2_defconfig b/arch/arm/configs/kota2_defconfig deleted file mode 100644 index 57ad3d47de70..000000000000 --- a/arch/arm/configs/kota2_defconfig +++ /dev/null | |||
| @@ -1,121 +0,0 @@ | |||
| 1 | # CONFIG_ARM_PATCH_PHYS_VIRT is not set | ||
| 2 | CONFIG_EXPERIMENTAL=y | ||
| 3 | CONFIG_SYSVIPC=y | ||
| 4 | CONFIG_IKCONFIG=y | ||
| 5 | CONFIG_IKCONFIG_PROC=y | ||
| 6 | CONFIG_LOG_BUF_SHIFT=16 | ||
| 7 | CONFIG_CGROUPS=y | ||
| 8 | CONFIG_CPUSETS=y | ||
| 9 | CONFIG_NAMESPACES=y | ||
| 10 | # CONFIG_UTS_NS is not set | ||
| 11 | # CONFIG_IPC_NS is not set | ||
| 12 | # CONFIG_USER_NS is not set | ||
| 13 | # CONFIG_PID_NS is not set | ||
| 14 | CONFIG_SYSCTL_SYSCALL=y | ||
| 15 | CONFIG_EMBEDDED=y | ||
| 16 | CONFIG_SLAB=y | ||
| 17 | # CONFIG_BLK_DEV_BSG is not set | ||
| 18 | # CONFIG_IOSCHED_DEADLINE is not set | ||
| 19 | # CONFIG_IOSCHED_CFQ is not set | ||
| 20 | CONFIG_ARCH_SHMOBILE=y | ||
| 21 | CONFIG_KEYBOARD_GPIO_POLLED=y | ||
| 22 | CONFIG_ARCH_SH73A0=y | ||
| 23 | CONFIG_MACH_KOTA2=y | ||
| 24 | CONFIG_MEMORY_SIZE=0x1e000000 | ||
| 25 | # CONFIG_SH_TIMER_TMU is not set | ||
| 26 | # CONFIG_SWP_EMULATE is not set | ||
| 27 | CONFIG_CPU_BPREDICT_DISABLE=y | ||
| 28 | CONFIG_ARM_ERRATA_460075=y | ||
| 29 | CONFIG_ARM_ERRATA_742230=y | ||
| 30 | CONFIG_ARM_ERRATA_742231=y | ||
| 31 | CONFIG_PL310_ERRATA_588369=y | ||
| 32 | CONFIG_ARM_ERRATA_720789=y | ||
| 33 | CONFIG_PL310_ERRATA_727915=y | ||
| 34 | CONFIG_ARM_ERRATA_743622=y | ||
| 35 | CONFIG_ARM_ERRATA_751472=y | ||
| 36 | CONFIG_PL310_ERRATA_753970=y | ||
| 37 | CONFIG_ARM_ERRATA_754322=y | ||
| 38 | CONFIG_PL310_ERRATA_769419=y | ||
| 39 | CONFIG_NO_HZ=y | ||
| 40 | CONFIG_SMP=y | ||
| 41 | CONFIG_AEABI=y | ||
| 42 | # CONFIG_OABI_COMPAT is not set | ||
| 43 | CONFIG_HIGHMEM=y | ||
| 44 | CONFIG_ZBOOT_ROM_TEXT=0x0 | ||
| 45 | CONFIG_ZBOOT_ROM_BSS=0x0 | ||
| 46 | CONFIG_CMDLINE="console=ttySC2,115200 earlyprintk=sh-sci.2,115200 ignore_loglevel" | ||
| 47 | CONFIG_CMDLINE_FORCE=y | ||
| 48 | CONFIG_KEXEC=y | ||
| 49 | CONFIG_CPU_IDLE=y | ||
| 50 | # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set | ||
| 51 | CONFIG_PM_RUNTIME=y | ||
| 52 | CONFIG_NET=y | ||
| 53 | CONFIG_PACKET=y | ||
| 54 | CONFIG_UNIX=y | ||
| 55 | CONFIG_INET=y | ||
| 56 | CONFIG_IP_PNP=y | ||
| 57 | CONFIG_IP_PNP_DHCP=y | ||
| 58 | # CONFIG_INET_XFRM_MODE_TRANSPORT is not set | ||
| 59 | # CONFIG_INET_XFRM_MODE_TUNNEL is not set | ||
| 60 | # CONFIG_INET_XFRM_MODE_BEET is not set | ||
| 61 | # CONFIG_INET_LRO is not set | ||
| 62 | # CONFIG_INET_DIAG is not set | ||
| 63 | # CONFIG_IPV6 is not set | ||
| 64 | CONFIG_CFG80211=y | ||
| 65 | CONFIG_WIRELESS_EXT_SYSFS=y | ||
| 66 | CONFIG_MAC80211=y | ||
| 67 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | ||
| 68 | # CONFIG_BLK_DEV is not set | ||
| 69 | CONFIG_NETDEVICES=y | ||
| 70 | # CONFIG_NET_VENDOR_BROADCOM is not set | ||
| 71 | # CONFIG_NET_VENDOR_CHELSIO is not set | ||
| 72 | # CONFIG_NET_VENDOR_FARADAY is not set | ||
| 73 | # CONFIG_NET_VENDOR_INTEL is not set | ||
| 74 | # CONFIG_NET_VENDOR_MARVELL is not set | ||
| 75 | # CONFIG_NET_VENDOR_MICREL is not set | ||
| 76 | # CONFIG_NET_VENDOR_NATSEMI is not set | ||
| 77 | # CONFIG_NET_VENDOR_SEEQ is not set | ||
| 78 | CONFIG_SMSC911X=y | ||
| 79 | # CONFIG_NET_VENDOR_STMICRO is not set | ||
| 80 | CONFIG_B43=y | ||
| 81 | CONFIG_B43_PHY_N=y | ||
| 82 | CONFIG_B43_DEBUG=y | ||
| 83 | CONFIG_INPUT_SPARSEKMAP=y | ||
| 84 | # CONFIG_INPUT_MOUSEDEV_PSAUX is not set | ||
| 85 | CONFIG_INPUT_EVDEV=y | ||
| 86 | # CONFIG_KEYBOARD_ATKBD is not set | ||
| 87 | CONFIG_KEYBOARD_GPIO=y | ||
| 88 | CONFIG_KEYBOARD_SH_KEYSC=y | ||
| 89 | # CONFIG_INPUT_MOUSE is not set | ||
| 90 | # CONFIG_LEGACY_PTYS is not set | ||
| 91 | CONFIG_SERIAL_SH_SCI=y | ||
| 92 | CONFIG_SERIAL_SH_SCI_NR_UARTS=9 | ||
| 93 | CONFIG_SERIAL_SH_SCI_CONSOLE=y | ||
| 94 | # CONFIG_HW_RANDOM is not set | ||
| 95 | CONFIG_I2C_SH_MOBILE=y | ||
| 96 | # CONFIG_HWMON is not set | ||
| 97 | CONFIG_BCMA=y | ||
| 98 | CONFIG_BCMA_DEBUG=y | ||
| 99 | CONFIG_FB=y | ||
| 100 | CONFIG_FB_SH_MOBILE_LCDC=y | ||
| 101 | CONFIG_LCD_PLATFORM=y | ||
| 102 | CONFIG_FRAMEBUFFER_CONSOLE=y | ||
| 103 | CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y | ||
| 104 | # CONFIG_HID_SUPPORT is not set | ||
| 105 | # CONFIG_USB_SUPPORT is not set | ||
| 106 | CONFIG_MMC=y | ||
| 107 | CONFIG_MMC_SDHI=y | ||
| 108 | CONFIG_MMC_SH_MMCIF=y | ||
| 109 | CONFIG_NEW_LEDS=y | ||
| 110 | CONFIG_LEDS_CLASS=y | ||
| 111 | CONFIG_LEDS_GPIO=y | ||
| 112 | CONFIG_LEDS_RENESAS_TPU=y | ||
| 113 | CONFIG_LEDS_TRIGGERS=y | ||
| 114 | # CONFIG_DNOTIFY is not set | ||
| 115 | CONFIG_TMPFS=y | ||
| 116 | # CONFIG_MISC_FILESYSTEMS is not set | ||
| 117 | CONFIG_MAGIC_SYSRQ=y | ||
| 118 | CONFIG_DEBUG_INFO=y | ||
| 119 | CONFIG_DEBUG_INFO_REDUCED=y | ||
| 120 | # CONFIG_FTRACE is not set | ||
| 121 | CONFIG_DEBUG_USER=y | ||
diff --git a/arch/arm/mach-shmobile/Kconfig b/arch/arm/mach-shmobile/Kconfig index e817fde6729a..1f94c310c477 100644 --- a/arch/arm/mach-shmobile/Kconfig +++ b/arch/arm/mach-shmobile/Kconfig | |||
| @@ -109,18 +109,22 @@ config ARCH_EMEV2 | |||
| 109 | 109 | ||
| 110 | comment "SH-Mobile Board Type" | 110 | comment "SH-Mobile Board Type" |
| 111 | 111 | ||
| 112 | config MACH_AG5EVM | ||
| 113 | bool "AG5EVM board" | ||
| 114 | depends on ARCH_SH73A0 | ||
| 115 | select ARCH_REQUIRE_GPIOLIB | ||
| 116 | select REGULATOR_FIXED_VOLTAGE if REGULATOR | ||
| 117 | select SH_LCD_MIPI_DSI | ||
| 118 | |||
| 119 | config MACH_APE6EVM | 112 | config MACH_APE6EVM |
| 120 | bool "APE6EVM board" | 113 | bool "APE6EVM board" |
| 121 | depends on ARCH_R8A73A4 | 114 | depends on ARCH_R8A73A4 |
| 122 | select USE_OF | 115 | select USE_OF |
| 123 | 116 | ||
| 117 | config MACH_APE6EVM_REFERENCE | ||
| 118 | bool "APE6EVM board - Reference Device Tree Implementation" | ||
| 119 | depends on ARCH_R8A73A4 | ||
| 120 | select USE_OF | ||
| 121 | ---help--- | ||
| 122 | Use reference implementation of APE6EVM board support | ||
| 123 | which makes a greater use of device tree at the expense | ||
| 124 | of not supporting a number of devices. | ||
| 125 | |||
| 126 | This is intended to aid developers | ||
| 127 | |||
| 124 | config MACH_MACKEREL | 128 | config MACH_MACKEREL |
| 125 | bool "mackerel board" | 129 | bool "mackerel board" |
| 126 | depends on ARCH_SH7372 | 130 | depends on ARCH_SH7372 |
| @@ -129,12 +133,6 @@ config MACH_MACKEREL | |||
| 129 | select SND_SOC_AK4642 if SND_SIMPLE_CARD | 133 | select SND_SOC_AK4642 if SND_SIMPLE_CARD |
| 130 | select USE_OF | 134 | select USE_OF |
| 131 | 135 | ||
| 132 | config MACH_KOTA2 | ||
| 133 | bool "KOTA2 board" | ||
| 134 | depends on ARCH_SH73A0 | ||
| 135 | select ARCH_REQUIRE_GPIOLIB | ||
| 136 | select REGULATOR_FIXED_VOLTAGE if REGULATOR | ||
| 137 | |||
| 138 | config MACH_ARMADILLO800EVA | 136 | config MACH_ARMADILLO800EVA |
| 139 | bool "Armadillo-800 EVA board" | 137 | bool "Armadillo-800 EVA board" |
| 140 | depends on ARCH_R8A7740 | 138 | depends on ARCH_R8A7740 |
| @@ -165,11 +163,26 @@ config MACH_BOCKW | |||
| 165 | select REGULATOR_FIXED_VOLTAGE if REGULATOR | 163 | select REGULATOR_FIXED_VOLTAGE if REGULATOR |
| 166 | select USE_OF | 164 | select USE_OF |
| 167 | 165 | ||
| 166 | config MACH_BOCKW_REFERENCE | ||
| 167 | bool "BOCK-W - Reference Device Tree Implementation" | ||
| 168 | depends on ARCH_R8A7778 | ||
| 169 | select ARCH_REQUIRE_GPIOLIB | ||
| 170 | select RENESAS_INTC_IRQPIN | ||
| 171 | select REGULATOR_FIXED_VOLTAGE if REGULATOR | ||
| 172 | select USE_OF | ||
| 173 | ---help--- | ||
| 174 | Use reference implementation of BockW board support | ||
| 175 | which makes use of device tree at the expense | ||
| 176 | of not supporting a number of devices. | ||
| 177 | |||
| 178 | This is intended to aid developers | ||
| 179 | |||
| 168 | config MACH_MARZEN | 180 | config MACH_MARZEN |
| 169 | bool "MARZEN board" | 181 | bool "MARZEN board" |
| 170 | depends on ARCH_R8A7779 | 182 | depends on ARCH_R8A7779 |
| 171 | select ARCH_REQUIRE_GPIOLIB | 183 | select ARCH_REQUIRE_GPIOLIB |
| 172 | select REGULATOR_FIXED_VOLTAGE if REGULATOR | 184 | select REGULATOR_FIXED_VOLTAGE if REGULATOR |
| 185 | select USE_OF | ||
| 173 | 186 | ||
| 174 | config MACH_MARZEN_REFERENCE | 187 | config MACH_MARZEN_REFERENCE |
| 175 | bool "MARZEN board - Reference Device Tree Implementation" | 188 | bool "MARZEN board - Reference Device Tree Implementation" |
| @@ -189,6 +202,17 @@ config MACH_LAGER | |||
| 189 | depends on ARCH_R8A7790 | 202 | depends on ARCH_R8A7790 |
| 190 | select USE_OF | 203 | select USE_OF |
| 191 | 204 | ||
| 205 | config MACH_LAGER_REFERENCE | ||
| 206 | bool "Lager board - Reference Device Tree Implementation" | ||
| 207 | depends on ARCH_R8A7790 | ||
| 208 | select USE_OF | ||
| 209 | ---help--- | ||
| 210 | Use reference implementation of Lager board support | ||
| 211 | which makes use of device tree at the expense | ||
| 212 | of not supporting a number of devices. | ||
| 213 | |||
| 214 | This is intended to aid developers | ||
| 215 | |||
| 192 | config MACH_KZM9D | 216 | config MACH_KZM9D |
| 193 | bool "KZM9D board" | 217 | bool "KZM9D board" |
| 194 | depends on ARCH_EMEV2 | 218 | depends on ARCH_EMEV2 |
diff --git a/arch/arm/mach-shmobile/Makefile b/arch/arm/mach-shmobile/Makefile index b150c4508237..2705bfa8c113 100644 --- a/arch/arm/mach-shmobile/Makefile +++ b/arch/arm/mach-shmobile/Makefile | |||
| @@ -11,9 +11,9 @@ obj-y := timer.o console.o | |||
| 11 | obj-$(CONFIG_ARCH_SH7372) += setup-sh7372.o intc-sh7372.o | 11 | obj-$(CONFIG_ARCH_SH7372) += setup-sh7372.o intc-sh7372.o |
| 12 | obj-$(CONFIG_ARCH_SH73A0) += setup-sh73a0.o intc-sh73a0.o | 12 | obj-$(CONFIG_ARCH_SH73A0) += setup-sh73a0.o intc-sh73a0.o |
| 13 | obj-$(CONFIG_ARCH_R8A73A4) += setup-r8a73a4.o | 13 | obj-$(CONFIG_ARCH_R8A73A4) += setup-r8a73a4.o |
| 14 | obj-$(CONFIG_ARCH_R8A7740) += setup-r8a7740.o intc-r8a7740.o | 14 | obj-$(CONFIG_ARCH_R8A7740) += setup-r8a7740.o |
| 15 | obj-$(CONFIG_ARCH_R8A7778) += setup-r8a7778.o | 15 | obj-$(CONFIG_ARCH_R8A7778) += setup-r8a7778.o |
| 16 | obj-$(CONFIG_ARCH_R8A7779) += setup-r8a7779.o intc-r8a7779.o | 16 | obj-$(CONFIG_ARCH_R8A7779) += setup-r8a7779.o |
| 17 | obj-$(CONFIG_ARCH_R8A7790) += setup-r8a7790.o | 17 | obj-$(CONFIG_ARCH_R8A7790) += setup-r8a7790.o |
| 18 | obj-$(CONFIG_ARCH_EMEV2) += setup-emev2.o | 18 | obj-$(CONFIG_ARCH_EMEV2) += setup-emev2.o |
| 19 | 19 | ||
| @@ -32,32 +32,31 @@ endif | |||
| 32 | 32 | ||
| 33 | # SMP objects | 33 | # SMP objects |
| 34 | smp-y := platsmp.o headsmp.o | 34 | smp-y := platsmp.o headsmp.o |
| 35 | smp-$(CONFIG_ARCH_SH73A0) += smp-sh73a0.o headsmp-scu.o | 35 | smp-$(CONFIG_ARCH_SH73A0) += smp-sh73a0.o headsmp-scu.o platsmp-scu.o |
| 36 | smp-$(CONFIG_ARCH_R8A7779) += smp-r8a7779.o headsmp-scu.o | 36 | smp-$(CONFIG_ARCH_R8A7779) += smp-r8a7779.o headsmp-scu.o platsmp-scu.o |
| 37 | smp-$(CONFIG_ARCH_EMEV2) += smp-emev2.o headsmp-scu.o | 37 | smp-$(CONFIG_ARCH_EMEV2) += smp-emev2.o headsmp-scu.o platsmp-scu.o |
| 38 | 38 | ||
| 39 | # IRQ objects | 39 | # IRQ objects |
| 40 | obj-$(CONFIG_ARCH_SH7372) += entry-intc.o | 40 | obj-$(CONFIG_ARCH_SH7372) += entry-intc.o |
| 41 | obj-$(CONFIG_ARCH_R8A7740) += entry-intc.o | ||
| 42 | 41 | ||
| 43 | # PM objects | 42 | # PM objects |
| 44 | obj-$(CONFIG_SUSPEND) += suspend.o | 43 | obj-$(CONFIG_SUSPEND) += suspend.o |
| 45 | obj-$(CONFIG_CPU_IDLE) += cpuidle.o | 44 | obj-$(CONFIG_CPU_IDLE) += cpuidle.o |
| 46 | obj-$(CONFIG_ARCH_SHMOBILE) += pm-rmobile.o | 45 | obj-$(CONFIG_ARCH_SH7372) += pm-sh7372.o sleep-sh7372.o pm-rmobile.o |
| 47 | obj-$(CONFIG_ARCH_SH7372) += pm-sh7372.o sleep-sh7372.o | ||
| 48 | obj-$(CONFIG_ARCH_R8A7740) += pm-r8a7740.o | ||
| 49 | obj-$(CONFIG_ARCH_R8A7779) += pm-r8a7779.o | ||
| 50 | obj-$(CONFIG_ARCH_SH73A0) += pm-sh73a0.o | 46 | obj-$(CONFIG_ARCH_SH73A0) += pm-sh73a0.o |
| 47 | obj-$(CONFIG_ARCH_R8A7740) += pm-r8a7740.o pm-rmobile.o | ||
| 48 | obj-$(CONFIG_ARCH_R8A7779) += pm-r8a7779.o | ||
| 51 | 49 | ||
| 52 | # Board objects | 50 | # Board objects |
| 53 | obj-$(CONFIG_MACH_AG5EVM) += board-ag5evm.o | ||
| 54 | obj-$(CONFIG_MACH_APE6EVM) += board-ape6evm.o | 51 | obj-$(CONFIG_MACH_APE6EVM) += board-ape6evm.o |
| 52 | obj-$(CONFIG_MACH_APE6EVM_REFERENCE) += board-ape6evm-reference.o | ||
| 55 | obj-$(CONFIG_MACH_MACKEREL) += board-mackerel.o | 53 | obj-$(CONFIG_MACH_MACKEREL) += board-mackerel.o |
| 56 | obj-$(CONFIG_MACH_KOTA2) += board-kota2.o | ||
| 57 | obj-$(CONFIG_MACH_BOCKW) += board-bockw.o | 54 | obj-$(CONFIG_MACH_BOCKW) += board-bockw.o |
| 55 | obj-$(CONFIG_MACH_BOCKW_REFERENCE) += board-bockw-reference.o | ||
| 58 | obj-$(CONFIG_MACH_MARZEN) += board-marzen.o | 56 | obj-$(CONFIG_MACH_MARZEN) += board-marzen.o |
| 59 | obj-$(CONFIG_MACH_MARZEN_REFERENCE) += board-marzen-reference.o | 57 | obj-$(CONFIG_MACH_MARZEN_REFERENCE) += board-marzen-reference.o |
| 60 | obj-$(CONFIG_MACH_LAGER) += board-lager.o | 58 | obj-$(CONFIG_MACH_LAGER) += board-lager.o |
| 59 | obj-$(CONFIG_MACH_LAGER_REFERENCE) += board-lager-reference.o | ||
| 61 | obj-$(CONFIG_MACH_ARMADILLO800EVA) += board-armadillo800eva.o | 60 | obj-$(CONFIG_MACH_ARMADILLO800EVA) += board-armadillo800eva.o |
| 62 | obj-$(CONFIG_MACH_ARMADILLO800EVA_REFERENCE) += board-armadillo800eva-reference.o | 61 | obj-$(CONFIG_MACH_ARMADILLO800EVA_REFERENCE) += board-armadillo800eva-reference.o |
| 63 | obj-$(CONFIG_MACH_KZM9D) += board-kzm9d.o | 62 | obj-$(CONFIG_MACH_KZM9D) += board-kzm9d.o |
diff --git a/arch/arm/mach-shmobile/Makefile.boot b/arch/arm/mach-shmobile/Makefile.boot index 7785c52b5cfd..6a504fe7d86c 100644 --- a/arch/arm/mach-shmobile/Makefile.boot +++ b/arch/arm/mach-shmobile/Makefile.boot | |||
| @@ -1,16 +1,17 @@ | |||
| 1 | # per-board load address for uImage | 1 | # per-board load address for uImage |
| 2 | loadaddr-y := | 2 | loadaddr-y := |
| 3 | loadaddr-$(CONFIG_MACH_AG5EVM) += 0x40008000 | ||
| 4 | loadaddr-$(CONFIG_MACH_APE6EVM) += 0x40008000 | 3 | loadaddr-$(CONFIG_MACH_APE6EVM) += 0x40008000 |
| 4 | loadaddr-$(CONFIG_MACH_APE6EVM_REFERENCE) += 0x40008000 | ||
| 5 | loadaddr-$(CONFIG_MACH_ARMADILLO800EVA) += 0x40008000 | 5 | loadaddr-$(CONFIG_MACH_ARMADILLO800EVA) += 0x40008000 |
| 6 | loadaddr-$(CONFIG_MACH_ARMADILLO800EVA_REFERENCE) += 0x40008000 | 6 | loadaddr-$(CONFIG_MACH_ARMADILLO800EVA_REFERENCE) += 0x40008000 |
| 7 | loadaddr-$(CONFIG_MACH_BOCKW) += 0x60008000 | 7 | loadaddr-$(CONFIG_MACH_BOCKW) += 0x60008000 |
| 8 | loadaddr-$(CONFIG_MACH_KOTA2) += 0x41008000 | 8 | loadaddr-$(CONFIG_MACH_BOCKW_REFERENCE) += 0x60008000 |
| 9 | loadaddr-$(CONFIG_MACH_KZM9D) += 0x40008000 | 9 | loadaddr-$(CONFIG_MACH_KZM9D) += 0x40008000 |
| 10 | loadaddr-$(CONFIG_MACH_KZM9D_REFERENCE) += 0x40008000 | 10 | loadaddr-$(CONFIG_MACH_KZM9D_REFERENCE) += 0x40008000 |
| 11 | loadaddr-$(CONFIG_MACH_KZM9G) += 0x41008000 | 11 | loadaddr-$(CONFIG_MACH_KZM9G) += 0x41008000 |
| 12 | loadaddr-$(CONFIG_MACH_KZM9G_REFERENCE) += 0x41008000 | 12 | loadaddr-$(CONFIG_MACH_KZM9G_REFERENCE) += 0x41008000 |
| 13 | loadaddr-$(CONFIG_MACH_LAGER) += 0x40008000 | 13 | loadaddr-$(CONFIG_MACH_LAGER) += 0x40008000 |
| 14 | loadaddr-$(CONFIG_MACH_LAGER_REFERENCE) += 0x40008000 | ||
| 14 | loadaddr-$(CONFIG_MACH_MACKEREL) += 0x40008000 | 15 | loadaddr-$(CONFIG_MACH_MACKEREL) += 0x40008000 |
| 15 | loadaddr-$(CONFIG_MACH_MARZEN) += 0x60008000 | 16 | loadaddr-$(CONFIG_MACH_MARZEN) += 0x60008000 |
| 16 | loadaddr-$(CONFIG_MACH_MARZEN_REFERENCE) += 0x60008000 | 17 | loadaddr-$(CONFIG_MACH_MARZEN_REFERENCE) += 0x60008000 |
diff --git a/arch/arm/mach-shmobile/board-ag5evm.c b/arch/arm/mach-shmobile/board-ag5evm.c deleted file mode 100644 index f6d64495c405..000000000000 --- a/arch/arm/mach-shmobile/board-ag5evm.c +++ /dev/null | |||
| @@ -1,639 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/mach-shmobile/board-ag5evm.c | ||
| 3 | * | ||
| 4 | * Copyright (C) 2010 Takashi Yoshii <yoshii.takashi.zj@renesas.com> | ||
| 5 | * Copyright (C) 2009 Yoshihiro Shimoda <shimoda.yoshihiro@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/kernel.h> | ||
| 23 | #include <linux/init.h> | ||
| 24 | #include <linux/interrupt.h> | ||
| 25 | #include <linux/irq.h> | ||
| 26 | #include <linux/pinctrl/machine.h> | ||
| 27 | #include <linux/pinctrl/pinconf-generic.h> | ||
| 28 | #include <linux/platform_device.h> | ||
| 29 | #include <linux/delay.h> | ||
| 30 | #include <linux/io.h> | ||
| 31 | #include <linux/dma-mapping.h> | ||
| 32 | #include <linux/regulator/fixed.h> | ||
| 33 | #include <linux/regulator/machine.h> | ||
| 34 | #include <linux/serial_sci.h> | ||
| 35 | #include <linux/smsc911x.h> | ||
| 36 | #include <linux/gpio.h> | ||
| 37 | #include <linux/videodev2.h> | ||
| 38 | #include <linux/input.h> | ||
| 39 | #include <linux/input/sh_keysc.h> | ||
| 40 | #include <linux/mmc/host.h> | ||
| 41 | #include <linux/mmc/sh_mmcif.h> | ||
| 42 | #include <linux/mmc/sh_mobile_sdhi.h> | ||
| 43 | #include <linux/mfd/tmio.h> | ||
| 44 | #include <linux/platform_data/bd6107.h> | ||
| 45 | #include <linux/sh_clk.h> | ||
| 46 | #include <linux/irqchip/arm-gic.h> | ||
| 47 | #include <video/sh_mobile_lcdc.h> | ||
| 48 | #include <video/sh_mipi_dsi.h> | ||
| 49 | #include <sound/sh_fsi.h> | ||
| 50 | #include <mach/hardware.h> | ||
| 51 | #include <mach/irqs.h> | ||
| 52 | #include <mach/sh73a0.h> | ||
| 53 | #include <mach/common.h> | ||
| 54 | #include <asm/mach-types.h> | ||
| 55 | #include <asm/mach/arch.h> | ||
| 56 | #include <asm/hardware/cache-l2x0.h> | ||
| 57 | #include <asm/traps.h> | ||
| 58 | |||
| 59 | /* Dummy supplies, where voltage doesn't matter */ | ||
| 60 | static struct regulator_consumer_supply dummy_supplies[] = { | ||
| 61 | REGULATOR_SUPPLY("vddvario", "smsc911x"), | ||
| 62 | REGULATOR_SUPPLY("vdd33a", "smsc911x"), | ||
| 63 | }; | ||
| 64 | |||
| 65 | static struct resource smsc9220_resources[] = { | ||
| 66 | [0] = { | ||
| 67 | .start = 0x14000000, | ||
| 68 | .end = 0x14000000 + SZ_64K - 1, | ||
| 69 | .flags = IORESOURCE_MEM, | ||
| 70 | }, | ||
| 71 | [1] = { | ||
| 72 | .start = SH73A0_PINT0_IRQ(2), /* PINTA2 */ | ||
| 73 | .flags = IORESOURCE_IRQ, | ||
| 74 | }, | ||
| 75 | }; | ||
| 76 | |||
| 77 | static struct smsc911x_platform_config smsc9220_platdata = { | ||
| 78 | .flags = SMSC911X_USE_32BIT | SMSC911X_SAVE_MAC_ADDRESS, | ||
| 79 | .phy_interface = PHY_INTERFACE_MODE_MII, | ||
| 80 | .irq_polarity = SMSC911X_IRQ_POLARITY_ACTIVE_LOW, | ||
| 81 | .irq_type = SMSC911X_IRQ_TYPE_PUSH_PULL, | ||
| 82 | }; | ||
| 83 | |||
| 84 | static struct platform_device eth_device = { | ||
| 85 | .name = "smsc911x", | ||
| 86 | .id = 0, | ||
| 87 | .dev = { | ||
| 88 | .platform_data = &smsc9220_platdata, | ||
| 89 | }, | ||
| 90 | .resource = smsc9220_resources, | ||
| 91 | .num_resources = ARRAY_SIZE(smsc9220_resources), | ||
| 92 | }; | ||
| 93 | |||
| 94 | static struct sh_keysc_info keysc_platdata = { | ||
| 95 | .mode = SH_KEYSC_MODE_6, | ||
| 96 | .scan_timing = 3, | ||
| 97 | .delay = 100, | ||
| 98 | .keycodes = { | ||
| 99 | KEY_A, KEY_B, KEY_C, KEY_D, KEY_E, KEY_F, KEY_G, | ||
| 100 | KEY_H, KEY_I, KEY_J, KEY_K, KEY_L, KEY_M, KEY_N, | ||
| 101 | KEY_O, KEY_P, KEY_Q, KEY_R, KEY_S, KEY_T, KEY_U, | ||
| 102 | KEY_V, KEY_W, KEY_X, KEY_Y, KEY_Z, KEY_HOME, KEY_SLEEP, | ||
| 103 | KEY_SPACE, KEY_9, KEY_6, KEY_3, KEY_WAKEUP, KEY_RIGHT, \ | ||
| 104 | KEY_COFFEE, | ||
| 105 | KEY_0, KEY_8, KEY_5, KEY_2, KEY_DOWN, KEY_ENTER, KEY_UP, | ||
| 106 | KEY_KPASTERISK, KEY_7, KEY_4, KEY_1, KEY_STOP, KEY_LEFT, \ | ||
| 107 | KEY_COMPUTER, | ||
| 108 | }, | ||
| 109 | }; | ||
| 110 | |||
| 111 | static struct resource keysc_resources[] = { | ||
| 112 | [0] = { | ||
| 113 | .name = "KEYSC", | ||
| 114 | .start = 0xe61b0000, | ||
| 115 | .end = 0xe61b0098 - 1, | ||
| 116 | .flags = IORESOURCE_MEM, | ||
| 117 | }, | ||
| 118 | [1] = { | ||
| 119 | .start = gic_spi(71), | ||
| 120 | .flags = IORESOURCE_IRQ, | ||
| 121 | }, | ||
| 122 | }; | ||
| 123 | |||
| 124 | static struct platform_device keysc_device = { | ||
| 125 | .name = "sh_keysc", | ||
| 126 | .id = 0, | ||
| 127 | .num_resources = ARRAY_SIZE(keysc_resources), | ||
| 128 | .resource = keysc_resources, | ||
| 129 | .dev = { | ||
| 130 | .platform_data = &keysc_platdata, | ||
| 131 | }, | ||
| 132 | }; | ||
| 133 | |||
| 134 | /* FSI A */ | ||
| 135 | static struct resource fsi_resources[] = { | ||
| 136 | [0] = { | ||
| 137 | .name = "FSI", | ||
| 138 | .start = 0xEC230000, | ||
| 139 | .end = 0xEC230400 - 1, | ||
| 140 | .flags = IORESOURCE_MEM, | ||
| 141 | }, | ||
| 142 | [1] = { | ||
| 143 | .start = gic_spi(146), | ||
| 144 | .flags = IORESOURCE_IRQ, | ||
| 145 | }, | ||
| 146 | }; | ||
| 147 | |||
| 148 | static struct platform_device fsi_device = { | ||
| 149 | .name = "sh_fsi2", | ||
| 150 | .id = -1, | ||
| 151 | .num_resources = ARRAY_SIZE(fsi_resources), | ||
| 152 | .resource = fsi_resources, | ||
| 153 | }; | ||
| 154 | |||
| 155 | /* Fixed 1.8V regulator to be used by MMCIF */ | ||
| 156 | static struct regulator_consumer_supply fixed1v8_power_consumers[] = | ||
| 157 | { | ||
| 158 | REGULATOR_SUPPLY("vmmc", "sh_mmcif.0"), | ||
| 159 | REGULATOR_SUPPLY("vqmmc", "sh_mmcif.0"), | ||
| 160 | }; | ||
| 161 | |||
| 162 | static struct resource sh_mmcif_resources[] = { | ||
| 163 | [0] = { | ||
| 164 | .name = "MMCIF", | ||
| 165 | .start = 0xe6bd0000, | ||
| 166 | .end = 0xe6bd00ff, | ||
| 167 | .flags = IORESOURCE_MEM, | ||
| 168 | }, | ||
| 169 | [1] = { | ||
| 170 | .start = gic_spi(141), | ||
| 171 | .flags = IORESOURCE_IRQ, | ||
| 172 | }, | ||
| 173 | [2] = { | ||
| 174 | .start = gic_spi(140), | ||
| 175 | .flags = IORESOURCE_IRQ, | ||
| 176 | }, | ||
| 177 | }; | ||
| 178 | |||
| 179 | static struct sh_mmcif_plat_data sh_mmcif_platdata = { | ||
| 180 | .sup_pclk = 0, | ||
| 181 | .ocr = MMC_VDD_165_195, | ||
| 182 | .caps = MMC_CAP_8_BIT_DATA | MMC_CAP_NONREMOVABLE, | ||
| 183 | .slave_id_tx = SHDMA_SLAVE_MMCIF_TX, | ||
| 184 | .slave_id_rx = SHDMA_SLAVE_MMCIF_RX, | ||
| 185 | }; | ||
| 186 | |||
| 187 | static struct platform_device mmc_device = { | ||
| 188 | .name = "sh_mmcif", | ||
| 189 | .id = 0, | ||
| 190 | .dev = { | ||
| 191 | .dma_mask = NULL, | ||
| 192 | .coherent_dma_mask = 0xffffffff, | ||
| 193 | .platform_data = &sh_mmcif_platdata, | ||
| 194 | }, | ||
| 195 | .num_resources = ARRAY_SIZE(sh_mmcif_resources), | ||
| 196 | .resource = sh_mmcif_resources, | ||
| 197 | }; | ||
| 198 | |||
| 199 | /* IrDA */ | ||
| 200 | static struct resource irda_resources[] = { | ||
| 201 | [0] = { | ||
| 202 | .start = 0xE6D00000, | ||
| 203 | .end = 0xE6D01FD4 - 1, | ||
| 204 | .flags = IORESOURCE_MEM, | ||
| 205 | }, | ||
| 206 | [1] = { | ||
| 207 | .start = gic_spi(95), | ||
| 208 | .flags = IORESOURCE_IRQ, | ||
| 209 | }, | ||
| 210 | }; | ||
| 211 | |||
| 212 | static struct platform_device irda_device = { | ||
| 213 | .name = "sh_irda", | ||
| 214 | .id = 0, | ||
| 215 | .resource = irda_resources, | ||
| 216 | .num_resources = ARRAY_SIZE(irda_resources), | ||
| 217 | }; | ||
| 218 | |||
| 219 | /* MIPI-DSI */ | ||
| 220 | static struct resource mipidsi0_resources[] = { | ||
| 221 | [0] = { | ||
| 222 | .name = "DSI0", | ||
| 223 | .start = 0xfeab0000, | ||
| 224 | .end = 0xfeab3fff, | ||
| 225 | .flags = IORESOURCE_MEM, | ||
| 226 | }, | ||
| 227 | [1] = { | ||
| 228 | .name = "DSI0", | ||
| 229 | .start = 0xfeab4000, | ||
| 230 | .end = 0xfeab7fff, | ||
| 231 | .flags = IORESOURCE_MEM, | ||
| 232 | }, | ||
| 233 | }; | ||
| 234 | |||
| 235 | static int sh_mipi_set_dot_clock(struct platform_device *pdev, | ||
| 236 | void __iomem *base, | ||
| 237 | int enable) | ||
| 238 | { | ||
| 239 | struct clk *pck, *phy; | ||
| 240 | int ret; | ||
| 241 | |||
| 242 | pck = clk_get(&pdev->dev, "dsip_clk"); | ||
| 243 | if (IS_ERR(pck)) { | ||
| 244 | ret = PTR_ERR(pck); | ||
| 245 | goto sh_mipi_set_dot_clock_pck_err; | ||
| 246 | } | ||
| 247 | |||
| 248 | phy = clk_get(&pdev->dev, "dsiphy_clk"); | ||
| 249 | if (IS_ERR(phy)) { | ||
| 250 | ret = PTR_ERR(phy); | ||
| 251 | goto sh_mipi_set_dot_clock_phy_err; | ||
| 252 | } | ||
| 253 | |||
| 254 | if (enable) { | ||
| 255 | clk_set_rate(pck, clk_round_rate(pck, 24000000)); | ||
| 256 | clk_set_rate(phy, clk_round_rate(pck, 510000000)); | ||
| 257 | clk_enable(pck); | ||
| 258 | clk_enable(phy); | ||
| 259 | } else { | ||
| 260 | clk_disable(pck); | ||
| 261 | clk_disable(phy); | ||
| 262 | } | ||
| 263 | |||
| 264 | ret = 0; | ||
| 265 | |||
| 266 | clk_put(phy); | ||
| 267 | sh_mipi_set_dot_clock_phy_err: | ||
| 268 | clk_put(pck); | ||
| 269 | sh_mipi_set_dot_clock_pck_err: | ||
| 270 | return ret; | ||
| 271 | } | ||
| 272 | |||
| 273 | static struct sh_mipi_dsi_info mipidsi0_info = { | ||
| 274 | .data_format = MIPI_RGB888, | ||
| 275 | .channel = LCDC_CHAN_MAINLCD, | ||
| 276 | .lane = 2, | ||
| 277 | .vsynw_offset = 20, | ||
| 278 | .clksrc = 1, | ||
| 279 | .flags = SH_MIPI_DSI_HSABM | | ||
| 280 | SH_MIPI_DSI_SYNC_PULSES_MODE | | ||
| 281 | SH_MIPI_DSI_HSbyteCLK, | ||
| 282 | .set_dot_clock = sh_mipi_set_dot_clock, | ||
| 283 | }; | ||
| 284 | |||
| 285 | static struct platform_device mipidsi0_device = { | ||
| 286 | .name = "sh-mipi-dsi", | ||
| 287 | .num_resources = ARRAY_SIZE(mipidsi0_resources), | ||
| 288 | .resource = mipidsi0_resources, | ||
| 289 | .id = 0, | ||
| 290 | .dev = { | ||
| 291 | .platform_data = &mipidsi0_info, | ||
| 292 | }, | ||
| 293 | }; | ||
| 294 | |||
| 295 | /* LCDC0 and backlight */ | ||
| 296 | static const struct fb_videomode lcdc0_modes[] = { | ||
| 297 | { | ||
| 298 | .name = "R63302(QHD)", | ||
| 299 | .xres = 544, | ||
| 300 | .yres = 961, | ||
| 301 | .left_margin = 72, | ||
| 302 | .right_margin = 600, | ||
| 303 | .hsync_len = 16, | ||
| 304 | .upper_margin = 8, | ||
| 305 | .lower_margin = 8, | ||
| 306 | .vsync_len = 2, | ||
| 307 | .sync = FB_SYNC_VERT_HIGH_ACT | FB_SYNC_HOR_HIGH_ACT, | ||
| 308 | }, | ||
| 309 | }; | ||
| 310 | |||
| 311 | static struct sh_mobile_lcdc_info lcdc0_info = { | ||
| 312 | .clock_source = LCDC_CLK_PERIPHERAL, | ||
| 313 | .ch[0] = { | ||
| 314 | .chan = LCDC_CHAN_MAINLCD, | ||
| 315 | .interface_type = RGB24, | ||
| 316 | .clock_divider = 1, | ||
| 317 | .flags = LCDC_FLAGS_DWPOL, | ||
| 318 | .fourcc = V4L2_PIX_FMT_RGB565, | ||
| 319 | .lcd_modes = lcdc0_modes, | ||
| 320 | .num_modes = ARRAY_SIZE(lcdc0_modes), | ||
| 321 | .panel_cfg = { | ||
| 322 | .width = 44, | ||
| 323 | .height = 79, | ||
| 324 | }, | ||
| 325 | .tx_dev = &mipidsi0_device, | ||
| 326 | } | ||
| 327 | }; | ||
| 328 | |||
| 329 | static struct resource lcdc0_resources[] = { | ||
| 330 | [0] = { | ||
| 331 | .name = "LCDC0", | ||
| 332 | .start = 0xfe940000, /* P4-only space */ | ||
| 333 | .end = 0xfe943fff, | ||
| 334 | .flags = IORESOURCE_MEM, | ||
| 335 | }, | ||
| 336 | [1] = { | ||
| 337 | .start = intcs_evt2irq(0x580), | ||
| 338 | .flags = IORESOURCE_IRQ, | ||
| 339 | }, | ||
| 340 | }; | ||
| 341 | |||
| 342 | static struct platform_device lcdc0_device = { | ||
| 343 | .name = "sh_mobile_lcdc_fb", | ||
| 344 | .num_resources = ARRAY_SIZE(lcdc0_resources), | ||
| 345 | .resource = lcdc0_resources, | ||
| 346 | .id = 0, | ||
| 347 | .dev = { | ||
| 348 | .platform_data = &lcdc0_info, | ||
| 349 | .coherent_dma_mask = ~0, | ||
| 350 | }, | ||
| 351 | }; | ||
| 352 | |||
| 353 | static struct bd6107_platform_data backlight_data = { | ||
| 354 | .fbdev = &lcdc0_device.dev, | ||
| 355 | .reset = 235, | ||
| 356 | .def_value = 0, | ||
| 357 | }; | ||
| 358 | |||
| 359 | static struct i2c_board_info backlight_board_info = { | ||
| 360 | I2C_BOARD_INFO("bd6107", 0x6d), | ||
| 361 | .platform_data = &backlight_data, | ||
| 362 | }; | ||
| 363 | |||
| 364 | /* Fixed 2.8V regulators to be used by SDHI0 */ | ||
| 365 | static struct regulator_consumer_supply fixed2v8_power_consumers[] = | ||
| 366 | { | ||
| 367 | REGULATOR_SUPPLY("vmmc", "sh_mobile_sdhi.0"), | ||
| 368 | REGULATOR_SUPPLY("vqmmc", "sh_mobile_sdhi.0"), | ||
| 369 | }; | ||
| 370 | |||
| 371 | /* SDHI0 */ | ||
| 372 | static struct sh_mobile_sdhi_info sdhi0_info = { | ||
| 373 | .dma_slave_tx = SHDMA_SLAVE_SDHI0_TX, | ||
| 374 | .dma_slave_rx = SHDMA_SLAVE_SDHI0_RX, | ||
| 375 | .tmio_flags = TMIO_MMC_HAS_IDLE_WAIT | TMIO_MMC_USE_GPIO_CD, | ||
| 376 | .tmio_caps = MMC_CAP_SD_HIGHSPEED, | ||
| 377 | .tmio_ocr_mask = MMC_VDD_27_28 | MMC_VDD_28_29, | ||
| 378 | .cd_gpio = 251, | ||
| 379 | }; | ||
| 380 | |||
| 381 | static struct resource sdhi0_resources[] = { | ||
| 382 | [0] = { | ||
| 383 | .name = "SDHI0", | ||
| 384 | .start = 0xee100000, | ||
| 385 | .end = 0xee1000ff, | ||
| 386 | .flags = IORESOURCE_MEM, | ||
| 387 | }, | ||
| 388 | [1] = { | ||
| 389 | .name = SH_MOBILE_SDHI_IRQ_CARD_DETECT, | ||
| 390 | .start = gic_spi(83), | ||
| 391 | .flags = IORESOURCE_IRQ, | ||
| 392 | }, | ||
| 393 | [2] = { | ||
| 394 | .name = SH_MOBILE_SDHI_IRQ_SDCARD, | ||
| 395 | .start = gic_spi(84), | ||
| 396 | .flags = IORESOURCE_IRQ, | ||
| 397 | }, | ||
| 398 | [3] = { | ||
| 399 | .name = SH_MOBILE_SDHI_IRQ_SDIO, | ||
| 400 | .start = gic_spi(85), | ||
| 401 | .flags = IORESOURCE_IRQ, | ||
| 402 | }, | ||
| 403 | }; | ||
| 404 | |||
| 405 | static struct platform_device sdhi0_device = { | ||
| 406 | .name = "sh_mobile_sdhi", | ||
| 407 | .id = 0, | ||
| 408 | .num_resources = ARRAY_SIZE(sdhi0_resources), | ||
| 409 | .resource = sdhi0_resources, | ||
| 410 | .dev = { | ||
| 411 | .platform_data = &sdhi0_info, | ||
| 412 | }, | ||
| 413 | }; | ||
| 414 | |||
| 415 | /* Fixed 3.3V regulator to be used by SDHI1 */ | ||
| 416 | static struct regulator_consumer_supply cn4_power_consumers[] = | ||
| 417 | { | ||
| 418 | REGULATOR_SUPPLY("vmmc", "sh_mobile_sdhi.1"), | ||
| 419 | REGULATOR_SUPPLY("vqmmc", "sh_mobile_sdhi.1"), | ||
| 420 | }; | ||
| 421 | |||
| 422 | static struct regulator_init_data cn4_power_init_data = { | ||
| 423 | .constraints = { | ||
| 424 | .valid_ops_mask = REGULATOR_CHANGE_STATUS, | ||
| 425 | }, | ||
| 426 | .num_consumer_supplies = ARRAY_SIZE(cn4_power_consumers), | ||
| 427 | .consumer_supplies = cn4_power_consumers, | ||
| 428 | }; | ||
| 429 | |||
| 430 | static struct fixed_voltage_config cn4_power_info = { | ||
| 431 | .supply_name = "CN4 SD/MMC Vdd", | ||
| 432 | .microvolts = 3300000, | ||
| 433 | .gpio = 114, | ||
| 434 | .enable_high = 1, | ||
| 435 | .init_data = &cn4_power_init_data, | ||
| 436 | }; | ||
| 437 | |||
| 438 | static struct platform_device cn4_power = { | ||
| 439 | .name = "reg-fixed-voltage", | ||
| 440 | .id = 2, | ||
| 441 | .dev = { | ||
| 442 | .platform_data = &cn4_power_info, | ||
| 443 | }, | ||
| 444 | }; | ||
| 445 | |||
| 446 | static void ag5evm_sdhi1_set_pwr(struct platform_device *pdev, int state) | ||
| 447 | { | ||
| 448 | static int power_gpio = -EINVAL; | ||
| 449 | |||
| 450 | if (power_gpio < 0) { | ||
| 451 | int ret = gpio_request_one(114, GPIOF_OUT_INIT_LOW, | ||
| 452 | "sdhi1_power"); | ||
| 453 | if (!ret) | ||
| 454 | power_gpio = 114; | ||
| 455 | } | ||
| 456 | |||
| 457 | /* | ||
| 458 | * If requesting the GPIO above failed, it means, that the regulator got | ||
| 459 | * probed and grabbed the GPIO, but we don't know, whether the sdhi | ||
| 460 | * driver already uses the regulator. If it doesn't, we have to toggle | ||
| 461 | * the GPIO ourselves, even though it is now owned by the fixed | ||
| 462 | * regulator driver. We have to live with the race in case the driver | ||
| 463 | * gets unloaded and the GPIO freed between these two steps. | ||
| 464 | */ | ||
| 465 | gpio_set_value(114, state); | ||
| 466 | } | ||
| 467 | |||
| 468 | static struct sh_mobile_sdhi_info sh_sdhi1_info = { | ||
| 469 | .tmio_flags = TMIO_MMC_WRPROTECT_DISABLE | TMIO_MMC_HAS_IDLE_WAIT, | ||
| 470 | .tmio_caps = MMC_CAP_NONREMOVABLE | MMC_CAP_SDIO_IRQ, | ||
| 471 | .tmio_ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34, | ||
| 472 | .set_pwr = ag5evm_sdhi1_set_pwr, | ||
| 473 | }; | ||
| 474 | |||
| 475 | static struct resource sdhi1_resources[] = { | ||
| 476 | [0] = { | ||
| 477 | .name = "SDHI1", | ||
| 478 | .start = 0xee120000, | ||
| 479 | .end = 0xee1200ff, | ||
| 480 | .flags = IORESOURCE_MEM, | ||
| 481 | }, | ||
| 482 | [1] = { | ||
| 483 | .name = SH_MOBILE_SDHI_IRQ_CARD_DETECT, | ||
| 484 | .start = gic_spi(87), | ||
| 485 | .flags = IORESOURCE_IRQ, | ||
| 486 | }, | ||
| 487 | [2] = { | ||
| 488 | .name = SH_MOBILE_SDHI_IRQ_SDCARD, | ||
| 489 | .start = gic_spi(88), | ||
| 490 | .flags = IORESOURCE_IRQ, | ||
| 491 | }, | ||
| 492 | [3] = { | ||
| 493 | .name = SH_MOBILE_SDHI_IRQ_SDIO, | ||
| 494 | .start = gic_spi(89), | ||
| 495 | .flags = IORESOURCE_IRQ, | ||
| 496 | }, | ||
| 497 | }; | ||
| 498 | |||
| 499 | static struct platform_device sdhi1_device = { | ||
| 500 | .name = "sh_mobile_sdhi", | ||
| 501 | .id = 1, | ||
| 502 | .dev = { | ||
| 503 | .platform_data = &sh_sdhi1_info, | ||
| 504 | }, | ||
| 505 | .num_resources = ARRAY_SIZE(sdhi1_resources), | ||
| 506 | .resource = sdhi1_resources, | ||
| 507 | }; | ||
| 508 | |||
| 509 | static struct platform_device *ag5evm_devices[] __initdata = { | ||
| 510 | &cn4_power, | ||
| 511 | ð_device, | ||
| 512 | &keysc_device, | ||
| 513 | &fsi_device, | ||
| 514 | &mmc_device, | ||
| 515 | &irda_device, | ||
| 516 | &mipidsi0_device, | ||
| 517 | &lcdc0_device, | ||
| 518 | &sdhi0_device, | ||
| 519 | &sdhi1_device, | ||
| 520 | }; | ||
| 521 | |||
| 522 | static unsigned long pin_pullup_conf[] = { | ||
| 523 | PIN_CONF_PACKED(PIN_CONFIG_BIAS_PULL_UP, 0), | ||
| 524 | }; | ||
| 525 | |||
| 526 | static const struct pinctrl_map ag5evm_pinctrl_map[] = { | ||
| 527 | /* FSIA */ | ||
| 528 | PIN_MAP_MUX_GROUP_DEFAULT("sh_fsi2.0", "pfc-sh73a0", | ||
| 529 | "fsia_mclk_in", "fsia"), | ||
| 530 | PIN_MAP_MUX_GROUP_DEFAULT("sh_fsi2.0", "pfc-sh73a0", | ||
| 531 | "fsia_sclk_in", "fsia"), | ||
| 532 | PIN_MAP_MUX_GROUP_DEFAULT("sh_fsi2.0", "pfc-sh73a0", | ||
| 533 | "fsia_data_in", "fsia"), | ||
| 534 | PIN_MAP_MUX_GROUP_DEFAULT("sh_fsi2.0", "pfc-sh73a0", | ||
| 535 | "fsia_data_out", "fsia"), | ||
| 536 | /* I2C2 & I2C3 */ | ||
| 537 | PIN_MAP_MUX_GROUP_DEFAULT("i2c-sh_mobile.2", "pfc-sh73a0", | ||
| 538 | "i2c2_0", "i2c2"), | ||
| 539 | PIN_MAP_MUX_GROUP_DEFAULT("i2c-sh_mobile.3", "pfc-sh73a0", | ||
| 540 | "i2c3_0", "i2c3"), | ||
| 541 | /* IrDA */ | ||
| 542 | PIN_MAP_MUX_GROUP_DEFAULT("sh_irda.0", "pfc-sh73a0", | ||
| 543 | "irda_0", "irda"), | ||
| 544 | /* KEYSC */ | ||
| 545 | PIN_MAP_MUX_GROUP_DEFAULT("sh_keysc.0", "pfc-sh73a0", | ||
| 546 | "keysc_in8", "keysc"), | ||
| 547 | PIN_MAP_MUX_GROUP_DEFAULT("sh_keysc.0", "pfc-sh73a0", | ||
| 548 | "keysc_out04", "keysc"), | ||
| 549 | PIN_MAP_MUX_GROUP_DEFAULT("sh_keysc.0", "pfc-sh73a0", | ||
| 550 | "keysc_out5", "keysc"), | ||
| 551 | PIN_MAP_MUX_GROUP_DEFAULT("sh_keysc.0", "pfc-sh73a0", | ||
| 552 | "keysc_out6_0", "keysc"), | ||
| 553 | PIN_MAP_MUX_GROUP_DEFAULT("sh_keysc.0", "pfc-sh73a0", | ||
| 554 | "keysc_out7_0", "keysc"), | ||
| 555 | PIN_MAP_MUX_GROUP_DEFAULT("sh_keysc.0", "pfc-sh73a0", | ||
| 556 | "keysc_out8_0", "keysc"), | ||
| 557 | PIN_MAP_MUX_GROUP_DEFAULT("sh_keysc.0", "pfc-sh73a0", | ||
| 558 | "keysc_out9_2", "keysc"), | ||
| 559 | PIN_MAP_CONFIGS_GROUP_DEFAULT("sh_keysc.0", "pfc-sh73a0", | ||
| 560 | "keysc_in8", pin_pullup_conf), | ||
| 561 | /* MMCIF */ | ||
| 562 | PIN_MAP_MUX_GROUP_DEFAULT("sh_mmcif.0", "pfc-sh73a0", | ||
| 563 | "mmc0_data8_0", "mmc0"), | ||
| 564 | PIN_MAP_MUX_GROUP_DEFAULT("sh_mmcif.0", "pfc-sh73a0", | ||
| 565 | "mmc0_ctrl_0", "mmc0"), | ||
| 566 | PIN_MAP_CONFIGS_PIN_DEFAULT("sh_mmcif.0", "pfc-sh73a0", | ||
| 567 | "PORT279", pin_pullup_conf), | ||
| 568 | PIN_MAP_CONFIGS_GROUP_DEFAULT("sh_mmcif.0", "pfc-sh73a0", | ||
| 569 | "mmc0_data8_0", pin_pullup_conf), | ||
| 570 | /* SCIFA2 */ | ||
| 571 | PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.2", "pfc-sh73a0", | ||
| 572 | "scifa2_data_0", "scifa2"), | ||
| 573 | PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.2", "pfc-sh73a0", | ||
| 574 | "scifa2_ctrl_0", "scifa2"), | ||
| 575 | /* SDHI0 (CN15 [SD I/F]) */ | ||
| 576 | PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "pfc-sh73a0", | ||
| 577 | "sdhi0_data4", "sdhi0"), | ||
| 578 | PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "pfc-sh73a0", | ||
| 579 | "sdhi0_ctrl", "sdhi0"), | ||
| 580 | PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "pfc-sh73a0", | ||
| 581 | "sdhi0_wp", "sdhi0"), | ||
| 582 | /* SDHI1 (CN4 [WLAN I/F]) */ | ||
| 583 | PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.1", "pfc-sh73a0", | ||
| 584 | "sdhi1_data4", "sdhi1"), | ||
| 585 | PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.1", "pfc-sh73a0", | ||
| 586 | "sdhi1_ctrl", "sdhi1"), | ||
| 587 | PIN_MAP_CONFIGS_GROUP_DEFAULT("sh_mobile_sdhi.1", "pfc-sh73a0", | ||
| 588 | "sdhi1_data4", pin_pullup_conf), | ||
| 589 | PIN_MAP_CONFIGS_PIN_DEFAULT("sh_mobile_sdhi.1", "pfc-sh73a0", | ||
| 590 | "PORT263", pin_pullup_conf), | ||
| 591 | }; | ||
| 592 | |||
| 593 | static void __init ag5evm_init(void) | ||
| 594 | { | ||
| 595 | regulator_register_always_on(0, "fixed-1.8V", fixed1v8_power_consumers, | ||
| 596 | ARRAY_SIZE(fixed1v8_power_consumers), 1800000); | ||
| 597 | regulator_register_always_on(1, "fixed-2.8V", fixed2v8_power_consumers, | ||
| 598 | ARRAY_SIZE(fixed2v8_power_consumers), 3300000); | ||
| 599 | regulator_register_fixed(3, dummy_supplies, ARRAY_SIZE(dummy_supplies)); | ||
| 600 | |||
| 601 | pinctrl_register_mappings(ag5evm_pinctrl_map, | ||
| 602 | ARRAY_SIZE(ag5evm_pinctrl_map)); | ||
| 603 | sh73a0_pinmux_init(); | ||
| 604 | |||
| 605 | /* enable MMCIF */ | ||
| 606 | gpio_request_one(208, GPIOF_OUT_INIT_HIGH, NULL); /* Reset */ | ||
| 607 | |||
| 608 | /* enable SMSC911X */ | ||
| 609 | gpio_request_one(144, GPIOF_IN, NULL); /* PINTA2 */ | ||
| 610 | gpio_request_one(145, GPIOF_OUT_INIT_HIGH, NULL); /* RESET */ | ||
| 611 | |||
| 612 | /* LCD panel */ | ||
| 613 | gpio_request_one(217, GPIOF_OUT_INIT_LOW, NULL); /* RESET */ | ||
| 614 | mdelay(1); | ||
| 615 | gpio_set_value(217, 1); | ||
| 616 | mdelay(100); | ||
| 617 | |||
| 618 | |||
| 619 | #ifdef CONFIG_CACHE_L2X0 | ||
| 620 | /* Shared attribute override enable, 64K*8way */ | ||
| 621 | l2x0_init(IOMEM(0xf0100000), 0x00460000, 0xc2000fff); | ||
| 622 | #endif | ||
| 623 | sh73a0_add_standard_devices(); | ||
| 624 | |||
| 625 | i2c_register_board_info(1, &backlight_board_info, 1); | ||
| 626 | |||
| 627 | platform_add_devices(ag5evm_devices, ARRAY_SIZE(ag5evm_devices)); | ||
| 628 | } | ||
| 629 | |||
| 630 | MACHINE_START(AG5EVM, "ag5evm") | ||
| 631 | .smp = smp_ops(sh73a0_smp_ops), | ||
| 632 | .map_io = sh73a0_map_io, | ||
| 633 | .init_early = sh73a0_add_early_devices, | ||
| 634 | .nr_irqs = NR_IRQS_LEGACY, | ||
| 635 | .init_irq = sh73a0_init_irq, | ||
| 636 | .init_machine = ag5evm_init, | ||
| 637 | .init_late = shmobile_init_late, | ||
| 638 | .init_time = sh73a0_earlytimer_init, | ||
| 639 | MACHINE_END | ||
diff --git a/arch/arm/mach-shmobile/board-ape6evm-reference.c b/arch/arm/mach-shmobile/board-ape6evm-reference.c new file mode 100644 index 000000000000..a23fa714f7ac --- /dev/null +++ b/arch/arm/mach-shmobile/board-ape6evm-reference.c | |||
| @@ -0,0 +1,63 @@ | |||
| 1 | /* | ||
| 2 | * APE6EVM board support | ||
| 3 | * | ||
| 4 | * Copyright (C) 2013 Renesas Solutions Corp. | ||
| 5 | * Copyright (C) 2013 Magnus Damm | ||
| 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 | #include <linux/gpio.h> | ||
| 22 | #include <linux/kernel.h> | ||
| 23 | #include <linux/of_platform.h> | ||
| 24 | #include <linux/pinctrl/machine.h> | ||
| 25 | #include <linux/platform_device.h> | ||
| 26 | #include <linux/sh_clk.h> | ||
| 27 | #include <mach/common.h> | ||
| 28 | #include <mach/r8a73a4.h> | ||
| 29 | #include <asm/mach-types.h> | ||
| 30 | #include <asm/mach/arch.h> | ||
| 31 | |||
| 32 | static void __init ape6evm_add_standard_devices(void) | ||
| 33 | { | ||
| 34 | |||
| 35 | struct clk *parent; | ||
| 36 | struct clk *mp; | ||
| 37 | |||
| 38 | r8a73a4_clock_init(); | ||
| 39 | |||
| 40 | /* MP clock parent = extal2 */ | ||
| 41 | parent = clk_get(NULL, "extal2"); | ||
| 42 | mp = clk_get(NULL, "mp"); | ||
| 43 | BUG_ON(IS_ERR(parent) || IS_ERR(mp)); | ||
| 44 | |||
| 45 | clk_set_parent(mp, parent); | ||
| 46 | clk_put(parent); | ||
| 47 | clk_put(mp); | ||
| 48 | |||
| 49 | r8a73a4_add_dt_devices(); | ||
| 50 | of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); | ||
| 51 | platform_device_register_simple("cpufreq-cpu0", -1, NULL, 0); | ||
| 52 | } | ||
| 53 | |||
| 54 | static const char *ape6evm_boards_compat_dt[] __initdata = { | ||
| 55 | "renesas,ape6evm-reference", | ||
| 56 | NULL, | ||
| 57 | }; | ||
| 58 | |||
| 59 | DT_MACHINE_START(APE6EVM_DT, "ape6evm") | ||
| 60 | .init_early = r8a73a4_init_delay, | ||
| 61 | .init_machine = ape6evm_add_standard_devices, | ||
| 62 | .dt_compat = ape6evm_boards_compat_dt, | ||
| 63 | MACHINE_END | ||
diff --git a/arch/arm/mach-shmobile/board-ape6evm.c b/arch/arm/mach-shmobile/board-ape6evm.c index 38c6c733fabf..24b87eea9da3 100644 --- a/arch/arm/mach-shmobile/board-ape6evm.c +++ b/arch/arm/mach-shmobile/board-ape6evm.c | |||
| @@ -241,7 +241,6 @@ static const char *ape6evm_boards_compat_dt[] __initdata = { | |||
| 241 | 241 | ||
| 242 | DT_MACHINE_START(APE6EVM_DT, "ape6evm") | 242 | DT_MACHINE_START(APE6EVM_DT, "ape6evm") |
| 243 | .init_early = r8a73a4_init_delay, | 243 | .init_early = r8a73a4_init_delay, |
| 244 | .init_time = shmobile_timer_init, | ||
| 245 | .init_machine = ape6evm_add_standard_devices, | 244 | .init_machine = ape6evm_add_standard_devices, |
| 246 | .dt_compat = ape6evm_boards_compat_dt, | 245 | .dt_compat = ape6evm_boards_compat_dt, |
| 247 | MACHINE_END | 246 | MACHINE_END |
diff --git a/arch/arm/mach-shmobile/board-armadillo800eva-reference.c b/arch/arm/mach-shmobile/board-armadillo800eva-reference.c index fd2446d995ad..57d1a78367b6 100644 --- a/arch/arm/mach-shmobile/board-armadillo800eva-reference.c +++ b/arch/arm/mach-shmobile/board-armadillo800eva-reference.c | |||
| @@ -190,7 +190,6 @@ DT_MACHINE_START(ARMADILLO800EVA_DT, "armadillo800eva-reference") | |||
| 190 | .init_early = r8a7740_init_delay, | 190 | .init_early = r8a7740_init_delay, |
| 191 | .init_irq = r8a7740_init_irq_of, | 191 | .init_irq = r8a7740_init_irq_of, |
| 192 | .init_machine = eva_init, | 192 | .init_machine = eva_init, |
| 193 | .init_time = shmobile_timer_init, | ||
| 194 | .init_late = shmobile_init_late, | 193 | .init_late = shmobile_init_late, |
| 195 | .dt_compat = eva_boards_compat_dt, | 194 | .dt_compat = eva_boards_compat_dt, |
| 196 | .restart = eva_restart, | 195 | .restart = eva_restart, |
diff --git a/arch/arm/mach-shmobile/board-armadillo800eva.c b/arch/arm/mach-shmobile/board-armadillo800eva.c index 6b4b77dd2c29..5bd1479d3deb 100644 --- a/arch/arm/mach-shmobile/board-armadillo800eva.c +++ b/arch/arm/mach-shmobile/board-armadillo800eva.c | |||
| @@ -1313,7 +1313,7 @@ static const char *eva_boards_compat_dt[] __initdata = { | |||
| 1313 | DT_MACHINE_START(ARMADILLO800EVA_DT, "armadillo800eva") | 1313 | DT_MACHINE_START(ARMADILLO800EVA_DT, "armadillo800eva") |
| 1314 | .map_io = r8a7740_map_io, | 1314 | .map_io = r8a7740_map_io, |
| 1315 | .init_early = eva_add_early_devices, | 1315 | .init_early = eva_add_early_devices, |
| 1316 | .init_irq = r8a7740_init_irq, | 1316 | .init_irq = r8a7740_init_irq_of, |
| 1317 | .init_machine = eva_init, | 1317 | .init_machine = eva_init, |
| 1318 | .init_late = shmobile_init_late, | 1318 | .init_late = shmobile_init_late, |
| 1319 | .init_time = eva_earlytimer_init, | 1319 | .init_time = eva_earlytimer_init, |
diff --git a/arch/arm/mach-shmobile/board-bockw-reference.c b/arch/arm/mach-shmobile/board-bockw-reference.c new file mode 100644 index 000000000000..1a7c893e1a52 --- /dev/null +++ b/arch/arm/mach-shmobile/board-bockw-reference.c | |||
| @@ -0,0 +1,61 @@ | |||
| 1 | /* | ||
| 2 | * Bock-W board support | ||
| 3 | * | ||
| 4 | * Copyright (C) 2013 Renesas Solutions Corp. | ||
| 5 | * Copyright (C) 2013 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 | #include <linux/of_platform.h> | ||
| 22 | #include <linux/pinctrl/machine.h> | ||
| 23 | #include <mach/common.h> | ||
| 24 | #include <mach/r8a7778.h> | ||
| 25 | #include <asm/mach/arch.h> | ||
| 26 | |||
| 27 | /* | ||
| 28 | * see board-bock.c for checking detail of dip-switch | ||
| 29 | */ | ||
| 30 | |||
| 31 | static const struct pinctrl_map bockw_pinctrl_map[] = { | ||
| 32 | /* SCIF0 */ | ||
| 33 | PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.0", "pfc-r8a7778", | ||
| 34 | "scif0_data_a", "scif0"), | ||
| 35 | PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.0", "pfc-r8a7778", | ||
| 36 | "scif0_ctrl", "scif0"), | ||
| 37 | }; | ||
| 38 | |||
| 39 | static void __init bockw_init(void) | ||
| 40 | { | ||
| 41 | r8a7778_clock_init(); | ||
| 42 | |||
| 43 | pinctrl_register_mappings(bockw_pinctrl_map, | ||
| 44 | ARRAY_SIZE(bockw_pinctrl_map)); | ||
| 45 | r8a7778_pinmux_init(); | ||
| 46 | r8a7778_add_dt_devices(); | ||
| 47 | |||
| 48 | of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); | ||
| 49 | } | ||
| 50 | |||
| 51 | static const char *bockw_boards_compat_dt[] __initdata = { | ||
| 52 | "renesas,bockw-reference", | ||
| 53 | NULL, | ||
| 54 | }; | ||
| 55 | |||
| 56 | DT_MACHINE_START(BOCKW_DT, "bockw") | ||
| 57 | .init_early = r8a7778_init_delay, | ||
| 58 | .init_irq = r8a7778_init_irq_dt, | ||
| 59 | .init_machine = bockw_init, | ||
| 60 | .dt_compat = bockw_boards_compat_dt, | ||
| 61 | MACHINE_END | ||
diff --git a/arch/arm/mach-shmobile/board-bockw.c b/arch/arm/mach-shmobile/board-bockw.c index 35dd7f201a16..6b9faf3908f7 100644 --- a/arch/arm/mach-shmobile/board-bockw.c +++ b/arch/arm/mach-shmobile/board-bockw.c | |||
| @@ -21,8 +21,11 @@ | |||
| 21 | 21 | ||
| 22 | #include <linux/mfd/tmio.h> | 22 | #include <linux/mfd/tmio.h> |
| 23 | #include <linux/mmc/host.h> | 23 | #include <linux/mmc/host.h> |
| 24 | #include <linux/mmc/sh_mobile_sdhi.h> | ||
| 25 | #include <linux/mmc/sh_mmcif.h> | ||
| 24 | #include <linux/mtd/partitions.h> | 26 | #include <linux/mtd/partitions.h> |
| 25 | #include <linux/pinctrl/machine.h> | 27 | #include <linux/pinctrl/machine.h> |
| 28 | #include <linux/platform_data/usb-rcar-phy.h> | ||
| 26 | #include <linux/platform_device.h> | 29 | #include <linux/platform_device.h> |
| 27 | #include <linux/regulator/fixed.h> | 30 | #include <linux/regulator/fixed.h> |
| 28 | #include <linux/regulator/machine.h> | 31 | #include <linux/regulator/machine.h> |
| @@ -66,28 +69,38 @@ static struct regulator_consumer_supply dummy_supplies[] = { | |||
| 66 | REGULATOR_SUPPLY("vdd33a", "smsc911x"), | 69 | REGULATOR_SUPPLY("vdd33a", "smsc911x"), |
| 67 | }; | 70 | }; |
| 68 | 71 | ||
| 69 | static struct smsc911x_platform_config smsc911x_data = { | 72 | static struct smsc911x_platform_config smsc911x_data __initdata = { |
| 70 | .irq_polarity = SMSC911X_IRQ_POLARITY_ACTIVE_LOW, | 73 | .irq_polarity = SMSC911X_IRQ_POLARITY_ACTIVE_LOW, |
| 71 | .irq_type = SMSC911X_IRQ_TYPE_PUSH_PULL, | 74 | .irq_type = SMSC911X_IRQ_TYPE_PUSH_PULL, |
| 72 | .flags = SMSC911X_USE_32BIT, | 75 | .flags = SMSC911X_USE_32BIT, |
| 73 | .phy_interface = PHY_INTERFACE_MODE_MII, | 76 | .phy_interface = PHY_INTERFACE_MODE_MII, |
| 74 | }; | 77 | }; |
| 75 | 78 | ||
| 76 | static struct resource smsc911x_resources[] = { | 79 | static struct resource smsc911x_resources[] __initdata = { |
| 77 | DEFINE_RES_MEM(0x18300000, 0x1000), | 80 | DEFINE_RES_MEM(0x18300000, 0x1000), |
| 78 | DEFINE_RES_IRQ(irq_pin(0)), /* IRQ 0 */ | 81 | DEFINE_RES_IRQ(irq_pin(0)), /* IRQ 0 */ |
| 79 | }; | 82 | }; |
| 80 | 83 | ||
| 81 | /* USB */ | 84 | /* USB */ |
| 85 | static struct resource usb_phy_resources[] __initdata = { | ||
| 86 | DEFINE_RES_MEM(0xffe70800, 0x100), | ||
| 87 | DEFINE_RES_MEM(0xffe76000, 0x100), | ||
| 88 | }; | ||
| 89 | |||
| 82 | static struct rcar_phy_platform_data usb_phy_platform_data __initdata; | 90 | static struct rcar_phy_platform_data usb_phy_platform_data __initdata; |
| 83 | 91 | ||
| 84 | /* SDHI */ | 92 | /* SDHI */ |
| 85 | static struct sh_mobile_sdhi_info sdhi0_info = { | 93 | static struct sh_mobile_sdhi_info sdhi0_info __initdata = { |
| 86 | .tmio_caps = MMC_CAP_SD_HIGHSPEED, | 94 | .tmio_caps = MMC_CAP_SD_HIGHSPEED, |
| 87 | .tmio_ocr_mask = MMC_VDD_165_195 | MMC_VDD_32_33 | MMC_VDD_33_34, | 95 | .tmio_ocr_mask = MMC_VDD_165_195 | MMC_VDD_32_33 | MMC_VDD_33_34, |
| 88 | .tmio_flags = TMIO_MMC_HAS_IDLE_WAIT, | 96 | .tmio_flags = TMIO_MMC_HAS_IDLE_WAIT, |
| 89 | }; | 97 | }; |
| 90 | 98 | ||
| 99 | static struct resource sdhi0_resources[] __initdata = { | ||
| 100 | DEFINE_RES_MEM(0xFFE4C000, 0x100), | ||
| 101 | DEFINE_RES_IRQ(gic_iid(0x77)), | ||
| 102 | }; | ||
| 103 | |||
| 91 | static struct sh_eth_plat_data ether_platform_data __initdata = { | 104 | static struct sh_eth_plat_data ether_platform_data __initdata = { |
| 92 | .phy = 0x01, | 105 | .phy = 0x01, |
| 93 | .edmac_endian = EDMAC_LITTLE_ENDIAN, | 106 | .edmac_endian = EDMAC_LITTLE_ENDIAN, |
| @@ -136,7 +149,12 @@ static struct spi_board_info spi_board_info[] __initdata = { | |||
| 136 | }; | 149 | }; |
| 137 | 150 | ||
| 138 | /* MMC */ | 151 | /* MMC */ |
| 139 | static struct sh_mmcif_plat_data sh_mmcif_plat = { | 152 | static struct resource mmc_resources[] __initdata = { |
| 153 | DEFINE_RES_MEM(0xffe4e000, 0x100), | ||
| 154 | DEFINE_RES_IRQ(gic_iid(0x5d)), | ||
| 155 | }; | ||
| 156 | |||
| 157 | static struct sh_mmcif_plat_data sh_mmcif_plat __initdata = { | ||
| 140 | .sup_pclk = 0, | 158 | .sup_pclk = 0, |
| 141 | .ocr = MMC_VDD_165_195 | MMC_VDD_32_33 | MMC_VDD_33_34, | 159 | .ocr = MMC_VDD_165_195 | MMC_VDD_32_33 | MMC_VDD_33_34, |
| 142 | .caps = MMC_CAP_4_BIT_DATA | | 160 | .caps = MMC_CAP_4_BIT_DATA | |
| @@ -217,11 +235,7 @@ static void __init bockw_init(void) | |||
| 217 | r8a7778_clock_init(); | 235 | r8a7778_clock_init(); |
| 218 | r8a7778_init_irq_extpin(1); | 236 | r8a7778_init_irq_extpin(1); |
| 219 | r8a7778_add_standard_devices(); | 237 | r8a7778_add_standard_devices(); |
| 220 | r8a7778_add_usb_phy_device(&usb_phy_platform_data); | ||
| 221 | r8a7778_add_ether_device(ðer_platform_data); | 238 | r8a7778_add_ether_device(ðer_platform_data); |
| 222 | r8a7778_add_i2c_device(0); | ||
| 223 | r8a7778_add_hspi_device(0); | ||
| 224 | r8a7778_add_mmc_device(&sh_mmcif_plat); | ||
| 225 | r8a7778_add_vin_device(0, &vin_platform_data); | 239 | r8a7778_add_vin_device(0, &vin_platform_data); |
| 226 | /* VIN1 has a pin conflict with Ether */ | 240 | /* VIN1 has a pin conflict with Ether */ |
| 227 | if (!IS_ENABLED(CONFIG_SH_ETH)) | 241 | if (!IS_ENABLED(CONFIG_SH_ETH)) |
| @@ -241,6 +255,19 @@ static void __init bockw_init(void) | |||
| 241 | ARRAY_SIZE(bockw_pinctrl_map)); | 255 | ARRAY_SIZE(bockw_pinctrl_map)); |
| 242 | r8a7778_pinmux_init(); | 256 | r8a7778_pinmux_init(); |
| 243 | 257 | ||
| 258 | platform_device_register_resndata( | ||
| 259 | &platform_bus, "sh_mmcif", -1, | ||
| 260 | mmc_resources, ARRAY_SIZE(mmc_resources), | ||
| 261 | &sh_mmcif_plat, sizeof(struct sh_mmcif_plat_data)); | ||
| 262 | |||
| 263 | platform_device_register_resndata( | ||
| 264 | &platform_bus, "rcar_usb_phy", -1, | ||
| 265 | usb_phy_resources, | ||
| 266 | ARRAY_SIZE(usb_phy_resources), | ||
| 267 | &usb_phy_platform_data, | ||
| 268 | sizeof(struct rcar_phy_platform_data)); | ||
| 269 | |||
| 270 | |||
| 244 | /* for SMSC */ | 271 | /* for SMSC */ |
| 245 | base = ioremap_nocache(FPGA, SZ_1M); | 272 | base = ioremap_nocache(FPGA, SZ_1M); |
| 246 | if (base) { | 273 | if (base) { |
| @@ -276,7 +303,10 @@ static void __init bockw_init(void) | |||
| 276 | iowrite32(ioread32(base + PUPR4) | (3 << 26), base + PUPR4); | 303 | iowrite32(ioread32(base + PUPR4) | (3 << 26), base + PUPR4); |
| 277 | iounmap(base); | 304 | iounmap(base); |
| 278 | 305 | ||
| 279 | r8a7778_sdhi_init(0, &sdhi0_info); | 306 | platform_device_register_resndata( |
| 307 | &platform_bus, "sh_mobile_sdhi", 0, | ||
| 308 | sdhi0_resources, ARRAY_SIZE(sdhi0_resources), | ||
| 309 | &sdhi0_info, sizeof(struct sh_mobile_sdhi_info)); | ||
| 280 | } | 310 | } |
| 281 | } | 311 | } |
| 282 | 312 | ||
| @@ -289,7 +319,6 @@ DT_MACHINE_START(BOCKW_DT, "bockw") | |||
| 289 | .init_early = r8a7778_init_delay, | 319 | .init_early = r8a7778_init_delay, |
| 290 | .init_irq = r8a7778_init_irq_dt, | 320 | .init_irq = r8a7778_init_irq_dt, |
| 291 | .init_machine = bockw_init, | 321 | .init_machine = bockw_init, |
| 292 | .init_time = shmobile_timer_init, | ||
| 293 | .dt_compat = bockw_boards_compat_dt, | 322 | .dt_compat = bockw_boards_compat_dt, |
| 294 | .init_late = r8a7778_init_late, | 323 | .init_late = r8a7778_init_late, |
| 295 | MACHINE_END | 324 | MACHINE_END |
diff --git a/arch/arm/mach-shmobile/board-kota2.c b/arch/arm/mach-shmobile/board-kota2.c deleted file mode 100644 index 6af20d909bdb..000000000000 --- a/arch/arm/mach-shmobile/board-kota2.c +++ /dev/null | |||
| @@ -1,550 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * kota2 board support | ||
| 3 | * | ||
| 4 | * Copyright (C) 2011 Renesas Solutions Corp. | ||
| 5 | * Copyright (C) 2011 Magnus Damm | ||
| 6 | * Copyright (C) 2010 Takashi Yoshii <yoshii.takashi.zj@renesas.com> | ||
| 7 | * Copyright (C) 2009 Yoshihiro Shimoda <shimoda.yoshihiro@renesas.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; version 2 of the License. | ||
| 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | ||
| 21 | */ | ||
| 22 | |||
| 23 | #include <linux/kernel.h> | ||
| 24 | #include <linux/init.h> | ||
| 25 | #include <linux/interrupt.h> | ||
| 26 | #include <linux/irq.h> | ||
| 27 | #include <linux/pinctrl/machine.h> | ||
| 28 | #include <linux/pinctrl/pinconf-generic.h> | ||
| 29 | #include <linux/platform_data/pwm-renesas-tpu.h> | ||
| 30 | #include <linux/platform_device.h> | ||
| 31 | #include <linux/delay.h> | ||
| 32 | #include <linux/io.h> | ||
| 33 | #include <linux/regulator/fixed.h> | ||
| 34 | #include <linux/regulator/machine.h> | ||
| 35 | #include <linux/smsc911x.h> | ||
| 36 | #include <linux/gpio.h> | ||
| 37 | #include <linux/input.h> | ||
| 38 | #include <linux/input/sh_keysc.h> | ||
| 39 | #include <linux/gpio_keys.h> | ||
| 40 | #include <linux/leds.h> | ||
| 41 | #include <linux/leds_pwm.h> | ||
| 42 | #include <linux/irqchip/arm-gic.h> | ||
| 43 | #include <linux/mmc/host.h> | ||
| 44 | #include <linux/mmc/sh_mmcif.h> | ||
| 45 | #include <linux/mfd/tmio.h> | ||
| 46 | #include <linux/mmc/sh_mobile_sdhi.h> | ||
| 47 | #include <mach/hardware.h> | ||
| 48 | #include <mach/irqs.h> | ||
| 49 | #include <mach/sh73a0.h> | ||
| 50 | #include <mach/common.h> | ||
| 51 | #include <asm/mach-types.h> | ||
| 52 | #include <asm/mach/arch.h> | ||
| 53 | #include <asm/mach/time.h> | ||
| 54 | #include <asm/hardware/cache-l2x0.h> | ||
| 55 | #include <asm/traps.h> | ||
| 56 | |||
| 57 | /* Dummy supplies, where voltage doesn't matter */ | ||
| 58 | static struct regulator_consumer_supply dummy_supplies[] = { | ||
| 59 | REGULATOR_SUPPLY("vddvario", "smsc911x"), | ||
| 60 | REGULATOR_SUPPLY("vdd33a", "smsc911x"), | ||
| 61 | }; | ||
| 62 | |||
| 63 | /* SMSC 9220 */ | ||
| 64 | static struct resource smsc9220_resources[] = { | ||
| 65 | [0] = { | ||
| 66 | .start = 0x14000000, /* CS5A */ | ||
| 67 | .end = 0x140000ff, /* A1->A7 */ | ||
| 68 | .flags = IORESOURCE_MEM, | ||
| 69 | }, | ||
| 70 | [1] = { | ||
| 71 | .start = SH73A0_PINT0_IRQ(2), /* PINTA2 */ | ||
| 72 | .flags = IORESOURCE_IRQ, | ||
| 73 | }, | ||
| 74 | }; | ||
| 75 | |||
| 76 | static struct smsc911x_platform_config smsc9220_platdata = { | ||
| 77 | .flags = SMSC911X_USE_32BIT, /* 32-bit SW on 16-bit HW bus */ | ||
| 78 | .phy_interface = PHY_INTERFACE_MODE_MII, | ||
| 79 | .irq_polarity = SMSC911X_IRQ_POLARITY_ACTIVE_LOW, | ||
| 80 | .irq_type = SMSC911X_IRQ_TYPE_PUSH_PULL, | ||
| 81 | }; | ||
| 82 | |||
| 83 | static struct platform_device eth_device = { | ||
| 84 | .name = "smsc911x", | ||
| 85 | .id = 0, | ||
| 86 | .dev = { | ||
| 87 | .platform_data = &smsc9220_platdata, | ||
| 88 | }, | ||
| 89 | .resource = smsc9220_resources, | ||
| 90 | .num_resources = ARRAY_SIZE(smsc9220_resources), | ||
| 91 | }; | ||
| 92 | |||
| 93 | /* KEYSC */ | ||
| 94 | static struct sh_keysc_info keysc_platdata = { | ||
| 95 | .mode = SH_KEYSC_MODE_6, | ||
| 96 | .scan_timing = 3, | ||
| 97 | .delay = 100, | ||
| 98 | .keycodes = { | ||
| 99 | KEY_NUMERIC_STAR, KEY_NUMERIC_0, KEY_NUMERIC_POUND, | ||
| 100 | 0, 0, 0, 0, 0, | ||
| 101 | KEY_NUMERIC_7, KEY_NUMERIC_8, KEY_NUMERIC_9, | ||
| 102 | 0, KEY_DOWN, 0, 0, 0, | ||
| 103 | KEY_NUMERIC_4, KEY_NUMERIC_5, KEY_NUMERIC_6, | ||
| 104 | KEY_LEFT, KEY_ENTER, KEY_RIGHT, 0, 0, | ||
| 105 | KEY_NUMERIC_1, KEY_NUMERIC_2, KEY_NUMERIC_3, | ||
| 106 | 0, KEY_UP, 0, 0, 0, | ||
| 107 | 0, 0, 0, 0, 0, 0, 0, 0, | ||
| 108 | 0, 0, 0, 0, 0, 0, 0, 0, | ||
| 109 | 0, 0, 0, 0, 0, 0, 0, 0, | ||
| 110 | 0, 0, 0, 0, 0, 0, 0, 0, | ||
| 111 | }, | ||
| 112 | }; | ||
| 113 | |||
| 114 | static struct resource keysc_resources[] = { | ||
| 115 | [0] = { | ||
| 116 | .name = "KEYSC", | ||
| 117 | .start = 0xe61b0000, | ||
| 118 | .end = 0xe61b0098 - 1, | ||
| 119 | .flags = IORESOURCE_MEM, | ||
| 120 | }, | ||
| 121 | [1] = { | ||
| 122 | .start = gic_spi(71), | ||
| 123 | .flags = IORESOURCE_IRQ, | ||
| 124 | }, | ||
| 125 | }; | ||
| 126 | |||
| 127 | static struct platform_device keysc_device = { | ||
| 128 | .name = "sh_keysc", | ||
| 129 | .id = 0, | ||
| 130 | .num_resources = ARRAY_SIZE(keysc_resources), | ||
| 131 | .resource = keysc_resources, | ||
| 132 | .dev = { | ||
| 133 | .platform_data = &keysc_platdata, | ||
| 134 | }, | ||
| 135 | }; | ||
| 136 | |||
| 137 | /* GPIO KEY */ | ||
| 138 | #define GPIO_KEY(c, g, d) { .code = c, .gpio = g, .desc = d, .active_low = 1 } | ||
| 139 | |||
| 140 | static struct gpio_keys_button gpio_buttons[] = { | ||
| 141 | GPIO_KEY(KEY_VOLUMEUP, 56, "+"), /* S2: VOL+ [IRQ9] */ | ||
| 142 | GPIO_KEY(KEY_VOLUMEDOWN, 54, "-"), /* S3: VOL- [IRQ10] */ | ||
| 143 | GPIO_KEY(KEY_MENU, 27, "Menu"), /* S4: MENU [IRQ30] */ | ||
| 144 | GPIO_KEY(KEY_HOMEPAGE, 26, "Home"), /* S5: HOME [IRQ31] */ | ||
| 145 | GPIO_KEY(KEY_BACK, 11, "Back"), /* S6: BACK [IRQ0] */ | ||
| 146 | GPIO_KEY(KEY_PHONE, 238, "Tel"), /* S7: TEL [IRQ11] */ | ||
| 147 | GPIO_KEY(KEY_POWER, 239, "C1"), /* S8: CAM [IRQ13] */ | ||
| 148 | GPIO_KEY(KEY_MAIL, 224, "Mail"), /* S9: MAIL [IRQ3] */ | ||
| 149 | /* Omitted button "C3?": 223 - S10: CUST [IRQ8] */ | ||
| 150 | GPIO_KEY(KEY_CAMERA, 164, "C2"), /* S11: CAM_HALF [IRQ25] */ | ||
| 151 | /* Omitted button "?": 152 - S12: CAM_FULL [No IRQ] */ | ||
| 152 | }; | ||
| 153 | |||
| 154 | static struct gpio_keys_platform_data gpio_key_info = { | ||
| 155 | .buttons = gpio_buttons, | ||
| 156 | .nbuttons = ARRAY_SIZE(gpio_buttons), | ||
| 157 | }; | ||
| 158 | |||
| 159 | static struct platform_device gpio_keys_device = { | ||
| 160 | .name = "gpio-keys", | ||
| 161 | .id = -1, | ||
| 162 | .dev = { | ||
| 163 | .platform_data = &gpio_key_info, | ||
| 164 | }, | ||
| 165 | }; | ||
| 166 | |||
| 167 | /* GPIO LED */ | ||
| 168 | #define GPIO_LED(n, g) { .name = n, .gpio = g } | ||
| 169 | |||
| 170 | static struct gpio_led gpio_leds[] = { | ||
| 171 | GPIO_LED("G", 20), /* PORT20 [GPO0] -> LED7 -> "G" */ | ||
| 172 | GPIO_LED("H", 21), /* PORT21 [GPO1] -> LED8 -> "H" */ | ||
| 173 | GPIO_LED("J", 22), /* PORT22 [GPO2] -> LED9 -> "J" */ | ||
| 174 | }; | ||
| 175 | |||
| 176 | static struct gpio_led_platform_data gpio_leds_info = { | ||
| 177 | .leds = gpio_leds, | ||
| 178 | .num_leds = ARRAY_SIZE(gpio_leds), | ||
| 179 | }; | ||
| 180 | |||
| 181 | static struct platform_device gpio_leds_device = { | ||
| 182 | .name = "leds-gpio", | ||
| 183 | .id = -1, | ||
| 184 | .dev = { | ||
| 185 | .platform_data = &gpio_leds_info, | ||
| 186 | }, | ||
| 187 | }; | ||
| 188 | |||
| 189 | /* TPU LED */ | ||
| 190 | static struct resource tpu1_pwm_resources[] = { | ||
| 191 | [0] = { | ||
| 192 | .start = 0xe6610000, | ||
| 193 | .end = 0xe66100ff, | ||
| 194 | .flags = IORESOURCE_MEM, | ||
| 195 | }, | ||
| 196 | }; | ||
| 197 | |||
| 198 | static struct platform_device tpu1_pwm_device = { | ||
| 199 | .name = "renesas-tpu-pwm", | ||
| 200 | .id = 1, | ||
| 201 | .num_resources = ARRAY_SIZE(tpu1_pwm_resources), | ||
| 202 | .resource = tpu1_pwm_resources, | ||
| 203 | }; | ||
| 204 | |||
| 205 | static struct resource tpu2_pwm_resources[] = { | ||
| 206 | [0] = { | ||
| 207 | .start = 0xe6620000, | ||
| 208 | .end = 0xe66200ff, | ||
| 209 | .flags = IORESOURCE_MEM, | ||
| 210 | }, | ||
| 211 | }; | ||
| 212 | |||
| 213 | static struct platform_device tpu2_pwm_device = { | ||
| 214 | .name = "renesas-tpu-pwm", | ||
| 215 | .id = 2, | ||
| 216 | .num_resources = ARRAY_SIZE(tpu2_pwm_resources), | ||
| 217 | .resource = tpu2_pwm_resources, | ||
| 218 | }; | ||
| 219 | |||
| 220 | static struct resource tpu3_pwm_resources[] = { | ||
| 221 | [0] = { | ||
| 222 | .start = 0xe6630000, | ||
| 223 | .end = 0xe66300ff, | ||
| 224 | .flags = IORESOURCE_MEM, | ||
| 225 | }, | ||
| 226 | }; | ||
| 227 | |||
| 228 | static struct platform_device tpu3_pwm_device = { | ||
| 229 | .name = "renesas-tpu-pwm", | ||
| 230 | .id = 3, | ||
| 231 | .num_resources = ARRAY_SIZE(tpu3_pwm_resources), | ||
| 232 | .resource = tpu3_pwm_resources, | ||
| 233 | }; | ||
| 234 | |||
| 235 | static struct resource tpu4_pwm_resources[] = { | ||
| 236 | [0] = { | ||
| 237 | .start = 0xe6640000, | ||
| 238 | .end = 0xe66400ff, | ||
| 239 | .flags = IORESOURCE_MEM, | ||
| 240 | }, | ||
| 241 | }; | ||
| 242 | |||
| 243 | static struct platform_device tpu4_pwm_device = { | ||
| 244 | .name = "renesas-tpu-pwm", | ||
| 245 | .id = 4, | ||
| 246 | .num_resources = ARRAY_SIZE(tpu4_pwm_resources), | ||
| 247 | .resource = tpu4_pwm_resources, | ||
| 248 | }; | ||
| 249 | |||
| 250 | static struct pwm_lookup pwm_lookup[] = { | ||
| 251 | PWM_LOOKUP("renesas-tpu-pwm.1", 2, "leds-pwm.0", "V2513"), | ||
| 252 | PWM_LOOKUP("renesas-tpu-pwm.2", 1, "leds-pwm.0", "V2515"), | ||
| 253 | PWM_LOOKUP("renesas-tpu-pwm.3", 0, "leds-pwm.0", "KEYLED"), | ||
| 254 | PWM_LOOKUP("renesas-tpu-pwm.4", 1, "leds-pwm.0", "V2514"), | ||
| 255 | }; | ||
| 256 | |||
| 257 | static struct led_pwm tpu_pwm_leds[] = { | ||
| 258 | { | ||
| 259 | .name = "V2513", | ||
| 260 | .max_brightness = 1000, | ||
| 261 | }, { | ||
| 262 | .name = "V2515", | ||
| 263 | .max_brightness = 1000, | ||
| 264 | }, { | ||
| 265 | .name = "KEYLED", | ||
| 266 | .max_brightness = 1000, | ||
| 267 | }, { | ||
| 268 | .name = "V2514", | ||
| 269 | .max_brightness = 1000, | ||
| 270 | }, | ||
| 271 | }; | ||
| 272 | |||
| 273 | static struct led_pwm_platform_data leds_pwm_pdata = { | ||
| 274 | .num_leds = ARRAY_SIZE(tpu_pwm_leds), | ||
| 275 | .leds = tpu_pwm_leds, | ||
| 276 | }; | ||
| 277 | |||
| 278 | static struct platform_device leds_pwm_device = { | ||
| 279 | .name = "leds-pwm", | ||
| 280 | .id = 0, | ||
| 281 | .dev = { | ||
| 282 | .platform_data = &leds_pwm_pdata, | ||
| 283 | }, | ||
| 284 | }; | ||
| 285 | |||
| 286 | /* Fixed 1.8V regulator to be used by MMCIF */ | ||
| 287 | static struct regulator_consumer_supply fixed1v8_power_consumers[] = | ||
| 288 | { | ||
| 289 | REGULATOR_SUPPLY("vmmc", "sh_mmcif.0"), | ||
| 290 | REGULATOR_SUPPLY("vqmmc", "sh_mmcif.0"), | ||
| 291 | }; | ||
| 292 | |||
| 293 | /* MMCIF */ | ||
| 294 | static struct resource mmcif_resources[] = { | ||
| 295 | [0] = { | ||
| 296 | .name = "MMCIF", | ||
| 297 | .start = 0xe6bd0000, | ||
| 298 | .end = 0xe6bd00ff, | ||
| 299 | .flags = IORESOURCE_MEM, | ||
| 300 | }, | ||
| 301 | [1] = { | ||
| 302 | .start = gic_spi(140), | ||
| 303 | .flags = IORESOURCE_IRQ, | ||
| 304 | }, | ||
| 305 | [2] = { | ||
| 306 | .start = gic_spi(141), | ||
| 307 | .flags = IORESOURCE_IRQ, | ||
| 308 | }, | ||
| 309 | }; | ||
| 310 | |||
| 311 | static struct sh_mmcif_plat_data mmcif_info = { | ||
| 312 | .ocr = MMC_VDD_165_195, | ||
| 313 | .caps = MMC_CAP_8_BIT_DATA | MMC_CAP_NONREMOVABLE, | ||
| 314 | }; | ||
| 315 | |||
| 316 | static struct platform_device mmcif_device = { | ||
| 317 | .name = "sh_mmcif", | ||
| 318 | .id = 0, | ||
| 319 | .dev = { | ||
| 320 | .platform_data = &mmcif_info, | ||
| 321 | }, | ||
| 322 | .num_resources = ARRAY_SIZE(mmcif_resources), | ||
| 323 | .resource = mmcif_resources, | ||
| 324 | }; | ||
| 325 | |||
| 326 | /* Fixed 3.3V regulator to be used by SDHI0 and SDHI1 */ | ||
| 327 | static struct regulator_consumer_supply fixed3v3_power_consumers[] = | ||
| 328 | { | ||
| 329 | REGULATOR_SUPPLY("vmmc", "sh_mobile_sdhi.0"), | ||
| 330 | REGULATOR_SUPPLY("vqmmc", "sh_mobile_sdhi.0"), | ||
| 331 | REGULATOR_SUPPLY("vmmc", "sh_mobile_sdhi.1"), | ||
| 332 | REGULATOR_SUPPLY("vqmmc", "sh_mobile_sdhi.1"), | ||
| 333 | }; | ||
| 334 | |||
| 335 | /* SDHI0 */ | ||
| 336 | static struct sh_mobile_sdhi_info sdhi0_info = { | ||
| 337 | .tmio_caps = MMC_CAP_SD_HIGHSPEED, | ||
| 338 | .tmio_flags = TMIO_MMC_WRPROTECT_DISABLE | TMIO_MMC_HAS_IDLE_WAIT, | ||
| 339 | }; | ||
| 340 | |||
| 341 | static struct resource sdhi0_resources[] = { | ||
| 342 | [0] = { | ||
| 343 | .name = "SDHI0", | ||
| 344 | .start = 0xee100000, | ||
| 345 | .end = 0xee1000ff, | ||
| 346 | .flags = IORESOURCE_MEM, | ||
| 347 | }, | ||
| 348 | [1] = { | ||
| 349 | .start = gic_spi(83), | ||
| 350 | .flags = IORESOURCE_IRQ, | ||
| 351 | }, | ||
| 352 | [2] = { | ||
| 353 | .start = gic_spi(84), | ||
| 354 | .flags = IORESOURCE_IRQ, | ||
| 355 | }, | ||
| 356 | [3] = { | ||
| 357 | .start = gic_spi(85), | ||
| 358 | .flags = IORESOURCE_IRQ, | ||
| 359 | }, | ||
| 360 | }; | ||
| 361 | |||
| 362 | static struct platform_device sdhi0_device = { | ||
| 363 | .name = "sh_mobile_sdhi", | ||
| 364 | .id = 0, | ||
| 365 | .num_resources = ARRAY_SIZE(sdhi0_resources), | ||
| 366 | .resource = sdhi0_resources, | ||
| 367 | .dev = { | ||
| 368 | .platform_data = &sdhi0_info, | ||
| 369 | }, | ||
| 370 | }; | ||
| 371 | |||
| 372 | /* SDHI1 */ | ||
| 373 | static struct sh_mobile_sdhi_info sdhi1_info = { | ||
| 374 | .tmio_caps = MMC_CAP_NONREMOVABLE | MMC_CAP_SDIO_IRQ, | ||
| 375 | .tmio_flags = TMIO_MMC_WRPROTECT_DISABLE | TMIO_MMC_HAS_IDLE_WAIT, | ||
| 376 | }; | ||
| 377 | |||
| 378 | static struct resource sdhi1_resources[] = { | ||
| 379 | [0] = { | ||
| 380 | .name = "SDHI1", | ||
| 381 | .start = 0xee120000, | ||
| 382 | .end = 0xee1200ff, | ||
| 383 | .flags = IORESOURCE_MEM, | ||
| 384 | }, | ||
| 385 | [1] = { | ||
| 386 | .start = gic_spi(87), | ||
| 387 | .flags = IORESOURCE_IRQ, | ||
| 388 | }, | ||
| 389 | [2] = { | ||
| 390 | .start = gic_spi(88), | ||
| 391 | .flags = IORESOURCE_IRQ, | ||
| 392 | }, | ||
| 393 | [3] = { | ||
| 394 | .start = gic_spi(89), | ||
| 395 | .flags = IORESOURCE_IRQ, | ||
| 396 | }, | ||
| 397 | }; | ||
| 398 | |||
| 399 | static struct platform_device sdhi1_device = { | ||
| 400 | .name = "sh_mobile_sdhi", | ||
| 401 | .id = 1, | ||
| 402 | .num_resources = ARRAY_SIZE(sdhi1_resources), | ||
| 403 | .resource = sdhi1_resources, | ||
| 404 | .dev = { | ||
| 405 | .platform_data = &sdhi1_info, | ||
| 406 | }, | ||
| 407 | }; | ||
| 408 | |||
| 409 | static struct platform_device *kota2_devices[] __initdata = { | ||
| 410 | ð_device, | ||
| 411 | &keysc_device, | ||
| 412 | &gpio_keys_device, | ||
| 413 | &gpio_leds_device, | ||
| 414 | &tpu1_pwm_device, | ||
| 415 | &tpu2_pwm_device, | ||
| 416 | &tpu3_pwm_device, | ||
| 417 | &tpu4_pwm_device, | ||
| 418 | &leds_pwm_device, | ||
| 419 | &mmcif_device, | ||
| 420 | &sdhi0_device, | ||
| 421 | &sdhi1_device, | ||
| 422 | }; | ||
| 423 | |||
| 424 | static unsigned long pin_pullup_conf[] = { | ||
| 425 | PIN_CONF_PACKED(PIN_CONFIG_BIAS_PULL_UP, 0), | ||
| 426 | }; | ||
| 427 | |||
| 428 | static const struct pinctrl_map kota2_pinctrl_map[] = { | ||
| 429 | /* KEYSC */ | ||
| 430 | PIN_MAP_MUX_GROUP_DEFAULT("sh_keysc.0", "pfc-sh73a0", | ||
| 431 | "keysc_in8", "keysc"), | ||
| 432 | PIN_MAP_MUX_GROUP_DEFAULT("sh_keysc.0", "pfc-sh73a0", | ||
| 433 | "keysc_out04", "keysc"), | ||
| 434 | PIN_MAP_MUX_GROUP_DEFAULT("sh_keysc.0", "pfc-sh73a0", | ||
| 435 | "keysc_out5", "keysc"), | ||
| 436 | PIN_MAP_MUX_GROUP_DEFAULT("sh_keysc.0", "pfc-sh73a0", | ||
| 437 | "keysc_out6_0", "keysc"), | ||
| 438 | PIN_MAP_MUX_GROUP_DEFAULT("sh_keysc.0", "pfc-sh73a0", | ||
| 439 | "keysc_out7_0", "keysc"), | ||
| 440 | PIN_MAP_MUX_GROUP_DEFAULT("sh_keysc.0", "pfc-sh73a0", | ||
| 441 | "keysc_out8_0", "keysc"), | ||
| 442 | PIN_MAP_CONFIGS_GROUP_DEFAULT("sh_keysc.0", "pfc-sh73a0", | ||
| 443 | "keysc_in8", pin_pullup_conf), | ||
| 444 | /* MMCIF */ | ||
| 445 | PIN_MAP_MUX_GROUP_DEFAULT("sh_mmcif.0", "pfc-sh73a0", | ||
| 446 | "mmc0_data8_0", "mmc0"), | ||
| 447 | PIN_MAP_MUX_GROUP_DEFAULT("sh_mmcif.0", "pfc-sh73a0", | ||
| 448 | "mmc0_ctrl_0", "mmc0"), | ||
| 449 | PIN_MAP_CONFIGS_PIN_DEFAULT("sh_mmcif.0", "pfc-sh73a0", | ||
| 450 | "PORT279", pin_pullup_conf), | ||
| 451 | PIN_MAP_CONFIGS_GROUP_DEFAULT("sh_mmcif.0", "pfc-sh73a0", | ||
| 452 | "mmc0_data8_0", pin_pullup_conf), | ||
| 453 | /* SCIFA2 (UART2) */ | ||
| 454 | PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.2", "pfc-sh73a0", | ||
| 455 | "scifa2_data_0", "scifa2"), | ||
| 456 | PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.2", "pfc-sh73a0", | ||
| 457 | "scifa2_ctrl_0", "scifa2"), | ||
| 458 | /* SCIFA4 (UART1) */ | ||
| 459 | PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.4", "pfc-sh73a0", | ||
| 460 | "scifa4_data", "scifa4"), | ||
| 461 | PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.4", "pfc-sh73a0", | ||
| 462 | "scifa4_ctrl", "scifa4"), | ||
| 463 | /* SCIFB (BT) */ | ||
| 464 | PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.8", "pfc-sh73a0", | ||
| 465 | "scifb_data_0", "scifb"), | ||
| 466 | PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.8", "pfc-sh73a0", | ||
| 467 | "scifb_clk_0", "scifb"), | ||
| 468 | PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.8", "pfc-sh73a0", | ||
| 469 | "scifb_ctrl_0", "scifb"), | ||
| 470 | /* SDHI0 (microSD) */ | ||
| 471 | PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "pfc-sh73a0", | ||
| 472 | "sdhi0_data4", "sdhi0"), | ||
| 473 | PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "pfc-sh73a0", | ||
| 474 | "sdhi0_ctrl", "sdhi0"), | ||
| 475 | PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "pfc-sh73a0", | ||
| 476 | "sdhi0_cd", "sdhi0"), | ||
| 477 | PIN_MAP_CONFIGS_GROUP_DEFAULT("sh_mobile_sdhi.0", "pfc-sh73a0", | ||
| 478 | "sdhi0_data4", pin_pullup_conf), | ||
| 479 | PIN_MAP_CONFIGS_PIN_DEFAULT("sh_mobile_sdhi.0", "pfc-sh73a0", | ||
| 480 | "PORT256", pin_pullup_conf), | ||
| 481 | PIN_MAP_CONFIGS_PIN_DEFAULT("sh_mobile_sdhi.0", "pfc-sh73a0", | ||
| 482 | "PORT251", pin_pullup_conf), | ||
| 483 | /* SDHI1 (BCM4330) */ | ||
| 484 | PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.1", "pfc-sh73a0", | ||
| 485 | "sdhi1_data4", "sdhi1"), | ||
| 486 | PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.1", "pfc-sh73a0", | ||
| 487 | "sdhi1_ctrl", "sdhi1"), | ||
| 488 | PIN_MAP_CONFIGS_GROUP_DEFAULT("sh_mobile_sdhi.1", "pfc-sh73a0", | ||
| 489 | "sdhi1_data4", pin_pullup_conf), | ||
| 490 | PIN_MAP_CONFIGS_PIN_DEFAULT("sh_mobile_sdhi.1", "pfc-sh73a0", | ||
| 491 | "PORT263", pin_pullup_conf), | ||
| 492 | /* SMSC911X */ | ||
| 493 | PIN_MAP_MUX_GROUP_DEFAULT("smsc911x.0", "pfc-sh73a0", | ||
| 494 | "bsc_data_0_7", "bsc"), | ||
| 495 | PIN_MAP_MUX_GROUP_DEFAULT("smsc911x.0", "pfc-sh73a0", | ||
| 496 | "bsc_data_8_15", "bsc"), | ||
| 497 | PIN_MAP_MUX_GROUP_DEFAULT("smsc911x.0", "pfc-sh73a0", | ||
| 498 | "bsc_cs5_a", "bsc"), | ||
| 499 | PIN_MAP_MUX_GROUP_DEFAULT("smsc911x.0", "pfc-sh73a0", | ||
| 500 | "bsc_we0", "bsc"), | ||
| 501 | /* TPU */ | ||
| 502 | PIN_MAP_MUX_GROUP_DEFAULT("renesas-tpu-pwm.1", "pfc-sh73a0", | ||
| 503 | "tpu1_to2", "tpu1"), | ||
| 504 | PIN_MAP_MUX_GROUP_DEFAULT("renesas-tpu-pwm.2", "pfc-sh73a0", | ||
| 505 | "tpu2_to1", "tpu2"), | ||
| 506 | PIN_MAP_MUX_GROUP_DEFAULT("renesas-tpu-pwm.3", "pfc-sh73a0", | ||
| 507 | "tpu3_to0", "tpu3"), | ||
| 508 | PIN_MAP_MUX_GROUP_DEFAULT("renesas-tpu-pwm.4", "pfc-sh73a0", | ||
| 509 | "tpu4_to1", "tpu4"), | ||
| 510 | }; | ||
| 511 | |||
| 512 | static void __init kota2_init(void) | ||
| 513 | { | ||
| 514 | regulator_register_always_on(0, "fixed-1.8V", fixed1v8_power_consumers, | ||
| 515 | ARRAY_SIZE(fixed1v8_power_consumers), 1800000); | ||
| 516 | regulator_register_always_on(1, "fixed-3.3V", fixed3v3_power_consumers, | ||
| 517 | ARRAY_SIZE(fixed3v3_power_consumers), 3300000); | ||
| 518 | regulator_register_fixed(2, dummy_supplies, ARRAY_SIZE(dummy_supplies)); | ||
| 519 | |||
| 520 | pinctrl_register_mappings(kota2_pinctrl_map, | ||
| 521 | ARRAY_SIZE(kota2_pinctrl_map)); | ||
| 522 | pwm_add_table(pwm_lookup, ARRAY_SIZE(pwm_lookup)); | ||
| 523 | |||
| 524 | sh73a0_pinmux_init(); | ||
| 525 | |||
| 526 | /* SMSC911X */ | ||
| 527 | gpio_request_one(144, GPIOF_IN, NULL); /* PINTA2 */ | ||
| 528 | gpio_request_one(145, GPIOF_OUT_INIT_HIGH, NULL); /* RESET */ | ||
| 529 | |||
| 530 | /* MMCIF */ | ||
| 531 | gpio_request_one(208, GPIOF_OUT_INIT_HIGH, NULL); /* Reset */ | ||
| 532 | |||
| 533 | #ifdef CONFIG_CACHE_L2X0 | ||
| 534 | /* Early BRESP enable, Shared attribute override enable, 64K*8way */ | ||
| 535 | l2x0_init(IOMEM(0xf0100000), 0x40460000, 0x82000fff); | ||
| 536 | #endif | ||
| 537 | sh73a0_add_standard_devices(); | ||
| 538 | platform_add_devices(kota2_devices, ARRAY_SIZE(kota2_devices)); | ||
| 539 | } | ||
| 540 | |||
| 541 | MACHINE_START(KOTA2, "kota2") | ||
| 542 | .smp = smp_ops(sh73a0_smp_ops), | ||
| 543 | .map_io = sh73a0_map_io, | ||
| 544 | .init_early = sh73a0_add_early_devices, | ||
| 545 | .nr_irqs = NR_IRQS_LEGACY, | ||
| 546 | .init_irq = sh73a0_init_irq, | ||
| 547 | .init_machine = kota2_init, | ||
| 548 | .init_late = shmobile_init_late, | ||
| 549 | .init_time = sh73a0_earlytimer_init, | ||
| 550 | MACHINE_END | ||
diff --git a/arch/arm/mach-shmobile/board-kzm9g-reference.c b/arch/arm/mach-shmobile/board-kzm9g-reference.c index a66a808db012..598e32488410 100644 --- a/arch/arm/mach-shmobile/board-kzm9g-reference.c +++ b/arch/arm/mach-shmobile/board-kzm9g-reference.c | |||
| @@ -52,6 +52,5 @@ DT_MACHINE_START(KZM9G_DT, "kzm9g-reference") | |||
| 52 | .init_early = sh73a0_init_delay, | 52 | .init_early = sh73a0_init_delay, |
| 53 | .nr_irqs = NR_IRQS_LEGACY, | 53 | .nr_irqs = NR_IRQS_LEGACY, |
| 54 | .init_machine = kzm_init, | 54 | .init_machine = kzm_init, |
| 55 | .init_time = shmobile_timer_init, | ||
| 56 | .dt_compat = kzm9g_boards_compat_dt, | 55 | .dt_compat = kzm9g_boards_compat_dt, |
| 57 | MACHINE_END | 56 | MACHINE_END |
diff --git a/arch/arm/mach-shmobile/board-kzm9g.c b/arch/arm/mach-shmobile/board-kzm9g.c index 1068120d339f..f1994968d303 100644 --- a/arch/arm/mach-shmobile/board-kzm9g.c +++ b/arch/arm/mach-shmobile/board-kzm9g.c | |||
| @@ -54,14 +54,14 @@ | |||
| 54 | /* | 54 | /* |
| 55 | * external GPIO | 55 | * external GPIO |
| 56 | */ | 56 | */ |
| 57 | #define GPIO_PCF8575_BASE (GPIO_NR) | 57 | #define GPIO_PCF8575_BASE (310) |
| 58 | #define GPIO_PCF8575_PORT10 (GPIO_NR + 8) | 58 | #define GPIO_PCF8575_PORT10 (GPIO_PCF8575_BASE + 8) |
| 59 | #define GPIO_PCF8575_PORT11 (GPIO_NR + 9) | 59 | #define GPIO_PCF8575_PORT11 (GPIO_PCF8575_BASE + 9) |
| 60 | #define GPIO_PCF8575_PORT12 (GPIO_NR + 10) | 60 | #define GPIO_PCF8575_PORT12 (GPIO_PCF8575_BASE + 10) |
| 61 | #define GPIO_PCF8575_PORT13 (GPIO_NR + 11) | 61 | #define GPIO_PCF8575_PORT13 (GPIO_PCF8575_BASE + 11) |
| 62 | #define GPIO_PCF8575_PORT14 (GPIO_NR + 12) | 62 | #define GPIO_PCF8575_PORT14 (GPIO_PCF8575_BASE + 12) |
| 63 | #define GPIO_PCF8575_PORT15 (GPIO_NR + 13) | 63 | #define GPIO_PCF8575_PORT15 (GPIO_PCF8575_BASE + 13) |
| 64 | #define GPIO_PCF8575_PORT16 (GPIO_NR + 14) | 64 | #define GPIO_PCF8575_PORT16 (GPIO_PCF8575_BASE + 14) |
| 65 | 65 | ||
| 66 | /* Dummy supplies, where voltage doesn't matter */ | 66 | /* Dummy supplies, where voltage doesn't matter */ |
| 67 | static struct regulator_consumer_supply dummy_supplies[] = { | 67 | static struct regulator_consumer_supply dummy_supplies[] = { |
diff --git a/arch/arm/mach-shmobile/board-lager-reference.c b/arch/arm/mach-shmobile/board-lager-reference.c new file mode 100644 index 000000000000..9c316a1b2e32 --- /dev/null +++ b/arch/arm/mach-shmobile/board-lager-reference.c | |||
| @@ -0,0 +1,45 @@ | |||
| 1 | /* | ||
| 2 | * Lager board support - Reference DT implementation | ||
| 3 | * | ||
| 4 | * Copyright (C) 2013 Renesas Solutions Corp. | ||
| 5 | * Copyright (C) 2013 Simon Horman | ||
| 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 | #include <linux/init.h> | ||
| 22 | #include <linux/of_platform.h> | ||
| 23 | #include <mach/r8a7790.h> | ||
| 24 | #include <asm/mach/arch.h> | ||
| 25 | |||
| 26 | static void __init lager_add_standard_devices(void) | ||
| 27 | { | ||
| 28 | /* clocks are setup late during boot in the case of DT */ | ||
| 29 | r8a7790_clock_init(); | ||
| 30 | |||
| 31 | r8a7790_add_dt_devices(); | ||
| 32 | of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); | ||
| 33 | } | ||
| 34 | |||
| 35 | static const char *lager_boards_compat_dt[] __initdata = { | ||
| 36 | "renesas,lager-reference", | ||
| 37 | NULL, | ||
| 38 | }; | ||
| 39 | |||
| 40 | DT_MACHINE_START(LAGER_DT, "lager") | ||
| 41 | .init_early = r8a7790_init_delay, | ||
| 42 | .init_machine = lager_add_standard_devices, | ||
| 43 | .init_time = r8a7790_timer_init, | ||
| 44 | .dt_compat = lager_boards_compat_dt, | ||
| 45 | MACHINE_END | ||
diff --git a/arch/arm/mach-shmobile/board-marzen-reference.c b/arch/arm/mach-shmobile/board-marzen-reference.c index 3d1c439b4998..3f4250a2d4eb 100644 --- a/arch/arm/mach-shmobile/board-marzen-reference.c +++ b/arch/arm/mach-shmobile/board-marzen-reference.c | |||
| @@ -42,6 +42,5 @@ DT_MACHINE_START(MARZEN, "marzen") | |||
| 42 | .nr_irqs = NR_IRQS_LEGACY, | 42 | .nr_irqs = NR_IRQS_LEGACY, |
| 43 | .init_irq = r8a7779_init_irq_dt, | 43 | .init_irq = r8a7779_init_irq_dt, |
| 44 | .init_machine = marzen_init, | 44 | .init_machine = marzen_init, |
| 45 | .init_time = shmobile_timer_init, | ||
| 46 | .dt_compat = marzen_boards_compat_dt, | 45 | .dt_compat = marzen_boards_compat_dt, |
| 47 | MACHINE_END | 46 | MACHINE_END |
diff --git a/arch/arm/mach-shmobile/board-marzen.c b/arch/arm/mach-shmobile/board-marzen.c index ca7fb2e63c60..3f5044fda4e3 100644 --- a/arch/arm/mach-shmobile/board-marzen.c +++ b/arch/arm/mach-shmobile/board-marzen.c | |||
| @@ -30,6 +30,7 @@ | |||
| 30 | #include <linux/dma-mapping.h> | 30 | #include <linux/dma-mapping.h> |
| 31 | #include <linux/pinctrl/machine.h> | 31 | #include <linux/pinctrl/machine.h> |
| 32 | #include <linux/platform_data/gpio-rcar.h> | 32 | #include <linux/platform_data/gpio-rcar.h> |
| 33 | #include <linux/platform_data/usb-rcar-phy.h> | ||
| 33 | #include <linux/regulator/fixed.h> | 34 | #include <linux/regulator/fixed.h> |
| 34 | #include <linux/regulator/machine.h> | 35 | #include <linux/regulator/machine.h> |
| 35 | #include <linux/smsc911x.h> | 36 | #include <linux/smsc911x.h> |
| @@ -39,7 +40,6 @@ | |||
| 39 | #include <linux/mmc/sh_mobile_sdhi.h> | 40 | #include <linux/mmc/sh_mobile_sdhi.h> |
| 40 | #include <linux/mfd/tmio.h> | 41 | #include <linux/mfd/tmio.h> |
| 41 | #include <media/soc_camera.h> | 42 | #include <media/soc_camera.h> |
| 42 | #include <mach/hardware.h> | ||
| 43 | #include <mach/r8a7779.h> | 43 | #include <mach/r8a7779.h> |
| 44 | #include <mach/common.h> | 44 | #include <mach/common.h> |
| 45 | #include <mach/irqs.h> | 45 | #include <mach/irqs.h> |
| @@ -59,7 +59,26 @@ static struct regulator_consumer_supply dummy_supplies[] = { | |||
| 59 | REGULATOR_SUPPLY("vdd33a", "smsc911x"), | 59 | REGULATOR_SUPPLY("vdd33a", "smsc911x"), |
| 60 | }; | 60 | }; |
| 61 | 61 | ||
| 62 | static struct rcar_phy_platform_data usb_phy_platform_data __initdata; | 62 | /* USB PHY */ |
| 63 | static struct resource usb_phy_resources[] = { | ||
| 64 | [0] = { | ||
| 65 | .start = 0xffe70800, | ||
| 66 | .end = 0xffe70900 - 1, | ||
| 67 | .flags = IORESOURCE_MEM, | ||
| 68 | }, | ||
| 69 | }; | ||
| 70 | |||
| 71 | static struct rcar_phy_platform_data usb_phy_platform_data; | ||
| 72 | |||
| 73 | static struct platform_device usb_phy = { | ||
| 74 | .name = "rcar_usb_phy", | ||
| 75 | .id = -1, | ||
| 76 | .dev = { | ||
| 77 | .platform_data = &usb_phy_platform_data, | ||
| 78 | }, | ||
| 79 | .resource = usb_phy_resources, | ||
| 80 | .num_resources = ARRAY_SIZE(usb_phy_resources), | ||
| 81 | }; | ||
| 63 | 82 | ||
| 64 | /* SMSC LAN89218 */ | 83 | /* SMSC LAN89218 */ |
| 65 | static struct resource smsc911x_resources[] = { | 84 | static struct resource smsc911x_resources[] = { |
| @@ -212,6 +231,7 @@ static struct platform_device *marzen_devices[] __initdata = { | |||
| 212 | &thermal_device, | 231 | &thermal_device, |
| 213 | &hspi_device, | 232 | &hspi_device, |
| 214 | &leds_device, | 233 | &leds_device, |
| 234 | &usb_phy, | ||
| 215 | &camera0_device, | 235 | &camera0_device, |
| 216 | &camera1_device, | 236 | &camera1_device, |
| 217 | }; | 237 | }; |
| @@ -274,19 +294,23 @@ static void __init marzen_init(void) | |||
| 274 | r8a7779_init_irq_extpin(1); /* IRQ1 as individual interrupt */ | 294 | r8a7779_init_irq_extpin(1); /* IRQ1 as individual interrupt */ |
| 275 | 295 | ||
| 276 | r8a7779_add_standard_devices(); | 296 | r8a7779_add_standard_devices(); |
| 277 | r8a7779_add_usb_phy_device(&usb_phy_platform_data); | ||
| 278 | r8a7779_add_vin_device(1, &vin_platform_data); | 297 | r8a7779_add_vin_device(1, &vin_platform_data); |
| 279 | r8a7779_add_vin_device(3, &vin_platform_data); | 298 | r8a7779_add_vin_device(3, &vin_platform_data); |
| 280 | platform_add_devices(marzen_devices, ARRAY_SIZE(marzen_devices)); | 299 | platform_add_devices(marzen_devices, ARRAY_SIZE(marzen_devices)); |
| 281 | } | 300 | } |
| 282 | 301 | ||
| 283 | MACHINE_START(MARZEN, "marzen") | 302 | static const char *marzen_boards_compat_dt[] __initdata = { |
| 303 | "renesas,marzen", | ||
| 304 | NULL, | ||
| 305 | }; | ||
| 306 | |||
| 307 | DT_MACHINE_START(MARZEN, "marzen") | ||
| 284 | .smp = smp_ops(r8a7779_smp_ops), | 308 | .smp = smp_ops(r8a7779_smp_ops), |
| 285 | .map_io = r8a7779_map_io, | 309 | .map_io = r8a7779_map_io, |
| 286 | .init_early = r8a7779_add_early_devices, | 310 | .init_early = r8a7779_add_early_devices, |
| 287 | .nr_irqs = NR_IRQS_LEGACY, | 311 | .init_irq = r8a7779_init_irq_dt, |
| 288 | .init_irq = r8a7779_init_irq, | ||
| 289 | .init_machine = marzen_init, | 312 | .init_machine = marzen_init, |
| 290 | .init_late = r8a7779_init_late, | 313 | .init_late = r8a7779_init_late, |
| 314 | .dt_compat = marzen_boards_compat_dt, | ||
| 291 | .init_time = r8a7779_earlytimer_init, | 315 | .init_time = r8a7779_earlytimer_init, |
| 292 | MACHINE_END | 316 | MACHINE_END |
diff --git a/arch/arm/mach-shmobile/headsmp.S b/arch/arm/mach-shmobile/headsmp.S index 2667db806c39..f93751caf5cb 100644 --- a/arch/arm/mach-shmobile/headsmp.S +++ b/arch/arm/mach-shmobile/headsmp.S | |||
| @@ -40,3 +40,52 @@ shmobile_boot_fn: | |||
| 40 | .globl shmobile_boot_arg | 40 | .globl shmobile_boot_arg |
| 41 | shmobile_boot_arg: | 41 | shmobile_boot_arg: |
| 42 | 2: .space 4 | 42 | 2: .space 4 |
| 43 | |||
| 44 | /* | ||
| 45 | * Per-CPU SMP boot function/argument selection code based on MPIDR | ||
| 46 | */ | ||
| 47 | |||
| 48 | ENTRY(shmobile_smp_boot) | ||
| 49 | @ r0 = MPIDR_HWID_BITMASK | ||
| 50 | mrc p15, 0, r1, c0, c0, 5 @ r1 = MPIDR | ||
| 51 | and r0, r1, r0 @ r0 = cpu_logical_map() value | ||
| 52 | mov r1, #0 @ r1 = CPU index | ||
| 53 | adr r5, 1f @ array of per-cpu mpidr values | ||
| 54 | adr r6, 2f @ array of per-cpu functions | ||
| 55 | adr r7, 3f @ array of per-cpu arguments | ||
| 56 | |||
| 57 | shmobile_smp_boot_find_mpidr: | ||
| 58 | ldr r8, [r5, r1, lsl #2] | ||
| 59 | cmp r8, r0 | ||
| 60 | bne shmobile_smp_boot_next | ||
| 61 | |||
| 62 | ldr r9, [r6, r1, lsl #2] | ||
| 63 | cmp r9, #0 | ||
| 64 | bne shmobile_smp_boot_found | ||
| 65 | |||
| 66 | shmobile_smp_boot_next: | ||
| 67 | add r1, r1, #1 | ||
| 68 | cmp r1, #CONFIG_NR_CPUS | ||
| 69 | blo shmobile_smp_boot_find_mpidr | ||
| 70 | |||
| 71 | b shmobile_smp_sleep | ||
| 72 | |||
| 73 | shmobile_smp_boot_found: | ||
| 74 | ldr r0, [r7, r1, lsl #2] | ||
| 75 | mov pc, r9 | ||
| 76 | ENDPROC(shmobile_smp_boot) | ||
| 77 | |||
| 78 | ENTRY(shmobile_smp_sleep) | ||
| 79 | wfi | ||
| 80 | b shmobile_smp_boot | ||
| 81 | ENDPROC(shmobile_smp_sleep) | ||
| 82 | |||
| 83 | .globl shmobile_smp_mpidr | ||
| 84 | shmobile_smp_mpidr: | ||
| 85 | 1: .space CONFIG_NR_CPUS * 4 | ||
| 86 | .globl shmobile_smp_fn | ||
| 87 | shmobile_smp_fn: | ||
| 88 | 2: .space CONFIG_NR_CPUS * 4 | ||
| 89 | .globl shmobile_smp_arg | ||
| 90 | shmobile_smp_arg: | ||
| 91 | 3: .space CONFIG_NR_CPUS * 4 | ||
diff --git a/arch/arm/mach-shmobile/include/mach/common.h b/arch/arm/mach-shmobile/include/mach/common.h index e818f029d8e3..7b938681e756 100644 --- a/arch/arm/mach-shmobile/include/mach/common.h +++ b/arch/arm/mach-shmobile/include/mach/common.h | |||
| @@ -2,7 +2,6 @@ | |||
| 2 | #define __ARCH_MACH_COMMON_H | 2 | #define __ARCH_MACH_COMMON_H |
| 3 | 3 | ||
| 4 | extern void shmobile_earlytimer_init(void); | 4 | extern void shmobile_earlytimer_init(void); |
| 5 | extern void shmobile_timer_init(void); | ||
| 6 | extern void shmobile_setup_delay(unsigned int max_cpu_core_mhz, | 5 | extern void shmobile_setup_delay(unsigned int max_cpu_core_mhz, |
| 7 | unsigned int mult, unsigned int div); | 6 | unsigned int mult, unsigned int div); |
| 8 | struct twd_local_timer; | 7 | struct twd_local_timer; |
| @@ -10,7 +9,16 @@ extern void shmobile_setup_console(void); | |||
| 10 | extern void shmobile_boot_vector(void); | 9 | extern void shmobile_boot_vector(void); |
| 11 | extern unsigned long shmobile_boot_fn; | 10 | extern unsigned long shmobile_boot_fn; |
| 12 | extern unsigned long shmobile_boot_arg; | 11 | extern unsigned long shmobile_boot_arg; |
| 12 | extern void shmobile_smp_boot(void); | ||
| 13 | extern void shmobile_smp_sleep(void); | ||
| 14 | extern void shmobile_smp_hook(unsigned int cpu, unsigned long fn, | ||
| 15 | unsigned long arg); | ||
| 13 | extern void shmobile_boot_scu(void); | 16 | extern void shmobile_boot_scu(void); |
| 17 | extern void shmobile_smp_scu_prepare_cpus(unsigned int max_cpus); | ||
| 18 | extern int shmobile_smp_scu_boot_secondary(unsigned int cpu, | ||
| 19 | struct task_struct *idle); | ||
| 20 | extern void shmobile_smp_scu_cpu_die(unsigned int cpu); | ||
| 21 | extern int shmobile_smp_scu_cpu_kill(unsigned int cpu); | ||
| 14 | struct clk; | 22 | struct clk; |
| 15 | extern int shmobile_clk_init(void); | 23 | extern int shmobile_clk_init(void); |
| 16 | extern void shmobile_handle_irq_intc(struct pt_regs *); | 24 | extern void shmobile_handle_irq_intc(struct pt_regs *); |
diff --git a/arch/arm/mach-shmobile/include/mach/hardware.h b/arch/arm/mach-shmobile/include/mach/hardware.h deleted file mode 100644 index 99264a5ce5e4..000000000000 --- a/arch/arm/mach-shmobile/include/mach/hardware.h +++ /dev/null | |||
| @@ -1,4 +0,0 @@ | |||
| 1 | #ifndef __ASM_MACH_HARDWARE_H | ||
| 2 | #define __ASM_MACH_HARDWARE_H | ||
| 3 | |||
| 4 | #endif /* __ASM_MACH_HARDWARE_H */ | ||
diff --git a/arch/arm/mach-shmobile/include/mach/r8a73a4.h b/arch/arm/mach-shmobile/include/mach/r8a73a4.h index 144a85e29245..f3a9b702da56 100644 --- a/arch/arm/mach-shmobile/include/mach/r8a73a4.h +++ b/arch/arm/mach-shmobile/include/mach/r8a73a4.h | |||
| @@ -2,6 +2,7 @@ | |||
| 2 | #define __ASM_R8A73A4_H__ | 2 | #define __ASM_R8A73A4_H__ |
| 3 | 3 | ||
| 4 | void r8a73a4_add_standard_devices(void); | 4 | void r8a73a4_add_standard_devices(void); |
| 5 | void r8a73a4_add_dt_devices(void); | ||
| 5 | void r8a73a4_clock_init(void); | 6 | void r8a73a4_clock_init(void); |
| 6 | void r8a73a4_pinmux_init(void); | 7 | void r8a73a4_pinmux_init(void); |
| 7 | void r8a73a4_init_delay(void); | 8 | void r8a73a4_init_delay(void); |
diff --git a/arch/arm/mach-shmobile/include/mach/r8a7740.h b/arch/arm/mach-shmobile/include/mach/r8a7740.h index 56f375005fcd..d07932f872b6 100644 --- a/arch/arm/mach-shmobile/include/mach/r8a7740.h +++ b/arch/arm/mach-shmobile/include/mach/r8a7740.h | |||
| @@ -48,7 +48,6 @@ enum { | |||
| 48 | 48 | ||
| 49 | extern void r8a7740_meram_workaround(void); | 49 | extern void r8a7740_meram_workaround(void); |
| 50 | extern void r8a7740_init_delay(void); | 50 | extern void r8a7740_init_delay(void); |
| 51 | extern void r8a7740_init_irq(void); | ||
| 52 | extern void r8a7740_init_irq_of(void); | 51 | extern void r8a7740_init_irq_of(void); |
| 53 | extern void r8a7740_map_io(void); | 52 | extern void r8a7740_map_io(void); |
| 54 | extern void r8a7740_add_early_devices(void); | 53 | extern void r8a7740_add_early_devices(void); |
diff --git a/arch/arm/mach-shmobile/include/mach/r8a7778.h b/arch/arm/mach-shmobile/include/mach/r8a7778.h index 2866704e7afd..adfcf51b163d 100644 --- a/arch/arm/mach-shmobile/include/mach/r8a7778.h +++ b/arch/arm/mach-shmobile/include/mach/r8a7778.h | |||
| @@ -18,21 +18,15 @@ | |||
| 18 | #ifndef __ASM_R8A7778_H__ | 18 | #ifndef __ASM_R8A7778_H__ |
| 19 | #define __ASM_R8A7778_H__ | 19 | #define __ASM_R8A7778_H__ |
| 20 | 20 | ||
| 21 | #include <linux/mmc/sh_mmcif.h> | ||
| 22 | #include <linux/mmc/sh_mobile_sdhi.h> | ||
| 23 | #include <linux/sh_eth.h> | 21 | #include <linux/sh_eth.h> |
| 24 | #include <linux/platform_data/usb-rcar-phy.h> | ||
| 25 | #include <linux/platform_data/camera-rcar.h> | 22 | #include <linux/platform_data/camera-rcar.h> |
| 26 | 23 | ||
| 27 | extern void r8a7778_add_standard_devices(void); | 24 | extern void r8a7778_add_standard_devices(void); |
| 28 | extern void r8a7778_add_standard_devices_dt(void); | 25 | extern void r8a7778_add_standard_devices_dt(void); |
| 29 | extern void r8a7778_add_ether_device(struct sh_eth_plat_data *pdata); | 26 | extern void r8a7778_add_ether_device(struct sh_eth_plat_data *pdata); |
| 30 | extern void r8a7778_add_usb_phy_device(struct rcar_phy_platform_data *pdata); | ||
| 31 | extern void r8a7778_add_i2c_device(int id); | ||
| 32 | extern void r8a7778_add_hspi_device(int id); | ||
| 33 | extern void r8a7778_add_mmc_device(struct sh_mmcif_plat_data *info); | ||
| 34 | extern void r8a7778_add_vin_device(int id, | 27 | extern void r8a7778_add_vin_device(int id, |
| 35 | struct rcar_vin_platform_data *pdata); | 28 | struct rcar_vin_platform_data *pdata); |
| 29 | extern void r8a7778_add_dt_devices(void); | ||
| 36 | 30 | ||
| 37 | extern void r8a7778_init_late(void); | 31 | extern void r8a7778_init_late(void); |
| 38 | extern void r8a7778_init_delay(void); | 32 | extern void r8a7778_init_delay(void); |
| @@ -40,6 +34,5 @@ extern void r8a7778_init_irq_dt(void); | |||
| 40 | extern void r8a7778_clock_init(void); | 34 | extern void r8a7778_clock_init(void); |
| 41 | extern void r8a7778_init_irq_extpin(int irlm); | 35 | extern void r8a7778_init_irq_extpin(int irlm); |
| 42 | extern void r8a7778_pinmux_init(void); | 36 | extern void r8a7778_pinmux_init(void); |
| 43 | extern void r8a7778_sdhi_init(int id, struct sh_mobile_sdhi_info *info); | ||
| 44 | 37 | ||
| 45 | #endif /* __ASM_R8A7778_H__ */ | 38 | #endif /* __ASM_R8A7778_H__ */ |
diff --git a/arch/arm/mach-shmobile/include/mach/r8a7779.h b/arch/arm/mach-shmobile/include/mach/r8a7779.h index 6d2b6417fe2a..11c740047e14 100644 --- a/arch/arm/mach-shmobile/include/mach/r8a7779.h +++ b/arch/arm/mach-shmobile/include/mach/r8a7779.h | |||
| @@ -4,7 +4,6 @@ | |||
| 4 | #include <linux/sh_clk.h> | 4 | #include <linux/sh_clk.h> |
| 5 | #include <linux/pm_domain.h> | 5 | #include <linux/pm_domain.h> |
| 6 | #include <linux/sh_eth.h> | 6 | #include <linux/sh_eth.h> |
| 7 | #include <linux/platform_data/usb-rcar-phy.h> | ||
| 8 | #include <linux/platform_data/camera-rcar.h> | 7 | #include <linux/platform_data/camera-rcar.h> |
| 9 | 8 | ||
| 10 | struct platform_device; | 9 | struct platform_device; |
| @@ -26,7 +25,6 @@ static inline struct r8a7779_pm_ch *to_r8a7779_ch(struct generic_pm_domain *d) | |||
| 26 | } | 25 | } |
| 27 | 26 | ||
| 28 | extern void r8a7779_init_delay(void); | 27 | extern void r8a7779_init_delay(void); |
| 29 | extern void r8a7779_init_irq(void); | ||
| 30 | extern void r8a7779_init_irq_extpin(int irlm); | 28 | extern void r8a7779_init_irq_extpin(int irlm); |
| 31 | extern void r8a7779_init_irq_dt(void); | 29 | extern void r8a7779_init_irq_dt(void); |
| 32 | extern void r8a7779_map_io(void); | 30 | extern void r8a7779_map_io(void); |
| @@ -35,7 +33,6 @@ extern void r8a7779_add_early_devices(void); | |||
| 35 | extern void r8a7779_add_standard_devices(void); | 33 | extern void r8a7779_add_standard_devices(void); |
| 36 | extern void r8a7779_add_standard_devices_dt(void); | 34 | extern void r8a7779_add_standard_devices_dt(void); |
| 37 | extern void r8a7779_add_ether_device(struct sh_eth_plat_data *pdata); | 35 | extern void r8a7779_add_ether_device(struct sh_eth_plat_data *pdata); |
| 38 | extern void r8a7779_add_usb_phy_device(struct rcar_phy_platform_data *pdata); | ||
| 39 | extern void r8a7779_add_vin_device(int idx, | 36 | extern void r8a7779_add_vin_device(int idx, |
| 40 | struct rcar_vin_platform_data *pdata); | 37 | struct rcar_vin_platform_data *pdata); |
| 41 | extern void r8a7779_init_late(void); | 38 | extern void r8a7779_init_late(void); |
diff --git a/arch/arm/mach-shmobile/include/mach/r8a7790.h b/arch/arm/mach-shmobile/include/mach/r8a7790.h index 7aaef409a059..788d55952091 100644 --- a/arch/arm/mach-shmobile/include/mach/r8a7790.h +++ b/arch/arm/mach-shmobile/include/mach/r8a7790.h | |||
| @@ -2,6 +2,7 @@ | |||
| 2 | #define __ASM_R8A7790_H__ | 2 | #define __ASM_R8A7790_H__ |
| 3 | 3 | ||
| 4 | void r8a7790_add_standard_devices(void); | 4 | void r8a7790_add_standard_devices(void); |
| 5 | void r8a7790_add_dt_devices(void); | ||
| 5 | void r8a7790_clock_init(void); | 6 | void r8a7790_clock_init(void); |
| 6 | void r8a7790_pinmux_init(void); | 7 | void r8a7790_pinmux_init(void); |
| 7 | void r8a7790_init_delay(void); | 8 | void r8a7790_init_delay(void); |
diff --git a/arch/arm/mach-shmobile/include/mach/sh73a0.h b/arch/arm/mach-shmobile/include/mach/sh73a0.h index 680dc5f1655a..359b582dc270 100644 --- a/arch/arm/mach-shmobile/include/mach/sh73a0.h +++ b/arch/arm/mach-shmobile/include/mach/sh73a0.h | |||
| @@ -1,8 +1,6 @@ | |||
| 1 | #ifndef __ASM_SH73A0_H__ | 1 | #ifndef __ASM_SH73A0_H__ |
| 2 | #define __ASM_SH73A0_H__ | 2 | #define __ASM_SH73A0_H__ |
| 3 | 3 | ||
| 4 | #define GPIO_NR 310 | ||
| 5 | |||
| 6 | /* DMA slave IDs */ | 4 | /* DMA slave IDs */ |
| 7 | enum { | 5 | enum { |
| 8 | SHDMA_SLAVE_INVALID, | 6 | SHDMA_SLAVE_INVALID, |
diff --git a/arch/arm/mach-shmobile/intc-r8a7740.c b/arch/arm/mach-shmobile/intc-r8a7740.c deleted file mode 100644 index 8871f7717dc8..000000000000 --- a/arch/arm/mach-shmobile/intc-r8a7740.c +++ /dev/null | |||
| @@ -1,68 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * R8A7740 processor support | ||
| 3 | * | ||
| 4 | * Copyright (C) 2011 Renesas Solutions Corp. | ||
| 5 | * Copyright (C) 2011 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 | #include <linux/init.h> | ||
| 22 | #include <linux/io.h> | ||
| 23 | #include <linux/irqchip.h> | ||
| 24 | #include <linux/irqchip/arm-gic.h> | ||
| 25 | |||
| 26 | static void __init r8a7740_init_irq_common(void) | ||
| 27 | { | ||
| 28 | void __iomem *intc_prio_base = ioremap_nocache(0xe6900010, 0x10); | ||
| 29 | void __iomem *intc_msk_base = ioremap_nocache(0xe6900040, 0x10); | ||
| 30 | void __iomem *pfc_inta_ctrl = ioremap_nocache(0xe605807c, 0x4); | ||
| 31 | |||
| 32 | /* route signals to GIC */ | ||
| 33 | iowrite32(0x0, pfc_inta_ctrl); | ||
| 34 | |||
| 35 | /* | ||
| 36 | * To mask the shared interrupt to SPI 149 we must ensure to set | ||
| 37 | * PRIO *and* MASK. Else we run into IRQ floods when registering | ||
| 38 | * the intc_irqpin devices | ||
| 39 | */ | ||
| 40 | iowrite32(0x0, intc_prio_base + 0x0); | ||
| 41 | iowrite32(0x0, intc_prio_base + 0x4); | ||
| 42 | iowrite32(0x0, intc_prio_base + 0x8); | ||
| 43 | iowrite32(0x0, intc_prio_base + 0xc); | ||
| 44 | iowrite8(0xff, intc_msk_base + 0x0); | ||
| 45 | iowrite8(0xff, intc_msk_base + 0x4); | ||
| 46 | iowrite8(0xff, intc_msk_base + 0x8); | ||
| 47 | iowrite8(0xff, intc_msk_base + 0xc); | ||
| 48 | |||
| 49 | iounmap(intc_prio_base); | ||
| 50 | iounmap(intc_msk_base); | ||
| 51 | iounmap(pfc_inta_ctrl); | ||
| 52 | } | ||
| 53 | |||
| 54 | void __init r8a7740_init_irq_of(void) | ||
| 55 | { | ||
| 56 | irqchip_init(); | ||
| 57 | r8a7740_init_irq_common(); | ||
| 58 | } | ||
| 59 | |||
| 60 | void __init r8a7740_init_irq(void) | ||
| 61 | { | ||
| 62 | void __iomem *gic_dist_base = ioremap_nocache(0xc2800000, 0x1000); | ||
| 63 | void __iomem *gic_cpu_base = ioremap_nocache(0xc2000000, 0x1000); | ||
| 64 | |||
| 65 | /* initialize the Generic Interrupt Controller PL390 r0p0 */ | ||
| 66 | gic_init(0, 29, gic_dist_base, gic_cpu_base); | ||
| 67 | r8a7740_init_irq_common(); | ||
| 68 | } | ||
diff --git a/arch/arm/mach-shmobile/intc-r8a7779.c b/arch/arm/mach-shmobile/intc-r8a7779.c deleted file mode 100644 index b86dc8908724..000000000000 --- a/arch/arm/mach-shmobile/intc-r8a7779.c +++ /dev/null | |||
| @@ -1,131 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * r8a7779 processor support - INTC hardware block | ||
| 3 | * | ||
| 4 | * Copyright (C) 2011 Renesas Solutions Corp. | ||
| 5 | * Copyright (C) 2011 Magnus Damm | ||
| 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 | #include <linux/kernel.h> | ||
| 21 | #include <linux/init.h> | ||
| 22 | #include <linux/platform_device.h> | ||
| 23 | #include <linux/interrupt.h> | ||
| 24 | #include <linux/irq.h> | ||
| 25 | #include <linux/io.h> | ||
| 26 | #include <linux/irqchip/arm-gic.h> | ||
| 27 | #include <linux/platform_data/irq-renesas-intc-irqpin.h> | ||
| 28 | #include <linux/irqchip.h> | ||
| 29 | #include <mach/common.h> | ||
| 30 | #include <mach/intc.h> | ||
| 31 | #include <mach/irqs.h> | ||
| 32 | #include <mach/r8a7779.h> | ||
| 33 | #include <asm/mach-types.h> | ||
| 34 | #include <asm/mach/arch.h> | ||
| 35 | |||
| 36 | #define INT2SMSKCR0 IOMEM(0xfe7822a0) | ||
| 37 | #define INT2SMSKCR1 IOMEM(0xfe7822a4) | ||
| 38 | #define INT2SMSKCR2 IOMEM(0xfe7822a8) | ||
| 39 | #define INT2SMSKCR3 IOMEM(0xfe7822ac) | ||
| 40 | #define INT2SMSKCR4 IOMEM(0xfe7822b0) | ||
| 41 | |||
| 42 | #define INT2NTSR0 IOMEM(0xfe700060) | ||
| 43 | #define INT2NTSR1 IOMEM(0xfe700064) | ||
| 44 | |||
| 45 | static struct renesas_intc_irqpin_config irqpin0_platform_data = { | ||
| 46 | .irq_base = irq_pin(0), /* IRQ0 -> IRQ3 */ | ||
| 47 | .sense_bitfield_width = 2, | ||
| 48 | }; | ||
| 49 | |||
| 50 | static struct resource irqpin0_resources[] = { | ||
| 51 | DEFINE_RES_MEM(0xfe78001c, 4), /* ICR1 */ | ||
| 52 | DEFINE_RES_MEM(0xfe780010, 4), /* INTPRI */ | ||
| 53 | DEFINE_RES_MEM(0xfe780024, 4), /* INTREQ */ | ||
| 54 | DEFINE_RES_MEM(0xfe780044, 4), /* INTMSK0 */ | ||
| 55 | DEFINE_RES_MEM(0xfe780064, 4), /* INTMSKCLR0 */ | ||
| 56 | DEFINE_RES_IRQ(gic_spi(27)), /* IRQ0 */ | ||
| 57 | DEFINE_RES_IRQ(gic_spi(28)), /* IRQ1 */ | ||
| 58 | DEFINE_RES_IRQ(gic_spi(29)), /* IRQ2 */ | ||
| 59 | DEFINE_RES_IRQ(gic_spi(30)), /* IRQ3 */ | ||
| 60 | }; | ||
| 61 | |||
| 62 | static struct platform_device irqpin0_device = { | ||
| 63 | .name = "renesas_intc_irqpin", | ||
| 64 | .id = 0, | ||
| 65 | .resource = irqpin0_resources, | ||
| 66 | .num_resources = ARRAY_SIZE(irqpin0_resources), | ||
| 67 | .dev = { | ||
| 68 | .platform_data = &irqpin0_platform_data, | ||
| 69 | }, | ||
| 70 | }; | ||
| 71 | |||
| 72 | void __init r8a7779_init_irq_extpin(int irlm) | ||
| 73 | { | ||
| 74 | void __iomem *icr0 = ioremap_nocache(0xfe780000, PAGE_SIZE); | ||
| 75 | unsigned long tmp; | ||
| 76 | |||
| 77 | if (icr0) { | ||
| 78 | tmp = ioread32(icr0); | ||
| 79 | if (irlm) | ||
| 80 | tmp |= 1 << 23; /* IRQ0 -> IRQ3 as individual pins */ | ||
| 81 | else | ||
| 82 | tmp &= ~(1 << 23); /* IRL mode - not supported */ | ||
| 83 | tmp |= (1 << 21); /* LVLMODE = 1 */ | ||
| 84 | iowrite32(tmp, icr0); | ||
| 85 | iounmap(icr0); | ||
| 86 | |||
| 87 | if (irlm) | ||
| 88 | platform_device_register(&irqpin0_device); | ||
| 89 | } else | ||
| 90 | pr_warn("r8a7779: unable to setup external irq pin mode\n"); | ||
| 91 | } | ||
| 92 | |||
| 93 | static int r8a7779_set_wake(struct irq_data *data, unsigned int on) | ||
| 94 | { | ||
| 95 | return 0; /* always allow wakeup */ | ||
| 96 | } | ||
| 97 | |||
| 98 | static void __init r8a7779_init_irq_common(void) | ||
| 99 | { | ||
| 100 | gic_arch_extn.irq_set_wake = r8a7779_set_wake; | ||
| 101 | |||
| 102 | /* route all interrupts to ARM */ | ||
| 103 | __raw_writel(0xffffffff, INT2NTSR0); | ||
| 104 | __raw_writel(0x3fffffff, INT2NTSR1); | ||
| 105 | |||
| 106 | /* unmask all known interrupts in INTCS2 */ | ||
| 107 | __raw_writel(0xfffffff0, INT2SMSKCR0); | ||
| 108 | __raw_writel(0xfff7ffff, INT2SMSKCR1); | ||
| 109 | __raw_writel(0xfffbffdf, INT2SMSKCR2); | ||
| 110 | __raw_writel(0xbffffffc, INT2SMSKCR3); | ||
| 111 | __raw_writel(0x003fee3f, INT2SMSKCR4); | ||
| 112 | } | ||
| 113 | |||
| 114 | void __init r8a7779_init_irq(void) | ||
| 115 | { | ||
| 116 | void __iomem *gic_dist_base = IOMEM(0xf0001000); | ||
| 117 | void __iomem *gic_cpu_base = IOMEM(0xf0000100); | ||
| 118 | |||
| 119 | /* use GIC to handle interrupts */ | ||
| 120 | gic_init(0, 29, gic_dist_base, gic_cpu_base); | ||
| 121 | |||
| 122 | r8a7779_init_irq_common(); | ||
| 123 | } | ||
| 124 | |||
| 125 | #ifdef CONFIG_OF | ||
| 126 | void __init r8a7779_init_irq_dt(void) | ||
| 127 | { | ||
| 128 | irqchip_init(); | ||
| 129 | r8a7779_init_irq_common(); | ||
| 130 | } | ||
| 131 | #endif | ||
diff --git a/arch/arm/mach-shmobile/platsmp-scu.c b/arch/arm/mach-shmobile/platsmp-scu.c new file mode 100644 index 000000000000..c96f50160be6 --- /dev/null +++ b/arch/arm/mach-shmobile/platsmp-scu.c | |||
| @@ -0,0 +1,81 @@ | |||
| 1 | /* | ||
| 2 | * SMP support for SoCs with SCU covered by mach-shmobile | ||
| 3 | * | ||
| 4 | * Copyright (C) 2013 Magnus Damm | ||
| 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 <linux/delay.h> | ||
| 11 | #include <linux/init.h> | ||
| 12 | #include <linux/io.h> | ||
| 13 | #include <linux/smp.h> | ||
| 14 | #include <asm/cacheflush.h> | ||
| 15 | #include <asm/smp_plat.h> | ||
| 16 | #include <asm/smp_scu.h> | ||
| 17 | #include <mach/common.h> | ||
| 18 | |||
| 19 | void __init shmobile_smp_scu_prepare_cpus(unsigned int max_cpus) | ||
| 20 | { | ||
| 21 | /* install boot code shared by all CPUs */ | ||
| 22 | shmobile_boot_fn = virt_to_phys(shmobile_smp_boot); | ||
| 23 | shmobile_boot_arg = MPIDR_HWID_BITMASK; | ||
| 24 | |||
| 25 | /* enable SCU and cache coherency on booting CPU */ | ||
| 26 | scu_enable(shmobile_scu_base); | ||
| 27 | scu_power_mode(shmobile_scu_base, SCU_PM_NORMAL); | ||
| 28 | } | ||
| 29 | |||
| 30 | int shmobile_smp_scu_boot_secondary(unsigned int cpu, struct task_struct *idle) | ||
| 31 | { | ||
| 32 | /* For this particular CPU register SCU boot vector */ | ||
| 33 | shmobile_smp_hook(cpu, virt_to_phys(shmobile_boot_scu), | ||
| 34 | (unsigned long)shmobile_scu_base); | ||
| 35 | return 0; | ||
| 36 | } | ||
| 37 | |||
| 38 | #ifdef CONFIG_HOTPLUG_CPU | ||
| 39 | void shmobile_smp_scu_cpu_die(unsigned int cpu) | ||
| 40 | { | ||
| 41 | /* For this particular CPU deregister boot vector */ | ||
| 42 | shmobile_smp_hook(cpu, 0, 0); | ||
| 43 | |||
| 44 | dsb(); | ||
| 45 | flush_cache_all(); | ||
| 46 | |||
| 47 | /* disable cache coherency */ | ||
| 48 | scu_power_mode(shmobile_scu_base, SCU_PM_POWEROFF); | ||
| 49 | |||
| 50 | /* jump to shared mach-shmobile sleep / reset code */ | ||
| 51 | shmobile_smp_sleep(); | ||
| 52 | } | ||
| 53 | |||
| 54 | static int shmobile_smp_scu_psr_core_disabled(int cpu) | ||
| 55 | { | ||
| 56 | unsigned long mask = SCU_PM_POWEROFF << (cpu * 8); | ||
| 57 | |||
| 58 | if ((__raw_readl(shmobile_scu_base + 8) & mask) == mask) | ||
| 59 | return 1; | ||
| 60 | |||
| 61 | return 0; | ||
| 62 | } | ||
| 63 | |||
| 64 | int shmobile_smp_scu_cpu_kill(unsigned int cpu) | ||
| 65 | { | ||
| 66 | int k; | ||
| 67 | |||
| 68 | /* this function is running on another CPU than the offline target, | ||
| 69 | * here we need wait for shutdown code in platform_cpu_die() to | ||
| 70 | * finish before asking SoC-specific code to power off the CPU core. | ||
| 71 | */ | ||
| 72 | for (k = 0; k < 1000; k++) { | ||
| 73 | if (shmobile_smp_scu_psr_core_disabled(cpu)) | ||
| 74 | return 1; | ||
| 75 | |||
| 76 | mdelay(1); | ||
| 77 | } | ||
| 78 | |||
| 79 | return 0; | ||
| 80 | } | ||
| 81 | #endif | ||
diff --git a/arch/arm/mach-shmobile/platsmp.c b/arch/arm/mach-shmobile/platsmp.c index 1f958d7b0bac..d4ae616bcedb 100644 --- a/arch/arm/mach-shmobile/platsmp.c +++ b/arch/arm/mach-shmobile/platsmp.c | |||
| @@ -12,6 +12,9 @@ | |||
| 12 | */ | 12 | */ |
| 13 | #include <linux/init.h> | 13 | #include <linux/init.h> |
| 14 | #include <linux/smp.h> | 14 | #include <linux/smp.h> |
| 15 | #include <asm/cacheflush.h> | ||
| 16 | #include <asm/smp_plat.h> | ||
| 17 | #include <mach/common.h> | ||
| 15 | 18 | ||
| 16 | void __init shmobile_smp_init_cpus(unsigned int ncores) | 19 | void __init shmobile_smp_init_cpus(unsigned int ncores) |
| 17 | { | 20 | { |
| @@ -26,3 +29,18 @@ void __init shmobile_smp_init_cpus(unsigned int ncores) | |||
| 26 | for (i = 0; i < ncores; i++) | 29 | for (i = 0; i < ncores; i++) |
| 27 | set_cpu_possible(i, true); | 30 | set_cpu_possible(i, true); |
| 28 | } | 31 | } |
| 32 | |||
| 33 | extern unsigned long shmobile_smp_fn[]; | ||
| 34 | extern unsigned long shmobile_smp_arg[]; | ||
| 35 | extern unsigned long shmobile_smp_mpidr[]; | ||
| 36 | |||
| 37 | void shmobile_smp_hook(unsigned int cpu, unsigned long fn, unsigned long arg) | ||
| 38 | { | ||
| 39 | shmobile_smp_fn[cpu] = 0; | ||
| 40 | flush_cache_all(); | ||
| 41 | |||
| 42 | shmobile_smp_mpidr[cpu] = cpu_logical_map(cpu); | ||
| 43 | shmobile_smp_fn[cpu] = fn; | ||
| 44 | shmobile_smp_arg[cpu] = arg; | ||
| 45 | flush_cache_all(); | ||
| 46 | } | ||
diff --git a/arch/arm/mach-shmobile/setup-emev2.c b/arch/arm/mach-shmobile/setup-emev2.c index 1553af8e04ff..3ad531caf4f0 100644 --- a/arch/arm/mach-shmobile/setup-emev2.c +++ b/arch/arm/mach-shmobile/setup-emev2.c | |||
| @@ -27,7 +27,6 @@ | |||
| 27 | #include <linux/input.h> | 27 | #include <linux/input.h> |
| 28 | #include <linux/io.h> | 28 | #include <linux/io.h> |
| 29 | #include <linux/irqchip/arm-gic.h> | 29 | #include <linux/irqchip/arm-gic.h> |
| 30 | #include <mach/hardware.h> | ||
| 31 | #include <mach/common.h> | 30 | #include <mach/common.h> |
| 32 | #include <mach/emev2.h> | 31 | #include <mach/emev2.h> |
| 33 | #include <mach/irqs.h> | 32 | #include <mach/irqs.h> |
diff --git a/arch/arm/mach-shmobile/setup-r8a73a4.c b/arch/arm/mach-shmobile/setup-r8a73a4.c index d533bd23865c..89491700afb7 100644 --- a/arch/arm/mach-shmobile/setup-r8a73a4.c +++ b/arch/arm/mach-shmobile/setup-r8a73a4.c | |||
| @@ -188,7 +188,7 @@ static struct resource cmt10_resources[] = { | |||
| 188 | &cmt##idx##_platform_data, \ | 188 | &cmt##idx##_platform_data, \ |
| 189 | sizeof(struct sh_timer_config)) | 189 | sizeof(struct sh_timer_config)) |
| 190 | 190 | ||
| 191 | void __init r8a73a4_add_standard_devices(void) | 191 | void __init r8a73a4_add_dt_devices(void) |
| 192 | { | 192 | { |
| 193 | r8a73a4_register_scif(SCIFA0); | 193 | r8a73a4_register_scif(SCIFA0); |
| 194 | r8a73a4_register_scif(SCIFA1); | 194 | r8a73a4_register_scif(SCIFA1); |
| @@ -196,10 +196,15 @@ void __init r8a73a4_add_standard_devices(void) | |||
| 196 | r8a73a4_register_scif(SCIFB1); | 196 | r8a73a4_register_scif(SCIFB1); |
| 197 | r8a73a4_register_scif(SCIFB2); | 197 | r8a73a4_register_scif(SCIFB2); |
| 198 | r8a73a4_register_scif(SCIFB3); | 198 | r8a73a4_register_scif(SCIFB3); |
| 199 | r8a7790_register_cmt(10); | ||
| 200 | } | ||
| 201 | |||
| 202 | void __init r8a73a4_add_standard_devices(void) | ||
| 203 | { | ||
| 204 | r8a73a4_add_dt_devices(); | ||
| 199 | r8a73a4_register_irqc(0); | 205 | r8a73a4_register_irqc(0); |
| 200 | r8a73a4_register_irqc(1); | 206 | r8a73a4_register_irqc(1); |
| 201 | r8a73a4_register_thermal(); | 207 | r8a73a4_register_thermal(); |
| 202 | r8a7790_register_cmt(10); | ||
| 203 | } | 208 | } |
| 204 | 209 | ||
| 205 | void __init r8a73a4_init_delay(void) | 210 | void __init r8a73a4_init_delay(void) |
| @@ -210,11 +215,6 @@ void __init r8a73a4_init_delay(void) | |||
| 210 | } | 215 | } |
| 211 | 216 | ||
| 212 | #ifdef CONFIG_USE_OF | 217 | #ifdef CONFIG_USE_OF |
| 213 | void __init r8a73a4_add_standard_devices_dt(void) | ||
| 214 | { | ||
| 215 | platform_device_register_simple("cpufreq-cpu0", -1, NULL, 0); | ||
| 216 | of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); | ||
| 217 | } | ||
| 218 | 218 | ||
| 219 | static const char *r8a73a4_boards_compat_dt[] __initdata = { | 219 | static const char *r8a73a4_boards_compat_dt[] __initdata = { |
| 220 | "renesas,r8a73a4", | 220 | "renesas,r8a73a4", |
| @@ -223,8 +223,6 @@ static const char *r8a73a4_boards_compat_dt[] __initdata = { | |||
| 223 | 223 | ||
| 224 | DT_MACHINE_START(R8A73A4_DT, "Generic R8A73A4 (Flattened Device Tree)") | 224 | DT_MACHINE_START(R8A73A4_DT, "Generic R8A73A4 (Flattened Device Tree)") |
| 225 | .init_early = r8a73a4_init_delay, | 225 | .init_early = r8a73a4_init_delay, |
| 226 | .init_machine = r8a73a4_add_standard_devices_dt, | ||
| 227 | .init_time = shmobile_timer_init, | ||
| 228 | .dt_compat = r8a73a4_boards_compat_dt, | 226 | .dt_compat = r8a73a4_boards_compat_dt, |
| 229 | MACHINE_END | 227 | MACHINE_END |
| 230 | #endif /* CONFIG_USE_OF */ | 228 | #endif /* CONFIG_USE_OF */ |
diff --git a/arch/arm/mach-shmobile/setup-r8a7740.c b/arch/arm/mach-shmobile/setup-r8a7740.c index 84c5bb6d9725..b7d4b2c3bc29 100644 --- a/arch/arm/mach-shmobile/setup-r8a7740.c +++ b/arch/arm/mach-shmobile/setup-r8a7740.c | |||
| @@ -22,6 +22,8 @@ | |||
| 22 | #include <linux/kernel.h> | 22 | #include <linux/kernel.h> |
| 23 | #include <linux/init.h> | 23 | #include <linux/init.h> |
| 24 | #include <linux/io.h> | 24 | #include <linux/io.h> |
| 25 | #include <linux/irqchip.h> | ||
| 26 | #include <linux/irqchip/arm-gic.h> | ||
| 25 | #include <linux/platform_data/irq-renesas-intc-irqpin.h> | 27 | #include <linux/platform_data/irq-renesas-intc-irqpin.h> |
| 26 | #include <linux/platform_device.h> | 28 | #include <linux/platform_device.h> |
| 27 | #include <linux/of_platform.h> | 29 | #include <linux/of_platform.h> |
| @@ -1019,6 +1021,36 @@ void __init r8a7740_init_delay(void) | |||
| 1019 | shmobile_setup_delay(800, 1, 3); /* Cortex-A9 @ 800MHz */ | 1021 | shmobile_setup_delay(800, 1, 3); /* Cortex-A9 @ 800MHz */ |
| 1020 | }; | 1022 | }; |
| 1021 | 1023 | ||
| 1024 | void __init r8a7740_init_irq_of(void) | ||
| 1025 | { | ||
| 1026 | void __iomem *intc_prio_base = ioremap_nocache(0xe6900010, 0x10); | ||
| 1027 | void __iomem *intc_msk_base = ioremap_nocache(0xe6900040, 0x10); | ||
| 1028 | void __iomem *pfc_inta_ctrl = ioremap_nocache(0xe605807c, 0x4); | ||
| 1029 | |||
| 1030 | irqchip_init(); | ||
| 1031 | |||
| 1032 | /* route signals to GIC */ | ||
| 1033 | iowrite32(0x0, pfc_inta_ctrl); | ||
| 1034 | |||
| 1035 | /* | ||
| 1036 | * To mask the shared interrupt to SPI 149 we must ensure to set | ||
| 1037 | * PRIO *and* MASK. Else we run into IRQ floods when registering | ||
| 1038 | * the intc_irqpin devices | ||
| 1039 | */ | ||
| 1040 | iowrite32(0x0, intc_prio_base + 0x0); | ||
| 1041 | iowrite32(0x0, intc_prio_base + 0x4); | ||
| 1042 | iowrite32(0x0, intc_prio_base + 0x8); | ||
| 1043 | iowrite32(0x0, intc_prio_base + 0xc); | ||
| 1044 | iowrite8(0xff, intc_msk_base + 0x0); | ||
| 1045 | iowrite8(0xff, intc_msk_base + 0x4); | ||
| 1046 | iowrite8(0xff, intc_msk_base + 0x8); | ||
| 1047 | iowrite8(0xff, intc_msk_base + 0xc); | ||
| 1048 | |||
| 1049 | iounmap(intc_prio_base); | ||
| 1050 | iounmap(intc_msk_base); | ||
| 1051 | iounmap(pfc_inta_ctrl); | ||
| 1052 | } | ||
| 1053 | |||
| 1022 | static void __init r8a7740_generic_init(void) | 1054 | static void __init r8a7740_generic_init(void) |
| 1023 | { | 1055 | { |
| 1024 | r8a7740_clock_init(0); | 1056 | r8a7740_clock_init(0); |
| @@ -1035,7 +1067,6 @@ DT_MACHINE_START(R8A7740_DT, "Generic R8A7740 (Flattened Device Tree)") | |||
| 1035 | .init_early = r8a7740_init_delay, | 1067 | .init_early = r8a7740_init_delay, |
| 1036 | .init_irq = r8a7740_init_irq_of, | 1068 | .init_irq = r8a7740_init_irq_of, |
| 1037 | .init_machine = r8a7740_generic_init, | 1069 | .init_machine = r8a7740_generic_init, |
| 1038 | .init_time = shmobile_timer_init, | ||
| 1039 | .dt_compat = r8a7740_boards_compat_dt, | 1070 | .dt_compat = r8a7740_boards_compat_dt, |
| 1040 | MACHINE_END | 1071 | MACHINE_END |
| 1041 | 1072 | ||
diff --git a/arch/arm/mach-shmobile/setup-r8a7778.c b/arch/arm/mach-shmobile/setup-r8a7778.c index 203becfc6e31..6a2657ebd197 100644 --- a/arch/arm/mach-shmobile/setup-r8a7778.c +++ b/arch/arm/mach-shmobile/setup-r8a7778.c | |||
| @@ -95,20 +95,6 @@ static struct sh_timer_config sh_tmu1_platform_data __initdata = { | |||
| 95 | &sh_tmu##idx##_platform_data, \ | 95 | &sh_tmu##idx##_platform_data, \ |
| 96 | sizeof(sh_tmu##idx##_platform_data)) | 96 | sizeof(sh_tmu##idx##_platform_data)) |
| 97 | 97 | ||
| 98 | /* USB PHY */ | ||
| 99 | static struct resource usb_phy_resources[] __initdata = { | ||
| 100 | DEFINE_RES_MEM(0xffe70800, 0x100), | ||
| 101 | DEFINE_RES_MEM(0xffe76000, 0x100), | ||
| 102 | }; | ||
| 103 | |||
| 104 | void __init r8a7778_add_usb_phy_device(struct rcar_phy_platform_data *pdata) | ||
| 105 | { | ||
| 106 | platform_device_register_resndata(&platform_bus, "rcar_usb_phy", -1, | ||
| 107 | usb_phy_resources, | ||
| 108 | ARRAY_SIZE(usb_phy_resources), | ||
| 109 | pdata, sizeof(*pdata)); | ||
| 110 | } | ||
| 111 | |||
| 112 | /* USB */ | 98 | /* USB */ |
| 113 | static struct usb_phy *phy; | 99 | static struct usb_phy *phy; |
| 114 | 100 | ||
| @@ -248,30 +234,6 @@ void __init r8a7778_pinmux_init(void) | |||
| 248 | r8a7778_register_gpio(4); | 234 | r8a7778_register_gpio(4); |
| 249 | }; | 235 | }; |
| 250 | 236 | ||
| 251 | /* SDHI */ | ||
| 252 | static struct resource sdhi_resources[] __initdata = { | ||
| 253 | /* SDHI0 */ | ||
| 254 | DEFINE_RES_MEM(0xFFE4C000, 0x100), | ||
| 255 | DEFINE_RES_IRQ(gic_iid(0x77)), | ||
| 256 | /* SDHI1 */ | ||
| 257 | DEFINE_RES_MEM(0xFFE4D000, 0x100), | ||
| 258 | DEFINE_RES_IRQ(gic_iid(0x78)), | ||
| 259 | /* SDHI2 */ | ||
| 260 | DEFINE_RES_MEM(0xFFE4F000, 0x100), | ||
| 261 | DEFINE_RES_IRQ(gic_iid(0x76)), | ||
| 262 | }; | ||
| 263 | |||
| 264 | void __init r8a7778_sdhi_init(int id, | ||
| 265 | struct sh_mobile_sdhi_info *info) | ||
| 266 | { | ||
| 267 | BUG_ON(id < 0 || id > 2); | ||
| 268 | |||
| 269 | platform_device_register_resndata( | ||
| 270 | &platform_bus, "sh_mobile_sdhi", id, | ||
| 271 | sdhi_resources + (2 * id), 2, | ||
| 272 | info, sizeof(*info)); | ||
| 273 | } | ||
| 274 | |||
| 275 | /* I2C */ | 237 | /* I2C */ |
| 276 | static struct resource i2c_resources[] __initdata = { | 238 | static struct resource i2c_resources[] __initdata = { |
| 277 | /* I2C0 */ | 239 | /* I2C0 */ |
| @@ -288,7 +250,7 @@ static struct resource i2c_resources[] __initdata = { | |||
| 288 | DEFINE_RES_IRQ(gic_iid(0x6d)), | 250 | DEFINE_RES_IRQ(gic_iid(0x6d)), |
| 289 | }; | 251 | }; |
| 290 | 252 | ||
| 291 | void __init r8a7778_add_i2c_device(int id) | 253 | static void __init r8a7778_register_i2c(int id) |
| 292 | { | 254 | { |
| 293 | BUG_ON(id < 0 || id > 3); | 255 | BUG_ON(id < 0 || id > 3); |
| 294 | 256 | ||
| @@ -310,7 +272,7 @@ static struct resource hspi_resources[] __initdata = { | |||
| 310 | DEFINE_RES_IRQ(gic_iid(0x75)), | 272 | DEFINE_RES_IRQ(gic_iid(0x75)), |
| 311 | }; | 273 | }; |
| 312 | 274 | ||
| 313 | void __init r8a7778_add_hspi_device(int id) | 275 | void __init r8a7778_register_hspi(int id) |
| 314 | { | 276 | { |
| 315 | BUG_ON(id < 0 || id > 2); | 277 | BUG_ON(id < 0 || id > 2); |
| 316 | 278 | ||
| @@ -319,20 +281,6 @@ void __init r8a7778_add_hspi_device(int id) | |||
| 319 | hspi_resources + (2 * id), 2); | 281 | hspi_resources + (2 * id), 2); |
| 320 | } | 282 | } |
| 321 | 283 | ||
| 322 | /* MMC */ | ||
| 323 | static struct resource mmc_resources[] __initdata = { | ||
| 324 | DEFINE_RES_MEM(0xffe4e000, 0x100), | ||
| 325 | DEFINE_RES_IRQ(gic_iid(0x5d)), | ||
| 326 | }; | ||
| 327 | |||
| 328 | void __init r8a7778_add_mmc_device(struct sh_mmcif_plat_data *info) | ||
| 329 | { | ||
| 330 | platform_device_register_resndata( | ||
| 331 | &platform_bus, "sh_mmcif", -1, | ||
| 332 | mmc_resources, ARRAY_SIZE(mmc_resources), | ||
| 333 | info, sizeof(*info)); | ||
| 334 | } | ||
| 335 | |||
| 336 | /* VIN */ | 284 | /* VIN */ |
| 337 | #define R8A7778_VIN(idx) \ | 285 | #define R8A7778_VIN(idx) \ |
| 338 | static struct resource vin##idx##_resources[] __initdata = { \ | 286 | static struct resource vin##idx##_resources[] __initdata = { \ |
| @@ -367,7 +315,7 @@ void __init r8a7778_add_vin_device(int id, struct rcar_vin_platform_data *pdata) | |||
| 367 | platform_device_register_full(vin_info_table[id]); | 315 | platform_device_register_full(vin_info_table[id]); |
| 368 | } | 316 | } |
| 369 | 317 | ||
| 370 | void __init r8a7778_add_standard_devices(void) | 318 | void __init r8a7778_add_dt_devices(void) |
| 371 | { | 319 | { |
| 372 | int i; | 320 | int i; |
| 373 | 321 | ||
| @@ -391,6 +339,18 @@ void __init r8a7778_add_standard_devices(void) | |||
| 391 | r8a7778_register_tmu(1); | 339 | r8a7778_register_tmu(1); |
| 392 | } | 340 | } |
| 393 | 341 | ||
| 342 | void __init r8a7778_add_standard_devices(void) | ||
| 343 | { | ||
| 344 | r8a7778_add_dt_devices(); | ||
| 345 | r8a7778_register_i2c(0); | ||
| 346 | r8a7778_register_i2c(1); | ||
| 347 | r8a7778_register_i2c(2); | ||
| 348 | r8a7778_register_i2c(3); | ||
| 349 | r8a7778_register_hspi(0); | ||
| 350 | r8a7778_register_hspi(1); | ||
| 351 | r8a7778_register_hspi(2); | ||
| 352 | } | ||
| 353 | |||
| 394 | void __init r8a7778_init_late(void) | 354 | void __init r8a7778_init_late(void) |
| 395 | { | 355 | { |
| 396 | phy = usb_get_phy(USB_PHY_TYPE_USB2); | 356 | phy = usb_get_phy(USB_PHY_TYPE_USB2); |
| @@ -480,7 +440,6 @@ static const char *r8a7778_compat_dt[] __initdata = { | |||
| 480 | DT_MACHINE_START(R8A7778_DT, "Generic R8A7778 (Flattened Device Tree)") | 440 | DT_MACHINE_START(R8A7778_DT, "Generic R8A7778 (Flattened Device Tree)") |
| 481 | .init_early = r8a7778_init_delay, | 441 | .init_early = r8a7778_init_delay, |
| 482 | .init_irq = r8a7778_init_irq_dt, | 442 | .init_irq = r8a7778_init_irq_dt, |
| 483 | .init_time = shmobile_timer_init, | ||
| 484 | .dt_compat = r8a7778_compat_dt, | 443 | .dt_compat = r8a7778_compat_dt, |
| 485 | .init_late = r8a7778_init_late, | 444 | .init_late = r8a7778_init_late, |
| 486 | MACHINE_END | 445 | MACHINE_END |
diff --git a/arch/arm/mach-shmobile/setup-r8a7779.c b/arch/arm/mach-shmobile/setup-r8a7779.c index 41bab625341e..b5b2f787da2e 100644 --- a/arch/arm/mach-shmobile/setup-r8a7779.c +++ b/arch/arm/mach-shmobile/setup-r8a7779.c | |||
| @@ -22,14 +22,16 @@ | |||
| 22 | #include <linux/init.h> | 22 | #include <linux/init.h> |
| 23 | #include <linux/interrupt.h> | 23 | #include <linux/interrupt.h> |
| 24 | #include <linux/irq.h> | 24 | #include <linux/irq.h> |
| 25 | #include <linux/irqchip.h> | ||
| 26 | #include <linux/irqchip/arm-gic.h> | ||
| 25 | #include <linux/of_platform.h> | 27 | #include <linux/of_platform.h> |
| 26 | #include <linux/platform_data/gpio-rcar.h> | 28 | #include <linux/platform_data/gpio-rcar.h> |
| 29 | #include <linux/platform_data/irq-renesas-intc-irqpin.h> | ||
| 27 | #include <linux/platform_device.h> | 30 | #include <linux/platform_device.h> |
| 28 | #include <linux/delay.h> | 31 | #include <linux/delay.h> |
| 29 | #include <linux/input.h> | 32 | #include <linux/input.h> |
| 30 | #include <linux/io.h> | 33 | #include <linux/io.h> |
| 31 | #include <linux/serial_sci.h> | 34 | #include <linux/serial_sci.h> |
| 32 | #include <linux/sh_intc.h> | ||
| 33 | #include <linux/sh_timer.h> | 35 | #include <linux/sh_timer.h> |
| 34 | #include <linux/dma-mapping.h> | 36 | #include <linux/dma-mapping.h> |
| 35 | #include <linux/usb/otg.h> | 37 | #include <linux/usb/otg.h> |
| @@ -37,7 +39,6 @@ | |||
| 37 | #include <linux/usb/ehci_pdriver.h> | 39 | #include <linux/usb/ehci_pdriver.h> |
| 38 | #include <linux/usb/ohci_pdriver.h> | 40 | #include <linux/usb/ohci_pdriver.h> |
| 39 | #include <linux/pm_runtime.h> | 41 | #include <linux/pm_runtime.h> |
| 40 | #include <mach/hardware.h> | ||
| 41 | #include <mach/irqs.h> | 42 | #include <mach/irqs.h> |
| 42 | #include <mach/r8a7779.h> | 43 | #include <mach/r8a7779.h> |
| 43 | #include <mach/common.h> | 44 | #include <mach/common.h> |
| @@ -69,6 +70,60 @@ void __init r8a7779_map_io(void) | |||
| 69 | iotable_init(r8a7779_io_desc, ARRAY_SIZE(r8a7779_io_desc)); | 70 | iotable_init(r8a7779_io_desc, ARRAY_SIZE(r8a7779_io_desc)); |
| 70 | } | 71 | } |
| 71 | 72 | ||
| 73 | /* IRQ */ | ||
| 74 | #define INT2SMSKCR0 IOMEM(0xfe7822a0) | ||
| 75 | #define INT2SMSKCR1 IOMEM(0xfe7822a4) | ||
| 76 | #define INT2SMSKCR2 IOMEM(0xfe7822a8) | ||
| 77 | #define INT2SMSKCR3 IOMEM(0xfe7822ac) | ||
| 78 | #define INT2SMSKCR4 IOMEM(0xfe7822b0) | ||
| 79 | |||
| 80 | #define INT2NTSR0 IOMEM(0xfe700060) | ||
| 81 | #define INT2NTSR1 IOMEM(0xfe700064) | ||
| 82 | |||
| 83 | static struct renesas_intc_irqpin_config irqpin0_platform_data __initdata = { | ||
| 84 | .irq_base = irq_pin(0), /* IRQ0 -> IRQ3 */ | ||
| 85 | .sense_bitfield_width = 2, | ||
| 86 | }; | ||
| 87 | |||
| 88 | static struct resource irqpin0_resources[] __initdata = { | ||
| 89 | DEFINE_RES_MEM(0xfe78001c, 4), /* ICR1 */ | ||
| 90 | DEFINE_RES_MEM(0xfe780010, 4), /* INTPRI */ | ||
| 91 | DEFINE_RES_MEM(0xfe780024, 4), /* INTREQ */ | ||
| 92 | DEFINE_RES_MEM(0xfe780044, 4), /* INTMSK0 */ | ||
| 93 | DEFINE_RES_MEM(0xfe780064, 4), /* INTMSKCLR0 */ | ||
| 94 | DEFINE_RES_IRQ(gic_spi(27)), /* IRQ0 */ | ||
| 95 | DEFINE_RES_IRQ(gic_spi(28)), /* IRQ1 */ | ||
| 96 | DEFINE_RES_IRQ(gic_spi(29)), /* IRQ2 */ | ||
| 97 | DEFINE_RES_IRQ(gic_spi(30)), /* IRQ3 */ | ||
| 98 | }; | ||
| 99 | |||
| 100 | void __init r8a7779_init_irq_extpin(int irlm) | ||
| 101 | { | ||
| 102 | void __iomem *icr0 = ioremap_nocache(0xfe780000, PAGE_SIZE); | ||
| 103 | u32 tmp; | ||
| 104 | |||
| 105 | if (!icr0) { | ||
| 106 | pr_warn("r8a7779: unable to setup external irq pin mode\n"); | ||
| 107 | return; | ||
| 108 | } | ||
| 109 | |||
| 110 | tmp = ioread32(icr0); | ||
| 111 | if (irlm) | ||
| 112 | tmp |= 1 << 23; /* IRQ0 -> IRQ3 as individual pins */ | ||
| 113 | else | ||
| 114 | tmp &= ~(1 << 23); /* IRL mode - not supported */ | ||
| 115 | tmp |= (1 << 21); /* LVLMODE = 1 */ | ||
| 116 | iowrite32(tmp, icr0); | ||
| 117 | iounmap(icr0); | ||
| 118 | |||
| 119 | if (irlm) | ||
| 120 | platform_device_register_resndata( | ||
| 121 | &platform_bus, "renesas_intc_irqpin", -1, | ||
| 122 | irqpin0_resources, ARRAY_SIZE(irqpin0_resources), | ||
| 123 | &irqpin0_platform_data, sizeof(irqpin0_platform_data)); | ||
| 124 | } | ||
| 125 | |||
| 126 | /* PFC/GPIO */ | ||
| 72 | static struct resource r8a7779_pfc_resources[] = { | 127 | static struct resource r8a7779_pfc_resources[] = { |
| 73 | DEFINE_RES_MEM(0xfffc0000, 0x023c), | 128 | DEFINE_RES_MEM(0xfffc0000, 0x023c), |
| 74 | }; | 129 | }; |
| @@ -388,15 +443,6 @@ static struct platform_device sata_device = { | |||
| 388 | }, | 443 | }, |
| 389 | }; | 444 | }; |
| 390 | 445 | ||
| 391 | /* USB PHY */ | ||
| 392 | static struct resource usb_phy_resources[] __initdata = { | ||
| 393 | [0] = { | ||
| 394 | .start = 0xffe70800, | ||
| 395 | .end = 0xffe70900 - 1, | ||
| 396 | .flags = IORESOURCE_MEM, | ||
| 397 | }, | ||
| 398 | }; | ||
| 399 | |||
| 400 | /* USB */ | 446 | /* USB */ |
| 401 | static struct usb_phy *phy; | 447 | static struct usb_phy *phy; |
| 402 | 448 | ||
| @@ -548,7 +594,7 @@ static struct platform_device ohci1_device = { | |||
| 548 | }; | 594 | }; |
| 549 | 595 | ||
| 550 | /* Ether */ | 596 | /* Ether */ |
| 551 | static struct resource ether_resources[] = { | 597 | static struct resource ether_resources[] __initdata = { |
| 552 | { | 598 | { |
| 553 | .start = 0xfde00000, | 599 | .start = 0xfde00000, |
| 554 | .end = 0xfde003ff, | 600 | .end = 0xfde003ff, |
| @@ -629,14 +675,6 @@ void __init r8a7779_add_ether_device(struct sh_eth_plat_data *pdata) | |||
| 629 | pdata, sizeof(*pdata)); | 675 | pdata, sizeof(*pdata)); |
| 630 | } | 676 | } |
| 631 | 677 | ||
| 632 | void __init r8a7779_add_usb_phy_device(struct rcar_phy_platform_data *pdata) | ||
| 633 | { | ||
| 634 | platform_device_register_resndata(&platform_bus, "rcar_usb_phy", -1, | ||
| 635 | usb_phy_resources, | ||
| 636 | ARRAY_SIZE(usb_phy_resources), | ||
| 637 | pdata, sizeof(*pdata)); | ||
| 638 | } | ||
| 639 | |||
| 640 | void __init r8a7779_add_vin_device(int id, struct rcar_vin_platform_data *pdata) | 678 | void __init r8a7779_add_vin_device(int id, struct rcar_vin_platform_data *pdata) |
| 641 | { | 679 | { |
| 642 | BUG_ON(id < 0 || id > 3); | 680 | BUG_ON(id < 0 || id > 3); |
| @@ -697,6 +735,29 @@ void __init r8a7779_init_late(void) | |||
| 697 | } | 735 | } |
| 698 | 736 | ||
| 699 | #ifdef CONFIG_USE_OF | 737 | #ifdef CONFIG_USE_OF |
| 738 | static int r8a7779_set_wake(struct irq_data *data, unsigned int on) | ||
| 739 | { | ||
| 740 | return 0; /* always allow wakeup */ | ||
| 741 | } | ||
| 742 | |||
| 743 | void __init r8a7779_init_irq_dt(void) | ||
| 744 | { | ||
| 745 | gic_arch_extn.irq_set_wake = r8a7779_set_wake; | ||
| 746 | |||
| 747 | irqchip_init(); | ||
| 748 | |||
| 749 | /* route all interrupts to ARM */ | ||
| 750 | __raw_writel(0xffffffff, INT2NTSR0); | ||
| 751 | __raw_writel(0x3fffffff, INT2NTSR1); | ||
| 752 | |||
| 753 | /* unmask all known interrupts in INTCS2 */ | ||
| 754 | __raw_writel(0xfffffff0, INT2SMSKCR0); | ||
| 755 | __raw_writel(0xfff7ffff, INT2SMSKCR1); | ||
| 756 | __raw_writel(0xfffbffdf, INT2SMSKCR2); | ||
| 757 | __raw_writel(0xbffffffc, INT2SMSKCR3); | ||
| 758 | __raw_writel(0x003fee3f, INT2SMSKCR4); | ||
| 759 | } | ||
| 760 | |||
| 700 | void __init r8a7779_init_delay(void) | 761 | void __init r8a7779_init_delay(void) |
| 701 | { | 762 | { |
| 702 | shmobile_setup_delay(1000, 2, 4); /* Cortex-A9 @ 1000MHz */ | 763 | shmobile_setup_delay(1000, 2, 4); /* Cortex-A9 @ 1000MHz */ |
| @@ -723,7 +784,6 @@ DT_MACHINE_START(R8A7779_DT, "Generic R8A7779 (Flattened Device Tree)") | |||
| 723 | .nr_irqs = NR_IRQS_LEGACY, | 784 | .nr_irqs = NR_IRQS_LEGACY, |
| 724 | .init_irq = r8a7779_init_irq_dt, | 785 | .init_irq = r8a7779_init_irq_dt, |
| 725 | .init_machine = r8a7779_add_standard_devices_dt, | 786 | .init_machine = r8a7779_add_standard_devices_dt, |
| 726 | .init_time = shmobile_timer_init, | ||
| 727 | .init_late = r8a7779_init_late, | 787 | .init_late = r8a7779_init_late, |
| 728 | .dt_compat = r8a7779_compat_dt, | 788 | .dt_compat = r8a7779_compat_dt, |
| 729 | MACHINE_END | 789 | MACHINE_END |
diff --git a/arch/arm/mach-shmobile/setup-r8a7790.c b/arch/arm/mach-shmobile/setup-r8a7790.c index 4c96dad21195..d0f5c9f9349a 100644 --- a/arch/arm/mach-shmobile/setup-r8a7790.c +++ b/arch/arm/mach-shmobile/setup-r8a7790.c | |||
| @@ -18,6 +18,7 @@ | |||
| 18 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | 18 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
| 19 | */ | 19 | */ |
| 20 | 20 | ||
| 21 | #include <linux/clocksource.h> | ||
| 21 | #include <linux/irq.h> | 22 | #include <linux/irq.h> |
| 22 | #include <linux/kernel.h> | 23 | #include <linux/kernel.h> |
| 23 | #include <linux/of_platform.h> | 24 | #include <linux/of_platform.h> |
| @@ -160,13 +161,13 @@ static struct resource thermal_resources[] __initdata = { | |||
| 160 | thermal_resources, \ | 161 | thermal_resources, \ |
| 161 | ARRAY_SIZE(thermal_resources)) | 162 | ARRAY_SIZE(thermal_resources)) |
| 162 | 163 | ||
| 163 | static struct sh_timer_config cmt00_platform_data = { | 164 | static struct sh_timer_config cmt00_platform_data __initdata = { |
| 164 | .name = "CMT00", | 165 | .name = "CMT00", |
| 165 | .timer_bit = 0, | 166 | .timer_bit = 0, |
| 166 | .clockevent_rating = 80, | 167 | .clockevent_rating = 80, |
| 167 | }; | 168 | }; |
| 168 | 169 | ||
| 169 | static struct resource cmt00_resources[] = { | 170 | static struct resource cmt00_resources[] __initdata = { |
| 170 | DEFINE_RES_MEM(0xffca0510, 0x0c), | 171 | DEFINE_RES_MEM(0xffca0510, 0x0c), |
| 171 | DEFINE_RES_MEM(0xffca0500, 0x04), | 172 | DEFINE_RES_MEM(0xffca0500, 0x04), |
| 172 | DEFINE_RES_IRQ(gic_spi(142)), /* CMT0_0 */ | 173 | DEFINE_RES_IRQ(gic_spi(142)), /* CMT0_0 */ |
| @@ -179,7 +180,7 @@ static struct resource cmt00_resources[] = { | |||
| 179 | &cmt##idx##_platform_data, \ | 180 | &cmt##idx##_platform_data, \ |
| 180 | sizeof(struct sh_timer_config)) | 181 | sizeof(struct sh_timer_config)) |
| 181 | 182 | ||
| 182 | void __init r8a7790_add_standard_devices(void) | 183 | void __init r8a7790_add_dt_devices(void) |
| 183 | { | 184 | { |
| 184 | r8a7790_register_scif(SCIFA0); | 185 | r8a7790_register_scif(SCIFA0); |
| 185 | r8a7790_register_scif(SCIFA1); | 186 | r8a7790_register_scif(SCIFA1); |
| @@ -191,9 +192,14 @@ void __init r8a7790_add_standard_devices(void) | |||
| 191 | r8a7790_register_scif(SCIF1); | 192 | r8a7790_register_scif(SCIF1); |
| 192 | r8a7790_register_scif(HSCIF0); | 193 | r8a7790_register_scif(HSCIF0); |
| 193 | r8a7790_register_scif(HSCIF1); | 194 | r8a7790_register_scif(HSCIF1); |
| 195 | r8a7790_register_cmt(00); | ||
| 196 | } | ||
| 197 | |||
| 198 | void __init r8a7790_add_standard_devices(void) | ||
| 199 | { | ||
| 200 | r8a7790_add_dt_devices(); | ||
| 194 | r8a7790_register_irqc(0); | 201 | r8a7790_register_irqc(0); |
| 195 | r8a7790_register_thermal(); | 202 | r8a7790_register_thermal(); |
| 196 | r8a7790_register_cmt(00); | ||
| 197 | } | 203 | } |
| 198 | 204 | ||
| 199 | #define MODEMR 0xe6160060 | 205 | #define MODEMR 0xe6160060 |
| @@ -258,7 +264,7 @@ void __init r8a7790_timer_init(void) | |||
| 258 | iounmap(base); | 264 | iounmap(base); |
| 259 | #endif /* CONFIG_ARM_ARCH_TIMER */ | 265 | #endif /* CONFIG_ARM_ARCH_TIMER */ |
| 260 | 266 | ||
| 261 | shmobile_timer_init(); | 267 | clocksource_of_init(); |
| 262 | } | 268 | } |
| 263 | 269 | ||
| 264 | void __init r8a7790_init_delay(void) | 270 | void __init r8a7790_init_delay(void) |
diff --git a/arch/arm/mach-shmobile/setup-sh7372.c b/arch/arm/mach-shmobile/setup-sh7372.c index 13e6fdbde0a5..311878391e18 100644 --- a/arch/arm/mach-shmobile/setup-sh7372.c +++ b/arch/arm/mach-shmobile/setup-sh7372.c | |||
| @@ -35,7 +35,6 @@ | |||
| 35 | #include <linux/dma-mapping.h> | 35 | #include <linux/dma-mapping.h> |
| 36 | #include <linux/platform_data/sh_ipmmu.h> | 36 | #include <linux/platform_data/sh_ipmmu.h> |
| 37 | #include <mach/dma-register.h> | 37 | #include <mach/dma-register.h> |
| 38 | #include <mach/hardware.h> | ||
| 39 | #include <mach/irqs.h> | 38 | #include <mach/irqs.h> |
| 40 | #include <mach/sh7372.h> | 39 | #include <mach/sh7372.h> |
| 41 | #include <mach/common.h> | 40 | #include <mach/common.h> |
diff --git a/arch/arm/mach-shmobile/setup-sh73a0.c b/arch/arm/mach-shmobile/setup-sh73a0.c index 516c2391b47a..22de17417fd7 100644 --- a/arch/arm/mach-shmobile/setup-sh73a0.c +++ b/arch/arm/mach-shmobile/setup-sh73a0.c | |||
| @@ -34,7 +34,6 @@ | |||
| 34 | #include <linux/platform_data/sh_ipmmu.h> | 34 | #include <linux/platform_data/sh_ipmmu.h> |
| 35 | #include <linux/platform_data/irq-renesas-intc-irqpin.h> | 35 | #include <linux/platform_data/irq-renesas-intc-irqpin.h> |
| 36 | #include <mach/dma-register.h> | 36 | #include <mach/dma-register.h> |
| 37 | #include <mach/hardware.h> | ||
| 38 | #include <mach/irqs.h> | 37 | #include <mach/irqs.h> |
| 39 | #include <mach/sh73a0.h> | 38 | #include <mach/sh73a0.h> |
| 40 | #include <mach/common.h> | 39 | #include <mach/common.h> |
diff --git a/arch/arm/mach-shmobile/smp-emev2.c b/arch/arm/mach-shmobile/smp-emev2.c index 78e84c582453..522de5ebb55f 100644 --- a/arch/arm/mach-shmobile/smp-emev2.c +++ b/arch/arm/mach-shmobile/smp-emev2.c | |||
| @@ -34,6 +34,12 @@ | |||
| 34 | 34 | ||
| 35 | static int emev2_boot_secondary(unsigned int cpu, struct task_struct *idle) | 35 | static int emev2_boot_secondary(unsigned int cpu, struct task_struct *idle) |
| 36 | { | 36 | { |
| 37 | int ret; | ||
| 38 | |||
| 39 | ret = shmobile_smp_scu_boot_secondary(cpu, idle); | ||
| 40 | if (ret) | ||
| 41 | return ret; | ||
| 42 | |||
| 37 | arch_send_wakeup_ipi_mask(cpumask_of(cpu_logical_map(cpu))); | 43 | arch_send_wakeup_ipi_mask(cpumask_of(cpu_logical_map(cpu))); |
| 38 | return 0; | 44 | return 0; |
| 39 | } | 45 | } |
| @@ -42,21 +48,16 @@ static void __init emev2_smp_prepare_cpus(unsigned int max_cpus) | |||
| 42 | { | 48 | { |
| 43 | void __iomem *smu; | 49 | void __iomem *smu; |
| 44 | 50 | ||
| 45 | /* setup EMEV2 specific SCU base, enable */ | 51 | /* Tell ROM loader about our vector (in headsmp.S) */ |
| 46 | shmobile_scu_base = ioremap(EMEV2_SCU_BASE, PAGE_SIZE); | ||
| 47 | scu_enable(shmobile_scu_base); | ||
| 48 | |||
| 49 | /* Tell ROM loader about our vector (in headsmp-scu.S, headsmp.S) */ | ||
| 50 | smu = ioremap(EMEV2_SMU_BASE, PAGE_SIZE); | 52 | smu = ioremap(EMEV2_SMU_BASE, PAGE_SIZE); |
| 51 | if (smu) { | 53 | if (smu) { |
| 52 | iowrite32(__pa(shmobile_boot_vector), smu + SMU_GENERAL_REG0); | 54 | iowrite32(__pa(shmobile_boot_vector), smu + SMU_GENERAL_REG0); |
| 53 | iounmap(smu); | 55 | iounmap(smu); |
| 54 | } | 56 | } |
| 55 | shmobile_boot_fn = virt_to_phys(shmobile_boot_scu); | ||
| 56 | shmobile_boot_arg = (unsigned long)shmobile_scu_base; | ||
| 57 | 57 | ||
| 58 | /* enable cache coherency on booting CPU */ | 58 | /* setup EMEV2 specific SCU bits */ |
| 59 | scu_power_mode(shmobile_scu_base, SCU_PM_NORMAL); | 59 | shmobile_scu_base = ioremap(EMEV2_SCU_BASE, PAGE_SIZE); |
| 60 | shmobile_smp_scu_prepare_cpus(max_cpus); | ||
| 60 | } | 61 | } |
| 61 | 62 | ||
| 62 | struct smp_operations emev2_smp_ops __initdata = { | 63 | struct smp_operations emev2_smp_ops __initdata = { |
diff --git a/arch/arm/mach-shmobile/smp-r8a7779.c b/arch/arm/mach-shmobile/smp-r8a7779.c index 9bdf810f2a87..0f05e9fb722f 100644 --- a/arch/arm/mach-shmobile/smp-r8a7779.c +++ b/arch/arm/mach-shmobile/smp-r8a7779.c | |||
| @@ -84,30 +84,34 @@ static int r8a7779_platform_cpu_kill(unsigned int cpu) | |||
| 84 | static int r8a7779_boot_secondary(unsigned int cpu, struct task_struct *idle) | 84 | static int r8a7779_boot_secondary(unsigned int cpu, struct task_struct *idle) |
| 85 | { | 85 | { |
| 86 | struct r8a7779_pm_ch *ch = NULL; | 86 | struct r8a7779_pm_ch *ch = NULL; |
| 87 | int ret = -EIO; | 87 | unsigned int lcpu = cpu_logical_map(cpu); |
| 88 | int ret; | ||
| 88 | 89 | ||
| 89 | cpu = cpu_logical_map(cpu); | 90 | ret = shmobile_smp_scu_boot_secondary(cpu, idle); |
| 91 | if (ret) | ||
| 92 | return ret; | ||
| 90 | 93 | ||
| 91 | if (cpu < ARRAY_SIZE(r8a7779_ch_cpu)) | 94 | if (lcpu < ARRAY_SIZE(r8a7779_ch_cpu)) |
| 92 | ch = r8a7779_ch_cpu[cpu]; | 95 | ch = r8a7779_ch_cpu[lcpu]; |
| 93 | 96 | ||
| 94 | if (ch) | 97 | if (ch) |
| 95 | ret = r8a7779_sysc_power_up(ch); | 98 | ret = r8a7779_sysc_power_up(ch); |
| 99 | else | ||
| 100 | ret = -EIO; | ||
| 96 | 101 | ||
| 97 | return ret; | 102 | return ret; |
| 98 | } | 103 | } |
| 99 | 104 | ||
| 100 | static void __init r8a7779_smp_prepare_cpus(unsigned int max_cpus) | 105 | static void __init r8a7779_smp_prepare_cpus(unsigned int max_cpus) |
| 101 | { | 106 | { |
| 102 | scu_enable(shmobile_scu_base); | ||
| 103 | |||
| 104 | /* Map the reset vector (in headsmp-scu.S, headsmp.S) */ | 107 | /* Map the reset vector (in headsmp-scu.S, headsmp.S) */ |
| 105 | __raw_writel(__pa(shmobile_boot_vector), AVECR); | 108 | __raw_writel(__pa(shmobile_boot_vector), AVECR); |
| 106 | shmobile_boot_fn = virt_to_phys(shmobile_boot_scu); | 109 | shmobile_boot_fn = virt_to_phys(shmobile_boot_scu); |
| 107 | shmobile_boot_arg = (unsigned long)shmobile_scu_base; | 110 | shmobile_boot_arg = (unsigned long)shmobile_scu_base; |
| 108 | 111 | ||
| 109 | /* enable cache coherency on booting CPU */ | 112 | /* setup r8a7779 specific SCU bits */ |
| 110 | scu_power_mode(shmobile_scu_base, SCU_PM_NORMAL); | 113 | shmobile_scu_base = IOMEM(R8A7779_SCU_BASE); |
| 114 | shmobile_smp_scu_prepare_cpus(max_cpus); | ||
| 111 | 115 | ||
| 112 | r8a7779_pm_init(); | 116 | r8a7779_pm_init(); |
| 113 | 117 | ||
| @@ -117,56 +121,15 @@ static void __init r8a7779_smp_prepare_cpus(unsigned int max_cpus) | |||
| 117 | r8a7779_platform_cpu_kill(3); | 121 | r8a7779_platform_cpu_kill(3); |
| 118 | } | 122 | } |
| 119 | 123 | ||
| 120 | static void __init r8a7779_smp_init_cpus(void) | ||
| 121 | { | ||
| 122 | /* setup r8a7779 specific SCU base */ | ||
| 123 | shmobile_scu_base = IOMEM(R8A7779_SCU_BASE); | ||
| 124 | |||
| 125 | shmobile_smp_init_cpus(scu_get_core_count(shmobile_scu_base)); | ||
| 126 | } | ||
| 127 | |||
| 128 | #ifdef CONFIG_HOTPLUG_CPU | 124 | #ifdef CONFIG_HOTPLUG_CPU |
| 129 | static int r8a7779_scu_psr_core_disabled(int cpu) | ||
| 130 | { | ||
| 131 | unsigned long mask = 3 << (cpu * 8); | ||
| 132 | |||
| 133 | if ((__raw_readl(shmobile_scu_base + 8) & mask) == mask) | ||
| 134 | return 1; | ||
| 135 | |||
| 136 | return 0; | ||
| 137 | } | ||
| 138 | |||
| 139 | static int r8a7779_cpu_kill(unsigned int cpu) | 125 | static int r8a7779_cpu_kill(unsigned int cpu) |
| 140 | { | 126 | { |
| 141 | int k; | 127 | if (shmobile_smp_scu_cpu_kill(cpu)) |
| 142 | 128 | return r8a7779_platform_cpu_kill(cpu); | |
| 143 | /* this function is running on another CPU than the offline target, | ||
| 144 | * here we need wait for shutdown code in platform_cpu_die() to | ||
| 145 | * finish before asking SoC-specific code to power off the CPU core. | ||
| 146 | */ | ||
| 147 | for (k = 0; k < 1000; k++) { | ||
| 148 | if (r8a7779_scu_psr_core_disabled(cpu)) | ||
| 149 | return r8a7779_platform_cpu_kill(cpu); | ||
| 150 | |||
| 151 | mdelay(1); | ||
| 152 | } | ||
| 153 | 129 | ||
| 154 | return 0; | 130 | return 0; |
| 155 | } | 131 | } |
| 156 | 132 | ||
| 157 | static void r8a7779_cpu_die(unsigned int cpu) | ||
| 158 | { | ||
| 159 | dsb(); | ||
| 160 | flush_cache_all(); | ||
| 161 | |||
| 162 | /* disable cache coherency */ | ||
| 163 | scu_power_mode(shmobile_scu_base, SCU_PM_POWEROFF); | ||
| 164 | |||
| 165 | /* Endless loop until power off from r8a7779_cpu_kill() */ | ||
| 166 | while (1) | ||
| 167 | cpu_do_idle(); | ||
| 168 | } | ||
| 169 | |||
| 170 | static int r8a7779_cpu_disable(unsigned int cpu) | 133 | static int r8a7779_cpu_disable(unsigned int cpu) |
| 171 | { | 134 | { |
| 172 | /* only CPU1->3 have power domains, do not allow hotplug of CPU0 */ | 135 | /* only CPU1->3 have power domains, do not allow hotplug of CPU0 */ |
| @@ -175,12 +138,11 @@ static int r8a7779_cpu_disable(unsigned int cpu) | |||
| 175 | #endif /* CONFIG_HOTPLUG_CPU */ | 138 | #endif /* CONFIG_HOTPLUG_CPU */ |
| 176 | 139 | ||
| 177 | struct smp_operations r8a7779_smp_ops __initdata = { | 140 | struct smp_operations r8a7779_smp_ops __initdata = { |
| 178 | .smp_init_cpus = r8a7779_smp_init_cpus, | ||
| 179 | .smp_prepare_cpus = r8a7779_smp_prepare_cpus, | 141 | .smp_prepare_cpus = r8a7779_smp_prepare_cpus, |
| 180 | .smp_boot_secondary = r8a7779_boot_secondary, | 142 | .smp_boot_secondary = r8a7779_boot_secondary, |
| 181 | #ifdef CONFIG_HOTPLUG_CPU | 143 | #ifdef CONFIG_HOTPLUG_CPU |
| 182 | .cpu_kill = r8a7779_cpu_kill, | ||
| 183 | .cpu_die = r8a7779_cpu_die, | ||
| 184 | .cpu_disable = r8a7779_cpu_disable, | 144 | .cpu_disable = r8a7779_cpu_disable, |
| 145 | .cpu_die = shmobile_smp_scu_cpu_die, | ||
| 146 | .cpu_kill = r8a7779_cpu_kill, | ||
| 185 | #endif | 147 | #endif |
| 186 | }; | 148 | }; |
diff --git a/arch/arm/mach-shmobile/smp-sh73a0.c b/arch/arm/mach-shmobile/smp-sh73a0.c index d5fc3ed4e315..0baa24443793 100644 --- a/arch/arm/mach-shmobile/smp-sh73a0.c +++ b/arch/arm/mach-shmobile/smp-sh73a0.c | |||
| @@ -20,14 +20,11 @@ | |||
| 20 | #include <linux/kernel.h> | 20 | #include <linux/kernel.h> |
| 21 | #include <linux/init.h> | 21 | #include <linux/init.h> |
| 22 | #include <linux/smp.h> | 22 | #include <linux/smp.h> |
| 23 | #include <linux/spinlock.h> | ||
| 24 | #include <linux/io.h> | 23 | #include <linux/io.h> |
| 25 | #include <linux/delay.h> | 24 | #include <linux/delay.h> |
| 26 | #include <mach/common.h> | 25 | #include <mach/common.h> |
| 27 | #include <asm/cacheflush.h> | ||
| 28 | #include <asm/smp_plat.h> | ||
| 29 | #include <mach/sh73a0.h> | 26 | #include <mach/sh73a0.h> |
| 30 | #include <asm/smp_scu.h> | 27 | #include <asm/smp_plat.h> |
| 31 | #include <asm/smp_twd.h> | 28 | #include <asm/smp_twd.h> |
| 32 | 29 | ||
| 33 | #define WUPCR IOMEM(0xe6151010) | 30 | #define WUPCR IOMEM(0xe6151010) |
| @@ -36,8 +33,6 @@ | |||
| 36 | #define SBAR IOMEM(0xe6180020) | 33 | #define SBAR IOMEM(0xe6180020) |
| 37 | #define APARMBAREA IOMEM(0xe6f10020) | 34 | #define APARMBAREA IOMEM(0xe6f10020) |
| 38 | 35 | ||
| 39 | #define PSTR_SHUTDOWN_MODE 3 | ||
| 40 | |||
| 41 | #define SH73A0_SCU_BASE 0xf0000000 | 36 | #define SH73A0_SCU_BASE 0xf0000000 |
| 42 | 37 | ||
| 43 | #ifdef CONFIG_HAVE_ARM_TWD | 38 | #ifdef CONFIG_HAVE_ARM_TWD |
| @@ -50,69 +45,33 @@ void __init sh73a0_register_twd(void) | |||
| 50 | 45 | ||
| 51 | static int sh73a0_boot_secondary(unsigned int cpu, struct task_struct *idle) | 46 | static int sh73a0_boot_secondary(unsigned int cpu, struct task_struct *idle) |
| 52 | { | 47 | { |
| 53 | cpu = cpu_logical_map(cpu); | 48 | unsigned int lcpu = cpu_logical_map(cpu); |
| 49 | int ret; | ||
| 54 | 50 | ||
| 55 | if (((__raw_readl(PSTR) >> (4 * cpu)) & 3) == 3) | 51 | ret = shmobile_smp_scu_boot_secondary(cpu, idle); |
| 56 | __raw_writel(1 << cpu, WUPCR); /* wake up */ | 52 | if (ret) |
| 53 | return ret; | ||
| 54 | |||
| 55 | if (((__raw_readl(PSTR) >> (4 * lcpu)) & 3) == 3) | ||
| 56 | __raw_writel(1 << lcpu, WUPCR); /* wake up */ | ||
| 57 | else | 57 | else |
| 58 | __raw_writel(1 << cpu, SRESCR); /* reset */ | 58 | __raw_writel(1 << lcpu, SRESCR); /* reset */ |
| 59 | 59 | ||
| 60 | return 0; | 60 | return 0; |
| 61 | } | 61 | } |
| 62 | 62 | ||
| 63 | static void __init sh73a0_smp_prepare_cpus(unsigned int max_cpus) | 63 | static void __init sh73a0_smp_prepare_cpus(unsigned int max_cpus) |
| 64 | { | 64 | { |
| 65 | scu_enable(shmobile_scu_base); | 65 | /* Map the reset vector (in headsmp.S) */ |
| 66 | |||
| 67 | /* Map the reset vector (in headsmp-scu.S, headsmp.S) */ | ||
| 68 | __raw_writel(0, APARMBAREA); /* 4k */ | 66 | __raw_writel(0, APARMBAREA); /* 4k */ |
| 69 | __raw_writel(__pa(shmobile_boot_vector), SBAR); | 67 | __raw_writel(__pa(shmobile_boot_vector), SBAR); |
| 70 | shmobile_boot_fn = virt_to_phys(shmobile_boot_scu); | ||
| 71 | shmobile_boot_arg = (unsigned long)shmobile_scu_base; | ||
| 72 | 68 | ||
| 73 | /* enable cache coherency on booting CPU */ | 69 | /* setup sh73a0 specific SCU bits */ |
| 74 | scu_power_mode(shmobile_scu_base, SCU_PM_NORMAL); | ||
| 75 | } | ||
| 76 | |||
| 77 | static void __init sh73a0_smp_init_cpus(void) | ||
| 78 | { | ||
| 79 | /* setup sh73a0 specific SCU base */ | ||
| 80 | shmobile_scu_base = IOMEM(SH73A0_SCU_BASE); | 70 | shmobile_scu_base = IOMEM(SH73A0_SCU_BASE); |
| 81 | 71 | shmobile_smp_scu_prepare_cpus(max_cpus); | |
| 82 | shmobile_smp_init_cpus(scu_get_core_count(shmobile_scu_base)); | ||
| 83 | } | 72 | } |
| 84 | 73 | ||
| 85 | #ifdef CONFIG_HOTPLUG_CPU | 74 | #ifdef CONFIG_HOTPLUG_CPU |
| 86 | static int sh73a0_cpu_kill(unsigned int cpu) | ||
| 87 | { | ||
| 88 | |||
| 89 | int k; | ||
| 90 | u32 pstr; | ||
| 91 | |||
| 92 | /* | ||
| 93 | * wait until the power status register confirms the shutdown of the | ||
| 94 | * offline target | ||
| 95 | */ | ||
| 96 | for (k = 0; k < 1000; k++) { | ||
| 97 | pstr = (__raw_readl(PSTR) >> (4 * cpu)) & 3; | ||
| 98 | if (pstr == PSTR_SHUTDOWN_MODE) | ||
| 99 | return 1; | ||
| 100 | |||
| 101 | mdelay(1); | ||
| 102 | } | ||
| 103 | |||
| 104 | return 0; | ||
| 105 | } | ||
| 106 | |||
| 107 | static void sh73a0_cpu_die(unsigned int cpu) | ||
| 108 | { | ||
| 109 | /* Set power off mode. This takes the CPU out of the MP cluster */ | ||
| 110 | scu_power_mode(shmobile_scu_base, SCU_PM_POWEROFF); | ||
| 111 | |||
| 112 | /* Enter shutdown mode */ | ||
| 113 | cpu_do_idle(); | ||
| 114 | } | ||
| 115 | |||
| 116 | static int sh73a0_cpu_disable(unsigned int cpu) | 75 | static int sh73a0_cpu_disable(unsigned int cpu) |
| 117 | { | 76 | { |
| 118 | return 0; /* CPU0 and CPU1 supported */ | 77 | return 0; /* CPU0 and CPU1 supported */ |
| @@ -120,12 +79,11 @@ static int sh73a0_cpu_disable(unsigned int cpu) | |||
| 120 | #endif /* CONFIG_HOTPLUG_CPU */ | 79 | #endif /* CONFIG_HOTPLUG_CPU */ |
| 121 | 80 | ||
| 122 | struct smp_operations sh73a0_smp_ops __initdata = { | 81 | struct smp_operations sh73a0_smp_ops __initdata = { |
| 123 | .smp_init_cpus = sh73a0_smp_init_cpus, | ||
| 124 | .smp_prepare_cpus = sh73a0_smp_prepare_cpus, | 82 | .smp_prepare_cpus = sh73a0_smp_prepare_cpus, |
| 125 | .smp_boot_secondary = sh73a0_boot_secondary, | 83 | .smp_boot_secondary = sh73a0_boot_secondary, |
| 126 | #ifdef CONFIG_HOTPLUG_CPU | 84 | #ifdef CONFIG_HOTPLUG_CPU |
| 127 | .cpu_kill = sh73a0_cpu_kill, | ||
| 128 | .cpu_die = sh73a0_cpu_die, | ||
| 129 | .cpu_disable = sh73a0_cpu_disable, | 85 | .cpu_disable = sh73a0_cpu_disable, |
| 86 | .cpu_die = shmobile_smp_scu_cpu_die, | ||
| 87 | .cpu_kill = shmobile_smp_scu_cpu_kill, | ||
| 130 | #endif | 88 | #endif |
| 131 | }; | 89 | }; |
diff --git a/arch/arm/mach-shmobile/timer.c b/arch/arm/mach-shmobile/timer.c index f321dbeb2379..62d7052d6f21 100644 --- a/arch/arm/mach-shmobile/timer.c +++ b/arch/arm/mach-shmobile/timer.c | |||
| @@ -59,7 +59,3 @@ void __init shmobile_earlytimer_init(void) | |||
| 59 | late_time_init = shmobile_late_time_init; | 59 | late_time_init = shmobile_late_time_init; |
| 60 | } | 60 | } |
| 61 | 61 | ||
| 62 | void __init shmobile_timer_init(void) | ||
| 63 | { | ||
| 64 | clocksource_of_init(); | ||
| 65 | } | ||
