Commit e3db2217f3cdabf170ed2131831b42aa0878a0ac
Exists in
ti-lsk-linux-4.1.y
and in
10 other branches
Merge tag 'omap-for-v3.19/fixes-rc1' of git://git.kernel.org/pub/scm/linux/kerne…
…l/git/tmlind/linux-omap into fixes Merge "omap fixes against v3.19-rc1" from Tony Lindgren: Fixes for omaps mostly to deal with dra7 timer issues and hypervisor mode. The other fixes are minor fixes for various boards. The summary of the fixes is: - Fix real-time counter rate typos for some frequencies - Fix counter frequency drift for am572x - Fix booting of secondary CPU in HYP mode - Fix n900 board name for legacy user space - Fix cpufreq in omap2plus_defconfig after Kconfig change - Fix dra7 qspi partitions And also, let's re-enable smc91x on some n900 boards that we have sitting in a few test boot systems after the boot loader dependencies got fixed. * tag 'omap-for-v3.19/fixes-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap: ARM: dts: Revert disabling of smc91x for n900 ARM: dts: dra7-evm: fix qspi device tree partition size ARM: omap2plus_defconfig: use CONFIG_CPUFREQ_DT ARM: OMAP2+: Fix n900 board name for legacy user space ARM: omap5/dra7xx: Enable booting secondary CPU in HYP mode ARM: dra7xx: Fix counter frequency drift for AM572x errata i856 ARM: omap5/dra7xx: Fix frequency typos Signed-off-by: Olof Johansson <olof@lixom.net>
Showing 9 changed files Inline Diff
arch/arm/boot/dts/dra7-evm.dts
1 | /* | 1 | /* |
2 | * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com/ | 2 | * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com/ |
3 | * | 3 | * |
4 | * This program is free software; you can redistribute it and/or modify | 4 | * This program is free software; you can redistribute it and/or modify |
5 | * it under the terms of the GNU General Public License version 2 as | 5 | * it under the terms of the GNU General Public License version 2 as |
6 | * published by the Free Software Foundation. | 6 | * published by the Free Software Foundation. |
7 | */ | 7 | */ |
8 | /dts-v1/; | 8 | /dts-v1/; |
9 | 9 | ||
10 | #include "dra74x.dtsi" | 10 | #include "dra74x.dtsi" |
11 | #include <dt-bindings/gpio/gpio.h> | 11 | #include <dt-bindings/gpio/gpio.h> |
12 | 12 | ||
13 | / { | 13 | / { |
14 | model = "TI DRA742"; | 14 | model = "TI DRA742"; |
15 | compatible = "ti,dra7-evm", "ti,dra742", "ti,dra74", "ti,dra7"; | 15 | compatible = "ti,dra7-evm", "ti,dra742", "ti,dra74", "ti,dra7"; |
16 | 16 | ||
17 | memory { | 17 | memory { |
18 | device_type = "memory"; | 18 | device_type = "memory"; |
19 | reg = <0x80000000 0x60000000>; /* 1536 MB */ | 19 | reg = <0x80000000 0x60000000>; /* 1536 MB */ |
20 | }; | 20 | }; |
21 | 21 | ||
22 | mmc2_3v3: fixedregulator-mmc2 { | 22 | mmc2_3v3: fixedregulator-mmc2 { |
23 | compatible = "regulator-fixed"; | 23 | compatible = "regulator-fixed"; |
24 | regulator-name = "mmc2_3v3"; | 24 | regulator-name = "mmc2_3v3"; |
25 | regulator-min-microvolt = <3300000>; | 25 | regulator-min-microvolt = <3300000>; |
26 | regulator-max-microvolt = <3300000>; | 26 | regulator-max-microvolt = <3300000>; |
27 | }; | 27 | }; |
28 | 28 | ||
29 | vtt_fixed: fixedregulator-vtt { | 29 | vtt_fixed: fixedregulator-vtt { |
30 | compatible = "regulator-fixed"; | 30 | compatible = "regulator-fixed"; |
31 | regulator-name = "vtt_fixed"; | 31 | regulator-name = "vtt_fixed"; |
32 | regulator-min-microvolt = <1350000>; | 32 | regulator-min-microvolt = <1350000>; |
33 | regulator-max-microvolt = <1350000>; | 33 | regulator-max-microvolt = <1350000>; |
34 | regulator-always-on; | 34 | regulator-always-on; |
35 | regulator-boot-on; | 35 | regulator-boot-on; |
36 | enable-active-high; | 36 | enable-active-high; |
37 | gpio = <&gpio7 11 GPIO_ACTIVE_HIGH>; | 37 | gpio = <&gpio7 11 GPIO_ACTIVE_HIGH>; |
38 | }; | 38 | }; |
39 | }; | 39 | }; |
40 | 40 | ||
41 | &dra7_pmx_core { | 41 | &dra7_pmx_core { |
42 | pinctrl-names = "default"; | 42 | pinctrl-names = "default"; |
43 | pinctrl-0 = <&vtt_pin>; | 43 | pinctrl-0 = <&vtt_pin>; |
44 | 44 | ||
45 | vtt_pin: pinmux_vtt_pin { | 45 | vtt_pin: pinmux_vtt_pin { |
46 | pinctrl-single,pins = < | 46 | pinctrl-single,pins = < |
47 | 0x3b4 (PIN_OUTPUT | MUX_MODE14) /* spi1_cs1.gpio7_11 */ | 47 | 0x3b4 (PIN_OUTPUT | MUX_MODE14) /* spi1_cs1.gpio7_11 */ |
48 | >; | 48 | >; |
49 | }; | 49 | }; |
50 | 50 | ||
51 | i2c1_pins: pinmux_i2c1_pins { | 51 | i2c1_pins: pinmux_i2c1_pins { |
52 | pinctrl-single,pins = < | 52 | pinctrl-single,pins = < |
53 | 0x400 (PIN_INPUT | MUX_MODE0) /* i2c1_sda */ | 53 | 0x400 (PIN_INPUT | MUX_MODE0) /* i2c1_sda */ |
54 | 0x404 (PIN_INPUT | MUX_MODE0) /* i2c1_scl */ | 54 | 0x404 (PIN_INPUT | MUX_MODE0) /* i2c1_scl */ |
55 | >; | 55 | >; |
56 | }; | 56 | }; |
57 | 57 | ||
58 | i2c2_pins: pinmux_i2c2_pins { | 58 | i2c2_pins: pinmux_i2c2_pins { |
59 | pinctrl-single,pins = < | 59 | pinctrl-single,pins = < |
60 | 0x408 (PIN_INPUT | MUX_MODE0) /* i2c2_sda */ | 60 | 0x408 (PIN_INPUT | MUX_MODE0) /* i2c2_sda */ |
61 | 0x40c (PIN_INPUT | MUX_MODE0) /* i2c2_scl */ | 61 | 0x40c (PIN_INPUT | MUX_MODE0) /* i2c2_scl */ |
62 | >; | 62 | >; |
63 | }; | 63 | }; |
64 | 64 | ||
65 | i2c3_pins: pinmux_i2c3_pins { | 65 | i2c3_pins: pinmux_i2c3_pins { |
66 | pinctrl-single,pins = < | 66 | pinctrl-single,pins = < |
67 | 0x288 (PIN_INPUT | MUX_MODE9) /* gpio6_14.i2c3_sda */ | 67 | 0x288 (PIN_INPUT | MUX_MODE9) /* gpio6_14.i2c3_sda */ |
68 | 0x28c (PIN_INPUT | MUX_MODE9) /* gpio6_15.i2c3_scl */ | 68 | 0x28c (PIN_INPUT | MUX_MODE9) /* gpio6_15.i2c3_scl */ |
69 | >; | 69 | >; |
70 | }; | 70 | }; |
71 | 71 | ||
72 | mcspi1_pins: pinmux_mcspi1_pins { | 72 | mcspi1_pins: pinmux_mcspi1_pins { |
73 | pinctrl-single,pins = < | 73 | pinctrl-single,pins = < |
74 | 0x3a4 (PIN_INPUT | MUX_MODE0) /* spi1_sclk */ | 74 | 0x3a4 (PIN_INPUT | MUX_MODE0) /* spi1_sclk */ |
75 | 0x3a8 (PIN_INPUT | MUX_MODE0) /* spi1_d1 */ | 75 | 0x3a8 (PIN_INPUT | MUX_MODE0) /* spi1_d1 */ |
76 | 0x3ac (PIN_INPUT | MUX_MODE0) /* spi1_d0 */ | 76 | 0x3ac (PIN_INPUT | MUX_MODE0) /* spi1_d0 */ |
77 | 0x3b0 (PIN_INPUT_SLEW | MUX_MODE0) /* spi1_cs0 */ | 77 | 0x3b0 (PIN_INPUT_SLEW | MUX_MODE0) /* spi1_cs0 */ |
78 | 0x3b8 (PIN_INPUT_SLEW | MUX_MODE6) /* spi1_cs2.hdmi1_hpd */ | 78 | 0x3b8 (PIN_INPUT_SLEW | MUX_MODE6) /* spi1_cs2.hdmi1_hpd */ |
79 | 0x3bc (PIN_INPUT_SLEW | MUX_MODE6) /* spi1_cs3.hdmi1_cec */ | 79 | 0x3bc (PIN_INPUT_SLEW | MUX_MODE6) /* spi1_cs3.hdmi1_cec */ |
80 | >; | 80 | >; |
81 | }; | 81 | }; |
82 | 82 | ||
83 | mcspi2_pins: pinmux_mcspi2_pins { | 83 | mcspi2_pins: pinmux_mcspi2_pins { |
84 | pinctrl-single,pins = < | 84 | pinctrl-single,pins = < |
85 | 0x3c0 (PIN_INPUT | MUX_MODE0) /* spi2_sclk */ | 85 | 0x3c0 (PIN_INPUT | MUX_MODE0) /* spi2_sclk */ |
86 | 0x3c4 (PIN_INPUT_SLEW | MUX_MODE0) /* spi2_d1 */ | 86 | 0x3c4 (PIN_INPUT_SLEW | MUX_MODE0) /* spi2_d1 */ |
87 | 0x3c8 (PIN_INPUT_SLEW | MUX_MODE0) /* spi2_d1 */ | 87 | 0x3c8 (PIN_INPUT_SLEW | MUX_MODE0) /* spi2_d1 */ |
88 | 0x3cc (PIN_INPUT_SLEW | MUX_MODE0) /* spi2_cs0 */ | 88 | 0x3cc (PIN_INPUT_SLEW | MUX_MODE0) /* spi2_cs0 */ |
89 | >; | 89 | >; |
90 | }; | 90 | }; |
91 | 91 | ||
92 | uart1_pins: pinmux_uart1_pins { | 92 | uart1_pins: pinmux_uart1_pins { |
93 | pinctrl-single,pins = < | 93 | pinctrl-single,pins = < |
94 | 0x3e0 (PIN_INPUT_SLEW | MUX_MODE0) /* uart1_rxd */ | 94 | 0x3e0 (PIN_INPUT_SLEW | MUX_MODE0) /* uart1_rxd */ |
95 | 0x3e4 (PIN_INPUT_SLEW | MUX_MODE0) /* uart1_txd */ | 95 | 0x3e4 (PIN_INPUT_SLEW | MUX_MODE0) /* uart1_txd */ |
96 | 0x3e8 (PIN_INPUT | MUX_MODE3) /* uart1_ctsn */ | 96 | 0x3e8 (PIN_INPUT | MUX_MODE3) /* uart1_ctsn */ |
97 | 0x3ec (PIN_INPUT | MUX_MODE3) /* uart1_rtsn */ | 97 | 0x3ec (PIN_INPUT | MUX_MODE3) /* uart1_rtsn */ |
98 | >; | 98 | >; |
99 | }; | 99 | }; |
100 | 100 | ||
101 | uart2_pins: pinmux_uart2_pins { | 101 | uart2_pins: pinmux_uart2_pins { |
102 | pinctrl-single,pins = < | 102 | pinctrl-single,pins = < |
103 | 0x3f0 (PIN_INPUT | MUX_MODE0) /* uart2_rxd */ | 103 | 0x3f0 (PIN_INPUT | MUX_MODE0) /* uart2_rxd */ |
104 | 0x3f4 (PIN_INPUT | MUX_MODE0) /* uart2_txd */ | 104 | 0x3f4 (PIN_INPUT | MUX_MODE0) /* uart2_txd */ |
105 | 0x3f8 (PIN_INPUT | MUX_MODE0) /* uart2_ctsn */ | 105 | 0x3f8 (PIN_INPUT | MUX_MODE0) /* uart2_ctsn */ |
106 | 0x3fc (PIN_INPUT | MUX_MODE0) /* uart2_rtsn */ | 106 | 0x3fc (PIN_INPUT | MUX_MODE0) /* uart2_rtsn */ |
107 | >; | 107 | >; |
108 | }; | 108 | }; |
109 | 109 | ||
110 | uart3_pins: pinmux_uart3_pins { | 110 | uart3_pins: pinmux_uart3_pins { |
111 | pinctrl-single,pins = < | 111 | pinctrl-single,pins = < |
112 | 0x248 (PIN_INPUT_SLEW | MUX_MODE0) /* uart3_rxd */ | 112 | 0x248 (PIN_INPUT_SLEW | MUX_MODE0) /* uart3_rxd */ |
113 | 0x24c (PIN_INPUT_SLEW | MUX_MODE0) /* uart3_txd */ | 113 | 0x24c (PIN_INPUT_SLEW | MUX_MODE0) /* uart3_txd */ |
114 | >; | 114 | >; |
115 | }; | 115 | }; |
116 | 116 | ||
117 | qspi1_pins: pinmux_qspi1_pins { | 117 | qspi1_pins: pinmux_qspi1_pins { |
118 | pinctrl-single,pins = < | 118 | pinctrl-single,pins = < |
119 | 0x4c (PIN_INPUT | MUX_MODE1) /* gpmc_a3.qspi1_cs2 */ | 119 | 0x4c (PIN_INPUT | MUX_MODE1) /* gpmc_a3.qspi1_cs2 */ |
120 | 0x50 (PIN_INPUT | MUX_MODE1) /* gpmc_a4.qspi1_cs3 */ | 120 | 0x50 (PIN_INPUT | MUX_MODE1) /* gpmc_a4.qspi1_cs3 */ |
121 | 0x74 (PIN_INPUT | MUX_MODE1) /* gpmc_a13.qspi1_rtclk */ | 121 | 0x74 (PIN_INPUT | MUX_MODE1) /* gpmc_a13.qspi1_rtclk */ |
122 | 0x78 (PIN_INPUT | MUX_MODE1) /* gpmc_a14.qspi1_d3 */ | 122 | 0x78 (PIN_INPUT | MUX_MODE1) /* gpmc_a14.qspi1_d3 */ |
123 | 0x7c (PIN_INPUT | MUX_MODE1) /* gpmc_a15.qspi1_d2 */ | 123 | 0x7c (PIN_INPUT | MUX_MODE1) /* gpmc_a15.qspi1_d2 */ |
124 | 0x80 (PIN_INPUT | MUX_MODE1) /* gpmc_a16.qspi1_d1 */ | 124 | 0x80 (PIN_INPUT | MUX_MODE1) /* gpmc_a16.qspi1_d1 */ |
125 | 0x84 (PIN_INPUT | MUX_MODE1) /* gpmc_a17.qspi1_d0 */ | 125 | 0x84 (PIN_INPUT | MUX_MODE1) /* gpmc_a17.qspi1_d0 */ |
126 | 0x88 (PIN_INPUT | MUX_MODE1) /* qpmc_a18.qspi1_sclk */ | 126 | 0x88 (PIN_INPUT | MUX_MODE1) /* qpmc_a18.qspi1_sclk */ |
127 | 0xb8 (PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_cs2.qspi1_cs0 */ | 127 | 0xb8 (PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_cs2.qspi1_cs0 */ |
128 | 0xbc (PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_cs3.qspi1_cs1 */ | 128 | 0xbc (PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_cs3.qspi1_cs1 */ |
129 | >; | 129 | >; |
130 | }; | 130 | }; |
131 | 131 | ||
132 | usb1_pins: pinmux_usb1_pins { | 132 | usb1_pins: pinmux_usb1_pins { |
133 | pinctrl-single,pins = < | 133 | pinctrl-single,pins = < |
134 | 0x280 (PIN_INPUT_SLEW | MUX_MODE0) /* usb1_drvvbus */ | 134 | 0x280 (PIN_INPUT_SLEW | MUX_MODE0) /* usb1_drvvbus */ |
135 | >; | 135 | >; |
136 | }; | 136 | }; |
137 | 137 | ||
138 | usb2_pins: pinmux_usb2_pins { | 138 | usb2_pins: pinmux_usb2_pins { |
139 | pinctrl-single,pins = < | 139 | pinctrl-single,pins = < |
140 | 0x284 (PIN_INPUT_SLEW | MUX_MODE0) /* usb2_drvvbus */ | 140 | 0x284 (PIN_INPUT_SLEW | MUX_MODE0) /* usb2_drvvbus */ |
141 | >; | 141 | >; |
142 | }; | 142 | }; |
143 | 143 | ||
144 | nand_flash_x16: nand_flash_x16 { | 144 | nand_flash_x16: nand_flash_x16 { |
145 | /* On DRA7 EVM, GPMC_WPN and NAND_BOOTn comes from DIP switch | 145 | /* On DRA7 EVM, GPMC_WPN and NAND_BOOTn comes from DIP switch |
146 | * So NAND flash requires following switch settings: | 146 | * So NAND flash requires following switch settings: |
147 | * SW5.9 (GPMC_WPN) = LOW | 147 | * SW5.9 (GPMC_WPN) = LOW |
148 | * SW5.1 (NAND_BOOTn) = HIGH */ | 148 | * SW5.1 (NAND_BOOTn) = HIGH */ |
149 | pinctrl-single,pins = < | 149 | pinctrl-single,pins = < |
150 | 0x0 (PIN_INPUT | MUX_MODE0) /* gpmc_ad0 */ | 150 | 0x0 (PIN_INPUT | MUX_MODE0) /* gpmc_ad0 */ |
151 | 0x4 (PIN_INPUT | MUX_MODE0) /* gpmc_ad1 */ | 151 | 0x4 (PIN_INPUT | MUX_MODE0) /* gpmc_ad1 */ |
152 | 0x8 (PIN_INPUT | MUX_MODE0) /* gpmc_ad2 */ | 152 | 0x8 (PIN_INPUT | MUX_MODE0) /* gpmc_ad2 */ |
153 | 0xc (PIN_INPUT | MUX_MODE0) /* gpmc_ad3 */ | 153 | 0xc (PIN_INPUT | MUX_MODE0) /* gpmc_ad3 */ |
154 | 0x10 (PIN_INPUT | MUX_MODE0) /* gpmc_ad4 */ | 154 | 0x10 (PIN_INPUT | MUX_MODE0) /* gpmc_ad4 */ |
155 | 0x14 (PIN_INPUT | MUX_MODE0) /* gpmc_ad5 */ | 155 | 0x14 (PIN_INPUT | MUX_MODE0) /* gpmc_ad5 */ |
156 | 0x18 (PIN_INPUT | MUX_MODE0) /* gpmc_ad6 */ | 156 | 0x18 (PIN_INPUT | MUX_MODE0) /* gpmc_ad6 */ |
157 | 0x1c (PIN_INPUT | MUX_MODE0) /* gpmc_ad7 */ | 157 | 0x1c (PIN_INPUT | MUX_MODE0) /* gpmc_ad7 */ |
158 | 0x20 (PIN_INPUT | MUX_MODE0) /* gpmc_ad8 */ | 158 | 0x20 (PIN_INPUT | MUX_MODE0) /* gpmc_ad8 */ |
159 | 0x24 (PIN_INPUT | MUX_MODE0) /* gpmc_ad9 */ | 159 | 0x24 (PIN_INPUT | MUX_MODE0) /* gpmc_ad9 */ |
160 | 0x28 (PIN_INPUT | MUX_MODE0) /* gpmc_ad10 */ | 160 | 0x28 (PIN_INPUT | MUX_MODE0) /* gpmc_ad10 */ |
161 | 0x2c (PIN_INPUT | MUX_MODE0) /* gpmc_ad11 */ | 161 | 0x2c (PIN_INPUT | MUX_MODE0) /* gpmc_ad11 */ |
162 | 0x30 (PIN_INPUT | MUX_MODE0) /* gpmc_ad12 */ | 162 | 0x30 (PIN_INPUT | MUX_MODE0) /* gpmc_ad12 */ |
163 | 0x34 (PIN_INPUT | MUX_MODE0) /* gpmc_ad13 */ | 163 | 0x34 (PIN_INPUT | MUX_MODE0) /* gpmc_ad13 */ |
164 | 0x38 (PIN_INPUT | MUX_MODE0) /* gpmc_ad14 */ | 164 | 0x38 (PIN_INPUT | MUX_MODE0) /* gpmc_ad14 */ |
165 | 0x3c (PIN_INPUT | MUX_MODE0) /* gpmc_ad15 */ | 165 | 0x3c (PIN_INPUT | MUX_MODE0) /* gpmc_ad15 */ |
166 | 0xd8 (PIN_INPUT_PULLUP | MUX_MODE0) /* gpmc_wait0 */ | 166 | 0xd8 (PIN_INPUT_PULLUP | MUX_MODE0) /* gpmc_wait0 */ |
167 | 0xcc (PIN_OUTPUT | MUX_MODE0) /* gpmc_wen */ | 167 | 0xcc (PIN_OUTPUT | MUX_MODE0) /* gpmc_wen */ |
168 | 0xb4 (PIN_OUTPUT_PULLUP | MUX_MODE0) /* gpmc_csn0 */ | 168 | 0xb4 (PIN_OUTPUT_PULLUP | MUX_MODE0) /* gpmc_csn0 */ |
169 | 0xc4 (PIN_OUTPUT | MUX_MODE0) /* gpmc_advn_ale */ | 169 | 0xc4 (PIN_OUTPUT | MUX_MODE0) /* gpmc_advn_ale */ |
170 | 0xc8 (PIN_OUTPUT | MUX_MODE0) /* gpmc_oen_ren */ | 170 | 0xc8 (PIN_OUTPUT | MUX_MODE0) /* gpmc_oen_ren */ |
171 | 0xd0 (PIN_OUTPUT | MUX_MODE0) /* gpmc_be0n_cle */ | 171 | 0xd0 (PIN_OUTPUT | MUX_MODE0) /* gpmc_be0n_cle */ |
172 | >; | 172 | >; |
173 | }; | 173 | }; |
174 | 174 | ||
175 | cpsw_default: cpsw_default { | 175 | cpsw_default: cpsw_default { |
176 | pinctrl-single,pins = < | 176 | pinctrl-single,pins = < |
177 | /* Slave 1 */ | 177 | /* Slave 1 */ |
178 | 0x250 (PIN_OUTPUT | MUX_MODE0) /* rgmii0_txc.rgmii0_txc */ | 178 | 0x250 (PIN_OUTPUT | MUX_MODE0) /* rgmii0_txc.rgmii0_txc */ |
179 | 0x254 (PIN_OUTPUT | MUX_MODE0) /* rgmii0_txctl.rgmii0_txctl */ | 179 | 0x254 (PIN_OUTPUT | MUX_MODE0) /* rgmii0_txctl.rgmii0_txctl */ |
180 | 0x258 (PIN_OUTPUT | MUX_MODE0) /* rgmii0_td3.rgmii0_txd3 */ | 180 | 0x258 (PIN_OUTPUT | MUX_MODE0) /* rgmii0_td3.rgmii0_txd3 */ |
181 | 0x25c (PIN_OUTPUT | MUX_MODE0) /* rgmii0_txd2.rgmii0_txd2 */ | 181 | 0x25c (PIN_OUTPUT | MUX_MODE0) /* rgmii0_txd2.rgmii0_txd2 */ |
182 | 0x260 (PIN_OUTPUT | MUX_MODE0) /* rgmii0_txd1.rgmii0_txd1 */ | 182 | 0x260 (PIN_OUTPUT | MUX_MODE0) /* rgmii0_txd1.rgmii0_txd1 */ |
183 | 0x264 (PIN_OUTPUT | MUX_MODE0) /* rgmii0_txd0.rgmii0_txd0 */ | 183 | 0x264 (PIN_OUTPUT | MUX_MODE0) /* rgmii0_txd0.rgmii0_txd0 */ |
184 | 0x268 (PIN_INPUT | MUX_MODE0) /* rgmii0_rxc.rgmii0_rxc */ | 184 | 0x268 (PIN_INPUT | MUX_MODE0) /* rgmii0_rxc.rgmii0_rxc */ |
185 | 0x26c (PIN_INPUT | MUX_MODE0) /* rgmii0_rxctl.rgmii0_rxctl */ | 185 | 0x26c (PIN_INPUT | MUX_MODE0) /* rgmii0_rxctl.rgmii0_rxctl */ |
186 | 0x270 (PIN_INPUT | MUX_MODE0) /* rgmii0_rxd3.rgmii0_rxd3 */ | 186 | 0x270 (PIN_INPUT | MUX_MODE0) /* rgmii0_rxd3.rgmii0_rxd3 */ |
187 | 0x274 (PIN_INPUT | MUX_MODE0) /* rgmii0_rxd2.rgmii0_rxd2 */ | 187 | 0x274 (PIN_INPUT | MUX_MODE0) /* rgmii0_rxd2.rgmii0_rxd2 */ |
188 | 0x278 (PIN_INPUT | MUX_MODE0) /* rgmii0_rxd1.rgmii0_rxd1 */ | 188 | 0x278 (PIN_INPUT | MUX_MODE0) /* rgmii0_rxd1.rgmii0_rxd1 */ |
189 | 0x27c (PIN_INPUT | MUX_MODE0) /* rgmii0_rxd0.rgmii0_rxd0 */ | 189 | 0x27c (PIN_INPUT | MUX_MODE0) /* rgmii0_rxd0.rgmii0_rxd0 */ |
190 | 190 | ||
191 | /* Slave 2 */ | 191 | /* Slave 2 */ |
192 | 0x198 (PIN_OUTPUT | MUX_MODE3) /* vin2a_d12.rgmii1_txc */ | 192 | 0x198 (PIN_OUTPUT | MUX_MODE3) /* vin2a_d12.rgmii1_txc */ |
193 | 0x19c (PIN_OUTPUT | MUX_MODE3) /* vin2a_d13.rgmii1_tctl */ | 193 | 0x19c (PIN_OUTPUT | MUX_MODE3) /* vin2a_d13.rgmii1_tctl */ |
194 | 0x1a0 (PIN_OUTPUT | MUX_MODE3) /* vin2a_d14.rgmii1_td3 */ | 194 | 0x1a0 (PIN_OUTPUT | MUX_MODE3) /* vin2a_d14.rgmii1_td3 */ |
195 | 0x1a4 (PIN_OUTPUT | MUX_MODE3) /* vin2a_d15.rgmii1_td2 */ | 195 | 0x1a4 (PIN_OUTPUT | MUX_MODE3) /* vin2a_d15.rgmii1_td2 */ |
196 | 0x1a8 (PIN_OUTPUT | MUX_MODE3) /* vin2a_d16.rgmii1_td1 */ | 196 | 0x1a8 (PIN_OUTPUT | MUX_MODE3) /* vin2a_d16.rgmii1_td1 */ |
197 | 0x1ac (PIN_OUTPUT | MUX_MODE3) /* vin2a_d17.rgmii1_td0 */ | 197 | 0x1ac (PIN_OUTPUT | MUX_MODE3) /* vin2a_d17.rgmii1_td0 */ |
198 | 0x1b0 (PIN_INPUT | MUX_MODE3) /* vin2a_d18.rgmii1_rclk */ | 198 | 0x1b0 (PIN_INPUT | MUX_MODE3) /* vin2a_d18.rgmii1_rclk */ |
199 | 0x1b4 (PIN_INPUT | MUX_MODE3) /* vin2a_d19.rgmii1_rctl */ | 199 | 0x1b4 (PIN_INPUT | MUX_MODE3) /* vin2a_d19.rgmii1_rctl */ |
200 | 0x1b8 (PIN_INPUT | MUX_MODE3) /* vin2a_d20.rgmii1_rd3 */ | 200 | 0x1b8 (PIN_INPUT | MUX_MODE3) /* vin2a_d20.rgmii1_rd3 */ |
201 | 0x1bc (PIN_INPUT | MUX_MODE3) /* vin2a_d21.rgmii1_rd2 */ | 201 | 0x1bc (PIN_INPUT | MUX_MODE3) /* vin2a_d21.rgmii1_rd2 */ |
202 | 0x1c0 (PIN_INPUT | MUX_MODE3) /* vin2a_d22.rgmii1_rd1 */ | 202 | 0x1c0 (PIN_INPUT | MUX_MODE3) /* vin2a_d22.rgmii1_rd1 */ |
203 | 0x1c4 (PIN_INPUT | MUX_MODE3) /* vin2a_d23.rgmii1_rd0 */ | 203 | 0x1c4 (PIN_INPUT | MUX_MODE3) /* vin2a_d23.rgmii1_rd0 */ |
204 | >; | 204 | >; |
205 | 205 | ||
206 | }; | 206 | }; |
207 | 207 | ||
208 | cpsw_sleep: cpsw_sleep { | 208 | cpsw_sleep: cpsw_sleep { |
209 | pinctrl-single,pins = < | 209 | pinctrl-single,pins = < |
210 | /* Slave 1 */ | 210 | /* Slave 1 */ |
211 | 0x250 (MUX_MODE15) | 211 | 0x250 (MUX_MODE15) |
212 | 0x254 (MUX_MODE15) | 212 | 0x254 (MUX_MODE15) |
213 | 0x258 (MUX_MODE15) | 213 | 0x258 (MUX_MODE15) |
214 | 0x25c (MUX_MODE15) | 214 | 0x25c (MUX_MODE15) |
215 | 0x260 (MUX_MODE15) | 215 | 0x260 (MUX_MODE15) |
216 | 0x264 (MUX_MODE15) | 216 | 0x264 (MUX_MODE15) |
217 | 0x268 (MUX_MODE15) | 217 | 0x268 (MUX_MODE15) |
218 | 0x26c (MUX_MODE15) | 218 | 0x26c (MUX_MODE15) |
219 | 0x270 (MUX_MODE15) | 219 | 0x270 (MUX_MODE15) |
220 | 0x274 (MUX_MODE15) | 220 | 0x274 (MUX_MODE15) |
221 | 0x278 (MUX_MODE15) | 221 | 0x278 (MUX_MODE15) |
222 | 0x27c (MUX_MODE15) | 222 | 0x27c (MUX_MODE15) |
223 | 223 | ||
224 | /* Slave 2 */ | 224 | /* Slave 2 */ |
225 | 0x198 (MUX_MODE15) | 225 | 0x198 (MUX_MODE15) |
226 | 0x19c (MUX_MODE15) | 226 | 0x19c (MUX_MODE15) |
227 | 0x1a0 (MUX_MODE15) | 227 | 0x1a0 (MUX_MODE15) |
228 | 0x1a4 (MUX_MODE15) | 228 | 0x1a4 (MUX_MODE15) |
229 | 0x1a8 (MUX_MODE15) | 229 | 0x1a8 (MUX_MODE15) |
230 | 0x1ac (MUX_MODE15) | 230 | 0x1ac (MUX_MODE15) |
231 | 0x1b0 (MUX_MODE15) | 231 | 0x1b0 (MUX_MODE15) |
232 | 0x1b4 (MUX_MODE15) | 232 | 0x1b4 (MUX_MODE15) |
233 | 0x1b8 (MUX_MODE15) | 233 | 0x1b8 (MUX_MODE15) |
234 | 0x1bc (MUX_MODE15) | 234 | 0x1bc (MUX_MODE15) |
235 | 0x1c0 (MUX_MODE15) | 235 | 0x1c0 (MUX_MODE15) |
236 | 0x1c4 (MUX_MODE15) | 236 | 0x1c4 (MUX_MODE15) |
237 | >; | 237 | >; |
238 | }; | 238 | }; |
239 | 239 | ||
240 | davinci_mdio_default: davinci_mdio_default { | 240 | davinci_mdio_default: davinci_mdio_default { |
241 | pinctrl-single,pins = < | 241 | pinctrl-single,pins = < |
242 | 0x23c (PIN_OUTPUT_PULLUP | MUX_MODE0) /* mdio_d.mdio_d */ | 242 | 0x23c (PIN_OUTPUT_PULLUP | MUX_MODE0) /* mdio_d.mdio_d */ |
243 | 0x240 (PIN_INPUT_PULLUP | MUX_MODE0) /* mdio_clk.mdio_clk */ | 243 | 0x240 (PIN_INPUT_PULLUP | MUX_MODE0) /* mdio_clk.mdio_clk */ |
244 | >; | 244 | >; |
245 | }; | 245 | }; |
246 | 246 | ||
247 | davinci_mdio_sleep: davinci_mdio_sleep { | 247 | davinci_mdio_sleep: davinci_mdio_sleep { |
248 | pinctrl-single,pins = < | 248 | pinctrl-single,pins = < |
249 | 0x23c (MUX_MODE15) | 249 | 0x23c (MUX_MODE15) |
250 | 0x240 (MUX_MODE15) | 250 | 0x240 (MUX_MODE15) |
251 | >; | 251 | >; |
252 | }; | 252 | }; |
253 | 253 | ||
254 | dcan1_pins_default: dcan1_pins_default { | 254 | dcan1_pins_default: dcan1_pins_default { |
255 | pinctrl-single,pins = < | 255 | pinctrl-single,pins = < |
256 | 0x3d0 (PIN_OUTPUT | MUX_MODE0) /* dcan1_tx */ | 256 | 0x3d0 (PIN_OUTPUT | MUX_MODE0) /* dcan1_tx */ |
257 | 0x3d4 (MUX_MODE15) /* dcan1_rx.off */ | 257 | 0x3d4 (MUX_MODE15) /* dcan1_rx.off */ |
258 | 0x418 (PULL_DIS | MUX_MODE1) /* wakeup0.dcan1_rx */ | 258 | 0x418 (PULL_DIS | MUX_MODE1) /* wakeup0.dcan1_rx */ |
259 | >; | 259 | >; |
260 | }; | 260 | }; |
261 | 261 | ||
262 | dcan1_pins_sleep: dcan1_pins_sleep { | 262 | dcan1_pins_sleep: dcan1_pins_sleep { |
263 | pinctrl-single,pins = < | 263 | pinctrl-single,pins = < |
264 | 0x3d0 (MUX_MODE15) /* dcan1_tx.off */ | 264 | 0x3d0 (MUX_MODE15) /* dcan1_tx.off */ |
265 | 0x3d4 (MUX_MODE15) /* dcan1_rx.off */ | 265 | 0x3d4 (MUX_MODE15) /* dcan1_rx.off */ |
266 | 0x418 (MUX_MODE15) /* wakeup0.off */ | 266 | 0x418 (MUX_MODE15) /* wakeup0.off */ |
267 | >; | 267 | >; |
268 | }; | 268 | }; |
269 | }; | 269 | }; |
270 | 270 | ||
271 | &i2c1 { | 271 | &i2c1 { |
272 | status = "okay"; | 272 | status = "okay"; |
273 | pinctrl-names = "default"; | 273 | pinctrl-names = "default"; |
274 | pinctrl-0 = <&i2c1_pins>; | 274 | pinctrl-0 = <&i2c1_pins>; |
275 | clock-frequency = <400000>; | 275 | clock-frequency = <400000>; |
276 | 276 | ||
277 | tps659038: tps659038@58 { | 277 | tps659038: tps659038@58 { |
278 | compatible = "ti,tps659038"; | 278 | compatible = "ti,tps659038"; |
279 | reg = <0x58>; | 279 | reg = <0x58>; |
280 | 280 | ||
281 | tps659038_pmic { | 281 | tps659038_pmic { |
282 | compatible = "ti,tps659038-pmic"; | 282 | compatible = "ti,tps659038-pmic"; |
283 | 283 | ||
284 | regulators { | 284 | regulators { |
285 | smps123_reg: smps123 { | 285 | smps123_reg: smps123 { |
286 | /* VDD_MPU */ | 286 | /* VDD_MPU */ |
287 | regulator-name = "smps123"; | 287 | regulator-name = "smps123"; |
288 | regulator-min-microvolt = < 850000>; | 288 | regulator-min-microvolt = < 850000>; |
289 | regulator-max-microvolt = <1250000>; | 289 | regulator-max-microvolt = <1250000>; |
290 | regulator-always-on; | 290 | regulator-always-on; |
291 | regulator-boot-on; | 291 | regulator-boot-on; |
292 | }; | 292 | }; |
293 | 293 | ||
294 | smps45_reg: smps45 { | 294 | smps45_reg: smps45 { |
295 | /* VDD_DSPEVE */ | 295 | /* VDD_DSPEVE */ |
296 | regulator-name = "smps45"; | 296 | regulator-name = "smps45"; |
297 | regulator-min-microvolt = < 850000>; | 297 | regulator-min-microvolt = < 850000>; |
298 | regulator-max-microvolt = <1150000>; | 298 | regulator-max-microvolt = <1150000>; |
299 | regulator-always-on; | 299 | regulator-always-on; |
300 | regulator-boot-on; | 300 | regulator-boot-on; |
301 | }; | 301 | }; |
302 | 302 | ||
303 | smps6_reg: smps6 { | 303 | smps6_reg: smps6 { |
304 | /* VDD_GPU - over VDD_SMPS6 */ | 304 | /* VDD_GPU - over VDD_SMPS6 */ |
305 | regulator-name = "smps6"; | 305 | regulator-name = "smps6"; |
306 | regulator-min-microvolt = <850000>; | 306 | regulator-min-microvolt = <850000>; |
307 | regulator-max-microvolt = <1250000>; | 307 | regulator-max-microvolt = <1250000>; |
308 | regulator-always-on; | 308 | regulator-always-on; |
309 | regulator-boot-on; | 309 | regulator-boot-on; |
310 | }; | 310 | }; |
311 | 311 | ||
312 | smps7_reg: smps7 { | 312 | smps7_reg: smps7 { |
313 | /* CORE_VDD */ | 313 | /* CORE_VDD */ |
314 | regulator-name = "smps7"; | 314 | regulator-name = "smps7"; |
315 | regulator-min-microvolt = <850000>; | 315 | regulator-min-microvolt = <850000>; |
316 | regulator-max-microvolt = <1060000>; | 316 | regulator-max-microvolt = <1060000>; |
317 | regulator-always-on; | 317 | regulator-always-on; |
318 | regulator-boot-on; | 318 | regulator-boot-on; |
319 | }; | 319 | }; |
320 | 320 | ||
321 | smps8_reg: smps8 { | 321 | smps8_reg: smps8 { |
322 | /* VDD_IVAHD */ | 322 | /* VDD_IVAHD */ |
323 | regulator-name = "smps8"; | 323 | regulator-name = "smps8"; |
324 | regulator-min-microvolt = < 850000>; | 324 | regulator-min-microvolt = < 850000>; |
325 | regulator-max-microvolt = <1250000>; | 325 | regulator-max-microvolt = <1250000>; |
326 | regulator-always-on; | 326 | regulator-always-on; |
327 | regulator-boot-on; | 327 | regulator-boot-on; |
328 | }; | 328 | }; |
329 | 329 | ||
330 | smps9_reg: smps9 { | 330 | smps9_reg: smps9 { |
331 | /* VDDS1V8 */ | 331 | /* VDDS1V8 */ |
332 | regulator-name = "smps9"; | 332 | regulator-name = "smps9"; |
333 | regulator-min-microvolt = <1800000>; | 333 | regulator-min-microvolt = <1800000>; |
334 | regulator-max-microvolt = <1800000>; | 334 | regulator-max-microvolt = <1800000>; |
335 | regulator-always-on; | 335 | regulator-always-on; |
336 | regulator-boot-on; | 336 | regulator-boot-on; |
337 | }; | 337 | }; |
338 | 338 | ||
339 | ldo1_reg: ldo1 { | 339 | ldo1_reg: ldo1 { |
340 | /* LDO1_OUT --> SDIO */ | 340 | /* LDO1_OUT --> SDIO */ |
341 | regulator-name = "ldo1"; | 341 | regulator-name = "ldo1"; |
342 | regulator-min-microvolt = <1800000>; | 342 | regulator-min-microvolt = <1800000>; |
343 | regulator-max-microvolt = <3300000>; | 343 | regulator-max-microvolt = <3300000>; |
344 | regulator-boot-on; | 344 | regulator-boot-on; |
345 | }; | 345 | }; |
346 | 346 | ||
347 | ldo2_reg: ldo2 { | 347 | ldo2_reg: ldo2 { |
348 | /* VDD_RTCIO */ | 348 | /* VDD_RTCIO */ |
349 | /* LDO2 -> VDDSHV5, LDO2 also goes to CAN_PHY_3V3 */ | 349 | /* LDO2 -> VDDSHV5, LDO2 also goes to CAN_PHY_3V3 */ |
350 | regulator-name = "ldo2"; | 350 | regulator-name = "ldo2"; |
351 | regulator-min-microvolt = <3300000>; | 351 | regulator-min-microvolt = <3300000>; |
352 | regulator-max-microvolt = <3300000>; | 352 | regulator-max-microvolt = <3300000>; |
353 | regulator-always-on; | 353 | regulator-always-on; |
354 | regulator-boot-on; | 354 | regulator-boot-on; |
355 | }; | 355 | }; |
356 | 356 | ||
357 | ldo3_reg: ldo3 { | 357 | ldo3_reg: ldo3 { |
358 | /* VDDA_1V8_PHY */ | 358 | /* VDDA_1V8_PHY */ |
359 | regulator-name = "ldo3"; | 359 | regulator-name = "ldo3"; |
360 | regulator-min-microvolt = <1800000>; | 360 | regulator-min-microvolt = <1800000>; |
361 | regulator-max-microvolt = <1800000>; | 361 | regulator-max-microvolt = <1800000>; |
362 | regulator-always-on; | 362 | regulator-always-on; |
363 | regulator-boot-on; | 363 | regulator-boot-on; |
364 | }; | 364 | }; |
365 | 365 | ||
366 | ldo9_reg: ldo9 { | 366 | ldo9_reg: ldo9 { |
367 | /* VDD_RTC */ | 367 | /* VDD_RTC */ |
368 | regulator-name = "ldo9"; | 368 | regulator-name = "ldo9"; |
369 | regulator-min-microvolt = <1050000>; | 369 | regulator-min-microvolt = <1050000>; |
370 | regulator-max-microvolt = <1050000>; | 370 | regulator-max-microvolt = <1050000>; |
371 | regulator-always-on; | 371 | regulator-always-on; |
372 | regulator-boot-on; | 372 | regulator-boot-on; |
373 | }; | 373 | }; |
374 | 374 | ||
375 | ldoln_reg: ldoln { | 375 | ldoln_reg: ldoln { |
376 | /* VDDA_1V8_PLL */ | 376 | /* VDDA_1V8_PLL */ |
377 | regulator-name = "ldoln"; | 377 | regulator-name = "ldoln"; |
378 | regulator-min-microvolt = <1800000>; | 378 | regulator-min-microvolt = <1800000>; |
379 | regulator-max-microvolt = <1800000>; | 379 | regulator-max-microvolt = <1800000>; |
380 | regulator-always-on; | 380 | regulator-always-on; |
381 | regulator-boot-on; | 381 | regulator-boot-on; |
382 | }; | 382 | }; |
383 | 383 | ||
384 | ldousb_reg: ldousb { | 384 | ldousb_reg: ldousb { |
385 | /* VDDA_3V_USB: VDDA_USBHS33 */ | 385 | /* VDDA_3V_USB: VDDA_USBHS33 */ |
386 | regulator-name = "ldousb"; | 386 | regulator-name = "ldousb"; |
387 | regulator-min-microvolt = <3300000>; | 387 | regulator-min-microvolt = <3300000>; |
388 | regulator-max-microvolt = <3300000>; | 388 | regulator-max-microvolt = <3300000>; |
389 | regulator-boot-on; | 389 | regulator-boot-on; |
390 | }; | 390 | }; |
391 | }; | 391 | }; |
392 | }; | 392 | }; |
393 | }; | 393 | }; |
394 | }; | 394 | }; |
395 | 395 | ||
396 | &i2c2 { | 396 | &i2c2 { |
397 | status = "okay"; | 397 | status = "okay"; |
398 | pinctrl-names = "default"; | 398 | pinctrl-names = "default"; |
399 | pinctrl-0 = <&i2c2_pins>; | 399 | pinctrl-0 = <&i2c2_pins>; |
400 | clock-frequency = <400000>; | 400 | clock-frequency = <400000>; |
401 | }; | 401 | }; |
402 | 402 | ||
403 | &i2c3 { | 403 | &i2c3 { |
404 | status = "okay"; | 404 | status = "okay"; |
405 | pinctrl-names = "default"; | 405 | pinctrl-names = "default"; |
406 | pinctrl-0 = <&i2c3_pins>; | 406 | pinctrl-0 = <&i2c3_pins>; |
407 | clock-frequency = <400000>; | 407 | clock-frequency = <400000>; |
408 | }; | 408 | }; |
409 | 409 | ||
410 | &mcspi1 { | 410 | &mcspi1 { |
411 | status = "okay"; | 411 | status = "okay"; |
412 | pinctrl-names = "default"; | 412 | pinctrl-names = "default"; |
413 | pinctrl-0 = <&mcspi1_pins>; | 413 | pinctrl-0 = <&mcspi1_pins>; |
414 | }; | 414 | }; |
415 | 415 | ||
416 | &mcspi2 { | 416 | &mcspi2 { |
417 | status = "okay"; | 417 | status = "okay"; |
418 | pinctrl-names = "default"; | 418 | pinctrl-names = "default"; |
419 | pinctrl-0 = <&mcspi2_pins>; | 419 | pinctrl-0 = <&mcspi2_pins>; |
420 | }; | 420 | }; |
421 | 421 | ||
422 | &uart1 { | 422 | &uart1 { |
423 | status = "okay"; | 423 | status = "okay"; |
424 | pinctrl-names = "default"; | 424 | pinctrl-names = "default"; |
425 | pinctrl-0 = <&uart1_pins>; | 425 | pinctrl-0 = <&uart1_pins>; |
426 | interrupts-extended = <&gic GIC_SPI 67 IRQ_TYPE_LEVEL_HIGH>, | 426 | interrupts-extended = <&gic GIC_SPI 67 IRQ_TYPE_LEVEL_HIGH>, |
427 | <&dra7_pmx_core 0x3e0>; | 427 | <&dra7_pmx_core 0x3e0>; |
428 | }; | 428 | }; |
429 | 429 | ||
430 | &uart2 { | 430 | &uart2 { |
431 | status = "okay"; | 431 | status = "okay"; |
432 | pinctrl-names = "default"; | 432 | pinctrl-names = "default"; |
433 | pinctrl-0 = <&uart2_pins>; | 433 | pinctrl-0 = <&uart2_pins>; |
434 | }; | 434 | }; |
435 | 435 | ||
436 | &uart3 { | 436 | &uart3 { |
437 | status = "okay"; | 437 | status = "okay"; |
438 | pinctrl-names = "default"; | 438 | pinctrl-names = "default"; |
439 | pinctrl-0 = <&uart3_pins>; | 439 | pinctrl-0 = <&uart3_pins>; |
440 | }; | 440 | }; |
441 | 441 | ||
442 | &mmc1 { | 442 | &mmc1 { |
443 | status = "okay"; | 443 | status = "okay"; |
444 | vmmc-supply = <&ldo1_reg>; | 444 | vmmc-supply = <&ldo1_reg>; |
445 | bus-width = <4>; | 445 | bus-width = <4>; |
446 | }; | 446 | }; |
447 | 447 | ||
448 | &mmc2 { | 448 | &mmc2 { |
449 | status = "okay"; | 449 | status = "okay"; |
450 | vmmc-supply = <&mmc2_3v3>; | 450 | vmmc-supply = <&mmc2_3v3>; |
451 | bus-width = <8>; | 451 | bus-width = <8>; |
452 | }; | 452 | }; |
453 | 453 | ||
454 | &cpu0 { | 454 | &cpu0 { |
455 | cpu0-supply = <&smps123_reg>; | 455 | cpu0-supply = <&smps123_reg>; |
456 | }; | 456 | }; |
457 | 457 | ||
458 | &qspi { | 458 | &qspi { |
459 | status = "okay"; | 459 | status = "okay"; |
460 | pinctrl-names = "default"; | 460 | pinctrl-names = "default"; |
461 | pinctrl-0 = <&qspi1_pins>; | 461 | pinctrl-0 = <&qspi1_pins>; |
462 | 462 | ||
463 | spi-max-frequency = <48000000>; | 463 | spi-max-frequency = <48000000>; |
464 | m25p80@0 { | 464 | m25p80@0 { |
465 | compatible = "s25fl256s1"; | 465 | compatible = "s25fl256s1"; |
466 | spi-max-frequency = <48000000>; | 466 | spi-max-frequency = <48000000>; |
467 | reg = <0>; | 467 | reg = <0>; |
468 | spi-tx-bus-width = <1>; | 468 | spi-tx-bus-width = <1>; |
469 | spi-rx-bus-width = <4>; | 469 | spi-rx-bus-width = <4>; |
470 | spi-cpol; | 470 | spi-cpol; |
471 | spi-cpha; | 471 | spi-cpha; |
472 | #address-cells = <1>; | 472 | #address-cells = <1>; |
473 | #size-cells = <1>; | 473 | #size-cells = <1>; |
474 | 474 | ||
475 | /* MTD partition table. | 475 | /* MTD partition table. |
476 | * The ROM checks the first four physical blocks | 476 | * The ROM checks the first four physical blocks |
477 | * for a valid file to boot and the flash here is | 477 | * for a valid file to boot and the flash here is |
478 | * 64KiB block size. | 478 | * 64KiB block size. |
479 | */ | 479 | */ |
480 | partition@0 { | 480 | partition@0 { |
481 | label = "QSPI.SPL"; | 481 | label = "QSPI.SPL"; |
482 | reg = <0x00000000 0x000010000>; | 482 | reg = <0x00000000 0x000010000>; |
483 | }; | 483 | }; |
484 | partition@1 { | 484 | partition@1 { |
485 | label = "QSPI.SPL.backup1"; | 485 | label = "QSPI.SPL.backup1"; |
486 | reg = <0x00010000 0x00010000>; | 486 | reg = <0x00010000 0x00010000>; |
487 | }; | 487 | }; |
488 | partition@2 { | 488 | partition@2 { |
489 | label = "QSPI.SPL.backup2"; | 489 | label = "QSPI.SPL.backup2"; |
490 | reg = <0x00020000 0x00010000>; | 490 | reg = <0x00020000 0x00010000>; |
491 | }; | 491 | }; |
492 | partition@3 { | 492 | partition@3 { |
493 | label = "QSPI.SPL.backup3"; | 493 | label = "QSPI.SPL.backup3"; |
494 | reg = <0x00030000 0x00010000>; | 494 | reg = <0x00030000 0x00010000>; |
495 | }; | 495 | }; |
496 | partition@4 { | 496 | partition@4 { |
497 | label = "QSPI.u-boot"; | 497 | label = "QSPI.u-boot"; |
498 | reg = <0x00040000 0x00100000>; | 498 | reg = <0x00040000 0x00100000>; |
499 | }; | 499 | }; |
500 | partition@5 { | 500 | partition@5 { |
501 | label = "QSPI.u-boot-spl-os"; | 501 | label = "QSPI.u-boot-spl-os"; |
502 | reg = <0x00140000 0x00010000>; | 502 | reg = <0x00140000 0x00080000>; |
503 | }; | 503 | }; |
504 | partition@6 { | 504 | partition@6 { |
505 | label = "QSPI.u-boot-env"; | 505 | label = "QSPI.u-boot-env"; |
506 | reg = <0x00150000 0x00010000>; | 506 | reg = <0x001c0000 0x00010000>; |
507 | }; | 507 | }; |
508 | partition@7 { | 508 | partition@7 { |
509 | label = "QSPI.u-boot-env.backup1"; | 509 | label = "QSPI.u-boot-env.backup1"; |
510 | reg = <0x00160000 0x0010000>; | 510 | reg = <0x001d0000 0x0010000>; |
511 | }; | 511 | }; |
512 | partition@8 { | 512 | partition@8 { |
513 | label = "QSPI.kernel"; | 513 | label = "QSPI.kernel"; |
514 | reg = <0x00170000 0x0800000>; | 514 | reg = <0x001e0000 0x0800000>; |
515 | }; | 515 | }; |
516 | partition@9 { | 516 | partition@9 { |
517 | label = "QSPI.file-system"; | 517 | label = "QSPI.file-system"; |
518 | reg = <0x00970000 0x01690000>; | 518 | reg = <0x009e0000 0x01620000>; |
519 | }; | 519 | }; |
520 | }; | 520 | }; |
521 | }; | 521 | }; |
522 | 522 | ||
523 | &usb1 { | 523 | &usb1 { |
524 | dr_mode = "peripheral"; | 524 | dr_mode = "peripheral"; |
525 | pinctrl-names = "default"; | 525 | pinctrl-names = "default"; |
526 | pinctrl-0 = <&usb1_pins>; | 526 | pinctrl-0 = <&usb1_pins>; |
527 | }; | 527 | }; |
528 | 528 | ||
529 | &usb2 { | 529 | &usb2 { |
530 | dr_mode = "host"; | 530 | dr_mode = "host"; |
531 | pinctrl-names = "default"; | 531 | pinctrl-names = "default"; |
532 | pinctrl-0 = <&usb2_pins>; | 532 | pinctrl-0 = <&usb2_pins>; |
533 | }; | 533 | }; |
534 | 534 | ||
535 | &elm { | 535 | &elm { |
536 | status = "okay"; | 536 | status = "okay"; |
537 | }; | 537 | }; |
538 | 538 | ||
539 | &gpmc { | 539 | &gpmc { |
540 | status = "okay"; | 540 | status = "okay"; |
541 | pinctrl-names = "default"; | 541 | pinctrl-names = "default"; |
542 | pinctrl-0 = <&nand_flash_x16>; | 542 | pinctrl-0 = <&nand_flash_x16>; |
543 | ranges = <0 0 0 0x01000000>; /* minimum GPMC partition = 16MB */ | 543 | ranges = <0 0 0 0x01000000>; /* minimum GPMC partition = 16MB */ |
544 | nand@0,0 { | 544 | nand@0,0 { |
545 | reg = <0 0 4>; /* device IO registers */ | 545 | reg = <0 0 4>; /* device IO registers */ |
546 | ti,nand-ecc-opt = "bch8"; | 546 | ti,nand-ecc-opt = "bch8"; |
547 | ti,elm-id = <&elm>; | 547 | ti,elm-id = <&elm>; |
548 | nand-bus-width = <16>; | 548 | nand-bus-width = <16>; |
549 | gpmc,device-width = <2>; | 549 | gpmc,device-width = <2>; |
550 | gpmc,sync-clk-ps = <0>; | 550 | gpmc,sync-clk-ps = <0>; |
551 | gpmc,cs-on-ns = <0>; | 551 | gpmc,cs-on-ns = <0>; |
552 | gpmc,cs-rd-off-ns = <80>; | 552 | gpmc,cs-rd-off-ns = <80>; |
553 | gpmc,cs-wr-off-ns = <80>; | 553 | gpmc,cs-wr-off-ns = <80>; |
554 | gpmc,adv-on-ns = <0>; | 554 | gpmc,adv-on-ns = <0>; |
555 | gpmc,adv-rd-off-ns = <60>; | 555 | gpmc,adv-rd-off-ns = <60>; |
556 | gpmc,adv-wr-off-ns = <60>; | 556 | gpmc,adv-wr-off-ns = <60>; |
557 | gpmc,we-on-ns = <10>; | 557 | gpmc,we-on-ns = <10>; |
558 | gpmc,we-off-ns = <50>; | 558 | gpmc,we-off-ns = <50>; |
559 | gpmc,oe-on-ns = <4>; | 559 | gpmc,oe-on-ns = <4>; |
560 | gpmc,oe-off-ns = <40>; | 560 | gpmc,oe-off-ns = <40>; |
561 | gpmc,access-ns = <40>; | 561 | gpmc,access-ns = <40>; |
562 | gpmc,wr-access-ns = <80>; | 562 | gpmc,wr-access-ns = <80>; |
563 | gpmc,rd-cycle-ns = <80>; | 563 | gpmc,rd-cycle-ns = <80>; |
564 | gpmc,wr-cycle-ns = <80>; | 564 | gpmc,wr-cycle-ns = <80>; |
565 | gpmc,bus-turnaround-ns = <0>; | 565 | gpmc,bus-turnaround-ns = <0>; |
566 | gpmc,cycle2cycle-delay-ns = <0>; | 566 | gpmc,cycle2cycle-delay-ns = <0>; |
567 | gpmc,clk-activation-ns = <0>; | 567 | gpmc,clk-activation-ns = <0>; |
568 | gpmc,wait-monitoring-ns = <0>; | 568 | gpmc,wait-monitoring-ns = <0>; |
569 | gpmc,wr-data-mux-bus-ns = <0>; | 569 | gpmc,wr-data-mux-bus-ns = <0>; |
570 | /* MTD partition table */ | 570 | /* MTD partition table */ |
571 | /* All SPL-* partitions are sized to minimal length | 571 | /* All SPL-* partitions are sized to minimal length |
572 | * which can be independently programmable. For | 572 | * which can be independently programmable. For |
573 | * NAND flash this is equal to size of erase-block */ | 573 | * NAND flash this is equal to size of erase-block */ |
574 | #address-cells = <1>; | 574 | #address-cells = <1>; |
575 | #size-cells = <1>; | 575 | #size-cells = <1>; |
576 | partition@0 { | 576 | partition@0 { |
577 | label = "NAND.SPL"; | 577 | label = "NAND.SPL"; |
578 | reg = <0x00000000 0x000020000>; | 578 | reg = <0x00000000 0x000020000>; |
579 | }; | 579 | }; |
580 | partition@1 { | 580 | partition@1 { |
581 | label = "NAND.SPL.backup1"; | 581 | label = "NAND.SPL.backup1"; |
582 | reg = <0x00020000 0x00020000>; | 582 | reg = <0x00020000 0x00020000>; |
583 | }; | 583 | }; |
584 | partition@2 { | 584 | partition@2 { |
585 | label = "NAND.SPL.backup2"; | 585 | label = "NAND.SPL.backup2"; |
586 | reg = <0x00040000 0x00020000>; | 586 | reg = <0x00040000 0x00020000>; |
587 | }; | 587 | }; |
588 | partition@3 { | 588 | partition@3 { |
589 | label = "NAND.SPL.backup3"; | 589 | label = "NAND.SPL.backup3"; |
590 | reg = <0x00060000 0x00020000>; | 590 | reg = <0x00060000 0x00020000>; |
591 | }; | 591 | }; |
592 | partition@4 { | 592 | partition@4 { |
593 | label = "NAND.u-boot-spl-os"; | 593 | label = "NAND.u-boot-spl-os"; |
594 | reg = <0x00080000 0x00040000>; | 594 | reg = <0x00080000 0x00040000>; |
595 | }; | 595 | }; |
596 | partition@5 { | 596 | partition@5 { |
597 | label = "NAND.u-boot"; | 597 | label = "NAND.u-boot"; |
598 | reg = <0x000c0000 0x00100000>; | 598 | reg = <0x000c0000 0x00100000>; |
599 | }; | 599 | }; |
600 | partition@6 { | 600 | partition@6 { |
601 | label = "NAND.u-boot-env"; | 601 | label = "NAND.u-boot-env"; |
602 | reg = <0x001c0000 0x00020000>; | 602 | reg = <0x001c0000 0x00020000>; |
603 | }; | 603 | }; |
604 | partition@7 { | 604 | partition@7 { |
605 | label = "NAND.u-boot-env.backup1"; | 605 | label = "NAND.u-boot-env.backup1"; |
606 | reg = <0x001e0000 0x00020000>; | 606 | reg = <0x001e0000 0x00020000>; |
607 | }; | 607 | }; |
608 | partition@8 { | 608 | partition@8 { |
609 | label = "NAND.kernel"; | 609 | label = "NAND.kernel"; |
610 | reg = <0x00200000 0x00800000>; | 610 | reg = <0x00200000 0x00800000>; |
611 | }; | 611 | }; |
612 | partition@9 { | 612 | partition@9 { |
613 | label = "NAND.file-system"; | 613 | label = "NAND.file-system"; |
614 | reg = <0x00a00000 0x0f600000>; | 614 | reg = <0x00a00000 0x0f600000>; |
615 | }; | 615 | }; |
616 | }; | 616 | }; |
617 | }; | 617 | }; |
618 | 618 | ||
619 | &usb2_phy1 { | 619 | &usb2_phy1 { |
620 | phy-supply = <&ldousb_reg>; | 620 | phy-supply = <&ldousb_reg>; |
621 | }; | 621 | }; |
622 | 622 | ||
623 | &usb2_phy2 { | 623 | &usb2_phy2 { |
624 | phy-supply = <&ldousb_reg>; | 624 | phy-supply = <&ldousb_reg>; |
625 | }; | 625 | }; |
626 | 626 | ||
627 | &gpio7 { | 627 | &gpio7 { |
628 | ti,no-reset-on-init; | 628 | ti,no-reset-on-init; |
629 | ti,no-idle-on-init; | 629 | ti,no-idle-on-init; |
630 | }; | 630 | }; |
631 | 631 | ||
632 | &mac { | 632 | &mac { |
633 | status = "okay"; | 633 | status = "okay"; |
634 | pinctrl-names = "default", "sleep"; | 634 | pinctrl-names = "default", "sleep"; |
635 | pinctrl-0 = <&cpsw_default>; | 635 | pinctrl-0 = <&cpsw_default>; |
636 | pinctrl-1 = <&cpsw_sleep>; | 636 | pinctrl-1 = <&cpsw_sleep>; |
637 | dual_emac; | 637 | dual_emac; |
638 | }; | 638 | }; |
639 | 639 | ||
640 | &cpsw_emac0 { | 640 | &cpsw_emac0 { |
641 | phy_id = <&davinci_mdio>, <2>; | 641 | phy_id = <&davinci_mdio>, <2>; |
642 | phy-mode = "rgmii"; | 642 | phy-mode = "rgmii"; |
643 | dual_emac_res_vlan = <1>; | 643 | dual_emac_res_vlan = <1>; |
644 | }; | 644 | }; |
645 | 645 | ||
646 | &cpsw_emac1 { | 646 | &cpsw_emac1 { |
647 | phy_id = <&davinci_mdio>, <3>; | 647 | phy_id = <&davinci_mdio>, <3>; |
648 | phy-mode = "rgmii"; | 648 | phy-mode = "rgmii"; |
649 | dual_emac_res_vlan = <2>; | 649 | dual_emac_res_vlan = <2>; |
650 | }; | 650 | }; |
651 | 651 | ||
652 | &davinci_mdio { | 652 | &davinci_mdio { |
653 | pinctrl-names = "default", "sleep"; | 653 | pinctrl-names = "default", "sleep"; |
654 | pinctrl-0 = <&davinci_mdio_default>; | 654 | pinctrl-0 = <&davinci_mdio_default>; |
655 | pinctrl-1 = <&davinci_mdio_sleep>; | 655 | pinctrl-1 = <&davinci_mdio_sleep>; |
656 | }; | 656 | }; |
657 | 657 | ||
658 | &dcan1 { | 658 | &dcan1 { |
659 | status = "ok"; | 659 | status = "ok"; |
660 | pinctrl-names = "default", "sleep"; | 660 | pinctrl-names = "default", "sleep"; |
661 | pinctrl-0 = <&dcan1_pins_default>; | 661 | pinctrl-0 = <&dcan1_pins_default>; |
662 | pinctrl-1 = <&dcan1_pins_sleep>; | 662 | pinctrl-1 = <&dcan1_pins_sleep>; |
663 | }; | 663 | }; |
664 | 664 |
arch/arm/boot/dts/omap3-n900.dts
1 | /* | 1 | /* |
2 | * Copyright (C) 2013 Pavel Machek <pavel@ucw.cz> | 2 | * Copyright (C) 2013 Pavel Machek <pavel@ucw.cz> |
3 | * Copyright (C) 2013-2014 Aaro Koskinen <aaro.koskinen@iki.fi> | 3 | * Copyright (C) 2013-2014 Aaro Koskinen <aaro.koskinen@iki.fi> |
4 | * | 4 | * |
5 | * This program is free software; you can redistribute it and/or modify | 5 | * This program is free software; you can redistribute it and/or modify |
6 | * it under the terms of the GNU General Public License version 2 (or later) as | 6 | * it under the terms of the GNU General Public License version 2 (or later) as |
7 | * published by the Free Software Foundation. | 7 | * published by the Free Software Foundation. |
8 | */ | 8 | */ |
9 | 9 | ||
10 | /dts-v1/; | 10 | /dts-v1/; |
11 | 11 | ||
12 | #include "omap34xx-hs.dtsi" | 12 | #include "omap34xx-hs.dtsi" |
13 | #include <dt-bindings/input/input.h> | 13 | #include <dt-bindings/input/input.h> |
14 | 14 | ||
15 | / { | 15 | / { |
16 | model = "Nokia N900"; | 16 | model = "Nokia N900"; |
17 | compatible = "nokia,omap3-n900", "ti,omap3430", "ti,omap3"; | 17 | compatible = "nokia,omap3-n900", "ti,omap3430", "ti,omap3"; |
18 | 18 | ||
19 | cpus { | 19 | cpus { |
20 | cpu@0 { | 20 | cpu@0 { |
21 | cpu0-supply = <&vcc>; | 21 | cpu0-supply = <&vcc>; |
22 | }; | 22 | }; |
23 | }; | 23 | }; |
24 | 24 | ||
25 | leds { | 25 | leds { |
26 | compatible = "gpio-leds"; | 26 | compatible = "gpio-leds"; |
27 | heartbeat { | 27 | heartbeat { |
28 | label = "debug::sleep"; | 28 | label = "debug::sleep"; |
29 | gpios = <&gpio6 2 GPIO_ACTIVE_HIGH>; /* gpio162 */ | 29 | gpios = <&gpio6 2 GPIO_ACTIVE_HIGH>; /* gpio162 */ |
30 | linux,default-trigger = "default-on"; | 30 | linux,default-trigger = "default-on"; |
31 | pinctrl-names = "default"; | 31 | pinctrl-names = "default"; |
32 | pinctrl-0 = <&debug_leds>; | 32 | pinctrl-0 = <&debug_leds>; |
33 | }; | 33 | }; |
34 | }; | 34 | }; |
35 | 35 | ||
36 | memory { | 36 | memory { |
37 | device_type = "memory"; | 37 | device_type = "memory"; |
38 | reg = <0x80000000 0x10000000>; /* 256 MB */ | 38 | reg = <0x80000000 0x10000000>; /* 256 MB */ |
39 | }; | 39 | }; |
40 | 40 | ||
41 | gpio_keys { | 41 | gpio_keys { |
42 | compatible = "gpio-keys"; | 42 | compatible = "gpio-keys"; |
43 | 43 | ||
44 | camera_lens_cover { | 44 | camera_lens_cover { |
45 | label = "Camera Lens Cover"; | 45 | label = "Camera Lens Cover"; |
46 | gpios = <&gpio4 14 GPIO_ACTIVE_LOW>; /* 110 */ | 46 | gpios = <&gpio4 14 GPIO_ACTIVE_LOW>; /* 110 */ |
47 | linux,input-type = <5>; /* EV_SW */ | 47 | linux,input-type = <5>; /* EV_SW */ |
48 | linux,code = <0x09>; /* SW_CAMERA_LENS_COVER */ | 48 | linux,code = <0x09>; /* SW_CAMERA_LENS_COVER */ |
49 | gpio-key,wakeup; | 49 | gpio-key,wakeup; |
50 | }; | 50 | }; |
51 | 51 | ||
52 | camera_focus { | 52 | camera_focus { |
53 | label = "Camera Focus"; | 53 | label = "Camera Focus"; |
54 | gpios = <&gpio3 4 GPIO_ACTIVE_LOW>; /* 68 */ | 54 | gpios = <&gpio3 4 GPIO_ACTIVE_LOW>; /* 68 */ |
55 | linux,code = <0x210>; /* KEY_CAMERA_FOCUS */ | 55 | linux,code = <0x210>; /* KEY_CAMERA_FOCUS */ |
56 | gpio-key,wakeup; | 56 | gpio-key,wakeup; |
57 | }; | 57 | }; |
58 | 58 | ||
59 | camera_capture { | 59 | camera_capture { |
60 | label = "Camera Capture"; | 60 | label = "Camera Capture"; |
61 | gpios = <&gpio3 5 GPIO_ACTIVE_LOW>; /* 69 */ | 61 | gpios = <&gpio3 5 GPIO_ACTIVE_LOW>; /* 69 */ |
62 | linux,code = <0xd4>; /* KEY_CAMERA */ | 62 | linux,code = <0xd4>; /* KEY_CAMERA */ |
63 | gpio-key,wakeup; | 63 | gpio-key,wakeup; |
64 | }; | 64 | }; |
65 | 65 | ||
66 | lock_button { | 66 | lock_button { |
67 | label = "Lock Button"; | 67 | label = "Lock Button"; |
68 | gpios = <&gpio4 17 GPIO_ACTIVE_LOW>; /* 113 */ | 68 | gpios = <&gpio4 17 GPIO_ACTIVE_LOW>; /* 113 */ |
69 | linux,code = <0x98>; /* KEY_SCREENLOCK */ | 69 | linux,code = <0x98>; /* KEY_SCREENLOCK */ |
70 | gpio-key,wakeup; | 70 | gpio-key,wakeup; |
71 | }; | 71 | }; |
72 | 72 | ||
73 | keypad_slide { | 73 | keypad_slide { |
74 | label = "Keypad Slide"; | 74 | label = "Keypad Slide"; |
75 | gpios = <&gpio3 7 GPIO_ACTIVE_LOW>; /* 71 */ | 75 | gpios = <&gpio3 7 GPIO_ACTIVE_LOW>; /* 71 */ |
76 | linux,input-type = <5>; /* EV_SW */ | 76 | linux,input-type = <5>; /* EV_SW */ |
77 | linux,code = <0x0a>; /* SW_KEYPAD_SLIDE */ | 77 | linux,code = <0x0a>; /* SW_KEYPAD_SLIDE */ |
78 | gpio-key,wakeup; | 78 | gpio-key,wakeup; |
79 | }; | 79 | }; |
80 | 80 | ||
81 | proximity_sensor { | 81 | proximity_sensor { |
82 | label = "Proximity Sensor"; | 82 | label = "Proximity Sensor"; |
83 | gpios = <&gpio3 25 GPIO_ACTIVE_HIGH>; /* 89 */ | 83 | gpios = <&gpio3 25 GPIO_ACTIVE_HIGH>; /* 89 */ |
84 | linux,input-type = <5>; /* EV_SW */ | 84 | linux,input-type = <5>; /* EV_SW */ |
85 | linux,code = <0x0b>; /* SW_FRONT_PROXIMITY */ | 85 | linux,code = <0x0b>; /* SW_FRONT_PROXIMITY */ |
86 | }; | 86 | }; |
87 | }; | 87 | }; |
88 | 88 | ||
89 | isp1704: isp1704 { | 89 | isp1704: isp1704 { |
90 | compatible = "nxp,isp1704"; | 90 | compatible = "nxp,isp1704"; |
91 | nxp,enable-gpio = <&gpio3 3 GPIO_ACTIVE_HIGH>; | 91 | nxp,enable-gpio = <&gpio3 3 GPIO_ACTIVE_HIGH>; |
92 | usb-phy = <&usb2_phy>; | 92 | usb-phy = <&usb2_phy>; |
93 | }; | 93 | }; |
94 | 94 | ||
95 | tv: connector { | 95 | tv: connector { |
96 | compatible = "composite-video-connector"; | 96 | compatible = "composite-video-connector"; |
97 | label = "tv"; | 97 | label = "tv"; |
98 | 98 | ||
99 | port { | 99 | port { |
100 | tv_connector_in: endpoint { | 100 | tv_connector_in: endpoint { |
101 | remote-endpoint = <&venc_out>; | 101 | remote-endpoint = <&venc_out>; |
102 | }; | 102 | }; |
103 | }; | 103 | }; |
104 | }; | 104 | }; |
105 | 105 | ||
106 | sound: n900-audio { | 106 | sound: n900-audio { |
107 | compatible = "nokia,n900-audio"; | 107 | compatible = "nokia,n900-audio"; |
108 | 108 | ||
109 | nokia,cpu-dai = <&mcbsp2>; | 109 | nokia,cpu-dai = <&mcbsp2>; |
110 | nokia,audio-codec = <&tlv320aic3x>, <&tlv320aic3x_aux>; | 110 | nokia,audio-codec = <&tlv320aic3x>, <&tlv320aic3x_aux>; |
111 | nokia,headphone-amplifier = <&tpa6130a2>; | 111 | nokia,headphone-amplifier = <&tpa6130a2>; |
112 | 112 | ||
113 | tvout-selection-gpios = <&gpio2 8 GPIO_ACTIVE_HIGH>; /* 40 */ | 113 | tvout-selection-gpios = <&gpio2 8 GPIO_ACTIVE_HIGH>; /* 40 */ |
114 | jack-detection-gpios = <&gpio6 17 GPIO_ACTIVE_HIGH>; /* 177 */ | 114 | jack-detection-gpios = <&gpio6 17 GPIO_ACTIVE_HIGH>; /* 177 */ |
115 | eci-switch-gpios = <&gpio6 22 GPIO_ACTIVE_HIGH>; /* 182 */ | 115 | eci-switch-gpios = <&gpio6 22 GPIO_ACTIVE_HIGH>; /* 182 */ |
116 | speaker-amplifier-gpios = <&twl_gpio 7 GPIO_ACTIVE_HIGH>; | 116 | speaker-amplifier-gpios = <&twl_gpio 7 GPIO_ACTIVE_HIGH>; |
117 | }; | 117 | }; |
118 | 118 | ||
119 | battery: n900-battery { | 119 | battery: n900-battery { |
120 | compatible = "nokia,n900-battery"; | 120 | compatible = "nokia,n900-battery"; |
121 | io-channels = <&twl_madc 0>, <&twl_madc 4>, <&twl_madc 12>; | 121 | io-channels = <&twl_madc 0>, <&twl_madc 4>, <&twl_madc 12>; |
122 | io-channel-names = "temp", "bsi", "vbat"; | 122 | io-channel-names = "temp", "bsi", "vbat"; |
123 | }; | 123 | }; |
124 | }; | 124 | }; |
125 | 125 | ||
126 | &omap3_pmx_core { | 126 | &omap3_pmx_core { |
127 | pinctrl-names = "default"; | 127 | pinctrl-names = "default"; |
128 | 128 | ||
129 | uart2_pins: pinmux_uart2_pins { | 129 | uart2_pins: pinmux_uart2_pins { |
130 | pinctrl-single,pins = < | 130 | pinctrl-single,pins = < |
131 | 0x14a (PIN_INPUT | MUX_MODE0) /* uart2_rx */ | 131 | 0x14a (PIN_INPUT | MUX_MODE0) /* uart2_rx */ |
132 | 0x148 (PIN_OUTPUT | MUX_MODE0) /* uart2_tx */ | 132 | 0x148 (PIN_OUTPUT | MUX_MODE0) /* uart2_tx */ |
133 | >; | 133 | >; |
134 | }; | 134 | }; |
135 | 135 | ||
136 | uart3_pins: pinmux_uart3_pins { | 136 | uart3_pins: pinmux_uart3_pins { |
137 | pinctrl-single,pins = < | 137 | pinctrl-single,pins = < |
138 | 0x16e (PIN_INPUT | MUX_MODE0) /* uart3_rx */ | 138 | 0x16e (PIN_INPUT | MUX_MODE0) /* uart3_rx */ |
139 | 0x170 (PIN_OUTPUT | MUX_MODE0) /* uart3_tx */ | 139 | 0x170 (PIN_OUTPUT | MUX_MODE0) /* uart3_tx */ |
140 | >; | 140 | >; |
141 | }; | 141 | }; |
142 | 142 | ||
143 | ethernet_pins: pinmux_ethernet_pins { | 143 | ethernet_pins: pinmux_ethernet_pins { |
144 | pinctrl-single,pins = < | 144 | pinctrl-single,pins = < |
145 | OMAP3_CORE1_IOPAD(0x20b4, PIN_INPUT_PULLDOWN | MUX_MODE4) /* gpmc_ncs3.gpio_54 */ | 145 | OMAP3_CORE1_IOPAD(0x20b4, PIN_INPUT_PULLDOWN | MUX_MODE4) /* gpmc_ncs3.gpio_54 */ |
146 | OMAP3_CORE1_IOPAD(0x20fc, PIN_OUTPUT | MUX_MODE4) /* dss_data16.gpio_86 */ | 146 | OMAP3_CORE1_IOPAD(0x20fc, PIN_OUTPUT | MUX_MODE4) /* dss_data16.gpio_86 */ |
147 | OMAP3_CORE1_IOPAD(0x219c, PIN_OUTPUT | MUX_MODE4) /* uart3_rts_sd.gpio_164 */ | 147 | OMAP3_CORE1_IOPAD(0x219c, PIN_OUTPUT | MUX_MODE4) /* uart3_rts_sd.gpio_164 */ |
148 | >; | 148 | >; |
149 | }; | 149 | }; |
150 | 150 | ||
151 | gpmc_pins: pinmux_gpmc_pins { | 151 | gpmc_pins: pinmux_gpmc_pins { |
152 | pinctrl-single,pins = < | 152 | pinctrl-single,pins = < |
153 | 153 | ||
154 | /* address lines */ | 154 | /* address lines */ |
155 | OMAP3_CORE1_IOPAD(0x207a, PIN_OUTPUT | MUX_MODE0) /* gpmc_a1.gpmc_a1 */ | 155 | OMAP3_CORE1_IOPAD(0x207a, PIN_OUTPUT | MUX_MODE0) /* gpmc_a1.gpmc_a1 */ |
156 | OMAP3_CORE1_IOPAD(0x207c, PIN_OUTPUT | MUX_MODE0) /* gpmc_a2.gpmc_a2 */ | 156 | OMAP3_CORE1_IOPAD(0x207c, PIN_OUTPUT | MUX_MODE0) /* gpmc_a2.gpmc_a2 */ |
157 | OMAP3_CORE1_IOPAD(0x207e, PIN_OUTPUT | MUX_MODE0) /* gpmc_a3.gpmc_a3 */ | 157 | OMAP3_CORE1_IOPAD(0x207e, PIN_OUTPUT | MUX_MODE0) /* gpmc_a3.gpmc_a3 */ |
158 | 158 | ||
159 | /* data lines, gpmc_d0..d7 not muxable according to TRM */ | 159 | /* data lines, gpmc_d0..d7 not muxable according to TRM */ |
160 | OMAP3_CORE1_IOPAD(0x209e, PIN_INPUT | MUX_MODE0) /* gpmc_d8.gpmc_d8 */ | 160 | OMAP3_CORE1_IOPAD(0x209e, PIN_INPUT | MUX_MODE0) /* gpmc_d8.gpmc_d8 */ |
161 | OMAP3_CORE1_IOPAD(0x20a0, PIN_INPUT | MUX_MODE0) /* gpmc_d9.gpmc_d9 */ | 161 | OMAP3_CORE1_IOPAD(0x20a0, PIN_INPUT | MUX_MODE0) /* gpmc_d9.gpmc_d9 */ |
162 | OMAP3_CORE1_IOPAD(0x20a2, PIN_INPUT | MUX_MODE0) /* gpmc_d10.gpmc_d10 */ | 162 | OMAP3_CORE1_IOPAD(0x20a2, PIN_INPUT | MUX_MODE0) /* gpmc_d10.gpmc_d10 */ |
163 | OMAP3_CORE1_IOPAD(0x20a4, PIN_INPUT | MUX_MODE0) /* gpmc_d11.gpmc_d11 */ | 163 | OMAP3_CORE1_IOPAD(0x20a4, PIN_INPUT | MUX_MODE0) /* gpmc_d11.gpmc_d11 */ |
164 | OMAP3_CORE1_IOPAD(0x20a6, PIN_INPUT | MUX_MODE0) /* gpmc_d12.gpmc_d12 */ | 164 | OMAP3_CORE1_IOPAD(0x20a6, PIN_INPUT | MUX_MODE0) /* gpmc_d12.gpmc_d12 */ |
165 | OMAP3_CORE1_IOPAD(0x20a8, PIN_INPUT | MUX_MODE0) /* gpmc_d13.gpmc_d13 */ | 165 | OMAP3_CORE1_IOPAD(0x20a8, PIN_INPUT | MUX_MODE0) /* gpmc_d13.gpmc_d13 */ |
166 | OMAP3_CORE1_IOPAD(0x20aa, PIN_INPUT | MUX_MODE0) /* gpmc_d14.gpmc_d14 */ | 166 | OMAP3_CORE1_IOPAD(0x20aa, PIN_INPUT | MUX_MODE0) /* gpmc_d14.gpmc_d14 */ |
167 | OMAP3_CORE1_IOPAD(0x20ac, PIN_INPUT | MUX_MODE0) /* gpmc_d15.gpmc_d15 */ | 167 | OMAP3_CORE1_IOPAD(0x20ac, PIN_INPUT | MUX_MODE0) /* gpmc_d15.gpmc_d15 */ |
168 | 168 | ||
169 | /* | 169 | /* |
170 | * gpmc_ncs0, gpmc_nadv_ale, gpmc_noe, gpmc_nwe, gpmc_wait0 not muxable | 170 | * gpmc_ncs0, gpmc_nadv_ale, gpmc_noe, gpmc_nwe, gpmc_wait0 not muxable |
171 | * according to TRM. OneNAND seems to require PIN_INPUT on clock. | 171 | * according to TRM. OneNAND seems to require PIN_INPUT on clock. |
172 | */ | 172 | */ |
173 | OMAP3_CORE1_IOPAD(0x20b0, PIN_OUTPUT | MUX_MODE0) /* gpmc_ncs1.gpmc_ncs1 */ | 173 | OMAP3_CORE1_IOPAD(0x20b0, PIN_OUTPUT | MUX_MODE0) /* gpmc_ncs1.gpmc_ncs1 */ |
174 | OMAP3_CORE1_IOPAD(0x20be, PIN_INPUT | MUX_MODE0) /* gpmc_clk.gpmc_clk */ | 174 | OMAP3_CORE1_IOPAD(0x20be, PIN_INPUT | MUX_MODE0) /* gpmc_clk.gpmc_clk */ |
175 | >; | 175 | >; |
176 | }; | 176 | }; |
177 | 177 | ||
178 | i2c1_pins: pinmux_i2c1_pins { | 178 | i2c1_pins: pinmux_i2c1_pins { |
179 | pinctrl-single,pins = < | 179 | pinctrl-single,pins = < |
180 | 0x18a (PIN_INPUT | MUX_MODE0) /* i2c1_scl */ | 180 | 0x18a (PIN_INPUT | MUX_MODE0) /* i2c1_scl */ |
181 | 0x18c (PIN_INPUT | MUX_MODE0) /* i2c1_sda */ | 181 | 0x18c (PIN_INPUT | MUX_MODE0) /* i2c1_sda */ |
182 | >; | 182 | >; |
183 | }; | 183 | }; |
184 | 184 | ||
185 | i2c2_pins: pinmux_i2c2_pins { | 185 | i2c2_pins: pinmux_i2c2_pins { |
186 | pinctrl-single,pins = < | 186 | pinctrl-single,pins = < |
187 | 0x18e (PIN_INPUT | MUX_MODE0) /* i2c2_scl */ | 187 | 0x18e (PIN_INPUT | MUX_MODE0) /* i2c2_scl */ |
188 | 0x190 (PIN_INPUT | MUX_MODE0) /* i2c2_sda */ | 188 | 0x190 (PIN_INPUT | MUX_MODE0) /* i2c2_sda */ |
189 | >; | 189 | >; |
190 | }; | 190 | }; |
191 | 191 | ||
192 | i2c3_pins: pinmux_i2c3_pins { | 192 | i2c3_pins: pinmux_i2c3_pins { |
193 | pinctrl-single,pins = < | 193 | pinctrl-single,pins = < |
194 | 0x192 (PIN_INPUT | MUX_MODE0) /* i2c3_scl */ | 194 | 0x192 (PIN_INPUT | MUX_MODE0) /* i2c3_scl */ |
195 | 0x194 (PIN_INPUT | MUX_MODE0) /* i2c3_sda */ | 195 | 0x194 (PIN_INPUT | MUX_MODE0) /* i2c3_sda */ |
196 | >; | 196 | >; |
197 | }; | 197 | }; |
198 | 198 | ||
199 | debug_leds: pinmux_debug_led_pins { | 199 | debug_leds: pinmux_debug_led_pins { |
200 | pinctrl-single,pins = < | 200 | pinctrl-single,pins = < |
201 | OMAP3_CORE1_IOPAD(0x2198, PIN_OUTPUT | MUX_MODE4) /* mcbsp1_clkx.gpio_162 */ | 201 | OMAP3_CORE1_IOPAD(0x2198, PIN_OUTPUT | MUX_MODE4) /* mcbsp1_clkx.gpio_162 */ |
202 | >; | 202 | >; |
203 | }; | 203 | }; |
204 | 204 | ||
205 | mcspi4_pins: pinmux_mcspi4_pins { | 205 | mcspi4_pins: pinmux_mcspi4_pins { |
206 | pinctrl-single,pins = < | 206 | pinctrl-single,pins = < |
207 | 0x15c (PIN_INPUT_PULLDOWN | MUX_MODE1) /* mcspi4_clk */ | 207 | 0x15c (PIN_INPUT_PULLDOWN | MUX_MODE1) /* mcspi4_clk */ |
208 | 0x162 (PIN_INPUT_PULLDOWN | MUX_MODE1) /* mcspi4_somi */ | 208 | 0x162 (PIN_INPUT_PULLDOWN | MUX_MODE1) /* mcspi4_somi */ |
209 | 0x160 (PIN_OUTPUT | MUX_MODE1) /* mcspi4_simo */ | 209 | 0x160 (PIN_OUTPUT | MUX_MODE1) /* mcspi4_simo */ |
210 | 0x166 (PIN_OUTPUT | MUX_MODE1) /* mcspi4_cs0 */ | 210 | 0x166 (PIN_OUTPUT | MUX_MODE1) /* mcspi4_cs0 */ |
211 | >; | 211 | >; |
212 | }; | 212 | }; |
213 | 213 | ||
214 | mmc1_pins: pinmux_mmc1_pins { | 214 | mmc1_pins: pinmux_mmc1_pins { |
215 | pinctrl-single,pins = < | 215 | pinctrl-single,pins = < |
216 | 0x114 (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc1_clk */ | 216 | 0x114 (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc1_clk */ |
217 | 0x116 (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc1_cmd */ | 217 | 0x116 (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc1_cmd */ |
218 | 0x118 (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc1_dat0 */ | 218 | 0x118 (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc1_dat0 */ |
219 | 0x11a (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc1_dat1 */ | 219 | 0x11a (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc1_dat1 */ |
220 | 0x11c (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc1_dat2 */ | 220 | 0x11c (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc1_dat2 */ |
221 | 0x11e (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc1_dat3 */ | 221 | 0x11e (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc1_dat3 */ |
222 | >; | 222 | >; |
223 | }; | 223 | }; |
224 | 224 | ||
225 | mmc2_pins: pinmux_mmc2_pins { | 225 | mmc2_pins: pinmux_mmc2_pins { |
226 | pinctrl-single,pins = < | 226 | pinctrl-single,pins = < |
227 | 0x128 (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_clk */ | 227 | 0x128 (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_clk */ |
228 | 0x12a (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_cmd */ | 228 | 0x12a (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_cmd */ |
229 | 0x12c (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_dat0 */ | 229 | 0x12c (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_dat0 */ |
230 | 0x12e (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_dat1 */ | 230 | 0x12e (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_dat1 */ |
231 | 0x130 (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_dat2 */ | 231 | 0x130 (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_dat2 */ |
232 | 0x132 (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_dat3 */ | 232 | 0x132 (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_dat3 */ |
233 | 0x134 (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_dat4 */ | 233 | 0x134 (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_dat4 */ |
234 | 0x136 (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_dat5 */ | 234 | 0x136 (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_dat5 */ |
235 | 0x138 (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_dat6 */ | 235 | 0x138 (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_dat6 */ |
236 | 0x13a (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_dat7 */ | 236 | 0x13a (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_dat7 */ |
237 | >; | 237 | >; |
238 | }; | 238 | }; |
239 | 239 | ||
240 | acx565akm_pins: pinmux_acx565akm_pins { | 240 | acx565akm_pins: pinmux_acx565akm_pins { |
241 | pinctrl-single,pins = < | 241 | pinctrl-single,pins = < |
242 | 0x0d4 (PIN_OUTPUT | MUX_MODE4) /* RX51_LCD_RESET_GPIO */ | 242 | 0x0d4 (PIN_OUTPUT | MUX_MODE4) /* RX51_LCD_RESET_GPIO */ |
243 | >; | 243 | >; |
244 | }; | 244 | }; |
245 | 245 | ||
246 | dss_sdi_pins: pinmux_dss_sdi_pins { | 246 | dss_sdi_pins: pinmux_dss_sdi_pins { |
247 | pinctrl-single,pins = < | 247 | pinctrl-single,pins = < |
248 | 0x0c0 (PIN_OUTPUT | MUX_MODE1) /* dss_data10.sdi_dat1n */ | 248 | 0x0c0 (PIN_OUTPUT | MUX_MODE1) /* dss_data10.sdi_dat1n */ |
249 | 0x0c2 (PIN_OUTPUT | MUX_MODE1) /* dss_data11.sdi_dat1p */ | 249 | 0x0c2 (PIN_OUTPUT | MUX_MODE1) /* dss_data11.sdi_dat1p */ |
250 | 0x0c4 (PIN_OUTPUT | MUX_MODE1) /* dss_data12.sdi_dat2n */ | 250 | 0x0c4 (PIN_OUTPUT | MUX_MODE1) /* dss_data12.sdi_dat2n */ |
251 | 0x0c6 (PIN_OUTPUT | MUX_MODE1) /* dss_data13.sdi_dat2p */ | 251 | 0x0c6 (PIN_OUTPUT | MUX_MODE1) /* dss_data13.sdi_dat2p */ |
252 | 252 | ||
253 | 0x0d8 (PIN_OUTPUT | MUX_MODE1) /* dss_data22.sdi_clkp */ | 253 | 0x0d8 (PIN_OUTPUT | MUX_MODE1) /* dss_data22.sdi_clkp */ |
254 | 0x0da (PIN_OUTPUT | MUX_MODE1) /* dss_data23.sdi_clkn */ | 254 | 0x0da (PIN_OUTPUT | MUX_MODE1) /* dss_data23.sdi_clkn */ |
255 | >; | 255 | >; |
256 | }; | 256 | }; |
257 | 257 | ||
258 | wl1251_pins: pinmux_wl1251 { | 258 | wl1251_pins: pinmux_wl1251 { |
259 | pinctrl-single,pins = < | 259 | pinctrl-single,pins = < |
260 | 0x0ce (PIN_OUTPUT | MUX_MODE4) /* gpio 87 => wl1251 enable */ | 260 | 0x0ce (PIN_OUTPUT | MUX_MODE4) /* gpio 87 => wl1251 enable */ |
261 | 0x05a (PIN_INPUT | MUX_MODE4) /* gpio 42 => wl1251 irq */ | 261 | 0x05a (PIN_INPUT | MUX_MODE4) /* gpio 42 => wl1251 irq */ |
262 | >; | 262 | >; |
263 | }; | 263 | }; |
264 | 264 | ||
265 | ssi_pins: pinmux_ssi { | 265 | ssi_pins: pinmux_ssi { |
266 | pinctrl-single,pins = < | 266 | pinctrl-single,pins = < |
267 | 0x150 (PIN_INPUT_PULLUP | MUX_MODE1) /* ssi1_rdy_tx */ | 267 | 0x150 (PIN_INPUT_PULLUP | MUX_MODE1) /* ssi1_rdy_tx */ |
268 | 0x14e (PIN_OUTPUT | MUX_MODE1) /* ssi1_flag_tx */ | 268 | 0x14e (PIN_OUTPUT | MUX_MODE1) /* ssi1_flag_tx */ |
269 | 0x152 (PIN_INPUT | WAKEUP_EN | MUX_MODE4) /* ssi1_wake_tx (cawake) */ | 269 | 0x152 (PIN_INPUT | WAKEUP_EN | MUX_MODE4) /* ssi1_wake_tx (cawake) */ |
270 | 0x14c (PIN_OUTPUT | MUX_MODE1) /* ssi1_dat_tx */ | 270 | 0x14c (PIN_OUTPUT | MUX_MODE1) /* ssi1_dat_tx */ |
271 | 0x154 (PIN_INPUT | MUX_MODE1) /* ssi1_dat_rx */ | 271 | 0x154 (PIN_INPUT | MUX_MODE1) /* ssi1_dat_rx */ |
272 | 0x156 (PIN_INPUT | MUX_MODE1) /* ssi1_flag_rx */ | 272 | 0x156 (PIN_INPUT | MUX_MODE1) /* ssi1_flag_rx */ |
273 | 0x158 (PIN_OUTPUT | MUX_MODE1) /* ssi1_rdy_rx */ | 273 | 0x158 (PIN_OUTPUT | MUX_MODE1) /* ssi1_rdy_rx */ |
274 | 0x15a (PIN_OUTPUT | MUX_MODE1) /* ssi1_wake */ | 274 | 0x15a (PIN_OUTPUT | MUX_MODE1) /* ssi1_wake */ |
275 | >; | 275 | >; |
276 | }; | 276 | }; |
277 | 277 | ||
278 | modem_pins: pinmux_modem { | 278 | modem_pins: pinmux_modem { |
279 | pinctrl-single,pins = < | 279 | pinctrl-single,pins = < |
280 | 0x0ac (PIN_OUTPUT | MUX_MODE4) /* gpio 70 => cmt_apeslpx */ | 280 | 0x0ac (PIN_OUTPUT | MUX_MODE4) /* gpio 70 => cmt_apeslpx */ |
281 | 0x0b0 (PIN_INPUT | WAKEUP_EN | MUX_MODE4) /* gpio 72 => ape_rst_rq */ | 281 | 0x0b0 (PIN_INPUT | WAKEUP_EN | MUX_MODE4) /* gpio 72 => ape_rst_rq */ |
282 | 0x0b2 (PIN_OUTPUT | MUX_MODE4) /* gpio 73 => cmt_rst_rq */ | 282 | 0x0b2 (PIN_OUTPUT | MUX_MODE4) /* gpio 73 => cmt_rst_rq */ |
283 | 0x0b4 (PIN_OUTPUT | MUX_MODE4) /* gpio 74 => cmt_en */ | 283 | 0x0b4 (PIN_OUTPUT | MUX_MODE4) /* gpio 74 => cmt_en */ |
284 | 0x0b6 (PIN_OUTPUT | MUX_MODE4) /* gpio 75 => cmt_rst */ | 284 | 0x0b6 (PIN_OUTPUT | MUX_MODE4) /* gpio 75 => cmt_rst */ |
285 | 0x15e (PIN_OUTPUT | MUX_MODE4) /* gpio 157 => cmt_bsi */ | 285 | 0x15e (PIN_OUTPUT | MUX_MODE4) /* gpio 157 => cmt_bsi */ |
286 | >; | 286 | >; |
287 | }; | 287 | }; |
288 | }; | 288 | }; |
289 | 289 | ||
290 | &i2c1 { | 290 | &i2c1 { |
291 | pinctrl-names = "default"; | 291 | pinctrl-names = "default"; |
292 | pinctrl-0 = <&i2c1_pins>; | 292 | pinctrl-0 = <&i2c1_pins>; |
293 | 293 | ||
294 | clock-frequency = <2200000>; | 294 | clock-frequency = <2200000>; |
295 | 295 | ||
296 | twl: twl@48 { | 296 | twl: twl@48 { |
297 | reg = <0x48>; | 297 | reg = <0x48>; |
298 | interrupts = <7>; /* SYS_NIRQ cascaded to intc */ | 298 | interrupts = <7>; /* SYS_NIRQ cascaded to intc */ |
299 | interrupt-parent = <&intc>; | 299 | interrupt-parent = <&intc>; |
300 | }; | 300 | }; |
301 | }; | 301 | }; |
302 | 302 | ||
303 | #include "twl4030.dtsi" | 303 | #include "twl4030.dtsi" |
304 | #include "twl4030_omap3.dtsi" | 304 | #include "twl4030_omap3.dtsi" |
305 | 305 | ||
306 | &vaux1 { | 306 | &vaux1 { |
307 | regulator-name = "V28"; | 307 | regulator-name = "V28"; |
308 | regulator-min-microvolt = <2800000>; | 308 | regulator-min-microvolt = <2800000>; |
309 | regulator-max-microvolt = <2800000>; | 309 | regulator-max-microvolt = <2800000>; |
310 | regulator-always-on; /* due battery cover sensor */ | 310 | regulator-always-on; /* due battery cover sensor */ |
311 | }; | 311 | }; |
312 | 312 | ||
313 | &vaux2 { | 313 | &vaux2 { |
314 | regulator-name = "VCSI"; | 314 | regulator-name = "VCSI"; |
315 | regulator-min-microvolt = <1800000>; | 315 | regulator-min-microvolt = <1800000>; |
316 | regulator-max-microvolt = <1800000>; | 316 | regulator-max-microvolt = <1800000>; |
317 | }; | 317 | }; |
318 | 318 | ||
319 | &vaux3 { | 319 | &vaux3 { |
320 | regulator-name = "VMMC2_30"; | 320 | regulator-name = "VMMC2_30"; |
321 | regulator-min-microvolt = <2800000>; | 321 | regulator-min-microvolt = <2800000>; |
322 | regulator-max-microvolt = <3000000>; | 322 | regulator-max-microvolt = <3000000>; |
323 | }; | 323 | }; |
324 | 324 | ||
325 | &vaux4 { | 325 | &vaux4 { |
326 | regulator-name = "VCAM_ANA_28"; | 326 | regulator-name = "VCAM_ANA_28"; |
327 | regulator-min-microvolt = <2800000>; | 327 | regulator-min-microvolt = <2800000>; |
328 | regulator-max-microvolt = <2800000>; | 328 | regulator-max-microvolt = <2800000>; |
329 | }; | 329 | }; |
330 | 330 | ||
331 | &vmmc1 { | 331 | &vmmc1 { |
332 | regulator-name = "VMMC1"; | 332 | regulator-name = "VMMC1"; |
333 | regulator-min-microvolt = <1850000>; | 333 | regulator-min-microvolt = <1850000>; |
334 | regulator-max-microvolt = <3150000>; | 334 | regulator-max-microvolt = <3150000>; |
335 | }; | 335 | }; |
336 | 336 | ||
337 | &vmmc2 { | 337 | &vmmc2 { |
338 | regulator-name = "V28_A"; | 338 | regulator-name = "V28_A"; |
339 | regulator-min-microvolt = <2800000>; | 339 | regulator-min-microvolt = <2800000>; |
340 | regulator-max-microvolt = <3000000>; | 340 | regulator-max-microvolt = <3000000>; |
341 | regulator-always-on; /* due VIO leak to AIC34 VDDs */ | 341 | regulator-always-on; /* due VIO leak to AIC34 VDDs */ |
342 | }; | 342 | }; |
343 | 343 | ||
344 | &vpll1 { | 344 | &vpll1 { |
345 | regulator-name = "VPLL"; | 345 | regulator-name = "VPLL"; |
346 | regulator-min-microvolt = <1800000>; | 346 | regulator-min-microvolt = <1800000>; |
347 | regulator-max-microvolt = <1800000>; | 347 | regulator-max-microvolt = <1800000>; |
348 | regulator-always-on; | 348 | regulator-always-on; |
349 | }; | 349 | }; |
350 | 350 | ||
351 | &vpll2 { | 351 | &vpll2 { |
352 | regulator-name = "VSDI_CSI"; | 352 | regulator-name = "VSDI_CSI"; |
353 | regulator-min-microvolt = <1800000>; | 353 | regulator-min-microvolt = <1800000>; |
354 | regulator-max-microvolt = <1800000>; | 354 | regulator-max-microvolt = <1800000>; |
355 | regulator-always-on; | 355 | regulator-always-on; |
356 | }; | 356 | }; |
357 | 357 | ||
358 | &vsim { | 358 | &vsim { |
359 | regulator-name = "VMMC2_IO_18"; | 359 | regulator-name = "VMMC2_IO_18"; |
360 | regulator-min-microvolt = <1800000>; | 360 | regulator-min-microvolt = <1800000>; |
361 | regulator-max-microvolt = <1800000>; | 361 | regulator-max-microvolt = <1800000>; |
362 | }; | 362 | }; |
363 | 363 | ||
364 | &vio { | 364 | &vio { |
365 | regulator-name = "VIO"; | 365 | regulator-name = "VIO"; |
366 | regulator-min-microvolt = <1800000>; | 366 | regulator-min-microvolt = <1800000>; |
367 | regulator-max-microvolt = <1800000>; | 367 | regulator-max-microvolt = <1800000>; |
368 | 368 | ||
369 | }; | 369 | }; |
370 | 370 | ||
371 | &vintana1 { | 371 | &vintana1 { |
372 | regulator-name = "VINTANA1"; | 372 | regulator-name = "VINTANA1"; |
373 | /* fixed to 1500000 */ | 373 | /* fixed to 1500000 */ |
374 | regulator-always-on; | 374 | regulator-always-on; |
375 | }; | 375 | }; |
376 | 376 | ||
377 | &vintana2 { | 377 | &vintana2 { |
378 | regulator-name = "VINTANA2"; | 378 | regulator-name = "VINTANA2"; |
379 | regulator-min-microvolt = <2750000>; | 379 | regulator-min-microvolt = <2750000>; |
380 | regulator-max-microvolt = <2750000>; | 380 | regulator-max-microvolt = <2750000>; |
381 | regulator-always-on; | 381 | regulator-always-on; |
382 | }; | 382 | }; |
383 | 383 | ||
384 | &vintdig { | 384 | &vintdig { |
385 | regulator-name = "VINTDIG"; | 385 | regulator-name = "VINTDIG"; |
386 | /* fixed to 1500000 */ | 386 | /* fixed to 1500000 */ |
387 | regulator-always-on; | 387 | regulator-always-on; |
388 | }; | 388 | }; |
389 | 389 | ||
390 | &twl { | 390 | &twl { |
391 | twl_audio: audio { | 391 | twl_audio: audio { |
392 | compatible = "ti,twl4030-audio"; | 392 | compatible = "ti,twl4030-audio"; |
393 | ti,enable-vibra = <1>; | 393 | ti,enable-vibra = <1>; |
394 | }; | 394 | }; |
395 | 395 | ||
396 | twl_power: power { | 396 | twl_power: power { |
397 | compatible = "ti,twl4030-power-n900", "ti,twl4030-power-idle-osc-off"; | 397 | compatible = "ti,twl4030-power-n900", "ti,twl4030-power-idle-osc-off"; |
398 | ti,use_poweroff; | 398 | ti,use_poweroff; |
399 | }; | 399 | }; |
400 | }; | 400 | }; |
401 | 401 | ||
402 | &twl_keypad { | 402 | &twl_keypad { |
403 | linux,keymap = < MATRIX_KEY(0x00, 0x00, KEY_Q) | 403 | linux,keymap = < MATRIX_KEY(0x00, 0x00, KEY_Q) |
404 | MATRIX_KEY(0x00, 0x01, KEY_O) | 404 | MATRIX_KEY(0x00, 0x01, KEY_O) |
405 | MATRIX_KEY(0x00, 0x02, KEY_P) | 405 | MATRIX_KEY(0x00, 0x02, KEY_P) |
406 | MATRIX_KEY(0x00, 0x03, KEY_COMMA) | 406 | MATRIX_KEY(0x00, 0x03, KEY_COMMA) |
407 | MATRIX_KEY(0x00, 0x04, KEY_BACKSPACE) | 407 | MATRIX_KEY(0x00, 0x04, KEY_BACKSPACE) |
408 | MATRIX_KEY(0x00, 0x06, KEY_A) | 408 | MATRIX_KEY(0x00, 0x06, KEY_A) |
409 | MATRIX_KEY(0x00, 0x07, KEY_S) | 409 | MATRIX_KEY(0x00, 0x07, KEY_S) |
410 | 410 | ||
411 | MATRIX_KEY(0x01, 0x00, KEY_W) | 411 | MATRIX_KEY(0x01, 0x00, KEY_W) |
412 | MATRIX_KEY(0x01, 0x01, KEY_D) | 412 | MATRIX_KEY(0x01, 0x01, KEY_D) |
413 | MATRIX_KEY(0x01, 0x02, KEY_F) | 413 | MATRIX_KEY(0x01, 0x02, KEY_F) |
414 | MATRIX_KEY(0x01, 0x03, KEY_G) | 414 | MATRIX_KEY(0x01, 0x03, KEY_G) |
415 | MATRIX_KEY(0x01, 0x04, KEY_H) | 415 | MATRIX_KEY(0x01, 0x04, KEY_H) |
416 | MATRIX_KEY(0x01, 0x05, KEY_J) | 416 | MATRIX_KEY(0x01, 0x05, KEY_J) |
417 | MATRIX_KEY(0x01, 0x06, KEY_K) | 417 | MATRIX_KEY(0x01, 0x06, KEY_K) |
418 | MATRIX_KEY(0x01, 0x07, KEY_L) | 418 | MATRIX_KEY(0x01, 0x07, KEY_L) |
419 | 419 | ||
420 | MATRIX_KEY(0x02, 0x00, KEY_E) | 420 | MATRIX_KEY(0x02, 0x00, KEY_E) |
421 | MATRIX_KEY(0x02, 0x01, KEY_DOT) | 421 | MATRIX_KEY(0x02, 0x01, KEY_DOT) |
422 | MATRIX_KEY(0x02, 0x02, KEY_UP) | 422 | MATRIX_KEY(0x02, 0x02, KEY_UP) |
423 | MATRIX_KEY(0x02, 0x03, KEY_ENTER) | 423 | MATRIX_KEY(0x02, 0x03, KEY_ENTER) |
424 | MATRIX_KEY(0x02, 0x05, KEY_Z) | 424 | MATRIX_KEY(0x02, 0x05, KEY_Z) |
425 | MATRIX_KEY(0x02, 0x06, KEY_X) | 425 | MATRIX_KEY(0x02, 0x06, KEY_X) |
426 | MATRIX_KEY(0x02, 0x07, KEY_C) | 426 | MATRIX_KEY(0x02, 0x07, KEY_C) |
427 | MATRIX_KEY(0x02, 0x08, KEY_F9) | 427 | MATRIX_KEY(0x02, 0x08, KEY_F9) |
428 | 428 | ||
429 | MATRIX_KEY(0x03, 0x00, KEY_R) | 429 | MATRIX_KEY(0x03, 0x00, KEY_R) |
430 | MATRIX_KEY(0x03, 0x01, KEY_V) | 430 | MATRIX_KEY(0x03, 0x01, KEY_V) |
431 | MATRIX_KEY(0x03, 0x02, KEY_B) | 431 | MATRIX_KEY(0x03, 0x02, KEY_B) |
432 | MATRIX_KEY(0x03, 0x03, KEY_N) | 432 | MATRIX_KEY(0x03, 0x03, KEY_N) |
433 | MATRIX_KEY(0x03, 0x04, KEY_M) | 433 | MATRIX_KEY(0x03, 0x04, KEY_M) |
434 | MATRIX_KEY(0x03, 0x05, KEY_SPACE) | 434 | MATRIX_KEY(0x03, 0x05, KEY_SPACE) |
435 | MATRIX_KEY(0x03, 0x06, KEY_SPACE) | 435 | MATRIX_KEY(0x03, 0x06, KEY_SPACE) |
436 | MATRIX_KEY(0x03, 0x07, KEY_LEFT) | 436 | MATRIX_KEY(0x03, 0x07, KEY_LEFT) |
437 | 437 | ||
438 | MATRIX_KEY(0x04, 0x00, KEY_T) | 438 | MATRIX_KEY(0x04, 0x00, KEY_T) |
439 | MATRIX_KEY(0x04, 0x01, KEY_DOWN) | 439 | MATRIX_KEY(0x04, 0x01, KEY_DOWN) |
440 | MATRIX_KEY(0x04, 0x02, KEY_RIGHT) | 440 | MATRIX_KEY(0x04, 0x02, KEY_RIGHT) |
441 | MATRIX_KEY(0x04, 0x04, KEY_LEFTCTRL) | 441 | MATRIX_KEY(0x04, 0x04, KEY_LEFTCTRL) |
442 | MATRIX_KEY(0x04, 0x05, KEY_RIGHTALT) | 442 | MATRIX_KEY(0x04, 0x05, KEY_RIGHTALT) |
443 | MATRIX_KEY(0x04, 0x06, KEY_LEFTSHIFT) | 443 | MATRIX_KEY(0x04, 0x06, KEY_LEFTSHIFT) |
444 | MATRIX_KEY(0x04, 0x08, KEY_F10) | 444 | MATRIX_KEY(0x04, 0x08, KEY_F10) |
445 | 445 | ||
446 | MATRIX_KEY(0x05, 0x00, KEY_Y) | 446 | MATRIX_KEY(0x05, 0x00, KEY_Y) |
447 | MATRIX_KEY(0x05, 0x08, KEY_F11) | 447 | MATRIX_KEY(0x05, 0x08, KEY_F11) |
448 | 448 | ||
449 | MATRIX_KEY(0x06, 0x00, KEY_U) | 449 | MATRIX_KEY(0x06, 0x00, KEY_U) |
450 | 450 | ||
451 | MATRIX_KEY(0x07, 0x00, KEY_I) | 451 | MATRIX_KEY(0x07, 0x00, KEY_I) |
452 | MATRIX_KEY(0x07, 0x01, KEY_F7) | 452 | MATRIX_KEY(0x07, 0x01, KEY_F7) |
453 | MATRIX_KEY(0x07, 0x02, KEY_F8) | 453 | MATRIX_KEY(0x07, 0x02, KEY_F8) |
454 | >; | 454 | >; |
455 | }; | 455 | }; |
456 | 456 | ||
457 | &twl_gpio { | 457 | &twl_gpio { |
458 | ti,pullups = <0x0>; | 458 | ti,pullups = <0x0>; |
459 | ti,pulldowns = <0x03ff3f>; /* BIT(0..5) | BIT(8..17) */ | 459 | ti,pulldowns = <0x03ff3f>; /* BIT(0..5) | BIT(8..17) */ |
460 | }; | 460 | }; |
461 | 461 | ||
462 | &i2c2 { | 462 | &i2c2 { |
463 | pinctrl-names = "default"; | 463 | pinctrl-names = "default"; |
464 | pinctrl-0 = <&i2c2_pins>; | 464 | pinctrl-0 = <&i2c2_pins>; |
465 | 465 | ||
466 | clock-frequency = <100000>; | 466 | clock-frequency = <100000>; |
467 | 467 | ||
468 | tlv320aic3x: tlv320aic3x@18 { | 468 | tlv320aic3x: tlv320aic3x@18 { |
469 | compatible = "ti,tlv320aic3x"; | 469 | compatible = "ti,tlv320aic3x"; |
470 | reg = <0x18>; | 470 | reg = <0x18>; |
471 | gpio-reset = <&gpio2 28 GPIO_ACTIVE_HIGH>; /* 60 */ | 471 | gpio-reset = <&gpio2 28 GPIO_ACTIVE_HIGH>; /* 60 */ |
472 | ai3x-gpio-func = < | 472 | ai3x-gpio-func = < |
473 | 0 /* AIC3X_GPIO1_FUNC_DISABLED */ | 473 | 0 /* AIC3X_GPIO1_FUNC_DISABLED */ |
474 | 5 /* AIC3X_GPIO2_FUNC_DIGITAL_MIC_INPUT */ | 474 | 5 /* AIC3X_GPIO2_FUNC_DIGITAL_MIC_INPUT */ |
475 | >; | 475 | >; |
476 | 476 | ||
477 | AVDD-supply = <&vmmc2>; | 477 | AVDD-supply = <&vmmc2>; |
478 | DRVDD-supply = <&vmmc2>; | 478 | DRVDD-supply = <&vmmc2>; |
479 | IOVDD-supply = <&vio>; | 479 | IOVDD-supply = <&vio>; |
480 | DVDD-supply = <&vio>; | 480 | DVDD-supply = <&vio>; |
481 | }; | 481 | }; |
482 | 482 | ||
483 | tlv320aic3x_aux: tlv320aic3x@19 { | 483 | tlv320aic3x_aux: tlv320aic3x@19 { |
484 | compatible = "ti,tlv320aic3x"; | 484 | compatible = "ti,tlv320aic3x"; |
485 | reg = <0x19>; | 485 | reg = <0x19>; |
486 | gpio-reset = <&gpio2 28 GPIO_ACTIVE_HIGH>; /* 60 */ | 486 | gpio-reset = <&gpio2 28 GPIO_ACTIVE_HIGH>; /* 60 */ |
487 | 487 | ||
488 | AVDD-supply = <&vmmc2>; | 488 | AVDD-supply = <&vmmc2>; |
489 | DRVDD-supply = <&vmmc2>; | 489 | DRVDD-supply = <&vmmc2>; |
490 | IOVDD-supply = <&vio>; | 490 | IOVDD-supply = <&vio>; |
491 | DVDD-supply = <&vio>; | 491 | DVDD-supply = <&vio>; |
492 | }; | 492 | }; |
493 | 493 | ||
494 | tsl2563: tsl2563@29 { | 494 | tsl2563: tsl2563@29 { |
495 | compatible = "amstaos,tsl2563"; | 495 | compatible = "amstaos,tsl2563"; |
496 | reg = <0x29>; | 496 | reg = <0x29>; |
497 | 497 | ||
498 | amstaos,cover-comp-gain = <16>; | 498 | amstaos,cover-comp-gain = <16>; |
499 | }; | 499 | }; |
500 | 500 | ||
501 | lp5523: lp5523@32 { | 501 | lp5523: lp5523@32 { |
502 | compatible = "national,lp5523"; | 502 | compatible = "national,lp5523"; |
503 | reg = <0x32>; | 503 | reg = <0x32>; |
504 | clock-mode = /bits/ 8 <0>; /* LP55XX_CLOCK_AUTO */ | 504 | clock-mode = /bits/ 8 <0>; /* LP55XX_CLOCK_AUTO */ |
505 | enable-gpio = <&gpio2 9 GPIO_ACTIVE_HIGH>; /* 41 */ | 505 | enable-gpio = <&gpio2 9 GPIO_ACTIVE_HIGH>; /* 41 */ |
506 | 506 | ||
507 | chan0 { | 507 | chan0 { |
508 | chan-name = "lp5523:kb1"; | 508 | chan-name = "lp5523:kb1"; |
509 | led-cur = /bits/ 8 <50>; | 509 | led-cur = /bits/ 8 <50>; |
510 | max-cur = /bits/ 8 <100>; | 510 | max-cur = /bits/ 8 <100>; |
511 | }; | 511 | }; |
512 | 512 | ||
513 | chan1 { | 513 | chan1 { |
514 | chan-name = "lp5523:kb2"; | 514 | chan-name = "lp5523:kb2"; |
515 | led-cur = /bits/ 8 <50>; | 515 | led-cur = /bits/ 8 <50>; |
516 | max-cur = /bits/ 8 <100>; | 516 | max-cur = /bits/ 8 <100>; |
517 | }; | 517 | }; |
518 | 518 | ||
519 | chan2 { | 519 | chan2 { |
520 | chan-name = "lp5523:kb3"; | 520 | chan-name = "lp5523:kb3"; |
521 | led-cur = /bits/ 8 <50>; | 521 | led-cur = /bits/ 8 <50>; |
522 | max-cur = /bits/ 8 <100>; | 522 | max-cur = /bits/ 8 <100>; |
523 | }; | 523 | }; |
524 | 524 | ||
525 | chan3 { | 525 | chan3 { |
526 | chan-name = "lp5523:kb4"; | 526 | chan-name = "lp5523:kb4"; |
527 | led-cur = /bits/ 8 <50>; | 527 | led-cur = /bits/ 8 <50>; |
528 | max-cur = /bits/ 8 <100>; | 528 | max-cur = /bits/ 8 <100>; |
529 | }; | 529 | }; |
530 | 530 | ||
531 | chan4 { | 531 | chan4 { |
532 | chan-name = "lp5523:b"; | 532 | chan-name = "lp5523:b"; |
533 | led-cur = /bits/ 8 <50>; | 533 | led-cur = /bits/ 8 <50>; |
534 | max-cur = /bits/ 8 <100>; | 534 | max-cur = /bits/ 8 <100>; |
535 | }; | 535 | }; |
536 | 536 | ||
537 | chan5 { | 537 | chan5 { |
538 | chan-name = "lp5523:g"; | 538 | chan-name = "lp5523:g"; |
539 | led-cur = /bits/ 8 <50>; | 539 | led-cur = /bits/ 8 <50>; |
540 | max-cur = /bits/ 8 <100>; | 540 | max-cur = /bits/ 8 <100>; |
541 | }; | 541 | }; |
542 | 542 | ||
543 | chan6 { | 543 | chan6 { |
544 | chan-name = "lp5523:r"; | 544 | chan-name = "lp5523:r"; |
545 | led-cur = /bits/ 8 <50>; | 545 | led-cur = /bits/ 8 <50>; |
546 | max-cur = /bits/ 8 <100>; | 546 | max-cur = /bits/ 8 <100>; |
547 | }; | 547 | }; |
548 | 548 | ||
549 | chan7 { | 549 | chan7 { |
550 | chan-name = "lp5523:kb5"; | 550 | chan-name = "lp5523:kb5"; |
551 | led-cur = /bits/ 8 <50>; | 551 | led-cur = /bits/ 8 <50>; |
552 | max-cur = /bits/ 8 <100>; | 552 | max-cur = /bits/ 8 <100>; |
553 | }; | 553 | }; |
554 | 554 | ||
555 | chan8 { | 555 | chan8 { |
556 | chan-name = "lp5523:kb6"; | 556 | chan-name = "lp5523:kb6"; |
557 | led-cur = /bits/ 8 <50>; | 557 | led-cur = /bits/ 8 <50>; |
558 | max-cur = /bits/ 8 <100>; | 558 | max-cur = /bits/ 8 <100>; |
559 | }; | 559 | }; |
560 | }; | 560 | }; |
561 | 561 | ||
562 | bq27200: bq27200@55 { | 562 | bq27200: bq27200@55 { |
563 | compatible = "ti,bq27200"; | 563 | compatible = "ti,bq27200"; |
564 | reg = <0x55>; | 564 | reg = <0x55>; |
565 | }; | 565 | }; |
566 | 566 | ||
567 | tpa6130a2: tpa6130a2@60 { | 567 | tpa6130a2: tpa6130a2@60 { |
568 | compatible = "ti,tpa6130a2"; | 568 | compatible = "ti,tpa6130a2"; |
569 | reg = <0x60>; | 569 | reg = <0x60>; |
570 | 570 | ||
571 | Vdd-supply = <&vmmc2>; | 571 | Vdd-supply = <&vmmc2>; |
572 | 572 | ||
573 | power-gpio = <&gpio4 2 GPIO_ACTIVE_HIGH>; /* 98 */ | 573 | power-gpio = <&gpio4 2 GPIO_ACTIVE_HIGH>; /* 98 */ |
574 | }; | 574 | }; |
575 | 575 | ||
576 | si4713: si4713@63 { | 576 | si4713: si4713@63 { |
577 | compatible = "silabs,si4713"; | 577 | compatible = "silabs,si4713"; |
578 | reg = <0x63>; | 578 | reg = <0x63>; |
579 | 579 | ||
580 | interrupts-extended = <&gpio2 21 IRQ_TYPE_EDGE_FALLING>; /* 53 */ | 580 | interrupts-extended = <&gpio2 21 IRQ_TYPE_EDGE_FALLING>; /* 53 */ |
581 | reset-gpios = <&gpio6 3 GPIO_ACTIVE_HIGH>; /* 163 */ | 581 | reset-gpios = <&gpio6 3 GPIO_ACTIVE_HIGH>; /* 163 */ |
582 | vio-supply = <&vio>; | 582 | vio-supply = <&vio>; |
583 | vdd-supply = <&vaux1>; | 583 | vdd-supply = <&vaux1>; |
584 | }; | 584 | }; |
585 | 585 | ||
586 | bq24150a: bq24150a@6b { | 586 | bq24150a: bq24150a@6b { |
587 | compatible = "ti,bq24150a"; | 587 | compatible = "ti,bq24150a"; |
588 | reg = <0x6b>; | 588 | reg = <0x6b>; |
589 | 589 | ||
590 | ti,current-limit = <100>; | 590 | ti,current-limit = <100>; |
591 | ti,weak-battery-voltage = <3400>; | 591 | ti,weak-battery-voltage = <3400>; |
592 | ti,battery-regulation-voltage = <4200>; | 592 | ti,battery-regulation-voltage = <4200>; |
593 | ti,charge-current = <650>; | 593 | ti,charge-current = <650>; |
594 | ti,termination-current = <100>; | 594 | ti,termination-current = <100>; |
595 | ti,resistor-sense = <68>; | 595 | ti,resistor-sense = <68>; |
596 | 596 | ||
597 | ti,usb-charger-detection = <&isp1704>; | 597 | ti,usb-charger-detection = <&isp1704>; |
598 | }; | 598 | }; |
599 | }; | 599 | }; |
600 | 600 | ||
601 | &i2c3 { | 601 | &i2c3 { |
602 | pinctrl-names = "default"; | 602 | pinctrl-names = "default"; |
603 | pinctrl-0 = <&i2c3_pins>; | 603 | pinctrl-0 = <&i2c3_pins>; |
604 | 604 | ||
605 | clock-frequency = <400000>; | 605 | clock-frequency = <400000>; |
606 | }; | 606 | }; |
607 | 607 | ||
608 | &mmc1 { | 608 | &mmc1 { |
609 | pinctrl-names = "default"; | 609 | pinctrl-names = "default"; |
610 | pinctrl-0 = <&mmc1_pins>; | 610 | pinctrl-0 = <&mmc1_pins>; |
611 | vmmc-supply = <&vmmc1>; | 611 | vmmc-supply = <&vmmc1>; |
612 | bus-width = <4>; | 612 | bus-width = <4>; |
613 | cd-gpios = <&gpio6 0 GPIO_ACTIVE_HIGH>; /* 160 */ | 613 | cd-gpios = <&gpio6 0 GPIO_ACTIVE_HIGH>; /* 160 */ |
614 | }; | 614 | }; |
615 | 615 | ||
616 | /* most boards use vaux3, only some old versions use vmmc2 instead */ | 616 | /* most boards use vaux3, only some old versions use vmmc2 instead */ |
617 | &mmc2 { | 617 | &mmc2 { |
618 | pinctrl-names = "default"; | 618 | pinctrl-names = "default"; |
619 | pinctrl-0 = <&mmc2_pins>; | 619 | pinctrl-0 = <&mmc2_pins>; |
620 | vmmc-supply = <&vaux3>; | 620 | vmmc-supply = <&vaux3>; |
621 | vmmc_aux-supply = <&vsim>; | 621 | vmmc_aux-supply = <&vsim>; |
622 | bus-width = <8>; | 622 | bus-width = <8>; |
623 | non-removable; | 623 | non-removable; |
624 | }; | 624 | }; |
625 | 625 | ||
626 | &mmc3 { | 626 | &mmc3 { |
627 | status = "disabled"; | 627 | status = "disabled"; |
628 | }; | 628 | }; |
629 | 629 | ||
630 | &gpmc { | 630 | &gpmc { |
631 | ranges = <0 0 0x01000000 0x01000000>, /* 16 MB for OneNAND */ | 631 | ranges = <0 0 0x01000000 0x01000000>, /* 16 MB for OneNAND */ |
632 | <1 0 0x02000000 0x01000000>; /* 16 MB for smc91c96 */ | 632 | <1 0 0x02000000 0x01000000>; /* 16 MB for smc91c96 */ |
633 | pinctrl-names = "default"; | 633 | pinctrl-names = "default"; |
634 | pinctrl-0 = <&gpmc_pins>; | 634 | pinctrl-0 = <&gpmc_pins>; |
635 | 635 | ||
636 | /* sys_ndmareq1 could be used by the driver, not as gpio65 though */ | 636 | /* sys_ndmareq1 could be used by the driver, not as gpio65 though */ |
637 | onenand@0,0 { | 637 | onenand@0,0 { |
638 | #address-cells = <1>; | 638 | #address-cells = <1>; |
639 | #size-cells = <1>; | 639 | #size-cells = <1>; |
640 | reg = <0 0 0x20000>; /* CS0, offset 0, IO size 128K */ | 640 | reg = <0 0 0x20000>; /* CS0, offset 0, IO size 128K */ |
641 | 641 | ||
642 | gpmc,sync-read; | 642 | gpmc,sync-read; |
643 | gpmc,sync-write; | 643 | gpmc,sync-write; |
644 | gpmc,burst-length = <16>; | 644 | gpmc,burst-length = <16>; |
645 | gpmc,burst-read; | 645 | gpmc,burst-read; |
646 | gpmc,burst-wrap; | 646 | gpmc,burst-wrap; |
647 | gpmc,burst-write; | 647 | gpmc,burst-write; |
648 | gpmc,device-width = <2>; /* GPMC_DEVWIDTH_16BIT */ | 648 | gpmc,device-width = <2>; /* GPMC_DEVWIDTH_16BIT */ |
649 | gpmc,mux-add-data = <2>; /* GPMC_MUX_AD */ | 649 | gpmc,mux-add-data = <2>; /* GPMC_MUX_AD */ |
650 | gpmc,cs-on-ns = <0>; | 650 | gpmc,cs-on-ns = <0>; |
651 | gpmc,cs-rd-off-ns = <87>; | 651 | gpmc,cs-rd-off-ns = <87>; |
652 | gpmc,cs-wr-off-ns = <87>; | 652 | gpmc,cs-wr-off-ns = <87>; |
653 | gpmc,adv-on-ns = <0>; | 653 | gpmc,adv-on-ns = <0>; |
654 | gpmc,adv-rd-off-ns = <10>; | 654 | gpmc,adv-rd-off-ns = <10>; |
655 | gpmc,adv-wr-off-ns = <10>; | 655 | gpmc,adv-wr-off-ns = <10>; |
656 | gpmc,oe-on-ns = <15>; | 656 | gpmc,oe-on-ns = <15>; |
657 | gpmc,oe-off-ns = <87>; | 657 | gpmc,oe-off-ns = <87>; |
658 | gpmc,we-on-ns = <0>; | 658 | gpmc,we-on-ns = <0>; |
659 | gpmc,we-off-ns = <87>; | 659 | gpmc,we-off-ns = <87>; |
660 | gpmc,rd-cycle-ns = <112>; | 660 | gpmc,rd-cycle-ns = <112>; |
661 | gpmc,wr-cycle-ns = <112>; | 661 | gpmc,wr-cycle-ns = <112>; |
662 | gpmc,access-ns = <81>; | 662 | gpmc,access-ns = <81>; |
663 | gpmc,page-burst-access-ns = <15>; | 663 | gpmc,page-burst-access-ns = <15>; |
664 | gpmc,bus-turnaround-ns = <0>; | 664 | gpmc,bus-turnaround-ns = <0>; |
665 | gpmc,cycle2cycle-delay-ns = <0>; | 665 | gpmc,cycle2cycle-delay-ns = <0>; |
666 | gpmc,wait-monitoring-ns = <0>; | 666 | gpmc,wait-monitoring-ns = <0>; |
667 | gpmc,clk-activation-ns = <5>; | 667 | gpmc,clk-activation-ns = <5>; |
668 | gpmc,wr-data-mux-bus-ns = <30>; | 668 | gpmc,wr-data-mux-bus-ns = <30>; |
669 | gpmc,wr-access-ns = <81>; | 669 | gpmc,wr-access-ns = <81>; |
670 | gpmc,sync-clk-ps = <15000>; | 670 | gpmc,sync-clk-ps = <15000>; |
671 | 671 | ||
672 | /* | 672 | /* |
673 | * MTD partition table corresponding to Nokia's | 673 | * MTD partition table corresponding to Nokia's |
674 | * Maemo 5 (Fremantle) release. | 674 | * Maemo 5 (Fremantle) release. |
675 | */ | 675 | */ |
676 | partition@0 { | 676 | partition@0 { |
677 | label = "bootloader"; | 677 | label = "bootloader"; |
678 | reg = <0x00000000 0x00020000>; | 678 | reg = <0x00000000 0x00020000>; |
679 | read-only; | 679 | read-only; |
680 | }; | 680 | }; |
681 | partition@1 { | 681 | partition@1 { |
682 | label = "config"; | 682 | label = "config"; |
683 | reg = <0x00020000 0x00060000>; | 683 | reg = <0x00020000 0x00060000>; |
684 | }; | 684 | }; |
685 | partition@2 { | 685 | partition@2 { |
686 | label = "log"; | 686 | label = "log"; |
687 | reg = <0x00080000 0x00040000>; | 687 | reg = <0x00080000 0x00040000>; |
688 | }; | 688 | }; |
689 | partition@3 { | 689 | partition@3 { |
690 | label = "kernel"; | 690 | label = "kernel"; |
691 | reg = <0x000c0000 0x00200000>; | 691 | reg = <0x000c0000 0x00200000>; |
692 | }; | 692 | }; |
693 | partition@4 { | 693 | partition@4 { |
694 | label = "initfs"; | 694 | label = "initfs"; |
695 | reg = <0x002c0000 0x00200000>; | 695 | reg = <0x002c0000 0x00200000>; |
696 | }; | 696 | }; |
697 | partition@5 { | 697 | partition@5 { |
698 | label = "rootfs"; | 698 | label = "rootfs"; |
699 | reg = <0x004c0000 0x0fb40000>; | 699 | reg = <0x004c0000 0x0fb40000>; |
700 | }; | 700 | }; |
701 | }; | 701 | }; |
702 | 702 | ||
703 | /* Ethernet is on some early development boards and qemu */ | ||
703 | ethernet@gpmc { | 704 | ethernet@gpmc { |
704 | compatible = "smsc,lan91c94"; | 705 | compatible = "smsc,lan91c94"; |
705 | |||
706 | status = "disabled"; | ||
707 | |||
708 | interrupt-parent = <&gpio2>; | 706 | interrupt-parent = <&gpio2>; |
709 | interrupts = <22 IRQ_TYPE_LEVEL_HIGH>; /* gpio54 */ | 707 | interrupts = <22 IRQ_TYPE_LEVEL_HIGH>; /* gpio54 */ |
710 | reg = <1 0x300 0xf>; /* 16 byte IO range at offset 0x300 */ | 708 | reg = <1 0x300 0xf>; /* 16 byte IO range at offset 0x300 */ |
711 | bank-width = <2>; | 709 | bank-width = <2>; |
712 | pinctrl-names = "default"; | 710 | pinctrl-names = "default"; |
713 | pinctrl-0 = <ðernet_pins>; | 711 | pinctrl-0 = <ðernet_pins>; |
714 | power-gpios = <&gpio3 22 GPIO_ACTIVE_HIGH>; /* gpio86 */ | 712 | power-gpios = <&gpio3 22 GPIO_ACTIVE_HIGH>; /* gpio86 */ |
715 | reset-gpios = <&gpio6 4 GPIO_ACTIVE_HIGH>; /* gpio164 */ | 713 | reset-gpios = <&gpio6 4 GPIO_ACTIVE_HIGH>; /* gpio164 */ |
716 | gpmc,device-width = <2>; | 714 | gpmc,device-width = <2>; |
717 | gpmc,sync-clk-ps = <0>; | 715 | gpmc,sync-clk-ps = <0>; |
718 | gpmc,cs-on-ns = <0>; | 716 | gpmc,cs-on-ns = <0>; |
719 | gpmc,cs-rd-off-ns = <48>; | 717 | gpmc,cs-rd-off-ns = <48>; |
720 | gpmc,cs-wr-off-ns = <24>; | 718 | gpmc,cs-wr-off-ns = <24>; |
721 | gpmc,adv-on-ns = <0>; | 719 | gpmc,adv-on-ns = <0>; |
722 | gpmc,adv-rd-off-ns = <0>; | 720 | gpmc,adv-rd-off-ns = <0>; |
723 | gpmc,adv-wr-off-ns = <0>; | 721 | gpmc,adv-wr-off-ns = <0>; |
724 | gpmc,we-on-ns = <12>; | 722 | gpmc,we-on-ns = <12>; |
725 | gpmc,we-off-ns = <18>; | 723 | gpmc,we-off-ns = <18>; |
726 | gpmc,oe-on-ns = <12>; | 724 | gpmc,oe-on-ns = <12>; |
727 | gpmc,oe-off-ns = <48>; | 725 | gpmc,oe-off-ns = <48>; |
728 | gpmc,page-burst-access-ns = <0>; | 726 | gpmc,page-burst-access-ns = <0>; |
729 | gpmc,access-ns = <42>; | 727 | gpmc,access-ns = <42>; |
730 | gpmc,rd-cycle-ns = <180>; | 728 | gpmc,rd-cycle-ns = <180>; |
731 | gpmc,wr-cycle-ns = <180>; | 729 | gpmc,wr-cycle-ns = <180>; |
732 | gpmc,bus-turnaround-ns = <0>; | 730 | gpmc,bus-turnaround-ns = <0>; |
733 | gpmc,cycle2cycle-delay-ns = <0>; | 731 | gpmc,cycle2cycle-delay-ns = <0>; |
734 | gpmc,wait-monitoring-ns = <0>; | 732 | gpmc,wait-monitoring-ns = <0>; |
735 | gpmc,clk-activation-ns = <0>; | 733 | gpmc,clk-activation-ns = <0>; |
736 | gpmc,wr-access-ns = <0>; | 734 | gpmc,wr-access-ns = <0>; |
737 | gpmc,wr-data-mux-bus-ns = <12>; | 735 | gpmc,wr-data-mux-bus-ns = <12>; |
738 | }; | 736 | }; |
739 | }; | 737 | }; |
740 | 738 | ||
741 | &mcspi1 { | 739 | &mcspi1 { |
742 | /* | 740 | /* |
743 | * For some reason, touchscreen is necessary for screen to work at | 741 | * For some reason, touchscreen is necessary for screen to work at |
744 | * all on real hw. It works well without it on emulator. | 742 | * all on real hw. It works well without it on emulator. |
745 | * | 743 | * |
746 | * Also... order in the device tree actually matters here. | 744 | * Also... order in the device tree actually matters here. |
747 | */ | 745 | */ |
748 | tsc2005@0 { | 746 | tsc2005@0 { |
749 | compatible = "ti,tsc2005"; | 747 | compatible = "ti,tsc2005"; |
750 | spi-max-frequency = <6000000>; | 748 | spi-max-frequency = <6000000>; |
751 | reg = <0>; | 749 | reg = <0>; |
752 | 750 | ||
753 | vio-supply = <&vio>; | 751 | vio-supply = <&vio>; |
754 | 752 | ||
755 | reset-gpios = <&gpio4 8 GPIO_ACTIVE_HIGH>; /* 104 */ | 753 | reset-gpios = <&gpio4 8 GPIO_ACTIVE_HIGH>; /* 104 */ |
756 | interrupts-extended = <&gpio4 4 IRQ_TYPE_EDGE_RISING>; /* 100 */ | 754 | interrupts-extended = <&gpio4 4 IRQ_TYPE_EDGE_RISING>; /* 100 */ |
757 | 755 | ||
758 | touchscreen-fuzz-x = <4>; | 756 | touchscreen-fuzz-x = <4>; |
759 | touchscreen-fuzz-y = <7>; | 757 | touchscreen-fuzz-y = <7>; |
760 | touchscreen-fuzz-pressure = <2>; | 758 | touchscreen-fuzz-pressure = <2>; |
761 | touchscreen-max-x = <4096>; | 759 | touchscreen-max-x = <4096>; |
762 | touchscreen-max-y = <4096>; | 760 | touchscreen-max-y = <4096>; |
763 | touchscreen-max-pressure = <2048>; | 761 | touchscreen-max-pressure = <2048>; |
764 | 762 | ||
765 | ti,x-plate-ohms = <280>; | 763 | ti,x-plate-ohms = <280>; |
766 | ti,esd-recovery-timeout-ms = <8000>; | 764 | ti,esd-recovery-timeout-ms = <8000>; |
767 | }; | 765 | }; |
768 | 766 | ||
769 | acx565akm@2 { | 767 | acx565akm@2 { |
770 | compatible = "sony,acx565akm"; | 768 | compatible = "sony,acx565akm"; |
771 | spi-max-frequency = <6000000>; | 769 | spi-max-frequency = <6000000>; |
772 | reg = <2>; | 770 | reg = <2>; |
773 | 771 | ||
774 | pinctrl-names = "default"; | 772 | pinctrl-names = "default"; |
775 | pinctrl-0 = <&acx565akm_pins>; | 773 | pinctrl-0 = <&acx565akm_pins>; |
776 | 774 | ||
777 | label = "lcd"; | 775 | label = "lcd"; |
778 | reset-gpios = <&gpio3 26 GPIO_ACTIVE_HIGH>; /* 90 */ | 776 | reset-gpios = <&gpio3 26 GPIO_ACTIVE_HIGH>; /* 90 */ |
779 | 777 | ||
780 | port { | 778 | port { |
781 | lcd_in: endpoint { | 779 | lcd_in: endpoint { |
782 | remote-endpoint = <&sdi_out>; | 780 | remote-endpoint = <&sdi_out>; |
783 | }; | 781 | }; |
784 | }; | 782 | }; |
785 | }; | 783 | }; |
786 | }; | 784 | }; |
787 | 785 | ||
788 | &mcspi4 { | 786 | &mcspi4 { |
789 | pinctrl-names = "default"; | 787 | pinctrl-names = "default"; |
790 | pinctrl-0 = <&mcspi4_pins>; | 788 | pinctrl-0 = <&mcspi4_pins>; |
791 | 789 | ||
792 | wl1251@0 { | 790 | wl1251@0 { |
793 | pinctrl-names = "default"; | 791 | pinctrl-names = "default"; |
794 | pinctrl-0 = <&wl1251_pins>; | 792 | pinctrl-0 = <&wl1251_pins>; |
795 | 793 | ||
796 | vio-supply = <&vio>; | 794 | vio-supply = <&vio>; |
797 | 795 | ||
798 | compatible = "ti,wl1251"; | 796 | compatible = "ti,wl1251"; |
799 | reg = <0>; | 797 | reg = <0>; |
800 | spi-max-frequency = <48000000>; | 798 | spi-max-frequency = <48000000>; |
801 | 799 | ||
802 | spi-cpol; | 800 | spi-cpol; |
803 | spi-cpha; | 801 | spi-cpha; |
804 | 802 | ||
805 | ti,power-gpio = <&gpio3 23 GPIO_ACTIVE_HIGH>; /* 87 */ | 803 | ti,power-gpio = <&gpio3 23 GPIO_ACTIVE_HIGH>; /* 87 */ |
806 | 804 | ||
807 | interrupt-parent = <&gpio2>; | 805 | interrupt-parent = <&gpio2>; |
808 | interrupts = <10 IRQ_TYPE_NONE>; /* gpio line 42 */ | 806 | interrupts = <10 IRQ_TYPE_NONE>; /* gpio line 42 */ |
809 | }; | 807 | }; |
810 | }; | 808 | }; |
811 | 809 | ||
812 | &usb_otg_hs { | 810 | &usb_otg_hs { |
813 | interface-type = <0>; | 811 | interface-type = <0>; |
814 | usb-phy = <&usb2_phy>; | 812 | usb-phy = <&usb2_phy>; |
815 | phys = <&usb2_phy>; | 813 | phys = <&usb2_phy>; |
816 | phy-names = "usb2-phy"; | 814 | phy-names = "usb2-phy"; |
817 | mode = <2>; | 815 | mode = <2>; |
818 | power = <50>; | 816 | power = <50>; |
819 | }; | 817 | }; |
820 | 818 | ||
821 | &uart1 { | 819 | &uart1 { |
822 | status = "disabled"; | 820 | status = "disabled"; |
823 | }; | 821 | }; |
824 | 822 | ||
825 | &uart2 { | 823 | &uart2 { |
826 | interrupts-extended = <&intc 73 &omap3_pmx_core OMAP3_UART2_RX>; | 824 | interrupts-extended = <&intc 73 &omap3_pmx_core OMAP3_UART2_RX>; |
827 | pinctrl-names = "default"; | 825 | pinctrl-names = "default"; |
828 | pinctrl-0 = <&uart2_pins>; | 826 | pinctrl-0 = <&uart2_pins>; |
829 | }; | 827 | }; |
830 | 828 | ||
831 | &uart3 { | 829 | &uart3 { |
832 | interrupts-extended = <&intc 74 &omap3_pmx_core OMAP3_UART3_RX>; | 830 | interrupts-extended = <&intc 74 &omap3_pmx_core OMAP3_UART3_RX>; |
833 | pinctrl-names = "default"; | 831 | pinctrl-names = "default"; |
834 | pinctrl-0 = <&uart3_pins>; | 832 | pinctrl-0 = <&uart3_pins>; |
835 | }; | 833 | }; |
836 | 834 | ||
837 | &dss { | 835 | &dss { |
838 | status = "ok"; | 836 | status = "ok"; |
839 | 837 | ||
840 | pinctrl-names = "default"; | 838 | pinctrl-names = "default"; |
841 | pinctrl-0 = <&dss_sdi_pins>; | 839 | pinctrl-0 = <&dss_sdi_pins>; |
842 | 840 | ||
843 | vdds_sdi-supply = <&vaux1>; | 841 | vdds_sdi-supply = <&vaux1>; |
844 | 842 | ||
845 | ports { | 843 | ports { |
846 | #address-cells = <1>; | 844 | #address-cells = <1>; |
847 | #size-cells = <0>; | 845 | #size-cells = <0>; |
848 | 846 | ||
849 | port@1 { | 847 | port@1 { |
850 | reg = <1>; | 848 | reg = <1>; |
851 | 849 | ||
852 | sdi_out: endpoint { | 850 | sdi_out: endpoint { |
853 | remote-endpoint = <&lcd_in>; | 851 | remote-endpoint = <&lcd_in>; |
854 | datapairs = <2>; | 852 | datapairs = <2>; |
855 | }; | 853 | }; |
856 | }; | 854 | }; |
857 | }; | 855 | }; |
858 | }; | 856 | }; |
859 | 857 | ||
860 | &venc { | 858 | &venc { |
861 | status = "ok"; | 859 | status = "ok"; |
862 | 860 | ||
863 | vdda-supply = <&vdac>; | 861 | vdda-supply = <&vdac>; |
864 | 862 | ||
865 | port { | 863 | port { |
866 | venc_out: endpoint { | 864 | venc_out: endpoint { |
867 | remote-endpoint = <&tv_connector_in>; | 865 | remote-endpoint = <&tv_connector_in>; |
868 | ti,channels = <1>; | 866 | ti,channels = <1>; |
869 | }; | 867 | }; |
870 | }; | 868 | }; |
871 | }; | 869 | }; |
872 | 870 | ||
873 | &mcbsp2 { | 871 | &mcbsp2 { |
874 | status = "ok"; | 872 | status = "ok"; |
875 | }; | 873 | }; |
876 | 874 | ||
877 | &ssi_port1 { | 875 | &ssi_port1 { |
878 | pinctrl-names = "default"; | 876 | pinctrl-names = "default"; |
879 | pinctrl-0 = <&ssi_pins>; | 877 | pinctrl-0 = <&ssi_pins>; |
880 | 878 | ||
881 | ti,ssi-cawake-gpio = <&gpio5 23 GPIO_ACTIVE_HIGH>; /* 151 */ | 879 | ti,ssi-cawake-gpio = <&gpio5 23 GPIO_ACTIVE_HIGH>; /* 151 */ |
882 | 880 | ||
883 | modem: hsi-client { | 881 | modem: hsi-client { |
884 | compatible = "nokia,n900-modem"; | 882 | compatible = "nokia,n900-modem"; |
885 | 883 | ||
886 | pinctrl-names = "default"; | 884 | pinctrl-names = "default"; |
887 | pinctrl-0 = <&modem_pins>; | 885 | pinctrl-0 = <&modem_pins>; |
888 | 886 | ||
889 | hsi-channel-ids = <0>, <1>, <2>, <3>; | 887 | hsi-channel-ids = <0>, <1>, <2>, <3>; |
890 | hsi-channel-names = "mcsaab-control", | 888 | hsi-channel-names = "mcsaab-control", |
891 | "speech-control", | 889 | "speech-control", |
892 | "speech-data", | 890 | "speech-data", |
893 | "mcsaab-data"; | 891 | "mcsaab-data"; |
894 | hsi-speed-kbps = <55000>; | 892 | hsi-speed-kbps = <55000>; |
895 | hsi-mode = "frame"; | 893 | hsi-mode = "frame"; |
896 | hsi-flow = "synchronized"; | 894 | hsi-flow = "synchronized"; |
897 | hsi-arb-mode = "round-robin"; | 895 | hsi-arb-mode = "round-robin"; |
898 | 896 | ||
899 | interrupts-extended = <&gpio3 8 IRQ_TYPE_EDGE_FALLING>; /* 72 */ | 897 | interrupts-extended = <&gpio3 8 IRQ_TYPE_EDGE_FALLING>; /* 72 */ |
900 | 898 | ||
901 | gpios = <&gpio3 6 GPIO_ACTIVE_HIGH>, /* 70 */ | 899 | gpios = <&gpio3 6 GPIO_ACTIVE_HIGH>, /* 70 */ |
902 | <&gpio3 9 GPIO_ACTIVE_HIGH>, /* 73 */ | 900 | <&gpio3 9 GPIO_ACTIVE_HIGH>, /* 73 */ |
903 | <&gpio3 10 GPIO_ACTIVE_HIGH>, /* 74 */ | 901 | <&gpio3 10 GPIO_ACTIVE_HIGH>, /* 74 */ |
904 | <&gpio3 11 GPIO_ACTIVE_HIGH>, /* 75 */ | 902 | <&gpio3 11 GPIO_ACTIVE_HIGH>, /* 75 */ |
905 | <&gpio5 29 GPIO_ACTIVE_HIGH>; /* 157 */ | 903 | <&gpio5 29 GPIO_ACTIVE_HIGH>; /* 157 */ |
906 | gpio-names = "cmt_apeslpx", | 904 | gpio-names = "cmt_apeslpx", |
907 | "cmt_rst_rq", | 905 | "cmt_rst_rq", |
908 | "cmt_en", | 906 | "cmt_en", |
909 | "cmt_rst", | 907 | "cmt_rst", |
910 | "cmt_bsi"; | 908 | "cmt_bsi"; |
911 | }; | 909 | }; |
912 | }; | 910 | }; |
913 | 911 | ||
914 | &ssi_port2 { | 912 | &ssi_port2 { |
915 | status = "disabled"; | 913 | status = "disabled"; |
916 | }; | 914 | }; |
arch/arm/configs/omap2plus_defconfig
1 | CONFIG_SYSVIPC=y | 1 | CONFIG_SYSVIPC=y |
2 | CONFIG_POSIX_MQUEUE=y | 2 | CONFIG_POSIX_MQUEUE=y |
3 | CONFIG_FHANDLE=y | 3 | CONFIG_FHANDLE=y |
4 | CONFIG_AUDIT=y | 4 | CONFIG_AUDIT=y |
5 | CONFIG_NO_HZ=y | 5 | CONFIG_NO_HZ=y |
6 | CONFIG_HIGH_RES_TIMERS=y | 6 | CONFIG_HIGH_RES_TIMERS=y |
7 | CONFIG_BSD_PROCESS_ACCT=y | 7 | CONFIG_BSD_PROCESS_ACCT=y |
8 | CONFIG_IKCONFIG=y | 8 | CONFIG_IKCONFIG=y |
9 | CONFIG_IKCONFIG_PROC=y | 9 | CONFIG_IKCONFIG_PROC=y |
10 | CONFIG_LOG_BUF_SHIFT=16 | 10 | CONFIG_LOG_BUF_SHIFT=16 |
11 | CONFIG_CGROUPS=y | 11 | CONFIG_CGROUPS=y |
12 | CONFIG_CGROUP_FREEZER=y | 12 | CONFIG_CGROUP_FREEZER=y |
13 | CONFIG_CGROUP_DEVICE=y | 13 | CONFIG_CGROUP_DEVICE=y |
14 | CONFIG_CPUSETS=y | 14 | CONFIG_CPUSETS=y |
15 | CONFIG_CGROUP_CPUACCT=y | 15 | CONFIG_CGROUP_CPUACCT=y |
16 | CONFIG_RESOURCE_COUNTERS=y | 16 | CONFIG_RESOURCE_COUNTERS=y |
17 | CONFIG_MEMCG=y | 17 | CONFIG_MEMCG=y |
18 | CONFIG_MEMCG_SWAP=y | 18 | CONFIG_MEMCG_SWAP=y |
19 | CONFIG_MEMCG_KMEM=y | 19 | CONFIG_MEMCG_KMEM=y |
20 | CONFIG_CGROUP_PERF=y | 20 | CONFIG_CGROUP_PERF=y |
21 | CONFIG_CGROUP_SCHED=y | 21 | CONFIG_CGROUP_SCHED=y |
22 | CONFIG_CFS_BANDWIDTH=y | 22 | CONFIG_CFS_BANDWIDTH=y |
23 | CONFIG_RT_GROUP_SCHED=y | 23 | CONFIG_RT_GROUP_SCHED=y |
24 | CONFIG_BLK_CGROUP=y | 24 | CONFIG_BLK_CGROUP=y |
25 | CONFIG_NAMESPACES=y | 25 | CONFIG_NAMESPACES=y |
26 | CONFIG_BLK_DEV_INITRD=y | 26 | CONFIG_BLK_DEV_INITRD=y |
27 | CONFIG_EXPERT=y | 27 | CONFIG_EXPERT=y |
28 | CONFIG_SLAB=y | 28 | CONFIG_SLAB=y |
29 | CONFIG_PROFILING=y | 29 | CONFIG_PROFILING=y |
30 | CONFIG_OPROFILE=y | 30 | CONFIG_OPROFILE=y |
31 | CONFIG_KPROBES=y | 31 | CONFIG_KPROBES=y |
32 | CONFIG_MODULES=y | 32 | CONFIG_MODULES=y |
33 | CONFIG_MODULE_FORCE_LOAD=y | 33 | CONFIG_MODULE_FORCE_LOAD=y |
34 | CONFIG_MODULE_UNLOAD=y | 34 | CONFIG_MODULE_UNLOAD=y |
35 | CONFIG_MODULE_FORCE_UNLOAD=y | 35 | CONFIG_MODULE_FORCE_UNLOAD=y |
36 | CONFIG_MODVERSIONS=y | 36 | CONFIG_MODVERSIONS=y |
37 | CONFIG_MODULE_SRCVERSION_ALL=y | 37 | CONFIG_MODULE_SRCVERSION_ALL=y |
38 | # CONFIG_BLK_DEV_BSG is not set | 38 | # CONFIG_BLK_DEV_BSG is not set |
39 | CONFIG_PARTITION_ADVANCED=y | 39 | CONFIG_PARTITION_ADVANCED=y |
40 | CONFIG_ARCH_MULTI_V6=y | 40 | CONFIG_ARCH_MULTI_V6=y |
41 | CONFIG_POWER_AVS_OMAP=y | 41 | CONFIG_POWER_AVS_OMAP=y |
42 | CONFIG_POWER_AVS_OMAP_CLASS3=y | 42 | CONFIG_POWER_AVS_OMAP_CLASS3=y |
43 | CONFIG_OMAP_RESET_CLOCKS=y | 43 | CONFIG_OMAP_RESET_CLOCKS=y |
44 | CONFIG_OMAP_MUX_DEBUG=y | 44 | CONFIG_OMAP_MUX_DEBUG=y |
45 | CONFIG_ARCH_OMAP2=y | 45 | CONFIG_ARCH_OMAP2=y |
46 | CONFIG_ARCH_OMAP3=y | 46 | CONFIG_ARCH_OMAP3=y |
47 | CONFIG_ARCH_OMAP4=y | 47 | CONFIG_ARCH_OMAP4=y |
48 | CONFIG_SOC_OMAP5=y | 48 | CONFIG_SOC_OMAP5=y |
49 | CONFIG_SOC_AM33XX=y | 49 | CONFIG_SOC_AM33XX=y |
50 | CONFIG_SOC_AM43XX=y | 50 | CONFIG_SOC_AM43XX=y |
51 | CONFIG_SOC_DRA7XX=y | 51 | CONFIG_SOC_DRA7XX=y |
52 | CONFIG_ARM_THUMBEE=y | 52 | CONFIG_ARM_THUMBEE=y |
53 | CONFIG_ARM_ERRATA_411920=y | 53 | CONFIG_ARM_ERRATA_411920=y |
54 | CONFIG_ARM_ERRATA_430973=y | 54 | CONFIG_ARM_ERRATA_430973=y |
55 | CONFIG_SMP=y | 55 | CONFIG_SMP=y |
56 | CONFIG_NR_CPUS=2 | 56 | CONFIG_NR_CPUS=2 |
57 | CONFIG_CMA=y | 57 | CONFIG_CMA=y |
58 | CONFIG_SECCOMP=y | 58 | CONFIG_SECCOMP=y |
59 | CONFIG_ZBOOT_ROM_TEXT=0x0 | 59 | CONFIG_ZBOOT_ROM_TEXT=0x0 |
60 | CONFIG_ZBOOT_ROM_BSS=0x0 | 60 | CONFIG_ZBOOT_ROM_BSS=0x0 |
61 | CONFIG_ARM_APPENDED_DTB=y | 61 | CONFIG_ARM_APPENDED_DTB=y |
62 | CONFIG_ARM_ATAG_DTB_COMPAT=y | 62 | CONFIG_ARM_ATAG_DTB_COMPAT=y |
63 | CONFIG_CMDLINE="root=/dev/mmcblk0p2 rootwait console=ttyO2,115200" | 63 | CONFIG_CMDLINE="root=/dev/mmcblk0p2 rootwait console=ttyO2,115200" |
64 | CONFIG_KEXEC=y | 64 | CONFIG_KEXEC=y |
65 | CONFIG_CPU_FREQ=y | 65 | CONFIG_CPU_FREQ=y |
66 | CONFIG_CPU_FREQ_STAT_DETAILS=y | 66 | CONFIG_CPU_FREQ_STAT_DETAILS=y |
67 | CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y | 67 | CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y |
68 | CONFIG_CPU_FREQ_GOV_POWERSAVE=y | 68 | CONFIG_CPU_FREQ_GOV_POWERSAVE=y |
69 | CONFIG_CPU_FREQ_GOV_USERSPACE=y | 69 | CONFIG_CPU_FREQ_GOV_USERSPACE=y |
70 | CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y | 70 | CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y |
71 | CONFIG_GENERIC_CPUFREQ_CPU0=y | 71 | CONFIG_CPUFREQ_DT=y |
72 | # CONFIG_ARM_OMAP2PLUS_CPUFREQ is not set | 72 | # CONFIG_ARM_OMAP2PLUS_CPUFREQ is not set |
73 | CONFIG_CPU_IDLE=y | 73 | CONFIG_CPU_IDLE=y |
74 | CONFIG_BINFMT_MISC=y | 74 | CONFIG_BINFMT_MISC=y |
75 | CONFIG_PM_DEBUG=y | 75 | CONFIG_PM_DEBUG=y |
76 | CONFIG_NET=y | 76 | CONFIG_NET=y |
77 | CONFIG_PACKET=y | 77 | CONFIG_PACKET=y |
78 | CONFIG_UNIX=y | 78 | CONFIG_UNIX=y |
79 | CONFIG_XFRM_USER=y | 79 | CONFIG_XFRM_USER=y |
80 | CONFIG_NET_KEY=y | 80 | CONFIG_NET_KEY=y |
81 | CONFIG_NET_KEY_MIGRATE=y | 81 | CONFIG_NET_KEY_MIGRATE=y |
82 | CONFIG_INET=y | 82 | CONFIG_INET=y |
83 | CONFIG_IP_MULTICAST=y | 83 | CONFIG_IP_MULTICAST=y |
84 | CONFIG_IP_PNP=y | 84 | CONFIG_IP_PNP=y |
85 | CONFIG_IP_PNP_DHCP=y | 85 | CONFIG_IP_PNP_DHCP=y |
86 | CONFIG_IP_PNP_BOOTP=y | 86 | CONFIG_IP_PNP_BOOTP=y |
87 | CONFIG_IP_PNP_RARP=y | 87 | CONFIG_IP_PNP_RARP=y |
88 | # CONFIG_INET_LRO is not set | 88 | # CONFIG_INET_LRO is not set |
89 | CONFIG_NETFILTER=y | 89 | CONFIG_NETFILTER=y |
90 | CONFIG_CAN=m | 90 | CONFIG_CAN=m |
91 | CONFIG_CAN_C_CAN=m | 91 | CONFIG_CAN_C_CAN=m |
92 | CONFIG_CAN_C_CAN_PLATFORM=m | 92 | CONFIG_CAN_C_CAN_PLATFORM=m |
93 | CONFIG_BT=m | 93 | CONFIG_BT=m |
94 | CONFIG_BT_HCIUART=m | 94 | CONFIG_BT_HCIUART=m |
95 | CONFIG_BT_HCIUART_H4=y | 95 | CONFIG_BT_HCIUART_H4=y |
96 | CONFIG_BT_HCIUART_BCSP=y | 96 | CONFIG_BT_HCIUART_BCSP=y |
97 | CONFIG_BT_HCIUART_LL=y | 97 | CONFIG_BT_HCIUART_LL=y |
98 | CONFIG_BT_HCIBCM203X=m | 98 | CONFIG_BT_HCIBCM203X=m |
99 | CONFIG_BT_HCIBPA10X=m | 99 | CONFIG_BT_HCIBPA10X=m |
100 | CONFIG_CFG80211=m | 100 | CONFIG_CFG80211=m |
101 | CONFIG_MAC80211=m | 101 | CONFIG_MAC80211=m |
102 | CONFIG_DEVTMPFS=y | 102 | CONFIG_DEVTMPFS=y |
103 | CONFIG_DEVTMPFS_MOUNT=y | 103 | CONFIG_DEVTMPFS_MOUNT=y |
104 | CONFIG_DMA_CMA=y | 104 | CONFIG_DMA_CMA=y |
105 | CONFIG_OMAP_OCP2SCP=y | 105 | CONFIG_OMAP_OCP2SCP=y |
106 | CONFIG_CONNECTOR=y | 106 | CONFIG_CONNECTOR=y |
107 | CONFIG_MTD=y | 107 | CONFIG_MTD=y |
108 | CONFIG_MTD_CMDLINE_PARTS=y | 108 | CONFIG_MTD_CMDLINE_PARTS=y |
109 | CONFIG_MTD_BLOCK=y | 109 | CONFIG_MTD_BLOCK=y |
110 | CONFIG_MTD_OOPS=y | 110 | CONFIG_MTD_OOPS=y |
111 | CONFIG_MTD_CFI=y | 111 | CONFIG_MTD_CFI=y |
112 | CONFIG_MTD_CFI_INTELEXT=y | 112 | CONFIG_MTD_CFI_INTELEXT=y |
113 | CONFIG_MTD_NAND=y | 113 | CONFIG_MTD_NAND=y |
114 | CONFIG_MTD_NAND_ECC_BCH=y | 114 | CONFIG_MTD_NAND_ECC_BCH=y |
115 | CONFIG_MTD_NAND_OMAP2=y | 115 | CONFIG_MTD_NAND_OMAP2=y |
116 | CONFIG_MTD_ONENAND=y | 116 | CONFIG_MTD_ONENAND=y |
117 | CONFIG_MTD_ONENAND_VERIFY_WRITE=y | 117 | CONFIG_MTD_ONENAND_VERIFY_WRITE=y |
118 | CONFIG_MTD_ONENAND_OMAP2=y | 118 | CONFIG_MTD_ONENAND_OMAP2=y |
119 | CONFIG_MTD_UBI=y | 119 | CONFIG_MTD_UBI=y |
120 | CONFIG_BLK_DEV_LOOP=y | 120 | CONFIG_BLK_DEV_LOOP=y |
121 | CONFIG_BLK_DEV_RAM=y | 121 | CONFIG_BLK_DEV_RAM=y |
122 | CONFIG_BLK_DEV_RAM_SIZE=16384 | 122 | CONFIG_BLK_DEV_RAM_SIZE=16384 |
123 | CONFIG_SENSORS_TSL2550=m | 123 | CONFIG_SENSORS_TSL2550=m |
124 | CONFIG_BMP085_I2C=m | 124 | CONFIG_BMP085_I2C=m |
125 | CONFIG_SENSORS_LIS3_I2C=m | 125 | CONFIG_SENSORS_LIS3_I2C=m |
126 | CONFIG_SRAM=y | 126 | CONFIG_SRAM=y |
127 | CONFIG_SCSI=y | 127 | CONFIG_SCSI=y |
128 | CONFIG_BLK_DEV_SD=y | 128 | CONFIG_BLK_DEV_SD=y |
129 | CONFIG_SCSI_SCAN_ASYNC=y | 129 | CONFIG_SCSI_SCAN_ASYNC=y |
130 | CONFIG_ATA=y | 130 | CONFIG_ATA=y |
131 | CONFIG_SATA_AHCI_PLATFORM=y | 131 | CONFIG_SATA_AHCI_PLATFORM=y |
132 | CONFIG_MD=y | 132 | CONFIG_MD=y |
133 | CONFIG_NETDEVICES=y | 133 | CONFIG_NETDEVICES=y |
134 | # CONFIG_NET_VENDOR_ARC is not set | 134 | # CONFIG_NET_VENDOR_ARC is not set |
135 | # CONFIG_NET_CADENCE is not set | 135 | # CONFIG_NET_CADENCE is not set |
136 | # CONFIG_NET_VENDOR_BROADCOM is not set | 136 | # CONFIG_NET_VENDOR_BROADCOM is not set |
137 | # CONFIG_NET_VENDOR_CIRRUS is not set | 137 | # CONFIG_NET_VENDOR_CIRRUS is not set |
138 | # CONFIG_NET_VENDOR_FARADAY is not set | 138 | # CONFIG_NET_VENDOR_FARADAY is not set |
139 | # CONFIG_NET_VENDOR_HISILICON is not set | 139 | # CONFIG_NET_VENDOR_HISILICON is not set |
140 | # CONFIG_NET_VENDOR_INTEL is not set | 140 | # CONFIG_NET_VENDOR_INTEL is not set |
141 | # CONFIG_NET_VENDOR_MARVELL is not set | 141 | # CONFIG_NET_VENDOR_MARVELL is not set |
142 | CONFIG_KS8851=y | 142 | CONFIG_KS8851=y |
143 | CONFIG_KS8851_MLL=y | 143 | CONFIG_KS8851_MLL=y |
144 | # CONFIG_NET_VENDOR_MICROCHIP is not set | 144 | # CONFIG_NET_VENDOR_MICROCHIP is not set |
145 | # CONFIG_NET_VENDOR_NATSEMI is not set | 145 | # CONFIG_NET_VENDOR_NATSEMI is not set |
146 | # CONFIG_NET_VENDOR_QUALCOMM is not set | 146 | # CONFIG_NET_VENDOR_QUALCOMM is not set |
147 | # CONFIG_NET_VENDOR_SAMSUNG is not set | 147 | # CONFIG_NET_VENDOR_SAMSUNG is not set |
148 | # CONFIG_NET_VENDOR_SEEQ is not set | 148 | # CONFIG_NET_VENDOR_SEEQ is not set |
149 | CONFIG_SMC91X=y | 149 | CONFIG_SMC91X=y |
150 | CONFIG_SMSC911X=y | 150 | CONFIG_SMSC911X=y |
151 | # CONFIG_NET_VENDOR_STMICRO is not set | 151 | # CONFIG_NET_VENDOR_STMICRO is not set |
152 | CONFIG_TI_CPSW=y | 152 | CONFIG_TI_CPSW=y |
153 | # CONFIG_NET_VENDOR_VIA is not set | 153 | # CONFIG_NET_VENDOR_VIA is not set |
154 | # CONFIG_NET_VENDOR_WIZNET is not set | 154 | # CONFIG_NET_VENDOR_WIZNET is not set |
155 | CONFIG_AT803X_PHY=y | 155 | CONFIG_AT803X_PHY=y |
156 | CONFIG_SMSC_PHY=y | 156 | CONFIG_SMSC_PHY=y |
157 | CONFIG_USB_USBNET=y | 157 | CONFIG_USB_USBNET=y |
158 | CONFIG_USB_NET_SMSC95XX=y | 158 | CONFIG_USB_NET_SMSC95XX=y |
159 | CONFIG_USB_ALI_M5632=y | 159 | CONFIG_USB_ALI_M5632=y |
160 | CONFIG_USB_AN2720=y | 160 | CONFIG_USB_AN2720=y |
161 | CONFIG_USB_EPSON2888=y | 161 | CONFIG_USB_EPSON2888=y |
162 | CONFIG_USB_KC2190=y | 162 | CONFIG_USB_KC2190=y |
163 | CONFIG_LIBERTAS=m | 163 | CONFIG_LIBERTAS=m |
164 | CONFIG_LIBERTAS_USB=m | 164 | CONFIG_LIBERTAS_USB=m |
165 | CONFIG_LIBERTAS_SDIO=m | 165 | CONFIG_LIBERTAS_SDIO=m |
166 | CONFIG_LIBERTAS_DEBUG=y | 166 | CONFIG_LIBERTAS_DEBUG=y |
167 | CONFIG_WL_TI=y | 167 | CONFIG_WL_TI=y |
168 | CONFIG_WL12XX=m | 168 | CONFIG_WL12XX=m |
169 | CONFIG_WL18XX=m | 169 | CONFIG_WL18XX=m |
170 | CONFIG_WLCORE_SPI=m | 170 | CONFIG_WLCORE_SPI=m |
171 | CONFIG_WLCORE_SDIO=m | 171 | CONFIG_WLCORE_SDIO=m |
172 | CONFIG_MWIFIEX=m | 172 | CONFIG_MWIFIEX=m |
173 | CONFIG_MWIFIEX_SDIO=m | 173 | CONFIG_MWIFIEX_SDIO=m |
174 | CONFIG_MWIFIEX_USB=m | 174 | CONFIG_MWIFIEX_USB=m |
175 | CONFIG_INPUT_JOYDEV=y | 175 | CONFIG_INPUT_JOYDEV=y |
176 | CONFIG_INPUT_EVDEV=y | 176 | CONFIG_INPUT_EVDEV=y |
177 | CONFIG_KEYBOARD_GPIO=y | 177 | CONFIG_KEYBOARD_GPIO=y |
178 | CONFIG_KEYBOARD_MATRIX=m | 178 | CONFIG_KEYBOARD_MATRIX=m |
179 | CONFIG_KEYBOARD_TWL4030=y | 179 | CONFIG_KEYBOARD_TWL4030=y |
180 | CONFIG_INPUT_TOUCHSCREEN=y | 180 | CONFIG_INPUT_TOUCHSCREEN=y |
181 | CONFIG_TOUCHSCREEN_ADS7846=m | 181 | CONFIG_TOUCHSCREEN_ADS7846=m |
182 | CONFIG_TOUCHSCREEN_EDT_FT5X06=m | 182 | CONFIG_TOUCHSCREEN_EDT_FT5X06=m |
183 | CONFIG_TOUCHSCREEN_TSC2005=m | 183 | CONFIG_TOUCHSCREEN_TSC2005=m |
184 | CONFIG_TOUCHSCREEN_TSC2007=m | 184 | CONFIG_TOUCHSCREEN_TSC2007=m |
185 | CONFIG_INPUT_MISC=y | 185 | CONFIG_INPUT_MISC=y |
186 | CONFIG_INPUT_TWL4030_PWRBUTTON=y | 186 | CONFIG_INPUT_TWL4030_PWRBUTTON=y |
187 | # CONFIG_LEGACY_PTYS is not set | 187 | # CONFIG_LEGACY_PTYS is not set |
188 | CONFIG_SERIAL_8250=y | 188 | CONFIG_SERIAL_8250=y |
189 | CONFIG_SERIAL_8250_CONSOLE=y | 189 | CONFIG_SERIAL_8250_CONSOLE=y |
190 | CONFIG_SERIAL_8250_NR_UARTS=32 | 190 | CONFIG_SERIAL_8250_NR_UARTS=32 |
191 | CONFIG_SERIAL_8250_EXTENDED=y | 191 | CONFIG_SERIAL_8250_EXTENDED=y |
192 | CONFIG_SERIAL_8250_MANY_PORTS=y | 192 | CONFIG_SERIAL_8250_MANY_PORTS=y |
193 | CONFIG_SERIAL_8250_SHARE_IRQ=y | 193 | CONFIG_SERIAL_8250_SHARE_IRQ=y |
194 | CONFIG_SERIAL_8250_DETECT_IRQ=y | 194 | CONFIG_SERIAL_8250_DETECT_IRQ=y |
195 | CONFIG_SERIAL_8250_RSA=y | 195 | CONFIG_SERIAL_8250_RSA=y |
196 | CONFIG_SERIAL_OF_PLATFORM=y | 196 | CONFIG_SERIAL_OF_PLATFORM=y |
197 | CONFIG_SERIAL_OMAP=y | 197 | CONFIG_SERIAL_OMAP=y |
198 | CONFIG_SERIAL_OMAP_CONSOLE=y | 198 | CONFIG_SERIAL_OMAP_CONSOLE=y |
199 | CONFIG_HW_RANDOM=y | 199 | CONFIG_HW_RANDOM=y |
200 | CONFIG_I2C_CHARDEV=y | 200 | CONFIG_I2C_CHARDEV=y |
201 | CONFIG_SPI=y | 201 | CONFIG_SPI=y |
202 | CONFIG_SPI_OMAP24XX=y | 202 | CONFIG_SPI_OMAP24XX=y |
203 | CONFIG_PINCTRL_SINGLE=y | 203 | CONFIG_PINCTRL_SINGLE=y |
204 | CONFIG_DEBUG_GPIO=y | 204 | CONFIG_DEBUG_GPIO=y |
205 | CONFIG_GPIO_SYSFS=y | 205 | CONFIG_GPIO_SYSFS=y |
206 | CONFIG_GPIO_TWL4030=y | 206 | CONFIG_GPIO_TWL4030=y |
207 | CONFIG_W1=y | 207 | CONFIG_W1=y |
208 | CONFIG_BATTERY_BQ27x00=m | 208 | CONFIG_BATTERY_BQ27x00=m |
209 | CONFIG_CHARGER_ISP1704=m | 209 | CONFIG_CHARGER_ISP1704=m |
210 | CONFIG_CHARGER_TWL4030=m | 210 | CONFIG_CHARGER_TWL4030=m |
211 | CONFIG_CHARGER_BQ2415X=m | 211 | CONFIG_CHARGER_BQ2415X=m |
212 | CONFIG_CHARGER_BQ24190=m | 212 | CONFIG_CHARGER_BQ24190=m |
213 | CONFIG_CHARGER_BQ24735=m | 213 | CONFIG_CHARGER_BQ24735=m |
214 | CONFIG_POWER_RESET=y | 214 | CONFIG_POWER_RESET=y |
215 | CONFIG_POWER_AVS=y | 215 | CONFIG_POWER_AVS=y |
216 | CONFIG_SENSORS_LM75=m | 216 | CONFIG_SENSORS_LM75=m |
217 | CONFIG_THERMAL=y | 217 | CONFIG_THERMAL=y |
218 | CONFIG_THERMAL_GOV_FAIR_SHARE=y | 218 | CONFIG_THERMAL_GOV_FAIR_SHARE=y |
219 | CONFIG_THERMAL_GOV_USER_SPACE=y | 219 | CONFIG_THERMAL_GOV_USER_SPACE=y |
220 | CONFIG_CPU_THERMAL=y | 220 | CONFIG_CPU_THERMAL=y |
221 | CONFIG_TI_SOC_THERMAL=y | 221 | CONFIG_TI_SOC_THERMAL=y |
222 | CONFIG_TI_THERMAL=y | 222 | CONFIG_TI_THERMAL=y |
223 | CONFIG_OMAP4_THERMAL=y | 223 | CONFIG_OMAP4_THERMAL=y |
224 | CONFIG_OMAP5_THERMAL=y | 224 | CONFIG_OMAP5_THERMAL=y |
225 | CONFIG_DRA752_THERMAL=y | 225 | CONFIG_DRA752_THERMAL=y |
226 | CONFIG_WATCHDOG=y | 226 | CONFIG_WATCHDOG=y |
227 | CONFIG_OMAP_WATCHDOG=y | 227 | CONFIG_OMAP_WATCHDOG=y |
228 | CONFIG_TWL4030_WATCHDOG=y | 228 | CONFIG_TWL4030_WATCHDOG=y |
229 | CONFIG_MFD_SYSCON=y | 229 | CONFIG_MFD_SYSCON=y |
230 | CONFIG_MFD_PALMAS=y | 230 | CONFIG_MFD_PALMAS=y |
231 | CONFIG_MFD_TPS65217=y | 231 | CONFIG_MFD_TPS65217=y |
232 | CONFIG_MFD_TPS65218=y | 232 | CONFIG_MFD_TPS65218=y |
233 | CONFIG_MFD_TPS65910=y | 233 | CONFIG_MFD_TPS65910=y |
234 | CONFIG_TWL6040_CORE=y | 234 | CONFIG_TWL6040_CORE=y |
235 | CONFIG_REGULATOR_PALMAS=y | 235 | CONFIG_REGULATOR_PALMAS=y |
236 | CONFIG_REGULATOR_PBIAS=y | 236 | CONFIG_REGULATOR_PBIAS=y |
237 | CONFIG_REGULATOR_TI_ABB=y | 237 | CONFIG_REGULATOR_TI_ABB=y |
238 | CONFIG_REGULATOR_TPS65023=y | 238 | CONFIG_REGULATOR_TPS65023=y |
239 | CONFIG_REGULATOR_TPS6507X=y | 239 | CONFIG_REGULATOR_TPS6507X=y |
240 | CONFIG_REGULATOR_TPS65217=y | 240 | CONFIG_REGULATOR_TPS65217=y |
241 | CONFIG_REGULATOR_TPS65218=y | 241 | CONFIG_REGULATOR_TPS65218=y |
242 | CONFIG_REGULATOR_TPS65910=y | 242 | CONFIG_REGULATOR_TPS65910=y |
243 | CONFIG_REGULATOR_TWL4030=y | 243 | CONFIG_REGULATOR_TWL4030=y |
244 | CONFIG_FB=y | 244 | CONFIG_FB=y |
245 | CONFIG_FIRMWARE_EDID=y | 245 | CONFIG_FIRMWARE_EDID=y |
246 | CONFIG_FB_MODE_HELPERS=y | 246 | CONFIG_FB_MODE_HELPERS=y |
247 | CONFIG_FB_TILEBLITTING=y | 247 | CONFIG_FB_TILEBLITTING=y |
248 | CONFIG_OMAP2_DSS=m | 248 | CONFIG_OMAP2_DSS=m |
249 | CONFIG_OMAP5_DSS_HDMI=y | 249 | CONFIG_OMAP5_DSS_HDMI=y |
250 | CONFIG_OMAP2_DSS_SDI=y | 250 | CONFIG_OMAP2_DSS_SDI=y |
251 | CONFIG_OMAP2_DSS_DSI=y | 251 | CONFIG_OMAP2_DSS_DSI=y |
252 | CONFIG_FB_OMAP2=m | 252 | CONFIG_FB_OMAP2=m |
253 | CONFIG_DISPLAY_ENCODER_TFP410=m | 253 | CONFIG_DISPLAY_ENCODER_TFP410=m |
254 | CONFIG_DISPLAY_ENCODER_TPD12S015=m | 254 | CONFIG_DISPLAY_ENCODER_TPD12S015=m |
255 | CONFIG_DISPLAY_CONNECTOR_DVI=m | 255 | CONFIG_DISPLAY_CONNECTOR_DVI=m |
256 | CONFIG_DISPLAY_CONNECTOR_HDMI=m | 256 | CONFIG_DISPLAY_CONNECTOR_HDMI=m |
257 | CONFIG_DISPLAY_CONNECTOR_ANALOG_TV=m | 257 | CONFIG_DISPLAY_CONNECTOR_ANALOG_TV=m |
258 | CONFIG_DISPLAY_PANEL_DPI=m | 258 | CONFIG_DISPLAY_PANEL_DPI=m |
259 | CONFIG_DISPLAY_PANEL_DSI_CM=m | 259 | CONFIG_DISPLAY_PANEL_DSI_CM=m |
260 | CONFIG_DISPLAY_PANEL_SONY_ACX565AKM=m | 260 | CONFIG_DISPLAY_PANEL_SONY_ACX565AKM=m |
261 | CONFIG_DISPLAY_PANEL_LGPHILIPS_LB035Q02=m | 261 | CONFIG_DISPLAY_PANEL_LGPHILIPS_LB035Q02=m |
262 | CONFIG_DISPLAY_PANEL_SHARP_LS037V7DW01=m | 262 | CONFIG_DISPLAY_PANEL_SHARP_LS037V7DW01=m |
263 | CONFIG_DISPLAY_PANEL_TPO_TD028TTEC1=m | 263 | CONFIG_DISPLAY_PANEL_TPO_TD028TTEC1=m |
264 | CONFIG_DISPLAY_PANEL_TPO_TD043MTEA1=m | 264 | CONFIG_DISPLAY_PANEL_TPO_TD043MTEA1=m |
265 | CONFIG_DISPLAY_PANEL_NEC_NL8048HL11=m | 265 | CONFIG_DISPLAY_PANEL_NEC_NL8048HL11=m |
266 | CONFIG_BACKLIGHT_LCD_SUPPORT=y | 266 | CONFIG_BACKLIGHT_LCD_SUPPORT=y |
267 | CONFIG_LCD_CLASS_DEVICE=y | 267 | CONFIG_LCD_CLASS_DEVICE=y |
268 | CONFIG_LCD_PLATFORM=y | 268 | CONFIG_LCD_PLATFORM=y |
269 | CONFIG_BACKLIGHT_CLASS_DEVICE=y | 269 | CONFIG_BACKLIGHT_CLASS_DEVICE=y |
270 | CONFIG_BACKLIGHT_GENERIC=m | 270 | CONFIG_BACKLIGHT_GENERIC=m |
271 | CONFIG_BACKLIGHT_PWM=m | 271 | CONFIG_BACKLIGHT_PWM=m |
272 | CONFIG_BACKLIGHT_PANDORA=m | 272 | CONFIG_BACKLIGHT_PANDORA=m |
273 | CONFIG_BACKLIGHT_GPIO=m | 273 | CONFIG_BACKLIGHT_GPIO=m |
274 | CONFIG_FRAMEBUFFER_CONSOLE=y | 274 | CONFIG_FRAMEBUFFER_CONSOLE=y |
275 | CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y | 275 | CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y |
276 | CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y | 276 | CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y |
277 | CONFIG_LOGO=y | 277 | CONFIG_LOGO=y |
278 | CONFIG_SOUND=m | 278 | CONFIG_SOUND=m |
279 | CONFIG_SND=m | 279 | CONFIG_SND=m |
280 | CONFIG_SND_MIXER_OSS=m | 280 | CONFIG_SND_MIXER_OSS=m |
281 | CONFIG_SND_PCM_OSS=m | 281 | CONFIG_SND_PCM_OSS=m |
282 | CONFIG_SND_VERBOSE_PRINTK=y | 282 | CONFIG_SND_VERBOSE_PRINTK=y |
283 | CONFIG_SND_DEBUG=y | 283 | CONFIG_SND_DEBUG=y |
284 | CONFIG_SND_USB_AUDIO=m | 284 | CONFIG_SND_USB_AUDIO=m |
285 | CONFIG_SND_SOC=m | 285 | CONFIG_SND_SOC=m |
286 | CONFIG_SND_EDMA_SOC=m | 286 | CONFIG_SND_EDMA_SOC=m |
287 | CONFIG_SND_AM33XX_SOC_EVM=m | 287 | CONFIG_SND_AM33XX_SOC_EVM=m |
288 | CONFIG_SND_OMAP_SOC=m | 288 | CONFIG_SND_OMAP_SOC=m |
289 | CONFIG_SND_OMAP_SOC_OMAP_TWL4030=m | 289 | CONFIG_SND_OMAP_SOC_OMAP_TWL4030=m |
290 | CONFIG_SND_OMAP_SOC_OMAP_ABE_TWL6040=m | 290 | CONFIG_SND_OMAP_SOC_OMAP_ABE_TWL6040=m |
291 | CONFIG_SND_OMAP_SOC_OMAP3_PANDORA=m | 291 | CONFIG_SND_OMAP_SOC_OMAP3_PANDORA=m |
292 | CONFIG_USB=y | 292 | CONFIG_USB=y |
293 | CONFIG_USB_ANNOUNCE_NEW_DEVICES=y | 293 | CONFIG_USB_ANNOUNCE_NEW_DEVICES=y |
294 | CONFIG_USB_MON=y | 294 | CONFIG_USB_MON=y |
295 | CONFIG_USB_XHCI_HCD=m | 295 | CONFIG_USB_XHCI_HCD=m |
296 | CONFIG_USB_WDM=y | 296 | CONFIG_USB_WDM=y |
297 | CONFIG_USB_STORAGE=y | 297 | CONFIG_USB_STORAGE=y |
298 | CONFIG_USB_DWC3=m | 298 | CONFIG_USB_DWC3=m |
299 | CONFIG_USB_TEST=y | 299 | CONFIG_USB_TEST=y |
300 | CONFIG_AM335X_PHY_USB=y | 300 | CONFIG_AM335X_PHY_USB=y |
301 | CONFIG_USB_GADGET=y | 301 | CONFIG_USB_GADGET=y |
302 | CONFIG_USB_GADGET_DEBUG=y | 302 | CONFIG_USB_GADGET_DEBUG=y |
303 | CONFIG_USB_GADGET_DEBUG_FILES=y | 303 | CONFIG_USB_GADGET_DEBUG_FILES=y |
304 | CONFIG_USB_GADGET_DEBUG_FS=y | 304 | CONFIG_USB_GADGET_DEBUG_FS=y |
305 | CONFIG_USB_ZERO=m | 305 | CONFIG_USB_ZERO=m |
306 | CONFIG_MMC=y | 306 | CONFIG_MMC=y |
307 | CONFIG_SDIO_UART=y | 307 | CONFIG_SDIO_UART=y |
308 | CONFIG_MMC_OMAP=y | 308 | CONFIG_MMC_OMAP=y |
309 | CONFIG_MMC_OMAP_HS=y | 309 | CONFIG_MMC_OMAP_HS=y |
310 | CONFIG_NEW_LEDS=y | 310 | CONFIG_NEW_LEDS=y |
311 | CONFIG_LEDS_CLASS=y | 311 | CONFIG_LEDS_CLASS=y |
312 | CONFIG_LEDS_GPIO=y | 312 | CONFIG_LEDS_GPIO=y |
313 | CONFIG_LEDS_TRIGGERS=y | 313 | CONFIG_LEDS_TRIGGERS=y |
314 | CONFIG_LEDS_TRIGGER_TIMER=y | 314 | CONFIG_LEDS_TRIGGER_TIMER=y |
315 | CONFIG_LEDS_TRIGGER_ONESHOT=y | 315 | CONFIG_LEDS_TRIGGER_ONESHOT=y |
316 | CONFIG_LEDS_TRIGGER_HEARTBEAT=y | 316 | CONFIG_LEDS_TRIGGER_HEARTBEAT=y |
317 | CONFIG_LEDS_TRIGGER_BACKLIGHT=y | 317 | CONFIG_LEDS_TRIGGER_BACKLIGHT=y |
318 | CONFIG_LEDS_TRIGGER_CPU=y | 318 | CONFIG_LEDS_TRIGGER_CPU=y |
319 | CONFIG_LEDS_TRIGGER_GPIO=y | 319 | CONFIG_LEDS_TRIGGER_GPIO=y |
320 | CONFIG_LEDS_TRIGGER_DEFAULT_ON=y | 320 | CONFIG_LEDS_TRIGGER_DEFAULT_ON=y |
321 | CONFIG_RTC_CLASS=y | 321 | CONFIG_RTC_CLASS=y |
322 | CONFIG_RTC_DRV_TWL92330=y | 322 | CONFIG_RTC_DRV_TWL92330=y |
323 | CONFIG_RTC_DRV_TWL4030=y | 323 | CONFIG_RTC_DRV_TWL4030=y |
324 | CONFIG_RTC_DRV_OMAP=y | 324 | CONFIG_RTC_DRV_OMAP=y |
325 | CONFIG_DMADEVICES=y | 325 | CONFIG_DMADEVICES=y |
326 | CONFIG_TI_EDMA=y | 326 | CONFIG_TI_EDMA=y |
327 | CONFIG_DMA_OMAP=y | 327 | CONFIG_DMA_OMAP=y |
328 | CONFIG_EXTCON=y | 328 | CONFIG_EXTCON=y |
329 | CONFIG_EXTCON_PALMAS=y | 329 | CONFIG_EXTCON_PALMAS=y |
330 | CONFIG_PWM=y | 330 | CONFIG_PWM=y |
331 | CONFIG_PWM_TIECAP=y | 331 | CONFIG_PWM_TIECAP=y |
332 | CONFIG_PWM_TIEHRPWM=y | 332 | CONFIG_PWM_TIEHRPWM=y |
333 | CONFIG_PWM_TWL=y | 333 | CONFIG_PWM_TWL=y |
334 | CONFIG_PWM_TWL_LED=y | 334 | CONFIG_PWM_TWL_LED=y |
335 | CONFIG_OMAP_USB2=y | 335 | CONFIG_OMAP_USB2=y |
336 | CONFIG_TI_PIPE3=y | 336 | CONFIG_TI_PIPE3=y |
337 | CONFIG_EXT2_FS=y | 337 | CONFIG_EXT2_FS=y |
338 | CONFIG_EXT3_FS=y | 338 | CONFIG_EXT3_FS=y |
339 | # CONFIG_EXT3_FS_XATTR is not set | 339 | # CONFIG_EXT3_FS_XATTR is not set |
340 | CONFIG_EXT4_FS=y | 340 | CONFIG_EXT4_FS=y |
341 | CONFIG_FANOTIFY=y | 341 | CONFIG_FANOTIFY=y |
342 | CONFIG_QUOTA=y | 342 | CONFIG_QUOTA=y |
343 | CONFIG_QFMT_V2=y | 343 | CONFIG_QFMT_V2=y |
344 | CONFIG_AUTOFS4_FS=m | 344 | CONFIG_AUTOFS4_FS=m |
345 | CONFIG_MSDOS_FS=y | 345 | CONFIG_MSDOS_FS=y |
346 | CONFIG_VFAT_FS=y | 346 | CONFIG_VFAT_FS=y |
347 | CONFIG_TMPFS=y | 347 | CONFIG_TMPFS=y |
348 | CONFIG_TMPFS_POSIX_ACL=y | 348 | CONFIG_TMPFS_POSIX_ACL=y |
349 | CONFIG_JFFS2_FS=y | 349 | CONFIG_JFFS2_FS=y |
350 | CONFIG_JFFS2_SUMMARY=y | 350 | CONFIG_JFFS2_SUMMARY=y |
351 | CONFIG_JFFS2_FS_XATTR=y | 351 | CONFIG_JFFS2_FS_XATTR=y |
352 | CONFIG_JFFS2_COMPRESSION_OPTIONS=y | 352 | CONFIG_JFFS2_COMPRESSION_OPTIONS=y |
353 | CONFIG_JFFS2_LZO=y | 353 | CONFIG_JFFS2_LZO=y |
354 | CONFIG_JFFS2_RUBIN=y | 354 | CONFIG_JFFS2_RUBIN=y |
355 | CONFIG_UBIFS_FS=y | 355 | CONFIG_UBIFS_FS=y |
356 | CONFIG_CRAMFS=y | 356 | CONFIG_CRAMFS=y |
357 | CONFIG_NFS_FS=y | 357 | CONFIG_NFS_FS=y |
358 | CONFIG_NFS_V3_ACL=y | 358 | CONFIG_NFS_V3_ACL=y |
359 | CONFIG_NFS_V4=y | 359 | CONFIG_NFS_V4=y |
360 | CONFIG_ROOT_NFS=y | 360 | CONFIG_ROOT_NFS=y |
361 | CONFIG_NLS_CODEPAGE_437=y | 361 | CONFIG_NLS_CODEPAGE_437=y |
362 | CONFIG_NLS_ISO8859_1=y | 362 | CONFIG_NLS_ISO8859_1=y |
363 | CONFIG_PRINTK_TIME=y | 363 | CONFIG_PRINTK_TIME=y |
364 | CONFIG_DEBUG_INFO=y | 364 | CONFIG_DEBUG_INFO=y |
365 | CONFIG_MAGIC_SYSRQ=y | 365 | CONFIG_MAGIC_SYSRQ=y |
366 | CONFIG_SCHEDSTATS=y | 366 | CONFIG_SCHEDSTATS=y |
367 | CONFIG_TIMER_STATS=y | 367 | CONFIG_TIMER_STATS=y |
368 | CONFIG_PROVE_LOCKING=y | 368 | CONFIG_PROVE_LOCKING=y |
369 | # CONFIG_DEBUG_BUGVERBOSE is not set | 369 | # CONFIG_DEBUG_BUGVERBOSE is not set |
370 | CONFIG_SECURITY=y | 370 | CONFIG_SECURITY=y |
371 | CONFIG_CRYPTO_MICHAEL_MIC=y | 371 | CONFIG_CRYPTO_MICHAEL_MIC=y |
372 | # CONFIG_CRYPTO_ANSI_CPRNG is not set | 372 | # CONFIG_CRYPTO_ANSI_CPRNG is not set |
373 | CONFIG_CRC_CCITT=y | 373 | CONFIG_CRC_CCITT=y |
374 | CONFIG_CRC_T10DIF=y | 374 | CONFIG_CRC_T10DIF=y |
375 | CONFIG_CRC_ITU_T=y | 375 | CONFIG_CRC_ITU_T=y |
376 | CONFIG_CRC7=y | 376 | CONFIG_CRC7=y |
377 | CONFIG_LIBCRC32C=y | 377 | CONFIG_LIBCRC32C=y |
378 | CONFIG_FONTS=y | 378 | CONFIG_FONTS=y |
379 | CONFIG_FONT_8x8=y | 379 | CONFIG_FONT_8x8=y |
380 | CONFIG_FONT_8x16=y | 380 | CONFIG_FONT_8x16=y |
381 | 381 |
arch/arm/mach-omap2/board-generic.c
1 | /* | 1 | /* |
2 | * Copyright (C) 2005 Nokia Corporation | 2 | * Copyright (C) 2005 Nokia Corporation |
3 | * Author: Paul Mundt <paul.mundt@nokia.com> | 3 | * Author: Paul Mundt <paul.mundt@nokia.com> |
4 | * | 4 | * |
5 | * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/ | 5 | * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/ |
6 | * | 6 | * |
7 | * Modified from the original mach-omap/omap2/board-generic.c did by Paul | 7 | * Modified from the original mach-omap/omap2/board-generic.c did by Paul |
8 | * to support the OMAP2+ device tree boards with an unique board file. | 8 | * to support the OMAP2+ device tree boards with an unique board file. |
9 | * | 9 | * |
10 | * This program is free software; you can redistribute it and/or modify | 10 | * This program is free software; you can redistribute it and/or modify |
11 | * it under the terms of the GNU General Public License version 2 as | 11 | * it under the terms of the GNU General Public License version 2 as |
12 | * published by the Free Software Foundation. | 12 | * published by the Free Software Foundation. |
13 | */ | 13 | */ |
14 | #include <linux/io.h> | 14 | #include <linux/io.h> |
15 | #include <linux/of_irq.h> | 15 | #include <linux/of_irq.h> |
16 | #include <linux/of_platform.h> | 16 | #include <linux/of_platform.h> |
17 | #include <linux/irqdomain.h> | 17 | #include <linux/irqdomain.h> |
18 | 18 | ||
19 | #include <asm/mach/arch.h> | 19 | #include <asm/mach/arch.h> |
20 | 20 | ||
21 | #include "common.h" | 21 | #include "common.h" |
22 | 22 | ||
23 | #if !(defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3)) | 23 | #if !(defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3)) |
24 | #define intc_of_init NULL | 24 | #define intc_of_init NULL |
25 | #endif | 25 | #endif |
26 | #ifndef CONFIG_ARCH_OMAP4 | 26 | #ifndef CONFIG_ARCH_OMAP4 |
27 | #define gic_of_init NULL | 27 | #define gic_of_init NULL |
28 | #endif | 28 | #endif |
29 | 29 | ||
30 | static const struct of_device_id omap_dt_match_table[] __initconst = { | 30 | static const struct of_device_id omap_dt_match_table[] __initconst = { |
31 | { .compatible = "simple-bus", }, | 31 | { .compatible = "simple-bus", }, |
32 | { .compatible = "ti,omap-infra", }, | 32 | { .compatible = "ti,omap-infra", }, |
33 | { } | 33 | { } |
34 | }; | 34 | }; |
35 | 35 | ||
36 | static void __init omap_generic_init(void) | 36 | static void __init omap_generic_init(void) |
37 | { | 37 | { |
38 | omapdss_early_init_of(); | 38 | omapdss_early_init_of(); |
39 | 39 | ||
40 | pdata_quirks_init(omap_dt_match_table); | 40 | pdata_quirks_init(omap_dt_match_table); |
41 | 41 | ||
42 | omapdss_init_of(); | 42 | omapdss_init_of(); |
43 | } | 43 | } |
44 | 44 | ||
45 | #ifdef CONFIG_SOC_OMAP2420 | 45 | #ifdef CONFIG_SOC_OMAP2420 |
46 | static const char *const omap242x_boards_compat[] __initconst = { | 46 | static const char *const omap242x_boards_compat[] __initconst = { |
47 | "ti,omap2420", | 47 | "ti,omap2420", |
48 | NULL, | 48 | NULL, |
49 | }; | 49 | }; |
50 | 50 | ||
51 | DT_MACHINE_START(OMAP242X_DT, "Generic OMAP2420 (Flattened Device Tree)") | 51 | DT_MACHINE_START(OMAP242X_DT, "Generic OMAP2420 (Flattened Device Tree)") |
52 | .reserve = omap_reserve, | 52 | .reserve = omap_reserve, |
53 | .map_io = omap242x_map_io, | 53 | .map_io = omap242x_map_io, |
54 | .init_early = omap2420_init_early, | 54 | .init_early = omap2420_init_early, |
55 | .init_machine = omap_generic_init, | 55 | .init_machine = omap_generic_init, |
56 | .init_time = omap2_sync32k_timer_init, | 56 | .init_time = omap2_sync32k_timer_init, |
57 | .dt_compat = omap242x_boards_compat, | 57 | .dt_compat = omap242x_boards_compat, |
58 | .restart = omap2xxx_restart, | 58 | .restart = omap2xxx_restart, |
59 | MACHINE_END | 59 | MACHINE_END |
60 | #endif | 60 | #endif |
61 | 61 | ||
62 | #ifdef CONFIG_SOC_OMAP2430 | 62 | #ifdef CONFIG_SOC_OMAP2430 |
63 | static const char *const omap243x_boards_compat[] __initconst = { | 63 | static const char *const omap243x_boards_compat[] __initconst = { |
64 | "ti,omap2430", | 64 | "ti,omap2430", |
65 | NULL, | 65 | NULL, |
66 | }; | 66 | }; |
67 | 67 | ||
68 | DT_MACHINE_START(OMAP243X_DT, "Generic OMAP2430 (Flattened Device Tree)") | 68 | DT_MACHINE_START(OMAP243X_DT, "Generic OMAP2430 (Flattened Device Tree)") |
69 | .reserve = omap_reserve, | 69 | .reserve = omap_reserve, |
70 | .map_io = omap243x_map_io, | 70 | .map_io = omap243x_map_io, |
71 | .init_early = omap2430_init_early, | 71 | .init_early = omap2430_init_early, |
72 | .init_machine = omap_generic_init, | 72 | .init_machine = omap_generic_init, |
73 | .init_time = omap2_sync32k_timer_init, | 73 | .init_time = omap2_sync32k_timer_init, |
74 | .dt_compat = omap243x_boards_compat, | 74 | .dt_compat = omap243x_boards_compat, |
75 | .restart = omap2xxx_restart, | 75 | .restart = omap2xxx_restart, |
76 | MACHINE_END | 76 | MACHINE_END |
77 | #endif | 77 | #endif |
78 | 78 | ||
79 | #ifdef CONFIG_ARCH_OMAP3 | 79 | #ifdef CONFIG_ARCH_OMAP3 |
80 | /* Some boards need board name for legacy userspace in /proc/cpuinfo */ | ||
81 | static const char *const n900_boards_compat[] __initconst = { | ||
82 | "nokia,omap3-n900", | ||
83 | NULL, | ||
84 | }; | ||
85 | |||
86 | DT_MACHINE_START(OMAP3_N900_DT, "Nokia RX-51 board") | ||
87 | .reserve = omap_reserve, | ||
88 | .map_io = omap3_map_io, | ||
89 | .init_early = omap3430_init_early, | ||
90 | .init_machine = omap_generic_init, | ||
91 | .init_late = omap3_init_late, | ||
92 | .init_time = omap3_sync32k_timer_init, | ||
93 | .dt_compat = n900_boards_compat, | ||
94 | .restart = omap3xxx_restart, | ||
95 | MACHINE_END | ||
96 | |||
97 | /* Generic omap3 boards, most boards can use these */ | ||
80 | static const char *const omap3_boards_compat[] __initconst = { | 98 | static const char *const omap3_boards_compat[] __initconst = { |
81 | "ti,omap3430", | 99 | "ti,omap3430", |
82 | "ti,omap3", | 100 | "ti,omap3", |
83 | NULL, | 101 | NULL, |
84 | }; | 102 | }; |
85 | 103 | ||
86 | DT_MACHINE_START(OMAP3_DT, "Generic OMAP3 (Flattened Device Tree)") | 104 | DT_MACHINE_START(OMAP3_DT, "Generic OMAP3 (Flattened Device Tree)") |
87 | .reserve = omap_reserve, | 105 | .reserve = omap_reserve, |
88 | .map_io = omap3_map_io, | 106 | .map_io = omap3_map_io, |
89 | .init_early = omap3430_init_early, | 107 | .init_early = omap3430_init_early, |
90 | .init_machine = omap_generic_init, | 108 | .init_machine = omap_generic_init, |
91 | .init_late = omap3_init_late, | 109 | .init_late = omap3_init_late, |
92 | .init_time = omap3_sync32k_timer_init, | 110 | .init_time = omap3_sync32k_timer_init, |
93 | .dt_compat = omap3_boards_compat, | 111 | .dt_compat = omap3_boards_compat, |
94 | .restart = omap3xxx_restart, | 112 | .restart = omap3xxx_restart, |
95 | MACHINE_END | 113 | MACHINE_END |
96 | 114 | ||
97 | static const char *const omap36xx_boards_compat[] __initconst = { | 115 | static const char *const omap36xx_boards_compat[] __initconst = { |
98 | "ti,omap36xx", | 116 | "ti,omap36xx", |
99 | NULL, | 117 | NULL, |
100 | }; | 118 | }; |
101 | 119 | ||
102 | DT_MACHINE_START(OMAP36XX_DT, "Generic OMAP36xx (Flattened Device Tree)") | 120 | DT_MACHINE_START(OMAP36XX_DT, "Generic OMAP36xx (Flattened Device Tree)") |
103 | .reserve = omap_reserve, | 121 | .reserve = omap_reserve, |
104 | .map_io = omap3_map_io, | 122 | .map_io = omap3_map_io, |
105 | .init_early = omap3630_init_early, | 123 | .init_early = omap3630_init_early, |
106 | .init_machine = omap_generic_init, | 124 | .init_machine = omap_generic_init, |
107 | .init_late = omap3_init_late, | 125 | .init_late = omap3_init_late, |
108 | .init_time = omap3_sync32k_timer_init, | 126 | .init_time = omap3_sync32k_timer_init, |
109 | .dt_compat = omap36xx_boards_compat, | 127 | .dt_compat = omap36xx_boards_compat, |
110 | .restart = omap3xxx_restart, | 128 | .restart = omap3xxx_restart, |
111 | MACHINE_END | 129 | MACHINE_END |
112 | 130 | ||
113 | static const char *const omap3_gp_boards_compat[] __initconst = { | 131 | static const char *const omap3_gp_boards_compat[] __initconst = { |
114 | "ti,omap3-beagle", | 132 | "ti,omap3-beagle", |
115 | "timll,omap3-devkit8000", | 133 | "timll,omap3-devkit8000", |
116 | NULL, | 134 | NULL, |
117 | }; | 135 | }; |
118 | 136 | ||
119 | DT_MACHINE_START(OMAP3_GP_DT, "Generic OMAP3-GP (Flattened Device Tree)") | 137 | DT_MACHINE_START(OMAP3_GP_DT, "Generic OMAP3-GP (Flattened Device Tree)") |
120 | .reserve = omap_reserve, | 138 | .reserve = omap_reserve, |
121 | .map_io = omap3_map_io, | 139 | .map_io = omap3_map_io, |
122 | .init_early = omap3430_init_early, | 140 | .init_early = omap3430_init_early, |
123 | .init_machine = omap_generic_init, | 141 | .init_machine = omap_generic_init, |
124 | .init_late = omap3_init_late, | 142 | .init_late = omap3_init_late, |
125 | .init_time = omap3_secure_sync32k_timer_init, | 143 | .init_time = omap3_secure_sync32k_timer_init, |
126 | .dt_compat = omap3_gp_boards_compat, | 144 | .dt_compat = omap3_gp_boards_compat, |
127 | .restart = omap3xxx_restart, | 145 | .restart = omap3xxx_restart, |
128 | MACHINE_END | 146 | MACHINE_END |
129 | 147 | ||
130 | static const char *const am3517_boards_compat[] __initconst = { | 148 | static const char *const am3517_boards_compat[] __initconst = { |
131 | "ti,am3517", | 149 | "ti,am3517", |
132 | NULL, | 150 | NULL, |
133 | }; | 151 | }; |
134 | 152 | ||
135 | DT_MACHINE_START(AM3517_DT, "Generic AM3517 (Flattened Device Tree)") | 153 | DT_MACHINE_START(AM3517_DT, "Generic AM3517 (Flattened Device Tree)") |
136 | .reserve = omap_reserve, | 154 | .reserve = omap_reserve, |
137 | .map_io = omap3_map_io, | 155 | .map_io = omap3_map_io, |
138 | .init_early = am35xx_init_early, | 156 | .init_early = am35xx_init_early, |
139 | .init_machine = omap_generic_init, | 157 | .init_machine = omap_generic_init, |
140 | .init_late = omap3_init_late, | 158 | .init_late = omap3_init_late, |
141 | .init_time = omap3_gptimer_timer_init, | 159 | .init_time = omap3_gptimer_timer_init, |
142 | .dt_compat = am3517_boards_compat, | 160 | .dt_compat = am3517_boards_compat, |
143 | .restart = omap3xxx_restart, | 161 | .restart = omap3xxx_restart, |
144 | MACHINE_END | 162 | MACHINE_END |
145 | #endif | 163 | #endif |
146 | 164 | ||
147 | #ifdef CONFIG_SOC_AM33XX | 165 | #ifdef CONFIG_SOC_AM33XX |
148 | static const char *const am33xx_boards_compat[] __initconst = { | 166 | static const char *const am33xx_boards_compat[] __initconst = { |
149 | "ti,am33xx", | 167 | "ti,am33xx", |
150 | NULL, | 168 | NULL, |
151 | }; | 169 | }; |
152 | 170 | ||
153 | DT_MACHINE_START(AM33XX_DT, "Generic AM33XX (Flattened Device Tree)") | 171 | DT_MACHINE_START(AM33XX_DT, "Generic AM33XX (Flattened Device Tree)") |
154 | .reserve = omap_reserve, | 172 | .reserve = omap_reserve, |
155 | .map_io = am33xx_map_io, | 173 | .map_io = am33xx_map_io, |
156 | .init_early = am33xx_init_early, | 174 | .init_early = am33xx_init_early, |
157 | .init_machine = omap_generic_init, | 175 | .init_machine = omap_generic_init, |
158 | .init_late = am33xx_init_late, | 176 | .init_late = am33xx_init_late, |
159 | .init_time = omap3_gptimer_timer_init, | 177 | .init_time = omap3_gptimer_timer_init, |
160 | .dt_compat = am33xx_boards_compat, | 178 | .dt_compat = am33xx_boards_compat, |
161 | .restart = am33xx_restart, | 179 | .restart = am33xx_restart, |
162 | MACHINE_END | 180 | MACHINE_END |
163 | #endif | 181 | #endif |
164 | 182 | ||
165 | #ifdef CONFIG_ARCH_OMAP4 | 183 | #ifdef CONFIG_ARCH_OMAP4 |
166 | static const char *const omap4_boards_compat[] __initconst = { | 184 | static const char *const omap4_boards_compat[] __initconst = { |
167 | "ti,omap4460", | 185 | "ti,omap4460", |
168 | "ti,omap4430", | 186 | "ti,omap4430", |
169 | "ti,omap4", | 187 | "ti,omap4", |
170 | NULL, | 188 | NULL, |
171 | }; | 189 | }; |
172 | 190 | ||
173 | DT_MACHINE_START(OMAP4_DT, "Generic OMAP4 (Flattened Device Tree)") | 191 | DT_MACHINE_START(OMAP4_DT, "Generic OMAP4 (Flattened Device Tree)") |
174 | .reserve = omap_reserve, | 192 | .reserve = omap_reserve, |
175 | .smp = smp_ops(omap4_smp_ops), | 193 | .smp = smp_ops(omap4_smp_ops), |
176 | .map_io = omap4_map_io, | 194 | .map_io = omap4_map_io, |
177 | .init_early = omap4430_init_early, | 195 | .init_early = omap4430_init_early, |
178 | .init_irq = omap_gic_of_init, | 196 | .init_irq = omap_gic_of_init, |
179 | .init_machine = omap_generic_init, | 197 | .init_machine = omap_generic_init, |
180 | .init_late = omap4430_init_late, | 198 | .init_late = omap4430_init_late, |
181 | .init_time = omap4_local_timer_init, | 199 | .init_time = omap4_local_timer_init, |
182 | .dt_compat = omap4_boards_compat, | 200 | .dt_compat = omap4_boards_compat, |
183 | .restart = omap44xx_restart, | 201 | .restart = omap44xx_restart, |
184 | MACHINE_END | 202 | MACHINE_END |
185 | #endif | 203 | #endif |
186 | 204 | ||
187 | #ifdef CONFIG_SOC_OMAP5 | 205 | #ifdef CONFIG_SOC_OMAP5 |
188 | static const char *const omap5_boards_compat[] __initconst = { | 206 | static const char *const omap5_boards_compat[] __initconst = { |
189 | "ti,omap5432", | 207 | "ti,omap5432", |
190 | "ti,omap5430", | 208 | "ti,omap5430", |
191 | "ti,omap5", | 209 | "ti,omap5", |
192 | NULL, | 210 | NULL, |
193 | }; | 211 | }; |
194 | 212 | ||
195 | DT_MACHINE_START(OMAP5_DT, "Generic OMAP5 (Flattened Device Tree)") | 213 | DT_MACHINE_START(OMAP5_DT, "Generic OMAP5 (Flattened Device Tree)") |
196 | .reserve = omap_reserve, | 214 | .reserve = omap_reserve, |
197 | .smp = smp_ops(omap4_smp_ops), | 215 | .smp = smp_ops(omap4_smp_ops), |
198 | .map_io = omap5_map_io, | 216 | .map_io = omap5_map_io, |
199 | .init_early = omap5_init_early, | 217 | .init_early = omap5_init_early, |
200 | .init_irq = omap_gic_of_init, | 218 | .init_irq = omap_gic_of_init, |
201 | .init_machine = omap_generic_init, | 219 | .init_machine = omap_generic_init, |
202 | .init_late = omap5_init_late, | 220 | .init_late = omap5_init_late, |
203 | .init_time = omap5_realtime_timer_init, | 221 | .init_time = omap5_realtime_timer_init, |
204 | .dt_compat = omap5_boards_compat, | 222 | .dt_compat = omap5_boards_compat, |
205 | .restart = omap44xx_restart, | 223 | .restart = omap44xx_restart, |
206 | MACHINE_END | 224 | MACHINE_END |
207 | #endif | 225 | #endif |
208 | 226 | ||
209 | #ifdef CONFIG_SOC_AM43XX | 227 | #ifdef CONFIG_SOC_AM43XX |
210 | static const char *const am43_boards_compat[] __initconst = { | 228 | static const char *const am43_boards_compat[] __initconst = { |
211 | "ti,am4372", | 229 | "ti,am4372", |
212 | "ti,am43", | 230 | "ti,am43", |
213 | NULL, | 231 | NULL, |
214 | }; | 232 | }; |
215 | 233 | ||
216 | DT_MACHINE_START(AM43_DT, "Generic AM43 (Flattened Device Tree)") | 234 | DT_MACHINE_START(AM43_DT, "Generic AM43 (Flattened Device Tree)") |
217 | .map_io = am33xx_map_io, | 235 | .map_io = am33xx_map_io, |
218 | .init_early = am43xx_init_early, | 236 | .init_early = am43xx_init_early, |
219 | .init_late = am43xx_init_late, | 237 | .init_late = am43xx_init_late, |
220 | .init_irq = omap_gic_of_init, | 238 | .init_irq = omap_gic_of_init, |
221 | .init_machine = omap_generic_init, | 239 | .init_machine = omap_generic_init, |
222 | .init_time = omap3_gptimer_timer_init, | 240 | .init_time = omap3_gptimer_timer_init, |
223 | .dt_compat = am43_boards_compat, | 241 | .dt_compat = am43_boards_compat, |
224 | .restart = omap44xx_restart, | 242 | .restart = omap44xx_restart, |
225 | MACHINE_END | 243 | MACHINE_END |
226 | #endif | 244 | #endif |
227 | 245 | ||
228 | #ifdef CONFIG_SOC_DRA7XX | 246 | #ifdef CONFIG_SOC_DRA7XX |
229 | static const char *const dra74x_boards_compat[] __initconst = { | 247 | static const char *const dra74x_boards_compat[] __initconst = { |
230 | "ti,am5728", | 248 | "ti,am5728", |
231 | "ti,am5726", | 249 | "ti,am5726", |
232 | "ti,dra742", | 250 | "ti,dra742", |
233 | "ti,dra7", | 251 | "ti,dra7", |
234 | NULL, | 252 | NULL, |
235 | }; | 253 | }; |
236 | 254 | ||
237 | DT_MACHINE_START(DRA74X_DT, "Generic DRA74X (Flattened Device Tree)") | 255 | DT_MACHINE_START(DRA74X_DT, "Generic DRA74X (Flattened Device Tree)") |
238 | .reserve = omap_reserve, | 256 | .reserve = omap_reserve, |
239 | .smp = smp_ops(omap4_smp_ops), | 257 | .smp = smp_ops(omap4_smp_ops), |
240 | .map_io = omap5_map_io, | 258 | .map_io = omap5_map_io, |
241 | .init_early = dra7xx_init_early, | 259 | .init_early = dra7xx_init_early, |
242 | .init_late = dra7xx_init_late, | 260 | .init_late = dra7xx_init_late, |
243 | .init_irq = omap_gic_of_init, | 261 | .init_irq = omap_gic_of_init, |
244 | .init_machine = omap_generic_init, | 262 | .init_machine = omap_generic_init, |
245 | .init_time = omap5_realtime_timer_init, | 263 | .init_time = omap5_realtime_timer_init, |
246 | .dt_compat = dra74x_boards_compat, | 264 | .dt_compat = dra74x_boards_compat, |
247 | .restart = omap44xx_restart, | 265 | .restart = omap44xx_restart, |
248 | MACHINE_END | 266 | MACHINE_END |
249 | 267 | ||
250 | static const char *const dra72x_boards_compat[] __initconst = { | 268 | static const char *const dra72x_boards_compat[] __initconst = { |
251 | "ti,am5718", | 269 | "ti,am5718", |
252 | "ti,am5716", | 270 | "ti,am5716", |
253 | "ti,dra722", | 271 | "ti,dra722", |
254 | NULL, | 272 | NULL, |
255 | }; | 273 | }; |
256 | 274 | ||
257 | DT_MACHINE_START(DRA72X_DT, "Generic DRA72X (Flattened Device Tree)") | 275 | DT_MACHINE_START(DRA72X_DT, "Generic DRA72X (Flattened Device Tree)") |
258 | .reserve = omap_reserve, | 276 | .reserve = omap_reserve, |
259 | .map_io = omap5_map_io, | 277 | .map_io = omap5_map_io, |
260 | .init_early = dra7xx_init_early, | 278 | .init_early = dra7xx_init_early, |
261 | .init_late = dra7xx_init_late, | 279 | .init_late = dra7xx_init_late, |
262 | .init_irq = omap_gic_of_init, | 280 | .init_irq = omap_gic_of_init, |
263 | .init_machine = omap_generic_init, | 281 | .init_machine = omap_generic_init, |
264 | .init_time = omap5_realtime_timer_init, | 282 | .init_time = omap5_realtime_timer_init, |
265 | .dt_compat = dra72x_boards_compat, | 283 | .dt_compat = dra72x_boards_compat, |
266 | .restart = omap44xx_restart, | 284 | .restart = omap44xx_restart, |
267 | MACHINE_END | 285 | MACHINE_END |
268 | #endif | 286 | #endif |
269 | 287 |
arch/arm/mach-omap2/common.h
1 | /* | 1 | /* |
2 | * Header for code common to all OMAP2+ machines. | 2 | * Header for code common to all OMAP2+ machines. |
3 | * | 3 | * |
4 | * This program is free software; you can redistribute it and/or modify it | 4 | * This program is free software; you can redistribute it and/or modify it |
5 | * under the terms of the GNU General Public License as published by the | 5 | * under the terms of the GNU General Public License as published by the |
6 | * Free Software Foundation; either version 2 of the License, or (at your | 6 | * Free Software Foundation; either version 2 of the License, or (at your |
7 | * option) any later version. | 7 | * option) any later version. |
8 | * | 8 | * |
9 | * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED | 9 | * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED |
10 | * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | 10 | * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF |
11 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN | 11 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN |
12 | * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, | 12 | * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
13 | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | 13 | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
14 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | 14 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF |
15 | * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | 15 | * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON |
16 | * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 16 | * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
17 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | 17 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
18 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 18 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
19 | * | 19 | * |
20 | * You should have received a copy of the GNU General Public License along | 20 | * You should have received a copy of the GNU General Public License along |
21 | * with this program; if not, write to the Free Software Foundation, Inc., | 21 | * with this program; if not, write to the Free Software Foundation, Inc., |
22 | * 675 Mass Ave, Cambridge, MA 02139, USA. | 22 | * 675 Mass Ave, Cambridge, MA 02139, USA. |
23 | */ | 23 | */ |
24 | 24 | ||
25 | #ifndef __ARCH_ARM_MACH_OMAP2PLUS_COMMON_H | 25 | #ifndef __ARCH_ARM_MACH_OMAP2PLUS_COMMON_H |
26 | #define __ARCH_ARM_MACH_OMAP2PLUS_COMMON_H | 26 | #define __ARCH_ARM_MACH_OMAP2PLUS_COMMON_H |
27 | #ifndef __ASSEMBLER__ | 27 | #ifndef __ASSEMBLER__ |
28 | 28 | ||
29 | #include <linux/irq.h> | 29 | #include <linux/irq.h> |
30 | #include <linux/delay.h> | 30 | #include <linux/delay.h> |
31 | #include <linux/i2c.h> | 31 | #include <linux/i2c.h> |
32 | #include <linux/i2c/twl.h> | 32 | #include <linux/i2c/twl.h> |
33 | #include <linux/i2c-omap.h> | 33 | #include <linux/i2c-omap.h> |
34 | #include <linux/reboot.h> | 34 | #include <linux/reboot.h> |
35 | #include <linux/irqchip/irq-omap-intc.h> | 35 | #include <linux/irqchip/irq-omap-intc.h> |
36 | 36 | ||
37 | #include <asm/proc-fns.h> | 37 | #include <asm/proc-fns.h> |
38 | 38 | ||
39 | #include "i2c.h" | 39 | #include "i2c.h" |
40 | #include "serial.h" | 40 | #include "serial.h" |
41 | 41 | ||
42 | #include "usb.h" | 42 | #include "usb.h" |
43 | 43 | ||
44 | #define OMAP_INTC_START NR_IRQS | 44 | #define OMAP_INTC_START NR_IRQS |
45 | 45 | ||
46 | #if defined(CONFIG_PM) && defined(CONFIG_ARCH_OMAP2) | 46 | #if defined(CONFIG_PM) && defined(CONFIG_ARCH_OMAP2) |
47 | int omap2_pm_init(void); | 47 | int omap2_pm_init(void); |
48 | #else | 48 | #else |
49 | static inline int omap2_pm_init(void) | 49 | static inline int omap2_pm_init(void) |
50 | { | 50 | { |
51 | return 0; | 51 | return 0; |
52 | } | 52 | } |
53 | #endif | 53 | #endif |
54 | 54 | ||
55 | #if defined(CONFIG_PM) && defined(CONFIG_ARCH_OMAP3) | 55 | #if defined(CONFIG_PM) && defined(CONFIG_ARCH_OMAP3) |
56 | int omap3_pm_init(void); | 56 | int omap3_pm_init(void); |
57 | #else | 57 | #else |
58 | static inline int omap3_pm_init(void) | 58 | static inline int omap3_pm_init(void) |
59 | { | 59 | { |
60 | return 0; | 60 | return 0; |
61 | } | 61 | } |
62 | #endif | 62 | #endif |
63 | 63 | ||
64 | #if defined(CONFIG_PM) && (defined(CONFIG_ARCH_OMAP4) || defined(CONFIG_SOC_OMAP5) || defined(CONFIG_SOC_DRA7XX)) | 64 | #if defined(CONFIG_PM) && (defined(CONFIG_ARCH_OMAP4) || defined(CONFIG_SOC_OMAP5) || defined(CONFIG_SOC_DRA7XX)) |
65 | int omap4_pm_init(void); | 65 | int omap4_pm_init(void); |
66 | int omap4_pm_init_early(void); | 66 | int omap4_pm_init_early(void); |
67 | #else | 67 | #else |
68 | static inline int omap4_pm_init(void) | 68 | static inline int omap4_pm_init(void) |
69 | { | 69 | { |
70 | return 0; | 70 | return 0; |
71 | } | 71 | } |
72 | 72 | ||
73 | static inline int omap4_pm_init_early(void) | 73 | static inline int omap4_pm_init_early(void) |
74 | { | 74 | { |
75 | return 0; | 75 | return 0; |
76 | } | 76 | } |
77 | #endif | 77 | #endif |
78 | 78 | ||
79 | #ifdef CONFIG_OMAP_MUX | 79 | #ifdef CONFIG_OMAP_MUX |
80 | int omap_mux_late_init(void); | 80 | int omap_mux_late_init(void); |
81 | #else | 81 | #else |
82 | static inline int omap_mux_late_init(void) | 82 | static inline int omap_mux_late_init(void) |
83 | { | 83 | { |
84 | return 0; | 84 | return 0; |
85 | } | 85 | } |
86 | #endif | 86 | #endif |
87 | 87 | ||
88 | extern void omap2_init_common_infrastructure(void); | 88 | extern void omap2_init_common_infrastructure(void); |
89 | 89 | ||
90 | extern void omap2_sync32k_timer_init(void); | 90 | extern void omap2_sync32k_timer_init(void); |
91 | extern void omap3_sync32k_timer_init(void); | 91 | extern void omap3_sync32k_timer_init(void); |
92 | extern void omap3_secure_sync32k_timer_init(void); | 92 | extern void omap3_secure_sync32k_timer_init(void); |
93 | extern void omap3_gptimer_timer_init(void); | 93 | extern void omap3_gptimer_timer_init(void); |
94 | extern void omap4_local_timer_init(void); | 94 | extern void omap4_local_timer_init(void); |
95 | #ifdef CONFIG_CACHE_L2X0 | 95 | #ifdef CONFIG_CACHE_L2X0 |
96 | int omap_l2_cache_init(void); | 96 | int omap_l2_cache_init(void); |
97 | #else | 97 | #else |
98 | static inline int omap_l2_cache_init(void) | 98 | static inline int omap_l2_cache_init(void) |
99 | { | 99 | { |
100 | return 0; | 100 | return 0; |
101 | } | 101 | } |
102 | #endif | 102 | #endif |
103 | extern void omap5_realtime_timer_init(void); | 103 | extern void omap5_realtime_timer_init(void); |
104 | 104 | ||
105 | void omap2420_init_early(void); | 105 | void omap2420_init_early(void); |
106 | void omap2430_init_early(void); | 106 | void omap2430_init_early(void); |
107 | void omap3430_init_early(void); | 107 | void omap3430_init_early(void); |
108 | void omap35xx_init_early(void); | 108 | void omap35xx_init_early(void); |
109 | void omap3630_init_early(void); | 109 | void omap3630_init_early(void); |
110 | void omap3_init_early(void); /* Do not use this one */ | 110 | void omap3_init_early(void); /* Do not use this one */ |
111 | void am33xx_init_early(void); | 111 | void am33xx_init_early(void); |
112 | void am35xx_init_early(void); | 112 | void am35xx_init_early(void); |
113 | void ti81xx_init_early(void); | 113 | void ti81xx_init_early(void); |
114 | void am33xx_init_early(void); | 114 | void am33xx_init_early(void); |
115 | void am43xx_init_early(void); | 115 | void am43xx_init_early(void); |
116 | void am43xx_init_late(void); | 116 | void am43xx_init_late(void); |
117 | void omap4430_init_early(void); | 117 | void omap4430_init_early(void); |
118 | void omap5_init_early(void); | 118 | void omap5_init_early(void); |
119 | void omap3_init_late(void); /* Do not use this one */ | 119 | void omap3_init_late(void); /* Do not use this one */ |
120 | void omap4430_init_late(void); | 120 | void omap4430_init_late(void); |
121 | void omap2420_init_late(void); | 121 | void omap2420_init_late(void); |
122 | void omap2430_init_late(void); | 122 | void omap2430_init_late(void); |
123 | void omap3430_init_late(void); | 123 | void omap3430_init_late(void); |
124 | void omap35xx_init_late(void); | 124 | void omap35xx_init_late(void); |
125 | void omap3630_init_late(void); | 125 | void omap3630_init_late(void); |
126 | void am35xx_init_late(void); | 126 | void am35xx_init_late(void); |
127 | void ti81xx_init_late(void); | 127 | void ti81xx_init_late(void); |
128 | void am33xx_init_late(void); | 128 | void am33xx_init_late(void); |
129 | void omap5_init_late(void); | 129 | void omap5_init_late(void); |
130 | int omap2_common_pm_late_init(void); | 130 | int omap2_common_pm_late_init(void); |
131 | void dra7xx_init_early(void); | 131 | void dra7xx_init_early(void); |
132 | void dra7xx_init_late(void); | 132 | void dra7xx_init_late(void); |
133 | 133 | ||
134 | #ifdef CONFIG_SOC_BUS | 134 | #ifdef CONFIG_SOC_BUS |
135 | void omap_soc_device_init(void); | 135 | void omap_soc_device_init(void); |
136 | #else | 136 | #else |
137 | static inline void omap_soc_device_init(void) | 137 | static inline void omap_soc_device_init(void) |
138 | { | 138 | { |
139 | } | 139 | } |
140 | #endif | 140 | #endif |
141 | 141 | ||
142 | #if defined(CONFIG_SOC_OMAP2420) || defined(CONFIG_SOC_OMAP2430) | 142 | #if defined(CONFIG_SOC_OMAP2420) || defined(CONFIG_SOC_OMAP2430) |
143 | void omap2xxx_restart(enum reboot_mode mode, const char *cmd); | 143 | void omap2xxx_restart(enum reboot_mode mode, const char *cmd); |
144 | #else | 144 | #else |
145 | static inline void omap2xxx_restart(enum reboot_mode mode, const char *cmd) | 145 | static inline void omap2xxx_restart(enum reboot_mode mode, const char *cmd) |
146 | { | 146 | { |
147 | } | 147 | } |
148 | #endif | 148 | #endif |
149 | 149 | ||
150 | #ifdef CONFIG_SOC_AM33XX | 150 | #ifdef CONFIG_SOC_AM33XX |
151 | void am33xx_restart(enum reboot_mode mode, const char *cmd); | 151 | void am33xx_restart(enum reboot_mode mode, const char *cmd); |
152 | #else | 152 | #else |
153 | static inline void am33xx_restart(enum reboot_mode mode, const char *cmd) | 153 | static inline void am33xx_restart(enum reboot_mode mode, const char *cmd) |
154 | { | 154 | { |
155 | } | 155 | } |
156 | #endif | 156 | #endif |
157 | 157 | ||
158 | #ifdef CONFIG_ARCH_OMAP3 | 158 | #ifdef CONFIG_ARCH_OMAP3 |
159 | void omap3xxx_restart(enum reboot_mode mode, const char *cmd); | 159 | void omap3xxx_restart(enum reboot_mode mode, const char *cmd); |
160 | #else | 160 | #else |
161 | static inline void omap3xxx_restart(enum reboot_mode mode, const char *cmd) | 161 | static inline void omap3xxx_restart(enum reboot_mode mode, const char *cmd) |
162 | { | 162 | { |
163 | } | 163 | } |
164 | #endif | 164 | #endif |
165 | 165 | ||
166 | #if defined(CONFIG_ARCH_OMAP4) || defined(CONFIG_SOC_OMAP5) || \ | 166 | #if defined(CONFIG_ARCH_OMAP4) || defined(CONFIG_SOC_OMAP5) || \ |
167 | defined(CONFIG_SOC_DRA7XX) || defined(CONFIG_SOC_AM43XX) | 167 | defined(CONFIG_SOC_DRA7XX) || defined(CONFIG_SOC_AM43XX) |
168 | void omap44xx_restart(enum reboot_mode mode, const char *cmd); | 168 | void omap44xx_restart(enum reboot_mode mode, const char *cmd); |
169 | #else | 169 | #else |
170 | static inline void omap44xx_restart(enum reboot_mode mode, const char *cmd) | 170 | static inline void omap44xx_restart(enum reboot_mode mode, const char *cmd) |
171 | { | 171 | { |
172 | } | 172 | } |
173 | #endif | 173 | #endif |
174 | 174 | ||
175 | /* This gets called from mach-omap2/io.c, do not call this */ | 175 | /* This gets called from mach-omap2/io.c, do not call this */ |
176 | void __init omap2_set_globals_tap(u32 class, void __iomem *tap); | 176 | void __init omap2_set_globals_tap(u32 class, void __iomem *tap); |
177 | 177 | ||
178 | void __init omap242x_map_io(void); | 178 | void __init omap242x_map_io(void); |
179 | void __init omap243x_map_io(void); | 179 | void __init omap243x_map_io(void); |
180 | void __init omap3_map_io(void); | 180 | void __init omap3_map_io(void); |
181 | void __init am33xx_map_io(void); | 181 | void __init am33xx_map_io(void); |
182 | void __init omap4_map_io(void); | 182 | void __init omap4_map_io(void); |
183 | void __init omap5_map_io(void); | 183 | void __init omap5_map_io(void); |
184 | void __init ti81xx_map_io(void); | 184 | void __init ti81xx_map_io(void); |
185 | 185 | ||
186 | /* omap_barriers_init() is OMAP4 only */ | 186 | /* omap_barriers_init() is OMAP4 only */ |
187 | void omap_barriers_init(void); | 187 | void omap_barriers_init(void); |
188 | 188 | ||
189 | /** | 189 | /** |
190 | * omap_test_timeout - busy-loop, testing a condition | 190 | * omap_test_timeout - busy-loop, testing a condition |
191 | * @cond: condition to test until it evaluates to true | 191 | * @cond: condition to test until it evaluates to true |
192 | * @timeout: maximum number of microseconds in the timeout | 192 | * @timeout: maximum number of microseconds in the timeout |
193 | * @index: loop index (integer) | 193 | * @index: loop index (integer) |
194 | * | 194 | * |
195 | * Loop waiting for @cond to become true or until at least @timeout | 195 | * Loop waiting for @cond to become true or until at least @timeout |
196 | * microseconds have passed. To use, define some integer @index in the | 196 | * microseconds have passed. To use, define some integer @index in the |
197 | * calling code. After running, if @index == @timeout, then the loop has | 197 | * calling code. After running, if @index == @timeout, then the loop has |
198 | * timed out. | 198 | * timed out. |
199 | */ | 199 | */ |
200 | #define omap_test_timeout(cond, timeout, index) \ | 200 | #define omap_test_timeout(cond, timeout, index) \ |
201 | ({ \ | 201 | ({ \ |
202 | for (index = 0; index < timeout; index++) { \ | 202 | for (index = 0; index < timeout; index++) { \ |
203 | if (cond) \ | 203 | if (cond) \ |
204 | break; \ | 204 | break; \ |
205 | udelay(1); \ | 205 | udelay(1); \ |
206 | } \ | 206 | } \ |
207 | }) | 207 | }) |
208 | 208 | ||
209 | extern struct device *omap2_get_mpuss_device(void); | 209 | extern struct device *omap2_get_mpuss_device(void); |
210 | extern struct device *omap2_get_iva_device(void); | 210 | extern struct device *omap2_get_iva_device(void); |
211 | extern struct device *omap2_get_l3_device(void); | 211 | extern struct device *omap2_get_l3_device(void); |
212 | extern struct device *omap4_get_dsp_device(void); | 212 | extern struct device *omap4_get_dsp_device(void); |
213 | 213 | ||
214 | void omap_gic_of_init(void); | 214 | void omap_gic_of_init(void); |
215 | 215 | ||
216 | #ifdef CONFIG_CACHE_L2X0 | 216 | #ifdef CONFIG_CACHE_L2X0 |
217 | extern void __iomem *omap4_get_l2cache_base(void); | 217 | extern void __iomem *omap4_get_l2cache_base(void); |
218 | #endif | 218 | #endif |
219 | 219 | ||
220 | struct device_node; | 220 | struct device_node; |
221 | 221 | ||
222 | #ifdef CONFIG_SMP | 222 | #ifdef CONFIG_SMP |
223 | extern void __iomem *omap4_get_scu_base(void); | 223 | extern void __iomem *omap4_get_scu_base(void); |
224 | #else | 224 | #else |
225 | static inline void __iomem *omap4_get_scu_base(void) | 225 | static inline void __iomem *omap4_get_scu_base(void) |
226 | { | 226 | { |
227 | return NULL; | 227 | return NULL; |
228 | } | 228 | } |
229 | #endif | 229 | #endif |
230 | 230 | ||
231 | extern void gic_dist_disable(void); | 231 | extern void gic_dist_disable(void); |
232 | extern void gic_dist_enable(void); | 232 | extern void gic_dist_enable(void); |
233 | extern bool gic_dist_disabled(void); | 233 | extern bool gic_dist_disabled(void); |
234 | extern void gic_timer_retrigger(void); | 234 | extern void gic_timer_retrigger(void); |
235 | extern void omap_smc1(u32 fn, u32 arg); | 235 | extern void omap_smc1(u32 fn, u32 arg); |
236 | extern void __iomem *omap4_get_sar_ram_base(void); | 236 | extern void __iomem *omap4_get_sar_ram_base(void); |
237 | extern void omap_do_wfi(void); | 237 | extern void omap_do_wfi(void); |
238 | 238 | ||
239 | #ifdef CONFIG_SMP | 239 | #ifdef CONFIG_SMP |
240 | /* Needed for secondary core boot */ | 240 | /* Needed for secondary core boot */ |
241 | extern void omap4_secondary_startup(void); | 241 | extern void omap4_secondary_startup(void); |
242 | extern void omap4460_secondary_startup(void); | 242 | extern void omap4460_secondary_startup(void); |
243 | extern u32 omap_modify_auxcoreboot0(u32 set_mask, u32 clear_mask); | 243 | extern u32 omap_modify_auxcoreboot0(u32 set_mask, u32 clear_mask); |
244 | extern void omap_auxcoreboot_addr(u32 cpu_addr); | 244 | extern void omap_auxcoreboot_addr(u32 cpu_addr); |
245 | extern u32 omap_read_auxcoreboot0(void); | 245 | extern u32 omap_read_auxcoreboot0(void); |
246 | 246 | ||
247 | extern void omap4_cpu_die(unsigned int cpu); | 247 | extern void omap4_cpu_die(unsigned int cpu); |
248 | 248 | ||
249 | extern struct smp_operations omap4_smp_ops; | 249 | extern struct smp_operations omap4_smp_ops; |
250 | 250 | ||
251 | extern void omap5_secondary_startup(void); | 251 | extern void omap5_secondary_startup(void); |
252 | extern void omap5_secondary_hyp_startup(void); | ||
252 | #endif | 253 | #endif |
253 | 254 | ||
254 | #if defined(CONFIG_SMP) && defined(CONFIG_PM) | 255 | #if defined(CONFIG_SMP) && defined(CONFIG_PM) |
255 | extern int omap4_mpuss_init(void); | 256 | extern int omap4_mpuss_init(void); |
256 | extern int omap4_enter_lowpower(unsigned int cpu, unsigned int power_state); | 257 | extern int omap4_enter_lowpower(unsigned int cpu, unsigned int power_state); |
257 | extern int omap4_finish_suspend(unsigned long cpu_state); | 258 | extern int omap4_finish_suspend(unsigned long cpu_state); |
258 | extern void omap4_cpu_resume(void); | 259 | extern void omap4_cpu_resume(void); |
259 | extern int omap4_hotplug_cpu(unsigned int cpu, unsigned int power_state); | 260 | extern int omap4_hotplug_cpu(unsigned int cpu, unsigned int power_state); |
260 | #else | 261 | #else |
261 | static inline int omap4_enter_lowpower(unsigned int cpu, | 262 | static inline int omap4_enter_lowpower(unsigned int cpu, |
262 | unsigned int power_state) | 263 | unsigned int power_state) |
263 | { | 264 | { |
264 | cpu_do_idle(); | 265 | cpu_do_idle(); |
265 | return 0; | 266 | return 0; |
266 | } | 267 | } |
267 | 268 | ||
268 | static inline int omap4_hotplug_cpu(unsigned int cpu, unsigned int power_state) | 269 | static inline int omap4_hotplug_cpu(unsigned int cpu, unsigned int power_state) |
269 | { | 270 | { |
270 | cpu_do_idle(); | 271 | cpu_do_idle(); |
271 | return 0; | 272 | return 0; |
272 | } | 273 | } |
273 | 274 | ||
274 | static inline int omap4_mpuss_init(void) | 275 | static inline int omap4_mpuss_init(void) |
275 | { | 276 | { |
276 | return 0; | 277 | return 0; |
277 | } | 278 | } |
278 | 279 | ||
279 | static inline int omap4_finish_suspend(unsigned long cpu_state) | 280 | static inline int omap4_finish_suspend(unsigned long cpu_state) |
280 | { | 281 | { |
281 | return 0; | 282 | return 0; |
282 | } | 283 | } |
283 | 284 | ||
284 | static inline void omap4_cpu_resume(void) | 285 | static inline void omap4_cpu_resume(void) |
285 | {} | 286 | {} |
286 | 287 | ||
287 | #endif | 288 | #endif |
288 | 289 | ||
289 | void pdata_quirks_init(const struct of_device_id *); | 290 | void pdata_quirks_init(const struct of_device_id *); |
290 | void omap_auxdata_legacy_init(struct device *dev); | 291 | void omap_auxdata_legacy_init(struct device *dev); |
291 | void omap_pcs_legacy_init(int irq, void (*rearm)(void)); | 292 | void omap_pcs_legacy_init(int irq, void (*rearm)(void)); |
292 | 293 | ||
293 | struct omap_sdrc_params; | 294 | struct omap_sdrc_params; |
294 | extern void omap_sdrc_init(struct omap_sdrc_params *sdrc_cs0, | 295 | extern void omap_sdrc_init(struct omap_sdrc_params *sdrc_cs0, |
295 | struct omap_sdrc_params *sdrc_cs1); | 296 | struct omap_sdrc_params *sdrc_cs1); |
296 | struct omap2_hsmmc_info; | 297 | struct omap2_hsmmc_info; |
297 | extern void omap_reserve(void); | 298 | extern void omap_reserve(void); |
298 | 299 | ||
299 | struct omap_hwmod; | 300 | struct omap_hwmod; |
300 | extern int omap_dss_reset(struct omap_hwmod *); | 301 | extern int omap_dss_reset(struct omap_hwmod *); |
301 | 302 | ||
302 | /* SoC specific clock initializer */ | 303 | /* SoC specific clock initializer */ |
303 | int omap_clk_init(void); | 304 | int omap_clk_init(void); |
304 | 305 | ||
305 | int __init omapdss_init_of(void); | 306 | int __init omapdss_init_of(void); |
306 | void __init omapdss_early_init_of(void); | 307 | void __init omapdss_early_init_of(void); |
307 | 308 | ||
308 | #endif /* __ASSEMBLER__ */ | 309 | #endif /* __ASSEMBLER__ */ |
309 | #endif /* __ARCH_ARM_MACH_OMAP2PLUS_COMMON_H */ | 310 | #endif /* __ARCH_ARM_MACH_OMAP2PLUS_COMMON_H */ |
310 | 311 |
arch/arm/mach-omap2/control.h
1 | /* | 1 | /* |
2 | * arch/arm/mach-omap2/control.h | 2 | * arch/arm/mach-omap2/control.h |
3 | * | 3 | * |
4 | * OMAP2/3/4 System Control Module definitions | 4 | * OMAP2/3/4 System Control Module definitions |
5 | * | 5 | * |
6 | * Copyright (C) 2007-2010 Texas Instruments, Inc. | 6 | * Copyright (C) 2007-2010 Texas Instruments, Inc. |
7 | * Copyright (C) 2007-2008, 2010 Nokia Corporation | 7 | * Copyright (C) 2007-2008, 2010 Nokia Corporation |
8 | * | 8 | * |
9 | * Written by Paul Walmsley | 9 | * Written by Paul Walmsley |
10 | * | 10 | * |
11 | * This program is free software; you can redistribute it and/or modify | 11 | * This program is free software; you can redistribute it and/or modify |
12 | * it under the terms of the GNU General Public License as published by | 12 | * it under the terms of the GNU General Public License as published by |
13 | * the Free Software Foundation. | 13 | * the Free Software Foundation. |
14 | */ | 14 | */ |
15 | 15 | ||
16 | #ifndef __ARCH_ARM_MACH_OMAP2_CONTROL_H | 16 | #ifndef __ARCH_ARM_MACH_OMAP2_CONTROL_H |
17 | #define __ARCH_ARM_MACH_OMAP2_CONTROL_H | 17 | #define __ARCH_ARM_MACH_OMAP2_CONTROL_H |
18 | 18 | ||
19 | #include "am33xx.h" | 19 | #include "am33xx.h" |
20 | 20 | ||
21 | #ifndef __ASSEMBLY__ | 21 | #ifndef __ASSEMBLY__ |
22 | #define OMAP242X_CTRL_REGADDR(reg) \ | 22 | #define OMAP242X_CTRL_REGADDR(reg) \ |
23 | OMAP2_L4_IO_ADDRESS(OMAP242X_CTRL_BASE + (reg)) | 23 | OMAP2_L4_IO_ADDRESS(OMAP242X_CTRL_BASE + (reg)) |
24 | #define OMAP243X_CTRL_REGADDR(reg) \ | 24 | #define OMAP243X_CTRL_REGADDR(reg) \ |
25 | OMAP2_L4_IO_ADDRESS(OMAP243X_CTRL_BASE + (reg)) | 25 | OMAP2_L4_IO_ADDRESS(OMAP243X_CTRL_BASE + (reg)) |
26 | #define OMAP343X_CTRL_REGADDR(reg) \ | 26 | #define OMAP343X_CTRL_REGADDR(reg) \ |
27 | OMAP2_L4_IO_ADDRESS(OMAP343X_CTRL_BASE + (reg)) | 27 | OMAP2_L4_IO_ADDRESS(OMAP343X_CTRL_BASE + (reg)) |
28 | #define AM33XX_CTRL_REGADDR(reg) \ | 28 | #define AM33XX_CTRL_REGADDR(reg) \ |
29 | AM33XX_L4_WK_IO_ADDRESS(AM33XX_SCM_BASE + (reg)) | 29 | AM33XX_L4_WK_IO_ADDRESS(AM33XX_SCM_BASE + (reg)) |
30 | #else | 30 | #else |
31 | #define OMAP242X_CTRL_REGADDR(reg) \ | 31 | #define OMAP242X_CTRL_REGADDR(reg) \ |
32 | OMAP2_L4_IO_ADDRESS(OMAP242X_CTRL_BASE + (reg)) | 32 | OMAP2_L4_IO_ADDRESS(OMAP242X_CTRL_BASE + (reg)) |
33 | #define OMAP243X_CTRL_REGADDR(reg) \ | 33 | #define OMAP243X_CTRL_REGADDR(reg) \ |
34 | OMAP2_L4_IO_ADDRESS(OMAP243X_CTRL_BASE + (reg)) | 34 | OMAP2_L4_IO_ADDRESS(OMAP243X_CTRL_BASE + (reg)) |
35 | #define OMAP343X_CTRL_REGADDR(reg) \ | 35 | #define OMAP343X_CTRL_REGADDR(reg) \ |
36 | OMAP2_L4_IO_ADDRESS(OMAP343X_CTRL_BASE + (reg)) | 36 | OMAP2_L4_IO_ADDRESS(OMAP343X_CTRL_BASE + (reg)) |
37 | #define AM33XX_CTRL_REGADDR(reg) \ | 37 | #define AM33XX_CTRL_REGADDR(reg) \ |
38 | AM33XX_L4_WK_IO_ADDRESS(AM33XX_SCM_BASE + (reg)) | 38 | AM33XX_L4_WK_IO_ADDRESS(AM33XX_SCM_BASE + (reg)) |
39 | #endif /* __ASSEMBLY__ */ | 39 | #endif /* __ASSEMBLY__ */ |
40 | 40 | ||
41 | /* | 41 | /* |
42 | * As elsewhere, the "OMAP2_" prefix indicates that the macro is valid for | 42 | * As elsewhere, the "OMAP2_" prefix indicates that the macro is valid for |
43 | * OMAP24XX and OMAP34XX. | 43 | * OMAP24XX and OMAP34XX. |
44 | */ | 44 | */ |
45 | 45 | ||
46 | /* Control submodule offsets */ | 46 | /* Control submodule offsets */ |
47 | 47 | ||
48 | #define OMAP2_CONTROL_INTERFACE 0x000 | 48 | #define OMAP2_CONTROL_INTERFACE 0x000 |
49 | #define OMAP2_CONTROL_PADCONFS 0x030 | 49 | #define OMAP2_CONTROL_PADCONFS 0x030 |
50 | #define OMAP2_CONTROL_GENERAL 0x270 | 50 | #define OMAP2_CONTROL_GENERAL 0x270 |
51 | #define OMAP343X_CONTROL_MEM_WKUP 0x600 | 51 | #define OMAP343X_CONTROL_MEM_WKUP 0x600 |
52 | #define OMAP343X_CONTROL_PADCONFS_WKUP 0xa00 | 52 | #define OMAP343X_CONTROL_PADCONFS_WKUP 0xa00 |
53 | #define OMAP343X_CONTROL_GENERAL_WKUP 0xa60 | 53 | #define OMAP343X_CONTROL_GENERAL_WKUP 0xa60 |
54 | 54 | ||
55 | /* TI81XX spefic control submodules */ | 55 | /* TI81XX spefic control submodules */ |
56 | #define TI81XX_CONTROL_DEVCONF 0x600 | 56 | #define TI81XX_CONTROL_DEVCONF 0x600 |
57 | 57 | ||
58 | /* Control register offsets - read/write with omap_ctrl_{read,write}{bwl}() */ | 58 | /* Control register offsets - read/write with omap_ctrl_{read,write}{bwl}() */ |
59 | 59 | ||
60 | #define OMAP2_CONTROL_SYSCONFIG (OMAP2_CONTROL_INTERFACE + 0x10) | 60 | #define OMAP2_CONTROL_SYSCONFIG (OMAP2_CONTROL_INTERFACE + 0x10) |
61 | 61 | ||
62 | /* CONTROL_GENERAL register offsets common to OMAP2 & 3 */ | 62 | /* CONTROL_GENERAL register offsets common to OMAP2 & 3 */ |
63 | #define OMAP2_CONTROL_DEVCONF0 (OMAP2_CONTROL_GENERAL + 0x0004) | 63 | #define OMAP2_CONTROL_DEVCONF0 (OMAP2_CONTROL_GENERAL + 0x0004) |
64 | #define OMAP2_CONTROL_MSUSPENDMUX_0 (OMAP2_CONTROL_GENERAL + 0x0020) | 64 | #define OMAP2_CONTROL_MSUSPENDMUX_0 (OMAP2_CONTROL_GENERAL + 0x0020) |
65 | #define OMAP2_CONTROL_MSUSPENDMUX_1 (OMAP2_CONTROL_GENERAL + 0x0024) | 65 | #define OMAP2_CONTROL_MSUSPENDMUX_1 (OMAP2_CONTROL_GENERAL + 0x0024) |
66 | #define OMAP2_CONTROL_MSUSPENDMUX_2 (OMAP2_CONTROL_GENERAL + 0x0028) | 66 | #define OMAP2_CONTROL_MSUSPENDMUX_2 (OMAP2_CONTROL_GENERAL + 0x0028) |
67 | #define OMAP2_CONTROL_MSUSPENDMUX_3 (OMAP2_CONTROL_GENERAL + 0x002c) | 67 | #define OMAP2_CONTROL_MSUSPENDMUX_3 (OMAP2_CONTROL_GENERAL + 0x002c) |
68 | #define OMAP2_CONTROL_MSUSPENDMUX_4 (OMAP2_CONTROL_GENERAL + 0x0030) | 68 | #define OMAP2_CONTROL_MSUSPENDMUX_4 (OMAP2_CONTROL_GENERAL + 0x0030) |
69 | #define OMAP2_CONTROL_MSUSPENDMUX_5 (OMAP2_CONTROL_GENERAL + 0x0034) | 69 | #define OMAP2_CONTROL_MSUSPENDMUX_5 (OMAP2_CONTROL_GENERAL + 0x0034) |
70 | #define OMAP2_CONTROL_SEC_CTRL (OMAP2_CONTROL_GENERAL + 0x0040) | 70 | #define OMAP2_CONTROL_SEC_CTRL (OMAP2_CONTROL_GENERAL + 0x0040) |
71 | #define OMAP2_CONTROL_RPUB_KEY_H_0 (OMAP2_CONTROL_GENERAL + 0x0090) | 71 | #define OMAP2_CONTROL_RPUB_KEY_H_0 (OMAP2_CONTROL_GENERAL + 0x0090) |
72 | #define OMAP2_CONTROL_RPUB_KEY_H_1 (OMAP2_CONTROL_GENERAL + 0x0094) | 72 | #define OMAP2_CONTROL_RPUB_KEY_H_1 (OMAP2_CONTROL_GENERAL + 0x0094) |
73 | #define OMAP2_CONTROL_RPUB_KEY_H_2 (OMAP2_CONTROL_GENERAL + 0x0098) | 73 | #define OMAP2_CONTROL_RPUB_KEY_H_2 (OMAP2_CONTROL_GENERAL + 0x0098) |
74 | #define OMAP2_CONTROL_RPUB_KEY_H_3 (OMAP2_CONTROL_GENERAL + 0x009c) | 74 | #define OMAP2_CONTROL_RPUB_KEY_H_3 (OMAP2_CONTROL_GENERAL + 0x009c) |
75 | 75 | ||
76 | /* 242x-only CONTROL_GENERAL register offsets */ | 76 | /* 242x-only CONTROL_GENERAL register offsets */ |
77 | #define OMAP242X_CONTROL_DEVCONF OMAP2_CONTROL_DEVCONF0 /* match TRM */ | 77 | #define OMAP242X_CONTROL_DEVCONF OMAP2_CONTROL_DEVCONF0 /* match TRM */ |
78 | #define OMAP242X_CONTROL_OCM_RAM_PERM (OMAP2_CONTROL_GENERAL + 0x0068) | 78 | #define OMAP242X_CONTROL_OCM_RAM_PERM (OMAP2_CONTROL_GENERAL + 0x0068) |
79 | 79 | ||
80 | /* 243x-only CONTROL_GENERAL register offsets */ | 80 | /* 243x-only CONTROL_GENERAL register offsets */ |
81 | /* CONTROL_IVA2_BOOT{ADDR,MOD} are at the same place on 343x - noted below */ | 81 | /* CONTROL_IVA2_BOOT{ADDR,MOD} are at the same place on 343x - noted below */ |
82 | #define OMAP243X_CONTROL_DEVCONF1 (OMAP2_CONTROL_GENERAL + 0x0078) | 82 | #define OMAP243X_CONTROL_DEVCONF1 (OMAP2_CONTROL_GENERAL + 0x0078) |
83 | #define OMAP243X_CONTROL_CSIRXFE (OMAP2_CONTROL_GENERAL + 0x007c) | 83 | #define OMAP243X_CONTROL_CSIRXFE (OMAP2_CONTROL_GENERAL + 0x007c) |
84 | #define OMAP243X_CONTROL_IVA2_BOOTADDR (OMAP2_CONTROL_GENERAL + 0x0190) | 84 | #define OMAP243X_CONTROL_IVA2_BOOTADDR (OMAP2_CONTROL_GENERAL + 0x0190) |
85 | #define OMAP243X_CONTROL_IVA2_BOOTMOD (OMAP2_CONTROL_GENERAL + 0x0194) | 85 | #define OMAP243X_CONTROL_IVA2_BOOTMOD (OMAP2_CONTROL_GENERAL + 0x0194) |
86 | #define OMAP243X_CONTROL_IVA2_GEMCFG (OMAP2_CONTROL_GENERAL + 0x0198) | 86 | #define OMAP243X_CONTROL_IVA2_GEMCFG (OMAP2_CONTROL_GENERAL + 0x0198) |
87 | #define OMAP243X_CONTROL_PBIAS_LITE (OMAP2_CONTROL_GENERAL + 0x0230) | 87 | #define OMAP243X_CONTROL_PBIAS_LITE (OMAP2_CONTROL_GENERAL + 0x0230) |
88 | 88 | ||
89 | /* 24xx-only CONTROL_GENERAL register offsets */ | 89 | /* 24xx-only CONTROL_GENERAL register offsets */ |
90 | #define OMAP24XX_CONTROL_DEBOBS (OMAP2_CONTROL_GENERAL + 0x0000) | 90 | #define OMAP24XX_CONTROL_DEBOBS (OMAP2_CONTROL_GENERAL + 0x0000) |
91 | #define OMAP24XX_CONTROL_EMU_SUPPORT (OMAP2_CONTROL_GENERAL + 0x0008) | 91 | #define OMAP24XX_CONTROL_EMU_SUPPORT (OMAP2_CONTROL_GENERAL + 0x0008) |
92 | #define OMAP24XX_CONTROL_SEC_TEST (OMAP2_CONTROL_GENERAL + 0x0044) | 92 | #define OMAP24XX_CONTROL_SEC_TEST (OMAP2_CONTROL_GENERAL + 0x0044) |
93 | #define OMAP24XX_CONTROL_PSA_CTRL (OMAP2_CONTROL_GENERAL + 0x0048) | 93 | #define OMAP24XX_CONTROL_PSA_CTRL (OMAP2_CONTROL_GENERAL + 0x0048) |
94 | #define OMAP24XX_CONTROL_PSA_CMD (OMAP2_CONTROL_GENERAL + 0x004c) | 94 | #define OMAP24XX_CONTROL_PSA_CMD (OMAP2_CONTROL_GENERAL + 0x004c) |
95 | #define OMAP24XX_CONTROL_PSA_VALUE (OMAP2_CONTROL_GENERAL + 0x0050) | 95 | #define OMAP24XX_CONTROL_PSA_VALUE (OMAP2_CONTROL_GENERAL + 0x0050) |
96 | #define OMAP24XX_CONTROL_SEC_EMU (OMAP2_CONTROL_GENERAL + 0x0060) | 96 | #define OMAP24XX_CONTROL_SEC_EMU (OMAP2_CONTROL_GENERAL + 0x0060) |
97 | #define OMAP24XX_CONTROL_SEC_TAP (OMAP2_CONTROL_GENERAL + 0x0064) | 97 | #define OMAP24XX_CONTROL_SEC_TAP (OMAP2_CONTROL_GENERAL + 0x0064) |
98 | #define OMAP24XX_CONTROL_OCM_PUB_RAM_ADD (OMAP2_CONTROL_GENERAL + 0x006c) | 98 | #define OMAP24XX_CONTROL_OCM_PUB_RAM_ADD (OMAP2_CONTROL_GENERAL + 0x006c) |
99 | #define OMAP24XX_CONTROL_EXT_SEC_RAM_START_ADD (OMAP2_CONTROL_GENERAL + 0x0070) | 99 | #define OMAP24XX_CONTROL_EXT_SEC_RAM_START_ADD (OMAP2_CONTROL_GENERAL + 0x0070) |
100 | #define OMAP24XX_CONTROL_EXT_SEC_RAM_STOP_ADD (OMAP2_CONTROL_GENERAL + 0x0074) | 100 | #define OMAP24XX_CONTROL_EXT_SEC_RAM_STOP_ADD (OMAP2_CONTROL_GENERAL + 0x0074) |
101 | #define OMAP24XX_CONTROL_SEC_STATUS (OMAP2_CONTROL_GENERAL + 0x0080) | 101 | #define OMAP24XX_CONTROL_SEC_STATUS (OMAP2_CONTROL_GENERAL + 0x0080) |
102 | #define OMAP24XX_CONTROL_SEC_ERR_STATUS (OMAP2_CONTROL_GENERAL + 0x0084) | 102 | #define OMAP24XX_CONTROL_SEC_ERR_STATUS (OMAP2_CONTROL_GENERAL + 0x0084) |
103 | #define OMAP24XX_CONTROL_STATUS (OMAP2_CONTROL_GENERAL + 0x0088) | 103 | #define OMAP24XX_CONTROL_STATUS (OMAP2_CONTROL_GENERAL + 0x0088) |
104 | #define OMAP24XX_CONTROL_GENERAL_PURPOSE_STATUS (OMAP2_CONTROL_GENERAL + 0x008c) | 104 | #define OMAP24XX_CONTROL_GENERAL_PURPOSE_STATUS (OMAP2_CONTROL_GENERAL + 0x008c) |
105 | #define OMAP24XX_CONTROL_RAND_KEY_0 (OMAP2_CONTROL_GENERAL + 0x00a0) | 105 | #define OMAP24XX_CONTROL_RAND_KEY_0 (OMAP2_CONTROL_GENERAL + 0x00a0) |
106 | #define OMAP24XX_CONTROL_RAND_KEY_1 (OMAP2_CONTROL_GENERAL + 0x00a4) | 106 | #define OMAP24XX_CONTROL_RAND_KEY_1 (OMAP2_CONTROL_GENERAL + 0x00a4) |
107 | #define OMAP24XX_CONTROL_RAND_KEY_2 (OMAP2_CONTROL_GENERAL + 0x00a8) | 107 | #define OMAP24XX_CONTROL_RAND_KEY_2 (OMAP2_CONTROL_GENERAL + 0x00a8) |
108 | #define OMAP24XX_CONTROL_RAND_KEY_3 (OMAP2_CONTROL_GENERAL + 0x00ac) | 108 | #define OMAP24XX_CONTROL_RAND_KEY_3 (OMAP2_CONTROL_GENERAL + 0x00ac) |
109 | #define OMAP24XX_CONTROL_CUST_KEY_0 (OMAP2_CONTROL_GENERAL + 0x00b0) | 109 | #define OMAP24XX_CONTROL_CUST_KEY_0 (OMAP2_CONTROL_GENERAL + 0x00b0) |
110 | #define OMAP24XX_CONTROL_CUST_KEY_1 (OMAP2_CONTROL_GENERAL + 0x00b4) | 110 | #define OMAP24XX_CONTROL_CUST_KEY_1 (OMAP2_CONTROL_GENERAL + 0x00b4) |
111 | #define OMAP24XX_CONTROL_TEST_KEY_0 (OMAP2_CONTROL_GENERAL + 0x00c0) | 111 | #define OMAP24XX_CONTROL_TEST_KEY_0 (OMAP2_CONTROL_GENERAL + 0x00c0) |
112 | #define OMAP24XX_CONTROL_TEST_KEY_1 (OMAP2_CONTROL_GENERAL + 0x00c4) | 112 | #define OMAP24XX_CONTROL_TEST_KEY_1 (OMAP2_CONTROL_GENERAL + 0x00c4) |
113 | #define OMAP24XX_CONTROL_TEST_KEY_2 (OMAP2_CONTROL_GENERAL + 0x00c8) | 113 | #define OMAP24XX_CONTROL_TEST_KEY_2 (OMAP2_CONTROL_GENERAL + 0x00c8) |
114 | #define OMAP24XX_CONTROL_TEST_KEY_3 (OMAP2_CONTROL_GENERAL + 0x00cc) | 114 | #define OMAP24XX_CONTROL_TEST_KEY_3 (OMAP2_CONTROL_GENERAL + 0x00cc) |
115 | #define OMAP24XX_CONTROL_TEST_KEY_4 (OMAP2_CONTROL_GENERAL + 0x00d0) | 115 | #define OMAP24XX_CONTROL_TEST_KEY_4 (OMAP2_CONTROL_GENERAL + 0x00d0) |
116 | #define OMAP24XX_CONTROL_TEST_KEY_5 (OMAP2_CONTROL_GENERAL + 0x00d4) | 116 | #define OMAP24XX_CONTROL_TEST_KEY_5 (OMAP2_CONTROL_GENERAL + 0x00d4) |
117 | #define OMAP24XX_CONTROL_TEST_KEY_6 (OMAP2_CONTROL_GENERAL + 0x00d8) | 117 | #define OMAP24XX_CONTROL_TEST_KEY_6 (OMAP2_CONTROL_GENERAL + 0x00d8) |
118 | #define OMAP24XX_CONTROL_TEST_KEY_7 (OMAP2_CONTROL_GENERAL + 0x00dc) | 118 | #define OMAP24XX_CONTROL_TEST_KEY_7 (OMAP2_CONTROL_GENERAL + 0x00dc) |
119 | #define OMAP24XX_CONTROL_TEST_KEY_8 (OMAP2_CONTROL_GENERAL + 0x00e0) | 119 | #define OMAP24XX_CONTROL_TEST_KEY_8 (OMAP2_CONTROL_GENERAL + 0x00e0) |
120 | #define OMAP24XX_CONTROL_TEST_KEY_9 (OMAP2_CONTROL_GENERAL + 0x00e4) | 120 | #define OMAP24XX_CONTROL_TEST_KEY_9 (OMAP2_CONTROL_GENERAL + 0x00e4) |
121 | 121 | ||
122 | #define OMAP343X_CONTROL_PADCONF_SYSNIRQ (OMAP2_CONTROL_INTERFACE + 0x01b0) | 122 | #define OMAP343X_CONTROL_PADCONF_SYSNIRQ (OMAP2_CONTROL_INTERFACE + 0x01b0) |
123 | 123 | ||
124 | /* 34xx-only CONTROL_GENERAL register offsets */ | 124 | /* 34xx-only CONTROL_GENERAL register offsets */ |
125 | #define OMAP343X_CONTROL_PADCONF_OFF (OMAP2_CONTROL_GENERAL + 0x0000) | 125 | #define OMAP343X_CONTROL_PADCONF_OFF (OMAP2_CONTROL_GENERAL + 0x0000) |
126 | #define OMAP343X_CONTROL_MEM_DFTRW0 (OMAP2_CONTROL_GENERAL + 0x0008) | 126 | #define OMAP343X_CONTROL_MEM_DFTRW0 (OMAP2_CONTROL_GENERAL + 0x0008) |
127 | #define OMAP343X_CONTROL_MEM_DFTRW1 (OMAP2_CONTROL_GENERAL + 0x000c) | 127 | #define OMAP343X_CONTROL_MEM_DFTRW1 (OMAP2_CONTROL_GENERAL + 0x000c) |
128 | #define OMAP343X_CONTROL_DEVCONF1 (OMAP2_CONTROL_GENERAL + 0x0068) | 128 | #define OMAP343X_CONTROL_DEVCONF1 (OMAP2_CONTROL_GENERAL + 0x0068) |
129 | #define OMAP343X_CONTROL_CSIRXFE (OMAP2_CONTROL_GENERAL + 0x006c) | 129 | #define OMAP343X_CONTROL_CSIRXFE (OMAP2_CONTROL_GENERAL + 0x006c) |
130 | #define OMAP343X_CONTROL_SEC_STATUS (OMAP2_CONTROL_GENERAL + 0x0070) | 130 | #define OMAP343X_CONTROL_SEC_STATUS (OMAP2_CONTROL_GENERAL + 0x0070) |
131 | #define OMAP343X_CONTROL_SEC_ERR_STATUS (OMAP2_CONTROL_GENERAL + 0x0074) | 131 | #define OMAP343X_CONTROL_SEC_ERR_STATUS (OMAP2_CONTROL_GENERAL + 0x0074) |
132 | #define OMAP343X_CONTROL_SEC_ERR_STATUS_DEBUG (OMAP2_CONTROL_GENERAL + 0x0078) | 132 | #define OMAP343X_CONTROL_SEC_ERR_STATUS_DEBUG (OMAP2_CONTROL_GENERAL + 0x0078) |
133 | #define OMAP343X_CONTROL_STATUS (OMAP2_CONTROL_GENERAL + 0x0080) | 133 | #define OMAP343X_CONTROL_STATUS (OMAP2_CONTROL_GENERAL + 0x0080) |
134 | #define OMAP343X_CONTROL_GENERAL_PURPOSE_STATUS (OMAP2_CONTROL_GENERAL + 0x0084) | 134 | #define OMAP343X_CONTROL_GENERAL_PURPOSE_STATUS (OMAP2_CONTROL_GENERAL + 0x0084) |
135 | #define OMAP343X_CONTROL_RPUB_KEY_H_4 (OMAP2_CONTROL_GENERAL + 0x00a0) | 135 | #define OMAP343X_CONTROL_RPUB_KEY_H_4 (OMAP2_CONTROL_GENERAL + 0x00a0) |
136 | #define OMAP343X_CONTROL_RAND_KEY_0 (OMAP2_CONTROL_GENERAL + 0x00a8) | 136 | #define OMAP343X_CONTROL_RAND_KEY_0 (OMAP2_CONTROL_GENERAL + 0x00a8) |
137 | #define OMAP343X_CONTROL_RAND_KEY_1 (OMAP2_CONTROL_GENERAL + 0x00ac) | 137 | #define OMAP343X_CONTROL_RAND_KEY_1 (OMAP2_CONTROL_GENERAL + 0x00ac) |
138 | #define OMAP343X_CONTROL_RAND_KEY_2 (OMAP2_CONTROL_GENERAL + 0x00b0) | 138 | #define OMAP343X_CONTROL_RAND_KEY_2 (OMAP2_CONTROL_GENERAL + 0x00b0) |
139 | #define OMAP343X_CONTROL_RAND_KEY_3 (OMAP2_CONTROL_GENERAL + 0x00b4) | 139 | #define OMAP343X_CONTROL_RAND_KEY_3 (OMAP2_CONTROL_GENERAL + 0x00b4) |
140 | #define OMAP343X_CONTROL_TEST_KEY_0 (OMAP2_CONTROL_GENERAL + 0x00c8) | 140 | #define OMAP343X_CONTROL_TEST_KEY_0 (OMAP2_CONTROL_GENERAL + 0x00c8) |
141 | #define OMAP343X_CONTROL_TEST_KEY_1 (OMAP2_CONTROL_GENERAL + 0x00cc) | 141 | #define OMAP343X_CONTROL_TEST_KEY_1 (OMAP2_CONTROL_GENERAL + 0x00cc) |
142 | #define OMAP343X_CONTROL_TEST_KEY_2 (OMAP2_CONTROL_GENERAL + 0x00d0) | 142 | #define OMAP343X_CONTROL_TEST_KEY_2 (OMAP2_CONTROL_GENERAL + 0x00d0) |
143 | #define OMAP343X_CONTROL_TEST_KEY_3 (OMAP2_CONTROL_GENERAL + 0x00d4) | 143 | #define OMAP343X_CONTROL_TEST_KEY_3 (OMAP2_CONTROL_GENERAL + 0x00d4) |
144 | #define OMAP343X_CONTROL_TEST_KEY_4 (OMAP2_CONTROL_GENERAL + 0x00d8) | 144 | #define OMAP343X_CONTROL_TEST_KEY_4 (OMAP2_CONTROL_GENERAL + 0x00d8) |
145 | #define OMAP343X_CONTROL_TEST_KEY_5 (OMAP2_CONTROL_GENERAL + 0x00dc) | 145 | #define OMAP343X_CONTROL_TEST_KEY_5 (OMAP2_CONTROL_GENERAL + 0x00dc) |
146 | #define OMAP343X_CONTROL_TEST_KEY_6 (OMAP2_CONTROL_GENERAL + 0x00e0) | 146 | #define OMAP343X_CONTROL_TEST_KEY_6 (OMAP2_CONTROL_GENERAL + 0x00e0) |
147 | #define OMAP343X_CONTROL_TEST_KEY_7 (OMAP2_CONTROL_GENERAL + 0x00e4) | 147 | #define OMAP343X_CONTROL_TEST_KEY_7 (OMAP2_CONTROL_GENERAL + 0x00e4) |
148 | #define OMAP343X_CONTROL_TEST_KEY_8 (OMAP2_CONTROL_GENERAL + 0x00e8) | 148 | #define OMAP343X_CONTROL_TEST_KEY_8 (OMAP2_CONTROL_GENERAL + 0x00e8) |
149 | #define OMAP343X_CONTROL_TEST_KEY_9 (OMAP2_CONTROL_GENERAL + 0x00ec) | 149 | #define OMAP343X_CONTROL_TEST_KEY_9 (OMAP2_CONTROL_GENERAL + 0x00ec) |
150 | #define OMAP343X_CONTROL_TEST_KEY_10 (OMAP2_CONTROL_GENERAL + 0x00f0) | 150 | #define OMAP343X_CONTROL_TEST_KEY_10 (OMAP2_CONTROL_GENERAL + 0x00f0) |
151 | #define OMAP343X_CONTROL_TEST_KEY_11 (OMAP2_CONTROL_GENERAL + 0x00f4) | 151 | #define OMAP343X_CONTROL_TEST_KEY_11 (OMAP2_CONTROL_GENERAL + 0x00f4) |
152 | #define OMAP343X_CONTROL_TEST_KEY_12 (OMAP2_CONTROL_GENERAL + 0x00f8) | 152 | #define OMAP343X_CONTROL_TEST_KEY_12 (OMAP2_CONTROL_GENERAL + 0x00f8) |
153 | #define OMAP343X_CONTROL_TEST_KEY_13 (OMAP2_CONTROL_GENERAL + 0x00fc) | 153 | #define OMAP343X_CONTROL_TEST_KEY_13 (OMAP2_CONTROL_GENERAL + 0x00fc) |
154 | #define OMAP343X_CONTROL_FUSE_OPP1_VDD1 (OMAP2_CONTROL_GENERAL + 0x0110) | 154 | #define OMAP343X_CONTROL_FUSE_OPP1_VDD1 (OMAP2_CONTROL_GENERAL + 0x0110) |
155 | #define OMAP343X_CONTROL_FUSE_OPP2_VDD1 (OMAP2_CONTROL_GENERAL + 0x0114) | 155 | #define OMAP343X_CONTROL_FUSE_OPP2_VDD1 (OMAP2_CONTROL_GENERAL + 0x0114) |
156 | #define OMAP343X_CONTROL_FUSE_OPP3_VDD1 (OMAP2_CONTROL_GENERAL + 0x0118) | 156 | #define OMAP343X_CONTROL_FUSE_OPP3_VDD1 (OMAP2_CONTROL_GENERAL + 0x0118) |
157 | #define OMAP343X_CONTROL_FUSE_OPP4_VDD1 (OMAP2_CONTROL_GENERAL + 0x011c) | 157 | #define OMAP343X_CONTROL_FUSE_OPP4_VDD1 (OMAP2_CONTROL_GENERAL + 0x011c) |
158 | #define OMAP343X_CONTROL_FUSE_OPP5_VDD1 (OMAP2_CONTROL_GENERAL + 0x0120) | 158 | #define OMAP343X_CONTROL_FUSE_OPP5_VDD1 (OMAP2_CONTROL_GENERAL + 0x0120) |
159 | #define OMAP343X_CONTROL_FUSE_OPP1_VDD2 (OMAP2_CONTROL_GENERAL + 0x0124) | 159 | #define OMAP343X_CONTROL_FUSE_OPP1_VDD2 (OMAP2_CONTROL_GENERAL + 0x0124) |
160 | #define OMAP343X_CONTROL_FUSE_OPP2_VDD2 (OMAP2_CONTROL_GENERAL + 0x0128) | 160 | #define OMAP343X_CONTROL_FUSE_OPP2_VDD2 (OMAP2_CONTROL_GENERAL + 0x0128) |
161 | #define OMAP343X_CONTROL_FUSE_OPP3_VDD2 (OMAP2_CONTROL_GENERAL + 0x012c) | 161 | #define OMAP343X_CONTROL_FUSE_OPP3_VDD2 (OMAP2_CONTROL_GENERAL + 0x012c) |
162 | #define OMAP343X_CONTROL_FUSE_SR (OMAP2_CONTROL_GENERAL + 0x0130) | 162 | #define OMAP343X_CONTROL_FUSE_SR (OMAP2_CONTROL_GENERAL + 0x0130) |
163 | #define OMAP343X_CONTROL_IVA2_BOOTADDR (OMAP2_CONTROL_GENERAL + 0x0190) | 163 | #define OMAP343X_CONTROL_IVA2_BOOTADDR (OMAP2_CONTROL_GENERAL + 0x0190) |
164 | #define OMAP343X_CONTROL_IVA2_BOOTMOD (OMAP2_CONTROL_GENERAL + 0x0194) | 164 | #define OMAP343X_CONTROL_IVA2_BOOTMOD (OMAP2_CONTROL_GENERAL + 0x0194) |
165 | #define OMAP343X_CONTROL_DEBOBS(i) (OMAP2_CONTROL_GENERAL + 0x01B0 \ | 165 | #define OMAP343X_CONTROL_DEBOBS(i) (OMAP2_CONTROL_GENERAL + 0x01B0 \ |
166 | + ((i) >> 1) * 4 + (!((i) & 1)) * 2) | 166 | + ((i) >> 1) * 4 + (!((i) & 1)) * 2) |
167 | #define OMAP343X_CONTROL_PROG_IO0 (OMAP2_CONTROL_GENERAL + 0x01D4) | 167 | #define OMAP343X_CONTROL_PROG_IO0 (OMAP2_CONTROL_GENERAL + 0x01D4) |
168 | #define OMAP343X_CONTROL_PROG_IO1 (OMAP2_CONTROL_GENERAL + 0x01D8) | 168 | #define OMAP343X_CONTROL_PROG_IO1 (OMAP2_CONTROL_GENERAL + 0x01D8) |
169 | #define OMAP343X_CONTROL_DSS_DPLL_SPREADING (OMAP2_CONTROL_GENERAL + 0x01E0) | 169 | #define OMAP343X_CONTROL_DSS_DPLL_SPREADING (OMAP2_CONTROL_GENERAL + 0x01E0) |
170 | #define OMAP343X_CONTROL_CORE_DPLL_SPREADING (OMAP2_CONTROL_GENERAL + 0x01E4) | 170 | #define OMAP343X_CONTROL_CORE_DPLL_SPREADING (OMAP2_CONTROL_GENERAL + 0x01E4) |
171 | #define OMAP343X_CONTROL_PER_DPLL_SPREADING (OMAP2_CONTROL_GENERAL + 0x01E8) | 171 | #define OMAP343X_CONTROL_PER_DPLL_SPREADING (OMAP2_CONTROL_GENERAL + 0x01E8) |
172 | #define OMAP343X_CONTROL_USBHOST_DPLL_SPREADING (OMAP2_CONTROL_GENERAL + 0x01EC) | 172 | #define OMAP343X_CONTROL_USBHOST_DPLL_SPREADING (OMAP2_CONTROL_GENERAL + 0x01EC) |
173 | #define OMAP343X_CONTROL_PBIAS_LITE (OMAP2_CONTROL_GENERAL + 0x02B0) | 173 | #define OMAP343X_CONTROL_PBIAS_LITE (OMAP2_CONTROL_GENERAL + 0x02B0) |
174 | #define OMAP343X_CONTROL_TEMP_SENSOR (OMAP2_CONTROL_GENERAL + 0x02B4) | 174 | #define OMAP343X_CONTROL_TEMP_SENSOR (OMAP2_CONTROL_GENERAL + 0x02B4) |
175 | #define OMAP343X_CONTROL_SRAMLDO4 (OMAP2_CONTROL_GENERAL + 0x02B8) | 175 | #define OMAP343X_CONTROL_SRAMLDO4 (OMAP2_CONTROL_GENERAL + 0x02B8) |
176 | #define OMAP343X_CONTROL_SRAMLDO5 (OMAP2_CONTROL_GENERAL + 0x02C0) | 176 | #define OMAP343X_CONTROL_SRAMLDO5 (OMAP2_CONTROL_GENERAL + 0x02C0) |
177 | #define OMAP343X_CONTROL_CSI (OMAP2_CONTROL_GENERAL + 0x02C4) | 177 | #define OMAP343X_CONTROL_CSI (OMAP2_CONTROL_GENERAL + 0x02C4) |
178 | 178 | ||
179 | /* OMAP3630 only CONTROL_GENERAL register offsets */ | 179 | /* OMAP3630 only CONTROL_GENERAL register offsets */ |
180 | #define OMAP3630_CONTROL_FUSE_OPP1G_VDD1 (OMAP2_CONTROL_GENERAL + 0x0110) | 180 | #define OMAP3630_CONTROL_FUSE_OPP1G_VDD1 (OMAP2_CONTROL_GENERAL + 0x0110) |
181 | #define OMAP3630_CONTROL_FUSE_OPP50_VDD1 (OMAP2_CONTROL_GENERAL + 0x0114) | 181 | #define OMAP3630_CONTROL_FUSE_OPP50_VDD1 (OMAP2_CONTROL_GENERAL + 0x0114) |
182 | #define OMAP3630_CONTROL_FUSE_OPP100_VDD1 (OMAP2_CONTROL_GENERAL + 0x0118) | 182 | #define OMAP3630_CONTROL_FUSE_OPP100_VDD1 (OMAP2_CONTROL_GENERAL + 0x0118) |
183 | #define OMAP3630_CONTROL_FUSE_OPP120_VDD1 (OMAP2_CONTROL_GENERAL + 0x0120) | 183 | #define OMAP3630_CONTROL_FUSE_OPP120_VDD1 (OMAP2_CONTROL_GENERAL + 0x0120) |
184 | #define OMAP3630_CONTROL_FUSE_OPP50_VDD2 (OMAP2_CONTROL_GENERAL + 0x0128) | 184 | #define OMAP3630_CONTROL_FUSE_OPP50_VDD2 (OMAP2_CONTROL_GENERAL + 0x0128) |
185 | #define OMAP3630_CONTROL_FUSE_OPP100_VDD2 (OMAP2_CONTROL_GENERAL + 0x012C) | 185 | #define OMAP3630_CONTROL_FUSE_OPP100_VDD2 (OMAP2_CONTROL_GENERAL + 0x012C) |
186 | #define OMAP3630_CONTROL_CAMERA_PHY_CTRL (OMAP2_CONTROL_GENERAL + 0x02f0) | 186 | #define OMAP3630_CONTROL_CAMERA_PHY_CTRL (OMAP2_CONTROL_GENERAL + 0x02f0) |
187 | 187 | ||
188 | /* OMAP44xx control efuse offsets */ | 188 | /* OMAP44xx control efuse offsets */ |
189 | #define OMAP44XX_CONTROL_FUSE_IVA_OPP50 0x22C | 189 | #define OMAP44XX_CONTROL_FUSE_IVA_OPP50 0x22C |
190 | #define OMAP44XX_CONTROL_FUSE_IVA_OPP100 0x22F | 190 | #define OMAP44XX_CONTROL_FUSE_IVA_OPP100 0x22F |
191 | #define OMAP44XX_CONTROL_FUSE_IVA_OPPTURBO 0x232 | 191 | #define OMAP44XX_CONTROL_FUSE_IVA_OPPTURBO 0x232 |
192 | #define OMAP44XX_CONTROL_FUSE_IVA_OPPNITRO 0x235 | 192 | #define OMAP44XX_CONTROL_FUSE_IVA_OPPNITRO 0x235 |
193 | #define OMAP44XX_CONTROL_FUSE_MPU_OPP50 0x240 | 193 | #define OMAP44XX_CONTROL_FUSE_MPU_OPP50 0x240 |
194 | #define OMAP44XX_CONTROL_FUSE_MPU_OPP100 0x243 | 194 | #define OMAP44XX_CONTROL_FUSE_MPU_OPP100 0x243 |
195 | #define OMAP44XX_CONTROL_FUSE_MPU_OPPTURBO 0x246 | 195 | #define OMAP44XX_CONTROL_FUSE_MPU_OPPTURBO 0x246 |
196 | #define OMAP44XX_CONTROL_FUSE_MPU_OPPNITRO 0x249 | 196 | #define OMAP44XX_CONTROL_FUSE_MPU_OPPNITRO 0x249 |
197 | #define OMAP44XX_CONTROL_FUSE_CORE_OPP50 0x254 | 197 | #define OMAP44XX_CONTROL_FUSE_CORE_OPP50 0x254 |
198 | #define OMAP44XX_CONTROL_FUSE_CORE_OPP100 0x257 | 198 | #define OMAP44XX_CONTROL_FUSE_CORE_OPP100 0x257 |
199 | #define OMAP44XX_CONTROL_FUSE_CORE_OPP100OV 0x25A | 199 | #define OMAP44XX_CONTROL_FUSE_CORE_OPP100OV 0x25A |
200 | 200 | ||
201 | /* AM35XX only CONTROL_GENERAL register offsets */ | 201 | /* AM35XX only CONTROL_GENERAL register offsets */ |
202 | #define AM35XX_CONTROL_MSUSPENDMUX_6 (OMAP2_CONTROL_GENERAL + 0x0038) | 202 | #define AM35XX_CONTROL_MSUSPENDMUX_6 (OMAP2_CONTROL_GENERAL + 0x0038) |
203 | #define AM35XX_CONTROL_DEVCONF2 (OMAP2_CONTROL_GENERAL + 0x0310) | 203 | #define AM35XX_CONTROL_DEVCONF2 (OMAP2_CONTROL_GENERAL + 0x0310) |
204 | #define AM35XX_CONTROL_DEVCONF3 (OMAP2_CONTROL_GENERAL + 0x0314) | 204 | #define AM35XX_CONTROL_DEVCONF3 (OMAP2_CONTROL_GENERAL + 0x0314) |
205 | #define AM35XX_CONTROL_CBA_PRIORITY (OMAP2_CONTROL_GENERAL + 0x0320) | 205 | #define AM35XX_CONTROL_CBA_PRIORITY (OMAP2_CONTROL_GENERAL + 0x0320) |
206 | #define AM35XX_CONTROL_LVL_INTR_CLEAR (OMAP2_CONTROL_GENERAL + 0x0324) | 206 | #define AM35XX_CONTROL_LVL_INTR_CLEAR (OMAP2_CONTROL_GENERAL + 0x0324) |
207 | #define AM35XX_CONTROL_IP_SW_RESET (OMAP2_CONTROL_GENERAL + 0x0328) | 207 | #define AM35XX_CONTROL_IP_SW_RESET (OMAP2_CONTROL_GENERAL + 0x0328) |
208 | #define AM35XX_CONTROL_IPSS_CLK_CTRL (OMAP2_CONTROL_GENERAL + 0x032C) | 208 | #define AM35XX_CONTROL_IPSS_CLK_CTRL (OMAP2_CONTROL_GENERAL + 0x032C) |
209 | 209 | ||
210 | /* 34xx PADCONF register offsets */ | 210 | /* 34xx PADCONF register offsets */ |
211 | #define OMAP343X_PADCONF_ETK(i) (OMAP2_CONTROL_PADCONFS + 0x5a8 + \ | 211 | #define OMAP343X_PADCONF_ETK(i) (OMAP2_CONTROL_PADCONFS + 0x5a8 + \ |
212 | (i)*2) | 212 | (i)*2) |
213 | #define OMAP343X_PADCONF_ETK_CLK OMAP343X_PADCONF_ETK(0) | 213 | #define OMAP343X_PADCONF_ETK_CLK OMAP343X_PADCONF_ETK(0) |
214 | #define OMAP343X_PADCONF_ETK_CTL OMAP343X_PADCONF_ETK(1) | 214 | #define OMAP343X_PADCONF_ETK_CTL OMAP343X_PADCONF_ETK(1) |
215 | #define OMAP343X_PADCONF_ETK_D0 OMAP343X_PADCONF_ETK(2) | 215 | #define OMAP343X_PADCONF_ETK_D0 OMAP343X_PADCONF_ETK(2) |
216 | #define OMAP343X_PADCONF_ETK_D1 OMAP343X_PADCONF_ETK(3) | 216 | #define OMAP343X_PADCONF_ETK_D1 OMAP343X_PADCONF_ETK(3) |
217 | #define OMAP343X_PADCONF_ETK_D2 OMAP343X_PADCONF_ETK(4) | 217 | #define OMAP343X_PADCONF_ETK_D2 OMAP343X_PADCONF_ETK(4) |
218 | #define OMAP343X_PADCONF_ETK_D3 OMAP343X_PADCONF_ETK(5) | 218 | #define OMAP343X_PADCONF_ETK_D3 OMAP343X_PADCONF_ETK(5) |
219 | #define OMAP343X_PADCONF_ETK_D4 OMAP343X_PADCONF_ETK(6) | 219 | #define OMAP343X_PADCONF_ETK_D4 OMAP343X_PADCONF_ETK(6) |
220 | #define OMAP343X_PADCONF_ETK_D5 OMAP343X_PADCONF_ETK(7) | 220 | #define OMAP343X_PADCONF_ETK_D5 OMAP343X_PADCONF_ETK(7) |
221 | #define OMAP343X_PADCONF_ETK_D6 OMAP343X_PADCONF_ETK(8) | 221 | #define OMAP343X_PADCONF_ETK_D6 OMAP343X_PADCONF_ETK(8) |
222 | #define OMAP343X_PADCONF_ETK_D7 OMAP343X_PADCONF_ETK(9) | 222 | #define OMAP343X_PADCONF_ETK_D7 OMAP343X_PADCONF_ETK(9) |
223 | #define OMAP343X_PADCONF_ETK_D8 OMAP343X_PADCONF_ETK(10) | 223 | #define OMAP343X_PADCONF_ETK_D8 OMAP343X_PADCONF_ETK(10) |
224 | #define OMAP343X_PADCONF_ETK_D9 OMAP343X_PADCONF_ETK(11) | 224 | #define OMAP343X_PADCONF_ETK_D9 OMAP343X_PADCONF_ETK(11) |
225 | #define OMAP343X_PADCONF_ETK_D10 OMAP343X_PADCONF_ETK(12) | 225 | #define OMAP343X_PADCONF_ETK_D10 OMAP343X_PADCONF_ETK(12) |
226 | #define OMAP343X_PADCONF_ETK_D11 OMAP343X_PADCONF_ETK(13) | 226 | #define OMAP343X_PADCONF_ETK_D11 OMAP343X_PADCONF_ETK(13) |
227 | #define OMAP343X_PADCONF_ETK_D12 OMAP343X_PADCONF_ETK(14) | 227 | #define OMAP343X_PADCONF_ETK_D12 OMAP343X_PADCONF_ETK(14) |
228 | #define OMAP343X_PADCONF_ETK_D13 OMAP343X_PADCONF_ETK(15) | 228 | #define OMAP343X_PADCONF_ETK_D13 OMAP343X_PADCONF_ETK(15) |
229 | #define OMAP343X_PADCONF_ETK_D14 OMAP343X_PADCONF_ETK(16) | 229 | #define OMAP343X_PADCONF_ETK_D14 OMAP343X_PADCONF_ETK(16) |
230 | #define OMAP343X_PADCONF_ETK_D15 OMAP343X_PADCONF_ETK(17) | 230 | #define OMAP343X_PADCONF_ETK_D15 OMAP343X_PADCONF_ETK(17) |
231 | 231 | ||
232 | /* 34xx GENERAL_WKUP register offsets */ | 232 | /* 34xx GENERAL_WKUP register offsets */ |
233 | #define OMAP343X_CONTROL_WKUP_DEBOBSMUX(i) (OMAP343X_CONTROL_GENERAL_WKUP + \ | 233 | #define OMAP343X_CONTROL_WKUP_DEBOBSMUX(i) (OMAP343X_CONTROL_GENERAL_WKUP + \ |
234 | 0x008 + (i)) | 234 | 0x008 + (i)) |
235 | #define OMAP343X_CONTROL_WKUP_DEBOBS0 (OMAP343X_CONTROL_GENERAL_WKUP + 0x008) | 235 | #define OMAP343X_CONTROL_WKUP_DEBOBS0 (OMAP343X_CONTROL_GENERAL_WKUP + 0x008) |
236 | #define OMAP343X_CONTROL_WKUP_DEBOBS1 (OMAP343X_CONTROL_GENERAL_WKUP + 0x00C) | 236 | #define OMAP343X_CONTROL_WKUP_DEBOBS1 (OMAP343X_CONTROL_GENERAL_WKUP + 0x00C) |
237 | #define OMAP343X_CONTROL_WKUP_DEBOBS2 (OMAP343X_CONTROL_GENERAL_WKUP + 0x010) | 237 | #define OMAP343X_CONTROL_WKUP_DEBOBS2 (OMAP343X_CONTROL_GENERAL_WKUP + 0x010) |
238 | #define OMAP343X_CONTROL_WKUP_DEBOBS3 (OMAP343X_CONTROL_GENERAL_WKUP + 0x014) | 238 | #define OMAP343X_CONTROL_WKUP_DEBOBS3 (OMAP343X_CONTROL_GENERAL_WKUP + 0x014) |
239 | #define OMAP343X_CONTROL_WKUP_DEBOBS4 (OMAP343X_CONTROL_GENERAL_WKUP + 0x018) | 239 | #define OMAP343X_CONTROL_WKUP_DEBOBS4 (OMAP343X_CONTROL_GENERAL_WKUP + 0x018) |
240 | 240 | ||
241 | /* 36xx-only RTA - Retention till Access control registers and bits */ | 241 | /* 36xx-only RTA - Retention till Access control registers and bits */ |
242 | #define OMAP36XX_CONTROL_MEM_RTA_CTRL 0x40C | 242 | #define OMAP36XX_CONTROL_MEM_RTA_CTRL 0x40C |
243 | #define OMAP36XX_RTA_DISABLE 0x0 | 243 | #define OMAP36XX_RTA_DISABLE 0x0 |
244 | 244 | ||
245 | /* 34xx D2D idle-related pins, handled by PM core */ | 245 | /* 34xx D2D idle-related pins, handled by PM core */ |
246 | #define OMAP3_PADCONF_SAD2D_MSTANDBY 0x250 | 246 | #define OMAP3_PADCONF_SAD2D_MSTANDBY 0x250 |
247 | #define OMAP3_PADCONF_SAD2D_IDLEACK 0x254 | 247 | #define OMAP3_PADCONF_SAD2D_IDLEACK 0x254 |
248 | 248 | ||
249 | /* TI81XX CONTROL_DEVCONF register offsets */ | 249 | /* TI81XX CONTROL_DEVCONF register offsets */ |
250 | #define TI81XX_CONTROL_DEVICE_ID (TI81XX_CONTROL_DEVCONF + 0x000) | 250 | #define TI81XX_CONTROL_DEVICE_ID (TI81XX_CONTROL_DEVCONF + 0x000) |
251 | 251 | ||
252 | /* OMAP4 CONTROL MODULE */ | 252 | /* OMAP4 CONTROL MODULE */ |
253 | #define OMAP4_CTRL_MODULE_PAD_WKUP 0x4a31e000 | 253 | #define OMAP4_CTRL_MODULE_PAD_WKUP 0x4a31e000 |
254 | #define OMAP4_CTRL_MODULE_PAD_WKUP_CONTROL_I2C_2 0x0604 | 254 | #define OMAP4_CTRL_MODULE_PAD_WKUP_CONTROL_I2C_2 0x0604 |
255 | #define OMAP4_CTRL_MODULE_CORE_STATUS 0x02c4 | 255 | #define OMAP4_CTRL_MODULE_CORE_STATUS 0x02c4 |
256 | #define OMAP4_CTRL_MODULE_CORE_STD_FUSE_PROD_ID_1 0x0218 | 256 | #define OMAP4_CTRL_MODULE_CORE_STD_FUSE_PROD_ID_1 0x0218 |
257 | #define OMAP4_CTRL_MODULE_CORE_DSP_BOOTADDR 0x0304 | 257 | #define OMAP4_CTRL_MODULE_CORE_DSP_BOOTADDR 0x0304 |
258 | #define OMAP4_CTRL_MODULE_PAD_CORE_CONTROL_DSIPHY 0x0618 | 258 | #define OMAP4_CTRL_MODULE_PAD_CORE_CONTROL_DSIPHY 0x0618 |
259 | #define OMAP4_CTRL_MODULE_PAD_CORE_CONTROL_CAMERA_RX 0x0608 | 259 | #define OMAP4_CTRL_MODULE_PAD_CORE_CONTROL_CAMERA_RX 0x0608 |
260 | 260 | ||
261 | /* OMAP4 CONTROL_DSIPHY */ | 261 | /* OMAP4 CONTROL_DSIPHY */ |
262 | #define OMAP4_DSI2_LANEENABLE_SHIFT 29 | 262 | #define OMAP4_DSI2_LANEENABLE_SHIFT 29 |
263 | #define OMAP4_DSI2_LANEENABLE_MASK (0x7 << 29) | 263 | #define OMAP4_DSI2_LANEENABLE_MASK (0x7 << 29) |
264 | #define OMAP4_DSI1_LANEENABLE_SHIFT 24 | 264 | #define OMAP4_DSI1_LANEENABLE_SHIFT 24 |
265 | #define OMAP4_DSI1_LANEENABLE_MASK (0x1f << 24) | 265 | #define OMAP4_DSI1_LANEENABLE_MASK (0x1f << 24) |
266 | #define OMAP4_DSI1_PIPD_SHIFT 19 | 266 | #define OMAP4_DSI1_PIPD_SHIFT 19 |
267 | #define OMAP4_DSI1_PIPD_MASK (0x1f << 19) | 267 | #define OMAP4_DSI1_PIPD_MASK (0x1f << 19) |
268 | #define OMAP4_DSI2_PIPD_SHIFT 14 | 268 | #define OMAP4_DSI2_PIPD_SHIFT 14 |
269 | #define OMAP4_DSI2_PIPD_MASK (0x1f << 14) | 269 | #define OMAP4_DSI2_PIPD_MASK (0x1f << 14) |
270 | 270 | ||
271 | /* OMAP4 CONTROL_CAMERA_RX */ | 271 | /* OMAP4 CONTROL_CAMERA_RX */ |
272 | #define OMAP4_CAMERARX_CSI21_LANEENABLE_SHIFT 24 | 272 | #define OMAP4_CAMERARX_CSI21_LANEENABLE_SHIFT 24 |
273 | #define OMAP4_CAMERARX_CSI21_LANEENABLE_MASK (0x1f << 24) | 273 | #define OMAP4_CAMERARX_CSI21_LANEENABLE_MASK (0x1f << 24) |
274 | #define OMAP4_CAMERARX_CSI22_LANEENABLE_SHIFT 29 | 274 | #define OMAP4_CAMERARX_CSI22_LANEENABLE_SHIFT 29 |
275 | #define OMAP4_CAMERARX_CSI22_LANEENABLE_MASK (0x3 << 29) | 275 | #define OMAP4_CAMERARX_CSI22_LANEENABLE_MASK (0x3 << 29) |
276 | #define OMAP4_CAMERARX_CSI22_CTRLCLKEN_SHIFT 21 | 276 | #define OMAP4_CAMERARX_CSI22_CTRLCLKEN_SHIFT 21 |
277 | #define OMAP4_CAMERARX_CSI22_CTRLCLKEN_MASK (1 << 21) | 277 | #define OMAP4_CAMERARX_CSI22_CTRLCLKEN_MASK (1 << 21) |
278 | #define OMAP4_CAMERARX_CSI22_CAMMODE_SHIFT 19 | 278 | #define OMAP4_CAMERARX_CSI22_CAMMODE_SHIFT 19 |
279 | #define OMAP4_CAMERARX_CSI22_CAMMODE_MASK (0x3 << 19) | 279 | #define OMAP4_CAMERARX_CSI22_CAMMODE_MASK (0x3 << 19) |
280 | #define OMAP4_CAMERARX_CSI21_CTRLCLKEN_SHIFT 18 | 280 | #define OMAP4_CAMERARX_CSI21_CTRLCLKEN_SHIFT 18 |
281 | #define OMAP4_CAMERARX_CSI21_CTRLCLKEN_MASK (1 << 18) | 281 | #define OMAP4_CAMERARX_CSI21_CTRLCLKEN_MASK (1 << 18) |
282 | #define OMAP4_CAMERARX_CSI21_CAMMODE_SHIFT 16 | 282 | #define OMAP4_CAMERARX_CSI21_CAMMODE_SHIFT 16 |
283 | #define OMAP4_CAMERARX_CSI21_CAMMODE_MASK (0x3 << 16) | 283 | #define OMAP4_CAMERARX_CSI21_CAMMODE_MASK (0x3 << 16) |
284 | 284 | ||
285 | /* OMAP54XX CONTROL STATUS register */ | 285 | /* OMAP54XX CONTROL STATUS register */ |
286 | #define OMAP5XXX_CONTROL_STATUS 0x134 | 286 | #define OMAP5XXX_CONTROL_STATUS 0x134 |
287 | #define OMAP5_DEVICETYPE_MASK (0x7 << 6) | 287 | #define OMAP5_DEVICETYPE_MASK (0x7 << 6) |
288 | 288 | ||
289 | /* DRA7XX CONTROL CORE BOOTSTRAP */ | ||
290 | #define DRA7_CTRL_CORE_BOOTSTRAP 0x6c4 | ||
291 | #define DRA7_SPEEDSELECT_MASK (0x3 << 8) | ||
292 | |||
289 | /* | 293 | /* |
290 | * REVISIT: This list of registers is not comprehensive - there are more | 294 | * REVISIT: This list of registers is not comprehensive - there are more |
291 | * that should be added. | 295 | * that should be added. |
292 | */ | 296 | */ |
293 | 297 | ||
294 | /* | 298 | /* |
295 | * Control module register bit defines - these should eventually go into | 299 | * Control module register bit defines - these should eventually go into |
296 | * their own regbits file. Some of these will be complicated, depending | 300 | * their own regbits file. Some of these will be complicated, depending |
297 | * on the device type (general-purpose, emulator, test, secure, bad, other) | 301 | * on the device type (general-purpose, emulator, test, secure, bad, other) |
298 | * and the security mode (secure, non-secure, don't care) | 302 | * and the security mode (secure, non-secure, don't care) |
299 | */ | 303 | */ |
300 | /* CONTROL_DEVCONF0 bits */ | 304 | /* CONTROL_DEVCONF0 bits */ |
301 | #define OMAP2_MMCSDIO1ADPCLKISEL (1 << 24) /* MMC1 loop back clock */ | 305 | #define OMAP2_MMCSDIO1ADPCLKISEL (1 << 24) /* MMC1 loop back clock */ |
302 | #define OMAP24XX_USBSTANDBYCTRL (1 << 15) | 306 | #define OMAP24XX_USBSTANDBYCTRL (1 << 15) |
303 | #define OMAP2_MCBSP2_CLKS_MASK (1 << 6) | 307 | #define OMAP2_MCBSP2_CLKS_MASK (1 << 6) |
304 | #define OMAP2_MCBSP1_FSR_MASK (1 << 4) | 308 | #define OMAP2_MCBSP1_FSR_MASK (1 << 4) |
305 | #define OMAP2_MCBSP1_CLKR_MASK (1 << 3) | 309 | #define OMAP2_MCBSP1_CLKR_MASK (1 << 3) |
306 | #define OMAP2_MCBSP1_CLKS_MASK (1 << 2) | 310 | #define OMAP2_MCBSP1_CLKS_MASK (1 << 2) |
307 | 311 | ||
308 | /* CONTROL_DEVCONF1 bits */ | 312 | /* CONTROL_DEVCONF1 bits */ |
309 | #define OMAP243X_MMC1_ACTIVE_OVERWRITE (1 << 31) | 313 | #define OMAP243X_MMC1_ACTIVE_OVERWRITE (1 << 31) |
310 | #define OMAP2_MMCSDIO2ADPCLKISEL (1 << 6) /* MMC2 loop back clock */ | 314 | #define OMAP2_MMCSDIO2ADPCLKISEL (1 << 6) /* MMC2 loop back clock */ |
311 | #define OMAP2_MCBSP5_CLKS_MASK (1 << 4) /* > 242x */ | 315 | #define OMAP2_MCBSP5_CLKS_MASK (1 << 4) /* > 242x */ |
312 | #define OMAP2_MCBSP4_CLKS_MASK (1 << 2) /* > 242x */ | 316 | #define OMAP2_MCBSP4_CLKS_MASK (1 << 2) /* > 242x */ |
313 | #define OMAP2_MCBSP3_CLKS_MASK (1 << 0) /* > 242x */ | 317 | #define OMAP2_MCBSP3_CLKS_MASK (1 << 0) /* > 242x */ |
314 | 318 | ||
315 | /* CONTROL_STATUS bits */ | 319 | /* CONTROL_STATUS bits */ |
316 | #define OMAP2_DEVICETYPE_MASK (0x7 << 8) | 320 | #define OMAP2_DEVICETYPE_MASK (0x7 << 8) |
317 | #define OMAP2_SYSBOOT_5_MASK (1 << 5) | 321 | #define OMAP2_SYSBOOT_5_MASK (1 << 5) |
318 | #define OMAP2_SYSBOOT_4_MASK (1 << 4) | 322 | #define OMAP2_SYSBOOT_4_MASK (1 << 4) |
319 | #define OMAP2_SYSBOOT_3_MASK (1 << 3) | 323 | #define OMAP2_SYSBOOT_3_MASK (1 << 3) |
320 | #define OMAP2_SYSBOOT_2_MASK (1 << 2) | 324 | #define OMAP2_SYSBOOT_2_MASK (1 << 2) |
321 | #define OMAP2_SYSBOOT_1_MASK (1 << 1) | 325 | #define OMAP2_SYSBOOT_1_MASK (1 << 1) |
322 | #define OMAP2_SYSBOOT_0_MASK (1 << 0) | 326 | #define OMAP2_SYSBOOT_0_MASK (1 << 0) |
323 | 327 | ||
324 | /* CONTROL_PBIAS_LITE bits */ | 328 | /* CONTROL_PBIAS_LITE bits */ |
325 | #define OMAP343X_PBIASLITESUPPLY_HIGH1 (1 << 15) | 329 | #define OMAP343X_PBIASLITESUPPLY_HIGH1 (1 << 15) |
326 | #define OMAP343X_PBIASLITEVMODEERROR1 (1 << 11) | 330 | #define OMAP343X_PBIASLITEVMODEERROR1 (1 << 11) |
327 | #define OMAP343X_PBIASSPEEDCTRL1 (1 << 10) | 331 | #define OMAP343X_PBIASSPEEDCTRL1 (1 << 10) |
328 | #define OMAP343X_PBIASLITEPWRDNZ1 (1 << 9) | 332 | #define OMAP343X_PBIASLITEPWRDNZ1 (1 << 9) |
329 | #define OMAP343X_PBIASLITEVMODE1 (1 << 8) | 333 | #define OMAP343X_PBIASLITEVMODE1 (1 << 8) |
330 | #define OMAP343X_PBIASLITESUPPLY_HIGH0 (1 << 7) | 334 | #define OMAP343X_PBIASLITESUPPLY_HIGH0 (1 << 7) |
331 | #define OMAP343X_PBIASLITEVMODEERROR0 (1 << 3) | 335 | #define OMAP343X_PBIASLITEVMODEERROR0 (1 << 3) |
332 | #define OMAP2_PBIASSPEEDCTRL0 (1 << 2) | 336 | #define OMAP2_PBIASSPEEDCTRL0 (1 << 2) |
333 | #define OMAP2_PBIASLITEPWRDNZ0 (1 << 1) | 337 | #define OMAP2_PBIASLITEPWRDNZ0 (1 << 1) |
334 | #define OMAP2_PBIASLITEVMODE0 (1 << 0) | 338 | #define OMAP2_PBIASLITEVMODE0 (1 << 0) |
335 | 339 | ||
336 | /* CONTROL_PROG_IO1 bits */ | 340 | /* CONTROL_PROG_IO1 bits */ |
337 | #define OMAP3630_PRG_SDMMC1_SPEEDCTRL (1 << 20) | 341 | #define OMAP3630_PRG_SDMMC1_SPEEDCTRL (1 << 20) |
338 | 342 | ||
339 | /* CONTROL_IVA2_BOOTMOD bits */ | 343 | /* CONTROL_IVA2_BOOTMOD bits */ |
340 | #define OMAP3_IVA2_BOOTMOD_SHIFT 0 | 344 | #define OMAP3_IVA2_BOOTMOD_SHIFT 0 |
341 | #define OMAP3_IVA2_BOOTMOD_MASK (0xf << 0) | 345 | #define OMAP3_IVA2_BOOTMOD_MASK (0xf << 0) |
342 | #define OMAP3_IVA2_BOOTMOD_IDLE (0x1 << 0) | 346 | #define OMAP3_IVA2_BOOTMOD_IDLE (0x1 << 0) |
343 | 347 | ||
344 | /* CONTROL_PADCONF_X bits */ | 348 | /* CONTROL_PADCONF_X bits */ |
345 | #define OMAP3_PADCONF_WAKEUPEVENT0 (1 << 15) | 349 | #define OMAP3_PADCONF_WAKEUPEVENT0 (1 << 15) |
346 | #define OMAP3_PADCONF_WAKEUPENABLE0 (1 << 14) | 350 | #define OMAP3_PADCONF_WAKEUPENABLE0 (1 << 14) |
347 | 351 | ||
348 | #define OMAP343X_SCRATCHPAD_ROM (OMAP343X_CTRL_BASE + 0x860) | 352 | #define OMAP343X_SCRATCHPAD_ROM (OMAP343X_CTRL_BASE + 0x860) |
349 | #define OMAP343X_SCRATCHPAD (OMAP343X_CTRL_BASE + 0x910) | 353 | #define OMAP343X_SCRATCHPAD (OMAP343X_CTRL_BASE + 0x910) |
350 | #define OMAP343X_SCRATCHPAD_ROM_OFFSET 0x19C | 354 | #define OMAP343X_SCRATCHPAD_ROM_OFFSET 0x19C |
351 | #define OMAP343X_SCRATCHPAD_REGADDR(reg) OMAP2_L4_IO_ADDRESS(\ | 355 | #define OMAP343X_SCRATCHPAD_REGADDR(reg) OMAP2_L4_IO_ADDRESS(\ |
352 | OMAP343X_SCRATCHPAD + reg) | 356 | OMAP343X_SCRATCHPAD + reg) |
353 | 357 | ||
354 | /* AM35XX_CONTROL_IPSS_CLK_CTRL bits */ | 358 | /* AM35XX_CONTROL_IPSS_CLK_CTRL bits */ |
355 | #define AM35XX_USBOTG_VBUSP_CLK_SHIFT 0 | 359 | #define AM35XX_USBOTG_VBUSP_CLK_SHIFT 0 |
356 | #define AM35XX_CPGMAC_VBUSP_CLK_SHIFT 1 | 360 | #define AM35XX_CPGMAC_VBUSP_CLK_SHIFT 1 |
357 | #define AM35XX_VPFE_VBUSP_CLK_SHIFT 2 | 361 | #define AM35XX_VPFE_VBUSP_CLK_SHIFT 2 |
358 | #define AM35XX_HECC_VBUSP_CLK_SHIFT 3 | 362 | #define AM35XX_HECC_VBUSP_CLK_SHIFT 3 |
359 | #define AM35XX_USBOTG_FCLK_SHIFT 8 | 363 | #define AM35XX_USBOTG_FCLK_SHIFT 8 |
360 | #define AM35XX_CPGMAC_FCLK_SHIFT 9 | 364 | #define AM35XX_CPGMAC_FCLK_SHIFT 9 |
361 | #define AM35XX_VPFE_FCLK_SHIFT 10 | 365 | #define AM35XX_VPFE_FCLK_SHIFT 10 |
362 | 366 | ||
363 | /* AM35XX CONTROL_LVL_INTR_CLEAR bits */ | 367 | /* AM35XX CONTROL_LVL_INTR_CLEAR bits */ |
364 | #define AM35XX_CPGMAC_C0_MISC_PULSE_CLR BIT(0) | 368 | #define AM35XX_CPGMAC_C0_MISC_PULSE_CLR BIT(0) |
365 | #define AM35XX_CPGMAC_C0_RX_PULSE_CLR BIT(1) | 369 | #define AM35XX_CPGMAC_C0_RX_PULSE_CLR BIT(1) |
366 | #define AM35XX_CPGMAC_C0_RX_THRESH_CLR BIT(2) | 370 | #define AM35XX_CPGMAC_C0_RX_THRESH_CLR BIT(2) |
367 | #define AM35XX_CPGMAC_C0_TX_PULSE_CLR BIT(3) | 371 | #define AM35XX_CPGMAC_C0_TX_PULSE_CLR BIT(3) |
368 | #define AM35XX_USBOTGSS_INT_CLR BIT(4) | 372 | #define AM35XX_USBOTGSS_INT_CLR BIT(4) |
369 | #define AM35XX_VPFE_CCDC_VD0_INT_CLR BIT(5) | 373 | #define AM35XX_VPFE_CCDC_VD0_INT_CLR BIT(5) |
370 | #define AM35XX_VPFE_CCDC_VD1_INT_CLR BIT(6) | 374 | #define AM35XX_VPFE_CCDC_VD1_INT_CLR BIT(6) |
371 | #define AM35XX_VPFE_CCDC_VD2_INT_CLR BIT(7) | 375 | #define AM35XX_VPFE_CCDC_VD2_INT_CLR BIT(7) |
372 | 376 | ||
373 | /* AM35XX CONTROL_IP_SW_RESET bits */ | 377 | /* AM35XX CONTROL_IP_SW_RESET bits */ |
374 | #define AM35XX_USBOTGSS_SW_RST BIT(0) | 378 | #define AM35XX_USBOTGSS_SW_RST BIT(0) |
375 | #define AM35XX_CPGMACSS_SW_RST BIT(1) | 379 | #define AM35XX_CPGMACSS_SW_RST BIT(1) |
376 | #define AM35XX_VPFE_VBUSP_SW_RST BIT(2) | 380 | #define AM35XX_VPFE_VBUSP_SW_RST BIT(2) |
377 | #define AM35XX_HECC_SW_RST BIT(3) | 381 | #define AM35XX_HECC_SW_RST BIT(3) |
378 | #define AM35XX_VPFE_PCLK_SW_RST BIT(4) | 382 | #define AM35XX_VPFE_PCLK_SW_RST BIT(4) |
379 | 383 | ||
380 | /* AM33XX CONTROL_STATUS register */ | 384 | /* AM33XX CONTROL_STATUS register */ |
381 | #define AM33XX_CONTROL_STATUS 0x040 | 385 | #define AM33XX_CONTROL_STATUS 0x040 |
382 | #define AM33XX_CONTROL_SEC_CLK_CTRL 0x1bc | 386 | #define AM33XX_CONTROL_SEC_CLK_CTRL 0x1bc |
383 | 387 | ||
384 | /* AM33XX CONTROL_STATUS bitfields (partial) */ | 388 | /* AM33XX CONTROL_STATUS bitfields (partial) */ |
385 | #define AM33XX_CONTROL_STATUS_SYSBOOT1_SHIFT 22 | 389 | #define AM33XX_CONTROL_STATUS_SYSBOOT1_SHIFT 22 |
386 | #define AM33XX_CONTROL_STATUS_SYSBOOT1_WIDTH 0x2 | 390 | #define AM33XX_CONTROL_STATUS_SYSBOOT1_WIDTH 0x2 |
387 | #define AM33XX_CONTROL_STATUS_SYSBOOT1_MASK (0x3 << 22) | 391 | #define AM33XX_CONTROL_STATUS_SYSBOOT1_MASK (0x3 << 22) |
388 | 392 | ||
389 | /* AM33XX PWMSS Control register */ | 393 | /* AM33XX PWMSS Control register */ |
390 | #define AM33XX_PWMSS_TBCLK_CLKCTRL 0x664 | 394 | #define AM33XX_PWMSS_TBCLK_CLKCTRL 0x664 |
391 | 395 | ||
392 | /* AM33XX PWMSS Control bitfields */ | 396 | /* AM33XX PWMSS Control bitfields */ |
393 | #define AM33XX_PWMSS0_TBCLKEN_SHIFT 0 | 397 | #define AM33XX_PWMSS0_TBCLKEN_SHIFT 0 |
394 | #define AM33XX_PWMSS1_TBCLKEN_SHIFT 1 | 398 | #define AM33XX_PWMSS1_TBCLKEN_SHIFT 1 |
395 | #define AM33XX_PWMSS2_TBCLKEN_SHIFT 2 | 399 | #define AM33XX_PWMSS2_TBCLKEN_SHIFT 2 |
396 | 400 | ||
397 | /* DEV Feature register to identify AM33XX features */ | 401 | /* DEV Feature register to identify AM33XX features */ |
398 | #define AM33XX_DEV_FEATURE 0x604 | 402 | #define AM33XX_DEV_FEATURE 0x604 |
399 | #define AM33XX_SGX_MASK BIT(29) | 403 | #define AM33XX_SGX_MASK BIT(29) |
400 | 404 | ||
401 | /* CONTROL OMAP STATUS register to identify OMAP3 features */ | 405 | /* CONTROL OMAP STATUS register to identify OMAP3 features */ |
402 | #define OMAP3_CONTROL_OMAP_STATUS 0x044c | 406 | #define OMAP3_CONTROL_OMAP_STATUS 0x044c |
403 | 407 | ||
404 | #define OMAP3_SGX_SHIFT 13 | 408 | #define OMAP3_SGX_SHIFT 13 |
405 | #define OMAP3_SGX_MASK (3 << OMAP3_SGX_SHIFT) | 409 | #define OMAP3_SGX_MASK (3 << OMAP3_SGX_SHIFT) |
406 | #define FEAT_SGX_FULL 0 | 410 | #define FEAT_SGX_FULL 0 |
407 | #define FEAT_SGX_HALF 1 | 411 | #define FEAT_SGX_HALF 1 |
408 | #define FEAT_SGX_NONE 2 | 412 | #define FEAT_SGX_NONE 2 |
409 | 413 | ||
410 | #define OMAP3_IVA_SHIFT 12 | 414 | #define OMAP3_IVA_SHIFT 12 |
411 | #define OMAP3_IVA_MASK (1 << OMAP3_IVA_SHIFT) | 415 | #define OMAP3_IVA_MASK (1 << OMAP3_IVA_SHIFT) |
412 | #define FEAT_IVA 0 | 416 | #define FEAT_IVA 0 |
413 | #define FEAT_IVA_NONE 1 | 417 | #define FEAT_IVA_NONE 1 |
414 | 418 | ||
415 | #define OMAP3_L2CACHE_SHIFT 10 | 419 | #define OMAP3_L2CACHE_SHIFT 10 |
416 | #define OMAP3_L2CACHE_MASK (3 << OMAP3_L2CACHE_SHIFT) | 420 | #define OMAP3_L2CACHE_MASK (3 << OMAP3_L2CACHE_SHIFT) |
417 | #define FEAT_L2CACHE_NONE 0 | 421 | #define FEAT_L2CACHE_NONE 0 |
418 | #define FEAT_L2CACHE_64KB 1 | 422 | #define FEAT_L2CACHE_64KB 1 |
419 | #define FEAT_L2CACHE_128KB 2 | 423 | #define FEAT_L2CACHE_128KB 2 |
420 | #define FEAT_L2CACHE_256KB 3 | 424 | #define FEAT_L2CACHE_256KB 3 |
421 | 425 | ||
422 | #define OMAP3_ISP_SHIFT 5 | 426 | #define OMAP3_ISP_SHIFT 5 |
423 | #define OMAP3_ISP_MASK (1 << OMAP3_ISP_SHIFT) | 427 | #define OMAP3_ISP_MASK (1 << OMAP3_ISP_SHIFT) |
424 | #define FEAT_ISP 0 | 428 | #define FEAT_ISP 0 |
425 | #define FEAT_ISP_NONE 1 | 429 | #define FEAT_ISP_NONE 1 |
426 | 430 | ||
427 | #define OMAP3_NEON_SHIFT 4 | 431 | #define OMAP3_NEON_SHIFT 4 |
428 | #define OMAP3_NEON_MASK (1 << OMAP3_NEON_SHIFT) | 432 | #define OMAP3_NEON_MASK (1 << OMAP3_NEON_SHIFT) |
429 | #define FEAT_NEON 0 | 433 | #define FEAT_NEON 0 |
430 | #define FEAT_NEON_NONE 1 | 434 | #define FEAT_NEON_NONE 1 |
431 | 435 | ||
432 | 436 | ||
433 | #ifndef __ASSEMBLY__ | 437 | #ifndef __ASSEMBLY__ |
434 | #ifdef CONFIG_ARCH_OMAP2PLUS | 438 | #ifdef CONFIG_ARCH_OMAP2PLUS |
435 | extern void __iomem *omap_ctrl_base_get(void); | 439 | extern void __iomem *omap_ctrl_base_get(void); |
436 | extern u8 omap_ctrl_readb(u16 offset); | 440 | extern u8 omap_ctrl_readb(u16 offset); |
437 | extern u16 omap_ctrl_readw(u16 offset); | 441 | extern u16 omap_ctrl_readw(u16 offset); |
438 | extern u32 omap_ctrl_readl(u16 offset); | 442 | extern u32 omap_ctrl_readl(u16 offset); |
439 | extern u32 omap4_ctrl_pad_readl(u16 offset); | 443 | extern u32 omap4_ctrl_pad_readl(u16 offset); |
440 | extern void omap_ctrl_writeb(u8 val, u16 offset); | 444 | extern void omap_ctrl_writeb(u8 val, u16 offset); |
441 | extern void omap_ctrl_writew(u16 val, u16 offset); | 445 | extern void omap_ctrl_writew(u16 val, u16 offset); |
442 | extern void omap_ctrl_writel(u32 val, u16 offset); | 446 | extern void omap_ctrl_writel(u32 val, u16 offset); |
443 | extern void omap4_ctrl_pad_writel(u32 val, u16 offset); | 447 | extern void omap4_ctrl_pad_writel(u32 val, u16 offset); |
444 | 448 | ||
445 | extern void omap3_save_scratchpad_contents(void); | 449 | extern void omap3_save_scratchpad_contents(void); |
446 | extern void omap3_clear_scratchpad_contents(void); | 450 | extern void omap3_clear_scratchpad_contents(void); |
447 | extern void omap3_restore(void); | 451 | extern void omap3_restore(void); |
448 | extern void omap3_restore_es3(void); | 452 | extern void omap3_restore_es3(void); |
449 | extern void omap3_restore_3630(void); | 453 | extern void omap3_restore_3630(void); |
450 | extern u32 omap3_arm_context[128]; | 454 | extern u32 omap3_arm_context[128]; |
451 | extern void omap3_control_save_context(void); | 455 | extern void omap3_control_save_context(void); |
452 | extern void omap3_control_restore_context(void); | 456 | extern void omap3_control_restore_context(void); |
453 | extern void omap3_ctrl_write_boot_mode(u8 bootmode); | 457 | extern void omap3_ctrl_write_boot_mode(u8 bootmode); |
454 | extern void omap_ctrl_write_dsp_boot_addr(u32 bootaddr); | 458 | extern void omap_ctrl_write_dsp_boot_addr(u32 bootaddr); |
455 | extern void omap_ctrl_write_dsp_boot_mode(u8 bootmode); | 459 | extern void omap_ctrl_write_dsp_boot_mode(u8 bootmode); |
456 | extern void omap3630_ctrl_disable_rta(void); | 460 | extern void omap3630_ctrl_disable_rta(void); |
457 | extern int omap3_ctrl_save_padconf(void); | 461 | extern int omap3_ctrl_save_padconf(void); |
458 | void omap3_ctrl_init(void); | 462 | void omap3_ctrl_init(void); |
459 | extern void omap2_set_globals_control(void __iomem *ctrl, | 463 | extern void omap2_set_globals_control(void __iomem *ctrl, |
460 | void __iomem *ctrl_pad); | 464 | void __iomem *ctrl_pad); |
461 | #else | 465 | #else |
462 | #define omap_ctrl_base_get() 0 | 466 | #define omap_ctrl_base_get() 0 |
463 | #define omap_ctrl_readb(x) 0 | 467 | #define omap_ctrl_readb(x) 0 |
464 | #define omap_ctrl_readw(x) 0 | 468 | #define omap_ctrl_readw(x) 0 |
465 | #define omap_ctrl_readl(x) 0 | 469 | #define omap_ctrl_readl(x) 0 |
466 | #define omap4_ctrl_pad_readl(x) 0 | 470 | #define omap4_ctrl_pad_readl(x) 0 |
467 | #define omap_ctrl_writeb(x, y) WARN_ON(1) | 471 | #define omap_ctrl_writeb(x, y) WARN_ON(1) |
468 | #define omap_ctrl_writew(x, y) WARN_ON(1) | 472 | #define omap_ctrl_writew(x, y) WARN_ON(1) |
469 | #define omap_ctrl_writel(x, y) WARN_ON(1) | 473 | #define omap_ctrl_writel(x, y) WARN_ON(1) |
470 | #define omap4_ctrl_pad_writel(x, y) WARN_ON(1) | 474 | #define omap4_ctrl_pad_writel(x, y) WARN_ON(1) |
471 | #endif | 475 | #endif |
472 | #endif /* __ASSEMBLY__ */ | 476 | #endif /* __ASSEMBLY__ */ |
473 | 477 | ||
474 | #endif /* __ARCH_ARM_MACH_OMAP2_CONTROL_H */ | 478 | #endif /* __ARCH_ARM_MACH_OMAP2_CONTROL_H */ |
475 | 479 | ||
476 | 480 |
arch/arm/mach-omap2/omap-headsmp.S
1 | /* | 1 | /* |
2 | * Secondary CPU startup routine source file. | 2 | * Secondary CPU startup routine source file. |
3 | * | 3 | * |
4 | * Copyright (C) 2009-2014 Texas Instruments, Inc. | 4 | * Copyright (C) 2009-2014 Texas Instruments, Inc. |
5 | * | 5 | * |
6 | * Author: | 6 | * Author: |
7 | * Santosh Shilimkar <santosh.shilimkar@ti.com> | 7 | * Santosh Shilimkar <santosh.shilimkar@ti.com> |
8 | * | 8 | * |
9 | * Interface functions needed for the SMP. This file is based on arm | 9 | * Interface functions needed for the SMP. This file is based on arm |
10 | * realview smp platform. | 10 | * realview smp platform. |
11 | * Copyright (c) 2003 ARM Limited. | 11 | * Copyright (c) 2003 ARM Limited. |
12 | * | 12 | * |
13 | * This program is free software,you can redistribute it and/or modify | 13 | * This program is free software,you can redistribute it and/or modify |
14 | * it under the terms of the GNU General Public License version 2 as | 14 | * it under the terms of the GNU General Public License version 2 as |
15 | * published by the Free Software Foundation. | 15 | * published by the Free Software Foundation. |
16 | */ | 16 | */ |
17 | 17 | ||
18 | #include <linux/linkage.h> | 18 | #include <linux/linkage.h> |
19 | #include <linux/init.h> | 19 | #include <linux/init.h> |
20 | 20 | ||
21 | #include "omap44xx.h" | 21 | #include "omap44xx.h" |
22 | 22 | ||
23 | /* Physical address needed since MMU not enabled yet on secondary core */ | 23 | /* Physical address needed since MMU not enabled yet on secondary core */ |
24 | #define AUX_CORE_BOOT0_PA 0x48281800 | 24 | #define AUX_CORE_BOOT0_PA 0x48281800 |
25 | #define API_HYP_ENTRY 0x102 | ||
25 | 26 | ||
26 | /* | 27 | /* |
27 | * OMAP5 specific entry point for secondary CPU to jump from ROM | 28 | * OMAP5 specific entry point for secondary CPU to jump from ROM |
28 | * code. This routine also provides a holding flag into which | 29 | * code. This routine also provides a holding flag into which |
29 | * secondary core is held until we're ready for it to initialise. | 30 | * secondary core is held until we're ready for it to initialise. |
30 | * The primary core will update this flag using a hardware | 31 | * The primary core will update this flag using a hardware |
31 | * register AuxCoreBoot0. | 32 | * register AuxCoreBoot0. |
32 | */ | 33 | */ |
33 | ENTRY(omap5_secondary_startup) | 34 | ENTRY(omap5_secondary_startup) |
34 | wait: ldr r2, =AUX_CORE_BOOT0_PA @ read from AuxCoreBoot0 | 35 | wait: ldr r2, =AUX_CORE_BOOT0_PA @ read from AuxCoreBoot0 |
35 | ldr r0, [r2] | 36 | ldr r0, [r2] |
36 | mov r0, r0, lsr #5 | 37 | mov r0, r0, lsr #5 |
37 | mrc p15, 0, r4, c0, c0, 5 | 38 | mrc p15, 0, r4, c0, c0, 5 |
38 | and r4, r4, #0x0f | 39 | and r4, r4, #0x0f |
39 | cmp r0, r4 | 40 | cmp r0, r4 |
40 | bne wait | 41 | bne wait |
41 | b secondary_startup | 42 | b secondary_startup |
42 | ENDPROC(omap5_secondary_startup) | 43 | ENDPROC(omap5_secondary_startup) |
44 | /* | ||
45 | * Same as omap5_secondary_startup except we call into the ROM to | ||
46 | * enable HYP mode first. This is called instead of | ||
47 | * omap5_secondary_startup if the primary CPU was put into HYP mode by | ||
48 | * the boot loader. | ||
49 | */ | ||
50 | ENTRY(omap5_secondary_hyp_startup) | ||
51 | wait_2: ldr r2, =AUX_CORE_BOOT0_PA @ read from AuxCoreBoot0 | ||
52 | ldr r0, [r2] | ||
53 | mov r0, r0, lsr #5 | ||
54 | mrc p15, 0, r4, c0, c0, 5 | ||
55 | and r4, r4, #0x0f | ||
56 | cmp r0, r4 | ||
57 | bne wait_2 | ||
58 | ldr r12, =API_HYP_ENTRY | ||
59 | adr r0, hyp_boot | ||
60 | smc #0 | ||
61 | hyp_boot: | ||
62 | b secondary_startup | ||
63 | ENDPROC(omap5_secondary_hyp_startup) | ||
43 | /* | 64 | /* |
44 | * OMAP4 specific entry point for secondary CPU to jump from ROM | 65 | * OMAP4 specific entry point for secondary CPU to jump from ROM |
45 | * code. This routine also provides a holding flag into which | 66 | * code. This routine also provides a holding flag into which |
46 | * secondary core is held until we're ready for it to initialise. | 67 | * secondary core is held until we're ready for it to initialise. |
47 | * The primary core will update this flag using a hardware | 68 | * The primary core will update this flag using a hardware |
48 | * register AuxCoreBoot0. | 69 | * register AuxCoreBoot0. |
49 | */ | 70 | */ |
50 | ENTRY(omap4_secondary_startup) | 71 | ENTRY(omap4_secondary_startup) |
51 | hold: ldr r12,=0x103 | 72 | hold: ldr r12,=0x103 |
52 | dsb | 73 | dsb |
53 | smc #0 @ read from AuxCoreBoot0 | 74 | smc #0 @ read from AuxCoreBoot0 |
54 | mov r0, r0, lsr #9 | 75 | mov r0, r0, lsr #9 |
55 | mrc p15, 0, r4, c0, c0, 5 | 76 | mrc p15, 0, r4, c0, c0, 5 |
56 | and r4, r4, #0x0f | 77 | and r4, r4, #0x0f |
57 | cmp r0, r4 | 78 | cmp r0, r4 |
58 | bne hold | 79 | bne hold |
59 | 80 | ||
60 | /* | 81 | /* |
61 | * we've been released from the wait loop,secondary_stack | 82 | * we've been released from the wait loop,secondary_stack |
62 | * should now contain the SVC stack for this core | 83 | * should now contain the SVC stack for this core |
63 | */ | 84 | */ |
64 | b secondary_startup | 85 | b secondary_startup |
65 | ENDPROC(omap4_secondary_startup) | 86 | ENDPROC(omap4_secondary_startup) |
66 | 87 | ||
67 | ENTRY(omap4460_secondary_startup) | 88 | ENTRY(omap4460_secondary_startup) |
68 | hold_2: ldr r12,=0x103 | 89 | hold_2: ldr r12,=0x103 |
69 | dsb | 90 | dsb |
70 | smc #0 @ read from AuxCoreBoot0 | 91 | smc #0 @ read from AuxCoreBoot0 |
71 | mov r0, r0, lsr #9 | 92 | mov r0, r0, lsr #9 |
72 | mrc p15, 0, r4, c0, c0, 5 | 93 | mrc p15, 0, r4, c0, c0, 5 |
73 | and r4, r4, #0x0f | 94 | and r4, r4, #0x0f |
74 | cmp r0, r4 | 95 | cmp r0, r4 |
75 | bne hold_2 | 96 | bne hold_2 |
76 | 97 | ||
77 | /* | 98 | /* |
78 | * GIC distributor control register has changed between | 99 | * GIC distributor control register has changed between |
79 | * CortexA9 r1pX and r2pX. The Control Register secure | 100 | * CortexA9 r1pX and r2pX. The Control Register secure |
80 | * banked version is now composed of 2 bits: | 101 | * banked version is now composed of 2 bits: |
81 | * bit 0 == Secure Enable | 102 | * bit 0 == Secure Enable |
82 | * bit 1 == Non-Secure Enable | 103 | * bit 1 == Non-Secure Enable |
83 | * The Non-Secure banked register has not changed | 104 | * The Non-Secure banked register has not changed |
84 | * Because the ROM Code is based on the r1pX GIC, the CPU1 | 105 | * Because the ROM Code is based on the r1pX GIC, the CPU1 |
85 | * GIC restoration will cause a problem to CPU0 Non-Secure SW. | 106 | * GIC restoration will cause a problem to CPU0 Non-Secure SW. |
86 | * The workaround must be: | 107 | * The workaround must be: |
87 | * 1) Before doing the CPU1 wakeup, CPU0 must disable | 108 | * 1) Before doing the CPU1 wakeup, CPU0 must disable |
88 | * the GIC distributor | 109 | * the GIC distributor |
89 | * 2) CPU1 must re-enable the GIC distributor on | 110 | * 2) CPU1 must re-enable the GIC distributor on |
90 | * it's wakeup path. | 111 | * it's wakeup path. |
91 | */ | 112 | */ |
92 | ldr r1, =OMAP44XX_GIC_DIST_BASE | 113 | ldr r1, =OMAP44XX_GIC_DIST_BASE |
93 | ldr r0, [r1] | 114 | ldr r0, [r1] |
94 | orr r0, #1 | 115 | orr r0, #1 |
95 | str r0, [r1] | 116 | str r0, [r1] |
96 | 117 | ||
97 | /* | 118 | /* |
98 | * we've been released from the wait loop,secondary_stack | 119 | * we've been released from the wait loop,secondary_stack |
99 | * should now contain the SVC stack for this core | 120 | * should now contain the SVC stack for this core |
100 | */ | 121 | */ |
101 | b secondary_startup | 122 | b secondary_startup |
102 | ENDPROC(omap4460_secondary_startup) | 123 | ENDPROC(omap4460_secondary_startup) |
103 | 124 |
arch/arm/mach-omap2/omap-smp.c
1 | /* | 1 | /* |
2 | * OMAP4 SMP source file. It contains platform specific functions | 2 | * OMAP4 SMP source file. It contains platform specific functions |
3 | * needed for the linux smp kernel. | 3 | * needed for the linux smp kernel. |
4 | * | 4 | * |
5 | * Copyright (C) 2009 Texas Instruments, Inc. | 5 | * Copyright (C) 2009 Texas Instruments, Inc. |
6 | * | 6 | * |
7 | * Author: | 7 | * Author: |
8 | * Santosh Shilimkar <santosh.shilimkar@ti.com> | 8 | * Santosh Shilimkar <santosh.shilimkar@ti.com> |
9 | * | 9 | * |
10 | * Platform file needed for the OMAP4 SMP. This file is based on arm | 10 | * Platform file needed for the OMAP4 SMP. This file is based on arm |
11 | * realview smp platform. | 11 | * realview smp platform. |
12 | * * Copyright (c) 2002 ARM Limited. | 12 | * * Copyright (c) 2002 ARM Limited. |
13 | * | 13 | * |
14 | * This program is free software; you can redistribute it and/or modify | 14 | * This program is free software; you can redistribute it and/or modify |
15 | * it under the terms of the GNU General Public License version 2 as | 15 | * it under the terms of the GNU General Public License version 2 as |
16 | * published by the Free Software Foundation. | 16 | * published by the Free Software Foundation. |
17 | */ | 17 | */ |
18 | #include <linux/init.h> | 18 | #include <linux/init.h> |
19 | #include <linux/device.h> | 19 | #include <linux/device.h> |
20 | #include <linux/smp.h> | 20 | #include <linux/smp.h> |
21 | #include <linux/io.h> | 21 | #include <linux/io.h> |
22 | #include <linux/irqchip/arm-gic.h> | 22 | #include <linux/irqchip/arm-gic.h> |
23 | 23 | ||
24 | #include <asm/smp_scu.h> | 24 | #include <asm/smp_scu.h> |
25 | #include <asm/virt.h> | ||
25 | 26 | ||
26 | #include "omap-secure.h" | 27 | #include "omap-secure.h" |
27 | #include "omap-wakeupgen.h" | 28 | #include "omap-wakeupgen.h" |
28 | #include <asm/cputype.h> | 29 | #include <asm/cputype.h> |
29 | 30 | ||
30 | #include "soc.h" | 31 | #include "soc.h" |
31 | #include "iomap.h" | 32 | #include "iomap.h" |
32 | #include "common.h" | 33 | #include "common.h" |
33 | #include "clockdomain.h" | 34 | #include "clockdomain.h" |
34 | #include "pm.h" | 35 | #include "pm.h" |
35 | 36 | ||
36 | #define CPU_MASK 0xff0ffff0 | 37 | #define CPU_MASK 0xff0ffff0 |
37 | #define CPU_CORTEX_A9 0x410FC090 | 38 | #define CPU_CORTEX_A9 0x410FC090 |
38 | #define CPU_CORTEX_A15 0x410FC0F0 | 39 | #define CPU_CORTEX_A15 0x410FC0F0 |
39 | 40 | ||
40 | #define OMAP5_CORE_COUNT 0x2 | 41 | #define OMAP5_CORE_COUNT 0x2 |
41 | 42 | ||
42 | /* SCU base address */ | 43 | /* SCU base address */ |
43 | static void __iomem *scu_base; | 44 | static void __iomem *scu_base; |
44 | 45 | ||
45 | static DEFINE_SPINLOCK(boot_lock); | 46 | static DEFINE_SPINLOCK(boot_lock); |
46 | 47 | ||
47 | void __iomem *omap4_get_scu_base(void) | 48 | void __iomem *omap4_get_scu_base(void) |
48 | { | 49 | { |
49 | return scu_base; | 50 | return scu_base; |
50 | } | 51 | } |
51 | 52 | ||
52 | static void omap4_secondary_init(unsigned int cpu) | 53 | static void omap4_secondary_init(unsigned int cpu) |
53 | { | 54 | { |
54 | /* | 55 | /* |
55 | * Configure ACTRL and enable NS SMP bit access on CPU1 on HS device. | 56 | * Configure ACTRL and enable NS SMP bit access on CPU1 on HS device. |
56 | * OMAP44XX EMU/HS devices - CPU0 SMP bit access is enabled in PPA | 57 | * OMAP44XX EMU/HS devices - CPU0 SMP bit access is enabled in PPA |
57 | * init and for CPU1, a secure PPA API provided. CPU0 must be ON | 58 | * init and for CPU1, a secure PPA API provided. CPU0 must be ON |
58 | * while executing NS_SMP API on CPU1 and PPA version must be 1.4.0+. | 59 | * while executing NS_SMP API on CPU1 and PPA version must be 1.4.0+. |
59 | * OMAP443X GP devices- SMP bit isn't accessible. | 60 | * OMAP443X GP devices- SMP bit isn't accessible. |
60 | * OMAP446X GP devices - SMP bit access is enabled on both CPUs. | 61 | * OMAP446X GP devices - SMP bit access is enabled on both CPUs. |
61 | */ | 62 | */ |
62 | if (cpu_is_omap443x() && (omap_type() != OMAP2_DEVICE_TYPE_GP)) | 63 | if (cpu_is_omap443x() && (omap_type() != OMAP2_DEVICE_TYPE_GP)) |
63 | omap_secure_dispatcher(OMAP4_PPA_CPU_ACTRL_SMP_INDEX, | 64 | omap_secure_dispatcher(OMAP4_PPA_CPU_ACTRL_SMP_INDEX, |
64 | 4, 0, 0, 0, 0, 0); | 65 | 4, 0, 0, 0, 0, 0); |
65 | 66 | ||
66 | /* | 67 | /* |
67 | * Configure the CNTFRQ register for the secondary cpu's which | 68 | * Configure the CNTFRQ register for the secondary cpu's which |
68 | * indicates the frequency of the cpu local timers. | 69 | * indicates the frequency of the cpu local timers. |
69 | */ | 70 | */ |
70 | if (soc_is_omap54xx() || soc_is_dra7xx()) | 71 | if (soc_is_omap54xx() || soc_is_dra7xx()) |
71 | set_cntfreq(); | 72 | set_cntfreq(); |
72 | 73 | ||
73 | /* | 74 | /* |
74 | * Synchronise with the boot thread. | 75 | * Synchronise with the boot thread. |
75 | */ | 76 | */ |
76 | spin_lock(&boot_lock); | 77 | spin_lock(&boot_lock); |
77 | spin_unlock(&boot_lock); | 78 | spin_unlock(&boot_lock); |
78 | } | 79 | } |
79 | 80 | ||
80 | static int omap4_boot_secondary(unsigned int cpu, struct task_struct *idle) | 81 | static int omap4_boot_secondary(unsigned int cpu, struct task_struct *idle) |
81 | { | 82 | { |
82 | static struct clockdomain *cpu1_clkdm; | 83 | static struct clockdomain *cpu1_clkdm; |
83 | static bool booted; | 84 | static bool booted; |
84 | static struct powerdomain *cpu1_pwrdm; | 85 | static struct powerdomain *cpu1_pwrdm; |
85 | void __iomem *base = omap_get_wakeupgen_base(); | 86 | void __iomem *base = omap_get_wakeupgen_base(); |
86 | 87 | ||
87 | /* | 88 | /* |
88 | * Set synchronisation state between this boot processor | 89 | * Set synchronisation state between this boot processor |
89 | * and the secondary one | 90 | * and the secondary one |
90 | */ | 91 | */ |
91 | spin_lock(&boot_lock); | 92 | spin_lock(&boot_lock); |
92 | 93 | ||
93 | /* | 94 | /* |
94 | * Update the AuxCoreBoot0 with boot state for secondary core. | 95 | * Update the AuxCoreBoot0 with boot state for secondary core. |
95 | * omap4_secondary_startup() routine will hold the secondary core till | 96 | * omap4_secondary_startup() routine will hold the secondary core till |
96 | * the AuxCoreBoot1 register is updated with cpu state | 97 | * the AuxCoreBoot1 register is updated with cpu state |
97 | * A barrier is added to ensure that write buffer is drained | 98 | * A barrier is added to ensure that write buffer is drained |
98 | */ | 99 | */ |
99 | if (omap_secure_apis_support()) | 100 | if (omap_secure_apis_support()) |
100 | omap_modify_auxcoreboot0(0x200, 0xfffffdff); | 101 | omap_modify_auxcoreboot0(0x200, 0xfffffdff); |
101 | else | 102 | else |
102 | writel_relaxed(0x20, base + OMAP_AUX_CORE_BOOT_0); | 103 | writel_relaxed(0x20, base + OMAP_AUX_CORE_BOOT_0); |
103 | 104 | ||
104 | if (!cpu1_clkdm && !cpu1_pwrdm) { | 105 | if (!cpu1_clkdm && !cpu1_pwrdm) { |
105 | cpu1_clkdm = clkdm_lookup("mpu1_clkdm"); | 106 | cpu1_clkdm = clkdm_lookup("mpu1_clkdm"); |
106 | cpu1_pwrdm = pwrdm_lookup("cpu1_pwrdm"); | 107 | cpu1_pwrdm = pwrdm_lookup("cpu1_pwrdm"); |
107 | } | 108 | } |
108 | 109 | ||
109 | /* | 110 | /* |
110 | * The SGI(Software Generated Interrupts) are not wakeup capable | 111 | * The SGI(Software Generated Interrupts) are not wakeup capable |
111 | * from low power states. This is known limitation on OMAP4 and | 112 | * from low power states. This is known limitation on OMAP4 and |
112 | * needs to be worked around by using software forced clockdomain | 113 | * needs to be worked around by using software forced clockdomain |
113 | * wake-up. To wakeup CPU1, CPU0 forces the CPU1 clockdomain to | 114 | * wake-up. To wakeup CPU1, CPU0 forces the CPU1 clockdomain to |
114 | * software force wakeup. The clockdomain is then put back to | 115 | * software force wakeup. The clockdomain is then put back to |
115 | * hardware supervised mode. | 116 | * hardware supervised mode. |
116 | * More details can be found in OMAP4430 TRM - Version J | 117 | * More details can be found in OMAP4430 TRM - Version J |
117 | * Section : | 118 | * Section : |
118 | * 4.3.4.2 Power States of CPU0 and CPU1 | 119 | * 4.3.4.2 Power States of CPU0 and CPU1 |
119 | */ | 120 | */ |
120 | if (booted && cpu1_pwrdm && cpu1_clkdm) { | 121 | if (booted && cpu1_pwrdm && cpu1_clkdm) { |
121 | /* | 122 | /* |
122 | * GIC distributor control register has changed between | 123 | * GIC distributor control register has changed between |
123 | * CortexA9 r1pX and r2pX. The Control Register secure | 124 | * CortexA9 r1pX and r2pX. The Control Register secure |
124 | * banked version is now composed of 2 bits: | 125 | * banked version is now composed of 2 bits: |
125 | * bit 0 == Secure Enable | 126 | * bit 0 == Secure Enable |
126 | * bit 1 == Non-Secure Enable | 127 | * bit 1 == Non-Secure Enable |
127 | * The Non-Secure banked register has not changed | 128 | * The Non-Secure banked register has not changed |
128 | * Because the ROM Code is based on the r1pX GIC, the CPU1 | 129 | * Because the ROM Code is based on the r1pX GIC, the CPU1 |
129 | * GIC restoration will cause a problem to CPU0 Non-Secure SW. | 130 | * GIC restoration will cause a problem to CPU0 Non-Secure SW. |
130 | * The workaround must be: | 131 | * The workaround must be: |
131 | * 1) Before doing the CPU1 wakeup, CPU0 must disable | 132 | * 1) Before doing the CPU1 wakeup, CPU0 must disable |
132 | * the GIC distributor | 133 | * the GIC distributor |
133 | * 2) CPU1 must re-enable the GIC distributor on | 134 | * 2) CPU1 must re-enable the GIC distributor on |
134 | * it's wakeup path. | 135 | * it's wakeup path. |
135 | */ | 136 | */ |
136 | if (IS_PM44XX_ERRATUM(PM_OMAP4_ROM_SMP_BOOT_ERRATUM_GICD)) { | 137 | if (IS_PM44XX_ERRATUM(PM_OMAP4_ROM_SMP_BOOT_ERRATUM_GICD)) { |
137 | local_irq_disable(); | 138 | local_irq_disable(); |
138 | gic_dist_disable(); | 139 | gic_dist_disable(); |
139 | } | 140 | } |
140 | 141 | ||
141 | /* | 142 | /* |
142 | * Ensure that CPU power state is set to ON to avoid CPU | 143 | * Ensure that CPU power state is set to ON to avoid CPU |
143 | * powerdomain transition on wfi | 144 | * powerdomain transition on wfi |
144 | */ | 145 | */ |
145 | clkdm_wakeup(cpu1_clkdm); | 146 | clkdm_wakeup(cpu1_clkdm); |
146 | omap_set_pwrdm_state(cpu1_pwrdm, PWRDM_POWER_ON); | 147 | omap_set_pwrdm_state(cpu1_pwrdm, PWRDM_POWER_ON); |
147 | clkdm_allow_idle(cpu1_clkdm); | 148 | clkdm_allow_idle(cpu1_clkdm); |
148 | 149 | ||
149 | if (IS_PM44XX_ERRATUM(PM_OMAP4_ROM_SMP_BOOT_ERRATUM_GICD)) { | 150 | if (IS_PM44XX_ERRATUM(PM_OMAP4_ROM_SMP_BOOT_ERRATUM_GICD)) { |
150 | while (gic_dist_disabled()) { | 151 | while (gic_dist_disabled()) { |
151 | udelay(1); | 152 | udelay(1); |
152 | cpu_relax(); | 153 | cpu_relax(); |
153 | } | 154 | } |
154 | gic_timer_retrigger(); | 155 | gic_timer_retrigger(); |
155 | local_irq_enable(); | 156 | local_irq_enable(); |
156 | } | 157 | } |
157 | } else { | 158 | } else { |
158 | dsb_sev(); | 159 | dsb_sev(); |
159 | booted = true; | 160 | booted = true; |
160 | } | 161 | } |
161 | 162 | ||
162 | arch_send_wakeup_ipi_mask(cpumask_of(cpu)); | 163 | arch_send_wakeup_ipi_mask(cpumask_of(cpu)); |
163 | 164 | ||
164 | /* | 165 | /* |
165 | * Now the secondary core is starting up let it run its | 166 | * Now the secondary core is starting up let it run its |
166 | * calibrations, then wait for it to finish | 167 | * calibrations, then wait for it to finish |
167 | */ | 168 | */ |
168 | spin_unlock(&boot_lock); | 169 | spin_unlock(&boot_lock); |
169 | 170 | ||
170 | return 0; | 171 | return 0; |
171 | } | 172 | } |
172 | 173 | ||
173 | /* | 174 | /* |
174 | * Initialise the CPU possible map early - this describes the CPUs | 175 | * Initialise the CPU possible map early - this describes the CPUs |
175 | * which may be present or become present in the system. | 176 | * which may be present or become present in the system. |
176 | */ | 177 | */ |
177 | static void __init omap4_smp_init_cpus(void) | 178 | static void __init omap4_smp_init_cpus(void) |
178 | { | 179 | { |
179 | unsigned int i = 0, ncores = 1, cpu_id; | 180 | unsigned int i = 0, ncores = 1, cpu_id; |
180 | 181 | ||
181 | /* Use ARM cpuid check here, as SoC detection will not work so early */ | 182 | /* Use ARM cpuid check here, as SoC detection will not work so early */ |
182 | cpu_id = read_cpuid_id() & CPU_MASK; | 183 | cpu_id = read_cpuid_id() & CPU_MASK; |
183 | if (cpu_id == CPU_CORTEX_A9) { | 184 | if (cpu_id == CPU_CORTEX_A9) { |
184 | /* | 185 | /* |
185 | * Currently we can't call ioremap here because | 186 | * Currently we can't call ioremap here because |
186 | * SoC detection won't work until after init_early. | 187 | * SoC detection won't work until after init_early. |
187 | */ | 188 | */ |
188 | scu_base = OMAP2_L4_IO_ADDRESS(scu_a9_get_base()); | 189 | scu_base = OMAP2_L4_IO_ADDRESS(scu_a9_get_base()); |
189 | BUG_ON(!scu_base); | 190 | BUG_ON(!scu_base); |
190 | ncores = scu_get_core_count(scu_base); | 191 | ncores = scu_get_core_count(scu_base); |
191 | } else if (cpu_id == CPU_CORTEX_A15) { | 192 | } else if (cpu_id == CPU_CORTEX_A15) { |
192 | ncores = OMAP5_CORE_COUNT; | 193 | ncores = OMAP5_CORE_COUNT; |
193 | } | 194 | } |
194 | 195 | ||
195 | /* sanity check */ | 196 | /* sanity check */ |
196 | if (ncores > nr_cpu_ids) { | 197 | if (ncores > nr_cpu_ids) { |
197 | pr_warn("SMP: %u cores greater than maximum (%u), clipping\n", | 198 | pr_warn("SMP: %u cores greater than maximum (%u), clipping\n", |
198 | ncores, nr_cpu_ids); | 199 | ncores, nr_cpu_ids); |
199 | ncores = nr_cpu_ids; | 200 | ncores = nr_cpu_ids; |
200 | } | 201 | } |
201 | 202 | ||
202 | for (i = 0; i < ncores; i++) | 203 | for (i = 0; i < ncores; i++) |
203 | set_cpu_possible(i, true); | 204 | set_cpu_possible(i, true); |
204 | } | 205 | } |
205 | 206 | ||
206 | static void __init omap4_smp_prepare_cpus(unsigned int max_cpus) | 207 | static void __init omap4_smp_prepare_cpus(unsigned int max_cpus) |
207 | { | 208 | { |
208 | void *startup_addr = omap4_secondary_startup; | 209 | void *startup_addr = omap4_secondary_startup; |
209 | void __iomem *base = omap_get_wakeupgen_base(); | 210 | void __iomem *base = omap_get_wakeupgen_base(); |
210 | 211 | ||
211 | /* | 212 | /* |
212 | * Initialise the SCU and wake up the secondary core using | 213 | * Initialise the SCU and wake up the secondary core using |
213 | * wakeup_secondary(). | 214 | * wakeup_secondary(). |
214 | */ | 215 | */ |
215 | if (scu_base) | 216 | if (scu_base) |
216 | scu_enable(scu_base); | 217 | scu_enable(scu_base); |
217 | 218 | ||
218 | if (cpu_is_omap446x()) | 219 | if (cpu_is_omap446x()) |
219 | startup_addr = omap4460_secondary_startup; | 220 | startup_addr = omap4460_secondary_startup; |
220 | 221 | ||
221 | /* | 222 | /* |
222 | * Write the address of secondary startup routine into the | 223 | * Write the address of secondary startup routine into the |
223 | * AuxCoreBoot1 where ROM code will jump and start executing | 224 | * AuxCoreBoot1 where ROM code will jump and start executing |
224 | * on secondary core once out of WFE | 225 | * on secondary core once out of WFE |
225 | * A barrier is added to ensure that write buffer is drained | 226 | * A barrier is added to ensure that write buffer is drained |
226 | */ | 227 | */ |
227 | if (omap_secure_apis_support()) | 228 | if (omap_secure_apis_support()) |
228 | omap_auxcoreboot_addr(virt_to_phys(startup_addr)); | 229 | omap_auxcoreboot_addr(virt_to_phys(startup_addr)); |
229 | else | 230 | else |
230 | writel_relaxed(virt_to_phys(omap5_secondary_startup), | 231 | /* |
231 | base + OMAP_AUX_CORE_BOOT_1); | 232 | * If the boot CPU is in HYP mode then start secondary |
233 | * CPU in HYP mode as well. | ||
234 | */ | ||
235 | if ((__boot_cpu_mode & MODE_MASK) == HYP_MODE) | ||
236 | writel_relaxed(virt_to_phys(omap5_secondary_hyp_startup), | ||
237 | base + OMAP_AUX_CORE_BOOT_1); | ||
238 | else | ||
239 | writel_relaxed(virt_to_phys(omap5_secondary_startup), | ||
240 | base + OMAP_AUX_CORE_BOOT_1); | ||
232 | 241 | ||
233 | } | 242 | } |
234 | 243 | ||
235 | struct smp_operations omap4_smp_ops __initdata = { | 244 | struct smp_operations omap4_smp_ops __initdata = { |
236 | .smp_init_cpus = omap4_smp_init_cpus, | 245 | .smp_init_cpus = omap4_smp_init_cpus, |
237 | .smp_prepare_cpus = omap4_smp_prepare_cpus, | 246 | .smp_prepare_cpus = omap4_smp_prepare_cpus, |
238 | .smp_secondary_init = omap4_secondary_init, | 247 | .smp_secondary_init = omap4_secondary_init, |
239 | .smp_boot_secondary = omap4_boot_secondary, | 248 | .smp_boot_secondary = omap4_boot_secondary, |
240 | #ifdef CONFIG_HOTPLUG_CPU | 249 | #ifdef CONFIG_HOTPLUG_CPU |
241 | .cpu_die = omap4_cpu_die, | 250 | .cpu_die = omap4_cpu_die, |
242 | #endif | 251 | #endif |
243 | }; | 252 | }; |
244 | 253 |
arch/arm/mach-omap2/timer.c
1 | /* | 1 | /* |
2 | * linux/arch/arm/mach-omap2/timer.c | 2 | * linux/arch/arm/mach-omap2/timer.c |
3 | * | 3 | * |
4 | * OMAP2 GP timer support. | 4 | * OMAP2 GP timer support. |
5 | * | 5 | * |
6 | * Copyright (C) 2009 Nokia Corporation | 6 | * Copyright (C) 2009 Nokia Corporation |
7 | * | 7 | * |
8 | * Update to use new clocksource/clockevent layers | 8 | * Update to use new clocksource/clockevent layers |
9 | * Author: Kevin Hilman, MontaVista Software, Inc. <source@mvista.com> | 9 | * Author: Kevin Hilman, MontaVista Software, Inc. <source@mvista.com> |
10 | * Copyright (C) 2007 MontaVista Software, Inc. | 10 | * Copyright (C) 2007 MontaVista Software, Inc. |
11 | * | 11 | * |
12 | * Original driver: | 12 | * Original driver: |
13 | * Copyright (C) 2005 Nokia Corporation | 13 | * Copyright (C) 2005 Nokia Corporation |
14 | * Author: Paul Mundt <paul.mundt@nokia.com> | 14 | * Author: Paul Mundt <paul.mundt@nokia.com> |
15 | * Juha Yrjรถlรค <juha.yrjola@nokia.com> | 15 | * Juha Yrjรถlรค <juha.yrjola@nokia.com> |
16 | * OMAP Dual-mode timer framework support by Timo Teras | 16 | * OMAP Dual-mode timer framework support by Timo Teras |
17 | * | 17 | * |
18 | * Some parts based off of TI's 24xx code: | 18 | * Some parts based off of TI's 24xx code: |
19 | * | 19 | * |
20 | * Copyright (C) 2004-2009 Texas Instruments, Inc. | 20 | * Copyright (C) 2004-2009 Texas Instruments, Inc. |
21 | * | 21 | * |
22 | * Roughly modelled after the OMAP1 MPU timer code. | 22 | * Roughly modelled after the OMAP1 MPU timer code. |
23 | * Added OMAP4 support - Santosh Shilimkar <santosh.shilimkar@ti.com> | 23 | * Added OMAP4 support - Santosh Shilimkar <santosh.shilimkar@ti.com> |
24 | * | 24 | * |
25 | * This file is subject to the terms and conditions of the GNU General Public | 25 | * This file is subject to the terms and conditions of the GNU General Public |
26 | * License. See the file "COPYING" in the main directory of this archive | 26 | * License. See the file "COPYING" in the main directory of this archive |
27 | * for more details. | 27 | * for more details. |
28 | */ | 28 | */ |
29 | #include <linux/init.h> | 29 | #include <linux/init.h> |
30 | #include <linux/time.h> | 30 | #include <linux/time.h> |
31 | #include <linux/interrupt.h> | 31 | #include <linux/interrupt.h> |
32 | #include <linux/err.h> | 32 | #include <linux/err.h> |
33 | #include <linux/clk.h> | 33 | #include <linux/clk.h> |
34 | #include <linux/delay.h> | 34 | #include <linux/delay.h> |
35 | #include <linux/irq.h> | 35 | #include <linux/irq.h> |
36 | #include <linux/clocksource.h> | 36 | #include <linux/clocksource.h> |
37 | #include <linux/clockchips.h> | 37 | #include <linux/clockchips.h> |
38 | #include <linux/slab.h> | 38 | #include <linux/slab.h> |
39 | #include <linux/of.h> | 39 | #include <linux/of.h> |
40 | #include <linux/of_address.h> | 40 | #include <linux/of_address.h> |
41 | #include <linux/of_irq.h> | 41 | #include <linux/of_irq.h> |
42 | #include <linux/platform_device.h> | 42 | #include <linux/platform_device.h> |
43 | #include <linux/platform_data/dmtimer-omap.h> | 43 | #include <linux/platform_data/dmtimer-omap.h> |
44 | #include <linux/sched_clock.h> | 44 | #include <linux/sched_clock.h> |
45 | 45 | ||
46 | #include <asm/mach/time.h> | 46 | #include <asm/mach/time.h> |
47 | #include <asm/smp_twd.h> | 47 | #include <asm/smp_twd.h> |
48 | 48 | ||
49 | #include "omap_hwmod.h" | 49 | #include "omap_hwmod.h" |
50 | #include "omap_device.h" | 50 | #include "omap_device.h" |
51 | #include <plat/counter-32k.h> | 51 | #include <plat/counter-32k.h> |
52 | #include <plat/dmtimer.h> | 52 | #include <plat/dmtimer.h> |
53 | #include "omap-pm.h" | 53 | #include "omap-pm.h" |
54 | 54 | ||
55 | #include "soc.h" | 55 | #include "soc.h" |
56 | #include "common.h" | 56 | #include "common.h" |
57 | #include "control.h" | ||
57 | #include "powerdomain.h" | 58 | #include "powerdomain.h" |
58 | #include "omap-secure.h" | 59 | #include "omap-secure.h" |
59 | 60 | ||
60 | #define REALTIME_COUNTER_BASE 0x48243200 | 61 | #define REALTIME_COUNTER_BASE 0x48243200 |
61 | #define INCREMENTER_NUMERATOR_OFFSET 0x10 | 62 | #define INCREMENTER_NUMERATOR_OFFSET 0x10 |
62 | #define INCREMENTER_DENUMERATOR_RELOAD_OFFSET 0x14 | 63 | #define INCREMENTER_DENUMERATOR_RELOAD_OFFSET 0x14 |
63 | #define NUMERATOR_DENUMERATOR_MASK 0xfffff000 | 64 | #define NUMERATOR_DENUMERATOR_MASK 0xfffff000 |
64 | 65 | ||
65 | /* Clockevent code */ | 66 | /* Clockevent code */ |
66 | 67 | ||
67 | static struct omap_dm_timer clkev; | 68 | static struct omap_dm_timer clkev; |
68 | static struct clock_event_device clockevent_gpt; | 69 | static struct clock_event_device clockevent_gpt; |
69 | 70 | ||
70 | #ifdef CONFIG_SOC_HAS_REALTIME_COUNTER | 71 | #ifdef CONFIG_SOC_HAS_REALTIME_COUNTER |
71 | static unsigned long arch_timer_freq; | 72 | static unsigned long arch_timer_freq; |
72 | 73 | ||
73 | void set_cntfreq(void) | 74 | void set_cntfreq(void) |
74 | { | 75 | { |
75 | omap_smc1(OMAP5_DRA7_MON_SET_CNTFRQ_INDEX, arch_timer_freq); | 76 | omap_smc1(OMAP5_DRA7_MON_SET_CNTFRQ_INDEX, arch_timer_freq); |
76 | } | 77 | } |
77 | #endif | 78 | #endif |
78 | 79 | ||
79 | static irqreturn_t omap2_gp_timer_interrupt(int irq, void *dev_id) | 80 | static irqreturn_t omap2_gp_timer_interrupt(int irq, void *dev_id) |
80 | { | 81 | { |
81 | struct clock_event_device *evt = &clockevent_gpt; | 82 | struct clock_event_device *evt = &clockevent_gpt; |
82 | 83 | ||
83 | __omap_dm_timer_write_status(&clkev, OMAP_TIMER_INT_OVERFLOW); | 84 | __omap_dm_timer_write_status(&clkev, OMAP_TIMER_INT_OVERFLOW); |
84 | 85 | ||
85 | evt->event_handler(evt); | 86 | evt->event_handler(evt); |
86 | return IRQ_HANDLED; | 87 | return IRQ_HANDLED; |
87 | } | 88 | } |
88 | 89 | ||
89 | static struct irqaction omap2_gp_timer_irq = { | 90 | static struct irqaction omap2_gp_timer_irq = { |
90 | .name = "gp_timer", | 91 | .name = "gp_timer", |
91 | .flags = IRQF_TIMER | IRQF_IRQPOLL, | 92 | .flags = IRQF_TIMER | IRQF_IRQPOLL, |
92 | .handler = omap2_gp_timer_interrupt, | 93 | .handler = omap2_gp_timer_interrupt, |
93 | }; | 94 | }; |
94 | 95 | ||
95 | static int omap2_gp_timer_set_next_event(unsigned long cycles, | 96 | static int omap2_gp_timer_set_next_event(unsigned long cycles, |
96 | struct clock_event_device *evt) | 97 | struct clock_event_device *evt) |
97 | { | 98 | { |
98 | __omap_dm_timer_load_start(&clkev, OMAP_TIMER_CTRL_ST, | 99 | __omap_dm_timer_load_start(&clkev, OMAP_TIMER_CTRL_ST, |
99 | 0xffffffff - cycles, OMAP_TIMER_POSTED); | 100 | 0xffffffff - cycles, OMAP_TIMER_POSTED); |
100 | 101 | ||
101 | return 0; | 102 | return 0; |
102 | } | 103 | } |
103 | 104 | ||
104 | static void omap2_gp_timer_set_mode(enum clock_event_mode mode, | 105 | static void omap2_gp_timer_set_mode(enum clock_event_mode mode, |
105 | struct clock_event_device *evt) | 106 | struct clock_event_device *evt) |
106 | { | 107 | { |
107 | u32 period; | 108 | u32 period; |
108 | 109 | ||
109 | __omap_dm_timer_stop(&clkev, OMAP_TIMER_POSTED, clkev.rate); | 110 | __omap_dm_timer_stop(&clkev, OMAP_TIMER_POSTED, clkev.rate); |
110 | 111 | ||
111 | switch (mode) { | 112 | switch (mode) { |
112 | case CLOCK_EVT_MODE_PERIODIC: | 113 | case CLOCK_EVT_MODE_PERIODIC: |
113 | period = clkev.rate / HZ; | 114 | period = clkev.rate / HZ; |
114 | period -= 1; | 115 | period -= 1; |
115 | /* Looks like we need to first set the load value separately */ | 116 | /* Looks like we need to first set the load value separately */ |
116 | __omap_dm_timer_write(&clkev, OMAP_TIMER_LOAD_REG, | 117 | __omap_dm_timer_write(&clkev, OMAP_TIMER_LOAD_REG, |
117 | 0xffffffff - period, OMAP_TIMER_POSTED); | 118 | 0xffffffff - period, OMAP_TIMER_POSTED); |
118 | __omap_dm_timer_load_start(&clkev, | 119 | __omap_dm_timer_load_start(&clkev, |
119 | OMAP_TIMER_CTRL_AR | OMAP_TIMER_CTRL_ST, | 120 | OMAP_TIMER_CTRL_AR | OMAP_TIMER_CTRL_ST, |
120 | 0xffffffff - period, OMAP_TIMER_POSTED); | 121 | 0xffffffff - period, OMAP_TIMER_POSTED); |
121 | break; | 122 | break; |
122 | case CLOCK_EVT_MODE_ONESHOT: | 123 | case CLOCK_EVT_MODE_ONESHOT: |
123 | break; | 124 | break; |
124 | case CLOCK_EVT_MODE_UNUSED: | 125 | case CLOCK_EVT_MODE_UNUSED: |
125 | case CLOCK_EVT_MODE_SHUTDOWN: | 126 | case CLOCK_EVT_MODE_SHUTDOWN: |
126 | case CLOCK_EVT_MODE_RESUME: | 127 | case CLOCK_EVT_MODE_RESUME: |
127 | break; | 128 | break; |
128 | } | 129 | } |
129 | } | 130 | } |
130 | 131 | ||
131 | static struct clock_event_device clockevent_gpt = { | 132 | static struct clock_event_device clockevent_gpt = { |
132 | .features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT, | 133 | .features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT, |
133 | .rating = 300, | 134 | .rating = 300, |
134 | .set_next_event = omap2_gp_timer_set_next_event, | 135 | .set_next_event = omap2_gp_timer_set_next_event, |
135 | .set_mode = omap2_gp_timer_set_mode, | 136 | .set_mode = omap2_gp_timer_set_mode, |
136 | }; | 137 | }; |
137 | 138 | ||
138 | static struct property device_disabled = { | 139 | static struct property device_disabled = { |
139 | .name = "status", | 140 | .name = "status", |
140 | .length = sizeof("disabled"), | 141 | .length = sizeof("disabled"), |
141 | .value = "disabled", | 142 | .value = "disabled", |
142 | }; | 143 | }; |
143 | 144 | ||
144 | static const struct of_device_id omap_timer_match[] __initconst = { | 145 | static const struct of_device_id omap_timer_match[] __initconst = { |
145 | { .compatible = "ti,omap2420-timer", }, | 146 | { .compatible = "ti,omap2420-timer", }, |
146 | { .compatible = "ti,omap3430-timer", }, | 147 | { .compatible = "ti,omap3430-timer", }, |
147 | { .compatible = "ti,omap4430-timer", }, | 148 | { .compatible = "ti,omap4430-timer", }, |
148 | { .compatible = "ti,omap5430-timer", }, | 149 | { .compatible = "ti,omap5430-timer", }, |
149 | { .compatible = "ti,am335x-timer", }, | 150 | { .compatible = "ti,am335x-timer", }, |
150 | { .compatible = "ti,am335x-timer-1ms", }, | 151 | { .compatible = "ti,am335x-timer-1ms", }, |
151 | { } | 152 | { } |
152 | }; | 153 | }; |
153 | 154 | ||
154 | /** | 155 | /** |
155 | * omap_get_timer_dt - get a timer using device-tree | 156 | * omap_get_timer_dt - get a timer using device-tree |
156 | * @match - device-tree match structure for matching a device type | 157 | * @match - device-tree match structure for matching a device type |
157 | * @property - optional timer property to match | 158 | * @property - optional timer property to match |
158 | * | 159 | * |
159 | * Helper function to get a timer during early boot using device-tree for use | 160 | * Helper function to get a timer during early boot using device-tree for use |
160 | * as kernel system timer. Optionally, the property argument can be used to | 161 | * as kernel system timer. Optionally, the property argument can be used to |
161 | * select a timer with a specific property. Once a timer is found then mark | 162 | * select a timer with a specific property. Once a timer is found then mark |
162 | * the timer node in device-tree as disabled, to prevent the kernel from | 163 | * the timer node in device-tree as disabled, to prevent the kernel from |
163 | * registering this timer as a platform device and so no one else can use it. | 164 | * registering this timer as a platform device and so no one else can use it. |
164 | */ | 165 | */ |
165 | static struct device_node * __init omap_get_timer_dt(const struct of_device_id *match, | 166 | static struct device_node * __init omap_get_timer_dt(const struct of_device_id *match, |
166 | const char *property) | 167 | const char *property) |
167 | { | 168 | { |
168 | struct device_node *np; | 169 | struct device_node *np; |
169 | 170 | ||
170 | for_each_matching_node(np, match) { | 171 | for_each_matching_node(np, match) { |
171 | if (!of_device_is_available(np)) | 172 | if (!of_device_is_available(np)) |
172 | continue; | 173 | continue; |
173 | 174 | ||
174 | if (property && !of_get_property(np, property, NULL)) | 175 | if (property && !of_get_property(np, property, NULL)) |
175 | continue; | 176 | continue; |
176 | 177 | ||
177 | if (!property && (of_get_property(np, "ti,timer-alwon", NULL) || | 178 | if (!property && (of_get_property(np, "ti,timer-alwon", NULL) || |
178 | of_get_property(np, "ti,timer-dsp", NULL) || | 179 | of_get_property(np, "ti,timer-dsp", NULL) || |
179 | of_get_property(np, "ti,timer-pwm", NULL) || | 180 | of_get_property(np, "ti,timer-pwm", NULL) || |
180 | of_get_property(np, "ti,timer-secure", NULL))) | 181 | of_get_property(np, "ti,timer-secure", NULL))) |
181 | continue; | 182 | continue; |
182 | 183 | ||
183 | of_add_property(np, &device_disabled); | 184 | of_add_property(np, &device_disabled); |
184 | return np; | 185 | return np; |
185 | } | 186 | } |
186 | 187 | ||
187 | return NULL; | 188 | return NULL; |
188 | } | 189 | } |
189 | 190 | ||
190 | /** | 191 | /** |
191 | * omap_dmtimer_init - initialisation function when device tree is used | 192 | * omap_dmtimer_init - initialisation function when device tree is used |
192 | * | 193 | * |
193 | * For secure OMAP3 devices, timers with device type "timer-secure" cannot | 194 | * For secure OMAP3 devices, timers with device type "timer-secure" cannot |
194 | * be used by the kernel as they are reserved. Therefore, to prevent the | 195 | * be used by the kernel as they are reserved. Therefore, to prevent the |
195 | * kernel registering these devices remove them dynamically from the device | 196 | * kernel registering these devices remove them dynamically from the device |
196 | * tree on boot. | 197 | * tree on boot. |
197 | */ | 198 | */ |
198 | static void __init omap_dmtimer_init(void) | 199 | static void __init omap_dmtimer_init(void) |
199 | { | 200 | { |
200 | struct device_node *np; | 201 | struct device_node *np; |
201 | 202 | ||
202 | if (!cpu_is_omap34xx()) | 203 | if (!cpu_is_omap34xx()) |
203 | return; | 204 | return; |
204 | 205 | ||
205 | /* If we are a secure device, remove any secure timer nodes */ | 206 | /* If we are a secure device, remove any secure timer nodes */ |
206 | if ((omap_type() != OMAP2_DEVICE_TYPE_GP)) { | 207 | if ((omap_type() != OMAP2_DEVICE_TYPE_GP)) { |
207 | np = omap_get_timer_dt(omap_timer_match, "ti,timer-secure"); | 208 | np = omap_get_timer_dt(omap_timer_match, "ti,timer-secure"); |
208 | if (np) | 209 | if (np) |
209 | of_node_put(np); | 210 | of_node_put(np); |
210 | } | 211 | } |
211 | } | 212 | } |
212 | 213 | ||
213 | /** | 214 | /** |
214 | * omap_dm_timer_get_errata - get errata flags for a timer | 215 | * omap_dm_timer_get_errata - get errata flags for a timer |
215 | * | 216 | * |
216 | * Get the timer errata flags that are specific to the OMAP device being used. | 217 | * Get the timer errata flags that are specific to the OMAP device being used. |
217 | */ | 218 | */ |
218 | static u32 __init omap_dm_timer_get_errata(void) | 219 | static u32 __init omap_dm_timer_get_errata(void) |
219 | { | 220 | { |
220 | if (cpu_is_omap24xx()) | 221 | if (cpu_is_omap24xx()) |
221 | return 0; | 222 | return 0; |
222 | 223 | ||
223 | return OMAP_TIMER_ERRATA_I103_I767; | 224 | return OMAP_TIMER_ERRATA_I103_I767; |
224 | } | 225 | } |
225 | 226 | ||
226 | static int __init omap_dm_timer_init_one(struct omap_dm_timer *timer, | 227 | static int __init omap_dm_timer_init_one(struct omap_dm_timer *timer, |
227 | const char *fck_source, | 228 | const char *fck_source, |
228 | const char *property, | 229 | const char *property, |
229 | const char **timer_name, | 230 | const char **timer_name, |
230 | int posted) | 231 | int posted) |
231 | { | 232 | { |
232 | char name[10]; /* 10 = sizeof("gptXX_Xck0") */ | 233 | char name[10]; /* 10 = sizeof("gptXX_Xck0") */ |
233 | const char *oh_name = NULL; | 234 | const char *oh_name = NULL; |
234 | struct device_node *np; | 235 | struct device_node *np; |
235 | struct omap_hwmod *oh; | 236 | struct omap_hwmod *oh; |
236 | struct resource irq, mem; | 237 | struct resource irq, mem; |
237 | struct clk *src; | 238 | struct clk *src; |
238 | int r = 0; | 239 | int r = 0; |
239 | 240 | ||
240 | if (of_have_populated_dt()) { | 241 | if (of_have_populated_dt()) { |
241 | np = omap_get_timer_dt(omap_timer_match, property); | 242 | np = omap_get_timer_dt(omap_timer_match, property); |
242 | if (!np) | 243 | if (!np) |
243 | return -ENODEV; | 244 | return -ENODEV; |
244 | 245 | ||
245 | of_property_read_string_index(np, "ti,hwmods", 0, &oh_name); | 246 | of_property_read_string_index(np, "ti,hwmods", 0, &oh_name); |
246 | if (!oh_name) | 247 | if (!oh_name) |
247 | return -ENODEV; | 248 | return -ENODEV; |
248 | 249 | ||
249 | timer->irq = irq_of_parse_and_map(np, 0); | 250 | timer->irq = irq_of_parse_and_map(np, 0); |
250 | if (!timer->irq) | 251 | if (!timer->irq) |
251 | return -ENXIO; | 252 | return -ENXIO; |
252 | 253 | ||
253 | timer->io_base = of_iomap(np, 0); | 254 | timer->io_base = of_iomap(np, 0); |
254 | 255 | ||
255 | of_node_put(np); | 256 | of_node_put(np); |
256 | } else { | 257 | } else { |
257 | if (omap_dm_timer_reserve_systimer(timer->id)) | 258 | if (omap_dm_timer_reserve_systimer(timer->id)) |
258 | return -ENODEV; | 259 | return -ENODEV; |
259 | 260 | ||
260 | sprintf(name, "timer%d", timer->id); | 261 | sprintf(name, "timer%d", timer->id); |
261 | oh_name = name; | 262 | oh_name = name; |
262 | } | 263 | } |
263 | 264 | ||
264 | oh = omap_hwmod_lookup(oh_name); | 265 | oh = omap_hwmod_lookup(oh_name); |
265 | if (!oh) | 266 | if (!oh) |
266 | return -ENODEV; | 267 | return -ENODEV; |
267 | 268 | ||
268 | *timer_name = oh->name; | 269 | *timer_name = oh->name; |
269 | 270 | ||
270 | if (!of_have_populated_dt()) { | 271 | if (!of_have_populated_dt()) { |
271 | r = omap_hwmod_get_resource_byname(oh, IORESOURCE_IRQ, NULL, | 272 | r = omap_hwmod_get_resource_byname(oh, IORESOURCE_IRQ, NULL, |
272 | &irq); | 273 | &irq); |
273 | if (r) | 274 | if (r) |
274 | return -ENXIO; | 275 | return -ENXIO; |
275 | timer->irq = irq.start; | 276 | timer->irq = irq.start; |
276 | 277 | ||
277 | r = omap_hwmod_get_resource_byname(oh, IORESOURCE_MEM, NULL, | 278 | r = omap_hwmod_get_resource_byname(oh, IORESOURCE_MEM, NULL, |
278 | &mem); | 279 | &mem); |
279 | if (r) | 280 | if (r) |
280 | return -ENXIO; | 281 | return -ENXIO; |
281 | 282 | ||
282 | /* Static mapping, never released */ | 283 | /* Static mapping, never released */ |
283 | timer->io_base = ioremap(mem.start, mem.end - mem.start); | 284 | timer->io_base = ioremap(mem.start, mem.end - mem.start); |
284 | } | 285 | } |
285 | 286 | ||
286 | if (!timer->io_base) | 287 | if (!timer->io_base) |
287 | return -ENXIO; | 288 | return -ENXIO; |
288 | 289 | ||
289 | /* After the dmtimer is using hwmod these clocks won't be needed */ | 290 | /* After the dmtimer is using hwmod these clocks won't be needed */ |
290 | timer->fclk = clk_get(NULL, omap_hwmod_get_main_clk(oh)); | 291 | timer->fclk = clk_get(NULL, omap_hwmod_get_main_clk(oh)); |
291 | if (IS_ERR(timer->fclk)) | 292 | if (IS_ERR(timer->fclk)) |
292 | return PTR_ERR(timer->fclk); | 293 | return PTR_ERR(timer->fclk); |
293 | 294 | ||
294 | src = clk_get(NULL, fck_source); | 295 | src = clk_get(NULL, fck_source); |
295 | if (IS_ERR(src)) | 296 | if (IS_ERR(src)) |
296 | return PTR_ERR(src); | 297 | return PTR_ERR(src); |
297 | 298 | ||
298 | if (clk_get_parent(timer->fclk) != src) { | 299 | if (clk_get_parent(timer->fclk) != src) { |
299 | r = clk_set_parent(timer->fclk, src); | 300 | r = clk_set_parent(timer->fclk, src); |
300 | if (r < 0) { | 301 | if (r < 0) { |
301 | pr_warn("%s: %s cannot set source\n", __func__, | 302 | pr_warn("%s: %s cannot set source\n", __func__, |
302 | oh->name); | 303 | oh->name); |
303 | clk_put(src); | 304 | clk_put(src); |
304 | return r; | 305 | return r; |
305 | } | 306 | } |
306 | } | 307 | } |
307 | 308 | ||
308 | clk_put(src); | 309 | clk_put(src); |
309 | 310 | ||
310 | omap_hwmod_setup_one(oh_name); | 311 | omap_hwmod_setup_one(oh_name); |
311 | omap_hwmod_enable(oh); | 312 | omap_hwmod_enable(oh); |
312 | __omap_dm_timer_init_regs(timer); | 313 | __omap_dm_timer_init_regs(timer); |
313 | 314 | ||
314 | if (posted) | 315 | if (posted) |
315 | __omap_dm_timer_enable_posted(timer); | 316 | __omap_dm_timer_enable_posted(timer); |
316 | 317 | ||
317 | /* Check that the intended posted configuration matches the actual */ | 318 | /* Check that the intended posted configuration matches the actual */ |
318 | if (posted != timer->posted) | 319 | if (posted != timer->posted) |
319 | return -EINVAL; | 320 | return -EINVAL; |
320 | 321 | ||
321 | timer->rate = clk_get_rate(timer->fclk); | 322 | timer->rate = clk_get_rate(timer->fclk); |
322 | timer->reserved = 1; | 323 | timer->reserved = 1; |
323 | 324 | ||
324 | return r; | 325 | return r; |
325 | } | 326 | } |
326 | 327 | ||
327 | static void __init omap2_gp_clockevent_init(int gptimer_id, | 328 | static void __init omap2_gp_clockevent_init(int gptimer_id, |
328 | const char *fck_source, | 329 | const char *fck_source, |
329 | const char *property) | 330 | const char *property) |
330 | { | 331 | { |
331 | int res; | 332 | int res; |
332 | 333 | ||
333 | clkev.id = gptimer_id; | 334 | clkev.id = gptimer_id; |
334 | clkev.errata = omap_dm_timer_get_errata(); | 335 | clkev.errata = omap_dm_timer_get_errata(); |
335 | 336 | ||
336 | /* | 337 | /* |
337 | * For clock-event timers we never read the timer counter and | 338 | * For clock-event timers we never read the timer counter and |
338 | * so we are not impacted by errata i103 and i767. Therefore, | 339 | * so we are not impacted by errata i103 and i767. Therefore, |
339 | * we can safely ignore this errata for clock-event timers. | 340 | * we can safely ignore this errata for clock-event timers. |
340 | */ | 341 | */ |
341 | __omap_dm_timer_override_errata(&clkev, OMAP_TIMER_ERRATA_I103_I767); | 342 | __omap_dm_timer_override_errata(&clkev, OMAP_TIMER_ERRATA_I103_I767); |
342 | 343 | ||
343 | res = omap_dm_timer_init_one(&clkev, fck_source, property, | 344 | res = omap_dm_timer_init_one(&clkev, fck_source, property, |
344 | &clockevent_gpt.name, OMAP_TIMER_POSTED); | 345 | &clockevent_gpt.name, OMAP_TIMER_POSTED); |
345 | BUG_ON(res); | 346 | BUG_ON(res); |
346 | 347 | ||
347 | omap2_gp_timer_irq.dev_id = &clkev; | 348 | omap2_gp_timer_irq.dev_id = &clkev; |
348 | setup_irq(clkev.irq, &omap2_gp_timer_irq); | 349 | setup_irq(clkev.irq, &omap2_gp_timer_irq); |
349 | 350 | ||
350 | __omap_dm_timer_int_enable(&clkev, OMAP_TIMER_INT_OVERFLOW); | 351 | __omap_dm_timer_int_enable(&clkev, OMAP_TIMER_INT_OVERFLOW); |
351 | 352 | ||
352 | clockevent_gpt.cpumask = cpu_possible_mask; | 353 | clockevent_gpt.cpumask = cpu_possible_mask; |
353 | clockevent_gpt.irq = omap_dm_timer_get_irq(&clkev); | 354 | clockevent_gpt.irq = omap_dm_timer_get_irq(&clkev); |
354 | clockevents_config_and_register(&clockevent_gpt, clkev.rate, | 355 | clockevents_config_and_register(&clockevent_gpt, clkev.rate, |
355 | 3, /* Timer internal resynch latency */ | 356 | 3, /* Timer internal resynch latency */ |
356 | 0xffffffff); | 357 | 0xffffffff); |
357 | 358 | ||
358 | pr_info("OMAP clockevent source: %s at %lu Hz\n", clockevent_gpt.name, | 359 | pr_info("OMAP clockevent source: %s at %lu Hz\n", clockevent_gpt.name, |
359 | clkev.rate); | 360 | clkev.rate); |
360 | } | 361 | } |
361 | 362 | ||
362 | /* Clocksource code */ | 363 | /* Clocksource code */ |
363 | static struct omap_dm_timer clksrc; | 364 | static struct omap_dm_timer clksrc; |
364 | static bool use_gptimer_clksrc __initdata; | 365 | static bool use_gptimer_clksrc __initdata; |
365 | 366 | ||
366 | /* | 367 | /* |
367 | * clocksource | 368 | * clocksource |
368 | */ | 369 | */ |
369 | static cycle_t clocksource_read_cycles(struct clocksource *cs) | 370 | static cycle_t clocksource_read_cycles(struct clocksource *cs) |
370 | { | 371 | { |
371 | return (cycle_t)__omap_dm_timer_read_counter(&clksrc, | 372 | return (cycle_t)__omap_dm_timer_read_counter(&clksrc, |
372 | OMAP_TIMER_NONPOSTED); | 373 | OMAP_TIMER_NONPOSTED); |
373 | } | 374 | } |
374 | 375 | ||
375 | static struct clocksource clocksource_gpt = { | 376 | static struct clocksource clocksource_gpt = { |
376 | .rating = 300, | 377 | .rating = 300, |
377 | .read = clocksource_read_cycles, | 378 | .read = clocksource_read_cycles, |
378 | .mask = CLOCKSOURCE_MASK(32), | 379 | .mask = CLOCKSOURCE_MASK(32), |
379 | .flags = CLOCK_SOURCE_IS_CONTINUOUS, | 380 | .flags = CLOCK_SOURCE_IS_CONTINUOUS, |
380 | }; | 381 | }; |
381 | 382 | ||
382 | static u64 notrace dmtimer_read_sched_clock(void) | 383 | static u64 notrace dmtimer_read_sched_clock(void) |
383 | { | 384 | { |
384 | if (clksrc.reserved) | 385 | if (clksrc.reserved) |
385 | return __omap_dm_timer_read_counter(&clksrc, | 386 | return __omap_dm_timer_read_counter(&clksrc, |
386 | OMAP_TIMER_NONPOSTED); | 387 | OMAP_TIMER_NONPOSTED); |
387 | 388 | ||
388 | return 0; | 389 | return 0; |
389 | } | 390 | } |
390 | 391 | ||
391 | static const struct of_device_id omap_counter_match[] __initconst = { | 392 | static const struct of_device_id omap_counter_match[] __initconst = { |
392 | { .compatible = "ti,omap-counter32k", }, | 393 | { .compatible = "ti,omap-counter32k", }, |
393 | { } | 394 | { } |
394 | }; | 395 | }; |
395 | 396 | ||
396 | /* Setup free-running counter for clocksource */ | 397 | /* Setup free-running counter for clocksource */ |
397 | static int __init __maybe_unused omap2_sync32k_clocksource_init(void) | 398 | static int __init __maybe_unused omap2_sync32k_clocksource_init(void) |
398 | { | 399 | { |
399 | int ret; | 400 | int ret; |
400 | struct device_node *np = NULL; | 401 | struct device_node *np = NULL; |
401 | struct omap_hwmod *oh; | 402 | struct omap_hwmod *oh; |
402 | void __iomem *vbase; | 403 | void __iomem *vbase; |
403 | const char *oh_name = "counter_32k"; | 404 | const char *oh_name = "counter_32k"; |
404 | 405 | ||
405 | /* | 406 | /* |
406 | * If device-tree is present, then search the DT blob | 407 | * If device-tree is present, then search the DT blob |
407 | * to see if the 32kHz counter is supported. | 408 | * to see if the 32kHz counter is supported. |
408 | */ | 409 | */ |
409 | if (of_have_populated_dt()) { | 410 | if (of_have_populated_dt()) { |
410 | np = omap_get_timer_dt(omap_counter_match, NULL); | 411 | np = omap_get_timer_dt(omap_counter_match, NULL); |
411 | if (!np) | 412 | if (!np) |
412 | return -ENODEV; | 413 | return -ENODEV; |
413 | 414 | ||
414 | of_property_read_string_index(np, "ti,hwmods", 0, &oh_name); | 415 | of_property_read_string_index(np, "ti,hwmods", 0, &oh_name); |
415 | if (!oh_name) | 416 | if (!oh_name) |
416 | return -ENODEV; | 417 | return -ENODEV; |
417 | } | 418 | } |
418 | 419 | ||
419 | /* | 420 | /* |
420 | * First check hwmod data is available for sync32k counter | 421 | * First check hwmod data is available for sync32k counter |
421 | */ | 422 | */ |
422 | oh = omap_hwmod_lookup(oh_name); | 423 | oh = omap_hwmod_lookup(oh_name); |
423 | if (!oh || oh->slaves_cnt == 0) | 424 | if (!oh || oh->slaves_cnt == 0) |
424 | return -ENODEV; | 425 | return -ENODEV; |
425 | 426 | ||
426 | omap_hwmod_setup_one(oh_name); | 427 | omap_hwmod_setup_one(oh_name); |
427 | 428 | ||
428 | if (np) { | 429 | if (np) { |
429 | vbase = of_iomap(np, 0); | 430 | vbase = of_iomap(np, 0); |
430 | of_node_put(np); | 431 | of_node_put(np); |
431 | } else { | 432 | } else { |
432 | vbase = omap_hwmod_get_mpu_rt_va(oh); | 433 | vbase = omap_hwmod_get_mpu_rt_va(oh); |
433 | } | 434 | } |
434 | 435 | ||
435 | if (!vbase) { | 436 | if (!vbase) { |
436 | pr_warn("%s: failed to get counter_32k resource\n", __func__); | 437 | pr_warn("%s: failed to get counter_32k resource\n", __func__); |
437 | return -ENXIO; | 438 | return -ENXIO; |
438 | } | 439 | } |
439 | 440 | ||
440 | ret = omap_hwmod_enable(oh); | 441 | ret = omap_hwmod_enable(oh); |
441 | if (ret) { | 442 | if (ret) { |
442 | pr_warn("%s: failed to enable counter_32k module (%d)\n", | 443 | pr_warn("%s: failed to enable counter_32k module (%d)\n", |
443 | __func__, ret); | 444 | __func__, ret); |
444 | return ret; | 445 | return ret; |
445 | } | 446 | } |
446 | 447 | ||
447 | ret = omap_init_clocksource_32k(vbase); | 448 | ret = omap_init_clocksource_32k(vbase); |
448 | if (ret) { | 449 | if (ret) { |
449 | pr_warn("%s: failed to initialize counter_32k as a clocksource (%d)\n", | 450 | pr_warn("%s: failed to initialize counter_32k as a clocksource (%d)\n", |
450 | __func__, ret); | 451 | __func__, ret); |
451 | omap_hwmod_idle(oh); | 452 | omap_hwmod_idle(oh); |
452 | } | 453 | } |
453 | 454 | ||
454 | return ret; | 455 | return ret; |
455 | } | 456 | } |
456 | 457 | ||
457 | static void __init omap2_gptimer_clocksource_init(int gptimer_id, | 458 | static void __init omap2_gptimer_clocksource_init(int gptimer_id, |
458 | const char *fck_source, | 459 | const char *fck_source, |
459 | const char *property) | 460 | const char *property) |
460 | { | 461 | { |
461 | int res; | 462 | int res; |
462 | 463 | ||
463 | clksrc.id = gptimer_id; | 464 | clksrc.id = gptimer_id; |
464 | clksrc.errata = omap_dm_timer_get_errata(); | 465 | clksrc.errata = omap_dm_timer_get_errata(); |
465 | 466 | ||
466 | res = omap_dm_timer_init_one(&clksrc, fck_source, property, | 467 | res = omap_dm_timer_init_one(&clksrc, fck_source, property, |
467 | &clocksource_gpt.name, | 468 | &clocksource_gpt.name, |
468 | OMAP_TIMER_NONPOSTED); | 469 | OMAP_TIMER_NONPOSTED); |
469 | BUG_ON(res); | 470 | BUG_ON(res); |
470 | 471 | ||
471 | __omap_dm_timer_load_start(&clksrc, | 472 | __omap_dm_timer_load_start(&clksrc, |
472 | OMAP_TIMER_CTRL_ST | OMAP_TIMER_CTRL_AR, 0, | 473 | OMAP_TIMER_CTRL_ST | OMAP_TIMER_CTRL_AR, 0, |
473 | OMAP_TIMER_NONPOSTED); | 474 | OMAP_TIMER_NONPOSTED); |
474 | sched_clock_register(dmtimer_read_sched_clock, 32, clksrc.rate); | 475 | sched_clock_register(dmtimer_read_sched_clock, 32, clksrc.rate); |
475 | 476 | ||
476 | if (clocksource_register_hz(&clocksource_gpt, clksrc.rate)) | 477 | if (clocksource_register_hz(&clocksource_gpt, clksrc.rate)) |
477 | pr_err("Could not register clocksource %s\n", | 478 | pr_err("Could not register clocksource %s\n", |
478 | clocksource_gpt.name); | 479 | clocksource_gpt.name); |
479 | else | 480 | else |
480 | pr_info("OMAP clocksource: %s at %lu Hz\n", | 481 | pr_info("OMAP clocksource: %s at %lu Hz\n", |
481 | clocksource_gpt.name, clksrc.rate); | 482 | clocksource_gpt.name, clksrc.rate); |
482 | } | 483 | } |
483 | 484 | ||
484 | #ifdef CONFIG_SOC_HAS_REALTIME_COUNTER | 485 | #ifdef CONFIG_SOC_HAS_REALTIME_COUNTER |
485 | /* | 486 | /* |
486 | * The realtime counter also called master counter, is a free-running | 487 | * The realtime counter also called master counter, is a free-running |
487 | * counter, which is related to real time. It produces the count used | 488 | * counter, which is related to real time. It produces the count used |
488 | * by the CPU local timer peripherals in the MPU cluster. The timer counts | 489 | * by the CPU local timer peripherals in the MPU cluster. The timer counts |
489 | * at a rate of 6.144 MHz. Because the device operates on different clocks | 490 | * at a rate of 6.144 MHz. Because the device operates on different clocks |
490 | * in different power modes, the master counter shifts operation between | 491 | * in different power modes, the master counter shifts operation between |
491 | * clocks, adjusting the increment per clock in hardware accordingly to | 492 | * clocks, adjusting the increment per clock in hardware accordingly to |
492 | * maintain a constant count rate. | 493 | * maintain a constant count rate. |
493 | */ | 494 | */ |
494 | static void __init realtime_counter_init(void) | 495 | static void __init realtime_counter_init(void) |
495 | { | 496 | { |
496 | void __iomem *base; | 497 | void __iomem *base; |
497 | static struct clk *sys_clk; | 498 | static struct clk *sys_clk; |
498 | unsigned long rate; | 499 | unsigned long rate; |
499 | unsigned int reg, num, den; | 500 | unsigned int reg; |
501 | unsigned long long num, den; | ||
500 | 502 | ||
501 | base = ioremap(REALTIME_COUNTER_BASE, SZ_32); | 503 | base = ioremap(REALTIME_COUNTER_BASE, SZ_32); |
502 | if (!base) { | 504 | if (!base) { |
503 | pr_err("%s: ioremap failed\n", __func__); | 505 | pr_err("%s: ioremap failed\n", __func__); |
504 | return; | 506 | return; |
505 | } | 507 | } |
506 | sys_clk = clk_get(NULL, "sys_clkin"); | 508 | sys_clk = clk_get(NULL, "sys_clkin"); |
507 | if (IS_ERR(sys_clk)) { | 509 | if (IS_ERR(sys_clk)) { |
508 | pr_err("%s: failed to get system clock handle\n", __func__); | 510 | pr_err("%s: failed to get system clock handle\n", __func__); |
509 | iounmap(base); | 511 | iounmap(base); |
510 | return; | 512 | return; |
511 | } | 513 | } |
512 | 514 | ||
513 | rate = clk_get_rate(sys_clk); | 515 | rate = clk_get_rate(sys_clk); |
516 | |||
517 | if (soc_is_dra7xx()) { | ||
518 | /* | ||
519 | * Errata i856 says the 32.768KHz crystal does not start at | ||
520 | * power on, so the CPU falls back to an emulated 32KHz clock | ||
521 | * based on sysclk / 610 instead. This causes the master counter | ||
522 | * frequency to not be 6.144MHz but at sysclk / 610 * 375 / 2 | ||
523 | * (OR sysclk * 75 / 244) | ||
524 | * | ||
525 | * This affects at least the DRA7/AM572x 1.0, 1.1 revisions. | ||
526 | * Of course any board built without a populated 32.768KHz | ||
527 | * crystal would also need this fix even if the CPU is fixed | ||
528 | * later. | ||
529 | * | ||
530 | * Either case can be detected by using the two speedselect bits | ||
531 | * If they are not 0, then the 32.768KHz clock driving the | ||
532 | * coarse counter that corrects the fine counter every time it | ||
533 | * ticks is actually rate/610 rather than 32.768KHz and we | ||
534 | * should compensate to avoid the 570ppm (at 20MHz, much worse | ||
535 | * at other rates) too fast system time. | ||
536 | */ | ||
537 | reg = omap_ctrl_readl(DRA7_CTRL_CORE_BOOTSTRAP); | ||
538 | if (reg & DRA7_SPEEDSELECT_MASK) { | ||
539 | num = 75; | ||
540 | den = 244; | ||
541 | goto sysclk1_based; | ||
542 | } | ||
543 | } | ||
544 | |||
514 | /* Numerator/denumerator values refer TRM Realtime Counter section */ | 545 | /* Numerator/denumerator values refer TRM Realtime Counter section */ |
515 | switch (rate) { | 546 | switch (rate) { |
516 | case 1200000: | 547 | case 12000000: |
517 | num = 64; | 548 | num = 64; |
518 | den = 125; | 549 | den = 125; |
519 | break; | 550 | break; |
520 | case 1300000: | 551 | case 13000000: |
521 | num = 768; | 552 | num = 768; |
522 | den = 1625; | 553 | den = 1625; |
523 | break; | 554 | break; |
524 | case 19200000: | 555 | case 19200000: |
525 | num = 8; | 556 | num = 8; |
526 | den = 25; | 557 | den = 25; |
527 | break; | 558 | break; |
528 | case 20000000: | 559 | case 20000000: |
529 | num = 192; | 560 | num = 192; |
530 | den = 625; | 561 | den = 625; |
531 | break; | 562 | break; |
532 | case 2600000: | 563 | case 26000000: |
533 | num = 384; | 564 | num = 384; |
534 | den = 1625; | 565 | den = 1625; |
535 | break; | 566 | break; |
536 | case 2700000: | 567 | case 27000000: |
537 | num = 256; | 568 | num = 256; |
538 | den = 1125; | 569 | den = 1125; |
539 | break; | 570 | break; |
540 | case 38400000: | 571 | case 38400000: |
541 | default: | 572 | default: |
542 | /* Program it for 38.4 MHz */ | 573 | /* Program it for 38.4 MHz */ |
543 | num = 4; | 574 | num = 4; |
544 | den = 25; | 575 | den = 25; |
545 | break; | 576 | break; |
546 | } | 577 | } |
547 | 578 | ||
579 | sysclk1_based: | ||
548 | /* Program numerator and denumerator registers */ | 580 | /* Program numerator and denumerator registers */ |
549 | reg = readl_relaxed(base + INCREMENTER_NUMERATOR_OFFSET) & | 581 | reg = readl_relaxed(base + INCREMENTER_NUMERATOR_OFFSET) & |
550 | NUMERATOR_DENUMERATOR_MASK; | 582 | NUMERATOR_DENUMERATOR_MASK; |
551 | reg |= num; | 583 | reg |= num; |
552 | writel_relaxed(reg, base + INCREMENTER_NUMERATOR_OFFSET); | 584 | writel_relaxed(reg, base + INCREMENTER_NUMERATOR_OFFSET); |
553 | 585 | ||
554 | reg = readl_relaxed(base + INCREMENTER_DENUMERATOR_RELOAD_OFFSET) & | 586 | reg = readl_relaxed(base + INCREMENTER_DENUMERATOR_RELOAD_OFFSET) & |
555 | NUMERATOR_DENUMERATOR_MASK; | 587 | NUMERATOR_DENUMERATOR_MASK; |
556 | reg |= den; | 588 | reg |= den; |
557 | writel_relaxed(reg, base + INCREMENTER_DENUMERATOR_RELOAD_OFFSET); | 589 | writel_relaxed(reg, base + INCREMENTER_DENUMERATOR_RELOAD_OFFSET); |
558 | 590 | ||
559 | arch_timer_freq = (rate / den) * num; | 591 | arch_timer_freq = DIV_ROUND_UP_ULL(rate * num, den); |
560 | set_cntfreq(); | 592 | set_cntfreq(); |
561 | 593 | ||
562 | iounmap(base); | 594 | iounmap(base); |
563 | } | 595 | } |
564 | #else | 596 | #else |
565 | static inline void __init realtime_counter_init(void) | 597 | static inline void __init realtime_counter_init(void) |
566 | {} | 598 | {} |
567 | #endif | 599 | #endif |
568 | 600 | ||
569 | #define OMAP_SYS_GP_TIMER_INIT(name, clkev_nr, clkev_src, clkev_prop, \ | 601 | #define OMAP_SYS_GP_TIMER_INIT(name, clkev_nr, clkev_src, clkev_prop, \ |
570 | clksrc_nr, clksrc_src, clksrc_prop) \ | 602 | clksrc_nr, clksrc_src, clksrc_prop) \ |
571 | void __init omap##name##_gptimer_timer_init(void) \ | 603 | void __init omap##name##_gptimer_timer_init(void) \ |
572 | { \ | 604 | { \ |
573 | omap_clk_init(); \ | 605 | omap_clk_init(); \ |
574 | omap_dmtimer_init(); \ | 606 | omap_dmtimer_init(); \ |
575 | omap2_gp_clockevent_init((clkev_nr), clkev_src, clkev_prop); \ | 607 | omap2_gp_clockevent_init((clkev_nr), clkev_src, clkev_prop); \ |
576 | omap2_gptimer_clocksource_init((clksrc_nr), clksrc_src, \ | 608 | omap2_gptimer_clocksource_init((clksrc_nr), clksrc_src, \ |
577 | clksrc_prop); \ | 609 | clksrc_prop); \ |
578 | } | 610 | } |
579 | 611 | ||
580 | #define OMAP_SYS_32K_TIMER_INIT(name, clkev_nr, clkev_src, clkev_prop, \ | 612 | #define OMAP_SYS_32K_TIMER_INIT(name, clkev_nr, clkev_src, clkev_prop, \ |
581 | clksrc_nr, clksrc_src, clksrc_prop) \ | 613 | clksrc_nr, clksrc_src, clksrc_prop) \ |
582 | void __init omap##name##_sync32k_timer_init(void) \ | 614 | void __init omap##name##_sync32k_timer_init(void) \ |
583 | { \ | 615 | { \ |
584 | omap_clk_init(); \ | 616 | omap_clk_init(); \ |
585 | omap_dmtimer_init(); \ | 617 | omap_dmtimer_init(); \ |
586 | omap2_gp_clockevent_init((clkev_nr), clkev_src, clkev_prop); \ | 618 | omap2_gp_clockevent_init((clkev_nr), clkev_src, clkev_prop); \ |
587 | /* Enable the use of clocksource="gp_timer" kernel parameter */ \ | 619 | /* Enable the use of clocksource="gp_timer" kernel parameter */ \ |
588 | if (use_gptimer_clksrc) \ | 620 | if (use_gptimer_clksrc) \ |
589 | omap2_gptimer_clocksource_init((clksrc_nr), clksrc_src, \ | 621 | omap2_gptimer_clocksource_init((clksrc_nr), clksrc_src, \ |
590 | clksrc_prop); \ | 622 | clksrc_prop); \ |
591 | else \ | 623 | else \ |
592 | omap2_sync32k_clocksource_init(); \ | 624 | omap2_sync32k_clocksource_init(); \ |
593 | } | 625 | } |
594 | 626 | ||
595 | #ifdef CONFIG_ARCH_OMAP2 | 627 | #ifdef CONFIG_ARCH_OMAP2 |
596 | OMAP_SYS_32K_TIMER_INIT(2, 1, "timer_32k_ck", "ti,timer-alwon", | 628 | OMAP_SYS_32K_TIMER_INIT(2, 1, "timer_32k_ck", "ti,timer-alwon", |
597 | 2, "timer_sys_ck", NULL); | 629 | 2, "timer_sys_ck", NULL); |
598 | #endif /* CONFIG_ARCH_OMAP2 */ | 630 | #endif /* CONFIG_ARCH_OMAP2 */ |
599 | 631 | ||
600 | #if defined(CONFIG_ARCH_OMAP3) || defined(CONFIG_SOC_AM43XX) | 632 | #if defined(CONFIG_ARCH_OMAP3) || defined(CONFIG_SOC_AM43XX) |
601 | OMAP_SYS_32K_TIMER_INIT(3, 1, "timer_32k_ck", "ti,timer-alwon", | 633 | OMAP_SYS_32K_TIMER_INIT(3, 1, "timer_32k_ck", "ti,timer-alwon", |
602 | 2, "timer_sys_ck", NULL); | 634 | 2, "timer_sys_ck", NULL); |
603 | OMAP_SYS_32K_TIMER_INIT(3_secure, 12, "secure_32k_fck", "ti,timer-secure", | 635 | OMAP_SYS_32K_TIMER_INIT(3_secure, 12, "secure_32k_fck", "ti,timer-secure", |
604 | 2, "timer_sys_ck", NULL); | 636 | 2, "timer_sys_ck", NULL); |
605 | #endif /* CONFIG_ARCH_OMAP3 */ | 637 | #endif /* CONFIG_ARCH_OMAP3 */ |
606 | 638 | ||
607 | #if defined(CONFIG_ARCH_OMAP3) || defined(CONFIG_SOC_AM33XX) || \ | 639 | #if defined(CONFIG_ARCH_OMAP3) || defined(CONFIG_SOC_AM33XX) || \ |
608 | defined(CONFIG_SOC_AM43XX) | 640 | defined(CONFIG_SOC_AM43XX) |
609 | OMAP_SYS_GP_TIMER_INIT(3, 2, "timer_sys_ck", NULL, | 641 | OMAP_SYS_GP_TIMER_INIT(3, 2, "timer_sys_ck", NULL, |
610 | 1, "timer_sys_ck", "ti,timer-alwon"); | 642 | 1, "timer_sys_ck", "ti,timer-alwon"); |
611 | #endif | 643 | #endif |
612 | 644 | ||
613 | #if defined(CONFIG_ARCH_OMAP4) || defined(CONFIG_SOC_OMAP5) || \ | 645 | #if defined(CONFIG_ARCH_OMAP4) || defined(CONFIG_SOC_OMAP5) || \ |
614 | defined(CONFIG_SOC_DRA7XX) | 646 | defined(CONFIG_SOC_DRA7XX) |
615 | static OMAP_SYS_32K_TIMER_INIT(4, 1, "timer_32k_ck", "ti,timer-alwon", | 647 | static OMAP_SYS_32K_TIMER_INIT(4, 1, "timer_32k_ck", "ti,timer-alwon", |
616 | 2, "sys_clkin_ck", NULL); | 648 | 2, "sys_clkin_ck", NULL); |
617 | #endif | 649 | #endif |
618 | 650 | ||
619 | #ifdef CONFIG_ARCH_OMAP4 | 651 | #ifdef CONFIG_ARCH_OMAP4 |
620 | #ifdef CONFIG_HAVE_ARM_TWD | 652 | #ifdef CONFIG_HAVE_ARM_TWD |
621 | static DEFINE_TWD_LOCAL_TIMER(twd_local_timer, OMAP44XX_LOCAL_TWD_BASE, 29); | 653 | static DEFINE_TWD_LOCAL_TIMER(twd_local_timer, OMAP44XX_LOCAL_TWD_BASE, 29); |
622 | void __init omap4_local_timer_init(void) | 654 | void __init omap4_local_timer_init(void) |
623 | { | 655 | { |
624 | omap4_sync32k_timer_init(); | 656 | omap4_sync32k_timer_init(); |
625 | /* Local timers are not supprted on OMAP4430 ES1.0 */ | 657 | /* Local timers are not supprted on OMAP4430 ES1.0 */ |
626 | if (omap_rev() != OMAP4430_REV_ES1_0) { | 658 | if (omap_rev() != OMAP4430_REV_ES1_0) { |
627 | int err; | 659 | int err; |
628 | 660 | ||
629 | if (of_have_populated_dt()) { | 661 | if (of_have_populated_dt()) { |
630 | clocksource_of_init(); | 662 | clocksource_of_init(); |
631 | return; | 663 | return; |
632 | } | 664 | } |
633 | 665 | ||
634 | err = twd_local_timer_register(&twd_local_timer); | 666 | err = twd_local_timer_register(&twd_local_timer); |
635 | if (err) | 667 | if (err) |
636 | pr_err("twd_local_timer_register failed %d\n", err); | 668 | pr_err("twd_local_timer_register failed %d\n", err); |
637 | } | 669 | } |
638 | } | 670 | } |
639 | #else | 671 | #else |
640 | void __init omap4_local_timer_init(void) | 672 | void __init omap4_local_timer_init(void) |
641 | { | 673 | { |
642 | omap4_sync32k_timer_init(); | 674 | omap4_sync32k_timer_init(); |
643 | } | 675 | } |
644 | #endif /* CONFIG_HAVE_ARM_TWD */ | 676 | #endif /* CONFIG_HAVE_ARM_TWD */ |
645 | #endif /* CONFIG_ARCH_OMAP4 */ | 677 | #endif /* CONFIG_ARCH_OMAP4 */ |
646 | 678 | ||
647 | #if defined(CONFIG_SOC_OMAP5) || defined(CONFIG_SOC_DRA7XX) | 679 | #if defined(CONFIG_SOC_OMAP5) || defined(CONFIG_SOC_DRA7XX) |
648 | void __init omap5_realtime_timer_init(void) | 680 | void __init omap5_realtime_timer_init(void) |
649 | { | 681 | { |
650 | omap4_sync32k_timer_init(); | 682 | omap4_sync32k_timer_init(); |
651 | realtime_counter_init(); | 683 | realtime_counter_init(); |
652 | 684 | ||
653 | clocksource_of_init(); | 685 | clocksource_of_init(); |
654 | } | 686 | } |
655 | #endif /* CONFIG_SOC_OMAP5 || CONFIG_SOC_DRA7XX */ | 687 | #endif /* CONFIG_SOC_OMAP5 || CONFIG_SOC_DRA7XX */ |
656 | 688 | ||
657 | /** | 689 | /** |
658 | * omap_timer_init - build and register timer device with an | 690 | * omap_timer_init - build and register timer device with an |
659 | * associated timer hwmod | 691 | * associated timer hwmod |
660 | * @oh: timer hwmod pointer to be used to build timer device | 692 | * @oh: timer hwmod pointer to be used to build timer device |
661 | * @user: parameter that can be passed from calling hwmod API | 693 | * @user: parameter that can be passed from calling hwmod API |
662 | * | 694 | * |
663 | * Called by omap_hwmod_for_each_by_class to register each of the timer | 695 | * Called by omap_hwmod_for_each_by_class to register each of the timer |
664 | * devices present in the system. The number of timer devices is known | 696 | * devices present in the system. The number of timer devices is known |
665 | * by parsing through the hwmod database for a given class name. At the | 697 | * by parsing through the hwmod database for a given class name. At the |
666 | * end of function call memory is allocated for timer device and it is | 698 | * end of function call memory is allocated for timer device and it is |
667 | * registered to the framework ready to be proved by the driver. | 699 | * registered to the framework ready to be proved by the driver. |
668 | */ | 700 | */ |
669 | static int __init omap_timer_init(struct omap_hwmod *oh, void *unused) | 701 | static int __init omap_timer_init(struct omap_hwmod *oh, void *unused) |
670 | { | 702 | { |
671 | int id; | 703 | int id; |
672 | int ret = 0; | 704 | int ret = 0; |
673 | char *name = "omap_timer"; | 705 | char *name = "omap_timer"; |
674 | struct dmtimer_platform_data *pdata; | 706 | struct dmtimer_platform_data *pdata; |
675 | struct platform_device *pdev; | 707 | struct platform_device *pdev; |
676 | struct omap_timer_capability_dev_attr *timer_dev_attr; | 708 | struct omap_timer_capability_dev_attr *timer_dev_attr; |
677 | 709 | ||
678 | pr_debug("%s: %s\n", __func__, oh->name); | 710 | pr_debug("%s: %s\n", __func__, oh->name); |
679 | 711 | ||
680 | /* on secure device, do not register secure timer */ | 712 | /* on secure device, do not register secure timer */ |
681 | timer_dev_attr = oh->dev_attr; | 713 | timer_dev_attr = oh->dev_attr; |
682 | if (omap_type() != OMAP2_DEVICE_TYPE_GP && timer_dev_attr) | 714 | if (omap_type() != OMAP2_DEVICE_TYPE_GP && timer_dev_attr) |
683 | if (timer_dev_attr->timer_capability == OMAP_TIMER_SECURE) | 715 | if (timer_dev_attr->timer_capability == OMAP_TIMER_SECURE) |
684 | return ret; | 716 | return ret; |
685 | 717 | ||
686 | pdata = kzalloc(sizeof(*pdata), GFP_KERNEL); | 718 | pdata = kzalloc(sizeof(*pdata), GFP_KERNEL); |
687 | if (!pdata) { | 719 | if (!pdata) { |
688 | pr_err("%s: No memory for [%s]\n", __func__, oh->name); | 720 | pr_err("%s: No memory for [%s]\n", __func__, oh->name); |
689 | return -ENOMEM; | 721 | return -ENOMEM; |
690 | } | 722 | } |
691 | 723 | ||
692 | /* | 724 | /* |
693 | * Extract the IDs from name field in hwmod database | 725 | * Extract the IDs from name field in hwmod database |
694 | * and use the same for constructing ids' for the | 726 | * and use the same for constructing ids' for the |
695 | * timer devices. In a way, we are avoiding usage of | 727 | * timer devices. In a way, we are avoiding usage of |
696 | * static variable witin the function to do the same. | 728 | * static variable witin the function to do the same. |
697 | * CAUTION: We have to be careful and make sure the | 729 | * CAUTION: We have to be careful and make sure the |
698 | * name in hwmod database does not change in which case | 730 | * name in hwmod database does not change in which case |
699 | * we might either make corresponding change here or | 731 | * we might either make corresponding change here or |
700 | * switch back static variable mechanism. | 732 | * switch back static variable mechanism. |
701 | */ | 733 | */ |
702 | sscanf(oh->name, "timer%2d", &id); | 734 | sscanf(oh->name, "timer%2d", &id); |
703 | 735 | ||
704 | if (timer_dev_attr) | 736 | if (timer_dev_attr) |
705 | pdata->timer_capability = timer_dev_attr->timer_capability; | 737 | pdata->timer_capability = timer_dev_attr->timer_capability; |
706 | 738 | ||
707 | pdata->timer_errata = omap_dm_timer_get_errata(); | 739 | pdata->timer_errata = omap_dm_timer_get_errata(); |
708 | pdata->get_context_loss_count = omap_pm_get_dev_context_loss_count; | 740 | pdata->get_context_loss_count = omap_pm_get_dev_context_loss_count; |
709 | 741 | ||
710 | pdev = omap_device_build(name, id, oh, pdata, sizeof(*pdata)); | 742 | pdev = omap_device_build(name, id, oh, pdata, sizeof(*pdata)); |
711 | 743 | ||
712 | if (IS_ERR(pdev)) { | 744 | if (IS_ERR(pdev)) { |
713 | pr_err("%s: Can't build omap_device for %s: %s.\n", | 745 | pr_err("%s: Can't build omap_device for %s: %s.\n", |
714 | __func__, name, oh->name); | 746 | __func__, name, oh->name); |
715 | ret = -EINVAL; | 747 | ret = -EINVAL; |
716 | } | 748 | } |
717 | 749 | ||
718 | kfree(pdata); | 750 | kfree(pdata); |
719 | 751 | ||
720 | return ret; | 752 | return ret; |
721 | } | 753 | } |
722 | 754 | ||
723 | /** | 755 | /** |
724 | * omap2_dm_timer_init - top level regular device initialization | 756 | * omap2_dm_timer_init - top level regular device initialization |
725 | * | 757 | * |
726 | * Uses dedicated hwmod api to parse through hwmod database for | 758 | * Uses dedicated hwmod api to parse through hwmod database for |
727 | * given class name and then build and register the timer device. | 759 | * given class name and then build and register the timer device. |
728 | */ | 760 | */ |
729 | static int __init omap2_dm_timer_init(void) | 761 | static int __init omap2_dm_timer_init(void) |
730 | { | 762 | { |
731 | int ret; | 763 | int ret; |
732 | 764 | ||
733 | /* If dtb is there, the devices will be created dynamically */ | 765 | /* If dtb is there, the devices will be created dynamically */ |
734 | if (of_have_populated_dt()) | 766 | if (of_have_populated_dt()) |
735 | return -ENODEV; | 767 | return -ENODEV; |
736 | 768 | ||
737 | ret = omap_hwmod_for_each_by_class("timer", omap_timer_init, NULL); | 769 | ret = omap_hwmod_for_each_by_class("timer", omap_timer_init, NULL); |
738 | if (unlikely(ret)) { | 770 | if (unlikely(ret)) { |
739 | pr_err("%s: device registration failed.\n", __func__); | 771 | pr_err("%s: device registration failed.\n", __func__); |
740 | return -EINVAL; | 772 | return -EINVAL; |
741 | } | 773 | } |
742 | 774 | ||
743 | return 0; | 775 | return 0; |
744 | } | 776 | } |
745 | omap_arch_initcall(omap2_dm_timer_init); | 777 | omap_arch_initcall(omap2_dm_timer_init); |
746 | 778 | ||
747 | /** | 779 | /** |
748 | * omap2_override_clocksource - clocksource override with user configuration | 780 | * omap2_override_clocksource - clocksource override with user configuration |
749 | * | 781 | * |
750 | * Allows user to override default clocksource, using kernel parameter | 782 | * Allows user to override default clocksource, using kernel parameter |
751 | * clocksource="gp_timer" (For all OMAP2PLUS architectures) | 783 | * clocksource="gp_timer" (For all OMAP2PLUS architectures) |
752 | * | 784 | * |
753 | * Note that, here we are using same standard kernel parameter "clocksource=", | 785 | * Note that, here we are using same standard kernel parameter "clocksource=", |
754 | * and not introducing any OMAP specific interface. | 786 | * and not introducing any OMAP specific interface. |
755 | */ | 787 | */ |
756 | static int __init omap2_override_clocksource(char *str) | 788 | static int __init omap2_override_clocksource(char *str) |
757 | { | 789 | { |
758 | if (!str) | 790 | if (!str) |
759 | return 0; | 791 | return 0; |
760 | /* | 792 | /* |
761 | * For OMAP architecture, we only have two options | 793 | * For OMAP architecture, we only have two options |
762 | * - sync_32k (default) | 794 | * - sync_32k (default) |
763 | * - gp_timer (sys_clk based) | 795 | * - gp_timer (sys_clk based) |
764 | */ | 796 | */ |
765 | if (!strcmp(str, "gp_timer")) | 797 | if (!strcmp(str, "gp_timer")) |
766 | use_gptimer_clksrc = true; | 798 | use_gptimer_clksrc = true; |
767 | 799 | ||
768 | return 0; | 800 | return 0; |
769 | } | 801 | } |
770 | early_param("clocksource", omap2_override_clocksource); | 802 | early_param("clocksource", omap2_override_clocksource); |
771 | 803 |