diff options
Diffstat (limited to 'arch')
124 files changed, 4360 insertions, 894 deletions
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 8ef416a3a551..94422601ea5b 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig | |||
@@ -325,6 +325,7 @@ config ARCH_AT91 | |||
325 | select ARCH_REQUIRE_GPIOLIB | 325 | select ARCH_REQUIRE_GPIOLIB |
326 | select HAVE_CLK | 326 | select HAVE_CLK |
327 | select CLKDEV_LOOKUP | 327 | select CLKDEV_LOOKUP |
328 | select IRQ_DOMAIN | ||
328 | help | 329 | help |
329 | This enables support for systems based on the Atmel AT91RM9200, | 330 | This enables support for systems based on the Atmel AT91RM9200, |
330 | AT91SAM9 processors. | 331 | AT91SAM9 processors. |
diff --git a/arch/arm/boot/dts/am3517_mt_ventoux.dts b/arch/arm/boot/dts/am3517_mt_ventoux.dts new file mode 100644 index 000000000000..5eb26d7d9b4e --- /dev/null +++ b/arch/arm/boot/dts/am3517_mt_ventoux.dts | |||
@@ -0,0 +1,27 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2011 Ilya Yanok, EmCraft Systems | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify | ||
5 | * it under the terms of the GNU General Public License version 2 as | ||
6 | * published by the Free Software Foundation. | ||
7 | */ | ||
8 | /dts-v1/; | ||
9 | |||
10 | /include/ "omap3.dtsi" | ||
11 | |||
12 | / { | ||
13 | model = "TeeJet Mt.Ventoux"; | ||
14 | compatible = "teejet,mt_ventoux", "ti,omap3"; | ||
15 | |||
16 | memory { | ||
17 | device_type = "memory"; | ||
18 | reg = <0x80000000 0x10000000>; /* 256 MB */ | ||
19 | }; | ||
20 | |||
21 | /* AM35xx doesn't have IVA */ | ||
22 | soc { | ||
23 | iva { | ||
24 | status = "disabled"; | ||
25 | }; | ||
26 | }; | ||
27 | }; | ||
diff --git a/arch/arm/boot/dts/at91sam9g20.dtsi b/arch/arm/boot/dts/at91sam9g20.dtsi index 07603b8c9503..a100db03ec90 100644 --- a/arch/arm/boot/dts/at91sam9g20.dtsi +++ b/arch/arm/boot/dts/at91sam9g20.dtsi | |||
@@ -23,6 +23,11 @@ | |||
23 | serial4 = &usart3; | 23 | serial4 = &usart3; |
24 | serial5 = &usart4; | 24 | serial5 = &usart4; |
25 | serial6 = &usart5; | 25 | serial6 = &usart5; |
26 | gpio0 = &pioA; | ||
27 | gpio1 = &pioB; | ||
28 | gpio2 = &pioC; | ||
29 | tcb0 = &tcb0; | ||
30 | tcb1 = &tcb1; | ||
26 | }; | 31 | }; |
27 | cpus { | 32 | cpus { |
28 | cpu@0 { | 33 | cpu@0 { |
@@ -47,24 +52,69 @@ | |||
47 | ranges; | 52 | ranges; |
48 | 53 | ||
49 | aic: interrupt-controller@fffff000 { | 54 | aic: interrupt-controller@fffff000 { |
50 | #interrupt-cells = <1>; | 55 | #interrupt-cells = <2>; |
51 | compatible = "atmel,at91rm9200-aic"; | 56 | compatible = "atmel,at91rm9200-aic"; |
52 | interrupt-controller; | 57 | interrupt-controller; |
53 | interrupt-parent; | 58 | interrupt-parent; |
54 | reg = <0xfffff000 0x200>; | 59 | reg = <0xfffff000 0x200>; |
55 | }; | 60 | }; |
56 | 61 | ||
62 | pit: timer@fffffd30 { | ||
63 | compatible = "atmel,at91sam9260-pit"; | ||
64 | reg = <0xfffffd30 0xf>; | ||
65 | interrupts = <1 4>; | ||
66 | }; | ||
67 | |||
68 | tcb0: timer@fffa0000 { | ||
69 | compatible = "atmel,at91rm9200-tcb"; | ||
70 | reg = <0xfffa0000 0x100>; | ||
71 | interrupts = <17 4 18 4 19 4>; | ||
72 | }; | ||
73 | |||
74 | tcb1: timer@fffdc000 { | ||
75 | compatible = "atmel,at91rm9200-tcb"; | ||
76 | reg = <0xfffdc000 0x100>; | ||
77 | interrupts = <26 4 27 4 28 4>; | ||
78 | }; | ||
79 | |||
80 | pioA: gpio@fffff400 { | ||
81 | compatible = "atmel,at91rm9200-gpio"; | ||
82 | reg = <0xfffff400 0x100>; | ||
83 | interrupts = <2 4>; | ||
84 | #gpio-cells = <2>; | ||
85 | gpio-controller; | ||
86 | interrupt-controller; | ||
87 | }; | ||
88 | |||
89 | pioB: gpio@fffff600 { | ||
90 | compatible = "atmel,at91rm9200-gpio"; | ||
91 | reg = <0xfffff600 0x100>; | ||
92 | interrupts = <3 4>; | ||
93 | #gpio-cells = <2>; | ||
94 | gpio-controller; | ||
95 | interrupt-controller; | ||
96 | }; | ||
97 | |||
98 | pioC: gpio@fffff800 { | ||
99 | compatible = "atmel,at91rm9200-gpio"; | ||
100 | reg = <0xfffff800 0x100>; | ||
101 | interrupts = <4 4>; | ||
102 | #gpio-cells = <2>; | ||
103 | gpio-controller; | ||
104 | interrupt-controller; | ||
105 | }; | ||
106 | |||
57 | dbgu: serial@fffff200 { | 107 | dbgu: serial@fffff200 { |
58 | compatible = "atmel,at91sam9260-usart"; | 108 | compatible = "atmel,at91sam9260-usart"; |
59 | reg = <0xfffff200 0x200>; | 109 | reg = <0xfffff200 0x200>; |
60 | interrupts = <1>; | 110 | interrupts = <1 4>; |
61 | status = "disabled"; | 111 | status = "disabled"; |
62 | }; | 112 | }; |
63 | 113 | ||
64 | usart0: serial@fffb0000 { | 114 | usart0: serial@fffb0000 { |
65 | compatible = "atmel,at91sam9260-usart"; | 115 | compatible = "atmel,at91sam9260-usart"; |
66 | reg = <0xfffb0000 0x200>; | 116 | reg = <0xfffb0000 0x200>; |
67 | interrupts = <6>; | 117 | interrupts = <6 4>; |
68 | atmel,use-dma-rx; | 118 | atmel,use-dma-rx; |
69 | atmel,use-dma-tx; | 119 | atmel,use-dma-tx; |
70 | status = "disabled"; | 120 | status = "disabled"; |
@@ -73,7 +123,7 @@ | |||
73 | usart1: serial@fffb4000 { | 123 | usart1: serial@fffb4000 { |
74 | compatible = "atmel,at91sam9260-usart"; | 124 | compatible = "atmel,at91sam9260-usart"; |
75 | reg = <0xfffb4000 0x200>; | 125 | reg = <0xfffb4000 0x200>; |
76 | interrupts = <7>; | 126 | interrupts = <7 4>; |
77 | atmel,use-dma-rx; | 127 | atmel,use-dma-rx; |
78 | atmel,use-dma-tx; | 128 | atmel,use-dma-tx; |
79 | status = "disabled"; | 129 | status = "disabled"; |
@@ -82,7 +132,7 @@ | |||
82 | usart2: serial@fffb8000 { | 132 | usart2: serial@fffb8000 { |
83 | compatible = "atmel,at91sam9260-usart"; | 133 | compatible = "atmel,at91sam9260-usart"; |
84 | reg = <0xfffb8000 0x200>; | 134 | reg = <0xfffb8000 0x200>; |
85 | interrupts = <8>; | 135 | interrupts = <8 4>; |
86 | atmel,use-dma-rx; | 136 | atmel,use-dma-rx; |
87 | atmel,use-dma-tx; | 137 | atmel,use-dma-tx; |
88 | status = "disabled"; | 138 | status = "disabled"; |
@@ -91,7 +141,7 @@ | |||
91 | usart3: serial@fffd0000 { | 141 | usart3: serial@fffd0000 { |
92 | compatible = "atmel,at91sam9260-usart"; | 142 | compatible = "atmel,at91sam9260-usart"; |
93 | reg = <0xfffd0000 0x200>; | 143 | reg = <0xfffd0000 0x200>; |
94 | interrupts = <23>; | 144 | interrupts = <23 4>; |
95 | atmel,use-dma-rx; | 145 | atmel,use-dma-rx; |
96 | atmel,use-dma-tx; | 146 | atmel,use-dma-tx; |
97 | status = "disabled"; | 147 | status = "disabled"; |
@@ -100,7 +150,7 @@ | |||
100 | usart4: serial@fffd4000 { | 150 | usart4: serial@fffd4000 { |
101 | compatible = "atmel,at91sam9260-usart"; | 151 | compatible = "atmel,at91sam9260-usart"; |
102 | reg = <0xfffd4000 0x200>; | 152 | reg = <0xfffd4000 0x200>; |
103 | interrupts = <24>; | 153 | interrupts = <24 4>; |
104 | atmel,use-dma-rx; | 154 | atmel,use-dma-rx; |
105 | atmel,use-dma-tx; | 155 | atmel,use-dma-tx; |
106 | status = "disabled"; | 156 | status = "disabled"; |
@@ -109,7 +159,7 @@ | |||
109 | usart5: serial@fffd8000 { | 159 | usart5: serial@fffd8000 { |
110 | compatible = "atmel,at91sam9260-usart"; | 160 | compatible = "atmel,at91sam9260-usart"; |
111 | reg = <0xfffd8000 0x200>; | 161 | reg = <0xfffd8000 0x200>; |
112 | interrupts = <25>; | 162 | interrupts = <25 4>; |
113 | atmel,use-dma-rx; | 163 | atmel,use-dma-rx; |
114 | atmel,use-dma-tx; | 164 | atmel,use-dma-tx; |
115 | status = "disabled"; | 165 | status = "disabled"; |
@@ -118,7 +168,7 @@ | |||
118 | macb0: ethernet@fffc4000 { | 168 | macb0: ethernet@fffc4000 { |
119 | compatible = "cdns,at32ap7000-macb", "cdns,macb"; | 169 | compatible = "cdns,at32ap7000-macb", "cdns,macb"; |
120 | reg = <0xfffc4000 0x100>; | 170 | reg = <0xfffc4000 0x100>; |
121 | interrupts = <21>; | 171 | interrupts = <21 4>; |
122 | status = "disabled"; | 172 | status = "disabled"; |
123 | }; | 173 | }; |
124 | }; | 174 | }; |
diff --git a/arch/arm/boot/dts/at91sam9g45.dtsi b/arch/arm/boot/dts/at91sam9g45.dtsi index fffa005300a4..f779667159b1 100644 --- a/arch/arm/boot/dts/at91sam9g45.dtsi +++ b/arch/arm/boot/dts/at91sam9g45.dtsi | |||
@@ -22,6 +22,13 @@ | |||
22 | serial2 = &usart1; | 22 | serial2 = &usart1; |
23 | serial3 = &usart2; | 23 | serial3 = &usart2; |
24 | serial4 = &usart3; | 24 | serial4 = &usart3; |
25 | gpio0 = &pioA; | ||
26 | gpio1 = &pioB; | ||
27 | gpio2 = &pioC; | ||
28 | gpio3 = &pioD; | ||
29 | gpio4 = &pioE; | ||
30 | tcb0 = &tcb0; | ||
31 | tcb1 = &tcb1; | ||
25 | }; | 32 | }; |
26 | cpus { | 33 | cpus { |
27 | cpu@0 { | 34 | cpu@0 { |
@@ -46,30 +53,94 @@ | |||
46 | ranges; | 53 | ranges; |
47 | 54 | ||
48 | aic: interrupt-controller@fffff000 { | 55 | aic: interrupt-controller@fffff000 { |
49 | #interrupt-cells = <1>; | 56 | #interrupt-cells = <2>; |
50 | compatible = "atmel,at91rm9200-aic"; | 57 | compatible = "atmel,at91rm9200-aic"; |
51 | interrupt-controller; | 58 | interrupt-controller; |
52 | interrupt-parent; | 59 | interrupt-parent; |
53 | reg = <0xfffff000 0x200>; | 60 | reg = <0xfffff000 0x200>; |
54 | }; | 61 | }; |
55 | 62 | ||
63 | pit: timer@fffffd30 { | ||
64 | compatible = "atmel,at91sam9260-pit"; | ||
65 | reg = <0xfffffd30 0xf>; | ||
66 | interrupts = <1 4>; | ||
67 | }; | ||
68 | |||
69 | |||
70 | tcb0: timer@fff7c000 { | ||
71 | compatible = "atmel,at91rm9200-tcb"; | ||
72 | reg = <0xfff7c000 0x100>; | ||
73 | interrupts = <18 4>; | ||
74 | }; | ||
75 | |||
76 | tcb1: timer@fffd4000 { | ||
77 | compatible = "atmel,at91rm9200-tcb"; | ||
78 | reg = <0xfffd4000 0x100>; | ||
79 | interrupts = <18 4>; | ||
80 | }; | ||
81 | |||
56 | dma: dma-controller@ffffec00 { | 82 | dma: dma-controller@ffffec00 { |
57 | compatible = "atmel,at91sam9g45-dma"; | 83 | compatible = "atmel,at91sam9g45-dma"; |
58 | reg = <0xffffec00 0x200>; | 84 | reg = <0xffffec00 0x200>; |
59 | interrupts = <21>; | 85 | interrupts = <21 4>; |
86 | }; | ||
87 | |||
88 | pioA: gpio@fffff200 { | ||
89 | compatible = "atmel,at91rm9200-gpio"; | ||
90 | reg = <0xfffff200 0x100>; | ||
91 | interrupts = <2 4>; | ||
92 | #gpio-cells = <2>; | ||
93 | gpio-controller; | ||
94 | interrupt-controller; | ||
95 | }; | ||
96 | |||
97 | pioB: gpio@fffff400 { | ||
98 | compatible = "atmel,at91rm9200-gpio"; | ||
99 | reg = <0xfffff400 0x100>; | ||
100 | interrupts = <3 4>; | ||
101 | #gpio-cells = <2>; | ||
102 | gpio-controller; | ||
103 | interrupt-controller; | ||
104 | }; | ||
105 | |||
106 | pioC: gpio@fffff600 { | ||
107 | compatible = "atmel,at91rm9200-gpio"; | ||
108 | reg = <0xfffff600 0x100>; | ||
109 | interrupts = <4 4>; | ||
110 | #gpio-cells = <2>; | ||
111 | gpio-controller; | ||
112 | interrupt-controller; | ||
113 | }; | ||
114 | |||
115 | pioD: gpio@fffff800 { | ||
116 | compatible = "atmel,at91rm9200-gpio"; | ||
117 | reg = <0xfffff800 0x100>; | ||
118 | interrupts = <5 4>; | ||
119 | #gpio-cells = <2>; | ||
120 | gpio-controller; | ||
121 | interrupt-controller; | ||
122 | }; | ||
123 | |||
124 | pioE: gpio@fffffa00 { | ||
125 | compatible = "atmel,at91rm9200-gpio"; | ||
126 | reg = <0xfffffa00 0x100>; | ||
127 | interrupts = <5 4>; | ||
128 | #gpio-cells = <2>; | ||
129 | gpio-controller; | ||
130 | interrupt-controller; | ||
60 | }; | 131 | }; |
61 | 132 | ||
62 | dbgu: serial@ffffee00 { | 133 | dbgu: serial@ffffee00 { |
63 | compatible = "atmel,at91sam9260-usart"; | 134 | compatible = "atmel,at91sam9260-usart"; |
64 | reg = <0xffffee00 0x200>; | 135 | reg = <0xffffee00 0x200>; |
65 | interrupts = <1>; | 136 | interrupts = <1 4>; |
66 | status = "disabled"; | 137 | status = "disabled"; |
67 | }; | 138 | }; |
68 | 139 | ||
69 | usart0: serial@fff8c000 { | 140 | usart0: serial@fff8c000 { |
70 | compatible = "atmel,at91sam9260-usart"; | 141 | compatible = "atmel,at91sam9260-usart"; |
71 | reg = <0xfff8c000 0x200>; | 142 | reg = <0xfff8c000 0x200>; |
72 | interrupts = <7>; | 143 | interrupts = <7 4>; |
73 | atmel,use-dma-rx; | 144 | atmel,use-dma-rx; |
74 | atmel,use-dma-tx; | 145 | atmel,use-dma-tx; |
75 | status = "disabled"; | 146 | status = "disabled"; |
@@ -78,7 +149,7 @@ | |||
78 | usart1: serial@fff90000 { | 149 | usart1: serial@fff90000 { |
79 | compatible = "atmel,at91sam9260-usart"; | 150 | compatible = "atmel,at91sam9260-usart"; |
80 | reg = <0xfff90000 0x200>; | 151 | reg = <0xfff90000 0x200>; |
81 | interrupts = <8>; | 152 | interrupts = <8 4>; |
82 | atmel,use-dma-rx; | 153 | atmel,use-dma-rx; |
83 | atmel,use-dma-tx; | 154 | atmel,use-dma-tx; |
84 | status = "disabled"; | 155 | status = "disabled"; |
@@ -87,7 +158,7 @@ | |||
87 | usart2: serial@fff94000 { | 158 | usart2: serial@fff94000 { |
88 | compatible = "atmel,at91sam9260-usart"; | 159 | compatible = "atmel,at91sam9260-usart"; |
89 | reg = <0xfff94000 0x200>; | 160 | reg = <0xfff94000 0x200>; |
90 | interrupts = <9>; | 161 | interrupts = <9 4>; |
91 | atmel,use-dma-rx; | 162 | atmel,use-dma-rx; |
92 | atmel,use-dma-tx; | 163 | atmel,use-dma-tx; |
93 | status = "disabled"; | 164 | status = "disabled"; |
@@ -96,7 +167,7 @@ | |||
96 | usart3: serial@fff98000 { | 167 | usart3: serial@fff98000 { |
97 | compatible = "atmel,at91sam9260-usart"; | 168 | compatible = "atmel,at91sam9260-usart"; |
98 | reg = <0xfff98000 0x200>; | 169 | reg = <0xfff98000 0x200>; |
99 | interrupts = <10>; | 170 | interrupts = <10 4>; |
100 | atmel,use-dma-rx; | 171 | atmel,use-dma-rx; |
101 | atmel,use-dma-tx; | 172 | atmel,use-dma-tx; |
102 | status = "disabled"; | 173 | status = "disabled"; |
@@ -105,7 +176,7 @@ | |||
105 | macb0: ethernet@fffbc000 { | 176 | macb0: ethernet@fffbc000 { |
106 | compatible = "cdns,at32ap7000-macb", "cdns,macb"; | 177 | compatible = "cdns,at32ap7000-macb", "cdns,macb"; |
107 | reg = <0xfffbc000 0x100>; | 178 | reg = <0xfffbc000 0x100>; |
108 | interrupts = <25>; | 179 | interrupts = <25 4>; |
109 | status = "disabled"; | 180 | status = "disabled"; |
110 | }; | 181 | }; |
111 | }; | 182 | }; |
diff --git a/arch/arm/boot/dts/at91sam9m10g45ek.dts b/arch/arm/boot/dts/at91sam9m10g45ek.dts index a387e7704ce1..15e25f903cad 100644 --- a/arch/arm/boot/dts/at91sam9m10g45ek.dts +++ b/arch/arm/boot/dts/at91sam9m10g45ek.dts | |||
@@ -37,4 +37,76 @@ | |||
37 | }; | 37 | }; |
38 | }; | 38 | }; |
39 | }; | 39 | }; |
40 | |||
41 | leds { | ||
42 | compatible = "gpio-leds"; | ||
43 | |||
44 | d8 { | ||
45 | label = "d8"; | ||
46 | gpios = <&pioD 30 0>; | ||
47 | linux,default-trigger = "heartbeat"; | ||
48 | }; | ||
49 | |||
50 | d6 { | ||
51 | label = "d6"; | ||
52 | gpios = <&pioD 0 1>; | ||
53 | linux,default-trigger = "nand-disk"; | ||
54 | }; | ||
55 | |||
56 | d7 { | ||
57 | label = "d7"; | ||
58 | gpios = <&pioD 31 1>; | ||
59 | linux,default-trigger = "mmc0"; | ||
60 | }; | ||
61 | }; | ||
62 | |||
63 | gpio_keys { | ||
64 | compatible = "gpio-keys"; | ||
65 | #address-cells = <1>; | ||
66 | #size-cells = <0>; | ||
67 | |||
68 | left_click { | ||
69 | label = "left_click"; | ||
70 | gpios = <&pioB 6 1>; | ||
71 | linux,code = <272>; | ||
72 | gpio-key,wakeup; | ||
73 | }; | ||
74 | |||
75 | right_click { | ||
76 | label = "right_click"; | ||
77 | gpios = <&pioB 7 1>; | ||
78 | linux,code = <273>; | ||
79 | gpio-key,wakeup; | ||
80 | }; | ||
81 | |||
82 | left { | ||
83 | label = "Joystick Left"; | ||
84 | gpios = <&pioB 14 1>; | ||
85 | linux,code = <105>; | ||
86 | }; | ||
87 | |||
88 | right { | ||
89 | label = "Joystick Right"; | ||
90 | gpios = <&pioB 15 1>; | ||
91 | linux,code = <106>; | ||
92 | }; | ||
93 | |||
94 | up { | ||
95 | label = "Joystick Up"; | ||
96 | gpios = <&pioB 16 1>; | ||
97 | linux,code = <103>; | ||
98 | }; | ||
99 | |||
100 | down { | ||
101 | label = "Joystick Down"; | ||
102 | gpios = <&pioB 17 1>; | ||
103 | linux,code = <108>; | ||
104 | }; | ||
105 | |||
106 | enter { | ||
107 | label = "Joystick Press"; | ||
108 | gpios = <&pioB 18 1>; | ||
109 | linux,code = <28>; | ||
110 | }; | ||
111 | }; | ||
40 | }; | 112 | }; |
diff --git a/arch/arm/boot/dts/at91sam9x5.dtsi b/arch/arm/boot/dts/at91sam9x5.dtsi index e91391f50730..a02e636d8a57 100644 --- a/arch/arm/boot/dts/at91sam9x5.dtsi +++ b/arch/arm/boot/dts/at91sam9x5.dtsi | |||
@@ -89,35 +89,39 @@ | |||
89 | }; | 89 | }; |
90 | 90 | ||
91 | pioA: gpio@fffff400 { | 91 | pioA: gpio@fffff400 { |
92 | compatible = "atmel,at91rm9200-gpio"; | 92 | compatible = "atmel,at91sam9x5-gpio", "atmel,at91rm9200-gpio"; |
93 | reg = <0xfffff400 0x100>; | 93 | reg = <0xfffff400 0x100>; |
94 | interrupts = <2 4>; | 94 | interrupts = <2 4>; |
95 | #gpio-cells = <2>; | 95 | #gpio-cells = <2>; |
96 | gpio-controller; | 96 | gpio-controller; |
97 | interrupt-controller; | ||
97 | }; | 98 | }; |
98 | 99 | ||
99 | pioB: gpio@fffff600 { | 100 | pioB: gpio@fffff600 { |
100 | compatible = "atmel,at91rm9200-gpio"; | 101 | compatible = "atmel,at91sam9x5-gpio", "atmel,at91rm9200-gpio"; |
101 | reg = <0xfffff600 0x100>; | 102 | reg = <0xfffff600 0x100>; |
102 | interrupts = <2 4>; | 103 | interrupts = <2 4>; |
103 | #gpio-cells = <2>; | 104 | #gpio-cells = <2>; |
104 | gpio-controller; | 105 | gpio-controller; |
106 | interrupt-controller; | ||
105 | }; | 107 | }; |
106 | 108 | ||
107 | pioC: gpio@fffff800 { | 109 | pioC: gpio@fffff800 { |
108 | compatible = "atmel,at91rm9200-gpio"; | 110 | compatible = "atmel,at91sam9x5-gpio", "atmel,at91rm9200-gpio"; |
109 | reg = <0xfffff800 0x100>; | 111 | reg = <0xfffff800 0x100>; |
110 | interrupts = <3 4>; | 112 | interrupts = <3 4>; |
111 | #gpio-cells = <2>; | 113 | #gpio-cells = <2>; |
112 | gpio-controller; | 114 | gpio-controller; |
115 | interrupt-controller; | ||
113 | }; | 116 | }; |
114 | 117 | ||
115 | pioD: gpio@fffffa00 { | 118 | pioD: gpio@fffffa00 { |
116 | compatible = "atmel,at91rm9200-gpio"; | 119 | compatible = "atmel,at91sam9x5-gpio", "atmel,at91rm9200-gpio"; |
117 | reg = <0xfffffa00 0x100>; | 120 | reg = <0xfffffa00 0x100>; |
118 | interrupts = <3 4>; | 121 | interrupts = <3 4>; |
119 | #gpio-cells = <2>; | 122 | #gpio-cells = <2>; |
120 | gpio-controller; | 123 | gpio-controller; |
124 | interrupt-controller; | ||
121 | }; | 125 | }; |
122 | 126 | ||
123 | dbgu: serial@fffff200 { | 127 | dbgu: serial@fffff200 { |
diff --git a/arch/arm/boot/dts/at91sam9x5cm.dtsi b/arch/arm/boot/dts/at91sam9x5cm.dtsi index 4ab5a77f4afc..64ae3e890259 100644 --- a/arch/arm/boot/dts/at91sam9x5cm.dtsi +++ b/arch/arm/boot/dts/at91sam9x5cm.dtsi | |||
@@ -11,4 +11,19 @@ | |||
11 | memory@20000000 { | 11 | memory@20000000 { |
12 | reg = <0x20000000 0x8000000>; | 12 | reg = <0x20000000 0x8000000>; |
13 | }; | 13 | }; |
14 | |||
15 | leds { | ||
16 | compatible = "gpio-leds"; | ||
17 | |||
18 | pb18 { | ||
19 | label = "pb18"; | ||
20 | gpios = <&pioB 18 1>; | ||
21 | linux,default-trigger = "heartbeat"; | ||
22 | }; | ||
23 | |||
24 | pd21 { | ||
25 | label = "pd21"; | ||
26 | gpios = <&pioD 21 0>; | ||
27 | }; | ||
28 | }; | ||
14 | }; | 29 | }; |
diff --git a/arch/arm/boot/dts/imx27-phytec-phycore.dts b/arch/arm/boot/dts/imx27-phytec-phycore.dts new file mode 100644 index 000000000000..a51a08fc2af9 --- /dev/null +++ b/arch/arm/boot/dts/imx27-phytec-phycore.dts | |||
@@ -0,0 +1,76 @@ | |||
1 | /* | ||
2 | * Copyright 2012 Sascha Hauer, Pengutronix | ||
3 | * | ||
4 | * The code contained herein is licensed under the GNU General Public | ||
5 | * License. You may obtain a copy of the GNU General Public License | ||
6 | * Version 2 or later at the following locations: | ||
7 | * | ||
8 | * http://www.opensource.org/licenses/gpl-license.html | ||
9 | * http://www.gnu.org/copyleft/gpl.html | ||
10 | */ | ||
11 | |||
12 | /dts-v1/; | ||
13 | /include/ "imx27.dtsi" | ||
14 | |||
15 | / { | ||
16 | model = "Phytec pcm038"; | ||
17 | compatible = "phytec,imx27-pcm038", "fsl,imx27"; | ||
18 | |||
19 | memory { | ||
20 | reg = <0x0 0x0>; | ||
21 | }; | ||
22 | |||
23 | soc { | ||
24 | aipi@10000000 { /* aipi */ | ||
25 | |||
26 | wdog@10002000 { | ||
27 | status = "okay"; | ||
28 | }; | ||
29 | |||
30 | uart@1000a000 { | ||
31 | fsl,uart-has-rtscts; | ||
32 | status = "okay"; | ||
33 | }; | ||
34 | |||
35 | uart@1000b000 { | ||
36 | fsl,uart-has-rtscts; | ||
37 | status = "okay"; | ||
38 | }; | ||
39 | |||
40 | uart@1000c000 { | ||
41 | fsl,uart-has-rtscts; | ||
42 | status = "okay"; | ||
43 | }; | ||
44 | |||
45 | fec@1002b000 { | ||
46 | status = "okay"; | ||
47 | }; | ||
48 | |||
49 | i2c@1001d000 { | ||
50 | clock-frequency = <400000>; | ||
51 | status = "okay"; | ||
52 | at24@4c { | ||
53 | compatible = "at,24c32"; | ||
54 | pagesize = <32>; | ||
55 | reg = <0x52>; | ||
56 | }; | ||
57 | pcf8563@51 { | ||
58 | compatible = "nxp,pcf8563"; | ||
59 | reg = <0x51>; | ||
60 | }; | ||
61 | lm75@4a { | ||
62 | compatible = "national,lm75"; | ||
63 | reg = <0x4a>; | ||
64 | }; | ||
65 | }; | ||
66 | }; | ||
67 | }; | ||
68 | |||
69 | nor_flash@c0000000 { | ||
70 | compatible = "cfi-flash"; | ||
71 | bank-width = <2>; | ||
72 | reg = <0xc0000000 0x02000000>; | ||
73 | #address-cells = <1>; | ||
74 | #size-cells = <1>; | ||
75 | }; | ||
76 | }; | ||
diff --git a/arch/arm/boot/dts/imx27.dtsi b/arch/arm/boot/dts/imx27.dtsi new file mode 100644 index 000000000000..bc5e7d5ddd54 --- /dev/null +++ b/arch/arm/boot/dts/imx27.dtsi | |||
@@ -0,0 +1,217 @@ | |||
1 | /* | ||
2 | * Copyright 2012 Sascha Hauer, Pengutronix | ||
3 | * | ||
4 | * The code contained herein is licensed under the GNU General Public | ||
5 | * License. You may obtain a copy of the GNU General Public License | ||
6 | * Version 2 or later at the following locations: | ||
7 | * | ||
8 | * http://www.opensource.org/licenses/gpl-license.html | ||
9 | * http://www.gnu.org/copyleft/gpl.html | ||
10 | */ | ||
11 | |||
12 | /include/ "skeleton.dtsi" | ||
13 | |||
14 | / { | ||
15 | aliases { | ||
16 | serial0 = &uart1; | ||
17 | serial1 = &uart2; | ||
18 | serial2 = &uart3; | ||
19 | serial3 = &uart4; | ||
20 | serial4 = &uart5; | ||
21 | serial5 = &uart6; | ||
22 | }; | ||
23 | |||
24 | avic: avic-interrupt-controller@e0000000 { | ||
25 | compatible = "fsl,imx27-avic", "fsl,avic"; | ||
26 | interrupt-controller; | ||
27 | #interrupt-cells = <1>; | ||
28 | reg = <0x10040000 0x1000>; | ||
29 | }; | ||
30 | |||
31 | clocks { | ||
32 | #address-cells = <1>; | ||
33 | #size-cells = <0>; | ||
34 | |||
35 | osc26m { | ||
36 | compatible = "fsl,imx-osc26m", "fixed-clock"; | ||
37 | clock-frequency = <26000000>; | ||
38 | }; | ||
39 | }; | ||
40 | |||
41 | soc { | ||
42 | #address-cells = <1>; | ||
43 | #size-cells = <1>; | ||
44 | compatible = "simple-bus"; | ||
45 | interrupt-parent = <&avic>; | ||
46 | ranges; | ||
47 | |||
48 | aipi@10000000 { /* AIPI1 */ | ||
49 | compatible = "fsl,aipi-bus", "simple-bus"; | ||
50 | #address-cells = <1>; | ||
51 | #size-cells = <1>; | ||
52 | reg = <0x10000000 0x10000000>; | ||
53 | ranges; | ||
54 | |||
55 | wdog@10002000 { | ||
56 | compatible = "fsl,imx27-wdt", "fsl,imx21-wdt"; | ||
57 | reg = <0x10002000 0x4000>; | ||
58 | interrupts = <27>; | ||
59 | status = "disabled"; | ||
60 | }; | ||
61 | |||
62 | uart1: uart@1000a000 { | ||
63 | compatible = "fsl,imx27-uart", "fsl,imx21-uart"; | ||
64 | reg = <0x1000a000 0x1000>; | ||
65 | interrupts = <20>; | ||
66 | status = "disabled"; | ||
67 | }; | ||
68 | |||
69 | uart2: uart@1000b000 { | ||
70 | compatible = "fsl,imx27-uart", "fsl,imx21-uart"; | ||
71 | reg = <0x1000b000 0x1000>; | ||
72 | interrupts = <19>; | ||
73 | status = "disabled"; | ||
74 | }; | ||
75 | |||
76 | uart3: uart@1000c000 { | ||
77 | compatible = "fsl,imx27-uart", "fsl,imx21-uart"; | ||
78 | reg = <0x1000c000 0x1000>; | ||
79 | interrupts = <18>; | ||
80 | status = "disabled"; | ||
81 | }; | ||
82 | |||
83 | uart4: uart@1000d000 { | ||
84 | compatible = "fsl,imx27-uart", "fsl,imx21-uart"; | ||
85 | reg = <0x1000d000 0x1000>; | ||
86 | interrupts = <17>; | ||
87 | status = "disabled"; | ||
88 | }; | ||
89 | |||
90 | cspi1: cspi@1000e000 { | ||
91 | #address-cells = <1>; | ||
92 | #size-cells = <0>; | ||
93 | compatible = "fsl,imx27-cspi"; | ||
94 | reg = <0x1000e000 0x1000>; | ||
95 | interrupts = <16>; | ||
96 | status = "disabled"; | ||
97 | }; | ||
98 | |||
99 | cspi2: cspi@1000f000 { | ||
100 | #address-cells = <1>; | ||
101 | #size-cells = <0>; | ||
102 | compatible = "fsl,imx27-cspi"; | ||
103 | reg = <0x1000f000 0x1000>; | ||
104 | interrupts = <15>; | ||
105 | status = "disabled"; | ||
106 | }; | ||
107 | |||
108 | i2c1: i2c@10012000 { | ||
109 | #address-cells = <1>; | ||
110 | #size-cells = <0>; | ||
111 | compatible = "fsl,imx27-i2c", "fsl,imx1-i2c"; | ||
112 | reg = <0x10012000 0x1000>; | ||
113 | interrupts = <12>; | ||
114 | status = "disabled"; | ||
115 | }; | ||
116 | |||
117 | gpio1: gpio@10015000 { | ||
118 | compatible = "fsl,imx27-gpio", "fsl,imx21-gpio"; | ||
119 | reg = <0x10015000 0x100>; | ||
120 | interrupts = <8>; | ||
121 | gpio-controller; | ||
122 | #gpio-cells = <2>; | ||
123 | interrupt-controller; | ||
124 | #interrupt-cells = <1>; | ||
125 | }; | ||
126 | |||
127 | gpio2: gpio@10015100 { | ||
128 | compatible = "fsl,imx27-gpio", "fsl,imx21-gpio"; | ||
129 | reg = <0x10015100 0x100>; | ||
130 | interrupts = <8>; | ||
131 | gpio-controller; | ||
132 | #gpio-cells = <2>; | ||
133 | interrupt-controller; | ||
134 | #interrupt-cells = <1>; | ||
135 | }; | ||
136 | |||
137 | gpio3: gpio@10015200 { | ||
138 | compatible = "fsl,imx27-gpio", "fsl,imx21-gpio"; | ||
139 | reg = <0x10015200 0x100>; | ||
140 | interrupts = <8>; | ||
141 | gpio-controller; | ||
142 | #gpio-cells = <2>; | ||
143 | interrupt-controller; | ||
144 | #interrupt-cells = <1>; | ||
145 | }; | ||
146 | |||
147 | gpio4: gpio@10015300 { | ||
148 | compatible = "fsl,imx27-gpio", "fsl,imx21-gpio"; | ||
149 | reg = <0x10015300 0x100>; | ||
150 | interrupts = <8>; | ||
151 | gpio-controller; | ||
152 | #gpio-cells = <2>; | ||
153 | interrupt-controller; | ||
154 | #interrupt-cells = <1>; | ||
155 | }; | ||
156 | |||
157 | gpio5: gpio@10015400 { | ||
158 | compatible = "fsl,imx27-gpio", "fsl,imx21-gpio"; | ||
159 | reg = <0x10015400 0x100>; | ||
160 | interrupts = <8>; | ||
161 | gpio-controller; | ||
162 | #gpio-cells = <2>; | ||
163 | interrupt-controller; | ||
164 | #interrupt-cells = <1>; | ||
165 | }; | ||
166 | |||
167 | gpio6: gpio@10015500 { | ||
168 | compatible = "fsl,imx27-gpio", "fsl,imx21-gpio"; | ||
169 | reg = <0x10015500 0x100>; | ||
170 | interrupts = <8>; | ||
171 | gpio-controller; | ||
172 | #gpio-cells = <2>; | ||
173 | interrupt-controller; | ||
174 | #interrupt-cells = <1>; | ||
175 | }; | ||
176 | |||
177 | cspi3: cspi@10017000 { | ||
178 | #address-cells = <1>; | ||
179 | #size-cells = <0>; | ||
180 | compatible = "fsl,imx27-cspi"; | ||
181 | reg = <0x10017000 0x1000>; | ||
182 | interrupts = <6>; | ||
183 | status = "disabled"; | ||
184 | }; | ||
185 | |||
186 | uart5: uart@1001b000 { | ||
187 | compatible = "fsl,imx27-uart", "fsl,imx21-uart"; | ||
188 | reg = <0x1001b000 0x1000>; | ||
189 | interrupts = <49>; | ||
190 | status = "disabled"; | ||
191 | }; | ||
192 | |||
193 | uart6: uart@1001c000 { | ||
194 | compatible = "fsl,imx27-uart", "fsl,imx21-uart"; | ||
195 | reg = <0x1001c000 0x1000>; | ||
196 | interrupts = <48>; | ||
197 | status = "disabled"; | ||
198 | }; | ||
199 | |||
200 | i2c2: i2c@1001d000 { | ||
201 | #address-cells = <1>; | ||
202 | #size-cells = <0>; | ||
203 | compatible = "fsl,imx27-i2c", "fsl,imx1-i2c"; | ||
204 | reg = <0x1001d000 0x1000>; | ||
205 | interrupts = <1>; | ||
206 | status = "disabled"; | ||
207 | }; | ||
208 | |||
209 | fec: fec@1002b000 { | ||
210 | compatible = "fsl,imx27-fec"; | ||
211 | reg = <0x1002b000 0x4000>; | ||
212 | interrupts = <50>; | ||
213 | status = "disabled"; | ||
214 | }; | ||
215 | }; | ||
216 | }; | ||
217 | }; | ||
diff --git a/arch/arm/boot/dts/imx51-babbage.dts b/arch/arm/boot/dts/imx51-babbage.dts index 564cb8c19f15..9949e6060dee 100644 --- a/arch/arm/boot/dts/imx51-babbage.dts +++ b/arch/arm/boot/dts/imx51-babbage.dts | |||
@@ -56,8 +56,95 @@ | |||
56 | compatible = "fsl,mc13892"; | 56 | compatible = "fsl,mc13892"; |
57 | spi-max-frequency = <6000000>; | 57 | spi-max-frequency = <6000000>; |
58 | reg = <0>; | 58 | reg = <0>; |
59 | mc13xxx-irq-gpios = <&gpio1 8 0>; | 59 | interrupt-parent = <&gpio1>; |
60 | fsl,mc13xxx-uses-regulator; | 60 | interrupts = <8>; |
61 | |||
62 | regulators { | ||
63 | sw1_reg: sw1 { | ||
64 | regulator-min-microvolt = <600000>; | ||
65 | regulator-max-microvolt = <1375000>; | ||
66 | regulator-boot-on; | ||
67 | regulator-always-on; | ||
68 | }; | ||
69 | |||
70 | sw2_reg: sw2 { | ||
71 | regulator-min-microvolt = <900000>; | ||
72 | regulator-max-microvolt = <1850000>; | ||
73 | regulator-boot-on; | ||
74 | regulator-always-on; | ||
75 | }; | ||
76 | |||
77 | sw3_reg: sw3 { | ||
78 | regulator-min-microvolt = <1100000>; | ||
79 | regulator-max-microvolt = <1850000>; | ||
80 | regulator-boot-on; | ||
81 | regulator-always-on; | ||
82 | }; | ||
83 | |||
84 | sw4_reg: sw4 { | ||
85 | regulator-min-microvolt = <1100000>; | ||
86 | regulator-max-microvolt = <1850000>; | ||
87 | regulator-boot-on; | ||
88 | regulator-always-on; | ||
89 | }; | ||
90 | |||
91 | vpll_reg: vpll { | ||
92 | regulator-min-microvolt = <1050000>; | ||
93 | regulator-max-microvolt = <1800000>; | ||
94 | regulator-boot-on; | ||
95 | regulator-always-on; | ||
96 | }; | ||
97 | |||
98 | vdig_reg: vdig { | ||
99 | regulator-min-microvolt = <1650000>; | ||
100 | regulator-max-microvolt = <1650000>; | ||
101 | regulator-boot-on; | ||
102 | }; | ||
103 | |||
104 | vsd_reg: vsd { | ||
105 | regulator-min-microvolt = <1800000>; | ||
106 | regulator-max-microvolt = <3150000>; | ||
107 | }; | ||
108 | |||
109 | vusb2_reg: vusb2 { | ||
110 | regulator-min-microvolt = <2400000>; | ||
111 | regulator-max-microvolt = <2775000>; | ||
112 | regulator-boot-on; | ||
113 | regulator-always-on; | ||
114 | }; | ||
115 | |||
116 | vvideo_reg: vvideo { | ||
117 | regulator-min-microvolt = <2775000>; | ||
118 | regulator-max-microvolt = <2775000>; | ||
119 | }; | ||
120 | |||
121 | vaudio_reg: vaudio { | ||
122 | regulator-min-microvolt = <2300000>; | ||
123 | regulator-max-microvolt = <3000000>; | ||
124 | }; | ||
125 | |||
126 | vcam_reg: vcam { | ||
127 | regulator-min-microvolt = <2500000>; | ||
128 | regulator-max-microvolt = <3000000>; | ||
129 | }; | ||
130 | |||
131 | vgen1_reg: vgen1 { | ||
132 | regulator-min-microvolt = <1200000>; | ||
133 | regulator-max-microvolt = <1200000>; | ||
134 | }; | ||
135 | |||
136 | vgen2_reg: vgen2 { | ||
137 | regulator-min-microvolt = <1200000>; | ||
138 | regulator-max-microvolt = <3150000>; | ||
139 | regulator-always-on; | ||
140 | }; | ||
141 | |||
142 | vgen3_reg: vgen3 { | ||
143 | regulator-min-microvolt = <1800000>; | ||
144 | regulator-max-microvolt = <2900000>; | ||
145 | regulator-always-on; | ||
146 | }; | ||
147 | }; | ||
61 | }; | 148 | }; |
62 | 149 | ||
63 | flash: at45db321d@1 { | 150 | flash: at45db321d@1 { |
diff --git a/arch/arm/boot/dts/imx6q-arm2.dts b/arch/arm/boot/dts/imx6q-arm2.dts index c3977e0478b9..ce1c8238c897 100644 --- a/arch/arm/boot/dts/imx6q-arm2.dts +++ b/arch/arm/boot/dts/imx6q-arm2.dts | |||
@@ -36,11 +36,13 @@ | |||
36 | usdhc@02198000 { /* uSDHC3 */ | 36 | usdhc@02198000 { /* uSDHC3 */ |
37 | cd-gpios = <&gpio6 11 0>; | 37 | cd-gpios = <&gpio6 11 0>; |
38 | wp-gpios = <&gpio6 14 0>; | 38 | wp-gpios = <&gpio6 14 0>; |
39 | vmmc-supply = <®_3p3v>; | ||
39 | status = "okay"; | 40 | status = "okay"; |
40 | }; | 41 | }; |
41 | 42 | ||
42 | usdhc@0219c000 { /* uSDHC4 */ | 43 | usdhc@0219c000 { /* uSDHC4 */ |
43 | fsl,card-wired; | 44 | fsl,card-wired; |
45 | vmmc-supply = <®_3p3v>; | ||
44 | status = "okay"; | 46 | status = "okay"; |
45 | }; | 47 | }; |
46 | 48 | ||
@@ -50,6 +52,18 @@ | |||
50 | }; | 52 | }; |
51 | }; | 53 | }; |
52 | 54 | ||
55 | regulators { | ||
56 | compatible = "simple-bus"; | ||
57 | |||
58 | reg_3p3v: 3p3v { | ||
59 | compatible = "regulator-fixed"; | ||
60 | regulator-name = "3P3V"; | ||
61 | regulator-min-microvolt = <3300000>; | ||
62 | regulator-max-microvolt = <3300000>; | ||
63 | regulator-always-on; | ||
64 | }; | ||
65 | }; | ||
66 | |||
53 | leds { | 67 | leds { |
54 | compatible = "gpio-leds"; | 68 | compatible = "gpio-leds"; |
55 | 69 | ||
diff --git a/arch/arm/boot/dts/imx6q-sabrelite.dts b/arch/arm/boot/dts/imx6q-sabrelite.dts index 08d920de7286..4663a4e5a285 100644 --- a/arch/arm/boot/dts/imx6q-sabrelite.dts +++ b/arch/arm/boot/dts/imx6q-sabrelite.dts | |||
@@ -32,18 +32,52 @@ | |||
32 | usdhc@02198000 { /* uSDHC3 */ | 32 | usdhc@02198000 { /* uSDHC3 */ |
33 | cd-gpios = <&gpio7 0 0>; | 33 | cd-gpios = <&gpio7 0 0>; |
34 | wp-gpios = <&gpio7 1 0>; | 34 | wp-gpios = <&gpio7 1 0>; |
35 | vmmc-supply = <®_3p3v>; | ||
35 | status = "okay"; | 36 | status = "okay"; |
36 | }; | 37 | }; |
37 | 38 | ||
38 | usdhc@0219c000 { /* uSDHC4 */ | 39 | usdhc@0219c000 { /* uSDHC4 */ |
39 | cd-gpios = <&gpio2 6 0>; | 40 | cd-gpios = <&gpio2 6 0>; |
40 | wp-gpios = <&gpio2 7 0>; | 41 | wp-gpios = <&gpio2 7 0>; |
42 | vmmc-supply = <®_3p3v>; | ||
41 | status = "okay"; | 43 | status = "okay"; |
42 | }; | 44 | }; |
43 | 45 | ||
44 | uart2: uart@021e8000 { | 46 | uart2: uart@021e8000 { |
45 | status = "okay"; | 47 | status = "okay"; |
46 | }; | 48 | }; |
49 | |||
50 | i2c@021a0000 { /* I2C1 */ | ||
51 | status = "okay"; | ||
52 | clock-frequency = <100000>; | ||
53 | |||
54 | codec: sgtl5000@0a { | ||
55 | compatible = "fsl,sgtl5000"; | ||
56 | reg = <0x0a>; | ||
57 | VDDA-supply = <®_2p5v>; | ||
58 | VDDIO-supply = <®_3p3v>; | ||
59 | }; | ||
60 | }; | ||
61 | }; | ||
62 | }; | ||
63 | |||
64 | regulators { | ||
65 | compatible = "simple-bus"; | ||
66 | |||
67 | reg_2p5v: 2p5v { | ||
68 | compatible = "regulator-fixed"; | ||
69 | regulator-name = "2P5V"; | ||
70 | regulator-min-microvolt = <2500000>; | ||
71 | regulator-max-microvolt = <2500000>; | ||
72 | regulator-always-on; | ||
73 | }; | ||
74 | |||
75 | reg_3p3v: 3p3v { | ||
76 | compatible = "regulator-fixed"; | ||
77 | regulator-name = "3P3V"; | ||
78 | regulator-min-microvolt = <3300000>; | ||
79 | regulator-max-microvolt = <3300000>; | ||
80 | regulator-always-on; | ||
47 | }; | 81 | }; |
48 | }; | 82 | }; |
49 | }; | 83 | }; |
diff --git a/arch/arm/boot/dts/omap3-beagle.dts b/arch/arm/boot/dts/omap3-beagle.dts index 9486be62bcdd..9f72cd4cf308 100644 --- a/arch/arm/boot/dts/omap3-beagle.dts +++ b/arch/arm/boot/dts/omap3-beagle.dts | |||
@@ -13,15 +13,6 @@ | |||
13 | model = "TI OMAP3 BeagleBoard"; | 13 | model = "TI OMAP3 BeagleBoard"; |
14 | compatible = "ti,omap3-beagle", "ti,omap3"; | 14 | compatible = "ti,omap3-beagle", "ti,omap3"; |
15 | 15 | ||
16 | /* | ||
17 | * Since the initial device tree board file does not create any | ||
18 | * devices (MMC, network...), the only way to boot is to provide a | ||
19 | * ramdisk. | ||
20 | */ | ||
21 | chosen { | ||
22 | bootargs = "root=/dev/ram0 rw console=ttyO2,115200n8 initrd=0x81600000,20M ramdisk_size=20480 no_console_suspend debug earlyprintk"; | ||
23 | }; | ||
24 | |||
25 | memory { | 16 | memory { |
26 | device_type = "memory"; | 17 | device_type = "memory"; |
27 | reg = <0x80000000 0x20000000>; /* 512 MB */ | 18 | reg = <0x80000000 0x20000000>; /* 512 MB */ |
diff --git a/arch/arm/boot/dts/omap3-evm.dts b/arch/arm/boot/dts/omap3-evm.dts new file mode 100644 index 000000000000..2eee16ec59b4 --- /dev/null +++ b/arch/arm/boot/dts/omap3-evm.dts | |||
@@ -0,0 +1,20 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/ | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify | ||
5 | * it under the terms of the GNU General Public License version 2 as | ||
6 | * published by the Free Software Foundation. | ||
7 | */ | ||
8 | /dts-v1/; | ||
9 | |||
10 | /include/ "omap3.dtsi" | ||
11 | |||
12 | / { | ||
13 | model = "TI OMAP3 EVM (OMAP3530, AM/DM37x)"; | ||
14 | compatible = "ti,omap3-evm", "ti,omap3"; | ||
15 | |||
16 | memory { | ||
17 | device_type = "memory"; | ||
18 | reg = <0x80000000 0x10000000>; /* 256 MB */ | ||
19 | }; | ||
20 | }; | ||
diff --git a/arch/arm/boot/dts/omap3.dtsi b/arch/arm/boot/dts/omap3.dtsi index 216c3317461d..c6121357c1eb 100644 --- a/arch/arm/boot/dts/omap3.dtsi +++ b/arch/arm/boot/dts/omap3.dtsi | |||
@@ -61,34 +61,57 @@ | |||
61 | ranges; | 61 | ranges; |
62 | ti,hwmods = "l3_main"; | 62 | ti,hwmods = "l3_main"; |
63 | 63 | ||
64 | intc: interrupt-controller@1 { | 64 | intc: interrupt-controller@48200000 { |
65 | compatible = "ti,omap3-intc"; | 65 | compatible = "ti,omap2-intc"; |
66 | interrupt-controller; | 66 | interrupt-controller; |
67 | #interrupt-cells = <1>; | 67 | #interrupt-cells = <1>; |
68 | ti,intc-size = <96>; | ||
69 | reg = <0x48200000 0x1000>; | ||
68 | }; | 70 | }; |
69 | 71 | ||
70 | uart1: serial@0x4806a000 { | 72 | uart1: serial@4806a000 { |
71 | compatible = "ti,omap3-uart"; | 73 | compatible = "ti,omap3-uart"; |
72 | ti,hwmods = "uart1"; | 74 | ti,hwmods = "uart1"; |
73 | clock-frequency = <48000000>; | 75 | clock-frequency = <48000000>; |
74 | }; | 76 | }; |
75 | 77 | ||
76 | uart2: serial@0x4806c000 { | 78 | uart2: serial@4806c000 { |
77 | compatible = "ti,omap3-uart"; | 79 | compatible = "ti,omap3-uart"; |
78 | ti,hwmods = "uart2"; | 80 | ti,hwmods = "uart2"; |
79 | clock-frequency = <48000000>; | 81 | clock-frequency = <48000000>; |
80 | }; | 82 | }; |
81 | 83 | ||
82 | uart3: serial@0x49020000 { | 84 | uart3: serial@49020000 { |
83 | compatible = "ti,omap3-uart"; | 85 | compatible = "ti,omap3-uart"; |
84 | ti,hwmods = "uart3"; | 86 | ti,hwmods = "uart3"; |
85 | clock-frequency = <48000000>; | 87 | clock-frequency = <48000000>; |
86 | }; | 88 | }; |
87 | 89 | ||
88 | uart4: serial@0x49042000 { | 90 | uart4: serial@49042000 { |
89 | compatible = "ti,omap3-uart"; | 91 | compatible = "ti,omap3-uart"; |
90 | ti,hwmods = "uart4"; | 92 | ti,hwmods = "uart4"; |
91 | clock-frequency = <48000000>; | 93 | clock-frequency = <48000000>; |
92 | }; | 94 | }; |
95 | |||
96 | i2c1: i2c@48070000 { | ||
97 | compatible = "ti,omap3-i2c"; | ||
98 | #address-cells = <1>; | ||
99 | #size-cells = <0>; | ||
100 | ti,hwmods = "i2c1"; | ||
101 | }; | ||
102 | |||
103 | i2c2: i2c@48072000 { | ||
104 | compatible = "ti,omap3-i2c"; | ||
105 | #address-cells = <1>; | ||
106 | #size-cells = <0>; | ||
107 | ti,hwmods = "i2c2"; | ||
108 | }; | ||
109 | |||
110 | i2c3: i2c@48060000 { | ||
111 | compatible = "ti,omap3-i2c"; | ||
112 | #address-cells = <1>; | ||
113 | #size-cells = <0>; | ||
114 | ti,hwmods = "i2c3"; | ||
115 | }; | ||
93 | }; | 116 | }; |
94 | }; | 117 | }; |
diff --git a/arch/arm/boot/dts/omap4-panda.dts b/arch/arm/boot/dts/omap4-panda.dts index c7026578ce7d..9755ad5917f8 100644 --- a/arch/arm/boot/dts/omap4-panda.dts +++ b/arch/arm/boot/dts/omap4-panda.dts | |||
@@ -13,15 +13,6 @@ | |||
13 | model = "TI OMAP4 PandaBoard"; | 13 | model = "TI OMAP4 PandaBoard"; |
14 | compatible = "ti,omap4-panda", "ti,omap4430", "ti,omap4"; | 14 | compatible = "ti,omap4-panda", "ti,omap4430", "ti,omap4"; |
15 | 15 | ||
16 | /* | ||
17 | * Since the initial device tree board file does not create any | ||
18 | * devices (MMC, network...), the only way to boot is to provide a | ||
19 | * ramdisk. | ||
20 | */ | ||
21 | chosen { | ||
22 | bootargs = "root=/dev/ram0 rw console=ttyO2,115200n8 initrd=0x81600000,20M ramdisk_size=20480 no_console_suspend debug"; | ||
23 | }; | ||
24 | |||
25 | memory { | 16 | memory { |
26 | device_type = "memory"; | 17 | device_type = "memory"; |
27 | reg = <0x80000000 0x40000000>; /* 1 GB */ | 18 | reg = <0x80000000 0x40000000>; /* 1 GB */ |
diff --git a/arch/arm/boot/dts/omap4-sdp.dts b/arch/arm/boot/dts/omap4-sdp.dts index 066e28c90328..63c6b2b2bf42 100644 --- a/arch/arm/boot/dts/omap4-sdp.dts +++ b/arch/arm/boot/dts/omap4-sdp.dts | |||
@@ -13,15 +13,6 @@ | |||
13 | model = "TI OMAP4 SDP board"; | 13 | model = "TI OMAP4 SDP board"; |
14 | compatible = "ti,omap4-sdp", "ti,omap4430", "ti,omap4"; | 14 | compatible = "ti,omap4-sdp", "ti,omap4430", "ti,omap4"; |
15 | 15 | ||
16 | /* | ||
17 | * Since the initial device tree board file does not create any | ||
18 | * devices (MMC, network...), the only way to boot is to provide a | ||
19 | * ramdisk. | ||
20 | */ | ||
21 | chosen { | ||
22 | bootargs = "root=/dev/ram0 rw console=ttyO2,115200n8 initrd=0x81600000,20M ramdisk_size=20480 no_console_suspend debug"; | ||
23 | }; | ||
24 | |||
25 | memory { | 16 | memory { |
26 | device_type = "memory"; | 17 | device_type = "memory"; |
27 | reg = <0x80000000 0x40000000>; /* 1 GB */ | 18 | reg = <0x80000000 0x40000000>; /* 1 GB */ |
diff --git a/arch/arm/boot/dts/omap4.dtsi b/arch/arm/boot/dts/omap4.dtsi index e8fe75fac7c5..3d35559e77bc 100644 --- a/arch/arm/boot/dts/omap4.dtsi +++ b/arch/arm/boot/dts/omap4.dtsi | |||
@@ -99,33 +99,61 @@ | |||
99 | gic: interrupt-controller@48241000 { | 99 | gic: interrupt-controller@48241000 { |
100 | compatible = "arm,cortex-a9-gic"; | 100 | compatible = "arm,cortex-a9-gic"; |
101 | interrupt-controller; | 101 | interrupt-controller; |
102 | #interrupt-cells = <1>; | 102 | #interrupt-cells = <3>; |
103 | reg = <0x48241000 0x1000>, | 103 | reg = <0x48241000 0x1000>, |
104 | <0x48240100 0x0100>; | 104 | <0x48240100 0x0100>; |
105 | }; | 105 | }; |
106 | 106 | ||
107 | uart1: serial@0x4806a000 { | 107 | uart1: serial@4806a000 { |
108 | compatible = "ti,omap4-uart"; | 108 | compatible = "ti,omap4-uart"; |
109 | ti,hwmods = "uart1"; | 109 | ti,hwmods = "uart1"; |
110 | clock-frequency = <48000000>; | 110 | clock-frequency = <48000000>; |
111 | }; | 111 | }; |
112 | 112 | ||
113 | uart2: serial@0x4806c000 { | 113 | uart2: serial@4806c000 { |
114 | compatible = "ti,omap4-uart"; | 114 | compatible = "ti,omap4-uart"; |
115 | ti,hwmods = "uart2"; | 115 | ti,hwmods = "uart2"; |
116 | clock-frequency = <48000000>; | 116 | clock-frequency = <48000000>; |
117 | }; | 117 | }; |
118 | 118 | ||
119 | uart3: serial@0x48020000 { | 119 | uart3: serial@48020000 { |
120 | compatible = "ti,omap4-uart"; | 120 | compatible = "ti,omap4-uart"; |
121 | ti,hwmods = "uart3"; | 121 | ti,hwmods = "uart3"; |
122 | clock-frequency = <48000000>; | 122 | clock-frequency = <48000000>; |
123 | }; | 123 | }; |
124 | 124 | ||
125 | uart4: serial@0x4806e000 { | 125 | uart4: serial@4806e000 { |
126 | compatible = "ti,omap4-uart"; | 126 | compatible = "ti,omap4-uart"; |
127 | ti,hwmods = "uart4"; | 127 | ti,hwmods = "uart4"; |
128 | clock-frequency = <48000000>; | 128 | clock-frequency = <48000000>; |
129 | }; | 129 | }; |
130 | |||
131 | i2c1: i2c@48070000 { | ||
132 | compatible = "ti,omap4-i2c"; | ||
133 | #address-cells = <1>; | ||
134 | #size-cells = <0>; | ||
135 | ti,hwmods = "i2c1"; | ||
136 | }; | ||
137 | |||
138 | i2c2: i2c@48072000 { | ||
139 | compatible = "ti,omap4-i2c"; | ||
140 | #address-cells = <1>; | ||
141 | #size-cells = <0>; | ||
142 | ti,hwmods = "i2c2"; | ||
143 | }; | ||
144 | |||
145 | i2c3: i2c@48060000 { | ||
146 | compatible = "ti,omap4-i2c"; | ||
147 | #address-cells = <1>; | ||
148 | #size-cells = <0>; | ||
149 | ti,hwmods = "i2c3"; | ||
150 | }; | ||
151 | |||
152 | i2c4: i2c@48350000 { | ||
153 | compatible = "ti,omap4-i2c"; | ||
154 | #address-cells = <1>; | ||
155 | #size-cells = <0>; | ||
156 | ti,hwmods = "i2c4"; | ||
157 | }; | ||
130 | }; | 158 | }; |
131 | }; | 159 | }; |
diff --git a/arch/arm/boot/dts/pxa168-aspenite.dts b/arch/arm/boot/dts/pxa168-aspenite.dts new file mode 100644 index 000000000000..e762facb3fa4 --- /dev/null +++ b/arch/arm/boot/dts/pxa168-aspenite.dts | |||
@@ -0,0 +1,38 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2012 Marvell Technology Group Ltd. | ||
3 | * Author: Haojian Zhuang <haojian.zhuang@marvell.com> | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License version 2 as | ||
7 | * publishhed by the Free Software Foundation. | ||
8 | */ | ||
9 | |||
10 | /dts-v1/; | ||
11 | /include/ "pxa168.dtsi" | ||
12 | |||
13 | / { | ||
14 | model = "Marvell PXA168 Aspenite Development Board"; | ||
15 | compatible = "mrvl,pxa168-aspenite", "mrvl,pxa168"; | ||
16 | |||
17 | chosen { | ||
18 | bootargs = "console=ttyS0,115200 root=/dev/nfs nfsroot=192.168.1.100:/nfsroot/ ip=192.168.1.101:192.168.1.100::255.255.255.0::eth0:on"; | ||
19 | }; | ||
20 | |||
21 | memory { | ||
22 | reg = <0x00000000 0x04000000>; | ||
23 | }; | ||
24 | |||
25 | soc { | ||
26 | apb@d4000000 { | ||
27 | uart1: uart@d4017000 { | ||
28 | status = "okay"; | ||
29 | }; | ||
30 | twsi1: i2c@d4011000 { | ||
31 | status = "okay"; | ||
32 | }; | ||
33 | rtc: rtc@d4010000 { | ||
34 | status = "okay"; | ||
35 | }; | ||
36 | }; | ||
37 | }; | ||
38 | }; | ||
diff --git a/arch/arm/boot/dts/pxa168.dtsi b/arch/arm/boot/dts/pxa168.dtsi new file mode 100644 index 000000000000..d32d5128f225 --- /dev/null +++ b/arch/arm/boot/dts/pxa168.dtsi | |||
@@ -0,0 +1,98 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2012 Marvell Technology Group Ltd. | ||
3 | * Author: Haojian Zhuang <haojian.zhuang@marvell.com> | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License version 2 as | ||
7 | * publishhed by the Free Software Foundation. | ||
8 | */ | ||
9 | |||
10 | /include/ "skeleton.dtsi" | ||
11 | |||
12 | / { | ||
13 | aliases { | ||
14 | serial0 = &uart1; | ||
15 | serial1 = &uart2; | ||
16 | serial2 = &uart3; | ||
17 | i2c0 = &twsi1; | ||
18 | i2c1 = &twsi2; | ||
19 | }; | ||
20 | |||
21 | intc: intc-interrupt-controller@d4282000 { | ||
22 | compatible = "mrvl,mmp-intc", "mrvl,intc"; | ||
23 | interrupt-controller; | ||
24 | #interrupt-cells = <1>; | ||
25 | reg = <0xd4282000 0x1000>; | ||
26 | }; | ||
27 | |||
28 | soc { | ||
29 | #address-cells = <1>; | ||
30 | #size-cells = <1>; | ||
31 | compatible = "simple-bus"; | ||
32 | interrupt-parent = <&intc>; | ||
33 | ranges; | ||
34 | |||
35 | apb@d4000000 { /* APB */ | ||
36 | compatible = "mrvl,apb-bus", "simple-bus"; | ||
37 | #address-cells = <1>; | ||
38 | #size-cells = <1>; | ||
39 | reg = <0xd4000000 0x00200000>; | ||
40 | ranges; | ||
41 | |||
42 | uart1: uart@d4017000 { | ||
43 | compatible = "mrvl,mmp-uart", "mrvl,pxa-uart"; | ||
44 | reg = <0xd4017000 0x1000>; | ||
45 | interrupts = <27>; | ||
46 | status = "disabled"; | ||
47 | }; | ||
48 | |||
49 | uart2: uart@d4018000 { | ||
50 | compatible = "mrvl,mmp-uart", "mrvl,pxa-uart"; | ||
51 | reg = <0xd4018000 0x1000>; | ||
52 | interrupts = <28>; | ||
53 | status = "disabled"; | ||
54 | }; | ||
55 | |||
56 | uart3: uart@d4026000 { | ||
57 | compatible = "mrvl,mmp-uart", "mrvl,pxa-uart"; | ||
58 | reg = <0xd4026000 0x1000>; | ||
59 | interrupts = <29>; | ||
60 | status = "disabled"; | ||
61 | }; | ||
62 | |||
63 | gpio: gpio@d4019000 { | ||
64 | compatible = "mrvl,mmp-gpio", "mrvl,pxa-gpio"; | ||
65 | reg = <0xd4019000 0x1000>; | ||
66 | interrupts = <49>; | ||
67 | interrupt-names = "gpio_mux"; | ||
68 | gpio-controller; | ||
69 | #gpio-cells = <1>; | ||
70 | interrupt-controller; | ||
71 | #interrupt-cells = <1>; | ||
72 | }; | ||
73 | |||
74 | twsi1: i2c@d4011000 { | ||
75 | compatible = "mrvl,mmp-twsi", "mrvl,pxa-i2c"; | ||
76 | reg = <0xd4011000 0x1000>; | ||
77 | interrupts = <7>; | ||
78 | mrvl,i2c-fast-mode; | ||
79 | status = "disabled"; | ||
80 | }; | ||
81 | |||
82 | twsi2: i2c@d4025000 { | ||
83 | compatible = "mrvl,mmp-twsi", "mrvl,pxa-i2c"; | ||
84 | reg = <0xd4025000 0x1000>; | ||
85 | interrupts = <58>; | ||
86 | status = "disabled"; | ||
87 | }; | ||
88 | |||
89 | rtc: rtc@d4010000 { | ||
90 | compatible = "mrvl,mmp-rtc"; | ||
91 | reg = <0xd4010000 0x1000>; | ||
92 | interrupts = <5 6>; | ||
93 | interrupt-names = "rtc 1Hz", "rtc alarm"; | ||
94 | status = "disabled"; | ||
95 | }; | ||
96 | }; | ||
97 | }; | ||
98 | }; | ||
diff --git a/arch/arm/boot/dts/tegra-cardhu.dts b/arch/arm/boot/dts/tegra-cardhu.dts index 70c41fc897d7..73263501f581 100644 --- a/arch/arm/boot/dts/tegra-cardhu.dts +++ b/arch/arm/boot/dts/tegra-cardhu.dts | |||
@@ -33,4 +33,22 @@ | |||
33 | i2c@7000d000 { | 33 | i2c@7000d000 { |
34 | clock-frequency = <100000>; | 34 | clock-frequency = <100000>; |
35 | }; | 35 | }; |
36 | |||
37 | sdhci@78000000 { | ||
38 | cd-gpios = <&gpio 69 0>; /* gpio PI5 */ | ||
39 | wp-gpios = <&gpio 155 0>; /* gpio PT3 */ | ||
40 | power-gpios = <&gpio 31 0>; /* gpio PD7 */ | ||
41 | }; | ||
42 | |||
43 | sdhci@78000200 { | ||
44 | status = "disable"; | ||
45 | }; | ||
46 | |||
47 | sdhci@78000400 { | ||
48 | status = "disable"; | ||
49 | }; | ||
50 | |||
51 | sdhci@78000400 { | ||
52 | support-8bit; | ||
53 | }; | ||
36 | }; | 54 | }; |
diff --git a/arch/arm/boot/dts/tegra-paz00.dts b/arch/arm/boot/dts/tegra-paz00.dts index fc97254c3644..6c02abb469d4 100644 --- a/arch/arm/boot/dts/tegra-paz00.dts +++ b/arch/arm/boot/dts/tegra-paz00.dts | |||
@@ -65,7 +65,8 @@ | |||
65 | "Headset Mic", "MICBIAS1", | 65 | "Headset Mic", "MICBIAS1", |
66 | "MIC1", "Headset Mic", | 66 | "MIC1", "Headset Mic", |
67 | "Headset Stereophone", "HPR", | 67 | "Headset Stereophone", "HPR", |
68 | "Headset Stereophone", "HPL"; | 68 | "Headset Stereophone", "HPL", |
69 | "DMICDAT", "Digital Mic"; | ||
69 | 70 | ||
70 | nvidia,audio-codec = <&alc5632>; | 71 | nvidia,audio-codec = <&alc5632>; |
71 | nvidia,i2s-controller = <&tegra_i2s1>; | 72 | nvidia,i2s-controller = <&tegra_i2s1>; |
diff --git a/arch/arm/boot/dts/tegra20.dtsi b/arch/arm/boot/dts/tegra20.dtsi index ec1f0101c79c..aff8a175aa40 100644 --- a/arch/arm/boot/dts/tegra20.dtsi +++ b/arch/arm/boot/dts/tegra20.dtsi | |||
@@ -17,6 +17,12 @@ | |||
17 | < 0x50040100 0x0100 >; | 17 | < 0x50040100 0x0100 >; |
18 | }; | 18 | }; |
19 | 19 | ||
20 | pmu { | ||
21 | compatible = "arm,cortex-a9-pmu"; | ||
22 | interrupts = <0 56 0x04 | ||
23 | 0 57 0x04>; | ||
24 | }; | ||
25 | |||
20 | apbdma: dma@6000a000 { | 26 | apbdma: dma@6000a000 { |
21 | compatible = "nvidia,tegra20-apbdma"; | 27 | compatible = "nvidia,tegra20-apbdma"; |
22 | reg = <0x6000a000 0x1200>; | 28 | reg = <0x6000a000 0x1200>; |
diff --git a/arch/arm/boot/dts/tegra30.dtsi b/arch/arm/boot/dts/tegra30.dtsi index ac4b75cb26c0..62a7b39f1c9a 100644 --- a/arch/arm/boot/dts/tegra30.dtsi +++ b/arch/arm/boot/dts/tegra30.dtsi | |||
@@ -17,6 +17,14 @@ | |||
17 | < 0x50040100 0x0100 >; | 17 | < 0x50040100 0x0100 >; |
18 | }; | 18 | }; |
19 | 19 | ||
20 | pmu { | ||
21 | compatible = "arm,cortex-a9-pmu"; | ||
22 | interrupts = <0 144 0x04 | ||
23 | 0 145 0x04 | ||
24 | 0 146 0x04 | ||
25 | 0 147 0x04>; | ||
26 | }; | ||
27 | |||
20 | apbdma: dma@6000a000 { | 28 | apbdma: dma@6000a000 { |
21 | compatible = "nvidia,tegra30-apbdma", "nvidia,tegra20-apbdma"; | 29 | compatible = "nvidia,tegra30-apbdma", "nvidia,tegra20-apbdma"; |
22 | reg = <0x6000a000 0x1400>; | 30 | reg = <0x6000a000 0x1400>; |
diff --git a/arch/arm/boot/dts/usb_a9g20.dts b/arch/arm/boot/dts/usb_a9g20.dts index f04b535477f5..d74545a2a77c 100644 --- a/arch/arm/boot/dts/usb_a9g20.dts +++ b/arch/arm/boot/dts/usb_a9g20.dts | |||
@@ -32,4 +32,27 @@ | |||
32 | }; | 32 | }; |
33 | }; | 33 | }; |
34 | }; | 34 | }; |
35 | |||
36 | leds { | ||
37 | compatible = "gpio-leds"; | ||
38 | |||
39 | user_led { | ||
40 | label = "user_led"; | ||
41 | gpios = <&pioB 21 1>; | ||
42 | linux,default-trigger = "heartbeat"; | ||
43 | }; | ||
44 | }; | ||
45 | |||
46 | gpio_keys { | ||
47 | compatible = "gpio-keys"; | ||
48 | #address-cells = <1>; | ||
49 | #size-cells = <0>; | ||
50 | |||
51 | user_pb { | ||
52 | label = "user_pb"; | ||
53 | gpios = <&pioB 10 1>; | ||
54 | linux,code = <28>; | ||
55 | gpio-key,wakeup; | ||
56 | }; | ||
57 | }; | ||
35 | }; | 58 | }; |
diff --git a/arch/arm/boot/dts/vexpress-v2m-rs1.dtsi b/arch/arm/boot/dts/vexpress-v2m-rs1.dtsi new file mode 100644 index 000000000000..16076e2d0934 --- /dev/null +++ b/arch/arm/boot/dts/vexpress-v2m-rs1.dtsi | |||
@@ -0,0 +1,201 @@ | |||
1 | /* | ||
2 | * ARM Ltd. Versatile Express | ||
3 | * | ||
4 | * Motherboard Express uATX | ||
5 | * V2M-P1 | ||
6 | * | ||
7 | * HBI-0190D | ||
8 | * | ||
9 | * RS1 memory map ("ARM Cortex-A Series memory map" in the board's | ||
10 | * Technical Reference Manual) | ||
11 | * | ||
12 | * WARNING! The hardware described in this file is independent from the | ||
13 | * original variant (vexpress-v2m.dtsi), but there is a strong | ||
14 | * correspondence between the two configurations. | ||
15 | * | ||
16 | * TAKE CARE WHEN MAINTAINING THIS FILE TO PROPAGATE ANY RELEVANT | ||
17 | * CHANGES TO vexpress-v2m.dtsi! | ||
18 | */ | ||
19 | |||
20 | / { | ||
21 | aliases { | ||
22 | arm,v2m_timer = &v2m_timer01; | ||
23 | }; | ||
24 | |||
25 | motherboard { | ||
26 | compatible = "simple-bus"; | ||
27 | arm,v2m-memory-map = "rs1"; | ||
28 | #address-cells = <2>; /* SMB chipselect number and offset */ | ||
29 | #size-cells = <1>; | ||
30 | #interrupt-cells = <1>; | ||
31 | |||
32 | flash@0,00000000 { | ||
33 | compatible = "arm,vexpress-flash", "cfi-flash"; | ||
34 | reg = <0 0x00000000 0x04000000>, | ||
35 | <4 0x00000000 0x04000000>; | ||
36 | bank-width = <4>; | ||
37 | }; | ||
38 | |||
39 | psram@1,00000000 { | ||
40 | compatible = "arm,vexpress-psram", "mtd-ram"; | ||
41 | reg = <1 0x00000000 0x02000000>; | ||
42 | bank-width = <4>; | ||
43 | }; | ||
44 | |||
45 | vram@2,00000000 { | ||
46 | compatible = "arm,vexpress-vram"; | ||
47 | reg = <2 0x00000000 0x00800000>; | ||
48 | }; | ||
49 | |||
50 | ethernet@2,02000000 { | ||
51 | compatible = "smsc,lan9118", "smsc,lan9115"; | ||
52 | reg = <2 0x02000000 0x10000>; | ||
53 | interrupts = <15>; | ||
54 | phy-mode = "mii"; | ||
55 | reg-io-width = <4>; | ||
56 | smsc,irq-active-high; | ||
57 | smsc,irq-push-pull; | ||
58 | }; | ||
59 | |||
60 | usb@2,03000000 { | ||
61 | compatible = "nxp,usb-isp1761"; | ||
62 | reg = <2 0x03000000 0x20000>; | ||
63 | interrupts = <16>; | ||
64 | port1-otg; | ||
65 | }; | ||
66 | |||
67 | iofpga@3,00000000 { | ||
68 | compatible = "arm,amba-bus", "simple-bus"; | ||
69 | #address-cells = <1>; | ||
70 | #size-cells = <1>; | ||
71 | ranges = <0 3 0 0x200000>; | ||
72 | |||
73 | sysreg@010000 { | ||
74 | compatible = "arm,vexpress-sysreg"; | ||
75 | reg = <0x010000 0x1000>; | ||
76 | }; | ||
77 | |||
78 | sysctl@020000 { | ||
79 | compatible = "arm,sp810", "arm,primecell"; | ||
80 | reg = <0x020000 0x1000>; | ||
81 | }; | ||
82 | |||
83 | /* PCI-E I2C bus */ | ||
84 | v2m_i2c_pcie: i2c@030000 { | ||
85 | compatible = "arm,versatile-i2c"; | ||
86 | reg = <0x030000 0x1000>; | ||
87 | |||
88 | #address-cells = <1>; | ||
89 | #size-cells = <0>; | ||
90 | |||
91 | pcie-switch@60 { | ||
92 | compatible = "idt,89hpes32h8"; | ||
93 | reg = <0x60>; | ||
94 | }; | ||
95 | }; | ||
96 | |||
97 | aaci@040000 { | ||
98 | compatible = "arm,pl041", "arm,primecell"; | ||
99 | reg = <0x040000 0x1000>; | ||
100 | interrupts = <11>; | ||
101 | }; | ||
102 | |||
103 | mmci@050000 { | ||
104 | compatible = "arm,pl180", "arm,primecell"; | ||
105 | reg = <0x050000 0x1000>; | ||
106 | interrupts = <9 10>; | ||
107 | }; | ||
108 | |||
109 | kmi@060000 { | ||
110 | compatible = "arm,pl050", "arm,primecell"; | ||
111 | reg = <0x060000 0x1000>; | ||
112 | interrupts = <12>; | ||
113 | }; | ||
114 | |||
115 | kmi@070000 { | ||
116 | compatible = "arm,pl050", "arm,primecell"; | ||
117 | reg = <0x070000 0x1000>; | ||
118 | interrupts = <13>; | ||
119 | }; | ||
120 | |||
121 | v2m_serial0: uart@090000 { | ||
122 | compatible = "arm,pl011", "arm,primecell"; | ||
123 | reg = <0x090000 0x1000>; | ||
124 | interrupts = <5>; | ||
125 | }; | ||
126 | |||
127 | v2m_serial1: uart@0a0000 { | ||
128 | compatible = "arm,pl011", "arm,primecell"; | ||
129 | reg = <0x0a0000 0x1000>; | ||
130 | interrupts = <6>; | ||
131 | }; | ||
132 | |||
133 | v2m_serial2: uart@0b0000 { | ||
134 | compatible = "arm,pl011", "arm,primecell"; | ||
135 | reg = <0x0b0000 0x1000>; | ||
136 | interrupts = <7>; | ||
137 | }; | ||
138 | |||
139 | v2m_serial3: uart@0c0000 { | ||
140 | compatible = "arm,pl011", "arm,primecell"; | ||
141 | reg = <0x0c0000 0x1000>; | ||
142 | interrupts = <8>; | ||
143 | }; | ||
144 | |||
145 | wdt@0f0000 { | ||
146 | compatible = "arm,sp805", "arm,primecell"; | ||
147 | reg = <0x0f0000 0x1000>; | ||
148 | interrupts = <0>; | ||
149 | }; | ||
150 | |||
151 | v2m_timer01: timer@110000 { | ||
152 | compatible = "arm,sp804", "arm,primecell"; | ||
153 | reg = <0x110000 0x1000>; | ||
154 | interrupts = <2>; | ||
155 | }; | ||
156 | |||
157 | v2m_timer23: timer@120000 { | ||
158 | compatible = "arm,sp804", "arm,primecell"; | ||
159 | reg = <0x120000 0x1000>; | ||
160 | }; | ||
161 | |||
162 | /* DVI I2C bus */ | ||
163 | v2m_i2c_dvi: i2c@160000 { | ||
164 | compatible = "arm,versatile-i2c"; | ||
165 | reg = <0x160000 0x1000>; | ||
166 | |||
167 | #address-cells = <1>; | ||
168 | #size-cells = <0>; | ||
169 | |||
170 | dvi-transmitter@39 { | ||
171 | compatible = "sil,sii9022-tpi", "sil,sii9022"; | ||
172 | reg = <0x39>; | ||
173 | }; | ||
174 | |||
175 | dvi-transmitter@60 { | ||
176 | compatible = "sil,sii9022-cpi", "sil,sii9022"; | ||
177 | reg = <0x60>; | ||
178 | }; | ||
179 | }; | ||
180 | |||
181 | rtc@170000 { | ||
182 | compatible = "arm,pl031", "arm,primecell"; | ||
183 | reg = <0x170000 0x1000>; | ||
184 | interrupts = <4>; | ||
185 | }; | ||
186 | |||
187 | compact-flash@1a0000 { | ||
188 | compatible = "arm,vexpress-cf", "ata-generic"; | ||
189 | reg = <0x1a0000 0x100 | ||
190 | 0x1a0100 0xf00>; | ||
191 | reg-shift = <2>; | ||
192 | }; | ||
193 | |||
194 | clcd@1f0000 { | ||
195 | compatible = "arm,pl111", "arm,primecell"; | ||
196 | reg = <0x1f0000 0x1000>; | ||
197 | interrupts = <14>; | ||
198 | }; | ||
199 | }; | ||
200 | }; | ||
201 | }; | ||
diff --git a/arch/arm/boot/dts/vexpress-v2m.dtsi b/arch/arm/boot/dts/vexpress-v2m.dtsi new file mode 100644 index 000000000000..a6c9c7c82d53 --- /dev/null +++ b/arch/arm/boot/dts/vexpress-v2m.dtsi | |||
@@ -0,0 +1,200 @@ | |||
1 | /* | ||
2 | * ARM Ltd. Versatile Express | ||
3 | * | ||
4 | * Motherboard Express uATX | ||
5 | * V2M-P1 | ||
6 | * | ||
7 | * HBI-0190D | ||
8 | * | ||
9 | * Original memory map ("Legacy memory map" in the board's | ||
10 | * Technical Reference Manual) | ||
11 | * | ||
12 | * WARNING! The hardware described in this file is independent from the | ||
13 | * RS1 variant (vexpress-v2m-rs1.dtsi), but there is a strong | ||
14 | * correspondence between the two configurations. | ||
15 | * | ||
16 | * TAKE CARE WHEN MAINTAINING THIS FILE TO PROPAGATE ANY RELEVANT | ||
17 | * CHANGES TO vexpress-v2m-rs1.dtsi! | ||
18 | */ | ||
19 | |||
20 | / { | ||
21 | aliases { | ||
22 | arm,v2m_timer = &v2m_timer01; | ||
23 | }; | ||
24 | |||
25 | motherboard { | ||
26 | compatible = "simple-bus"; | ||
27 | #address-cells = <2>; /* SMB chipselect number and offset */ | ||
28 | #size-cells = <1>; | ||
29 | #interrupt-cells = <1>; | ||
30 | |||
31 | flash@0,00000000 { | ||
32 | compatible = "arm,vexpress-flash", "cfi-flash"; | ||
33 | reg = <0 0x00000000 0x04000000>, | ||
34 | <1 0x00000000 0x04000000>; | ||
35 | bank-width = <4>; | ||
36 | }; | ||
37 | |||
38 | psram@2,00000000 { | ||
39 | compatible = "arm,vexpress-psram", "mtd-ram"; | ||
40 | reg = <2 0x00000000 0x02000000>; | ||
41 | bank-width = <4>; | ||
42 | }; | ||
43 | |||
44 | vram@3,00000000 { | ||
45 | compatible = "arm,vexpress-vram"; | ||
46 | reg = <3 0x00000000 0x00800000>; | ||
47 | }; | ||
48 | |||
49 | ethernet@3,02000000 { | ||
50 | compatible = "smsc,lan9118", "smsc,lan9115"; | ||
51 | reg = <3 0x02000000 0x10000>; | ||
52 | interrupts = <15>; | ||
53 | phy-mode = "mii"; | ||
54 | reg-io-width = <4>; | ||
55 | smsc,irq-active-high; | ||
56 | smsc,irq-push-pull; | ||
57 | }; | ||
58 | |||
59 | usb@3,03000000 { | ||
60 | compatible = "nxp,usb-isp1761"; | ||
61 | reg = <3 0x03000000 0x20000>; | ||
62 | interrupts = <16>; | ||
63 | port1-otg; | ||
64 | }; | ||
65 | |||
66 | iofpga@7,00000000 { | ||
67 | compatible = "arm,amba-bus", "simple-bus"; | ||
68 | #address-cells = <1>; | ||
69 | #size-cells = <1>; | ||
70 | ranges = <0 7 0 0x20000>; | ||
71 | |||
72 | sysreg@00000 { | ||
73 | compatible = "arm,vexpress-sysreg"; | ||
74 | reg = <0x00000 0x1000>; | ||
75 | }; | ||
76 | |||
77 | sysctl@01000 { | ||
78 | compatible = "arm,sp810", "arm,primecell"; | ||
79 | reg = <0x01000 0x1000>; | ||
80 | }; | ||
81 | |||
82 | /* PCI-E I2C bus */ | ||
83 | v2m_i2c_pcie: i2c@02000 { | ||
84 | compatible = "arm,versatile-i2c"; | ||
85 | reg = <0x02000 0x1000>; | ||
86 | |||
87 | #address-cells = <1>; | ||
88 | #size-cells = <0>; | ||
89 | |||
90 | pcie-switch@60 { | ||
91 | compatible = "idt,89hpes32h8"; | ||
92 | reg = <0x60>; | ||
93 | }; | ||
94 | }; | ||
95 | |||
96 | aaci@04000 { | ||
97 | compatible = "arm,pl041", "arm,primecell"; | ||
98 | reg = <0x04000 0x1000>; | ||
99 | interrupts = <11>; | ||
100 | }; | ||
101 | |||
102 | mmci@05000 { | ||
103 | compatible = "arm,pl180", "arm,primecell"; | ||
104 | reg = <0x05000 0x1000>; | ||
105 | interrupts = <9 10>; | ||
106 | }; | ||
107 | |||
108 | kmi@06000 { | ||
109 | compatible = "arm,pl050", "arm,primecell"; | ||
110 | reg = <0x06000 0x1000>; | ||
111 | interrupts = <12>; | ||
112 | }; | ||
113 | |||
114 | kmi@07000 { | ||
115 | compatible = "arm,pl050", "arm,primecell"; | ||
116 | reg = <0x07000 0x1000>; | ||
117 | interrupts = <13>; | ||
118 | }; | ||
119 | |||
120 | v2m_serial0: uart@09000 { | ||
121 | compatible = "arm,pl011", "arm,primecell"; | ||
122 | reg = <0x09000 0x1000>; | ||
123 | interrupts = <5>; | ||
124 | }; | ||
125 | |||
126 | v2m_serial1: uart@0a000 { | ||
127 | compatible = "arm,pl011", "arm,primecell"; | ||
128 | reg = <0x0a000 0x1000>; | ||
129 | interrupts = <6>; | ||
130 | }; | ||
131 | |||
132 | v2m_serial2: uart@0b000 { | ||
133 | compatible = "arm,pl011", "arm,primecell"; | ||
134 | reg = <0x0b000 0x1000>; | ||
135 | interrupts = <7>; | ||
136 | }; | ||
137 | |||
138 | v2m_serial3: uart@0c000 { | ||
139 | compatible = "arm,pl011", "arm,primecell"; | ||
140 | reg = <0x0c000 0x1000>; | ||
141 | interrupts = <8>; | ||
142 | }; | ||
143 | |||
144 | wdt@0f000 { | ||
145 | compatible = "arm,sp805", "arm,primecell"; | ||
146 | reg = <0x0f000 0x1000>; | ||
147 | interrupts = <0>; | ||
148 | }; | ||
149 | |||
150 | v2m_timer01: timer@11000 { | ||
151 | compatible = "arm,sp804", "arm,primecell"; | ||
152 | reg = <0x11000 0x1000>; | ||
153 | interrupts = <2>; | ||
154 | }; | ||
155 | |||
156 | v2m_timer23: timer@12000 { | ||
157 | compatible = "arm,sp804", "arm,primecell"; | ||
158 | reg = <0x12000 0x1000>; | ||
159 | }; | ||
160 | |||
161 | /* DVI I2C bus */ | ||
162 | v2m_i2c_dvi: i2c@16000 { | ||
163 | compatible = "arm,versatile-i2c"; | ||
164 | reg = <0x16000 0x1000>; | ||
165 | |||
166 | #address-cells = <1>; | ||
167 | #size-cells = <0>; | ||
168 | |||
169 | dvi-transmitter@39 { | ||
170 | compatible = "sil,sii9022-tpi", "sil,sii9022"; | ||
171 | reg = <0x39>; | ||
172 | }; | ||
173 | |||
174 | dvi-transmitter@60 { | ||
175 | compatible = "sil,sii9022-cpi", "sil,sii9022"; | ||
176 | reg = <0x60>; | ||
177 | }; | ||
178 | }; | ||
179 | |||
180 | rtc@17000 { | ||
181 | compatible = "arm,pl031", "arm,primecell"; | ||
182 | reg = <0x17000 0x1000>; | ||
183 | interrupts = <4>; | ||
184 | }; | ||
185 | |||
186 | compact-flash@1a000 { | ||
187 | compatible = "arm,vexpress-cf", "ata-generic"; | ||
188 | reg = <0x1a000 0x100 | ||
189 | 0x1a100 0xf00>; | ||
190 | reg-shift = <2>; | ||
191 | }; | ||
192 | |||
193 | clcd@1f000 { | ||
194 | compatible = "arm,pl111", "arm,primecell"; | ||
195 | reg = <0x1f000 0x1000>; | ||
196 | interrupts = <14>; | ||
197 | }; | ||
198 | }; | ||
199 | }; | ||
200 | }; | ||
diff --git a/arch/arm/boot/dts/vexpress-v2p-ca15-tc1.dts b/arch/arm/boot/dts/vexpress-v2p-ca15-tc1.dts new file mode 100644 index 000000000000..941b161ab78c --- /dev/null +++ b/arch/arm/boot/dts/vexpress-v2p-ca15-tc1.dts | |||
@@ -0,0 +1,157 @@ | |||
1 | /* | ||
2 | * ARM Ltd. Versatile Express | ||
3 | * | ||
4 | * CoreTile Express A15x2 (version with Test Chip 1) | ||
5 | * Cortex-A15 MPCore (V2P-CA15) | ||
6 | * | ||
7 | * HBI-0237A | ||
8 | */ | ||
9 | |||
10 | /dts-v1/; | ||
11 | |||
12 | / { | ||
13 | model = "V2P-CA15"; | ||
14 | arm,hbi = <0x237>; | ||
15 | compatible = "arm,vexpress,v2p-ca15,tc1", "arm,vexpress,v2p-ca15", "arm,vexpress"; | ||
16 | interrupt-parent = <&gic>; | ||
17 | #address-cells = <1>; | ||
18 | #size-cells = <1>; | ||
19 | |||
20 | chosen { }; | ||
21 | |||
22 | aliases { | ||
23 | serial0 = &v2m_serial0; | ||
24 | serial1 = &v2m_serial1; | ||
25 | serial2 = &v2m_serial2; | ||
26 | serial3 = &v2m_serial3; | ||
27 | i2c0 = &v2m_i2c_dvi; | ||
28 | i2c1 = &v2m_i2c_pcie; | ||
29 | }; | ||
30 | |||
31 | cpus { | ||
32 | #address-cells = <1>; | ||
33 | #size-cells = <0>; | ||
34 | |||
35 | cpu@0 { | ||
36 | device_type = "cpu"; | ||
37 | compatible = "arm,cortex-a15"; | ||
38 | reg = <0>; | ||
39 | }; | ||
40 | |||
41 | cpu@1 { | ||
42 | device_type = "cpu"; | ||
43 | compatible = "arm,cortex-a15"; | ||
44 | reg = <1>; | ||
45 | }; | ||
46 | }; | ||
47 | |||
48 | memory@80000000 { | ||
49 | device_type = "memory"; | ||
50 | reg = <0x80000000 0x40000000>; | ||
51 | }; | ||
52 | |||
53 | hdlcd@2b000000 { | ||
54 | compatible = "arm,hdlcd"; | ||
55 | reg = <0x2b000000 0x1000>; | ||
56 | interrupts = <0 85 4>; | ||
57 | }; | ||
58 | |||
59 | memory-controller@2b0a0000 { | ||
60 | compatible = "arm,pl341", "arm,primecell"; | ||
61 | reg = <0x2b0a0000 0x1000>; | ||
62 | }; | ||
63 | |||
64 | wdt@2b060000 { | ||
65 | compatible = "arm,sp805", "arm,primecell"; | ||
66 | reg = <0x2b060000 0x1000>; | ||
67 | interrupts = <98>; | ||
68 | }; | ||
69 | |||
70 | gic: interrupt-controller@2c001000 { | ||
71 | compatible = "arm,cortex-a15-gic", "arm,cortex-a9-gic"; | ||
72 | #interrupt-cells = <3>; | ||
73 | #address-cells = <0>; | ||
74 | interrupt-controller; | ||
75 | reg = <0x2c001000 0x1000>, | ||
76 | <0x2c002000 0x100>; | ||
77 | }; | ||
78 | |||
79 | memory-controller@7ffd0000 { | ||
80 | compatible = "arm,pl354", "arm,primecell"; | ||
81 | reg = <0x7ffd0000 0x1000>; | ||
82 | interrupts = <0 86 4>, | ||
83 | <0 87 4>; | ||
84 | }; | ||
85 | |||
86 | dma@7ffb0000 { | ||
87 | compatible = "arm,pl330", "arm,primecell"; | ||
88 | reg = <0x7ffb0000 0x1000>; | ||
89 | interrupts = <0 92 4>, | ||
90 | <0 88 4>, | ||
91 | <0 89 4>, | ||
92 | <0 90 4>, | ||
93 | <0 91 4>; | ||
94 | }; | ||
95 | |||
96 | pmu { | ||
97 | compatible = "arm,cortex-a15-pmu", "arm,cortex-a9-pmu"; | ||
98 | interrupts = <0 68 4>, | ||
99 | <0 69 4>; | ||
100 | }; | ||
101 | |||
102 | motherboard { | ||
103 | ranges = <0 0 0x08000000 0x04000000>, | ||
104 | <1 0 0x14000000 0x04000000>, | ||
105 | <2 0 0x18000000 0x04000000>, | ||
106 | <3 0 0x1c000000 0x04000000>, | ||
107 | <4 0 0x0c000000 0x04000000>, | ||
108 | <5 0 0x10000000 0x04000000>; | ||
109 | |||
110 | interrupt-map-mask = <0 0 63>; | ||
111 | interrupt-map = <0 0 0 &gic 0 0 4>, | ||
112 | <0 0 1 &gic 0 1 4>, | ||
113 | <0 0 2 &gic 0 2 4>, | ||
114 | <0 0 3 &gic 0 3 4>, | ||
115 | <0 0 4 &gic 0 4 4>, | ||
116 | <0 0 5 &gic 0 5 4>, | ||
117 | <0 0 6 &gic 0 6 4>, | ||
118 | <0 0 7 &gic 0 7 4>, | ||
119 | <0 0 8 &gic 0 8 4>, | ||
120 | <0 0 9 &gic 0 9 4>, | ||
121 | <0 0 10 &gic 0 10 4>, | ||
122 | <0 0 11 &gic 0 11 4>, | ||
123 | <0 0 12 &gic 0 12 4>, | ||
124 | <0 0 13 &gic 0 13 4>, | ||
125 | <0 0 14 &gic 0 14 4>, | ||
126 | <0 0 15 &gic 0 15 4>, | ||
127 | <0 0 16 &gic 0 16 4>, | ||
128 | <0 0 17 &gic 0 17 4>, | ||
129 | <0 0 18 &gic 0 18 4>, | ||
130 | <0 0 19 &gic 0 19 4>, | ||
131 | <0 0 20 &gic 0 20 4>, | ||
132 | <0 0 21 &gic 0 21 4>, | ||
133 | <0 0 22 &gic 0 22 4>, | ||
134 | <0 0 23 &gic 0 23 4>, | ||
135 | <0 0 24 &gic 0 24 4>, | ||
136 | <0 0 25 &gic 0 25 4>, | ||
137 | <0 0 26 &gic 0 26 4>, | ||
138 | <0 0 27 &gic 0 27 4>, | ||
139 | <0 0 28 &gic 0 28 4>, | ||
140 | <0 0 29 &gic 0 29 4>, | ||
141 | <0 0 30 &gic 0 30 4>, | ||
142 | <0 0 31 &gic 0 31 4>, | ||
143 | <0 0 32 &gic 0 32 4>, | ||
144 | <0 0 33 &gic 0 33 4>, | ||
145 | <0 0 34 &gic 0 34 4>, | ||
146 | <0 0 35 &gic 0 35 4>, | ||
147 | <0 0 36 &gic 0 36 4>, | ||
148 | <0 0 37 &gic 0 37 4>, | ||
149 | <0 0 38 &gic 0 38 4>, | ||
150 | <0 0 39 &gic 0 39 4>, | ||
151 | <0 0 40 &gic 0 40 4>, | ||
152 | <0 0 41 &gic 0 41 4>, | ||
153 | <0 0 42 &gic 0 42 4>; | ||
154 | }; | ||
155 | }; | ||
156 | |||
157 | /include/ "vexpress-v2m-rs1.dtsi" | ||
diff --git a/arch/arm/boot/dts/vexpress-v2p-ca5s.dts b/arch/arm/boot/dts/vexpress-v2p-ca5s.dts new file mode 100644 index 000000000000..6905e66d4748 --- /dev/null +++ b/arch/arm/boot/dts/vexpress-v2p-ca5s.dts | |||
@@ -0,0 +1,162 @@ | |||
1 | /* | ||
2 | * ARM Ltd. Versatile Express | ||
3 | * | ||
4 | * CoreTile Express A5x2 | ||
5 | * Cortex-A5 MPCore (V2P-CA5s) | ||
6 | * | ||
7 | * HBI-0225B | ||
8 | */ | ||
9 | |||
10 | /dts-v1/; | ||
11 | |||
12 | / { | ||
13 | model = "V2P-CA5s"; | ||
14 | arm,hbi = <0x225>; | ||
15 | compatible = "arm,vexpress,v2p-ca5s", "arm,vexpress"; | ||
16 | interrupt-parent = <&gic>; | ||
17 | #address-cells = <1>; | ||
18 | #size-cells = <1>; | ||
19 | |||
20 | chosen { }; | ||
21 | |||
22 | aliases { | ||
23 | serial0 = &v2m_serial0; | ||
24 | serial1 = &v2m_serial1; | ||
25 | serial2 = &v2m_serial2; | ||
26 | serial3 = &v2m_serial3; | ||
27 | i2c0 = &v2m_i2c_dvi; | ||
28 | i2c1 = &v2m_i2c_pcie; | ||
29 | }; | ||
30 | |||
31 | cpus { | ||
32 | #address-cells = <1>; | ||
33 | #size-cells = <0>; | ||
34 | |||
35 | cpu@0 { | ||
36 | device_type = "cpu"; | ||
37 | compatible = "arm,cortex-a5"; | ||
38 | reg = <0>; | ||
39 | next-level-cache = <&L2>; | ||
40 | }; | ||
41 | |||
42 | cpu@1 { | ||
43 | device_type = "cpu"; | ||
44 | compatible = "arm,cortex-a5"; | ||
45 | reg = <1>; | ||
46 | next-level-cache = <&L2>; | ||
47 | }; | ||
48 | }; | ||
49 | |||
50 | memory@80000000 { | ||
51 | device_type = "memory"; | ||
52 | reg = <0x80000000 0x40000000>; | ||
53 | }; | ||
54 | |||
55 | hdlcd@2a110000 { | ||
56 | compatible = "arm,hdlcd"; | ||
57 | reg = <0x2a110000 0x1000>; | ||
58 | interrupts = <0 85 4>; | ||
59 | }; | ||
60 | |||
61 | memory-controller@2a150000 { | ||
62 | compatible = "arm,pl341", "arm,primecell"; | ||
63 | reg = <0x2a150000 0x1000>; | ||
64 | }; | ||
65 | |||
66 | memory-controller@2a190000 { | ||
67 | compatible = "arm,pl354", "arm,primecell"; | ||
68 | reg = <0x2a190000 0x1000>; | ||
69 | interrupts = <0 86 4>, | ||
70 | <0 87 4>; | ||
71 | }; | ||
72 | |||
73 | scu@2c000000 { | ||
74 | compatible = "arm,cortex-a5-scu"; | ||
75 | reg = <0x2c000000 0x58>; | ||
76 | }; | ||
77 | |||
78 | timer@2c000600 { | ||
79 | compatible = "arm,cortex-a5-twd-timer"; | ||
80 | reg = <0x2c000600 0x38>; | ||
81 | interrupts = <1 2 0x304>, | ||
82 | <1 3 0x304>; | ||
83 | }; | ||
84 | |||
85 | gic: interrupt-controller@2c001000 { | ||
86 | compatible = "arm,corex-a5-gic", "arm,cortex-a9-gic"; | ||
87 | #interrupt-cells = <3>; | ||
88 | #address-cells = <0>; | ||
89 | interrupt-controller; | ||
90 | reg = <0x2c001000 0x1000>, | ||
91 | <0x2c000100 0x100>; | ||
92 | }; | ||
93 | |||
94 | L2: cache-controller@2c0f0000 { | ||
95 | compatible = "arm,pl310-cache"; | ||
96 | reg = <0x2c0f0000 0x1000>; | ||
97 | interrupts = <0 84 4>; | ||
98 | cache-level = <2>; | ||
99 | }; | ||
100 | |||
101 | pmu { | ||
102 | compatible = "arm,cortex-a5-pmu", "arm,cortex-a9-pmu"; | ||
103 | interrupts = <0 68 4>, | ||
104 | <0 69 4>; | ||
105 | }; | ||
106 | |||
107 | motherboard { | ||
108 | ranges = <0 0 0x08000000 0x04000000>, | ||
109 | <1 0 0x14000000 0x04000000>, | ||
110 | <2 0 0x18000000 0x04000000>, | ||
111 | <3 0 0x1c000000 0x04000000>, | ||
112 | <4 0 0x0c000000 0x04000000>, | ||
113 | <5 0 0x10000000 0x04000000>; | ||
114 | |||
115 | interrupt-map-mask = <0 0 63>; | ||
116 | interrupt-map = <0 0 0 &gic 0 0 4>, | ||
117 | <0 0 1 &gic 0 1 4>, | ||
118 | <0 0 2 &gic 0 2 4>, | ||
119 | <0 0 3 &gic 0 3 4>, | ||
120 | <0 0 4 &gic 0 4 4>, | ||
121 | <0 0 5 &gic 0 5 4>, | ||
122 | <0 0 6 &gic 0 6 4>, | ||
123 | <0 0 7 &gic 0 7 4>, | ||
124 | <0 0 8 &gic 0 8 4>, | ||
125 | <0 0 9 &gic 0 9 4>, | ||
126 | <0 0 10 &gic 0 10 4>, | ||
127 | <0 0 11 &gic 0 11 4>, | ||
128 | <0 0 12 &gic 0 12 4>, | ||
129 | <0 0 13 &gic 0 13 4>, | ||
130 | <0 0 14 &gic 0 14 4>, | ||
131 | <0 0 15 &gic 0 15 4>, | ||
132 | <0 0 16 &gic 0 16 4>, | ||
133 | <0 0 17 &gic 0 17 4>, | ||
134 | <0 0 18 &gic 0 18 4>, | ||
135 | <0 0 19 &gic 0 19 4>, | ||
136 | <0 0 20 &gic 0 20 4>, | ||
137 | <0 0 21 &gic 0 21 4>, | ||
138 | <0 0 22 &gic 0 22 4>, | ||
139 | <0 0 23 &gic 0 23 4>, | ||
140 | <0 0 24 &gic 0 24 4>, | ||
141 | <0 0 25 &gic 0 25 4>, | ||
142 | <0 0 26 &gic 0 26 4>, | ||
143 | <0 0 27 &gic 0 27 4>, | ||
144 | <0 0 28 &gic 0 28 4>, | ||
145 | <0 0 29 &gic 0 29 4>, | ||
146 | <0 0 30 &gic 0 30 4>, | ||
147 | <0 0 31 &gic 0 31 4>, | ||
148 | <0 0 32 &gic 0 32 4>, | ||
149 | <0 0 33 &gic 0 33 4>, | ||
150 | <0 0 34 &gic 0 34 4>, | ||
151 | <0 0 35 &gic 0 35 4>, | ||
152 | <0 0 36 &gic 0 36 4>, | ||
153 | <0 0 37 &gic 0 37 4>, | ||
154 | <0 0 38 &gic 0 38 4>, | ||
155 | <0 0 39 &gic 0 39 4>, | ||
156 | <0 0 40 &gic 0 40 4>, | ||
157 | <0 0 41 &gic 0 41 4>, | ||
158 | <0 0 42 &gic 0 42 4>; | ||
159 | }; | ||
160 | }; | ||
161 | |||
162 | /include/ "vexpress-v2m-rs1.dtsi" | ||
diff --git a/arch/arm/boot/dts/vexpress-v2p-ca9.dts b/arch/arm/boot/dts/vexpress-v2p-ca9.dts new file mode 100644 index 000000000000..da778693be54 --- /dev/null +++ b/arch/arm/boot/dts/vexpress-v2p-ca9.dts | |||
@@ -0,0 +1,192 @@ | |||
1 | /* | ||
2 | * ARM Ltd. Versatile Express | ||
3 | * | ||
4 | * CoreTile Express A9x4 | ||
5 | * Cortex-A9 MPCore (V2P-CA9) | ||
6 | * | ||
7 | * HBI-0191B | ||
8 | */ | ||
9 | |||
10 | /dts-v1/; | ||
11 | |||
12 | / { | ||
13 | model = "V2P-CA9"; | ||
14 | arm,hbi = <0x191>; | ||
15 | compatible = "arm,vexpress,v2p-ca9", "arm,vexpress"; | ||
16 | interrupt-parent = <&gic>; | ||
17 | #address-cells = <1>; | ||
18 | #size-cells = <1>; | ||
19 | |||
20 | chosen { }; | ||
21 | |||
22 | aliases { | ||
23 | serial0 = &v2m_serial0; | ||
24 | serial1 = &v2m_serial1; | ||
25 | serial2 = &v2m_serial2; | ||
26 | serial3 = &v2m_serial3; | ||
27 | i2c0 = &v2m_i2c_dvi; | ||
28 | i2c1 = &v2m_i2c_pcie; | ||
29 | }; | ||
30 | |||
31 | cpus { | ||
32 | #address-cells = <1>; | ||
33 | #size-cells = <0>; | ||
34 | |||
35 | cpu@0 { | ||
36 | device_type = "cpu"; | ||
37 | compatible = "arm,cortex-a9"; | ||
38 | reg = <0>; | ||
39 | next-level-cache = <&L2>; | ||
40 | }; | ||
41 | |||
42 | cpu@1 { | ||
43 | device_type = "cpu"; | ||
44 | compatible = "arm,cortex-a9"; | ||
45 | reg = <1>; | ||
46 | next-level-cache = <&L2>; | ||
47 | }; | ||
48 | |||
49 | cpu@2 { | ||
50 | device_type = "cpu"; | ||
51 | compatible = "arm,cortex-a9"; | ||
52 | reg = <2>; | ||
53 | next-level-cache = <&L2>; | ||
54 | }; | ||
55 | |||
56 | cpu@3 { | ||
57 | device_type = "cpu"; | ||
58 | compatible = "arm,cortex-a9"; | ||
59 | reg = <3>; | ||
60 | next-level-cache = <&L2>; | ||
61 | }; | ||
62 | }; | ||
63 | |||
64 | memory@60000000 { | ||
65 | device_type = "memory"; | ||
66 | reg = <0x60000000 0x40000000>; | ||
67 | }; | ||
68 | |||
69 | clcd@10020000 { | ||
70 | compatible = "arm,pl111", "arm,primecell"; | ||
71 | reg = <0x10020000 0x1000>; | ||
72 | interrupts = <0 44 4>; | ||
73 | }; | ||
74 | |||
75 | memory-controller@100e0000 { | ||
76 | compatible = "arm,pl341", "arm,primecell"; | ||
77 | reg = <0x100e0000 0x1000>; | ||
78 | }; | ||
79 | |||
80 | memory-controller@100e1000 { | ||
81 | compatible = "arm,pl354", "arm,primecell"; | ||
82 | reg = <0x100e1000 0x1000>; | ||
83 | interrupts = <0 45 4>, | ||
84 | <0 46 4>; | ||
85 | }; | ||
86 | |||
87 | timer@100e4000 { | ||
88 | compatible = "arm,sp804", "arm,primecell"; | ||
89 | reg = <0x100e4000 0x1000>; | ||
90 | interrupts = <0 48 4>, | ||
91 | <0 49 4>; | ||
92 | }; | ||
93 | |||
94 | watchdog@100e5000 { | ||
95 | compatible = "arm,sp805", "arm,primecell"; | ||
96 | reg = <0x100e5000 0x1000>; | ||
97 | interrupts = <0 51 4>; | ||
98 | }; | ||
99 | |||
100 | scu@1e000000 { | ||
101 | compatible = "arm,cortex-a9-scu"; | ||
102 | reg = <0x1e000000 0x58>; | ||
103 | }; | ||
104 | |||
105 | timer@1e000600 { | ||
106 | compatible = "arm,cortex-a9-twd-timer"; | ||
107 | reg = <0x1e000600 0x20>; | ||
108 | interrupts = <1 2 0xf04>, | ||
109 | <1 3 0xf04>; | ||
110 | }; | ||
111 | |||
112 | gic: interrupt-controller@1e001000 { | ||
113 | compatible = "arm,cortex-a9-gic"; | ||
114 | #interrupt-cells = <3>; | ||
115 | #address-cells = <0>; | ||
116 | interrupt-controller; | ||
117 | reg = <0x1e001000 0x1000>, | ||
118 | <0x1e000100 0x100>; | ||
119 | }; | ||
120 | |||
121 | L2: cache-controller@1e00a000 { | ||
122 | compatible = "arm,pl310-cache"; | ||
123 | reg = <0x1e00a000 0x1000>; | ||
124 | interrupts = <0 43 4>; | ||
125 | cache-level = <2>; | ||
126 | arm,data-latency = <1 1 1>; | ||
127 | arm,tag-latency = <1 1 1>; | ||
128 | }; | ||
129 | |||
130 | pmu { | ||
131 | compatible = "arm,cortex-a9-pmu"; | ||
132 | interrupts = <0 60 4>, | ||
133 | <0 61 4>, | ||
134 | <0 62 4>, | ||
135 | <0 63 4>; | ||
136 | }; | ||
137 | |||
138 | motherboard { | ||
139 | ranges = <0 0 0x40000000 0x04000000>, | ||
140 | <1 0 0x44000000 0x04000000>, | ||
141 | <2 0 0x48000000 0x04000000>, | ||
142 | <3 0 0x4c000000 0x04000000>, | ||
143 | <7 0 0x10000000 0x00020000>; | ||
144 | |||
145 | interrupt-map-mask = <0 0 63>; | ||
146 | interrupt-map = <0 0 0 &gic 0 0 4>, | ||
147 | <0 0 1 &gic 0 1 4>, | ||
148 | <0 0 2 &gic 0 2 4>, | ||
149 | <0 0 3 &gic 0 3 4>, | ||
150 | <0 0 4 &gic 0 4 4>, | ||
151 | <0 0 5 &gic 0 5 4>, | ||
152 | <0 0 6 &gic 0 6 4>, | ||
153 | <0 0 7 &gic 0 7 4>, | ||
154 | <0 0 8 &gic 0 8 4>, | ||
155 | <0 0 9 &gic 0 9 4>, | ||
156 | <0 0 10 &gic 0 10 4>, | ||
157 | <0 0 11 &gic 0 11 4>, | ||
158 | <0 0 12 &gic 0 12 4>, | ||
159 | <0 0 13 &gic 0 13 4>, | ||
160 | <0 0 14 &gic 0 14 4>, | ||
161 | <0 0 15 &gic 0 15 4>, | ||
162 | <0 0 16 &gic 0 16 4>, | ||
163 | <0 0 17 &gic 0 17 4>, | ||
164 | <0 0 18 &gic 0 18 4>, | ||
165 | <0 0 19 &gic 0 19 4>, | ||
166 | <0 0 20 &gic 0 20 4>, | ||
167 | <0 0 21 &gic 0 21 4>, | ||
168 | <0 0 22 &gic 0 22 4>, | ||
169 | <0 0 23 &gic 0 23 4>, | ||
170 | <0 0 24 &gic 0 24 4>, | ||
171 | <0 0 25 &gic 0 25 4>, | ||
172 | <0 0 26 &gic 0 26 4>, | ||
173 | <0 0 27 &gic 0 27 4>, | ||
174 | <0 0 28 &gic 0 28 4>, | ||
175 | <0 0 29 &gic 0 29 4>, | ||
176 | <0 0 30 &gic 0 30 4>, | ||
177 | <0 0 31 &gic 0 31 4>, | ||
178 | <0 0 32 &gic 0 32 4>, | ||
179 | <0 0 33 &gic 0 33 4>, | ||
180 | <0 0 34 &gic 0 34 4>, | ||
181 | <0 0 35 &gic 0 35 4>, | ||
182 | <0 0 36 &gic 0 36 4>, | ||
183 | <0 0 37 &gic 0 37 4>, | ||
184 | <0 0 38 &gic 0 38 4>, | ||
185 | <0 0 39 &gic 0 39 4>, | ||
186 | <0 0 40 &gic 0 40 4>, | ||
187 | <0 0 41 &gic 0 41 4>, | ||
188 | <0 0 42 &gic 0 42 4>; | ||
189 | }; | ||
190 | }; | ||
191 | |||
192 | /include/ "vexpress-v2m.dtsi" | ||
diff --git a/arch/arm/mach-at91/Makefile b/arch/arm/mach-at91/Makefile index 1b6518518d99..8512e53bed93 100644 --- a/arch/arm/mach-at91/Makefile +++ b/arch/arm/mach-at91/Makefile | |||
@@ -20,7 +20,7 @@ obj-$(CONFIG_ARCH_AT91SAM9263) += at91sam9263.o at91sam926x_time.o at91sam9263_d | |||
20 | obj-$(CONFIG_ARCH_AT91SAM9RL) += at91sam9rl.o at91sam926x_time.o at91sam9rl_devices.o sam9_smc.o | 20 | obj-$(CONFIG_ARCH_AT91SAM9RL) += at91sam9rl.o at91sam926x_time.o at91sam9rl_devices.o sam9_smc.o |
21 | obj-$(CONFIG_ARCH_AT91SAM9G20) += at91sam9260.o at91sam926x_time.o at91sam9260_devices.o sam9_smc.o | 21 | obj-$(CONFIG_ARCH_AT91SAM9G20) += at91sam9260.o at91sam926x_time.o at91sam9260_devices.o sam9_smc.o |
22 | obj-$(CONFIG_ARCH_AT91SAM9G45) += at91sam9g45.o at91sam926x_time.o at91sam9g45_devices.o sam9_smc.o | 22 | obj-$(CONFIG_ARCH_AT91SAM9G45) += at91sam9g45.o at91sam926x_time.o at91sam9g45_devices.o sam9_smc.o |
23 | obj-$(CONFIG_ARCH_AT91SAM9X5) += at91sam9x5.o at91sam926x_time.o | 23 | obj-$(CONFIG_ARCH_AT91SAM9X5) += at91sam9x5.o at91sam926x_time.o sam9_smc.o |
24 | obj-$(CONFIG_ARCH_AT91X40) += at91x40.o at91x40_time.o | 24 | obj-$(CONFIG_ARCH_AT91X40) += at91x40.o at91x40_time.o |
25 | 25 | ||
26 | # AT91RM9200 board-specific support | 26 | # AT91RM9200 board-specific support |
diff --git a/arch/arm/mach-at91/Makefile.boot b/arch/arm/mach-at91/Makefile.boot index 2fd051eb2449..0da66ca4a4f8 100644 --- a/arch/arm/mach-at91/Makefile.boot +++ b/arch/arm/mach-at91/Makefile.boot | |||
@@ -13,4 +13,10 @@ params_phys-y := 0x20000100 | |||
13 | initrd_phys-y := 0x20410000 | 13 | initrd_phys-y := 0x20410000 |
14 | endif | 14 | endif |
15 | 15 | ||
16 | dtb-$(CONFIG_MACH_AT91SAM_DT) += at91sam9m10g45ek.dtb usb_a9g20.dtb | 16 | # Keep dtb files sorted alphabetically for each SoC |
17 | # sam9g20 | ||
18 | dtb-$(CONFIG_MACH_AT91SAM_DT) += usb_a9g20.dtb | ||
19 | # sam9g45 | ||
20 | dtb-$(CONFIG_MACH_AT91SAM_DT) += at91sam9m10g45ek.dtb | ||
21 | # sam9x5 | ||
22 | dtb-$(CONFIG_MACH_AT91SAM_DT) += at91sam9g25ek.dtb | ||
diff --git a/arch/arm/mach-at91/at91rm9200.c b/arch/arm/mach-at91/at91rm9200.c index dd6e2de13420..0df1045311e4 100644 --- a/arch/arm/mach-at91/at91rm9200.c +++ b/arch/arm/mach-at91/at91rm9200.c | |||
@@ -295,7 +295,7 @@ static void at91rm9200_idle(void) | |||
295 | * Disable the processor clock. The processor will be automatically | 295 | * Disable the processor clock. The processor will be automatically |
296 | * re-enabled by an interrupt or by a reset. | 296 | * re-enabled by an interrupt or by a reset. |
297 | */ | 297 | */ |
298 | at91_sys_write(AT91_PMC_SCDR, AT91_PMC_PCK); | 298 | at91_pmc_write(AT91_PMC_SCDR, AT91_PMC_PCK); |
299 | } | 299 | } |
300 | 300 | ||
301 | static void at91rm9200_restart(char mode, const char *cmd) | 301 | static void at91rm9200_restart(char mode, const char *cmd) |
@@ -303,8 +303,8 @@ static void at91rm9200_restart(char mode, const char *cmd) | |||
303 | /* | 303 | /* |
304 | * Perform a hardware reset with the use of the Watchdog timer. | 304 | * Perform a hardware reset with the use of the Watchdog timer. |
305 | */ | 305 | */ |
306 | at91_sys_write(AT91_ST_WDMR, AT91_ST_RSTEN | AT91_ST_EXTEN | 1); | 306 | at91_st_write(AT91_ST_WDMR, AT91_ST_RSTEN | AT91_ST_EXTEN | 1); |
307 | at91_sys_write(AT91_ST_CR, AT91_ST_WDRST); | 307 | at91_st_write(AT91_ST_CR, AT91_ST_WDRST); |
308 | } | 308 | } |
309 | 309 | ||
310 | /* -------------------------------------------------------------------- | 310 | /* -------------------------------------------------------------------- |
@@ -319,6 +319,8 @@ static void __init at91rm9200_map_io(void) | |||
319 | 319 | ||
320 | static void __init at91rm9200_ioremap_registers(void) | 320 | static void __init at91rm9200_ioremap_registers(void) |
321 | { | 321 | { |
322 | at91rm9200_ioremap_st(AT91RM9200_BASE_ST); | ||
323 | at91_ioremap_ramc(0, AT91RM9200_BASE_MC, 256); | ||
322 | } | 324 | } |
323 | 325 | ||
324 | static void __init at91rm9200_initialize(void) | 326 | static void __init at91rm9200_initialize(void) |
diff --git a/arch/arm/mach-at91/at91rm9200_devices.c b/arch/arm/mach-at91/at91rm9200_devices.c index 97676bdae998..99ce5c955e39 100644 --- a/arch/arm/mach-at91/at91rm9200_devices.c +++ b/arch/arm/mach-at91/at91rm9200_devices.c | |||
@@ -21,6 +21,7 @@ | |||
21 | #include <mach/board.h> | 21 | #include <mach/board.h> |
22 | #include <mach/at91rm9200.h> | 22 | #include <mach/at91rm9200.h> |
23 | #include <mach/at91rm9200_mc.h> | 23 | #include <mach/at91rm9200_mc.h> |
24 | #include <mach/at91_ramc.h> | ||
24 | 25 | ||
25 | #include "generic.h" | 26 | #include "generic.h" |
26 | 27 | ||
@@ -241,15 +242,15 @@ void __init at91_add_device_cf(struct at91_cf_data *data) | |||
241 | data->chipselect = 4; /* can only use EBI ChipSelect 4 */ | 242 | data->chipselect = 4; /* can only use EBI ChipSelect 4 */ |
242 | 243 | ||
243 | /* CF takes over CS4, CS5, CS6 */ | 244 | /* CF takes over CS4, CS5, CS6 */ |
244 | csa = at91_sys_read(AT91_EBI_CSA); | 245 | csa = at91_ramc_read(0, AT91_EBI_CSA); |
245 | at91_sys_write(AT91_EBI_CSA, csa | AT91_EBI_CS4A_SMC_COMPACTFLASH); | 246 | at91_ramc_write(0, AT91_EBI_CSA, csa | AT91_EBI_CS4A_SMC_COMPACTFLASH); |
246 | 247 | ||
247 | /* | 248 | /* |
248 | * Static memory controller timing adjustments. | 249 | * Static memory controller timing adjustments. |
249 | * REVISIT: these timings are in terms of MCK cycles, so | 250 | * REVISIT: these timings are in terms of MCK cycles, so |
250 | * when MCK changes (cpufreq etc) so must these values... | 251 | * when MCK changes (cpufreq etc) so must these values... |
251 | */ | 252 | */ |
252 | at91_sys_write(AT91_SMC_CSR(4), | 253 | at91_ramc_write(0, AT91_SMC_CSR(4), |
253 | AT91_SMC_ACSS_STD | 254 | AT91_SMC_ACSS_STD |
254 | | AT91_SMC_DBW_16 | 255 | | AT91_SMC_DBW_16 |
255 | | AT91_SMC_BAT | 256 | | AT91_SMC_BAT |
@@ -407,11 +408,11 @@ void __init at91_add_device_nand(struct atmel_nand_data *data) | |||
407 | return; | 408 | return; |
408 | 409 | ||
409 | /* enable the address range of CS3 */ | 410 | /* enable the address range of CS3 */ |
410 | csa = at91_sys_read(AT91_EBI_CSA); | 411 | csa = at91_ramc_read(0, AT91_EBI_CSA); |
411 | at91_sys_write(AT91_EBI_CSA, csa | AT91_EBI_CS3A_SMC_SMARTMEDIA); | 412 | at91_ramc_write(0, AT91_EBI_CSA, csa | AT91_EBI_CS3A_SMC_SMARTMEDIA); |
412 | 413 | ||
413 | /* set the bus interface characteristics */ | 414 | /* set the bus interface characteristics */ |
414 | at91_sys_write(AT91_SMC_CSR(3), AT91_SMC_ACSS_STD | AT91_SMC_DBW_8 | AT91_SMC_WSEN | 415 | at91_ramc_write(0, AT91_SMC_CSR(3), AT91_SMC_ACSS_STD | AT91_SMC_DBW_8 | AT91_SMC_WSEN |
415 | | AT91_SMC_NWS_(5) | 416 | | AT91_SMC_NWS_(5) |
416 | | AT91_SMC_TDF_(1) | 417 | | AT91_SMC_TDF_(1) |
417 | | AT91_SMC_RWSETUP_(0) /* tDS Data Set up Time 30 - ns */ | 418 | | AT91_SMC_RWSETUP_(0) /* tDS Data Set up Time 30 - ns */ |
@@ -1114,7 +1115,6 @@ static inline void configure_usart3_pins(unsigned pins) | |||
1114 | } | 1115 | } |
1115 | 1116 | ||
1116 | static struct platform_device *__initdata at91_uarts[ATMEL_MAX_UART]; /* the UARTs to use */ | 1117 | static struct platform_device *__initdata at91_uarts[ATMEL_MAX_UART]; /* the UARTs to use */ |
1117 | struct platform_device *atmel_default_console_device; /* the serial console device */ | ||
1118 | 1118 | ||
1119 | void __init at91_register_uart(unsigned id, unsigned portnr, unsigned pins) | 1119 | void __init at91_register_uart(unsigned id, unsigned portnr, unsigned pins) |
1120 | { | 1120 | { |
diff --git a/arch/arm/mach-at91/at91rm9200_time.c b/arch/arm/mach-at91/at91rm9200_time.c index a028cdf8f974..dd7f782b0b91 100644 --- a/arch/arm/mach-at91/at91rm9200_time.c +++ b/arch/arm/mach-at91/at91rm9200_time.c | |||
@@ -43,9 +43,9 @@ static inline unsigned long read_CRTR(void) | |||
43 | { | 43 | { |
44 | unsigned long x1, x2; | 44 | unsigned long x1, x2; |
45 | 45 | ||
46 | x1 = at91_sys_read(AT91_ST_CRTR); | 46 | x1 = at91_st_read(AT91_ST_CRTR); |
47 | do { | 47 | do { |
48 | x2 = at91_sys_read(AT91_ST_CRTR); | 48 | x2 = at91_st_read(AT91_ST_CRTR); |
49 | if (x1 == x2) | 49 | if (x1 == x2) |
50 | break; | 50 | break; |
51 | x1 = x2; | 51 | x1 = x2; |
@@ -58,7 +58,7 @@ static inline unsigned long read_CRTR(void) | |||
58 | */ | 58 | */ |
59 | static irqreturn_t at91rm9200_timer_interrupt(int irq, void *dev_id) | 59 | static irqreturn_t at91rm9200_timer_interrupt(int irq, void *dev_id) |
60 | { | 60 | { |
61 | u32 sr = at91_sys_read(AT91_ST_SR) & irqmask; | 61 | u32 sr = at91_st_read(AT91_ST_SR) & irqmask; |
62 | 62 | ||
63 | /* | 63 | /* |
64 | * irqs should be disabled here, but as the irq is shared they are only | 64 | * irqs should be disabled here, but as the irq is shared they are only |
@@ -110,22 +110,22 @@ static void | |||
110 | clkevt32k_mode(enum clock_event_mode mode, struct clock_event_device *dev) | 110 | clkevt32k_mode(enum clock_event_mode mode, struct clock_event_device *dev) |
111 | { | 111 | { |
112 | /* Disable and flush pending timer interrupts */ | 112 | /* Disable and flush pending timer interrupts */ |
113 | at91_sys_write(AT91_ST_IDR, AT91_ST_PITS | AT91_ST_ALMS); | 113 | at91_st_write(AT91_ST_IDR, AT91_ST_PITS | AT91_ST_ALMS); |
114 | (void) at91_sys_read(AT91_ST_SR); | 114 | at91_st_read(AT91_ST_SR); |
115 | 115 | ||
116 | last_crtr = read_CRTR(); | 116 | last_crtr = read_CRTR(); |
117 | switch (mode) { | 117 | switch (mode) { |
118 | case CLOCK_EVT_MODE_PERIODIC: | 118 | case CLOCK_EVT_MODE_PERIODIC: |
119 | /* PIT for periodic irqs; fixed rate of 1/HZ */ | 119 | /* PIT for periodic irqs; fixed rate of 1/HZ */ |
120 | irqmask = AT91_ST_PITS; | 120 | irqmask = AT91_ST_PITS; |
121 | at91_sys_write(AT91_ST_PIMR, RM9200_TIMER_LATCH); | 121 | at91_st_write(AT91_ST_PIMR, RM9200_TIMER_LATCH); |
122 | break; | 122 | break; |
123 | case CLOCK_EVT_MODE_ONESHOT: | 123 | case CLOCK_EVT_MODE_ONESHOT: |
124 | /* ALM for oneshot irqs, set by next_event() | 124 | /* ALM for oneshot irqs, set by next_event() |
125 | * before 32 seconds have passed | 125 | * before 32 seconds have passed |
126 | */ | 126 | */ |
127 | irqmask = AT91_ST_ALMS; | 127 | irqmask = AT91_ST_ALMS; |
128 | at91_sys_write(AT91_ST_RTAR, last_crtr); | 128 | at91_st_write(AT91_ST_RTAR, last_crtr); |
129 | break; | 129 | break; |
130 | case CLOCK_EVT_MODE_SHUTDOWN: | 130 | case CLOCK_EVT_MODE_SHUTDOWN: |
131 | case CLOCK_EVT_MODE_UNUSED: | 131 | case CLOCK_EVT_MODE_UNUSED: |
@@ -133,7 +133,7 @@ clkevt32k_mode(enum clock_event_mode mode, struct clock_event_device *dev) | |||
133 | irqmask = 0; | 133 | irqmask = 0; |
134 | break; | 134 | break; |
135 | } | 135 | } |
136 | at91_sys_write(AT91_ST_IER, irqmask); | 136 | at91_st_write(AT91_ST_IER, irqmask); |
137 | } | 137 | } |
138 | 138 | ||
139 | static int | 139 | static int |
@@ -156,12 +156,12 @@ clkevt32k_next_event(unsigned long delta, struct clock_event_device *dev) | |||
156 | alm = read_CRTR(); | 156 | alm = read_CRTR(); |
157 | 157 | ||
158 | /* Cancel any pending alarm; flush any pending IRQ */ | 158 | /* Cancel any pending alarm; flush any pending IRQ */ |
159 | at91_sys_write(AT91_ST_RTAR, alm); | 159 | at91_st_write(AT91_ST_RTAR, alm); |
160 | (void) at91_sys_read(AT91_ST_SR); | 160 | at91_st_read(AT91_ST_SR); |
161 | 161 | ||
162 | /* Schedule alarm by writing RTAR. */ | 162 | /* Schedule alarm by writing RTAR. */ |
163 | alm += delta; | 163 | alm += delta; |
164 | at91_sys_write(AT91_ST_RTAR, alm); | 164 | at91_st_write(AT91_ST_RTAR, alm); |
165 | 165 | ||
166 | return status; | 166 | return status; |
167 | } | 167 | } |
@@ -175,15 +175,24 @@ static struct clock_event_device clkevt = { | |||
175 | .set_mode = clkevt32k_mode, | 175 | .set_mode = clkevt32k_mode, |
176 | }; | 176 | }; |
177 | 177 | ||
178 | void __iomem *at91_st_base; | ||
179 | |||
180 | void __init at91rm9200_ioremap_st(u32 addr) | ||
181 | { | ||
182 | at91_st_base = ioremap(addr, 256); | ||
183 | if (!at91_st_base) | ||
184 | panic("Impossible to ioremap ST\n"); | ||
185 | } | ||
186 | |||
178 | /* | 187 | /* |
179 | * ST (system timer) module supports both clockevents and clocksource. | 188 | * ST (system timer) module supports both clockevents and clocksource. |
180 | */ | 189 | */ |
181 | void __init at91rm9200_timer_init(void) | 190 | void __init at91rm9200_timer_init(void) |
182 | { | 191 | { |
183 | /* Disable all timer interrupts, and clear any pending ones */ | 192 | /* Disable all timer interrupts, and clear any pending ones */ |
184 | at91_sys_write(AT91_ST_IDR, | 193 | at91_st_write(AT91_ST_IDR, |
185 | AT91_ST_PITS | AT91_ST_WDOVF | AT91_ST_RTTINC | AT91_ST_ALMS); | 194 | AT91_ST_PITS | AT91_ST_WDOVF | AT91_ST_RTTINC | AT91_ST_ALMS); |
186 | (void) at91_sys_read(AT91_ST_SR); | 195 | at91_st_read(AT91_ST_SR); |
187 | 196 | ||
188 | /* Make IRQs happen for the system timer */ | 197 | /* Make IRQs happen for the system timer */ |
189 | setup_irq(AT91_ID_SYS, &at91rm9200_timer_irq); | 198 | setup_irq(AT91_ID_SYS, &at91rm9200_timer_irq); |
@@ -192,7 +201,7 @@ void __init at91rm9200_timer_init(void) | |||
192 | * directly for the clocksource and all clockevents, after adjusting | 201 | * directly for the clocksource and all clockevents, after adjusting |
193 | * its prescaler from the 1 Hz default. | 202 | * its prescaler from the 1 Hz default. |
194 | */ | 203 | */ |
195 | at91_sys_write(AT91_ST_RTMR, 1); | 204 | at91_st_write(AT91_ST_RTMR, 1); |
196 | 205 | ||
197 | /* Setup timer clockevent, with minimum of two ticks (important!!) */ | 206 | /* Setup timer clockevent, with minimum of two ticks (important!!) */ |
198 | clkevt.mult = div_sc(AT91_SLOW_CLOCK, NSEC_PER_SEC, clkevt.shift); | 207 | clkevt.mult = div_sc(AT91_SLOW_CLOCK, NSEC_PER_SEC, clkevt.shift); |
diff --git a/arch/arm/mach-at91/at91sam9260.c b/arch/arm/mach-at91/at91sam9260.c index 9ac8c6fe3363..14b5a9c9a514 100644 --- a/arch/arm/mach-at91/at91sam9260.c +++ b/arch/arm/mach-at91/at91sam9260.c | |||
@@ -209,6 +209,13 @@ static struct clk_lookup periph_clocks_lookups[] = { | |||
209 | CLKDEV_CON_DEV_ID("usart", "fffd0000.serial", &usart3_clk), | 209 | CLKDEV_CON_DEV_ID("usart", "fffd0000.serial", &usart3_clk), |
210 | CLKDEV_CON_DEV_ID("usart", "fffd4000.serial", &usart4_clk), | 210 | CLKDEV_CON_DEV_ID("usart", "fffd4000.serial", &usart4_clk), |
211 | CLKDEV_CON_DEV_ID("usart", "fffd8000.serial", &usart5_clk), | 211 | CLKDEV_CON_DEV_ID("usart", "fffd8000.serial", &usart5_clk), |
212 | /* more tc lookup table for DT entries */ | ||
213 | CLKDEV_CON_DEV_ID("t0_clk", "fffa0000.timer", &tc0_clk), | ||
214 | CLKDEV_CON_DEV_ID("t1_clk", "fffa0000.timer", &tc1_clk), | ||
215 | CLKDEV_CON_DEV_ID("t2_clk", "fffa0000.timer", &tc2_clk), | ||
216 | CLKDEV_CON_DEV_ID("t0_clk", "fffdc000.timer", &tc3_clk), | ||
217 | CLKDEV_CON_DEV_ID("t1_clk", "fffdc000.timer", &tc4_clk), | ||
218 | CLKDEV_CON_DEV_ID("t2_clk", "fffdc000.timer", &tc5_clk), | ||
212 | /* fake hclk clock */ | 219 | /* fake hclk clock */ |
213 | CLKDEV_CON_DEV_ID("hclk", "at91_ohci", &ohci_clk), | 220 | CLKDEV_CON_DEV_ID("hclk", "at91_ohci", &ohci_clk), |
214 | CLKDEV_CON_ID("pioA", &pioA_clk), | 221 | CLKDEV_CON_ID("pioA", &pioA_clk), |
@@ -310,34 +317,27 @@ static void __init at91sam9xe_map_io(void) | |||
310 | 317 | ||
311 | static void __init at91sam9260_map_io(void) | 318 | static void __init at91sam9260_map_io(void) |
312 | { | 319 | { |
313 | if (cpu_is_at91sam9xe()) { | 320 | if (cpu_is_at91sam9xe()) |
314 | at91sam9xe_map_io(); | 321 | at91sam9xe_map_io(); |
315 | } else if (cpu_is_at91sam9g20()) { | 322 | else if (cpu_is_at91sam9g20()) |
316 | at91_init_sram(0, AT91SAM9G20_SRAM0_BASE, AT91SAM9G20_SRAM0_SIZE); | 323 | at91_init_sram(0, AT91SAM9G20_SRAM_BASE, AT91SAM9G20_SRAM_SIZE); |
317 | at91_init_sram(1, AT91SAM9G20_SRAM1_BASE, AT91SAM9G20_SRAM1_SIZE); | 324 | else |
318 | } else { | 325 | at91_init_sram(0, AT91SAM9260_SRAM_BASE, AT91SAM9260_SRAM_SIZE); |
319 | at91_init_sram(0, AT91SAM9260_SRAM0_BASE, AT91SAM9260_SRAM0_SIZE); | ||
320 | at91_init_sram(1, AT91SAM9260_SRAM1_BASE, AT91SAM9260_SRAM1_SIZE); | ||
321 | } | ||
322 | } | 326 | } |
323 | 327 | ||
324 | static void __init at91sam9260_ioremap_registers(void) | 328 | static void __init at91sam9260_ioremap_registers(void) |
325 | { | 329 | { |
326 | at91_ioremap_shdwc(AT91SAM9260_BASE_SHDWC); | 330 | at91_ioremap_shdwc(AT91SAM9260_BASE_SHDWC); |
327 | at91_ioremap_rstc(AT91SAM9260_BASE_RSTC); | 331 | at91_ioremap_rstc(AT91SAM9260_BASE_RSTC); |
332 | at91_ioremap_ramc(0, AT91SAM9260_BASE_SDRAMC, 512); | ||
328 | at91sam926x_ioremap_pit(AT91SAM9260_BASE_PIT); | 333 | at91sam926x_ioremap_pit(AT91SAM9260_BASE_PIT); |
329 | at91sam9_ioremap_smc(0, AT91SAM9260_BASE_SMC); | 334 | at91sam9_ioremap_smc(0, AT91SAM9260_BASE_SMC); |
330 | } | 335 | at91_ioremap_matrix(AT91SAM9260_BASE_MATRIX); |
331 | |||
332 | static void at91sam9260_idle(void) | ||
333 | { | ||
334 | at91_sys_write(AT91_PMC_SCDR, AT91_PMC_PCK); | ||
335 | cpu_do_idle(); | ||
336 | } | 336 | } |
337 | 337 | ||
338 | static void __init at91sam9260_initialize(void) | 338 | static void __init at91sam9260_initialize(void) |
339 | { | 339 | { |
340 | arm_pm_idle = at91sam9260_idle; | 340 | arm_pm_idle = at91sam9_idle; |
341 | arm_pm_restart = at91sam9_alt_restart; | 341 | arm_pm_restart = at91sam9_alt_restart; |
342 | at91_extern_irq = (1 << AT91SAM9260_ID_IRQ0) | (1 << AT91SAM9260_ID_IRQ1) | 342 | at91_extern_irq = (1 << AT91SAM9260_ID_IRQ0) | (1 << AT91SAM9260_ID_IRQ1) |
343 | | (1 << AT91SAM9260_ID_IRQ2); | 343 | | (1 << AT91SAM9260_ID_IRQ2); |
diff --git a/arch/arm/mach-at91/at91sam9260_devices.c b/arch/arm/mach-at91/at91sam9260_devices.c index 5a24f0b4554d..7e5651ee9f85 100644 --- a/arch/arm/mach-at91/at91sam9260_devices.c +++ b/arch/arm/mach-at91/at91sam9260_devices.c | |||
@@ -21,6 +21,7 @@ | |||
21 | #include <mach/cpu.h> | 21 | #include <mach/cpu.h> |
22 | #include <mach/at91sam9260.h> | 22 | #include <mach/at91sam9260.h> |
23 | #include <mach/at91sam9260_matrix.h> | 23 | #include <mach/at91sam9260_matrix.h> |
24 | #include <mach/at91_matrix.h> | ||
24 | #include <mach/at91sam9_smc.h> | 25 | #include <mach/at91sam9_smc.h> |
25 | 26 | ||
26 | #include "generic.h" | 27 | #include "generic.h" |
@@ -422,8 +423,8 @@ void __init at91_add_device_nand(struct atmel_nand_data *data) | |||
422 | if (!data) | 423 | if (!data) |
423 | return; | 424 | return; |
424 | 425 | ||
425 | csa = at91_sys_read(AT91_MATRIX_EBICSA); | 426 | csa = at91_matrix_read(AT91_MATRIX_EBICSA); |
426 | at91_sys_write(AT91_MATRIX_EBICSA, csa | AT91_MATRIX_CS3A_SMC_SMARTMEDIA); | 427 | at91_matrix_write(AT91_MATRIX_EBICSA, csa | AT91_MATRIX_CS3A_SMC_SMARTMEDIA); |
427 | 428 | ||
428 | /* enable pin */ | 429 | /* enable pin */ |
429 | if (gpio_is_valid(data->enable_pin)) | 430 | if (gpio_is_valid(data->enable_pin)) |
@@ -641,7 +642,7 @@ void __init at91_add_device_spi(struct spi_board_info *devices, int nr_devices) | |||
641 | static struct resource tcb0_resources[] = { | 642 | static struct resource tcb0_resources[] = { |
642 | [0] = { | 643 | [0] = { |
643 | .start = AT91SAM9260_BASE_TCB0, | 644 | .start = AT91SAM9260_BASE_TCB0, |
644 | .end = AT91SAM9260_BASE_TCB0 + SZ_16K - 1, | 645 | .end = AT91SAM9260_BASE_TCB0 + SZ_256 - 1, |
645 | .flags = IORESOURCE_MEM, | 646 | .flags = IORESOURCE_MEM, |
646 | }, | 647 | }, |
647 | [1] = { | 648 | [1] = { |
@@ -671,7 +672,7 @@ static struct platform_device at91sam9260_tcb0_device = { | |||
671 | static struct resource tcb1_resources[] = { | 672 | static struct resource tcb1_resources[] = { |
672 | [0] = { | 673 | [0] = { |
673 | .start = AT91SAM9260_BASE_TCB1, | 674 | .start = AT91SAM9260_BASE_TCB1, |
674 | .end = AT91SAM9260_BASE_TCB1 + SZ_16K - 1, | 675 | .end = AT91SAM9260_BASE_TCB1 + SZ_256 - 1, |
675 | .flags = IORESOURCE_MEM, | 676 | .flags = IORESOURCE_MEM, |
676 | }, | 677 | }, |
677 | [1] = { | 678 | [1] = { |
@@ -698,8 +699,25 @@ static struct platform_device at91sam9260_tcb1_device = { | |||
698 | .num_resources = ARRAY_SIZE(tcb1_resources), | 699 | .num_resources = ARRAY_SIZE(tcb1_resources), |
699 | }; | 700 | }; |
700 | 701 | ||
702 | #if defined(CONFIG_OF) | ||
703 | static struct of_device_id tcb_ids[] = { | ||
704 | { .compatible = "atmel,at91rm9200-tcb" }, | ||
705 | { /*sentinel*/ } | ||
706 | }; | ||
707 | #endif | ||
708 | |||
701 | static void __init at91_add_device_tc(void) | 709 | static void __init at91_add_device_tc(void) |
702 | { | 710 | { |
711 | #if defined(CONFIG_OF) | ||
712 | struct device_node *np; | ||
713 | |||
714 | np = of_find_matching_node(NULL, tcb_ids); | ||
715 | if (np) { | ||
716 | of_node_put(np); | ||
717 | return; | ||
718 | } | ||
719 | #endif | ||
720 | |||
703 | platform_device_register(&at91sam9260_tcb0_device); | 721 | platform_device_register(&at91sam9260_tcb0_device); |
704 | platform_device_register(&at91sam9260_tcb1_device); | 722 | platform_device_register(&at91sam9260_tcb1_device); |
705 | } | 723 | } |
@@ -717,18 +735,42 @@ static struct resource rtt_resources[] = { | |||
717 | .start = AT91SAM9260_BASE_RTT, | 735 | .start = AT91SAM9260_BASE_RTT, |
718 | .end = AT91SAM9260_BASE_RTT + SZ_16 - 1, | 736 | .end = AT91SAM9260_BASE_RTT + SZ_16 - 1, |
719 | .flags = IORESOURCE_MEM, | 737 | .flags = IORESOURCE_MEM, |
720 | } | 738 | }, { |
739 | .flags = IORESOURCE_MEM, | ||
740 | }, | ||
721 | }; | 741 | }; |
722 | 742 | ||
723 | static struct platform_device at91sam9260_rtt_device = { | 743 | static struct platform_device at91sam9260_rtt_device = { |
724 | .name = "at91_rtt", | 744 | .name = "at91_rtt", |
725 | .id = 0, | 745 | .id = 0, |
726 | .resource = rtt_resources, | 746 | .resource = rtt_resources, |
727 | .num_resources = ARRAY_SIZE(rtt_resources), | ||
728 | }; | 747 | }; |
729 | 748 | ||
749 | |||
750 | #if IS_ENABLED(CONFIG_RTC_DRV_AT91SAM9) | ||
751 | static void __init at91_add_device_rtt_rtc(void) | ||
752 | { | ||
753 | at91sam9260_rtt_device.name = "rtc-at91sam9"; | ||
754 | /* | ||
755 | * The second resource is needed: | ||
756 | * GPBR will serve as the storage for RTC time offset | ||
757 | */ | ||
758 | at91sam9260_rtt_device.num_resources = 2; | ||
759 | rtt_resources[1].start = AT91SAM9260_BASE_GPBR + | ||
760 | 4 * CONFIG_RTC_DRV_AT91SAM9_GPBR; | ||
761 | rtt_resources[1].end = rtt_resources[1].start + 3; | ||
762 | } | ||
763 | #else | ||
764 | static void __init at91_add_device_rtt_rtc(void) | ||
765 | { | ||
766 | /* Only one resource is needed: RTT not used as RTC */ | ||
767 | at91sam9260_rtt_device.num_resources = 1; | ||
768 | } | ||
769 | #endif | ||
770 | |||
730 | static void __init at91_add_device_rtt(void) | 771 | static void __init at91_add_device_rtt(void) |
731 | { | 772 | { |
773 | at91_add_device_rtt_rtc(); | ||
732 | platform_device_register(&at91sam9260_rtt_device); | 774 | platform_device_register(&at91sam9260_rtt_device); |
733 | } | 775 | } |
734 | 776 | ||
@@ -1139,7 +1181,6 @@ static inline void configure_usart5_pins(void) | |||
1139 | } | 1181 | } |
1140 | 1182 | ||
1141 | static struct platform_device *__initdata at91_uarts[ATMEL_MAX_UART]; /* the UARTs to use */ | 1183 | static struct platform_device *__initdata at91_uarts[ATMEL_MAX_UART]; /* the UARTs to use */ |
1142 | struct platform_device *atmel_default_console_device; /* the serial console device */ | ||
1143 | 1184 | ||
1144 | void __init at91_register_uart(unsigned id, unsigned portnr, unsigned pins) | 1185 | void __init at91_register_uart(unsigned id, unsigned portnr, unsigned pins) |
1145 | { | 1186 | { |
@@ -1264,7 +1305,7 @@ void __init at91_add_device_cf(struct at91_cf_data *data) | |||
1264 | if (!data) | 1305 | if (!data) |
1265 | return; | 1306 | return; |
1266 | 1307 | ||
1267 | csa = at91_sys_read(AT91_MATRIX_EBICSA); | 1308 | csa = at91_matrix_read(AT91_MATRIX_EBICSA); |
1268 | 1309 | ||
1269 | switch (data->chipselect) { | 1310 | switch (data->chipselect) { |
1270 | case 4: | 1311 | case 4: |
@@ -1287,7 +1328,7 @@ void __init at91_add_device_cf(struct at91_cf_data *data) | |||
1287 | return; | 1328 | return; |
1288 | } | 1329 | } |
1289 | 1330 | ||
1290 | at91_sys_write(AT91_MATRIX_EBICSA, csa); | 1331 | at91_matrix_write(AT91_MATRIX_EBICSA, csa); |
1291 | 1332 | ||
1292 | if (gpio_is_valid(data->rst_pin)) { | 1333 | if (gpio_is_valid(data->rst_pin)) { |
1293 | at91_set_multi_drive(data->rst_pin, 0); | 1334 | at91_set_multi_drive(data->rst_pin, 0); |
diff --git a/arch/arm/mach-at91/at91sam9261.c b/arch/arm/mach-at91/at91sam9261.c index ab76868f01f5..684c5dfd92ac 100644 --- a/arch/arm/mach-at91/at91sam9261.c +++ b/arch/arm/mach-at91/at91sam9261.c | |||
@@ -283,19 +283,15 @@ static void __init at91sam9261_ioremap_registers(void) | |||
283 | { | 283 | { |
284 | at91_ioremap_shdwc(AT91SAM9261_BASE_SHDWC); | 284 | at91_ioremap_shdwc(AT91SAM9261_BASE_SHDWC); |
285 | at91_ioremap_rstc(AT91SAM9261_BASE_RSTC); | 285 | at91_ioremap_rstc(AT91SAM9261_BASE_RSTC); |
286 | at91_ioremap_ramc(0, AT91SAM9261_BASE_SDRAMC, 512); | ||
286 | at91sam926x_ioremap_pit(AT91SAM9261_BASE_PIT); | 287 | at91sam926x_ioremap_pit(AT91SAM9261_BASE_PIT); |
287 | at91sam9_ioremap_smc(0, AT91SAM9261_BASE_SMC); | 288 | at91sam9_ioremap_smc(0, AT91SAM9261_BASE_SMC); |
288 | } | 289 | at91_ioremap_matrix(AT91SAM9261_BASE_MATRIX); |
289 | |||
290 | static void at91sam9261_idle(void) | ||
291 | { | ||
292 | at91_sys_write(AT91_PMC_SCDR, AT91_PMC_PCK); | ||
293 | cpu_do_idle(); | ||
294 | } | 290 | } |
295 | 291 | ||
296 | static void __init at91sam9261_initialize(void) | 292 | static void __init at91sam9261_initialize(void) |
297 | { | 293 | { |
298 | arm_pm_idle = at91sam9261_idle; | 294 | arm_pm_idle = at91sam9_idle; |
299 | arm_pm_restart = at91sam9_alt_restart; | 295 | arm_pm_restart = at91sam9_alt_restart; |
300 | at91_extern_irq = (1 << AT91SAM9261_ID_IRQ0) | (1 << AT91SAM9261_ID_IRQ1) | 296 | at91_extern_irq = (1 << AT91SAM9261_ID_IRQ0) | (1 << AT91SAM9261_ID_IRQ1) |
301 | | (1 << AT91SAM9261_ID_IRQ2); | 297 | | (1 << AT91SAM9261_ID_IRQ2); |
diff --git a/arch/arm/mach-at91/at91sam9261_devices.c b/arch/arm/mach-at91/at91sam9261_devices.c index 1e28bed8f425..096da87dc00d 100644 --- a/arch/arm/mach-at91/at91sam9261_devices.c +++ b/arch/arm/mach-at91/at91sam9261_devices.c | |||
@@ -24,6 +24,7 @@ | |||
24 | #include <mach/board.h> | 24 | #include <mach/board.h> |
25 | #include <mach/at91sam9261.h> | 25 | #include <mach/at91sam9261.h> |
26 | #include <mach/at91sam9261_matrix.h> | 26 | #include <mach/at91sam9261_matrix.h> |
27 | #include <mach/at91_matrix.h> | ||
27 | #include <mach/at91sam9_smc.h> | 28 | #include <mach/at91sam9_smc.h> |
28 | 29 | ||
29 | #include "generic.h" | 30 | #include "generic.h" |
@@ -236,8 +237,8 @@ void __init at91_add_device_nand(struct atmel_nand_data *data) | |||
236 | if (!data) | 237 | if (!data) |
237 | return; | 238 | return; |
238 | 239 | ||
239 | csa = at91_sys_read(AT91_MATRIX_EBICSA); | 240 | csa = at91_matrix_read(AT91_MATRIX_EBICSA); |
240 | at91_sys_write(AT91_MATRIX_EBICSA, csa | AT91_MATRIX_CS3A_SMC_SMARTMEDIA); | 241 | at91_matrix_write(AT91_MATRIX_EBICSA, csa | AT91_MATRIX_CS3A_SMC_SMARTMEDIA); |
241 | 242 | ||
242 | /* enable pin */ | 243 | /* enable pin */ |
243 | if (gpio_is_valid(data->enable_pin)) | 244 | if (gpio_is_valid(data->enable_pin)) |
@@ -603,6 +604,8 @@ static struct resource rtt_resources[] = { | |||
603 | .start = AT91SAM9261_BASE_RTT, | 604 | .start = AT91SAM9261_BASE_RTT, |
604 | .end = AT91SAM9261_BASE_RTT + SZ_16 - 1, | 605 | .end = AT91SAM9261_BASE_RTT + SZ_16 - 1, |
605 | .flags = IORESOURCE_MEM, | 606 | .flags = IORESOURCE_MEM, |
607 | }, { | ||
608 | .flags = IORESOURCE_MEM, | ||
606 | } | 609 | } |
607 | }; | 610 | }; |
608 | 611 | ||
@@ -610,11 +613,32 @@ static struct platform_device at91sam9261_rtt_device = { | |||
610 | .name = "at91_rtt", | 613 | .name = "at91_rtt", |
611 | .id = 0, | 614 | .id = 0, |
612 | .resource = rtt_resources, | 615 | .resource = rtt_resources, |
613 | .num_resources = ARRAY_SIZE(rtt_resources), | ||
614 | }; | 616 | }; |
615 | 617 | ||
618 | #if IS_ENABLED(CONFIG_RTC_DRV_AT91SAM9) | ||
619 | static void __init at91_add_device_rtt_rtc(void) | ||
620 | { | ||
621 | at91sam9261_rtt_device.name = "rtc-at91sam9"; | ||
622 | /* | ||
623 | * The second resource is needed: | ||
624 | * GPBR will serve as the storage for RTC time offset | ||
625 | */ | ||
626 | at91sam9261_rtt_device.num_resources = 2; | ||
627 | rtt_resources[1].start = AT91SAM9261_BASE_GPBR + | ||
628 | 4 * CONFIG_RTC_DRV_AT91SAM9_GPBR; | ||
629 | rtt_resources[1].end = rtt_resources[1].start + 3; | ||
630 | } | ||
631 | #else | ||
632 | static void __init at91_add_device_rtt_rtc(void) | ||
633 | { | ||
634 | /* Only one resource is needed: RTT not used as RTC */ | ||
635 | at91sam9261_rtt_device.num_resources = 1; | ||
636 | } | ||
637 | #endif | ||
638 | |||
616 | static void __init at91_add_device_rtt(void) | 639 | static void __init at91_add_device_rtt(void) |
617 | { | 640 | { |
641 | at91_add_device_rtt_rtc(); | ||
618 | platform_device_register(&at91sam9261_rtt_device); | 642 | platform_device_register(&at91sam9261_rtt_device); |
619 | } | 643 | } |
620 | 644 | ||
@@ -991,7 +1015,6 @@ static inline void configure_usart2_pins(unsigned pins) | |||
991 | } | 1015 | } |
992 | 1016 | ||
993 | static struct platform_device *__initdata at91_uarts[ATMEL_MAX_UART]; /* the UARTs to use */ | 1017 | static struct platform_device *__initdata at91_uarts[ATMEL_MAX_UART]; /* the UARTs to use */ |
994 | struct platform_device *atmel_default_console_device; /* the serial console device */ | ||
995 | 1018 | ||
996 | void __init at91_register_uart(unsigned id, unsigned portnr, unsigned pins) | 1019 | void __init at91_register_uart(unsigned id, unsigned portnr, unsigned pins) |
997 | { | 1020 | { |
diff --git a/arch/arm/mach-at91/at91sam9263.c b/arch/arm/mach-at91/at91sam9263.c index 247ab633abcc..0b4fa5a7f685 100644 --- a/arch/arm/mach-at91/at91sam9263.c +++ b/arch/arm/mach-at91/at91sam9263.c | |||
@@ -303,20 +303,17 @@ static void __init at91sam9263_ioremap_registers(void) | |||
303 | { | 303 | { |
304 | at91_ioremap_shdwc(AT91SAM9263_BASE_SHDWC); | 304 | at91_ioremap_shdwc(AT91SAM9263_BASE_SHDWC); |
305 | at91_ioremap_rstc(AT91SAM9263_BASE_RSTC); | 305 | at91_ioremap_rstc(AT91SAM9263_BASE_RSTC); |
306 | at91_ioremap_ramc(0, AT91SAM9263_BASE_SDRAMC0, 512); | ||
307 | at91_ioremap_ramc(1, AT91SAM9263_BASE_SDRAMC1, 512); | ||
306 | at91sam926x_ioremap_pit(AT91SAM9263_BASE_PIT); | 308 | at91sam926x_ioremap_pit(AT91SAM9263_BASE_PIT); |
307 | at91sam9_ioremap_smc(0, AT91SAM9263_BASE_SMC0); | 309 | at91sam9_ioremap_smc(0, AT91SAM9263_BASE_SMC0); |
308 | at91sam9_ioremap_smc(1, AT91SAM9263_BASE_SMC1); | 310 | at91sam9_ioremap_smc(1, AT91SAM9263_BASE_SMC1); |
309 | } | 311 | at91_ioremap_matrix(AT91SAM9263_BASE_MATRIX); |
310 | |||
311 | static void at91sam9263_idle(void) | ||
312 | { | ||
313 | at91_sys_write(AT91_PMC_SCDR, AT91_PMC_PCK); | ||
314 | cpu_do_idle(); | ||
315 | } | 312 | } |
316 | 313 | ||
317 | static void __init at91sam9263_initialize(void) | 314 | static void __init at91sam9263_initialize(void) |
318 | { | 315 | { |
319 | arm_pm_idle = at91sam9263_idle; | 316 | arm_pm_idle = at91sam9_idle; |
320 | arm_pm_restart = at91sam9_alt_restart; | 317 | arm_pm_restart = at91sam9_alt_restart; |
321 | at91_extern_irq = (1 << AT91SAM9263_ID_IRQ0) | (1 << AT91SAM9263_ID_IRQ1); | 318 | at91_extern_irq = (1 << AT91SAM9263_ID_IRQ0) | (1 << AT91SAM9263_ID_IRQ1); |
322 | 319 | ||
diff --git a/arch/arm/mach-at91/at91sam9263_devices.c b/arch/arm/mach-at91/at91sam9263_devices.c index 70709ab0102a..53688c46f956 100644 --- a/arch/arm/mach-at91/at91sam9263_devices.c +++ b/arch/arm/mach-at91/at91sam9263_devices.c | |||
@@ -23,6 +23,7 @@ | |||
23 | #include <mach/board.h> | 23 | #include <mach/board.h> |
24 | #include <mach/at91sam9263.h> | 24 | #include <mach/at91sam9263.h> |
25 | #include <mach/at91sam9263_matrix.h> | 25 | #include <mach/at91sam9263_matrix.h> |
26 | #include <mach/at91_matrix.h> | ||
26 | #include <mach/at91sam9_smc.h> | 27 | #include <mach/at91sam9_smc.h> |
27 | 28 | ||
28 | #include "generic.h" | 29 | #include "generic.h" |
@@ -409,7 +410,7 @@ void __init at91_add_device_cf(struct at91_cf_data *data) | |||
409 | * we assume SMC timings are configured by board code, | 410 | * we assume SMC timings are configured by board code, |
410 | * except True IDE where timings are controlled by driver | 411 | * except True IDE where timings are controlled by driver |
411 | */ | 412 | */ |
412 | ebi0_csa = at91_sys_read(AT91_MATRIX_EBI0CSA); | 413 | ebi0_csa = at91_matrix_read(AT91_MATRIX_EBI0CSA); |
413 | switch (data->chipselect) { | 414 | switch (data->chipselect) { |
414 | case 4: | 415 | case 4: |
415 | at91_set_A_periph(AT91_PIN_PD6, 0); /* EBI0_NCS4/CFCS0 */ | 416 | at91_set_A_periph(AT91_PIN_PD6, 0); /* EBI0_NCS4/CFCS0 */ |
@@ -428,7 +429,7 @@ void __init at91_add_device_cf(struct at91_cf_data *data) | |||
428 | data->chipselect); | 429 | data->chipselect); |
429 | return; | 430 | return; |
430 | } | 431 | } |
431 | at91_sys_write(AT91_MATRIX_EBI0CSA, ebi0_csa); | 432 | at91_matrix_write(AT91_MATRIX_EBI0CSA, ebi0_csa); |
432 | 433 | ||
433 | if (gpio_is_valid(data->det_pin)) { | 434 | if (gpio_is_valid(data->det_pin)) { |
434 | at91_set_gpio_input(data->det_pin, 1); | 435 | at91_set_gpio_input(data->det_pin, 1); |
@@ -496,8 +497,8 @@ void __init at91_add_device_nand(struct atmel_nand_data *data) | |||
496 | if (!data) | 497 | if (!data) |
497 | return; | 498 | return; |
498 | 499 | ||
499 | csa = at91_sys_read(AT91_MATRIX_EBI0CSA); | 500 | csa = at91_matrix_read(AT91_MATRIX_EBI0CSA); |
500 | at91_sys_write(AT91_MATRIX_EBI0CSA, csa | AT91_MATRIX_EBI0_CS3A_SMC_SMARTMEDIA); | 501 | at91_matrix_write(AT91_MATRIX_EBI0CSA, csa | AT91_MATRIX_EBI0_CS3A_SMC_SMARTMEDIA); |
501 | 502 | ||
502 | /* enable pin */ | 503 | /* enable pin */ |
503 | if (gpio_is_valid(data->enable_pin)) | 504 | if (gpio_is_valid(data->enable_pin)) |
@@ -966,6 +967,8 @@ static struct resource rtt0_resources[] = { | |||
966 | .start = AT91SAM9263_BASE_RTT0, | 967 | .start = AT91SAM9263_BASE_RTT0, |
967 | .end = AT91SAM9263_BASE_RTT0 + SZ_16 - 1, | 968 | .end = AT91SAM9263_BASE_RTT0 + SZ_16 - 1, |
968 | .flags = IORESOURCE_MEM, | 969 | .flags = IORESOURCE_MEM, |
970 | }, { | ||
971 | .flags = IORESOURCE_MEM, | ||
969 | } | 972 | } |
970 | }; | 973 | }; |
971 | 974 | ||
@@ -973,7 +976,6 @@ static struct platform_device at91sam9263_rtt0_device = { | |||
973 | .name = "at91_rtt", | 976 | .name = "at91_rtt", |
974 | .id = 0, | 977 | .id = 0, |
975 | .resource = rtt0_resources, | 978 | .resource = rtt0_resources, |
976 | .num_resources = ARRAY_SIZE(rtt0_resources), | ||
977 | }; | 979 | }; |
978 | 980 | ||
979 | static struct resource rtt1_resources[] = { | 981 | static struct resource rtt1_resources[] = { |
@@ -981,6 +983,8 @@ static struct resource rtt1_resources[] = { | |||
981 | .start = AT91SAM9263_BASE_RTT1, | 983 | .start = AT91SAM9263_BASE_RTT1, |
982 | .end = AT91SAM9263_BASE_RTT1 + SZ_16 - 1, | 984 | .end = AT91SAM9263_BASE_RTT1 + SZ_16 - 1, |
983 | .flags = IORESOURCE_MEM, | 985 | .flags = IORESOURCE_MEM, |
986 | }, { | ||
987 | .flags = IORESOURCE_MEM, | ||
984 | } | 988 | } |
985 | }; | 989 | }; |
986 | 990 | ||
@@ -988,11 +992,53 @@ static struct platform_device at91sam9263_rtt1_device = { | |||
988 | .name = "at91_rtt", | 992 | .name = "at91_rtt", |
989 | .id = 1, | 993 | .id = 1, |
990 | .resource = rtt1_resources, | 994 | .resource = rtt1_resources, |
991 | .num_resources = ARRAY_SIZE(rtt1_resources), | ||
992 | }; | 995 | }; |
993 | 996 | ||
997 | #if IS_ENABLED(CONFIG_RTC_DRV_AT91SAM9) | ||
998 | static void __init at91_add_device_rtt_rtc(void) | ||
999 | { | ||
1000 | struct platform_device *pdev; | ||
1001 | struct resource *r; | ||
1002 | |||
1003 | switch (CONFIG_RTC_DRV_AT91SAM9_RTT) { | ||
1004 | case 0: | ||
1005 | /* | ||
1006 | * The second resource is needed only for the chosen RTT: | ||
1007 | * GPBR will serve as the storage for RTC time offset | ||
1008 | */ | ||
1009 | at91sam9263_rtt0_device.num_resources = 2; | ||
1010 | at91sam9263_rtt1_device.num_resources = 1; | ||
1011 | pdev = &at91sam9263_rtt0_device; | ||
1012 | r = rtt0_resources; | ||
1013 | break; | ||
1014 | case 1: | ||
1015 | at91sam9263_rtt0_device.num_resources = 1; | ||
1016 | at91sam9263_rtt1_device.num_resources = 2; | ||
1017 | pdev = &at91sam9263_rtt1_device; | ||
1018 | r = rtt1_resources; | ||
1019 | break; | ||
1020 | default: | ||
1021 | pr_err("at91sam9263: only supports 2 RTT (%d)\n", | ||
1022 | CONFIG_RTC_DRV_AT91SAM9_RTT); | ||
1023 | return; | ||
1024 | } | ||
1025 | |||
1026 | pdev->name = "rtc-at91sam9"; | ||
1027 | r[1].start = AT91SAM9263_BASE_GPBR + 4 * CONFIG_RTC_DRV_AT91SAM9_GPBR; | ||
1028 | r[1].end = r[1].start + 3; | ||
1029 | } | ||
1030 | #else | ||
1031 | static void __init at91_add_device_rtt_rtc(void) | ||
1032 | { | ||
1033 | /* Only one resource is needed: RTT not used as RTC */ | ||
1034 | at91sam9263_rtt0_device.num_resources = 1; | ||
1035 | at91sam9263_rtt1_device.num_resources = 1; | ||
1036 | } | ||
1037 | #endif | ||
1038 | |||
994 | static void __init at91_add_device_rtt(void) | 1039 | static void __init at91_add_device_rtt(void) |
995 | { | 1040 | { |
1041 | at91_add_device_rtt_rtc(); | ||
996 | platform_device_register(&at91sam9263_rtt0_device); | 1042 | platform_device_register(&at91sam9263_rtt0_device); |
997 | platform_device_register(&at91sam9263_rtt1_device); | 1043 | platform_device_register(&at91sam9263_rtt1_device); |
998 | } | 1044 | } |
@@ -1378,7 +1424,6 @@ static inline void configure_usart2_pins(unsigned pins) | |||
1378 | } | 1424 | } |
1379 | 1425 | ||
1380 | static struct platform_device *__initdata at91_uarts[ATMEL_MAX_UART]; /* the UARTs to use */ | 1426 | static struct platform_device *__initdata at91_uarts[ATMEL_MAX_UART]; /* the UARTs to use */ |
1381 | struct platform_device *atmel_default_console_device; /* the serial console device */ | ||
1382 | 1427 | ||
1383 | void __init at91_register_uart(unsigned id, unsigned portnr, unsigned pins) | 1428 | void __init at91_register_uart(unsigned id, unsigned portnr, unsigned pins) |
1384 | { | 1429 | { |
diff --git a/arch/arm/mach-at91/at91sam926x_time.c b/arch/arm/mach-at91/at91sam926x_time.c index d89ead740a99..a94758b42737 100644 --- a/arch/arm/mach-at91/at91sam926x_time.c +++ b/arch/arm/mach-at91/at91sam926x_time.c | |||
@@ -14,6 +14,9 @@ | |||
14 | #include <linux/kernel.h> | 14 | #include <linux/kernel.h> |
15 | #include <linux/clk.h> | 15 | #include <linux/clk.h> |
16 | #include <linux/clockchips.h> | 16 | #include <linux/clockchips.h> |
17 | #include <linux/of.h> | ||
18 | #include <linux/of_address.h> | ||
19 | #include <linux/of_irq.h> | ||
17 | 20 | ||
18 | #include <asm/mach/time.h> | 21 | #include <asm/mach/time.h> |
19 | 22 | ||
@@ -133,7 +136,8 @@ static irqreturn_t at91sam926x_pit_interrupt(int irq, void *dev_id) | |||
133 | static struct irqaction at91sam926x_pit_irq = { | 136 | static struct irqaction at91sam926x_pit_irq = { |
134 | .name = "at91_tick", | 137 | .name = "at91_tick", |
135 | .flags = IRQF_SHARED | IRQF_DISABLED | IRQF_TIMER | IRQF_IRQPOLL, | 138 | .flags = IRQF_SHARED | IRQF_DISABLED | IRQF_TIMER | IRQF_IRQPOLL, |
136 | .handler = at91sam926x_pit_interrupt | 139 | .handler = at91sam926x_pit_interrupt, |
140 | .irq = AT91_ID_SYS, | ||
137 | }; | 141 | }; |
138 | 142 | ||
139 | static void at91sam926x_pit_reset(void) | 143 | static void at91sam926x_pit_reset(void) |
@@ -149,6 +153,51 @@ static void at91sam926x_pit_reset(void) | |||
149 | pit_write(AT91_PIT_MR, (pit_cycle - 1) | AT91_PIT_PITEN); | 153 | pit_write(AT91_PIT_MR, (pit_cycle - 1) | AT91_PIT_PITEN); |
150 | } | 154 | } |
151 | 155 | ||
156 | #ifdef CONFIG_OF | ||
157 | static struct of_device_id pit_timer_ids[] = { | ||
158 | { .compatible = "atmel,at91sam9260-pit" }, | ||
159 | { /* sentinel */ } | ||
160 | }; | ||
161 | |||
162 | static int __init of_at91sam926x_pit_init(void) | ||
163 | { | ||
164 | struct device_node *np; | ||
165 | int ret; | ||
166 | |||
167 | np = of_find_matching_node(NULL, pit_timer_ids); | ||
168 | if (!np) | ||
169 | goto err; | ||
170 | |||
171 | pit_base_addr = of_iomap(np, 0); | ||
172 | if (!pit_base_addr) | ||
173 | goto node_err; | ||
174 | |||
175 | /* Get the interrupts property */ | ||
176 | ret = irq_of_parse_and_map(np, 0); | ||
177 | if (!ret) { | ||
178 | pr_crit("AT91: PIT: Unable to get IRQ from DT\n"); | ||
179 | goto ioremap_err; | ||
180 | } | ||
181 | at91sam926x_pit_irq.irq = ret; | ||
182 | |||
183 | of_node_put(np); | ||
184 | |||
185 | return 0; | ||
186 | |||
187 | ioremap_err: | ||
188 | iounmap(pit_base_addr); | ||
189 | node_err: | ||
190 | of_node_put(np); | ||
191 | err: | ||
192 | return -EINVAL; | ||
193 | } | ||
194 | #else | ||
195 | static int __init of_at91sam926x_pit_init(void) | ||
196 | { | ||
197 | return -EINVAL; | ||
198 | } | ||
199 | #endif | ||
200 | |||
152 | /* | 201 | /* |
153 | * Set up both clocksource and clockevent support. | 202 | * Set up both clocksource and clockevent support. |
154 | */ | 203 | */ |
@@ -156,6 +205,10 @@ static void __init at91sam926x_pit_init(void) | |||
156 | { | 205 | { |
157 | unsigned long pit_rate; | 206 | unsigned long pit_rate; |
158 | unsigned bits; | 207 | unsigned bits; |
208 | int ret; | ||
209 | |||
210 | /* For device tree enabled device: initialize here */ | ||
211 | of_at91sam926x_pit_init(); | ||
159 | 212 | ||
160 | /* | 213 | /* |
161 | * Use our actual MCK to figure out how many MCK/16 ticks per | 214 | * Use our actual MCK to figure out how many MCK/16 ticks per |
@@ -177,7 +230,9 @@ static void __init at91sam926x_pit_init(void) | |||
177 | clocksource_register_hz(&pit_clk, pit_rate); | 230 | clocksource_register_hz(&pit_clk, pit_rate); |
178 | 231 | ||
179 | /* Set up irq handler */ | 232 | /* Set up irq handler */ |
180 | setup_irq(AT91_ID_SYS, &at91sam926x_pit_irq); | 233 | ret = setup_irq(at91sam926x_pit_irq.irq, &at91sam926x_pit_irq); |
234 | if (ret) | ||
235 | pr_crit("AT91: PIT: Unable to setup IRQ\n"); | ||
181 | 236 | ||
182 | /* Set up and register clockevents */ | 237 | /* Set up and register clockevents */ |
183 | pit_clkevt.mult = div_sc(pit_rate, NSEC_PER_SEC, pit_clkevt.shift); | 238 | pit_clkevt.mult = div_sc(pit_rate, NSEC_PER_SEC, pit_clkevt.shift); |
@@ -193,6 +248,15 @@ static void at91sam926x_pit_suspend(void) | |||
193 | 248 | ||
194 | void __init at91sam926x_ioremap_pit(u32 addr) | 249 | void __init at91sam926x_ioremap_pit(u32 addr) |
195 | { | 250 | { |
251 | #if defined(CONFIG_OF) | ||
252 | struct device_node *np = | ||
253 | of_find_matching_node(NULL, pit_timer_ids); | ||
254 | |||
255 | if (np) { | ||
256 | of_node_put(np); | ||
257 | return; | ||
258 | } | ||
259 | #endif | ||
196 | pit_base_addr = ioremap(addr, 16); | 260 | pit_base_addr = ioremap(addr, 16); |
197 | 261 | ||
198 | if (!pit_base_addr) | 262 | if (!pit_base_addr) |
diff --git a/arch/arm/mach-at91/at91sam9_alt_reset.S b/arch/arm/mach-at91/at91sam9_alt_reset.S index 518e42377171..7af2e108b8a0 100644 --- a/arch/arm/mach-at91/at91sam9_alt_reset.S +++ b/arch/arm/mach-at91/at91sam9_alt_reset.S | |||
@@ -15,16 +15,17 @@ | |||
15 | 15 | ||
16 | #include <linux/linkage.h> | 16 | #include <linux/linkage.h> |
17 | #include <mach/hardware.h> | 17 | #include <mach/hardware.h> |
18 | #include <mach/at91sam9_sdramc.h> | 18 | #include <mach/at91_ramc.h> |
19 | #include <mach/at91_rstc.h> | 19 | #include <mach/at91_rstc.h> |
20 | 20 | ||
21 | .arm | 21 | .arm |
22 | 22 | ||
23 | .globl at91sam9_alt_restart | 23 | .globl at91sam9_alt_restart |
24 | 24 | ||
25 | at91sam9_alt_restart: ldr r0, .at91_va_base_sdramc @ preload constants | 25 | at91sam9_alt_restart: ldr r0, =at91_ramc_base @ preload constants |
26 | ldr r1, =at91_rstc_base | 26 | ldr r0, [r0] |
27 | ldr r1, [r1] | 27 | ldr r4, =at91_rstc_base |
28 | ldr r1, [r4] | ||
28 | 29 | ||
29 | mov r2, #1 | 30 | mov r2, #1 |
30 | mov r3, #AT91_SDRAMC_LPCB_POWER_DOWN | 31 | mov r3, #AT91_SDRAMC_LPCB_POWER_DOWN |
@@ -37,6 +38,3 @@ at91sam9_alt_restart: ldr r0, .at91_va_base_sdramc @ preload constants | |||
37 | str r4, [r1, #AT91_RSTC_CR] @ reset processor | 38 | str r4, [r1, #AT91_RSTC_CR] @ reset processor |
38 | 39 | ||
39 | b . | 40 | b . |
40 | |||
41 | .at91_va_base_sdramc: | ||
42 | .word AT91_VA_BASE_SYS + AT91_SDRAMC0 | ||
diff --git a/arch/arm/mach-at91/at91sam9g45.c b/arch/arm/mach-at91/at91sam9g45.c index 5b12192e52ec..0014573dfe17 100644 --- a/arch/arm/mach-at91/at91sam9g45.c +++ b/arch/arm/mach-at91/at91sam9g45.c | |||
@@ -229,6 +229,9 @@ static struct clk_lookup periph_clocks_lookups[] = { | |||
229 | CLKDEV_CON_DEV_ID("usart", "fff90000.serial", &usart1_clk), | 229 | CLKDEV_CON_DEV_ID("usart", "fff90000.serial", &usart1_clk), |
230 | CLKDEV_CON_DEV_ID("usart", "fff94000.serial", &usart2_clk), | 230 | CLKDEV_CON_DEV_ID("usart", "fff94000.serial", &usart2_clk), |
231 | CLKDEV_CON_DEV_ID("usart", "fff98000.serial", &usart3_clk), | 231 | CLKDEV_CON_DEV_ID("usart", "fff98000.serial", &usart3_clk), |
232 | /* more tc lookup table for DT entries */ | ||
233 | CLKDEV_CON_DEV_ID("t0_clk", "fff7c000.timer", &tcb0_clk), | ||
234 | CLKDEV_CON_DEV_ID("t0_clk", "fffd4000.timer", &tcb0_clk), | ||
232 | /* fake hclk clock */ | 235 | /* fake hclk clock */ |
233 | CLKDEV_CON_DEV_ID("hclk", "at91_ohci", &uhphs_clk), | 236 | CLKDEV_CON_DEV_ID("hclk", "at91_ohci", &uhphs_clk), |
234 | CLKDEV_CON_ID("pioA", &pioA_clk), | 237 | CLKDEV_CON_ID("pioA", &pioA_clk), |
@@ -317,12 +320,6 @@ static struct at91_gpio_bank at91sam9g45_gpio[] __initdata = { | |||
317 | } | 320 | } |
318 | }; | 321 | }; |
319 | 322 | ||
320 | static void at91sam9g45_idle(void) | ||
321 | { | ||
322 | at91_sys_write(AT91_PMC_SCDR, AT91_PMC_PCK); | ||
323 | cpu_do_idle(); | ||
324 | } | ||
325 | |||
326 | /* -------------------------------------------------------------------- | 323 | /* -------------------------------------------------------------------- |
327 | * AT91SAM9G45 processor initialization | 324 | * AT91SAM9G45 processor initialization |
328 | * -------------------------------------------------------------------- */ | 325 | * -------------------------------------------------------------------- */ |
@@ -337,13 +334,16 @@ static void __init at91sam9g45_ioremap_registers(void) | |||
337 | { | 334 | { |
338 | at91_ioremap_shdwc(AT91SAM9G45_BASE_SHDWC); | 335 | at91_ioremap_shdwc(AT91SAM9G45_BASE_SHDWC); |
339 | at91_ioremap_rstc(AT91SAM9G45_BASE_RSTC); | 336 | at91_ioremap_rstc(AT91SAM9G45_BASE_RSTC); |
337 | at91_ioremap_ramc(0, AT91SAM9G45_BASE_DDRSDRC1, 512); | ||
338 | at91_ioremap_ramc(1, AT91SAM9G45_BASE_DDRSDRC0, 512); | ||
340 | at91sam926x_ioremap_pit(AT91SAM9G45_BASE_PIT); | 339 | at91sam926x_ioremap_pit(AT91SAM9G45_BASE_PIT); |
341 | at91sam9_ioremap_smc(0, AT91SAM9G45_BASE_SMC); | 340 | at91sam9_ioremap_smc(0, AT91SAM9G45_BASE_SMC); |
341 | at91_ioremap_matrix(AT91SAM9G45_BASE_MATRIX); | ||
342 | } | 342 | } |
343 | 343 | ||
344 | static void __init at91sam9g45_initialize(void) | 344 | static void __init at91sam9g45_initialize(void) |
345 | { | 345 | { |
346 | arm_pm_idle = at91sam9g45_idle; | 346 | arm_pm_idle = at91sam9_idle; |
347 | arm_pm_restart = at91sam9g45_restart; | 347 | arm_pm_restart = at91sam9g45_restart; |
348 | at91_extern_irq = (1 << AT91SAM9G45_ID_IRQ0); | 348 | at91_extern_irq = (1 << AT91SAM9G45_ID_IRQ0); |
349 | 349 | ||
diff --git a/arch/arm/mach-at91/at91sam9g45_devices.c b/arch/arm/mach-at91/at91sam9g45_devices.c index bd4e68cd3e2f..4320b2096789 100644 --- a/arch/arm/mach-at91/at91sam9g45_devices.c +++ b/arch/arm/mach-at91/at91sam9g45_devices.c | |||
@@ -25,6 +25,7 @@ | |||
25 | #include <mach/board.h> | 25 | #include <mach/board.h> |
26 | #include <mach/at91sam9g45.h> | 26 | #include <mach/at91sam9g45.h> |
27 | #include <mach/at91sam9g45_matrix.h> | 27 | #include <mach/at91sam9g45_matrix.h> |
28 | #include <mach/at91_matrix.h> | ||
28 | #include <mach/at91sam9_smc.h> | 29 | #include <mach/at91sam9_smc.h> |
29 | #include <mach/at_hdmac.h> | 30 | #include <mach/at_hdmac.h> |
30 | #include <mach/atmel-mci.h> | 31 | #include <mach/atmel-mci.h> |
@@ -557,8 +558,8 @@ void __init at91_add_device_nand(struct atmel_nand_data *data) | |||
557 | if (!data) | 558 | if (!data) |
558 | return; | 559 | return; |
559 | 560 | ||
560 | csa = at91_sys_read(AT91_MATRIX_EBICSA); | 561 | csa = at91_matrix_read(AT91_MATRIX_EBICSA); |
561 | at91_sys_write(AT91_MATRIX_EBICSA, csa | AT91_MATRIX_EBI_CS3A_SMC_SMARTMEDIA); | 562 | at91_matrix_write(AT91_MATRIX_EBICSA, csa | AT91_MATRIX_EBI_CS3A_SMC_SMARTMEDIA); |
562 | 563 | ||
563 | /* enable pin */ | 564 | /* enable pin */ |
564 | if (gpio_is_valid(data->enable_pin)) | 565 | if (gpio_is_valid(data->enable_pin)) |
@@ -1051,7 +1052,7 @@ void __init at91_add_device_lcdc(struct atmel_lcdfb_info *data) {} | |||
1051 | static struct resource tcb0_resources[] = { | 1052 | static struct resource tcb0_resources[] = { |
1052 | [0] = { | 1053 | [0] = { |
1053 | .start = AT91SAM9G45_BASE_TCB0, | 1054 | .start = AT91SAM9G45_BASE_TCB0, |
1054 | .end = AT91SAM9G45_BASE_TCB0 + SZ_16K - 1, | 1055 | .end = AT91SAM9G45_BASE_TCB0 + SZ_256 - 1, |
1055 | .flags = IORESOURCE_MEM, | 1056 | .flags = IORESOURCE_MEM, |
1056 | }, | 1057 | }, |
1057 | [1] = { | 1058 | [1] = { |
@@ -1072,7 +1073,7 @@ static struct platform_device at91sam9g45_tcb0_device = { | |||
1072 | static struct resource tcb1_resources[] = { | 1073 | static struct resource tcb1_resources[] = { |
1073 | [0] = { | 1074 | [0] = { |
1074 | .start = AT91SAM9G45_BASE_TCB1, | 1075 | .start = AT91SAM9G45_BASE_TCB1, |
1075 | .end = AT91SAM9G45_BASE_TCB1 + SZ_16K - 1, | 1076 | .end = AT91SAM9G45_BASE_TCB1 + SZ_256 - 1, |
1076 | .flags = IORESOURCE_MEM, | 1077 | .flags = IORESOURCE_MEM, |
1077 | }, | 1078 | }, |
1078 | [1] = { | 1079 | [1] = { |
@@ -1089,8 +1090,25 @@ static struct platform_device at91sam9g45_tcb1_device = { | |||
1089 | .num_resources = ARRAY_SIZE(tcb1_resources), | 1090 | .num_resources = ARRAY_SIZE(tcb1_resources), |
1090 | }; | 1091 | }; |
1091 | 1092 | ||
1093 | #if defined(CONFIG_OF) | ||
1094 | static struct of_device_id tcb_ids[] = { | ||
1095 | { .compatible = "atmel,at91rm9200-tcb" }, | ||
1096 | { /*sentinel*/ } | ||
1097 | }; | ||
1098 | #endif | ||
1099 | |||
1092 | static void __init at91_add_device_tc(void) | 1100 | static void __init at91_add_device_tc(void) |
1093 | { | 1101 | { |
1102 | #if defined(CONFIG_OF) | ||
1103 | struct device_node *np; | ||
1104 | |||
1105 | np = of_find_matching_node(NULL, tcb_ids); | ||
1106 | if (np) { | ||
1107 | of_node_put(np); | ||
1108 | return; | ||
1109 | } | ||
1110 | #endif | ||
1111 | |||
1094 | platform_device_register(&at91sam9g45_tcb0_device); | 1112 | platform_device_register(&at91sam9g45_tcb0_device); |
1095 | platform_device_register(&at91sam9g45_tcb1_device); | 1113 | platform_device_register(&at91sam9g45_tcb1_device); |
1096 | } | 1114 | } |
@@ -1193,6 +1211,8 @@ static struct resource rtt_resources[] = { | |||
1193 | .start = AT91SAM9G45_BASE_RTT, | 1211 | .start = AT91SAM9G45_BASE_RTT, |
1194 | .end = AT91SAM9G45_BASE_RTT + SZ_16 - 1, | 1212 | .end = AT91SAM9G45_BASE_RTT + SZ_16 - 1, |
1195 | .flags = IORESOURCE_MEM, | 1213 | .flags = IORESOURCE_MEM, |
1214 | }, { | ||
1215 | .flags = IORESOURCE_MEM, | ||
1196 | } | 1216 | } |
1197 | }; | 1217 | }; |
1198 | 1218 | ||
@@ -1200,11 +1220,32 @@ static struct platform_device at91sam9g45_rtt_device = { | |||
1200 | .name = "at91_rtt", | 1220 | .name = "at91_rtt", |
1201 | .id = 0, | 1221 | .id = 0, |
1202 | .resource = rtt_resources, | 1222 | .resource = rtt_resources, |
1203 | .num_resources = ARRAY_SIZE(rtt_resources), | ||
1204 | }; | 1223 | }; |
1205 | 1224 | ||
1225 | #if IS_ENABLED(CONFIG_RTC_DRV_AT91SAM9) | ||
1226 | static void __init at91_add_device_rtt_rtc(void) | ||
1227 | { | ||
1228 | at91sam9g45_rtt_device.name = "rtc-at91sam9"; | ||
1229 | /* | ||
1230 | * The second resource is needed: | ||
1231 | * GPBR will serve as the storage for RTC time offset | ||
1232 | */ | ||
1233 | at91sam9g45_rtt_device.num_resources = 2; | ||
1234 | rtt_resources[1].start = AT91SAM9G45_BASE_GPBR + | ||
1235 | 4 * CONFIG_RTC_DRV_AT91SAM9_GPBR; | ||
1236 | rtt_resources[1].end = rtt_resources[1].start + 3; | ||
1237 | } | ||
1238 | #else | ||
1239 | static void __init at91_add_device_rtt_rtc(void) | ||
1240 | { | ||
1241 | /* Only one resource is needed: RTT not used as RTC */ | ||
1242 | at91sam9g45_rtt_device.num_resources = 1; | ||
1243 | } | ||
1244 | #endif | ||
1245 | |||
1206 | static void __init at91_add_device_rtt(void) | 1246 | static void __init at91_add_device_rtt(void) |
1207 | { | 1247 | { |
1248 | at91_add_device_rtt_rtc(); | ||
1208 | platform_device_register(&at91sam9g45_rtt_device); | 1249 | platform_device_register(&at91sam9g45_rtt_device); |
1209 | } | 1250 | } |
1210 | 1251 | ||
@@ -1659,7 +1700,6 @@ static inline void configure_usart3_pins(unsigned pins) | |||
1659 | } | 1700 | } |
1660 | 1701 | ||
1661 | static struct platform_device *__initdata at91_uarts[ATMEL_MAX_UART]; /* the UARTs to use */ | 1702 | static struct platform_device *__initdata at91_uarts[ATMEL_MAX_UART]; /* the UARTs to use */ |
1662 | struct platform_device *atmel_default_console_device; /* the serial console device */ | ||
1663 | 1703 | ||
1664 | void __init at91_register_uart(unsigned id, unsigned portnr, unsigned pins) | 1704 | void __init at91_register_uart(unsigned id, unsigned portnr, unsigned pins) |
1665 | { | 1705 | { |
diff --git a/arch/arm/mach-at91/at91sam9g45_reset.S b/arch/arm/mach-at91/at91sam9g45_reset.S index 0468be10980b..9d457182c86c 100644 --- a/arch/arm/mach-at91/at91sam9g45_reset.S +++ b/arch/arm/mach-at91/at91sam9g45_reset.S | |||
@@ -12,7 +12,7 @@ | |||
12 | 12 | ||
13 | #include <linux/linkage.h> | 13 | #include <linux/linkage.h> |
14 | #include <mach/hardware.h> | 14 | #include <mach/hardware.h> |
15 | #include <mach/at91sam9_ddrsdr.h> | 15 | #include <mach/at91_ramc.h> |
16 | #include <mach/at91_rstc.h> | 16 | #include <mach/at91_rstc.h> |
17 | 17 | ||
18 | .arm | 18 | .arm |
@@ -20,9 +20,10 @@ | |||
20 | .globl at91sam9g45_restart | 20 | .globl at91sam9g45_restart |
21 | 21 | ||
22 | at91sam9g45_restart: | 22 | at91sam9g45_restart: |
23 | ldr r0, .at91_va_base_sdramc0 @ preload constants | 23 | ldr r5, =at91_ramc_base @ preload constants |
24 | ldr r1, =at91_rstc_base | 24 | ldr r0, [r5] |
25 | ldr r1, [r1] | 25 | ldr r4, =at91_rstc_base |
26 | ldr r1, [r4] | ||
26 | 27 | ||
27 | mov r2, #1 | 28 | mov r2, #1 |
28 | mov r3, #AT91_DDRSDRC_LPCB_POWER_DOWN | 29 | mov r3, #AT91_DDRSDRC_LPCB_POWER_DOWN |
@@ -35,6 +36,3 @@ at91sam9g45_restart: | |||
35 | str r4, [r1, #AT91_RSTC_CR] @ reset processor | 36 | str r4, [r1, #AT91_RSTC_CR] @ reset processor |
36 | 37 | ||
37 | b . | 38 | b . |
38 | |||
39 | .at91_va_base_sdramc0: | ||
40 | .word AT91_VA_BASE_SYS + AT91_DDRSDRC0 | ||
diff --git a/arch/arm/mach-at91/at91sam9rl.c b/arch/arm/mach-at91/at91sam9rl.c index fd60e226a987..63d9372eb18e 100644 --- a/arch/arm/mach-at91/at91sam9rl.c +++ b/arch/arm/mach-at91/at91sam9rl.c | |||
@@ -288,19 +288,15 @@ static void __init at91sam9rl_ioremap_registers(void) | |||
288 | { | 288 | { |
289 | at91_ioremap_shdwc(AT91SAM9RL_BASE_SHDWC); | 289 | at91_ioremap_shdwc(AT91SAM9RL_BASE_SHDWC); |
290 | at91_ioremap_rstc(AT91SAM9RL_BASE_RSTC); | 290 | at91_ioremap_rstc(AT91SAM9RL_BASE_RSTC); |
291 | at91_ioremap_ramc(0, AT91SAM9RL_BASE_SDRAMC, 512); | ||
291 | at91sam926x_ioremap_pit(AT91SAM9RL_BASE_PIT); | 292 | at91sam926x_ioremap_pit(AT91SAM9RL_BASE_PIT); |
292 | at91sam9_ioremap_smc(0, AT91SAM9RL_BASE_SMC); | 293 | at91sam9_ioremap_smc(0, AT91SAM9RL_BASE_SMC); |
293 | } | 294 | at91_ioremap_matrix(AT91SAM9RL_BASE_MATRIX); |
294 | |||
295 | static void at91sam9rl_idle(void) | ||
296 | { | ||
297 | at91_sys_write(AT91_PMC_SCDR, AT91_PMC_PCK); | ||
298 | cpu_do_idle(); | ||
299 | } | 295 | } |
300 | 296 | ||
301 | static void __init at91sam9rl_initialize(void) | 297 | static void __init at91sam9rl_initialize(void) |
302 | { | 298 | { |
303 | arm_pm_idle = at91sam9rl_idle; | 299 | arm_pm_idle = at91sam9_idle; |
304 | arm_pm_restart = at91sam9_alt_restart; | 300 | arm_pm_restart = at91sam9_alt_restart; |
305 | at91_extern_irq = (1 << AT91SAM9RL_ID_IRQ0); | 301 | at91_extern_irq = (1 << AT91SAM9RL_ID_IRQ0); |
306 | 302 | ||
diff --git a/arch/arm/mach-at91/at91sam9rl_devices.c b/arch/arm/mach-at91/at91sam9rl_devices.c index 9be71c11d0f0..eda72e83037d 100644 --- a/arch/arm/mach-at91/at91sam9rl_devices.c +++ b/arch/arm/mach-at91/at91sam9rl_devices.c | |||
@@ -20,6 +20,7 @@ | |||
20 | #include <mach/board.h> | 20 | #include <mach/board.h> |
21 | #include <mach/at91sam9rl.h> | 21 | #include <mach/at91sam9rl.h> |
22 | #include <mach/at91sam9rl_matrix.h> | 22 | #include <mach/at91sam9rl_matrix.h> |
23 | #include <mach/at91_matrix.h> | ||
23 | #include <mach/at91sam9_smc.h> | 24 | #include <mach/at91sam9_smc.h> |
24 | #include <mach/at_hdmac.h> | 25 | #include <mach/at_hdmac.h> |
25 | 26 | ||
@@ -265,8 +266,8 @@ void __init at91_add_device_nand(struct atmel_nand_data *data) | |||
265 | if (!data) | 266 | if (!data) |
266 | return; | 267 | return; |
267 | 268 | ||
268 | csa = at91_sys_read(AT91_MATRIX_EBICSA); | 269 | csa = at91_matrix_read(AT91_MATRIX_EBICSA); |
269 | at91_sys_write(AT91_MATRIX_EBICSA, csa | AT91_MATRIX_CS3A_SMC_SMARTMEDIA); | 270 | at91_matrix_write(AT91_MATRIX_EBICSA, csa | AT91_MATRIX_CS3A_SMC_SMARTMEDIA); |
270 | 271 | ||
271 | /* enable pin */ | 272 | /* enable pin */ |
272 | if (gpio_is_valid(data->enable_pin)) | 273 | if (gpio_is_valid(data->enable_pin)) |
@@ -682,6 +683,8 @@ static struct resource rtt_resources[] = { | |||
682 | .start = AT91SAM9RL_BASE_RTT, | 683 | .start = AT91SAM9RL_BASE_RTT, |
683 | .end = AT91SAM9RL_BASE_RTT + SZ_16 - 1, | 684 | .end = AT91SAM9RL_BASE_RTT + SZ_16 - 1, |
684 | .flags = IORESOURCE_MEM, | 685 | .flags = IORESOURCE_MEM, |
686 | }, { | ||
687 | .flags = IORESOURCE_MEM, | ||
685 | } | 688 | } |
686 | }; | 689 | }; |
687 | 690 | ||
@@ -689,11 +692,32 @@ static struct platform_device at91sam9rl_rtt_device = { | |||
689 | .name = "at91_rtt", | 692 | .name = "at91_rtt", |
690 | .id = 0, | 693 | .id = 0, |
691 | .resource = rtt_resources, | 694 | .resource = rtt_resources, |
692 | .num_resources = ARRAY_SIZE(rtt_resources), | ||
693 | }; | 695 | }; |
694 | 696 | ||
697 | #if IS_ENABLED(CONFIG_RTC_DRV_AT91SAM9) | ||
698 | static void __init at91_add_device_rtt_rtc(void) | ||
699 | { | ||
700 | at91sam9rl_rtt_device.name = "rtc-at91sam9"; | ||
701 | /* | ||
702 | * The second resource is needed: | ||
703 | * GPBR will serve as the storage for RTC time offset | ||
704 | */ | ||
705 | at91sam9rl_rtt_device.num_resources = 2; | ||
706 | rtt_resources[1].start = AT91SAM9RL_BASE_GPBR + | ||
707 | 4 * CONFIG_RTC_DRV_AT91SAM9_GPBR; | ||
708 | rtt_resources[1].end = rtt_resources[1].start + 3; | ||
709 | } | ||
710 | #else | ||
711 | static void __init at91_add_device_rtt_rtc(void) | ||
712 | { | ||
713 | /* Only one resource is needed: RTT not used as RTC */ | ||
714 | at91sam9rl_rtt_device.num_resources = 1; | ||
715 | } | ||
716 | #endif | ||
717 | |||
695 | static void __init at91_add_device_rtt(void) | 718 | static void __init at91_add_device_rtt(void) |
696 | { | 719 | { |
720 | at91_add_device_rtt_rtc(); | ||
697 | platform_device_register(&at91sam9rl_rtt_device); | 721 | platform_device_register(&at91sam9rl_rtt_device); |
698 | } | 722 | } |
699 | 723 | ||
@@ -1128,7 +1152,6 @@ static inline void configure_usart3_pins(unsigned pins) | |||
1128 | } | 1152 | } |
1129 | 1153 | ||
1130 | static struct platform_device *__initdata at91_uarts[ATMEL_MAX_UART]; /* the UARTs to use */ | 1154 | static struct platform_device *__initdata at91_uarts[ATMEL_MAX_UART]; /* the UARTs to use */ |
1131 | struct platform_device *atmel_default_console_device; /* the serial console device */ | ||
1132 | 1155 | ||
1133 | void __init at91_register_uart(unsigned id, unsigned portnr, unsigned pins) | 1156 | void __init at91_register_uart(unsigned id, unsigned portnr, unsigned pins) |
1134 | { | 1157 | { |
diff --git a/arch/arm/mach-at91/at91sam9x5.c b/arch/arm/mach-at91/at91sam9x5.c index 1c3444d2ee0c..a34d96afa746 100644 --- a/arch/arm/mach-at91/at91sam9x5.c +++ b/arch/arm/mach-at91/at91sam9x5.c | |||
@@ -301,8 +301,7 @@ static void __init at91sam9x5_map_io(void) | |||
301 | 301 | ||
302 | static void __init at91sam9x5_ioremap_registers(void) | 302 | static void __init at91sam9x5_ioremap_registers(void) |
303 | { | 303 | { |
304 | if (of_at91sam926x_pit_init() < 0) | 304 | at91_ioremap_ramc(0, AT91SAM9X5_BASE_DDRSDRC0, 512); |
305 | panic("Impossible to find PIT\n"); | ||
306 | } | 305 | } |
307 | 306 | ||
308 | void __init at91sam9x5_initialize(void) | 307 | void __init at91sam9x5_initialize(void) |
@@ -317,10 +316,6 @@ void __init at91sam9x5_initialize(void) | |||
317 | /* -------------------------------------------------------------------- | 316 | /* -------------------------------------------------------------------- |
318 | * AT91SAM9x5 devices (temporary before modification of code) | 317 | * AT91SAM9x5 devices (temporary before modification of code) |
319 | * -------------------------------------------------------------------- */ | 318 | * -------------------------------------------------------------------- */ |
320 | void __init at91_register_uart(unsigned id, unsigned portnr, unsigned pins) {} | ||
321 | void __init at91_set_serial_console(unsigned portnr) {} | ||
322 | struct platform_device *atmel_default_console_device = NULL; | ||
323 | |||
324 | void __init at91_add_device_nand(struct atmel_nand_data *data) {} | 319 | void __init at91_add_device_nand(struct atmel_nand_data *data) {} |
325 | 320 | ||
326 | /* -------------------------------------------------------------------- | 321 | /* -------------------------------------------------------------------- |
diff --git a/arch/arm/mach-at91/at91x40.c b/arch/arm/mach-at91/at91x40.c index 0154b7f44ff1..5400a1d65035 100644 --- a/arch/arm/mach-at91/at91x40.c +++ b/arch/arm/mach-at91/at91x40.c | |||
@@ -44,7 +44,7 @@ static void at91x40_idle(void) | |||
44 | * Disable the processor clock. The processor will be automatically | 44 | * Disable the processor clock. The processor will be automatically |
45 | * re-enabled by an interrupt or by a reset. | 45 | * re-enabled by an interrupt or by a reset. |
46 | */ | 46 | */ |
47 | at91_sys_write(AT91_PS_CR, AT91_PS_CR_CPU); | 47 | __raw_writel(AT91_PS_CR_CPU, AT91_PS_CR); |
48 | cpu_do_idle(); | 48 | cpu_do_idle(); |
49 | } | 49 | } |
50 | 50 | ||
diff --git a/arch/arm/mach-at91/at91x40_time.c b/arch/arm/mach-at91/at91x40_time.c index dfff2895f4b2..6ca680a1d5d1 100644 --- a/arch/arm/mach-at91/at91x40_time.c +++ b/arch/arm/mach-at91/at91x40_time.c | |||
@@ -28,6 +28,12 @@ | |||
28 | #include <asm/mach/time.h> | 28 | #include <asm/mach/time.h> |
29 | #include <mach/at91_tc.h> | 29 | #include <mach/at91_tc.h> |
30 | 30 | ||
31 | #define at91_tc_read(field) \ | ||
32 | __raw_readl(AT91_TC + field) | ||
33 | |||
34 | #define at91_tc_write(field, value) \ | ||
35 | __raw_writel(value, AT91_TC + field); | ||
36 | |||
31 | /* | 37 | /* |
32 | * 3 counter/timer units present. | 38 | * 3 counter/timer units present. |
33 | */ | 39 | */ |
@@ -37,12 +43,12 @@ | |||
37 | 43 | ||
38 | static unsigned long at91x40_gettimeoffset(void) | 44 | static unsigned long at91x40_gettimeoffset(void) |
39 | { | 45 | { |
40 | return (at91_sys_read(AT91_TC + AT91_TC_CLK1BASE + AT91_TC_CV) * 1000000 / (AT91X40_MASTER_CLOCK / 128)); | 46 | return (at91_tc_read(AT91_TC_CLK1BASE + AT91_TC_CV) * 1000000 / (AT91X40_MASTER_CLOCK / 128)); |
41 | } | 47 | } |
42 | 48 | ||
43 | static irqreturn_t at91x40_timer_interrupt(int irq, void *dev_id) | 49 | static irqreturn_t at91x40_timer_interrupt(int irq, void *dev_id) |
44 | { | 50 | { |
45 | at91_sys_read(AT91_TC + AT91_TC_CLK1BASE + AT91_TC_SR); | 51 | at91_tc_read(AT91_TC_CLK1BASE + AT91_TC_SR); |
46 | timer_tick(); | 52 | timer_tick(); |
47 | return IRQ_HANDLED; | 53 | return IRQ_HANDLED; |
48 | } | 54 | } |
@@ -57,20 +63,20 @@ void __init at91x40_timer_init(void) | |||
57 | { | 63 | { |
58 | unsigned int v; | 64 | unsigned int v; |
59 | 65 | ||
60 | at91_sys_write(AT91_TC + AT91_TC_BCR, 0); | 66 | at91_tc_write(AT91_TC_BCR, 0); |
61 | v = at91_sys_read(AT91_TC + AT91_TC_BMR); | 67 | v = at91_tc_read(AT91_TC_BMR); |
62 | v = (v & ~AT91_TC_TC1XC1S) | AT91_TC_TC1XC1S_NONE; | 68 | v = (v & ~AT91_TC_TC1XC1S) | AT91_TC_TC1XC1S_NONE; |
63 | at91_sys_write(AT91_TC + AT91_TC_BMR, v); | 69 | at91_tc_write(AT91_TC_BMR, v); |
64 | 70 | ||
65 | at91_sys_write(AT91_TC + AT91_TC_CLK1BASE + AT91_TC_CCR, AT91_TC_CLKDIS); | 71 | at91_tc_write(AT91_TC_CLK1BASE + AT91_TC_CCR, AT91_TC_CLKDIS); |
66 | at91_sys_write(AT91_TC + AT91_TC_CLK1BASE + AT91_TC_CMR, (AT91_TC_TIMER_CLOCK4 | AT91_TC_CPCTRG)); | 72 | at91_tc_write(AT91_TC_CLK1BASE + AT91_TC_CMR, (AT91_TC_TIMER_CLOCK4 | AT91_TC_CPCTRG)); |
67 | at91_sys_write(AT91_TC + AT91_TC_CLK1BASE + AT91_TC_IDR, 0xffffffff); | 73 | at91_tc_write(AT91_TC_CLK1BASE + AT91_TC_IDR, 0xffffffff); |
68 | at91_sys_write(AT91_TC + AT91_TC_CLK1BASE + AT91_TC_RC, (AT91X40_MASTER_CLOCK / 128) / HZ - 1); | 74 | at91_tc_write(AT91_TC_CLK1BASE + AT91_TC_RC, (AT91X40_MASTER_CLOCK / 128) / HZ - 1); |
69 | at91_sys_write(AT91_TC + AT91_TC_CLK1BASE + AT91_TC_IER, (1<<4)); | 75 | at91_tc_write(AT91_TC_CLK1BASE + AT91_TC_IER, (1<<4)); |
70 | 76 | ||
71 | setup_irq(AT91X40_ID_TC1, &at91x40_timer_irq); | 77 | setup_irq(AT91X40_ID_TC1, &at91x40_timer_irq); |
72 | 78 | ||
73 | at91_sys_write(AT91_TC + AT91_TC_CLK1BASE + AT91_TC_CCR, (AT91_TC_SWTRG | AT91_TC_CLKEN)); | 79 | at91_tc_write(AT91_TC_CLK1BASE + AT91_TC_CCR, (AT91_TC_SWTRG | AT91_TC_CLKEN)); |
74 | } | 80 | } |
75 | 81 | ||
76 | struct sys_timer at91x40_timer = { | 82 | struct sys_timer at91x40_timer = { |
diff --git a/arch/arm/mach-at91/board-cpu9krea.c b/arch/arm/mach-at91/board-cpu9krea.c index 9ab3d1ea326d..989e1c5a9ca0 100644 --- a/arch/arm/mach-at91/board-cpu9krea.c +++ b/arch/arm/mach-at91/board-cpu9krea.c | |||
@@ -43,6 +43,7 @@ | |||
43 | #include <mach/board.h> | 43 | #include <mach/board.h> |
44 | #include <mach/at91sam9_smc.h> | 44 | #include <mach/at91sam9_smc.h> |
45 | #include <mach/at91sam9260_matrix.h> | 45 | #include <mach/at91sam9260_matrix.h> |
46 | #include <mach/at91_matrix.h> | ||
46 | 47 | ||
47 | #include "sam9_smc.h" | 48 | #include "sam9_smc.h" |
48 | #include "generic.h" | 49 | #include "generic.h" |
@@ -238,8 +239,8 @@ static __init void cpu9krea_add_device_nor(void) | |||
238 | { | 239 | { |
239 | unsigned long csa; | 240 | unsigned long csa; |
240 | 241 | ||
241 | csa = at91_sys_read(AT91_MATRIX_EBICSA); | 242 | csa = at91_matrix_read(AT91_MATRIX_EBICSA); |
242 | at91_sys_write(AT91_MATRIX_EBICSA, csa | AT91_MATRIX_VDDIOMSEL_3_3V); | 243 | at91_matrix_write(AT91_MATRIX_EBICSA, csa | AT91_MATRIX_VDDIOMSEL_3_3V); |
243 | 244 | ||
244 | /* configure chip-select 0 (NOR) */ | 245 | /* configure chip-select 0 (NOR) */ |
245 | sam9_smc_configure(0, 0, &cpu9krea_nor_smc_config); | 246 | sam9_smc_configure(0, 0, &cpu9krea_nor_smc_config); |
diff --git a/arch/arm/mach-at91/board-cpuat91.c b/arch/arm/mach-at91/board-cpuat91.c index 368e1427ad99..e094cc81fe25 100644 --- a/arch/arm/mach-at91/board-cpuat91.c +++ b/arch/arm/mach-at91/board-cpuat91.c | |||
@@ -38,6 +38,7 @@ | |||
38 | 38 | ||
39 | #include <mach/board.h> | 39 | #include <mach/board.h> |
40 | #include <mach/at91rm9200_mc.h> | 40 | #include <mach/at91rm9200_mc.h> |
41 | #include <mach/at91_ramc.h> | ||
41 | #include <mach/cpu.h> | 42 | #include <mach/cpu.h> |
42 | 43 | ||
43 | #include "generic.h" | 44 | #include "generic.h" |
diff --git a/arch/arm/mach-at91/board-dt.c b/arch/arm/mach-at91/board-dt.c index 05793156d178..583b72472ad9 100644 --- a/arch/arm/mach-at91/board-dt.c +++ b/arch/arm/mach-at91/board-dt.c | |||
@@ -15,7 +15,7 @@ | |||
15 | #include <linux/init.h> | 15 | #include <linux/init.h> |
16 | #include <linux/module.h> | 16 | #include <linux/module.h> |
17 | #include <linux/gpio.h> | 17 | #include <linux/gpio.h> |
18 | #include <linux/irqdomain.h> | 18 | #include <linux/of.h> |
19 | #include <linux/of_irq.h> | 19 | #include <linux/of_irq.h> |
20 | #include <linux/of_platform.h> | 20 | #include <linux/of_platform.h> |
21 | 21 | ||
@@ -38,12 +38,6 @@ static void __init ek_init_early(void) | |||
38 | { | 38 | { |
39 | /* Initialize processor: 12.000 MHz crystal */ | 39 | /* Initialize processor: 12.000 MHz crystal */ |
40 | at91_initialize(12000000); | 40 | at91_initialize(12000000); |
41 | |||
42 | /* DGBU on ttyS0. (Rx & Tx only) */ | ||
43 | at91_register_uart(0, 0, 0); | ||
44 | |||
45 | /* set serial console to ttyS0 (ie, DBGU) */ | ||
46 | at91_set_serial_console(0); | ||
47 | } | 41 | } |
48 | 42 | ||
49 | /* det_pin is not connected */ | 43 | /* det_pin is not connected */ |
@@ -88,15 +82,17 @@ static void __init ek_add_device_nand(void) | |||
88 | at91_add_device_nand(&ek_nand_data); | 82 | at91_add_device_nand(&ek_nand_data); |
89 | } | 83 | } |
90 | 84 | ||
91 | static const struct of_device_id aic_of_match[] __initconst = { | 85 | static const struct of_device_id irq_of_match[] __initconst = { |
92 | { .compatible = "atmel,at91rm9200-aic", }, | 86 | |
93 | {}, | 87 | { .compatible = "atmel,at91rm9200-aic", .data = at91_aic_of_init }, |
88 | { .compatible = "atmel,at91rm9200-gpio", .data = at91_gpio_of_irq_setup }, | ||
89 | { .compatible = "atmel,at91sam9x5-gpio", .data = at91_gpio_of_irq_setup }, | ||
90 | { /*sentinel*/ } | ||
94 | }; | 91 | }; |
95 | 92 | ||
96 | static void __init at91_dt_init_irq(void) | 93 | static void __init at91_dt_init_irq(void) |
97 | { | 94 | { |
98 | irq_domain_generate_simple(aic_of_match, 0xfffff000, 0); | 95 | of_irq_init(irq_of_match); |
99 | at91_init_irq_default(); | ||
100 | } | 96 | } |
101 | 97 | ||
102 | static void __init at91_dt_device_init(void) | 98 | static void __init at91_dt_device_init(void) |
diff --git a/arch/arm/mach-at91/board-eco920.c b/arch/arm/mach-at91/board-eco920.c index 07ef35b0ec2c..f23aabef8551 100644 --- a/arch/arm/mach-at91/board-eco920.c +++ b/arch/arm/mach-at91/board-eco920.c | |||
@@ -26,6 +26,7 @@ | |||
26 | 26 | ||
27 | #include <mach/board.h> | 27 | #include <mach/board.h> |
28 | #include <mach/at91rm9200_mc.h> | 28 | #include <mach/at91rm9200_mc.h> |
29 | #include <mach/at91_ramc.h> | ||
29 | #include <mach/cpu.h> | 30 | #include <mach/cpu.h> |
30 | 31 | ||
31 | #include "generic.h" | 32 | #include "generic.h" |
@@ -110,7 +111,7 @@ static void __init eco920_board_init(void) | |||
110 | at91_add_device_mmc(0, &eco920_mmc_data); | 111 | at91_add_device_mmc(0, &eco920_mmc_data); |
111 | platform_device_register(&eco920_flash); | 112 | platform_device_register(&eco920_flash); |
112 | 113 | ||
113 | at91_sys_write(AT91_SMC_CSR(7), AT91_SMC_RWHOLD_(1) | 114 | at91_ramc_write(0, AT91_SMC_CSR(7), AT91_SMC_RWHOLD_(1) |
114 | | AT91_SMC_RWSETUP_(1) | 115 | | AT91_SMC_RWSETUP_(1) |
115 | | AT91_SMC_DBW_8 | 116 | | AT91_SMC_DBW_8 |
116 | | AT91_SMC_WSEN | 117 | | AT91_SMC_WSEN |
@@ -122,7 +123,7 @@ static void __init eco920_board_init(void) | |||
122 | at91_set_deglitch(AT91_PIN_PA23, 1); | 123 | at91_set_deglitch(AT91_PIN_PA23, 1); |
123 | 124 | ||
124 | /* Initialization of the Static Memory Controller for Chip Select 3 */ | 125 | /* Initialization of the Static Memory Controller for Chip Select 3 */ |
125 | at91_sys_write(AT91_SMC_CSR(3), | 126 | at91_ramc_write(0, AT91_SMC_CSR(3), |
126 | AT91_SMC_DBW_16 | /* 16 bit */ | 127 | AT91_SMC_DBW_16 | /* 16 bit */ |
127 | AT91_SMC_WSEN | | 128 | AT91_SMC_WSEN | |
128 | AT91_SMC_NWS_(5) | /* wait states */ | 129 | AT91_SMC_NWS_(5) | /* wait states */ |
diff --git a/arch/arm/mach-at91/board-kb9202.c b/arch/arm/mach-at91/board-kb9202.c index d75a4a2ad9c2..bb9914582013 100644 --- a/arch/arm/mach-at91/board-kb9202.c +++ b/arch/arm/mach-at91/board-kb9202.c | |||
@@ -38,6 +38,7 @@ | |||
38 | #include <mach/board.h> | 38 | #include <mach/board.h> |
39 | #include <mach/cpu.h> | 39 | #include <mach/cpu.h> |
40 | #include <mach/at91rm9200_mc.h> | 40 | #include <mach/at91rm9200_mc.h> |
41 | #include <mach/at91_ramc.h> | ||
41 | 42 | ||
42 | #include "generic.h" | 43 | #include "generic.h" |
43 | 44 | ||
diff --git a/arch/arm/mach-at91/board-picotux200.c b/arch/arm/mach-at91/board-picotux200.c index ab024fa11d5c..59e35dd14863 100644 --- a/arch/arm/mach-at91/board-picotux200.c +++ b/arch/arm/mach-at91/board-picotux200.c | |||
@@ -39,6 +39,7 @@ | |||
39 | 39 | ||
40 | #include <mach/board.h> | 40 | #include <mach/board.h> |
41 | #include <mach/at91rm9200_mc.h> | 41 | #include <mach/at91rm9200_mc.h> |
42 | #include <mach/at91_ramc.h> | ||
42 | 43 | ||
43 | #include "generic.h" | 44 | #include "generic.h" |
44 | 45 | ||
diff --git a/arch/arm/mach-at91/board-rm9200dk.c b/arch/arm/mach-at91/board-rm9200dk.c index 782f37946af5..9083df04e7ed 100644 --- a/arch/arm/mach-at91/board-rm9200dk.c +++ b/arch/arm/mach-at91/board-rm9200dk.c | |||
@@ -41,6 +41,7 @@ | |||
41 | #include <mach/hardware.h> | 41 | #include <mach/hardware.h> |
42 | #include <mach/board.h> | 42 | #include <mach/board.h> |
43 | #include <mach/at91rm9200_mc.h> | 43 | #include <mach/at91rm9200_mc.h> |
44 | #include <mach/at91_ramc.h> | ||
44 | 45 | ||
45 | #include "generic.h" | 46 | #include "generic.h" |
46 | 47 | ||
diff --git a/arch/arm/mach-at91/board-rm9200ek.c b/arch/arm/mach-at91/board-rm9200ek.c index ef7c12a92246..11cbaa8946fe 100644 --- a/arch/arm/mach-at91/board-rm9200ek.c +++ b/arch/arm/mach-at91/board-rm9200ek.c | |||
@@ -41,6 +41,7 @@ | |||
41 | #include <mach/hardware.h> | 41 | #include <mach/hardware.h> |
42 | #include <mach/board.h> | 42 | #include <mach/board.h> |
43 | #include <mach/at91rm9200_mc.h> | 43 | #include <mach/at91rm9200_mc.h> |
44 | #include <mach/at91_ramc.h> | ||
44 | 45 | ||
45 | #include "generic.h" | 46 | #include "generic.h" |
46 | 47 | ||
diff --git a/arch/arm/mach-at91/board-snapper9260.c b/arch/arm/mach-at91/board-snapper9260.c index 4770db08e5a6..3c2e3fcc310c 100644 --- a/arch/arm/mach-at91/board-snapper9260.c +++ b/arch/arm/mach-at91/board-snapper9260.c | |||
@@ -145,11 +145,11 @@ static struct i2c_board_info __initdata snapper9260_i2c_devices[] = { | |||
145 | /* Audio codec */ | 145 | /* Audio codec */ |
146 | I2C_BOARD_INFO("tlv320aic23", 0x1a), | 146 | I2C_BOARD_INFO("tlv320aic23", 0x1a), |
147 | }, | 147 | }, |
148 | { | 148 | }; |
149 | |||
150 | static struct i2c_board_info __initdata snapper9260_i2c_isl1208 = { | ||
149 | /* RTC */ | 151 | /* RTC */ |
150 | I2C_BOARD_INFO("isl1208", 0x6f), | 152 | I2C_BOARD_INFO("isl1208", 0x6f), |
151 | .irq = gpio_to_irq(AT91_PIN_PA31), | ||
152 | }, | ||
153 | }; | 153 | }; |
154 | 154 | ||
155 | static void __init snapper9260_add_device_nand(void) | 155 | static void __init snapper9260_add_device_nand(void) |
@@ -163,6 +163,10 @@ static void __init snapper9260_board_init(void) | |||
163 | { | 163 | { |
164 | at91_add_device_i2c(snapper9260_i2c_devices, | 164 | at91_add_device_i2c(snapper9260_i2c_devices, |
165 | ARRAY_SIZE(snapper9260_i2c_devices)); | 165 | ARRAY_SIZE(snapper9260_i2c_devices)); |
166 | |||
167 | snapper9260_i2c_isl1208.irq = gpio_to_irq(AT91_PIN_PA31); | ||
168 | i2c_register_board_info(0, &snapper9260_i2c_isl1208, 1); | ||
169 | |||
166 | at91_add_device_serial(); | 170 | at91_add_device_serial(); |
167 | at91_add_device_usbh(&snapper9260_usbh_data); | 171 | at91_add_device_usbh(&snapper9260_usbh_data); |
168 | at91_add_device_udc(&snapper9260_udc_data); | 172 | at91_add_device_udc(&snapper9260_udc_data); |
diff --git a/arch/arm/mach-at91/board-yl-9200.c b/arch/arm/mach-at91/board-yl-9200.c index bbd553e1cd93..52f460768f71 100644 --- a/arch/arm/mach-at91/board-yl-9200.c +++ b/arch/arm/mach-at91/board-yl-9200.c | |||
@@ -45,6 +45,7 @@ | |||
45 | #include <mach/hardware.h> | 45 | #include <mach/hardware.h> |
46 | #include <mach/board.h> | 46 | #include <mach/board.h> |
47 | #include <mach/at91rm9200_mc.h> | 47 | #include <mach/at91rm9200_mc.h> |
48 | #include <mach/at91_ramc.h> | ||
48 | #include <mach/cpu.h> | 49 | #include <mach/cpu.h> |
49 | 50 | ||
50 | #include "generic.h" | 51 | #include "generic.h" |
@@ -393,7 +394,7 @@ static void yl9200_init_video(void) | |||
393 | at91_set_A_periph(AT91_PIN_PC6, 0); | 394 | at91_set_A_periph(AT91_PIN_PC6, 0); |
394 | 395 | ||
395 | /* Initialization of the Static Memory Controller for Chip Select 2 */ | 396 | /* Initialization of the Static Memory Controller for Chip Select 2 */ |
396 | at91_sys_write(AT91_SMC_CSR(2), AT91_SMC_DBW_16 /* 16 bit */ | 397 | at91_ramc_write(0, AT91_SMC_CSR(2), AT91_SMC_DBW_16 /* 16 bit */ |
397 | | AT91_SMC_WSEN | AT91_SMC_NWS_(0x4) /* wait states */ | 398 | | AT91_SMC_WSEN | AT91_SMC_NWS_(0x4) /* wait states */ |
398 | | AT91_SMC_TDF_(0x100) /* float time */ | 399 | | AT91_SMC_TDF_(0x100) /* float time */ |
399 | ); | 400 | ); |
diff --git a/arch/arm/mach-at91/clock.c b/arch/arm/mach-at91/clock.c index a5291e0e7004..be51ca7f694d 100644 --- a/arch/arm/mach-at91/clock.c +++ b/arch/arm/mach-at91/clock.c | |||
@@ -28,9 +28,12 @@ | |||
28 | #include <mach/at91_pmc.h> | 28 | #include <mach/at91_pmc.h> |
29 | #include <mach/cpu.h> | 29 | #include <mach/cpu.h> |
30 | 30 | ||
31 | #include <asm/proc-fns.h> | ||
32 | |||
31 | #include "clock.h" | 33 | #include "clock.h" |
32 | #include "generic.h" | 34 | #include "generic.h" |
33 | 35 | ||
36 | void __iomem *at91_pmc_base; | ||
34 | 37 | ||
35 | /* | 38 | /* |
36 | * There's a lot more which can be done with clocks, including cpufreq | 39 | * There's a lot more which can be done with clocks, including cpufreq |
@@ -123,11 +126,11 @@ static void pllb_mode(struct clk *clk, int is_on) | |||
123 | value = 0; | 126 | value = 0; |
124 | 127 | ||
125 | // REVISIT: Add work-around for AT91RM9200 Errata #26 ? | 128 | // REVISIT: Add work-around for AT91RM9200 Errata #26 ? |
126 | at91_sys_write(AT91_CKGR_PLLBR, value); | 129 | at91_pmc_write(AT91_CKGR_PLLBR, value); |
127 | 130 | ||
128 | do { | 131 | do { |
129 | cpu_relax(); | 132 | cpu_relax(); |
130 | } while ((at91_sys_read(AT91_PMC_SR) & AT91_PMC_LOCKB) != is_on); | 133 | } while ((at91_pmc_read(AT91_PMC_SR) & AT91_PMC_LOCKB) != is_on); |
131 | } | 134 | } |
132 | 135 | ||
133 | static struct clk pllb = { | 136 | static struct clk pllb = { |
@@ -142,24 +145,24 @@ static struct clk pllb = { | |||
142 | static void pmc_sys_mode(struct clk *clk, int is_on) | 145 | static void pmc_sys_mode(struct clk *clk, int is_on) |
143 | { | 146 | { |
144 | if (is_on) | 147 | if (is_on) |
145 | at91_sys_write(AT91_PMC_SCER, clk->pmc_mask); | 148 | at91_pmc_write(AT91_PMC_SCER, clk->pmc_mask); |
146 | else | 149 | else |
147 | at91_sys_write(AT91_PMC_SCDR, clk->pmc_mask); | 150 | at91_pmc_write(AT91_PMC_SCDR, clk->pmc_mask); |
148 | } | 151 | } |
149 | 152 | ||
150 | static void pmc_uckr_mode(struct clk *clk, int is_on) | 153 | static void pmc_uckr_mode(struct clk *clk, int is_on) |
151 | { | 154 | { |
152 | unsigned int uckr = at91_sys_read(AT91_CKGR_UCKR); | 155 | unsigned int uckr = at91_pmc_read(AT91_CKGR_UCKR); |
153 | 156 | ||
154 | if (is_on) { | 157 | if (is_on) { |
155 | is_on = AT91_PMC_LOCKU; | 158 | is_on = AT91_PMC_LOCKU; |
156 | at91_sys_write(AT91_CKGR_UCKR, uckr | clk->pmc_mask); | 159 | at91_pmc_write(AT91_CKGR_UCKR, uckr | clk->pmc_mask); |
157 | } else | 160 | } else |
158 | at91_sys_write(AT91_CKGR_UCKR, uckr & ~(clk->pmc_mask)); | 161 | at91_pmc_write(AT91_CKGR_UCKR, uckr & ~(clk->pmc_mask)); |
159 | 162 | ||
160 | do { | 163 | do { |
161 | cpu_relax(); | 164 | cpu_relax(); |
162 | } while ((at91_sys_read(AT91_PMC_SR) & AT91_PMC_LOCKU) != is_on); | 165 | } while ((at91_pmc_read(AT91_PMC_SR) & AT91_PMC_LOCKU) != is_on); |
163 | } | 166 | } |
164 | 167 | ||
165 | /* USB function clocks (PLLB must be 48 MHz) */ | 168 | /* USB function clocks (PLLB must be 48 MHz) */ |
@@ -195,9 +198,9 @@ struct clk mck = { | |||
195 | static void pmc_periph_mode(struct clk *clk, int is_on) | 198 | static void pmc_periph_mode(struct clk *clk, int is_on) |
196 | { | 199 | { |
197 | if (is_on) | 200 | if (is_on) |
198 | at91_sys_write(AT91_PMC_PCER, clk->pmc_mask); | 201 | at91_pmc_write(AT91_PMC_PCER, clk->pmc_mask); |
199 | else | 202 | else |
200 | at91_sys_write(AT91_PMC_PCDR, clk->pmc_mask); | 203 | at91_pmc_write(AT91_PMC_PCDR, clk->pmc_mask); |
201 | } | 204 | } |
202 | 205 | ||
203 | static struct clk __init *at91_css_to_clk(unsigned long css) | 206 | static struct clk __init *at91_css_to_clk(unsigned long css) |
@@ -357,10 +360,10 @@ int clk_set_rate(struct clk *clk, unsigned long rate) | |||
357 | if (actual && actual <= rate) { | 360 | if (actual && actual <= rate) { |
358 | u32 pckr; | 361 | u32 pckr; |
359 | 362 | ||
360 | pckr = at91_sys_read(AT91_PMC_PCKR(clk->id)); | 363 | pckr = at91_pmc_read(AT91_PMC_PCKR(clk->id)); |
361 | pckr &= css_mask; /* keep clock selection */ | 364 | pckr &= css_mask; /* keep clock selection */ |
362 | pckr |= prescale << prescale_offset; | 365 | pckr |= prescale << prescale_offset; |
363 | at91_sys_write(AT91_PMC_PCKR(clk->id), pckr); | 366 | at91_pmc_write(AT91_PMC_PCKR(clk->id), pckr); |
364 | clk->rate_hz = actual; | 367 | clk->rate_hz = actual; |
365 | break; | 368 | break; |
366 | } | 369 | } |
@@ -394,7 +397,7 @@ int clk_set_parent(struct clk *clk, struct clk *parent) | |||
394 | 397 | ||
395 | clk->rate_hz = parent->rate_hz; | 398 | clk->rate_hz = parent->rate_hz; |
396 | clk->parent = parent; | 399 | clk->parent = parent; |
397 | at91_sys_write(AT91_PMC_PCKR(clk->id), parent->id); | 400 | at91_pmc_write(AT91_PMC_PCKR(clk->id), parent->id); |
398 | 401 | ||
399 | spin_unlock_irqrestore(&clk_lock, flags); | 402 | spin_unlock_irqrestore(&clk_lock, flags); |
400 | return 0; | 403 | return 0; |
@@ -413,7 +416,7 @@ static void __init init_programmable_clock(struct clk *clk) | |||
413 | else | 416 | else |
414 | css_mask = AT91_PMC_CSS; | 417 | css_mask = AT91_PMC_CSS; |
415 | 418 | ||
416 | pckr = at91_sys_read(AT91_PMC_PCKR(clk->id)); | 419 | pckr = at91_pmc_read(AT91_PMC_PCKR(clk->id)); |
417 | parent = at91_css_to_clk(pckr & css_mask); | 420 | parent = at91_css_to_clk(pckr & css_mask); |
418 | clk->parent = parent; | 421 | clk->parent = parent; |
419 | clk->rate_hz = parent->rate_hz / pmc_prescaler_divider(pckr); | 422 | clk->rate_hz = parent->rate_hz / pmc_prescaler_divider(pckr); |
@@ -430,19 +433,24 @@ static int at91_clk_show(struct seq_file *s, void *unused) | |||
430 | u32 scsr, pcsr, uckr = 0, sr; | 433 | u32 scsr, pcsr, uckr = 0, sr; |
431 | struct clk *clk; | 434 | struct clk *clk; |
432 | 435 | ||
433 | seq_printf(s, "SCSR = %8x\n", scsr = at91_sys_read(AT91_PMC_SCSR)); | 436 | scsr = at91_pmc_read(AT91_PMC_SCSR); |
434 | seq_printf(s, "PCSR = %8x\n", pcsr = at91_sys_read(AT91_PMC_PCSR)); | 437 | pcsr = at91_pmc_read(AT91_PMC_PCSR); |
435 | seq_printf(s, "MOR = %8x\n", at91_sys_read(AT91_CKGR_MOR)); | 438 | sr = at91_pmc_read(AT91_PMC_SR); |
436 | seq_printf(s, "MCFR = %8x\n", at91_sys_read(AT91_CKGR_MCFR)); | 439 | seq_printf(s, "SCSR = %8x\n", scsr); |
437 | seq_printf(s, "PLLA = %8x\n", at91_sys_read(AT91_CKGR_PLLAR)); | 440 | seq_printf(s, "PCSR = %8x\n", pcsr); |
441 | seq_printf(s, "MOR = %8x\n", at91_pmc_read(AT91_CKGR_MOR)); | ||
442 | seq_printf(s, "MCFR = %8x\n", at91_pmc_read(AT91_CKGR_MCFR)); | ||
443 | seq_printf(s, "PLLA = %8x\n", at91_pmc_read(AT91_CKGR_PLLAR)); | ||
438 | if (cpu_has_pllb()) | 444 | if (cpu_has_pllb()) |
439 | seq_printf(s, "PLLB = %8x\n", at91_sys_read(AT91_CKGR_PLLBR)); | 445 | seq_printf(s, "PLLB = %8x\n", at91_pmc_read(AT91_CKGR_PLLBR)); |
440 | if (cpu_has_utmi()) | 446 | if (cpu_has_utmi()) { |
441 | seq_printf(s, "UCKR = %8x\n", uckr = at91_sys_read(AT91_CKGR_UCKR)); | 447 | uckr = at91_pmc_read(AT91_CKGR_UCKR); |
442 | seq_printf(s, "MCKR = %8x\n", at91_sys_read(AT91_PMC_MCKR)); | 448 | seq_printf(s, "UCKR = %8x\n", uckr); |
449 | } | ||
450 | seq_printf(s, "MCKR = %8x\n", at91_pmc_read(AT91_PMC_MCKR)); | ||
443 | if (cpu_has_upll()) | 451 | if (cpu_has_upll()) |
444 | seq_printf(s, "USB = %8x\n", at91_sys_read(AT91_PMC_USB)); | 452 | seq_printf(s, "USB = %8x\n", at91_pmc_read(AT91_PMC_USB)); |
445 | seq_printf(s, "SR = %8x\n", sr = at91_sys_read(AT91_PMC_SR)); | 453 | seq_printf(s, "SR = %8x\n", sr); |
446 | 454 | ||
447 | seq_printf(s, "\n"); | 455 | seq_printf(s, "\n"); |
448 | 456 | ||
@@ -630,14 +638,14 @@ static void __init at91_pllb_usbfs_clock_init(unsigned long main_clock) | |||
630 | if (cpu_is_at91rm9200()) { | 638 | if (cpu_is_at91rm9200()) { |
631 | uhpck.pmc_mask = AT91RM9200_PMC_UHP; | 639 | uhpck.pmc_mask = AT91RM9200_PMC_UHP; |
632 | udpck.pmc_mask = AT91RM9200_PMC_UDP; | 640 | udpck.pmc_mask = AT91RM9200_PMC_UDP; |
633 | at91_sys_write(AT91_PMC_SCER, AT91RM9200_PMC_MCKUDP); | 641 | at91_pmc_write(AT91_PMC_SCER, AT91RM9200_PMC_MCKUDP); |
634 | } else if (cpu_is_at91sam9260() || cpu_is_at91sam9261() || | 642 | } else if (cpu_is_at91sam9260() || cpu_is_at91sam9261() || |
635 | cpu_is_at91sam9263() || cpu_is_at91sam9g20() || | 643 | cpu_is_at91sam9263() || cpu_is_at91sam9g20() || |
636 | cpu_is_at91sam9g10()) { | 644 | cpu_is_at91sam9g10()) { |
637 | uhpck.pmc_mask = AT91SAM926x_PMC_UHP; | 645 | uhpck.pmc_mask = AT91SAM926x_PMC_UHP; |
638 | udpck.pmc_mask = AT91SAM926x_PMC_UDP; | 646 | udpck.pmc_mask = AT91SAM926x_PMC_UDP; |
639 | } | 647 | } |
640 | at91_sys_write(AT91_CKGR_PLLBR, 0); | 648 | at91_pmc_write(AT91_CKGR_PLLBR, 0); |
641 | 649 | ||
642 | udpck.rate_hz = at91_usb_rate(&pllb, pllb.rate_hz, at91_pllb_usb_init); | 650 | udpck.rate_hz = at91_usb_rate(&pllb, pllb.rate_hz, at91_pllb_usb_init); |
643 | uhpck.rate_hz = at91_usb_rate(&pllb, pllb.rate_hz, at91_pllb_usb_init); | 651 | uhpck.rate_hz = at91_usb_rate(&pllb, pllb.rate_hz, at91_pllb_usb_init); |
@@ -654,13 +662,13 @@ static void __init at91_upll_usbfs_clock_init(unsigned long main_clock) | |||
654 | /* Setup divider by 10 to reach 48 MHz */ | 662 | /* Setup divider by 10 to reach 48 MHz */ |
655 | usbr |= ((10 - 1) << 8) & AT91_PMC_OHCIUSBDIV; | 663 | usbr |= ((10 - 1) << 8) & AT91_PMC_OHCIUSBDIV; |
656 | 664 | ||
657 | at91_sys_write(AT91_PMC_USB, usbr); | 665 | at91_pmc_write(AT91_PMC_USB, usbr); |
658 | 666 | ||
659 | /* Now set uhpck values */ | 667 | /* Now set uhpck values */ |
660 | uhpck.parent = &utmi_clk; | 668 | uhpck.parent = &utmi_clk; |
661 | uhpck.pmc_mask = AT91SAM926x_PMC_UHP; | 669 | uhpck.pmc_mask = AT91SAM926x_PMC_UHP; |
662 | uhpck.rate_hz = utmi_clk.rate_hz; | 670 | uhpck.rate_hz = utmi_clk.rate_hz; |
663 | uhpck.rate_hz /= 1 + ((at91_sys_read(AT91_PMC_USB) & AT91_PMC_OHCIUSBDIV) >> 8); | 671 | uhpck.rate_hz /= 1 + ((at91_pmc_read(AT91_PMC_USB) & AT91_PMC_OHCIUSBDIV) >> 8); |
664 | } | 672 | } |
665 | 673 | ||
666 | int __init at91_clock_init(unsigned long main_clock) | 674 | int __init at91_clock_init(unsigned long main_clock) |
@@ -669,6 +677,10 @@ int __init at91_clock_init(unsigned long main_clock) | |||
669 | int i; | 677 | int i; |
670 | int pll_overclock = false; | 678 | int pll_overclock = false; |
671 | 679 | ||
680 | at91_pmc_base = ioremap(AT91_PMC, 256); | ||
681 | if (!at91_pmc_base) | ||
682 | panic("Impossible to ioremap AT91_PMC 0x%x\n", AT91_PMC); | ||
683 | |||
672 | /* | 684 | /* |
673 | * When the bootloader initialized the main oscillator correctly, | 685 | * When the bootloader initialized the main oscillator correctly, |
674 | * there's no problem using the cycle counter. But if it didn't, | 686 | * there's no problem using the cycle counter. But if it didn't, |
@@ -677,14 +689,14 @@ int __init at91_clock_init(unsigned long main_clock) | |||
677 | */ | 689 | */ |
678 | if (!main_clock) { | 690 | if (!main_clock) { |
679 | do { | 691 | do { |
680 | tmp = at91_sys_read(AT91_CKGR_MCFR); | 692 | tmp = at91_pmc_read(AT91_CKGR_MCFR); |
681 | } while (!(tmp & AT91_PMC_MAINRDY)); | 693 | } while (!(tmp & AT91_PMC_MAINRDY)); |
682 | main_clock = (tmp & AT91_PMC_MAINF) * (AT91_SLOW_CLOCK / 16); | 694 | main_clock = (tmp & AT91_PMC_MAINF) * (AT91_SLOW_CLOCK / 16); |
683 | } | 695 | } |
684 | main_clk.rate_hz = main_clock; | 696 | main_clk.rate_hz = main_clock; |
685 | 697 | ||
686 | /* report if PLLA is more than mildly overclocked */ | 698 | /* report if PLLA is more than mildly overclocked */ |
687 | plla.rate_hz = at91_pll_rate(&plla, main_clock, at91_sys_read(AT91_CKGR_PLLAR)); | 699 | plla.rate_hz = at91_pll_rate(&plla, main_clock, at91_pmc_read(AT91_CKGR_PLLAR)); |
688 | if (cpu_has_300M_plla()) { | 700 | if (cpu_has_300M_plla()) { |
689 | if (plla.rate_hz > 300000000) | 701 | if (plla.rate_hz > 300000000) |
690 | pll_overclock = true; | 702 | pll_overclock = true; |
@@ -699,7 +711,7 @@ int __init at91_clock_init(unsigned long main_clock) | |||
699 | pr_info("Clocks: PLLA overclocked, %ld MHz\n", plla.rate_hz / 1000000); | 711 | pr_info("Clocks: PLLA overclocked, %ld MHz\n", plla.rate_hz / 1000000); |
700 | 712 | ||
701 | if (cpu_has_plladiv2()) { | 713 | if (cpu_has_plladiv2()) { |
702 | mckr = at91_sys_read(AT91_PMC_MCKR); | 714 | mckr = at91_pmc_read(AT91_PMC_MCKR); |
703 | plla.rate_hz /= (1 << ((mckr & AT91_PMC_PLLADIV2) >> 12)); /* plla divisor by 2 */ | 715 | plla.rate_hz /= (1 << ((mckr & AT91_PMC_PLLADIV2) >> 12)); /* plla divisor by 2 */ |
704 | } | 716 | } |
705 | 717 | ||
@@ -739,7 +751,7 @@ int __init at91_clock_init(unsigned long main_clock) | |||
739 | * MCK and CPU derive from one of those primary clocks. | 751 | * MCK and CPU derive from one of those primary clocks. |
740 | * For now, assume this parentage won't change. | 752 | * For now, assume this parentage won't change. |
741 | */ | 753 | */ |
742 | mckr = at91_sys_read(AT91_PMC_MCKR); | 754 | mckr = at91_pmc_read(AT91_PMC_MCKR); |
743 | mck.parent = at91_css_to_clk(mckr & AT91_PMC_CSS); | 755 | mck.parent = at91_css_to_clk(mckr & AT91_PMC_CSS); |
744 | freq = mck.parent->rate_hz; | 756 | freq = mck.parent->rate_hz; |
745 | freq /= pmc_prescaler_divider(mckr); /* prescale */ | 757 | freq /= pmc_prescaler_divider(mckr); /* prescale */ |
@@ -812,9 +824,15 @@ static int __init at91_clock_reset(void) | |||
812 | pr_debug("Clocks: disable unused %s\n", clk->name); | 824 | pr_debug("Clocks: disable unused %s\n", clk->name); |
813 | } | 825 | } |
814 | 826 | ||
815 | at91_sys_write(AT91_PMC_PCDR, pcdr); | 827 | at91_pmc_write(AT91_PMC_PCDR, pcdr); |
816 | at91_sys_write(AT91_PMC_SCDR, scdr); | 828 | at91_pmc_write(AT91_PMC_SCDR, scdr); |
817 | 829 | ||
818 | return 0; | 830 | return 0; |
819 | } | 831 | } |
820 | late_initcall(at91_clock_reset); | 832 | late_initcall(at91_clock_reset); |
833 | |||
834 | void at91sam9_idle(void) | ||
835 | { | ||
836 | at91_pmc_write(AT91_PMC_SCDR, AT91_PMC_PCK); | ||
837 | cpu_do_idle(); | ||
838 | } | ||
diff --git a/arch/arm/mach-at91/generic.h b/arch/arm/mach-at91/generic.h index 7e8280e798c1..459f01a4a546 100644 --- a/arch/arm/mach-at91/generic.h +++ b/arch/arm/mach-at91/generic.h | |||
@@ -9,6 +9,7 @@ | |||
9 | */ | 9 | */ |
10 | 10 | ||
11 | #include <linux/clkdev.h> | 11 | #include <linux/clkdev.h> |
12 | #include <linux/of.h> | ||
12 | 13 | ||
13 | /* Map io */ | 14 | /* Map io */ |
14 | extern void __init at91_map_io(void); | 15 | extern void __init at91_map_io(void); |
@@ -25,9 +26,13 @@ extern void __init at91_init_irq_default(void); | |||
25 | extern void __init at91_init_interrupts(unsigned int priority[]); | 26 | extern void __init at91_init_interrupts(unsigned int priority[]); |
26 | extern void __init at91x40_init_interrupts(unsigned int priority[]); | 27 | extern void __init at91x40_init_interrupts(unsigned int priority[]); |
27 | extern void __init at91_aic_init(unsigned int priority[]); | 28 | extern void __init at91_aic_init(unsigned int priority[]); |
29 | extern int __init at91_aic_of_init(struct device_node *node, | ||
30 | struct device_node *parent); | ||
31 | |||
28 | 32 | ||
29 | /* Timer */ | 33 | /* Timer */ |
30 | struct sys_timer; | 34 | struct sys_timer; |
35 | extern void at91rm9200_ioremap_st(u32 addr); | ||
31 | extern struct sys_timer at91rm9200_timer; | 36 | extern struct sys_timer at91rm9200_timer; |
32 | extern void at91sam926x_ioremap_pit(u32 addr); | 37 | extern void at91sam926x_ioremap_pit(u32 addr); |
33 | extern struct sys_timer at91sam926x_timer; | 38 | extern struct sys_timer at91sam926x_timer; |
@@ -56,6 +61,9 @@ struct device; | |||
56 | extern void at91_irq_suspend(void); | 61 | extern void at91_irq_suspend(void); |
57 | extern void at91_irq_resume(void); | 62 | extern void at91_irq_resume(void); |
58 | 63 | ||
64 | /* idle */ | ||
65 | extern void at91sam9_idle(void); | ||
66 | |||
59 | /* reset */ | 67 | /* reset */ |
60 | extern void at91_ioremap_rstc(u32 base_addr); | 68 | extern void at91_ioremap_rstc(u32 base_addr); |
61 | extern void at91sam9_alt_restart(char, const char *); | 69 | extern void at91sam9_alt_restart(char, const char *); |
@@ -64,6 +72,12 @@ extern void at91sam9g45_restart(char, const char *); | |||
64 | /* shutdown */ | 72 | /* shutdown */ |
65 | extern void at91_ioremap_shdwc(u32 base_addr); | 73 | extern void at91_ioremap_shdwc(u32 base_addr); |
66 | 74 | ||
75 | /* Matrix */ | ||
76 | extern void at91_ioremap_matrix(u32 base_addr); | ||
77 | |||
78 | /* Ram Controler */ | ||
79 | extern void at91_ioremap_ramc(int id, u32 addr, u32 size); | ||
80 | |||
67 | /* GPIO */ | 81 | /* GPIO */ |
68 | #define AT91RM9200_PQFP 3 /* AT91RM9200 PQFP package has 3 banks */ | 82 | #define AT91RM9200_PQFP 3 /* AT91RM9200 PQFP package has 3 banks */ |
69 | #define AT91RM9200_BGA 4 /* AT91RM9200 BGA package has 4 banks */ | 83 | #define AT91RM9200_BGA 4 /* AT91RM9200 BGA package has 4 banks */ |
@@ -74,5 +88,7 @@ struct at91_gpio_bank { | |||
74 | }; | 88 | }; |
75 | extern void __init at91_gpio_init(struct at91_gpio_bank *, int nr_banks); | 89 | extern void __init at91_gpio_init(struct at91_gpio_bank *, int nr_banks); |
76 | extern void __init at91_gpio_irq_setup(void); | 90 | extern void __init at91_gpio_irq_setup(void); |
91 | extern int __init at91_gpio_of_irq_setup(struct device_node *node, | ||
92 | struct device_node *parent); | ||
77 | 93 | ||
78 | extern int at91_extern_irq; | 94 | extern int at91_extern_irq; |
diff --git a/arch/arm/mach-at91/gpio.c b/arch/arm/mach-at91/gpio.c index 74d6783eeabb..325837a264c9 100644 --- a/arch/arm/mach-at91/gpio.c +++ b/arch/arm/mach-at91/gpio.c | |||
@@ -11,6 +11,7 @@ | |||
11 | 11 | ||
12 | #include <linux/clk.h> | 12 | #include <linux/clk.h> |
13 | #include <linux/errno.h> | 13 | #include <linux/errno.h> |
14 | #include <linux/device.h> | ||
14 | #include <linux/gpio.h> | 15 | #include <linux/gpio.h> |
15 | #include <linux/interrupt.h> | 16 | #include <linux/interrupt.h> |
16 | #include <linux/irq.h> | 17 | #include <linux/irq.h> |
@@ -20,6 +21,10 @@ | |||
20 | #include <linux/list.h> | 21 | #include <linux/list.h> |
21 | #include <linux/module.h> | 22 | #include <linux/module.h> |
22 | #include <linux/io.h> | 23 | #include <linux/io.h> |
24 | #include <linux/irqdomain.h> | ||
25 | #include <linux/of_address.h> | ||
26 | #include <linux/of_irq.h> | ||
27 | #include <linux/of_gpio.h> | ||
23 | 28 | ||
24 | #include <mach/hardware.h> | 29 | #include <mach/hardware.h> |
25 | #include <mach/at91_pio.h> | 30 | #include <mach/at91_pio.h> |
@@ -29,9 +34,12 @@ | |||
29 | struct at91_gpio_chip { | 34 | struct at91_gpio_chip { |
30 | struct gpio_chip chip; | 35 | struct gpio_chip chip; |
31 | struct at91_gpio_chip *next; /* Bank sharing same clock */ | 36 | struct at91_gpio_chip *next; /* Bank sharing same clock */ |
32 | int id; /* ID of register bank */ | 37 | int pioc_hwirq; /* PIO bank interrupt identifier on AIC */ |
33 | void __iomem *regbase; /* Base of register bank */ | 38 | int pioc_virq; /* PIO bank Linux virtual interrupt */ |
39 | int pioc_idx; /* PIO bank index */ | ||
40 | void __iomem *regbase; /* PIO bank virtual address */ | ||
34 | struct clk *clock; /* associated clock */ | 41 | struct clk *clock; /* associated clock */ |
42 | struct irq_domain *domain; /* associated irq domain */ | ||
35 | }; | 43 | }; |
36 | 44 | ||
37 | #define to_at91_gpio_chip(c) container_of(c, struct at91_gpio_chip, chip) | 45 | #define to_at91_gpio_chip(c) container_of(c, struct at91_gpio_chip, chip) |
@@ -43,8 +51,9 @@ static int at91_gpiolib_direction_output(struct gpio_chip *chip, | |||
43 | unsigned offset, int val); | 51 | unsigned offset, int val); |
44 | static int at91_gpiolib_direction_input(struct gpio_chip *chip, | 52 | static int at91_gpiolib_direction_input(struct gpio_chip *chip, |
45 | unsigned offset); | 53 | unsigned offset); |
54 | static int at91_gpiolib_to_irq(struct gpio_chip *chip, unsigned offset); | ||
46 | 55 | ||
47 | #define AT91_GPIO_CHIP(name, base_gpio, nr_gpio) \ | 56 | #define AT91_GPIO_CHIP(name, nr_gpio) \ |
48 | { \ | 57 | { \ |
49 | .chip = { \ | 58 | .chip = { \ |
50 | .label = name, \ | 59 | .label = name, \ |
@@ -53,20 +62,28 @@ static int at91_gpiolib_direction_input(struct gpio_chip *chip, | |||
53 | .get = at91_gpiolib_get, \ | 62 | .get = at91_gpiolib_get, \ |
54 | .set = at91_gpiolib_set, \ | 63 | .set = at91_gpiolib_set, \ |
55 | .dbg_show = at91_gpiolib_dbg_show, \ | 64 | .dbg_show = at91_gpiolib_dbg_show, \ |
56 | .base = base_gpio, \ | 65 | .to_irq = at91_gpiolib_to_irq, \ |
57 | .ngpio = nr_gpio, \ | 66 | .ngpio = nr_gpio, \ |
58 | }, \ | 67 | }, \ |
59 | } | 68 | } |
60 | 69 | ||
61 | static struct at91_gpio_chip gpio_chip[] = { | 70 | static struct at91_gpio_chip gpio_chip[] = { |
62 | AT91_GPIO_CHIP("pioA", 0x00, 32), | 71 | AT91_GPIO_CHIP("pioA", 32), |
63 | AT91_GPIO_CHIP("pioB", 0x20, 32), | 72 | AT91_GPIO_CHIP("pioB", 32), |
64 | AT91_GPIO_CHIP("pioC", 0x40, 32), | 73 | AT91_GPIO_CHIP("pioC", 32), |
65 | AT91_GPIO_CHIP("pioD", 0x60, 32), | 74 | AT91_GPIO_CHIP("pioD", 32), |
66 | AT91_GPIO_CHIP("pioE", 0x80, 32), | 75 | AT91_GPIO_CHIP("pioE", 32), |
67 | }; | 76 | }; |
68 | 77 | ||
69 | static int gpio_banks; | 78 | static int gpio_banks; |
79 | static unsigned long at91_gpio_caps; | ||
80 | |||
81 | /* All PIO controllers support PIO3 features */ | ||
82 | #define AT91_GPIO_CAP_PIO3 (1 << 0) | ||
83 | |||
84 | #define has_pio3() (at91_gpio_caps & AT91_GPIO_CAP_PIO3) | ||
85 | |||
86 | /*--------------------------------------------------------------------------*/ | ||
70 | 87 | ||
71 | static inline void __iomem *pin_to_controller(unsigned pin) | 88 | static inline void __iomem *pin_to_controller(unsigned pin) |
72 | { | 89 | { |
@@ -83,6 +100,25 @@ static inline unsigned pin_to_mask(unsigned pin) | |||
83 | } | 100 | } |
84 | 101 | ||
85 | 102 | ||
103 | static char peripheral_function(void __iomem *pio, unsigned mask) | ||
104 | { | ||
105 | char ret = 'X'; | ||
106 | u8 select; | ||
107 | |||
108 | if (pio) { | ||
109 | if (has_pio3()) { | ||
110 | select = !!(__raw_readl(pio + PIO_ABCDSR1) & mask); | ||
111 | select |= (!!(__raw_readl(pio + PIO_ABCDSR2) & mask) << 1); | ||
112 | ret = 'A' + select; | ||
113 | } else { | ||
114 | ret = __raw_readl(pio + PIO_ABSR) & mask ? | ||
115 | 'B' : 'A'; | ||
116 | } | ||
117 | } | ||
118 | |||
119 | return ret; | ||
120 | } | ||
121 | |||
86 | /*--------------------------------------------------------------------------*/ | 122 | /*--------------------------------------------------------------------------*/ |
87 | 123 | ||
88 | /* Not all hardware capabilities are exposed through these calls; they | 124 | /* Not all hardware capabilities are exposed through these calls; they |
@@ -130,7 +166,14 @@ int __init_or_module at91_set_A_periph(unsigned pin, int use_pullup) | |||
130 | 166 | ||
131 | __raw_writel(mask, pio + PIO_IDR); | 167 | __raw_writel(mask, pio + PIO_IDR); |
132 | __raw_writel(mask, pio + (use_pullup ? PIO_PUER : PIO_PUDR)); | 168 | __raw_writel(mask, pio + (use_pullup ? PIO_PUER : PIO_PUDR)); |
133 | __raw_writel(mask, pio + PIO_ASR); | 169 | if (has_pio3()) { |
170 | __raw_writel(__raw_readl(pio + PIO_ABCDSR1) & ~mask, | ||
171 | pio + PIO_ABCDSR1); | ||
172 | __raw_writel(__raw_readl(pio + PIO_ABCDSR2) & ~mask, | ||
173 | pio + PIO_ABCDSR2); | ||
174 | } else { | ||
175 | __raw_writel(mask, pio + PIO_ASR); | ||
176 | } | ||
134 | __raw_writel(mask, pio + PIO_PDR); | 177 | __raw_writel(mask, pio + PIO_PDR); |
135 | return 0; | 178 | return 0; |
136 | } | 179 | } |
@@ -150,7 +193,14 @@ int __init_or_module at91_set_B_periph(unsigned pin, int use_pullup) | |||
150 | 193 | ||
151 | __raw_writel(mask, pio + PIO_IDR); | 194 | __raw_writel(mask, pio + PIO_IDR); |
152 | __raw_writel(mask, pio + (use_pullup ? PIO_PUER : PIO_PUDR)); | 195 | __raw_writel(mask, pio + (use_pullup ? PIO_PUER : PIO_PUDR)); |
153 | __raw_writel(mask, pio + PIO_BSR); | 196 | if (has_pio3()) { |
197 | __raw_writel(__raw_readl(pio + PIO_ABCDSR1) | mask, | ||
198 | pio + PIO_ABCDSR1); | ||
199 | __raw_writel(__raw_readl(pio + PIO_ABCDSR2) & ~mask, | ||
200 | pio + PIO_ABCDSR2); | ||
201 | } else { | ||
202 | __raw_writel(mask, pio + PIO_BSR); | ||
203 | } | ||
154 | __raw_writel(mask, pio + PIO_PDR); | 204 | __raw_writel(mask, pio + PIO_PDR); |
155 | return 0; | 205 | return 0; |
156 | } | 206 | } |
@@ -158,8 +208,50 @@ EXPORT_SYMBOL(at91_set_B_periph); | |||
158 | 208 | ||
159 | 209 | ||
160 | /* | 210 | /* |
161 | * mux the pin to the gpio controller (instead of "A" or "B" peripheral), and | 211 | * mux the pin to the "C" internal peripheral role. |
162 | * configure it for an input. | 212 | */ |
213 | int __init_or_module at91_set_C_periph(unsigned pin, int use_pullup) | ||
214 | { | ||
215 | void __iomem *pio = pin_to_controller(pin); | ||
216 | unsigned mask = pin_to_mask(pin); | ||
217 | |||
218 | if (!pio || !has_pio3()) | ||
219 | return -EINVAL; | ||
220 | |||
221 | __raw_writel(mask, pio + PIO_IDR); | ||
222 | __raw_writel(mask, pio + (use_pullup ? PIO_PUER : PIO_PUDR)); | ||
223 | __raw_writel(__raw_readl(pio + PIO_ABCDSR1) & ~mask, pio + PIO_ABCDSR1); | ||
224 | __raw_writel(__raw_readl(pio + PIO_ABCDSR2) | mask, pio + PIO_ABCDSR2); | ||
225 | __raw_writel(mask, pio + PIO_PDR); | ||
226 | return 0; | ||
227 | } | ||
228 | EXPORT_SYMBOL(at91_set_C_periph); | ||
229 | |||
230 | |||
231 | /* | ||
232 | * mux the pin to the "D" internal peripheral role. | ||
233 | */ | ||
234 | int __init_or_module at91_set_D_periph(unsigned pin, int use_pullup) | ||
235 | { | ||
236 | void __iomem *pio = pin_to_controller(pin); | ||
237 | unsigned mask = pin_to_mask(pin); | ||
238 | |||
239 | if (!pio || !has_pio3()) | ||
240 | return -EINVAL; | ||
241 | |||
242 | __raw_writel(mask, pio + PIO_IDR); | ||
243 | __raw_writel(mask, pio + (use_pullup ? PIO_PUER : PIO_PUDR)); | ||
244 | __raw_writel(__raw_readl(pio + PIO_ABCDSR1) | mask, pio + PIO_ABCDSR1); | ||
245 | __raw_writel(__raw_readl(pio + PIO_ABCDSR2) | mask, pio + PIO_ABCDSR2); | ||
246 | __raw_writel(mask, pio + PIO_PDR); | ||
247 | return 0; | ||
248 | } | ||
249 | EXPORT_SYMBOL(at91_set_D_periph); | ||
250 | |||
251 | |||
252 | /* | ||
253 | * mux the pin to the gpio controller (instead of "A", "B", "C" | ||
254 | * or "D" peripheral), and configure it for an input. | ||
163 | */ | 255 | */ |
164 | int __init_or_module at91_set_gpio_input(unsigned pin, int use_pullup) | 256 | int __init_or_module at91_set_gpio_input(unsigned pin, int use_pullup) |
165 | { | 257 | { |
@@ -179,8 +271,8 @@ EXPORT_SYMBOL(at91_set_gpio_input); | |||
179 | 271 | ||
180 | 272 | ||
181 | /* | 273 | /* |
182 | * mux the pin to the gpio controller (instead of "A" or "B" peripheral), | 274 | * mux the pin to the gpio controller (instead of "A", "B", "C" |
183 | * and configure it for an output. | 275 | * or "D" peripheral), and configure it for an output. |
184 | */ | 276 | */ |
185 | int __init_or_module at91_set_gpio_output(unsigned pin, int value) | 277 | int __init_or_module at91_set_gpio_output(unsigned pin, int value) |
186 | { | 278 | { |
@@ -210,12 +302,37 @@ int __init_or_module at91_set_deglitch(unsigned pin, int is_on) | |||
210 | 302 | ||
211 | if (!pio) | 303 | if (!pio) |
212 | return -EINVAL; | 304 | return -EINVAL; |
305 | |||
306 | if (has_pio3() && is_on) | ||
307 | __raw_writel(mask, pio + PIO_IFSCDR); | ||
213 | __raw_writel(mask, pio + (is_on ? PIO_IFER : PIO_IFDR)); | 308 | __raw_writel(mask, pio + (is_on ? PIO_IFER : PIO_IFDR)); |
214 | return 0; | 309 | return 0; |
215 | } | 310 | } |
216 | EXPORT_SYMBOL(at91_set_deglitch); | 311 | EXPORT_SYMBOL(at91_set_deglitch); |
217 | 312 | ||
218 | /* | 313 | /* |
314 | * enable/disable the debounce filter; | ||
315 | */ | ||
316 | int __init_or_module at91_set_debounce(unsigned pin, int is_on, int div) | ||
317 | { | ||
318 | void __iomem *pio = pin_to_controller(pin); | ||
319 | unsigned mask = pin_to_mask(pin); | ||
320 | |||
321 | if (!pio || !has_pio3()) | ||
322 | return -EINVAL; | ||
323 | |||
324 | if (is_on) { | ||
325 | __raw_writel(mask, pio + PIO_IFSCER); | ||
326 | __raw_writel(div & PIO_SCDR_DIV, pio + PIO_SCDR); | ||
327 | __raw_writel(mask, pio + PIO_IFER); | ||
328 | } else { | ||
329 | __raw_writel(mask, pio + PIO_IFDR); | ||
330 | } | ||
331 | return 0; | ||
332 | } | ||
333 | EXPORT_SYMBOL(at91_set_debounce); | ||
334 | |||
335 | /* | ||
219 | * enable/disable the multi-driver; This is only valid for output and | 336 | * enable/disable the multi-driver; This is only valid for output and |
220 | * allows the output pin to run as an open collector output. | 337 | * allows the output pin to run as an open collector output. |
221 | */ | 338 | */ |
@@ -233,6 +350,41 @@ int __init_or_module at91_set_multi_drive(unsigned pin, int is_on) | |||
233 | EXPORT_SYMBOL(at91_set_multi_drive); | 350 | EXPORT_SYMBOL(at91_set_multi_drive); |
234 | 351 | ||
235 | /* | 352 | /* |
353 | * enable/disable the pull-down. | ||
354 | * If pull-up already enabled while calling the function, we disable it. | ||
355 | */ | ||
356 | int __init_or_module at91_set_pulldown(unsigned pin, int is_on) | ||
357 | { | ||
358 | void __iomem *pio = pin_to_controller(pin); | ||
359 | unsigned mask = pin_to_mask(pin); | ||
360 | |||
361 | if (!pio || !has_pio3()) | ||
362 | return -EINVAL; | ||
363 | |||
364 | /* Disable pull-up anyway */ | ||
365 | __raw_writel(mask, pio + PIO_PUDR); | ||
366 | __raw_writel(mask, pio + (is_on ? PIO_PPDER : PIO_PPDDR)); | ||
367 | return 0; | ||
368 | } | ||
369 | EXPORT_SYMBOL(at91_set_pulldown); | ||
370 | |||
371 | /* | ||
372 | * disable Schmitt trigger | ||
373 | */ | ||
374 | int __init_or_module at91_disable_schmitt_trig(unsigned pin) | ||
375 | { | ||
376 | void __iomem *pio = pin_to_controller(pin); | ||
377 | unsigned mask = pin_to_mask(pin); | ||
378 | |||
379 | if (!pio || !has_pio3()) | ||
380 | return -EINVAL; | ||
381 | |||
382 | __raw_writel(__raw_readl(pio + PIO_SCHMITT) | mask, pio + PIO_SCHMITT); | ||
383 | return 0; | ||
384 | } | ||
385 | EXPORT_SYMBOL(at91_disable_schmitt_trig); | ||
386 | |||
387 | /* | ||
236 | * assuming the pin is muxed as a gpio output, set its value. | 388 | * assuming the pin is muxed as a gpio output, set its value. |
237 | */ | 389 | */ |
238 | int at91_set_gpio_value(unsigned pin, int value) | 390 | int at91_set_gpio_value(unsigned pin, int value) |
@@ -273,9 +425,9 @@ static u32 backups[MAX_GPIO_BANKS]; | |||
273 | 425 | ||
274 | static int gpio_irq_set_wake(struct irq_data *d, unsigned state) | 426 | static int gpio_irq_set_wake(struct irq_data *d, unsigned state) |
275 | { | 427 | { |
276 | unsigned pin = irq_to_gpio(d->irq); | 428 | struct at91_gpio_chip *at91_gpio = irq_data_get_irq_chip_data(d); |
277 | unsigned mask = pin_to_mask(pin); | 429 | unsigned mask = 1 << d->hwirq; |
278 | unsigned bank = pin / 32; | 430 | unsigned bank = at91_gpio->pioc_idx; |
279 | 431 | ||
280 | if (unlikely(bank >= MAX_GPIO_BANKS)) | 432 | if (unlikely(bank >= MAX_GPIO_BANKS)) |
281 | return -EINVAL; | 433 | return -EINVAL; |
@@ -285,7 +437,7 @@ static int gpio_irq_set_wake(struct irq_data *d, unsigned state) | |||
285 | else | 437 | else |
286 | wakeups[bank] &= ~mask; | 438 | wakeups[bank] &= ~mask; |
287 | 439 | ||
288 | irq_set_irq_wake(gpio_chip[bank].id, state); | 440 | irq_set_irq_wake(at91_gpio->pioc_virq, state); |
289 | 441 | ||
290 | return 0; | 442 | return 0; |
291 | } | 443 | } |
@@ -301,9 +453,10 @@ void at91_gpio_suspend(void) | |||
301 | __raw_writel(backups[i], pio + PIO_IDR); | 453 | __raw_writel(backups[i], pio + PIO_IDR); |
302 | __raw_writel(wakeups[i], pio + PIO_IER); | 454 | __raw_writel(wakeups[i], pio + PIO_IER); |
303 | 455 | ||
304 | if (!wakeups[i]) | 456 | if (!wakeups[i]) { |
457 | clk_unprepare(gpio_chip[i].clock); | ||
305 | clk_disable(gpio_chip[i].clock); | 458 | clk_disable(gpio_chip[i].clock); |
306 | else { | 459 | } else { |
307 | #ifdef CONFIG_PM_DEBUG | 460 | #ifdef CONFIG_PM_DEBUG |
308 | printk(KERN_DEBUG "GPIO-%c may wake for %08x\n", 'A'+i, wakeups[i]); | 461 | printk(KERN_DEBUG "GPIO-%c may wake for %08x\n", 'A'+i, wakeups[i]); |
309 | #endif | 462 | #endif |
@@ -318,8 +471,10 @@ void at91_gpio_resume(void) | |||
318 | for (i = 0; i < gpio_banks; i++) { | 471 | for (i = 0; i < gpio_banks; i++) { |
319 | void __iomem *pio = gpio_chip[i].regbase; | 472 | void __iomem *pio = gpio_chip[i].regbase; |
320 | 473 | ||
321 | if (!wakeups[i]) | 474 | if (!wakeups[i]) { |
322 | clk_enable(gpio_chip[i].clock); | 475 | if (clk_prepare(gpio_chip[i].clock) == 0) |
476 | clk_enable(gpio_chip[i].clock); | ||
477 | } | ||
323 | 478 | ||
324 | __raw_writel(wakeups[i], pio + PIO_IDR); | 479 | __raw_writel(wakeups[i], pio + PIO_IDR); |
325 | __raw_writel(backups[i], pio + PIO_IER); | 480 | __raw_writel(backups[i], pio + PIO_IER); |
@@ -335,7 +490,10 @@ void at91_gpio_resume(void) | |||
335 | * To use any AT91_PIN_* as an externally triggered IRQ, first call | 490 | * To use any AT91_PIN_* as an externally triggered IRQ, first call |
336 | * at91_set_gpio_input() then maybe enable its glitch filter. | 491 | * at91_set_gpio_input() then maybe enable its glitch filter. |
337 | * Then just request_irq() with the pin ID; it works like any ARM IRQ | 492 | * Then just request_irq() with the pin ID; it works like any ARM IRQ |
338 | * handler, though it always triggers on rising and falling edges. | 493 | * handler. |
494 | * First implementation always triggers on rising and falling edges | ||
495 | * whereas the newer PIO3 can be additionally configured to trigger on | ||
496 | * level, edge with any polarity. | ||
339 | * | 497 | * |
340 | * Alternatively, certain pins may be used directly as IRQ0..IRQ6 after | 498 | * Alternatively, certain pins may be used directly as IRQ0..IRQ6 after |
341 | * configuring them with at91_set_a_periph() or at91_set_b_periph(). | 499 | * configuring them with at91_set_a_periph() or at91_set_b_periph(). |
@@ -344,9 +502,9 @@ void at91_gpio_resume(void) | |||
344 | 502 | ||
345 | static void gpio_irq_mask(struct irq_data *d) | 503 | static void gpio_irq_mask(struct irq_data *d) |
346 | { | 504 | { |
347 | unsigned pin = irq_to_gpio(d->irq); | 505 | struct at91_gpio_chip *at91_gpio = irq_data_get_irq_chip_data(d); |
348 | void __iomem *pio = pin_to_controller(pin); | 506 | void __iomem *pio = at91_gpio->regbase; |
349 | unsigned mask = pin_to_mask(pin); | 507 | unsigned mask = 1 << d->hwirq; |
350 | 508 | ||
351 | if (pio) | 509 | if (pio) |
352 | __raw_writel(mask, pio + PIO_IDR); | 510 | __raw_writel(mask, pio + PIO_IDR); |
@@ -354,9 +512,9 @@ static void gpio_irq_mask(struct irq_data *d) | |||
354 | 512 | ||
355 | static void gpio_irq_unmask(struct irq_data *d) | 513 | static void gpio_irq_unmask(struct irq_data *d) |
356 | { | 514 | { |
357 | unsigned pin = irq_to_gpio(d->irq); | 515 | struct at91_gpio_chip *at91_gpio = irq_data_get_irq_chip_data(d); |
358 | void __iomem *pio = pin_to_controller(pin); | 516 | void __iomem *pio = at91_gpio->regbase; |
359 | unsigned mask = pin_to_mask(pin); | 517 | unsigned mask = 1 << d->hwirq; |
360 | 518 | ||
361 | if (pio) | 519 | if (pio) |
362 | __raw_writel(mask, pio + PIO_IER); | 520 | __raw_writel(mask, pio + PIO_IER); |
@@ -373,23 +531,66 @@ static int gpio_irq_type(struct irq_data *d, unsigned type) | |||
373 | } | 531 | } |
374 | } | 532 | } |
375 | 533 | ||
534 | /* Alternate irq type for PIO3 support */ | ||
535 | static int alt_gpio_irq_type(struct irq_data *d, unsigned type) | ||
536 | { | ||
537 | struct at91_gpio_chip *at91_gpio = irq_data_get_irq_chip_data(d); | ||
538 | void __iomem *pio = at91_gpio->regbase; | ||
539 | unsigned mask = 1 << d->hwirq; | ||
540 | |||
541 | switch (type) { | ||
542 | case IRQ_TYPE_EDGE_RISING: | ||
543 | __raw_writel(mask, pio + PIO_ESR); | ||
544 | __raw_writel(mask, pio + PIO_REHLSR); | ||
545 | break; | ||
546 | case IRQ_TYPE_EDGE_FALLING: | ||
547 | __raw_writel(mask, pio + PIO_ESR); | ||
548 | __raw_writel(mask, pio + PIO_FELLSR); | ||
549 | break; | ||
550 | case IRQ_TYPE_LEVEL_LOW: | ||
551 | __raw_writel(mask, pio + PIO_LSR); | ||
552 | __raw_writel(mask, pio + PIO_FELLSR); | ||
553 | break; | ||
554 | case IRQ_TYPE_LEVEL_HIGH: | ||
555 | __raw_writel(mask, pio + PIO_LSR); | ||
556 | __raw_writel(mask, pio + PIO_REHLSR); | ||
557 | break; | ||
558 | case IRQ_TYPE_EDGE_BOTH: | ||
559 | /* | ||
560 | * disable additional interrupt modes: | ||
561 | * fall back to default behavior | ||
562 | */ | ||
563 | __raw_writel(mask, pio + PIO_AIMDR); | ||
564 | return 0; | ||
565 | case IRQ_TYPE_NONE: | ||
566 | default: | ||
567 | pr_warn("AT91: No type for irq %d\n", gpio_to_irq(d->irq)); | ||
568 | return -EINVAL; | ||
569 | } | ||
570 | |||
571 | /* enable additional interrupt modes */ | ||
572 | __raw_writel(mask, pio + PIO_AIMER); | ||
573 | |||
574 | return 0; | ||
575 | } | ||
576 | |||
376 | static struct irq_chip gpio_irqchip = { | 577 | static struct irq_chip gpio_irqchip = { |
377 | .name = "GPIO", | 578 | .name = "GPIO", |
378 | .irq_disable = gpio_irq_mask, | 579 | .irq_disable = gpio_irq_mask, |
379 | .irq_mask = gpio_irq_mask, | 580 | .irq_mask = gpio_irq_mask, |
380 | .irq_unmask = gpio_irq_unmask, | 581 | .irq_unmask = gpio_irq_unmask, |
381 | .irq_set_type = gpio_irq_type, | 582 | /* .irq_set_type is set dynamically */ |
382 | .irq_set_wake = gpio_irq_set_wake, | 583 | .irq_set_wake = gpio_irq_set_wake, |
383 | }; | 584 | }; |
384 | 585 | ||
385 | static void gpio_irq_handler(unsigned irq, struct irq_desc *desc) | 586 | static void gpio_irq_handler(unsigned irq, struct irq_desc *desc) |
386 | { | 587 | { |
387 | unsigned irq_pin; | ||
388 | struct irq_data *idata = irq_desc_get_irq_data(desc); | 588 | struct irq_data *idata = irq_desc_get_irq_data(desc); |
389 | struct irq_chip *chip = irq_data_get_irq_chip(idata); | 589 | struct irq_chip *chip = irq_data_get_irq_chip(idata); |
390 | struct at91_gpio_chip *at91_gpio = irq_data_get_irq_chip_data(idata); | 590 | struct at91_gpio_chip *at91_gpio = irq_data_get_irq_chip_data(idata); |
391 | void __iomem *pio = at91_gpio->regbase; | 591 | void __iomem *pio = at91_gpio->regbase; |
392 | u32 isr; | 592 | unsigned long isr; |
593 | int n; | ||
393 | 594 | ||
394 | /* temporarily mask (level sensitive) parent IRQ */ | 595 | /* temporarily mask (level sensitive) parent IRQ */ |
395 | chip->irq_ack(idata); | 596 | chip->irq_ack(idata); |
@@ -407,13 +608,10 @@ static void gpio_irq_handler(unsigned irq, struct irq_desc *desc) | |||
407 | continue; | 608 | continue; |
408 | } | 609 | } |
409 | 610 | ||
410 | irq_pin = gpio_to_irq(at91_gpio->chip.base); | 611 | n = find_first_bit(&isr, BITS_PER_LONG); |
411 | 612 | while (n < BITS_PER_LONG) { | |
412 | while (isr) { | 613 | generic_handle_irq(irq_find_mapping(at91_gpio->domain, n)); |
413 | if (isr & 1) | 614 | n = find_next_bit(&isr, BITS_PER_LONG, n + 1); |
414 | generic_handle_irq(irq_pin); | ||
415 | irq_pin++; | ||
416 | isr >>= 1; | ||
417 | } | 615 | } |
418 | } | 616 | } |
419 | chip->irq_unmask(idata); | 617 | chip->irq_unmask(idata); |
@@ -424,6 +622,33 @@ static void gpio_irq_handler(unsigned irq, struct irq_desc *desc) | |||
424 | 622 | ||
425 | #ifdef CONFIG_DEBUG_FS | 623 | #ifdef CONFIG_DEBUG_FS |
426 | 624 | ||
625 | static void gpio_printf(struct seq_file *s, void __iomem *pio, unsigned mask) | ||
626 | { | ||
627 | char *trigger = NULL; | ||
628 | char *polarity = NULL; | ||
629 | |||
630 | if (__raw_readl(pio + PIO_IMR) & mask) { | ||
631 | if (!has_pio3() || !(__raw_readl(pio + PIO_AIMMR) & mask )) { | ||
632 | trigger = "edge"; | ||
633 | polarity = "both"; | ||
634 | } else { | ||
635 | if (__raw_readl(pio + PIO_ELSR) & mask) { | ||
636 | trigger = "level"; | ||
637 | polarity = __raw_readl(pio + PIO_FRLHSR) & mask ? | ||
638 | "high" : "low"; | ||
639 | } else { | ||
640 | trigger = "edge"; | ||
641 | polarity = __raw_readl(pio + PIO_FRLHSR) & mask ? | ||
642 | "rising" : "falling"; | ||
643 | } | ||
644 | } | ||
645 | seq_printf(s, "IRQ:%s-%s\t", trigger, polarity); | ||
646 | } else { | ||
647 | seq_printf(s, "GPIO:%s\t\t", | ||
648 | __raw_readl(pio + PIO_PDSR) & mask ? "1" : "0"); | ||
649 | } | ||
650 | } | ||
651 | |||
427 | static int at91_gpio_show(struct seq_file *s, void *unused) | 652 | static int at91_gpio_show(struct seq_file *s, void *unused) |
428 | { | 653 | { |
429 | int bank, j; | 654 | int bank, j; |
@@ -431,7 +656,7 @@ static int at91_gpio_show(struct seq_file *s, void *unused) | |||
431 | /* print heading */ | 656 | /* print heading */ |
432 | seq_printf(s, "Pin\t"); | 657 | seq_printf(s, "Pin\t"); |
433 | for (bank = 0; bank < gpio_banks; bank++) { | 658 | for (bank = 0; bank < gpio_banks; bank++) { |
434 | seq_printf(s, "PIO%c\t", 'A' + bank); | 659 | seq_printf(s, "PIO%c\t\t", 'A' + bank); |
435 | }; | 660 | }; |
436 | seq_printf(s, "\n\n"); | 661 | seq_printf(s, "\n\n"); |
437 | 662 | ||
@@ -445,11 +670,10 @@ static int at91_gpio_show(struct seq_file *s, void *unused) | |||
445 | unsigned mask = pin_to_mask(pin); | 670 | unsigned mask = pin_to_mask(pin); |
446 | 671 | ||
447 | if (__raw_readl(pio + PIO_PSR) & mask) | 672 | if (__raw_readl(pio + PIO_PSR) & mask) |
448 | seq_printf(s, "GPIO:%s", __raw_readl(pio + PIO_PDSR) & mask ? "1" : "0"); | 673 | gpio_printf(s, pio, mask); |
449 | else | 674 | else |
450 | seq_printf(s, "%s", __raw_readl(pio + PIO_ABSR) & mask ? "B" : "A"); | 675 | seq_printf(s, "%c\t\t", |
451 | 676 | peripheral_function(pio, mask)); | |
452 | seq_printf(s, "\t"); | ||
453 | } | 677 | } |
454 | 678 | ||
455 | seq_printf(s, "\n"); | 679 | seq_printf(s, "\n"); |
@@ -488,46 +712,152 @@ postcore_initcall(at91_gpio_debugfs_init); | |||
488 | */ | 712 | */ |
489 | static struct lock_class_key gpio_lock_class; | 713 | static struct lock_class_key gpio_lock_class; |
490 | 714 | ||
715 | #if defined(CONFIG_OF) | ||
716 | static int at91_gpio_irq_map(struct irq_domain *h, unsigned int virq, | ||
717 | irq_hw_number_t hw) | ||
718 | { | ||
719 | struct at91_gpio_chip *at91_gpio = h->host_data; | ||
720 | |||
721 | irq_set_lockdep_class(virq, &gpio_lock_class); | ||
722 | |||
723 | /* | ||
724 | * Can use the "simple" and not "edge" handler since it's | ||
725 | * shorter, and the AIC handles interrupts sanely. | ||
726 | */ | ||
727 | irq_set_chip_and_handler(virq, &gpio_irqchip, | ||
728 | handle_simple_irq); | ||
729 | set_irq_flags(virq, IRQF_VALID); | ||
730 | irq_set_chip_data(virq, at91_gpio); | ||
731 | |||
732 | return 0; | ||
733 | } | ||
734 | |||
735 | static struct irq_domain_ops at91_gpio_ops = { | ||
736 | .map = at91_gpio_irq_map, | ||
737 | .xlate = irq_domain_xlate_twocell, | ||
738 | }; | ||
739 | |||
740 | int __init at91_gpio_of_irq_setup(struct device_node *node, | ||
741 | struct device_node *parent) | ||
742 | { | ||
743 | struct at91_gpio_chip *prev = NULL; | ||
744 | int alias_idx = of_alias_get_id(node, "gpio"); | ||
745 | struct at91_gpio_chip *at91_gpio = &gpio_chip[alias_idx]; | ||
746 | |||
747 | /* Setup proper .irq_set_type function */ | ||
748 | if (has_pio3()) | ||
749 | gpio_irqchip.irq_set_type = alt_gpio_irq_type; | ||
750 | else | ||
751 | gpio_irqchip.irq_set_type = gpio_irq_type; | ||
752 | |||
753 | /* Disable irqs of this PIO controller */ | ||
754 | __raw_writel(~0, at91_gpio->regbase + PIO_IDR); | ||
755 | |||
756 | /* Setup irq domain */ | ||
757 | at91_gpio->domain = irq_domain_add_linear(node, at91_gpio->chip.ngpio, | ||
758 | &at91_gpio_ops, at91_gpio); | ||
759 | if (!at91_gpio->domain) | ||
760 | panic("at91_gpio.%d: couldn't allocate irq domain (DT).\n", | ||
761 | at91_gpio->pioc_idx); | ||
762 | |||
763 | /* Setup chained handler */ | ||
764 | if (at91_gpio->pioc_idx) | ||
765 | prev = &gpio_chip[at91_gpio->pioc_idx - 1]; | ||
766 | |||
767 | /* The toplevel handler handles one bank of GPIOs, except | ||
768 | * on some SoC it can handles up to three... | ||
769 | * We only set up the handler for the first of the list. | ||
770 | */ | ||
771 | if (prev && prev->next == at91_gpio) | ||
772 | return 0; | ||
773 | |||
774 | at91_gpio->pioc_virq = irq_create_mapping(irq_find_host(parent), | ||
775 | at91_gpio->pioc_hwirq); | ||
776 | irq_set_chip_data(at91_gpio->pioc_virq, at91_gpio); | ||
777 | irq_set_chained_handler(at91_gpio->pioc_virq, gpio_irq_handler); | ||
778 | |||
779 | return 0; | ||
780 | } | ||
781 | #else | ||
782 | int __init at91_gpio_of_irq_setup(struct device_node *node, | ||
783 | struct device_node *parent) | ||
784 | { | ||
785 | return -EINVAL; | ||
786 | } | ||
787 | #endif | ||
788 | |||
789 | /* | ||
790 | * irqdomain initialization: pile up irqdomains on top of AIC range | ||
791 | */ | ||
792 | static void __init at91_gpio_irqdomain(struct at91_gpio_chip *at91_gpio) | ||
793 | { | ||
794 | int irq_base; | ||
795 | |||
796 | irq_base = irq_alloc_descs(-1, 0, at91_gpio->chip.ngpio, 0); | ||
797 | if (irq_base < 0) | ||
798 | panic("at91_gpio.%d: error %d: couldn't allocate IRQ numbers.\n", | ||
799 | at91_gpio->pioc_idx, irq_base); | ||
800 | at91_gpio->domain = irq_domain_add_legacy(NULL, at91_gpio->chip.ngpio, | ||
801 | irq_base, 0, | ||
802 | &irq_domain_simple_ops, NULL); | ||
803 | if (!at91_gpio->domain) | ||
804 | panic("at91_gpio.%d: couldn't allocate irq domain.\n", | ||
805 | at91_gpio->pioc_idx); | ||
806 | } | ||
807 | |||
491 | /* | 808 | /* |
492 | * Called from the processor-specific init to enable GPIO interrupt support. | 809 | * Called from the processor-specific init to enable GPIO interrupt support. |
493 | */ | 810 | */ |
494 | void __init at91_gpio_irq_setup(void) | 811 | void __init at91_gpio_irq_setup(void) |
495 | { | 812 | { |
496 | unsigned pioc, irq = gpio_to_irq(0); | 813 | unsigned pioc; |
814 | int gpio_irqnbr = 0; | ||
497 | struct at91_gpio_chip *this, *prev; | 815 | struct at91_gpio_chip *this, *prev; |
498 | 816 | ||
817 | /* Setup proper .irq_set_type function */ | ||
818 | if (has_pio3()) | ||
819 | gpio_irqchip.irq_set_type = alt_gpio_irq_type; | ||
820 | else | ||
821 | gpio_irqchip.irq_set_type = gpio_irq_type; | ||
822 | |||
499 | for (pioc = 0, this = gpio_chip, prev = NULL; | 823 | for (pioc = 0, this = gpio_chip, prev = NULL; |
500 | pioc++ < gpio_banks; | 824 | pioc++ < gpio_banks; |
501 | prev = this, this++) { | 825 | prev = this, this++) { |
502 | unsigned id = this->id; | 826 | int offset; |
503 | unsigned i; | ||
504 | 827 | ||
505 | __raw_writel(~0, this->regbase + PIO_IDR); | 828 | __raw_writel(~0, this->regbase + PIO_IDR); |
506 | 829 | ||
507 | for (i = 0, irq = gpio_to_irq(this->chip.base); i < 32; | 830 | /* setup irq domain for this GPIO controller */ |
508 | i++, irq++) { | 831 | at91_gpio_irqdomain(this); |
509 | irq_set_lockdep_class(irq, &gpio_lock_class); | 832 | |
833 | for (offset = 0; offset < this->chip.ngpio; offset++) { | ||
834 | unsigned int virq = irq_find_mapping(this->domain, offset); | ||
835 | irq_set_lockdep_class(virq, &gpio_lock_class); | ||
510 | 836 | ||
511 | /* | 837 | /* |
512 | * Can use the "simple" and not "edge" handler since it's | 838 | * Can use the "simple" and not "edge" handler since it's |
513 | * shorter, and the AIC handles interrupts sanely. | 839 | * shorter, and the AIC handles interrupts sanely. |
514 | */ | 840 | */ |
515 | irq_set_chip_and_handler(irq, &gpio_irqchip, | 841 | irq_set_chip_and_handler(virq, &gpio_irqchip, |
516 | handle_simple_irq); | 842 | handle_simple_irq); |
517 | set_irq_flags(irq, IRQF_VALID); | 843 | set_irq_flags(virq, IRQF_VALID); |
844 | irq_set_chip_data(virq, this); | ||
845 | |||
846 | gpio_irqnbr++; | ||
518 | } | 847 | } |
519 | 848 | ||
520 | /* The toplevel handler handles one bank of GPIOs, except | 849 | /* The toplevel handler handles one bank of GPIOs, except |
521 | * AT91SAM9263_ID_PIOCDE handles three... PIOC is first in | 850 | * on some SoC it can handles up to three... |
522 | * the list, so we only set up that handler. | 851 | * We only set up the handler for the first of the list. |
523 | */ | 852 | */ |
524 | if (prev && prev->next == this) | 853 | if (prev && prev->next == this) |
525 | continue; | 854 | continue; |
526 | 855 | ||
527 | irq_set_chip_data(id, this); | 856 | this->pioc_virq = irq_create_mapping(NULL, this->pioc_hwirq); |
528 | irq_set_chained_handler(id, gpio_irq_handler); | 857 | irq_set_chip_data(this->pioc_virq, this); |
858 | irq_set_chained_handler(this->pioc_virq, gpio_irq_handler); | ||
529 | } | 859 | } |
530 | pr_info("AT91: %d gpio irqs in %d banks\n", irq - gpio_to_irq(0), gpio_banks); | 860 | pr_info("AT91: %d gpio irqs in %d banks\n", gpio_irqnbr, gpio_banks); |
531 | } | 861 | } |
532 | 862 | ||
533 | /* gpiolib support */ | 863 | /* gpiolib support */ |
@@ -593,48 +923,175 @@ static void at91_gpiolib_dbg_show(struct seq_file *s, struct gpio_chip *chip) | |||
593 | at91_get_gpio_value(pin) ? | 923 | at91_get_gpio_value(pin) ? |
594 | "set" : "clear"); | 924 | "set" : "clear"); |
595 | else | 925 | else |
596 | seq_printf(s, "[periph %s]\n", | 926 | seq_printf(s, "[periph %c]\n", |
597 | __raw_readl(pio + PIO_ABSR) & | 927 | peripheral_function(pio, mask)); |
598 | mask ? "B" : "A"); | ||
599 | } | 928 | } |
600 | } | 929 | } |
601 | } | 930 | } |
602 | 931 | ||
932 | static int at91_gpiolib_to_irq(struct gpio_chip *chip, unsigned offset) | ||
933 | { | ||
934 | struct at91_gpio_chip *at91_gpio = to_at91_gpio_chip(chip); | ||
935 | int virq; | ||
936 | |||
937 | if (offset < chip->ngpio) | ||
938 | virq = irq_create_mapping(at91_gpio->domain, offset); | ||
939 | else | ||
940 | virq = -ENXIO; | ||
941 | |||
942 | dev_dbg(chip->dev, "%s: request IRQ for GPIO %d, return %d\n", | ||
943 | chip->label, offset + chip->base, virq); | ||
944 | return virq; | ||
945 | } | ||
946 | |||
947 | static int __init at91_gpio_setup_clk(int idx) | ||
948 | { | ||
949 | struct at91_gpio_chip *at91_gpio = &gpio_chip[idx]; | ||
950 | |||
951 | /* retreive PIO controller's clock */ | ||
952 | at91_gpio->clock = clk_get_sys(NULL, at91_gpio->chip.label); | ||
953 | if (IS_ERR(at91_gpio->clock)) { | ||
954 | pr_err("at91_gpio.%d, failed to get clock, ignoring.\n", idx); | ||
955 | goto err; | ||
956 | } | ||
957 | |||
958 | if (clk_prepare(at91_gpio->clock)) | ||
959 | goto clk_prep_err; | ||
960 | |||
961 | /* enable PIO controller's clock */ | ||
962 | if (clk_enable(at91_gpio->clock)) { | ||
963 | pr_err("at91_gpio.%d, failed to enable clock, ignoring.\n", idx); | ||
964 | goto clk_err; | ||
965 | } | ||
966 | |||
967 | return 0; | ||
968 | |||
969 | clk_err: | ||
970 | clk_unprepare(at91_gpio->clock); | ||
971 | clk_prep_err: | ||
972 | clk_put(at91_gpio->clock); | ||
973 | err: | ||
974 | return -EINVAL; | ||
975 | } | ||
976 | |||
977 | #ifdef CONFIG_OF_GPIO | ||
978 | static void __init of_at91_gpio_init_one(struct device_node *np) | ||
979 | { | ||
980 | int alias_idx; | ||
981 | struct at91_gpio_chip *at91_gpio; | ||
982 | |||
983 | if (!np) | ||
984 | return; | ||
985 | |||
986 | alias_idx = of_alias_get_id(np, "gpio"); | ||
987 | if (alias_idx >= MAX_GPIO_BANKS) { | ||
988 | pr_err("at91_gpio, failed alias idx(%d) > MAX_GPIO_BANKS(%d), ignoring.\n", | ||
989 | alias_idx, MAX_GPIO_BANKS); | ||
990 | return; | ||
991 | } | ||
992 | |||
993 | at91_gpio = &gpio_chip[alias_idx]; | ||
994 | at91_gpio->chip.base = alias_idx * at91_gpio->chip.ngpio; | ||
995 | |||
996 | at91_gpio->regbase = of_iomap(np, 0); | ||
997 | if (!at91_gpio->regbase) { | ||
998 | pr_err("at91_gpio.%d, failed to map registers, ignoring.\n", | ||
999 | alias_idx); | ||
1000 | return; | ||
1001 | } | ||
1002 | |||
1003 | /* Get the interrupts property */ | ||
1004 | if (of_property_read_u32(np, "interrupts", &at91_gpio->pioc_hwirq)) { | ||
1005 | pr_err("at91_gpio.%d, failed to get interrupts property, ignoring.\n", | ||
1006 | alias_idx); | ||
1007 | goto ioremap_err; | ||
1008 | } | ||
1009 | |||
1010 | /* Get capabilities from compatibility property */ | ||
1011 | if (of_device_is_compatible(np, "atmel,at91sam9x5-gpio")) | ||
1012 | at91_gpio_caps |= AT91_GPIO_CAP_PIO3; | ||
1013 | |||
1014 | /* Setup clock */ | ||
1015 | if (at91_gpio_setup_clk(alias_idx)) | ||
1016 | goto ioremap_err; | ||
1017 | |||
1018 | at91_gpio->chip.of_node = np; | ||
1019 | gpio_banks = max(gpio_banks, alias_idx + 1); | ||
1020 | at91_gpio->pioc_idx = alias_idx; | ||
1021 | return; | ||
1022 | |||
1023 | ioremap_err: | ||
1024 | iounmap(at91_gpio->regbase); | ||
1025 | } | ||
1026 | |||
1027 | static int __init of_at91_gpio_init(void) | ||
1028 | { | ||
1029 | struct device_node *np = NULL; | ||
1030 | |||
1031 | /* | ||
1032 | * This isn't ideal, but it gets things hooked up until this | ||
1033 | * driver is converted into a platform_device | ||
1034 | */ | ||
1035 | for_each_compatible_node(np, NULL, "atmel,at91rm9200-gpio") | ||
1036 | of_at91_gpio_init_one(np); | ||
1037 | |||
1038 | return gpio_banks > 0 ? 0 : -EINVAL; | ||
1039 | } | ||
1040 | #else | ||
1041 | static int __init of_at91_gpio_init(void) | ||
1042 | { | ||
1043 | return -EINVAL; | ||
1044 | } | ||
1045 | #endif | ||
1046 | |||
1047 | static void __init at91_gpio_init_one(int idx, u32 regbase, int pioc_hwirq) | ||
1048 | { | ||
1049 | struct at91_gpio_chip *at91_gpio = &gpio_chip[idx]; | ||
1050 | |||
1051 | at91_gpio->chip.base = idx * at91_gpio->chip.ngpio; | ||
1052 | at91_gpio->pioc_hwirq = pioc_hwirq; | ||
1053 | at91_gpio->pioc_idx = idx; | ||
1054 | |||
1055 | at91_gpio->regbase = ioremap(regbase, 512); | ||
1056 | if (!at91_gpio->regbase) { | ||
1057 | pr_err("at91_gpio.%d, failed to map registers, ignoring.\n", idx); | ||
1058 | return; | ||
1059 | } | ||
1060 | |||
1061 | if (at91_gpio_setup_clk(idx)) | ||
1062 | goto ioremap_err; | ||
1063 | |||
1064 | gpio_banks = max(gpio_banks, idx + 1); | ||
1065 | return; | ||
1066 | |||
1067 | ioremap_err: | ||
1068 | iounmap(at91_gpio->regbase); | ||
1069 | } | ||
1070 | |||
603 | /* | 1071 | /* |
604 | * Called from the processor-specific init to enable GPIO pin support. | 1072 | * Called from the processor-specific init to enable GPIO pin support. |
605 | */ | 1073 | */ |
606 | void __init at91_gpio_init(struct at91_gpio_bank *data, int nr_banks) | 1074 | void __init at91_gpio_init(struct at91_gpio_bank *data, int nr_banks) |
607 | { | 1075 | { |
608 | unsigned i; | 1076 | unsigned i; |
609 | struct at91_gpio_chip *at91_gpio, *last = NULL; | 1077 | struct at91_gpio_chip *at91_gpio, *last = NULL; |
610 | 1078 | ||
611 | BUG_ON(nr_banks > MAX_GPIO_BANKS); | 1079 | BUG_ON(nr_banks > MAX_GPIO_BANKS); |
612 | 1080 | ||
613 | gpio_banks = nr_banks; | 1081 | if (of_at91_gpio_init() < 0) { |
1082 | /* No GPIO controller found in device tree */ | ||
1083 | for (i = 0; i < nr_banks; i++) | ||
1084 | at91_gpio_init_one(i, data[i].regbase, data[i].id); | ||
1085 | } | ||
614 | 1086 | ||
615 | for (i = 0; i < nr_banks; i++) { | 1087 | for (i = 0; i < gpio_banks; i++) { |
616 | at91_gpio = &gpio_chip[i]; | 1088 | at91_gpio = &gpio_chip[i]; |
617 | 1089 | ||
618 | at91_gpio->id = data[i].id; | 1090 | /* |
619 | at91_gpio->chip.base = i * 32; | 1091 | * GPIO controller are grouped on some SoC: |
620 | 1092 | * PIOC, PIOD and PIOE can share the same IRQ line | |
621 | at91_gpio->regbase = ioremap(data[i].regbase, 512); | 1093 | */ |
622 | if (!at91_gpio->regbase) { | 1094 | if (last && last->pioc_hwirq == at91_gpio->pioc_hwirq) |
623 | pr_err("at91_gpio.%d, failed to map registers, ignoring.\n", i); | ||
624 | continue; | ||
625 | } | ||
626 | |||
627 | at91_gpio->clock = clk_get_sys(NULL, at91_gpio->chip.label); | ||
628 | if (!at91_gpio->clock) { | ||
629 | pr_err("at91_gpio.%d, failed to get clock, ignoring.\n", i); | ||
630 | continue; | ||
631 | } | ||
632 | |||
633 | /* enable PIO controller's clock */ | ||
634 | clk_enable(at91_gpio->clock); | ||
635 | |||
636 | /* AT91SAM9263_ID_PIOCDE groups PIOC, PIOD, PIOE */ | ||
637 | if (last && last->id == at91_gpio->id) | ||
638 | last->next = at91_gpio; | 1095 | last->next = at91_gpio; |
639 | last = at91_gpio; | 1096 | last = at91_gpio; |
640 | 1097 | ||
diff --git a/arch/arm/mach-at91/include/mach/at91_matrix.h b/arch/arm/mach-at91/include/mach/at91_matrix.h new file mode 100644 index 000000000000..02fae9de746b --- /dev/null +++ b/arch/arm/mach-at91/include/mach/at91_matrix.h | |||
@@ -0,0 +1,23 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2011 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> | ||
3 | * | ||
4 | * Under GPLv2 | ||
5 | */ | ||
6 | |||
7 | #ifndef __MACH_AT91_MATRIX_H__ | ||
8 | #define __MACH_AT91_MATRIX_H__ | ||
9 | |||
10 | #ifndef __ASSEMBLY__ | ||
11 | extern void __iomem *at91_matrix_base; | ||
12 | |||
13 | #define at91_matrix_read(field) \ | ||
14 | __raw_readl(at91_matrix_base + field) | ||
15 | |||
16 | #define at91_matrix_write(field, value) \ | ||
17 | __raw_writel(value, at91_matrix_base + field); | ||
18 | |||
19 | #else | ||
20 | .extern at91_matrix_base | ||
21 | #endif | ||
22 | |||
23 | #endif /* __MACH_AT91_MATRIX_H__ */ | ||
diff --git a/arch/arm/mach-at91/include/mach/at91_pio.h b/arch/arm/mach-at91/include/mach/at91_pio.h index c6a31bf8a5c6..732b11c37f1a 100644 --- a/arch/arm/mach-at91/include/mach/at91_pio.h +++ b/arch/arm/mach-at91/include/mach/at91_pio.h | |||
@@ -40,10 +40,35 @@ | |||
40 | #define PIO_PUER 0x64 /* Pull-up Enable Register */ | 40 | #define PIO_PUER 0x64 /* Pull-up Enable Register */ |
41 | #define PIO_PUSR 0x68 /* Pull-up Status Register */ | 41 | #define PIO_PUSR 0x68 /* Pull-up Status Register */ |
42 | #define PIO_ASR 0x70 /* Peripheral A Select Register */ | 42 | #define PIO_ASR 0x70 /* Peripheral A Select Register */ |
43 | #define PIO_ABCDSR1 0x70 /* Peripheral ABCD Select Register 1 [some sam9 only] */ | ||
43 | #define PIO_BSR 0x74 /* Peripheral B Select Register */ | 44 | #define PIO_BSR 0x74 /* Peripheral B Select Register */ |
45 | #define PIO_ABCDSR2 0x74 /* Peripheral ABCD Select Register 2 [some sam9 only] */ | ||
44 | #define PIO_ABSR 0x78 /* AB Status Register */ | 46 | #define PIO_ABSR 0x78 /* AB Status Register */ |
47 | #define PIO_IFSCDR 0x80 /* Input Filter Slow Clock Disable Register */ | ||
48 | #define PIO_IFSCER 0x84 /* Input Filter Slow Clock Enable Register */ | ||
49 | #define PIO_IFSCSR 0x88 /* Input Filter Slow Clock Status Register */ | ||
50 | #define PIO_SCDR 0x8c /* Slow Clock Divider Debouncing Register */ | ||
51 | #define PIO_SCDR_DIV (0x3fff << 0) /* Slow Clock Divider Mask */ | ||
52 | #define PIO_PPDDR 0x90 /* Pad Pull-down Disable Register */ | ||
53 | #define PIO_PPDER 0x94 /* Pad Pull-down Enable Register */ | ||
54 | #define PIO_PPDSR 0x98 /* Pad Pull-down Status Register */ | ||
45 | #define PIO_OWER 0xa0 /* Output Write Enable Register */ | 55 | #define PIO_OWER 0xa0 /* Output Write Enable Register */ |
46 | #define PIO_OWDR 0xa4 /* Output Write Disable Register */ | 56 | #define PIO_OWDR 0xa4 /* Output Write Disable Register */ |
47 | #define PIO_OWSR 0xa8 /* Output Write Status Register */ | 57 | #define PIO_OWSR 0xa8 /* Output Write Status Register */ |
58 | #define PIO_AIMER 0xb0 /* Additional Interrupt Modes Enable Register */ | ||
59 | #define PIO_AIMDR 0xb4 /* Additional Interrupt Modes Disable Register */ | ||
60 | #define PIO_AIMMR 0xb8 /* Additional Interrupt Modes Mask Register */ | ||
61 | #define PIO_ESR 0xc0 /* Edge Select Register */ | ||
62 | #define PIO_LSR 0xc4 /* Level Select Register */ | ||
63 | #define PIO_ELSR 0xc8 /* Edge/Level Status Register */ | ||
64 | #define PIO_FELLSR 0xd0 /* Falling Edge/Low Level Select Register */ | ||
65 | #define PIO_REHLSR 0xd4 /* Rising Edge/ High Level Select Register */ | ||
66 | #define PIO_FRLHSR 0xd8 /* Fall/Rise - Low/High Status Register */ | ||
67 | #define PIO_SCHMITT 0x100 /* Schmitt Trigger Register */ | ||
68 | |||
69 | #define ABCDSR_PERIPH_A 0x0 | ||
70 | #define ABCDSR_PERIPH_B 0x1 | ||
71 | #define ABCDSR_PERIPH_C 0x2 | ||
72 | #define ABCDSR_PERIPH_D 0x3 | ||
48 | 73 | ||
49 | #endif | 74 | #endif |
diff --git a/arch/arm/mach-at91/include/mach/at91_pmc.h b/arch/arm/mach-at91/include/mach/at91_pmc.h index f9fdbbe0c53a..36604782a78f 100644 --- a/arch/arm/mach-at91/include/mach/at91_pmc.h +++ b/arch/arm/mach-at91/include/mach/at91_pmc.h | |||
@@ -16,10 +16,22 @@ | |||
16 | #ifndef AT91_PMC_H | 16 | #ifndef AT91_PMC_H |
17 | #define AT91_PMC_H | 17 | #define AT91_PMC_H |
18 | 18 | ||
19 | #define AT91_PMC_SCER (AT91_PMC + 0x00) /* System Clock Enable Register */ | 19 | #ifndef __ASSEMBLY__ |
20 | #define AT91_PMC_SCDR (AT91_PMC + 0x04) /* System Clock Disable Register */ | 20 | extern void __iomem *at91_pmc_base; |
21 | 21 | ||
22 | #define AT91_PMC_SCSR (AT91_PMC + 0x08) /* System Clock Status Register */ | 22 | #define at91_pmc_read(field) \ |
23 | __raw_readl(at91_pmc_base + field) | ||
24 | |||
25 | #define at91_pmc_write(field, value) \ | ||
26 | __raw_writel(value, at91_pmc_base + field) | ||
27 | #else | ||
28 | .extern at91_aic_base | ||
29 | #endif | ||
30 | |||
31 | #define AT91_PMC_SCER 0x00 /* System Clock Enable Register */ | ||
32 | #define AT91_PMC_SCDR 0x04 /* System Clock Disable Register */ | ||
33 | |||
34 | #define AT91_PMC_SCSR 0x08 /* System Clock Status Register */ | ||
23 | #define AT91_PMC_PCK (1 << 0) /* Processor Clock */ | 35 | #define AT91_PMC_PCK (1 << 0) /* Processor Clock */ |
24 | #define AT91RM9200_PMC_UDP (1 << 1) /* USB Devcice Port Clock [AT91RM9200 only] */ | 36 | #define AT91RM9200_PMC_UDP (1 << 1) /* USB Devcice Port Clock [AT91RM9200 only] */ |
25 | #define AT91RM9200_PMC_MCKUDP (1 << 2) /* USB Device Port Master Clock Automatic Disable on Suspend [AT91RM9200 only] */ | 37 | #define AT91RM9200_PMC_MCKUDP (1 << 2) /* USB Device Port Master Clock Automatic Disable on Suspend [AT91RM9200 only] */ |
@@ -34,17 +46,17 @@ | |||
34 | #define AT91_PMC_HCK0 (1 << 16) /* AHB Clock (USB host) [AT91SAM9261 only] */ | 46 | #define AT91_PMC_HCK0 (1 << 16) /* AHB Clock (USB host) [AT91SAM9261 only] */ |
35 | #define AT91_PMC_HCK1 (1 << 17) /* AHB Clock (LCD) [AT91SAM9261 only] */ | 47 | #define AT91_PMC_HCK1 (1 << 17) /* AHB Clock (LCD) [AT91SAM9261 only] */ |
36 | 48 | ||
37 | #define AT91_PMC_PCER (AT91_PMC + 0x10) /* Peripheral Clock Enable Register */ | 49 | #define AT91_PMC_PCER 0x10 /* Peripheral Clock Enable Register */ |
38 | #define AT91_PMC_PCDR (AT91_PMC + 0x14) /* Peripheral Clock Disable Register */ | 50 | #define AT91_PMC_PCDR 0x14 /* Peripheral Clock Disable Register */ |
39 | #define AT91_PMC_PCSR (AT91_PMC + 0x18) /* Peripheral Clock Status Register */ | 51 | #define AT91_PMC_PCSR 0x18 /* Peripheral Clock Status Register */ |
40 | 52 | ||
41 | #define AT91_CKGR_UCKR (AT91_PMC + 0x1C) /* UTMI Clock Register [some SAM9] */ | 53 | #define AT91_CKGR_UCKR 0x1C /* UTMI Clock Register [some SAM9] */ |
42 | #define AT91_PMC_UPLLEN (1 << 16) /* UTMI PLL Enable */ | 54 | #define AT91_PMC_UPLLEN (1 << 16) /* UTMI PLL Enable */ |
43 | #define AT91_PMC_UPLLCOUNT (0xf << 20) /* UTMI PLL Start-up Time */ | 55 | #define AT91_PMC_UPLLCOUNT (0xf << 20) /* UTMI PLL Start-up Time */ |
44 | #define AT91_PMC_BIASEN (1 << 24) /* UTMI BIAS Enable */ | 56 | #define AT91_PMC_BIASEN (1 << 24) /* UTMI BIAS Enable */ |
45 | #define AT91_PMC_BIASCOUNT (0xf << 28) /* UTMI BIAS Start-up Time */ | 57 | #define AT91_PMC_BIASCOUNT (0xf << 28) /* UTMI BIAS Start-up Time */ |
46 | 58 | ||
47 | #define AT91_CKGR_MOR (AT91_PMC + 0x20) /* Main Oscillator Register [not on SAM9RL] */ | 59 | #define AT91_CKGR_MOR 0x20 /* Main Oscillator Register [not on SAM9RL] */ |
48 | #define AT91_PMC_MOSCEN (1 << 0) /* Main Oscillator Enable */ | 60 | #define AT91_PMC_MOSCEN (1 << 0) /* Main Oscillator Enable */ |
49 | #define AT91_PMC_OSCBYPASS (1 << 1) /* Oscillator Bypass */ | 61 | #define AT91_PMC_OSCBYPASS (1 << 1) /* Oscillator Bypass */ |
50 | #define AT91_PMC_MOSCRCEN (1 << 3) /* Main On-Chip RC Oscillator Enable [some SAM9] */ | 62 | #define AT91_PMC_MOSCRCEN (1 << 3) /* Main On-Chip RC Oscillator Enable [some SAM9] */ |
@@ -53,12 +65,12 @@ | |||
53 | #define AT91_PMC_MOSCSEL (1 << 24) /* Main Oscillator Selection [some SAM9] */ | 65 | #define AT91_PMC_MOSCSEL (1 << 24) /* Main Oscillator Selection [some SAM9] */ |
54 | #define AT91_PMC_CFDEN (1 << 25) /* Clock Failure Detector Enable [some SAM9] */ | 66 | #define AT91_PMC_CFDEN (1 << 25) /* Clock Failure Detector Enable [some SAM9] */ |
55 | 67 | ||
56 | #define AT91_CKGR_MCFR (AT91_PMC + 0x24) /* Main Clock Frequency Register */ | 68 | #define AT91_CKGR_MCFR 0x24 /* Main Clock Frequency Register */ |
57 | #define AT91_PMC_MAINF (0xffff << 0) /* Main Clock Frequency */ | 69 | #define AT91_PMC_MAINF (0xffff << 0) /* Main Clock Frequency */ |
58 | #define AT91_PMC_MAINRDY (1 << 16) /* Main Clock Ready */ | 70 | #define AT91_PMC_MAINRDY (1 << 16) /* Main Clock Ready */ |
59 | 71 | ||
60 | #define AT91_CKGR_PLLAR (AT91_PMC + 0x28) /* PLL A Register */ | 72 | #define AT91_CKGR_PLLAR 0x28 /* PLL A Register */ |
61 | #define AT91_CKGR_PLLBR (AT91_PMC + 0x2c) /* PLL B Register */ | 73 | #define AT91_CKGR_PLLBR 0x2c /* PLL B Register */ |
62 | #define AT91_PMC_DIV (0xff << 0) /* Divider */ | 74 | #define AT91_PMC_DIV (0xff << 0) /* Divider */ |
63 | #define AT91_PMC_PLLCOUNT (0x3f << 8) /* PLL Counter */ | 75 | #define AT91_PMC_PLLCOUNT (0x3f << 8) /* PLL Counter */ |
64 | #define AT91_PMC_OUT (3 << 14) /* PLL Clock Frequency Range */ | 76 | #define AT91_PMC_OUT (3 << 14) /* PLL Clock Frequency Range */ |
@@ -69,7 +81,7 @@ | |||
69 | #define AT91_PMC_USBDIV_4 (2 << 28) | 81 | #define AT91_PMC_USBDIV_4 (2 << 28) |
70 | #define AT91_PMC_USB96M (1 << 28) /* Divider by 2 Enable (PLLB only) */ | 82 | #define AT91_PMC_USB96M (1 << 28) /* Divider by 2 Enable (PLLB only) */ |
71 | 83 | ||
72 | #define AT91_PMC_MCKR (AT91_PMC + 0x30) /* Master Clock Register */ | 84 | #define AT91_PMC_MCKR 0x30 /* Master Clock Register */ |
73 | #define AT91_PMC_CSS (3 << 0) /* Master Clock Selection */ | 85 | #define AT91_PMC_CSS (3 << 0) /* Master Clock Selection */ |
74 | #define AT91_PMC_CSS_SLOW (0 << 0) | 86 | #define AT91_PMC_CSS_SLOW (0 << 0) |
75 | #define AT91_PMC_CSS_MAIN (1 << 0) | 87 | #define AT91_PMC_CSS_MAIN (1 << 0) |
@@ -111,27 +123,27 @@ | |||
111 | #define AT91_PMC_PLLADIV2_OFF (0 << 12) | 123 | #define AT91_PMC_PLLADIV2_OFF (0 << 12) |
112 | #define AT91_PMC_PLLADIV2_ON (1 << 12) | 124 | #define AT91_PMC_PLLADIV2_ON (1 << 12) |
113 | 125 | ||
114 | #define AT91_PMC_USB (AT91_PMC + 0x38) /* USB Clock Register [some SAM9 only] */ | 126 | #define AT91_PMC_USB 0x38 /* USB Clock Register [some SAM9 only] */ |
115 | #define AT91_PMC_USBS (0x1 << 0) /* USB OHCI Input clock selection */ | 127 | #define AT91_PMC_USBS (0x1 << 0) /* USB OHCI Input clock selection */ |
116 | #define AT91_PMC_USBS_PLLA (0 << 0) | 128 | #define AT91_PMC_USBS_PLLA (0 << 0) |
117 | #define AT91_PMC_USBS_UPLL (1 << 0) | 129 | #define AT91_PMC_USBS_UPLL (1 << 0) |
118 | #define AT91_PMC_OHCIUSBDIV (0xF << 8) /* Divider for USB OHCI Clock */ | 130 | #define AT91_PMC_OHCIUSBDIV (0xF << 8) /* Divider for USB OHCI Clock */ |
119 | 131 | ||
120 | #define AT91_PMC_SMD (AT91_PMC + 0x3c) /* Soft Modem Clock Register [some SAM9 only] */ | 132 | #define AT91_PMC_SMD 0x3c /* Soft Modem Clock Register [some SAM9 only] */ |
121 | #define AT91_PMC_SMDS (0x1 << 0) /* SMD input clock selection */ | 133 | #define AT91_PMC_SMDS (0x1 << 0) /* SMD input clock selection */ |
122 | #define AT91_PMC_SMD_DIV (0x1f << 8) /* SMD input clock divider */ | 134 | #define AT91_PMC_SMD_DIV (0x1f << 8) /* SMD input clock divider */ |
123 | #define AT91_PMC_SMDDIV(n) (((n) << 8) & AT91_PMC_SMD_DIV) | 135 | #define AT91_PMC_SMDDIV(n) (((n) << 8) & AT91_PMC_SMD_DIV) |
124 | 136 | ||
125 | #define AT91_PMC_PCKR(n) (AT91_PMC + 0x40 + ((n) * 4)) /* Programmable Clock 0-N Registers */ | 137 | #define AT91_PMC_PCKR(n) (0x40 + ((n) * 4)) /* Programmable Clock 0-N Registers */ |
126 | #define AT91_PMC_ALT_PCKR_CSS (0x7 << 0) /* Programmable Clock Source Selection [alternate length] */ | 138 | #define AT91_PMC_ALT_PCKR_CSS (0x7 << 0) /* Programmable Clock Source Selection [alternate length] */ |
127 | #define AT91_PMC_CSS_MASTER (4 << 0) /* [some SAM9 only] */ | 139 | #define AT91_PMC_CSS_MASTER (4 << 0) /* [some SAM9 only] */ |
128 | #define AT91_PMC_CSSMCK (0x1 << 8) /* CSS or Master Clock Selection */ | 140 | #define AT91_PMC_CSSMCK (0x1 << 8) /* CSS or Master Clock Selection */ |
129 | #define AT91_PMC_CSSMCK_CSS (0 << 8) | 141 | #define AT91_PMC_CSSMCK_CSS (0 << 8) |
130 | #define AT91_PMC_CSSMCK_MCK (1 << 8) | 142 | #define AT91_PMC_CSSMCK_MCK (1 << 8) |
131 | 143 | ||
132 | #define AT91_PMC_IER (AT91_PMC + 0x60) /* Interrupt Enable Register */ | 144 | #define AT91_PMC_IER 0x60 /* Interrupt Enable Register */ |
133 | #define AT91_PMC_IDR (AT91_PMC + 0x64) /* Interrupt Disable Register */ | 145 | #define AT91_PMC_IDR 0x64 /* Interrupt Disable Register */ |
134 | #define AT91_PMC_SR (AT91_PMC + 0x68) /* Status Register */ | 146 | #define AT91_PMC_SR 0x68 /* Status Register */ |
135 | #define AT91_PMC_MOSCS (1 << 0) /* MOSCS Flag */ | 147 | #define AT91_PMC_MOSCS (1 << 0) /* MOSCS Flag */ |
136 | #define AT91_PMC_LOCKA (1 << 1) /* PLLA Lock */ | 148 | #define AT91_PMC_LOCKA (1 << 1) /* PLLA Lock */ |
137 | #define AT91_PMC_LOCKB (1 << 2) /* PLLB Lock */ | 149 | #define AT91_PMC_LOCKB (1 << 2) /* PLLB Lock */ |
@@ -144,18 +156,18 @@ | |||
144 | #define AT91_PMC_MOSCSELS (1 << 16) /* Main Oscillator Selection [some SAM9] */ | 156 | #define AT91_PMC_MOSCSELS (1 << 16) /* Main Oscillator Selection [some SAM9] */ |
145 | #define AT91_PMC_MOSCRCS (1 << 17) /* Main On-Chip RC [some SAM9] */ | 157 | #define AT91_PMC_MOSCRCS (1 << 17) /* Main On-Chip RC [some SAM9] */ |
146 | #define AT91_PMC_CFDEV (1 << 18) /* Clock Failure Detector Event [some SAM9] */ | 158 | #define AT91_PMC_CFDEV (1 << 18) /* Clock Failure Detector Event [some SAM9] */ |
147 | #define AT91_PMC_IMR (AT91_PMC + 0x6c) /* Interrupt Mask Register */ | 159 | #define AT91_PMC_IMR 0x6c /* Interrupt Mask Register */ |
148 | 160 | ||
149 | #define AT91_PMC_PROT (AT91_PMC + 0xe4) /* Write Protect Mode Register [some SAM9] */ | 161 | #define AT91_PMC_PROT 0xe4 /* Write Protect Mode Register [some SAM9] */ |
150 | #define AT91_PMC_WPEN (0x1 << 0) /* Write Protect Enable */ | 162 | #define AT91_PMC_WPEN (0x1 << 0) /* Write Protect Enable */ |
151 | #define AT91_PMC_WPKEY (0xffffff << 8) /* Write Protect Key */ | 163 | #define AT91_PMC_WPKEY (0xffffff << 8) /* Write Protect Key */ |
152 | #define AT91_PMC_PROTKEY (0x504d43 << 8) /* Activation Code */ | 164 | #define AT91_PMC_PROTKEY (0x504d43 << 8) /* Activation Code */ |
153 | 165 | ||
154 | #define AT91_PMC_WPSR (AT91_PMC + 0xe8) /* Write Protect Status Register [some SAM9] */ | 166 | #define AT91_PMC_WPSR 0xe8 /* Write Protect Status Register [some SAM9] */ |
155 | #define AT91_PMC_WPVS (0x1 << 0) /* Write Protect Violation Status */ | 167 | #define AT91_PMC_WPVS (0x1 << 0) /* Write Protect Violation Status */ |
156 | #define AT91_PMC_WPVSRC (0xffff << 8) /* Write Protect Violation Source */ | 168 | #define AT91_PMC_WPVSRC (0xffff << 8) /* Write Protect Violation Source */ |
157 | 169 | ||
158 | #define AT91_PMC_PCR (AT91_PMC + 0x10c) /* Peripheral Control Register [some SAM9] */ | 170 | #define AT91_PMC_PCR 0x10c /* Peripheral Control Register [some SAM9] */ |
159 | #define AT91_PMC_PCR_PID (0x3f << 0) /* Peripheral ID */ | 171 | #define AT91_PMC_PCR_PID (0x3f << 0) /* Peripheral ID */ |
160 | #define AT91_PMC_PCR_CMD (0x1 << 12) /* Command */ | 172 | #define AT91_PMC_PCR_CMD (0x1 << 12) /* Command */ |
161 | #define AT91_PMC_PCR_DIV (0x3 << 16) /* Divisor Value */ | 173 | #define AT91_PMC_PCR_DIV (0x3 << 16) /* Divisor Value */ |
diff --git a/arch/arm/mach-at91/include/mach/at91_ramc.h b/arch/arm/mach-at91/include/mach/at91_ramc.h new file mode 100644 index 000000000000..d8aeb278614e --- /dev/null +++ b/arch/arm/mach-at91/include/mach/at91_ramc.h | |||
@@ -0,0 +1,32 @@ | |||
1 | /* | ||
2 | * Header file for the Atmel RAM Controller | ||
3 | * | ||
4 | * Copyright (C) 2011 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> | ||
5 | * | ||
6 | * Under GPLv2 only | ||
7 | */ | ||
8 | |||
9 | #ifndef __AT91_RAMC_H__ | ||
10 | #define __AT91_RAMC_H__ | ||
11 | |||
12 | #ifndef __ASSEMBLY__ | ||
13 | extern void __iomem *at91_ramc_base[]; | ||
14 | |||
15 | #define at91_ramc_read(id, field) \ | ||
16 | __raw_readl(at91_ramc_base[id] + field) | ||
17 | |||
18 | #define at91_ramc_write(id, field, value) \ | ||
19 | __raw_writel(value, at91_ramc_base[id] + field) | ||
20 | #else | ||
21 | .extern at91_ramc_base | ||
22 | #endif | ||
23 | |||
24 | #define AT91_MEMCTRL_MC 0 | ||
25 | #define AT91_MEMCTRL_SDRAMC 1 | ||
26 | #define AT91_MEMCTRL_DDRSDR 2 | ||
27 | |||
28 | #include <mach/at91rm9200_sdramc.h> | ||
29 | #include <mach/at91sam9_ddrsdr.h> | ||
30 | #include <mach/at91sam9_sdramc.h> | ||
31 | |||
32 | #endif /* __AT91_RAMC_H__ */ | ||
diff --git a/arch/arm/mach-at91/include/mach/at91_st.h b/arch/arm/mach-at91/include/mach/at91_st.h index 8847173e4101..969aac27109f 100644 --- a/arch/arm/mach-at91/include/mach/at91_st.h +++ b/arch/arm/mach-at91/include/mach/at91_st.h | |||
@@ -16,34 +16,46 @@ | |||
16 | #ifndef AT91_ST_H | 16 | #ifndef AT91_ST_H |
17 | #define AT91_ST_H | 17 | #define AT91_ST_H |
18 | 18 | ||
19 | #define AT91_ST_CR (AT91_ST + 0x00) /* Control Register */ | 19 | #ifndef __ASSEMBLY__ |
20 | extern void __iomem *at91_st_base; | ||
21 | |||
22 | #define at91_st_read(field) \ | ||
23 | __raw_readl(at91_st_base + field) | ||
24 | |||
25 | #define at91_st_write(field, value) \ | ||
26 | __raw_writel(value, at91_st_base + field); | ||
27 | #else | ||
28 | .extern at91_st_base | ||
29 | #endif | ||
30 | |||
31 | #define AT91_ST_CR 0x00 /* Control Register */ | ||
20 | #define AT91_ST_WDRST (1 << 0) /* Watchdog Timer Restart */ | 32 | #define AT91_ST_WDRST (1 << 0) /* Watchdog Timer Restart */ |
21 | 33 | ||
22 | #define AT91_ST_PIMR (AT91_ST + 0x04) /* Period Interval Mode Register */ | 34 | #define AT91_ST_PIMR 0x04 /* Period Interval Mode Register */ |
23 | #define AT91_ST_PIV (0xffff << 0) /* Period Interval Value */ | 35 | #define AT91_ST_PIV (0xffff << 0) /* Period Interval Value */ |
24 | 36 | ||
25 | #define AT91_ST_WDMR (AT91_ST + 0x08) /* Watchdog Mode Register */ | 37 | #define AT91_ST_WDMR 0x08 /* Watchdog Mode Register */ |
26 | #define AT91_ST_WDV (0xffff << 0) /* Watchdog Counter Value */ | 38 | #define AT91_ST_WDV (0xffff << 0) /* Watchdog Counter Value */ |
27 | #define AT91_ST_RSTEN (1 << 16) /* Reset Enable */ | 39 | #define AT91_ST_RSTEN (1 << 16) /* Reset Enable */ |
28 | #define AT91_ST_EXTEN (1 << 17) /* External Signal Assertion Enable */ | 40 | #define AT91_ST_EXTEN (1 << 17) /* External Signal Assertion Enable */ |
29 | 41 | ||
30 | #define AT91_ST_RTMR (AT91_ST + 0x0c) /* Real-time Mode Register */ | 42 | #define AT91_ST_RTMR 0x0c /* Real-time Mode Register */ |
31 | #define AT91_ST_RTPRES (0xffff << 0) /* Real-time Prescalar Value */ | 43 | #define AT91_ST_RTPRES (0xffff << 0) /* Real-time Prescalar Value */ |
32 | 44 | ||
33 | #define AT91_ST_SR (AT91_ST + 0x10) /* Status Register */ | 45 | #define AT91_ST_SR 0x10 /* Status Register */ |
34 | #define AT91_ST_PITS (1 << 0) /* Period Interval Timer Status */ | 46 | #define AT91_ST_PITS (1 << 0) /* Period Interval Timer Status */ |
35 | #define AT91_ST_WDOVF (1 << 1) /* Watchdog Overflow */ | 47 | #define AT91_ST_WDOVF (1 << 1) /* Watchdog Overflow */ |
36 | #define AT91_ST_RTTINC (1 << 2) /* Real-time Timer Increment */ | 48 | #define AT91_ST_RTTINC (1 << 2) /* Real-time Timer Increment */ |
37 | #define AT91_ST_ALMS (1 << 3) /* Alarm Status */ | 49 | #define AT91_ST_ALMS (1 << 3) /* Alarm Status */ |
38 | 50 | ||
39 | #define AT91_ST_IER (AT91_ST + 0x14) /* Interrupt Enable Register */ | 51 | #define AT91_ST_IER 0x14 /* Interrupt Enable Register */ |
40 | #define AT91_ST_IDR (AT91_ST + 0x18) /* Interrupt Disable Register */ | 52 | #define AT91_ST_IDR 0x18 /* Interrupt Disable Register */ |
41 | #define AT91_ST_IMR (AT91_ST + 0x1c) /* Interrupt Mask Register */ | 53 | #define AT91_ST_IMR 0x1c /* Interrupt Mask Register */ |
42 | 54 | ||
43 | #define AT91_ST_RTAR (AT91_ST + 0x20) /* Real-time Alarm Register */ | 55 | #define AT91_ST_RTAR 0x20 /* Real-time Alarm Register */ |
44 | #define AT91_ST_ALMV (0xfffff << 0) /* Alarm Value */ | 56 | #define AT91_ST_ALMV (0xfffff << 0) /* Alarm Value */ |
45 | 57 | ||
46 | #define AT91_ST_CRTR (AT91_ST + 0x24) /* Current Real-time Register */ | 58 | #define AT91_ST_CRTR 0x24 /* Current Real-time Register */ |
47 | #define AT91_ST_CRTV (0xfffff << 0) /* Current Real-Time Value */ | 59 | #define AT91_ST_CRTV (0xfffff << 0) /* Current Real-Time Value */ |
48 | 60 | ||
49 | #endif | 61 | #endif |
diff --git a/arch/arm/mach-at91/include/mach/at91rm9200.h b/arch/arm/mach-at91/include/mach/at91rm9200.h index bacb51141819..603e6aac2a4f 100644 --- a/arch/arm/mach-at91/include/mach/at91rm9200.h +++ b/arch/arm/mach-at91/include/mach/at91rm9200.h | |||
@@ -77,26 +77,22 @@ | |||
77 | 77 | ||
78 | 78 | ||
79 | /* | 79 | /* |
80 | * System Peripherals (offset from AT91_BASE_SYS) | 80 | * System Peripherals |
81 | */ | 81 | */ |
82 | #define AT91_PMC (0xfffffc00 - AT91_BASE_SYS) /* Power Management Controller */ | ||
83 | #define AT91_ST (0xfffffd00 - AT91_BASE_SYS) /* System Timer */ | ||
84 | #define AT91_MC (0xffffff00 - AT91_BASE_SYS) /* Memory Controllers */ | ||
85 | |||
86 | #define AT91RM9200_BASE_DBGU AT91_BASE_DBGU0 /* Debug Unit */ | 82 | #define AT91RM9200_BASE_DBGU AT91_BASE_DBGU0 /* Debug Unit */ |
87 | #define AT91RM9200_BASE_PIOA 0xfffff400 /* PIO Controller A */ | 83 | #define AT91RM9200_BASE_PIOA 0xfffff400 /* PIO Controller A */ |
88 | #define AT91RM9200_BASE_PIOB 0xfffff600 /* PIO Controller B */ | 84 | #define AT91RM9200_BASE_PIOB 0xfffff600 /* PIO Controller B */ |
89 | #define AT91RM9200_BASE_PIOC 0xfffff800 /* PIO Controller C */ | 85 | #define AT91RM9200_BASE_PIOC 0xfffff800 /* PIO Controller C */ |
90 | #define AT91RM9200_BASE_PIOD 0xfffffa00 /* PIO Controller D */ | 86 | #define AT91RM9200_BASE_PIOD 0xfffffa00 /* PIO Controller D */ |
87 | #define AT91RM9200_BASE_ST 0xfffffd00 /* System Timer */ | ||
91 | #define AT91RM9200_BASE_RTC 0xfffffe00 /* Real-Time Clock */ | 88 | #define AT91RM9200_BASE_RTC 0xfffffe00 /* Real-Time Clock */ |
89 | #define AT91RM9200_BASE_MC 0xffffff00 /* Memory Controllers */ | ||
92 | 90 | ||
93 | #define AT91_USART0 AT91RM9200_BASE_US0 | 91 | #define AT91_USART0 AT91RM9200_BASE_US0 |
94 | #define AT91_USART1 AT91RM9200_BASE_US1 | 92 | #define AT91_USART1 AT91RM9200_BASE_US1 |
95 | #define AT91_USART2 AT91RM9200_BASE_US2 | 93 | #define AT91_USART2 AT91RM9200_BASE_US2 |
96 | #define AT91_USART3 AT91RM9200_BASE_US3 | 94 | #define AT91_USART3 AT91RM9200_BASE_US3 |
97 | 95 | ||
98 | #define AT91_MATRIX 0 /* not supported */ | ||
99 | |||
100 | /* | 96 | /* |
101 | * Internal Memory. | 97 | * Internal Memory. |
102 | */ | 98 | */ |
diff --git a/arch/arm/mach-at91/include/mach/at91rm9200_mc.h b/arch/arm/mach-at91/include/mach/at91rm9200_mc.h index d34e4ed89349..aeaadfb452af 100644 --- a/arch/arm/mach-at91/include/mach/at91rm9200_mc.h +++ b/arch/arm/mach-at91/include/mach/at91rm9200_mc.h | |||
@@ -17,10 +17,10 @@ | |||
17 | #define AT91RM9200_MC_H | 17 | #define AT91RM9200_MC_H |
18 | 18 | ||
19 | /* Memory Controller */ | 19 | /* Memory Controller */ |
20 | #define AT91_MC_RCR (AT91_MC + 0x00) /* MC Remap Control Register */ | 20 | #define AT91_MC_RCR 0x00 /* MC Remap Control Register */ |
21 | #define AT91_MC_RCB (1 << 0) /* Remap Command Bit */ | 21 | #define AT91_MC_RCB (1 << 0) /* Remap Command Bit */ |
22 | 22 | ||
23 | #define AT91_MC_ASR (AT91_MC + 0x04) /* MC Abort Status Register */ | 23 | #define AT91_MC_ASR 0x04 /* MC Abort Status Register */ |
24 | #define AT91_MC_UNADD (1 << 0) /* Undefined Address Abort Status */ | 24 | #define AT91_MC_UNADD (1 << 0) /* Undefined Address Abort Status */ |
25 | #define AT91_MC_MISADD (1 << 1) /* Misaligned Address Abort Status */ | 25 | #define AT91_MC_MISADD (1 << 1) /* Misaligned Address Abort Status */ |
26 | #define AT91_MC_ABTSZ (3 << 8) /* Abort Size Status */ | 26 | #define AT91_MC_ABTSZ (3 << 8) /* Abort Size Status */ |
@@ -40,16 +40,16 @@ | |||
40 | #define AT91_MC_SVMST2 (1 << 26) /* Saved UHP Abort Source */ | 40 | #define AT91_MC_SVMST2 (1 << 26) /* Saved UHP Abort Source */ |
41 | #define AT91_MC_SVMST3 (1 << 27) /* Saved EMAC Abort Source */ | 41 | #define AT91_MC_SVMST3 (1 << 27) /* Saved EMAC Abort Source */ |
42 | 42 | ||
43 | #define AT91_MC_AASR (AT91_MC + 0x08) /* MC Abort Address Status Register */ | 43 | #define AT91_MC_AASR 0x08 /* MC Abort Address Status Register */ |
44 | 44 | ||
45 | #define AT91_MC_MPR (AT91_MC + 0x0c) /* MC Master Priority Register */ | 45 | #define AT91_MC_MPR 0x0c /* MC Master Priority Register */ |
46 | #define AT91_MPR_MSTP0 (7 << 0) /* ARM920T Priority */ | 46 | #define AT91_MPR_MSTP0 (7 << 0) /* ARM920T Priority */ |
47 | #define AT91_MPR_MSTP1 (7 << 4) /* PDC Priority */ | 47 | #define AT91_MPR_MSTP1 (7 << 4) /* PDC Priority */ |
48 | #define AT91_MPR_MSTP2 (7 << 8) /* UHP Priority */ | 48 | #define AT91_MPR_MSTP2 (7 << 8) /* UHP Priority */ |
49 | #define AT91_MPR_MSTP3 (7 << 12) /* EMAC Priority */ | 49 | #define AT91_MPR_MSTP3 (7 << 12) /* EMAC Priority */ |
50 | 50 | ||
51 | /* External Bus Interface (EBI) registers */ | 51 | /* External Bus Interface (EBI) registers */ |
52 | #define AT91_EBI_CSA (AT91_MC + 0x60) /* Chip Select Assignment Register */ | 52 | #define AT91_EBI_CSA 0x60 /* Chip Select Assignment Register */ |
53 | #define AT91_EBI_CS0A (1 << 0) /* Chip Select 0 Assignment */ | 53 | #define AT91_EBI_CS0A (1 << 0) /* Chip Select 0 Assignment */ |
54 | #define AT91_EBI_CS0A_SMC (0 << 0) | 54 | #define AT91_EBI_CS0A_SMC (0 << 0) |
55 | #define AT91_EBI_CS0A_BFC (1 << 0) | 55 | #define AT91_EBI_CS0A_BFC (1 << 0) |
@@ -66,7 +66,7 @@ | |||
66 | #define AT91_EBI_DBPUC (1 << 0) /* Data Bus Pull-Up Configuration */ | 66 | #define AT91_EBI_DBPUC (1 << 0) /* Data Bus Pull-Up Configuration */ |
67 | 67 | ||
68 | /* Static Memory Controller (SMC) registers */ | 68 | /* Static Memory Controller (SMC) registers */ |
69 | #define AT91_SMC_CSR(n) (AT91_MC + 0x70 + ((n) * 4))/* SMC Chip Select Register */ | 69 | #define AT91_SMC_CSR(n) (0x70 + ((n) * 4)) /* SMC Chip Select Register */ |
70 | #define AT91_SMC_NWS (0x7f << 0) /* Number of Wait States */ | 70 | #define AT91_SMC_NWS (0x7f << 0) /* Number of Wait States */ |
71 | #define AT91_SMC_NWS_(x) ((x) << 0) | 71 | #define AT91_SMC_NWS_(x) ((x) << 0) |
72 | #define AT91_SMC_WSEN (1 << 7) /* Wait State Enable */ | 72 | #define AT91_SMC_WSEN (1 << 7) /* Wait State Enable */ |
@@ -87,52 +87,8 @@ | |||
87 | #define AT91_SMC_RWHOLD (7 << 28) /* Read & Write Signal Hold Time */ | 87 | #define AT91_SMC_RWHOLD (7 << 28) /* Read & Write Signal Hold Time */ |
88 | #define AT91_SMC_RWHOLD_(x) ((x) << 28) | 88 | #define AT91_SMC_RWHOLD_(x) ((x) << 28) |
89 | 89 | ||
90 | /* SDRAM Controller registers */ | ||
91 | #define AT91_SDRAMC_MR (AT91_MC + 0x90) /* Mode Register */ | ||
92 | #define AT91_SDRAMC_MODE (0xf << 0) /* Command Mode */ | ||
93 | #define AT91_SDRAMC_MODE_NORMAL (0 << 0) | ||
94 | #define AT91_SDRAMC_MODE_NOP (1 << 0) | ||
95 | #define AT91_SDRAMC_MODE_PRECHARGE (2 << 0) | ||
96 | #define AT91_SDRAMC_MODE_LMR (3 << 0) | ||
97 | #define AT91_SDRAMC_MODE_REFRESH (4 << 0) | ||
98 | #define AT91_SDRAMC_DBW (1 << 4) /* Data Bus Width */ | ||
99 | #define AT91_SDRAMC_DBW_32 (0 << 4) | ||
100 | #define AT91_SDRAMC_DBW_16 (1 << 4) | ||
101 | |||
102 | #define AT91_SDRAMC_TR (AT91_MC + 0x94) /* Refresh Timer Register */ | ||
103 | #define AT91_SDRAMC_COUNT (0xfff << 0) /* Refresh Timer Count */ | ||
104 | |||
105 | #define AT91_SDRAMC_CR (AT91_MC + 0x98) /* Configuration Register */ | ||
106 | #define AT91_SDRAMC_NC (3 << 0) /* Number of Column Bits */ | ||
107 | #define AT91_SDRAMC_NC_8 (0 << 0) | ||
108 | #define AT91_SDRAMC_NC_9 (1 << 0) | ||
109 | #define AT91_SDRAMC_NC_10 (2 << 0) | ||
110 | #define AT91_SDRAMC_NC_11 (3 << 0) | ||
111 | #define AT91_SDRAMC_NR (3 << 2) /* Number of Row Bits */ | ||
112 | #define AT91_SDRAMC_NR_11 (0 << 2) | ||
113 | #define AT91_SDRAMC_NR_12 (1 << 2) | ||
114 | #define AT91_SDRAMC_NR_13 (2 << 2) | ||
115 | #define AT91_SDRAMC_NB (1 << 4) /* Number of Banks */ | ||
116 | #define AT91_SDRAMC_NB_2 (0 << 4) | ||
117 | #define AT91_SDRAMC_NB_4 (1 << 4) | ||
118 | #define AT91_SDRAMC_CAS (3 << 5) /* CAS Latency */ | ||
119 | #define AT91_SDRAMC_CAS_2 (2 << 5) | ||
120 | #define AT91_SDRAMC_TWR (0xf << 7) /* Write Recovery Delay */ | ||
121 | #define AT91_SDRAMC_TRC (0xf << 11) /* Row Cycle Delay */ | ||
122 | #define AT91_SDRAMC_TRP (0xf << 15) /* Row Precharge Delay */ | ||
123 | #define AT91_SDRAMC_TRCD (0xf << 19) /* Row to Column Delay */ | ||
124 | #define AT91_SDRAMC_TRAS (0xf << 23) /* Active to Precharge Delay */ | ||
125 | #define AT91_SDRAMC_TXSR (0xf << 27) /* Exit Self Refresh to Active Delay */ | ||
126 | |||
127 | #define AT91_SDRAMC_SRR (AT91_MC + 0x9c) /* Self Refresh Register */ | ||
128 | #define AT91_SDRAMC_LPR (AT91_MC + 0xa0) /* Low Power Register */ | ||
129 | #define AT91_SDRAMC_IER (AT91_MC + 0xa4) /* Interrupt Enable Register */ | ||
130 | #define AT91_SDRAMC_IDR (AT91_MC + 0xa8) /* Interrupt Disable Register */ | ||
131 | #define AT91_SDRAMC_IMR (AT91_MC + 0xac) /* Interrupt Mask Register */ | ||
132 | #define AT91_SDRAMC_ISR (AT91_MC + 0xb0) /* Interrupt Status Register */ | ||
133 | |||
134 | /* Burst Flash Controller register */ | 90 | /* Burst Flash Controller register */ |
135 | #define AT91_BFC_MR (AT91_MC + 0xc0) /* Mode Register */ | 91 | #define AT91_BFC_MR 0xc0 /* Mode Register */ |
136 | #define AT91_BFC_BFCOM (3 << 0) /* Burst Flash Controller Operating Mode */ | 92 | #define AT91_BFC_BFCOM (3 << 0) /* Burst Flash Controller Operating Mode */ |
137 | #define AT91_BFC_BFCOM_DISABLED (0 << 0) | 93 | #define AT91_BFC_BFCOM_DISABLED (0 << 0) |
138 | #define AT91_BFC_BFCOM_ASYNC (1 << 0) | 94 | #define AT91_BFC_BFCOM_ASYNC (1 << 0) |
diff --git a/arch/arm/mach-at91/include/mach/at91rm9200_sdramc.h b/arch/arm/mach-at91/include/mach/at91rm9200_sdramc.h new file mode 100644 index 000000000000..aa047f458f1b --- /dev/null +++ b/arch/arm/mach-at91/include/mach/at91rm9200_sdramc.h | |||
@@ -0,0 +1,63 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-at91/include/mach/at91rm9200_sdramc.h | ||
3 | * | ||
4 | * Copyright (C) 2005 Ivan Kokshaysky | ||
5 | * Copyright (C) SAN People | ||
6 | * | ||
7 | * Memory Controllers (SDRAMC only) - System peripherals registers. | ||
8 | * Based on AT91RM9200 datasheet revision E. | ||
9 | * | ||
10 | * This program is free software; you can redistribute it and/or modify | ||
11 | * it under the terms of the GNU General Public License as published by | ||
12 | * the Free Software Foundation; either version 2 of the License, or | ||
13 | * (at your option) any later version. | ||
14 | */ | ||
15 | |||
16 | #ifndef AT91RM9200_SDRAMC_H | ||
17 | #define AT91RM9200_SDRAMC_H | ||
18 | |||
19 | /* SDRAM Controller registers */ | ||
20 | #define AT91RM9200_SDRAMC_MR 0x90 /* Mode Register */ | ||
21 | #define AT91RM9200_SDRAMC_MODE (0xf << 0) /* Command Mode */ | ||
22 | #define AT91RM9200_SDRAMC_MODE_NORMAL (0 << 0) | ||
23 | #define AT91RM9200_SDRAMC_MODE_NOP (1 << 0) | ||
24 | #define AT91RM9200_SDRAMC_MODE_PRECHARGE (2 << 0) | ||
25 | #define AT91RM9200_SDRAMC_MODE_LMR (3 << 0) | ||
26 | #define AT91RM9200_SDRAMC_MODE_REFRESH (4 << 0) | ||
27 | #define AT91RM9200_SDRAMC_DBW (1 << 4) /* Data Bus Width */ | ||
28 | #define AT91RM9200_SDRAMC_DBW_32 (0 << 4) | ||
29 | #define AT91RM9200_SDRAMC_DBW_16 (1 << 4) | ||
30 | |||
31 | #define AT91RM9200_SDRAMC_TR 0x94 /* Refresh Timer Register */ | ||
32 | #define AT91RM9200_SDRAMC_COUNT (0xfff << 0) /* Refresh Timer Count */ | ||
33 | |||
34 | #define AT91RM9200_SDRAMC_CR 0x98 /* Configuration Register */ | ||
35 | #define AT91RM9200_SDRAMC_NC (3 << 0) /* Number of Column Bits */ | ||
36 | #define AT91RM9200_SDRAMC_NC_8 (0 << 0) | ||
37 | #define AT91RM9200_SDRAMC_NC_9 (1 << 0) | ||
38 | #define AT91RM9200_SDRAMC_NC_10 (2 << 0) | ||
39 | #define AT91RM9200_SDRAMC_NC_11 (3 << 0) | ||
40 | #define AT91RM9200_SDRAMC_NR (3 << 2) /* Number of Row Bits */ | ||
41 | #define AT91RM9200_SDRAMC_NR_11 (0 << 2) | ||
42 | #define AT91RM9200_SDRAMC_NR_12 (1 << 2) | ||
43 | #define AT91RM9200_SDRAMC_NR_13 (2 << 2) | ||
44 | #define AT91RM9200_SDRAMC_NB (1 << 4) /* Number of Banks */ | ||
45 | #define AT91RM9200_SDRAMC_NB_2 (0 << 4) | ||
46 | #define AT91RM9200_SDRAMC_NB_4 (1 << 4) | ||
47 | #define AT91RM9200_SDRAMC_CAS (3 << 5) /* CAS Latency */ | ||
48 | #define AT91RM9200_SDRAMC_CAS_2 (2 << 5) | ||
49 | #define AT91RM9200_SDRAMC_TWR (0xf << 7) /* Write Recovery Delay */ | ||
50 | #define AT91RM9200_SDRAMC_TRC (0xf << 11) /* Row Cycle Delay */ | ||
51 | #define AT91RM9200_SDRAMC_TRP (0xf << 15) /* Row Precharge Delay */ | ||
52 | #define AT91RM9200_SDRAMC_TRCD (0xf << 19) /* Row to Column Delay */ | ||
53 | #define AT91RM9200_SDRAMC_TRAS (0xf << 23) /* Active to Precharge Delay */ | ||
54 | #define AT91RM9200_SDRAMC_TXSR (0xf << 27) /* Exit Self Refresh to Active Delay */ | ||
55 | |||
56 | #define AT91RM9200_SDRAMC_SRR 0x9c /* Self Refresh Register */ | ||
57 | #define AT91RM9200_SDRAMC_LPR 0xa0 /* Low Power Register */ | ||
58 | #define AT91RM9200_SDRAMC_IER 0xa4 /* Interrupt Enable Register */ | ||
59 | #define AT91RM9200_SDRAMC_IDR 0xa8 /* Interrupt Disable Register */ | ||
60 | #define AT91RM9200_SDRAMC_IMR 0xac /* Interrupt Mask Register */ | ||
61 | #define AT91RM9200_SDRAMC_ISR 0xb0 /* Interrupt Status Register */ | ||
62 | |||
63 | #endif | ||
diff --git a/arch/arm/mach-at91/include/mach/at91sam9260.h b/arch/arm/mach-at91/include/mach/at91sam9260.h index fa5ca278adeb..08ae9afd00fe 100644 --- a/arch/arm/mach-at91/include/mach/at91sam9260.h +++ b/arch/arm/mach-at91/include/mach/at91sam9260.h | |||
@@ -78,15 +78,12 @@ | |||
78 | #define AT91SAM9260_BASE_ADC 0xfffe0000 | 78 | #define AT91SAM9260_BASE_ADC 0xfffe0000 |
79 | 79 | ||
80 | /* | 80 | /* |
81 | * System Peripherals (offset from AT91_BASE_SYS) | 81 | * System Peripherals |
82 | */ | 82 | */ |
83 | #define AT91_SDRAMC0 (0xffffea00 - AT91_BASE_SYS) | ||
84 | #define AT91_MATRIX (0xffffee00 - AT91_BASE_SYS) | ||
85 | #define AT91_PMC (0xfffffc00 - AT91_BASE_SYS) | ||
86 | #define AT91_GPBR (0xfffffd50 - AT91_BASE_SYS) | ||
87 | |||
88 | #define AT91SAM9260_BASE_ECC 0xffffe800 | 83 | #define AT91SAM9260_BASE_ECC 0xffffe800 |
84 | #define AT91SAM9260_BASE_SDRAMC 0xffffea00 | ||
89 | #define AT91SAM9260_BASE_SMC 0xffffec00 | 85 | #define AT91SAM9260_BASE_SMC 0xffffec00 |
86 | #define AT91SAM9260_BASE_MATRIX 0xffffee00 | ||
90 | #define AT91SAM9260_BASE_DBGU AT91_BASE_DBGU0 | 87 | #define AT91SAM9260_BASE_DBGU AT91_BASE_DBGU0 |
91 | #define AT91SAM9260_BASE_PIOA 0xfffff400 | 88 | #define AT91SAM9260_BASE_PIOA 0xfffff400 |
92 | #define AT91SAM9260_BASE_PIOB 0xfffff600 | 89 | #define AT91SAM9260_BASE_PIOB 0xfffff600 |
@@ -96,6 +93,7 @@ | |||
96 | #define AT91SAM9260_BASE_RTT 0xfffffd20 | 93 | #define AT91SAM9260_BASE_RTT 0xfffffd20 |
97 | #define AT91SAM9260_BASE_PIT 0xfffffd30 | 94 | #define AT91SAM9260_BASE_PIT 0xfffffd30 |
98 | #define AT91SAM9260_BASE_WDT 0xfffffd40 | 95 | #define AT91SAM9260_BASE_WDT 0xfffffd40 |
96 | #define AT91SAM9260_BASE_GPBR 0xfffffd50 | ||
99 | 97 | ||
100 | #define AT91_USART0 AT91SAM9260_BASE_US0 | 98 | #define AT91_USART0 AT91SAM9260_BASE_US0 |
101 | #define AT91_USART1 AT91SAM9260_BASE_US1 | 99 | #define AT91_USART1 AT91SAM9260_BASE_US1 |
@@ -115,6 +113,8 @@ | |||
115 | #define AT91SAM9260_SRAM0_SIZE SZ_4K /* Internal SRAM 0 size (4Kb) */ | 113 | #define AT91SAM9260_SRAM0_SIZE SZ_4K /* Internal SRAM 0 size (4Kb) */ |
116 | #define AT91SAM9260_SRAM1_BASE 0x00300000 /* Internal SRAM 1 base address */ | 114 | #define AT91SAM9260_SRAM1_BASE 0x00300000 /* Internal SRAM 1 base address */ |
117 | #define AT91SAM9260_SRAM1_SIZE SZ_4K /* Internal SRAM 1 size (4Kb) */ | 115 | #define AT91SAM9260_SRAM1_SIZE SZ_4K /* Internal SRAM 1 size (4Kb) */ |
116 | #define AT91SAM9260_SRAM_BASE 0x002FF000 /* Internal SRAM base address */ | ||
117 | #define AT91SAM9260_SRAM_SIZE SZ_8K /* Internal SRAM size (8Kb) */ | ||
118 | 118 | ||
119 | #define AT91SAM9260_UHP_BASE 0x00500000 /* USB Host controller */ | 119 | #define AT91SAM9260_UHP_BASE 0x00500000 /* USB Host controller */ |
120 | 120 | ||
@@ -128,6 +128,8 @@ | |||
128 | #define AT91SAM9G20_SRAM0_SIZE SZ_16K /* Internal SRAM 0 size (16Kb) */ | 128 | #define AT91SAM9G20_SRAM0_SIZE SZ_16K /* Internal SRAM 0 size (16Kb) */ |
129 | #define AT91SAM9G20_SRAM1_BASE 0x00300000 /* Internal SRAM 1 base address */ | 129 | #define AT91SAM9G20_SRAM1_BASE 0x00300000 /* Internal SRAM 1 base address */ |
130 | #define AT91SAM9G20_SRAM1_SIZE SZ_16K /* Internal SRAM 1 size (16Kb) */ | 130 | #define AT91SAM9G20_SRAM1_SIZE SZ_16K /* Internal SRAM 1 size (16Kb) */ |
131 | #define AT91SAM9G20_SRAM_BASE 0x002FC000 /* Internal SRAM base address */ | ||
132 | #define AT91SAM9G20_SRAM_SIZE SZ_32K /* Internal SRAM size (32Kb) */ | ||
131 | 133 | ||
132 | #define AT91SAM9G20_UHP_BASE 0x00500000 /* USB Host controller */ | 134 | #define AT91SAM9G20_UHP_BASE 0x00500000 /* USB Host controller */ |
133 | 135 | ||
diff --git a/arch/arm/mach-at91/include/mach/at91sam9260_matrix.h b/arch/arm/mach-at91/include/mach/at91sam9260_matrix.h index 020f02ed921a..f459df420629 100644 --- a/arch/arm/mach-at91/include/mach/at91sam9260_matrix.h +++ b/arch/arm/mach-at91/include/mach/at91sam9260_matrix.h | |||
@@ -15,12 +15,12 @@ | |||
15 | #ifndef AT91SAM9260_MATRIX_H | 15 | #ifndef AT91SAM9260_MATRIX_H |
16 | #define AT91SAM9260_MATRIX_H | 16 | #define AT91SAM9260_MATRIX_H |
17 | 17 | ||
18 | #define AT91_MATRIX_MCFG0 (AT91_MATRIX + 0x00) /* Master Configuration Register 0 */ | 18 | #define AT91_MATRIX_MCFG0 0x00 /* Master Configuration Register 0 */ |
19 | #define AT91_MATRIX_MCFG1 (AT91_MATRIX + 0x04) /* Master Configuration Register 1 */ | 19 | #define AT91_MATRIX_MCFG1 0x04 /* Master Configuration Register 1 */ |
20 | #define AT91_MATRIX_MCFG2 (AT91_MATRIX + 0x08) /* Master Configuration Register 2 */ | 20 | #define AT91_MATRIX_MCFG2 0x08 /* Master Configuration Register 2 */ |
21 | #define AT91_MATRIX_MCFG3 (AT91_MATRIX + 0x0C) /* Master Configuration Register 3 */ | 21 | #define AT91_MATRIX_MCFG3 0x0C /* Master Configuration Register 3 */ |
22 | #define AT91_MATRIX_MCFG4 (AT91_MATRIX + 0x10) /* Master Configuration Register 4 */ | 22 | #define AT91_MATRIX_MCFG4 0x10 /* Master Configuration Register 4 */ |
23 | #define AT91_MATRIX_MCFG5 (AT91_MATRIX + 0x14) /* Master Configuration Register 5 */ | 23 | #define AT91_MATRIX_MCFG5 0x14 /* Master Configuration Register 5 */ |
24 | #define AT91_MATRIX_ULBT (7 << 0) /* Undefined Length Burst Type */ | 24 | #define AT91_MATRIX_ULBT (7 << 0) /* Undefined Length Burst Type */ |
25 | #define AT91_MATRIX_ULBT_INFINITE (0 << 0) | 25 | #define AT91_MATRIX_ULBT_INFINITE (0 << 0) |
26 | #define AT91_MATRIX_ULBT_SINGLE (1 << 0) | 26 | #define AT91_MATRIX_ULBT_SINGLE (1 << 0) |
@@ -28,11 +28,11 @@ | |||
28 | #define AT91_MATRIX_ULBT_EIGHT (3 << 0) | 28 | #define AT91_MATRIX_ULBT_EIGHT (3 << 0) |
29 | #define AT91_MATRIX_ULBT_SIXTEEN (4 << 0) | 29 | #define AT91_MATRIX_ULBT_SIXTEEN (4 << 0) |
30 | 30 | ||
31 | #define AT91_MATRIX_SCFG0 (AT91_MATRIX + 0x40) /* Slave Configuration Register 0 */ | 31 | #define AT91_MATRIX_SCFG0 0x40 /* Slave Configuration Register 0 */ |
32 | #define AT91_MATRIX_SCFG1 (AT91_MATRIX + 0x44) /* Slave Configuration Register 1 */ | 32 | #define AT91_MATRIX_SCFG1 0x44 /* Slave Configuration Register 1 */ |
33 | #define AT91_MATRIX_SCFG2 (AT91_MATRIX + 0x48) /* Slave Configuration Register 2 */ | 33 | #define AT91_MATRIX_SCFG2 0x48 /* Slave Configuration Register 2 */ |
34 | #define AT91_MATRIX_SCFG3 (AT91_MATRIX + 0x4C) /* Slave Configuration Register 3 */ | 34 | #define AT91_MATRIX_SCFG3 0x4C /* Slave Configuration Register 3 */ |
35 | #define AT91_MATRIX_SCFG4 (AT91_MATRIX + 0x50) /* Slave Configuration Register 4 */ | 35 | #define AT91_MATRIX_SCFG4 0x50 /* Slave Configuration Register 4 */ |
36 | #define AT91_MATRIX_SLOT_CYCLE (0xff << 0) /* Maximum Number of Allowed Cycles for a Burst */ | 36 | #define AT91_MATRIX_SLOT_CYCLE (0xff << 0) /* Maximum Number of Allowed Cycles for a Burst */ |
37 | #define AT91_MATRIX_DEFMSTR_TYPE (3 << 16) /* Default Master Type */ | 37 | #define AT91_MATRIX_DEFMSTR_TYPE (3 << 16) /* Default Master Type */ |
38 | #define AT91_MATRIX_DEFMSTR_TYPE_NONE (0 << 16) | 38 | #define AT91_MATRIX_DEFMSTR_TYPE_NONE (0 << 16) |
@@ -43,11 +43,11 @@ | |||
43 | #define AT91_MATRIX_ARBT_ROUND_ROBIN (0 << 24) | 43 | #define AT91_MATRIX_ARBT_ROUND_ROBIN (0 << 24) |
44 | #define AT91_MATRIX_ARBT_FIXED_PRIORITY (1 << 24) | 44 | #define AT91_MATRIX_ARBT_FIXED_PRIORITY (1 << 24) |
45 | 45 | ||
46 | #define AT91_MATRIX_PRAS0 (AT91_MATRIX + 0x80) /* Priority Register A for Slave 0 */ | 46 | #define AT91_MATRIX_PRAS0 0x80 /* Priority Register A for Slave 0 */ |
47 | #define AT91_MATRIX_PRAS1 (AT91_MATRIX + 0x88) /* Priority Register A for Slave 1 */ | 47 | #define AT91_MATRIX_PRAS1 0x88 /* Priority Register A for Slave 1 */ |
48 | #define AT91_MATRIX_PRAS2 (AT91_MATRIX + 0x90) /* Priority Register A for Slave 2 */ | 48 | #define AT91_MATRIX_PRAS2 0x90 /* Priority Register A for Slave 2 */ |
49 | #define AT91_MATRIX_PRAS3 (AT91_MATRIX + 0x98) /* Priority Register A for Slave 3 */ | 49 | #define AT91_MATRIX_PRAS3 0x98 /* Priority Register A for Slave 3 */ |
50 | #define AT91_MATRIX_PRAS4 (AT91_MATRIX + 0xA0) /* Priority Register A for Slave 4 */ | 50 | #define AT91_MATRIX_PRAS4 0xA0 /* Priority Register A for Slave 4 */ |
51 | #define AT91_MATRIX_M0PR (3 << 0) /* Master 0 Priority */ | 51 | #define AT91_MATRIX_M0PR (3 << 0) /* Master 0 Priority */ |
52 | #define AT91_MATRIX_M1PR (3 << 4) /* Master 1 Priority */ | 52 | #define AT91_MATRIX_M1PR (3 << 4) /* Master 1 Priority */ |
53 | #define AT91_MATRIX_M2PR (3 << 8) /* Master 2 Priority */ | 53 | #define AT91_MATRIX_M2PR (3 << 8) /* Master 2 Priority */ |
@@ -55,11 +55,11 @@ | |||
55 | #define AT91_MATRIX_M4PR (3 << 16) /* Master 4 Priority */ | 55 | #define AT91_MATRIX_M4PR (3 << 16) /* Master 4 Priority */ |
56 | #define AT91_MATRIX_M5PR (3 << 20) /* Master 5 Priority */ | 56 | #define AT91_MATRIX_M5PR (3 << 20) /* Master 5 Priority */ |
57 | 57 | ||
58 | #define AT91_MATRIX_MRCR (AT91_MATRIX + 0x100) /* Master Remap Control Register */ | 58 | #define AT91_MATRIX_MRCR 0x100 /* Master Remap Control Register */ |
59 | #define AT91_MATRIX_RCB0 (1 << 0) /* Remap Command for AHB Master 0 (ARM926EJ-S Instruction Master) */ | 59 | #define AT91_MATRIX_RCB0 (1 << 0) /* Remap Command for AHB Master 0 (ARM926EJ-S Instruction Master) */ |
60 | #define AT91_MATRIX_RCB1 (1 << 1) /* Remap Command for AHB Master 1 (ARM926EJ-S Data Master) */ | 60 | #define AT91_MATRIX_RCB1 (1 << 1) /* Remap Command for AHB Master 1 (ARM926EJ-S Data Master) */ |
61 | 61 | ||
62 | #define AT91_MATRIX_EBICSA (AT91_MATRIX + 0x11C) /* EBI Chip Select Assignment Register */ | 62 | #define AT91_MATRIX_EBICSA 0x11C /* EBI Chip Select Assignment Register */ |
63 | #define AT91_MATRIX_CS1A (1 << 1) /* Chip Select 1 Assignment */ | 63 | #define AT91_MATRIX_CS1A (1 << 1) /* Chip Select 1 Assignment */ |
64 | #define AT91_MATRIX_CS1A_SMC (0 << 1) | 64 | #define AT91_MATRIX_CS1A_SMC (0 << 1) |
65 | #define AT91_MATRIX_CS1A_SDRAMC (1 << 1) | 65 | #define AT91_MATRIX_CS1A_SDRAMC (1 << 1) |
diff --git a/arch/arm/mach-at91/include/mach/at91sam9261.h b/arch/arm/mach-at91/include/mach/at91sam9261.h index 7cde2d36570e..44fbdc12ee62 100644 --- a/arch/arm/mach-at91/include/mach/at91sam9261.h +++ b/arch/arm/mach-at91/include/mach/at91sam9261.h | |||
@@ -63,14 +63,11 @@ | |||
63 | 63 | ||
64 | 64 | ||
65 | /* | 65 | /* |
66 | * System Peripherals (offset from AT91_BASE_SYS) | 66 | * System Peripherals |
67 | */ | 67 | */ |
68 | #define AT91_SDRAMC0 (0xffffea00 - AT91_BASE_SYS) | ||
69 | #define AT91_MATRIX (0xffffee00 - AT91_BASE_SYS) | ||
70 | #define AT91_PMC (0xfffffc00 - AT91_BASE_SYS) | ||
71 | #define AT91_GPBR (0xfffffd50 - AT91_BASE_SYS) | ||
72 | |||
73 | #define AT91SAM9261_BASE_SMC 0xffffec00 | 68 | #define AT91SAM9261_BASE_SMC 0xffffec00 |
69 | #define AT91SAM9261_BASE_MATRIX 0xffffee00 | ||
70 | #define AT91SAM9261_BASE_SDRAMC 0xffffea00 | ||
74 | #define AT91SAM9261_BASE_DBGU AT91_BASE_DBGU0 | 71 | #define AT91SAM9261_BASE_DBGU AT91_BASE_DBGU0 |
75 | #define AT91SAM9261_BASE_PIOA 0xfffff400 | 72 | #define AT91SAM9261_BASE_PIOA 0xfffff400 |
76 | #define AT91SAM9261_BASE_PIOB 0xfffff600 | 73 | #define AT91SAM9261_BASE_PIOB 0xfffff600 |
@@ -80,6 +77,7 @@ | |||
80 | #define AT91SAM9261_BASE_RTT 0xfffffd20 | 77 | #define AT91SAM9261_BASE_RTT 0xfffffd20 |
81 | #define AT91SAM9261_BASE_PIT 0xfffffd30 | 78 | #define AT91SAM9261_BASE_PIT 0xfffffd30 |
82 | #define AT91SAM9261_BASE_WDT 0xfffffd40 | 79 | #define AT91SAM9261_BASE_WDT 0xfffffd40 |
80 | #define AT91SAM9261_BASE_GPBR 0xfffffd50 | ||
83 | 81 | ||
84 | #define AT91_USART0 AT91SAM9261_BASE_US0 | 82 | #define AT91_USART0 AT91SAM9261_BASE_US0 |
85 | #define AT91_USART1 AT91SAM9261_BASE_US1 | 83 | #define AT91_USART1 AT91SAM9261_BASE_US1 |
diff --git a/arch/arm/mach-at91/include/mach/at91sam9261_matrix.h b/arch/arm/mach-at91/include/mach/at91sam9261_matrix.h index 69c6501915d9..a50cdf8b8ca4 100644 --- a/arch/arm/mach-at91/include/mach/at91sam9261_matrix.h +++ b/arch/arm/mach-at91/include/mach/at91sam9261_matrix.h | |||
@@ -15,15 +15,15 @@ | |||
15 | #ifndef AT91SAM9261_MATRIX_H | 15 | #ifndef AT91SAM9261_MATRIX_H |
16 | #define AT91SAM9261_MATRIX_H | 16 | #define AT91SAM9261_MATRIX_H |
17 | 17 | ||
18 | #define AT91_MATRIX_MCFG (AT91_MATRIX + 0x00) /* Master Configuration Register */ | 18 | #define AT91_MATRIX_MCFG 0x00 /* Master Configuration Register */ |
19 | #define AT91_MATRIX_RCB0 (1 << 0) /* Remap Command for AHB Master 0 (ARM926EJ-S Instruction Master) */ | 19 | #define AT91_MATRIX_RCB0 (1 << 0) /* Remap Command for AHB Master 0 (ARM926EJ-S Instruction Master) */ |
20 | #define AT91_MATRIX_RCB1 (1 << 1) /* Remap Command for AHB Master 1 (ARM926EJ-S Data Master) */ | 20 | #define AT91_MATRIX_RCB1 (1 << 1) /* Remap Command for AHB Master 1 (ARM926EJ-S Data Master) */ |
21 | 21 | ||
22 | #define AT91_MATRIX_SCFG0 (AT91_MATRIX + 0x04) /* Slave Configuration Register 0 */ | 22 | #define AT91_MATRIX_SCFG0 0x04 /* Slave Configuration Register 0 */ |
23 | #define AT91_MATRIX_SCFG1 (AT91_MATRIX + 0x08) /* Slave Configuration Register 1 */ | 23 | #define AT91_MATRIX_SCFG1 0x08 /* Slave Configuration Register 1 */ |
24 | #define AT91_MATRIX_SCFG2 (AT91_MATRIX + 0x0C) /* Slave Configuration Register 2 */ | 24 | #define AT91_MATRIX_SCFG2 0x0C /* Slave Configuration Register 2 */ |
25 | #define AT91_MATRIX_SCFG3 (AT91_MATRIX + 0x10) /* Slave Configuration Register 3 */ | 25 | #define AT91_MATRIX_SCFG3 0x10 /* Slave Configuration Register 3 */ |
26 | #define AT91_MATRIX_SCFG4 (AT91_MATRIX + 0x14) /* Slave Configuration Register 4 */ | 26 | #define AT91_MATRIX_SCFG4 0x14 /* Slave Configuration Register 4 */ |
27 | #define AT91_MATRIX_SLOT_CYCLE (0xff << 0) /* Maximum Number of Allowed Cycles for a Burst */ | 27 | #define AT91_MATRIX_SLOT_CYCLE (0xff << 0) /* Maximum Number of Allowed Cycles for a Burst */ |
28 | #define AT91_MATRIX_DEFMSTR_TYPE (3 << 16) /* Default Master Type */ | 28 | #define AT91_MATRIX_DEFMSTR_TYPE (3 << 16) /* Default Master Type */ |
29 | #define AT91_MATRIX_DEFMSTR_TYPE_NONE (0 << 16) | 29 | #define AT91_MATRIX_DEFMSTR_TYPE_NONE (0 << 16) |
@@ -31,7 +31,7 @@ | |||
31 | #define AT91_MATRIX_DEFMSTR_TYPE_FIXED (2 << 16) | 31 | #define AT91_MATRIX_DEFMSTR_TYPE_FIXED (2 << 16) |
32 | #define AT91_MATRIX_FIXED_DEFMSTR (7 << 18) /* Fixed Index of Default Master */ | 32 | #define AT91_MATRIX_FIXED_DEFMSTR (7 << 18) /* Fixed Index of Default Master */ |
33 | 33 | ||
34 | #define AT91_MATRIX_TCR (AT91_MATRIX + 0x24) /* TCM Configuration Register */ | 34 | #define AT91_MATRIX_TCR 0x24 /* TCM Configuration Register */ |
35 | #define AT91_MATRIX_ITCM_SIZE (0xf << 0) /* Size of ITCM enabled memory block */ | 35 | #define AT91_MATRIX_ITCM_SIZE (0xf << 0) /* Size of ITCM enabled memory block */ |
36 | #define AT91_MATRIX_ITCM_0 (0 << 0) | 36 | #define AT91_MATRIX_ITCM_0 (0 << 0) |
37 | #define AT91_MATRIX_ITCM_16 (5 << 0) | 37 | #define AT91_MATRIX_ITCM_16 (5 << 0) |
@@ -43,7 +43,7 @@ | |||
43 | #define AT91_MATRIX_DTCM_32 (6 << 4) | 43 | #define AT91_MATRIX_DTCM_32 (6 << 4) |
44 | #define AT91_MATRIX_DTCM_64 (7 << 4) | 44 | #define AT91_MATRIX_DTCM_64 (7 << 4) |
45 | 45 | ||
46 | #define AT91_MATRIX_EBICSA (AT91_MATRIX + 0x30) /* EBI Chip Select Assignment Register */ | 46 | #define AT91_MATRIX_EBICSA 0x30 /* EBI Chip Select Assignment Register */ |
47 | #define AT91_MATRIX_CS1A (1 << 1) /* Chip Select 1 Assignment */ | 47 | #define AT91_MATRIX_CS1A (1 << 1) /* Chip Select 1 Assignment */ |
48 | #define AT91_MATRIX_CS1A_SMC (0 << 1) | 48 | #define AT91_MATRIX_CS1A_SMC (0 << 1) |
49 | #define AT91_MATRIX_CS1A_SDRAMC (1 << 1) | 49 | #define AT91_MATRIX_CS1A_SDRAMC (1 << 1) |
@@ -58,7 +58,7 @@ | |||
58 | #define AT91_MATRIX_CS5A_SMC_CF2 (1 << 5) | 58 | #define AT91_MATRIX_CS5A_SMC_CF2 (1 << 5) |
59 | #define AT91_MATRIX_DBPUC (1 << 8) /* Data Bus Pull-up Configuration */ | 59 | #define AT91_MATRIX_DBPUC (1 << 8) /* Data Bus Pull-up Configuration */ |
60 | 60 | ||
61 | #define AT91_MATRIX_USBPUCR (AT91_MATRIX + 0x34) /* USB Pad Pull-Up Control Register */ | 61 | #define AT91_MATRIX_USBPUCR 0x34 /* USB Pad Pull-Up Control Register */ |
62 | #define AT91_MATRIX_USBPUCR_PUON (1 << 30) /* USB Device PAD Pull-up Enable */ | 62 | #define AT91_MATRIX_USBPUCR_PUON (1 << 30) /* USB Device PAD Pull-up Enable */ |
63 | 63 | ||
64 | #endif | 64 | #endif |
diff --git a/arch/arm/mach-at91/include/mach/at91sam9263.h b/arch/arm/mach-at91/include/mach/at91sam9263.h index 5949abda962b..d96cbb2e03c4 100644 --- a/arch/arm/mach-at91/include/mach/at91sam9263.h +++ b/arch/arm/mach-at91/include/mach/at91sam9263.h | |||
@@ -72,18 +72,15 @@ | |||
72 | #define AT91SAM9263_BASE_2DGE 0xfffc8000 | 72 | #define AT91SAM9263_BASE_2DGE 0xfffc8000 |
73 | 73 | ||
74 | /* | 74 | /* |
75 | * System Peripherals (offset from AT91_BASE_SYS) | 75 | * System Peripherals |
76 | */ | 76 | */ |
77 | #define AT91_SDRAMC0 (0xffffe200 - AT91_BASE_SYS) | ||
78 | #define AT91_SDRAMC1 (0xffffe800 - AT91_BASE_SYS) | ||
79 | #define AT91_MATRIX (0xffffec00 - AT91_BASE_SYS) | ||
80 | #define AT91_PMC (0xfffffc00 - AT91_BASE_SYS) | ||
81 | #define AT91_GPBR (0xfffffd60 - AT91_BASE_SYS) | ||
82 | |||
83 | #define AT91SAM9263_BASE_ECC0 0xffffe000 | 77 | #define AT91SAM9263_BASE_ECC0 0xffffe000 |
78 | #define AT91SAM9263_BASE_SDRAMC0 0xffffe200 | ||
84 | #define AT91SAM9263_BASE_SMC0 0xffffe400 | 79 | #define AT91SAM9263_BASE_SMC0 0xffffe400 |
85 | #define AT91SAM9263_BASE_ECC1 0xffffe600 | 80 | #define AT91SAM9263_BASE_ECC1 0xffffe600 |
81 | #define AT91SAM9263_BASE_SDRAMC1 0xffffe800 | ||
86 | #define AT91SAM9263_BASE_SMC1 0xffffea00 | 82 | #define AT91SAM9263_BASE_SMC1 0xffffea00 |
83 | #define AT91SAM9263_BASE_MATRIX 0xffffec00 | ||
87 | #define AT91SAM9263_BASE_DBGU AT91_BASE_DBGU1 | 84 | #define AT91SAM9263_BASE_DBGU AT91_BASE_DBGU1 |
88 | #define AT91SAM9263_BASE_PIOA 0xfffff200 | 85 | #define AT91SAM9263_BASE_PIOA 0xfffff200 |
89 | #define AT91SAM9263_BASE_PIOB 0xfffff400 | 86 | #define AT91SAM9263_BASE_PIOB 0xfffff400 |
@@ -96,6 +93,7 @@ | |||
96 | #define AT91SAM9263_BASE_PIT 0xfffffd30 | 93 | #define AT91SAM9263_BASE_PIT 0xfffffd30 |
97 | #define AT91SAM9263_BASE_WDT 0xfffffd40 | 94 | #define AT91SAM9263_BASE_WDT 0xfffffd40 |
98 | #define AT91SAM9263_BASE_RTT1 0xfffffd50 | 95 | #define AT91SAM9263_BASE_RTT1 0xfffffd50 |
96 | #define AT91SAM9263_BASE_GPBR 0xfffffd60 | ||
99 | 97 | ||
100 | #define AT91_USART0 AT91SAM9263_BASE_US0 | 98 | #define AT91_USART0 AT91SAM9263_BASE_US0 |
101 | #define AT91_USART1 AT91SAM9263_BASE_US1 | 99 | #define AT91_USART1 AT91SAM9263_BASE_US1 |
diff --git a/arch/arm/mach-at91/include/mach/at91sam9263_matrix.h b/arch/arm/mach-at91/include/mach/at91sam9263_matrix.h index 9b3efd3eb2f3..ebb5fdb565e0 100644 --- a/arch/arm/mach-at91/include/mach/at91sam9263_matrix.h +++ b/arch/arm/mach-at91/include/mach/at91sam9263_matrix.h | |||
@@ -15,15 +15,15 @@ | |||
15 | #ifndef AT91SAM9263_MATRIX_H | 15 | #ifndef AT91SAM9263_MATRIX_H |
16 | #define AT91SAM9263_MATRIX_H | 16 | #define AT91SAM9263_MATRIX_H |
17 | 17 | ||
18 | #define AT91_MATRIX_MCFG0 (AT91_MATRIX + 0x00) /* Master Configuration Register 0 */ | 18 | #define AT91_MATRIX_MCFG0 0x00 /* Master Configuration Register 0 */ |
19 | #define AT91_MATRIX_MCFG1 (AT91_MATRIX + 0x04) /* Master Configuration Register 1 */ | 19 | #define AT91_MATRIX_MCFG1 0x04 /* Master Configuration Register 1 */ |
20 | #define AT91_MATRIX_MCFG2 (AT91_MATRIX + 0x08) /* Master Configuration Register 2 */ | 20 | #define AT91_MATRIX_MCFG2 0x08 /* Master Configuration Register 2 */ |
21 | #define AT91_MATRIX_MCFG3 (AT91_MATRIX + 0x0C) /* Master Configuration Register 3 */ | 21 | #define AT91_MATRIX_MCFG3 0x0C /* Master Configuration Register 3 */ |
22 | #define AT91_MATRIX_MCFG4 (AT91_MATRIX + 0x10) /* Master Configuration Register 4 */ | 22 | #define AT91_MATRIX_MCFG4 0x10 /* Master Configuration Register 4 */ |
23 | #define AT91_MATRIX_MCFG5 (AT91_MATRIX + 0x14) /* Master Configuration Register 5 */ | 23 | #define AT91_MATRIX_MCFG5 0x14 /* Master Configuration Register 5 */ |
24 | #define AT91_MATRIX_MCFG6 (AT91_MATRIX + 0x18) /* Master Configuration Register 6 */ | 24 | #define AT91_MATRIX_MCFG6 0x18 /* Master Configuration Register 6 */ |
25 | #define AT91_MATRIX_MCFG7 (AT91_MATRIX + 0x1C) /* Master Configuration Register 7 */ | 25 | #define AT91_MATRIX_MCFG7 0x1C /* Master Configuration Register 7 */ |
26 | #define AT91_MATRIX_MCFG8 (AT91_MATRIX + 0x20) /* Master Configuration Register 8 */ | 26 | #define AT91_MATRIX_MCFG8 0x20 /* Master Configuration Register 8 */ |
27 | #define AT91_MATRIX_ULBT (7 << 0) /* Undefined Length Burst Type */ | 27 | #define AT91_MATRIX_ULBT (7 << 0) /* Undefined Length Burst Type */ |
28 | #define AT91_MATRIX_ULBT_INFINITE (0 << 0) | 28 | #define AT91_MATRIX_ULBT_INFINITE (0 << 0) |
29 | #define AT91_MATRIX_ULBT_SINGLE (1 << 0) | 29 | #define AT91_MATRIX_ULBT_SINGLE (1 << 0) |
@@ -31,14 +31,14 @@ | |||
31 | #define AT91_MATRIX_ULBT_EIGHT (3 << 0) | 31 | #define AT91_MATRIX_ULBT_EIGHT (3 << 0) |
32 | #define AT91_MATRIX_ULBT_SIXTEEN (4 << 0) | 32 | #define AT91_MATRIX_ULBT_SIXTEEN (4 << 0) |
33 | 33 | ||
34 | #define AT91_MATRIX_SCFG0 (AT91_MATRIX + 0x40) /* Slave Configuration Register 0 */ | 34 | #define AT91_MATRIX_SCFG0 0x40 /* Slave Configuration Register 0 */ |
35 | #define AT91_MATRIX_SCFG1 (AT91_MATRIX + 0x44) /* Slave Configuration Register 1 */ | 35 | #define AT91_MATRIX_SCFG1 0x44 /* Slave Configuration Register 1 */ |
36 | #define AT91_MATRIX_SCFG2 (AT91_MATRIX + 0x48) /* Slave Configuration Register 2 */ | 36 | #define AT91_MATRIX_SCFG2 0x48 /* Slave Configuration Register 2 */ |
37 | #define AT91_MATRIX_SCFG3 (AT91_MATRIX + 0x4C) /* Slave Configuration Register 3 */ | 37 | #define AT91_MATRIX_SCFG3 0x4C /* Slave Configuration Register 3 */ |
38 | #define AT91_MATRIX_SCFG4 (AT91_MATRIX + 0x50) /* Slave Configuration Register 4 */ | 38 | #define AT91_MATRIX_SCFG4 0x50 /* Slave Configuration Register 4 */ |
39 | #define AT91_MATRIX_SCFG5 (AT91_MATRIX + 0x54) /* Slave Configuration Register 5 */ | 39 | #define AT91_MATRIX_SCFG5 0x54 /* Slave Configuration Register 5 */ |
40 | #define AT91_MATRIX_SCFG6 (AT91_MATRIX + 0x58) /* Slave Configuration Register 6 */ | 40 | #define AT91_MATRIX_SCFG6 0x58 /* Slave Configuration Register 6 */ |
41 | #define AT91_MATRIX_SCFG7 (AT91_MATRIX + 0x5C) /* Slave Configuration Register 7 */ | 41 | #define AT91_MATRIX_SCFG7 0x5C /* Slave Configuration Register 7 */ |
42 | #define AT91_MATRIX_SLOT_CYCLE (0xff << 0) /* Maximum Number of Allowed Cycles for a Burst */ | 42 | #define AT91_MATRIX_SLOT_CYCLE (0xff << 0) /* Maximum Number of Allowed Cycles for a Burst */ |
43 | #define AT91_MATRIX_DEFMSTR_TYPE (3 << 16) /* Default Master Type */ | 43 | #define AT91_MATRIX_DEFMSTR_TYPE (3 << 16) /* Default Master Type */ |
44 | #define AT91_MATRIX_DEFMSTR_TYPE_NONE (0 << 16) | 44 | #define AT91_MATRIX_DEFMSTR_TYPE_NONE (0 << 16) |
@@ -49,22 +49,22 @@ | |||
49 | #define AT91_MATRIX_ARBT_ROUND_ROBIN (0 << 24) | 49 | #define AT91_MATRIX_ARBT_ROUND_ROBIN (0 << 24) |
50 | #define AT91_MATRIX_ARBT_FIXED_PRIORITY (1 << 24) | 50 | #define AT91_MATRIX_ARBT_FIXED_PRIORITY (1 << 24) |
51 | 51 | ||
52 | #define AT91_MATRIX_PRAS0 (AT91_MATRIX + 0x80) /* Priority Register A for Slave 0 */ | 52 | #define AT91_MATRIX_PRAS0 0x80 /* Priority Register A for Slave 0 */ |
53 | #define AT91_MATRIX_PRBS0 (AT91_MATRIX + 0x84) /* Priority Register B for Slave 0 */ | 53 | #define AT91_MATRIX_PRBS0 0x84 /* Priority Register B for Slave 0 */ |
54 | #define AT91_MATRIX_PRAS1 (AT91_MATRIX + 0x88) /* Priority Register A for Slave 1 */ | 54 | #define AT91_MATRIX_PRAS1 0x88 /* Priority Register A for Slave 1 */ |
55 | #define AT91_MATRIX_PRBS1 (AT91_MATRIX + 0x8C) /* Priority Register B for Slave 1 */ | 55 | #define AT91_MATRIX_PRBS1 0x8C /* Priority Register B for Slave 1 */ |
56 | #define AT91_MATRIX_PRAS2 (AT91_MATRIX + 0x90) /* Priority Register A for Slave 2 */ | 56 | #define AT91_MATRIX_PRAS2 0x90 /* Priority Register A for Slave 2 */ |
57 | #define AT91_MATRIX_PRBS2 (AT91_MATRIX + 0x94) /* Priority Register B for Slave 2 */ | 57 | #define AT91_MATRIX_PRBS2 0x94 /* Priority Register B for Slave 2 */ |
58 | #define AT91_MATRIX_PRAS3 (AT91_MATRIX + 0x98) /* Priority Register A for Slave 3 */ | 58 | #define AT91_MATRIX_PRAS3 0x98 /* Priority Register A for Slave 3 */ |
59 | #define AT91_MATRIX_PRBS3 (AT91_MATRIX + 0x9C) /* Priority Register B for Slave 3 */ | 59 | #define AT91_MATRIX_PRBS3 0x9C /* Priority Register B for Slave 3 */ |
60 | #define AT91_MATRIX_PRAS4 (AT91_MATRIX + 0xA0) /* Priority Register A for Slave 4 */ | 60 | #define AT91_MATRIX_PRAS4 0xA0 /* Priority Register A for Slave 4 */ |
61 | #define AT91_MATRIX_PRBS4 (AT91_MATRIX + 0xA4) /* Priority Register B for Slave 4 */ | 61 | #define AT91_MATRIX_PRBS4 0xA4 /* Priority Register B for Slave 4 */ |
62 | #define AT91_MATRIX_PRAS5 (AT91_MATRIX + 0xA8) /* Priority Register A for Slave 5 */ | 62 | #define AT91_MATRIX_PRAS5 0xA8 /* Priority Register A for Slave 5 */ |
63 | #define AT91_MATRIX_PRBS5 (AT91_MATRIX + 0xAC) /* Priority Register B for Slave 5 */ | 63 | #define AT91_MATRIX_PRBS5 0xAC /* Priority Register B for Slave 5 */ |
64 | #define AT91_MATRIX_PRAS6 (AT91_MATRIX + 0xB0) /* Priority Register A for Slave 6 */ | 64 | #define AT91_MATRIX_PRAS6 0xB0 /* Priority Register A for Slave 6 */ |
65 | #define AT91_MATRIX_PRBS6 (AT91_MATRIX + 0xB4) /* Priority Register B for Slave 6 */ | 65 | #define AT91_MATRIX_PRBS6 0xB4 /* Priority Register B for Slave 6 */ |
66 | #define AT91_MATRIX_PRAS7 (AT91_MATRIX + 0xB8) /* Priority Register A for Slave 7 */ | 66 | #define AT91_MATRIX_PRAS7 0xB8 /* Priority Register A for Slave 7 */ |
67 | #define AT91_MATRIX_PRBS7 (AT91_MATRIX + 0xBC) /* Priority Register B for Slave 7 */ | 67 | #define AT91_MATRIX_PRBS7 0xBC /* Priority Register B for Slave 7 */ |
68 | #define AT91_MATRIX_M0PR (3 << 0) /* Master 0 Priority */ | 68 | #define AT91_MATRIX_M0PR (3 << 0) /* Master 0 Priority */ |
69 | #define AT91_MATRIX_M1PR (3 << 4) /* Master 1 Priority */ | 69 | #define AT91_MATRIX_M1PR (3 << 4) /* Master 1 Priority */ |
70 | #define AT91_MATRIX_M2PR (3 << 8) /* Master 2 Priority */ | 70 | #define AT91_MATRIX_M2PR (3 << 8) /* Master 2 Priority */ |
@@ -75,7 +75,7 @@ | |||
75 | #define AT91_MATRIX_M7PR (3 << 28) /* Master 7 Priority */ | 75 | #define AT91_MATRIX_M7PR (3 << 28) /* Master 7 Priority */ |
76 | #define AT91_MATRIX_M8PR (3 << 0) /* Master 8 Priority (in Register B) */ | 76 | #define AT91_MATRIX_M8PR (3 << 0) /* Master 8 Priority (in Register B) */ |
77 | 77 | ||
78 | #define AT91_MATRIX_MRCR (AT91_MATRIX + 0x100) /* Master Remap Control Register */ | 78 | #define AT91_MATRIX_MRCR 0x100 /* Master Remap Control Register */ |
79 | #define AT91_MATRIX_RCB0 (1 << 0) /* Remap Command for AHB Master 0 (ARM926EJ-S Instruction Master) */ | 79 | #define AT91_MATRIX_RCB0 (1 << 0) /* Remap Command for AHB Master 0 (ARM926EJ-S Instruction Master) */ |
80 | #define AT91_MATRIX_RCB1 (1 << 1) /* Remap Command for AHB Master 1 (ARM926EJ-S Data Master) */ | 80 | #define AT91_MATRIX_RCB1 (1 << 1) /* Remap Command for AHB Master 1 (ARM926EJ-S Data Master) */ |
81 | #define AT91_MATRIX_RCB2 (1 << 2) | 81 | #define AT91_MATRIX_RCB2 (1 << 2) |
@@ -86,7 +86,7 @@ | |||
86 | #define AT91_MATRIX_RCB7 (1 << 7) | 86 | #define AT91_MATRIX_RCB7 (1 << 7) |
87 | #define AT91_MATRIX_RCB8 (1 << 8) | 87 | #define AT91_MATRIX_RCB8 (1 << 8) |
88 | 88 | ||
89 | #define AT91_MATRIX_TCMR (AT91_MATRIX + 0x114) /* TCM Configuration Register */ | 89 | #define AT91_MATRIX_TCMR 0x114 /* TCM Configuration Register */ |
90 | #define AT91_MATRIX_ITCM_SIZE (0xf << 0) /* Size of ITCM enabled memory block */ | 90 | #define AT91_MATRIX_ITCM_SIZE (0xf << 0) /* Size of ITCM enabled memory block */ |
91 | #define AT91_MATRIX_ITCM_0 (0 << 0) | 91 | #define AT91_MATRIX_ITCM_0 (0 << 0) |
92 | #define AT91_MATRIX_ITCM_16 (5 << 0) | 92 | #define AT91_MATRIX_ITCM_16 (5 << 0) |
@@ -96,7 +96,7 @@ | |||
96 | #define AT91_MATRIX_DTCM_16 (5 << 4) | 96 | #define AT91_MATRIX_DTCM_16 (5 << 4) |
97 | #define AT91_MATRIX_DTCM_32 (6 << 4) | 97 | #define AT91_MATRIX_DTCM_32 (6 << 4) |
98 | 98 | ||
99 | #define AT91_MATRIX_EBI0CSA (AT91_MATRIX + 0x120) /* EBI0 Chip Select Assignment Register */ | 99 | #define AT91_MATRIX_EBI0CSA 0x120 /* EBI0 Chip Select Assignment Register */ |
100 | #define AT91_MATRIX_EBI0_CS1A (1 << 1) /* Chip Select 1 Assignment */ | 100 | #define AT91_MATRIX_EBI0_CS1A (1 << 1) /* Chip Select 1 Assignment */ |
101 | #define AT91_MATRIX_EBI0_CS1A_SMC (0 << 1) | 101 | #define AT91_MATRIX_EBI0_CS1A_SMC (0 << 1) |
102 | #define AT91_MATRIX_EBI0_CS1A_SDRAMC (1 << 1) | 102 | #define AT91_MATRIX_EBI0_CS1A_SDRAMC (1 << 1) |
@@ -114,7 +114,7 @@ | |||
114 | #define AT91_MATRIX_EBI0_VDDIOMSEL_1_8V (0 << 16) | 114 | #define AT91_MATRIX_EBI0_VDDIOMSEL_1_8V (0 << 16) |
115 | #define AT91_MATRIX_EBI0_VDDIOMSEL_3_3V (1 << 16) | 115 | #define AT91_MATRIX_EBI0_VDDIOMSEL_3_3V (1 << 16) |
116 | 116 | ||
117 | #define AT91_MATRIX_EBI1CSA (AT91_MATRIX + 0x124) /* EBI1 Chip Select Assignment Register */ | 117 | #define AT91_MATRIX_EBI1CSA 0x124 /* EBI1 Chip Select Assignment Register */ |
118 | #define AT91_MATRIX_EBI1_CS1A (1 << 1) /* Chip Select 1 Assignment */ | 118 | #define AT91_MATRIX_EBI1_CS1A (1 << 1) /* Chip Select 1 Assignment */ |
119 | #define AT91_MATRIX_EBI1_CS1A_SMC (0 << 1) | 119 | #define AT91_MATRIX_EBI1_CS1A_SMC (0 << 1) |
120 | #define AT91_MATRIX_EBI1_CS1A_SDRAMC (1 << 1) | 120 | #define AT91_MATRIX_EBI1_CS1A_SDRAMC (1 << 1) |
diff --git a/arch/arm/mach-at91/include/mach/at91sam9_ddrsdr.h b/arch/arm/mach-at91/include/mach/at91sam9_ddrsdr.h index 5d4a9f846584..0210797abf2e 100644 --- a/arch/arm/mach-at91/include/mach/at91sam9_ddrsdr.h +++ b/arch/arm/mach-at91/include/mach/at91sam9_ddrsdr.h | |||
@@ -121,10 +121,4 @@ | |||
121 | #define AT91_DDRSDRC_WPVS (1 << 0) /* Write protect violation status */ | 121 | #define AT91_DDRSDRC_WPVS (1 << 0) /* Write protect violation status */ |
122 | #define AT91_DDRSDRC_WPVSRC (0xffff << 8) /* Write protect violation source */ | 122 | #define AT91_DDRSDRC_WPVSRC (0xffff << 8) /* Write protect violation source */ |
123 | 123 | ||
124 | /* Register access macros */ | ||
125 | #define at91_ramc_read(num, reg) \ | ||
126 | at91_sys_read(AT91_DDRSDRC##num + reg) | ||
127 | #define at91_ramc_write(num, reg, value) \ | ||
128 | at91_sys_write(AT91_DDRSDRC##num + reg, value) | ||
129 | |||
130 | #endif | 124 | #endif |
diff --git a/arch/arm/mach-at91/include/mach/at91sam9_sdramc.h b/arch/arm/mach-at91/include/mach/at91sam9_sdramc.h index 100f5a592926..3d085a9a7450 100644 --- a/arch/arm/mach-at91/include/mach/at91sam9_sdramc.h +++ b/arch/arm/mach-at91/include/mach/at91sam9_sdramc.h | |||
@@ -82,10 +82,4 @@ | |||
82 | #define AT91_SDRAMC_MD_SDRAM 0 | 82 | #define AT91_SDRAMC_MD_SDRAM 0 |
83 | #define AT91_SDRAMC_MD_LOW_POWER_SDRAM 1 | 83 | #define AT91_SDRAMC_MD_LOW_POWER_SDRAM 1 |
84 | 84 | ||
85 | /* Register access macros */ | ||
86 | #define at91_ramc_read(num, reg) \ | ||
87 | at91_sys_read(AT91_SDRAMC##num + reg) | ||
88 | #define at91_ramc_write(num, reg, value) \ | ||
89 | at91_sys_write(AT91_SDRAMC##num + reg, value) | ||
90 | |||
91 | #endif | 85 | #endif |
diff --git a/arch/arm/mach-at91/include/mach/at91sam9g45.h b/arch/arm/mach-at91/include/mach/at91sam9g45.h index dd9c95ea0862..d052abcff852 100644 --- a/arch/arm/mach-at91/include/mach/at91sam9g45.h +++ b/arch/arm/mach-at91/include/mach/at91sam9g45.h | |||
@@ -84,17 +84,14 @@ | |||
84 | #define AT91SAM9G45_BASE_TC5 0xfffd4080 | 84 | #define AT91SAM9G45_BASE_TC5 0xfffd4080 |
85 | 85 | ||
86 | /* | 86 | /* |
87 | * System Peripherals (offset from AT91_BASE_SYS) | 87 | * System Peripherals |
88 | */ | 88 | */ |
89 | #define AT91_DDRSDRC1 (0xffffe400 - AT91_BASE_SYS) | ||
90 | #define AT91_DDRSDRC0 (0xffffe600 - AT91_BASE_SYS) | ||
91 | #define AT91_MATRIX (0xffffea00 - AT91_BASE_SYS) | ||
92 | #define AT91_PMC (0xfffffc00 - AT91_BASE_SYS) | ||
93 | #define AT91_GPBR (0xfffffd60 - AT91_BASE_SYS) | ||
94 | |||
95 | #define AT91SAM9G45_BASE_ECC 0xffffe200 | 89 | #define AT91SAM9G45_BASE_ECC 0xffffe200 |
90 | #define AT91SAM9G45_BASE_DDRSDRC1 0xffffe400 | ||
91 | #define AT91SAM9G45_BASE_DDRSDRC0 0xffffe600 | ||
96 | #define AT91SAM9G45_BASE_DMA 0xffffec00 | 92 | #define AT91SAM9G45_BASE_DMA 0xffffec00 |
97 | #define AT91SAM9G45_BASE_SMC 0xffffe800 | 93 | #define AT91SAM9G45_BASE_SMC 0xffffe800 |
94 | #define AT91SAM9G45_BASE_MATRIX 0xffffea00 | ||
98 | #define AT91SAM9G45_BASE_DBGU AT91_BASE_DBGU1 | 95 | #define AT91SAM9G45_BASE_DBGU AT91_BASE_DBGU1 |
99 | #define AT91SAM9G45_BASE_PIOA 0xfffff200 | 96 | #define AT91SAM9G45_BASE_PIOA 0xfffff200 |
100 | #define AT91SAM9G45_BASE_PIOB 0xfffff400 | 97 | #define AT91SAM9G45_BASE_PIOB 0xfffff400 |
@@ -107,6 +104,7 @@ | |||
107 | #define AT91SAM9G45_BASE_PIT 0xfffffd30 | 104 | #define AT91SAM9G45_BASE_PIT 0xfffffd30 |
108 | #define AT91SAM9G45_BASE_WDT 0xfffffd40 | 105 | #define AT91SAM9G45_BASE_WDT 0xfffffd40 |
109 | #define AT91SAM9G45_BASE_RTC 0xfffffdb0 | 106 | #define AT91SAM9G45_BASE_RTC 0xfffffdb0 |
107 | #define AT91SAM9G45_BASE_GPBR 0xfffffd60 | ||
110 | 108 | ||
111 | #define AT91_USART0 AT91SAM9G45_BASE_US0 | 109 | #define AT91_USART0 AT91SAM9G45_BASE_US0 |
112 | #define AT91_USART1 AT91SAM9G45_BASE_US1 | 110 | #define AT91_USART1 AT91SAM9G45_BASE_US1 |
diff --git a/arch/arm/mach-at91/include/mach/at91sam9g45_matrix.h b/arch/arm/mach-at91/include/mach/at91sam9g45_matrix.h index c972d60e0aeb..b76e2ed2fbc2 100644 --- a/arch/arm/mach-at91/include/mach/at91sam9g45_matrix.h +++ b/arch/arm/mach-at91/include/mach/at91sam9g45_matrix.h | |||
@@ -15,18 +15,18 @@ | |||
15 | #ifndef AT91SAM9G45_MATRIX_H | 15 | #ifndef AT91SAM9G45_MATRIX_H |
16 | #define AT91SAM9G45_MATRIX_H | 16 | #define AT91SAM9G45_MATRIX_H |
17 | 17 | ||
18 | #define AT91_MATRIX_MCFG0 (AT91_MATRIX + 0x00) /* Master Configuration Register 0 */ | 18 | #define AT91_MATRIX_MCFG0 0x00 /* Master Configuration Register 0 */ |
19 | #define AT91_MATRIX_MCFG1 (AT91_MATRIX + 0x04) /* Master Configuration Register 1 */ | 19 | #define AT91_MATRIX_MCFG1 0x04 /* Master Configuration Register 1 */ |
20 | #define AT91_MATRIX_MCFG2 (AT91_MATRIX + 0x08) /* Master Configuration Register 2 */ | 20 | #define AT91_MATRIX_MCFG2 0x08 /* Master Configuration Register 2 */ |
21 | #define AT91_MATRIX_MCFG3 (AT91_MATRIX + 0x0C) /* Master Configuration Register 3 */ | 21 | #define AT91_MATRIX_MCFG3 0x0C /* Master Configuration Register 3 */ |
22 | #define AT91_MATRIX_MCFG4 (AT91_MATRIX + 0x10) /* Master Configuration Register 4 */ | 22 | #define AT91_MATRIX_MCFG4 0x10 /* Master Configuration Register 4 */ |
23 | #define AT91_MATRIX_MCFG5 (AT91_MATRIX + 0x14) /* Master Configuration Register 5 */ | 23 | #define AT91_MATRIX_MCFG5 0x14 /* Master Configuration Register 5 */ |
24 | #define AT91_MATRIX_MCFG6 (AT91_MATRIX + 0x18) /* Master Configuration Register 6 */ | 24 | #define AT91_MATRIX_MCFG6 0x18 /* Master Configuration Register 6 */ |
25 | #define AT91_MATRIX_MCFG7 (AT91_MATRIX + 0x1C) /* Master Configuration Register 7 */ | 25 | #define AT91_MATRIX_MCFG7 0x1C /* Master Configuration Register 7 */ |
26 | #define AT91_MATRIX_MCFG8 (AT91_MATRIX + 0x20) /* Master Configuration Register 8 */ | 26 | #define AT91_MATRIX_MCFG8 0x20 /* Master Configuration Register 8 */ |
27 | #define AT91_MATRIX_MCFG9 (AT91_MATRIX + 0x24) /* Master Configuration Register 9 */ | 27 | #define AT91_MATRIX_MCFG9 0x24 /* Master Configuration Register 9 */ |
28 | #define AT91_MATRIX_MCFG10 (AT91_MATRIX + 0x28) /* Master Configuration Register 10 */ | 28 | #define AT91_MATRIX_MCFG10 0x28 /* Master Configuration Register 10 */ |
29 | #define AT91_MATRIX_MCFG11 (AT91_MATRIX + 0x2C) /* Master Configuration Register 11 */ | 29 | #define AT91_MATRIX_MCFG11 0x2C /* Master Configuration Register 11 */ |
30 | #define AT91_MATRIX_ULBT (7 << 0) /* Undefined Length Burst Type */ | 30 | #define AT91_MATRIX_ULBT (7 << 0) /* Undefined Length Burst Type */ |
31 | #define AT91_MATRIX_ULBT_INFINITE (0 << 0) | 31 | #define AT91_MATRIX_ULBT_INFINITE (0 << 0) |
32 | #define AT91_MATRIX_ULBT_SINGLE (1 << 0) | 32 | #define AT91_MATRIX_ULBT_SINGLE (1 << 0) |
@@ -37,14 +37,14 @@ | |||
37 | #define AT91_MATRIX_ULBT_SIXTYFOUR (6 << 0) | 37 | #define AT91_MATRIX_ULBT_SIXTYFOUR (6 << 0) |
38 | #define AT91_MATRIX_ULBT_128 (7 << 0) | 38 | #define AT91_MATRIX_ULBT_128 (7 << 0) |
39 | 39 | ||
40 | #define AT91_MATRIX_SCFG0 (AT91_MATRIX + 0x40) /* Slave Configuration Register 0 */ | 40 | #define AT91_MATRIX_SCFG0 0x40 /* Slave Configuration Register 0 */ |
41 | #define AT91_MATRIX_SCFG1 (AT91_MATRIX + 0x44) /* Slave Configuration Register 1 */ | 41 | #define AT91_MATRIX_SCFG1 0x44 /* Slave Configuration Register 1 */ |
42 | #define AT91_MATRIX_SCFG2 (AT91_MATRIX + 0x48) /* Slave Configuration Register 2 */ | 42 | #define AT91_MATRIX_SCFG2 0x48 /* Slave Configuration Register 2 */ |
43 | #define AT91_MATRIX_SCFG3 (AT91_MATRIX + 0x4C) /* Slave Configuration Register 3 */ | 43 | #define AT91_MATRIX_SCFG3 0x4C /* Slave Configuration Register 3 */ |
44 | #define AT91_MATRIX_SCFG4 (AT91_MATRIX + 0x50) /* Slave Configuration Register 4 */ | 44 | #define AT91_MATRIX_SCFG4 0x50 /* Slave Configuration Register 4 */ |
45 | #define AT91_MATRIX_SCFG5 (AT91_MATRIX + 0x54) /* Slave Configuration Register 5 */ | 45 | #define AT91_MATRIX_SCFG5 0x54 /* Slave Configuration Register 5 */ |
46 | #define AT91_MATRIX_SCFG6 (AT91_MATRIX + 0x58) /* Slave Configuration Register 6 */ | 46 | #define AT91_MATRIX_SCFG6 0x58 /* Slave Configuration Register 6 */ |
47 | #define AT91_MATRIX_SCFG7 (AT91_MATRIX + 0x5C) /* Slave Configuration Register 7 */ | 47 | #define AT91_MATRIX_SCFG7 0x5C /* Slave Configuration Register 7 */ |
48 | #define AT91_MATRIX_SLOT_CYCLE (0x1ff << 0) /* Maximum Number of Allowed Cycles for a Burst */ | 48 | #define AT91_MATRIX_SLOT_CYCLE (0x1ff << 0) /* Maximum Number of Allowed Cycles for a Burst */ |
49 | #define AT91_MATRIX_DEFMSTR_TYPE (3 << 16) /* Default Master Type */ | 49 | #define AT91_MATRIX_DEFMSTR_TYPE (3 << 16) /* Default Master Type */ |
50 | #define AT91_MATRIX_DEFMSTR_TYPE_NONE (0 << 16) | 50 | #define AT91_MATRIX_DEFMSTR_TYPE_NONE (0 << 16) |
@@ -52,22 +52,22 @@ | |||
52 | #define AT91_MATRIX_DEFMSTR_TYPE_FIXED (2 << 16) | 52 | #define AT91_MATRIX_DEFMSTR_TYPE_FIXED (2 << 16) |
53 | #define AT91_MATRIX_FIXED_DEFMSTR (0xf << 18) /* Fixed Index of Default Master */ | 53 | #define AT91_MATRIX_FIXED_DEFMSTR (0xf << 18) /* Fixed Index of Default Master */ |
54 | 54 | ||
55 | #define AT91_MATRIX_PRAS0 (AT91_MATRIX + 0x80) /* Priority Register A for Slave 0 */ | 55 | #define AT91_MATRIX_PRAS0 0x80 /* Priority Register A for Slave 0 */ |
56 | #define AT91_MATRIX_PRBS0 (AT91_MATRIX + 0x84) /* Priority Register B for Slave 0 */ | 56 | #define AT91_MATRIX_PRBS0 0x84 /* Priority Register B for Slave 0 */ |
57 | #define AT91_MATRIX_PRAS1 (AT91_MATRIX + 0x88) /* Priority Register A for Slave 1 */ | 57 | #define AT91_MATRIX_PRAS1 0x88 /* Priority Register A for Slave 1 */ |
58 | #define AT91_MATRIX_PRBS1 (AT91_MATRIX + 0x8C) /* Priority Register B for Slave 1 */ | 58 | #define AT91_MATRIX_PRBS1 0x8C /* Priority Register B for Slave 1 */ |
59 | #define AT91_MATRIX_PRAS2 (AT91_MATRIX + 0x90) /* Priority Register A for Slave 2 */ | 59 | #define AT91_MATRIX_PRAS2 0x90 /* Priority Register A for Slave 2 */ |
60 | #define AT91_MATRIX_PRBS2 (AT91_MATRIX + 0x94) /* Priority Register B for Slave 2 */ | 60 | #define AT91_MATRIX_PRBS2 0x94 /* Priority Register B for Slave 2 */ |
61 | #define AT91_MATRIX_PRAS3 (AT91_MATRIX + 0x98) /* Priority Register A for Slave 3 */ | 61 | #define AT91_MATRIX_PRAS3 0x98 /* Priority Register A for Slave 3 */ |
62 | #define AT91_MATRIX_PRBS3 (AT91_MATRIX + 0x9C) /* Priority Register B for Slave 3 */ | 62 | #define AT91_MATRIX_PRBS3 0x9C /* Priority Register B for Slave 3 */ |
63 | #define AT91_MATRIX_PRAS4 (AT91_MATRIX + 0xA0) /* Priority Register A for Slave 4 */ | 63 | #define AT91_MATRIX_PRAS4 0xA0 /* Priority Register A for Slave 4 */ |
64 | #define AT91_MATRIX_PRBS4 (AT91_MATRIX + 0xA4) /* Priority Register B for Slave 4 */ | 64 | #define AT91_MATRIX_PRBS4 0xA4 /* Priority Register B for Slave 4 */ |
65 | #define AT91_MATRIX_PRAS5 (AT91_MATRIX + 0xA8) /* Priority Register A for Slave 5 */ | 65 | #define AT91_MATRIX_PRAS5 0xA8 /* Priority Register A for Slave 5 */ |
66 | #define AT91_MATRIX_PRBS5 (AT91_MATRIX + 0xAC) /* Priority Register B for Slave 5 */ | 66 | #define AT91_MATRIX_PRBS5 0xAC /* Priority Register B for Slave 5 */ |
67 | #define AT91_MATRIX_PRAS6 (AT91_MATRIX + 0xB0) /* Priority Register A for Slave 6 */ | 67 | #define AT91_MATRIX_PRAS6 0xB0 /* Priority Register A for Slave 6 */ |
68 | #define AT91_MATRIX_PRBS6 (AT91_MATRIX + 0xB4) /* Priority Register B for Slave 6 */ | 68 | #define AT91_MATRIX_PRBS6 0xB4 /* Priority Register B for Slave 6 */ |
69 | #define AT91_MATRIX_PRAS7 (AT91_MATRIX + 0xB8) /* Priority Register A for Slave 7 */ | 69 | #define AT91_MATRIX_PRAS7 0xB8 /* Priority Register A for Slave 7 */ |
70 | #define AT91_MATRIX_PRBS7 (AT91_MATRIX + 0xBC) /* Priority Register B for Slave 7 */ | 70 | #define AT91_MATRIX_PRBS7 0xBC /* Priority Register B for Slave 7 */ |
71 | #define AT91_MATRIX_M0PR (3 << 0) /* Master 0 Priority */ | 71 | #define AT91_MATRIX_M0PR (3 << 0) /* Master 0 Priority */ |
72 | #define AT91_MATRIX_M1PR (3 << 4) /* Master 1 Priority */ | 72 | #define AT91_MATRIX_M1PR (3 << 4) /* Master 1 Priority */ |
73 | #define AT91_MATRIX_M2PR (3 << 8) /* Master 2 Priority */ | 73 | #define AT91_MATRIX_M2PR (3 << 8) /* Master 2 Priority */ |
@@ -81,7 +81,7 @@ | |||
81 | #define AT91_MATRIX_M10PR (3 << 8) /* Master 10 Priority (in Register B) */ | 81 | #define AT91_MATRIX_M10PR (3 << 8) /* Master 10 Priority (in Register B) */ |
82 | #define AT91_MATRIX_M11PR (3 << 12) /* Master 11 Priority (in Register B) */ | 82 | #define AT91_MATRIX_M11PR (3 << 12) /* Master 11 Priority (in Register B) */ |
83 | 83 | ||
84 | #define AT91_MATRIX_MRCR (AT91_MATRIX + 0x100) /* Master Remap Control Register */ | 84 | #define AT91_MATRIX_MRCR 0x100 /* Master Remap Control Register */ |
85 | #define AT91_MATRIX_RCB0 (1 << 0) /* Remap Command for AHB Master 0 (ARM926EJ-S Instruction Master) */ | 85 | #define AT91_MATRIX_RCB0 (1 << 0) /* Remap Command for AHB Master 0 (ARM926EJ-S Instruction Master) */ |
86 | #define AT91_MATRIX_RCB1 (1 << 1) /* Remap Command for AHB Master 1 (ARM926EJ-S Data Master) */ | 86 | #define AT91_MATRIX_RCB1 (1 << 1) /* Remap Command for AHB Master 1 (ARM926EJ-S Data Master) */ |
87 | #define AT91_MATRIX_RCB2 (1 << 2) | 87 | #define AT91_MATRIX_RCB2 (1 << 2) |
@@ -95,7 +95,7 @@ | |||
95 | #define AT91_MATRIX_RCB10 (1 << 10) | 95 | #define AT91_MATRIX_RCB10 (1 << 10) |
96 | #define AT91_MATRIX_RCB11 (1 << 11) | 96 | #define AT91_MATRIX_RCB11 (1 << 11) |
97 | 97 | ||
98 | #define AT91_MATRIX_TCMR (AT91_MATRIX + 0x110) /* TCM Configuration Register */ | 98 | #define AT91_MATRIX_TCMR 0x110 /* TCM Configuration Register */ |
99 | #define AT91_MATRIX_ITCM_SIZE (0xf << 0) /* Size of ITCM enabled memory block */ | 99 | #define AT91_MATRIX_ITCM_SIZE (0xf << 0) /* Size of ITCM enabled memory block */ |
100 | #define AT91_MATRIX_ITCM_0 (0 << 0) | 100 | #define AT91_MATRIX_ITCM_0 (0 << 0) |
101 | #define AT91_MATRIX_ITCM_32 (6 << 0) | 101 | #define AT91_MATRIX_ITCM_32 (6 << 0) |
@@ -107,12 +107,12 @@ | |||
107 | #define AT91_MATRIX_TCM_NO_WS (0x0 << 11) | 107 | #define AT91_MATRIX_TCM_NO_WS (0x0 << 11) |
108 | #define AT91_MATRIX_TCM_ONE_WS (0x1 << 11) | 108 | #define AT91_MATRIX_TCM_ONE_WS (0x1 << 11) |
109 | 109 | ||
110 | #define AT91_MATRIX_VIDEO (AT91_MATRIX + 0x118) /* Video Mode Configuration Register */ | 110 | #define AT91_MATRIX_VIDEO 0x118 /* Video Mode Configuration Register */ |
111 | #define AT91C_VDEC_SEL (0x1 << 0) /* Video Mode Selection */ | 111 | #define AT91C_VDEC_SEL (0x1 << 0) /* Video Mode Selection */ |
112 | #define AT91C_VDEC_SEL_OFF (0 << 0) | 112 | #define AT91C_VDEC_SEL_OFF (0 << 0) |
113 | #define AT91C_VDEC_SEL_ON (1 << 0) | 113 | #define AT91C_VDEC_SEL_ON (1 << 0) |
114 | 114 | ||
115 | #define AT91_MATRIX_EBICSA (AT91_MATRIX + 0x128) /* EBI Chip Select Assignment Register */ | 115 | #define AT91_MATRIX_EBICSA 0x128 /* EBI Chip Select Assignment Register */ |
116 | #define AT91_MATRIX_EBI_CS1A (1 << 1) /* Chip Select 1 Assignment */ | 116 | #define AT91_MATRIX_EBI_CS1A (1 << 1) /* Chip Select 1 Assignment */ |
117 | #define AT91_MATRIX_EBI_CS1A_SMC (0 << 1) | 117 | #define AT91_MATRIX_EBI_CS1A_SMC (0 << 1) |
118 | #define AT91_MATRIX_EBI_CS1A_SDRAMC (1 << 1) | 118 | #define AT91_MATRIX_EBI_CS1A_SDRAMC (1 << 1) |
@@ -138,13 +138,13 @@ | |||
138 | #define AT91_MATRIX_EBI_DDR_IOSR_REDUCED (0 << 18) | 138 | #define AT91_MATRIX_EBI_DDR_IOSR_REDUCED (0 << 18) |
139 | #define AT91_MATRIX_EBI_DDR_IOSR_NORMAL (1 << 18) | 139 | #define AT91_MATRIX_EBI_DDR_IOSR_NORMAL (1 << 18) |
140 | 140 | ||
141 | #define AT91_MATRIX_WPMR (AT91_MATRIX + 0x1E4) /* Write Protect Mode Register */ | 141 | #define AT91_MATRIX_WPMR 0x1E4 /* Write Protect Mode Register */ |
142 | #define AT91_MATRIX_WPMR_WPEN (1 << 0) /* Write Protect ENable */ | 142 | #define AT91_MATRIX_WPMR_WPEN (1 << 0) /* Write Protect ENable */ |
143 | #define AT91_MATRIX_WPMR_WP_WPDIS (0 << 0) | 143 | #define AT91_MATRIX_WPMR_WP_WPDIS (0 << 0) |
144 | #define AT91_MATRIX_WPMR_WP_WPEN (1 << 0) | 144 | #define AT91_MATRIX_WPMR_WP_WPEN (1 << 0) |
145 | #define AT91_MATRIX_WPMR_WPKEY (0xFFFFFF << 8) /* Write Protect KEY */ | 145 | #define AT91_MATRIX_WPMR_WPKEY (0xFFFFFF << 8) /* Write Protect KEY */ |
146 | 146 | ||
147 | #define AT91_MATRIX_WPSR (AT91_MATRIX + 0x1E8) /* Write Protect Status Register */ | 147 | #define AT91_MATRIX_WPSR 0x1E8 /* Write Protect Status Register */ |
148 | #define AT91_MATRIX_WPSR_WPVS (1 << 0) /* Write Protect Violation Status */ | 148 | #define AT91_MATRIX_WPSR_WPVS (1 << 0) /* Write Protect Violation Status */ |
149 | #define AT91_MATRIX_WPSR_NO_WPV (0 << 0) | 149 | #define AT91_MATRIX_WPSR_NO_WPV (0 << 0) |
150 | #define AT91_MATRIX_WPSR_WPV (1 << 0) | 150 | #define AT91_MATRIX_WPSR_WPV (1 << 0) |
diff --git a/arch/arm/mach-at91/include/mach/at91sam9rl.h b/arch/arm/mach-at91/include/mach/at91sam9rl.h index d7bead7118da..e0073eb10144 100644 --- a/arch/arm/mach-at91/include/mach/at91sam9rl.h +++ b/arch/arm/mach-at91/include/mach/at91sam9rl.h | |||
@@ -69,15 +69,13 @@ | |||
69 | /* | 69 | /* |
70 | * System Peripherals (offset from AT91_BASE_SYS) | 70 | * System Peripherals (offset from AT91_BASE_SYS) |
71 | */ | 71 | */ |
72 | #define AT91_SDRAMC0 (0xffffea00 - AT91_BASE_SYS) | ||
73 | #define AT91_MATRIX (0xffffee00 - AT91_BASE_SYS) | ||
74 | #define AT91_PMC (0xfffffc00 - AT91_BASE_SYS) | ||
75 | #define AT91_SCKCR (0xfffffd50 - AT91_BASE_SYS) | 72 | #define AT91_SCKCR (0xfffffd50 - AT91_BASE_SYS) |
76 | #define AT91_GPBR (0xfffffd60 - AT91_BASE_SYS) | ||
77 | 73 | ||
78 | #define AT91SAM9RL_BASE_DMA 0xffffe600 | 74 | #define AT91SAM9RL_BASE_DMA 0xffffe600 |
79 | #define AT91SAM9RL_BASE_ECC 0xffffe800 | 75 | #define AT91SAM9RL_BASE_ECC 0xffffe800 |
76 | #define AT91SAM9RL_BASE_SDRAMC 0xffffea00 | ||
80 | #define AT91SAM9RL_BASE_SMC 0xffffec00 | 77 | #define AT91SAM9RL_BASE_SMC 0xffffec00 |
78 | #define AT91SAM9RL_BASE_MATRIX 0xffffee00 | ||
81 | #define AT91SAM9RL_BASE_DBGU AT91_BASE_DBGU0 | 79 | #define AT91SAM9RL_BASE_DBGU AT91_BASE_DBGU0 |
82 | #define AT91SAM9RL_BASE_PIOA 0xfffff400 | 80 | #define AT91SAM9RL_BASE_PIOA 0xfffff400 |
83 | #define AT91SAM9RL_BASE_PIOB 0xfffff600 | 81 | #define AT91SAM9RL_BASE_PIOB 0xfffff600 |
@@ -88,6 +86,7 @@ | |||
88 | #define AT91SAM9RL_BASE_RTT 0xfffffd20 | 86 | #define AT91SAM9RL_BASE_RTT 0xfffffd20 |
89 | #define AT91SAM9RL_BASE_PIT 0xfffffd30 | 87 | #define AT91SAM9RL_BASE_PIT 0xfffffd30 |
90 | #define AT91SAM9RL_BASE_WDT 0xfffffd40 | 88 | #define AT91SAM9RL_BASE_WDT 0xfffffd40 |
89 | #define AT91SAM9RL_BASE_GPBR 0xfffffd60 | ||
91 | #define AT91SAM9RL_BASE_RTC 0xfffffe00 | 90 | #define AT91SAM9RL_BASE_RTC 0xfffffe00 |
92 | 91 | ||
93 | #define AT91_USART0 AT91SAM9RL_BASE_US0 | 92 | #define AT91_USART0 AT91SAM9RL_BASE_US0 |
diff --git a/arch/arm/mach-at91/include/mach/at91sam9rl_matrix.h b/arch/arm/mach-at91/include/mach/at91sam9rl_matrix.h index 5f9149071fe5..6d160adadafc 100644 --- a/arch/arm/mach-at91/include/mach/at91sam9rl_matrix.h +++ b/arch/arm/mach-at91/include/mach/at91sam9rl_matrix.h | |||
@@ -14,12 +14,12 @@ | |||
14 | #ifndef AT91SAM9RL_MATRIX_H | 14 | #ifndef AT91SAM9RL_MATRIX_H |
15 | #define AT91SAM9RL_MATRIX_H | 15 | #define AT91SAM9RL_MATRIX_H |
16 | 16 | ||
17 | #define AT91_MATRIX_MCFG0 (AT91_MATRIX + 0x00) /* Master Configuration Register 0 */ | 17 | #define AT91_MATRIX_MCFG0 0x00 /* Master Configuration Register 0 */ |
18 | #define AT91_MATRIX_MCFG1 (AT91_MATRIX + 0x04) /* Master Configuration Register 1 */ | 18 | #define AT91_MATRIX_MCFG1 0x04 /* Master Configuration Register 1 */ |
19 | #define AT91_MATRIX_MCFG2 (AT91_MATRIX + 0x08) /* Master Configuration Register 2 */ | 19 | #define AT91_MATRIX_MCFG2 0x08 /* Master Configuration Register 2 */ |
20 | #define AT91_MATRIX_MCFG3 (AT91_MATRIX + 0x0C) /* Master Configuration Register 3 */ | 20 | #define AT91_MATRIX_MCFG3 0x0C /* Master Configuration Register 3 */ |
21 | #define AT91_MATRIX_MCFG4 (AT91_MATRIX + 0x10) /* Master Configuration Register 4 */ | 21 | #define AT91_MATRIX_MCFG4 0x10 /* Master Configuration Register 4 */ |
22 | #define AT91_MATRIX_MCFG5 (AT91_MATRIX + 0x14) /* Master Configuration Register 5 */ | 22 | #define AT91_MATRIX_MCFG5 0x14 /* Master Configuration Register 5 */ |
23 | #define AT91_MATRIX_ULBT (7 << 0) /* Undefined Length Burst Type */ | 23 | #define AT91_MATRIX_ULBT (7 << 0) /* Undefined Length Burst Type */ |
24 | #define AT91_MATRIX_ULBT_INFINITE (0 << 0) | 24 | #define AT91_MATRIX_ULBT_INFINITE (0 << 0) |
25 | #define AT91_MATRIX_ULBT_SINGLE (1 << 0) | 25 | #define AT91_MATRIX_ULBT_SINGLE (1 << 0) |
@@ -27,12 +27,12 @@ | |||
27 | #define AT91_MATRIX_ULBT_EIGHT (3 << 0) | 27 | #define AT91_MATRIX_ULBT_EIGHT (3 << 0) |
28 | #define AT91_MATRIX_ULBT_SIXTEEN (4 << 0) | 28 | #define AT91_MATRIX_ULBT_SIXTEEN (4 << 0) |
29 | 29 | ||
30 | #define AT91_MATRIX_SCFG0 (AT91_MATRIX + 0x40) /* Slave Configuration Register 0 */ | 30 | #define AT91_MATRIX_SCFG0 0x40 /* Slave Configuration Register 0 */ |
31 | #define AT91_MATRIX_SCFG1 (AT91_MATRIX + 0x44) /* Slave Configuration Register 1 */ | 31 | #define AT91_MATRIX_SCFG1 0x44 /* Slave Configuration Register 1 */ |
32 | #define AT91_MATRIX_SCFG2 (AT91_MATRIX + 0x48) /* Slave Configuration Register 2 */ | 32 | #define AT91_MATRIX_SCFG2 0x48 /* Slave Configuration Register 2 */ |
33 | #define AT91_MATRIX_SCFG3 (AT91_MATRIX + 0x4C) /* Slave Configuration Register 3 */ | 33 | #define AT91_MATRIX_SCFG3 0x4C /* Slave Configuration Register 3 */ |
34 | #define AT91_MATRIX_SCFG4 (AT91_MATRIX + 0x50) /* Slave Configuration Register 4 */ | 34 | #define AT91_MATRIX_SCFG4 0x50 /* Slave Configuration Register 4 */ |
35 | #define AT91_MATRIX_SCFG5 (AT91_MATRIX + 0x54) /* Slave Configuration Register 5 */ | 35 | #define AT91_MATRIX_SCFG5 0x54 /* Slave Configuration Register 5 */ |
36 | #define AT91_MATRIX_SLOT_CYCLE (0xff << 0) /* Maximum Number of Allowed Cycles for a Burst */ | 36 | #define AT91_MATRIX_SLOT_CYCLE (0xff << 0) /* Maximum Number of Allowed Cycles for a Burst */ |
37 | #define AT91_MATRIX_DEFMSTR_TYPE (3 << 16) /* Default Master Type */ | 37 | #define AT91_MATRIX_DEFMSTR_TYPE (3 << 16) /* Default Master Type */ |
38 | #define AT91_MATRIX_DEFMSTR_TYPE_NONE (0 << 16) | 38 | #define AT91_MATRIX_DEFMSTR_TYPE_NONE (0 << 16) |
@@ -43,12 +43,12 @@ | |||
43 | #define AT91_MATRIX_ARBT_ROUND_ROBIN (0 << 24) | 43 | #define AT91_MATRIX_ARBT_ROUND_ROBIN (0 << 24) |
44 | #define AT91_MATRIX_ARBT_FIXED_PRIORITY (1 << 24) | 44 | #define AT91_MATRIX_ARBT_FIXED_PRIORITY (1 << 24) |
45 | 45 | ||
46 | #define AT91_MATRIX_PRAS0 (AT91_MATRIX + 0x80) /* Priority Register A for Slave 0 */ | 46 | #define AT91_MATRIX_PRAS0 0x80 /* Priority Register A for Slave 0 */ |
47 | #define AT91_MATRIX_PRAS1 (AT91_MATRIX + 0x88) /* Priority Register A for Slave 1 */ | 47 | #define AT91_MATRIX_PRAS1 0x88 /* Priority Register A for Slave 1 */ |
48 | #define AT91_MATRIX_PRAS2 (AT91_MATRIX + 0x90) /* Priority Register A for Slave 2 */ | 48 | #define AT91_MATRIX_PRAS2 0x90 /* Priority Register A for Slave 2 */ |
49 | #define AT91_MATRIX_PRAS3 (AT91_MATRIX + 0x98) /* Priority Register A for Slave 3 */ | 49 | #define AT91_MATRIX_PRAS3 0x98 /* Priority Register A for Slave 3 */ |
50 | #define AT91_MATRIX_PRAS4 (AT91_MATRIX + 0xA0) /* Priority Register A for Slave 4 */ | 50 | #define AT91_MATRIX_PRAS4 0xA0 /* Priority Register A for Slave 4 */ |
51 | #define AT91_MATRIX_PRAS5 (AT91_MATRIX + 0xA8) /* Priority Register A for Slave 5 */ | 51 | #define AT91_MATRIX_PRAS5 0xA8 /* Priority Register A for Slave 5 */ |
52 | #define AT91_MATRIX_M0PR (3 << 0) /* Master 0 Priority */ | 52 | #define AT91_MATRIX_M0PR (3 << 0) /* Master 0 Priority */ |
53 | #define AT91_MATRIX_M1PR (3 << 4) /* Master 1 Priority */ | 53 | #define AT91_MATRIX_M1PR (3 << 4) /* Master 1 Priority */ |
54 | #define AT91_MATRIX_M2PR (3 << 8) /* Master 2 Priority */ | 54 | #define AT91_MATRIX_M2PR (3 << 8) /* Master 2 Priority */ |
@@ -56,7 +56,7 @@ | |||
56 | #define AT91_MATRIX_M4PR (3 << 16) /* Master 4 Priority */ | 56 | #define AT91_MATRIX_M4PR (3 << 16) /* Master 4 Priority */ |
57 | #define AT91_MATRIX_M5PR (3 << 20) /* Master 5 Priority */ | 57 | #define AT91_MATRIX_M5PR (3 << 20) /* Master 5 Priority */ |
58 | 58 | ||
59 | #define AT91_MATRIX_MRCR (AT91_MATRIX + 0x100) /* Master Remap Control Register */ | 59 | #define AT91_MATRIX_MRCR 0x100 /* Master Remap Control Register */ |
60 | #define AT91_MATRIX_RCB0 (1 << 0) /* Remap Command for AHB Master 0 (ARM926EJ-S Instruction Master) */ | 60 | #define AT91_MATRIX_RCB0 (1 << 0) /* Remap Command for AHB Master 0 (ARM926EJ-S Instruction Master) */ |
61 | #define AT91_MATRIX_RCB1 (1 << 1) /* Remap Command for AHB Master 1 (ARM926EJ-S Data Master) */ | 61 | #define AT91_MATRIX_RCB1 (1 << 1) /* Remap Command for AHB Master 1 (ARM926EJ-S Data Master) */ |
62 | #define AT91_MATRIX_RCB2 (1 << 2) | 62 | #define AT91_MATRIX_RCB2 (1 << 2) |
@@ -64,7 +64,7 @@ | |||
64 | #define AT91_MATRIX_RCB4 (1 << 4) | 64 | #define AT91_MATRIX_RCB4 (1 << 4) |
65 | #define AT91_MATRIX_RCB5 (1 << 5) | 65 | #define AT91_MATRIX_RCB5 (1 << 5) |
66 | 66 | ||
67 | #define AT91_MATRIX_TCMR (AT91_MATRIX + 0x114) /* TCM Configuration Register */ | 67 | #define AT91_MATRIX_TCMR 0x114 /* TCM Configuration Register */ |
68 | #define AT91_MATRIX_ITCM_SIZE (0xf << 0) /* Size of ITCM enabled memory block */ | 68 | #define AT91_MATRIX_ITCM_SIZE (0xf << 0) /* Size of ITCM enabled memory block */ |
69 | #define AT91_MATRIX_ITCM_0 (0 << 0) | 69 | #define AT91_MATRIX_ITCM_0 (0 << 0) |
70 | #define AT91_MATRIX_ITCM_16 (5 << 0) | 70 | #define AT91_MATRIX_ITCM_16 (5 << 0) |
@@ -74,7 +74,7 @@ | |||
74 | #define AT91_MATRIX_DTCM_16 (5 << 4) | 74 | #define AT91_MATRIX_DTCM_16 (5 << 4) |
75 | #define AT91_MATRIX_DTCM_32 (6 << 4) | 75 | #define AT91_MATRIX_DTCM_32 (6 << 4) |
76 | 76 | ||
77 | #define AT91_MATRIX_EBICSA (AT91_MATRIX + 0x120) /* EBI0 Chip Select Assignment Register */ | 77 | #define AT91_MATRIX_EBICSA 0x120 /* EBI0 Chip Select Assignment Register */ |
78 | #define AT91_MATRIX_CS1A (1 << 1) /* Chip Select 1 Assignment */ | 78 | #define AT91_MATRIX_CS1A (1 << 1) /* Chip Select 1 Assignment */ |
79 | #define AT91_MATRIX_CS1A_SMC (0 << 1) | 79 | #define AT91_MATRIX_CS1A_SMC (0 << 1) |
80 | #define AT91_MATRIX_CS1A_SDRAMC (1 << 1) | 80 | #define AT91_MATRIX_CS1A_SDRAMC (1 << 1) |
diff --git a/arch/arm/mach-at91/include/mach/at91sam9x5.h b/arch/arm/mach-at91/include/mach/at91sam9x5.h index 8476871a2f9f..a297a77d88e2 100644 --- a/arch/arm/mach-at91/include/mach/at91sam9x5.h +++ b/arch/arm/mach-at91/include/mach/at91sam9x5.h | |||
@@ -55,10 +55,9 @@ | |||
55 | #define AT91SAM9X5_BASE_USART2 0xf8024000 | 55 | #define AT91SAM9X5_BASE_USART2 0xf8024000 |
56 | 56 | ||
57 | /* | 57 | /* |
58 | * System Peripherals (offset from AT91_BASE_SYS) | 58 | * System Peripherals |
59 | */ | 59 | */ |
60 | #define AT91_DDRSDRC0 (0xffffe800 - AT91_BASE_SYS) | 60 | #define AT91SAM9X5_BASE_DDRSDRC0 0xffffe800 |
61 | #define AT91_PMC (0xfffffc00 - AT91_BASE_SYS) | ||
62 | 61 | ||
63 | /* | 62 | /* |
64 | * Base addresses for early serial code (uncompress.h) | 63 | * Base addresses for early serial code (uncompress.h) |
diff --git a/arch/arm/mach-at91/include/mach/at91x40.h b/arch/arm/mach-at91/include/mach/at91x40.h index a57829f4fd18..90680217064e 100644 --- a/arch/arm/mach-at91/include/mach/at91x40.h +++ b/arch/arm/mach-at91/include/mach/at91x40.h | |||
@@ -28,18 +28,18 @@ | |||
28 | #define AT91X40_ID_IRQ2 18 /* External IRQ 2 */ | 28 | #define AT91X40_ID_IRQ2 18 /* External IRQ 2 */ |
29 | 29 | ||
30 | /* | 30 | /* |
31 | * System Peripherals (offset from AT91_BASE_SYS) | 31 | * System Peripherals |
32 | */ | 32 | */ |
33 | #define AT91_BASE_SYS 0xffc00000 | 33 | #define AT91_BASE_SYS 0xffc00000 |
34 | 34 | ||
35 | #define AT91_EBI (0xffe00000 - AT91_BASE_SYS) /* External Bus Interface */ | 35 | #define AT91_EBI 0xffe00000 /* External Bus Interface */ |
36 | #define AT91_SF (0xfff00000 - AT91_BASE_SYS) /* Special Function */ | 36 | #define AT91_SF 0xfff00000 /* Special Function */ |
37 | #define AT91_USART1 (0xfffcc000 - AT91_BASE_SYS) /* USART 1 */ | 37 | #define AT91_USART1 0xfffcc000 /* USART 1 */ |
38 | #define AT91_USART0 (0xfffd0000 - AT91_BASE_SYS) /* USART 0 */ | 38 | #define AT91_USART0 0xfffd0000 /* USART 0 */ |
39 | #define AT91_TC (0xfffe0000 - AT91_BASE_SYS) /* Timer Counter */ | 39 | #define AT91_TC 0xfffe0000 /* Timer Counter */ |
40 | #define AT91_PIOA (0xffff0000 - AT91_BASE_SYS) /* PIO Controller A */ | 40 | #define AT91_PIOA 0xffff0000 /* PIO Controller A */ |
41 | #define AT91_PS (0xffff4000 - AT91_BASE_SYS) /* Power Save */ | 41 | #define AT91_PS 0xffff4000 /* Power Save */ |
42 | #define AT91_WD (0xffff8000 - AT91_BASE_SYS) /* Watchdog Timer */ | 42 | #define AT91_WD 0xffff8000 /* Watchdog Timer */ |
43 | 43 | ||
44 | /* | 44 | /* |
45 | * The AT91x40 series doesn't have a debug unit like the other AT91 parts. | 45 | * The AT91x40 series doesn't have a debug unit like the other AT91 parts. |
diff --git a/arch/arm/mach-at91/include/mach/gpio.h b/arch/arm/mach-at91/include/mach/gpio.h index e3fd225121c7..eed465ab0dd7 100644 --- a/arch/arm/mach-at91/include/mach/gpio.h +++ b/arch/arm/mach-at91/include/mach/gpio.h | |||
@@ -191,10 +191,15 @@ | |||
191 | extern int __init_or_module at91_set_GPIO_periph(unsigned pin, int use_pullup); | 191 | extern int __init_or_module at91_set_GPIO_periph(unsigned pin, int use_pullup); |
192 | extern int __init_or_module at91_set_A_periph(unsigned pin, int use_pullup); | 192 | extern int __init_or_module at91_set_A_periph(unsigned pin, int use_pullup); |
193 | extern int __init_or_module at91_set_B_periph(unsigned pin, int use_pullup); | 193 | extern int __init_or_module at91_set_B_periph(unsigned pin, int use_pullup); |
194 | extern int __init_or_module at91_set_C_periph(unsigned pin, int use_pullup); | ||
195 | extern int __init_or_module at91_set_D_periph(unsigned pin, int use_pullup); | ||
194 | extern int __init_or_module at91_set_gpio_input(unsigned pin, int use_pullup); | 196 | extern int __init_or_module at91_set_gpio_input(unsigned pin, int use_pullup); |
195 | extern int __init_or_module at91_set_gpio_output(unsigned pin, int value); | 197 | extern int __init_or_module at91_set_gpio_output(unsigned pin, int value); |
196 | extern int __init_or_module at91_set_deglitch(unsigned pin, int is_on); | 198 | extern int __init_or_module at91_set_deglitch(unsigned pin, int is_on); |
199 | extern int __init_or_module at91_set_debounce(unsigned pin, int is_on, int div); | ||
197 | extern int __init_or_module at91_set_multi_drive(unsigned pin, int is_on); | 200 | extern int __init_or_module at91_set_multi_drive(unsigned pin, int is_on); |
201 | extern int __init_or_module at91_set_pulldown(unsigned pin, int is_on); | ||
202 | extern int __init_or_module at91_disable_schmitt_trig(unsigned pin); | ||
198 | 203 | ||
199 | /* callable at any time */ | 204 | /* callable at any time */ |
200 | extern int at91_set_gpio_value(unsigned pin, int value); | 205 | extern int at91_set_gpio_value(unsigned pin, int value); |
@@ -204,18 +209,6 @@ extern int at91_get_gpio_value(unsigned pin); | |||
204 | extern void at91_gpio_suspend(void); | 209 | extern void at91_gpio_suspend(void); |
205 | extern void at91_gpio_resume(void); | 210 | extern void at91_gpio_resume(void); |
206 | 211 | ||
207 | /*-------------------------------------------------------------------------*/ | ||
208 | |||
209 | /* wrappers for "new style" GPIO calls. the old AT91-specific ones should | ||
210 | * eventually be removed (along with this errno.h inclusion), and the | ||
211 | * gpio request/free calls should probably be implemented. | ||
212 | */ | ||
213 | |||
214 | #include <asm/errno.h> | ||
215 | |||
216 | #define gpio_to_irq(gpio) (gpio + NR_AIC_IRQS) | ||
217 | #define irq_to_gpio(irq) (irq - NR_AIC_IRQS) | ||
218 | |||
219 | #endif /* __ASSEMBLY__ */ | 212 | #endif /* __ASSEMBLY__ */ |
220 | 213 | ||
221 | #endif | 214 | #endif |
diff --git a/arch/arm/mach-at91/include/mach/hardware.h b/arch/arm/mach-at91/include/mach/hardware.h index fd7dce4f7378..e9e29a6c3868 100644 --- a/arch/arm/mach-at91/include/mach/hardware.h +++ b/arch/arm/mach-at91/include/mach/hardware.h | |||
@@ -59,9 +59,10 @@ | |||
59 | 59 | ||
60 | /* | 60 | /* |
61 | * On all at91 have the Advanced Interrupt Controller starts at address | 61 | * On all at91 have the Advanced Interrupt Controller starts at address |
62 | * 0xfffff000 | 62 | * 0xfffff000 and the Power Management Controller starts at 0xfffffc00 |
63 | */ | 63 | */ |
64 | #define AT91_AIC 0xfffff000 | 64 | #define AT91_AIC 0xfffff000 |
65 | #define AT91_PMC 0xfffffc00 | ||
65 | 66 | ||
66 | /* | 67 | /* |
67 | * Peripheral identifiers/interrupts. | 68 | * Peripheral identifiers/interrupts. |
diff --git a/arch/arm/mach-at91/include/mach/io.h b/arch/arm/mach-at91/include/mach/io.h index 4ca09ef7ca29..4003001eca3d 100644 --- a/arch/arm/mach-at91/include/mach/io.h +++ b/arch/arm/mach-at91/include/mach/io.h | |||
@@ -28,22 +28,4 @@ | |||
28 | #define __io(a) __typesafe_io(a) | 28 | #define __io(a) __typesafe_io(a) |
29 | #define __mem_pci(a) (a) | 29 | #define __mem_pci(a) (a) |
30 | 30 | ||
31 | #ifndef __ASSEMBLY__ | ||
32 | |||
33 | static inline unsigned int at91_sys_read(unsigned int reg_offset) | ||
34 | { | ||
35 | void __iomem *addr = (void __iomem *)AT91_VA_BASE_SYS; | ||
36 | |||
37 | return __raw_readl(addr + reg_offset); | ||
38 | } | ||
39 | |||
40 | static inline void at91_sys_write(unsigned int reg_offset, unsigned long value) | ||
41 | { | ||
42 | void __iomem *addr = (void __iomem *)AT91_VA_BASE_SYS; | ||
43 | |||
44 | __raw_writel(value, addr + reg_offset); | ||
45 | } | ||
46 | |||
47 | #endif | ||
48 | |||
49 | #endif | 31 | #endif |
diff --git a/arch/arm/mach-at91/irq.c b/arch/arm/mach-at91/irq.c index be6b639ecd7b..cfcfcbe36269 100644 --- a/arch/arm/mach-at91/irq.c +++ b/arch/arm/mach-at91/irq.c | |||
@@ -24,6 +24,12 @@ | |||
24 | #include <linux/module.h> | 24 | #include <linux/module.h> |
25 | #include <linux/mm.h> | 25 | #include <linux/mm.h> |
26 | #include <linux/types.h> | 26 | #include <linux/types.h> |
27 | #include <linux/irq.h> | ||
28 | #include <linux/of.h> | ||
29 | #include <linux/of_address.h> | ||
30 | #include <linux/of_irq.h> | ||
31 | #include <linux/irqdomain.h> | ||
32 | #include <linux/err.h> | ||
27 | 33 | ||
28 | #include <mach/hardware.h> | 34 | #include <mach/hardware.h> |
29 | #include <asm/irq.h> | 35 | #include <asm/irq.h> |
@@ -34,22 +40,24 @@ | |||
34 | #include <asm/mach/map.h> | 40 | #include <asm/mach/map.h> |
35 | 41 | ||
36 | void __iomem *at91_aic_base; | 42 | void __iomem *at91_aic_base; |
43 | static struct irq_domain *at91_aic_domain; | ||
44 | static struct device_node *at91_aic_np; | ||
37 | 45 | ||
38 | static void at91_aic_mask_irq(struct irq_data *d) | 46 | static void at91_aic_mask_irq(struct irq_data *d) |
39 | { | 47 | { |
40 | /* Disable interrupt on AIC */ | 48 | /* Disable interrupt on AIC */ |
41 | at91_aic_write(AT91_AIC_IDCR, 1 << d->irq); | 49 | at91_aic_write(AT91_AIC_IDCR, 1 << d->hwirq); |
42 | } | 50 | } |
43 | 51 | ||
44 | static void at91_aic_unmask_irq(struct irq_data *d) | 52 | static void at91_aic_unmask_irq(struct irq_data *d) |
45 | { | 53 | { |
46 | /* Enable interrupt on AIC */ | 54 | /* Enable interrupt on AIC */ |
47 | at91_aic_write(AT91_AIC_IECR, 1 << d->irq); | 55 | at91_aic_write(AT91_AIC_IECR, 1 << d->hwirq); |
48 | } | 56 | } |
49 | 57 | ||
50 | unsigned int at91_extern_irq; | 58 | unsigned int at91_extern_irq; |
51 | 59 | ||
52 | #define is_extern_irq(irq) ((1 << (irq)) & at91_extern_irq) | 60 | #define is_extern_irq(hwirq) ((1 << (hwirq)) & at91_extern_irq) |
53 | 61 | ||
54 | static int at91_aic_set_type(struct irq_data *d, unsigned type) | 62 | static int at91_aic_set_type(struct irq_data *d, unsigned type) |
55 | { | 63 | { |
@@ -63,13 +71,13 @@ static int at91_aic_set_type(struct irq_data *d, unsigned type) | |||
63 | srctype = AT91_AIC_SRCTYPE_RISING; | 71 | srctype = AT91_AIC_SRCTYPE_RISING; |
64 | break; | 72 | break; |
65 | case IRQ_TYPE_LEVEL_LOW: | 73 | case IRQ_TYPE_LEVEL_LOW: |
66 | if ((d->irq == AT91_ID_FIQ) || is_extern_irq(d->irq)) /* only supported on external interrupts */ | 74 | if ((d->hwirq == AT91_ID_FIQ) || is_extern_irq(d->hwirq)) /* only supported on external interrupts */ |
67 | srctype = AT91_AIC_SRCTYPE_LOW; | 75 | srctype = AT91_AIC_SRCTYPE_LOW; |
68 | else | 76 | else |
69 | return -EINVAL; | 77 | return -EINVAL; |
70 | break; | 78 | break; |
71 | case IRQ_TYPE_EDGE_FALLING: | 79 | case IRQ_TYPE_EDGE_FALLING: |
72 | if ((d->irq == AT91_ID_FIQ) || is_extern_irq(d->irq)) /* only supported on external interrupts */ | 80 | if ((d->hwirq == AT91_ID_FIQ) || is_extern_irq(d->hwirq)) /* only supported on external interrupts */ |
73 | srctype = AT91_AIC_SRCTYPE_FALLING; | 81 | srctype = AT91_AIC_SRCTYPE_FALLING; |
74 | else | 82 | else |
75 | return -EINVAL; | 83 | return -EINVAL; |
@@ -78,8 +86,8 @@ static int at91_aic_set_type(struct irq_data *d, unsigned type) | |||
78 | return -EINVAL; | 86 | return -EINVAL; |
79 | } | 87 | } |
80 | 88 | ||
81 | smr = at91_aic_read(AT91_AIC_SMR(d->irq)) & ~AT91_AIC_SRCTYPE; | 89 | smr = at91_aic_read(AT91_AIC_SMR(d->hwirq)) & ~AT91_AIC_SRCTYPE; |
82 | at91_aic_write(AT91_AIC_SMR(d->irq), smr | srctype); | 90 | at91_aic_write(AT91_AIC_SMR(d->hwirq), smr | srctype); |
83 | return 0; | 91 | return 0; |
84 | } | 92 | } |
85 | 93 | ||
@@ -90,13 +98,13 @@ static u32 backups; | |||
90 | 98 | ||
91 | static int at91_aic_set_wake(struct irq_data *d, unsigned value) | 99 | static int at91_aic_set_wake(struct irq_data *d, unsigned value) |
92 | { | 100 | { |
93 | if (unlikely(d->irq >= 32)) | 101 | if (unlikely(d->hwirq >= NR_AIC_IRQS)) |
94 | return -EINVAL; | 102 | return -EINVAL; |
95 | 103 | ||
96 | if (value) | 104 | if (value) |
97 | wakeups |= (1 << d->irq); | 105 | wakeups |= (1 << d->hwirq); |
98 | else | 106 | else |
99 | wakeups &= ~(1 << d->irq); | 107 | wakeups &= ~(1 << d->hwirq); |
100 | 108 | ||
101 | return 0; | 109 | return 0; |
102 | } | 110 | } |
@@ -127,46 +135,112 @@ static struct irq_chip at91_aic_chip = { | |||
127 | .irq_set_wake = at91_aic_set_wake, | 135 | .irq_set_wake = at91_aic_set_wake, |
128 | }; | 136 | }; |
129 | 137 | ||
138 | static void __init at91_aic_hw_init(unsigned int spu_vector) | ||
139 | { | ||
140 | int i; | ||
141 | |||
142 | /* | ||
143 | * Perform 8 End Of Interrupt Command to make sure AIC | ||
144 | * will not Lock out nIRQ | ||
145 | */ | ||
146 | for (i = 0; i < 8; i++) | ||
147 | at91_aic_write(AT91_AIC_EOICR, 0); | ||
148 | |||
149 | /* | ||
150 | * Spurious Interrupt ID in Spurious Vector Register. | ||
151 | * When there is no current interrupt, the IRQ Vector Register | ||
152 | * reads the value stored in AIC_SPU | ||
153 | */ | ||
154 | at91_aic_write(AT91_AIC_SPU, spu_vector); | ||
155 | |||
156 | /* No debugging in AIC: Debug (Protect) Control Register */ | ||
157 | at91_aic_write(AT91_AIC_DCR, 0); | ||
158 | |||
159 | /* Disable and clear all interrupts initially */ | ||
160 | at91_aic_write(AT91_AIC_IDCR, 0xFFFFFFFF); | ||
161 | at91_aic_write(AT91_AIC_ICCR, 0xFFFFFFFF); | ||
162 | } | ||
163 | |||
164 | #if defined(CONFIG_OF) | ||
165 | static int at91_aic_irq_map(struct irq_domain *h, unsigned int virq, | ||
166 | irq_hw_number_t hw) | ||
167 | { | ||
168 | /* Put virq number in Source Vector Register */ | ||
169 | at91_aic_write(AT91_AIC_SVR(hw), virq); | ||
170 | |||
171 | /* Active Low interrupt, without priority */ | ||
172 | at91_aic_write(AT91_AIC_SMR(hw), AT91_AIC_SRCTYPE_LOW); | ||
173 | |||
174 | irq_set_chip_and_handler(virq, &at91_aic_chip, handle_level_irq); | ||
175 | set_irq_flags(virq, IRQF_VALID | IRQF_PROBE); | ||
176 | |||
177 | return 0; | ||
178 | } | ||
179 | |||
180 | static struct irq_domain_ops at91_aic_irq_ops = { | ||
181 | .map = at91_aic_irq_map, | ||
182 | .xlate = irq_domain_xlate_twocell, | ||
183 | }; | ||
184 | |||
185 | int __init at91_aic_of_init(struct device_node *node, | ||
186 | struct device_node *parent) | ||
187 | { | ||
188 | at91_aic_base = of_iomap(node, 0); | ||
189 | at91_aic_np = node; | ||
190 | |||
191 | at91_aic_domain = irq_domain_add_linear(at91_aic_np, NR_AIC_IRQS, | ||
192 | &at91_aic_irq_ops, NULL); | ||
193 | if (!at91_aic_domain) | ||
194 | panic("Unable to add AIC irq domain (DT)\n"); | ||
195 | |||
196 | irq_set_default_host(at91_aic_domain); | ||
197 | |||
198 | at91_aic_hw_init(NR_AIC_IRQS); | ||
199 | |||
200 | return 0; | ||
201 | } | ||
202 | #endif | ||
203 | |||
130 | /* | 204 | /* |
131 | * Initialize the AIC interrupt controller. | 205 | * Initialize the AIC interrupt controller. |
132 | */ | 206 | */ |
133 | void __init at91_aic_init(unsigned int priority[NR_AIC_IRQS]) | 207 | void __init at91_aic_init(unsigned int priority[NR_AIC_IRQS]) |
134 | { | 208 | { |
135 | unsigned int i; | 209 | unsigned int i; |
210 | int irq_base; | ||
136 | 211 | ||
137 | at91_aic_base = ioremap(AT91_AIC, 512); | 212 | at91_aic_base = ioremap(AT91_AIC, 512); |
138 | |||
139 | if (!at91_aic_base) | 213 | if (!at91_aic_base) |
140 | panic("Impossible to ioremap AT91_AIC\n"); | 214 | panic("Unable to ioremap AIC registers\n"); |
215 | |||
216 | /* Add irq domain for AIC */ | ||
217 | irq_base = irq_alloc_descs(-1, 0, NR_AIC_IRQS, 0); | ||
218 | if (irq_base < 0) { | ||
219 | WARN(1, "Cannot allocate irq_descs, assuming pre-allocated\n"); | ||
220 | irq_base = 0; | ||
221 | } | ||
222 | at91_aic_domain = irq_domain_add_legacy(at91_aic_np, NR_AIC_IRQS, | ||
223 | irq_base, 0, | ||
224 | &irq_domain_simple_ops, NULL); | ||
225 | |||
226 | if (!at91_aic_domain) | ||
227 | panic("Unable to add AIC irq domain\n"); | ||
228 | |||
229 | irq_set_default_host(at91_aic_domain); | ||
141 | 230 | ||
142 | /* | 231 | /* |
143 | * The IVR is used by macro get_irqnr_and_base to read and verify. | 232 | * The IVR is used by macro get_irqnr_and_base to read and verify. |
144 | * The irq number is NR_AIC_IRQS when a spurious interrupt has occurred. | 233 | * The irq number is NR_AIC_IRQS when a spurious interrupt has occurred. |
145 | */ | 234 | */ |
146 | for (i = 0; i < NR_AIC_IRQS; i++) { | 235 | for (i = 0; i < NR_AIC_IRQS; i++) { |
147 | /* Put irq number in Source Vector Register: */ | 236 | /* Put hardware irq number in Source Vector Register: */ |
148 | at91_aic_write(AT91_AIC_SVR(i), i); | 237 | at91_aic_write(AT91_AIC_SVR(i), i); |
149 | /* Active Low interrupt, with the specified priority */ | 238 | /* Active Low interrupt, with the specified priority */ |
150 | at91_aic_write(AT91_AIC_SMR(i), AT91_AIC_SRCTYPE_LOW | priority[i]); | 239 | at91_aic_write(AT91_AIC_SMR(i), AT91_AIC_SRCTYPE_LOW | priority[i]); |
151 | 240 | ||
152 | irq_set_chip_and_handler(i, &at91_aic_chip, handle_level_irq); | 241 | irq_set_chip_and_handler(i, &at91_aic_chip, handle_level_irq); |
153 | set_irq_flags(i, IRQF_VALID | IRQF_PROBE); | 242 | set_irq_flags(i, IRQF_VALID | IRQF_PROBE); |
154 | |||
155 | /* Perform 8 End Of Interrupt Command to make sure AIC will not Lock out nIRQ */ | ||
156 | if (i < 8) | ||
157 | at91_aic_write(AT91_AIC_EOICR, 0); | ||
158 | } | 243 | } |
159 | 244 | ||
160 | /* | 245 | at91_aic_hw_init(NR_AIC_IRQS); |
161 | * Spurious Interrupt ID in Spurious Vector Register is NR_AIC_IRQS | ||
162 | * When there is no current interrupt, the IRQ Vector Register reads the value stored in AIC_SPU | ||
163 | */ | ||
164 | at91_aic_write(AT91_AIC_SPU, NR_AIC_IRQS); | ||
165 | |||
166 | /* No debugging in AIC: Debug (Protect) Control Register */ | ||
167 | at91_aic_write(AT91_AIC_DCR, 0); | ||
168 | |||
169 | /* Disable and clear all interrupts initially */ | ||
170 | at91_aic_write(AT91_AIC_IDCR, 0xFFFFFFFF); | ||
171 | at91_aic_write(AT91_AIC_ICCR, 0xFFFFFFFF); | ||
172 | } | 246 | } |
diff --git a/arch/arm/mach-at91/pm.c b/arch/arm/mach-at91/pm.c index d554e6771b4e..6c9d5e69ac28 100644 --- a/arch/arm/mach-at91/pm.c +++ b/arch/arm/mach-at91/pm.c | |||
@@ -136,7 +136,7 @@ static int at91_pm_verify_clocks(void) | |||
136 | unsigned long scsr; | 136 | unsigned long scsr; |
137 | int i; | 137 | int i; |
138 | 138 | ||
139 | scsr = at91_sys_read(AT91_PMC_SCSR); | 139 | scsr = at91_pmc_read(AT91_PMC_SCSR); |
140 | 140 | ||
141 | /* USB must not be using PLLB */ | 141 | /* USB must not be using PLLB */ |
142 | if (cpu_is_at91rm9200()) { | 142 | if (cpu_is_at91rm9200()) { |
@@ -160,7 +160,7 @@ static int at91_pm_verify_clocks(void) | |||
160 | if ((scsr & (AT91_PMC_PCK0 << i)) == 0) | 160 | if ((scsr & (AT91_PMC_PCK0 << i)) == 0) |
161 | continue; | 161 | continue; |
162 | 162 | ||
163 | css = at91_sys_read(AT91_PMC_PCKR(i)) & AT91_PMC_CSS; | 163 | css = at91_pmc_read(AT91_PMC_PCKR(i)) & AT91_PMC_CSS; |
164 | if (css != AT91_PMC_CSS_SLOW) { | 164 | if (css != AT91_PMC_CSS_SLOW) { |
165 | pr_err("AT91: PM - Suspend-to-RAM with PCK%d src %d\n", i, css); | 165 | pr_err("AT91: PM - Suspend-to-RAM with PCK%d src %d\n", i, css); |
166 | return 0; | 166 | return 0; |
@@ -188,13 +188,27 @@ int at91_suspend_entering_slow_clock(void) | |||
188 | EXPORT_SYMBOL(at91_suspend_entering_slow_clock); | 188 | EXPORT_SYMBOL(at91_suspend_entering_slow_clock); |
189 | 189 | ||
190 | 190 | ||
191 | static void (*slow_clock)(void); | 191 | static void (*slow_clock)(void __iomem *pmc, void __iomem *ramc0, |
192 | void __iomem *ramc1, int memctrl); | ||
192 | 193 | ||
193 | #ifdef CONFIG_AT91_SLOW_CLOCK | 194 | #ifdef CONFIG_AT91_SLOW_CLOCK |
194 | extern void at91_slow_clock(void); | 195 | extern void at91_slow_clock(void __iomem *pmc, void __iomem *ramc0, |
196 | void __iomem *ramc1, int memctrl); | ||
195 | extern u32 at91_slow_clock_sz; | 197 | extern u32 at91_slow_clock_sz; |
196 | #endif | 198 | #endif |
197 | 199 | ||
200 | void __iomem *at91_ramc_base[2]; | ||
201 | |||
202 | void __init at91_ioremap_ramc(int id, u32 addr, u32 size) | ||
203 | { | ||
204 | if (id < 0 || id > 1) { | ||
205 | pr_emerg("Wrong RAM controller id (%d), cannot continue\n", id); | ||
206 | BUG(); | ||
207 | } | ||
208 | at91_ramc_base[id] = ioremap(addr, size); | ||
209 | if (!at91_ramc_base[id]) | ||
210 | panic("Impossible to ioremap ramc.%d 0x%x\n", id, addr); | ||
211 | } | ||
198 | 212 | ||
199 | static int at91_pm_enter(suspend_state_t state) | 213 | static int at91_pm_enter(suspend_state_t state) |
200 | { | 214 | { |
@@ -203,7 +217,7 @@ static int at91_pm_enter(suspend_state_t state) | |||
203 | 217 | ||
204 | pr_debug("AT91: PM - wake mask %08x, pm state %d\n", | 218 | pr_debug("AT91: PM - wake mask %08x, pm state %d\n", |
205 | /* remember all the always-wake irqs */ | 219 | /* remember all the always-wake irqs */ |
206 | (at91_sys_read(AT91_PMC_PCSR) | 220 | (at91_pmc_read(AT91_PMC_PCSR) |
207 | | (1 << AT91_ID_FIQ) | 221 | | (1 << AT91_ID_FIQ) |
208 | | (1 << AT91_ID_SYS) | 222 | | (1 << AT91_ID_SYS) |
209 | | (at91_extern_irq)) | 223 | | (at91_extern_irq)) |
@@ -228,11 +242,18 @@ static int at91_pm_enter(suspend_state_t state) | |||
228 | * turning off the main oscillator; reverse on wakeup. | 242 | * turning off the main oscillator; reverse on wakeup. |
229 | */ | 243 | */ |
230 | if (slow_clock) { | 244 | if (slow_clock) { |
245 | int memctrl = AT91_MEMCTRL_SDRAMC; | ||
246 | |||
247 | if (cpu_is_at91rm9200()) | ||
248 | memctrl = AT91_MEMCTRL_MC; | ||
249 | else if (cpu_is_at91sam9g45()) | ||
250 | memctrl = AT91_MEMCTRL_DDRSDR; | ||
231 | #ifdef CONFIG_AT91_SLOW_CLOCK | 251 | #ifdef CONFIG_AT91_SLOW_CLOCK |
232 | /* copy slow_clock handler to SRAM, and call it */ | 252 | /* copy slow_clock handler to SRAM, and call it */ |
233 | memcpy(slow_clock, at91_slow_clock, at91_slow_clock_sz); | 253 | memcpy(slow_clock, at91_slow_clock, at91_slow_clock_sz); |
234 | #endif | 254 | #endif |
235 | slow_clock(); | 255 | slow_clock(at91_pmc_base, at91_ramc_base[0], |
256 | at91_ramc_base[1], memctrl); | ||
236 | break; | 257 | break; |
237 | } else { | 258 | } else { |
238 | pr_info("AT91: PM - no slow clock mode enabled ...\n"); | 259 | pr_info("AT91: PM - no slow clock mode enabled ...\n"); |
@@ -301,7 +322,7 @@ static int __init at91_pm_init(void) | |||
301 | 322 | ||
302 | #ifdef CONFIG_ARCH_AT91RM9200 | 323 | #ifdef CONFIG_ARCH_AT91RM9200 |
303 | /* AT91RM9200 SDRAM low-power mode cannot be used with self-refresh. */ | 324 | /* AT91RM9200 SDRAM low-power mode cannot be used with self-refresh. */ |
304 | at91_sys_write(AT91_SDRAMC_LPR, 0); | 325 | at91_ramc_write(0, AT91RM9200_SDRAMC_LPR, 0); |
305 | #endif | 326 | #endif |
306 | 327 | ||
307 | suspend_set_ops(&at91_pm_ops); | 328 | suspend_set_ops(&at91_pm_ops); |
diff --git a/arch/arm/mach-at91/pm.h b/arch/arm/mach-at91/pm.h index bba9ce1aaaec..89f56f3a802e 100644 --- a/arch/arm/mach-at91/pm.h +++ b/arch/arm/mach-at91/pm.h | |||
@@ -11,8 +11,9 @@ | |||
11 | #ifndef __ARCH_ARM_MACH_AT91_PM | 11 | #ifndef __ARCH_ARM_MACH_AT91_PM |
12 | #define __ARCH_ARM_MACH_AT91_PM | 12 | #define __ARCH_ARM_MACH_AT91_PM |
13 | 13 | ||
14 | #include <mach/at91_ramc.h> | ||
14 | #ifdef CONFIG_ARCH_AT91RM9200 | 15 | #ifdef CONFIG_ARCH_AT91RM9200 |
15 | #include <mach/at91rm9200_mc.h> | 16 | #include <mach/at91rm9200_sdramc.h> |
16 | 17 | ||
17 | /* | 18 | /* |
18 | * The AT91RM9200 goes into self-refresh mode with this command, and will | 19 | * The AT91RM9200 goes into self-refresh mode with this command, and will |
@@ -26,7 +27,7 @@ | |||
26 | 27 | ||
27 | static inline void at91rm9200_standby(void) | 28 | static inline void at91rm9200_standby(void) |
28 | { | 29 | { |
29 | u32 lpr = at91_sys_read(AT91_SDRAMC_LPR); | 30 | u32 lpr = at91_ramc_read(0, AT91RM9200_SDRAMC_LPR); |
30 | 31 | ||
31 | asm volatile( | 32 | asm volatile( |
32 | "b 1f\n\t" | 33 | "b 1f\n\t" |
@@ -37,15 +38,14 @@ static inline void at91rm9200_standby(void) | |||
37 | " mcr p15, 0, %0, c7, c0, 4\n\t" | 38 | " mcr p15, 0, %0, c7, c0, 4\n\t" |
38 | " str %5, [%1, %2]" | 39 | " str %5, [%1, %2]" |
39 | : | 40 | : |
40 | : "r" (0), "r" (AT91_BASE_SYS), "r" (AT91_SDRAMC_LPR), | 41 | : "r" (0), "r" (AT91_BASE_SYS), "r" (AT91RM9200_SDRAMC_LPR), |
41 | "r" (1), "r" (AT91_SDRAMC_SRR), | 42 | "r" (1), "r" (AT91RM9200_SDRAMC_SRR), |
42 | "r" (lpr)); | 43 | "r" (lpr)); |
43 | } | 44 | } |
44 | 45 | ||
45 | #define at91_standby at91rm9200_standby | 46 | #define at91_standby at91rm9200_standby |
46 | 47 | ||
47 | #elif defined(CONFIG_ARCH_AT91SAM9G45) | 48 | #elif defined(CONFIG_ARCH_AT91SAM9G45) |
48 | #include <mach/at91sam9_ddrsdr.h> | ||
49 | 49 | ||
50 | /* We manage both DDRAM/SDRAM controllers, we need more than one value to | 50 | /* We manage both DDRAM/SDRAM controllers, we need more than one value to |
51 | * remember. | 51 | * remember. |
@@ -78,7 +78,6 @@ static inline void at91sam9g45_standby(void) | |||
78 | #define at91_standby at91sam9g45_standby | 78 | #define at91_standby at91sam9g45_standby |
79 | 79 | ||
80 | #else | 80 | #else |
81 | #include <mach/at91sam9_sdramc.h> | ||
82 | 81 | ||
83 | #ifdef CONFIG_ARCH_AT91SAM9263 | 82 | #ifdef CONFIG_ARCH_AT91SAM9263 |
84 | /* | 83 | /* |
diff --git a/arch/arm/mach-at91/pm_slowclock.S b/arch/arm/mach-at91/pm_slowclock.S index f8539a8bcd6c..db5452123f17 100644 --- a/arch/arm/mach-at91/pm_slowclock.S +++ b/arch/arm/mach-at91/pm_slowclock.S | |||
@@ -15,14 +15,7 @@ | |||
15 | #include <linux/linkage.h> | 15 | #include <linux/linkage.h> |
16 | #include <mach/hardware.h> | 16 | #include <mach/hardware.h> |
17 | #include <mach/at91_pmc.h> | 17 | #include <mach/at91_pmc.h> |
18 | 18 | #include <mach/at91_ramc.h> | |
19 | #if defined(CONFIG_ARCH_AT91RM9200) | ||
20 | #include <mach/at91rm9200_mc.h> | ||
21 | #elif defined(CONFIG_ARCH_AT91SAM9G45) | ||
22 | #include <mach/at91sam9_ddrsdr.h> | ||
23 | #else | ||
24 | #include <mach/at91sam9_sdramc.h> | ||
25 | #endif | ||
26 | 19 | ||
27 | 20 | ||
28 | #ifdef CONFIG_ARCH_AT91SAM9263 | 21 | #ifdef CONFIG_ARCH_AT91SAM9263 |
@@ -46,17 +39,23 @@ | |||
46 | #define PLLALOCK_TIMEOUT 1000 | 39 | #define PLLALOCK_TIMEOUT 1000 |
47 | #define PLLBLOCK_TIMEOUT 1000 | 40 | #define PLLBLOCK_TIMEOUT 1000 |
48 | 41 | ||
42 | pmc .req r0 | ||
43 | sdramc .req r1 | ||
44 | ramc1 .req r2 | ||
45 | memctrl .req r3 | ||
46 | tmp1 .req r4 | ||
47 | tmp2 .req r5 | ||
49 | 48 | ||
50 | /* | 49 | /* |
51 | * Wait until master clock is ready (after switching master clock source) | 50 | * Wait until master clock is ready (after switching master clock source) |
52 | */ | 51 | */ |
53 | .macro wait_mckrdy | 52 | .macro wait_mckrdy |
54 | mov r4, #MCKRDY_TIMEOUT | 53 | mov tmp2, #MCKRDY_TIMEOUT |
55 | 1: sub r4, r4, #1 | 54 | 1: sub tmp2, tmp2, #1 |
56 | cmp r4, #0 | 55 | cmp tmp2, #0 |
57 | beq 2f | 56 | beq 2f |
58 | ldr r3, [r1, #(AT91_PMC_SR - AT91_PMC)] | 57 | ldr tmp1, [pmc, #AT91_PMC_SR] |
59 | tst r3, #AT91_PMC_MCKRDY | 58 | tst tmp1, #AT91_PMC_MCKRDY |
60 | beq 1b | 59 | beq 1b |
61 | 2: | 60 | 2: |
62 | .endm | 61 | .endm |
@@ -65,12 +64,12 @@ | |||
65 | * Wait until master oscillator has stabilized. | 64 | * Wait until master oscillator has stabilized. |
66 | */ | 65 | */ |
67 | .macro wait_moscrdy | 66 | .macro wait_moscrdy |
68 | mov r4, #MOSCRDY_TIMEOUT | 67 | mov tmp2, #MOSCRDY_TIMEOUT |
69 | 1: sub r4, r4, #1 | 68 | 1: sub tmp2, tmp2, #1 |
70 | cmp r4, #0 | 69 | cmp tmp2, #0 |
71 | beq 2f | 70 | beq 2f |
72 | ldr r3, [r1, #(AT91_PMC_SR - AT91_PMC)] | 71 | ldr tmp1, [pmc, #AT91_PMC_SR] |
73 | tst r3, #AT91_PMC_MOSCS | 72 | tst tmp1, #AT91_PMC_MOSCS |
74 | beq 1b | 73 | beq 1b |
75 | 2: | 74 | 2: |
76 | .endm | 75 | .endm |
@@ -79,12 +78,12 @@ | |||
79 | * Wait until PLLA has locked. | 78 | * Wait until PLLA has locked. |
80 | */ | 79 | */ |
81 | .macro wait_pllalock | 80 | .macro wait_pllalock |
82 | mov r4, #PLLALOCK_TIMEOUT | 81 | mov tmp2, #PLLALOCK_TIMEOUT |
83 | 1: sub r4, r4, #1 | 82 | 1: sub tmp2, tmp2, #1 |
84 | cmp r4, #0 | 83 | cmp tmp2, #0 |
85 | beq 2f | 84 | beq 2f |
86 | ldr r3, [r1, #(AT91_PMC_SR - AT91_PMC)] | 85 | ldr tmp1, [pmc, #AT91_PMC_SR] |
87 | tst r3, #AT91_PMC_LOCKA | 86 | tst tmp1, #AT91_PMC_LOCKA |
88 | beq 1b | 87 | beq 1b |
89 | 2: | 88 | 2: |
90 | .endm | 89 | .endm |
@@ -93,79 +92,98 @@ | |||
93 | * Wait until PLLB has locked. | 92 | * Wait until PLLB has locked. |
94 | */ | 93 | */ |
95 | .macro wait_pllblock | 94 | .macro wait_pllblock |
96 | mov r4, #PLLBLOCK_TIMEOUT | 95 | mov tmp2, #PLLBLOCK_TIMEOUT |
97 | 1: sub r4, r4, #1 | 96 | 1: sub tmp2, tmp2, #1 |
98 | cmp r4, #0 | 97 | cmp tmp2, #0 |
99 | beq 2f | 98 | beq 2f |
100 | ldr r3, [r1, #(AT91_PMC_SR - AT91_PMC)] | 99 | ldr tmp1, [pmc, #AT91_PMC_SR] |
101 | tst r3, #AT91_PMC_LOCKB | 100 | tst tmp1, #AT91_PMC_LOCKB |
102 | beq 1b | 101 | beq 1b |
103 | 2: | 102 | 2: |
104 | .endm | 103 | .endm |
105 | 104 | ||
106 | .text | 105 | .text |
107 | 106 | ||
107 | /* void at91_slow_clock(void __iomem *pmc, void __iomem *sdramc, | ||
108 | * void __iomem *ramc1, int memctrl) | ||
109 | */ | ||
108 | ENTRY(at91_slow_clock) | 110 | ENTRY(at91_slow_clock) |
109 | /* Save registers on stack */ | 111 | /* Save registers on stack */ |
110 | stmfd sp!, {r0 - r12, lr} | 112 | stmfd sp!, {r4 - r12, lr} |
111 | 113 | ||
112 | /* | 114 | /* |
113 | * Register usage: | 115 | * Register usage: |
114 | * R1 = Base address of AT91_PMC | 116 | * R0 = Base address of AT91_PMC |
115 | * R2 = Base address of RAM Controller (SDRAM, DDRSDR, or AT91_SYS) | 117 | * R1 = Base address of RAM Controller (SDRAM, DDRSDR, or AT91_SYS) |
116 | * R3 = temporary register | 118 | * R2 = Base address of second RAM Controller or 0 if not present |
119 | * R3 = Memory controller | ||
117 | * R4 = temporary register | 120 | * R4 = temporary register |
118 | * R5 = Base address of second RAM Controller or 0 if not present | 121 | * R5 = temporary register |
119 | */ | 122 | */ |
120 | ldr r1, .at91_va_base_pmc | ||
121 | ldr r2, .at91_va_base_sdramc | ||
122 | ldr r5, .at91_va_base_ramc1 | ||
123 | 123 | ||
124 | /* Drain write buffer */ | 124 | /* Drain write buffer */ |
125 | mov r0, #0 | 125 | mov tmp1, #0 |
126 | mcr p15, 0, r0, c7, c10, 4 | 126 | mcr p15, 0, tmp1, c7, c10, 4 |
127 | |||
128 | cmp memctrl, #AT91_MEMCTRL_MC | ||
129 | bne ddr_sr_enable | ||
127 | 130 | ||
128 | #ifdef CONFIG_ARCH_AT91RM9200 | 131 | /* |
132 | * at91rm9200 Memory controller | ||
133 | */ | ||
129 | /* Put SDRAM in self-refresh mode */ | 134 | /* Put SDRAM in self-refresh mode */ |
130 | mov r3, #1 | 135 | mov tmp1, #1 |
131 | str r3, [r2, #AT91_SDRAMC_SRR] | 136 | str tmp1, [sdramc, #AT91RM9200_SDRAMC_SRR] |
132 | #elif defined(CONFIG_ARCH_AT91SAM9G45) | 137 | b sdr_sr_done |
138 | |||
139 | /* | ||
140 | * DDRSDR Memory controller | ||
141 | */ | ||
142 | ddr_sr_enable: | ||
143 | cmp memctrl, #AT91_MEMCTRL_DDRSDR | ||
144 | bne sdr_sr_enable | ||
133 | 145 | ||
134 | /* prepare for DDRAM self-refresh mode */ | 146 | /* prepare for DDRAM self-refresh mode */ |
135 | ldr r3, [r2, #AT91_DDRSDRC_LPR] | 147 | ldr tmp1, [sdramc, #AT91_DDRSDRC_LPR] |
136 | str r3, .saved_sam9_lpr | 148 | str tmp1, .saved_sam9_lpr |
137 | bic r3, #AT91_DDRSDRC_LPCB | 149 | bic tmp1, #AT91_DDRSDRC_LPCB |
138 | orr r3, #AT91_DDRSDRC_LPCB_SELF_REFRESH | 150 | orr tmp1, #AT91_DDRSDRC_LPCB_SELF_REFRESH |
139 | 151 | ||
140 | /* figure out if we use the second ram controller */ | 152 | /* figure out if we use the second ram controller */ |
141 | cmp r5, #0 | 153 | cmp ramc1, #0 |
142 | ldrne r4, [r5, #AT91_DDRSDRC_LPR] | 154 | ldrne tmp2, [ramc1, #AT91_DDRSDRC_LPR] |
143 | strne r4, .saved_sam9_lpr1 | 155 | strne tmp2, .saved_sam9_lpr1 |
144 | bicne r4, #AT91_DDRSDRC_LPCB | 156 | bicne tmp2, #AT91_DDRSDRC_LPCB |
145 | orrne r4, #AT91_DDRSDRC_LPCB_SELF_REFRESH | 157 | orrne tmp2, #AT91_DDRSDRC_LPCB_SELF_REFRESH |
146 | 158 | ||
147 | /* Enable DDRAM self-refresh mode */ | 159 | /* Enable DDRAM self-refresh mode */ |
148 | str r3, [r2, #AT91_DDRSDRC_LPR] | 160 | str tmp1, [sdramc, #AT91_DDRSDRC_LPR] |
149 | strne r4, [r5, #AT91_DDRSDRC_LPR] | 161 | strne tmp2, [ramc1, #AT91_DDRSDRC_LPR] |
150 | #else | 162 | |
163 | b sdr_sr_done | ||
164 | |||
165 | /* | ||
166 | * SDRAMC Memory controller | ||
167 | */ | ||
168 | sdr_sr_enable: | ||
151 | /* Enable SDRAM self-refresh mode */ | 169 | /* Enable SDRAM self-refresh mode */ |
152 | ldr r3, [r2, #AT91_SDRAMC_LPR] | 170 | ldr tmp1, [sdramc, #AT91_SDRAMC_LPR] |
153 | str r3, .saved_sam9_lpr | 171 | str tmp1, .saved_sam9_lpr |
154 | 172 | ||
155 | bic r3, #AT91_SDRAMC_LPCB | 173 | bic tmp1, #AT91_SDRAMC_LPCB |
156 | orr r3, #AT91_SDRAMC_LPCB_SELF_REFRESH | 174 | orr tmp1, #AT91_SDRAMC_LPCB_SELF_REFRESH |
157 | str r3, [r2, #AT91_SDRAMC_LPR] | 175 | str tmp1, [sdramc, #AT91_SDRAMC_LPR] |
158 | #endif | ||
159 | 176 | ||
177 | sdr_sr_done: | ||
160 | /* Save Master clock setting */ | 178 | /* Save Master clock setting */ |
161 | ldr r3, [r1, #(AT91_PMC_MCKR - AT91_PMC)] | 179 | ldr tmp1, [pmc, #AT91_PMC_MCKR] |
162 | str r3, .saved_mckr | 180 | str tmp1, .saved_mckr |
163 | 181 | ||
164 | /* | 182 | /* |
165 | * Set the Master clock source to slow clock | 183 | * Set the Master clock source to slow clock |
166 | */ | 184 | */ |
167 | bic r3, r3, #AT91_PMC_CSS | 185 | bic tmp1, tmp1, #AT91_PMC_CSS |
168 | str r3, [r1, #(AT91_PMC_MCKR - AT91_PMC)] | 186 | str tmp1, [pmc, #AT91_PMC_MCKR] |
169 | 187 | ||
170 | wait_mckrdy | 188 | wait_mckrdy |
171 | 189 | ||
@@ -175,61 +193,61 @@ ENTRY(at91_slow_clock) | |||
175 | * | 193 | * |
176 | * See AT91RM9200 errata #27 and #28 for details. | 194 | * See AT91RM9200 errata #27 and #28 for details. |
177 | */ | 195 | */ |
178 | mov r3, #0 | 196 | mov tmp1, #0 |
179 | str r3, [r1, #(AT91_PMC_MCKR - AT91_PMC)] | 197 | str tmp1, [pmc, #AT91_PMC_MCKR] |
180 | 198 | ||
181 | wait_mckrdy | 199 | wait_mckrdy |
182 | #endif | 200 | #endif |
183 | 201 | ||
184 | /* Save PLLA setting and disable it */ | 202 | /* Save PLLA setting and disable it */ |
185 | ldr r3, [r1, #(AT91_CKGR_PLLAR - AT91_PMC)] | 203 | ldr tmp1, [pmc, #AT91_CKGR_PLLAR] |
186 | str r3, .saved_pllar | 204 | str tmp1, .saved_pllar |
187 | 205 | ||
188 | mov r3, #AT91_PMC_PLLCOUNT | 206 | mov tmp1, #AT91_PMC_PLLCOUNT |
189 | orr r3, r3, #(1 << 29) /* bit 29 always set */ | 207 | orr tmp1, tmp1, #(1 << 29) /* bit 29 always set */ |
190 | str r3, [r1, #(AT91_CKGR_PLLAR - AT91_PMC)] | 208 | str tmp1, [pmc, #AT91_CKGR_PLLAR] |
191 | 209 | ||
192 | /* Save PLLB setting and disable it */ | 210 | /* Save PLLB setting and disable it */ |
193 | ldr r3, [r1, #(AT91_CKGR_PLLBR - AT91_PMC)] | 211 | ldr tmp1, [pmc, #AT91_CKGR_PLLBR] |
194 | str r3, .saved_pllbr | 212 | str tmp1, .saved_pllbr |
195 | 213 | ||
196 | mov r3, #AT91_PMC_PLLCOUNT | 214 | mov tmp1, #AT91_PMC_PLLCOUNT |
197 | str r3, [r1, #(AT91_CKGR_PLLBR - AT91_PMC)] | 215 | str tmp1, [pmc, #AT91_CKGR_PLLBR] |
198 | 216 | ||
199 | /* Turn off the main oscillator */ | 217 | /* Turn off the main oscillator */ |
200 | ldr r3, [r1, #(AT91_CKGR_MOR - AT91_PMC)] | 218 | ldr tmp1, [pmc, #AT91_CKGR_MOR] |
201 | bic r3, r3, #AT91_PMC_MOSCEN | 219 | bic tmp1, tmp1, #AT91_PMC_MOSCEN |
202 | str r3, [r1, #(AT91_CKGR_MOR - AT91_PMC)] | 220 | str tmp1, [pmc, #AT91_CKGR_MOR] |
203 | 221 | ||
204 | /* Wait for interrupt */ | 222 | /* Wait for interrupt */ |
205 | mcr p15, 0, r0, c7, c0, 4 | 223 | mcr p15, 0, tmp1, c7, c0, 4 |
206 | 224 | ||
207 | /* Turn on the main oscillator */ | 225 | /* Turn on the main oscillator */ |
208 | ldr r3, [r1, #(AT91_CKGR_MOR - AT91_PMC)] | 226 | ldr tmp1, [pmc, #AT91_CKGR_MOR] |
209 | orr r3, r3, #AT91_PMC_MOSCEN | 227 | orr tmp1, tmp1, #AT91_PMC_MOSCEN |
210 | str r3, [r1, #(AT91_CKGR_MOR - AT91_PMC)] | 228 | str tmp1, [pmc, #AT91_CKGR_MOR] |
211 | 229 | ||
212 | wait_moscrdy | 230 | wait_moscrdy |
213 | 231 | ||
214 | /* Restore PLLB setting */ | 232 | /* Restore PLLB setting */ |
215 | ldr r3, .saved_pllbr | 233 | ldr tmp1, .saved_pllbr |
216 | str r3, [r1, #(AT91_CKGR_PLLBR - AT91_PMC)] | 234 | str tmp1, [pmc, #AT91_CKGR_PLLBR] |
217 | 235 | ||
218 | tst r3, #(AT91_PMC_MUL & 0xff0000) | 236 | tst tmp1, #(AT91_PMC_MUL & 0xff0000) |
219 | bne 1f | 237 | bne 1f |
220 | tst r3, #(AT91_PMC_MUL & ~0xff0000) | 238 | tst tmp1, #(AT91_PMC_MUL & ~0xff0000) |
221 | beq 2f | 239 | beq 2f |
222 | 1: | 240 | 1: |
223 | wait_pllblock | 241 | wait_pllblock |
224 | 2: | 242 | 2: |
225 | 243 | ||
226 | /* Restore PLLA setting */ | 244 | /* Restore PLLA setting */ |
227 | ldr r3, .saved_pllar | 245 | ldr tmp1, .saved_pllar |
228 | str r3, [r1, #(AT91_CKGR_PLLAR - AT91_PMC)] | 246 | str tmp1, [pmc, #AT91_CKGR_PLLAR] |
229 | 247 | ||
230 | tst r3, #(AT91_PMC_MUL & 0xff0000) | 248 | tst tmp1, #(AT91_PMC_MUL & 0xff0000) |
231 | bne 3f | 249 | bne 3f |
232 | tst r3, #(AT91_PMC_MUL & ~0xff0000) | 250 | tst tmp1, #(AT91_PMC_MUL & ~0xff0000) |
233 | beq 4f | 251 | beq 4f |
234 | 3: | 252 | 3: |
235 | wait_pllalock | 253 | wait_pllalock |
@@ -242,11 +260,11 @@ ENTRY(at91_slow_clock) | |||
242 | * | 260 | * |
243 | * See AT91RM9200 errata #27 and #28 for details. | 261 | * See AT91RM9200 errata #27 and #28 for details. |
244 | */ | 262 | */ |
245 | ldr r3, .saved_mckr | 263 | ldr tmp1, .saved_mckr |
246 | tst r3, #AT91_PMC_PRES | 264 | tst tmp1, #AT91_PMC_PRES |
247 | beq 2f | 265 | beq 2f |
248 | and r3, r3, #AT91_PMC_PRES | 266 | and tmp1, tmp1, #AT91_PMC_PRES |
249 | str r3, [r1, #(AT91_PMC_MCKR - AT91_PMC)] | 267 | str tmp1, [pmc, #AT91_PMC_MCKR] |
250 | 268 | ||
251 | wait_mckrdy | 269 | wait_mckrdy |
252 | #endif | 270 | #endif |
@@ -254,31 +272,45 @@ ENTRY(at91_slow_clock) | |||
254 | /* | 272 | /* |
255 | * Restore master clock setting | 273 | * Restore master clock setting |
256 | */ | 274 | */ |
257 | 2: ldr r3, .saved_mckr | 275 | 2: ldr tmp1, .saved_mckr |
258 | str r3, [r1, #(AT91_PMC_MCKR - AT91_PMC)] | 276 | str tmp1, [pmc, #AT91_PMC_MCKR] |
259 | 277 | ||
260 | wait_mckrdy | 278 | wait_mckrdy |
261 | 279 | ||
262 | #ifdef CONFIG_ARCH_AT91RM9200 | 280 | /* |
263 | /* Do nothing - self-refresh is automatically disabled. */ | 281 | * at91rm9200 Memory controller |
264 | #elif defined(CONFIG_ARCH_AT91SAM9G45) | 282 | * Do nothing - self-refresh is automatically disabled. |
283 | */ | ||
284 | cmp memctrl, #AT91_MEMCTRL_MC | ||
285 | beq ram_restored | ||
286 | |||
287 | /* | ||
288 | * DDRSDR Memory controller | ||
289 | */ | ||
290 | cmp memctrl, #AT91_MEMCTRL_DDRSDR | ||
291 | bne sdr_en_restore | ||
265 | /* Restore LPR on AT91 with DDRAM */ | 292 | /* Restore LPR on AT91 with DDRAM */ |
266 | ldr r3, .saved_sam9_lpr | 293 | ldr tmp1, .saved_sam9_lpr |
267 | str r3, [r2, #AT91_DDRSDRC_LPR] | 294 | str tmp1, [sdramc, #AT91_DDRSDRC_LPR] |
268 | 295 | ||
269 | /* if we use the second ram controller */ | 296 | /* if we use the second ram controller */ |
270 | cmp r5, #0 | 297 | cmp ramc1, #0 |
271 | ldrne r4, .saved_sam9_lpr1 | 298 | ldrne tmp2, .saved_sam9_lpr1 |
272 | strne r4, [r5, #AT91_DDRSDRC_LPR] | 299 | strne tmp2, [ramc1, #AT91_DDRSDRC_LPR] |
300 | |||
301 | b ram_restored | ||
273 | 302 | ||
274 | #else | 303 | /* |
304 | * SDRAMC Memory controller | ||
305 | */ | ||
306 | sdr_en_restore: | ||
275 | /* Restore LPR on AT91 with SDRAM */ | 307 | /* Restore LPR on AT91 with SDRAM */ |
276 | ldr r3, .saved_sam9_lpr | 308 | ldr tmp1, .saved_sam9_lpr |
277 | str r3, [r2, #AT91_SDRAMC_LPR] | 309 | str tmp1, [sdramc, #AT91_SDRAMC_LPR] |
278 | #endif | ||
279 | 310 | ||
311 | ram_restored: | ||
280 | /* Restore registers, and return */ | 312 | /* Restore registers, and return */ |
281 | ldmfd sp!, {r0 - r12, pc} | 313 | ldmfd sp!, {r4 - r12, pc} |
282 | 314 | ||
283 | 315 | ||
284 | .saved_mckr: | 316 | .saved_mckr: |
@@ -296,26 +328,5 @@ ENTRY(at91_slow_clock) | |||
296 | .saved_sam9_lpr1: | 328 | .saved_sam9_lpr1: |
297 | .word 0 | 329 | .word 0 |
298 | 330 | ||
299 | .at91_va_base_pmc: | ||
300 | .word AT91_VA_BASE_SYS + AT91_PMC | ||
301 | |||
302 | #ifdef CONFIG_ARCH_AT91RM9200 | ||
303 | .at91_va_base_sdramc: | ||
304 | .word AT91_VA_BASE_SYS | ||
305 | #elif defined(CONFIG_ARCH_AT91SAM9G45) | ||
306 | .at91_va_base_sdramc: | ||
307 | .word AT91_VA_BASE_SYS + AT91_DDRSDRC0 | ||
308 | #else | ||
309 | .at91_va_base_sdramc: | ||
310 | .word AT91_VA_BASE_SYS + AT91_SDRAMC0 | ||
311 | #endif | ||
312 | |||
313 | .at91_va_base_ramc1: | ||
314 | #if defined(CONFIG_ARCH_AT91SAM9G45) | ||
315 | .word AT91_VA_BASE_SYS + AT91_DDRSDRC1 | ||
316 | #else | ||
317 | .word 0 | ||
318 | #endif | ||
319 | |||
320 | ENTRY(at91_slow_clock_sz) | 331 | ENTRY(at91_slow_clock_sz) |
321 | .word .-at91_slow_clock | 332 | .word .-at91_slow_clock |
diff --git a/arch/arm/mach-at91/setup.c b/arch/arm/mach-at91/setup.c index 620c67e8f814..372396c2ecb6 100644 --- a/arch/arm/mach-at91/setup.c +++ b/arch/arm/mach-at91/setup.c | |||
@@ -276,6 +276,15 @@ void __init at91_ioremap_rstc(u32 base_addr) | |||
276 | panic("Impossible to ioremap at91_rstc_base\n"); | 276 | panic("Impossible to ioremap at91_rstc_base\n"); |
277 | } | 277 | } |
278 | 278 | ||
279 | void __iomem *at91_matrix_base; | ||
280 | |||
281 | void __init at91_ioremap_matrix(u32 base_addr) | ||
282 | { | ||
283 | at91_matrix_base = ioremap(base_addr, 512); | ||
284 | if (!at91_matrix_base) | ||
285 | panic("Impossible to ioremap at91_matrix_base\n"); | ||
286 | } | ||
287 | |||
279 | void __init at91_initialize(unsigned long main_clock) | 288 | void __init at91_initialize(unsigned long main_clock) |
280 | { | 289 | { |
281 | at91_boot_soc.ioremap_registers(); | 290 | at91_boot_soc.ioremap_registers(); |
diff --git a/arch/arm/mach-imx/Kconfig b/arch/arm/mach-imx/Kconfig index feeebde71deb..52359f80c42d 100644 --- a/arch/arm/mach-imx/Kconfig +++ b/arch/arm/mach-imx/Kconfig | |||
@@ -373,6 +373,14 @@ config MACH_IMX27IPCAM | |||
373 | Include support for IMX27 IPCAM platform. This includes specific | 373 | Include support for IMX27 IPCAM platform. This includes specific |
374 | configurations for the board and its peripherals. | 374 | configurations for the board and its peripherals. |
375 | 375 | ||
376 | config MACH_IMX27_DT | ||
377 | bool "Support i.MX27 platforms from device tree" | ||
378 | select SOC_IMX27 | ||
379 | select USE_OF | ||
380 | help | ||
381 | Include support for Freescale i.MX27 based platforms | ||
382 | using the device tree for discovery | ||
383 | |||
376 | endif | 384 | endif |
377 | 385 | ||
378 | if ARCH_IMX_V6_V7 | 386 | if ARCH_IMX_V6_V7 |
diff --git a/arch/arm/mach-imx/Makefile b/arch/arm/mach-imx/Makefile index 1ca9558723c2..35fc450fa263 100644 --- a/arch/arm/mach-imx/Makefile +++ b/arch/arm/mach-imx/Makefile | |||
@@ -41,6 +41,7 @@ obj-$(CONFIG_MACH_EUKREA_MBIMX27_BASEBOARD) += eukrea_mbimx27-baseboard.o | |||
41 | obj-$(CONFIG_MACH_PCA100) += mach-pca100.o | 41 | obj-$(CONFIG_MACH_PCA100) += mach-pca100.o |
42 | obj-$(CONFIG_MACH_MXT_TD60) += mach-mxt_td60.o | 42 | obj-$(CONFIG_MACH_MXT_TD60) += mach-mxt_td60.o |
43 | obj-$(CONFIG_MACH_IMX27IPCAM) += mach-imx27ipcam.o | 43 | obj-$(CONFIG_MACH_IMX27IPCAM) += mach-imx27ipcam.o |
44 | obj-$(CONFIG_MACH_IMX27_DT) += imx27-dt.o | ||
44 | 45 | ||
45 | # i.MX31 based machines | 46 | # i.MX31 based machines |
46 | obj-$(CONFIG_MACH_MX31ADS) += mach-mx31ads.o | 47 | obj-$(CONFIG_MACH_MX31ADS) += mach-mx31ads.o |
diff --git a/arch/arm/mach-imx/Makefile.boot b/arch/arm/mach-imx/Makefile.boot index 6dfdbcc83afd..3851d8a27875 100644 --- a/arch/arm/mach-imx/Makefile.boot +++ b/arch/arm/mach-imx/Makefile.boot | |||
@@ -38,5 +38,8 @@ zreladdr-$(CONFIG_SOC_IMX6Q) += 0x10008000 | |||
38 | params_phys-$(CONFIG_SOC_IMX6Q) := 0x10000100 | 38 | params_phys-$(CONFIG_SOC_IMX6Q) := 0x10000100 |
39 | initrd_phys-$(CONFIG_SOC_IMX6Q) := 0x10800000 | 39 | initrd_phys-$(CONFIG_SOC_IMX6Q) := 0x10800000 |
40 | 40 | ||
41 | dtb-$(CONFIG_MACH_IMX51_DT) += imx51-babbage.dtb | ||
42 | dtb-$(CONFIG_MACH_IMX53_DT) += imx53-ard.dtb imx53-evk.dtb \ | ||
43 | imx53-qsb.dtb imx53-smd.dtb | ||
41 | dtb-$(CONFIG_SOC_IMX6Q) += imx6q-arm2.dtb \ | 44 | dtb-$(CONFIG_SOC_IMX6Q) += imx6q-arm2.dtb \ |
42 | imx6q-sabrelite.dtb | 45 | imx6q-sabrelite.dtb |
diff --git a/arch/arm/mach-imx/clock-imx27.c b/arch/arm/mach-imx/clock-imx27.c index dc2d7a511d9b..b9a95ed75553 100644 --- a/arch/arm/mach-imx/clock-imx27.c +++ b/arch/arm/mach-imx/clock-imx27.c | |||
@@ -22,6 +22,7 @@ | |||
22 | #include <linux/io.h> | 22 | #include <linux/io.h> |
23 | #include <linux/module.h> | 23 | #include <linux/module.h> |
24 | #include <linux/clkdev.h> | 24 | #include <linux/clkdev.h> |
25 | #include <linux/of.h> | ||
25 | 26 | ||
26 | #include <asm/div64.h> | 27 | #include <asm/div64.h> |
27 | 28 | ||
@@ -764,3 +765,20 @@ int __init mx27_clocks_init(unsigned long fref) | |||
764 | return 0; | 765 | return 0; |
765 | } | 766 | } |
766 | 767 | ||
768 | #ifdef CONFIG_OF | ||
769 | int __init mx27_clocks_init_dt(void) | ||
770 | { | ||
771 | struct device_node *np; | ||
772 | u32 fref = 26000000; /* default */ | ||
773 | |||
774 | for_each_compatible_node(np, NULL, "fixed-clock") { | ||
775 | if (!of_device_is_compatible(np, "fsl,imx-osc26m")) | ||
776 | continue; | ||
777 | |||
778 | if (!of_property_read_u32(np, "clock-frequency", &fref)) | ||
779 | break; | ||
780 | } | ||
781 | |||
782 | return mx27_clocks_init(fref); | ||
783 | } | ||
784 | #endif | ||
diff --git a/arch/arm/mach-imx/imx27-dt.c b/arch/arm/mach-imx/imx27-dt.c new file mode 100644 index 000000000000..861ceb8232d6 --- /dev/null +++ b/arch/arm/mach-imx/imx27-dt.c | |||
@@ -0,0 +1,89 @@ | |||
1 | /* | ||
2 | * Copyright 2012 Sascha Hauer, Pengutronix | ||
3 | * | ||
4 | * The code contained herein is licensed under the GNU General Public | ||
5 | * License. You may obtain a copy of the GNU General Public License | ||
6 | * Version 2 or later at the following locations: | ||
7 | * | ||
8 | * http://www.opensource.org/licenses/gpl-license.html | ||
9 | * http://www.gnu.org/copyleft/gpl.html | ||
10 | */ | ||
11 | |||
12 | #include <linux/irq.h> | ||
13 | #include <linux/irqdomain.h> | ||
14 | #include <linux/of_irq.h> | ||
15 | #include <linux/of_platform.h> | ||
16 | #include <asm/mach/arch.h> | ||
17 | #include <asm/mach/time.h> | ||
18 | #include <mach/common.h> | ||
19 | #include <mach/mx27.h> | ||
20 | |||
21 | static const struct of_dev_auxdata imx27_auxdata_lookup[] __initconst = { | ||
22 | OF_DEV_AUXDATA("fsl,imx27-uart", MX27_UART1_BASE_ADDR, "imx21-uart.0", NULL), | ||
23 | OF_DEV_AUXDATA("fsl,imx27-uart", MX27_UART2_BASE_ADDR, "imx21-uart.1", NULL), | ||
24 | OF_DEV_AUXDATA("fsl,imx27-uart", MX27_UART3_BASE_ADDR, "imx21-uart.2", NULL), | ||
25 | OF_DEV_AUXDATA("fsl,imx27-fec", MX27_FEC_BASE_ADDR, "imx27-fec.0", NULL), | ||
26 | OF_DEV_AUXDATA("fsl,imx27-i2c", MX27_I2C1_BASE_ADDR, "imx-i2c.0", NULL), | ||
27 | OF_DEV_AUXDATA("fsl,imx27-i2c", MX27_I2C2_BASE_ADDR, "imx-i2c.1", NULL), | ||
28 | OF_DEV_AUXDATA("fsl,imx27-cspi", MX27_CSPI1_BASE_ADDR, "imx27-cspi.0", NULL), | ||
29 | OF_DEV_AUXDATA("fsl,imx27-cspi", MX27_CSPI2_BASE_ADDR, "imx27-cspi.1", NULL), | ||
30 | OF_DEV_AUXDATA("fsl,imx27-cspi", MX27_CSPI3_BASE_ADDR, "imx27-cspi.2", NULL), | ||
31 | OF_DEV_AUXDATA("fsl,imx27-wdt", MX27_WDOG_BASE_ADDR, "imx2-wdt.0", NULL), | ||
32 | { /* sentinel */ } | ||
33 | }; | ||
34 | |||
35 | static int __init imx27_avic_add_irq_domain(struct device_node *np, | ||
36 | struct device_node *interrupt_parent) | ||
37 | { | ||
38 | irq_domain_add_simple(np, 0); | ||
39 | return 0; | ||
40 | } | ||
41 | |||
42 | static int __init imx27_gpio_add_irq_domain(struct device_node *np, | ||
43 | struct device_node *interrupt_parent) | ||
44 | { | ||
45 | static int gpio_irq_base = MXC_GPIO_IRQ_START + ARCH_NR_GPIOS; | ||
46 | |||
47 | irq_domain_add_simple(np, gpio_irq_base); | ||
48 | |||
49 | return 0; | ||
50 | } | ||
51 | |||
52 | static const struct of_device_id imx27_irq_match[] __initconst = { | ||
53 | { .compatible = "fsl,imx27-avic", .data = imx27_avic_add_irq_domain, }, | ||
54 | { .compatible = "fsl,imx27-gpio", .data = imx27_gpio_add_irq_domain, }, | ||
55 | { /* sentinel */ } | ||
56 | }; | ||
57 | |||
58 | static void __init imx27_dt_init(void) | ||
59 | { | ||
60 | of_irq_init(imx27_irq_match); | ||
61 | |||
62 | of_platform_populate(NULL, of_default_bus_match_table, | ||
63 | imx27_auxdata_lookup, NULL); | ||
64 | } | ||
65 | |||
66 | static void __init imx27_timer_init(void) | ||
67 | { | ||
68 | mx27_clocks_init_dt(); | ||
69 | } | ||
70 | |||
71 | static struct sys_timer imx27_timer = { | ||
72 | .init = imx27_timer_init, | ||
73 | }; | ||
74 | |||
75 | static const char *imx27_dt_board_compat[] __initdata = { | ||
76 | "fsl,imx27", | ||
77 | NULL | ||
78 | }; | ||
79 | |||
80 | DT_MACHINE_START(IMX27_DT, "Freescale i.MX27 (Device Tree Support)") | ||
81 | .map_io = mx27_map_io, | ||
82 | .init_early = imx27_init_early, | ||
83 | .init_irq = mx27_init_irq, | ||
84 | .handle_irq = imx27_handle_irq, | ||
85 | .timer = &imx27_timer, | ||
86 | .init_machine = imx27_dt_init, | ||
87 | .dt_compat = imx27_dt_board_compat, | ||
88 | .restart = mxc_restart, | ||
89 | MACHINE_END | ||
diff --git a/arch/arm/mach-imx/imx51-dt.c b/arch/arm/mach-imx/imx51-dt.c index 1e03ef42faa0..5cca573964f0 100644 --- a/arch/arm/mach-imx/imx51-dt.c +++ b/arch/arm/mach-imx/imx51-dt.c | |||
@@ -104,6 +104,7 @@ static struct sys_timer imx51_timer = { | |||
104 | 104 | ||
105 | static const char *imx51_dt_board_compat[] __initdata = { | 105 | static const char *imx51_dt_board_compat[] __initdata = { |
106 | "fsl,imx51-babbage", | 106 | "fsl,imx51-babbage", |
107 | "fsl,imx51", | ||
107 | NULL | 108 | NULL |
108 | }; | 109 | }; |
109 | 110 | ||
diff --git a/arch/arm/mach-imx/imx53-dt.c b/arch/arm/mach-imx/imx53-dt.c index fd5be0f20fbb..4172279b3900 100644 --- a/arch/arm/mach-imx/imx53-dt.c +++ b/arch/arm/mach-imx/imx53-dt.c | |||
@@ -114,6 +114,7 @@ static const char *imx53_dt_board_compat[] __initdata = { | |||
114 | "fsl,imx53-evk", | 114 | "fsl,imx53-evk", |
115 | "fsl,imx53-qsb", | 115 | "fsl,imx53-qsb", |
116 | "fsl,imx53-smd", | 116 | "fsl,imx53-smd", |
117 | "fsl,imx53", | ||
117 | NULL | 118 | NULL |
118 | }; | 119 | }; |
119 | 120 | ||
diff --git a/arch/arm/mach-imx/mach-imx6q.c b/arch/arm/mach-imx/mach-imx6q.c index 21f54a8ecc85..7696dfa2bdba 100644 --- a/arch/arm/mach-imx/mach-imx6q.c +++ b/arch/arm/mach-imx/mach-imx6q.c | |||
@@ -131,6 +131,7 @@ static struct sys_timer imx6q_timer = { | |||
131 | static const char *imx6q_dt_compat[] __initdata = { | 131 | static const char *imx6q_dt_compat[] __initdata = { |
132 | "fsl,imx6q-arm2", | 132 | "fsl,imx6q-arm2", |
133 | "fsl,imx6q-sabrelite", | 133 | "fsl,imx6q-sabrelite", |
134 | "fsl,imx6q", | ||
134 | NULL, | 135 | NULL, |
135 | }; | 136 | }; |
136 | 137 | ||
diff --git a/arch/arm/mach-mmp/Kconfig b/arch/arm/mach-mmp/Kconfig index 323d4c9e9f44..5a90b9a3ab6e 100644 --- a/arch/arm/mach-mmp/Kconfig +++ b/arch/arm/mach-mmp/Kconfig | |||
@@ -2,6 +2,16 @@ if ARCH_MMP | |||
2 | 2 | ||
3 | menu "Marvell PXA168/910/MMP2 Implmentations" | 3 | menu "Marvell PXA168/910/MMP2 Implmentations" |
4 | 4 | ||
5 | config MACH_MMP_DT | ||
6 | bool "Support MMP2 platforms from device tree" | ||
7 | select CPU_PXA168 | ||
8 | select CPU_PXA910 | ||
9 | select USE_OF | ||
10 | help | ||
11 | Include support for Marvell MMP2 based platforms using | ||
12 | the device tree. Needn't select any other machine while | ||
13 | MACH_MMP_DT is enabled. | ||
14 | |||
5 | config MACH_ASPENITE | 15 | config MACH_ASPENITE |
6 | bool "Marvell's PXA168 Aspenite Development Board" | 16 | bool "Marvell's PXA168 Aspenite Development Board" |
7 | select CPU_PXA168 | 17 | select CPU_PXA168 |
diff --git a/arch/arm/mach-mmp/Makefile b/arch/arm/mach-mmp/Makefile index ba254a71691a..4fc0ff5dc96d 100644 --- a/arch/arm/mach-mmp/Makefile +++ b/arch/arm/mach-mmp/Makefile | |||
@@ -18,5 +18,6 @@ obj-$(CONFIG_MACH_TTC_DKB) += ttc_dkb.o | |||
18 | obj-$(CONFIG_MACH_BROWNSTONE) += brownstone.o | 18 | obj-$(CONFIG_MACH_BROWNSTONE) += brownstone.o |
19 | obj-$(CONFIG_MACH_FLINT) += flint.o | 19 | obj-$(CONFIG_MACH_FLINT) += flint.o |
20 | obj-$(CONFIG_MACH_MARVELL_JASPER) += jasper.o | 20 | obj-$(CONFIG_MACH_MARVELL_JASPER) += jasper.o |
21 | obj-$(CONFIG_MACH_MMP_DT) += mmp-dt.o | ||
21 | obj-$(CONFIG_MACH_TETON_BGA) += teton_bga.o | 22 | obj-$(CONFIG_MACH_TETON_BGA) += teton_bga.o |
22 | obj-$(CONFIG_MACH_GPLUGD) += gplugd.o | 23 | obj-$(CONFIG_MACH_GPLUGD) += gplugd.o |
diff --git a/arch/arm/mach-mmp/mmp-dt.c b/arch/arm/mach-mmp/mmp-dt.c new file mode 100644 index 000000000000..67075395e400 --- /dev/null +++ b/arch/arm/mach-mmp/mmp-dt.c | |||
@@ -0,0 +1,75 @@ | |||
1 | /* | ||
2 | * linux/arch/arm/mach-mmp/mmp-dt.c | ||
3 | * | ||
4 | * Copyright (C) 2012 Marvell Technology Group Ltd. | ||
5 | * Author: Haojian Zhuang <haojian.zhuang@marvell.com> | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License version 2 as | ||
9 | * publishhed by the Free Software Foundation. | ||
10 | */ | ||
11 | |||
12 | #include <linux/irq.h> | ||
13 | #include <linux/irqdomain.h> | ||
14 | #include <linux/of_irq.h> | ||
15 | #include <linux/of_platform.h> | ||
16 | #include <asm/mach/arch.h> | ||
17 | #include <mach/irqs.h> | ||
18 | |||
19 | #include "common.h" | ||
20 | |||
21 | extern struct sys_timer pxa168_timer; | ||
22 | extern void __init icu_init_irq(void); | ||
23 | |||
24 | static const struct of_dev_auxdata mmp_auxdata_lookup[] __initconst = { | ||
25 | OF_DEV_AUXDATA("mrvl,mmp-uart", 0xd4017000, "pxa2xx-uart.0", NULL), | ||
26 | OF_DEV_AUXDATA("mrvl,mmp-uart", 0xd4018000, "pxa2xx-uart.1", NULL), | ||
27 | OF_DEV_AUXDATA("mrvl,mmp-uart", 0xd4026000, "pxa2xx-uart.2", NULL), | ||
28 | OF_DEV_AUXDATA("mrvl,mmp-twsi", 0xd4011000, "pxa2xx-i2c.0", NULL), | ||
29 | OF_DEV_AUXDATA("mrvl,mmp-twsi", 0xd4025000, "pxa2xx-i2c.1", NULL), | ||
30 | OF_DEV_AUXDATA("mrvl,mmp-gpio", 0xd4019000, "pxa-gpio", NULL), | ||
31 | OF_DEV_AUXDATA("mrvl,mmp-rtc", 0xd4010000, "sa1100-rtc", NULL), | ||
32 | {} | ||
33 | }; | ||
34 | |||
35 | static int __init mmp_intc_add_irq_domain(struct device_node *np, | ||
36 | struct device_node *parent) | ||
37 | { | ||
38 | irq_domain_add_simple(np, 0); | ||
39 | return 0; | ||
40 | } | ||
41 | |||
42 | static int __init mmp_gpio_add_irq_domain(struct device_node *np, | ||
43 | struct device_node *parent) | ||
44 | { | ||
45 | irq_domain_add_simple(np, IRQ_GPIO_START); | ||
46 | return 0; | ||
47 | } | ||
48 | |||
49 | static const struct of_device_id mmp_irq_match[] __initconst = { | ||
50 | { .compatible = "mrvl,mmp-intc", .data = mmp_intc_add_irq_domain, }, | ||
51 | { .compatible = "mrvl,mmp-gpio", .data = mmp_gpio_add_irq_domain, }, | ||
52 | {} | ||
53 | }; | ||
54 | |||
55 | static void __init mmp_dt_init(void) | ||
56 | { | ||
57 | |||
58 | of_irq_init(mmp_irq_match); | ||
59 | |||
60 | of_platform_populate(NULL, of_default_bus_match_table, | ||
61 | mmp_auxdata_lookup, NULL); | ||
62 | } | ||
63 | |||
64 | static const char *pxa168_dt_board_compat[] __initdata = { | ||
65 | "mrvl,pxa168-aspenite", | ||
66 | NULL, | ||
67 | }; | ||
68 | |||
69 | DT_MACHINE_START(PXA168_DT, "Marvell PXA168 (Device Tree Support)") | ||
70 | .map_io = mmp_map_io, | ||
71 | .init_irq = icu_init_irq, | ||
72 | .timer = &pxa168_timer, | ||
73 | .init_machine = mmp_dt_init, | ||
74 | .dt_compat = pxa168_dt_board_compat, | ||
75 | MACHINE_END | ||
diff --git a/arch/arm/mach-mmp/pxa168.c b/arch/arm/mach-mmp/pxa168.c index f10f87d8b667..f7d59c03fc67 100644 --- a/arch/arm/mach-mmp/pxa168.c +++ b/arch/arm/mach-mmp/pxa168.c | |||
@@ -64,6 +64,7 @@ static APBC_CLK(ssp4, PXA168_SSP4, 4, 0); | |||
64 | static APBC_CLK(ssp5, PXA168_SSP5, 4, 0); | 64 | static APBC_CLK(ssp5, PXA168_SSP5, 4, 0); |
65 | static APBC_CLK(gpio, PXA168_GPIO, 0, 13000000); | 65 | static APBC_CLK(gpio, PXA168_GPIO, 0, 13000000); |
66 | static APBC_CLK(keypad, PXA168_KPC, 0, 32000); | 66 | static APBC_CLK(keypad, PXA168_KPC, 0, 32000); |
67 | static APBC_CLK(rtc, PXA168_RTC, 8, 32768); | ||
67 | 68 | ||
68 | static APMU_CLK(nand, NAND, 0x19b, 156000000); | 69 | static APMU_CLK(nand, NAND, 0x19b, 156000000); |
69 | static APMU_CLK(lcd, LCD, 0x7f, 312000000); | 70 | static APMU_CLK(lcd, LCD, 0x7f, 312000000); |
@@ -92,6 +93,7 @@ static struct clk_lookup pxa168_clkregs[] = { | |||
92 | INIT_CLKREG(&clk_keypad, "pxa27x-keypad", NULL), | 93 | INIT_CLKREG(&clk_keypad, "pxa27x-keypad", NULL), |
93 | INIT_CLKREG(&clk_eth, "pxa168-eth", "MFUCLK"), | 94 | INIT_CLKREG(&clk_eth, "pxa168-eth", "MFUCLK"), |
94 | INIT_CLKREG(&clk_usb, "pxa168-ehci", "PXA168-USBCLK"), | 95 | INIT_CLKREG(&clk_usb, "pxa168-ehci", "PXA168-USBCLK"), |
96 | INIT_CLKREG(&clk_rtc, "sa1100-rtc", NULL), | ||
95 | }; | 97 | }; |
96 | 98 | ||
97 | static int __init pxa168_init(void) | 99 | static int __init pxa168_init(void) |
diff --git a/arch/arm/mach-omap2/Kconfig b/arch/arm/mach-omap2/Kconfig index 36b371face3d..8141b76283a6 100644 --- a/arch/arm/mach-omap2/Kconfig +++ b/arch/arm/mach-omap2/Kconfig | |||
@@ -117,7 +117,6 @@ comment "OMAP Board Type" | |||
117 | config MACH_OMAP_GENERIC | 117 | config MACH_OMAP_GENERIC |
118 | bool "Generic OMAP2+ board" | 118 | bool "Generic OMAP2+ board" |
119 | depends on ARCH_OMAP2PLUS | 119 | depends on ARCH_OMAP2PLUS |
120 | select USE_OF | ||
121 | default y | 120 | default y |
122 | help | 121 | help |
123 | Support for generic TI OMAP2+ boards using Flattened Device Tree. | 122 | Support for generic TI OMAP2+ boards using Flattened Device Tree. |
diff --git a/arch/arm/mach-omap2/board-generic.c b/arch/arm/mach-omap2/board-generic.c index 45fdfe2bd9d5..74e1687b5170 100644 --- a/arch/arm/mach-omap2/board-generic.c +++ b/arch/arm/mach-omap2/board-generic.c | |||
@@ -12,6 +12,7 @@ | |||
12 | * published by the Free Software Foundation. | 12 | * published by the Free Software Foundation. |
13 | */ | 13 | */ |
14 | #include <linux/io.h> | 14 | #include <linux/io.h> |
15 | #include <linux/of_irq.h> | ||
15 | #include <linux/of_platform.h> | 16 | #include <linux/of_platform.h> |
16 | #include <linux/irqdomain.h> | 17 | #include <linux/irqdomain.h> |
17 | #include <linux/i2c/twl.h> | 18 | #include <linux/i2c/twl.h> |
@@ -24,33 +25,23 @@ | |||
24 | #include "common.h" | 25 | #include "common.h" |
25 | #include "common-board-devices.h" | 26 | #include "common-board-devices.h" |
26 | 27 | ||
27 | /* | 28 | #if !(defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3)) |
28 | * XXX: Still needed to boot until the i2c & twl driver is adapted to | 29 | #define omap_intc_of_init NULL |
29 | * device-tree | 30 | #endif |
30 | */ | 31 | #ifndef CONFIG_ARCH_OMAP4 |
31 | #ifdef CONFIG_ARCH_OMAP4 | 32 | #define gic_of_init NULL |
32 | static struct twl4030_platform_data sdp4430_twldata = { | ||
33 | .irq_base = TWL6030_IRQ_BASE, | ||
34 | .irq_end = TWL6030_IRQ_END, | ||
35 | }; | ||
36 | |||
37 | static void __init omap4_i2c_init(void) | ||
38 | { | ||
39 | omap4_pmic_init("twl6030", &sdp4430_twldata); | ||
40 | } | ||
41 | #endif | 33 | #endif |
42 | 34 | ||
43 | #ifdef CONFIG_ARCH_OMAP3 | 35 | static struct of_device_id irq_match[] __initdata = { |
44 | static struct twl4030_platform_data beagle_twldata = { | 36 | { .compatible = "ti,omap2-intc", .data = omap_intc_of_init, }, |
45 | .irq_base = TWL4030_IRQ_BASE, | 37 | { .compatible = "arm,cortex-a9-gic", .data = gic_of_init, }, |
46 | .irq_end = TWL4030_IRQ_END, | 38 | { } |
47 | }; | 39 | }; |
48 | 40 | ||
49 | static void __init omap3_i2c_init(void) | 41 | static void __init omap_init_irq(void) |
50 | { | 42 | { |
51 | omap3_pmic_init("twl4030", &beagle_twldata); | 43 | of_irq_init(irq_match); |
52 | } | 44 | } |
53 | #endif | ||
54 | 45 | ||
55 | static struct of_device_id omap_dt_match_table[] __initdata = { | 46 | static struct of_device_id omap_dt_match_table[] __initdata = { |
56 | { .compatible = "simple-bus", }, | 47 | { .compatible = "simple-bus", }, |
@@ -58,51 +49,24 @@ static struct of_device_id omap_dt_match_table[] __initdata = { | |||
58 | { } | 49 | { } |
59 | }; | 50 | }; |
60 | 51 | ||
61 | static struct of_device_id intc_match[] __initdata = { | ||
62 | { .compatible = "ti,omap3-intc", }, | ||
63 | { .compatible = "arm,cortex-a9-gic", }, | ||
64 | { } | ||
65 | }; | ||
66 | |||
67 | static void __init omap_generic_init(void) | 52 | static void __init omap_generic_init(void) |
68 | { | 53 | { |
69 | struct device_node *node = of_find_matching_node(NULL, intc_match); | ||
70 | if (node) | ||
71 | irq_domain_add_legacy(node, 32, 0, 0, &irq_domain_simple_ops, NULL); | ||
72 | |||
73 | omap_sdrc_init(NULL, NULL); | 54 | omap_sdrc_init(NULL, NULL); |
74 | 55 | ||
75 | of_platform_populate(NULL, omap_dt_match_table, NULL, NULL); | 56 | of_platform_populate(NULL, omap_dt_match_table, NULL, NULL); |
76 | } | 57 | } |
77 | 58 | ||
78 | #ifdef CONFIG_ARCH_OMAP4 | 59 | #ifdef CONFIG_SOC_OMAP2420 |
79 | static void __init omap4_init(void) | ||
80 | { | ||
81 | omap4_i2c_init(); | ||
82 | omap_generic_init(); | ||
83 | } | ||
84 | #endif | ||
85 | |||
86 | #ifdef CONFIG_ARCH_OMAP3 | ||
87 | static void __init omap3_init(void) | ||
88 | { | ||
89 | omap3_i2c_init(); | ||
90 | omap_generic_init(); | ||
91 | } | ||
92 | #endif | ||
93 | |||
94 | #if defined(CONFIG_SOC_OMAP2420) | ||
95 | static const char *omap242x_boards_compat[] __initdata = { | 60 | static const char *omap242x_boards_compat[] __initdata = { |
96 | "ti,omap2420", | 61 | "ti,omap2420", |
97 | NULL, | 62 | NULL, |
98 | }; | 63 | }; |
99 | 64 | ||
100 | DT_MACHINE_START(OMAP242X_DT, "Generic OMAP2420 (Flattened Device Tree)") | 65 | DT_MACHINE_START(OMAP242X_DT, "Generic OMAP2420 (Flattened Device Tree)") |
101 | .atag_offset = 0x100, | ||
102 | .reserve = omap_reserve, | 66 | .reserve = omap_reserve, |
103 | .map_io = omap242x_map_io, | 67 | .map_io = omap242x_map_io, |
104 | .init_early = omap2420_init_early, | 68 | .init_early = omap2420_init_early, |
105 | .init_irq = omap2_init_irq, | 69 | .init_irq = omap_init_irq, |
106 | .handle_irq = omap2_intc_handle_irq, | 70 | .handle_irq = omap2_intc_handle_irq, |
107 | .init_machine = omap_generic_init, | 71 | .init_machine = omap_generic_init, |
108 | .timer = &omap2_timer, | 72 | .timer = &omap2_timer, |
@@ -111,18 +75,17 @@ DT_MACHINE_START(OMAP242X_DT, "Generic OMAP2420 (Flattened Device Tree)") | |||
111 | MACHINE_END | 75 | MACHINE_END |
112 | #endif | 76 | #endif |
113 | 77 | ||
114 | #if defined(CONFIG_SOC_OMAP2430) | 78 | #ifdef CONFIG_SOC_OMAP2430 |
115 | static const char *omap243x_boards_compat[] __initdata = { | 79 | static const char *omap243x_boards_compat[] __initdata = { |
116 | "ti,omap2430", | 80 | "ti,omap2430", |
117 | NULL, | 81 | NULL, |
118 | }; | 82 | }; |
119 | 83 | ||
120 | DT_MACHINE_START(OMAP243X_DT, "Generic OMAP2430 (Flattened Device Tree)") | 84 | DT_MACHINE_START(OMAP243X_DT, "Generic OMAP2430 (Flattened Device Tree)") |
121 | .atag_offset = 0x100, | ||
122 | .reserve = omap_reserve, | 85 | .reserve = omap_reserve, |
123 | .map_io = omap243x_map_io, | 86 | .map_io = omap243x_map_io, |
124 | .init_early = omap2430_init_early, | 87 | .init_early = omap2430_init_early, |
125 | .init_irq = omap2_init_irq, | 88 | .init_irq = omap_init_irq, |
126 | .handle_irq = omap2_intc_handle_irq, | 89 | .handle_irq = omap2_intc_handle_irq, |
127 | .init_machine = omap_generic_init, | 90 | .init_machine = omap_generic_init, |
128 | .timer = &omap2_timer, | 91 | .timer = &omap2_timer, |
@@ -131,18 +94,33 @@ DT_MACHINE_START(OMAP243X_DT, "Generic OMAP2430 (Flattened Device Tree)") | |||
131 | MACHINE_END | 94 | MACHINE_END |
132 | #endif | 95 | #endif |
133 | 96 | ||
134 | #if defined(CONFIG_ARCH_OMAP3) | 97 | #ifdef CONFIG_ARCH_OMAP3 |
98 | static struct twl4030_platform_data beagle_twldata = { | ||
99 | .irq_base = TWL4030_IRQ_BASE, | ||
100 | .irq_end = TWL4030_IRQ_END, | ||
101 | }; | ||
102 | |||
103 | static void __init omap3_i2c_init(void) | ||
104 | { | ||
105 | omap3_pmic_init("twl4030", &beagle_twldata); | ||
106 | } | ||
107 | |||
108 | static void __init omap3_init(void) | ||
109 | { | ||
110 | omap3_i2c_init(); | ||
111 | omap_generic_init(); | ||
112 | } | ||
113 | |||
135 | static const char *omap3_boards_compat[] __initdata = { | 114 | static const char *omap3_boards_compat[] __initdata = { |
136 | "ti,omap3", | 115 | "ti,omap3", |
137 | NULL, | 116 | NULL, |
138 | }; | 117 | }; |
139 | 118 | ||
140 | DT_MACHINE_START(OMAP3_DT, "Generic OMAP3 (Flattened Device Tree)") | 119 | DT_MACHINE_START(OMAP3_DT, "Generic OMAP3 (Flattened Device Tree)") |
141 | .atag_offset = 0x100, | ||
142 | .reserve = omap_reserve, | 120 | .reserve = omap_reserve, |
143 | .map_io = omap3_map_io, | 121 | .map_io = omap3_map_io, |
144 | .init_early = omap3430_init_early, | 122 | .init_early = omap3430_init_early, |
145 | .init_irq = omap3_init_irq, | 123 | .init_irq = omap_init_irq, |
146 | .handle_irq = omap3_intc_handle_irq, | 124 | .handle_irq = omap3_intc_handle_irq, |
147 | .init_machine = omap3_init, | 125 | .init_machine = omap3_init, |
148 | .timer = &omap3_timer, | 126 | .timer = &omap3_timer, |
@@ -151,18 +129,33 @@ DT_MACHINE_START(OMAP3_DT, "Generic OMAP3 (Flattened Device Tree)") | |||
151 | MACHINE_END | 129 | MACHINE_END |
152 | #endif | 130 | #endif |
153 | 131 | ||
154 | #if defined(CONFIG_ARCH_OMAP4) | 132 | #ifdef CONFIG_ARCH_OMAP4 |
133 | static struct twl4030_platform_data sdp4430_twldata = { | ||
134 | .irq_base = TWL6030_IRQ_BASE, | ||
135 | .irq_end = TWL6030_IRQ_END, | ||
136 | }; | ||
137 | |||
138 | static void __init omap4_i2c_init(void) | ||
139 | { | ||
140 | omap4_pmic_init("twl6030", &sdp4430_twldata); | ||
141 | } | ||
142 | |||
143 | static void __init omap4_init(void) | ||
144 | { | ||
145 | omap4_i2c_init(); | ||
146 | omap_generic_init(); | ||
147 | } | ||
148 | |||
155 | static const char *omap4_boards_compat[] __initdata = { | 149 | static const char *omap4_boards_compat[] __initdata = { |
156 | "ti,omap4", | 150 | "ti,omap4", |
157 | NULL, | 151 | NULL, |
158 | }; | 152 | }; |
159 | 153 | ||
160 | DT_MACHINE_START(OMAP4_DT, "Generic OMAP4 (Flattened Device Tree)") | 154 | DT_MACHINE_START(OMAP4_DT, "Generic OMAP4 (Flattened Device Tree)") |
161 | .atag_offset = 0x100, | ||
162 | .reserve = omap_reserve, | 155 | .reserve = omap_reserve, |
163 | .map_io = omap4_map_io, | 156 | .map_io = omap4_map_io, |
164 | .init_early = omap4430_init_early, | 157 | .init_early = omap4430_init_early, |
165 | .init_irq = gic_init_irq, | 158 | .init_irq = omap_init_irq, |
166 | .handle_irq = gic_handle_irq, | 159 | .handle_irq = gic_handle_irq, |
167 | .init_machine = omap4_init, | 160 | .init_machine = omap4_init, |
168 | .timer = &omap4_timer, | 161 | .timer = &omap4_timer, |
diff --git a/arch/arm/mach-omap2/common.h b/arch/arm/mach-omap2/common.h index 4897ec02e798..57da7f406e28 100644 --- a/arch/arm/mach-omap2/common.h +++ b/arch/arm/mach-omap2/common.h | |||
@@ -177,6 +177,18 @@ void omap3_intc_handle_irq(struct pt_regs *regs); | |||
177 | extern void __iomem *omap4_get_l2cache_base(void); | 177 | extern void __iomem *omap4_get_l2cache_base(void); |
178 | #endif | 178 | #endif |
179 | 179 | ||
180 | struct device_node; | ||
181 | #ifdef CONFIG_OF | ||
182 | int __init omap_intc_of_init(struct device_node *node, | ||
183 | struct device_node *parent); | ||
184 | #else | ||
185 | int __init omap_intc_of_init(struct device_node *node, | ||
186 | struct device_node *parent) | ||
187 | { | ||
188 | return 0; | ||
189 | } | ||
190 | #endif | ||
191 | |||
180 | #ifdef CONFIG_SMP | 192 | #ifdef CONFIG_SMP |
181 | extern void __iomem *omap4_get_scu_base(void); | 193 | extern void __iomem *omap4_get_scu_base(void); |
182 | #else | 194 | #else |
diff --git a/arch/arm/mach-omap2/irq.c b/arch/arm/mach-omap2/irq.c index 6da2d0edee11..65f0d2571c9a 100644 --- a/arch/arm/mach-omap2/irq.c +++ b/arch/arm/mach-omap2/irq.c | |||
@@ -11,12 +11,16 @@ | |||
11 | * for more details. | 11 | * for more details. |
12 | */ | 12 | */ |
13 | #include <linux/kernel.h> | 13 | #include <linux/kernel.h> |
14 | #include <linux/module.h> | ||
14 | #include <linux/init.h> | 15 | #include <linux/init.h> |
15 | #include <linux/interrupt.h> | 16 | #include <linux/interrupt.h> |
16 | #include <linux/io.h> | 17 | #include <linux/io.h> |
17 | 18 | ||
18 | #include <asm/exception.h> | 19 | #include <asm/exception.h> |
19 | #include <asm/mach/irq.h> | 20 | #include <asm/mach/irq.h> |
21 | #include <linux/irqdomain.h> | ||
22 | #include <linux/of.h> | ||
23 | #include <linux/of_address.h> | ||
20 | 24 | ||
21 | #include <mach/hardware.h> | 25 | #include <mach/hardware.h> |
22 | 26 | ||
@@ -60,6 +64,8 @@ static struct omap_irq_bank { | |||
60 | }, | 64 | }, |
61 | }; | 65 | }; |
62 | 66 | ||
67 | static struct irq_domain *domain; | ||
68 | |||
63 | /* Structure to save interrupt controller context */ | 69 | /* Structure to save interrupt controller context */ |
64 | struct omap3_intc_regs { | 70 | struct omap3_intc_regs { |
65 | u32 sysconfig; | 71 | u32 sysconfig; |
@@ -150,17 +156,27 @@ omap_alloc_gc(void __iomem *base, unsigned int irq_start, unsigned int num) | |||
150 | IRQ_NOREQUEST | IRQ_NOPROBE, 0); | 156 | IRQ_NOREQUEST | IRQ_NOPROBE, 0); |
151 | } | 157 | } |
152 | 158 | ||
153 | static void __init omap_init_irq(u32 base, int nr_irqs) | 159 | static void __init omap_init_irq(u32 base, int nr_irqs, |
160 | struct device_node *node) | ||
154 | { | 161 | { |
155 | void __iomem *omap_irq_base; | 162 | void __iomem *omap_irq_base; |
156 | unsigned long nr_of_irqs = 0; | 163 | unsigned long nr_of_irqs = 0; |
157 | unsigned int nr_banks = 0; | 164 | unsigned int nr_banks = 0; |
158 | int i, j; | 165 | int i, j, irq_base; |
159 | 166 | ||
160 | omap_irq_base = ioremap(base, SZ_4K); | 167 | omap_irq_base = ioremap(base, SZ_4K); |
161 | if (WARN_ON(!omap_irq_base)) | 168 | if (WARN_ON(!omap_irq_base)) |
162 | return; | 169 | return; |
163 | 170 | ||
171 | irq_base = irq_alloc_descs(-1, 0, nr_irqs, 0); | ||
172 | if (irq_base < 0) { | ||
173 | pr_warn("Couldn't allocate IRQ numbers\n"); | ||
174 | irq_base = 0; | ||
175 | } | ||
176 | |||
177 | domain = irq_domain_add_legacy(node, nr_irqs, irq_base, 0, | ||
178 | &irq_domain_simple_ops, NULL); | ||
179 | |||
164 | for (i = 0; i < ARRAY_SIZE(irq_banks); i++) { | 180 | for (i = 0; i < ARRAY_SIZE(irq_banks); i++) { |
165 | struct omap_irq_bank *bank = irq_banks + i; | 181 | struct omap_irq_bank *bank = irq_banks + i; |
166 | 182 | ||
@@ -169,36 +185,36 @@ static void __init omap_init_irq(u32 base, int nr_irqs) | |||
169 | /* Static mapping, never released */ | 185 | /* Static mapping, never released */ |
170 | bank->base_reg = ioremap(base, SZ_4K); | 186 | bank->base_reg = ioremap(base, SZ_4K); |
171 | if (!bank->base_reg) { | 187 | if (!bank->base_reg) { |
172 | printk(KERN_ERR "Could not ioremap irq bank%i\n", i); | 188 | pr_err("Could not ioremap irq bank%i\n", i); |
173 | continue; | 189 | continue; |
174 | } | 190 | } |
175 | 191 | ||
176 | omap_irq_bank_init_one(bank); | 192 | omap_irq_bank_init_one(bank); |
177 | 193 | ||
178 | for (j = 0; j < bank->nr_irqs; j += 32) | 194 | for (j = 0; j < bank->nr_irqs; j += 32) |
179 | omap_alloc_gc(bank->base_reg + j, j, 32); | 195 | omap_alloc_gc(bank->base_reg + j, j + irq_base, 32); |
180 | 196 | ||
181 | nr_of_irqs += bank->nr_irqs; | 197 | nr_of_irqs += bank->nr_irqs; |
182 | nr_banks++; | 198 | nr_banks++; |
183 | } | 199 | } |
184 | 200 | ||
185 | printk(KERN_INFO "Total of %ld interrupts on %d active controller%s\n", | 201 | pr_info("Total of %ld interrupts on %d active controller%s\n", |
186 | nr_of_irqs, nr_banks, nr_banks > 1 ? "s" : ""); | 202 | nr_of_irqs, nr_banks, nr_banks > 1 ? "s" : ""); |
187 | } | 203 | } |
188 | 204 | ||
189 | void __init omap2_init_irq(void) | 205 | void __init omap2_init_irq(void) |
190 | { | 206 | { |
191 | omap_init_irq(OMAP24XX_IC_BASE, 96); | 207 | omap_init_irq(OMAP24XX_IC_BASE, 96, NULL); |
192 | } | 208 | } |
193 | 209 | ||
194 | void __init omap3_init_irq(void) | 210 | void __init omap3_init_irq(void) |
195 | { | 211 | { |
196 | omap_init_irq(OMAP34XX_IC_BASE, 96); | 212 | omap_init_irq(OMAP34XX_IC_BASE, 96, NULL); |
197 | } | 213 | } |
198 | 214 | ||
199 | void __init ti81xx_init_irq(void) | 215 | void __init ti81xx_init_irq(void) |
200 | { | 216 | { |
201 | omap_init_irq(OMAP34XX_IC_BASE, 128); | 217 | omap_init_irq(OMAP34XX_IC_BASE, 128, NULL); |
202 | } | 218 | } |
203 | 219 | ||
204 | static inline void omap_intc_handle_irq(void __iomem *base_addr, struct pt_regs *regs) | 220 | static inline void omap_intc_handle_irq(void __iomem *base_addr, struct pt_regs *regs) |
@@ -228,8 +244,10 @@ out: | |||
228 | irqnr = readl_relaxed(base_addr + INTCPS_SIR_IRQ_OFFSET); | 244 | irqnr = readl_relaxed(base_addr + INTCPS_SIR_IRQ_OFFSET); |
229 | irqnr &= ACTIVEIRQ_MASK; | 245 | irqnr &= ACTIVEIRQ_MASK; |
230 | 246 | ||
231 | if (irqnr) | 247 | if (irqnr) { |
248 | irqnr = irq_find_mapping(domain, irqnr); | ||
232 | handle_IRQ(irqnr, regs); | 249 | handle_IRQ(irqnr, regs); |
250 | } | ||
233 | } while (irqnr); | 251 | } while (irqnr); |
234 | } | 252 | } |
235 | 253 | ||
@@ -239,6 +257,28 @@ asmlinkage void __exception_irq_entry omap2_intc_handle_irq(struct pt_regs *regs | |||
239 | omap_intc_handle_irq(base_addr, regs); | 257 | omap_intc_handle_irq(base_addr, regs); |
240 | } | 258 | } |
241 | 259 | ||
260 | int __init omap_intc_of_init(struct device_node *node, | ||
261 | struct device_node *parent) | ||
262 | { | ||
263 | struct resource res; | ||
264 | u32 nr_irqs = 96; | ||
265 | |||
266 | if (WARN_ON(!node)) | ||
267 | return -ENODEV; | ||
268 | |||
269 | if (of_address_to_resource(node, 0, &res)) { | ||
270 | WARN(1, "unable to get intc registers\n"); | ||
271 | return -EINVAL; | ||
272 | } | ||
273 | |||
274 | if (of_property_read_u32(node, "ti,intc-size", &nr_irqs)) | ||
275 | pr_warn("unable to get intc-size, default to %d\n", nr_irqs); | ||
276 | |||
277 | omap_init_irq(res.start, nr_irqs, of_node_get(node)); | ||
278 | |||
279 | return 0; | ||
280 | } | ||
281 | |||
242 | #ifdef CONFIG_ARCH_OMAP3 | 282 | #ifdef CONFIG_ARCH_OMAP3 |
243 | static struct omap3_intc_regs intc_context[ARRAY_SIZE(irq_banks)]; | 283 | static struct omap3_intc_regs intc_context[ARRAY_SIZE(irq_banks)]; |
244 | 284 | ||
diff --git a/arch/arm/mach-omap2/pm.c b/arch/arm/mach-omap2/pm.c index 52787b0eaec6..a7bdec69a2b3 100644 --- a/arch/arm/mach-omap2/pm.c +++ b/arch/arm/mach-omap2/pm.c | |||
@@ -295,6 +295,14 @@ postcore_initcall(omap2_common_pm_init); | |||
295 | 295 | ||
296 | static int __init omap2_common_pm_late_init(void) | 296 | static int __init omap2_common_pm_late_init(void) |
297 | { | 297 | { |
298 | /* | ||
299 | * In the case of DT, the PMIC and SR initialization will be done using | ||
300 | * a completely different mechanism. | ||
301 | * Disable this part if a DT blob is available. | ||
302 | */ | ||
303 | if (of_have_populated_dt()) | ||
304 | return 0; | ||
305 | |||
298 | /* Init the voltage layer */ | 306 | /* Init the voltage layer */ |
299 | omap_pmic_late_init(); | 307 | omap_pmic_late_init(); |
300 | omap_voltage_late_init(); | 308 | omap_voltage_late_init(); |
diff --git a/arch/arm/mach-vexpress/Kconfig b/arch/arm/mach-vexpress/Kconfig index 88c3ba151e87..cf8730d35e70 100644 --- a/arch/arm/mach-vexpress/Kconfig +++ b/arch/arm/mach-vexpress/Kconfig | |||
@@ -1,14 +1,55 @@ | |||
1 | menu "Versatile Express platform type" | 1 | menu "Versatile Express platform type" |
2 | depends on ARCH_VEXPRESS | 2 | depends on ARCH_VEXPRESS |
3 | 3 | ||
4 | config ARCH_VEXPRESS_CORTEX_A5_A9_ERRATA | ||
5 | bool | ||
6 | select ARM_ERRATA_720789 | ||
7 | select ARM_ERRATA_751472 | ||
8 | select PL310_ERRATA_753970 if CACHE_PL310 | ||
9 | help | ||
10 | Provides common dependencies for Versatile Express platforms | ||
11 | based on Cortex-A5 and Cortex-A9 processors. In order to | ||
12 | build a working kernel, you must also enable relevant core | ||
13 | tile support or Flattened Device Tree based support options. | ||
14 | |||
4 | config ARCH_VEXPRESS_CA9X4 | 15 | config ARCH_VEXPRESS_CA9X4 |
5 | bool "Versatile Express Cortex-A9x4 tile" | 16 | bool "Versatile Express Cortex-A9x4 tile" |
17 | select ARCH_VEXPRESS_CORTEX_A5_A9_ERRATA | ||
18 | select ARM_GIC | ||
6 | select CPU_V7 | 19 | select CPU_V7 |
20 | select HAVE_SMP | ||
21 | select MIGHT_HAVE_CACHE_L2X0 | ||
22 | |||
23 | config ARCH_VEXPRESS_DT | ||
24 | bool "Device Tree support for Versatile Express platforms" | ||
25 | select ARCH_VEXPRESS_CORTEX_A5_A9_ERRATA | ||
7 | select ARM_GIC | 26 | select ARM_GIC |
8 | select ARM_ERRATA_720789 | 27 | select ARM_PATCH_PHYS_VIRT |
9 | select ARM_ERRATA_751472 | 28 | select AUTO_ZRELADDR |
10 | select PL310_ERRATA_753970 | 29 | select CPU_V7 |
11 | select HAVE_SMP | 30 | select HAVE_SMP |
12 | select MIGHT_HAVE_CACHE_L2X0 | 31 | select MIGHT_HAVE_CACHE_L2X0 |
32 | select USE_OF | ||
33 | help | ||
34 | New Versatile Express platforms require Flattened Device Tree to | ||
35 | be passed to the kernel. | ||
36 | |||
37 | This option enables support for systems using Cortex processor based | ||
38 | ARM core and logic (FPGA) tiles on the Versatile Express motherboard, | ||
39 | for example: | ||
40 | |||
41 | - CoreTile Express A5x2 (V2P-CA5s) | ||
42 | - CoreTile Express A9x4 (V2P-CA9) | ||
43 | - CoreTile Express A15x2 (V2P-CA15) | ||
44 | - LogicTile Express 13MG (V2F-2XV6) with A5, A7, A9 or A15 SMMs | ||
45 | (Soft Macrocell Models) | ||
46 | - Versatile Express RTSMs (Models) | ||
47 | |||
48 | You must boot using a Flattened Device Tree in order to use these | ||
49 | platforms. The traditional (ATAGs) boot method is not usable on | ||
50 | these boards with this option. | ||
51 | |||
52 | If your bootloader supports Flattened Device Tree based booting, | ||
53 | say Y here. | ||
13 | 54 | ||
14 | endmenu | 55 | endmenu |
diff --git a/arch/arm/mach-vexpress/Makefile.boot b/arch/arm/mach-vexpress/Makefile.boot index 8630b3d10a4d..909f85ebf5f4 100644 --- a/arch/arm/mach-vexpress/Makefile.boot +++ b/arch/arm/mach-vexpress/Makefile.boot | |||
@@ -1,3 +1,9 @@ | |||
1 | # Those numbers are used only by the non-DT V2P-CA9 platform | ||
2 | # The DT-enabled ones require CONFIG_AUTO_ZRELADDR=y | ||
1 | zreladdr-y += 0x60008000 | 3 | zreladdr-y += 0x60008000 |
2 | params_phys-y := 0x60000100 | 4 | params_phys-y := 0x60000100 |
3 | initrd_phys-y := 0x60800000 | 5 | initrd_phys-y := 0x60800000 |
6 | |||
7 | dtb-$(CONFIG_ARCH_VEXPRESS_DT) += vexpress-v2p-ca5s.dtb \ | ||
8 | vexpress-v2p-ca9.dtb \ | ||
9 | vexpress-v2p-ca15-tc1.dtb | ||
diff --git a/arch/arm/mach-vexpress/core.h b/arch/arm/mach-vexpress/core.h index 33c5a825aba1..a3a4980770bd 100644 --- a/arch/arm/mach-vexpress/core.h +++ b/arch/arm/mach-vexpress/core.h | |||
@@ -3,3 +3,5 @@ | |||
3 | 3 | ||
4 | /* Tile's peripherals static mappings should start here */ | 4 | /* Tile's peripherals static mappings should start here */ |
5 | #define V2T_PERIPH 0xf8200000 | 5 | #define V2T_PERIPH 0xf8200000 |
6 | |||
7 | void vexpress_dt_smp_map_io(void); | ||
diff --git a/arch/arm/mach-vexpress/include/mach/debug-macro.S b/arch/arm/mach-vexpress/include/mach/debug-macro.S index fd9e6c7ea49f..fa8224794e0b 100644 --- a/arch/arm/mach-vexpress/include/mach/debug-macro.S +++ b/arch/arm/mach-vexpress/include/mach/debug-macro.S | |||
@@ -10,12 +10,34 @@ | |||
10 | * published by the Free Software Foundation. | 10 | * published by the Free Software Foundation. |
11 | */ | 11 | */ |
12 | 12 | ||
13 | #define DEBUG_LL_UART_OFFSET 0x00009000 | 13 | #define DEBUG_LL_PHYS_BASE 0x10000000 |
14 | #define DEBUG_LL_UART_OFFSET 0x00009000 | ||
15 | |||
16 | #define DEBUG_LL_PHYS_BASE_RS1 0x1c000000 | ||
17 | #define DEBUG_LL_UART_OFFSET_RS1 0x00090000 | ||
18 | |||
19 | #define DEBUG_LL_VIRT_BASE 0xf8000000 | ||
14 | 20 | ||
15 | .macro addruart,rp,rv,tmp | 21 | .macro addruart,rp,rv,tmp |
16 | mov \rp, #DEBUG_LL_UART_OFFSET | 22 | |
17 | orr \rv, \rp, #0xf8000000 @ virtual base | 23 | @ Make an educated guess regarding the memory map: |
18 | orr \rp, \rp, #0x10000000 @ physical base | 24 | @ - the original A9 core tile, which has MPCore peripherals |
25 | @ located at 0x1e000000, should use UART at 0x10009000 | ||
26 | @ - all other (RS1 complaint) tiles use UART mapped | ||
27 | @ at 0x1c090000 | ||
28 | mrc p15, 4, \tmp, c15, c0, 0 | ||
29 | cmp \tmp, #0x1e000000 | ||
30 | |||
31 | @ Original memory map | ||
32 | moveq \rp, #DEBUG_LL_UART_OFFSET | ||
33 | orreq \rv, \rp, #DEBUG_LL_VIRT_BASE | ||
34 | orreq \rp, \rp, #DEBUG_LL_PHYS_BASE | ||
35 | |||
36 | @ RS1 memory map | ||
37 | movne \rp, #DEBUG_LL_UART_OFFSET_RS1 | ||
38 | orrne \rv, \rp, #DEBUG_LL_VIRT_BASE | ||
39 | orrne \rp, \rp, #DEBUG_LL_PHYS_BASE_RS1 | ||
40 | |||
19 | .endm | 41 | .endm |
20 | 42 | ||
21 | #include <asm/hardware/debug-pl01x.S> | 43 | #include <asm/hardware/debug-pl01x.S> |
diff --git a/arch/arm/mach-vexpress/include/mach/irqs.h b/arch/arm/mach-vexpress/include/mach/irqs.h index 7054cbfc9de5..4b10ee7657a6 100644 --- a/arch/arm/mach-vexpress/include/mach/irqs.h +++ b/arch/arm/mach-vexpress/include/mach/irqs.h | |||
@@ -1,4 +1,4 @@ | |||
1 | #define IRQ_LOCALTIMER 29 | 1 | #define IRQ_LOCALTIMER 29 |
2 | #define IRQ_LOCALWDOG 30 | 2 | #define IRQ_LOCALWDOG 30 |
3 | 3 | ||
4 | #define NR_IRQS 128 | 4 | #define NR_IRQS 256 |
diff --git a/arch/arm/mach-vexpress/include/mach/motherboard.h b/arch/arm/mach-vexpress/include/mach/motherboard.h index b4c498c1dbee..31a92890893d 100644 --- a/arch/arm/mach-vexpress/include/mach/motherboard.h +++ b/arch/arm/mach-vexpress/include/mach/motherboard.h | |||
@@ -117,6 +117,12 @@ int v2m_cfg_read(u32 devfn, u32 *data); | |||
117 | void v2m_flags_set(u32 data); | 117 | void v2m_flags_set(u32 data); |
118 | 118 | ||
119 | /* | 119 | /* |
120 | * Miscellaneous | ||
121 | */ | ||
122 | #define SYS_MISC_MASTERSITE (1 << 14) | ||
123 | #define SYS_PROCIDx_HBI_MASK 0xfff | ||
124 | |||
125 | /* | ||
120 | * Core tile IDs | 126 | * Core tile IDs |
121 | */ | 127 | */ |
122 | #define V2M_CT_ID_CA9 0x0c000191 | 128 | #define V2M_CT_ID_CA9 0x0c000191 |
diff --git a/arch/arm/mach-vexpress/include/mach/uncompress.h b/arch/arm/mach-vexpress/include/mach/uncompress.h index 7972c5748d0e..7dab5596b868 100644 --- a/arch/arm/mach-vexpress/include/mach/uncompress.h +++ b/arch/arm/mach-vexpress/include/mach/uncompress.h | |||
@@ -22,7 +22,27 @@ | |||
22 | #define AMBA_UART_CR(base) (*(volatile unsigned char *)((base) + 0x30)) | 22 | #define AMBA_UART_CR(base) (*(volatile unsigned char *)((base) + 0x30)) |
23 | #define AMBA_UART_FR(base) (*(volatile unsigned char *)((base) + 0x18)) | 23 | #define AMBA_UART_FR(base) (*(volatile unsigned char *)((base) + 0x18)) |
24 | 24 | ||
25 | #define get_uart_base() (0x10000000 + 0x00009000) | 25 | #define UART_BASE 0x10009000 |
26 | #define UART_BASE_RS1 0x1c090000 | ||
27 | |||
28 | static unsigned long get_uart_base(void) | ||
29 | { | ||
30 | unsigned long mpcore_periph; | ||
31 | |||
32 | /* | ||
33 | * Make an educated guess regarding the memory map: | ||
34 | * - the original A9 core tile, which has MPCore peripherals | ||
35 | * located at 0x1e000000, should use UART at 0x10009000 | ||
36 | * - all other (RS1 complaint) tiles use UART mapped | ||
37 | * at 0x1c090000 | ||
38 | */ | ||
39 | asm("mrc p15, 4, %0, c15, c0, 0" : "=r" (mpcore_periph)); | ||
40 | |||
41 | if (mpcore_periph == 0x1e000000) | ||
42 | return UART_BASE; | ||
43 | else | ||
44 | return UART_BASE_RS1; | ||
45 | } | ||
26 | 46 | ||
27 | /* | 47 | /* |
28 | * This does not append a newline | 48 | * This does not append a newline |
diff --git a/arch/arm/mach-vexpress/platsmp.c b/arch/arm/mach-vexpress/platsmp.c index a1ed6d68597d..14ba1128ae8d 100644 --- a/arch/arm/mach-vexpress/platsmp.c +++ b/arch/arm/mach-vexpress/platsmp.c | |||
@@ -12,6 +12,11 @@ | |||
12 | #include <linux/errno.h> | 12 | #include <linux/errno.h> |
13 | #include <linux/smp.h> | 13 | #include <linux/smp.h> |
14 | #include <linux/io.h> | 14 | #include <linux/io.h> |
15 | #include <linux/of_fdt.h> | ||
16 | |||
17 | #include <asm/smp_scu.h> | ||
18 | #include <asm/hardware/gic.h> | ||
19 | #include <asm/mach/map.h> | ||
15 | 20 | ||
16 | #include <mach/motherboard.h> | 21 | #include <mach/motherboard.h> |
17 | 22 | ||
@@ -19,13 +24,156 @@ | |||
19 | 24 | ||
20 | extern void versatile_secondary_startup(void); | 25 | extern void versatile_secondary_startup(void); |
21 | 26 | ||
27 | #if defined(CONFIG_OF) | ||
28 | |||
29 | static enum { | ||
30 | GENERIC_SCU, | ||
31 | CORTEX_A9_SCU, | ||
32 | } vexpress_dt_scu __initdata = GENERIC_SCU; | ||
33 | |||
34 | static struct map_desc vexpress_dt_cortex_a9_scu_map __initdata = { | ||
35 | .virtual = V2T_PERIPH, | ||
36 | /* .pfn set in vexpress_dt_init_cortex_a9_scu() */ | ||
37 | .length = SZ_128, | ||
38 | .type = MT_DEVICE, | ||
39 | }; | ||
40 | |||
41 | static void *vexpress_dt_cortex_a9_scu_base __initdata; | ||
42 | |||
43 | const static char *vexpress_dt_cortex_a9_match[] __initconst = { | ||
44 | "arm,cortex-a5-scu", | ||
45 | "arm,cortex-a9-scu", | ||
46 | NULL | ||
47 | }; | ||
48 | |||
49 | static int __init vexpress_dt_find_scu(unsigned long node, | ||
50 | const char *uname, int depth, void *data) | ||
51 | { | ||
52 | if (of_flat_dt_match(node, vexpress_dt_cortex_a9_match)) { | ||
53 | phys_addr_t phys_addr; | ||
54 | __be32 *reg = of_get_flat_dt_prop(node, "reg", NULL); | ||
55 | |||
56 | if (WARN_ON(!reg)) | ||
57 | return -EINVAL; | ||
58 | |||
59 | phys_addr = be32_to_cpup(reg); | ||
60 | vexpress_dt_scu = CORTEX_A9_SCU; | ||
61 | |||
62 | vexpress_dt_cortex_a9_scu_map.pfn = __phys_to_pfn(phys_addr); | ||
63 | iotable_init(&vexpress_dt_cortex_a9_scu_map, 1); | ||
64 | vexpress_dt_cortex_a9_scu_base = ioremap(phys_addr, SZ_256); | ||
65 | if (WARN_ON(!vexpress_dt_cortex_a9_scu_base)) | ||
66 | return -EFAULT; | ||
67 | } | ||
68 | |||
69 | return 0; | ||
70 | } | ||
71 | |||
72 | void __init vexpress_dt_smp_map_io(void) | ||
73 | { | ||
74 | if (initial_boot_params) | ||
75 | WARN_ON(of_scan_flat_dt(vexpress_dt_find_scu, NULL)); | ||
76 | } | ||
77 | |||
78 | static int __init vexpress_dt_cpus_num(unsigned long node, const char *uname, | ||
79 | int depth, void *data) | ||
80 | { | ||
81 | static int prev_depth = -1; | ||
82 | static int nr_cpus = -1; | ||
83 | |||
84 | if (prev_depth > depth && nr_cpus > 0) | ||
85 | return nr_cpus; | ||
86 | |||
87 | if (nr_cpus < 0 && strcmp(uname, "cpus") == 0) | ||
88 | nr_cpus = 0; | ||
89 | |||
90 | if (nr_cpus >= 0) { | ||
91 | const char *device_type = of_get_flat_dt_prop(node, | ||
92 | "device_type", NULL); | ||
93 | |||
94 | if (device_type && strcmp(device_type, "cpu") == 0) | ||
95 | nr_cpus++; | ||
96 | } | ||
97 | |||
98 | prev_depth = depth; | ||
99 | |||
100 | return 0; | ||
101 | } | ||
102 | |||
103 | static void __init vexpress_dt_smp_init_cpus(void) | ||
104 | { | ||
105 | int ncores = 0, i; | ||
106 | |||
107 | switch (vexpress_dt_scu) { | ||
108 | case GENERIC_SCU: | ||
109 | ncores = of_scan_flat_dt(vexpress_dt_cpus_num, NULL); | ||
110 | break; | ||
111 | case CORTEX_A9_SCU: | ||
112 | ncores = scu_get_core_count(vexpress_dt_cortex_a9_scu_base); | ||
113 | break; | ||
114 | default: | ||
115 | WARN_ON(1); | ||
116 | break; | ||
117 | } | ||
118 | |||
119 | if (ncores < 2) | ||
120 | return; | ||
121 | |||
122 | if (ncores > nr_cpu_ids) { | ||
123 | pr_warn("SMP: %u cores greater than maximum (%u), clipping\n", | ||
124 | ncores, nr_cpu_ids); | ||
125 | ncores = nr_cpu_ids; | ||
126 | } | ||
127 | |||
128 | for (i = 0; i < ncores; ++i) | ||
129 | set_cpu_possible(i, true); | ||
130 | |||
131 | set_smp_cross_call(gic_raise_softirq); | ||
132 | } | ||
133 | |||
134 | static void __init vexpress_dt_smp_prepare_cpus(unsigned int max_cpus) | ||
135 | { | ||
136 | int i; | ||
137 | |||
138 | switch (vexpress_dt_scu) { | ||
139 | case GENERIC_SCU: | ||
140 | for (i = 0; i < max_cpus; i++) | ||
141 | set_cpu_present(i, true); | ||
142 | break; | ||
143 | case CORTEX_A9_SCU: | ||
144 | scu_enable(vexpress_dt_cortex_a9_scu_base); | ||
145 | break; | ||
146 | default: | ||
147 | WARN_ON(1); | ||
148 | break; | ||
149 | } | ||
150 | } | ||
151 | |||
152 | #else | ||
153 | |||
154 | static void __init vexpress_dt_smp_init_cpus(void) | ||
155 | { | ||
156 | WARN_ON(1); | ||
157 | } | ||
158 | |||
159 | void __init vexpress_dt_smp_prepare_cpus(unsigned int max_cpus) | ||
160 | { | ||
161 | WARN_ON(1); | ||
162 | } | ||
163 | |||
164 | #endif | ||
165 | |||
22 | /* | 166 | /* |
23 | * Initialise the CPU possible map early - this describes the CPUs | 167 | * Initialise the CPU possible map early - this describes the CPUs |
24 | * which may be present or become present in the system. | 168 | * which may be present or become present in the system. |
25 | */ | 169 | */ |
26 | void __init smp_init_cpus(void) | 170 | void __init smp_init_cpus(void) |
27 | { | 171 | { |
28 | ct_desc->init_cpu_map(); | 172 | if (ct_desc) |
173 | ct_desc->init_cpu_map(); | ||
174 | else | ||
175 | vexpress_dt_smp_init_cpus(); | ||
176 | |||
29 | } | 177 | } |
30 | 178 | ||
31 | void __init platform_smp_prepare_cpus(unsigned int max_cpus) | 179 | void __init platform_smp_prepare_cpus(unsigned int max_cpus) |
@@ -34,7 +182,10 @@ void __init platform_smp_prepare_cpus(unsigned int max_cpus) | |||
34 | * Initialise the present map, which describes the set of CPUs | 182 | * Initialise the present map, which describes the set of CPUs |
35 | * actually populated at the present time. | 183 | * actually populated at the present time. |
36 | */ | 184 | */ |
37 | ct_desc->smp_enable(max_cpus); | 185 | if (ct_desc) |
186 | ct_desc->smp_enable(max_cpus); | ||
187 | else | ||
188 | vexpress_dt_smp_prepare_cpus(max_cpus); | ||
38 | 189 | ||
39 | /* | 190 | /* |
40 | * Write the address of secondary startup into the | 191 | * Write the address of secondary startup into the |
diff --git a/arch/arm/mach-vexpress/v2m.c b/arch/arm/mach-vexpress/v2m.c index 663a98831920..47cdcca5a7e7 100644 --- a/arch/arm/mach-vexpress/v2m.c +++ b/arch/arm/mach-vexpress/v2m.c | |||
@@ -6,6 +6,10 @@ | |||
6 | #include <linux/amba/mmci.h> | 6 | #include <linux/amba/mmci.h> |
7 | #include <linux/io.h> | 7 | #include <linux/io.h> |
8 | #include <linux/init.h> | 8 | #include <linux/init.h> |
9 | #include <linux/of_address.h> | ||
10 | #include <linux/of_fdt.h> | ||
11 | #include <linux/of_irq.h> | ||
12 | #include <linux/of_platform.h> | ||
9 | #include <linux/platform_device.h> | 13 | #include <linux/platform_device.h> |
10 | #include <linux/ata_platform.h> | 14 | #include <linux/ata_platform.h> |
11 | #include <linux/smsc911x.h> | 15 | #include <linux/smsc911x.h> |
@@ -21,6 +25,8 @@ | |||
21 | #include <asm/mach/map.h> | 25 | #include <asm/mach/map.h> |
22 | #include <asm/mach/time.h> | 26 | #include <asm/mach/time.h> |
23 | #include <asm/hardware/arm_timer.h> | 27 | #include <asm/hardware/arm_timer.h> |
28 | #include <asm/hardware/cache-l2x0.h> | ||
29 | #include <asm/hardware/gic.h> | ||
24 | #include <asm/hardware/timer-sp.h> | 30 | #include <asm/hardware/timer-sp.h> |
25 | #include <asm/hardware/sp810.h> | 31 | #include <asm/hardware/sp810.h> |
26 | #include <asm/hardware/gic.h> | 32 | #include <asm/hardware/gic.h> |
@@ -430,8 +436,9 @@ static void __init v2m_populate_ct_desc(void) | |||
430 | ct_desc = ct_descs[i]; | 436 | ct_desc = ct_descs[i]; |
431 | 437 | ||
432 | if (!ct_desc) | 438 | if (!ct_desc) |
433 | panic("vexpress: failed to populate core tile description " | 439 | panic("vexpress: this kernel does not support core tile ID 0x%08x when booting via ATAGs.\n" |
434 | "for tile ID 0x%8x\n", current_tile_id); | 440 | "You may need a device tree blob or a different kernel to boot on this board.\n", |
441 | current_tile_id); | ||
435 | } | 442 | } |
436 | 443 | ||
437 | static void __init v2m_map_io(void) | 444 | static void __init v2m_map_io(void) |
@@ -476,3 +483,205 @@ MACHINE_START(VEXPRESS, "ARM-Versatile Express") | |||
476 | .init_machine = v2m_init, | 483 | .init_machine = v2m_init, |
477 | .restart = v2m_restart, | 484 | .restart = v2m_restart, |
478 | MACHINE_END | 485 | MACHINE_END |
486 | |||
487 | #if defined(CONFIG_ARCH_VEXPRESS_DT) | ||
488 | |||
489 | static struct map_desc v2m_rs1_io_desc __initdata = { | ||
490 | .virtual = V2M_PERIPH, | ||
491 | .pfn = __phys_to_pfn(0x1c000000), | ||
492 | .length = SZ_2M, | ||
493 | .type = MT_DEVICE, | ||
494 | }; | ||
495 | |||
496 | static int __init v2m_dt_scan_memory_map(unsigned long node, const char *uname, | ||
497 | int depth, void *data) | ||
498 | { | ||
499 | const char **map = data; | ||
500 | |||
501 | if (strcmp(uname, "motherboard") != 0) | ||
502 | return 0; | ||
503 | |||
504 | *map = of_get_flat_dt_prop(node, "arm,v2m-memory-map", NULL); | ||
505 | |||
506 | return 1; | ||
507 | } | ||
508 | |||
509 | void __init v2m_dt_map_io(void) | ||
510 | { | ||
511 | const char *map = NULL; | ||
512 | |||
513 | of_scan_flat_dt(v2m_dt_scan_memory_map, &map); | ||
514 | |||
515 | if (map && strcmp(map, "rs1") == 0) | ||
516 | iotable_init(&v2m_rs1_io_desc, 1); | ||
517 | else | ||
518 | iotable_init(v2m_io_desc, ARRAY_SIZE(v2m_io_desc)); | ||
519 | |||
520 | #if defined(CONFIG_SMP) | ||
521 | vexpress_dt_smp_map_io(); | ||
522 | #endif | ||
523 | } | ||
524 | |||
525 | static struct clk_lookup v2m_dt_lookups[] = { | ||
526 | { /* AMBA bus clock */ | ||
527 | .con_id = "apb_pclk", | ||
528 | .clk = &dummy_apb_pclk, | ||
529 | }, { /* SP804 timers */ | ||
530 | .dev_id = "sp804", | ||
531 | .con_id = "v2m-timer0", | ||
532 | .clk = &v2m_sp804_clk, | ||
533 | }, { /* SP804 timers */ | ||
534 | .dev_id = "sp804", | ||
535 | .con_id = "v2m-timer1", | ||
536 | .clk = &v2m_sp804_clk, | ||
537 | }, { /* PL180 MMCI */ | ||
538 | .dev_id = "mb:mmci", /* 10005000.mmci */ | ||
539 | .clk = &osc2_clk, | ||
540 | }, { /* PL050 KMI0 */ | ||
541 | .dev_id = "10006000.kmi", | ||
542 | .clk = &osc2_clk, | ||
543 | }, { /* PL050 KMI1 */ | ||
544 | .dev_id = "10007000.kmi", | ||
545 | .clk = &osc2_clk, | ||
546 | }, { /* PL011 UART0 */ | ||
547 | .dev_id = "10009000.uart", | ||
548 | .clk = &osc2_clk, | ||
549 | }, { /* PL011 UART1 */ | ||
550 | .dev_id = "1000a000.uart", | ||
551 | .clk = &osc2_clk, | ||
552 | }, { /* PL011 UART2 */ | ||
553 | .dev_id = "1000b000.uart", | ||
554 | .clk = &osc2_clk, | ||
555 | }, { /* PL011 UART3 */ | ||
556 | .dev_id = "1000c000.uart", | ||
557 | .clk = &osc2_clk, | ||
558 | }, { /* SP805 WDT */ | ||
559 | .dev_id = "1000f000.wdt", | ||
560 | .clk = &v2m_ref_clk, | ||
561 | }, { /* PL111 CLCD */ | ||
562 | .dev_id = "1001f000.clcd", | ||
563 | .clk = &osc1_clk, | ||
564 | }, | ||
565 | /* RS1 memory map */ | ||
566 | { /* PL180 MMCI */ | ||
567 | .dev_id = "mb:mmci", /* 1c050000.mmci */ | ||
568 | .clk = &osc2_clk, | ||
569 | }, { /* PL050 KMI0 */ | ||
570 | .dev_id = "1c060000.kmi", | ||
571 | .clk = &osc2_clk, | ||
572 | }, { /* PL050 KMI1 */ | ||
573 | .dev_id = "1c070000.kmi", | ||
574 | .clk = &osc2_clk, | ||
575 | }, { /* PL011 UART0 */ | ||
576 | .dev_id = "1c090000.uart", | ||
577 | .clk = &osc2_clk, | ||
578 | }, { /* PL011 UART1 */ | ||
579 | .dev_id = "1c0a0000.uart", | ||
580 | .clk = &osc2_clk, | ||
581 | }, { /* PL011 UART2 */ | ||
582 | .dev_id = "1c0b0000.uart", | ||
583 | .clk = &osc2_clk, | ||
584 | }, { /* PL011 UART3 */ | ||
585 | .dev_id = "1c0c0000.uart", | ||
586 | .clk = &osc2_clk, | ||
587 | }, { /* SP805 WDT */ | ||
588 | .dev_id = "1c0f0000.wdt", | ||
589 | .clk = &v2m_ref_clk, | ||
590 | }, { /* PL111 CLCD */ | ||
591 | .dev_id = "1c1f0000.clcd", | ||
592 | .clk = &osc1_clk, | ||
593 | }, | ||
594 | }; | ||
595 | |||
596 | void __init v2m_dt_init_early(void) | ||
597 | { | ||
598 | struct device_node *node; | ||
599 | u32 dt_hbi; | ||
600 | |||
601 | node = of_find_compatible_node(NULL, NULL, "arm,vexpress-sysreg"); | ||
602 | v2m_sysreg_base = of_iomap(node, 0); | ||
603 | if (WARN_ON(!v2m_sysreg_base)) | ||
604 | return; | ||
605 | |||
606 | /* Confirm board type against DT property, if available */ | ||
607 | if (of_property_read_u32(allnodes, "arm,hbi", &dt_hbi) == 0) { | ||
608 | u32 misc = readl(v2m_sysreg_base + V2M_SYS_MISC); | ||
609 | u32 id = readl(v2m_sysreg_base + (misc & SYS_MISC_MASTERSITE ? | ||
610 | V2M_SYS_PROCID1 : V2M_SYS_PROCID0)); | ||
611 | u32 hbi = id & SYS_PROCIDx_HBI_MASK; | ||
612 | |||
613 | if (WARN_ON(dt_hbi != hbi)) | ||
614 | pr_warning("vexpress: DT HBI (%x) is not matching " | ||
615 | "hardware (%x)!\n", dt_hbi, hbi); | ||
616 | } | ||
617 | |||
618 | clkdev_add_table(v2m_dt_lookups, ARRAY_SIZE(v2m_dt_lookups)); | ||
619 | versatile_sched_clock_init(v2m_sysreg_base + V2M_SYS_24MHZ, 24000000); | ||
620 | } | ||
621 | |||
622 | static struct of_device_id vexpress_irq_match[] __initdata = { | ||
623 | { .compatible = "arm,cortex-a9-gic", .data = gic_of_init, }, | ||
624 | {} | ||
625 | }; | ||
626 | |||
627 | static void __init v2m_dt_init_irq(void) | ||
628 | { | ||
629 | of_irq_init(vexpress_irq_match); | ||
630 | } | ||
631 | |||
632 | static void __init v2m_dt_timer_init(void) | ||
633 | { | ||
634 | struct device_node *node; | ||
635 | const char *path; | ||
636 | int err; | ||
637 | |||
638 | node = of_find_compatible_node(NULL, NULL, "arm,sp810"); | ||
639 | v2m_sysctl_init(of_iomap(node, 0)); | ||
640 | |||
641 | err = of_property_read_string(of_aliases, "arm,v2m_timer", &path); | ||
642 | if (WARN_ON(err)) | ||
643 | return; | ||
644 | node = of_find_node_by_path(path); | ||
645 | v2m_sp804_init(of_iomap(node, 0), irq_of_parse_and_map(node, 0)); | ||
646 | } | ||
647 | |||
648 | static struct sys_timer v2m_dt_timer = { | ||
649 | .init = v2m_dt_timer_init, | ||
650 | }; | ||
651 | |||
652 | static struct of_dev_auxdata v2m_dt_auxdata_lookup[] __initdata = { | ||
653 | OF_DEV_AUXDATA("arm,vexpress-flash", V2M_NOR0, "physmap-flash", | ||
654 | &v2m_flash_data), | ||
655 | OF_DEV_AUXDATA("arm,primecell", V2M_MMCI, "mb:mmci", &v2m_mmci_data), | ||
656 | /* RS1 memory map */ | ||
657 | OF_DEV_AUXDATA("arm,vexpress-flash", 0x08000000, "physmap-flash", | ||
658 | &v2m_flash_data), | ||
659 | OF_DEV_AUXDATA("arm,primecell", 0x1c050000, "mb:mmci", &v2m_mmci_data), | ||
660 | {} | ||
661 | }; | ||
662 | |||
663 | static void __init v2m_dt_init(void) | ||
664 | { | ||
665 | l2x0_of_init(0x00400000, 0xfe0fffff); | ||
666 | of_platform_populate(NULL, of_default_bus_match_table, | ||
667 | v2m_dt_auxdata_lookup, NULL); | ||
668 | pm_power_off = v2m_power_off; | ||
669 | } | ||
670 | |||
671 | const static char *v2m_dt_match[] __initconst = { | ||
672 | "arm,vexpress", | ||
673 | NULL, | ||
674 | }; | ||
675 | |||
676 | DT_MACHINE_START(VEXPRESS_DT, "ARM-Versatile Express") | ||
677 | .dt_compat = v2m_dt_match, | ||
678 | .map_io = v2m_dt_map_io, | ||
679 | .init_early = v2m_dt_init_early, | ||
680 | .init_irq = v2m_dt_init_irq, | ||
681 | .timer = &v2m_dt_timer, | ||
682 | .init_machine = v2m_dt_init, | ||
683 | .handle_irq = gic_handle_irq, | ||
684 | .restart = v2m_restart, | ||
685 | MACHINE_END | ||
686 | |||
687 | #endif | ||
diff --git a/arch/arm/plat-mxc/include/mach/common.h b/arch/arm/plat-mxc/include/mach/common.h index 7c24e5ab7d50..0319c4a0cafa 100644 --- a/arch/arm/plat-mxc/include/mach/common.h +++ b/arch/arm/plat-mxc/include/mach/common.h | |||
@@ -65,6 +65,7 @@ extern int mx51_clocks_init(unsigned long ckil, unsigned long osc, | |||
65 | unsigned long ckih1, unsigned long ckih2); | 65 | unsigned long ckih1, unsigned long ckih2); |
66 | extern int mx53_clocks_init(unsigned long ckil, unsigned long osc, | 66 | extern int mx53_clocks_init(unsigned long ckil, unsigned long osc, |
67 | unsigned long ckih1, unsigned long ckih2); | 67 | unsigned long ckih1, unsigned long ckih2); |
68 | extern int mx27_clocks_init_dt(void); | ||
68 | extern int mx51_clocks_init_dt(void); | 69 | extern int mx51_clocks_init_dt(void); |
69 | extern int mx53_clocks_init_dt(void); | 70 | extern int mx53_clocks_init_dt(void); |
70 | extern int mx6q_clocks_init(void); | 71 | extern int mx6q_clocks_init(void); |
diff --git a/arch/arm/plat-omap/Kconfig b/arch/arm/plat-omap/Kconfig index 8f81503a4df7..ce1e9b96ba1a 100644 --- a/arch/arm/plat-omap/Kconfig +++ b/arch/arm/plat-omap/Kconfig | |||
@@ -14,6 +14,7 @@ config ARCH_OMAP1 | |||
14 | select CLKDEV_LOOKUP | 14 | select CLKDEV_LOOKUP |
15 | select CLKSRC_MMIO | 15 | select CLKSRC_MMIO |
16 | select GENERIC_IRQ_CHIP | 16 | select GENERIC_IRQ_CHIP |
17 | select IRQ_DOMAIN | ||
17 | select HAVE_IDE | 18 | select HAVE_IDE |
18 | select NEED_MACH_MEMORY_H | 19 | select NEED_MACH_MEMORY_H |
19 | help | 20 | help |
@@ -24,6 +25,8 @@ config ARCH_OMAP2PLUS | |||
24 | select CLKDEV_LOOKUP | 25 | select CLKDEV_LOOKUP |
25 | select GENERIC_IRQ_CHIP | 26 | select GENERIC_IRQ_CHIP |
26 | select OMAP_DM_TIMER | 27 | select OMAP_DM_TIMER |
28 | select USE_OF | ||
29 | select PROC_DEVICETREE if PROC_FS | ||
27 | help | 30 | help |
28 | "Systems based on OMAP2, OMAP3 or OMAP4" | 31 | "Systems based on OMAP2, OMAP3 or OMAP4" |
29 | 32 | ||
diff --git a/arch/arm/plat-omap/omap_device.c b/arch/arm/plat-omap/omap_device.c index 6de28ea3cd65..d50cbc6385bd 100644 --- a/arch/arm/plat-omap/omap_device.c +++ b/arch/arm/plat-omap/omap_device.c | |||
@@ -340,7 +340,7 @@ static int omap_device_build_from_dt(struct platform_device *pdev) | |||
340 | 340 | ||
341 | oh_cnt = of_property_count_strings(node, "ti,hwmods"); | 341 | oh_cnt = of_property_count_strings(node, "ti,hwmods"); |
342 | if (!oh_cnt || IS_ERR_VALUE(oh_cnt)) { | 342 | if (!oh_cnt || IS_ERR_VALUE(oh_cnt)) { |
343 | dev_warn(&pdev->dev, "No 'hwmods' to build omap_device\n"); | 343 | dev_dbg(&pdev->dev, "No 'hwmods' to build omap_device\n"); |
344 | return -ENODEV; | 344 | return -ENODEV; |
345 | } | 345 | } |
346 | 346 | ||
diff --git a/arch/avr32/mach-at32ap/at32ap700x.c b/arch/avr32/mach-at32ap/at32ap700x.c index 402a7bb72669..889c544688ca 100644 --- a/arch/avr32/mach-at32ap/at32ap700x.c +++ b/arch/avr32/mach-at32ap/at32ap700x.c | |||
@@ -1055,8 +1055,6 @@ struct platform_device *__init at32_add_device_usart(unsigned int id) | |||
1055 | return at32_usarts[id]; | 1055 | return at32_usarts[id]; |
1056 | } | 1056 | } |
1057 | 1057 | ||
1058 | struct platform_device *atmel_default_console_device; | ||
1059 | |||
1060 | void __init at32_setup_serial_console(unsigned int usart_id) | 1058 | void __init at32_setup_serial_console(unsigned int usart_id) |
1061 | { | 1059 | { |
1062 | atmel_default_console_device = at32_usarts[usart_id]; | 1060 | atmel_default_console_device = at32_usarts[usart_id]; |