diff options
31 files changed, 1428 insertions, 777 deletions
diff --git a/Documentation/devicetree/bindings/arm/spear/shirq.txt b/Documentation/devicetree/bindings/arm/spear/shirq.txt new file mode 100644 index 00000000000..13fbb8866bd --- /dev/null +++ b/Documentation/devicetree/bindings/arm/spear/shirq.txt | |||
| @@ -0,0 +1,48 @@ | |||
| 1 | * SPEAr Shared IRQ layer (shirq) | ||
| 2 | |||
| 3 | SPEAr3xx architecture includes shared/multiplexed irqs for certain set | ||
| 4 | of devices. The multiplexor provides a single interrupt to parent | ||
| 5 | interrupt controller (VIC) on behalf of a group of devices. | ||
| 6 | |||
| 7 | There can be multiple groups available on SPEAr3xx variants but not | ||
| 8 | exceeding 4. The number of devices in a group can differ, further they | ||
| 9 | may share same set of status/mask registers spanning across different | ||
| 10 | bit masks. Also in some cases the group may not have enable or other | ||
| 11 | registers. This makes software little complex. | ||
| 12 | |||
| 13 | A single node in the device tree is used to describe the shared | ||
| 14 | interrupt multiplexor (one node for all groups). A group in the | ||
| 15 | interrupt controller shares config/control registers with other groups. | ||
| 16 | For example, a 32-bit interrupt enable/disable config register can | ||
| 17 | accommodate upto 4 interrupt groups. | ||
| 18 | |||
| 19 | Required properties: | ||
| 20 | - compatible: should be, either of | ||
| 21 | - "st,spear300-shirq" | ||
| 22 | - "st,spear310-shirq" | ||
| 23 | - "st,spear320-shirq" | ||
| 24 | - interrupt-controller: Identifies the node as an interrupt controller. | ||
| 25 | - #interrupt-cells: should be <1> which basically contains the offset | ||
| 26 | (starting from 0) of interrupts for all the groups. | ||
| 27 | - reg: Base address and size of shirq registers. | ||
| 28 | - interrupts: The list of interrupts generated by the groups which are | ||
| 29 | then connected to a parent interrupt controller. Each group is | ||
| 30 | associated with one of the interrupts, hence number of interrupts (to | ||
| 31 | parent) is equal to number of groups. The format of the interrupt | ||
| 32 | specifier depends in the interrupt parent controller. | ||
| 33 | |||
| 34 | Optional properties: | ||
| 35 | - interrupt-parent: pHandle of the parent interrupt controller, if not | ||
| 36 | inherited from the parent node. | ||
| 37 | |||
| 38 | Example: | ||
| 39 | |||
| 40 | The following is an example from the SPEAr320 SoC dtsi file. | ||
| 41 | |||
| 42 | shirq: interrupt-controller@0xb3000000 { | ||
| 43 | compatible = "st,spear320-shirq"; | ||
| 44 | reg = <0xb3000000 0x1000>; | ||
| 45 | interrupts = <28 29 30 1>; | ||
| 46 | #interrupt-cells = <1>; | ||
| 47 | interrupt-controller; | ||
| 48 | }; | ||
diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile index 2af359cfe98..d0ae1d3a90d 100644 --- a/arch/arm/boot/dts/Makefile +++ b/arch/arm/boot/dts/Makefile | |||
| @@ -126,7 +126,8 @@ dtb-$(CONFIG_ARCH_SPEAR13XX) += spear1310-evb.dtb \ | |||
| 126 | spear1340-evb.dtb | 126 | spear1340-evb.dtb |
| 127 | dtb-$(CONFIG_ARCH_SPEAR3XX)+= spear300-evb.dtb \ | 127 | dtb-$(CONFIG_ARCH_SPEAR3XX)+= spear300-evb.dtb \ |
| 128 | spear310-evb.dtb \ | 128 | spear310-evb.dtb \ |
| 129 | spear320-evb.dtb | 129 | spear320-evb.dtb \ |
| 130 | spear320-hmi.dtb | ||
| 130 | dtb-$(CONFIG_ARCH_SPEAR6XX)+= spear600-evb.dtb | 131 | dtb-$(CONFIG_ARCH_SPEAR6XX)+= spear600-evb.dtb |
| 131 | dtb-$(CONFIG_ARCH_SUNXI) += sun4i-cubieboard.dtb \ | 132 | dtb-$(CONFIG_ARCH_SUNXI) += sun4i-cubieboard.dtb \ |
| 132 | sun5i-olinuxino.dtb | 133 | sun5i-olinuxino.dtb |
diff --git a/arch/arm/boot/dts/spear1310-evb.dts b/arch/arm/boot/dts/spear1310-evb.dts index 2e4c5727468..b56a801e42a 100644 --- a/arch/arm/boot/dts/spear1310-evb.dts +++ b/arch/arm/boot/dts/spear1310-evb.dts | |||
| @@ -30,10 +30,14 @@ | |||
| 30 | pinctrl-0 = <&state_default>; | 30 | pinctrl-0 = <&state_default>; |
| 31 | 31 | ||
| 32 | state_default: pinmux { | 32 | state_default: pinmux { |
| 33 | i2c0-pmx { | 33 | i2c0 { |
| 34 | st,pins = "i2c0_grp"; | 34 | st,pins = "i2c0_grp"; |
| 35 | st,function = "i2c0"; | 35 | st,function = "i2c0"; |
| 36 | }; | 36 | }; |
| 37 | i2s0 { | ||
| 38 | st,pins = "i2s0_grp"; | ||
| 39 | st,function = "i2s0"; | ||
| 40 | }; | ||
| 37 | i2s1 { | 41 | i2s1 { |
| 38 | st,pins = "i2s1_grp"; | 42 | st,pins = "i2s1_grp"; |
| 39 | st,function = "i2s1"; | 43 | st,function = "i2s1"; |
| @@ -42,6 +46,10 @@ | |||
| 42 | st,pins = "arm_gpio_grp"; | 46 | st,pins = "arm_gpio_grp"; |
| 43 | st,function = "arm_gpio"; | 47 | st,function = "arm_gpio"; |
| 44 | }; | 48 | }; |
| 49 | clcd { | ||
| 50 | st,pins = "clcd_grp" , "clcd_high_res"; | ||
| 51 | st,function = "clcd"; | ||
| 52 | }; | ||
| 45 | eth { | 53 | eth { |
| 46 | st,pins = "gmii_grp"; | 54 | st,pins = "gmii_grp"; |
| 47 | st,function = "gmii"; | 55 | st,function = "gmii"; |
| @@ -74,11 +82,6 @@ | |||
| 74 | st,pins = "i2c_1_2_grp"; | 82 | st,pins = "i2c_1_2_grp"; |
| 75 | st,function = "i2c_1_2"; | 83 | st,function = "i2c_1_2"; |
| 76 | }; | 84 | }; |
| 77 | pci { | ||
| 78 | st,pins = "pcie0_grp","pcie1_grp", | ||
| 79 | "pcie2_grp"; | ||
| 80 | st,function = "pci"; | ||
| 81 | }; | ||
| 82 | smii { | 85 | smii { |
| 83 | st,pins = "smii_0_1_2_grp"; | 86 | st,pins = "smii_0_1_2_grp"; |
| 84 | st,function = "smii_0_1_2"; | 87 | st,function = "smii_0_1_2"; |
| @@ -88,6 +91,14 @@ | |||
| 88 | "nand_16bit_grp"; | 91 | "nand_16bit_grp"; |
| 89 | st,function = "nand"; | 92 | st,function = "nand"; |
| 90 | }; | 93 | }; |
| 94 | sata { | ||
| 95 | st,pins = "sata0_grp"; | ||
| 96 | st,function = "sata"; | ||
| 97 | }; | ||
| 98 | pcie { | ||
| 99 | st,pins = "pcie1_grp", "pcie2_grp"; | ||
| 100 | st,function = "pci_express"; | ||
| 101 | }; | ||
| 91 | }; | 102 | }; |
| 92 | }; | 103 | }; |
| 93 | 104 | ||
| @@ -109,9 +120,49 @@ | |||
| 109 | 120 | ||
| 110 | fsmc: flash@b0000000 { | 121 | fsmc: flash@b0000000 { |
| 111 | status = "okay"; | 122 | status = "okay"; |
| 123 | |||
| 124 | partition@0 { | ||
| 125 | label = "xloader"; | ||
| 126 | reg = <0x0 0x80000>; | ||
| 127 | }; | ||
| 128 | partition@80000 { | ||
| 129 | label = "u-boot"; | ||
| 130 | reg = <0x80000 0x140000>; | ||
| 131 | }; | ||
| 132 | partition@1C0000 { | ||
| 133 | label = "environment"; | ||
| 134 | reg = <0x1C0000 0x40000>; | ||
| 135 | }; | ||
| 136 | partition@200000 { | ||
| 137 | label = "dtb"; | ||
| 138 | reg = <0x200000 0x40000>; | ||
| 139 | }; | ||
| 140 | partition@240000 { | ||
| 141 | label = "linux"; | ||
| 142 | reg = <0x240000 0xC00000>; | ||
| 143 | }; | ||
| 144 | partition@E40000 { | ||
| 145 | label = "rootfs"; | ||
| 146 | reg = <0xE40000 0x0>; | ||
| 147 | }; | ||
| 148 | }; | ||
| 149 | |||
| 150 | gpio_keys { | ||
| 151 | compatible = "gpio-keys"; | ||
| 152 | #address-cells = <1>; | ||
| 153 | #size-cells = <0>; | ||
| 154 | |||
| 155 | button@1 { | ||
| 156 | label = "wakeup"; | ||
| 157 | linux,code = <0x100>; | ||
| 158 | gpios = <&gpio0 7 0x4>; | ||
| 159 | debounce-interval = <20>; | ||
| 160 | gpio-key,wakeup = <1>; | ||
| 161 | }; | ||
| 112 | }; | 162 | }; |
| 113 | 163 | ||
| 114 | gmac0: eth@e2000000 { | 164 | gmac0: eth@e2000000 { |
| 165 | phy-mode = "gmii"; | ||
| 115 | status = "okay"; | 166 | status = "okay"; |
| 116 | }; | 167 | }; |
| 117 | 168 | ||
| @@ -135,23 +186,27 @@ | |||
| 135 | }; | 186 | }; |
| 136 | partition@10000 { | 187 | partition@10000 { |
| 137 | label = "u-boot"; | 188 | label = "u-boot"; |
| 138 | reg = <0x10000 0x40000>; | 189 | reg = <0x10000 0x50000>; |
| 190 | }; | ||
| 191 | partition@60000 { | ||
| 192 | label = "environment"; | ||
| 193 | reg = <0x60000 0x10000>; | ||
| 139 | }; | 194 | }; |
| 140 | partition@50000 { | 195 | partition@70000 { |
| 196 | label = "dtb"; | ||
| 197 | reg = <0x70000 0x10000>; | ||
| 198 | }; | ||
| 199 | partition@80000 { | ||
| 141 | label = "linux"; | 200 | label = "linux"; |
| 142 | reg = <0x50000 0x2c0000>; | 201 | reg = <0x80000 0x310000>; |
| 143 | }; | 202 | }; |
| 144 | partition@310000 { | 203 | partition@390000 { |
| 145 | label = "rootfs"; | 204 | label = "rootfs"; |
| 146 | reg = <0x310000 0x4f0000>; | 205 | reg = <0x390000 0x0>; |
| 147 | }; | 206 | }; |
| 148 | }; | 207 | }; |
| 149 | }; | 208 | }; |
| 150 | 209 | ||
| 151 | spi0: spi@e0100000 { | ||
| 152 | status = "okay"; | ||
| 153 | }; | ||
| 154 | |||
| 155 | ehci@e4800000 { | 210 | ehci@e4800000 { |
| 156 | status = "okay"; | 211 | status = "okay"; |
| 157 | }; | 212 | }; |
| @@ -189,10 +244,6 @@ | |||
| 189 | status = "okay"; | 244 | status = "okay"; |
| 190 | }; | 245 | }; |
| 191 | 246 | ||
| 192 | i2c1: i2c@5cd00000 { | ||
| 193 | status = "okay"; | ||
| 194 | }; | ||
| 195 | |||
| 196 | kbd@e0300000 { | 247 | kbd@e0300000 { |
| 197 | linux,keymap = < 0x00000001 | 248 | linux,keymap = < 0x00000001 |
| 198 | 0x00010002 | 249 | 0x00010002 |
| @@ -277,6 +328,7 @@ | |||
| 277 | 0x08080052 >; | 328 | 0x08080052 >; |
| 278 | autorepeat; | 329 | autorepeat; |
| 279 | st,mode = <0>; | 330 | st,mode = <0>; |
| 331 | suspended_rate = <2000000>; | ||
| 280 | status = "okay"; | 332 | status = "okay"; |
| 281 | }; | 333 | }; |
| 282 | 334 | ||
| @@ -286,6 +338,81 @@ | |||
| 286 | 338 | ||
| 287 | serial@e0000000 { | 339 | serial@e0000000 { |
| 288 | status = "okay"; | 340 | status = "okay"; |
| 341 | pinctrl-names = "default"; | ||
| 342 | pinctrl-0 = <>; | ||
| 343 | }; | ||
| 344 | |||
| 345 | spi0: spi@e0100000 { | ||
| 346 | status = "okay"; | ||
| 347 | num-cs = <3>; | ||
| 348 | cs-gpios = <&gpio1 7 0>, <&spics 0>, <&spics 1>; | ||
| 349 | |||
| 350 | stmpe610@0 { | ||
| 351 | compatible = "st,stmpe610"; | ||
| 352 | reg = <0>; | ||
| 353 | #address-cells = <1>; | ||
| 354 | #size-cells = <0>; | ||
| 355 | spi-max-frequency = <1000000>; | ||
| 356 | spi-cpha; | ||
| 357 | pl022,hierarchy = <0>; | ||
| 358 | pl022,interface = <0>; | ||
| 359 | pl022,slave-tx-disable; | ||
| 360 | pl022,com-mode = <0>; | ||
| 361 | pl022,rx-level-trig = <0>; | ||
| 362 | pl022,tx-level-trig = <0>; | ||
| 363 | pl022,ctrl-len = <0x7>; | ||
| 364 | pl022,wait-state = <0>; | ||
| 365 | pl022,duplex = <0>; | ||
| 366 | interrupts = <6 0x4>; | ||
| 367 | interrupt-parent = <&gpio1>; | ||
| 368 | irq-trigger = <0x2>; | ||
| 369 | |||
| 370 | stmpe_touchscreen { | ||
| 371 | compatible = "st,stmpe-ts"; | ||
| 372 | ts,sample-time = <4>; | ||
| 373 | ts,mod-12b = <1>; | ||
| 374 | ts,ref-sel = <0>; | ||
| 375 | ts,adc-freq = <1>; | ||
| 376 | ts,ave-ctrl = <1>; | ||
| 377 | ts,touch-det-delay = <2>; | ||
| 378 | ts,settling = <2>; | ||
| 379 | ts,fraction-z = <7>; | ||
| 380 | ts,i-drive = <1>; | ||
| 381 | }; | ||
| 382 | }; | ||
| 383 | |||
| 384 | m25p80@1 { | ||
| 385 | compatible = "st,m25p80"; | ||
| 386 | reg = <1>; | ||
| 387 | spi-max-frequency = <12000000>; | ||
| 388 | spi-cpol; | ||
| 389 | spi-cpha; | ||
| 390 | pl022,hierarchy = <0>; | ||
| 391 | pl022,interface = <0>; | ||
| 392 | pl022,slave-tx-disable; | ||
| 393 | pl022,com-mode = <0x2>; | ||
| 394 | pl022,rx-level-trig = <0>; | ||
| 395 | pl022,tx-level-trig = <0>; | ||
| 396 | pl022,ctrl-len = <0x11>; | ||
| 397 | pl022,wait-state = <0>; | ||
| 398 | pl022,duplex = <0>; | ||
| 399 | }; | ||
| 400 | |||
| 401 | spidev@2 { | ||
| 402 | compatible = "spidev"; | ||
| 403 | reg = <2>; | ||
| 404 | spi-max-frequency = <25000000>; | ||
| 405 | spi-cpha; | ||
| 406 | pl022,hierarchy = <0>; | ||
| 407 | pl022,interface = <0>; | ||
| 408 | pl022,slave-tx-disable; | ||
| 409 | pl022,com-mode = <0x2>; | ||
| 410 | pl022,rx-level-trig = <0>; | ||
| 411 | pl022,tx-level-trig = <0>; | ||
| 412 | pl022,ctrl-len = <0x11>; | ||
| 413 | pl022,wait-state = <0>; | ||
| 414 | pl022,duplex = <0>; | ||
| 415 | }; | ||
| 289 | }; | 416 | }; |
| 290 | 417 | ||
| 291 | wdt@ec800620 { | 418 | wdt@ec800620 { |
diff --git a/arch/arm/boot/dts/spear1310.dtsi b/arch/arm/boot/dts/spear1310.dtsi index 7cd25eb4f8e..1513c1927cc 100644 --- a/arch/arm/boot/dts/spear1310.dtsi +++ b/arch/arm/boot/dts/spear1310.dtsi | |||
| @@ -17,6 +17,18 @@ | |||
| 17 | compatible = "st,spear1310"; | 17 | compatible = "st,spear1310"; |
| 18 | 18 | ||
| 19 | ahb { | 19 | ahb { |
| 20 | spics: spics@e0700000{ | ||
| 21 | compatible = "st,spear-spics-gpio"; | ||
| 22 | reg = <0xe0700000 0x1000>; | ||
| 23 | st-spics,peripcfg-reg = <0x3b0>; | ||
| 24 | st-spics,sw-enable-bit = <12>; | ||
| 25 | st-spics,cs-value-bit = <11>; | ||
| 26 | st-spics,cs-enable-mask = <3>; | ||
| 27 | st-spics,cs-enable-shift = <8>; | ||
| 28 | gpio-controller; | ||
| 29 | #gpio-cells = <2>; | ||
| 30 | }; | ||
| 31 | |||
| 20 | ahci@b1000000 { | 32 | ahci@b1000000 { |
| 21 | compatible = "snps,spear-ahci"; | 33 | compatible = "snps,spear-ahci"; |
| 22 | reg = <0xb1000000 0x10000>; | 34 | reg = <0xb1000000 0x10000>; |
| @@ -43,6 +55,7 @@ | |||
| 43 | reg = <0x5c400000 0x8000>; | 55 | reg = <0x5c400000 0x8000>; |
| 44 | interrupts = <0 95 0x4>; | 56 | interrupts = <0 95 0x4>; |
| 45 | interrupt-names = "macirq"; | 57 | interrupt-names = "macirq"; |
| 58 | phy-mode = "mii"; | ||
| 46 | status = "disabled"; | 59 | status = "disabled"; |
| 47 | }; | 60 | }; |
| 48 | 61 | ||
| @@ -51,6 +64,7 @@ | |||
| 51 | reg = <0x5c500000 0x8000>; | 64 | reg = <0x5c500000 0x8000>; |
| 52 | interrupts = <0 96 0x4>; | 65 | interrupts = <0 96 0x4>; |
| 53 | interrupt-names = "macirq"; | 66 | interrupt-names = "macirq"; |
| 67 | phy-mode = "mii"; | ||
| 54 | status = "disabled"; | 68 | status = "disabled"; |
| 55 | }; | 69 | }; |
| 56 | 70 | ||
| @@ -59,6 +73,7 @@ | |||
| 59 | reg = <0x5c600000 0x8000>; | 73 | reg = <0x5c600000 0x8000>; |
| 60 | interrupts = <0 97 0x4>; | 74 | interrupts = <0 97 0x4>; |
| 61 | interrupt-names = "macirq"; | 75 | interrupt-names = "macirq"; |
| 76 | phy-mode = "rmii"; | ||
| 62 | status = "disabled"; | 77 | status = "disabled"; |
| 63 | }; | 78 | }; |
| 64 | 79 | ||
| @@ -67,6 +82,7 @@ | |||
| 67 | reg = <0x5c700000 0x8000>; | 82 | reg = <0x5c700000 0x8000>; |
| 68 | interrupts = <0 98 0x4>; | 83 | interrupts = <0 98 0x4>; |
| 69 | interrupt-names = "macirq"; | 84 | interrupt-names = "macirq"; |
| 85 | phy-mode = "rgmii"; | ||
| 70 | status = "disabled"; | 86 | status = "disabled"; |
| 71 | }; | 87 | }; |
| 72 | 88 | ||
| @@ -76,13 +92,6 @@ | |||
| 76 | #gpio-range-cells = <2>; | 92 | #gpio-range-cells = <2>; |
| 77 | }; | 93 | }; |
| 78 | 94 | ||
| 79 | spi1: spi@5d400000 { | ||
| 80 | compatible = "arm,pl022", "arm,primecell"; | ||
| 81 | reg = <0x5d400000 0x1000>; | ||
| 82 | interrupts = <0 99 0x4>; | ||
| 83 | status = "disabled"; | ||
| 84 | }; | ||
| 85 | |||
| 86 | apb { | 95 | apb { |
| 87 | i2c1: i2c@5cd00000 { | 96 | i2c1: i2c@5cd00000 { |
| 88 | #address-cells = <1>; | 97 | #address-cells = <1>; |
| @@ -147,6 +156,15 @@ | |||
| 147 | status = "disabled"; | 156 | status = "disabled"; |
| 148 | }; | 157 | }; |
| 149 | 158 | ||
| 159 | spi1: spi@5d400000 { | ||
| 160 | compatible = "arm,pl022", "arm,primecell"; | ||
| 161 | reg = <0x5d400000 0x1000>; | ||
| 162 | interrupts = <0 99 0x4>; | ||
| 163 | #address-cells = <1>; | ||
| 164 | #size-cells = <0>; | ||
| 165 | status = "disabled"; | ||
| 166 | }; | ||
| 167 | |||
| 150 | serial@5c800000 { | 168 | serial@5c800000 { |
| 151 | compatible = "arm,pl011", "arm,primecell"; | 169 | compatible = "arm,pl011", "arm,primecell"; |
| 152 | reg = <0x5c800000 0x1000>; | 170 | reg = <0x5c800000 0x1000>; |
diff --git a/arch/arm/boot/dts/spear1340-evb.dts b/arch/arm/boot/dts/spear1340-evb.dts index 045f7123ffa..d6c30ae0a8d 100644 --- a/arch/arm/boot/dts/spear1340-evb.dts +++ b/arch/arm/boot/dts/spear1340-evb.dts | |||
| @@ -38,20 +38,15 @@ | |||
| 38 | st,pins = "fsmc_8bit_grp"; | 38 | st,pins = "fsmc_8bit_grp"; |
| 39 | st,function = "fsmc"; | 39 | st,function = "fsmc"; |
| 40 | }; | 40 | }; |
| 41 | kbd { | ||
| 42 | st,pins = "keyboard_row_col_grp", | ||
| 43 | "keyboard_col5_grp"; | ||
| 44 | st,function = "keyboard"; | ||
| 45 | }; | ||
| 46 | uart0 { | 41 | uart0 { |
| 47 | st,pins = "uart0_grp", "uart0_enh_grp"; | 42 | st,pins = "uart0_grp"; |
| 48 | st,function = "uart0"; | 43 | st,function = "uart0"; |
| 49 | }; | 44 | }; |
| 50 | i2c0-pmx { | 45 | i2c0 { |
| 51 | st,pins = "i2c0_grp"; | 46 | st,pins = "i2c0_grp"; |
| 52 | st,function = "i2c0"; | 47 | st,function = "i2c0"; |
| 53 | }; | 48 | }; |
| 54 | i2c1-pmx { | 49 | i2c1 { |
| 55 | st,pins = "i2c1_grp"; | 50 | st,pins = "i2c1_grp"; |
| 56 | st,function = "i2c1"; | 51 | st,function = "i2c1"; |
| 57 | }; | 52 | }; |
| @@ -64,14 +59,9 @@ | |||
| 64 | st,function = "spdif_out"; | 59 | st,function = "spdif_out"; |
| 65 | }; | 60 | }; |
| 66 | ssp0 { | 61 | ssp0 { |
| 67 | st,pins = "ssp0_grp", "ssp0_cs1_grp", | 62 | st,pins = "ssp0_grp", "ssp0_cs1_grp", "ssp0_cs2_grp", "ssp0_cs3_grp"; |
| 68 | "ssp0_cs3_grp"; | ||
| 69 | st,function = "ssp0"; | 63 | st,function = "ssp0"; |
| 70 | }; | 64 | }; |
| 71 | pwm { | ||
| 72 | st,pins = "pwm2_grp", "pwm3_grp"; | ||
| 73 | st,function = "pwm"; | ||
| 74 | }; | ||
| 75 | smi-pmx { | 65 | smi-pmx { |
| 76 | st,pins = "smi_grp"; | 66 | st,pins = "smi_grp"; |
| 77 | st,function = "smi"; | 67 | st,function = "smi"; |
| @@ -84,6 +74,18 @@ | |||
| 84 | st,pins = "gmii_grp", "rgmii_grp"; | 74 | st,pins = "gmii_grp", "rgmii_grp"; |
| 85 | st,function = "gmac"; | 75 | st,function = "gmac"; |
| 86 | }; | 76 | }; |
| 77 | cam0 { | ||
| 78 | st,pins = "cam0_grp"; | ||
| 79 | st,function = "cam0"; | ||
| 80 | }; | ||
| 81 | cam1 { | ||
| 82 | st,pins = "cam1_grp"; | ||
| 83 | st,function = "cam1"; | ||
| 84 | }; | ||
| 85 | cam2 { | ||
| 86 | st,pins = "cam2_grp"; | ||
| 87 | st,function = "cam2"; | ||
| 88 | }; | ||
| 87 | cam3 { | 89 | cam3 { |
| 88 | st,pins = "cam3_grp"; | 90 | st,pins = "cam3_grp"; |
| 89 | st,function = "cam3"; | 91 | st,function = "cam3"; |
| @@ -108,9 +110,18 @@ | |||
| 108 | st,pins = "sata_grp"; | 110 | st,pins = "sata_grp"; |
| 109 | st,function = "sata"; | 111 | st,function = "sata"; |
| 110 | }; | 112 | }; |
| 113 | pcie { | ||
| 114 | st,pins = "pcie_grp"; | ||
| 115 | st,function = "pcie"; | ||
| 116 | }; | ||
| 117 | |||
| 111 | }; | 118 | }; |
| 112 | }; | 119 | }; |
| 113 | 120 | ||
| 121 | ahci@b1000000 { | ||
| 122 | status = "okay"; | ||
| 123 | }; | ||
| 124 | |||
| 114 | dma@ea800000 { | 125 | dma@ea800000 { |
| 115 | status = "okay"; | 126 | status = "okay"; |
| 116 | }; | 127 | }; |
| @@ -121,9 +132,35 @@ | |||
| 121 | 132 | ||
| 122 | fsmc: flash@b0000000 { | 133 | fsmc: flash@b0000000 { |
| 123 | status = "okay"; | 134 | status = "okay"; |
| 135 | |||
| 136 | partition@0 { | ||
| 137 | label = "xloader"; | ||
| 138 | reg = <0x0 0x200000>; | ||
| 139 | }; | ||
| 140 | partition@200000 { | ||
| 141 | label = "u-boot"; | ||
| 142 | reg = <0x200000 0x200000>; | ||
| 143 | }; | ||
| 144 | partition@400000 { | ||
| 145 | label = "environment"; | ||
| 146 | reg = <0x400000 0x100000>; | ||
| 147 | }; | ||
| 148 | partition@500000 { | ||
| 149 | label = "dtb"; | ||
| 150 | reg = <0x500000 0x100000>; | ||
| 151 | }; | ||
| 152 | partition@600000 { | ||
| 153 | label = "linux"; | ||
| 154 | reg = <0x600000 0xC00000>; | ||
| 155 | }; | ||
| 156 | partition@1200000 { | ||
| 157 | label = "rootfs"; | ||
| 158 | reg = <0x1200000 0x0>; | ||
| 159 | }; | ||
| 124 | }; | 160 | }; |
| 125 | 161 | ||
| 126 | gmac0: eth@e2000000 { | 162 | gmac0: eth@e2000000 { |
| 163 | phy-mode = "rgmii"; | ||
| 127 | status = "okay"; | 164 | status = "okay"; |
| 128 | }; | 165 | }; |
| 129 | 166 | ||
| @@ -147,31 +184,62 @@ | |||
| 147 | }; | 184 | }; |
| 148 | partition@10000 { | 185 | partition@10000 { |
| 149 | label = "u-boot"; | 186 | label = "u-boot"; |
| 150 | reg = <0x10000 0x40000>; | 187 | reg = <0x10000 0x50000>; |
| 188 | }; | ||
| 189 | partition@60000 { | ||
| 190 | label = "environment"; | ||
| 191 | reg = <0x60000 0x10000>; | ||
| 151 | }; | 192 | }; |
| 152 | partition@50000 { | 193 | partition@70000 { |
| 194 | label = "dtb"; | ||
| 195 | reg = <0x70000 0x10000>; | ||
| 196 | }; | ||
| 197 | partition@80000 { | ||
| 153 | label = "linux"; | 198 | label = "linux"; |
| 154 | reg = <0x50000 0x2c0000>; | 199 | reg = <0x80000 0x310000>; |
| 155 | }; | 200 | }; |
| 156 | partition@310000 { | 201 | partition@390000 { |
| 157 | label = "rootfs"; | 202 | label = "rootfs"; |
| 158 | reg = <0x310000 0x4f0000>; | 203 | reg = <0x390000 0x0>; |
| 159 | }; | 204 | }; |
| 160 | }; | 205 | }; |
| 161 | }; | 206 | }; |
| 162 | 207 | ||
| 163 | spi0: spi@e0100000 { | 208 | ehci@e4800000 { |
| 164 | status = "okay"; | 209 | status = "okay"; |
| 165 | }; | 210 | }; |
| 166 | 211 | ||
| 167 | ehci@e4800000 { | 212 | gpio_keys { |
| 168 | status = "okay"; | 213 | compatible = "gpio-keys"; |
| 214 | #address-cells = <1>; | ||
| 215 | #size-cells = <0>; | ||
| 216 | |||
| 217 | button@1 { | ||
| 218 | label = "wakeup"; | ||
| 219 | linux,code = <0x100>; | ||
| 220 | gpios = <&gpio1 1 0x4>; | ||
| 221 | debounce-interval = <20>; | ||
| 222 | gpio-key,wakeup = <1>; | ||
| 223 | }; | ||
| 169 | }; | 224 | }; |
| 170 | 225 | ||
| 171 | ehci@e5800000 { | 226 | ehci@e5800000 { |
| 172 | status = "okay"; | 227 | status = "okay"; |
| 173 | }; | 228 | }; |
| 174 | 229 | ||
| 230 | i2s0: i2s-play@b2400000 { | ||
| 231 | status = "okay"; | ||
| 232 | }; | ||
| 233 | |||
| 234 | i2s1: i2s-rec@b2000000 { | ||
| 235 | status = "okay"; | ||
| 236 | }; | ||
| 237 | |||
| 238 | incodec: dir-hifi { | ||
| 239 | compatible = "dummy,dir-hifi"; | ||
| 240 | status = "okay"; | ||
| 241 | }; | ||
| 242 | |||
| 175 | ohci@e4000000 { | 243 | ohci@e4000000 { |
| 176 | status = "okay"; | 244 | status = "okay"; |
| 177 | }; | 245 | }; |
| @@ -180,11 +248,43 @@ | |||
| 180 | status = "okay"; | 248 | status = "okay"; |
| 181 | }; | 249 | }; |
| 182 | 250 | ||
| 251 | outcodec: dit-hifi { | ||
| 252 | compatible = "dummy,dit-hifi"; | ||
| 253 | status = "okay"; | ||
| 254 | }; | ||
| 255 | |||
| 256 | sound { | ||
| 257 | compatible = "spear,spear-evb"; | ||
| 258 | audio-controllers = <&spdif0 &spdif1 &i2s0 &i2s1>; | ||
| 259 | audio-codecs = <&incodec &outcodec &sta529 &sta529>; | ||
| 260 | codec_dai_name = "dir-hifi", "dit-hifi", "sta529-audio", "sta529-audio"; | ||
| 261 | stream_name = "spdif-cap", "spdif-play", "i2s-play", "i2s-cap"; | ||
| 262 | dai_name = "spdifin-pcm", "spdifout-pcm", "i2s0-pcm", "i2s1-pcm"; | ||
| 263 | nr_controllers = <4>; | ||
| 264 | status = "okay"; | ||
| 265 | }; | ||
| 266 | |||
| 267 | spdif0: spdif-in@d0100000 { | ||
| 268 | status = "okay"; | ||
| 269 | }; | ||
| 270 | |||
| 271 | spdif1: spdif-out@d0000000 { | ||
| 272 | status = "okay"; | ||
| 273 | }; | ||
| 274 | |||
| 183 | apb { | 275 | apb { |
| 184 | adc@e0080000 { | 276 | adc@e0080000 { |
| 185 | status = "okay"; | 277 | status = "okay"; |
| 186 | }; | 278 | }; |
| 187 | 279 | ||
| 280 | i2s-play@b2400000 { | ||
| 281 | status = "okay"; | ||
| 282 | }; | ||
| 283 | |||
| 284 | i2s-rec@b2000000 { | ||
| 285 | status = "okay"; | ||
| 286 | }; | ||
| 287 | |||
| 188 | gpio0: gpio@e0600000 { | 288 | gpio0: gpio@e0600000 { |
| 189 | status = "okay"; | 289 | status = "okay"; |
| 190 | }; | 290 | }; |
| @@ -199,10 +299,36 @@ | |||
| 199 | 299 | ||
| 200 | i2c0: i2c@e0280000 { | 300 | i2c0: i2c@e0280000 { |
| 201 | status = "okay"; | 301 | status = "okay"; |
| 302 | |||
| 303 | sta529: sta529@1a { | ||
| 304 | compatible = "st,sta529"; | ||
| 305 | reg = <0x1a>; | ||
| 306 | }; | ||
| 202 | }; | 307 | }; |
| 203 | 308 | ||
| 204 | i2c1: i2c@b4000000 { | 309 | i2c1: i2c@b4000000 { |
| 205 | status = "okay"; | 310 | status = "okay"; |
| 311 | |||
| 312 | eeprom0@56 { | ||
| 313 | compatible = "st,eeprom"; | ||
| 314 | reg = <0x56>; | ||
| 315 | }; | ||
| 316 | |||
| 317 | stmpe801@41 { | ||
| 318 | compatible = "st,stmpe801"; | ||
| 319 | #address-cells = <1>; | ||
| 320 | #size-cells = <0>; | ||
| 321 | reg = <0x41>; | ||
| 322 | interrupts = <4 0x4>; | ||
| 323 | interrupt-parent = <&gpio0>; | ||
| 324 | irq-trigger = <0x2>; | ||
| 325 | |||
| 326 | stmpegpio: stmpe_gpio { | ||
| 327 | compatible = "st,stmpe-gpio"; | ||
| 328 | gpio-controller; | ||
| 329 | #gpio-cells = <2>; | ||
| 330 | }; | ||
| 331 | }; | ||
| 206 | }; | 332 | }; |
| 207 | 333 | ||
| 208 | kbd@e0300000 { | 334 | kbd@e0300000 { |
| @@ -289,6 +415,7 @@ | |||
| 289 | 0x08080052 >; | 415 | 0x08080052 >; |
| 290 | autorepeat; | 416 | autorepeat; |
| 291 | st,mode = <0>; | 417 | st,mode = <0>; |
| 418 | suspended_rate = <2000000>; | ||
| 292 | status = "okay"; | 419 | status = "okay"; |
| 293 | }; | 420 | }; |
| 294 | 421 | ||
| @@ -298,10 +425,92 @@ | |||
| 298 | 425 | ||
| 299 | serial@e0000000 { | 426 | serial@e0000000 { |
| 300 | status = "okay"; | 427 | status = "okay"; |
| 428 | pinctrl-names = "default"; | ||
| 429 | pinctrl-0 = <>; | ||
| 301 | }; | 430 | }; |
| 302 | 431 | ||
| 303 | serial@b4100000 { | 432 | serial@b4100000 { |
| 304 | status = "okay"; | 433 | status = "okay"; |
| 434 | pinctrl-names = "default"; | ||
| 435 | pinctrl-0 = <>; | ||
| 436 | }; | ||
| 437 | |||
| 438 | spi0: spi@e0100000 { | ||
| 439 | status = "okay"; | ||
| 440 | num-cs = <3>; | ||
| 441 | cs-gpios = <&gpiopinctrl 80 0>, <&gpiopinctrl 24 0>, | ||
| 442 | <&gpiopinctrl 85 0>; | ||
| 443 | |||
| 444 | m25p80@0 { | ||
| 445 | compatible = "m25p80"; | ||
| 446 | reg = <0>; | ||
| 447 | spi-max-frequency = <12000000>; | ||
| 448 | spi-cpol; | ||
| 449 | spi-cpha; | ||
| 450 | pl022,hierarchy = <0>; | ||
| 451 | pl022,interface = <0>; | ||
| 452 | pl022,slave-tx-disable; | ||
| 453 | pl022,com-mode = <0x2>; | ||
| 454 | pl022,rx-level-trig = <0>; | ||
| 455 | pl022,tx-level-trig = <0>; | ||
| 456 | pl022,ctrl-len = <0x11>; | ||
| 457 | pl022,wait-state = <0>; | ||
| 458 | pl022,duplex = <0>; | ||
| 459 | }; | ||
| 460 | |||
| 461 | stmpe610@1 { | ||
| 462 | compatible = "st,stmpe610"; | ||
| 463 | spi-max-frequency = <1000000>; | ||
| 464 | spi-cpha; | ||
| 465 | reg = <1>; | ||
| 466 | pl022,hierarchy = <0>; | ||
| 467 | pl022,interface = <0>; | ||
| 468 | pl022,slave-tx-disable; | ||
| 469 | pl022,com-mode = <0>; | ||
| 470 | pl022,rx-level-trig = <0>; | ||
| 471 | pl022,tx-level-trig = <0>; | ||
| 472 | pl022,ctrl-len = <0x7>; | ||
| 473 | pl022,wait-state = <0>; | ||
| 474 | pl022,duplex = <0>; | ||
| 475 | interrupts = <100 0>; | ||
| 476 | interrupt-parent = <&gpiopinctrl>; | ||
| 477 | irq-trigger = <0x2>; | ||
| 478 | #address-cells = <1>; | ||
| 479 | #size-cells = <0>; | ||
| 480 | |||
| 481 | stmpe_touchscreen { | ||
| 482 | compatible = "st,stmpe-ts"; | ||
| 483 | ts,sample-time = <4>; | ||
| 484 | ts,mod-12b = <1>; | ||
| 485 | ts,ref-sel = <0>; | ||
| 486 | ts,adc-freq = <1>; | ||
| 487 | ts,ave-ctrl = <1>; | ||
| 488 | ts,touch-det-delay = <2>; | ||
| 489 | ts,settling = <2>; | ||
| 490 | ts,fraction-z = <7>; | ||
| 491 | ts,i-drive = <1>; | ||
| 492 | }; | ||
| 493 | }; | ||
| 494 | |||
| 495 | spidev@2 { | ||
| 496 | compatible = "spidev"; | ||
| 497 | reg = <2>; | ||
| 498 | spi-max-frequency = <25000000>; | ||
| 499 | spi-cpha; | ||
| 500 | pl022,hierarchy = <0>; | ||
| 501 | pl022,interface = <0>; | ||
| 502 | pl022,slave-tx-disable; | ||
| 503 | pl022,com-mode = <0x2>; | ||
| 504 | pl022,rx-level-trig = <0>; | ||
| 505 | pl022,tx-level-trig = <0>; | ||
| 506 | pl022,ctrl-len = <0x11>; | ||
| 507 | pl022,wait-state = <0>; | ||
| 508 | pl022,duplex = <0>; | ||
| 509 | }; | ||
| 510 | }; | ||
| 511 | |||
| 512 | timer@ec800600 { | ||
| 513 | status = "okay"; | ||
| 305 | }; | 514 | }; |
| 306 | 515 | ||
| 307 | wdt@ec800620 { | 516 | wdt@ec800620 { |
diff --git a/arch/arm/boot/dts/spear1340.dtsi b/arch/arm/boot/dts/spear1340.dtsi index 6c09eb0a1b2..34da11aa679 100644 --- a/arch/arm/boot/dts/spear1340.dtsi +++ b/arch/arm/boot/dts/spear1340.dtsi | |||
| @@ -17,6 +17,20 @@ | |||
| 17 | compatible = "st,spear1340"; | 17 | compatible = "st,spear1340"; |
| 18 | 18 | ||
| 19 | ahb { | 19 | ahb { |
| 20 | |||
| 21 | spics: spics@e0700000{ | ||
| 22 | compatible = "st,spear-spics-gpio"; | ||
| 23 | reg = <0xe0700000 0x1000>; | ||
| 24 | st-spics,peripcfg-reg = <0x42c>; | ||
| 25 | st-spics,sw-enable-bit = <21>; | ||
| 26 | st-spics,cs-value-bit = <20>; | ||
| 27 | st-spics,cs-enable-mask = <3>; | ||
| 28 | st-spics,cs-enable-shift = <18>; | ||
| 29 | gpio-controller; | ||
| 30 | #gpio-cells = <2>; | ||
| 31 | status = "disabled"; | ||
| 32 | }; | ||
| 33 | |||
| 20 | ahci@b1000000 { | 34 | ahci@b1000000 { |
| 21 | compatible = "snps,spear-ahci"; | 35 | compatible = "snps,spear-ahci"; |
| 22 | reg = <0xb1000000 0x10000>; | 36 | reg = <0xb1000000 0x10000>; |
| @@ -24,15 +38,61 @@ | |||
| 24 | status = "disabled"; | 38 | status = "disabled"; |
| 25 | }; | 39 | }; |
| 26 | 40 | ||
| 41 | i2s-play@b2400000 { | ||
| 42 | compatible = "snps,designware-i2s"; | ||
| 43 | reg = <0xb2400000 0x10000>; | ||
| 44 | interrupt-names = "play_irq"; | ||
| 45 | interrupts = <0 98 0x4 | ||
| 46 | 0 99 0x4>; | ||
| 47 | play; | ||
| 48 | channel = <8>; | ||
| 49 | status = "disabled"; | ||
| 50 | }; | ||
| 51 | |||
| 52 | i2s-rec@b2000000 { | ||
| 53 | compatible = "snps,designware-i2s"; | ||
| 54 | reg = <0xb2000000 0x10000>; | ||
| 55 | interrupt-names = "record_irq"; | ||
| 56 | interrupts = <0 100 0x4 | ||
| 57 | 0 101 0x4>; | ||
| 58 | record; | ||
| 59 | channel = <8>; | ||
| 60 | status = "disabled"; | ||
| 61 | }; | ||
| 62 | |||
| 27 | pinmux: pinmux@e0700000 { | 63 | pinmux: pinmux@e0700000 { |
| 28 | compatible = "st,spear1340-pinmux"; | 64 | compatible = "st,spear1340-pinmux"; |
| 29 | reg = <0xe0700000 0x1000>; | 65 | reg = <0xe0700000 0x1000>; |
| 30 | #gpio-range-cells = <2>; | 66 | #gpio-range-cells = <2>; |
| 31 | }; | 67 | }; |
| 32 | 68 | ||
| 69 | pwm: pwm@e0180000 { | ||
| 70 | compatible ="st,spear13xx-pwm"; | ||
| 71 | reg = <0xe0180000 0x1000>; | ||
| 72 | #pwm-cells = <2>; | ||
| 73 | status = "disabled"; | ||
| 74 | }; | ||
| 75 | |||
| 76 | spdif-in@d0100000 { | ||
| 77 | compatible = "st,spdif-in"; | ||
| 78 | reg = < 0xd0100000 0x20000 | ||
| 79 | 0xd0110000 0x10000 >; | ||
| 80 | interrupts = <0 84 0x4>; | ||
| 81 | status = "disabled"; | ||
| 82 | }; | ||
| 83 | |||
| 84 | spdif-out@d0000000 { | ||
| 85 | compatible = "st,spdif-out"; | ||
| 86 | reg = <0xd0000000 0x20000>; | ||
| 87 | interrupts = <0 85 0x4>; | ||
| 88 | status = "disabled"; | ||
| 89 | }; | ||
| 90 | |||
| 33 | spi1: spi@5d400000 { | 91 | spi1: spi@5d400000 { |
| 34 | compatible = "arm,pl022", "arm,primecell"; | 92 | compatible = "arm,pl022", "arm,primecell"; |
| 35 | reg = <0x5d400000 0x1000>; | 93 | reg = <0x5d400000 0x1000>; |
| 94 | #address-cells = <1>; | ||
| 95 | #size-cells = <0>; | ||
| 36 | interrupts = <0 99 0x4>; | 96 | interrupts = <0 99 0x4>; |
| 37 | status = "disabled"; | 97 | status = "disabled"; |
| 38 | }; | 98 | }; |
| @@ -44,6 +104,7 @@ | |||
| 44 | compatible = "snps,designware-i2c"; | 104 | compatible = "snps,designware-i2c"; |
| 45 | reg = <0xb4000000 0x1000>; | 105 | reg = <0xb4000000 0x1000>; |
| 46 | interrupts = <0 104 0x4>; | 106 | interrupts = <0 104 0x4>; |
| 107 | write-16bit; | ||
| 47 | status = "disabled"; | 108 | status = "disabled"; |
| 48 | }; | 109 | }; |
| 49 | 110 | ||
diff --git a/arch/arm/boot/dts/spear13xx.dtsi b/arch/arm/boot/dts/spear13xx.dtsi index f7b84aced65..009096d1d2c 100644 --- a/arch/arm/boot/dts/spear13xx.dtsi +++ b/arch/arm/boot/dts/spear13xx.dtsi | |||
| @@ -64,12 +64,26 @@ | |||
| 64 | bootargs = "console=ttyAMA0,115200"; | 64 | bootargs = "console=ttyAMA0,115200"; |
| 65 | }; | 65 | }; |
| 66 | 66 | ||
| 67 | cpufreq { | ||
| 68 | compatible = "st,cpufreq-spear"; | ||
| 69 | cpufreq_tbl = < 166000 | ||
| 70 | 200000 | ||
| 71 | 250000 | ||
| 72 | 300000 | ||
| 73 | 400000 | ||
| 74 | 500000 | ||
| 75 | 600000 >; | ||
| 76 | status = "disable"; | ||
| 77 | }; | ||
| 78 | |||
| 67 | ahb { | 79 | ahb { |
| 68 | #address-cells = <1>; | 80 | #address-cells = <1>; |
| 69 | #size-cells = <1>; | 81 | #size-cells = <1>; |
| 70 | compatible = "simple-bus"; | 82 | compatible = "simple-bus"; |
| 71 | ranges = <0x50000000 0x50000000 0x10000000 | 83 | ranges = <0x50000000 0x50000000 0x10000000 |
| 72 | 0xb0000000 0xb0000000 0x10000000 | 84 | 0xb0000000 0xb0000000 0x10000000 |
| 85 | 0xd0000000 0xd0000000 0x02000000 | ||
| 86 | 0xd8000000 0xd8000000 0x01000000 | ||
| 73 | 0xe0000000 0xe0000000 0x10000000>; | 87 | 0xe0000000 0xe0000000 0x10000000>; |
| 74 | 88 | ||
| 75 | sdhci@b3000000 { | 89 | sdhci@b3000000 { |
| @@ -81,7 +95,7 @@ | |||
| 81 | 95 | ||
| 82 | cf@b2800000 { | 96 | cf@b2800000 { |
| 83 | compatible = "arasan,cf-spear1340"; | 97 | compatible = "arasan,cf-spear1340"; |
| 84 | reg = <0xb2800000 0x100>; | 98 | reg = <0xb2800000 0x1000>; |
| 85 | interrupts = <0 29 0x4>; | 99 | interrupts = <0 29 0x4>; |
| 86 | status = "disabled"; | 100 | status = "disabled"; |
| 87 | }; | 101 | }; |
| @@ -113,6 +127,7 @@ | |||
| 113 | 0 23 0x4>; | 127 | 0 23 0x4>; |
| 114 | st,ale-off = <0x20000>; | 128 | st,ale-off = <0x20000>; |
| 115 | st,cle-off = <0x10000>; | 129 | st,cle-off = <0x10000>; |
| 130 | st,mode = <2>; | ||
| 116 | status = "disabled"; | 131 | status = "disabled"; |
| 117 | }; | 132 | }; |
| 118 | 133 | ||
| @@ -125,6 +140,13 @@ | |||
| 125 | status = "disabled"; | 140 | status = "disabled"; |
| 126 | }; | 141 | }; |
| 127 | 142 | ||
| 143 | pcm { | ||
| 144 | compatible = "st,pcm-audio"; | ||
| 145 | #address-cells = <0>; | ||
| 146 | #size-cells = <0>; | ||
| 147 | status = "disable"; | ||
| 148 | }; | ||
| 149 | |||
| 128 | smi: flash@ea000000 { | 150 | smi: flash@ea000000 { |
| 129 | compatible = "st,spear600-smi"; | 151 | compatible = "st,spear600-smi"; |
| 130 | #address-cells = <1>; | 152 | #address-cells = <1>; |
| @@ -134,17 +156,11 @@ | |||
| 134 | status = "disabled"; | 156 | status = "disabled"; |
| 135 | }; | 157 | }; |
| 136 | 158 | ||
| 137 | spi0: spi@e0100000 { | ||
| 138 | compatible = "arm,pl022", "arm,primecell"; | ||
| 139 | reg = <0xe0100000 0x1000>; | ||
| 140 | interrupts = <0 31 0x4>; | ||
| 141 | status = "disabled"; | ||
| 142 | }; | ||
| 143 | |||
| 144 | ehci@e4800000 { | 159 | ehci@e4800000 { |
| 145 | compatible = "st,spear600-ehci", "usb-ehci"; | 160 | compatible = "st,spear600-ehci", "usb-ehci"; |
| 146 | reg = <0xe4800000 0x1000>; | 161 | reg = <0xe4800000 0x1000>; |
| 147 | interrupts = <0 64 0x4>; | 162 | interrupts = <0 64 0x4>; |
| 163 | usbh0_id = <0>; | ||
| 148 | status = "disabled"; | 164 | status = "disabled"; |
| 149 | }; | 165 | }; |
| 150 | 166 | ||
| @@ -152,6 +168,7 @@ | |||
| 152 | compatible = "st,spear600-ehci", "usb-ehci"; | 168 | compatible = "st,spear600-ehci", "usb-ehci"; |
| 153 | reg = <0xe5800000 0x1000>; | 169 | reg = <0xe5800000 0x1000>; |
| 154 | interrupts = <0 66 0x4>; | 170 | interrupts = <0 66 0x4>; |
| 171 | usbh1_id = <1>; | ||
| 155 | status = "disabled"; | 172 | status = "disabled"; |
| 156 | }; | 173 | }; |
| 157 | 174 | ||
| @@ -159,6 +176,7 @@ | |||
| 159 | compatible = "st,spear600-ohci", "usb-ohci"; | 176 | compatible = "st,spear600-ohci", "usb-ohci"; |
| 160 | reg = <0xe4000000 0x1000>; | 177 | reg = <0xe4000000 0x1000>; |
| 161 | interrupts = <0 65 0x4>; | 178 | interrupts = <0 65 0x4>; |
| 179 | usbh0_id = <0>; | ||
| 162 | status = "disabled"; | 180 | status = "disabled"; |
| 163 | }; | 181 | }; |
| 164 | 182 | ||
| @@ -166,6 +184,7 @@ | |||
| 166 | compatible = "st,spear600-ohci", "usb-ohci"; | 184 | compatible = "st,spear600-ohci", "usb-ohci"; |
| 167 | reg = <0xe5000000 0x1000>; | 185 | reg = <0xe5000000 0x1000>; |
| 168 | interrupts = <0 67 0x4>; | 186 | interrupts = <0 67 0x4>; |
| 187 | usbh1_id = <1>; | ||
| 169 | status = "disabled"; | 188 | status = "disabled"; |
| 170 | }; | 189 | }; |
| 171 | 190 | ||
| @@ -175,6 +194,8 @@ | |||
| 175 | compatible = "simple-bus"; | 194 | compatible = "simple-bus"; |
| 176 | ranges = <0x50000000 0x50000000 0x10000000 | 195 | ranges = <0x50000000 0x50000000 0x10000000 |
| 177 | 0xb0000000 0xb0000000 0x10000000 | 196 | 0xb0000000 0xb0000000 0x10000000 |
| 197 | 0xd0000000 0xd0000000 0x02000000 | ||
| 198 | 0xd8000000 0xd8000000 0x01000000 | ||
| 178 | 0xe0000000 0xe0000000 0x10000000>; | 199 | 0xe0000000 0xe0000000 0x10000000>; |
| 179 | 200 | ||
| 180 | gpio0: gpio@e0600000 { | 201 | gpio0: gpio@e0600000 { |
| @@ -215,8 +236,35 @@ | |||
| 215 | status = "disabled"; | 236 | status = "disabled"; |
| 216 | }; | 237 | }; |
| 217 | 238 | ||
| 239 | i2s@e0180000 { | ||
| 240 | compatible = "st,designware-i2s"; | ||
| 241 | reg = <0xe0180000 0x1000>; | ||
| 242 | interrupt-names = "play_irq", "record_irq"; | ||
| 243 | interrupts = <0 10 0x4 | ||
| 244 | 0 11 0x4 >; | ||
| 245 | status = "disabled"; | ||
| 246 | }; | ||
| 247 | |||
| 248 | i2s@e0200000 { | ||
| 249 | compatible = "st,designware-i2s"; | ||
| 250 | reg = <0xe0200000 0x1000>; | ||
| 251 | interrupt-names = "play_irq", "record_irq"; | ||
| 252 | interrupts = <0 26 0x4 | ||
| 253 | 0 53 0x4>; | ||
| 254 | status = "disabled"; | ||
| 255 | }; | ||
| 256 | |||
| 257 | spi0: spi@e0100000 { | ||
| 258 | compatible = "arm,pl022", "arm,primecell"; | ||
| 259 | reg = <0xe0100000 0x1000>; | ||
| 260 | #address-cells = <1>; | ||
| 261 | #size-cells = <0>; | ||
| 262 | interrupts = <0 31 0x4>; | ||
| 263 | status = "disabled"; | ||
| 264 | }; | ||
| 265 | |||
| 218 | rtc@e0580000 { | 266 | rtc@e0580000 { |
| 219 | compatible = "st,spear-rtc"; | 267 | compatible = "st,spear600-rtc"; |
| 220 | reg = <0xe0580000 0x1000>; | 268 | reg = <0xe0580000 0x1000>; |
| 221 | interrupts = <0 36 0x4>; | 269 | interrupts = <0 36 0x4>; |
| 222 | status = "disabled"; | 270 | status = "disabled"; |
| @@ -232,7 +280,7 @@ | |||
| 232 | adc@e0080000 { | 280 | adc@e0080000 { |
| 233 | compatible = "st,spear600-adc"; | 281 | compatible = "st,spear600-adc"; |
| 234 | reg = <0xe0080000 0x1000>; | 282 | reg = <0xe0080000 0x1000>; |
| 235 | interrupts = <0 44 0x4>; | 283 | interrupts = <0 12 0x4>; |
| 236 | status = "disabled"; | 284 | status = "disabled"; |
| 237 | }; | 285 | }; |
| 238 | 286 | ||
| @@ -245,7 +293,8 @@ | |||
| 245 | timer@ec800600 { | 293 | timer@ec800600 { |
| 246 | compatible = "arm,cortex-a9-twd-timer"; | 294 | compatible = "arm,cortex-a9-twd-timer"; |
| 247 | reg = <0xec800600 0x20>; | 295 | reg = <0xec800600 0x20>; |
| 248 | interrupts = <1 13 0x301>; | 296 | interrupts = <1 13 0x4>; |
| 297 | status = "disabled"; | ||
| 249 | }; | 298 | }; |
| 250 | 299 | ||
| 251 | wdt@ec800620 { | 300 | wdt@ec800620 { |
| @@ -257,6 +306,7 @@ | |||
| 257 | thermal@e07008c4 { | 306 | thermal@e07008c4 { |
| 258 | compatible = "st,thermal-spear1340"; | 307 | compatible = "st,thermal-spear1340"; |
| 259 | reg = <0xe07008c4 0x4>; | 308 | reg = <0xe07008c4 0x4>; |
| 309 | thermal_flags = <0x7000>; | ||
| 260 | }; | 310 | }; |
| 261 | }; | 311 | }; |
| 262 | }; | 312 | }; |
diff --git a/arch/arm/boot/dts/spear300-evb.dts b/arch/arm/boot/dts/spear300-evb.dts index 1e7c7a8e212..5de1431653e 100644 --- a/arch/arm/boot/dts/spear300-evb.dts +++ b/arch/arm/boot/dts/spear300-evb.dts | |||
| @@ -100,15 +100,23 @@ | |||
| 100 | }; | 100 | }; |
| 101 | partition@10000 { | 101 | partition@10000 { |
| 102 | label = "u-boot"; | 102 | label = "u-boot"; |
| 103 | reg = <0x10000 0x40000>; | 103 | reg = <0x10000 0x50000>; |
| 104 | }; | 104 | }; |
| 105 | partition@50000 { | 105 | partition@60000 { |
| 106 | label = "environment"; | ||
| 107 | reg = <0x60000 0x10000>; | ||
| 108 | }; | ||
| 109 | partition@70000 { | ||
| 110 | label = "dtb"; | ||
| 111 | reg = <0x70000 0x10000>; | ||
| 112 | }; | ||
| 113 | partition@80000 { | ||
| 106 | label = "linux"; | 114 | label = "linux"; |
| 107 | reg = <0x50000 0x2c0000>; | 115 | reg = <0x80000 0x310000>; |
| 108 | }; | 116 | }; |
| 109 | partition@310000 { | 117 | partition@390000 { |
| 110 | label = "rootfs"; | 118 | label = "rootfs"; |
| 111 | reg = <0x310000 0x4f0000>; | 119 | reg = <0x390000 0x0>; |
| 112 | }; | 120 | }; |
| 113 | }; | 121 | }; |
| 114 | }; | 122 | }; |
| @@ -235,6 +243,8 @@ | |||
| 235 | 243 | ||
| 236 | serial@d0000000 { | 244 | serial@d0000000 { |
| 237 | status = "okay"; | 245 | status = "okay"; |
| 246 | pinctrl-names = "default"; | ||
| 247 | pinctrl-0 = <>; | ||
| 238 | }; | 248 | }; |
| 239 | 249 | ||
| 240 | wdt@fc880000 { | 250 | wdt@fc880000 { |
diff --git a/arch/arm/boot/dts/spear300.dtsi b/arch/arm/boot/dts/spear300.dtsi index ed3627c116c..090adc65601 100644 --- a/arch/arm/boot/dts/spear300.dtsi +++ b/arch/arm/boot/dts/spear300.dtsi | |||
| @@ -27,7 +27,7 @@ | |||
| 27 | }; | 27 | }; |
| 28 | 28 | ||
| 29 | clcd@60000000 { | 29 | clcd@60000000 { |
| 30 | compatible = "arm,clcd-pl110", "arm,primecell"; | 30 | compatible = "arm,pl110", "arm,primecell"; |
| 31 | reg = <0x60000000 0x1000>; | 31 | reg = <0x60000000 0x1000>; |
| 32 | interrupts = <30>; | 32 | interrupts = <30>; |
| 33 | status = "disabled"; | 33 | status = "disabled"; |
| @@ -52,6 +52,14 @@ | |||
| 52 | status = "disabled"; | 52 | status = "disabled"; |
| 53 | }; | 53 | }; |
| 54 | 54 | ||
| 55 | shirq: interrupt-controller@0x50000000 { | ||
| 56 | compatible = "st,spear300-shirq"; | ||
| 57 | reg = <0x50000000 0x1000>; | ||
| 58 | interrupts = <28>; | ||
| 59 | #interrupt-cells = <1>; | ||
| 60 | interrupt-controller; | ||
| 61 | }; | ||
| 62 | |||
| 55 | apb { | 63 | apb { |
| 56 | #address-cells = <1>; | 64 | #address-cells = <1>; |
| 57 | #size-cells = <1>; | 65 | #size-cells = <1>; |
| @@ -64,12 +72,16 @@ | |||
| 64 | compatible = "arm,pl061", "arm,primecell"; | 72 | compatible = "arm,pl061", "arm,primecell"; |
| 65 | gpio-controller; | 73 | gpio-controller; |
| 66 | reg = <0xa9000000 0x1000>; | 74 | reg = <0xa9000000 0x1000>; |
| 75 | interrupts = <8>; | ||
| 76 | interrupt-parent = <&shirq>; | ||
| 67 | status = "disabled"; | 77 | status = "disabled"; |
| 68 | }; | 78 | }; |
| 69 | 79 | ||
| 70 | kbd@a0000000 { | 80 | kbd@a0000000 { |
| 71 | compatible = "st,spear300-kbd"; | 81 | compatible = "st,spear300-kbd"; |
| 72 | reg = <0xa0000000 0x1000>; | 82 | reg = <0xa0000000 0x1000>; |
| 83 | interrupts = <7>; | ||
| 84 | interrupt-parent = <&shirq>; | ||
| 73 | status = "disabled"; | 85 | status = "disabled"; |
| 74 | }; | 86 | }; |
| 75 | }; | 87 | }; |
diff --git a/arch/arm/boot/dts/spear310-evb.dts b/arch/arm/boot/dts/spear310-evb.dts index b00544e0cd5..b09632963d1 100644 --- a/arch/arm/boot/dts/spear310-evb.dts +++ b/arch/arm/boot/dts/spear310-evb.dts | |||
| @@ -114,15 +114,23 @@ | |||
| 114 | }; | 114 | }; |
| 115 | partition@10000 { | 115 | partition@10000 { |
| 116 | label = "u-boot"; | 116 | label = "u-boot"; |
| 117 | reg = <0x10000 0x40000>; | 117 | reg = <0x10000 0x50000>; |
| 118 | }; | 118 | }; |
| 119 | partition@50000 { | 119 | partition@60000 { |
| 120 | label = "environment"; | ||
| 121 | reg = <0x60000 0x10000>; | ||
| 122 | }; | ||
| 123 | partition@70000 { | ||
| 124 | label = "dtb"; | ||
| 125 | reg = <0x70000 0x10000>; | ||
| 126 | }; | ||
| 127 | partition@80000 { | ||
| 120 | label = "linux"; | 128 | label = "linux"; |
| 121 | reg = <0x50000 0x2c0000>; | 129 | reg = <0x80000 0x310000>; |
| 122 | }; | 130 | }; |
| 123 | partition@310000 { | 131 | partition@390000 { |
| 124 | label = "rootfs"; | 132 | label = "rootfs"; |
| 125 | reg = <0x310000 0x4f0000>; | 133 | reg = <0x390000 0x0>; |
| 126 | }; | 134 | }; |
| 127 | }; | 135 | }; |
| 128 | }; | 136 | }; |
| @@ -158,26 +166,38 @@ | |||
| 158 | 166 | ||
| 159 | serial@d0000000 { | 167 | serial@d0000000 { |
| 160 | status = "okay"; | 168 | status = "okay"; |
| 169 | pinctrl-names = "default"; | ||
| 170 | pinctrl-0 = <>; | ||
| 161 | }; | 171 | }; |
| 162 | 172 | ||
| 163 | serial@b2000000 { | 173 | serial@b2000000 { |
| 164 | status = "okay"; | 174 | status = "okay"; |
| 175 | pinctrl-names = "default"; | ||
| 176 | pinctrl-0 = <>; | ||
| 165 | }; | 177 | }; |
| 166 | 178 | ||
| 167 | serial@b2080000 { | 179 | serial@b2080000 { |
| 168 | status = "okay"; | 180 | status = "okay"; |
| 181 | pinctrl-names = "default"; | ||
| 182 | pinctrl-0 = <>; | ||
| 169 | }; | 183 | }; |
| 170 | 184 | ||
| 171 | serial@b2100000 { | 185 | serial@b2100000 { |
| 172 | status = "okay"; | 186 | status = "okay"; |
| 187 | pinctrl-names = "default"; | ||
| 188 | pinctrl-0 = <>; | ||
| 173 | }; | 189 | }; |
| 174 | 190 | ||
| 175 | serial@b2180000 { | 191 | serial@b2180000 { |
| 176 | status = "okay"; | 192 | status = "okay"; |
| 193 | pinctrl-names = "default"; | ||
| 194 | pinctrl-0 = <>; | ||
| 177 | }; | 195 | }; |
| 178 | 196 | ||
| 179 | serial@b2200000 { | 197 | serial@b2200000 { |
| 180 | status = "okay"; | 198 | status = "okay"; |
| 199 | pinctrl-names = "default"; | ||
| 200 | pinctrl-0 = <>; | ||
| 181 | }; | 201 | }; |
| 182 | 202 | ||
| 183 | wdt@fc880000 { | 203 | wdt@fc880000 { |
diff --git a/arch/arm/boot/dts/spear310.dtsi b/arch/arm/boot/dts/spear310.dtsi index 930303e48df..e814e5e9708 100644 --- a/arch/arm/boot/dts/spear310.dtsi +++ b/arch/arm/boot/dts/spear310.dtsi | |||
| @@ -40,6 +40,14 @@ | |||
| 40 | status = "disabled"; | 40 | status = "disabled"; |
| 41 | }; | 41 | }; |
| 42 | 42 | ||
| 43 | shirq: interrupt-controller@0xb4000000 { | ||
| 44 | compatible = "st,spear310-shirq"; | ||
| 45 | reg = <0xb4000000 0x1000>; | ||
| 46 | interrupts = <28 29 30 1>; | ||
| 47 | #interrupt-cells = <1>; | ||
| 48 | interrupt-controller; | ||
| 49 | }; | ||
| 50 | |||
| 43 | apb { | 51 | apb { |
| 44 | #address-cells = <1>; | 52 | #address-cells = <1>; |
| 45 | #size-cells = <1>; | 53 | #size-cells = <1>; |
| @@ -50,30 +58,40 @@ | |||
| 50 | serial@b2000000 { | 58 | serial@b2000000 { |
| 51 | compatible = "arm,pl011", "arm,primecell"; | 59 | compatible = "arm,pl011", "arm,primecell"; |
| 52 | reg = <0xb2000000 0x1000>; | 60 | reg = <0xb2000000 0x1000>; |
| 61 | interrupts = <8>; | ||
| 62 | interrupt-parent = <&shirq>; | ||
| 53 | status = "disabled"; | 63 | status = "disabled"; |
| 54 | }; | 64 | }; |
| 55 | 65 | ||
| 56 | serial@b2080000 { | 66 | serial@b2080000 { |
| 57 | compatible = "arm,pl011", "arm,primecell"; | 67 | compatible = "arm,pl011", "arm,primecell"; |
| 58 | reg = <0xb2080000 0x1000>; | 68 | reg = <0xb2080000 0x1000>; |
| 69 | interrupts = <9>; | ||
| 70 | interrupt-parent = <&shirq>; | ||
| 59 | status = "disabled"; | 71 | status = "disabled"; |
| 60 | }; | 72 | }; |
| 61 | 73 | ||
| 62 | serial@b2100000 { | 74 | serial@b2100000 { |
| 63 | compatible = "arm,pl011", "arm,primecell"; | 75 | compatible = "arm,pl011", "arm,primecell"; |
| 64 | reg = <0xb2100000 0x1000>; | 76 | reg = <0xb2100000 0x1000>; |
| 77 | interrupts = <10>; | ||
| 78 | interrupt-parent = <&shirq>; | ||
| 65 | status = "disabled"; | 79 | status = "disabled"; |
| 66 | }; | 80 | }; |
| 67 | 81 | ||
| 68 | serial@b2180000 { | 82 | serial@b2180000 { |
| 69 | compatible = "arm,pl011", "arm,primecell"; | 83 | compatible = "arm,pl011", "arm,primecell"; |
| 70 | reg = <0xb2180000 0x1000>; | 84 | reg = <0xb2180000 0x1000>; |
| 85 | interrupts = <11>; | ||
| 86 | interrupt-parent = <&shirq>; | ||
| 71 | status = "disabled"; | 87 | status = "disabled"; |
| 72 | }; | 88 | }; |
| 73 | 89 | ||
| 74 | serial@b2200000 { | 90 | serial@b2200000 { |
| 75 | compatible = "arm,pl011", "arm,primecell"; | 91 | compatible = "arm,pl011", "arm,primecell"; |
| 76 | reg = <0xb2200000 0x1000>; | 92 | reg = <0xb2200000 0x1000>; |
| 93 | interrupts = <12>; | ||
| 94 | interrupt-parent = <&shirq>; | ||
| 77 | status = "disabled"; | 95 | status = "disabled"; |
| 78 | }; | 96 | }; |
| 79 | 97 | ||
diff --git a/arch/arm/boot/dts/spear320-evb.dts b/arch/arm/boot/dts/spear320-evb.dts index ad4bfc68ee0..fdedbb51410 100644 --- a/arch/arm/boot/dts/spear320-evb.dts +++ b/arch/arm/boot/dts/spear320-evb.dts | |||
| @@ -76,20 +76,12 @@ | |||
| 76 | st,function = "mii2"; | 76 | st,function = "mii2"; |
| 77 | }; | 77 | }; |
| 78 | pwm0_1 { | 78 | pwm0_1 { |
| 79 | st,pins = "pwm0_1_pin_14_15_grp"; | 79 | st,pins = "pwm0_1_pin_37_38_grp"; |
| 80 | st,function = "pwm0_1"; | 80 | st,function = "pwm0_1"; |
| 81 | }; | 81 | }; |
| 82 | pwm2 { | ||
| 83 | st,pins = "pwm2_pin_13_grp"; | ||
| 84 | st,function = "pwm2"; | ||
| 85 | }; | ||
| 86 | }; | 82 | }; |
| 87 | }; | 83 | }; |
| 88 | 84 | ||
| 89 | clcd@90000000 { | ||
| 90 | status = "okay"; | ||
| 91 | }; | ||
| 92 | |||
| 93 | dma@fc400000 { | 85 | dma@fc400000 { |
| 94 | status = "okay"; | 86 | status = "okay"; |
| 95 | }; | 87 | }; |
| @@ -103,6 +95,7 @@ | |||
| 103 | }; | 95 | }; |
| 104 | 96 | ||
| 105 | sdhci@70000000 { | 97 | sdhci@70000000 { |
| 98 | power-gpio = <&gpiopinctrl 61 1>; | ||
| 106 | status = "okay"; | 99 | status = "okay"; |
| 107 | }; | 100 | }; |
| 108 | 101 | ||
| @@ -122,15 +115,23 @@ | |||
| 122 | }; | 115 | }; |
| 123 | partition@10000 { | 116 | partition@10000 { |
| 124 | label = "u-boot"; | 117 | label = "u-boot"; |
| 125 | reg = <0x10000 0x40000>; | 118 | reg = <0x10000 0x50000>; |
| 119 | }; | ||
| 120 | partition@60000 { | ||
| 121 | label = "environment"; | ||
| 122 | reg = <0x60000 0x10000>; | ||
| 123 | }; | ||
| 124 | partition@70000 { | ||
| 125 | label = "dtb"; | ||
| 126 | reg = <0x70000 0x10000>; | ||
| 126 | }; | 127 | }; |
| 127 | partition@50000 { | 128 | partition@80000 { |
| 128 | label = "linux"; | 129 | label = "linux"; |
| 129 | reg = <0x50000 0x2c0000>; | 130 | reg = <0x80000 0x310000>; |
| 130 | }; | 131 | }; |
| 131 | partition@310000 { | 132 | partition@390000 { |
| 132 | label = "rootfs"; | 133 | label = "rootfs"; |
| 133 | reg = <0x310000 0x4f0000>; | 134 | reg = <0x390000 0x0>; |
| 134 | }; | 135 | }; |
| 135 | }; | 136 | }; |
| 136 | }; | 137 | }; |
| @@ -182,14 +183,20 @@ | |||
| 182 | 183 | ||
| 183 | serial@d0000000 { | 184 | serial@d0000000 { |
| 184 | status = "okay"; | 185 | status = "okay"; |
| 186 | pinctrl-names = "default"; | ||
| 187 | pinctrl-0 = <>; | ||
| 185 | }; | 188 | }; |
| 186 | 189 | ||
| 187 | serial@a3000000 { | 190 | serial@a3000000 { |
| 188 | status = "okay"; | 191 | status = "okay"; |
| 192 | pinctrl-names = "default"; | ||
| 193 | pinctrl-0 = <>; | ||
| 189 | }; | 194 | }; |
| 190 | 195 | ||
| 191 | serial@a4000000 { | 196 | serial@a4000000 { |
| 192 | status = "okay"; | 197 | status = "okay"; |
| 198 | pinctrl-names = "default"; | ||
| 199 | pinctrl-0 = <>; | ||
| 193 | }; | 200 | }; |
| 194 | 201 | ||
| 195 | wdt@fc880000 { | 202 | wdt@fc880000 { |
diff --git a/arch/arm/boot/dts/spear320-hmi.dts b/arch/arm/boot/dts/spear320-hmi.dts new file mode 100644 index 00000000000..3075d2d3a8b --- /dev/null +++ b/arch/arm/boot/dts/spear320-hmi.dts | |||
| @@ -0,0 +1,305 @@ | |||
| 1 | /* | ||
| 2 | * DTS file for SPEAr320 Evaluation Baord | ||
| 3 | * | ||
| 4 | * Copyright 2012 Shiraz Hashim <shiraz.hashim@st.com> | ||
| 5 | * | ||
| 6 | * The code contained herein is licensed under the GNU General Public | ||
| 7 | * License. You may obtain a copy of the GNU General Public License | ||
| 8 | * Version 2 or later at the following locations: | ||
| 9 | * | ||
| 10 | * http://www.opensource.org/licenses/gpl-license.html | ||
| 11 | * http://www.gnu.org/copyleft/gpl.html | ||
| 12 | */ | ||
| 13 | |||
| 14 | /dts-v1/; | ||
| 15 | /include/ "spear320.dtsi" | ||
| 16 | |||
| 17 | / { | ||
| 18 | model = "ST SPEAr320 HMI Board"; | ||
| 19 | compatible = "st,spear320-hmi", "st,spear320"; | ||
| 20 | #address-cells = <1>; | ||
| 21 | #size-cells = <1>; | ||
| 22 | |||
| 23 | memory { | ||
| 24 | reg = <0 0x40000000>; | ||
| 25 | }; | ||
| 26 | |||
| 27 | ahb { | ||
| 28 | pinmux@b3000000 { | ||
| 29 | st,pinmux-mode = <4>; | ||
| 30 | pinctrl-names = "default"; | ||
| 31 | pinctrl-0 = <&state_default>; | ||
| 32 | |||
| 33 | state_default: pinmux { | ||
| 34 | i2c0 { | ||
| 35 | st,pins = "i2c0_grp"; | ||
| 36 | st,function = "i2c0"; | ||
| 37 | }; | ||
| 38 | ssp0 { | ||
| 39 | st,pins = "ssp0_grp"; | ||
| 40 | st,function = "ssp0"; | ||
| 41 | }; | ||
| 42 | uart0 { | ||
| 43 | st,pins = "uart0_grp"; | ||
| 44 | st,function = "uart0"; | ||
| 45 | }; | ||
| 46 | clcd { | ||
| 47 | st,pins = "clcd_grp"; | ||
| 48 | st,function = "clcd"; | ||
| 49 | }; | ||
| 50 | fsmc { | ||
| 51 | st,pins = "fsmc_8bit_grp"; | ||
| 52 | st,function = "fsmc"; | ||
| 53 | }; | ||
| 54 | sdhci { | ||
| 55 | st,pins = "sdhci_cd_12_grp"; | ||
| 56 | st,function = "sdhci"; | ||
| 57 | }; | ||
| 58 | i2s { | ||
| 59 | st,pins = "i2s_grp"; | ||
| 60 | st,function = "i2s"; | ||
| 61 | }; | ||
| 62 | uart1 { | ||
| 63 | st,pins = "uart1_grp"; | ||
| 64 | st,function = "uart1"; | ||
| 65 | }; | ||
| 66 | uart2 { | ||
| 67 | st,pins = "uart2_grp"; | ||
| 68 | st,function = "uart2"; | ||
| 69 | }; | ||
| 70 | can0 { | ||
| 71 | st,pins = "can0_grp"; | ||
| 72 | st,function = "can0"; | ||
| 73 | }; | ||
| 74 | can1 { | ||
| 75 | st,pins = "can1_grp"; | ||
| 76 | st,function = "can1"; | ||
| 77 | }; | ||
| 78 | mii0_1 { | ||
| 79 | st,pins = "rmii0_1_grp"; | ||
| 80 | st,function = "mii0_1"; | ||
| 81 | }; | ||
| 82 | pwm0_1 { | ||
| 83 | st,pins = "pwm0_1_pin_37_38_grp"; | ||
| 84 | st,function = "pwm0_1"; | ||
| 85 | }; | ||
| 86 | pwm2 { | ||
| 87 | st,pins = "pwm2_pin_34_grp"; | ||
| 88 | st,function = "pwm2"; | ||
| 89 | }; | ||
| 90 | }; | ||
| 91 | }; | ||
| 92 | |||
| 93 | clcd@90000000 { | ||
| 94 | status = "okay"; | ||
| 95 | }; | ||
| 96 | |||
| 97 | dma@fc400000 { | ||
| 98 | status = "okay"; | ||
| 99 | }; | ||
| 100 | |||
| 101 | ehci@e1800000 { | ||
| 102 | status = "okay"; | ||
| 103 | }; | ||
| 104 | |||
| 105 | fsmc: flash@4c000000 { | ||
| 106 | status = "okay"; | ||
| 107 | |||
| 108 | partition@0 { | ||
| 109 | label = "xloader"; | ||
| 110 | reg = <0x0 0x80000>; | ||
| 111 | }; | ||
| 112 | partition@80000 { | ||
| 113 | label = "u-boot"; | ||
| 114 | reg = <0x80000 0x140000>; | ||
| 115 | }; | ||
| 116 | partition@1C0000 { | ||
| 117 | label = "environment"; | ||
| 118 | reg = <0x1C0000 0x40000>; | ||
| 119 | }; | ||
| 120 | partition@200000 { | ||
| 121 | label = "dtb"; | ||
| 122 | reg = <0x200000 0x40000>; | ||
| 123 | }; | ||
| 124 | partition@240000 { | ||
| 125 | label = "linux"; | ||
| 126 | reg = <0x240000 0xC00000>; | ||
| 127 | }; | ||
| 128 | partition@E40000 { | ||
| 129 | label = "rootfs"; | ||
| 130 | reg = <0xE40000 0x0>; | ||
| 131 | }; | ||
| 132 | }; | ||
| 133 | |||
| 134 | gpio_keys { | ||
| 135 | compatible = "gpio-keys"; | ||
| 136 | #address-cells = <1>; | ||
| 137 | #size-cells = <0>; | ||
| 138 | |||
| 139 | button@1 { | ||
| 140 | label = "user button 1"; | ||
| 141 | linux,code = <0x100>; | ||
| 142 | gpios = <&stmpegpio 3 0x4>; | ||
| 143 | debounce-interval = <20>; | ||
| 144 | gpio-key,wakeup = <1>; | ||
| 145 | }; | ||
| 146 | |||
| 147 | button@2 { | ||
| 148 | label = "user button 2"; | ||
| 149 | linux,code = <0x200>; | ||
| 150 | gpios = <&stmpegpio 2 0x4>; | ||
| 151 | debounce-interval = <20>; | ||
| 152 | gpio-key,wakeup = <1>; | ||
| 153 | }; | ||
| 154 | }; | ||
| 155 | |||
| 156 | ohci@e1900000 { | ||
| 157 | status = "okay"; | ||
| 158 | }; | ||
| 159 | |||
| 160 | ohci@e2100000 { | ||
| 161 | status = "okay"; | ||
| 162 | }; | ||
| 163 | |||
| 164 | pwm: pwm@a8000000 { | ||
| 165 | status = "okay"; | ||
| 166 | }; | ||
| 167 | |||
| 168 | sdhci@70000000 { | ||
| 169 | power-gpio = <&gpiopinctrl 50 1>; | ||
| 170 | power_always_enb; | ||
| 171 | status = "okay"; | ||
| 172 | }; | ||
| 173 | |||
| 174 | smi: flash@fc000000 { | ||
| 175 | status = "okay"; | ||
| 176 | clock-rate=<50000000>; | ||
| 177 | |||
| 178 | flash@f8000000 { | ||
| 179 | #address-cells = <1>; | ||
| 180 | #size-cells = <1>; | ||
| 181 | reg = <0xf8000000 0x800000>; | ||
| 182 | st,smi-fast-mode; | ||
| 183 | |||
| 184 | partition@0 { | ||
| 185 | label = "xloader"; | ||
| 186 | reg = <0x0 0x10000>; | ||
| 187 | }; | ||
| 188 | partition@10000 { | ||
| 189 | label = "u-boot"; | ||
| 190 | reg = <0x10000 0x50000>; | ||
| 191 | }; | ||
| 192 | partition@60000 { | ||
| 193 | label = "environment"; | ||
| 194 | reg = <0x60000 0x10000>; | ||
| 195 | }; | ||
| 196 | partition@70000 { | ||
| 197 | label = "dtb"; | ||
| 198 | reg = <0x70000 0x10000>; | ||
| 199 | }; | ||
| 200 | partition@80000 { | ||
| 201 | label = "linux"; | ||
| 202 | reg = <0x80000 0x310000>; | ||
| 203 | }; | ||
| 204 | partition@390000 { | ||
| 205 | label = "rootfs"; | ||
| 206 | reg = <0x390000 0x0>; | ||
| 207 | }; | ||
| 208 | }; | ||
| 209 | }; | ||
| 210 | |||
| 211 | spi0: spi@d0100000 { | ||
| 212 | status = "okay"; | ||
| 213 | }; | ||
| 214 | |||
| 215 | spi1: spi@a5000000 { | ||
| 216 | status = "okay"; | ||
| 217 | }; | ||
| 218 | |||
| 219 | spi2: spi@a6000000 { | ||
| 220 | status = "okay"; | ||
| 221 | }; | ||
| 222 | |||
| 223 | usbd@e1100000 { | ||
| 224 | status = "okay"; | ||
| 225 | }; | ||
| 226 | |||
| 227 | apb { | ||
| 228 | gpio0: gpio@fc980000 { | ||
| 229 | status = "okay"; | ||
| 230 | }; | ||
| 231 | |||
| 232 | gpio@b3000000 { | ||
| 233 | status = "okay"; | ||
| 234 | }; | ||
| 235 | |||
| 236 | i2c0: i2c@d0180000 { | ||
| 237 | status = "okay"; | ||
| 238 | |||
| 239 | stmpe811@41 { | ||
| 240 | compatible = "st,stmpe811"; | ||
| 241 | #address-cells = <1>; | ||
| 242 | #size-cells = <0>; | ||
| 243 | reg = <0x41>; | ||
| 244 | irq-over-gpio; | ||
| 245 | irq-gpios = <&gpiopinctrl 29 0x4>; | ||
| 246 | id = <0>; | ||
| 247 | blocks = <0x5>; | ||
| 248 | irq-trigger = <0x1>; | ||
| 249 | |||
| 250 | stmpegpio: stmpe-gpio { | ||
| 251 | compatible = "stmpe,gpio"; | ||
| 252 | reg = <0>; | ||
| 253 | gpio-controller; | ||
| 254 | #gpio-cells = <2>; | ||
| 255 | gpio,norequest-mask = <0xF3>; | ||
| 256 | }; | ||
| 257 | |||
| 258 | stmpe610-ts { | ||
| 259 | compatible = "stmpe,ts"; | ||
| 260 | reg = <0>; | ||
| 261 | ts,sample-time = <4>; | ||
| 262 | ts,mod-12b = <1>; | ||
| 263 | ts,ref-sel = <0>; | ||
| 264 | ts,adc-freq = <1>; | ||
| 265 | ts,ave-ctrl = <1>; | ||
| 266 | ts,touch-det-delay = <3>; | ||
| 267 | ts,settling = <4>; | ||
| 268 | ts,fraction-z = <7>; | ||
| 269 | ts,i-drive = <1>; | ||
| 270 | }; | ||
| 271 | }; | ||
| 272 | }; | ||
| 273 | |||
| 274 | i2c1: i2c@a7000000 { | ||
| 275 | status = "okay"; | ||
| 276 | }; | ||
| 277 | |||
| 278 | rtc@fc900000 { | ||
| 279 | status = "okay"; | ||
| 280 | }; | ||
| 281 | |||
| 282 | serial@d0000000 { | ||
| 283 | status = "okay"; | ||
| 284 | pinctrl-names = "default"; | ||
| 285 | pinctrl-0 = <>; | ||
| 286 | }; | ||
| 287 | |||
| 288 | serial@a3000000 { | ||
| 289 | status = "okay"; | ||
| 290 | pinctrl-names = "default"; | ||
| 291 | pinctrl-0 = <>; | ||
| 292 | }; | ||
| 293 | |||
| 294 | serial@a4000000 { | ||
| 295 | status = "okay"; | ||
| 296 | pinctrl-names = "default"; | ||
| 297 | pinctrl-0 = <>; | ||
| 298 | }; | ||
| 299 | |||
| 300 | wdt@fc880000 { | ||
| 301 | status = "okay"; | ||
| 302 | }; | ||
| 303 | }; | ||
| 304 | }; | ||
| 305 | }; | ||
diff --git a/arch/arm/boot/dts/spear320.dtsi b/arch/arm/boot/dts/spear320.dtsi index 67d7ada7127..c056a84deab 100644 --- a/arch/arm/boot/dts/spear320.dtsi +++ b/arch/arm/boot/dts/spear320.dtsi | |||
| @@ -28,9 +28,10 @@ | |||
| 28 | }; | 28 | }; |
| 29 | 29 | ||
| 30 | clcd@90000000 { | 30 | clcd@90000000 { |
| 31 | compatible = "arm,clcd-pl110", "arm,primecell"; | 31 | compatible = "arm,pl110", "arm,primecell"; |
| 32 | reg = <0x90000000 0x1000>; | 32 | reg = <0x90000000 0x1000>; |
| 33 | interrupts = <33>; | 33 | interrupts = <8>; |
| 34 | interrupt-parent = <&shirq>; | ||
| 34 | status = "disabled"; | 35 | status = "disabled"; |
| 35 | }; | 36 | }; |
| 36 | 37 | ||
| @@ -49,27 +50,51 @@ | |||
| 49 | sdhci@70000000 { | 50 | sdhci@70000000 { |
| 50 | compatible = "st,sdhci-spear"; | 51 | compatible = "st,sdhci-spear"; |
| 51 | reg = <0x70000000 0x100>; | 52 | reg = <0x70000000 0x100>; |
| 52 | interrupts = <29>; | 53 | interrupts = <10>; |
| 54 | interrupt-parent = <&shirq>; | ||
| 53 | status = "disabled"; | 55 | status = "disabled"; |
| 54 | }; | 56 | }; |
| 55 | 57 | ||
| 58 | shirq: interrupt-controller@0xb3000000 { | ||
| 59 | compatible = "st,spear320-shirq"; | ||
| 60 | reg = <0xb3000000 0x1000>; | ||
| 61 | interrupts = <30 28 29 1>; | ||
| 62 | #interrupt-cells = <1>; | ||
| 63 | interrupt-controller; | ||
| 64 | }; | ||
| 65 | |||
| 56 | spi1: spi@a5000000 { | 66 | spi1: spi@a5000000 { |
| 57 | compatible = "arm,pl022", "arm,primecell"; | 67 | compatible = "arm,pl022", "arm,primecell"; |
| 58 | reg = <0xa5000000 0x1000>; | 68 | reg = <0xa5000000 0x1000>; |
| 69 | interrupts = <15>; | ||
| 70 | interrupt-parent = <&shirq>; | ||
| 71 | #address-cells = <1>; | ||
| 72 | #size-cells = <0>; | ||
| 59 | status = "disabled"; | 73 | status = "disabled"; |
| 60 | }; | 74 | }; |
| 61 | 75 | ||
| 62 | spi2: spi@a6000000 { | 76 | spi2: spi@a6000000 { |
| 63 | compatible = "arm,pl022", "arm,primecell"; | 77 | compatible = "arm,pl022", "arm,primecell"; |
| 64 | reg = <0xa6000000 0x1000>; | 78 | reg = <0xa6000000 0x1000>; |
| 79 | interrupts = <16>; | ||
| 80 | interrupt-parent = <&shirq>; | ||
| 81 | #address-cells = <1>; | ||
| 82 | #size-cells = <0>; | ||
| 65 | status = "disabled"; | 83 | status = "disabled"; |
| 66 | }; | 84 | }; |
| 67 | 85 | ||
| 86 | pwm: pwm@a8000000 { | ||
| 87 | compatible ="st,spear-pwm"; | ||
| 88 | reg = <0xa8000000 0x1000>; | ||
| 89 | #pwm-cells = <2>; | ||
| 90 | status = "disabled"; | ||
| 91 | }; | ||
| 92 | |||
| 68 | apb { | 93 | apb { |
| 69 | #address-cells = <1>; | 94 | #address-cells = <1>; |
| 70 | #size-cells = <1>; | 95 | #size-cells = <1>; |
| 71 | compatible = "simple-bus"; | 96 | compatible = "simple-bus"; |
| 72 | ranges = <0xa0000000 0xa0000000 0x10000000 | 97 | ranges = <0xa0000000 0xa0000000 0x20000000 |
| 73 | 0xd0000000 0xd0000000 0x30000000>; | 98 | 0xd0000000 0xd0000000 0x30000000>; |
| 74 | 99 | ||
| 75 | i2c1: i2c@a7000000 { | 100 | i2c1: i2c@a7000000 { |
| @@ -77,18 +102,24 @@ | |||
| 77 | #size-cells = <0>; | 102 | #size-cells = <0>; |
| 78 | compatible = "snps,designware-i2c"; | 103 | compatible = "snps,designware-i2c"; |
| 79 | reg = <0xa7000000 0x1000>; | 104 | reg = <0xa7000000 0x1000>; |
| 105 | interrupts = <21>; | ||
| 106 | interrupt-parent = <&shirq>; | ||
| 80 | status = "disabled"; | 107 | status = "disabled"; |
| 81 | }; | 108 | }; |
| 82 | 109 | ||
| 83 | serial@a3000000 { | 110 | serial@a3000000 { |
| 84 | compatible = "arm,pl011", "arm,primecell"; | 111 | compatible = "arm,pl011", "arm,primecell"; |
| 85 | reg = <0xa3000000 0x1000>; | 112 | reg = <0xa3000000 0x1000>; |
| 113 | interrupts = <13>; | ||
| 114 | interrupt-parent = <&shirq>; | ||
| 86 | status = "disabled"; | 115 | status = "disabled"; |
| 87 | }; | 116 | }; |
| 88 | 117 | ||
| 89 | serial@a4000000 { | 118 | serial@a4000000 { |
| 90 | compatible = "arm,pl011", "arm,primecell"; | 119 | compatible = "arm,pl011", "arm,primecell"; |
| 91 | reg = <0xa4000000 0x1000>; | 120 | reg = <0xa4000000 0x1000>; |
| 121 | interrupts = <14>; | ||
| 122 | interrupt-parent = <&shirq>; | ||
| 92 | status = "disabled"; | 123 | status = "disabled"; |
| 93 | }; | 124 | }; |
| 94 | 125 | ||
diff --git a/arch/arm/boot/dts/spear3xx.dtsi b/arch/arm/boot/dts/spear3xx.dtsi index 3a8bb573692..c2a852d43c4 100644 --- a/arch/arm/boot/dts/spear3xx.dtsi +++ b/arch/arm/boot/dts/spear3xx.dtsi | |||
| @@ -53,6 +53,7 @@ | |||
| 53 | reg = <0xe0800000 0x8000>; | 53 | reg = <0xe0800000 0x8000>; |
| 54 | interrupts = <23 22>; | 54 | interrupts = <23 22>; |
| 55 | interrupt-names = "macirq", "eth_wake_irq"; | 55 | interrupt-names = "macirq", "eth_wake_irq"; |
| 56 | phy-mode = "mii"; | ||
| 56 | status = "disabled"; | 57 | status = "disabled"; |
| 57 | }; | 58 | }; |
| 58 | 59 | ||
| @@ -69,6 +70,8 @@ | |||
| 69 | compatible = "arm,pl022", "arm,primecell"; | 70 | compatible = "arm,pl022", "arm,primecell"; |
| 70 | reg = <0xd0100000 0x1000>; | 71 | reg = <0xd0100000 0x1000>; |
| 71 | interrupts = <20>; | 72 | interrupts = <20>; |
| 73 | #address-cells = <1>; | ||
| 74 | #size-cells = <0>; | ||
| 72 | status = "disabled"; | 75 | status = "disabled"; |
| 73 | }; | 76 | }; |
| 74 | 77 | ||
| @@ -120,7 +123,7 @@ | |||
| 120 | }; | 123 | }; |
| 121 | 124 | ||
| 122 | rtc@fc900000 { | 125 | rtc@fc900000 { |
| 123 | compatible = "st,spear-rtc"; | 126 | compatible = "st,spear600-rtc"; |
| 124 | reg = <0xfc900000 0x1000>; | 127 | reg = <0xfc900000 0x1000>; |
| 125 | interrupts = <10>; | 128 | interrupts = <10>; |
| 126 | status = "disabled"; | 129 | status = "disabled"; |
diff --git a/arch/arm/boot/dts/spear600-evb.dts b/arch/arm/boot/dts/spear600-evb.dts index 1119c22c9a8..d865a891776 100644 --- a/arch/arm/boot/dts/spear600-evb.dts +++ b/arch/arm/boot/dts/spear600-evb.dts | |||
| @@ -24,15 +24,35 @@ | |||
| 24 | }; | 24 | }; |
| 25 | 25 | ||
| 26 | ahb { | 26 | ahb { |
| 27 | clcd@fc200000 { | ||
| 28 | status = "okay"; | ||
| 29 | }; | ||
| 30 | |||
| 27 | dma@fc400000 { | 31 | dma@fc400000 { |
| 28 | status = "okay"; | 32 | status = "okay"; |
| 29 | }; | 33 | }; |
| 30 | 34 | ||
| 35 | ehci@e1800000 { | ||
| 36 | status = "okay"; | ||
| 37 | }; | ||
| 38 | |||
| 39 | ehci@e2000000 { | ||
| 40 | status = "okay"; | ||
| 41 | }; | ||
| 42 | |||
| 31 | gmac: ethernet@e0800000 { | 43 | gmac: ethernet@e0800000 { |
| 32 | phy-mode = "gmii"; | 44 | phy-mode = "gmii"; |
| 33 | status = "okay"; | 45 | status = "okay"; |
| 34 | }; | 46 | }; |
| 35 | 47 | ||
| 48 | ohci@e1900000 { | ||
| 49 | status = "okay"; | ||
| 50 | }; | ||
| 51 | |||
| 52 | ohci@e2100000 { | ||
| 53 | status = "okay"; | ||
| 54 | }; | ||
| 55 | |||
| 36 | smi: flash@fc000000 { | 56 | smi: flash@fc000000 { |
| 37 | status = "okay"; | 57 | status = "okay"; |
| 38 | clock-rate=<50000000>; | 58 | clock-rate=<50000000>; |
| @@ -49,15 +69,23 @@ | |||
| 49 | }; | 69 | }; |
| 50 | partition@10000 { | 70 | partition@10000 { |
| 51 | label = "u-boot"; | 71 | label = "u-boot"; |
| 52 | reg = <0x10000 0x40000>; | 72 | reg = <0x10000 0x50000>; |
| 53 | }; | 73 | }; |
| 54 | partition@50000 { | 74 | partition@60000 { |
| 75 | label = "environment"; | ||
| 76 | reg = <0x60000 0x10000>; | ||
| 77 | }; | ||
| 78 | partition@70000 { | ||
| 79 | label = "dtb"; | ||
| 80 | reg = <0x70000 0x10000>; | ||
| 81 | }; | ||
| 82 | partition@80000 { | ||
| 55 | label = "linux"; | 83 | label = "linux"; |
| 56 | reg = <0x50000 0x2c0000>; | 84 | reg = <0x80000 0x310000>; |
| 57 | }; | 85 | }; |
| 58 | partition@310000 { | 86 | partition@390000 { |
| 59 | label = "rootfs"; | 87 | label = "rootfs"; |
| 60 | reg = <0x310000 0x4f0000>; | 88 | reg = <0x390000 0x0>; |
| 61 | }; | 89 | }; |
| 62 | }; | 90 | }; |
| 63 | }; | 91 | }; |
| @@ -65,10 +93,18 @@ | |||
| 65 | apb { | 93 | apb { |
| 66 | serial@d0000000 { | 94 | serial@d0000000 { |
| 67 | status = "okay"; | 95 | status = "okay"; |
| 96 | pinctrl-names = "default"; | ||
| 97 | pinctrl-0 = <>; | ||
| 68 | }; | 98 | }; |
| 69 | 99 | ||
| 70 | serial@d0080000 { | 100 | serial@d0080000 { |
| 71 | status = "okay"; | 101 | status = "okay"; |
| 102 | pinctrl-names = "default"; | ||
| 103 | pinctrl-0 = <>; | ||
| 104 | }; | ||
| 105 | |||
| 106 | rtc@fc900000 { | ||
| 107 | status = "okay"; | ||
| 72 | }; | 108 | }; |
| 73 | 109 | ||
| 74 | i2c@d0200000 { | 110 | i2c@d0200000 { |
diff --git a/arch/arm/boot/dts/spear600.dtsi b/arch/arm/boot/dts/spear600.dtsi index a3c36e47d7e..e051dde5181 100644 --- a/arch/arm/boot/dts/spear600.dtsi +++ b/arch/arm/boot/dts/spear600.dtsi | |||
| @@ -45,6 +45,14 @@ | |||
| 45 | #interrupt-cells = <1>; | 45 | #interrupt-cells = <1>; |
| 46 | }; | 46 | }; |
| 47 | 47 | ||
| 48 | clcd@fc200000 { | ||
| 49 | compatible = "arm,pl110", "arm,primecell"; | ||
| 50 | reg = <0xfc200000 0x1000>; | ||
| 51 | interrupt-parent = <&vic1>; | ||
| 52 | interrupts = <12>; | ||
| 53 | status = "disabled"; | ||
| 54 | }; | ||
| 55 | |||
| 48 | dma@fc400000 { | 56 | dma@fc400000 { |
| 49 | compatible = "arm,pl080", "arm,primecell"; | 57 | compatible = "arm,pl080", "arm,primecell"; |
| 50 | reg = <0xfc400000 0x1000>; | 58 | reg = <0xfc400000 0x1000>; |
| @@ -59,6 +67,7 @@ | |||
| 59 | interrupt-parent = <&vic1>; | 67 | interrupt-parent = <&vic1>; |
| 60 | interrupts = <24 23>; | 68 | interrupts = <24 23>; |
| 61 | interrupt-names = "macirq", "eth_wake_irq"; | 69 | interrupt-names = "macirq", "eth_wake_irq"; |
| 70 | phy-mode = "gmii"; | ||
| 62 | status = "disabled"; | 71 | status = "disabled"; |
| 63 | }; | 72 | }; |
| 64 | 73 | ||
| @@ -178,6 +187,13 @@ | |||
| 178 | status = "disabled"; | 187 | status = "disabled"; |
| 179 | }; | 188 | }; |
| 180 | 189 | ||
| 190 | rtc@fc900000 { | ||
| 191 | compatible = "st,spear600-rtc"; | ||
| 192 | reg = <0xfc900000 0x1000>; | ||
| 193 | interrupts = <10>; | ||
| 194 | status = "disabled"; | ||
| 195 | }; | ||
| 196 | |||
| 181 | timer@f0000000 { | 197 | timer@f0000000 { |
| 182 | compatible = "st,spear-timer"; | 198 | compatible = "st,spear-timer"; |
| 183 | reg = <0xf0000000 0x400>; | 199 | reg = <0xf0000000 0x400>; |
diff --git a/arch/arm/mach-spear13xx/include/mach/spear.h b/arch/arm/mach-spear13xx/include/mach/spear.h index 07d90acc92c..7cfa6818865 100644 --- a/arch/arm/mach-spear13xx/include/mach/spear.h +++ b/arch/arm/mach-spear13xx/include/mach/spear.h | |||
| @@ -47,14 +47,6 @@ | |||
| 47 | #define DMAC1_BASE UL(0xEB000000) | 47 | #define DMAC1_BASE UL(0xEB000000) |
| 48 | #define MCIF_CF_BASE UL(0xB2800000) | 48 | #define MCIF_CF_BASE UL(0xB2800000) |
| 49 | 49 | ||
| 50 | /* Devices present in SPEAr1310 */ | ||
| 51 | #ifdef CONFIG_MACH_SPEAR1310 | ||
| 52 | #define SPEAR1310_RAS_GRP1_BASE UL(0xD8000000) | ||
| 53 | #define VA_SPEAR1310_RAS_GRP1_BASE UL(0xFA000000) | ||
| 54 | #define SPEAR1310_RAS_BASE UL(0xD8400000) | ||
| 55 | #define VA_SPEAR1310_RAS_BASE IOMEM(UL(0xFA400000)) | ||
| 56 | #endif /* CONFIG_MACH_SPEAR1310 */ | ||
| 57 | |||
| 58 | /* Debug uart for linux, will be used for debug and uncompress messages */ | 50 | /* Debug uart for linux, will be used for debug and uncompress messages */ |
| 59 | #define SPEAR_DBG_UART_BASE UART_BASE | 51 | #define SPEAR_DBG_UART_BASE UART_BASE |
| 60 | #define VA_SPEAR_DBG_UART_BASE VA_UART_BASE | 52 | #define VA_SPEAR_DBG_UART_BASE VA_UART_BASE |
diff --git a/arch/arm/mach-spear13xx/spear1310.c b/arch/arm/mach-spear13xx/spear1310.c index 9fbbfc5650a..02f4724bb0d 100644 --- a/arch/arm/mach-spear13xx/spear1310.c +++ b/arch/arm/mach-spear13xx/spear1310.c | |||
| @@ -15,6 +15,7 @@ | |||
| 15 | 15 | ||
| 16 | #include <linux/amba/pl022.h> | 16 | #include <linux/amba/pl022.h> |
| 17 | #include <linux/of_platform.h> | 17 | #include <linux/of_platform.h> |
| 18 | #include <linux/pata_arasan_cf_data.h> | ||
| 18 | #include <asm/hardware/gic.h> | 19 | #include <asm/hardware/gic.h> |
| 19 | #include <asm/mach/arch.h> | 20 | #include <asm/mach/arch.h> |
| 20 | #include <asm/mach/map.h> | 21 | #include <asm/mach/map.h> |
| @@ -27,16 +28,25 @@ | |||
| 27 | #define SPEAR1310_SATA1_BASE UL(0xB1800000) | 28 | #define SPEAR1310_SATA1_BASE UL(0xB1800000) |
| 28 | #define SPEAR1310_SATA2_BASE UL(0xB4000000) | 29 | #define SPEAR1310_SATA2_BASE UL(0xB4000000) |
| 29 | 30 | ||
| 31 | #define SPEAR1310_RAS_GRP1_BASE UL(0xD8000000) | ||
| 32 | #define VA_SPEAR1310_RAS_GRP1_BASE UL(0xFA000000) | ||
| 33 | #define SPEAR1310_RAS_BASE UL(0xD8400000) | ||
| 34 | #define VA_SPEAR1310_RAS_BASE IOMEM(UL(0xFA400000)) | ||
| 35 | |||
| 36 | static struct arasan_cf_pdata cf_pdata = { | ||
| 37 | .cf_if_clk = CF_IF_CLK_166M, | ||
| 38 | .quirk = CF_BROKEN_UDMA, | ||
| 39 | .dma_priv = &cf_dma_priv, | ||
| 40 | }; | ||
| 41 | |||
| 30 | /* ssp device registration */ | 42 | /* ssp device registration */ |
| 31 | static struct pl022_ssp_controller ssp1_plat_data = { | 43 | static struct pl022_ssp_controller ssp1_plat_data = { |
| 32 | .bus_id = 0, | ||
| 33 | .enable_dma = 0, | 44 | .enable_dma = 0, |
| 34 | .num_chipselect = 3, | ||
| 35 | }; | 45 | }; |
| 36 | 46 | ||
| 37 | /* Add SPEAr1310 auxdata to pass platform data */ | 47 | /* Add SPEAr1310 auxdata to pass platform data */ |
| 38 | static struct of_dev_auxdata spear1310_auxdata_lookup[] __initdata = { | 48 | static struct of_dev_auxdata spear1310_auxdata_lookup[] __initdata = { |
| 39 | OF_DEV_AUXDATA("arasan,cf-spear1340", MCIF_CF_BASE, NULL, &cf_dma_priv), | 49 | OF_DEV_AUXDATA("arasan,cf-spear1340", MCIF_CF_BASE, NULL, &cf_pdata), |
| 40 | OF_DEV_AUXDATA("snps,dma-spear1340", DMAC0_BASE, NULL, &dmac_plat_data), | 50 | OF_DEV_AUXDATA("snps,dma-spear1340", DMAC0_BASE, NULL, &dmac_plat_data), |
| 41 | OF_DEV_AUXDATA("snps,dma-spear1340", DMAC1_BASE, NULL, &dmac_plat_data), | 51 | OF_DEV_AUXDATA("snps,dma-spear1340", DMAC1_BASE, NULL, &dmac_plat_data), |
| 42 | OF_DEV_AUXDATA("arm,pl022", SSP_BASE, NULL, &pl022_plat_data), | 52 | OF_DEV_AUXDATA("arm,pl022", SSP_BASE, NULL, &pl022_plat_data), |
diff --git a/arch/arm/mach-spear13xx/spear13xx.c b/arch/arm/mach-spear13xx/spear13xx.c index 5633d698f1e..c4af775a845 100644 --- a/arch/arm/mach-spear13xx/spear13xx.c +++ b/arch/arm/mach-spear13xx/spear13xx.c | |||
| @@ -57,12 +57,10 @@ static struct dw_dma_slave ssp_dma_param[] = { | |||
| 57 | }; | 57 | }; |
| 58 | 58 | ||
| 59 | struct pl022_ssp_controller pl022_plat_data = { | 59 | struct pl022_ssp_controller pl022_plat_data = { |
| 60 | .bus_id = 0, | ||
| 61 | .enable_dma = 1, | 60 | .enable_dma = 1, |
| 62 | .dma_filter = dw_dma_filter, | 61 | .dma_filter = dw_dma_filter, |
| 63 | .dma_rx_param = &ssp_dma_param[1], | 62 | .dma_rx_param = &ssp_dma_param[1], |
| 64 | .dma_tx_param = &ssp_dma_param[0], | 63 | .dma_tx_param = &ssp_dma_param[0], |
| 65 | .num_chipselect = 3, | ||
| 66 | }; | 64 | }; |
| 67 | 65 | ||
| 68 | /* CF device registration */ | 66 | /* CF device registration */ |
diff --git a/arch/arm/mach-spear3xx/include/mach/irqs.h b/arch/arm/mach-spear3xx/include/mach/irqs.h index 803de76f5f3..f95e5b2b668 100644 --- a/arch/arm/mach-spear3xx/include/mach/irqs.h +++ b/arch/arm/mach-spear3xx/include/mach/irqs.h | |||
| @@ -14,14 +14,6 @@ | |||
| 14 | #ifndef __MACH_IRQS_H | 14 | #ifndef __MACH_IRQS_H |
| 15 | #define __MACH_IRQS_H | 15 | #define __MACH_IRQS_H |
| 16 | 16 | ||
| 17 | /* FIXME: probe all these from DT */ | 17 | #define NR_IRQS 256 |
| 18 | #define SPEAR3XX_IRQ_INTRCOMM_RAS_ARM 1 | ||
| 19 | #define SPEAR3XX_IRQ_GEN_RAS_1 28 | ||
| 20 | #define SPEAR3XX_IRQ_GEN_RAS_2 29 | ||
| 21 | #define SPEAR3XX_IRQ_GEN_RAS_3 30 | ||
| 22 | #define SPEAR3XX_IRQ_VIC_END 32 | ||
| 23 | #define SPEAR3XX_VIRQ_START SPEAR3XX_IRQ_VIC_END | ||
| 24 | |||
| 25 | #define NR_IRQS 160 | ||
| 26 | 18 | ||
| 27 | #endif /* __MACH_IRQS_H */ | 19 | #endif /* __MACH_IRQS_H */ |
diff --git a/arch/arm/mach-spear3xx/spear300.c b/arch/arm/mach-spear3xx/spear300.c index 6ec30054996..a69cbfdb07e 100644 --- a/arch/arm/mach-spear3xx/spear300.c +++ b/arch/arm/mach-spear3xx/spear300.c | |||
| @@ -17,102 +17,9 @@ | |||
| 17 | #include <linux/of_platform.h> | 17 | #include <linux/of_platform.h> |
| 18 | #include <asm/hardware/vic.h> | 18 | #include <asm/hardware/vic.h> |
| 19 | #include <asm/mach/arch.h> | 19 | #include <asm/mach/arch.h> |
| 20 | #include <plat/shirq.h> | ||
| 21 | #include <mach/generic.h> | 20 | #include <mach/generic.h> |
| 22 | #include <mach/spear.h> | 21 | #include <mach/spear.h> |
| 23 | 22 | ||
| 24 | /* Base address of various IPs */ | ||
| 25 | #define SPEAR300_TELECOM_BASE UL(0x50000000) | ||
| 26 | |||
| 27 | /* Interrupt registers offsets and masks */ | ||
| 28 | #define SPEAR300_INT_ENB_MASK_REG 0x54 | ||
| 29 | #define SPEAR300_INT_STS_MASK_REG 0x58 | ||
| 30 | #define SPEAR300_IT_PERS_S_IRQ_MASK (1 << 0) | ||
| 31 | #define SPEAR300_IT_CHANGE_S_IRQ_MASK (1 << 1) | ||
| 32 | #define SPEAR300_I2S_IRQ_MASK (1 << 2) | ||
| 33 | #define SPEAR300_TDM_IRQ_MASK (1 << 3) | ||
| 34 | #define SPEAR300_CAMERA_L_IRQ_MASK (1 << 4) | ||
| 35 | #define SPEAR300_CAMERA_F_IRQ_MASK (1 << 5) | ||
| 36 | #define SPEAR300_CAMERA_V_IRQ_MASK (1 << 6) | ||
| 37 | #define SPEAR300_KEYBOARD_IRQ_MASK (1 << 7) | ||
| 38 | #define SPEAR300_GPIO1_IRQ_MASK (1 << 8) | ||
| 39 | |||
| 40 | #define SPEAR300_SHIRQ_RAS1_MASK 0x1FF | ||
| 41 | |||
| 42 | #define SPEAR300_SOC_CONFIG_BASE UL(0x99000000) | ||
| 43 | |||
| 44 | |||
| 45 | /* SPEAr300 Virtual irq definitions */ | ||
| 46 | /* IRQs sharing IRQ_GEN_RAS_1 */ | ||
| 47 | #define SPEAR300_VIRQ_IT_PERS_S (SPEAR3XX_VIRQ_START + 0) | ||
| 48 | #define SPEAR300_VIRQ_IT_CHANGE_S (SPEAR3XX_VIRQ_START + 1) | ||
| 49 | #define SPEAR300_VIRQ_I2S (SPEAR3XX_VIRQ_START + 2) | ||
| 50 | #define SPEAR300_VIRQ_TDM (SPEAR3XX_VIRQ_START + 3) | ||
| 51 | #define SPEAR300_VIRQ_CAMERA_L (SPEAR3XX_VIRQ_START + 4) | ||
| 52 | #define SPEAR300_VIRQ_CAMERA_F (SPEAR3XX_VIRQ_START + 5) | ||
| 53 | #define SPEAR300_VIRQ_CAMERA_V (SPEAR3XX_VIRQ_START + 6) | ||
| 54 | #define SPEAR300_VIRQ_KEYBOARD (SPEAR3XX_VIRQ_START + 7) | ||
| 55 | #define SPEAR300_VIRQ_GPIO1 (SPEAR3XX_VIRQ_START + 8) | ||
| 56 | |||
| 57 | /* IRQs sharing IRQ_GEN_RAS_3 */ | ||
| 58 | #define SPEAR300_IRQ_CLCD SPEAR3XX_IRQ_GEN_RAS_3 | ||
| 59 | |||
| 60 | /* IRQs sharing IRQ_INTRCOMM_RAS_ARM */ | ||
| 61 | #define SPEAR300_IRQ_SDHCI SPEAR3XX_IRQ_INTRCOMM_RAS_ARM | ||
| 62 | |||
| 63 | /* spear3xx shared irq */ | ||
| 64 | static struct shirq_dev_config shirq_ras1_config[] = { | ||
| 65 | { | ||
| 66 | .virq = SPEAR300_VIRQ_IT_PERS_S, | ||
| 67 | .enb_mask = SPEAR300_IT_PERS_S_IRQ_MASK, | ||
| 68 | .status_mask = SPEAR300_IT_PERS_S_IRQ_MASK, | ||
| 69 | }, { | ||
| 70 | .virq = SPEAR300_VIRQ_IT_CHANGE_S, | ||
| 71 | .enb_mask = SPEAR300_IT_CHANGE_S_IRQ_MASK, | ||
| 72 | .status_mask = SPEAR300_IT_CHANGE_S_IRQ_MASK, | ||
| 73 | }, { | ||
| 74 | .virq = SPEAR300_VIRQ_I2S, | ||
| 75 | .enb_mask = SPEAR300_I2S_IRQ_MASK, | ||
| 76 | .status_mask = SPEAR300_I2S_IRQ_MASK, | ||
| 77 | }, { | ||
| 78 | .virq = SPEAR300_VIRQ_TDM, | ||
| 79 | .enb_mask = SPEAR300_TDM_IRQ_MASK, | ||
| 80 | .status_mask = SPEAR300_TDM_IRQ_MASK, | ||
| 81 | }, { | ||
| 82 | .virq = SPEAR300_VIRQ_CAMERA_L, | ||
| 83 | .enb_mask = SPEAR300_CAMERA_L_IRQ_MASK, | ||
| 84 | .status_mask = SPEAR300_CAMERA_L_IRQ_MASK, | ||
| 85 | }, { | ||
| 86 | .virq = SPEAR300_VIRQ_CAMERA_F, | ||
| 87 | .enb_mask = SPEAR300_CAMERA_F_IRQ_MASK, | ||
| 88 | .status_mask = SPEAR300_CAMERA_F_IRQ_MASK, | ||
| 89 | }, { | ||
| 90 | .virq = SPEAR300_VIRQ_CAMERA_V, | ||
| 91 | .enb_mask = SPEAR300_CAMERA_V_IRQ_MASK, | ||
| 92 | .status_mask = SPEAR300_CAMERA_V_IRQ_MASK, | ||
| 93 | }, { | ||
| 94 | .virq = SPEAR300_VIRQ_KEYBOARD, | ||
| 95 | .enb_mask = SPEAR300_KEYBOARD_IRQ_MASK, | ||
| 96 | .status_mask = SPEAR300_KEYBOARD_IRQ_MASK, | ||
| 97 | }, { | ||
| 98 | .virq = SPEAR300_VIRQ_GPIO1, | ||
| 99 | .enb_mask = SPEAR300_GPIO1_IRQ_MASK, | ||
| 100 | .status_mask = SPEAR300_GPIO1_IRQ_MASK, | ||
| 101 | }, | ||
| 102 | }; | ||
| 103 | |||
| 104 | static struct spear_shirq shirq_ras1 = { | ||
| 105 | .irq = SPEAR3XX_IRQ_GEN_RAS_1, | ||
| 106 | .dev_config = shirq_ras1_config, | ||
| 107 | .dev_count = ARRAY_SIZE(shirq_ras1_config), | ||
| 108 | .regs = { | ||
| 109 | .enb_reg = SPEAR300_INT_ENB_MASK_REG, | ||
| 110 | .status_reg = SPEAR300_INT_STS_MASK_REG, | ||
| 111 | .status_reg_mask = SPEAR300_SHIRQ_RAS1_MASK, | ||
| 112 | .clear_reg = -1, | ||
| 113 | }, | ||
| 114 | }; | ||
| 115 | |||
| 116 | /* DMAC platform data's slave info */ | 23 | /* DMAC platform data's slave info */ |
| 117 | struct pl08x_channel_data spear300_dma_info[] = { | 24 | struct pl08x_channel_data spear300_dma_info[] = { |
| 118 | { | 25 | { |
| @@ -285,21 +192,11 @@ static struct of_dev_auxdata spear300_auxdata_lookup[] __initdata = { | |||
| 285 | 192 | ||
| 286 | static void __init spear300_dt_init(void) | 193 | static void __init spear300_dt_init(void) |
| 287 | { | 194 | { |
| 288 | int ret; | ||
| 289 | |||
| 290 | pl080_plat_data.slave_channels = spear300_dma_info; | 195 | pl080_plat_data.slave_channels = spear300_dma_info; |
| 291 | pl080_plat_data.num_slave_channels = ARRAY_SIZE(spear300_dma_info); | 196 | pl080_plat_data.num_slave_channels = ARRAY_SIZE(spear300_dma_info); |
| 292 | 197 | ||
| 293 | of_platform_populate(NULL, of_default_bus_match_table, | 198 | of_platform_populate(NULL, of_default_bus_match_table, |
| 294 | spear300_auxdata_lookup, NULL); | 199 | spear300_auxdata_lookup, NULL); |
| 295 | |||
| 296 | /* shared irq registration */ | ||
| 297 | shirq_ras1.regs.base = ioremap(SPEAR300_TELECOM_BASE, SZ_4K); | ||
| 298 | if (shirq_ras1.regs.base) { | ||
| 299 | ret = spear_shirq_register(&shirq_ras1); | ||
| 300 | if (ret) | ||
| 301 | pr_err("Error registering Shared IRQ\n"); | ||
| 302 | } | ||
| 303 | } | 200 | } |
| 304 | 201 | ||
| 305 | static const char * const spear300_dt_board_compat[] = { | 202 | static const char * const spear300_dt_board_compat[] = { |
diff --git a/arch/arm/mach-spear3xx/spear310.c b/arch/arm/mach-spear3xx/spear310.c index 1d0e435b904..b963ebb10b5 100644 --- a/arch/arm/mach-spear3xx/spear310.c +++ b/arch/arm/mach-spear3xx/spear310.c | |||
| @@ -18,7 +18,6 @@ | |||
| 18 | #include <linux/of_platform.h> | 18 | #include <linux/of_platform.h> |
| 19 | #include <asm/hardware/vic.h> | 19 | #include <asm/hardware/vic.h> |
| 20 | #include <asm/mach/arch.h> | 20 | #include <asm/mach/arch.h> |
| 21 | #include <plat/shirq.h> | ||
| 22 | #include <mach/generic.h> | 21 | #include <mach/generic.h> |
| 23 | #include <mach/spear.h> | 22 | #include <mach/spear.h> |
| 24 | 23 | ||
| @@ -27,176 +26,6 @@ | |||
| 27 | #define SPEAR310_UART3_BASE UL(0xB2100000) | 26 | #define SPEAR310_UART3_BASE UL(0xB2100000) |
| 28 | #define SPEAR310_UART4_BASE UL(0xB2180000) | 27 | #define SPEAR310_UART4_BASE UL(0xB2180000) |
| 29 | #define SPEAR310_UART5_BASE UL(0xB2200000) | 28 | #define SPEAR310_UART5_BASE UL(0xB2200000) |
| 30 | #define SPEAR310_SOC_CONFIG_BASE UL(0xB4000000) | ||
| 31 | |||
| 32 | /* Interrupt registers offsets and masks */ | ||
| 33 | #define SPEAR310_INT_STS_MASK_REG 0x04 | ||
| 34 | #define SPEAR310_SMII0_IRQ_MASK (1 << 0) | ||
| 35 | #define SPEAR310_SMII1_IRQ_MASK (1 << 1) | ||
| 36 | #define SPEAR310_SMII2_IRQ_MASK (1 << 2) | ||
| 37 | #define SPEAR310_SMII3_IRQ_MASK (1 << 3) | ||
| 38 | #define SPEAR310_WAKEUP_SMII0_IRQ_MASK (1 << 4) | ||
| 39 | #define SPEAR310_WAKEUP_SMII1_IRQ_MASK (1 << 5) | ||
| 40 | #define SPEAR310_WAKEUP_SMII2_IRQ_MASK (1 << 6) | ||
| 41 | #define SPEAR310_WAKEUP_SMII3_IRQ_MASK (1 << 7) | ||
| 42 | #define SPEAR310_UART1_IRQ_MASK (1 << 8) | ||
| 43 | #define SPEAR310_UART2_IRQ_MASK (1 << 9) | ||
| 44 | #define SPEAR310_UART3_IRQ_MASK (1 << 10) | ||
| 45 | #define SPEAR310_UART4_IRQ_MASK (1 << 11) | ||
| 46 | #define SPEAR310_UART5_IRQ_MASK (1 << 12) | ||
| 47 | #define SPEAR310_EMI_IRQ_MASK (1 << 13) | ||
| 48 | #define SPEAR310_TDM_HDLC_IRQ_MASK (1 << 14) | ||
| 49 | #define SPEAR310_RS485_0_IRQ_MASK (1 << 15) | ||
| 50 | #define SPEAR310_RS485_1_IRQ_MASK (1 << 16) | ||
| 51 | |||
| 52 | #define SPEAR310_SHIRQ_RAS1_MASK 0x000FF | ||
| 53 | #define SPEAR310_SHIRQ_RAS2_MASK 0x01F00 | ||
| 54 | #define SPEAR310_SHIRQ_RAS3_MASK 0x02000 | ||
| 55 | #define SPEAR310_SHIRQ_INTRCOMM_RAS_MASK 0x1C000 | ||
| 56 | |||
| 57 | /* SPEAr310 Virtual irq definitions */ | ||
| 58 | /* IRQs sharing IRQ_GEN_RAS_1 */ | ||
| 59 | #define SPEAR310_VIRQ_SMII0 (SPEAR3XX_VIRQ_START + 0) | ||
| 60 | #define SPEAR310_VIRQ_SMII1 (SPEAR3XX_VIRQ_START + 1) | ||
| 61 | #define SPEAR310_VIRQ_SMII2 (SPEAR3XX_VIRQ_START + 2) | ||
| 62 | #define SPEAR310_VIRQ_SMII3 (SPEAR3XX_VIRQ_START + 3) | ||
| 63 | #define SPEAR310_VIRQ_WAKEUP_SMII0 (SPEAR3XX_VIRQ_START + 4) | ||
| 64 | #define SPEAR310_VIRQ_WAKEUP_SMII1 (SPEAR3XX_VIRQ_START + 5) | ||
| 65 | #define SPEAR310_VIRQ_WAKEUP_SMII2 (SPEAR3XX_VIRQ_START + 6) | ||
| 66 | #define SPEAR310_VIRQ_WAKEUP_SMII3 (SPEAR3XX_VIRQ_START + 7) | ||
| 67 | |||
| 68 | /* IRQs sharing IRQ_GEN_RAS_2 */ | ||
| 69 | #define SPEAR310_VIRQ_UART1 (SPEAR3XX_VIRQ_START + 8) | ||
| 70 | #define SPEAR310_VIRQ_UART2 (SPEAR3XX_VIRQ_START + 9) | ||
| 71 | #define SPEAR310_VIRQ_UART3 (SPEAR3XX_VIRQ_START + 10) | ||
| 72 | #define SPEAR310_VIRQ_UART4 (SPEAR3XX_VIRQ_START + 11) | ||
| 73 | #define SPEAR310_VIRQ_UART5 (SPEAR3XX_VIRQ_START + 12) | ||
| 74 | |||
| 75 | /* IRQs sharing IRQ_GEN_RAS_3 */ | ||
| 76 | #define SPEAR310_VIRQ_EMI (SPEAR3XX_VIRQ_START + 13) | ||
| 77 | #define SPEAR310_VIRQ_PLGPIO (SPEAR3XX_VIRQ_START + 14) | ||
| 78 | |||
| 79 | /* IRQs sharing IRQ_INTRCOMM_RAS_ARM */ | ||
| 80 | #define SPEAR310_VIRQ_TDM_HDLC (SPEAR3XX_VIRQ_START + 15) | ||
| 81 | #define SPEAR310_VIRQ_RS485_0 (SPEAR3XX_VIRQ_START + 16) | ||
| 82 | #define SPEAR310_VIRQ_RS485_1 (SPEAR3XX_VIRQ_START + 17) | ||
| 83 | |||
| 84 | |||
| 85 | /* spear3xx shared irq */ | ||
| 86 | static struct shirq_dev_config shirq_ras1_config[] = { | ||
| 87 | { | ||
| 88 | .virq = SPEAR310_VIRQ_SMII0, | ||
| 89 | .status_mask = SPEAR310_SMII0_IRQ_MASK, | ||
| 90 | }, { | ||
| 91 | .virq = SPEAR310_VIRQ_SMII1, | ||
| 92 | .status_mask = SPEAR310_SMII1_IRQ_MASK, | ||
| 93 | }, { | ||
| 94 | .virq = SPEAR310_VIRQ_SMII2, | ||
| 95 | .status_mask = SPEAR310_SMII2_IRQ_MASK, | ||
| 96 | }, { | ||
| 97 | .virq = SPEAR310_VIRQ_SMII3, | ||
| 98 | .status_mask = SPEAR310_SMII3_IRQ_MASK, | ||
| 99 | }, { | ||
| 100 | .virq = SPEAR310_VIRQ_WAKEUP_SMII0, | ||
| 101 | .status_mask = SPEAR310_WAKEUP_SMII0_IRQ_MASK, | ||
| 102 | }, { | ||
| 103 | .virq = SPEAR310_VIRQ_WAKEUP_SMII1, | ||
| 104 | .status_mask = SPEAR310_WAKEUP_SMII1_IRQ_MASK, | ||
| 105 | }, { | ||
| 106 | .virq = SPEAR310_VIRQ_WAKEUP_SMII2, | ||
| 107 | .status_mask = SPEAR310_WAKEUP_SMII2_IRQ_MASK, | ||
| 108 | }, { | ||
| 109 | .virq = SPEAR310_VIRQ_WAKEUP_SMII3, | ||
| 110 | .status_mask = SPEAR310_WAKEUP_SMII3_IRQ_MASK, | ||
| 111 | }, | ||
| 112 | }; | ||
| 113 | |||
| 114 | static struct spear_shirq shirq_ras1 = { | ||
| 115 | .irq = SPEAR3XX_IRQ_GEN_RAS_1, | ||
| 116 | .dev_config = shirq_ras1_config, | ||
| 117 | .dev_count = ARRAY_SIZE(shirq_ras1_config), | ||
| 118 | .regs = { | ||
| 119 | .enb_reg = -1, | ||
| 120 | .status_reg = SPEAR310_INT_STS_MASK_REG, | ||
| 121 | .status_reg_mask = SPEAR310_SHIRQ_RAS1_MASK, | ||
| 122 | .clear_reg = -1, | ||
| 123 | }, | ||
| 124 | }; | ||
| 125 | |||
| 126 | static struct shirq_dev_config shirq_ras2_config[] = { | ||
| 127 | { | ||
| 128 | .virq = SPEAR310_VIRQ_UART1, | ||
| 129 | .status_mask = SPEAR310_UART1_IRQ_MASK, | ||
| 130 | }, { | ||
| 131 | .virq = SPEAR310_VIRQ_UART2, | ||
| 132 | .status_mask = SPEAR310_UART2_IRQ_MASK, | ||
| 133 | }, { | ||
| 134 | .virq = SPEAR310_VIRQ_UART3, | ||
| 135 | .status_mask = SPEAR310_UART3_IRQ_MASK, | ||
| 136 | }, { | ||
| 137 | .virq = SPEAR310_VIRQ_UART4, | ||
| 138 | .status_mask = SPEAR310_UART4_IRQ_MASK, | ||
| 139 | }, { | ||
| 140 | .virq = SPEAR310_VIRQ_UART5, | ||
| 141 | .status_mask = SPEAR310_UART5_IRQ_MASK, | ||
| 142 | }, | ||
| 143 | }; | ||
| 144 | |||
| 145 | static struct spear_shirq shirq_ras2 = { | ||
| 146 | .irq = SPEAR3XX_IRQ_GEN_RAS_2, | ||
| 147 | .dev_config = shirq_ras2_config, | ||
| 148 | .dev_count = ARRAY_SIZE(shirq_ras2_config), | ||
| 149 | .regs = { | ||
| 150 | .enb_reg = -1, | ||
| 151 | .status_reg = SPEAR310_INT_STS_MASK_REG, | ||
| 152 | .status_reg_mask = SPEAR310_SHIRQ_RAS2_MASK, | ||
| 153 | .clear_reg = -1, | ||
| 154 | }, | ||
| 155 | }; | ||
| 156 | |||
| 157 | static struct shirq_dev_config shirq_ras3_config[] = { | ||
| 158 | { | ||
| 159 | .virq = SPEAR310_VIRQ_EMI, | ||
| 160 | .status_mask = SPEAR310_EMI_IRQ_MASK, | ||
| 161 | }, | ||
| 162 | }; | ||
| 163 | |||
| 164 | static struct spear_shirq shirq_ras3 = { | ||
| 165 | .irq = SPEAR3XX_IRQ_GEN_RAS_3, | ||
| 166 | .dev_config = shirq_ras3_config, | ||
| 167 | .dev_count = ARRAY_SIZE(shirq_ras3_config), | ||
| 168 | .regs = { | ||
| 169 | .enb_reg = -1, | ||
| 170 | .status_reg = SPEAR310_INT_STS_MASK_REG, | ||
| 171 | .status_reg_mask = SPEAR310_SHIRQ_RAS3_MASK, | ||
| 172 | .clear_reg = -1, | ||
| 173 | }, | ||
| 174 | }; | ||
| 175 | |||
| 176 | static struct shirq_dev_config shirq_intrcomm_ras_config[] = { | ||
| 177 | { | ||
| 178 | .virq = SPEAR310_VIRQ_TDM_HDLC, | ||
| 179 | .status_mask = SPEAR310_TDM_HDLC_IRQ_MASK, | ||
| 180 | }, { | ||
| 181 | .virq = SPEAR310_VIRQ_RS485_0, | ||
| 182 | .status_mask = SPEAR310_RS485_0_IRQ_MASK, | ||
| 183 | }, { | ||
| 184 | .virq = SPEAR310_VIRQ_RS485_1, | ||
| 185 | .status_mask = SPEAR310_RS485_1_IRQ_MASK, | ||
| 186 | }, | ||
| 187 | }; | ||
| 188 | |||
| 189 | static struct spear_shirq shirq_intrcomm_ras = { | ||
| 190 | .irq = SPEAR3XX_IRQ_INTRCOMM_RAS_ARM, | ||
| 191 | .dev_config = shirq_intrcomm_ras_config, | ||
| 192 | .dev_count = ARRAY_SIZE(shirq_intrcomm_ras_config), | ||
| 193 | .regs = { | ||
| 194 | .enb_reg = -1, | ||
| 195 | .status_reg = SPEAR310_INT_STS_MASK_REG, | ||
| 196 | .status_reg_mask = SPEAR310_SHIRQ_INTRCOMM_RAS_MASK, | ||
| 197 | .clear_reg = -1, | ||
| 198 | }, | ||
| 199 | }; | ||
| 200 | 29 | ||
| 201 | /* DMAC platform data's slave info */ | 30 | /* DMAC platform data's slave info */ |
| 202 | struct pl08x_channel_data spear310_dma_info[] = { | 31 | struct pl08x_channel_data spear310_dma_info[] = { |
| @@ -405,42 +234,11 @@ static struct of_dev_auxdata spear310_auxdata_lookup[] __initdata = { | |||
| 405 | 234 | ||
| 406 | static void __init spear310_dt_init(void) | 235 | static void __init spear310_dt_init(void) |
| 407 | { | 236 | { |
| 408 | void __iomem *base; | ||
| 409 | int ret; | ||
| 410 | |||
| 411 | pl080_plat_data.slave_channels = spear310_dma_info; | 237 | pl080_plat_data.slave_channels = spear310_dma_info; |
| 412 | pl080_plat_data.num_slave_channels = ARRAY_SIZE(spear310_dma_info); | 238 | pl080_plat_data.num_slave_channels = ARRAY_SIZE(spear310_dma_info); |
| 413 | 239 | ||
| 414 | of_platform_populate(NULL, of_default_bus_match_table, | 240 | of_platform_populate(NULL, of_default_bus_match_table, |
| 415 | spear310_auxdata_lookup, NULL); | 241 | spear310_auxdata_lookup, NULL); |
| 416 | |||
| 417 | /* shared irq registration */ | ||
| 418 | base = ioremap(SPEAR310_SOC_CONFIG_BASE, SZ_4K); | ||
| 419 | if (base) { | ||
| 420 | /* shirq 1 */ | ||
| 421 | shirq_ras1.regs.base = base; | ||
| 422 | ret = spear_shirq_register(&shirq_ras1); | ||
| 423 | if (ret) | ||
| 424 | pr_err("Error registering Shared IRQ 1\n"); | ||
| 425 | |||
| 426 | /* shirq 2 */ | ||
| 427 | shirq_ras2.regs.base = base; | ||
| 428 | ret = spear_shirq_register(&shirq_ras2); | ||
| 429 | if (ret) | ||
| 430 | pr_err("Error registering Shared IRQ 2\n"); | ||
| 431 | |||
| 432 | /* shirq 3 */ | ||
| 433 | shirq_ras3.regs.base = base; | ||
| 434 | ret = spear_shirq_register(&shirq_ras3); | ||
| 435 | if (ret) | ||
| 436 | pr_err("Error registering Shared IRQ 3\n"); | ||
| 437 | |||
| 438 | /* shirq 4 */ | ||
| 439 | shirq_intrcomm_ras.regs.base = base; | ||
| 440 | ret = spear_shirq_register(&shirq_intrcomm_ras); | ||
| 441 | if (ret) | ||
| 442 | pr_err("Error registering Shared IRQ 4\n"); | ||
| 443 | } | ||
| 444 | } | 242 | } |
| 445 | 243 | ||
| 446 | static const char * const spear310_dt_board_compat[] = { | 244 | static const char * const spear310_dt_board_compat[] = { |
diff --git a/arch/arm/mach-spear3xx/spear320.c b/arch/arm/mach-spear3xx/spear320.c index fd823c62457..66e3a0c33e7 100644 --- a/arch/arm/mach-spear3xx/spear320.c +++ b/arch/arm/mach-spear3xx/spear320.c | |||
| @@ -19,7 +19,6 @@ | |||
| 19 | #include <linux/of_platform.h> | 19 | #include <linux/of_platform.h> |
| 20 | #include <asm/hardware/vic.h> | 20 | #include <asm/hardware/vic.h> |
| 21 | #include <asm/mach/arch.h> | 21 | #include <asm/mach/arch.h> |
| 22 | #include <plat/shirq.h> | ||
| 23 | #include <mach/generic.h> | 22 | #include <mach/generic.h> |
| 24 | #include <mach/spear.h> | 23 | #include <mach/spear.h> |
| 25 | 24 | ||
| @@ -28,184 +27,6 @@ | |||
| 28 | #define SPEAR320_SSP0_BASE UL(0xA5000000) | 27 | #define SPEAR320_SSP0_BASE UL(0xA5000000) |
| 29 | #define SPEAR320_SSP1_BASE UL(0xA6000000) | 28 | #define SPEAR320_SSP1_BASE UL(0xA6000000) |
| 30 | 29 | ||
| 31 | /* Interrupt registers offsets and masks */ | ||
| 32 | #define SPEAR320_INT_STS_MASK_REG 0x04 | ||
| 33 | #define SPEAR320_INT_CLR_MASK_REG 0x04 | ||
| 34 | #define SPEAR320_INT_ENB_MASK_REG 0x08 | ||
| 35 | #define SPEAR320_GPIO_IRQ_MASK (1 << 0) | ||
| 36 | #define SPEAR320_I2S_PLAY_IRQ_MASK (1 << 1) | ||
| 37 | #define SPEAR320_I2S_REC_IRQ_MASK (1 << 2) | ||
| 38 | #define SPEAR320_EMI_IRQ_MASK (1 << 7) | ||
| 39 | #define SPEAR320_CLCD_IRQ_MASK (1 << 8) | ||
| 40 | #define SPEAR320_SPP_IRQ_MASK (1 << 9) | ||
| 41 | #define SPEAR320_SDHCI_IRQ_MASK (1 << 10) | ||
| 42 | #define SPEAR320_CAN_U_IRQ_MASK (1 << 11) | ||
| 43 | #define SPEAR320_CAN_L_IRQ_MASK (1 << 12) | ||
| 44 | #define SPEAR320_UART1_IRQ_MASK (1 << 13) | ||
| 45 | #define SPEAR320_UART2_IRQ_MASK (1 << 14) | ||
| 46 | #define SPEAR320_SSP1_IRQ_MASK (1 << 15) | ||
| 47 | #define SPEAR320_SSP2_IRQ_MASK (1 << 16) | ||
| 48 | #define SPEAR320_SMII0_IRQ_MASK (1 << 17) | ||
| 49 | #define SPEAR320_MII1_SMII1_IRQ_MASK (1 << 18) | ||
| 50 | #define SPEAR320_WAKEUP_SMII0_IRQ_MASK (1 << 19) | ||
| 51 | #define SPEAR320_WAKEUP_MII1_SMII1_IRQ_MASK (1 << 20) | ||
| 52 | #define SPEAR320_I2C1_IRQ_MASK (1 << 21) | ||
| 53 | |||
| 54 | #define SPEAR320_SHIRQ_RAS1_MASK 0x000380 | ||
| 55 | #define SPEAR320_SHIRQ_RAS3_MASK 0x000007 | ||
| 56 | #define SPEAR320_SHIRQ_INTRCOMM_RAS_MASK 0x3FF800 | ||
| 57 | |||
| 58 | /* SPEAr320 Virtual irq definitions */ | ||
| 59 | /* IRQs sharing IRQ_GEN_RAS_1 */ | ||
| 60 | #define SPEAR320_VIRQ_EMI (SPEAR3XX_VIRQ_START + 0) | ||
| 61 | #define SPEAR320_VIRQ_CLCD (SPEAR3XX_VIRQ_START + 1) | ||
| 62 | #define SPEAR320_VIRQ_SPP (SPEAR3XX_VIRQ_START + 2) | ||
| 63 | |||
| 64 | /* IRQs sharing IRQ_GEN_RAS_2 */ | ||
| 65 | #define SPEAR320_IRQ_SDHCI SPEAR3XX_IRQ_GEN_RAS_2 | ||
| 66 | |||
| 67 | /* IRQs sharing IRQ_GEN_RAS_3 */ | ||
| 68 | #define SPEAR320_VIRQ_PLGPIO (SPEAR3XX_VIRQ_START + 3) | ||
| 69 | #define SPEAR320_VIRQ_I2S_PLAY (SPEAR3XX_VIRQ_START + 4) | ||
| 70 | #define SPEAR320_VIRQ_I2S_REC (SPEAR3XX_VIRQ_START + 5) | ||
| 71 | |||
| 72 | /* IRQs sharing IRQ_INTRCOMM_RAS_ARM */ | ||
| 73 | #define SPEAR320_VIRQ_CANU (SPEAR3XX_VIRQ_START + 6) | ||
| 74 | #define SPEAR320_VIRQ_CANL (SPEAR3XX_VIRQ_START + 7) | ||
| 75 | #define SPEAR320_VIRQ_UART1 (SPEAR3XX_VIRQ_START + 8) | ||
| 76 | #define SPEAR320_VIRQ_UART2 (SPEAR3XX_VIRQ_START + 9) | ||
| 77 | #define SPEAR320_VIRQ_SSP1 (SPEAR3XX_VIRQ_START + 10) | ||
| 78 | #define SPEAR320_VIRQ_SSP2 (SPEAR3XX_VIRQ_START + 11) | ||
| 79 | #define SPEAR320_VIRQ_SMII0 (SPEAR3XX_VIRQ_START + 12) | ||
| 80 | #define SPEAR320_VIRQ_MII1_SMII1 (SPEAR3XX_VIRQ_START + 13) | ||
| 81 | #define SPEAR320_VIRQ_WAKEUP_SMII0 (SPEAR3XX_VIRQ_START + 14) | ||
| 82 | #define SPEAR320_VIRQ_WAKEUP_MII1_SMII1 (SPEAR3XX_VIRQ_START + 15) | ||
| 83 | #define SPEAR320_VIRQ_I2C1 (SPEAR3XX_VIRQ_START + 16) | ||
| 84 | |||
| 85 | /* spear3xx shared irq */ | ||
| 86 | static struct shirq_dev_config shirq_ras1_config[] = { | ||
| 87 | { | ||
| 88 | .virq = SPEAR320_VIRQ_EMI, | ||
| 89 | .status_mask = SPEAR320_EMI_IRQ_MASK, | ||
| 90 | .clear_mask = SPEAR320_EMI_IRQ_MASK, | ||
| 91 | }, { | ||
| 92 | .virq = SPEAR320_VIRQ_CLCD, | ||
| 93 | .status_mask = SPEAR320_CLCD_IRQ_MASK, | ||
| 94 | .clear_mask = SPEAR320_CLCD_IRQ_MASK, | ||
| 95 | }, { | ||
| 96 | .virq = SPEAR320_VIRQ_SPP, | ||
| 97 | .status_mask = SPEAR320_SPP_IRQ_MASK, | ||
| 98 | .clear_mask = SPEAR320_SPP_IRQ_MASK, | ||
| 99 | }, | ||
| 100 | }; | ||
| 101 | |||
| 102 | static struct spear_shirq shirq_ras1 = { | ||
| 103 | .irq = SPEAR3XX_IRQ_GEN_RAS_1, | ||
| 104 | .dev_config = shirq_ras1_config, | ||
| 105 | .dev_count = ARRAY_SIZE(shirq_ras1_config), | ||
| 106 | .regs = { | ||
| 107 | .enb_reg = -1, | ||
| 108 | .status_reg = SPEAR320_INT_STS_MASK_REG, | ||
| 109 | .status_reg_mask = SPEAR320_SHIRQ_RAS1_MASK, | ||
| 110 | .clear_reg = SPEAR320_INT_CLR_MASK_REG, | ||
| 111 | .reset_to_clear = 1, | ||
| 112 | }, | ||
| 113 | }; | ||
| 114 | |||
| 115 | static struct shirq_dev_config shirq_ras3_config[] = { | ||
| 116 | { | ||
| 117 | .virq = SPEAR320_VIRQ_PLGPIO, | ||
| 118 | .enb_mask = SPEAR320_GPIO_IRQ_MASK, | ||
| 119 | .status_mask = SPEAR320_GPIO_IRQ_MASK, | ||
| 120 | .clear_mask = SPEAR320_GPIO_IRQ_MASK, | ||
| 121 | }, { | ||
| 122 | .virq = SPEAR320_VIRQ_I2S_PLAY, | ||
| 123 | .enb_mask = SPEAR320_I2S_PLAY_IRQ_MASK, | ||
| 124 | .status_mask = SPEAR320_I2S_PLAY_IRQ_MASK, | ||
| 125 | .clear_mask = SPEAR320_I2S_PLAY_IRQ_MASK, | ||
| 126 | }, { | ||
| 127 | .virq = SPEAR320_VIRQ_I2S_REC, | ||
| 128 | .enb_mask = SPEAR320_I2S_REC_IRQ_MASK, | ||
| 129 | .status_mask = SPEAR320_I2S_REC_IRQ_MASK, | ||
| 130 | .clear_mask = SPEAR320_I2S_REC_IRQ_MASK, | ||
| 131 | }, | ||
| 132 | }; | ||
| 133 | |||
| 134 | static struct spear_shirq shirq_ras3 = { | ||
| 135 | .irq = SPEAR3XX_IRQ_GEN_RAS_3, | ||
| 136 | .dev_config = shirq_ras3_config, | ||
| 137 | .dev_count = ARRAY_SIZE(shirq_ras3_config), | ||
| 138 | .regs = { | ||
| 139 | .enb_reg = SPEAR320_INT_ENB_MASK_REG, | ||
| 140 | .reset_to_enb = 1, | ||
| 141 | .status_reg = SPEAR320_INT_STS_MASK_REG, | ||
| 142 | .status_reg_mask = SPEAR320_SHIRQ_RAS3_MASK, | ||
| 143 | .clear_reg = SPEAR320_INT_CLR_MASK_REG, | ||
| 144 | .reset_to_clear = 1, | ||
| 145 | }, | ||
| 146 | }; | ||
| 147 | |||
| 148 | static struct shirq_dev_config shirq_intrcomm_ras_config[] = { | ||
| 149 | { | ||
| 150 | .virq = SPEAR320_VIRQ_CANU, | ||
| 151 | .status_mask = SPEAR320_CAN_U_IRQ_MASK, | ||
| 152 | .clear_mask = SPEAR320_CAN_U_IRQ_MASK, | ||
| 153 | }, { | ||
| 154 | .virq = SPEAR320_VIRQ_CANL, | ||
| 155 | .status_mask = SPEAR320_CAN_L_IRQ_MASK, | ||
| 156 | .clear_mask = SPEAR320_CAN_L_IRQ_MASK, | ||
| 157 | }, { | ||
| 158 | .virq = SPEAR320_VIRQ_UART1, | ||
| 159 | .status_mask = SPEAR320_UART1_IRQ_MASK, | ||
| 160 | .clear_mask = SPEAR320_UART1_IRQ_MASK, | ||
| 161 | }, { | ||
| 162 | .virq = SPEAR320_VIRQ_UART2, | ||
| 163 | .status_mask = SPEAR320_UART2_IRQ_MASK, | ||
| 164 | .clear_mask = SPEAR320_UART2_IRQ_MASK, | ||
| 165 | }, { | ||
| 166 | .virq = SPEAR320_VIRQ_SSP1, | ||
| 167 | .status_mask = SPEAR320_SSP1_IRQ_MASK, | ||
| 168 | .clear_mask = SPEAR320_SSP1_IRQ_MASK, | ||
| 169 | }, { | ||
| 170 | .virq = SPEAR320_VIRQ_SSP2, | ||
| 171 | .status_mask = SPEAR320_SSP2_IRQ_MASK, | ||
| 172 | .clear_mask = SPEAR320_SSP2_IRQ_MASK, | ||
| 173 | }, { | ||
| 174 | .virq = SPEAR320_VIRQ_SMII0, | ||
| 175 | .status_mask = SPEAR320_SMII0_IRQ_MASK, | ||
| 176 | .clear_mask = SPEAR320_SMII0_IRQ_MASK, | ||
| 177 | }, { | ||
| 178 | .virq = SPEAR320_VIRQ_MII1_SMII1, | ||
| 179 | .status_mask = SPEAR320_MII1_SMII1_IRQ_MASK, | ||
| 180 | .clear_mask = SPEAR320_MII1_SMII1_IRQ_MASK, | ||
| 181 | }, { | ||
| 182 | .virq = SPEAR320_VIRQ_WAKEUP_SMII0, | ||
| 183 | .status_mask = SPEAR320_WAKEUP_SMII0_IRQ_MASK, | ||
| 184 | .clear_mask = SPEAR320_WAKEUP_SMII0_IRQ_MASK, | ||
| 185 | }, { | ||
| 186 | .virq = SPEAR320_VIRQ_WAKEUP_MII1_SMII1, | ||
| 187 | .status_mask = SPEAR320_WAKEUP_MII1_SMII1_IRQ_MASK, | ||
| 188 | .clear_mask = SPEAR320_WAKEUP_MII1_SMII1_IRQ_MASK, | ||
| 189 | }, { | ||
| 190 | .virq = SPEAR320_VIRQ_I2C1, | ||
| 191 | .status_mask = SPEAR320_I2C1_IRQ_MASK, | ||
| 192 | .clear_mask = SPEAR320_I2C1_IRQ_MASK, | ||
| 193 | }, | ||
| 194 | }; | ||
| 195 | |||
| 196 | static struct spear_shirq shirq_intrcomm_ras = { | ||
| 197 | .irq = SPEAR3XX_IRQ_INTRCOMM_RAS_ARM, | ||
| 198 | .dev_config = shirq_intrcomm_ras_config, | ||
| 199 | .dev_count = ARRAY_SIZE(shirq_intrcomm_ras_config), | ||
| 200 | .regs = { | ||
| 201 | .enb_reg = -1, | ||
| 202 | .status_reg = SPEAR320_INT_STS_MASK_REG, | ||
| 203 | .status_reg_mask = SPEAR320_SHIRQ_INTRCOMM_RAS_MASK, | ||
| 204 | .clear_reg = SPEAR320_INT_CLR_MASK_REG, | ||
| 205 | .reset_to_clear = 1, | ||
| 206 | }, | ||
| 207 | }; | ||
| 208 | |||
| 209 | /* DMAC platform data's slave info */ | 30 | /* DMAC platform data's slave info */ |
| 210 | struct pl08x_channel_data spear320_dma_info[] = { | 31 | struct pl08x_channel_data spear320_dma_info[] = { |
| 211 | { | 32 | { |
| @@ -416,41 +237,17 @@ static struct of_dev_auxdata spear320_auxdata_lookup[] __initdata = { | |||
| 416 | 237 | ||
| 417 | static void __init spear320_dt_init(void) | 238 | static void __init spear320_dt_init(void) |
| 418 | { | 239 | { |
| 419 | void __iomem *base; | ||
| 420 | int ret; | ||
| 421 | |||
| 422 | pl080_plat_data.slave_channels = spear320_dma_info; | 240 | pl080_plat_data.slave_channels = spear320_dma_info; |
| 423 | pl080_plat_data.num_slave_channels = ARRAY_SIZE(spear320_dma_info); | 241 | pl080_plat_data.num_slave_channels = ARRAY_SIZE(spear320_dma_info); |
| 424 | 242 | ||
| 425 | of_platform_populate(NULL, of_default_bus_match_table, | 243 | of_platform_populate(NULL, of_default_bus_match_table, |
| 426 | spear320_auxdata_lookup, NULL); | 244 | spear320_auxdata_lookup, NULL); |
| 427 | |||
| 428 | /* shared irq registration */ | ||
| 429 | base = ioremap(SPEAR320_SOC_CONFIG_BASE, SZ_4K); | ||
| 430 | if (base) { | ||
| 431 | /* shirq 1 */ | ||
| 432 | shirq_ras1.regs.base = base; | ||
| 433 | ret = spear_shirq_register(&shirq_ras1); | ||
| 434 | if (ret) | ||
| 435 | pr_err("Error registering Shared IRQ 1\n"); | ||
| 436 | |||
| 437 | /* shirq 3 */ | ||
| 438 | shirq_ras3.regs.base = base; | ||
| 439 | ret = spear_shirq_register(&shirq_ras3); | ||
| 440 | if (ret) | ||
| 441 | pr_err("Error registering Shared IRQ 3\n"); | ||
| 442 | |||
| 443 | /* shirq 4 */ | ||
| 444 | shirq_intrcomm_ras.regs.base = base; | ||
| 445 | ret = spear_shirq_register(&shirq_intrcomm_ras); | ||
| 446 | if (ret) | ||
| 447 | pr_err("Error registering Shared IRQ 4\n"); | ||
| 448 | } | ||
| 449 | } | 245 | } |
| 450 | 246 | ||
| 451 | static const char * const spear320_dt_board_compat[] = { | 247 | static const char * const spear320_dt_board_compat[] = { |
| 452 | "st,spear320", | 248 | "st,spear320", |
| 453 | "st,spear320-evb", | 249 | "st,spear320-evb", |
| 250 | "st,spear320-hmi", | ||
| 454 | NULL, | 251 | NULL, |
| 455 | }; | 252 | }; |
| 456 | 253 | ||
diff --git a/arch/arm/mach-spear3xx/spear3xx.c b/arch/arm/mach-spear3xx/spear3xx.c index 98144baf888..38fe95db31a 100644 --- a/arch/arm/mach-spear3xx/spear3xx.c +++ b/arch/arm/mach-spear3xx/spear3xx.c | |||
| @@ -15,6 +15,7 @@ | |||
| 15 | 15 | ||
| 16 | #include <linux/amba/pl022.h> | 16 | #include <linux/amba/pl022.h> |
| 17 | #include <linux/amba/pl08x.h> | 17 | #include <linux/amba/pl08x.h> |
| 18 | #include <linux/irqchip/spear-shirq.h> | ||
| 18 | #include <linux/of_irq.h> | 19 | #include <linux/of_irq.h> |
| 19 | #include <linux/io.h> | 20 | #include <linux/io.h> |
| 20 | #include <asm/hardware/pl080.h> | 21 | #include <asm/hardware/pl080.h> |
| @@ -121,6 +122,9 @@ struct sys_timer spear3xx_timer = { | |||
| 121 | 122 | ||
| 122 | static const struct of_device_id vic_of_match[] __initconst = { | 123 | static const struct of_device_id vic_of_match[] __initconst = { |
| 123 | { .compatible = "arm,pl190-vic", .data = vic_of_init, }, | 124 | { .compatible = "arm,pl190-vic", .data = vic_of_init, }, |
| 125 | { .compatible = "st,spear300-shirq", .data = spear300_shirq_of_init, }, | ||
| 126 | { .compatible = "st,spear310-shirq", .data = spear310_shirq_of_init, }, | ||
| 127 | { .compatible = "st,spear320-shirq", .data = spear320_shirq_of_init, }, | ||
| 124 | { /* Sentinel */ } | 128 | { /* Sentinel */ } |
| 125 | }; | 129 | }; |
| 126 | 130 | ||
diff --git a/arch/arm/plat-spear/Makefile b/arch/arm/plat-spear/Makefile index 2607bd05c52..01e88532a5d 100644 --- a/arch/arm/plat-spear/Makefile +++ b/arch/arm/plat-spear/Makefile | |||
| @@ -5,5 +5,5 @@ | |||
| 5 | # Common support | 5 | # Common support |
| 6 | obj-y := restart.o time.o | 6 | obj-y := restart.o time.o |
| 7 | 7 | ||
| 8 | obj-$(CONFIG_ARCH_SPEAR3XX) += pl080.o shirq.o | 8 | obj-$(CONFIG_ARCH_SPEAR3XX) += pl080.o |
| 9 | obj-$(CONFIG_ARCH_SPEAR6XX) += pl080.o | 9 | obj-$(CONFIG_ARCH_SPEAR6XX) += pl080.o |
diff --git a/arch/arm/plat-spear/shirq.c b/arch/arm/plat-spear/shirq.c deleted file mode 100644 index 853e891e118..00000000000 --- a/arch/arm/plat-spear/shirq.c +++ /dev/null | |||
| @@ -1,118 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/plat-spear/shirq.c | ||
| 3 | * | ||
| 4 | * SPEAr platform shared irq layer source file | ||
| 5 | * | ||
| 6 | * Copyright (C) 2009 ST Microelectronics | ||
| 7 | * Viresh Kumar <viresh.linux@gmail.com> | ||
| 8 | * | ||
| 9 | * This file is licensed under the terms of the GNU General Public | ||
| 10 | * License version 2. This program is licensed "as is" without any | ||
| 11 | * warranty of any kind, whether express or implied. | ||
| 12 | */ | ||
| 13 | |||
| 14 | #include <linux/err.h> | ||
| 15 | #include <linux/io.h> | ||
| 16 | #include <linux/irq.h> | ||
| 17 | #include <linux/spinlock.h> | ||
| 18 | #include <plat/shirq.h> | ||
| 19 | |||
| 20 | struct spear_shirq *shirq; | ||
| 21 | static DEFINE_SPINLOCK(lock); | ||
| 22 | |||
| 23 | static void shirq_irq_mask(struct irq_data *d) | ||
| 24 | { | ||
| 25 | struct spear_shirq *shirq = irq_data_get_irq_chip_data(d); | ||
| 26 | u32 val, id = d->irq - shirq->dev_config[0].virq; | ||
| 27 | unsigned long flags; | ||
| 28 | |||
| 29 | if ((shirq->regs.enb_reg == -1) || shirq->dev_config[id].enb_mask == -1) | ||
| 30 | return; | ||
| 31 | |||
| 32 | spin_lock_irqsave(&lock, flags); | ||
| 33 | val = readl(shirq->regs.base + shirq->regs.enb_reg); | ||
| 34 | if (shirq->regs.reset_to_enb) | ||
| 35 | val |= shirq->dev_config[id].enb_mask; | ||
| 36 | else | ||
| 37 | val &= ~(shirq->dev_config[id].enb_mask); | ||
| 38 | writel(val, shirq->regs.base + shirq->regs.enb_reg); | ||
| 39 | spin_unlock_irqrestore(&lock, flags); | ||
| 40 | } | ||
| 41 | |||
| 42 | static void shirq_irq_unmask(struct irq_data *d) | ||
| 43 | { | ||
| 44 | struct spear_shirq *shirq = irq_data_get_irq_chip_data(d); | ||
| 45 | u32 val, id = d->irq - shirq->dev_config[0].virq; | ||
| 46 | unsigned long flags; | ||
| 47 | |||
| 48 | if ((shirq->regs.enb_reg == -1) || shirq->dev_config[id].enb_mask == -1) | ||
| 49 | return; | ||
| 50 | |||
| 51 | spin_lock_irqsave(&lock, flags); | ||
| 52 | val = readl(shirq->regs.base + shirq->regs.enb_reg); | ||
| 53 | if (shirq->regs.reset_to_enb) | ||
| 54 | val &= ~(shirq->dev_config[id].enb_mask); | ||
| 55 | else | ||
| 56 | val |= shirq->dev_config[id].enb_mask; | ||
| 57 | writel(val, shirq->regs.base + shirq->regs.enb_reg); | ||
| 58 | spin_unlock_irqrestore(&lock, flags); | ||
| 59 | } | ||
| 60 | |||
| 61 | static struct irq_chip shirq_chip = { | ||
| 62 | .name = "spear_shirq", | ||
| 63 | .irq_ack = shirq_irq_mask, | ||
| 64 | .irq_mask = shirq_irq_mask, | ||
| 65 | .irq_unmask = shirq_irq_unmask, | ||
| 66 | }; | ||
| 67 | |||
| 68 | static void shirq_handler(unsigned irq, struct irq_desc *desc) | ||
| 69 | { | ||
| 70 | u32 i, val, mask; | ||
| 71 | struct spear_shirq *shirq = irq_get_handler_data(irq); | ||
| 72 | |||
| 73 | desc->irq_data.chip->irq_ack(&desc->irq_data); | ||
| 74 | while ((val = readl(shirq->regs.base + shirq->regs.status_reg) & | ||
| 75 | shirq->regs.status_reg_mask)) { | ||
| 76 | for (i = 0; (i < shirq->dev_count) && val; i++) { | ||
| 77 | if (!(shirq->dev_config[i].status_mask & val)) | ||
| 78 | continue; | ||
| 79 | |||
| 80 | generic_handle_irq(shirq->dev_config[i].virq); | ||
| 81 | |||
| 82 | /* clear interrupt */ | ||
| 83 | val &= ~shirq->dev_config[i].status_mask; | ||
| 84 | if ((shirq->regs.clear_reg == -1) || | ||
| 85 | shirq->dev_config[i].clear_mask == -1) | ||
| 86 | continue; | ||
| 87 | mask = readl(shirq->regs.base + shirq->regs.clear_reg); | ||
| 88 | if (shirq->regs.reset_to_clear) | ||
| 89 | mask &= ~shirq->dev_config[i].clear_mask; | ||
| 90 | else | ||
| 91 | mask |= shirq->dev_config[i].clear_mask; | ||
| 92 | writel(mask, shirq->regs.base + shirq->regs.clear_reg); | ||
| 93 | } | ||
| 94 | } | ||
| 95 | desc->irq_data.chip->irq_unmask(&desc->irq_data); | ||
| 96 | } | ||
| 97 | |||
| 98 | int spear_shirq_register(struct spear_shirq *shirq) | ||
| 99 | { | ||
| 100 | int i; | ||
| 101 | |||
| 102 | if (!shirq || !shirq->dev_config || !shirq->regs.base) | ||
| 103 | return -EFAULT; | ||
| 104 | |||
| 105 | if (!shirq->dev_count) | ||
| 106 | return -EINVAL; | ||
| 107 | |||
| 108 | irq_set_chained_handler(shirq->irq, shirq_handler); | ||
| 109 | for (i = 0; i < shirq->dev_count; i++) { | ||
| 110 | irq_set_chip_and_handler(shirq->dev_config[i].virq, | ||
| 111 | &shirq_chip, handle_simple_irq); | ||
| 112 | set_irq_flags(shirq->dev_config[i].virq, IRQF_VALID); | ||
| 113 | irq_set_chip_data(shirq->dev_config[i].virq, shirq); | ||
| 114 | } | ||
| 115 | |||
| 116 | irq_set_handler_data(shirq->irq, shirq); | ||
| 117 | return 0; | ||
| 118 | } | ||
diff --git a/drivers/clk/spear/spear1310_clock.c b/drivers/clk/spear/spear1310_clock.c index 147e25f0040..ed9af427861 100644 --- a/drivers/clk/spear/spear1310_clock.c +++ b/drivers/clk/spear/spear1310_clock.c | |||
| @@ -20,6 +20,7 @@ | |||
| 20 | #include <mach/spear.h> | 20 | #include <mach/spear.h> |
| 21 | #include "clk.h" | 21 | #include "clk.h" |
| 22 | 22 | ||
| 23 | #define VA_SPEAR1310_RAS_BASE IOMEM(UL(0xFA400000)) | ||
| 23 | /* PLL related registers and bit values */ | 24 | /* PLL related registers and bit values */ |
| 24 | #define SPEAR1310_PLL_CFG (VA_MISC_BASE + 0x210) | 25 | #define SPEAR1310_PLL_CFG (VA_MISC_BASE + 0x210) |
| 25 | /* PLL_CFG bit values */ | 26 | /* PLL_CFG bit values */ |
diff --git a/drivers/irqchip/Makefile b/drivers/irqchip/Makefile index 02bd37a6187..bf4609a5bd9 100644 --- a/drivers/irqchip/Makefile +++ b/drivers/irqchip/Makefile | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | obj-$(CONFIG_ARCH_BCM2835) += irq-bcm2835.o | 1 | obj-$(CONFIG_ARCH_BCM2835) += irq-bcm2835.o |
| 2 | obj-$(CONFIG_ARCH_SUNXI) += irq-sunxi.o | 2 | obj-$(CONFIG_ARCH_SUNXI) += irq-sunxi.o |
| 3 | obj-$(CONFIG_VERSATILE_FPGA_IRQ) += irq-versatile-fpga.o | 3 | obj-$(CONFIG_VERSATILE_FPGA_IRQ) += irq-versatile-fpga.o |
| 4 | obj-$(CONFIG_ARCH_SPEAR3XX) += spear-shirq.o | ||
diff --git a/drivers/irqchip/spear-shirq.c b/drivers/irqchip/spear-shirq.c new file mode 100644 index 00000000000..80e1d2fd9d4 --- /dev/null +++ b/drivers/irqchip/spear-shirq.c | |||
| @@ -0,0 +1,316 @@ | |||
| 1 | /* | ||
| 2 | * SPEAr platform shared irq layer source file | ||
| 3 | * | ||
| 4 | * Copyright (C) 2009-2012 ST Microelectronics | ||
| 5 | * Viresh Kumar <viresh.linux@gmail.com> | ||
| 6 | * | ||
| 7 | * Copyright (C) 2012 ST Microelectronics | ||
| 8 | * Shiraz Hashim <shiraz.hashim@st.com> | ||
| 9 | * | ||
| 10 | * This file is licensed under the terms of the GNU General Public | ||
| 11 | * License version 2. This program is licensed "as is" without any | ||
| 12 | * warranty of any kind, whether express or implied. | ||
| 13 | */ | ||
| 14 | #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt | ||
| 15 | |||
| 16 | #include <linux/err.h> | ||
| 17 | #include <linux/export.h> | ||
| 18 | #include <linux/interrupt.h> | ||
| 19 | #include <linux/io.h> | ||
| 20 | #include <linux/irq.h> | ||
| 21 | #include <linux/irqdomain.h> | ||
| 22 | #include <linux/irqchip/spear-shirq.h> | ||
| 23 | #include <linux/of.h> | ||
| 24 | #include <linux/of_address.h> | ||
| 25 | #include <linux/of_irq.h> | ||
| 26 | #include <linux/spinlock.h> | ||
| 27 | |||
| 28 | static DEFINE_SPINLOCK(lock); | ||
| 29 | |||
| 30 | /* spear300 shared irq registers offsets and masks */ | ||
| 31 | #define SPEAR300_INT_ENB_MASK_REG 0x54 | ||
| 32 | #define SPEAR300_INT_STS_MASK_REG 0x58 | ||
| 33 | |||
| 34 | static struct spear_shirq spear300_shirq_ras1 = { | ||
| 35 | .irq_nr = 9, | ||
| 36 | .irq_bit_off = 0, | ||
| 37 | .regs = { | ||
| 38 | .enb_reg = SPEAR300_INT_ENB_MASK_REG, | ||
| 39 | .status_reg = SPEAR300_INT_STS_MASK_REG, | ||
| 40 | .clear_reg = -1, | ||
| 41 | }, | ||
| 42 | }; | ||
| 43 | |||
| 44 | static struct spear_shirq *spear300_shirq_blocks[] = { | ||
| 45 | &spear300_shirq_ras1, | ||
| 46 | }; | ||
| 47 | |||
| 48 | /* spear310 shared irq registers offsets and masks */ | ||
| 49 | #define SPEAR310_INT_STS_MASK_REG 0x04 | ||
| 50 | |||
| 51 | static struct spear_shirq spear310_shirq_ras1 = { | ||
| 52 | .irq_nr = 8, | ||
| 53 | .irq_bit_off = 0, | ||
| 54 | .regs = { | ||
| 55 | .enb_reg = -1, | ||
| 56 | .status_reg = SPEAR310_INT_STS_MASK_REG, | ||
| 57 | .clear_reg = -1, | ||
| 58 | }, | ||
| 59 | }; | ||
| 60 | |||
| 61 | static struct spear_shirq spear310_shirq_ras2 = { | ||
| 62 | .irq_nr = 5, | ||
| 63 | .irq_bit_off = 8, | ||
| 64 | .regs = { | ||
| 65 | .enb_reg = -1, | ||
| 66 | .status_reg = SPEAR310_INT_STS_MASK_REG, | ||
| 67 | .clear_reg = -1, | ||
| 68 | }, | ||
| 69 | }; | ||
| 70 | |||
| 71 | static struct spear_shirq spear310_shirq_ras3 = { | ||
| 72 | .irq_nr = 1, | ||
| 73 | .irq_bit_off = 13, | ||
| 74 | .regs = { | ||
| 75 | .enb_reg = -1, | ||
| 76 | .status_reg = SPEAR310_INT_STS_MASK_REG, | ||
| 77 | .clear_reg = -1, | ||
| 78 | }, | ||
| 79 | }; | ||
| 80 | |||
| 81 | static struct spear_shirq spear310_shirq_intrcomm_ras = { | ||
| 82 | .irq_nr = 3, | ||
| 83 | .irq_bit_off = 14, | ||
| 84 | .regs = { | ||
| 85 | .enb_reg = -1, | ||
| 86 | .status_reg = SPEAR310_INT_STS_MASK_REG, | ||
| 87 | .clear_reg = -1, | ||
| 88 | }, | ||
| 89 | }; | ||
| 90 | |||
| 91 | static struct spear_shirq *spear310_shirq_blocks[] = { | ||
| 92 | &spear310_shirq_ras1, | ||
| 93 | &spear310_shirq_ras2, | ||
| 94 | &spear310_shirq_ras3, | ||
| 95 | &spear310_shirq_intrcomm_ras, | ||
| 96 | }; | ||
| 97 | |||
| 98 | /* spear320 shared irq registers offsets and masks */ | ||
| 99 | #define SPEAR320_INT_STS_MASK_REG 0x04 | ||
| 100 | #define SPEAR320_INT_CLR_MASK_REG 0x04 | ||
| 101 | #define SPEAR320_INT_ENB_MASK_REG 0x08 | ||
| 102 | |||
| 103 | static struct spear_shirq spear320_shirq_ras1 = { | ||
| 104 | .irq_nr = 3, | ||
| 105 | .irq_bit_off = 7, | ||
| 106 | .regs = { | ||
| 107 | .enb_reg = -1, | ||
| 108 | .status_reg = SPEAR320_INT_STS_MASK_REG, | ||
| 109 | .clear_reg = SPEAR320_INT_CLR_MASK_REG, | ||
| 110 | .reset_to_clear = 1, | ||
| 111 | }, | ||
| 112 | }; | ||
| 113 | |||
| 114 | static struct spear_shirq spear320_shirq_ras2 = { | ||
| 115 | .irq_nr = 1, | ||
| 116 | .irq_bit_off = 10, | ||
| 117 | .regs = { | ||
| 118 | .enb_reg = -1, | ||
| 119 | .status_reg = SPEAR320_INT_STS_MASK_REG, | ||
| 120 | .clear_reg = SPEAR320_INT_CLR_MASK_REG, | ||
| 121 | .reset_to_clear = 1, | ||
| 122 | }, | ||
| 123 | }; | ||
| 124 | |||
| 125 | static struct spear_shirq spear320_shirq_ras3 = { | ||
| 126 | .irq_nr = 3, | ||
| 127 | .irq_bit_off = 0, | ||
| 128 | .invalid_irq = 1, | ||
| 129 | .regs = { | ||
| 130 | .enb_reg = SPEAR320_INT_ENB_MASK_REG, | ||
| 131 | .reset_to_enb = 1, | ||
| 132 | .status_reg = SPEAR320_INT_STS_MASK_REG, | ||
| 133 | .clear_reg = SPEAR320_INT_CLR_MASK_REG, | ||
| 134 | .reset_to_clear = 1, | ||
| 135 | }, | ||
| 136 | }; | ||
| 137 | |||
| 138 | static struct spear_shirq spear320_shirq_intrcomm_ras = { | ||
| 139 | .irq_nr = 11, | ||
| 140 | .irq_bit_off = 11, | ||
| 141 | .regs = { | ||
| 142 | .enb_reg = -1, | ||
| 143 | .status_reg = SPEAR320_INT_STS_MASK_REG, | ||
| 144 | .clear_reg = SPEAR320_INT_CLR_MASK_REG, | ||
| 145 | .reset_to_clear = 1, | ||
| 146 | }, | ||
| 147 | }; | ||
| 148 | |||
| 149 | static struct spear_shirq *spear320_shirq_blocks[] = { | ||
| 150 | &spear320_shirq_ras3, | ||
| 151 | &spear320_shirq_ras1, | ||
| 152 | &spear320_shirq_ras2, | ||
| 153 | &spear320_shirq_intrcomm_ras, | ||
| 154 | }; | ||
| 155 | |||
| 156 | static void shirq_irq_mask_unmask(struct irq_data *d, bool mask) | ||
| 157 | { | ||
| 158 | struct spear_shirq *shirq = irq_data_get_irq_chip_data(d); | ||
| 159 | u32 val, offset = d->irq - shirq->irq_base; | ||
| 160 | unsigned long flags; | ||
| 161 | |||
| 162 | if (shirq->regs.enb_reg == -1) | ||
| 163 | return; | ||
| 164 | |||
| 165 | spin_lock_irqsave(&lock, flags); | ||
| 166 | val = readl(shirq->base + shirq->regs.enb_reg); | ||
| 167 | |||
| 168 | if (mask ^ shirq->regs.reset_to_enb) | ||
| 169 | val &= ~(0x1 << shirq->irq_bit_off << offset); | ||
| 170 | else | ||
| 171 | val |= 0x1 << shirq->irq_bit_off << offset; | ||
| 172 | |||
| 173 | writel(val, shirq->base + shirq->regs.enb_reg); | ||
| 174 | spin_unlock_irqrestore(&lock, flags); | ||
| 175 | |||
| 176 | } | ||
| 177 | |||
| 178 | static void shirq_irq_mask(struct irq_data *d) | ||
| 179 | { | ||
| 180 | shirq_irq_mask_unmask(d, 1); | ||
| 181 | } | ||
| 182 | |||
| 183 | static void shirq_irq_unmask(struct irq_data *d) | ||
| 184 | { | ||
| 185 | shirq_irq_mask_unmask(d, 0); | ||
| 186 | } | ||
| 187 | |||
| 188 | static struct irq_chip shirq_chip = { | ||
| 189 | .name = "spear-shirq", | ||
| 190 | .irq_ack = shirq_irq_mask, | ||
| 191 | .irq_mask = shirq_irq_mask, | ||
| 192 | .irq_unmask = shirq_irq_unmask, | ||
| 193 | }; | ||
| 194 | |||
| 195 | static void shirq_handler(unsigned irq, struct irq_desc *desc) | ||
| 196 | { | ||
| 197 | u32 i, j, val, mask, tmp; | ||
| 198 | struct irq_chip *chip; | ||
| 199 | struct spear_shirq *shirq = irq_get_handler_data(irq); | ||
| 200 | |||
| 201 | chip = irq_get_chip(irq); | ||
| 202 | chip->irq_ack(&desc->irq_data); | ||
| 203 | |||
| 204 | mask = ((0x1 << shirq->irq_nr) - 1) << shirq->irq_bit_off; | ||
| 205 | while ((val = readl(shirq->base + shirq->regs.status_reg) & | ||
| 206 | mask)) { | ||
| 207 | |||
| 208 | val >>= shirq->irq_bit_off; | ||
| 209 | for (i = 0, j = 1; i < shirq->irq_nr; i++, j <<= 1) { | ||
| 210 | |||
| 211 | if (!(j & val)) | ||
| 212 | continue; | ||
| 213 | |||
| 214 | generic_handle_irq(shirq->irq_base + i); | ||
| 215 | |||
| 216 | /* clear interrupt */ | ||
| 217 | if (shirq->regs.clear_reg == -1) | ||
| 218 | continue; | ||
| 219 | |||
| 220 | tmp = readl(shirq->base + shirq->regs.clear_reg); | ||
| 221 | if (shirq->regs.reset_to_clear) | ||
| 222 | tmp &= ~(j << shirq->irq_bit_off); | ||
| 223 | else | ||
| 224 | tmp |= (j << shirq->irq_bit_off); | ||
| 225 | writel(tmp, shirq->base + shirq->regs.clear_reg); | ||
| 226 | } | ||
| 227 | } | ||
| 228 | chip->irq_unmask(&desc->irq_data); | ||
| 229 | } | ||
| 230 | |||
| 231 | static void __init spear_shirq_register(struct spear_shirq *shirq) | ||
| 232 | { | ||
| 233 | int i; | ||
| 234 | |||
| 235 | if (shirq->invalid_irq) | ||
| 236 | return; | ||
| 237 | |||
| 238 | irq_set_chained_handler(shirq->irq, shirq_handler); | ||
| 239 | for (i = 0; i < shirq->irq_nr; i++) { | ||
| 240 | irq_set_chip_and_handler(shirq->irq_base + i, | ||
| 241 | &shirq_chip, handle_simple_irq); | ||
| 242 | set_irq_flags(shirq->irq_base + i, IRQF_VALID); | ||
| 243 | irq_set_chip_data(shirq->irq_base + i, shirq); | ||
| 244 | } | ||
| 245 | |||
| 246 | irq_set_handler_data(shirq->irq, shirq); | ||
| 247 | } | ||
| 248 | |||
| 249 | static int __init shirq_init(struct spear_shirq **shirq_blocks, int block_nr, | ||
| 250 | struct device_node *np) | ||
| 251 | { | ||
| 252 | int i, irq_base, hwirq = 0, irq_nr = 0; | ||
| 253 | static struct irq_domain *shirq_domain; | ||
| 254 | void __iomem *base; | ||
| 255 | |||
| 256 | base = of_iomap(np, 0); | ||
| 257 | if (!base) { | ||
| 258 | pr_err("%s: failed to map shirq registers\n", __func__); | ||
| 259 | return -ENXIO; | ||
| 260 | } | ||
| 261 | |||
| 262 | for (i = 0; i < block_nr; i++) | ||
| 263 | irq_nr += shirq_blocks[i]->irq_nr; | ||
| 264 | |||
| 265 | irq_base = irq_alloc_descs(-1, 0, irq_nr, 0); | ||
| 266 | if (IS_ERR_VALUE(irq_base)) { | ||
| 267 | pr_err("%s: irq desc alloc failed\n", __func__); | ||
| 268 | goto err_unmap; | ||
| 269 | } | ||
| 270 | |||
| 271 | shirq_domain = irq_domain_add_legacy(np, irq_nr, irq_base, 0, | ||
| 272 | &irq_domain_simple_ops, NULL); | ||
| 273 | if (WARN_ON(!shirq_domain)) { | ||
| 274 | pr_warn("%s: irq domain init failed\n", __func__); | ||
| 275 | goto err_free_desc; | ||
| 276 | } | ||
| 277 | |||
| 278 | for (i = 0; i < block_nr; i++) { | ||
| 279 | shirq_blocks[i]->base = base; | ||
| 280 | shirq_blocks[i]->irq_base = irq_find_mapping(shirq_domain, | ||
| 281 | hwirq); | ||
| 282 | shirq_blocks[i]->irq = irq_of_parse_and_map(np, i); | ||
| 283 | |||
| 284 | spear_shirq_register(shirq_blocks[i]); | ||
| 285 | hwirq += shirq_blocks[i]->irq_nr; | ||
| 286 | } | ||
| 287 | |||
| 288 | return 0; | ||
| 289 | |||
| 290 | err_free_desc: | ||
| 291 | irq_free_descs(irq_base, irq_nr); | ||
| 292 | err_unmap: | ||
| 293 | iounmap(base); | ||
| 294 | return -ENXIO; | ||
| 295 | } | ||
| 296 | |||
| 297 | int __init spear300_shirq_of_init(struct device_node *np, | ||
| 298 | struct device_node *parent) | ||
| 299 | { | ||
| 300 | return shirq_init(spear300_shirq_blocks, | ||
| 301 | ARRAY_SIZE(spear300_shirq_blocks), np); | ||
| 302 | } | ||
| 303 | |||
| 304 | int __init spear310_shirq_of_init(struct device_node *np, | ||
| 305 | struct device_node *parent) | ||
| 306 | { | ||
| 307 | return shirq_init(spear310_shirq_blocks, | ||
| 308 | ARRAY_SIZE(spear310_shirq_blocks), np); | ||
| 309 | } | ||
| 310 | |||
| 311 | int __init spear320_shirq_of_init(struct device_node *np, | ||
| 312 | struct device_node *parent) | ||
| 313 | { | ||
| 314 | return shirq_init(spear320_shirq_blocks, | ||
| 315 | ARRAY_SIZE(spear320_shirq_blocks), np); | ||
| 316 | } | ||
diff --git a/arch/arm/plat-spear/include/plat/shirq.h b/include/linux/irqchip/spear-shirq.h index 88a7fbd2479..c8be16d213a 100644 --- a/arch/arm/plat-spear/include/plat/shirq.h +++ b/include/linux/irqchip/spear-shirq.h | |||
| @@ -1,9 +1,7 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * arch/arm/plat-spear/include/plat/shirq.h | ||
| 3 | * | ||
| 4 | * SPEAr platform shared irq layer header file | 2 | * SPEAr platform shared irq layer header file |
| 5 | * | 3 | * |
| 6 | * Copyright (C) 2009 ST Microelectronics | 4 | * Copyright (C) 2009-2012 ST Microelectronics |
| 7 | * Viresh Kumar <viresh.linux@gmail.com> | 5 | * Viresh Kumar <viresh.linux@gmail.com> |
| 8 | * | 6 | * |
| 9 | * This file is licensed under the terms of the GNU General Public | 7 | * This file is licensed under the terms of the GNU General Public |
| @@ -11,31 +9,15 @@ | |||
| 11 | * warranty of any kind, whether express or implied. | 9 | * warranty of any kind, whether express or implied. |
| 12 | */ | 10 | */ |
| 13 | 11 | ||
| 14 | #ifndef __PLAT_SHIRQ_H | 12 | #ifndef __SPEAR_SHIRQ_H |
| 15 | #define __PLAT_SHIRQ_H | 13 | #define __SPEAR_SHIRQ_H |
| 16 | 14 | ||
| 17 | #include <linux/irq.h> | 15 | #include <linux/irq.h> |
| 18 | #include <linux/types.h> | 16 | #include <linux/types.h> |
| 19 | 17 | ||
| 20 | /* | 18 | /* |
| 21 | * struct shirq_dev_config: shared irq device configuration | ||
| 22 | * | ||
| 23 | * virq: virtual irq number of device | ||
| 24 | * enb_mask: enable mask of device | ||
| 25 | * status_mask: status mask of device | ||
| 26 | * clear_mask: clear mask of device | ||
| 27 | */ | ||
| 28 | struct shirq_dev_config { | ||
| 29 | u32 virq; | ||
| 30 | u32 enb_mask; | ||
| 31 | u32 status_mask; | ||
| 32 | u32 clear_mask; | ||
| 33 | }; | ||
| 34 | |||
| 35 | /* | ||
| 36 | * struct shirq_regs: shared irq register configuration | 19 | * struct shirq_regs: shared irq register configuration |
| 37 | * | 20 | * |
| 38 | * base: base address of shared irq register | ||
| 39 | * enb_reg: enable register offset | 21 | * enb_reg: enable register offset |
| 40 | * reset_to_enb: val 1 indicates, we need to clear bit for enabling interrupt | 22 | * reset_to_enb: val 1 indicates, we need to clear bit for enabling interrupt |
| 41 | * status_reg: status register offset | 23 | * status_reg: status register offset |
| @@ -44,11 +26,9 @@ struct shirq_dev_config { | |||
| 44 | * reset_to_clear: val 1 indicates, we need to clear bit for clearing interrupt | 26 | * reset_to_clear: val 1 indicates, we need to clear bit for clearing interrupt |
| 45 | */ | 27 | */ |
| 46 | struct shirq_regs { | 28 | struct shirq_regs { |
| 47 | void __iomem *base; | ||
| 48 | u32 enb_reg; | 29 | u32 enb_reg; |
| 49 | u32 reset_to_enb; | 30 | u32 reset_to_enb; |
| 50 | u32 status_reg; | 31 | u32 status_reg; |
| 51 | u32 status_reg_mask; | ||
| 52 | u32 clear_reg; | 32 | u32 clear_reg; |
| 53 | u32 reset_to_clear; | 33 | u32 reset_to_clear; |
| 54 | }; | 34 | }; |
| @@ -57,17 +37,28 @@ struct shirq_regs { | |||
| 57 | * struct spear_shirq: shared irq structure | 37 | * struct spear_shirq: shared irq structure |
| 58 | * | 38 | * |
| 59 | * irq: hardware irq number | 39 | * irq: hardware irq number |
| 60 | * dev_config: array of device config structures which are using "irq" line | 40 | * irq_base: base irq in linux domain |
| 61 | * dev_count: size of dev_config array | 41 | * irq_nr: no. of shared interrupts in a particular block |
| 42 | * irq_bit_off: starting bit offset in the status register | ||
| 43 | * invalid_irq: irq group is currently disabled | ||
| 44 | * base: base address of shared irq register | ||
| 62 | * regs: register configuration for shared irq block | 45 | * regs: register configuration for shared irq block |
| 63 | */ | 46 | */ |
| 64 | struct spear_shirq { | 47 | struct spear_shirq { |
| 65 | u32 irq; | 48 | u32 irq; |
| 66 | struct shirq_dev_config *dev_config; | 49 | u32 irq_base; |
| 67 | u32 dev_count; | 50 | u32 irq_nr; |
| 51 | u32 irq_bit_off; | ||
| 52 | int invalid_irq; | ||
| 53 | void __iomem *base; | ||
| 68 | struct shirq_regs regs; | 54 | struct shirq_regs regs; |
| 69 | }; | 55 | }; |
| 70 | 56 | ||
| 71 | int spear_shirq_register(struct spear_shirq *shirq); | 57 | int __init spear300_shirq_of_init(struct device_node *np, |
| 58 | struct device_node *parent); | ||
| 59 | int __init spear310_shirq_of_init(struct device_node *np, | ||
| 60 | struct device_node *parent); | ||
| 61 | int __init spear320_shirq_of_init(struct device_node *np, | ||
| 62 | struct device_node *parent); | ||
| 72 | 63 | ||
| 73 | #endif /* __PLAT_SHIRQ_H */ | 64 | #endif /* __SPEAR_SHIRQ_H */ |
