diff options
423 files changed, 3741 insertions, 2173 deletions
diff --git a/Documentation/arm64/memory.txt b/Documentation/arm64/memory.txt index dbbdcbba75a3..4110cca96bd6 100644 --- a/Documentation/arm64/memory.txt +++ b/Documentation/arm64/memory.txt | |||
@@ -27,17 +27,17 @@ Start End Size Use | |||
27 | ----------------------------------------------------------------------- | 27 | ----------------------------------------------------------------------- |
28 | 0000000000000000 0000007fffffffff 512GB user | 28 | 0000000000000000 0000007fffffffff 512GB user |
29 | 29 | ||
30 | ffffff8000000000 ffffffbbfffcffff ~240GB vmalloc | 30 | ffffff8000000000 ffffffbbfffeffff ~240GB vmalloc |
31 | 31 | ||
32 | ffffffbbfffd0000 ffffffbcfffdffff 64KB [guard page] | 32 | ffffffbbffff0000 ffffffbbffffffff 64KB [guard page] |
33 | 33 | ||
34 | ffffffbbfffe0000 ffffffbcfffeffff 64KB PCI I/O space | 34 | ffffffbc00000000 ffffffbdffffffff 8GB vmemmap |
35 | 35 | ||
36 | ffffffbbffff0000 ffffffbcffffffff 64KB [guard page] | 36 | ffffffbe00000000 ffffffbffbbfffff ~8GB [guard, future vmmemap] |
37 | 37 | ||
38 | ffffffbc00000000 ffffffbdffffffff 8GB vmemmap | 38 | ffffffbffbe00000 ffffffbffbe0ffff 64KB PCI I/O space |
39 | 39 | ||
40 | ffffffbe00000000 ffffffbffbffffff ~8GB [guard, future vmmemap] | 40 | ffffffbbffff0000 ffffffbcffffffff ~2MB [guard] |
41 | 41 | ||
42 | ffffffbffc000000 ffffffbfffffffff 64MB modules | 42 | ffffffbffc000000 ffffffbfffffffff 64MB modules |
43 | 43 | ||
diff --git a/Documentation/devicetree/bindings/clock/imx25-clock.txt b/Documentation/devicetree/bindings/clock/imx25-clock.txt new file mode 100644 index 000000000000..c2a3525ecb4e --- /dev/null +++ b/Documentation/devicetree/bindings/clock/imx25-clock.txt | |||
@@ -0,0 +1,162 @@ | |||
1 | * Clock bindings for Freescale i.MX25 | ||
2 | |||
3 | Required properties: | ||
4 | - compatible: Should be "fsl,imx25-ccm" | ||
5 | - reg: Address and length of the register set | ||
6 | - interrupts: Should contain CCM interrupt | ||
7 | - #clock-cells: Should be <1> | ||
8 | |||
9 | The clock consumer should specify the desired clock by having the clock | ||
10 | ID in its "clocks" phandle cell. The following is a full list of i.MX25 | ||
11 | clocks and IDs. | ||
12 | |||
13 | Clock ID | ||
14 | --------------------------- | ||
15 | dummy 0 | ||
16 | osc 1 | ||
17 | mpll 2 | ||
18 | upll 3 | ||
19 | mpll_cpu_3_4 4 | ||
20 | cpu_sel 5 | ||
21 | cpu 6 | ||
22 | ahb 7 | ||
23 | usb_div 8 | ||
24 | ipg 9 | ||
25 | per0_sel 10 | ||
26 | per1_sel 11 | ||
27 | per2_sel 12 | ||
28 | per3_sel 13 | ||
29 | per4_sel 14 | ||
30 | per5_sel 15 | ||
31 | per6_sel 16 | ||
32 | per7_sel 17 | ||
33 | per8_sel 18 | ||
34 | per9_sel 19 | ||
35 | per10_sel 20 | ||
36 | per11_sel 21 | ||
37 | per12_sel 22 | ||
38 | per13_sel 23 | ||
39 | per14_sel 24 | ||
40 | per15_sel 25 | ||
41 | per0 26 | ||
42 | per1 27 | ||
43 | per2 28 | ||
44 | per3 29 | ||
45 | per4 30 | ||
46 | per5 31 | ||
47 | per6 32 | ||
48 | per7 33 | ||
49 | per8 34 | ||
50 | per9 35 | ||
51 | per10 36 | ||
52 | per11 37 | ||
53 | per12 38 | ||
54 | per13 39 | ||
55 | per14 40 | ||
56 | per15 41 | ||
57 | csi_ipg_per 42 | ||
58 | epit_ipg_per 43 | ||
59 | esai_ipg_per 44 | ||
60 | esdhc1_ipg_per 45 | ||
61 | esdhc2_ipg_per 46 | ||
62 | gpt_ipg_per 47 | ||
63 | i2c_ipg_per 48 | ||
64 | lcdc_ipg_per 49 | ||
65 | nfc_ipg_per 50 | ||
66 | owire_ipg_per 51 | ||
67 | pwm_ipg_per 52 | ||
68 | sim1_ipg_per 53 | ||
69 | sim2_ipg_per 54 | ||
70 | ssi1_ipg_per 55 | ||
71 | ssi2_ipg_per 56 | ||
72 | uart_ipg_per 57 | ||
73 | ata_ahb 58 | ||
74 | reserved 59 | ||
75 | csi_ahb 60 | ||
76 | emi_ahb 61 | ||
77 | esai_ahb 62 | ||
78 | esdhc1_ahb 63 | ||
79 | esdhc2_ahb 64 | ||
80 | fec_ahb 65 | ||
81 | lcdc_ahb 66 | ||
82 | rtic_ahb 67 | ||
83 | sdma_ahb 68 | ||
84 | slcdc_ahb 69 | ||
85 | usbotg_ahb 70 | ||
86 | reserved 71 | ||
87 | reserved 72 | ||
88 | reserved 73 | ||
89 | reserved 74 | ||
90 | can1_ipg 75 | ||
91 | can2_ipg 76 | ||
92 | csi_ipg 77 | ||
93 | cspi1_ipg 78 | ||
94 | cspi2_ipg 79 | ||
95 | cspi3_ipg 80 | ||
96 | dryice_ipg 81 | ||
97 | ect_ipg 82 | ||
98 | epit1_ipg 83 | ||
99 | epit2_ipg 84 | ||
100 | reserved 85 | ||
101 | esdhc1_ipg 86 | ||
102 | esdhc2_ipg 87 | ||
103 | fec_ipg 88 | ||
104 | reserved 89 | ||
105 | reserved 90 | ||
106 | reserved 91 | ||
107 | gpt1_ipg 92 | ||
108 | gpt2_ipg 93 | ||
109 | gpt3_ipg 94 | ||
110 | gpt4_ipg 95 | ||
111 | reserved 96 | ||
112 | reserved 97 | ||
113 | reserved 98 | ||
114 | iim_ipg 99 | ||
115 | reserved 100 | ||
116 | reserved 101 | ||
117 | kpp_ipg 102 | ||
118 | lcdc_ipg 103 | ||
119 | reserved 104 | ||
120 | pwm1_ipg 105 | ||
121 | pwm2_ipg 106 | ||
122 | pwm3_ipg 107 | ||
123 | pwm4_ipg 108 | ||
124 | rngb_ipg 109 | ||
125 | reserved 110 | ||
126 | scc_ipg 111 | ||
127 | sdma_ipg 112 | ||
128 | sim1_ipg 113 | ||
129 | sim2_ipg 114 | ||
130 | slcdc_ipg 115 | ||
131 | spba_ipg 116 | ||
132 | ssi1_ipg 117 | ||
133 | ssi2_ipg 118 | ||
134 | tsc_ipg 119 | ||
135 | uart1_ipg 120 | ||
136 | uart2_ipg 121 | ||
137 | uart3_ipg 122 | ||
138 | uart4_ipg 123 | ||
139 | uart5_ipg 124 | ||
140 | reserved 125 | ||
141 | wdt_ipg 126 | ||
142 | |||
143 | Examples: | ||
144 | |||
145 | clks: ccm@53f80000 { | ||
146 | compatible = "fsl,imx25-ccm"; | ||
147 | reg = <0x53f80000 0x4000>; | ||
148 | interrupts = <31>; | ||
149 | clock-output-names = ... | ||
150 | "uart_ipg", | ||
151 | "uart_serial", | ||
152 | ...; | ||
153 | }; | ||
154 | |||
155 | uart1: serial@43f90000 { | ||
156 | compatible = "fsl,imx25-uart", "fsl,imx21-uart"; | ||
157 | reg = <0x43f90000 0x4000>; | ||
158 | interrupts = <45>; | ||
159 | clocks = <&clks 79>, <&clks 50>; | ||
160 | clock-names = "ipg", "per"; | ||
161 | status = "disabled"; | ||
162 | }; | ||
diff --git a/Documentation/devicetree/bindings/i2c/fsl-imx-i2c.txt b/Documentation/devicetree/bindings/i2c/fsl-imx-i2c.txt index f3cf43b66f7e..3614242e7732 100644 --- a/Documentation/devicetree/bindings/i2c/fsl-imx-i2c.txt +++ b/Documentation/devicetree/bindings/i2c/fsl-imx-i2c.txt | |||
@@ -12,13 +12,13 @@ Optional properties: | |||
12 | Examples: | 12 | Examples: |
13 | 13 | ||
14 | i2c@83fc4000 { /* I2C2 on i.MX51 */ | 14 | i2c@83fc4000 { /* I2C2 on i.MX51 */ |
15 | compatible = "fsl,imx51-i2c", "fsl,imx1-i2c"; | 15 | compatible = "fsl,imx51-i2c", "fsl,imx21-i2c"; |
16 | reg = <0x83fc4000 0x4000>; | 16 | reg = <0x83fc4000 0x4000>; |
17 | interrupts = <63>; | 17 | interrupts = <63>; |
18 | }; | 18 | }; |
19 | 19 | ||
20 | i2c@70038000 { /* HS-I2C on i.MX51 */ | 20 | i2c@70038000 { /* HS-I2C on i.MX51 */ |
21 | compatible = "fsl,imx51-i2c", "fsl,imx1-i2c"; | 21 | compatible = "fsl,imx51-i2c", "fsl,imx21-i2c"; |
22 | reg = <0x70038000 0x4000>; | 22 | reg = <0x70038000 0x4000>; |
23 | interrupts = <64>; | 23 | interrupts = <64>; |
24 | clock-frequency = <400000>; | 24 | clock-frequency = <400000>; |
diff --git a/MAINTAINERS b/MAINTAINERS index 59203e77ce9e..99199e63f349 100644 --- a/MAINTAINERS +++ b/MAINTAINERS | |||
@@ -797,7 +797,6 @@ L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) | |||
797 | S: Maintained | 797 | S: Maintained |
798 | T: git git://git.pengutronix.de/git/imx/linux-2.6.git | 798 | T: git git://git.pengutronix.de/git/imx/linux-2.6.git |
799 | F: arch/arm/mach-imx/ | 799 | F: arch/arm/mach-imx/ |
800 | F: arch/arm/plat-mxc/ | ||
801 | F: arch/arm/configs/imx*_defconfig | 800 | F: arch/arm/configs/imx*_defconfig |
802 | 801 | ||
803 | ARM/FREESCALE IMX6 | 802 | ARM/FREESCALE IMX6 |
@@ -1,7 +1,7 @@ | |||
1 | VERSION = 3 | 1 | VERSION = 3 |
2 | PATCHLEVEL = 7 | 2 | PATCHLEVEL = 7 |
3 | SUBLEVEL = 0 | 3 | SUBLEVEL = 0 |
4 | EXTRAVERSION = -rc4 | 4 | EXTRAVERSION = -rc5 |
5 | NAME = Terrified Chipmunk | 5 | NAME = Terrified Chipmunk |
6 | 6 | ||
7 | # *DOCUMENTATION* | 7 | # *DOCUMENTATION* |
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 041cf0774776..d33dc606f7ec 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig | |||
@@ -433,19 +433,6 @@ config ARCH_FOOTBRIDGE | |||
433 | Support for systems based on the DC21285 companion chip | 433 | Support for systems based on the DC21285 companion chip |
434 | ("FootBridge"), such as the Simtec CATS and the Rebel NetWinder. | 434 | ("FootBridge"), such as the Simtec CATS and the Rebel NetWinder. |
435 | 435 | ||
436 | config ARCH_MXC | ||
437 | bool "Freescale MXC/iMX-based" | ||
438 | select ARCH_REQUIRE_GPIOLIB | ||
439 | select CLKDEV_LOOKUP | ||
440 | select CLKSRC_MMIO | ||
441 | select GENERIC_CLOCKEVENTS | ||
442 | select GENERIC_IRQ_CHIP | ||
443 | select MULTI_IRQ_HANDLER | ||
444 | select SPARSE_IRQ | ||
445 | select USE_OF | ||
446 | help | ||
447 | Support for Freescale MXC/iMX-based family of processors | ||
448 | |||
449 | config ARCH_MXS | 436 | config ARCH_MXS |
450 | bool "Freescale MXS-based" | 437 | bool "Freescale MXS-based" |
451 | select ARCH_REQUIRE_GPIOLIB | 438 | select ARCH_REQUIRE_GPIOLIB |
@@ -1057,7 +1044,7 @@ source "arch/arm/mach-msm/Kconfig" | |||
1057 | 1044 | ||
1058 | source "arch/arm/mach-mv78xx0/Kconfig" | 1045 | source "arch/arm/mach-mv78xx0/Kconfig" |
1059 | 1046 | ||
1060 | source "arch/arm/plat-mxc/Kconfig" | 1047 | source "arch/arm/mach-imx/Kconfig" |
1061 | 1048 | ||
1062 | source "arch/arm/mach-mxs/Kconfig" | 1049 | source "arch/arm/mach-mxs/Kconfig" |
1063 | 1050 | ||
diff --git a/arch/arm/Kconfig.debug b/arch/arm/Kconfig.debug index b0f3857b3a4c..5566520686a5 100644 --- a/arch/arm/Kconfig.debug +++ b/arch/arm/Kconfig.debug | |||
@@ -412,6 +412,14 @@ endchoice | |||
412 | config DEBUG_LL_INCLUDE | 412 | config DEBUG_LL_INCLUDE |
413 | string | 413 | string |
414 | default "debug/icedcc.S" if DEBUG_ICEDCC | 414 | default "debug/icedcc.S" if DEBUG_ICEDCC |
415 | default "debug/imx.S" if DEBUG_IMX1_UART || \ | ||
416 | DEBUG_IMX25_UART || \ | ||
417 | DEBUG_IMX21_IMX27_UART || \ | ||
418 | DEBUG_IMX31_IMX35_UART || \ | ||
419 | DEBUG_IMX51_UART || \ | ||
420 | DEBUG_IMX50_IMX53_UART ||\ | ||
421 | DEBUG_IMX6Q_UART2 || \ | ||
422 | DEBUG_IMX6Q_UART4 | ||
415 | default "debug/highbank.S" if DEBUG_HIGHBANK_UART | 423 | default "debug/highbank.S" if DEBUG_HIGHBANK_UART |
416 | default "debug/mvebu.S" if DEBUG_MVEBU_UART | 424 | default "debug/mvebu.S" if DEBUG_MVEBU_UART |
417 | default "debug/picoxcell.S" if DEBUG_PICOXCELL_UART | 425 | default "debug/picoxcell.S" if DEBUG_PICOXCELL_UART |
diff --git a/arch/arm/Makefile b/arch/arm/Makefile index 5f914fca911b..3353b7613208 100644 --- a/arch/arm/Makefile +++ b/arch/arm/Makefile | |||
@@ -196,7 +196,6 @@ machine-$(CONFIG_ARCH_ZYNQ) += zynq | |||
196 | 196 | ||
197 | # Platform directory name. This list is sorted alphanumerically | 197 | # Platform directory name. This list is sorted alphanumerically |
198 | # by CONFIG_* macro name. | 198 | # by CONFIG_* macro name. |
199 | plat-$(CONFIG_ARCH_MXC) += mxc | ||
200 | plat-$(CONFIG_ARCH_OMAP) += omap | 199 | plat-$(CONFIG_ARCH_OMAP) += omap |
201 | plat-$(CONFIG_ARCH_S3C64XX) += samsung | 200 | plat-$(CONFIG_ARCH_S3C64XX) += samsung |
202 | plat-$(CONFIG_ARCH_ZYNQ) += versatile | 201 | plat-$(CONFIG_ARCH_ZYNQ) += versatile |
diff --git a/arch/arm/boot/dts/imx25-karo-tx25.dts b/arch/arm/boot/dts/imx25-karo-tx25.dts new file mode 100644 index 000000000000..d81f8a0b9794 --- /dev/null +++ b/arch/arm/boot/dts/imx25-karo-tx25.dts | |||
@@ -0,0 +1,44 @@ | |||
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/ "imx25.dtsi" | ||
14 | |||
15 | / { | ||
16 | model = "Ka-Ro TX25"; | ||
17 | compatible = "karo,imx25-tx25", "fsl,imx25"; | ||
18 | |||
19 | memory { | ||
20 | reg = <0x80000000 0x02000000 0x90000000 0x02000000>; | ||
21 | }; | ||
22 | |||
23 | soc { | ||
24 | aips@43f00000 { | ||
25 | uart1: serial@43f90000 { | ||
26 | status = "okay"; | ||
27 | }; | ||
28 | }; | ||
29 | |||
30 | spba@50000000 { | ||
31 | fec: ethernet@50038000 { | ||
32 | status = "okay"; | ||
33 | phy-mode = "rmii"; | ||
34 | }; | ||
35 | }; | ||
36 | |||
37 | emi@80000000 { | ||
38 | nand@bb000000 { | ||
39 | nand-on-flash-bbt; | ||
40 | status = "okay"; | ||
41 | }; | ||
42 | }; | ||
43 | }; | ||
44 | }; | ||
diff --git a/arch/arm/boot/dts/imx25.dtsi b/arch/arm/boot/dts/imx25.dtsi new file mode 100644 index 000000000000..e1b13ebc96d6 --- /dev/null +++ b/arch/arm/boot/dts/imx25.dtsi | |||
@@ -0,0 +1,515 @@ | |||
1 | /* | ||
2 | * Copyright 2012 Sascha Hauer, Pengutronix <s.hauer@pengutronix.de> | ||
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 | gpio0 = &gpio1; | ||
22 | gpio1 = &gpio2; | ||
23 | gpio2 = &gpio3; | ||
24 | gpio3 = &gpio4; | ||
25 | usb0 = &usbotg; | ||
26 | usb1 = &usbhost1; | ||
27 | }; | ||
28 | |||
29 | asic: asic-interrupt-controller@68000000 { | ||
30 | compatible = "fsl,imx25-asic", "fsl,avic"; | ||
31 | interrupt-controller; | ||
32 | #interrupt-cells = <1>; | ||
33 | reg = <0x68000000 0x8000000>; | ||
34 | }; | ||
35 | |||
36 | clocks { | ||
37 | #address-cells = <1>; | ||
38 | #size-cells = <0>; | ||
39 | |||
40 | osc { | ||
41 | compatible = "fsl,imx-osc", "fixed-clock"; | ||
42 | clock-frequency = <24000000>; | ||
43 | }; | ||
44 | }; | ||
45 | |||
46 | soc { | ||
47 | #address-cells = <1>; | ||
48 | #size-cells = <1>; | ||
49 | compatible = "simple-bus"; | ||
50 | interrupt-parent = <&asic>; | ||
51 | ranges; | ||
52 | |||
53 | aips@43f00000 { /* AIPS1 */ | ||
54 | compatible = "fsl,aips-bus", "simple-bus"; | ||
55 | #address-cells = <1>; | ||
56 | #size-cells = <1>; | ||
57 | reg = <0x43f00000 0x100000>; | ||
58 | ranges; | ||
59 | |||
60 | i2c1: i2c@43f80000 { | ||
61 | #address-cells = <1>; | ||
62 | #size-cells = <0>; | ||
63 | compatible = "fsl,imx25-i2c", "fsl,imx21-i2c"; | ||
64 | reg = <0x43f80000 0x4000>; | ||
65 | clocks = <&clks 48>; | ||
66 | clock-names = ""; | ||
67 | interrupts = <3>; | ||
68 | status = "disabled"; | ||
69 | }; | ||
70 | |||
71 | i2c3: i2c@43f84000 { | ||
72 | #address-cells = <1>; | ||
73 | #size-cells = <0>; | ||
74 | compatible = "fsl,imx25-i2c", "fsl,imx21-i2c"; | ||
75 | reg = <0x43f84000 0x4000>; | ||
76 | clocks = <&clks 48>; | ||
77 | clock-names = ""; | ||
78 | interrupts = <10>; | ||
79 | status = "disabled"; | ||
80 | }; | ||
81 | |||
82 | can1: can@43f88000 { | ||
83 | compatible = "fsl,imx25-flexcan", "fsl,p1010-flexcan"; | ||
84 | reg = <0x43f88000 0x4000>; | ||
85 | interrupts = <43>; | ||
86 | clocks = <&clks 75>, <&clks 75>; | ||
87 | clock-names = "ipg", "per"; | ||
88 | status = "disabled"; | ||
89 | }; | ||
90 | |||
91 | can2: can@43f8c000 { | ||
92 | compatible = "fsl,imx25-flexcan", "fsl,p1010-flexcan"; | ||
93 | reg = <0x43f8c000 0x4000>; | ||
94 | interrupts = <44>; | ||
95 | clocks = <&clks 76>, <&clks 76>; | ||
96 | clock-names = "ipg", "per"; | ||
97 | status = "disabled"; | ||
98 | }; | ||
99 | |||
100 | uart1: serial@43f90000 { | ||
101 | compatible = "fsl,imx25-uart", "fsl,imx21-uart"; | ||
102 | reg = <0x43f90000 0x4000>; | ||
103 | interrupts = <45>; | ||
104 | clocks = <&clks 120>, <&clks 57>; | ||
105 | clock-names = "ipg", "per"; | ||
106 | status = "disabled"; | ||
107 | }; | ||
108 | |||
109 | uart2: serial@43f94000 { | ||
110 | compatible = "fsl,imx25-uart", "fsl,imx21-uart"; | ||
111 | reg = <0x43f94000 0x4000>; | ||
112 | interrupts = <32>; | ||
113 | clocks = <&clks 121>, <&clks 57>; | ||
114 | clock-names = "ipg", "per"; | ||
115 | status = "disabled"; | ||
116 | }; | ||
117 | |||
118 | i2c2: i2c@43f98000 { | ||
119 | #address-cells = <1>; | ||
120 | #size-cells = <0>; | ||
121 | compatible = "fsl,imx25-i2c", "fsl,imx21-i2c"; | ||
122 | reg = <0x43f98000 0x4000>; | ||
123 | clocks = <&clks 48>; | ||
124 | clock-names = ""; | ||
125 | interrupts = <4>; | ||
126 | status = "disabled"; | ||
127 | }; | ||
128 | |||
129 | owire@43f9c000 { | ||
130 | #address-cells = <1>; | ||
131 | #size-cells = <0>; | ||
132 | reg = <0x43f9c000 0x4000>; | ||
133 | clocks = <&clks 51>; | ||
134 | clock-names = ""; | ||
135 | interrupts = <2>; | ||
136 | status = "disabled"; | ||
137 | }; | ||
138 | |||
139 | spi1: cspi@43fa4000 { | ||
140 | #address-cells = <1>; | ||
141 | #size-cells = <0>; | ||
142 | compatible = "fsl,imx25-cspi", "fsl,imx35-cspi"; | ||
143 | reg = <0x43fa4000 0x4000>; | ||
144 | clocks = <&clks 62>; | ||
145 | clock-names = "ipg"; | ||
146 | interrupts = <14>; | ||
147 | status = "disabled"; | ||
148 | }; | ||
149 | |||
150 | kpp@43fa8000 { | ||
151 | #address-cells = <1>; | ||
152 | #size-cells = <0>; | ||
153 | reg = <0x43fa8000 0x4000>; | ||
154 | clocks = <&clks 102>; | ||
155 | clock-names = ""; | ||
156 | interrupts = <24>; | ||
157 | status = "disabled"; | ||
158 | }; | ||
159 | |||
160 | iomuxc@43fac000{ | ||
161 | compatible = "fsl,imx25-iomuxc"; | ||
162 | reg = <0x43fac000 0x4000>; | ||
163 | }; | ||
164 | |||
165 | audmux@43fb0000 { | ||
166 | compatible = "fsl,imx25-audmux", "fsl,imx31-audmux"; | ||
167 | reg = <0x43fb0000 0x4000>; | ||
168 | status = "disabled"; | ||
169 | }; | ||
170 | }; | ||
171 | |||
172 | spba@50000000 { | ||
173 | compatible = "fsl,spba-bus", "simple-bus"; | ||
174 | #address-cells = <1>; | ||
175 | #size-cells = <1>; | ||
176 | reg = <0x50000000 0x40000>; | ||
177 | ranges; | ||
178 | |||
179 | spi3: cspi@50004000 { | ||
180 | #address-cells = <1>; | ||
181 | #size-cells = <0>; | ||
182 | compatible = "fsl,imx25-cspi", "fsl,imx35-cspi"; | ||
183 | reg = <0x50004000 0x4000>; | ||
184 | interrupts = <0>; | ||
185 | clocks = <&clks 80>; | ||
186 | clock-names = "ipg"; | ||
187 | status = "disabled"; | ||
188 | }; | ||
189 | |||
190 | uart4: serial@50008000 { | ||
191 | compatible = "fsl,imx25-uart", "fsl,imx21-uart"; | ||
192 | reg = <0x50008000 0x4000>; | ||
193 | interrupts = <5>; | ||
194 | clocks = <&clks 123>, <&clks 57>; | ||
195 | clock-names = "ipg", "per"; | ||
196 | status = "disabled"; | ||
197 | }; | ||
198 | |||
199 | uart3: serial@5000c000 { | ||
200 | compatible = "fsl,imx25-uart", "fsl,imx21-uart"; | ||
201 | reg = <0x5000c000 0x4000>; | ||
202 | interrupts = <18>; | ||
203 | clocks = <&clks 122>, <&clks 57>; | ||
204 | clock-names = "ipg", "per"; | ||
205 | status = "disabled"; | ||
206 | }; | ||
207 | |||
208 | spi2: cspi@50010000 { | ||
209 | #address-cells = <1>; | ||
210 | #size-cells = <0>; | ||
211 | compatible = "fsl,imx25-cspi", "fsl,imx35-cspi"; | ||
212 | reg = <0x50010000 0x4000>; | ||
213 | clocks = <&clks 79>; | ||
214 | clock-names = "ipg"; | ||
215 | interrupts = <13>; | ||
216 | status = "disabled"; | ||
217 | }; | ||
218 | |||
219 | ssi2: ssi@50014000 { | ||
220 | compatible = "fsl,imx25-ssi", "fsl,imx21-ssi"; | ||
221 | reg = <0x50014000 0x4000>; | ||
222 | interrupts = <11>; | ||
223 | status = "disabled"; | ||
224 | }; | ||
225 | |||
226 | esai@50018000 { | ||
227 | reg = <0x50018000 0x4000>; | ||
228 | interrupts = <7>; | ||
229 | }; | ||
230 | |||
231 | uart5: serial@5002c000 { | ||
232 | compatible = "fsl,imx25-uart", "fsl,imx21-uart"; | ||
233 | reg = <0x5002c000 0x4000>; | ||
234 | interrupts = <40>; | ||
235 | clocks = <&clks 124>, <&clks 57>; | ||
236 | clock-names = "ipg", "per"; | ||
237 | status = "disabled"; | ||
238 | }; | ||
239 | |||
240 | tsc: tsc@50030000 { | ||
241 | compatible = "fsl,imx25-adc", "fsl,imx21-tsc"; | ||
242 | reg = <0x50030000 0x4000>; | ||
243 | interrupts = <46>; | ||
244 | clocks = <&clks 119>; | ||
245 | clock-names = "ipg"; | ||
246 | status = "disabled"; | ||
247 | }; | ||
248 | |||
249 | ssi1: ssi@50034000 { | ||
250 | compatible = "fsl,imx25-ssi", "fsl,imx21-ssi"; | ||
251 | reg = <0x50034000 0x4000>; | ||
252 | interrupts = <12>; | ||
253 | status = "disabled"; | ||
254 | }; | ||
255 | |||
256 | fec: ethernet@50038000 { | ||
257 | compatible = "fsl,imx25-fec"; | ||
258 | reg = <0x50038000 0x4000>; | ||
259 | interrupts = <57>; | ||
260 | clocks = <&clks 88>, <&clks 65>; | ||
261 | clock-names = "ipg", "ahb"; | ||
262 | status = "disabled"; | ||
263 | }; | ||
264 | }; | ||
265 | |||
266 | aips@53f00000 { /* AIPS2 */ | ||
267 | compatible = "fsl,aips-bus", "simple-bus"; | ||
268 | #address-cells = <1>; | ||
269 | #size-cells = <1>; | ||
270 | reg = <0x53f00000 0x100000>; | ||
271 | ranges; | ||
272 | |||
273 | clks: ccm@53f80000 { | ||
274 | compatible = "fsl,imx25-ccm"; | ||
275 | reg = <0x53f80000 0x4000>; | ||
276 | interrupts = <31>; | ||
277 | #clock-cells = <1>; | ||
278 | }; | ||
279 | |||
280 | gpt4: timer@53f84000 { | ||
281 | compatible = "fsl,imx25-gpt", "fsl,imx31-gpt"; | ||
282 | reg = <0x53f84000 0x4000>; | ||
283 | clocks = <&clks 9>, <&clks 45>; | ||
284 | clock-names = "ipg", "per"; | ||
285 | interrupts = <1>; | ||
286 | }; | ||
287 | |||
288 | gpt3: timer@53f88000 { | ||
289 | compatible = "fsl,imx25-gpt", "fsl,imx31-gpt"; | ||
290 | reg = <0x53f88000 0x4000>; | ||
291 | clocks = <&clks 9>, <&clks 47>; | ||
292 | clock-names = "ipg", "per"; | ||
293 | interrupts = <29>; | ||
294 | }; | ||
295 | |||
296 | gpt2: timer@53f8c000 { | ||
297 | compatible = "fsl,imx25-gpt", "fsl,imx31-gpt"; | ||
298 | reg = <0x53f8c000 0x4000>; | ||
299 | clocks = <&clks 9>, <&clks 47>; | ||
300 | clock-names = "ipg", "per"; | ||
301 | interrupts = <53>; | ||
302 | }; | ||
303 | |||
304 | gpt1: timer@53f90000 { | ||
305 | compatible = "fsl,imx25-gpt", "fsl,imx31-gpt"; | ||
306 | reg = <0x53f90000 0x4000>; | ||
307 | clocks = <&clks 9>, <&clks 47>; | ||
308 | clock-names = "ipg", "per"; | ||
309 | interrupts = <54>; | ||
310 | }; | ||
311 | |||
312 | epit1: timer@53f94000 { | ||
313 | compatible = "fsl,imx25-epit"; | ||
314 | reg = <0x53f94000 0x4000>; | ||
315 | interrupts = <28>; | ||
316 | }; | ||
317 | |||
318 | epit2: timer@53f98000 { | ||
319 | compatible = "fsl,imx25-epit"; | ||
320 | reg = <0x53f98000 0x4000>; | ||
321 | interrupts = <27>; | ||
322 | }; | ||
323 | |||
324 | gpio4: gpio@53f9c000 { | ||
325 | compatible = "fsl,imx25-gpio", "fsl,imx35-gpio"; | ||
326 | reg = <0x53f9c000 0x4000>; | ||
327 | interrupts = <23>; | ||
328 | gpio-controller; | ||
329 | #gpio-cells = <2>; | ||
330 | interrupt-controller; | ||
331 | #interrupt-cells = <2>; | ||
332 | }; | ||
333 | |||
334 | pwm2: pwm@53fa0000 { | ||
335 | compatible = "fsl,imx25-pwm", "fsl,imx27-pwm"; | ||
336 | #pwm-cells = <2>; | ||
337 | reg = <0x53fa0000 0x4000>; | ||
338 | clocks = <&clks 106>, <&clks 36>; | ||
339 | clock-names = "ipg", "per"; | ||
340 | interrupts = <36>; | ||
341 | }; | ||
342 | |||
343 | gpio3: gpio@53fa4000 { | ||
344 | compatible = "fsl,imx25-gpio", "fsl,imx35-gpio"; | ||
345 | reg = <0x53fa4000 0x4000>; | ||
346 | interrupts = <16>; | ||
347 | gpio-controller; | ||
348 | #gpio-cells = <2>; | ||
349 | interrupt-controller; | ||
350 | #interrupt-cells = <2>; | ||
351 | }; | ||
352 | |||
353 | pwm3: pwm@53fa8000 { | ||
354 | compatible = "fsl,imx25-pwm", "fsl,imx27-pwm"; | ||
355 | #pwm-cells = <2>; | ||
356 | reg = <0x53fa8000 0x4000>; | ||
357 | clocks = <&clks 107>, <&clks 36>; | ||
358 | clock-names = "ipg", "per"; | ||
359 | interrupts = <41>; | ||
360 | }; | ||
361 | |||
362 | esdhc1: esdhc@53fb4000 { | ||
363 | compatible = "fsl,imx25-esdhc"; | ||
364 | reg = <0x53fb4000 0x4000>; | ||
365 | interrupts = <9>; | ||
366 | clocks = <&clks 86>, <&clks 63>, <&clks 45>; | ||
367 | clock-names = "ipg", "ahb", "per"; | ||
368 | status = "disabled"; | ||
369 | }; | ||
370 | |||
371 | esdhc2: esdhc@53fb8000 { | ||
372 | compatible = "fsl,imx25-esdhc"; | ||
373 | reg = <0x53fb8000 0x4000>; | ||
374 | interrupts = <8>; | ||
375 | clocks = <&clks 87>, <&clks 64>, <&clks 46>; | ||
376 | clock-names = "ipg", "ahb", "per"; | ||
377 | status = "disabled"; | ||
378 | }; | ||
379 | |||
380 | lcdc@53fbc000 { | ||
381 | reg = <0x53fbc000 0x4000>; | ||
382 | interrupts = <39>; | ||
383 | clocks = <&clks 103>, <&clks 66>, <&clks 49>; | ||
384 | clock-names = "ipg", "ahb", "per"; | ||
385 | status = "disabled"; | ||
386 | }; | ||
387 | |||
388 | slcdc@53fc0000 { | ||
389 | reg = <0x53fc0000 0x4000>; | ||
390 | interrupts = <38>; | ||
391 | status = "disabled"; | ||
392 | }; | ||
393 | |||
394 | pwm4: pwm@53fc8000 { | ||
395 | compatible = "fsl,imx25-pwm", "fsl,imx27-pwm"; | ||
396 | reg = <0x53fc8000 0x4000>; | ||
397 | clocks = <&clks 108>, <&clks 36>; | ||
398 | clock-names = "ipg", "per"; | ||
399 | interrupts = <42>; | ||
400 | }; | ||
401 | |||
402 | gpio1: gpio@53fcc000 { | ||
403 | compatible = "fsl,imx25-gpio", "fsl,imx35-gpio"; | ||
404 | reg = <0x53fcc000 0x4000>; | ||
405 | interrupts = <52>; | ||
406 | gpio-controller; | ||
407 | #gpio-cells = <2>; | ||
408 | interrupt-controller; | ||
409 | #interrupt-cells = <2>; | ||
410 | }; | ||
411 | |||
412 | gpio2: gpio@53fd0000 { | ||
413 | compatible = "fsl,imx25-gpio", "fsl,imx35-gpio"; | ||
414 | reg = <0x53fd0000 0x4000>; | ||
415 | interrupts = <51>; | ||
416 | gpio-controller; | ||
417 | #gpio-cells = <2>; | ||
418 | interrupt-controller; | ||
419 | #interrupt-cells = <2>; | ||
420 | }; | ||
421 | |||
422 | sdma@53fd4000 { | ||
423 | compatible = "fsl,imx25-sdma", "fsl,imx35-sdma"; | ||
424 | reg = <0x53fd4000 0x4000>; | ||
425 | clocks = <&clks 112>, <&clks 68>; | ||
426 | clock-names = "ipg", "ahb"; | ||
427 | interrupts = <34>; | ||
428 | }; | ||
429 | |||
430 | wdog@53fdc000 { | ||
431 | compatible = "fsl,imx25-wdt", "fsl,imx21-wdt"; | ||
432 | reg = <0x53fdc000 0x4000>; | ||
433 | clocks = <&clks 126>; | ||
434 | clock-names = ""; | ||
435 | interrupts = <55>; | ||
436 | }; | ||
437 | |||
438 | pwm1: pwm@53fe0000 { | ||
439 | compatible = "fsl,imx25-pwm", "fsl,imx27-pwm"; | ||
440 | #pwm-cells = <2>; | ||
441 | reg = <0x53fe0000 0x4000>; | ||
442 | clocks = <&clks 105>, <&clks 36>; | ||
443 | clock-names = "ipg", "per"; | ||
444 | interrupts = <26>; | ||
445 | }; | ||
446 | |||
447 | usbphy1: usbphy@1 { | ||
448 | compatible = "nop-usbphy"; | ||
449 | status = "disabled"; | ||
450 | }; | ||
451 | |||
452 | usbphy2: usbphy@2 { | ||
453 | compatible = "nop-usbphy"; | ||
454 | status = "disabled"; | ||
455 | }; | ||
456 | |||
457 | usbotg: usb@53ff4000 { | ||
458 | compatible = "fsl,imx25-usb", "fsl,imx27-usb"; | ||
459 | reg = <0x53ff4000 0x0200>; | ||
460 | interrupts = <37>; | ||
461 | clocks = <&clks 9>, <&clks 70>, <&clks 8>; | ||
462 | clock-names = "ipg", "ahb", "per"; | ||
463 | fsl,usbmisc = <&usbmisc 0>; | ||
464 | status = "disabled"; | ||
465 | }; | ||
466 | |||
467 | usbhost1: usb@53ff4400 { | ||
468 | compatible = "fsl,imx25-usb", "fsl,imx27-usb"; | ||
469 | reg = <0x53ff4400 0x0200>; | ||
470 | interrupts = <35>; | ||
471 | clocks = <&clks 9>, <&clks 70>, <&clks 8>; | ||
472 | clock-names = "ipg", "ahb", "per"; | ||
473 | fsl,usbmisc = <&usbmisc 1>; | ||
474 | status = "disabled"; | ||
475 | }; | ||
476 | |||
477 | usbmisc: usbmisc@53ff4600 { | ||
478 | #index-cells = <1>; | ||
479 | compatible = "fsl,imx25-usbmisc"; | ||
480 | clocks = <&clks 9>, <&clks 70>, <&clks 8>; | ||
481 | clock-names = "ipg", "ahb", "per"; | ||
482 | reg = <0x53ff4600 0x00f>; | ||
483 | status = "disabled"; | ||
484 | }; | ||
485 | |||
486 | dryice@53ffc000 { | ||
487 | compatible = "fsl,imx25-dryice", "fsl,imx25-rtc"; | ||
488 | reg = <0x53ffc000 0x4000>; | ||
489 | clocks = <&clks 81>; | ||
490 | clock-names = "ipg"; | ||
491 | interrupts = <25>; | ||
492 | }; | ||
493 | }; | ||
494 | |||
495 | emi@80000000 { | ||
496 | compatible = "fsl,emi-bus", "simple-bus"; | ||
497 | #address-cells = <1>; | ||
498 | #size-cells = <1>; | ||
499 | reg = <0x80000000 0x3b002000>; | ||
500 | ranges; | ||
501 | |||
502 | nand@bb000000 { | ||
503 | #address-cells = <1>; | ||
504 | #size-cells = <1>; | ||
505 | |||
506 | compatible = "fsl,imx25-nand"; | ||
507 | reg = <0xbb000000 0x2000>; | ||
508 | clocks = <&clks 50>; | ||
509 | clock-names = ""; | ||
510 | interrupts = <33>; | ||
511 | status = "disabled"; | ||
512 | }; | ||
513 | }; | ||
514 | }; | ||
515 | }; | ||
diff --git a/arch/arm/boot/dts/imx27-apf27.dts b/arch/arm/boot/dts/imx27-apf27.dts new file mode 100644 index 000000000000..c0327c054de2 --- /dev/null +++ b/arch/arm/boot/dts/imx27-apf27.dts | |||
@@ -0,0 +1,89 @@ | |||
1 | /* | ||
2 | * Copyright 2012 Philippe Reynes <tremyfr@yahoo.fr> | ||
3 | * Copyright 2012 Armadeus Systems <support@armadeus.com> | ||
4 | * | ||
5 | * Based on code which is: Copyright 2012 Sascha Hauer, Pengutronix | ||
6 | * | ||
7 | * The code contained herein is licensed under the GNU General Public | ||
8 | * License. You may obtain a copy of the GNU General Public License | ||
9 | * Version 2 or later at the following locations: | ||
10 | * | ||
11 | * http://www.opensource.org/licenses/gpl-license.html | ||
12 | * http://www.gnu.org/copyleft/gpl.html | ||
13 | */ | ||
14 | |||
15 | /dts-v1/; | ||
16 | /include/ "imx27.dtsi" | ||
17 | |||
18 | / { | ||
19 | model = "Armadeus Systems APF27 module"; | ||
20 | compatible = "armadeus,imx27-apf27", "fsl,imx27"; | ||
21 | |||
22 | memory { | ||
23 | reg = <0xa0000000 0x04000000>; | ||
24 | }; | ||
25 | |||
26 | clocks { | ||
27 | #address-cells = <1>; | ||
28 | #size-cells = <0>; | ||
29 | |||
30 | osc26m { | ||
31 | compatible = "fsl,imx-osc26m", "fixed-clock"; | ||
32 | clock-frequency = <0>; | ||
33 | }; | ||
34 | }; | ||
35 | |||
36 | soc { | ||
37 | aipi@10000000 { | ||
38 | serial@1000a000 { | ||
39 | status = "okay"; | ||
40 | }; | ||
41 | |||
42 | ethernet@1002b000 { | ||
43 | status = "okay"; | ||
44 | }; | ||
45 | }; | ||
46 | |||
47 | nand@d8000000 { | ||
48 | status = "okay"; | ||
49 | nand-bus-width = <16>; | ||
50 | nand-ecc-mode = "hw"; | ||
51 | nand-on-flash-bbt; | ||
52 | |||
53 | partition@0 { | ||
54 | label = "u-boot"; | ||
55 | reg = <0x0 0x100000>; | ||
56 | }; | ||
57 | |||
58 | partition@100000 { | ||
59 | label = "env"; | ||
60 | reg = <0x100000 0x80000>; | ||
61 | }; | ||
62 | |||
63 | partition@180000 { | ||
64 | label = "env2"; | ||
65 | reg = <0x180000 0x80000>; | ||
66 | }; | ||
67 | |||
68 | partition@200000 { | ||
69 | label = "firmware"; | ||
70 | reg = <0x200000 0x80000>; | ||
71 | }; | ||
72 | |||
73 | partition@280000 { | ||
74 | label = "dtb"; | ||
75 | reg = <0x280000 0x80000>; | ||
76 | }; | ||
77 | |||
78 | partition@300000 { | ||
79 | label = "kernel"; | ||
80 | reg = <0x300000 0x500000>; | ||
81 | }; | ||
82 | |||
83 | partition@800000 { | ||
84 | label = "rootfs"; | ||
85 | reg = <0x800000 0xf800000>; | ||
86 | }; | ||
87 | }; | ||
88 | }; | ||
89 | }; | ||
diff --git a/arch/arm/boot/dts/imx27.dtsi b/arch/arm/boot/dts/imx27.dtsi index 3e54f1498841..67d672792b0d 100644 --- a/arch/arm/boot/dts/imx27.dtsi +++ b/arch/arm/boot/dts/imx27.dtsi | |||
@@ -113,7 +113,7 @@ | |||
113 | i2c1: i2c@10012000 { | 113 | i2c1: i2c@10012000 { |
114 | #address-cells = <1>; | 114 | #address-cells = <1>; |
115 | #size-cells = <0>; | 115 | #size-cells = <0>; |
116 | compatible = "fsl,imx27-i2c", "fsl,imx1-i2c"; | 116 | compatible = "fsl,imx27-i2c", "fsl,imx21-i2c"; |
117 | reg = <0x10012000 0x1000>; | 117 | reg = <0x10012000 0x1000>; |
118 | interrupts = <12>; | 118 | interrupts = <12>; |
119 | status = "disabled"; | 119 | status = "disabled"; |
@@ -205,7 +205,7 @@ | |||
205 | i2c2: i2c@1001d000 { | 205 | i2c2: i2c@1001d000 { |
206 | #address-cells = <1>; | 206 | #address-cells = <1>; |
207 | #size-cells = <0>; | 207 | #size-cells = <0>; |
208 | compatible = "fsl,imx27-i2c", "fsl,imx1-i2c"; | 208 | compatible = "fsl,imx27-i2c", "fsl,imx21-i2c"; |
209 | reg = <0x1001d000 0x1000>; | 209 | reg = <0x1001d000 0x1000>; |
210 | interrupts = <1>; | 210 | interrupts = <1>; |
211 | status = "disabled"; | 211 | status = "disabled"; |
diff --git a/arch/arm/boot/dts/imx51.dtsi b/arch/arm/boot/dts/imx51.dtsi index 75d069fcf897..54aea74769a1 100644 --- a/arch/arm/boot/dts/imx51.dtsi +++ b/arch/arm/boot/dts/imx51.dtsi | |||
@@ -377,7 +377,7 @@ | |||
377 | i2c@83fc4000 { /* I2C2 */ | 377 | i2c@83fc4000 { /* I2C2 */ |
378 | #address-cells = <1>; | 378 | #address-cells = <1>; |
379 | #size-cells = <0>; | 379 | #size-cells = <0>; |
380 | compatible = "fsl,imx51-i2c", "fsl,imx1-i2c"; | 380 | compatible = "fsl,imx51-i2c", "fsl,imx21-i2c"; |
381 | reg = <0x83fc4000 0x4000>; | 381 | reg = <0x83fc4000 0x4000>; |
382 | interrupts = <63>; | 382 | interrupts = <63>; |
383 | status = "disabled"; | 383 | status = "disabled"; |
@@ -386,7 +386,7 @@ | |||
386 | i2c@83fc8000 { /* I2C1 */ | 386 | i2c@83fc8000 { /* I2C1 */ |
387 | #address-cells = <1>; | 387 | #address-cells = <1>; |
388 | #size-cells = <0>; | 388 | #size-cells = <0>; |
389 | compatible = "fsl,imx51-i2c", "fsl,imx1-i2c"; | 389 | compatible = "fsl,imx51-i2c", "fsl,imx21-i2c"; |
390 | reg = <0x83fc8000 0x4000>; | 390 | reg = <0x83fc8000 0x4000>; |
391 | interrupts = <62>; | 391 | interrupts = <62>; |
392 | status = "disabled"; | 392 | status = "disabled"; |
diff --git a/arch/arm/boot/dts/imx53.dtsi b/arch/arm/boot/dts/imx53.dtsi index 76ebb1ad2675..caf09ff73f10 100644 --- a/arch/arm/boot/dts/imx53.dtsi +++ b/arch/arm/boot/dts/imx53.dtsi | |||
@@ -432,7 +432,7 @@ | |||
432 | i2c@53fec000 { /* I2C3 */ | 432 | i2c@53fec000 { /* I2C3 */ |
433 | #address-cells = <1>; | 433 | #address-cells = <1>; |
434 | #size-cells = <0>; | 434 | #size-cells = <0>; |
435 | compatible = "fsl,imx53-i2c", "fsl,imx1-i2c"; | 435 | compatible = "fsl,imx53-i2c", "fsl,imx21-i2c"; |
436 | reg = <0x53fec000 0x4000>; | 436 | reg = <0x53fec000 0x4000>; |
437 | interrupts = <64>; | 437 | interrupts = <64>; |
438 | status = "disabled"; | 438 | status = "disabled"; |
@@ -488,7 +488,7 @@ | |||
488 | i2c@63fc4000 { /* I2C2 */ | 488 | i2c@63fc4000 { /* I2C2 */ |
489 | #address-cells = <1>; | 489 | #address-cells = <1>; |
490 | #size-cells = <0>; | 490 | #size-cells = <0>; |
491 | compatible = "fsl,imx53-i2c", "fsl,imx1-i2c"; | 491 | compatible = "fsl,imx53-i2c", "fsl,imx21-i2c"; |
492 | reg = <0x63fc4000 0x4000>; | 492 | reg = <0x63fc4000 0x4000>; |
493 | interrupts = <63>; | 493 | interrupts = <63>; |
494 | status = "disabled"; | 494 | status = "disabled"; |
@@ -497,7 +497,7 @@ | |||
497 | i2c@63fc8000 { /* I2C1 */ | 497 | i2c@63fc8000 { /* I2C1 */ |
498 | #address-cells = <1>; | 498 | #address-cells = <1>; |
499 | #size-cells = <0>; | 499 | #size-cells = <0>; |
500 | compatible = "fsl,imx53-i2c", "fsl,imx1-i2c"; | 500 | compatible = "fsl,imx53-i2c", "fsl,imx21-i2c"; |
501 | reg = <0x63fc8000 0x4000>; | 501 | reg = <0x63fc8000 0x4000>; |
502 | interrupts = <62>; | 502 | interrupts = <62>; |
503 | status = "disabled"; | 503 | status = "disabled"; |
diff --git a/arch/arm/boot/dts/imx6q.dtsi b/arch/arm/boot/dts/imx6q.dtsi index f3990b04fecf..f604a44a5c66 100644 --- a/arch/arm/boot/dts/imx6q.dtsi +++ b/arch/arm/boot/dts/imx6q.dtsi | |||
@@ -882,7 +882,7 @@ | |||
882 | i2c@021a0000 { /* I2C1 */ | 882 | i2c@021a0000 { /* I2C1 */ |
883 | #address-cells = <1>; | 883 | #address-cells = <1>; |
884 | #size-cells = <0>; | 884 | #size-cells = <0>; |
885 | compatible = "fsl,imx6q-i2c", "fsl,imx1-i2c"; | 885 | compatible = "fsl,imx6q-i2c", "fsl,imx21-i2c"; |
886 | reg = <0x021a0000 0x4000>; | 886 | reg = <0x021a0000 0x4000>; |
887 | interrupts = <0 36 0x04>; | 887 | interrupts = <0 36 0x04>; |
888 | clocks = <&clks 125>; | 888 | clocks = <&clks 125>; |
@@ -892,7 +892,7 @@ | |||
892 | i2c@021a4000 { /* I2C2 */ | 892 | i2c@021a4000 { /* I2C2 */ |
893 | #address-cells = <1>; | 893 | #address-cells = <1>; |
894 | #size-cells = <0>; | 894 | #size-cells = <0>; |
895 | compatible = "fsl,imx6q-i2c", "fsl,imx1-i2c"; | 895 | compatible = "fsl,imx6q-i2c", "fsl,imx21-i2c"; |
896 | reg = <0x021a4000 0x4000>; | 896 | reg = <0x021a4000 0x4000>; |
897 | interrupts = <0 37 0x04>; | 897 | interrupts = <0 37 0x04>; |
898 | clocks = <&clks 126>; | 898 | clocks = <&clks 126>; |
@@ -902,7 +902,7 @@ | |||
902 | i2c@021a8000 { /* I2C3 */ | 902 | i2c@021a8000 { /* I2C3 */ |
903 | #address-cells = <1>; | 903 | #address-cells = <1>; |
904 | #size-cells = <0>; | 904 | #size-cells = <0>; |
905 | compatible = "fsl,imx6q-i2c", "fsl,imx1-i2c"; | 905 | compatible = "fsl,imx6q-i2c", "fsl,imx21-i2c"; |
906 | reg = <0x021a8000 0x4000>; | 906 | reg = <0x021a8000 0x4000>; |
907 | interrupts = <0 38 0x04>; | 907 | interrupts = <0 38 0x04>; |
908 | clocks = <&clks 127>; | 908 | clocks = <&clks 127>; |
diff --git a/arch/arm/configs/imx_v4_v5_defconfig b/arch/arm/configs/imx_v4_v5_defconfig index 78ed575feb1a..f71302c3ac33 100644 --- a/arch/arm/configs/imx_v4_v5_defconfig +++ b/arch/arm/configs/imx_v4_v5_defconfig | |||
@@ -18,7 +18,9 @@ CONFIG_MODULE_UNLOAD=y | |||
18 | # CONFIG_IOSCHED_DEADLINE is not set | 18 | # CONFIG_IOSCHED_DEADLINE is not set |
19 | # CONFIG_IOSCHED_CFQ is not set | 19 | # CONFIG_IOSCHED_CFQ is not set |
20 | CONFIG_ARCH_MXC=y | 20 | CONFIG_ARCH_MXC=y |
21 | CONFIG_ARCH_IMX_V4_V5=y | 21 | CONFIG_ARCH_MULTI_V4T=y |
22 | CONFIG_ARCH_MULTI_V5=y | ||
23 | # CONFIG_ARCH_MULTI_V7 is not set | ||
22 | CONFIG_ARCH_MX1ADS=y | 24 | CONFIG_ARCH_MX1ADS=y |
23 | CONFIG_MACH_SCB9328=y | 25 | CONFIG_MACH_SCB9328=y |
24 | CONFIG_MACH_APF9328=y | 26 | CONFIG_MACH_APF9328=y |
diff --git a/arch/arm/configs/imx_v6_v7_defconfig b/arch/arm/configs/imx_v6_v7_defconfig index 394ded624e37..44f117aab52c 100644 --- a/arch/arm/configs/imx_v6_v7_defconfig +++ b/arch/arm/configs/imx_v6_v7_defconfig | |||
@@ -17,6 +17,8 @@ CONFIG_MODVERSIONS=y | |||
17 | CONFIG_MODULE_SRCVERSION_ALL=y | 17 | CONFIG_MODULE_SRCVERSION_ALL=y |
18 | # CONFIG_BLK_DEV_BSG is not set | 18 | # CONFIG_BLK_DEV_BSG is not set |
19 | CONFIG_ARCH_MXC=y | 19 | CONFIG_ARCH_MXC=y |
20 | CONFIG_ARCH_MULTI_V6=y | ||
21 | CONFIG_ARCH_MULTI_V7=y | ||
20 | CONFIG_MACH_MX31LILLY=y | 22 | CONFIG_MACH_MX31LILLY=y |
21 | CONFIG_MACH_MX31LITE=y | 23 | CONFIG_MACH_MX31LITE=y |
22 | CONFIG_MACH_PCM037=y | 24 | CONFIG_MACH_PCM037=y |
diff --git a/arch/arm/include/asm/io.h b/arch/arm/include/asm/io.h index 35c1ed89b936..42f042ee4ada 100644 --- a/arch/arm/include/asm/io.h +++ b/arch/arm/include/asm/io.h | |||
@@ -64,7 +64,7 @@ extern void __raw_readsl(const void __iomem *addr, void *data, int longlen); | |||
64 | static inline void __raw_writew(u16 val, volatile void __iomem *addr) | 64 | static inline void __raw_writew(u16 val, volatile void __iomem *addr) |
65 | { | 65 | { |
66 | asm volatile("strh %1, %0" | 66 | asm volatile("strh %1, %0" |
67 | : "+Qo" (*(volatile u16 __force *)addr) | 67 | : "+Q" (*(volatile u16 __force *)addr) |
68 | : "r" (val)); | 68 | : "r" (val)); |
69 | } | 69 | } |
70 | 70 | ||
@@ -72,7 +72,7 @@ static inline u16 __raw_readw(const volatile void __iomem *addr) | |||
72 | { | 72 | { |
73 | u16 val; | 73 | u16 val; |
74 | asm volatile("ldrh %1, %0" | 74 | asm volatile("ldrh %1, %0" |
75 | : "+Qo" (*(volatile u16 __force *)addr), | 75 | : "+Q" (*(volatile u16 __force *)addr), |
76 | "=r" (val)); | 76 | "=r" (val)); |
77 | return val; | 77 | return val; |
78 | } | 78 | } |
diff --git a/arch/arm/include/asm/sched_clock.h b/arch/arm/include/asm/sched_clock.h index 05b8e82ec9f5..e3f757263438 100644 --- a/arch/arm/include/asm/sched_clock.h +++ b/arch/arm/include/asm/sched_clock.h | |||
@@ -10,7 +10,5 @@ | |||
10 | 10 | ||
11 | extern void sched_clock_postinit(void); | 11 | extern void sched_clock_postinit(void); |
12 | extern void setup_sched_clock(u32 (*read)(void), int bits, unsigned long rate); | 12 | extern void setup_sched_clock(u32 (*read)(void), int bits, unsigned long rate); |
13 | extern void setup_sched_clock_needs_suspend(u32 (*read)(void), int bits, | ||
14 | unsigned long rate); | ||
15 | 13 | ||
16 | #endif | 14 | #endif |
diff --git a/arch/arm/include/asm/vfpmacros.h b/arch/arm/include/asm/vfpmacros.h index 6a6f1e485f41..301c1db3e99b 100644 --- a/arch/arm/include/asm/vfpmacros.h +++ b/arch/arm/include/asm/vfpmacros.h | |||
@@ -27,9 +27,9 @@ | |||
27 | #if __LINUX_ARM_ARCH__ <= 6 | 27 | #if __LINUX_ARM_ARCH__ <= 6 |
28 | ldr \tmp, =elf_hwcap @ may not have MVFR regs | 28 | ldr \tmp, =elf_hwcap @ may not have MVFR regs |
29 | ldr \tmp, [\tmp, #0] | 29 | ldr \tmp, [\tmp, #0] |
30 | tst \tmp, #HWCAP_VFPv3D16 | 30 | tst \tmp, #HWCAP_VFPD32 |
31 | ldceql p11, cr0, [\base],#32*4 @ FLDMIAD \base!, {d16-d31} | 31 | ldcnel p11, cr0, [\base],#32*4 @ FLDMIAD \base!, {d16-d31} |
32 | addne \base, \base, #32*4 @ step over unused register space | 32 | addeq \base, \base, #32*4 @ step over unused register space |
33 | #else | 33 | #else |
34 | VFPFMRX \tmp, MVFR0 @ Media and VFP Feature Register 0 | 34 | VFPFMRX \tmp, MVFR0 @ Media and VFP Feature Register 0 |
35 | and \tmp, \tmp, #MVFR0_A_SIMD_MASK @ A_SIMD field | 35 | and \tmp, \tmp, #MVFR0_A_SIMD_MASK @ A_SIMD field |
@@ -51,9 +51,9 @@ | |||
51 | #if __LINUX_ARM_ARCH__ <= 6 | 51 | #if __LINUX_ARM_ARCH__ <= 6 |
52 | ldr \tmp, =elf_hwcap @ may not have MVFR regs | 52 | ldr \tmp, =elf_hwcap @ may not have MVFR regs |
53 | ldr \tmp, [\tmp, #0] | 53 | ldr \tmp, [\tmp, #0] |
54 | tst \tmp, #HWCAP_VFPv3D16 | 54 | tst \tmp, #HWCAP_VFPD32 |
55 | stceql p11, cr0, [\base],#32*4 @ FSTMIAD \base!, {d16-d31} | 55 | stcnel p11, cr0, [\base],#32*4 @ FSTMIAD \base!, {d16-d31} |
56 | addne \base, \base, #32*4 @ step over unused register space | 56 | addeq \base, \base, #32*4 @ step over unused register space |
57 | #else | 57 | #else |
58 | VFPFMRX \tmp, MVFR0 @ Media and VFP Feature Register 0 | 58 | VFPFMRX \tmp, MVFR0 @ Media and VFP Feature Register 0 |
59 | and \tmp, \tmp, #MVFR0_A_SIMD_MASK @ A_SIMD field | 59 | and \tmp, \tmp, #MVFR0_A_SIMD_MASK @ A_SIMD field |
diff --git a/arch/arm/plat-mxc/include/mach/debug-macro.S b/arch/arm/include/debug/imx.S index 761e45f9456f..0b65d792f664 100644 --- a/arch/arm/plat-mxc/include/mach/debug-macro.S +++ b/arch/arm/include/debug/imx.S | |||
@@ -10,27 +10,38 @@ | |||
10 | * published by the Free Software Foundation. | 10 | * published by the Free Software Foundation. |
11 | * | 11 | * |
12 | */ | 12 | */ |
13 | #include <mach/hardware.h> | ||
14 | |||
15 | #ifdef CONFIG_DEBUG_IMX1_UART | 13 | #ifdef CONFIG_DEBUG_IMX1_UART |
16 | #define UART_PADDR MX1_UART1_BASE_ADDR | 14 | #define UART_PADDR 0x00206000 |
17 | #elif defined (CONFIG_DEBUG_IMX25_UART) | 15 | #elif defined (CONFIG_DEBUG_IMX25_UART) |
18 | #define UART_PADDR MX25_UART1_BASE_ADDR | 16 | #define UART_PADDR 0x43f90000 |
19 | #elif defined (CONFIG_DEBUG_IMX21_IMX27_UART) | 17 | #elif defined (CONFIG_DEBUG_IMX21_IMX27_UART) |
20 | #define UART_PADDR MX2x_UART1_BASE_ADDR | 18 | #define UART_PADDR 0x1000a000 |
21 | #elif defined (CONFIG_DEBUG_IMX31_IMX35_UART) | 19 | #elif defined (CONFIG_DEBUG_IMX31_IMX35_UART) |
22 | #define UART_PADDR MX3x_UART1_BASE_ADDR | 20 | #define UART_PADDR 0x43f90000 |
23 | #elif defined (CONFIG_DEBUG_IMX51_UART) | 21 | #elif defined (CONFIG_DEBUG_IMX51_UART) |
24 | #define UART_PADDR MX51_UART1_BASE_ADDR | 22 | #define UART_PADDR 0x73fbc000 |
25 | #elif defined (CONFIG_DEBUG_IMX50_IMX53_UART) | 23 | #elif defined (CONFIG_DEBUG_IMX50_IMX53_UART) |
26 | #define UART_PADDR MX53_UART1_BASE_ADDR | 24 | #define UART_PADDR 0x53fbc000 |
27 | #elif defined (CONFIG_DEBUG_IMX6Q_UART2) | 25 | #elif defined (CONFIG_DEBUG_IMX6Q_UART2) |
28 | #define UART_PADDR MX6Q_UART2_BASE_ADDR | 26 | #define UART_PADDR 0x021e8000 |
29 | #elif defined (CONFIG_DEBUG_IMX6Q_UART4) | 27 | #elif defined (CONFIG_DEBUG_IMX6Q_UART4) |
30 | #define UART_PADDR MX6Q_UART4_BASE_ADDR | 28 | #define UART_PADDR 0x021f0000 |
31 | #endif | 29 | #endif |
32 | 30 | ||
33 | #define UART_VADDR IMX_IO_ADDRESS(UART_PADDR) | 31 | /* |
32 | * FIXME: This is a copy of IMX_IO_P2V in hardware.h, and needs to | ||
33 | * stay sync with that. It's hard to maintain, and should be fixed | ||
34 | * globally for multi-platform build to use a fixed virtual address | ||
35 | * for low-level debug uart port across platforms. | ||
36 | */ | ||
37 | #define IMX_IO_P2V(x) ( \ | ||
38 | (((x) & 0x80000000) >> 7) | \ | ||
39 | (0xf4000000 + \ | ||
40 | (((x) & 0x50000000) >> 6) + \ | ||
41 | (((x) & 0x0b000000) >> 4) + \ | ||
42 | (((x) & 0x000fffff)))) | ||
43 | |||
44 | #define UART_VADDR IMX_IO_P2V(UART_PADDR) | ||
34 | 45 | ||
35 | .macro addruart, rp, rv, tmp | 46 | .macro addruart, rp, rv, tmp |
36 | ldr \rp, =UART_PADDR @ physical | 47 | ldr \rp, =UART_PADDR @ physical |
diff --git a/arch/arm/include/uapi/asm/hwcap.h b/arch/arm/include/uapi/asm/hwcap.h index f254f6503cce..3688fd15a32d 100644 --- a/arch/arm/include/uapi/asm/hwcap.h +++ b/arch/arm/include/uapi/asm/hwcap.h | |||
@@ -18,11 +18,12 @@ | |||
18 | #define HWCAP_THUMBEE (1 << 11) | 18 | #define HWCAP_THUMBEE (1 << 11) |
19 | #define HWCAP_NEON (1 << 12) | 19 | #define HWCAP_NEON (1 << 12) |
20 | #define HWCAP_VFPv3 (1 << 13) | 20 | #define HWCAP_VFPv3 (1 << 13) |
21 | #define HWCAP_VFPv3D16 (1 << 14) | 21 | #define HWCAP_VFPv3D16 (1 << 14) /* also set for VFPv4-D16 */ |
22 | #define HWCAP_TLS (1 << 15) | 22 | #define HWCAP_TLS (1 << 15) |
23 | #define HWCAP_VFPv4 (1 << 16) | 23 | #define HWCAP_VFPv4 (1 << 16) |
24 | #define HWCAP_IDIVA (1 << 17) | 24 | #define HWCAP_IDIVA (1 << 17) |
25 | #define HWCAP_IDIVT (1 << 18) | 25 | #define HWCAP_IDIVT (1 << 18) |
26 | #define HWCAP_VFPD32 (1 << 19) /* set if VFP has 32 regs (not 16) */ | ||
26 | #define HWCAP_IDIV (HWCAP_IDIVA | HWCAP_IDIVT) | 27 | #define HWCAP_IDIV (HWCAP_IDIVA | HWCAP_IDIVT) |
27 | 28 | ||
28 | 29 | ||
diff --git a/arch/arm/kernel/sched_clock.c b/arch/arm/kernel/sched_clock.c index e21bac20d90d..fc6692e2b603 100644 --- a/arch/arm/kernel/sched_clock.c +++ b/arch/arm/kernel/sched_clock.c | |||
@@ -107,13 +107,6 @@ static void sched_clock_poll(unsigned long wrap_ticks) | |||
107 | update_sched_clock(); | 107 | update_sched_clock(); |
108 | } | 108 | } |
109 | 109 | ||
110 | void __init setup_sched_clock_needs_suspend(u32 (*read)(void), int bits, | ||
111 | unsigned long rate) | ||
112 | { | ||
113 | setup_sched_clock(read, bits, rate); | ||
114 | cd.needs_suspend = true; | ||
115 | } | ||
116 | |||
117 | void __init setup_sched_clock(u32 (*read)(void), int bits, unsigned long rate) | 110 | void __init setup_sched_clock(u32 (*read)(void), int bits, unsigned long rate) |
118 | { | 111 | { |
119 | unsigned long r, w; | 112 | unsigned long r, w; |
@@ -189,18 +182,15 @@ void __init sched_clock_postinit(void) | |||
189 | static int sched_clock_suspend(void) | 182 | static int sched_clock_suspend(void) |
190 | { | 183 | { |
191 | sched_clock_poll(sched_clock_timer.data); | 184 | sched_clock_poll(sched_clock_timer.data); |
192 | if (cd.needs_suspend) | 185 | cd.suspended = true; |
193 | cd.suspended = true; | ||
194 | return 0; | 186 | return 0; |
195 | } | 187 | } |
196 | 188 | ||
197 | static void sched_clock_resume(void) | 189 | static void sched_clock_resume(void) |
198 | { | 190 | { |
199 | if (cd.needs_suspend) { | 191 | cd.epoch_cyc = read_sched_clock(); |
200 | cd.epoch_cyc = read_sched_clock(); | 192 | cd.epoch_cyc_copy = cd.epoch_cyc; |
201 | cd.epoch_cyc_copy = cd.epoch_cyc; | 193 | cd.suspended = false; |
202 | cd.suspended = false; | ||
203 | } | ||
204 | } | 194 | } |
205 | 195 | ||
206 | static struct syscore_ops sched_clock_ops = { | 196 | static struct syscore_ops sched_clock_ops = { |
diff --git a/arch/arm/plat-mxc/3ds_debugboard.c b/arch/arm/mach-imx/3ds_debugboard.c index 5c10ad05df74..134377352966 100644 --- a/arch/arm/plat-mxc/3ds_debugboard.c +++ b/arch/arm/mach-imx/3ds_debugboard.c | |||
@@ -21,7 +21,7 @@ | |||
21 | #include <linux/regulator/machine.h> | 21 | #include <linux/regulator/machine.h> |
22 | #include <linux/regulator/fixed.h> | 22 | #include <linux/regulator/fixed.h> |
23 | 23 | ||
24 | #include <mach/hardware.h> | 24 | #include "hardware.h" |
25 | 25 | ||
26 | /* LAN9217 ethernet base address */ | 26 | /* LAN9217 ethernet base address */ |
27 | #define LAN9217_BASE_ADDR(n) (n + 0x0) | 27 | #define LAN9217_BASE_ADDR(n) (n + 0x0) |
diff --git a/arch/arm/plat-mxc/include/mach/3ds_debugboard.h b/arch/arm/mach-imx/3ds_debugboard.h index 9fd6cb3f8fad..9fd6cb3f8fad 100644 --- a/arch/arm/plat-mxc/include/mach/3ds_debugboard.h +++ b/arch/arm/mach-imx/3ds_debugboard.h | |||
diff --git a/arch/arm/mach-imx/Kconfig b/arch/arm/mach-imx/Kconfig index 8d276584650e..ff702c3f35b7 100644 --- a/arch/arm/mach-imx/Kconfig +++ b/arch/arm/mach-imx/Kconfig | |||
@@ -1,3 +1,70 @@ | |||
1 | config ARCH_MXC | ||
2 | bool "Freescale i.MX family" if ARCH_MULTI_V4_V5 || ARCH_MULTI_V6_V7 | ||
3 | select ARCH_REQUIRE_GPIOLIB | ||
4 | select ARM_PATCH_PHYS_VIRT | ||
5 | select AUTO_ZRELADDR if !ZBOOT_ROM | ||
6 | select CLKDEV_LOOKUP | ||
7 | select CLKSRC_MMIO | ||
8 | select GENERIC_CLOCKEVENTS | ||
9 | select GENERIC_IRQ_CHIP | ||
10 | select MULTI_IRQ_HANDLER | ||
11 | select SPARSE_IRQ | ||
12 | select USE_OF | ||
13 | help | ||
14 | Support for Freescale MXC/iMX-based family of processors | ||
15 | |||
16 | menu "Freescale i.MX support" | ||
17 | depends on ARCH_MXC | ||
18 | |||
19 | config MXC_IRQ_PRIOR | ||
20 | bool "Use IRQ priority" | ||
21 | help | ||
22 | Select this if you want to use prioritized IRQ handling. | ||
23 | This feature prevents higher priority ISR to be interrupted | ||
24 | by lower priority IRQ even IRQF_DISABLED flag is not set. | ||
25 | This may be useful in embedded applications, where are strong | ||
26 | requirements for timing. | ||
27 | Say N here, unless you have a specialized requirement. | ||
28 | |||
29 | config MXC_TZIC | ||
30 | bool | ||
31 | |||
32 | config MXC_AVIC | ||
33 | bool | ||
34 | |||
35 | config MXC_DEBUG_BOARD | ||
36 | bool "Enable MXC debug board(for 3-stack)" | ||
37 | help | ||
38 | The debug board is an integral part of the MXC 3-stack(PDK) | ||
39 | platforms, it can be attached or removed from the peripheral | ||
40 | board. On debug board, several debug devices(ethernet, UART, | ||
41 | buttons, LEDs and JTAG) are implemented. Between the MCU and | ||
42 | these devices, a CPLD is added as a bridge which performs | ||
43 | data/address de-multiplexing and decode, signal level shift, | ||
44 | interrupt control and various board functions. | ||
45 | |||
46 | config HAVE_EPIT | ||
47 | bool | ||
48 | |||
49 | config MXC_USE_EPIT | ||
50 | bool "Use EPIT instead of GPT" | ||
51 | depends on HAVE_EPIT | ||
52 | help | ||
53 | Use EPIT as the system timer on systems that have it. Normally you | ||
54 | don't have a reason to do so as the EPIT has the same features and | ||
55 | uses the same clocks as the GPT. Anyway, on some systems the GPT | ||
56 | may be in use for other purposes. | ||
57 | |||
58 | config MXC_ULPI | ||
59 | bool | ||
60 | |||
61 | config ARCH_HAS_RNGA | ||
62 | bool | ||
63 | |||
64 | config IRAM_ALLOC | ||
65 | bool | ||
66 | select GENERIC_ALLOCATOR | ||
67 | |||
1 | config HAVE_IMX_GPC | 68 | config HAVE_IMX_GPC |
2 | bool | 69 | bool |
3 | 70 | ||
@@ -5,6 +72,12 @@ config HAVE_IMX_MMDC | |||
5 | bool | 72 | bool |
6 | 73 | ||
7 | config HAVE_IMX_SRC | 74 | config HAVE_IMX_SRC |
75 | def_bool y if SMP | ||
76 | |||
77 | config IMX_HAVE_IOMUX_V1 | ||
78 | bool | ||
79 | |||
80 | config ARCH_MXC_IOMUX_V3 | ||
8 | bool | 81 | bool |
9 | 82 | ||
10 | config ARCH_MX1 | 83 | config ARCH_MX1 |
@@ -104,7 +177,7 @@ config SOC_IMX51 | |||
104 | select PINCTRL_IMX51 | 177 | select PINCTRL_IMX51 |
105 | select SOC_IMX5 | 178 | select SOC_IMX5 |
106 | 179 | ||
107 | if ARCH_IMX_V4_V5 | 180 | if ARCH_MULTI_V4T |
108 | 181 | ||
109 | comment "MX1 platforms:" | 182 | comment "MX1 platforms:" |
110 | config MACH_MXLADS | 183 | config MACH_MXLADS |
@@ -133,6 +206,10 @@ config MACH_APF9328 | |||
133 | help | 206 | help |
134 | Say Yes here if you are using the Armadeus APF9328 development board | 207 | Say Yes here if you are using the Armadeus APF9328 development board |
135 | 208 | ||
209 | endif | ||
210 | |||
211 | if ARCH_MULTI_V5 | ||
212 | |||
136 | comment "MX21 platforms:" | 213 | comment "MX21 platforms:" |
137 | 214 | ||
138 | config MACH_MX21ADS | 215 | config MACH_MX21ADS |
@@ -195,6 +272,13 @@ config MACH_EUKREA_MBIMXSD25_BASEBOARD | |||
195 | 272 | ||
196 | endchoice | 273 | endchoice |
197 | 274 | ||
275 | config MACH_IMX25_DT | ||
276 | bool "Support i.MX25 platforms from device tree" | ||
277 | select SOC_IMX25 | ||
278 | help | ||
279 | Include support for Freescale i.MX25 based platforms | ||
280 | using the device tree for discovery | ||
281 | |||
198 | comment "MX27 platforms:" | 282 | comment "MX27 platforms:" |
199 | 283 | ||
200 | config MACH_MX27ADS | 284 | config MACH_MX27ADS |
@@ -384,7 +468,7 @@ config MACH_IMX27_DT | |||
384 | 468 | ||
385 | endif | 469 | endif |
386 | 470 | ||
387 | if ARCH_IMX_V6_V7 | 471 | if ARCH_MULTI_V6 |
388 | 472 | ||
389 | comment "MX31 platforms:" | 473 | comment "MX31 platforms:" |
390 | 474 | ||
@@ -649,6 +733,10 @@ config MACH_VPR200 | |||
649 | Include support for VPR200 platform. This includes specific | 733 | Include support for VPR200 platform. This includes specific |
650 | configurations for the board and its peripherals. | 734 | configurations for the board and its peripherals. |
651 | 735 | ||
736 | endif | ||
737 | |||
738 | if ARCH_MULTI_V7 | ||
739 | |||
652 | comment "i.MX5 platforms:" | 740 | comment "i.MX5 platforms:" |
653 | 741 | ||
654 | config MACH_MX50_RDP | 742 | config MACH_MX50_RDP |
@@ -756,7 +844,6 @@ config SOC_IMX6Q | |||
756 | select HAVE_CAN_FLEXCAN if CAN | 844 | select HAVE_CAN_FLEXCAN if CAN |
757 | select HAVE_IMX_GPC | 845 | select HAVE_IMX_GPC |
758 | select HAVE_IMX_MMDC | 846 | select HAVE_IMX_MMDC |
759 | select HAVE_IMX_SRC | ||
760 | select HAVE_SMP | 847 | select HAVE_SMP |
761 | select MFD_SYSCON | 848 | select MFD_SYSCON |
762 | select PINCTRL | 849 | select PINCTRL |
@@ -766,3 +853,7 @@ config SOC_IMX6Q | |||
766 | This enables support for Freescale i.MX6 Quad processor. | 853 | This enables support for Freescale i.MX6 Quad processor. |
767 | 854 | ||
768 | endif | 855 | endif |
856 | |||
857 | source "arch/arm/mach-imx/devices/Kconfig" | ||
858 | |||
859 | endmenu | ||
diff --git a/arch/arm/mach-imx/Makefile b/arch/arm/mach-imx/Makefile index 895754aeb4f3..0634b3152c24 100644 --- a/arch/arm/mach-imx/Makefile +++ b/arch/arm/mach-imx/Makefile | |||
@@ -1,3 +1,5 @@ | |||
1 | obj-y := time.o cpu.o system.o irq-common.o | ||
2 | |||
1 | obj-$(CONFIG_SOC_IMX1) += clk-imx1.o mm-imx1.o | 3 | obj-$(CONFIG_SOC_IMX1) += clk-imx1.o mm-imx1.o |
2 | obj-$(CONFIG_SOC_IMX21) += clk-imx21.o mm-imx21.o | 4 | obj-$(CONFIG_SOC_IMX21) += clk-imx21.o mm-imx21.o |
3 | 5 | ||
@@ -15,6 +17,24 @@ obj-$(CONFIG_SOC_IMX5) += cpu-imx5.o mm-imx5.o clk-imx51-imx53.o ehci-imx5.o $(i | |||
15 | obj-$(CONFIG_COMMON_CLK) += clk-pllv1.o clk-pllv2.o clk-pllv3.o clk-gate2.o \ | 17 | obj-$(CONFIG_COMMON_CLK) += clk-pllv1.o clk-pllv2.o clk-pllv3.o clk-gate2.o \ |
16 | clk-pfd.o clk-busy.o clk.o | 18 | clk-pfd.o clk-busy.o clk.o |
17 | 19 | ||
20 | obj-$(CONFIG_IMX_HAVE_IOMUX_V1) += iomux-v1.o | ||
21 | obj-$(CONFIG_ARCH_MXC_IOMUX_V3) += iomux-v3.o | ||
22 | |||
23 | obj-$(CONFIG_MXC_TZIC) += tzic.o | ||
24 | obj-$(CONFIG_MXC_AVIC) += avic.o | ||
25 | |||
26 | obj-$(CONFIG_IRAM_ALLOC) += iram_alloc.o | ||
27 | obj-$(CONFIG_MXC_ULPI) += ulpi.o | ||
28 | obj-$(CONFIG_MXC_USE_EPIT) += epit.o | ||
29 | obj-$(CONFIG_MXC_DEBUG_BOARD) += 3ds_debugboard.o | ||
30 | obj-$(CONFIG_CPU_FREQ_IMX) += cpufreq.o | ||
31 | obj-$(CONFIG_CPU_IDLE) += cpuidle.o | ||
32 | |||
33 | ifdef CONFIG_SND_IMX_SOC | ||
34 | obj-y += ssi-fiq.o | ||
35 | obj-y += ssi-fiq-ksym.o | ||
36 | endif | ||
37 | |||
18 | # Support for CMOS sensor interface | 38 | # Support for CMOS sensor interface |
19 | obj-$(CONFIG_MX1_VIDEO) += mx1-camera-fiq.o mx1-camera-fiq-ksym.o | 39 | obj-$(CONFIG_MX1_VIDEO) += mx1-camera-fiq.o mx1-camera-fiq-ksym.o |
20 | 40 | ||
@@ -30,6 +50,7 @@ obj-$(CONFIG_MACH_MX21ADS) += mach-mx21ads.o | |||
30 | obj-$(CONFIG_MACH_MX25_3DS) += mach-mx25_3ds.o | 50 | obj-$(CONFIG_MACH_MX25_3DS) += mach-mx25_3ds.o |
31 | obj-$(CONFIG_MACH_EUKREA_CPUIMX25SD) += mach-eukrea_cpuimx25.o | 51 | obj-$(CONFIG_MACH_EUKREA_CPUIMX25SD) += mach-eukrea_cpuimx25.o |
32 | obj-$(CONFIG_MACH_EUKREA_MBIMXSD25_BASEBOARD) += eukrea_mbimxsd25-baseboard.o | 52 | obj-$(CONFIG_MACH_EUKREA_MBIMXSD25_BASEBOARD) += eukrea_mbimxsd25-baseboard.o |
53 | obj-$(CONFIG_MACH_IMX25_DT) += imx25-dt.o | ||
33 | 54 | ||
34 | # i.MX27 based machines | 55 | # i.MX27 based machines |
35 | obj-$(CONFIG_MACH_MX27ADS) += mach-mx27ads.o | 56 | obj-$(CONFIG_MACH_MX27ADS) += mach-mx27ads.o |
@@ -89,3 +110,5 @@ obj-$(CONFIG_MACH_MX50_RDP) += mach-mx50_rdp.o | |||
89 | 110 | ||
90 | obj-$(CONFIG_MACH_IMX51_DT) += imx51-dt.o | 111 | obj-$(CONFIG_MACH_IMX51_DT) += imx51-dt.o |
91 | obj-$(CONFIG_SOC_IMX53) += mach-imx53.o | 112 | obj-$(CONFIG_SOC_IMX53) += mach-imx53.o |
113 | |||
114 | obj-y += devices/ | ||
diff --git a/arch/arm/plat-mxc/avic.c b/arch/arm/mach-imx/avic.c index cbd55c36def3..0eff23ed92b9 100644 --- a/arch/arm/plat-mxc/avic.c +++ b/arch/arm/mach-imx/avic.c | |||
@@ -22,12 +22,11 @@ | |||
22 | #include <linux/irqdomain.h> | 22 | #include <linux/irqdomain.h> |
23 | #include <linux/io.h> | 23 | #include <linux/io.h> |
24 | #include <linux/of.h> | 24 | #include <linux/of.h> |
25 | #include <mach/common.h> | ||
26 | #include <asm/mach/irq.h> | 25 | #include <asm/mach/irq.h> |
27 | #include <asm/exception.h> | 26 | #include <asm/exception.h> |
28 | #include <mach/hardware.h> | ||
29 | #include <mach/irqs.h> | ||
30 | 27 | ||
28 | #include "common.h" | ||
29 | #include "hardware.h" | ||
31 | #include "irq-common.h" | 30 | #include "irq-common.h" |
32 | 31 | ||
33 | #define AVIC_INTCNTL 0x00 /* int control reg */ | 32 | #define AVIC_INTCNTL 0x00 /* int control reg */ |
diff --git a/arch/arm/plat-mxc/include/mach/board-mx31lilly.h b/arch/arm/mach-imx/board-mx31lilly.h index 0df71bfefbb1..0df71bfefbb1 100644 --- a/arch/arm/plat-mxc/include/mach/board-mx31lilly.h +++ b/arch/arm/mach-imx/board-mx31lilly.h | |||
diff --git a/arch/arm/plat-mxc/include/mach/board-mx31lite.h b/arch/arm/mach-imx/board-mx31lite.h index c1ad0ae807cc..c1ad0ae807cc 100644 --- a/arch/arm/plat-mxc/include/mach/board-mx31lite.h +++ b/arch/arm/mach-imx/board-mx31lite.h | |||
diff --git a/arch/arm/plat-mxc/include/mach/board-mx31moboard.h b/arch/arm/mach-imx/board-mx31moboard.h index de14543891cf..de14543891cf 100644 --- a/arch/arm/plat-mxc/include/mach/board-mx31moboard.h +++ b/arch/arm/mach-imx/board-mx31moboard.h | |||
diff --git a/arch/arm/plat-mxc/include/mach/board-pcm038.h b/arch/arm/mach-imx/board-pcm038.h index 6f371e35753d..6f371e35753d 100644 --- a/arch/arm/plat-mxc/include/mach/board-pcm038.h +++ b/arch/arm/mach-imx/board-pcm038.h | |||
diff --git a/arch/arm/mach-imx/clk-imx1.c b/arch/arm/mach-imx/clk-imx1.c index 516ddee1948e..15f9d223cf0b 100644 --- a/arch/arm/mach-imx/clk-imx1.c +++ b/arch/arm/mach-imx/clk-imx1.c | |||
@@ -22,9 +22,9 @@ | |||
22 | #include <linux/clkdev.h> | 22 | #include <linux/clkdev.h> |
23 | #include <linux/err.h> | 23 | #include <linux/err.h> |
24 | 24 | ||
25 | #include <mach/hardware.h> | ||
26 | #include <mach/common.h> | ||
27 | #include "clk.h" | 25 | #include "clk.h" |
26 | #include "common.h" | ||
27 | #include "hardware.h" | ||
28 | 28 | ||
29 | /* CCM register addresses */ | 29 | /* CCM register addresses */ |
30 | #define IO_ADDR_CCM(off) (MX1_IO_ADDRESS(MX1_CCM_BASE_ADDR + (off))) | 30 | #define IO_ADDR_CCM(off) (MX1_IO_ADDRESS(MX1_CCM_BASE_ADDR + (off))) |
@@ -82,7 +82,8 @@ int __init mx1_clocks_init(unsigned long fref) | |||
82 | pr_err("imx1 clk %d: register failed with %ld\n", | 82 | pr_err("imx1 clk %d: register failed with %ld\n", |
83 | i, PTR_ERR(clk[i])); | 83 | i, PTR_ERR(clk[i])); |
84 | 84 | ||
85 | clk_register_clkdev(clk[dma_gate], "ahb", "imx-dma"); | 85 | clk_register_clkdev(clk[dma_gate], "ahb", "imx1-dma"); |
86 | clk_register_clkdev(clk[hclk], "ipg", "imx1-dma"); | ||
86 | clk_register_clkdev(clk[csi_gate], NULL, "mx1-camera.0"); | 87 | clk_register_clkdev(clk[csi_gate], NULL, "mx1-camera.0"); |
87 | clk_register_clkdev(clk[mma_gate], "mma", NULL); | 88 | clk_register_clkdev(clk[mma_gate], "mma", NULL); |
88 | clk_register_clkdev(clk[usbd_gate], NULL, "imx_udc.0"); | 89 | clk_register_clkdev(clk[usbd_gate], NULL, "imx_udc.0"); |
@@ -94,18 +95,18 @@ int __init mx1_clocks_init(unsigned long fref) | |||
94 | clk_register_clkdev(clk[hclk], "ipg", "imx1-uart.1"); | 95 | clk_register_clkdev(clk[hclk], "ipg", "imx1-uart.1"); |
95 | clk_register_clkdev(clk[per1], "per", "imx1-uart.2"); | 96 | clk_register_clkdev(clk[per1], "per", "imx1-uart.2"); |
96 | clk_register_clkdev(clk[hclk], "ipg", "imx1-uart.2"); | 97 | clk_register_clkdev(clk[hclk], "ipg", "imx1-uart.2"); |
97 | clk_register_clkdev(clk[hclk], NULL, "imx-i2c.0"); | 98 | clk_register_clkdev(clk[hclk], NULL, "imx1-i2c.0"); |
98 | clk_register_clkdev(clk[per2], "per", "imx1-cspi.0"); | 99 | clk_register_clkdev(clk[per2], "per", "imx1-cspi.0"); |
99 | clk_register_clkdev(clk[dummy], "ipg", "imx1-cspi.0"); | 100 | clk_register_clkdev(clk[dummy], "ipg", "imx1-cspi.0"); |
100 | clk_register_clkdev(clk[per2], "per", "imx1-cspi.1"); | 101 | clk_register_clkdev(clk[per2], "per", "imx1-cspi.1"); |
101 | clk_register_clkdev(clk[dummy], "ipg", "imx1-cspi.1"); | 102 | clk_register_clkdev(clk[dummy], "ipg", "imx1-cspi.1"); |
102 | clk_register_clkdev(clk[per2], NULL, "imx-mmc.0"); | 103 | clk_register_clkdev(clk[per2], NULL, "imx-mmc.0"); |
103 | clk_register_clkdev(clk[per2], "per", "imx-fb.0"); | 104 | clk_register_clkdev(clk[per2], "per", "imx1-fb.0"); |
104 | clk_register_clkdev(clk[dummy], "ipg", "imx-fb.0"); | 105 | clk_register_clkdev(clk[dummy], "ipg", "imx1-fb.0"); |
105 | clk_register_clkdev(clk[dummy], "ahb", "imx-fb.0"); | 106 | clk_register_clkdev(clk[dummy], "ahb", "imx1-fb.0"); |
106 | clk_register_clkdev(clk[hclk], "mshc", NULL); | 107 | clk_register_clkdev(clk[hclk], "mshc", NULL); |
107 | clk_register_clkdev(clk[per3], "ssi", NULL); | 108 | clk_register_clkdev(clk[per3], "ssi", NULL); |
108 | clk_register_clkdev(clk[clk32], NULL, "mxc_rtc.0"); | 109 | clk_register_clkdev(clk[clk32], NULL, "imx1-rtc.0"); |
109 | clk_register_clkdev(clk[clko], "clko", NULL); | 110 | clk_register_clkdev(clk[clko], "clko", NULL); |
110 | 111 | ||
111 | mxc_timer_init(MX1_IO_ADDRESS(MX1_TIM1_BASE_ADDR), MX1_TIM1_INT); | 112 | mxc_timer_init(MX1_IO_ADDRESS(MX1_TIM1_BASE_ADDR), MX1_TIM1_INT); |
diff --git a/arch/arm/mach-imx/clk-imx21.c b/arch/arm/mach-imx/clk-imx21.c index cf65148bc519..d7ed66091a2a 100644 --- a/arch/arm/mach-imx/clk-imx21.c +++ b/arch/arm/mach-imx/clk-imx21.c | |||
@@ -25,9 +25,9 @@ | |||
25 | #include <linux/module.h> | 25 | #include <linux/module.h> |
26 | #include <linux/err.h> | 26 | #include <linux/err.h> |
27 | 27 | ||
28 | #include <mach/hardware.h> | ||
29 | #include <mach/common.h> | ||
30 | #include "clk.h" | 28 | #include "clk.h" |
29 | #include "common.h" | ||
30 | #include "hardware.h" | ||
31 | 31 | ||
32 | #define IO_ADDR_CCM(off) (MX21_IO_ADDRESS(MX21_CCM_BASE_ADDR + (off))) | 32 | #define IO_ADDR_CCM(off) (MX21_IO_ADDRESS(MX21_CCM_BASE_ADDR + (off))) |
33 | 33 | ||
@@ -156,16 +156,16 @@ int __init mx21_clocks_init(unsigned long lref, unsigned long href) | |||
156 | clk_register_clkdev(clk[cspi2_ipg_gate], "ipg", "imx21-cspi.1"); | 156 | clk_register_clkdev(clk[cspi2_ipg_gate], "ipg", "imx21-cspi.1"); |
157 | clk_register_clkdev(clk[per2], "per", "imx21-cspi.2"); | 157 | clk_register_clkdev(clk[per2], "per", "imx21-cspi.2"); |
158 | clk_register_clkdev(clk[cspi3_ipg_gate], "ipg", "imx21-cspi.2"); | 158 | clk_register_clkdev(clk[cspi3_ipg_gate], "ipg", "imx21-cspi.2"); |
159 | clk_register_clkdev(clk[per3], "per", "imx-fb.0"); | 159 | clk_register_clkdev(clk[per3], "per", "imx21-fb.0"); |
160 | clk_register_clkdev(clk[lcdc_ipg_gate], "ipg", "imx-fb.0"); | 160 | clk_register_clkdev(clk[lcdc_ipg_gate], "ipg", "imx21-fb.0"); |
161 | clk_register_clkdev(clk[lcdc_hclk_gate], "ahb", "imx-fb.0"); | 161 | clk_register_clkdev(clk[lcdc_hclk_gate], "ahb", "imx21-fb.0"); |
162 | clk_register_clkdev(clk[usb_gate], "per", "imx21-hcd.0"); | 162 | clk_register_clkdev(clk[usb_gate], "per", "imx21-hcd.0"); |
163 | clk_register_clkdev(clk[usb_hclk_gate], "ahb", "imx21-hcd.0"); | 163 | clk_register_clkdev(clk[usb_hclk_gate], "ahb", "imx21-hcd.0"); |
164 | clk_register_clkdev(clk[nfc_gate], NULL, "mxc_nand.0"); | 164 | clk_register_clkdev(clk[nfc_gate], NULL, "imx21-nand.0"); |
165 | clk_register_clkdev(clk[dma_hclk_gate], "ahb", "imx-dma"); | 165 | clk_register_clkdev(clk[dma_hclk_gate], "ahb", "imx21-dma"); |
166 | clk_register_clkdev(clk[dma_gate], "ipg", "imx-dma"); | 166 | clk_register_clkdev(clk[dma_gate], "ipg", "imx21-dma"); |
167 | clk_register_clkdev(clk[wdog_gate], NULL, "imx2-wdt.0"); | 167 | clk_register_clkdev(clk[wdog_gate], NULL, "imx2-wdt.0"); |
168 | clk_register_clkdev(clk[i2c_gate], NULL, "imx-i2c.0"); | 168 | clk_register_clkdev(clk[i2c_gate], NULL, "imx21-i2c.0"); |
169 | clk_register_clkdev(clk[kpp_gate], NULL, "mxc-keypad"); | 169 | clk_register_clkdev(clk[kpp_gate], NULL, "mxc-keypad"); |
170 | clk_register_clkdev(clk[owire_gate], NULL, "mxc_w1.0"); | 170 | clk_register_clkdev(clk[owire_gate], NULL, "mxc_w1.0"); |
171 | clk_register_clkdev(clk[brom_gate], "brom", NULL); | 171 | clk_register_clkdev(clk[brom_gate], "brom", NULL); |
diff --git a/arch/arm/mach-imx/clk-imx25.c b/arch/arm/mach-imx/clk-imx25.c index 01e2f843bf2e..b197aa73dc4b 100644 --- a/arch/arm/mach-imx/clk-imx25.c +++ b/arch/arm/mach-imx/clk-imx25.c | |||
@@ -23,11 +23,14 @@ | |||
23 | #include <linux/io.h> | 23 | #include <linux/io.h> |
24 | #include <linux/clkdev.h> | 24 | #include <linux/clkdev.h> |
25 | #include <linux/err.h> | 25 | #include <linux/err.h> |
26 | #include <linux/of.h> | ||
27 | #include <linux/of_address.h> | ||
28 | #include <linux/of_irq.h> | ||
26 | 29 | ||
27 | #include <mach/hardware.h> | ||
28 | #include <mach/common.h> | ||
29 | #include <mach/mx25.h> | ||
30 | #include "clk.h" | 30 | #include "clk.h" |
31 | #include "common.h" | ||
32 | #include "hardware.h" | ||
33 | #include "mx25.h" | ||
31 | 34 | ||
32 | #define CRM_BASE MX25_IO_ADDRESS(MX25_CRM_BASE_ADDR) | 35 | #define CRM_BASE MX25_IO_ADDRESS(MX25_CRM_BASE_ADDR) |
33 | 36 | ||
@@ -55,6 +58,8 @@ | |||
55 | 58 | ||
56 | #define ccm(x) (CRM_BASE + (x)) | 59 | #define ccm(x) (CRM_BASE + (x)) |
57 | 60 | ||
61 | static struct clk_onecell_data clk_data; | ||
62 | |||
58 | static const char *cpu_sel_clks[] = { "mpll", "mpll_cpu_3_4", }; | 63 | static const char *cpu_sel_clks[] = { "mpll", "mpll_cpu_3_4", }; |
59 | static const char *per_sel_clks[] = { "ahb", "upll", }; | 64 | static const char *per_sel_clks[] = { "ahb", "upll", }; |
60 | 65 | ||
@@ -64,24 +69,30 @@ enum mx25_clks { | |||
64 | per7_sel, per8_sel, per9_sel, per10_sel, per11_sel, per12_sel, | 69 | per7_sel, per8_sel, per9_sel, per10_sel, per11_sel, per12_sel, |
65 | per13_sel, per14_sel, per15_sel, per0, per1, per2, per3, per4, per5, | 70 | per13_sel, per14_sel, per15_sel, per0, per1, per2, per3, per4, per5, |
66 | per6, per7, per8, per9, per10, per11, per12, per13, per14, per15, | 71 | per6, per7, per8, per9, per10, per11, per12, per13, per14, per15, |
67 | csi_ipg_per, esdhc1_ipg_per, esdhc2_ipg_per, gpt_ipg_per, i2c_ipg_per, | 72 | csi_ipg_per, epit_ipg_per, esai_ipg_per, esdhc1_ipg_per, esdhc2_ipg_per, |
68 | lcdc_ipg_per, nfc_ipg_per, ssi1_ipg_per, ssi2_ipg_per, uart_ipg_per, | 73 | gpt_ipg_per, i2c_ipg_per, lcdc_ipg_per, nfc_ipg_per, owire_ipg_per, |
69 | csi_ahb, esdhc1_ahb, esdhc2_ahb, fec_ahb, lcdc_ahb, sdma_ahb, | 74 | pwm_ipg_per, sim1_ipg_per, sim2_ipg_per, ssi1_ipg_per, ssi2_ipg_per, |
70 | usbotg_ahb, can1_ipg, can2_ipg, csi_ipg, cspi1_ipg, cspi2_ipg, | 75 | uart_ipg_per, ata_ahb, reserved1, csi_ahb, emi_ahb, esai_ahb, esdhc1_ahb, |
71 | cspi3_ipg, dryice_ipg, esdhc1_ipg, esdhc2_ipg, fec_ipg, iim_ipg, | 76 | esdhc2_ahb, fec_ahb, lcdc_ahb, rtic_ahb, sdma_ahb, slcdc_ahb, usbotg_ahb, |
72 | kpp_ipg, lcdc_ipg, pwm1_ipg, pwm2_ipg, pwm3_ipg, pwm4_ipg, sdma_ipg, | 77 | reserved2, reserved3, reserved4, reserved5, can1_ipg, can2_ipg, csi_ipg, |
73 | ssi1_ipg, ssi2_ipg, tsc_ipg, uart1_ipg, uart2_ipg, uart3_ipg, | 78 | cspi1_ipg, cspi2_ipg, cspi3_ipg, dryice_ipg, ect_ipg, epit1_ipg, epit2_ipg, |
74 | uart4_ipg, uart5_ipg, wdt_ipg, clk_max | 79 | reserved6, esdhc1_ipg, esdhc2_ipg, fec_ipg, reserved7, reserved8, reserved9, |
80 | gpt1_ipg, gpt2_ipg, gpt3_ipg, gpt4_ipg, reserved10, reserved11, reserved12, | ||
81 | iim_ipg, reserved13, reserved14, kpp_ipg, lcdc_ipg, reserved15, pwm1_ipg, | ||
82 | pwm2_ipg, pwm3_ipg, pwm4_ipg, rngb_ipg, reserved16, scc_ipg, sdma_ipg, | ||
83 | sim1_ipg, sim2_ipg, slcdc_ipg, spba_ipg, ssi1_ipg, ssi2_ipg, tsc_ipg, | ||
84 | uart1_ipg, uart2_ipg, uart3_ipg, uart4_ipg, uart5_ipg, reserved17, | ||
85 | wdt_ipg, clk_max | ||
75 | }; | 86 | }; |
76 | 87 | ||
77 | static struct clk *clk[clk_max]; | 88 | static struct clk *clk[clk_max]; |
78 | 89 | ||
79 | int __init mx25_clocks_init(void) | 90 | static int __init __mx25_clocks_init(unsigned long osc_rate) |
80 | { | 91 | { |
81 | int i; | 92 | int i; |
82 | 93 | ||
83 | clk[dummy] = imx_clk_fixed("dummy", 0); | 94 | clk[dummy] = imx_clk_fixed("dummy", 0); |
84 | clk[osc] = imx_clk_fixed("osc", 24000000); | 95 | clk[osc] = imx_clk_fixed("osc", osc_rate); |
85 | clk[mpll] = imx_clk_pllv1("mpll", "osc", ccm(CCM_MPCTL)); | 96 | clk[mpll] = imx_clk_pllv1("mpll", "osc", ccm(CCM_MPCTL)); |
86 | clk[upll] = imx_clk_pllv1("upll", "osc", ccm(CCM_UPCTL)); | 97 | clk[upll] = imx_clk_pllv1("upll", "osc", ccm(CCM_UPCTL)); |
87 | clk[mpll_cpu_3_4] = imx_clk_fixed_factor("mpll_cpu_3_4", "mpll", 3, 4); | 98 | clk[mpll_cpu_3_4] = imx_clk_fixed_factor("mpll_cpu_3_4", "mpll", 3, 4); |
@@ -123,22 +134,36 @@ int __init mx25_clocks_init(void) | |||
123 | clk[per14] = imx_clk_divider("per14", "per14_sel", ccm(CCM_PCDR3), 16, 6); | 134 | clk[per14] = imx_clk_divider("per14", "per14_sel", ccm(CCM_PCDR3), 16, 6); |
124 | clk[per15] = imx_clk_divider("per15", "per15_sel", ccm(CCM_PCDR3), 24, 6); | 135 | clk[per15] = imx_clk_divider("per15", "per15_sel", ccm(CCM_PCDR3), 24, 6); |
125 | clk[csi_ipg_per] = imx_clk_gate("csi_ipg_per", "per0", ccm(CCM_CGCR0), 0); | 136 | clk[csi_ipg_per] = imx_clk_gate("csi_ipg_per", "per0", ccm(CCM_CGCR0), 0); |
137 | clk[epit_ipg_per] = imx_clk_gate("epit_ipg_per", "per1", ccm(CCM_CGCR0), 1); | ||
138 | clk[esai_ipg_per] = imx_clk_gate("esai_ipg_per", "per2", ccm(CCM_CGCR0), 2); | ||
126 | clk[esdhc1_ipg_per] = imx_clk_gate("esdhc1_ipg_per", "per3", ccm(CCM_CGCR0), 3); | 139 | clk[esdhc1_ipg_per] = imx_clk_gate("esdhc1_ipg_per", "per3", ccm(CCM_CGCR0), 3); |
127 | clk[esdhc2_ipg_per] = imx_clk_gate("esdhc2_ipg_per", "per4", ccm(CCM_CGCR0), 4); | 140 | clk[esdhc2_ipg_per] = imx_clk_gate("esdhc2_ipg_per", "per4", ccm(CCM_CGCR0), 4); |
128 | clk[gpt_ipg_per] = imx_clk_gate("gpt_ipg_per", "per5", ccm(CCM_CGCR0), 5); | 141 | clk[gpt_ipg_per] = imx_clk_gate("gpt_ipg_per", "per5", ccm(CCM_CGCR0), 5); |
129 | clk[i2c_ipg_per] = imx_clk_gate("i2c_ipg_per", "per6", ccm(CCM_CGCR0), 6); | 142 | clk[i2c_ipg_per] = imx_clk_gate("i2c_ipg_per", "per6", ccm(CCM_CGCR0), 6); |
130 | clk[lcdc_ipg_per] = imx_clk_gate("lcdc_ipg_per", "per7", ccm(CCM_CGCR0), 7); | 143 | clk[lcdc_ipg_per] = imx_clk_gate("lcdc_ipg_per", "per7", ccm(CCM_CGCR0), 7); |
131 | clk[nfc_ipg_per] = imx_clk_gate("nfc_ipg_per", "per8", ccm(CCM_CGCR0), 8); | 144 | clk[nfc_ipg_per] = imx_clk_gate("nfc_ipg_per", "per8", ccm(CCM_CGCR0), 8); |
145 | clk[owire_ipg_per] = imx_clk_gate("owire_ipg_per", "per9", ccm(CCM_CGCR0), 9); | ||
146 | clk[pwm_ipg_per] = imx_clk_gate("pwm_ipg_per", "per10", ccm(CCM_CGCR0), 10); | ||
147 | clk[sim1_ipg_per] = imx_clk_gate("sim1_ipg_per", "per11", ccm(CCM_CGCR0), 11); | ||
148 | clk[sim2_ipg_per] = imx_clk_gate("sim2_ipg_per", "per12", ccm(CCM_CGCR0), 12); | ||
132 | clk[ssi1_ipg_per] = imx_clk_gate("ssi1_ipg_per", "per13", ccm(CCM_CGCR0), 13); | 149 | clk[ssi1_ipg_per] = imx_clk_gate("ssi1_ipg_per", "per13", ccm(CCM_CGCR0), 13); |
133 | clk[ssi2_ipg_per] = imx_clk_gate("ssi2_ipg_per", "per14", ccm(CCM_CGCR0), 14); | 150 | clk[ssi2_ipg_per] = imx_clk_gate("ssi2_ipg_per", "per14", ccm(CCM_CGCR0), 14); |
134 | clk[uart_ipg_per] = imx_clk_gate("uart_ipg_per", "per15", ccm(CCM_CGCR0), 15); | 151 | clk[uart_ipg_per] = imx_clk_gate("uart_ipg_per", "per15", ccm(CCM_CGCR0), 15); |
152 | clk[ata_ahb] = imx_clk_gate("ata_ahb", "ahb", ccm(CCM_CGCR0), 16); | ||
153 | /* CCM_CGCR0(17): reserved */ | ||
135 | clk[csi_ahb] = imx_clk_gate("csi_ahb", "ahb", ccm(CCM_CGCR0), 18); | 154 | clk[csi_ahb] = imx_clk_gate("csi_ahb", "ahb", ccm(CCM_CGCR0), 18); |
155 | clk[emi_ahb] = imx_clk_gate("emi_ahb", "ahb", ccm(CCM_CGCR0), 19); | ||
156 | clk[esai_ahb] = imx_clk_gate("esai_ahb", "ahb", ccm(CCM_CGCR0), 20); | ||
136 | clk[esdhc1_ahb] = imx_clk_gate("esdhc1_ahb", "ahb", ccm(CCM_CGCR0), 21); | 157 | clk[esdhc1_ahb] = imx_clk_gate("esdhc1_ahb", "ahb", ccm(CCM_CGCR0), 21); |
137 | clk[esdhc2_ahb] = imx_clk_gate("esdhc2_ahb", "ahb", ccm(CCM_CGCR0), 22); | 158 | clk[esdhc2_ahb] = imx_clk_gate("esdhc2_ahb", "ahb", ccm(CCM_CGCR0), 22); |
138 | clk[fec_ahb] = imx_clk_gate("fec_ahb", "ahb", ccm(CCM_CGCR0), 23); | 159 | clk[fec_ahb] = imx_clk_gate("fec_ahb", "ahb", ccm(CCM_CGCR0), 23); |
139 | clk[lcdc_ahb] = imx_clk_gate("lcdc_ahb", "ahb", ccm(CCM_CGCR0), 24); | 160 | clk[lcdc_ahb] = imx_clk_gate("lcdc_ahb", "ahb", ccm(CCM_CGCR0), 24); |
161 | clk[rtic_ahb] = imx_clk_gate("rtic_ahb", "ahb", ccm(CCM_CGCR0), 25); | ||
140 | clk[sdma_ahb] = imx_clk_gate("sdma_ahb", "ahb", ccm(CCM_CGCR0), 26); | 162 | clk[sdma_ahb] = imx_clk_gate("sdma_ahb", "ahb", ccm(CCM_CGCR0), 26); |
163 | clk[slcdc_ahb] = imx_clk_gate("slcdc_ahb", "ahb", ccm(CCM_CGCR0), 27); | ||
141 | clk[usbotg_ahb] = imx_clk_gate("usbotg_ahb", "ahb", ccm(CCM_CGCR0), 28); | 164 | clk[usbotg_ahb] = imx_clk_gate("usbotg_ahb", "ahb", ccm(CCM_CGCR0), 28); |
165 | /* CCM_CGCR0(29-31): reserved */ | ||
166 | /* CCM_CGCR1(0): reserved in datasheet, used as audmux in FSL kernel */ | ||
142 | clk[can1_ipg] = imx_clk_gate("can1_ipg", "ipg", ccm(CCM_CGCR1), 2); | 167 | clk[can1_ipg] = imx_clk_gate("can1_ipg", "ipg", ccm(CCM_CGCR1), 2); |
143 | clk[can2_ipg] = imx_clk_gate("can2_ipg", "ipg", ccm(CCM_CGCR1), 3); | 168 | clk[can2_ipg] = imx_clk_gate("can2_ipg", "ipg", ccm(CCM_CGCR1), 3); |
144 | clk[csi_ipg] = imx_clk_gate("csi_ipg", "ipg", ccm(CCM_CGCR1), 4); | 169 | clk[csi_ipg] = imx_clk_gate("csi_ipg", "ipg", ccm(CCM_CGCR1), 4); |
@@ -146,17 +171,41 @@ int __init mx25_clocks_init(void) | |||
146 | clk[cspi2_ipg] = imx_clk_gate("cspi2_ipg", "ipg", ccm(CCM_CGCR1), 6); | 171 | clk[cspi2_ipg] = imx_clk_gate("cspi2_ipg", "ipg", ccm(CCM_CGCR1), 6); |
147 | clk[cspi3_ipg] = imx_clk_gate("cspi3_ipg", "ipg", ccm(CCM_CGCR1), 7); | 172 | clk[cspi3_ipg] = imx_clk_gate("cspi3_ipg", "ipg", ccm(CCM_CGCR1), 7); |
148 | clk[dryice_ipg] = imx_clk_gate("dryice_ipg", "ipg", ccm(CCM_CGCR1), 8); | 173 | clk[dryice_ipg] = imx_clk_gate("dryice_ipg", "ipg", ccm(CCM_CGCR1), 8); |
174 | clk[ect_ipg] = imx_clk_gate("ect_ipg", "ipg", ccm(CCM_CGCR1), 9); | ||
175 | clk[epit1_ipg] = imx_clk_gate("epit1_ipg", "ipg", ccm(CCM_CGCR1), 10); | ||
176 | clk[epit2_ipg] = imx_clk_gate("epit2_ipg", "ipg", ccm(CCM_CGCR1), 11); | ||
177 | /* CCM_CGCR1(12): reserved in datasheet, used as esai in FSL kernel */ | ||
149 | clk[esdhc1_ipg] = imx_clk_gate("esdhc1_ipg", "ipg", ccm(CCM_CGCR1), 13); | 178 | clk[esdhc1_ipg] = imx_clk_gate("esdhc1_ipg", "ipg", ccm(CCM_CGCR1), 13); |
150 | clk[esdhc2_ipg] = imx_clk_gate("esdhc2_ipg", "ipg", ccm(CCM_CGCR1), 14); | 179 | clk[esdhc2_ipg] = imx_clk_gate("esdhc2_ipg", "ipg", ccm(CCM_CGCR1), 14); |
151 | clk[fec_ipg] = imx_clk_gate("fec_ipg", "ipg", ccm(CCM_CGCR1), 15); | 180 | clk[fec_ipg] = imx_clk_gate("fec_ipg", "ipg", ccm(CCM_CGCR1), 15); |
181 | /* CCM_CGCR1(16): reserved in datasheet, used as gpio1 in FSL kernel */ | ||
182 | /* CCM_CGCR1(17): reserved in datasheet, used as gpio2 in FSL kernel */ | ||
183 | /* CCM_CGCR1(18): reserved in datasheet, used as gpio3 in FSL kernel */ | ||
184 | clk[gpt1_ipg] = imx_clk_gate("gpt1_ipg", "ipg", ccm(CCM_CGCR1), 19); | ||
185 | clk[gpt2_ipg] = imx_clk_gate("gpt2_ipg", "ipg", ccm(CCM_CGCR1), 20); | ||
186 | clk[gpt3_ipg] = imx_clk_gate("gpt3_ipg", "ipg", ccm(CCM_CGCR1), 21); | ||
187 | clk[gpt4_ipg] = imx_clk_gate("gpt4_ipg", "ipg", ccm(CCM_CGCR1), 22); | ||
188 | /* CCM_CGCR1(23): reserved in datasheet, used as i2c1 in FSL kernel */ | ||
189 | /* CCM_CGCR1(24): reserved in datasheet, used as i2c2 in FSL kernel */ | ||
190 | /* CCM_CGCR1(25): reserved in datasheet, used as i2c3 in FSL kernel */ | ||
152 | clk[iim_ipg] = imx_clk_gate("iim_ipg", "ipg", ccm(CCM_CGCR1), 26); | 191 | clk[iim_ipg] = imx_clk_gate("iim_ipg", "ipg", ccm(CCM_CGCR1), 26); |
192 | /* CCM_CGCR1(27): reserved in datasheet, used as iomuxc in FSL kernel */ | ||
193 | /* CCM_CGCR1(28): reserved in datasheet, used as kpp in FSL kernel */ | ||
153 | clk[kpp_ipg] = imx_clk_gate("kpp_ipg", "ipg", ccm(CCM_CGCR1), 28); | 194 | clk[kpp_ipg] = imx_clk_gate("kpp_ipg", "ipg", ccm(CCM_CGCR1), 28); |
154 | clk[lcdc_ipg] = imx_clk_gate("lcdc_ipg", "ipg", ccm(CCM_CGCR1), 29); | 195 | clk[lcdc_ipg] = imx_clk_gate("lcdc_ipg", "ipg", ccm(CCM_CGCR1), 29); |
196 | /* CCM_CGCR1(30): reserved in datasheet, used as owire in FSL kernel */ | ||
155 | clk[pwm1_ipg] = imx_clk_gate("pwm1_ipg", "ipg", ccm(CCM_CGCR1), 31); | 197 | clk[pwm1_ipg] = imx_clk_gate("pwm1_ipg", "ipg", ccm(CCM_CGCR1), 31); |
156 | clk[pwm2_ipg] = imx_clk_gate("pwm2_ipg", "ipg", ccm(CCM_CGCR2), 0); | 198 | clk[pwm2_ipg] = imx_clk_gate("pwm2_ipg", "ipg", ccm(CCM_CGCR2), 0); |
157 | clk[pwm3_ipg] = imx_clk_gate("pwm3_ipg", "ipg", ccm(CCM_CGCR2), 1); | 199 | clk[pwm3_ipg] = imx_clk_gate("pwm3_ipg", "ipg", ccm(CCM_CGCR2), 1); |
158 | clk[pwm4_ipg] = imx_clk_gate("pwm4_ipg", "ipg", ccm(CCM_CGCR2), 2); | 200 | clk[pwm4_ipg] = imx_clk_gate("pwm4_ipg", "ipg", ccm(CCM_CGCR2), 2); |
201 | clk[rngb_ipg] = imx_clk_gate("rngb_ipg", "ipg", ccm(CCM_CGCR2), 3); | ||
202 | /* CCM_CGCR2(4): reserved in datasheet, used as rtic in FSL kernel */ | ||
203 | clk[scc_ipg] = imx_clk_gate("scc_ipg", "ipg", ccm(CCM_CGCR2), 5); | ||
159 | clk[sdma_ipg] = imx_clk_gate("sdma_ipg", "ipg", ccm(CCM_CGCR2), 6); | 204 | clk[sdma_ipg] = imx_clk_gate("sdma_ipg", "ipg", ccm(CCM_CGCR2), 6); |
205 | clk[sim1_ipg] = imx_clk_gate("sim1_ipg", "ipg", ccm(CCM_CGCR2), 7); | ||
206 | clk[sim2_ipg] = imx_clk_gate("sim2_ipg", "ipg", ccm(CCM_CGCR2), 8); | ||
207 | clk[slcdc_ipg] = imx_clk_gate("slcdc_ipg", "ipg", ccm(CCM_CGCR2), 9); | ||
208 | clk[spba_ipg] = imx_clk_gate("spba_ipg", "ipg", ccm(CCM_CGCR2), 10); | ||
160 | clk[ssi1_ipg] = imx_clk_gate("ssi1_ipg", "ipg", ccm(CCM_CGCR2), 11); | 209 | clk[ssi1_ipg] = imx_clk_gate("ssi1_ipg", "ipg", ccm(CCM_CGCR2), 11); |
161 | clk[ssi2_ipg] = imx_clk_gate("ssi2_ipg", "ipg", ccm(CCM_CGCR2), 12); | 210 | clk[ssi2_ipg] = imx_clk_gate("ssi2_ipg", "ipg", ccm(CCM_CGCR2), 12); |
162 | clk[tsc_ipg] = imx_clk_gate("tsc_ipg", "ipg", ccm(CCM_CGCR2), 13); | 211 | clk[tsc_ipg] = imx_clk_gate("tsc_ipg", "ipg", ccm(CCM_CGCR2), 13); |
@@ -165,6 +214,7 @@ int __init mx25_clocks_init(void) | |||
165 | clk[uart3_ipg] = imx_clk_gate("uart3_ipg", "ipg", ccm(CCM_CGCR2), 16); | 214 | clk[uart3_ipg] = imx_clk_gate("uart3_ipg", "ipg", ccm(CCM_CGCR2), 16); |
166 | clk[uart4_ipg] = imx_clk_gate("uart4_ipg", "ipg", ccm(CCM_CGCR2), 17); | 215 | clk[uart4_ipg] = imx_clk_gate("uart4_ipg", "ipg", ccm(CCM_CGCR2), 17); |
167 | clk[uart5_ipg] = imx_clk_gate("uart5_ipg", "ipg", ccm(CCM_CGCR2), 18); | 216 | clk[uart5_ipg] = imx_clk_gate("uart5_ipg", "ipg", ccm(CCM_CGCR2), 18); |
217 | /* CCM_CGCR2(19): reserved in datasheet, but used as wdt in FSL kernel */ | ||
168 | clk[wdt_ipg] = imx_clk_gate("wdt_ipg", "ipg", ccm(CCM_CGCR2), 19); | 218 | clk[wdt_ipg] = imx_clk_gate("wdt_ipg", "ipg", ccm(CCM_CGCR2), 19); |
169 | 219 | ||
170 | for (i = 0; i < ARRAY_SIZE(clk); i++) | 220 | for (i = 0; i < ARRAY_SIZE(clk); i++) |
@@ -172,6 +222,18 @@ int __init mx25_clocks_init(void) | |||
172 | pr_err("i.MX25 clk %d: register failed with %ld\n", | 222 | pr_err("i.MX25 clk %d: register failed with %ld\n", |
173 | i, PTR_ERR(clk[i])); | 223 | i, PTR_ERR(clk[i])); |
174 | 224 | ||
225 | clk_prepare_enable(clk[emi_ahb]); | ||
226 | |||
227 | clk_register_clkdev(clk[ipg], "ipg", "imx-gpt.0"); | ||
228 | clk_register_clkdev(clk[gpt_ipg_per], "per", "imx-gpt.0"); | ||
229 | |||
230 | return 0; | ||
231 | } | ||
232 | |||
233 | int __init mx25_clocks_init(void) | ||
234 | { | ||
235 | __mx25_clocks_init(24000000); | ||
236 | |||
175 | /* i.mx25 has the i.mx21 type uart */ | 237 | /* i.mx25 has the i.mx21 type uart */ |
176 | clk_register_clkdev(clk[uart1_ipg], "ipg", "imx21-uart.0"); | 238 | clk_register_clkdev(clk[uart1_ipg], "ipg", "imx21-uart.0"); |
177 | clk_register_clkdev(clk[uart_ipg_per], "per", "imx21-uart.0"); | 239 | clk_register_clkdev(clk[uart_ipg_per], "per", "imx21-uart.0"); |
@@ -183,8 +245,6 @@ int __init mx25_clocks_init(void) | |||
183 | clk_register_clkdev(clk[uart_ipg_per], "per", "imx21-uart.3"); | 245 | clk_register_clkdev(clk[uart_ipg_per], "per", "imx21-uart.3"); |
184 | clk_register_clkdev(clk[uart5_ipg], "ipg", "imx21-uart.4"); | 246 | clk_register_clkdev(clk[uart5_ipg], "ipg", "imx21-uart.4"); |
185 | clk_register_clkdev(clk[uart_ipg_per], "per", "imx21-uart.4"); | 247 | clk_register_clkdev(clk[uart_ipg_per], "per", "imx21-uart.4"); |
186 | clk_register_clkdev(clk[ipg], "ipg", "imx-gpt.0"); | ||
187 | clk_register_clkdev(clk[gpt_ipg_per], "per", "imx-gpt.0"); | ||
188 | clk_register_clkdev(clk[ipg], "ipg", "mxc-ehci.0"); | 248 | clk_register_clkdev(clk[ipg], "ipg", "mxc-ehci.0"); |
189 | clk_register_clkdev(clk[usbotg_ahb], "ahb", "mxc-ehci.0"); | 249 | clk_register_clkdev(clk[usbotg_ahb], "ahb", "mxc-ehci.0"); |
190 | clk_register_clkdev(clk[usb_div], "per", "mxc-ehci.0"); | 250 | clk_register_clkdev(clk[usb_div], "per", "mxc-ehci.0"); |
@@ -197,7 +257,7 @@ int __init mx25_clocks_init(void) | |||
197 | clk_register_clkdev(clk[ipg], "ipg", "fsl-usb2-udc"); | 257 | clk_register_clkdev(clk[ipg], "ipg", "fsl-usb2-udc"); |
198 | clk_register_clkdev(clk[usbotg_ahb], "ahb", "fsl-usb2-udc"); | 258 | clk_register_clkdev(clk[usbotg_ahb], "ahb", "fsl-usb2-udc"); |
199 | clk_register_clkdev(clk[usb_div], "per", "fsl-usb2-udc"); | 259 | clk_register_clkdev(clk[usb_div], "per", "fsl-usb2-udc"); |
200 | clk_register_clkdev(clk[nfc_ipg_per], NULL, "mxc_nand.0"); | 260 | clk_register_clkdev(clk[nfc_ipg_per], NULL, "imx25-nand.0"); |
201 | /* i.mx25 has the i.mx35 type cspi */ | 261 | /* i.mx25 has the i.mx35 type cspi */ |
202 | clk_register_clkdev(clk[cspi1_ipg], NULL, "imx35-cspi.0"); | 262 | clk_register_clkdev(clk[cspi1_ipg], NULL, "imx35-cspi.0"); |
203 | clk_register_clkdev(clk[cspi2_ipg], NULL, "imx35-cspi.1"); | 263 | clk_register_clkdev(clk[cspi2_ipg], NULL, "imx35-cspi.1"); |
@@ -212,15 +272,15 @@ int __init mx25_clocks_init(void) | |||
212 | clk_register_clkdev(clk[per10], "per", "mxc_pwm.3"); | 272 | clk_register_clkdev(clk[per10], "per", "mxc_pwm.3"); |
213 | clk_register_clkdev(clk[kpp_ipg], NULL, "imx-keypad"); | 273 | clk_register_clkdev(clk[kpp_ipg], NULL, "imx-keypad"); |
214 | clk_register_clkdev(clk[tsc_ipg], NULL, "mx25-adc"); | 274 | clk_register_clkdev(clk[tsc_ipg], NULL, "mx25-adc"); |
215 | clk_register_clkdev(clk[i2c_ipg_per], NULL, "imx-i2c.0"); | 275 | clk_register_clkdev(clk[i2c_ipg_per], NULL, "imx21-i2c.0"); |
216 | clk_register_clkdev(clk[i2c_ipg_per], NULL, "imx-i2c.1"); | 276 | clk_register_clkdev(clk[i2c_ipg_per], NULL, "imx21-i2c.1"); |
217 | clk_register_clkdev(clk[i2c_ipg_per], NULL, "imx-i2c.2"); | 277 | clk_register_clkdev(clk[i2c_ipg_per], NULL, "imx21-i2c.2"); |
218 | clk_register_clkdev(clk[fec_ipg], "ipg", "imx25-fec.0"); | 278 | clk_register_clkdev(clk[fec_ipg], "ipg", "imx25-fec.0"); |
219 | clk_register_clkdev(clk[fec_ahb], "ahb", "imx25-fec.0"); | 279 | clk_register_clkdev(clk[fec_ahb], "ahb", "imx25-fec.0"); |
220 | clk_register_clkdev(clk[dryice_ipg], NULL, "imxdi_rtc.0"); | 280 | clk_register_clkdev(clk[dryice_ipg], NULL, "imxdi_rtc.0"); |
221 | clk_register_clkdev(clk[lcdc_ipg_per], "per", "imx-fb.0"); | 281 | clk_register_clkdev(clk[lcdc_ipg_per], "per", "imx21-fb.0"); |
222 | clk_register_clkdev(clk[lcdc_ipg], "ipg", "imx-fb.0"); | 282 | clk_register_clkdev(clk[lcdc_ipg], "ipg", "imx21-fb.0"); |
223 | clk_register_clkdev(clk[lcdc_ahb], "ahb", "imx-fb.0"); | 283 | clk_register_clkdev(clk[lcdc_ahb], "ahb", "imx21-fb.0"); |
224 | clk_register_clkdev(clk[wdt_ipg], NULL, "imx2-wdt.0"); | 284 | clk_register_clkdev(clk[wdt_ipg], NULL, "imx2-wdt.0"); |
225 | clk_register_clkdev(clk[ssi1_ipg], NULL, "imx-ssi.0"); | 285 | clk_register_clkdev(clk[ssi1_ipg], NULL, "imx-ssi.0"); |
226 | clk_register_clkdev(clk[ssi2_ipg], NULL, "imx-ssi.1"); | 286 | clk_register_clkdev(clk[ssi2_ipg], NULL, "imx-ssi.1"); |
@@ -230,9 +290,9 @@ int __init mx25_clocks_init(void) | |||
230 | clk_register_clkdev(clk[esdhc2_ipg_per], "per", "sdhci-esdhc-imx25.1"); | 290 | clk_register_clkdev(clk[esdhc2_ipg_per], "per", "sdhci-esdhc-imx25.1"); |
231 | clk_register_clkdev(clk[esdhc2_ipg], "ipg", "sdhci-esdhc-imx25.1"); | 291 | clk_register_clkdev(clk[esdhc2_ipg], "ipg", "sdhci-esdhc-imx25.1"); |
232 | clk_register_clkdev(clk[esdhc2_ahb], "ahb", "sdhci-esdhc-imx25.1"); | 292 | clk_register_clkdev(clk[esdhc2_ahb], "ahb", "sdhci-esdhc-imx25.1"); |
233 | clk_register_clkdev(clk[csi_ipg_per], "per", "mx2-camera.0"); | 293 | clk_register_clkdev(clk[csi_ipg_per], "per", "imx25-camera.0"); |
234 | clk_register_clkdev(clk[csi_ipg], "ipg", "mx2-camera.0"); | 294 | clk_register_clkdev(clk[csi_ipg], "ipg", "imx25-camera.0"); |
235 | clk_register_clkdev(clk[csi_ahb], "ahb", "mx2-camera.0"); | 295 | clk_register_clkdev(clk[csi_ahb], "ahb", "imx25-camera.0"); |
236 | clk_register_clkdev(clk[dummy], "audmux", NULL); | 296 | clk_register_clkdev(clk[dummy], "audmux", NULL); |
237 | clk_register_clkdev(clk[can1_ipg], NULL, "flexcan.0"); | 297 | clk_register_clkdev(clk[can1_ipg], NULL, "flexcan.0"); |
238 | clk_register_clkdev(clk[can2_ipg], NULL, "flexcan.1"); | 298 | clk_register_clkdev(clk[can2_ipg], NULL, "flexcan.1"); |
@@ -242,5 +302,40 @@ int __init mx25_clocks_init(void) | |||
242 | clk_register_clkdev(clk[iim_ipg], "iim", NULL); | 302 | clk_register_clkdev(clk[iim_ipg], "iim", NULL); |
243 | 303 | ||
244 | mxc_timer_init(MX25_IO_ADDRESS(MX25_GPT1_BASE_ADDR), MX25_INT_GPT1); | 304 | mxc_timer_init(MX25_IO_ADDRESS(MX25_GPT1_BASE_ADDR), MX25_INT_GPT1); |
305 | |||
306 | return 0; | ||
307 | } | ||
308 | |||
309 | int __init mx25_clocks_init_dt(void) | ||
310 | { | ||
311 | struct device_node *np; | ||
312 | void __iomem *base; | ||
313 | int irq; | ||
314 | unsigned long osc_rate = 24000000; | ||
315 | |||
316 | /* retrieve the freqency of fixed clocks from device tree */ | ||
317 | for_each_compatible_node(np, NULL, "fixed-clock") { | ||
318 | u32 rate; | ||
319 | if (of_property_read_u32(np, "clock-frequency", &rate)) | ||
320 | continue; | ||
321 | |||
322 | if (of_device_is_compatible(np, "fsl,imx-osc")) | ||
323 | osc_rate = rate; | ||
324 | } | ||
325 | |||
326 | np = of_find_compatible_node(NULL, NULL, "fsl,imx25-ccm"); | ||
327 | clk_data.clks = clk; | ||
328 | clk_data.clk_num = ARRAY_SIZE(clk); | ||
329 | of_clk_add_provider(np, of_clk_src_onecell_get, &clk_data); | ||
330 | |||
331 | __mx25_clocks_init(osc_rate); | ||
332 | |||
333 | np = of_find_compatible_node(NULL, NULL, "fsl,imx25-gpt"); | ||
334 | base = of_iomap(np, 0); | ||
335 | WARN_ON(!base); | ||
336 | irq = irq_of_parse_and_map(np, 0); | ||
337 | |||
338 | mxc_timer_init(base, irq); | ||
339 | |||
245 | return 0; | 340 | return 0; |
246 | } | 341 | } |
diff --git a/arch/arm/mach-imx/clk-imx27.c b/arch/arm/mach-imx/clk-imx27.c index 366e5d59d886..585ab256c58f 100644 --- a/arch/arm/mach-imx/clk-imx27.c +++ b/arch/arm/mach-imx/clk-imx27.c | |||
@@ -6,9 +6,9 @@ | |||
6 | #include <linux/clk-provider.h> | 6 | #include <linux/clk-provider.h> |
7 | #include <linux/of.h> | 7 | #include <linux/of.h> |
8 | 8 | ||
9 | #include <mach/common.h> | ||
10 | #include <mach/hardware.h> | ||
11 | #include "clk.h" | 9 | #include "clk.h" |
10 | #include "common.h" | ||
11 | #include "hardware.h" | ||
12 | 12 | ||
13 | #define IO_ADDR_CCM(off) (MX27_IO_ADDRESS(MX27_CCM_BASE_ADDR + (off))) | 13 | #define IO_ADDR_CCM(off) (MX27_IO_ADDRESS(MX27_CCM_BASE_ADDR + (off))) |
14 | 14 | ||
@@ -211,19 +211,19 @@ int __init mx27_clocks_init(unsigned long fref) | |||
211 | clk_register_clkdev(clk[gpt6_ipg_gate], "ipg", "imx-gpt.5"); | 211 | clk_register_clkdev(clk[gpt6_ipg_gate], "ipg", "imx-gpt.5"); |
212 | clk_register_clkdev(clk[per1_gate], "per", "imx-gpt.5"); | 212 | clk_register_clkdev(clk[per1_gate], "per", "imx-gpt.5"); |
213 | clk_register_clkdev(clk[pwm_ipg_gate], NULL, "mxc_pwm.0"); | 213 | clk_register_clkdev(clk[pwm_ipg_gate], NULL, "mxc_pwm.0"); |
214 | clk_register_clkdev(clk[per2_gate], "per", "mxc-mmc.0"); | 214 | clk_register_clkdev(clk[per2_gate], "per", "imx21-mmc.0"); |
215 | clk_register_clkdev(clk[sdhc1_ipg_gate], "ipg", "mxc-mmc.0"); | 215 | clk_register_clkdev(clk[sdhc1_ipg_gate], "ipg", "imx21-mmc.0"); |
216 | clk_register_clkdev(clk[per2_gate], "per", "mxc-mmc.1"); | 216 | clk_register_clkdev(clk[per2_gate], "per", "imx21-mmc.1"); |
217 | clk_register_clkdev(clk[sdhc2_ipg_gate], "ipg", "mxc-mmc.1"); | 217 | clk_register_clkdev(clk[sdhc2_ipg_gate], "ipg", "imx21-mmc.1"); |
218 | clk_register_clkdev(clk[per2_gate], "per", "mxc-mmc.2"); | 218 | clk_register_clkdev(clk[per2_gate], "per", "imx21-mmc.2"); |
219 | clk_register_clkdev(clk[sdhc2_ipg_gate], "ipg", "mxc-mmc.2"); | 219 | clk_register_clkdev(clk[sdhc2_ipg_gate], "ipg", "imx21-mmc.2"); |
220 | clk_register_clkdev(clk[cspi1_ipg_gate], NULL, "imx27-cspi.0"); | 220 | clk_register_clkdev(clk[cspi1_ipg_gate], NULL, "imx27-cspi.0"); |
221 | clk_register_clkdev(clk[cspi2_ipg_gate], NULL, "imx27-cspi.1"); | 221 | clk_register_clkdev(clk[cspi2_ipg_gate], NULL, "imx27-cspi.1"); |
222 | clk_register_clkdev(clk[cspi3_ipg_gate], NULL, "imx27-cspi.2"); | 222 | clk_register_clkdev(clk[cspi3_ipg_gate], NULL, "imx27-cspi.2"); |
223 | clk_register_clkdev(clk[per3_gate], "per", "imx-fb.0"); | 223 | clk_register_clkdev(clk[per3_gate], "per", "imx21-fb.0"); |
224 | clk_register_clkdev(clk[lcdc_ipg_gate], "ipg", "imx-fb.0"); | 224 | clk_register_clkdev(clk[lcdc_ipg_gate], "ipg", "imx21-fb.0"); |
225 | clk_register_clkdev(clk[lcdc_ahb_gate], "ahb", "imx-fb.0"); | 225 | clk_register_clkdev(clk[lcdc_ahb_gate], "ahb", "imx21-fb.0"); |
226 | clk_register_clkdev(clk[csi_ahb_gate], "ahb", "mx2-camera.0"); | 226 | clk_register_clkdev(clk[csi_ahb_gate], "ahb", "imx27-camera.0"); |
227 | clk_register_clkdev(clk[usb_div], "per", "fsl-usb2-udc"); | 227 | clk_register_clkdev(clk[usb_div], "per", "fsl-usb2-udc"); |
228 | clk_register_clkdev(clk[usb_ipg_gate], "ipg", "fsl-usb2-udc"); | 228 | clk_register_clkdev(clk[usb_ipg_gate], "ipg", "fsl-usb2-udc"); |
229 | clk_register_clkdev(clk[usb_ahb_gate], "ahb", "fsl-usb2-udc"); | 229 | clk_register_clkdev(clk[usb_ahb_gate], "ahb", "fsl-usb2-udc"); |
@@ -238,27 +238,27 @@ int __init mx27_clocks_init(unsigned long fref) | |||
238 | clk_register_clkdev(clk[usb_ahb_gate], "ahb", "mxc-ehci.2"); | 238 | clk_register_clkdev(clk[usb_ahb_gate], "ahb", "mxc-ehci.2"); |
239 | clk_register_clkdev(clk[ssi1_ipg_gate], NULL, "imx-ssi.0"); | 239 | clk_register_clkdev(clk[ssi1_ipg_gate], NULL, "imx-ssi.0"); |
240 | clk_register_clkdev(clk[ssi2_ipg_gate], NULL, "imx-ssi.1"); | 240 | clk_register_clkdev(clk[ssi2_ipg_gate], NULL, "imx-ssi.1"); |
241 | clk_register_clkdev(clk[nfc_baud_gate], NULL, "mxc_nand.0"); | 241 | clk_register_clkdev(clk[nfc_baud_gate], NULL, "imx27-nand.0"); |
242 | clk_register_clkdev(clk[vpu_baud_gate], "per", "coda-imx27.0"); | 242 | clk_register_clkdev(clk[vpu_baud_gate], "per", "coda-imx27.0"); |
243 | clk_register_clkdev(clk[vpu_ahb_gate], "ahb", "coda-imx27.0"); | 243 | clk_register_clkdev(clk[vpu_ahb_gate], "ahb", "coda-imx27.0"); |
244 | clk_register_clkdev(clk[dma_ahb_gate], "ahb", "imx-dma"); | 244 | clk_register_clkdev(clk[dma_ahb_gate], "ahb", "imx27-dma"); |
245 | clk_register_clkdev(clk[dma_ipg_gate], "ipg", "imx-dma"); | 245 | clk_register_clkdev(clk[dma_ipg_gate], "ipg", "imx27-dma"); |
246 | clk_register_clkdev(clk[fec_ipg_gate], "ipg", "imx27-fec.0"); | 246 | clk_register_clkdev(clk[fec_ipg_gate], "ipg", "imx27-fec.0"); |
247 | clk_register_clkdev(clk[fec_ahb_gate], "ahb", "imx27-fec.0"); | 247 | clk_register_clkdev(clk[fec_ahb_gate], "ahb", "imx27-fec.0"); |
248 | clk_register_clkdev(clk[wdog_ipg_gate], NULL, "imx2-wdt.0"); | 248 | clk_register_clkdev(clk[wdog_ipg_gate], NULL, "imx2-wdt.0"); |
249 | clk_register_clkdev(clk[i2c1_ipg_gate], NULL, "imx-i2c.0"); | 249 | clk_register_clkdev(clk[i2c1_ipg_gate], NULL, "imx21-i2c.0"); |
250 | clk_register_clkdev(clk[i2c2_ipg_gate], NULL, "imx-i2c.1"); | 250 | clk_register_clkdev(clk[i2c2_ipg_gate], NULL, "imx21-i2c.1"); |
251 | clk_register_clkdev(clk[owire_ipg_gate], NULL, "mxc_w1.0"); | 251 | clk_register_clkdev(clk[owire_ipg_gate], NULL, "mxc_w1.0"); |
252 | clk_register_clkdev(clk[kpp_ipg_gate], NULL, "imx-keypad"); | 252 | clk_register_clkdev(clk[kpp_ipg_gate], NULL, "imx-keypad"); |
253 | clk_register_clkdev(clk[emma_ahb_gate], "emma-ahb", "mx2-camera.0"); | 253 | clk_register_clkdev(clk[emma_ahb_gate], "emma-ahb", "imx27-camera.0"); |
254 | clk_register_clkdev(clk[emma_ipg_gate], "emma-ipg", "mx2-camera.0"); | 254 | clk_register_clkdev(clk[emma_ipg_gate], "emma-ipg", "imx27-camera.0"); |
255 | clk_register_clkdev(clk[emma_ahb_gate], "ahb", "m2m-emmaprp.0"); | 255 | clk_register_clkdev(clk[emma_ahb_gate], "ahb", "m2m-emmaprp.0"); |
256 | clk_register_clkdev(clk[emma_ipg_gate], "ipg", "m2m-emmaprp.0"); | 256 | clk_register_clkdev(clk[emma_ipg_gate], "ipg", "m2m-emmaprp.0"); |
257 | clk_register_clkdev(clk[iim_ipg_gate], "iim", NULL); | 257 | clk_register_clkdev(clk[iim_ipg_gate], "iim", NULL); |
258 | clk_register_clkdev(clk[gpio_ipg_gate], "gpio", NULL); | 258 | clk_register_clkdev(clk[gpio_ipg_gate], "gpio", NULL); |
259 | clk_register_clkdev(clk[brom_ahb_gate], "brom", NULL); | 259 | clk_register_clkdev(clk[brom_ahb_gate], "brom", NULL); |
260 | clk_register_clkdev(clk[ata_ahb_gate], "ata", NULL); | 260 | clk_register_clkdev(clk[ata_ahb_gate], "ata", NULL); |
261 | clk_register_clkdev(clk[rtc_ipg_gate], NULL, "mxc_rtc"); | 261 | clk_register_clkdev(clk[rtc_ipg_gate], NULL, "imx21-rtc"); |
262 | clk_register_clkdev(clk[scc_ipg_gate], "scc", NULL); | 262 | clk_register_clkdev(clk[scc_ipg_gate], "scc", NULL); |
263 | clk_register_clkdev(clk[cpu_div], "cpu", NULL); | 263 | clk_register_clkdev(clk[cpu_div], "cpu", NULL); |
264 | clk_register_clkdev(clk[emi_ahb_gate], "emi_ahb" , NULL); | 264 | clk_register_clkdev(clk[emi_ahb_gate], "emi_ahb" , NULL); |
diff --git a/arch/arm/mach-imx/clk-imx31.c b/arch/arm/mach-imx/clk-imx31.c index 1253af2d9971..8be64e0a4ace 100644 --- a/arch/arm/mach-imx/clk-imx31.c +++ b/arch/arm/mach-imx/clk-imx31.c | |||
@@ -22,12 +22,11 @@ | |||
22 | #include <linux/err.h> | 22 | #include <linux/err.h> |
23 | #include <linux/of.h> | 23 | #include <linux/of.h> |
24 | 24 | ||
25 | #include <mach/hardware.h> | ||
26 | #include <mach/mx31.h> | ||
27 | #include <mach/common.h> | ||
28 | |||
29 | #include "clk.h" | 25 | #include "clk.h" |
26 | #include "common.h" | ||
30 | #include "crmregs-imx3.h" | 27 | #include "crmregs-imx3.h" |
28 | #include "hardware.h" | ||
29 | #include "mx31.h" | ||
31 | 30 | ||
32 | static const char *mcu_main_sel[] = { "spll", "mpll", }; | 31 | static const char *mcu_main_sel[] = { "spll", "mpll", }; |
33 | static const char *per_sel[] = { "per_div", "ipg", }; | 32 | static const char *per_sel[] = { "per_div", "ipg", }; |
@@ -124,10 +123,10 @@ int __init mx31_clocks_init(unsigned long fref) | |||
124 | clk_register_clkdev(clk[cspi3_gate], NULL, "imx31-cspi.2"); | 123 | clk_register_clkdev(clk[cspi3_gate], NULL, "imx31-cspi.2"); |
125 | clk_register_clkdev(clk[pwm_gate], "pwm", NULL); | 124 | clk_register_clkdev(clk[pwm_gate], "pwm", NULL); |
126 | clk_register_clkdev(clk[wdog_gate], NULL, "imx2-wdt.0"); | 125 | clk_register_clkdev(clk[wdog_gate], NULL, "imx2-wdt.0"); |
127 | clk_register_clkdev(clk[rtc_gate], NULL, "mxc_rtc"); | 126 | clk_register_clkdev(clk[rtc_gate], NULL, "imx21-rtc"); |
128 | clk_register_clkdev(clk[epit1_gate], "epit", NULL); | 127 | clk_register_clkdev(clk[epit1_gate], "epit", NULL); |
129 | clk_register_clkdev(clk[epit2_gate], "epit", NULL); | 128 | clk_register_clkdev(clk[epit2_gate], "epit", NULL); |
130 | clk_register_clkdev(clk[nfc], NULL, "mxc_nand.0"); | 129 | clk_register_clkdev(clk[nfc], NULL, "imx27-nand.0"); |
131 | clk_register_clkdev(clk[ipu_gate], NULL, "ipu-core"); | 130 | clk_register_clkdev(clk[ipu_gate], NULL, "ipu-core"); |
132 | clk_register_clkdev(clk[ipu_gate], NULL, "mx3_sdc_fb"); | 131 | clk_register_clkdev(clk[ipu_gate], NULL, "mx3_sdc_fb"); |
133 | clk_register_clkdev(clk[kpp_gate], NULL, "imx-keypad"); | 132 | clk_register_clkdev(clk[kpp_gate], NULL, "imx-keypad"); |
@@ -155,12 +154,12 @@ int __init mx31_clocks_init(unsigned long fref) | |||
155 | clk_register_clkdev(clk[ipg], "ipg", "imx21-uart.3"); | 154 | clk_register_clkdev(clk[ipg], "ipg", "imx21-uart.3"); |
156 | clk_register_clkdev(clk[uart5_gate], "per", "imx21-uart.4"); | 155 | clk_register_clkdev(clk[uart5_gate], "per", "imx21-uart.4"); |
157 | clk_register_clkdev(clk[ipg], "ipg", "imx21-uart.4"); | 156 | clk_register_clkdev(clk[ipg], "ipg", "imx21-uart.4"); |
158 | clk_register_clkdev(clk[i2c1_gate], NULL, "imx-i2c.0"); | 157 | clk_register_clkdev(clk[i2c1_gate], NULL, "imx21-i2c.0"); |
159 | clk_register_clkdev(clk[i2c2_gate], NULL, "imx-i2c.1"); | 158 | clk_register_clkdev(clk[i2c2_gate], NULL, "imx21-i2c.1"); |
160 | clk_register_clkdev(clk[i2c3_gate], NULL, "imx-i2c.2"); | 159 | clk_register_clkdev(clk[i2c3_gate], NULL, "imx21-i2c.2"); |
161 | clk_register_clkdev(clk[owire_gate], NULL, "mxc_w1.0"); | 160 | clk_register_clkdev(clk[owire_gate], NULL, "mxc_w1.0"); |
162 | clk_register_clkdev(clk[sdhc1_gate], NULL, "mxc-mmc.0"); | 161 | clk_register_clkdev(clk[sdhc1_gate], NULL, "imx31-mmc.0"); |
163 | clk_register_clkdev(clk[sdhc2_gate], NULL, "mxc-mmc.1"); | 162 | clk_register_clkdev(clk[sdhc2_gate], NULL, "imx31-mmc.1"); |
164 | clk_register_clkdev(clk[ssi1_gate], NULL, "imx-ssi.0"); | 163 | clk_register_clkdev(clk[ssi1_gate], NULL, "imx-ssi.0"); |
165 | clk_register_clkdev(clk[ssi2_gate], NULL, "imx-ssi.1"); | 164 | clk_register_clkdev(clk[ssi2_gate], NULL, "imx-ssi.1"); |
166 | clk_register_clkdev(clk[firi_gate], "firi", NULL); | 165 | clk_register_clkdev(clk[firi_gate], "firi", NULL); |
diff --git a/arch/arm/mach-imx/clk-imx35.c b/arch/arm/mach-imx/clk-imx35.c index 177259b523cd..66f3d65ea275 100644 --- a/arch/arm/mach-imx/clk-imx35.c +++ b/arch/arm/mach-imx/clk-imx35.c | |||
@@ -14,11 +14,10 @@ | |||
14 | #include <linux/of.h> | 14 | #include <linux/of.h> |
15 | #include <linux/err.h> | 15 | #include <linux/err.h> |
16 | 16 | ||
17 | #include <mach/hardware.h> | ||
18 | #include <mach/common.h> | ||
19 | |||
20 | #include "crmregs-imx3.h" | 17 | #include "crmregs-imx3.h" |
21 | #include "clk.h" | 18 | #include "clk.h" |
19 | #include "common.h" | ||
20 | #include "hardware.h" | ||
22 | 21 | ||
23 | struct arm_ahb_div { | 22 | struct arm_ahb_div { |
24 | unsigned char arm, ahb, sel; | 23 | unsigned char arm, ahb, sel; |
@@ -226,9 +225,9 @@ int __init mx35_clocks_init() | |||
226 | clk_register_clkdev(clk[fec_gate], NULL, "imx27-fec.0"); | 225 | clk_register_clkdev(clk[fec_gate], NULL, "imx27-fec.0"); |
227 | clk_register_clkdev(clk[gpt_gate], "per", "imx-gpt.0"); | 226 | clk_register_clkdev(clk[gpt_gate], "per", "imx-gpt.0"); |
228 | clk_register_clkdev(clk[ipg], "ipg", "imx-gpt.0"); | 227 | clk_register_clkdev(clk[ipg], "ipg", "imx-gpt.0"); |
229 | clk_register_clkdev(clk[i2c1_gate], NULL, "imx-i2c.0"); | 228 | clk_register_clkdev(clk[i2c1_gate], NULL, "imx21-i2c.0"); |
230 | clk_register_clkdev(clk[i2c2_gate], NULL, "imx-i2c.1"); | 229 | clk_register_clkdev(clk[i2c2_gate], NULL, "imx21-i2c.1"); |
231 | clk_register_clkdev(clk[i2c3_gate], NULL, "imx-i2c.2"); | 230 | clk_register_clkdev(clk[i2c3_gate], NULL, "imx21-i2c.2"); |
232 | clk_register_clkdev(clk[ipu_gate], NULL, "ipu-core"); | 231 | clk_register_clkdev(clk[ipu_gate], NULL, "ipu-core"); |
233 | clk_register_clkdev(clk[ipu_gate], NULL, "mx3_sdc_fb"); | 232 | clk_register_clkdev(clk[ipu_gate], NULL, "mx3_sdc_fb"); |
234 | clk_register_clkdev(clk[kpp_gate], NULL, "imx-keypad"); | 233 | clk_register_clkdev(clk[kpp_gate], NULL, "imx-keypad"); |
@@ -256,7 +255,7 @@ int __init mx35_clocks_init() | |||
256 | clk_register_clkdev(clk[ipg], "ipg", "fsl-usb2-udc"); | 255 | clk_register_clkdev(clk[ipg], "ipg", "fsl-usb2-udc"); |
257 | clk_register_clkdev(clk[usbotg_gate], "ahb", "fsl-usb2-udc"); | 256 | clk_register_clkdev(clk[usbotg_gate], "ahb", "fsl-usb2-udc"); |
258 | clk_register_clkdev(clk[wdog_gate], NULL, "imx2-wdt.0"); | 257 | clk_register_clkdev(clk[wdog_gate], NULL, "imx2-wdt.0"); |
259 | clk_register_clkdev(clk[nfc_div], NULL, "mxc_nand.0"); | 258 | clk_register_clkdev(clk[nfc_div], NULL, "imx25-nand.0"); |
260 | clk_register_clkdev(clk[csi_gate], NULL, "mx3-camera.0"); | 259 | clk_register_clkdev(clk[csi_gate], NULL, "mx3-camera.0"); |
261 | 260 | ||
262 | clk_prepare_enable(clk[spba_gate]); | 261 | clk_prepare_enable(clk[spba_gate]); |
diff --git a/arch/arm/mach-imx/clk-imx51-imx53.c b/arch/arm/mach-imx/clk-imx51-imx53.c index a0bf84803eac..abb71f6b4d60 100644 --- a/arch/arm/mach-imx/clk-imx51-imx53.c +++ b/arch/arm/mach-imx/clk-imx51-imx53.c | |||
@@ -14,11 +14,10 @@ | |||
14 | #include <linux/of.h> | 14 | #include <linux/of.h> |
15 | #include <linux/err.h> | 15 | #include <linux/err.h> |
16 | 16 | ||
17 | #include <mach/hardware.h> | ||
18 | #include <mach/common.h> | ||
19 | |||
20 | #include "crm-regs-imx5.h" | 17 | #include "crm-regs-imx5.h" |
21 | #include "clk.h" | 18 | #include "clk.h" |
19 | #include "common.h" | ||
20 | #include "hardware.h" | ||
22 | 21 | ||
23 | /* Low-power Audio Playback Mode clock */ | 22 | /* Low-power Audio Playback Mode clock */ |
24 | static const char *lp_apm_sel[] = { "osc", }; | 23 | static const char *lp_apm_sel[] = { "osc", }; |
@@ -258,8 +257,8 @@ static void __init mx5_clocks_common_init(unsigned long rate_ckil, | |||
258 | clk_register_clkdev(clk[cspi_ipg_gate], NULL, "imx35-cspi.2"); | 257 | clk_register_clkdev(clk[cspi_ipg_gate], NULL, "imx35-cspi.2"); |
259 | clk_register_clkdev(clk[pwm1_ipg_gate], "pwm", "mxc_pwm.0"); | 258 | clk_register_clkdev(clk[pwm1_ipg_gate], "pwm", "mxc_pwm.0"); |
260 | clk_register_clkdev(clk[pwm2_ipg_gate], "pwm", "mxc_pwm.1"); | 259 | clk_register_clkdev(clk[pwm2_ipg_gate], "pwm", "mxc_pwm.1"); |
261 | clk_register_clkdev(clk[i2c1_gate], NULL, "imx-i2c.0"); | 260 | clk_register_clkdev(clk[i2c1_gate], NULL, "imx21-i2c.0"); |
262 | clk_register_clkdev(clk[i2c2_gate], NULL, "imx-i2c.1"); | 261 | clk_register_clkdev(clk[i2c2_gate], NULL, "imx21-i2c.1"); |
263 | clk_register_clkdev(clk[usboh3_per_gate], "per", "mxc-ehci.0"); | 262 | clk_register_clkdev(clk[usboh3_per_gate], "per", "mxc-ehci.0"); |
264 | clk_register_clkdev(clk[usboh3_gate], "ipg", "mxc-ehci.0"); | 263 | clk_register_clkdev(clk[usboh3_gate], "ipg", "mxc-ehci.0"); |
265 | clk_register_clkdev(clk[usboh3_gate], "ahb", "mxc-ehci.0"); | 264 | clk_register_clkdev(clk[usboh3_gate], "ahb", "mxc-ehci.0"); |
@@ -272,7 +271,7 @@ static void __init mx5_clocks_common_init(unsigned long rate_ckil, | |||
272 | clk_register_clkdev(clk[usboh3_per_gate], "per", "fsl-usb2-udc"); | 271 | clk_register_clkdev(clk[usboh3_per_gate], "per", "fsl-usb2-udc"); |
273 | clk_register_clkdev(clk[usboh3_gate], "ipg", "fsl-usb2-udc"); | 272 | clk_register_clkdev(clk[usboh3_gate], "ipg", "fsl-usb2-udc"); |
274 | clk_register_clkdev(clk[usboh3_gate], "ahb", "fsl-usb2-udc"); | 273 | clk_register_clkdev(clk[usboh3_gate], "ahb", "fsl-usb2-udc"); |
275 | clk_register_clkdev(clk[nfc_gate], NULL, "mxc_nand"); | 274 | clk_register_clkdev(clk[nfc_gate], NULL, "imx51-nand"); |
276 | clk_register_clkdev(clk[ssi1_ipg_gate], NULL, "imx-ssi.0"); | 275 | clk_register_clkdev(clk[ssi1_ipg_gate], NULL, "imx-ssi.0"); |
277 | clk_register_clkdev(clk[ssi2_ipg_gate], NULL, "imx-ssi.1"); | 276 | clk_register_clkdev(clk[ssi2_ipg_gate], NULL, "imx-ssi.1"); |
278 | clk_register_clkdev(clk[ssi3_ipg_gate], NULL, "imx-ssi.2"); | 277 | clk_register_clkdev(clk[ssi3_ipg_gate], NULL, "imx-ssi.2"); |
@@ -345,7 +344,7 @@ int __init mx51_clocks_init(unsigned long rate_ckil, unsigned long rate_osc, | |||
345 | 344 | ||
346 | mx5_clocks_common_init(rate_ckil, rate_osc, rate_ckih1, rate_ckih2); | 345 | mx5_clocks_common_init(rate_ckil, rate_osc, rate_ckih1, rate_ckih2); |
347 | 346 | ||
348 | clk_register_clkdev(clk[hsi2c_gate], NULL, "imx-i2c.2"); | 347 | clk_register_clkdev(clk[hsi2c_gate], NULL, "imx21-i2c.2"); |
349 | clk_register_clkdev(clk[mx51_mipi], "mipi_hsp", NULL); | 348 | clk_register_clkdev(clk[mx51_mipi], "mipi_hsp", NULL); |
350 | clk_register_clkdev(clk[vpu_gate], NULL, "imx51-vpu.0"); | 349 | clk_register_clkdev(clk[vpu_gate], NULL, "imx51-vpu.0"); |
351 | clk_register_clkdev(clk[fec_gate], NULL, "imx27-fec.0"); | 350 | clk_register_clkdev(clk[fec_gate], NULL, "imx27-fec.0"); |
@@ -440,7 +439,7 @@ int __init mx53_clocks_init(unsigned long rate_ckil, unsigned long rate_osc, | |||
440 | mx5_clocks_common_init(rate_ckil, rate_osc, rate_ckih1, rate_ckih2); | 439 | mx5_clocks_common_init(rate_ckil, rate_osc, rate_ckih1, rate_ckih2); |
441 | 440 | ||
442 | clk_register_clkdev(clk[vpu_gate], NULL, "imx53-vpu.0"); | 441 | clk_register_clkdev(clk[vpu_gate], NULL, "imx53-vpu.0"); |
443 | clk_register_clkdev(clk[i2c3_gate], NULL, "imx-i2c.2"); | 442 | clk_register_clkdev(clk[i2c3_gate], NULL, "imx21-i2c.2"); |
444 | clk_register_clkdev(clk[fec_gate], NULL, "imx25-fec.0"); | 443 | clk_register_clkdev(clk[fec_gate], NULL, "imx25-fec.0"); |
445 | clk_register_clkdev(clk[ipu_gate], "bus", "imx53-ipu"); | 444 | clk_register_clkdev(clk[ipu_gate], "bus", "imx53-ipu"); |
446 | clk_register_clkdev(clk[ipu_di0_gate], "di0", "imx53-ipu"); | 445 | clk_register_clkdev(clk[ipu_di0_gate], "di0", "imx53-ipu"); |
diff --git a/arch/arm/mach-imx/clk-imx6q.c b/arch/arm/mach-imx/clk-imx6q.c index 3ec242f3341e..e5a82bb95b52 100644 --- a/arch/arm/mach-imx/clk-imx6q.c +++ b/arch/arm/mach-imx/clk-imx6q.c | |||
@@ -19,8 +19,9 @@ | |||
19 | #include <linux/of.h> | 19 | #include <linux/of.h> |
20 | #include <linux/of_address.h> | 20 | #include <linux/of_address.h> |
21 | #include <linux/of_irq.h> | 21 | #include <linux/of_irq.h> |
22 | #include <mach/common.h> | 22 | |
23 | #include "clk.h" | 23 | #include "clk.h" |
24 | #include "common.h" | ||
24 | 25 | ||
25 | #define CCGR0 0x68 | 26 | #define CCGR0 0x68 |
26 | #define CCGR1 0x6c | 27 | #define CCGR1 0x6c |
diff --git a/arch/arm/mach-imx/clk-pllv1.c b/arch/arm/mach-imx/clk-pllv1.c index 02be73178912..abff350ba24c 100644 --- a/arch/arm/mach-imx/clk-pllv1.c +++ b/arch/arm/mach-imx/clk-pllv1.c | |||
@@ -4,10 +4,10 @@ | |||
4 | #include <linux/slab.h> | 4 | #include <linux/slab.h> |
5 | #include <linux/kernel.h> | 5 | #include <linux/kernel.h> |
6 | #include <linux/err.h> | 6 | #include <linux/err.h> |
7 | #include <mach/common.h> | ||
8 | #include <mach/hardware.h> | ||
9 | 7 | ||
10 | #include "clk.h" | 8 | #include "clk.h" |
9 | #include "common.h" | ||
10 | #include "hardware.h" | ||
11 | 11 | ||
12 | /** | 12 | /** |
13 | * pll v1 | 13 | * pll v1 |
diff --git a/arch/arm/plat-mxc/include/mach/common.h b/arch/arm/mach-imx/common.h index ead901814c0d..7191ab4434e5 100644 --- a/arch/arm/plat-mxc/include/mach/common.h +++ b/arch/arm/mach-imx/common.h | |||
@@ -66,6 +66,7 @@ extern int mx51_clocks_init(unsigned long ckil, unsigned long osc, | |||
66 | unsigned long ckih1, unsigned long ckih2); | 66 | unsigned long ckih1, unsigned long ckih2); |
67 | extern int mx53_clocks_init(unsigned long ckil, unsigned long osc, | 67 | extern int mx53_clocks_init(unsigned long ckil, unsigned long osc, |
68 | unsigned long ckih1, unsigned long ckih2); | 68 | unsigned long ckih1, unsigned long ckih2); |
69 | extern int mx25_clocks_init_dt(void); | ||
69 | extern int mx27_clocks_init_dt(void); | 70 | extern int mx27_clocks_init_dt(void); |
70 | extern int mx31_clocks_init_dt(void); | 71 | extern int mx31_clocks_init_dt(void); |
71 | extern int mx51_clocks_init_dt(void); | 72 | extern int mx51_clocks_init_dt(void); |
@@ -79,6 +80,7 @@ extern void mxc_arch_reset_init(void __iomem *); | |||
79 | extern int mx53_revision(void); | 80 | extern int mx53_revision(void); |
80 | extern int mx53_display_revision(void); | 81 | extern int mx53_display_revision(void); |
81 | extern void imx_set_aips(void __iomem *); | 82 | extern void imx_set_aips(void __iomem *); |
83 | extern int mxc_device_init(void); | ||
82 | 84 | ||
83 | enum mxc_cpu_pwr_mode { | 85 | enum mxc_cpu_pwr_mode { |
84 | WAIT_CLOCKED, /* wfi only */ | 86 | WAIT_CLOCKED, /* wfi only */ |
diff --git a/arch/arm/mach-imx/cpu-imx25.c b/arch/arm/mach-imx/cpu-imx25.c index 6914bcbf84e4..96ec64b5ff7d 100644 --- a/arch/arm/mach-imx/cpu-imx25.c +++ b/arch/arm/mach-imx/cpu-imx25.c | |||
@@ -11,8 +11,9 @@ | |||
11 | */ | 11 | */ |
12 | #include <linux/module.h> | 12 | #include <linux/module.h> |
13 | #include <linux/io.h> | 13 | #include <linux/io.h> |
14 | #include <mach/hardware.h> | 14 | |
15 | #include <mach/iim.h> | 15 | #include "iim.h" |
16 | #include "hardware.h" | ||
16 | 17 | ||
17 | static int mx25_cpu_rev = -1; | 18 | static int mx25_cpu_rev = -1; |
18 | 19 | ||
diff --git a/arch/arm/mach-imx/cpu-imx27.c b/arch/arm/mach-imx/cpu-imx27.c index ff38e1505f67..fe8d36f7e30e 100644 --- a/arch/arm/mach-imx/cpu-imx27.c +++ b/arch/arm/mach-imx/cpu-imx27.c | |||
@@ -24,7 +24,7 @@ | |||
24 | #include <linux/io.h> | 24 | #include <linux/io.h> |
25 | #include <linux/module.h> | 25 | #include <linux/module.h> |
26 | 26 | ||
27 | #include <mach/hardware.h> | 27 | #include "hardware.h" |
28 | 28 | ||
29 | static int mx27_cpu_rev = -1; | 29 | static int mx27_cpu_rev = -1; |
30 | static int mx27_cpu_partnumber; | 30 | static int mx27_cpu_partnumber; |
diff --git a/arch/arm/mach-imx/cpu-imx31.c b/arch/arm/mach-imx/cpu-imx31.c index 3f2345f0cdaf..fde1860a2521 100644 --- a/arch/arm/mach-imx/cpu-imx31.c +++ b/arch/arm/mach-imx/cpu-imx31.c | |||
@@ -11,9 +11,10 @@ | |||
11 | 11 | ||
12 | #include <linux/module.h> | 12 | #include <linux/module.h> |
13 | #include <linux/io.h> | 13 | #include <linux/io.h> |
14 | #include <mach/hardware.h> | 14 | |
15 | #include <mach/iim.h> | 15 | #include "common.h" |
16 | #include <mach/common.h> | 16 | #include "hardware.h" |
17 | #include "iim.h" | ||
17 | 18 | ||
18 | static int mx31_cpu_rev = -1; | 19 | static int mx31_cpu_rev = -1; |
19 | 20 | ||
diff --git a/arch/arm/mach-imx/cpu-imx35.c b/arch/arm/mach-imx/cpu-imx35.c index 846e46eb8cbf..ec3aaa098c17 100644 --- a/arch/arm/mach-imx/cpu-imx35.c +++ b/arch/arm/mach-imx/cpu-imx35.c | |||
@@ -10,8 +10,9 @@ | |||
10 | */ | 10 | */ |
11 | #include <linux/module.h> | 11 | #include <linux/module.h> |
12 | #include <linux/io.h> | 12 | #include <linux/io.h> |
13 | #include <mach/hardware.h> | 13 | |
14 | #include <mach/iim.h> | 14 | #include "hardware.h" |
15 | #include "iim.h" | ||
15 | 16 | ||
16 | static int mx35_cpu_rev = -1; | 17 | static int mx35_cpu_rev = -1; |
17 | 18 | ||
diff --git a/arch/arm/mach-imx/cpu-imx5.c b/arch/arm/mach-imx/cpu-imx5.c index 8eb15a2fcaf9..d88760014ff9 100644 --- a/arch/arm/mach-imx/cpu-imx5.c +++ b/arch/arm/mach-imx/cpu-imx5.c | |||
@@ -15,9 +15,10 @@ | |||
15 | #include <linux/kernel.h> | 15 | #include <linux/kernel.h> |
16 | #include <linux/init.h> | 16 | #include <linux/init.h> |
17 | #include <linux/module.h> | 17 | #include <linux/module.h> |
18 | #include <mach/hardware.h> | ||
19 | #include <linux/io.h> | 18 | #include <linux/io.h> |
20 | 19 | ||
20 | #include "hardware.h" | ||
21 | |||
21 | static int mx5_cpu_rev = -1; | 22 | static int mx5_cpu_rev = -1; |
22 | 23 | ||
23 | #define IIM_SREV 0x24 | 24 | #define IIM_SREV 0x24 |
diff --git a/arch/arm/plat-mxc/cpu.c b/arch/arm/mach-imx/cpu.c index 220dd6f93126..03fcbd082593 100644 --- a/arch/arm/plat-mxc/cpu.c +++ b/arch/arm/mach-imx/cpu.c | |||
@@ -1,7 +1,8 @@ | |||
1 | 1 | ||
2 | #include <linux/module.h> | 2 | #include <linux/module.h> |
3 | #include <linux/io.h> | 3 | #include <linux/io.h> |
4 | #include <mach/hardware.h> | 4 | |
5 | #include "hardware.h" | ||
5 | 6 | ||
6 | unsigned int __mxc_cpu_type; | 7 | unsigned int __mxc_cpu_type; |
7 | EXPORT_SYMBOL(__mxc_cpu_type); | 8 | EXPORT_SYMBOL(__mxc_cpu_type); |
diff --git a/arch/arm/mach-imx/cpu_op-mx51.c b/arch/arm/mach-imx/cpu_op-mx51.c index 7b92cd6da6d3..b9ef692b61a2 100644 --- a/arch/arm/mach-imx/cpu_op-mx51.c +++ b/arch/arm/mach-imx/cpu_op-mx51.c | |||
@@ -13,9 +13,10 @@ | |||
13 | 13 | ||
14 | #include <linux/bug.h> | 14 | #include <linux/bug.h> |
15 | #include <linux/types.h> | 15 | #include <linux/types.h> |
16 | #include <mach/hardware.h> | ||
17 | #include <linux/kernel.h> | 16 | #include <linux/kernel.h> |
18 | 17 | ||
18 | #include "hardware.h" | ||
19 | |||
19 | static struct cpu_op mx51_cpu_op[] = { | 20 | static struct cpu_op mx51_cpu_op[] = { |
20 | { | 21 | { |
21 | .cpu_rate = 160000000,}, | 22 | .cpu_rate = 160000000,}, |
diff --git a/arch/arm/plat-mxc/cpufreq.c b/arch/arm/mach-imx/cpufreq.c index b5b6f8083130..36e8b3994470 100644 --- a/arch/arm/plat-mxc/cpufreq.c +++ b/arch/arm/mach-imx/cpufreq.c | |||
@@ -22,7 +22,8 @@ | |||
22 | #include <linux/clk.h> | 22 | #include <linux/clk.h> |
23 | #include <linux/err.h> | 23 | #include <linux/err.h> |
24 | #include <linux/slab.h> | 24 | #include <linux/slab.h> |
25 | #include <mach/hardware.h> | 25 | |
26 | #include "hardware.h" | ||
26 | 27 | ||
27 | #define CLK32_FREQ 32768 | 28 | #define CLK32_FREQ 32768 |
28 | #define NANOSECOND (1000 * 1000 * 1000) | 29 | #define NANOSECOND (1000 * 1000 * 1000) |
diff --git a/arch/arm/plat-mxc/cpuidle.c b/arch/arm/mach-imx/cpuidle.c index d4cb511a44a8..d4cb511a44a8 100644 --- a/arch/arm/plat-mxc/cpuidle.c +++ b/arch/arm/mach-imx/cpuidle.c | |||
diff --git a/arch/arm/plat-mxc/include/mach/cpuidle.h b/arch/arm/mach-imx/cpuidle.h index bc932d1af372..bc932d1af372 100644 --- a/arch/arm/plat-mxc/include/mach/cpuidle.h +++ b/arch/arm/mach-imx/cpuidle.h | |||
diff --git a/arch/arm/mach-imx/devices-imx1.h b/arch/arm/mach-imx/devices-imx1.h index 3aad1e70de96..f9b5afc6bcd1 100644 --- a/arch/arm/mach-imx/devices-imx1.h +++ b/arch/arm/mach-imx/devices-imx1.h | |||
@@ -6,8 +6,7 @@ | |||
6 | * the terms of the GNU General Public License version 2 as published by the | 6 | * the terms of the GNU General Public License version 2 as published by the |
7 | * Free Software Foundation. | 7 | * Free Software Foundation. |
8 | */ | 8 | */ |
9 | #include <mach/mx1.h> | 9 | #include "devices/devices-common.h" |
10 | #include <mach/devices-common.h> | ||
11 | 10 | ||
12 | extern const struct imx_imx_fb_data imx1_imx_fb_data; | 11 | extern const struct imx_imx_fb_data imx1_imx_fb_data; |
13 | #define imx1_add_imx_fb(pdata) \ | 12 | #define imx1_add_imx_fb(pdata) \ |
diff --git a/arch/arm/mach-imx/devices-imx21.h b/arch/arm/mach-imx/devices-imx21.h index 93ece55f75df..bd9393280159 100644 --- a/arch/arm/mach-imx/devices-imx21.h +++ b/arch/arm/mach-imx/devices-imx21.h | |||
@@ -6,8 +6,7 @@ | |||
6 | * the terms of the GNU General Public License version 2 as published by the | 6 | * the terms of the GNU General Public License version 2 as published by the |
7 | * Free Software Foundation. | 7 | * Free Software Foundation. |
8 | */ | 8 | */ |
9 | #include <mach/mx21.h> | 9 | #include "devices/devices-common.h" |
10 | #include <mach/devices-common.h> | ||
11 | 10 | ||
12 | extern const struct imx_imx21_hcd_data imx21_imx21_hcd_data; | 11 | extern const struct imx_imx21_hcd_data imx21_imx21_hcd_data; |
13 | #define imx21_add_imx21_hcd(pdata) \ | 12 | #define imx21_add_imx21_hcd(pdata) \ |
diff --git a/arch/arm/mach-imx/devices-imx25.h b/arch/arm/mach-imx/devices-imx25.h index f8e03dd1f116..0d2922bc575c 100644 --- a/arch/arm/mach-imx/devices-imx25.h +++ b/arch/arm/mach-imx/devices-imx25.h | |||
@@ -6,8 +6,7 @@ | |||
6 | * the terms of the GNU General Public License version 2 as published by the | 6 | * the terms of the GNU General Public License version 2 as published by the |
7 | * Free Software Foundation. | 7 | * Free Software Foundation. |
8 | */ | 8 | */ |
9 | #include <mach/mx25.h> | 9 | #include "devices/devices-common.h" |
10 | #include <mach/devices-common.h> | ||
11 | 10 | ||
12 | extern const struct imx_fec_data imx25_fec_data; | 11 | extern const struct imx_fec_data imx25_fec_data; |
13 | #define imx25_add_fec(pdata) \ | 12 | #define imx25_add_fec(pdata) \ |
diff --git a/arch/arm/mach-imx/devices-imx27.h b/arch/arm/mach-imx/devices-imx27.h index 04822932cdd1..8a1ad7972d4c 100644 --- a/arch/arm/mach-imx/devices-imx27.h +++ b/arch/arm/mach-imx/devices-imx27.h | |||
@@ -6,8 +6,7 @@ | |||
6 | * the terms of the GNU General Public License version 2 as published by the | 6 | * the terms of the GNU General Public License version 2 as published by the |
7 | * Free Software Foundation. | 7 | * Free Software Foundation. |
8 | */ | 8 | */ |
9 | #include <mach/mx27.h> | 9 | #include "devices/devices-common.h" |
10 | #include <mach/devices-common.h> | ||
11 | 10 | ||
12 | extern const struct imx_fec_data imx27_fec_data; | 11 | extern const struct imx_fec_data imx27_fec_data; |
13 | #define imx27_add_fec(pdata) \ | 12 | #define imx27_add_fec(pdata) \ |
diff --git a/arch/arm/mach-imx/devices-imx31.h b/arch/arm/mach-imx/devices-imx31.h index 8b2ceb45bb83..e8d1611bbc8e 100644 --- a/arch/arm/mach-imx/devices-imx31.h +++ b/arch/arm/mach-imx/devices-imx31.h | |||
@@ -6,8 +6,7 @@ | |||
6 | * the terms of the GNU General Public License version 2 as published by the | 6 | * the terms of the GNU General Public License version 2 as published by the |
7 | * Free Software Foundation. | 7 | * Free Software Foundation. |
8 | */ | 8 | */ |
9 | #include <mach/mx31.h> | 9 | #include "devices/devices-common.h" |
10 | #include <mach/devices-common.h> | ||
11 | 10 | ||
12 | extern const struct imx_fsl_usb2_udc_data imx31_fsl_usb2_udc_data; | 11 | extern const struct imx_fsl_usb2_udc_data imx31_fsl_usb2_udc_data; |
13 | #define imx31_add_fsl_usb2_udc(pdata) \ | 12 | #define imx31_add_fsl_usb2_udc(pdata) \ |
diff --git a/arch/arm/mach-imx/devices-imx35.h b/arch/arm/mach-imx/devices-imx35.h index c3e9f206ac2b..e2675f1b141c 100644 --- a/arch/arm/mach-imx/devices-imx35.h +++ b/arch/arm/mach-imx/devices-imx35.h | |||
@@ -6,8 +6,7 @@ | |||
6 | * the terms of the GNU General Public License version 2 as published by the | 6 | * the terms of the GNU General Public License version 2 as published by the |
7 | * Free Software Foundation. | 7 | * Free Software Foundation. |
8 | */ | 8 | */ |
9 | #include <mach/mx35.h> | 9 | #include "devices/devices-common.h" |
10 | #include <mach/devices-common.h> | ||
11 | 10 | ||
12 | extern const struct imx_fec_data imx35_fec_data; | 11 | extern const struct imx_fec_data imx35_fec_data; |
13 | #define imx35_add_fec(pdata) \ | 12 | #define imx35_add_fec(pdata) \ |
diff --git a/arch/arm/mach-imx/devices-imx50.h b/arch/arm/mach-imx/devices-imx50.h index 7216667eaafc..2c290391f298 100644 --- a/arch/arm/mach-imx/devices-imx50.h +++ b/arch/arm/mach-imx/devices-imx50.h | |||
@@ -18,8 +18,7 @@ | |||
18 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | 18 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
19 | */ | 19 | */ |
20 | 20 | ||
21 | #include <mach/mx50.h> | 21 | #include "devices/devices-common.h" |
22 | #include <mach/devices-common.h> | ||
23 | 22 | ||
24 | extern const struct imx_imx_uart_1irq_data imx50_imx_uart_data[]; | 23 | extern const struct imx_imx_uart_1irq_data imx50_imx_uart_data[]; |
25 | #define imx50_add_imx_uart(id, pdata) \ | 24 | #define imx50_add_imx_uart(id, pdata) \ |
diff --git a/arch/arm/mach-imx/devices-imx51.h b/arch/arm/mach-imx/devices-imx51.h index 9f1718725195..deee5baee88c 100644 --- a/arch/arm/mach-imx/devices-imx51.h +++ b/arch/arm/mach-imx/devices-imx51.h | |||
@@ -6,8 +6,7 @@ | |||
6 | * the terms of the GNU General Public License version 2 as published by the | 6 | * the terms of the GNU General Public License version 2 as published by the |
7 | * Free Software Foundation. | 7 | * Free Software Foundation. |
8 | */ | 8 | */ |
9 | #include <mach/mx51.h> | 9 | #include "devices/devices-common.h" |
10 | #include <mach/devices-common.h> | ||
11 | 10 | ||
12 | extern const struct imx_fec_data imx51_fec_data; | 11 | extern const struct imx_fec_data imx51_fec_data; |
13 | #define imx51_add_fec(pdata) \ | 12 | #define imx51_add_fec(pdata) \ |
diff --git a/arch/arm/plat-mxc/devices/Kconfig b/arch/arm/mach-imx/devices/Kconfig index a35d9841f494..a35d9841f494 100644 --- a/arch/arm/plat-mxc/devices/Kconfig +++ b/arch/arm/mach-imx/devices/Kconfig | |||
diff --git a/arch/arm/plat-mxc/devices/Makefile b/arch/arm/mach-imx/devices/Makefile index 76f3195475d0..2abe2a5144d0 100644 --- a/arch/arm/plat-mxc/devices/Makefile +++ b/arch/arm/mach-imx/devices/Makefile | |||
@@ -1,3 +1,5 @@ | |||
1 | obj-y := devices.o | ||
2 | |||
1 | obj-$(CONFIG_IMX_HAVE_PLATFORM_FEC) += platform-fec.o | 3 | obj-$(CONFIG_IMX_HAVE_PLATFORM_FEC) += platform-fec.o |
2 | obj-$(CONFIG_IMX_HAVE_PLATFORM_FLEXCAN) += platform-flexcan.o | 4 | obj-$(CONFIG_IMX_HAVE_PLATFORM_FLEXCAN) += platform-flexcan.o |
3 | obj-$(CONFIG_IMX_HAVE_PLATFORM_FSL_USB2_UDC) += platform-fsl-usb2-udc.o | 5 | obj-$(CONFIG_IMX_HAVE_PLATFORM_FSL_USB2_UDC) += platform-fsl-usb2-udc.o |
diff --git a/arch/arm/plat-mxc/include/mach/devices-common.h b/arch/arm/mach-imx/devices/devices-common.h index eaf79d220c9a..e4b790b9e2aa 100644 --- a/arch/arm/plat-mxc/include/mach/devices-common.h +++ b/arch/arm/mach-imx/devices/devices-common.h | |||
@@ -108,6 +108,7 @@ struct platform_device *__init imx_add_imxdi_rtc( | |||
108 | 108 | ||
109 | #include <linux/platform_data/video-imxfb.h> | 109 | #include <linux/platform_data/video-imxfb.h> |
110 | struct imx_imx_fb_data { | 110 | struct imx_imx_fb_data { |
111 | const char *devid; | ||
111 | resource_size_t iobase; | 112 | resource_size_t iobase; |
112 | resource_size_t iosize; | 113 | resource_size_t iosize; |
113 | resource_size_t irq; | 114 | resource_size_t irq; |
@@ -118,6 +119,7 @@ struct platform_device *__init imx_add_imx_fb( | |||
118 | 119 | ||
119 | #include <linux/platform_data/i2c-imx.h> | 120 | #include <linux/platform_data/i2c-imx.h> |
120 | struct imx_imx_i2c_data { | 121 | struct imx_imx_i2c_data { |
122 | const char *devid; | ||
121 | int id; | 123 | int id; |
122 | resource_size_t iobase; | 124 | resource_size_t iobase; |
123 | resource_size_t iosize; | 125 | resource_size_t iosize; |
@@ -219,6 +221,7 @@ struct platform_device *__init imx_add_mx1_camera( | |||
219 | 221 | ||
220 | #include <linux/platform_data/camera-mx2.h> | 222 | #include <linux/platform_data/camera-mx2.h> |
221 | struct imx_mx2_camera_data { | 223 | struct imx_mx2_camera_data { |
224 | const char *devid; | ||
222 | resource_size_t iobasecsi; | 225 | resource_size_t iobasecsi; |
223 | resource_size_t iosizecsi; | 226 | resource_size_t iosizecsi; |
224 | resource_size_t irqcsi; | 227 | resource_size_t irqcsi; |
@@ -244,6 +247,7 @@ struct platform_device *__init imx_add_mxc_ehci( | |||
244 | 247 | ||
245 | #include <linux/platform_data/mmc-mxcmmc.h> | 248 | #include <linux/platform_data/mmc-mxcmmc.h> |
246 | struct imx_mxc_mmc_data { | 249 | struct imx_mxc_mmc_data { |
250 | const char *devid; | ||
247 | int id; | 251 | int id; |
248 | resource_size_t iobase; | 252 | resource_size_t iobase; |
249 | resource_size_t iosize; | 253 | resource_size_t iosize; |
@@ -256,6 +260,7 @@ struct platform_device *__init imx_add_mxc_mmc( | |||
256 | 260 | ||
257 | #include <linux/platform_data/mtd-mxc_nand.h> | 261 | #include <linux/platform_data/mtd-mxc_nand.h> |
258 | struct imx_mxc_nand_data { | 262 | struct imx_mxc_nand_data { |
263 | const char *devid; | ||
259 | /* | 264 | /* |
260 | * id is traditionally 0, but -1 is more appropriate. We use -1 for new | 265 | * id is traditionally 0, but -1 is more appropriate. We use -1 for new |
261 | * machines but don't change existing devices as the nand device usually | 266 | * machines but don't change existing devices as the nand device usually |
@@ -290,6 +295,7 @@ struct platform_device *__init imx_add_mxc_pwm( | |||
290 | 295 | ||
291 | /* mxc_rtc */ | 296 | /* mxc_rtc */ |
292 | struct imx_mxc_rtc_data { | 297 | struct imx_mxc_rtc_data { |
298 | const char *devid; | ||
293 | resource_size_t iobase; | 299 | resource_size_t iobase; |
294 | resource_size_t irq; | 300 | resource_size_t irq; |
295 | }; | 301 | }; |
@@ -326,7 +332,8 @@ struct platform_device *__init imx_add_spi_imx( | |||
326 | const struct imx_spi_imx_data *data, | 332 | const struct imx_spi_imx_data *data, |
327 | const struct spi_imx_master *pdata); | 333 | const struct spi_imx_master *pdata); |
328 | 334 | ||
329 | struct platform_device *imx_add_imx_dma(void); | 335 | struct platform_device *imx_add_imx_dma(char *name, resource_size_t iobase, |
336 | int irq, int irq_err); | ||
330 | struct platform_device *imx_add_imx_sdma(char *name, | 337 | struct platform_device *imx_add_imx_sdma(char *name, |
331 | resource_size_t iobase, int irq, struct sdma_platform_data *pdata); | 338 | resource_size_t iobase, int irq, struct sdma_platform_data *pdata); |
332 | 339 | ||
diff --git a/arch/arm/plat-mxc/devices.c b/arch/arm/mach-imx/devices/devices.c index 4d55a7a26e98..1b37482407f9 100644 --- a/arch/arm/plat-mxc/devices.c +++ b/arch/arm/mach-imx/devices/devices.c | |||
@@ -21,7 +21,6 @@ | |||
21 | #include <linux/init.h> | 21 | #include <linux/init.h> |
22 | #include <linux/err.h> | 22 | #include <linux/err.h> |
23 | #include <linux/platform_device.h> | 23 | #include <linux/platform_device.h> |
24 | #include <mach/common.h> | ||
25 | 24 | ||
26 | struct device mxc_aips_bus = { | 25 | struct device mxc_aips_bus = { |
27 | .init_name = "mxc_aips", | 26 | .init_name = "mxc_aips", |
@@ -33,7 +32,7 @@ struct device mxc_ahb_bus = { | |||
33 | .parent = &platform_bus, | 32 | .parent = &platform_bus, |
34 | }; | 33 | }; |
35 | 34 | ||
36 | static int __init mxc_device_init(void) | 35 | int __init mxc_device_init(void) |
37 | { | 36 | { |
38 | int ret; | 37 | int ret; |
39 | 38 | ||
@@ -46,4 +45,3 @@ static int __init mxc_device_init(void) | |||
46 | done: | 45 | done: |
47 | return ret; | 46 | return ret; |
48 | } | 47 | } |
49 | core_initcall(mxc_device_init); | ||
diff --git a/arch/arm/plat-mxc/devices/platform-ahci-imx.c b/arch/arm/mach-imx/devices/platform-ahci-imx.c index ade4a1c4e2a3..3d87dd9c284a 100644 --- a/arch/arm/plat-mxc/devices/platform-ahci-imx.c +++ b/arch/arm/mach-imx/devices/platform-ahci-imx.c | |||
@@ -24,8 +24,9 @@ | |||
24 | #include <linux/device.h> | 24 | #include <linux/device.h> |
25 | #include <linux/dma-mapping.h> | 25 | #include <linux/dma-mapping.h> |
26 | #include <asm/sizes.h> | 26 | #include <asm/sizes.h> |
27 | #include <mach/hardware.h> | 27 | |
28 | #include <mach/devices-common.h> | 28 | #include "../hardware.h" |
29 | #include "devices-common.h" | ||
29 | 30 | ||
30 | #define imx_ahci_imx_data_entry_single(soc, _devid) \ | 31 | #define imx_ahci_imx_data_entry_single(soc, _devid) \ |
31 | { \ | 32 | { \ |
diff --git a/arch/arm/plat-mxc/devices/platform-fec.c b/arch/arm/mach-imx/devices/platform-fec.c index 0bae44e890db..2cb188ad9a0a 100644 --- a/arch/arm/plat-mxc/devices/platform-fec.c +++ b/arch/arm/mach-imx/devices/platform-fec.c | |||
@@ -8,8 +8,9 @@ | |||
8 | */ | 8 | */ |
9 | #include <linux/dma-mapping.h> | 9 | #include <linux/dma-mapping.h> |
10 | #include <asm/sizes.h> | 10 | #include <asm/sizes.h> |
11 | #include <mach/hardware.h> | 11 | |
12 | #include <mach/devices-common.h> | 12 | #include "../hardware.h" |
13 | #include "devices-common.h" | ||
13 | 14 | ||
14 | #define imx_fec_data_entry_single(soc, _devid) \ | 15 | #define imx_fec_data_entry_single(soc, _devid) \ |
15 | { \ | 16 | { \ |
diff --git a/arch/arm/plat-mxc/devices/platform-flexcan.c b/arch/arm/mach-imx/devices/platform-flexcan.c index 4e8497af2eb1..1078bf0a94ef 100644 --- a/arch/arm/plat-mxc/devices/platform-flexcan.c +++ b/arch/arm/mach-imx/devices/platform-flexcan.c | |||
@@ -5,8 +5,8 @@ | |||
5 | * the terms of the GNU General Public License version 2 as published by the | 5 | * the terms of the GNU General Public License version 2 as published by the |
6 | * Free Software Foundation. | 6 | * Free Software Foundation. |
7 | */ | 7 | */ |
8 | #include <mach/hardware.h> | 8 | #include "../hardware.h" |
9 | #include <mach/devices-common.h> | 9 | #include "devices-common.h" |
10 | 10 | ||
11 | #define imx_flexcan_data_entry_single(soc, _id, _hwid, _size) \ | 11 | #define imx_flexcan_data_entry_single(soc, _id, _hwid, _size) \ |
12 | { \ | 12 | { \ |
diff --git a/arch/arm/plat-mxc/devices/platform-fsl-usb2-udc.c b/arch/arm/mach-imx/devices/platform-fsl-usb2-udc.c index 848038f301fd..37e44398197b 100644 --- a/arch/arm/plat-mxc/devices/platform-fsl-usb2-udc.c +++ b/arch/arm/mach-imx/devices/platform-fsl-usb2-udc.c | |||
@@ -7,8 +7,9 @@ | |||
7 | * Free Software Foundation. | 7 | * Free Software Foundation. |
8 | */ | 8 | */ |
9 | #include <linux/dma-mapping.h> | 9 | #include <linux/dma-mapping.h> |
10 | #include <mach/hardware.h> | 10 | |
11 | #include <mach/devices-common.h> | 11 | #include "../hardware.h" |
12 | #include "devices-common.h" | ||
12 | 13 | ||
13 | #define imx_fsl_usb2_udc_data_entry_single(soc) \ | 14 | #define imx_fsl_usb2_udc_data_entry_single(soc) \ |
14 | { \ | 15 | { \ |
diff --git a/arch/arm/plat-mxc/devices/platform-gpio-mxc.c b/arch/arm/mach-imx/devices/platform-gpio-mxc.c index a7919a241032..26483fa94b75 100644 --- a/arch/arm/plat-mxc/devices/platform-gpio-mxc.c +++ b/arch/arm/mach-imx/devices/platform-gpio-mxc.c | |||
@@ -6,7 +6,7 @@ | |||
6 | * the terms of the GNU General Public License version 2 as published by the | 6 | * the terms of the GNU General Public License version 2 as published by the |
7 | * Free Software Foundation. | 7 | * Free Software Foundation. |
8 | */ | 8 | */ |
9 | #include <mach/devices-common.h> | 9 | #include "devices-common.h" |
10 | 10 | ||
11 | struct platform_device *__init mxc_register_gpio(char *name, int id, | 11 | struct platform_device *__init mxc_register_gpio(char *name, int id, |
12 | resource_size_t iobase, resource_size_t iosize, int irq, int irq_high) | 12 | resource_size_t iobase, resource_size_t iosize, int irq, int irq_high) |
diff --git a/arch/arm/plat-mxc/devices/platform-gpio_keys.c b/arch/arm/mach-imx/devices/platform-gpio_keys.c index 1c53a532ea0e..486282539c76 100644 --- a/arch/arm/plat-mxc/devices/platform-gpio_keys.c +++ b/arch/arm/mach-imx/devices/platform-gpio_keys.c | |||
@@ -16,8 +16,9 @@ | |||
16 | * Boston, MA 02110-1301, USA. | 16 | * Boston, MA 02110-1301, USA. |
17 | */ | 17 | */ |
18 | #include <asm/sizes.h> | 18 | #include <asm/sizes.h> |
19 | #include <mach/hardware.h> | 19 | |
20 | #include <mach/devices-common.h> | 20 | #include "../hardware.h" |
21 | #include "devices-common.h" | ||
21 | 22 | ||
22 | struct platform_device *__init imx_add_gpio_keys( | 23 | struct platform_device *__init imx_add_gpio_keys( |
23 | const struct gpio_keys_platform_data *pdata) | 24 | const struct gpio_keys_platform_data *pdata) |
diff --git a/arch/arm/plat-mxc/devices/platform-imx-dma.c b/arch/arm/mach-imx/devices/platform-imx-dma.c index 7fa7e9c92468..ccdb5dc4ddbd 100644 --- a/arch/arm/plat-mxc/devices/platform-imx-dma.c +++ b/arch/arm/mach-imx/devices/platform-imx-dma.c | |||
@@ -6,12 +6,29 @@ | |||
6 | * the terms of the GNU General Public License version 2 as published by the | 6 | * the terms of the GNU General Public License version 2 as published by the |
7 | * Free Software Foundation. | 7 | * Free Software Foundation. |
8 | */ | 8 | */ |
9 | #include <mach/devices-common.h> | 9 | #include "devices-common.h" |
10 | 10 | ||
11 | struct platform_device __init __maybe_unused *imx_add_imx_dma(void) | 11 | struct platform_device __init __maybe_unused *imx_add_imx_dma(char *name, |
12 | resource_size_t iobase, int irq, int irq_err) | ||
12 | { | 13 | { |
14 | struct resource res[] = { | ||
15 | { | ||
16 | .start = iobase, | ||
17 | .end = iobase + SZ_4K - 1, | ||
18 | .flags = IORESOURCE_MEM, | ||
19 | }, { | ||
20 | .start = irq, | ||
21 | .end = irq, | ||
22 | .flags = IORESOURCE_IRQ, | ||
23 | }, { | ||
24 | .start = irq_err, | ||
25 | .end = irq_err, | ||
26 | .flags = IORESOURCE_IRQ, | ||
27 | }, | ||
28 | }; | ||
29 | |||
13 | return platform_device_register_resndata(&mxc_ahb_bus, | 30 | return platform_device_register_resndata(&mxc_ahb_bus, |
14 | "imx-dma", -1, NULL, 0, NULL, 0); | 31 | name, -1, res, ARRAY_SIZE(res), NULL, 0); |
15 | } | 32 | } |
16 | 33 | ||
17 | struct platform_device __init __maybe_unused *imx_add_imx_sdma(char *name, | 34 | struct platform_device __init __maybe_unused *imx_add_imx_sdma(char *name, |
diff --git a/arch/arm/plat-mxc/devices/platform-imx-fb.c b/arch/arm/mach-imx/devices/platform-imx-fb.c index 2b0b5e0aa998..10b0ed39f07f 100644 --- a/arch/arm/plat-mxc/devices/platform-imx-fb.c +++ b/arch/arm/mach-imx/devices/platform-imx-fb.c | |||
@@ -7,11 +7,13 @@ | |||
7 | * Free Software Foundation. | 7 | * Free Software Foundation. |
8 | */ | 8 | */ |
9 | #include <linux/dma-mapping.h> | 9 | #include <linux/dma-mapping.h> |
10 | #include <mach/hardware.h> | ||
11 | #include <mach/devices-common.h> | ||
12 | 10 | ||
13 | #define imx_imx_fb_data_entry_single(soc, _size) \ | 11 | #include "../hardware.h" |
12 | #include "devices-common.h" | ||
13 | |||
14 | #define imx_imx_fb_data_entry_single(soc, _devid, _size) \ | ||
14 | { \ | 15 | { \ |
16 | .devid = _devid, \ | ||
15 | .iobase = soc ## _LCDC_BASE_ADDR, \ | 17 | .iobase = soc ## _LCDC_BASE_ADDR, \ |
16 | .iosize = _size, \ | 18 | .iosize = _size, \ |
17 | .irq = soc ## _INT_LCDC, \ | 19 | .irq = soc ## _INT_LCDC, \ |
@@ -19,22 +21,22 @@ | |||
19 | 21 | ||
20 | #ifdef CONFIG_SOC_IMX1 | 22 | #ifdef CONFIG_SOC_IMX1 |
21 | const struct imx_imx_fb_data imx1_imx_fb_data __initconst = | 23 | const struct imx_imx_fb_data imx1_imx_fb_data __initconst = |
22 | imx_imx_fb_data_entry_single(MX1, SZ_4K); | 24 | imx_imx_fb_data_entry_single(MX1, "imx1-fb", SZ_4K); |
23 | #endif /* ifdef CONFIG_SOC_IMX1 */ | 25 | #endif /* ifdef CONFIG_SOC_IMX1 */ |
24 | 26 | ||
25 | #ifdef CONFIG_SOC_IMX21 | 27 | #ifdef CONFIG_SOC_IMX21 |
26 | const struct imx_imx_fb_data imx21_imx_fb_data __initconst = | 28 | const struct imx_imx_fb_data imx21_imx_fb_data __initconst = |
27 | imx_imx_fb_data_entry_single(MX21, SZ_4K); | 29 | imx_imx_fb_data_entry_single(MX21, "imx21-fb", SZ_4K); |
28 | #endif /* ifdef CONFIG_SOC_IMX21 */ | 30 | #endif /* ifdef CONFIG_SOC_IMX21 */ |
29 | 31 | ||
30 | #ifdef CONFIG_SOC_IMX25 | 32 | #ifdef CONFIG_SOC_IMX25 |
31 | const struct imx_imx_fb_data imx25_imx_fb_data __initconst = | 33 | const struct imx_imx_fb_data imx25_imx_fb_data __initconst = |
32 | imx_imx_fb_data_entry_single(MX25, SZ_16K); | 34 | imx_imx_fb_data_entry_single(MX25, "imx21-fb", SZ_16K); |
33 | #endif /* ifdef CONFIG_SOC_IMX25 */ | 35 | #endif /* ifdef CONFIG_SOC_IMX25 */ |
34 | 36 | ||
35 | #ifdef CONFIG_SOC_IMX27 | 37 | #ifdef CONFIG_SOC_IMX27 |
36 | const struct imx_imx_fb_data imx27_imx_fb_data __initconst = | 38 | const struct imx_imx_fb_data imx27_imx_fb_data __initconst = |
37 | imx_imx_fb_data_entry_single(MX27, SZ_4K); | 39 | imx_imx_fb_data_entry_single(MX27, "imx21-fb", SZ_4K); |
38 | #endif /* ifdef CONFIG_SOC_IMX27 */ | 40 | #endif /* ifdef CONFIG_SOC_IMX27 */ |
39 | 41 | ||
40 | struct platform_device *__init imx_add_imx_fb( | 42 | struct platform_device *__init imx_add_imx_fb( |
diff --git a/arch/arm/plat-mxc/devices/platform-imx-i2c.c b/arch/arm/mach-imx/devices/platform-imx-i2c.c index 19ad580c0be3..8e30e5703cd2 100644 --- a/arch/arm/plat-mxc/devices/platform-imx-i2c.c +++ b/arch/arm/mach-imx/devices/platform-imx-i2c.c | |||
@@ -6,34 +6,35 @@ | |||
6 | * the terms of the GNU General Public License version 2 as published by the | 6 | * the terms of the GNU General Public License version 2 as published by the |
7 | * Free Software Foundation. | 7 | * Free Software Foundation. |
8 | */ | 8 | */ |
9 | #include <mach/hardware.h> | 9 | #include "../hardware.h" |
10 | #include <mach/devices-common.h> | 10 | #include "devices-common.h" |
11 | 11 | ||
12 | #define imx_imx_i2c_data_entry_single(soc, _id, _hwid, _size) \ | 12 | #define imx_imx_i2c_data_entry_single(soc, _devid, _id, _hwid, _size) \ |
13 | { \ | 13 | { \ |
14 | .devid = _devid, \ | ||
14 | .id = _id, \ | 15 | .id = _id, \ |
15 | .iobase = soc ## _I2C ## _hwid ## _BASE_ADDR, \ | 16 | .iobase = soc ## _I2C ## _hwid ## _BASE_ADDR, \ |
16 | .iosize = _size, \ | 17 | .iosize = _size, \ |
17 | .irq = soc ## _INT_I2C ## _hwid, \ | 18 | .irq = soc ## _INT_I2C ## _hwid, \ |
18 | } | 19 | } |
19 | 20 | ||
20 | #define imx_imx_i2c_data_entry(soc, _id, _hwid, _size) \ | 21 | #define imx_imx_i2c_data_entry(soc, _devid, _id, _hwid, _size) \ |
21 | [_id] = imx_imx_i2c_data_entry_single(soc, _id, _hwid, _size) | 22 | [_id] = imx_imx_i2c_data_entry_single(soc, _devid, _id, _hwid, _size) |
22 | 23 | ||
23 | #ifdef CONFIG_SOC_IMX1 | 24 | #ifdef CONFIG_SOC_IMX1 |
24 | const struct imx_imx_i2c_data imx1_imx_i2c_data __initconst = | 25 | const struct imx_imx_i2c_data imx1_imx_i2c_data __initconst = |
25 | imx_imx_i2c_data_entry_single(MX1, 0, , SZ_4K); | 26 | imx_imx_i2c_data_entry_single(MX1, "imx1-i2c", 0, , SZ_4K); |
26 | #endif /* ifdef CONFIG_SOC_IMX1 */ | 27 | #endif /* ifdef CONFIG_SOC_IMX1 */ |
27 | 28 | ||
28 | #ifdef CONFIG_SOC_IMX21 | 29 | #ifdef CONFIG_SOC_IMX21 |
29 | const struct imx_imx_i2c_data imx21_imx_i2c_data __initconst = | 30 | const struct imx_imx_i2c_data imx21_imx_i2c_data __initconst = |
30 | imx_imx_i2c_data_entry_single(MX21, 0, , SZ_4K); | 31 | imx_imx_i2c_data_entry_single(MX21, "imx21-i2c", 0, , SZ_4K); |
31 | #endif /* ifdef CONFIG_SOC_IMX21 */ | 32 | #endif /* ifdef CONFIG_SOC_IMX21 */ |
32 | 33 | ||
33 | #ifdef CONFIG_SOC_IMX25 | 34 | #ifdef CONFIG_SOC_IMX25 |
34 | const struct imx_imx_i2c_data imx25_imx_i2c_data[] __initconst = { | 35 | const struct imx_imx_i2c_data imx25_imx_i2c_data[] __initconst = { |
35 | #define imx25_imx_i2c_data_entry(_id, _hwid) \ | 36 | #define imx25_imx_i2c_data_entry(_id, _hwid) \ |
36 | imx_imx_i2c_data_entry(MX25, _id, _hwid, SZ_16K) | 37 | imx_imx_i2c_data_entry(MX25, "imx21-i2c", _id, _hwid, SZ_16K) |
37 | imx25_imx_i2c_data_entry(0, 1), | 38 | imx25_imx_i2c_data_entry(0, 1), |
38 | imx25_imx_i2c_data_entry(1, 2), | 39 | imx25_imx_i2c_data_entry(1, 2), |
39 | imx25_imx_i2c_data_entry(2, 3), | 40 | imx25_imx_i2c_data_entry(2, 3), |
@@ -43,7 +44,7 @@ const struct imx_imx_i2c_data imx25_imx_i2c_data[] __initconst = { | |||
43 | #ifdef CONFIG_SOC_IMX27 | 44 | #ifdef CONFIG_SOC_IMX27 |
44 | const struct imx_imx_i2c_data imx27_imx_i2c_data[] __initconst = { | 45 | const struct imx_imx_i2c_data imx27_imx_i2c_data[] __initconst = { |
45 | #define imx27_imx_i2c_data_entry(_id, _hwid) \ | 46 | #define imx27_imx_i2c_data_entry(_id, _hwid) \ |
46 | imx_imx_i2c_data_entry(MX27, _id, _hwid, SZ_4K) | 47 | imx_imx_i2c_data_entry(MX27, "imx21-i2c", _id, _hwid, SZ_4K) |
47 | imx27_imx_i2c_data_entry(0, 1), | 48 | imx27_imx_i2c_data_entry(0, 1), |
48 | imx27_imx_i2c_data_entry(1, 2), | 49 | imx27_imx_i2c_data_entry(1, 2), |
49 | }; | 50 | }; |
@@ -52,7 +53,7 @@ const struct imx_imx_i2c_data imx27_imx_i2c_data[] __initconst = { | |||
52 | #ifdef CONFIG_SOC_IMX31 | 53 | #ifdef CONFIG_SOC_IMX31 |
53 | const struct imx_imx_i2c_data imx31_imx_i2c_data[] __initconst = { | 54 | const struct imx_imx_i2c_data imx31_imx_i2c_data[] __initconst = { |
54 | #define imx31_imx_i2c_data_entry(_id, _hwid) \ | 55 | #define imx31_imx_i2c_data_entry(_id, _hwid) \ |
55 | imx_imx_i2c_data_entry(MX31, _id, _hwid, SZ_4K) | 56 | imx_imx_i2c_data_entry(MX31, "imx21-i2c", _id, _hwid, SZ_4K) |
56 | imx31_imx_i2c_data_entry(0, 1), | 57 | imx31_imx_i2c_data_entry(0, 1), |
57 | imx31_imx_i2c_data_entry(1, 2), | 58 | imx31_imx_i2c_data_entry(1, 2), |
58 | imx31_imx_i2c_data_entry(2, 3), | 59 | imx31_imx_i2c_data_entry(2, 3), |
@@ -62,7 +63,7 @@ const struct imx_imx_i2c_data imx31_imx_i2c_data[] __initconst = { | |||
62 | #ifdef CONFIG_SOC_IMX35 | 63 | #ifdef CONFIG_SOC_IMX35 |
63 | const struct imx_imx_i2c_data imx35_imx_i2c_data[] __initconst = { | 64 | const struct imx_imx_i2c_data imx35_imx_i2c_data[] __initconst = { |
64 | #define imx35_imx_i2c_data_entry(_id, _hwid) \ | 65 | #define imx35_imx_i2c_data_entry(_id, _hwid) \ |
65 | imx_imx_i2c_data_entry(MX35, _id, _hwid, SZ_4K) | 66 | imx_imx_i2c_data_entry(MX35, "imx21-i2c", _id, _hwid, SZ_4K) |
66 | imx35_imx_i2c_data_entry(0, 1), | 67 | imx35_imx_i2c_data_entry(0, 1), |
67 | imx35_imx_i2c_data_entry(1, 2), | 68 | imx35_imx_i2c_data_entry(1, 2), |
68 | imx35_imx_i2c_data_entry(2, 3), | 69 | imx35_imx_i2c_data_entry(2, 3), |
@@ -72,7 +73,7 @@ const struct imx_imx_i2c_data imx35_imx_i2c_data[] __initconst = { | |||
72 | #ifdef CONFIG_SOC_IMX50 | 73 | #ifdef CONFIG_SOC_IMX50 |
73 | const struct imx_imx_i2c_data imx50_imx_i2c_data[] __initconst = { | 74 | const struct imx_imx_i2c_data imx50_imx_i2c_data[] __initconst = { |
74 | #define imx50_imx_i2c_data_entry(_id, _hwid) \ | 75 | #define imx50_imx_i2c_data_entry(_id, _hwid) \ |
75 | imx_imx_i2c_data_entry(MX50, _id, _hwid, SZ_4K) | 76 | imx_imx_i2c_data_entry(MX50, "imx21-i2c", _id, _hwid, SZ_4K) |
76 | imx50_imx_i2c_data_entry(0, 1), | 77 | imx50_imx_i2c_data_entry(0, 1), |
77 | imx50_imx_i2c_data_entry(1, 2), | 78 | imx50_imx_i2c_data_entry(1, 2), |
78 | imx50_imx_i2c_data_entry(2, 3), | 79 | imx50_imx_i2c_data_entry(2, 3), |
@@ -82,10 +83,11 @@ const struct imx_imx_i2c_data imx50_imx_i2c_data[] __initconst = { | |||
82 | #ifdef CONFIG_SOC_IMX51 | 83 | #ifdef CONFIG_SOC_IMX51 |
83 | const struct imx_imx_i2c_data imx51_imx_i2c_data[] __initconst = { | 84 | const struct imx_imx_i2c_data imx51_imx_i2c_data[] __initconst = { |
84 | #define imx51_imx_i2c_data_entry(_id, _hwid) \ | 85 | #define imx51_imx_i2c_data_entry(_id, _hwid) \ |
85 | imx_imx_i2c_data_entry(MX51, _id, _hwid, SZ_4K) | 86 | imx_imx_i2c_data_entry(MX51, "imx21-i2c", _id, _hwid, SZ_4K) |
86 | imx51_imx_i2c_data_entry(0, 1), | 87 | imx51_imx_i2c_data_entry(0, 1), |
87 | imx51_imx_i2c_data_entry(1, 2), | 88 | imx51_imx_i2c_data_entry(1, 2), |
88 | { | 89 | { |
90 | .devid = "imx21-i2c", | ||
89 | .id = 2, | 91 | .id = 2, |
90 | .iobase = MX51_HSI2C_DMA_BASE_ADDR, | 92 | .iobase = MX51_HSI2C_DMA_BASE_ADDR, |
91 | .iosize = SZ_16K, | 93 | .iosize = SZ_16K, |
@@ -97,7 +99,7 @@ const struct imx_imx_i2c_data imx51_imx_i2c_data[] __initconst = { | |||
97 | #ifdef CONFIG_SOC_IMX53 | 99 | #ifdef CONFIG_SOC_IMX53 |
98 | const struct imx_imx_i2c_data imx53_imx_i2c_data[] __initconst = { | 100 | const struct imx_imx_i2c_data imx53_imx_i2c_data[] __initconst = { |
99 | #define imx53_imx_i2c_data_entry(_id, _hwid) \ | 101 | #define imx53_imx_i2c_data_entry(_id, _hwid) \ |
100 | imx_imx_i2c_data_entry(MX53, _id, _hwid, SZ_4K) | 102 | imx_imx_i2c_data_entry(MX53, "imx21-i2c", _id, _hwid, SZ_4K) |
101 | imx53_imx_i2c_data_entry(0, 1), | 103 | imx53_imx_i2c_data_entry(0, 1), |
102 | imx53_imx_i2c_data_entry(1, 2), | 104 | imx53_imx_i2c_data_entry(1, 2), |
103 | imx53_imx_i2c_data_entry(2, 3), | 105 | imx53_imx_i2c_data_entry(2, 3), |
@@ -120,7 +122,7 @@ struct platform_device *__init imx_add_imx_i2c( | |||
120 | }, | 122 | }, |
121 | }; | 123 | }; |
122 | 124 | ||
123 | return imx_add_platform_device("imx-i2c", data->id, | 125 | return imx_add_platform_device(data->devid, data->id, |
124 | res, ARRAY_SIZE(res), | 126 | res, ARRAY_SIZE(res), |
125 | pdata, sizeof(*pdata)); | 127 | pdata, sizeof(*pdata)); |
126 | } | 128 | } |
diff --git a/arch/arm/plat-mxc/devices/platform-imx-keypad.c b/arch/arm/mach-imx/devices/platform-imx-keypad.c index 479c3e9f771f..8f22a4c98a4c 100644 --- a/arch/arm/plat-mxc/devices/platform-imx-keypad.c +++ b/arch/arm/mach-imx/devices/platform-imx-keypad.c | |||
@@ -6,8 +6,8 @@ | |||
6 | * the terms of the GNU General Public License version 2 as published by the | 6 | * the terms of the GNU General Public License version 2 as published by the |
7 | * Free Software Foundation. | 7 | * Free Software Foundation. |
8 | */ | 8 | */ |
9 | #include <mach/hardware.h> | 9 | #include "../hardware.h" |
10 | #include <mach/devices-common.h> | 10 | #include "devices-common.h" |
11 | 11 | ||
12 | #define imx_imx_keypad_data_entry_single(soc, _size) \ | 12 | #define imx_imx_keypad_data_entry_single(soc, _size) \ |
13 | { \ | 13 | { \ |
diff --git a/arch/arm/plat-mxc/devices/platform-imx-ssi.c b/arch/arm/mach-imx/devices/platform-imx-ssi.c index 21c6f30e1017..bfcb8f3dfa8d 100644 --- a/arch/arm/plat-mxc/devices/platform-imx-ssi.c +++ b/arch/arm/mach-imx/devices/platform-imx-ssi.c | |||
@@ -6,8 +6,8 @@ | |||
6 | * the terms of the GNU General Public License version 2 as published by the | 6 | * the terms of the GNU General Public License version 2 as published by the |
7 | * Free Software Foundation. | 7 | * Free Software Foundation. |
8 | */ | 8 | */ |
9 | #include <mach/hardware.h> | 9 | #include "../hardware.h" |
10 | #include <mach/devices-common.h> | 10 | #include "devices-common.h" |
11 | 11 | ||
12 | #define imx_imx_ssi_data_entry(soc, _id, _hwid, _size) \ | 12 | #define imx_imx_ssi_data_entry(soc, _id, _hwid, _size) \ |
13 | [_id] = { \ | 13 | [_id] = { \ |
diff --git a/arch/arm/plat-mxc/devices/platform-imx-uart.c b/arch/arm/mach-imx/devices/platform-imx-uart.c index d390f00bd294..67bf866a2cb6 100644 --- a/arch/arm/plat-mxc/devices/platform-imx-uart.c +++ b/arch/arm/mach-imx/devices/platform-imx-uart.c | |||
@@ -6,8 +6,8 @@ | |||
6 | * the terms of the GNU General Public License version 2 as published by the | 6 | * the terms of the GNU General Public License version 2 as published by the |
7 | * Free Software Foundation. | 7 | * Free Software Foundation. |
8 | */ | 8 | */ |
9 | #include <mach/hardware.h> | 9 | #include "../hardware.h" |
10 | #include <mach/devices-common.h> | 10 | #include "devices-common.h" |
11 | 11 | ||
12 | #define imx_imx_uart_3irq_data_entry(soc, _id, _hwid, _size) \ | 12 | #define imx_imx_uart_3irq_data_entry(soc, _id, _hwid, _size) \ |
13 | [_id] = { \ | 13 | [_id] = { \ |
diff --git a/arch/arm/plat-mxc/devices/platform-imx2-wdt.c b/arch/arm/mach-imx/devices/platform-imx2-wdt.c index 5e07ef2bf1c4..ec75d6413686 100644 --- a/arch/arm/plat-mxc/devices/platform-imx2-wdt.c +++ b/arch/arm/mach-imx/devices/platform-imx2-wdt.c | |||
@@ -7,8 +7,9 @@ | |||
7 | * Free Software Foundation. | 7 | * Free Software Foundation. |
8 | */ | 8 | */ |
9 | #include <asm/sizes.h> | 9 | #include <asm/sizes.h> |
10 | #include <mach/hardware.h> | 10 | |
11 | #include <mach/devices-common.h> | 11 | #include "../hardware.h" |
12 | #include "devices-common.h" | ||
12 | 13 | ||
13 | #define imx_imx2_wdt_data_entry_single(soc, _id, _hwid, _size) \ | 14 | #define imx_imx2_wdt_data_entry_single(soc, _id, _hwid, _size) \ |
14 | { \ | 15 | { \ |
diff --git a/arch/arm/plat-mxc/devices/platform-imx21-hcd.c b/arch/arm/mach-imx/devices/platform-imx21-hcd.c index 5770a42f33bf..30c81616a9a1 100644 --- a/arch/arm/plat-mxc/devices/platform-imx21-hcd.c +++ b/arch/arm/mach-imx/devices/platform-imx21-hcd.c | |||
@@ -6,8 +6,8 @@ | |||
6 | * the terms of the GNU General Public License version 2 as published by the | 6 | * the terms of the GNU General Public License version 2 as published by the |
7 | * Free Software Foundation. | 7 | * Free Software Foundation. |
8 | */ | 8 | */ |
9 | #include <mach/hardware.h> | 9 | #include "../hardware.h" |
10 | #include <mach/devices-common.h> | 10 | #include "devices-common.h" |
11 | 11 | ||
12 | #define imx_imx21_hcd_data_entry_single(soc) \ | 12 | #define imx_imx21_hcd_data_entry_single(soc) \ |
13 | { \ | 13 | { \ |
diff --git a/arch/arm/plat-mxc/devices/platform-imx27-coda.c b/arch/arm/mach-imx/devices/platform-imx27-coda.c index 8b12aacdf396..25bebc29e546 100644 --- a/arch/arm/plat-mxc/devices/platform-imx27-coda.c +++ b/arch/arm/mach-imx/devices/platform-imx27-coda.c | |||
@@ -7,8 +7,8 @@ | |||
7 | * Free Software Foundation. | 7 | * Free Software Foundation. |
8 | */ | 8 | */ |
9 | 9 | ||
10 | #include <mach/hardware.h> | 10 | #include "../hardware.h" |
11 | #include <mach/devices-common.h> | 11 | #include "devices-common.h" |
12 | 12 | ||
13 | #ifdef CONFIG_SOC_IMX27 | 13 | #ifdef CONFIG_SOC_IMX27 |
14 | const struct imx_imx27_coda_data imx27_coda_data __initconst = { | 14 | const struct imx_imx27_coda_data imx27_coda_data __initconst = { |
diff --git a/arch/arm/plat-mxc/devices/platform-imx_udc.c b/arch/arm/mach-imx/devices/platform-imx_udc.c index 6fd675dfce14..5ced7e4e2c71 100644 --- a/arch/arm/plat-mxc/devices/platform-imx_udc.c +++ b/arch/arm/mach-imx/devices/platform-imx_udc.c | |||
@@ -6,8 +6,8 @@ | |||
6 | * the terms of the GNU General Public License version 2 as published by the | 6 | * the terms of the GNU General Public License version 2 as published by the |
7 | * Free Software Foundation. | 7 | * Free Software Foundation. |
8 | */ | 8 | */ |
9 | #include <mach/hardware.h> | 9 | #include "../hardware.h" |
10 | #include <mach/devices-common.h> | 10 | #include "devices-common.h" |
11 | 11 | ||
12 | #define imx_imx_udc_data_entry_single(soc, _size) \ | 12 | #define imx_imx_udc_data_entry_single(soc, _size) \ |
13 | { \ | 13 | { \ |
diff --git a/arch/arm/plat-mxc/devices/platform-imxdi_rtc.c b/arch/arm/mach-imx/devices/platform-imxdi_rtc.c index 805336fdc252..5bb490d556ea 100644 --- a/arch/arm/plat-mxc/devices/platform-imxdi_rtc.c +++ b/arch/arm/mach-imx/devices/platform-imxdi_rtc.c | |||
@@ -7,8 +7,9 @@ | |||
7 | * Free Software Foundation. | 7 | * Free Software Foundation. |
8 | */ | 8 | */ |
9 | #include <asm/sizes.h> | 9 | #include <asm/sizes.h> |
10 | #include <mach/hardware.h> | 10 | |
11 | #include <mach/devices-common.h> | 11 | #include "../hardware.h" |
12 | #include "devices-common.h" | ||
12 | 13 | ||
13 | #define imx_imxdi_rtc_data_entry_single(soc) \ | 14 | #define imx_imxdi_rtc_data_entry_single(soc) \ |
14 | { \ | 15 | { \ |
diff --git a/arch/arm/plat-mxc/devices/platform-ipu-core.c b/arch/arm/mach-imx/devices/platform-ipu-core.c index d1e33cc6f12e..fc4dd7cedc11 100644 --- a/arch/arm/plat-mxc/devices/platform-ipu-core.c +++ b/arch/arm/mach-imx/devices/platform-ipu-core.c | |||
@@ -7,8 +7,9 @@ | |||
7 | * Free Software Foundation. | 7 | * Free Software Foundation. |
8 | */ | 8 | */ |
9 | #include <linux/dma-mapping.h> | 9 | #include <linux/dma-mapping.h> |
10 | #include <mach/hardware.h> | 10 | |
11 | #include <mach/devices-common.h> | 11 | #include "../hardware.h" |
12 | #include "devices-common.h" | ||
12 | 13 | ||
13 | #define imx_ipu_core_entry_single(soc) \ | 14 | #define imx_ipu_core_entry_single(soc) \ |
14 | { \ | 15 | { \ |
diff --git a/arch/arm/plat-mxc/devices/platform-mx1-camera.c b/arch/arm/mach-imx/devices/platform-mx1-camera.c index edcc581a30a9..2c6788131080 100644 --- a/arch/arm/plat-mxc/devices/platform-mx1-camera.c +++ b/arch/arm/mach-imx/devices/platform-mx1-camera.c | |||
@@ -6,8 +6,8 @@ | |||
6 | * the terms of the GNU General Public License version 2 as published by the | 6 | * the terms of the GNU General Public License version 2 as published by the |
7 | * Free Software Foundation. | 7 | * Free Software Foundation. |
8 | */ | 8 | */ |
9 | #include <mach/hardware.h> | 9 | #include "../hardware.h" |
10 | #include <mach/devices-common.h> | 10 | #include "devices-common.h" |
11 | 11 | ||
12 | #define imx_mx1_camera_data_entry_single(soc, _size) \ | 12 | #define imx_mx1_camera_data_entry_single(soc, _size) \ |
13 | { \ | 13 | { \ |
diff --git a/arch/arm/plat-mxc/devices/platform-mx2-camera.c b/arch/arm/mach-imx/devices/platform-mx2-camera.c index 11eace953a09..f4910160346b 100644 --- a/arch/arm/plat-mxc/devices/platform-mx2-camera.c +++ b/arch/arm/mach-imx/devices/platform-mx2-camera.c | |||
@@ -6,17 +6,19 @@ | |||
6 | * the terms of the GNU General Public License version 2 as published by the | 6 | * the terms of the GNU General Public License version 2 as published by the |
7 | * Free Software Foundation. | 7 | * Free Software Foundation. |
8 | */ | 8 | */ |
9 | #include <mach/hardware.h> | 9 | #include "../hardware.h" |
10 | #include <mach/devices-common.h> | 10 | #include "devices-common.h" |
11 | 11 | ||
12 | #define imx_mx2_camera_data_entry_single(soc) \ | 12 | #define imx_mx2_camera_data_entry_single(soc, _devid) \ |
13 | { \ | 13 | { \ |
14 | .devid = _devid, \ | ||
14 | .iobasecsi = soc ## _CSI_BASE_ADDR, \ | 15 | .iobasecsi = soc ## _CSI_BASE_ADDR, \ |
15 | .iosizecsi = SZ_4K, \ | 16 | .iosizecsi = SZ_4K, \ |
16 | .irqcsi = soc ## _INT_CSI, \ | 17 | .irqcsi = soc ## _INT_CSI, \ |
17 | } | 18 | } |
18 | #define imx_mx2_camera_data_entry_single_emma(soc) \ | 19 | #define imx_mx2_camera_data_entry_single_emma(soc, _devid) \ |
19 | { \ | 20 | { \ |
21 | .devid = _devid, \ | ||
20 | .iobasecsi = soc ## _CSI_BASE_ADDR, \ | 22 | .iobasecsi = soc ## _CSI_BASE_ADDR, \ |
21 | .iosizecsi = SZ_32, \ | 23 | .iosizecsi = SZ_32, \ |
22 | .irqcsi = soc ## _INT_CSI, \ | 24 | .irqcsi = soc ## _INT_CSI, \ |
@@ -27,12 +29,12 @@ | |||
27 | 29 | ||
28 | #ifdef CONFIG_SOC_IMX25 | 30 | #ifdef CONFIG_SOC_IMX25 |
29 | const struct imx_mx2_camera_data imx25_mx2_camera_data __initconst = | 31 | const struct imx_mx2_camera_data imx25_mx2_camera_data __initconst = |
30 | imx_mx2_camera_data_entry_single(MX25); | 32 | imx_mx2_camera_data_entry_single(MX25, "imx25-camera"); |
31 | #endif /* ifdef CONFIG_SOC_IMX25 */ | 33 | #endif /* ifdef CONFIG_SOC_IMX25 */ |
32 | 34 | ||
33 | #ifdef CONFIG_SOC_IMX27 | 35 | #ifdef CONFIG_SOC_IMX27 |
34 | const struct imx_mx2_camera_data imx27_mx2_camera_data __initconst = | 36 | const struct imx_mx2_camera_data imx27_mx2_camera_data __initconst = |
35 | imx_mx2_camera_data_entry_single_emma(MX27); | 37 | imx_mx2_camera_data_entry_single_emma(MX27, "imx27-camera"); |
36 | #endif /* ifdef CONFIG_SOC_IMX27 */ | 38 | #endif /* ifdef CONFIG_SOC_IMX27 */ |
37 | 39 | ||
38 | struct platform_device *__init imx_add_mx2_camera( | 40 | struct platform_device *__init imx_add_mx2_camera( |
@@ -58,7 +60,7 @@ struct platform_device *__init imx_add_mx2_camera( | |||
58 | .flags = IORESOURCE_IRQ, | 60 | .flags = IORESOURCE_IRQ, |
59 | }, | 61 | }, |
60 | }; | 62 | }; |
61 | return imx_add_platform_device_dmamask("mx2-camera", 0, | 63 | return imx_add_platform_device_dmamask(data->devid, 0, |
62 | res, data->iobaseemmaprp ? 4 : 2, | 64 | res, data->iobaseemmaprp ? 4 : 2, |
63 | pdata, sizeof(*pdata), DMA_BIT_MASK(32)); | 65 | pdata, sizeof(*pdata), DMA_BIT_MASK(32)); |
64 | } | 66 | } |
diff --git a/arch/arm/plat-mxc/devices/platform-mxc-ehci.c b/arch/arm/mach-imx/devices/platform-mxc-ehci.c index 35851d889aca..5d4bbbfde641 100644 --- a/arch/arm/plat-mxc/devices/platform-mxc-ehci.c +++ b/arch/arm/mach-imx/devices/platform-mxc-ehci.c | |||
@@ -7,8 +7,9 @@ | |||
7 | * Free Software Foundation. | 7 | * Free Software Foundation. |
8 | */ | 8 | */ |
9 | #include <linux/dma-mapping.h> | 9 | #include <linux/dma-mapping.h> |
10 | #include <mach/hardware.h> | 10 | |
11 | #include <mach/devices-common.h> | 11 | #include "../hardware.h" |
12 | #include "devices-common.h" | ||
12 | 13 | ||
13 | #define imx_mxc_ehci_data_entry_single(soc, _id, hs) \ | 14 | #define imx_mxc_ehci_data_entry_single(soc, _id, hs) \ |
14 | { \ | 15 | { \ |
diff --git a/arch/arm/plat-mxc/devices/platform-mxc-mmc.c b/arch/arm/mach-imx/devices/platform-mxc-mmc.c index e7b920b58675..b8203c760c8f 100644 --- a/arch/arm/plat-mxc/devices/platform-mxc-mmc.c +++ b/arch/arm/mach-imx/devices/platform-mxc-mmc.c | |||
@@ -7,24 +7,26 @@ | |||
7 | * Free Software Foundation. | 7 | * Free Software Foundation. |
8 | */ | 8 | */ |
9 | #include <linux/dma-mapping.h> | 9 | #include <linux/dma-mapping.h> |
10 | #include <mach/hardware.h> | ||
11 | #include <mach/devices-common.h> | ||
12 | 10 | ||
13 | #define imx_mxc_mmc_data_entry_single(soc, _id, _hwid, _size) \ | 11 | #include "../hardware.h" |
12 | #include "devices-common.h" | ||
13 | |||
14 | #define imx_mxc_mmc_data_entry_single(soc, _devid, _id, _hwid, _size) \ | ||
14 | { \ | 15 | { \ |
16 | .devid = _devid, \ | ||
15 | .id = _id, \ | 17 | .id = _id, \ |
16 | .iobase = soc ## _SDHC ## _hwid ## _BASE_ADDR, \ | 18 | .iobase = soc ## _SDHC ## _hwid ## _BASE_ADDR, \ |
17 | .iosize = _size, \ | 19 | .iosize = _size, \ |
18 | .irq = soc ## _INT_SDHC ## _hwid, \ | 20 | .irq = soc ## _INT_SDHC ## _hwid, \ |
19 | .dmareq = soc ## _DMA_REQ_SDHC ## _hwid, \ | 21 | .dmareq = soc ## _DMA_REQ_SDHC ## _hwid, \ |
20 | } | 22 | } |
21 | #define imx_mxc_mmc_data_entry(soc, _id, _hwid, _size) \ | 23 | #define imx_mxc_mmc_data_entry(soc, _devid, _id, _hwid, _size) \ |
22 | [_id] = imx_mxc_mmc_data_entry_single(soc, _id, _hwid, _size) | 24 | [_id] = imx_mxc_mmc_data_entry_single(soc, _devid, _id, _hwid, _size) |
23 | 25 | ||
24 | #ifdef CONFIG_SOC_IMX21 | 26 | #ifdef CONFIG_SOC_IMX21 |
25 | const struct imx_mxc_mmc_data imx21_mxc_mmc_data[] __initconst = { | 27 | const struct imx_mxc_mmc_data imx21_mxc_mmc_data[] __initconst = { |
26 | #define imx21_mxc_mmc_data_entry(_id, _hwid) \ | 28 | #define imx21_mxc_mmc_data_entry(_id, _hwid) \ |
27 | imx_mxc_mmc_data_entry(MX21, _id, _hwid, SZ_4K) | 29 | imx_mxc_mmc_data_entry(MX21, "imx21-mmc", _id, _hwid, SZ_4K) |
28 | imx21_mxc_mmc_data_entry(0, 1), | 30 | imx21_mxc_mmc_data_entry(0, 1), |
29 | imx21_mxc_mmc_data_entry(1, 2), | 31 | imx21_mxc_mmc_data_entry(1, 2), |
30 | }; | 32 | }; |
@@ -33,7 +35,7 @@ const struct imx_mxc_mmc_data imx21_mxc_mmc_data[] __initconst = { | |||
33 | #ifdef CONFIG_SOC_IMX27 | 35 | #ifdef CONFIG_SOC_IMX27 |
34 | const struct imx_mxc_mmc_data imx27_mxc_mmc_data[] __initconst = { | 36 | const struct imx_mxc_mmc_data imx27_mxc_mmc_data[] __initconst = { |
35 | #define imx27_mxc_mmc_data_entry(_id, _hwid) \ | 37 | #define imx27_mxc_mmc_data_entry(_id, _hwid) \ |
36 | imx_mxc_mmc_data_entry(MX27, _id, _hwid, SZ_4K) | 38 | imx_mxc_mmc_data_entry(MX27, "imx21-mmc", _id, _hwid, SZ_4K) |
37 | imx27_mxc_mmc_data_entry(0, 1), | 39 | imx27_mxc_mmc_data_entry(0, 1), |
38 | imx27_mxc_mmc_data_entry(1, 2), | 40 | imx27_mxc_mmc_data_entry(1, 2), |
39 | }; | 41 | }; |
@@ -42,7 +44,7 @@ const struct imx_mxc_mmc_data imx27_mxc_mmc_data[] __initconst = { | |||
42 | #ifdef CONFIG_SOC_IMX31 | 44 | #ifdef CONFIG_SOC_IMX31 |
43 | const struct imx_mxc_mmc_data imx31_mxc_mmc_data[] __initconst = { | 45 | const struct imx_mxc_mmc_data imx31_mxc_mmc_data[] __initconst = { |
44 | #define imx31_mxc_mmc_data_entry(_id, _hwid) \ | 46 | #define imx31_mxc_mmc_data_entry(_id, _hwid) \ |
45 | imx_mxc_mmc_data_entry(MX31, _id, _hwid, SZ_16K) | 47 | imx_mxc_mmc_data_entry(MX31, "imx31-mmc", _id, _hwid, SZ_16K) |
46 | imx31_mxc_mmc_data_entry(0, 1), | 48 | imx31_mxc_mmc_data_entry(0, 1), |
47 | imx31_mxc_mmc_data_entry(1, 2), | 49 | imx31_mxc_mmc_data_entry(1, 2), |
48 | }; | 50 | }; |
@@ -67,7 +69,7 @@ struct platform_device *__init imx_add_mxc_mmc( | |||
67 | .flags = IORESOURCE_DMA, | 69 | .flags = IORESOURCE_DMA, |
68 | }, | 70 | }, |
69 | }; | 71 | }; |
70 | return imx_add_platform_device_dmamask("mxc-mmc", data->id, | 72 | return imx_add_platform_device_dmamask(data->devid, data->id, |
71 | res, ARRAY_SIZE(res), | 73 | res, ARRAY_SIZE(res), |
72 | pdata, sizeof(*pdata), DMA_BIT_MASK(32)); | 74 | pdata, sizeof(*pdata), DMA_BIT_MASK(32)); |
73 | } | 75 | } |
diff --git a/arch/arm/plat-mxc/devices/platform-mxc_nand.c b/arch/arm/mach-imx/devices/platform-mxc_nand.c index 95b75cc70515..7af1c53e42b5 100644 --- a/arch/arm/plat-mxc/devices/platform-mxc_nand.c +++ b/arch/arm/mach-imx/devices/platform-mxc_nand.c | |||
@@ -7,18 +7,21 @@ | |||
7 | * Free Software Foundation. | 7 | * Free Software Foundation. |
8 | */ | 8 | */ |
9 | #include <asm/sizes.h> | 9 | #include <asm/sizes.h> |
10 | #include <mach/hardware.h> | ||
11 | #include <mach/devices-common.h> | ||
12 | 10 | ||
13 | #define imx_mxc_nand_data_entry_single(soc, _size) \ | 11 | #include "../hardware.h" |
12 | #include "devices-common.h" | ||
13 | |||
14 | #define imx_mxc_nand_data_entry_single(soc, _devid, _size) \ | ||
14 | { \ | 15 | { \ |
16 | .devid = _devid, \ | ||
15 | .iobase = soc ## _NFC_BASE_ADDR, \ | 17 | .iobase = soc ## _NFC_BASE_ADDR, \ |
16 | .iosize = _size, \ | 18 | .iosize = _size, \ |
17 | .irq = soc ## _INT_NFC \ | 19 | .irq = soc ## _INT_NFC \ |
18 | } | 20 | } |
19 | 21 | ||
20 | #define imx_mxc_nandv3_data_entry_single(soc, _size) \ | 22 | #define imx_mxc_nandv3_data_entry_single(soc, _devid, _size) \ |
21 | { \ | 23 | { \ |
24 | .devid = _devid, \ | ||
22 | .id = -1, \ | 25 | .id = -1, \ |
23 | .iobase = soc ## _NFC_BASE_ADDR, \ | 26 | .iobase = soc ## _NFC_BASE_ADDR, \ |
24 | .iosize = _size, \ | 27 | .iosize = _size, \ |
@@ -28,32 +31,32 @@ | |||
28 | 31 | ||
29 | #ifdef CONFIG_SOC_IMX21 | 32 | #ifdef CONFIG_SOC_IMX21 |
30 | const struct imx_mxc_nand_data imx21_mxc_nand_data __initconst = | 33 | const struct imx_mxc_nand_data imx21_mxc_nand_data __initconst = |
31 | imx_mxc_nand_data_entry_single(MX21, SZ_4K); | 34 | imx_mxc_nand_data_entry_single(MX21, "imx21-nand", SZ_4K); |
32 | #endif /* ifdef CONFIG_SOC_IMX21 */ | 35 | #endif /* ifdef CONFIG_SOC_IMX21 */ |
33 | 36 | ||
34 | #ifdef CONFIG_SOC_IMX25 | 37 | #ifdef CONFIG_SOC_IMX25 |
35 | const struct imx_mxc_nand_data imx25_mxc_nand_data __initconst = | 38 | const struct imx_mxc_nand_data imx25_mxc_nand_data __initconst = |
36 | imx_mxc_nand_data_entry_single(MX25, SZ_8K); | 39 | imx_mxc_nand_data_entry_single(MX25, "imx25-nand", SZ_8K); |
37 | #endif /* ifdef CONFIG_SOC_IMX25 */ | 40 | #endif /* ifdef CONFIG_SOC_IMX25 */ |
38 | 41 | ||
39 | #ifdef CONFIG_SOC_IMX27 | 42 | #ifdef CONFIG_SOC_IMX27 |
40 | const struct imx_mxc_nand_data imx27_mxc_nand_data __initconst = | 43 | const struct imx_mxc_nand_data imx27_mxc_nand_data __initconst = |
41 | imx_mxc_nand_data_entry_single(MX27, SZ_4K); | 44 | imx_mxc_nand_data_entry_single(MX27, "imx27-nand", SZ_4K); |
42 | #endif /* ifdef CONFIG_SOC_IMX27 */ | 45 | #endif /* ifdef CONFIG_SOC_IMX27 */ |
43 | 46 | ||
44 | #ifdef CONFIG_SOC_IMX31 | 47 | #ifdef CONFIG_SOC_IMX31 |
45 | const struct imx_mxc_nand_data imx31_mxc_nand_data __initconst = | 48 | const struct imx_mxc_nand_data imx31_mxc_nand_data __initconst = |
46 | imx_mxc_nand_data_entry_single(MX31, SZ_4K); | 49 | imx_mxc_nand_data_entry_single(MX31, "imx27-nand", SZ_4K); |
47 | #endif | 50 | #endif |
48 | 51 | ||
49 | #ifdef CONFIG_SOC_IMX35 | 52 | #ifdef CONFIG_SOC_IMX35 |
50 | const struct imx_mxc_nand_data imx35_mxc_nand_data __initconst = | 53 | const struct imx_mxc_nand_data imx35_mxc_nand_data __initconst = |
51 | imx_mxc_nand_data_entry_single(MX35, SZ_8K); | 54 | imx_mxc_nand_data_entry_single(MX35, "imx25-nand", SZ_8K); |
52 | #endif | 55 | #endif |
53 | 56 | ||
54 | #ifdef CONFIG_SOC_IMX51 | 57 | #ifdef CONFIG_SOC_IMX51 |
55 | const struct imx_mxc_nand_data imx51_mxc_nand_data __initconst = | 58 | const struct imx_mxc_nand_data imx51_mxc_nand_data __initconst = |
56 | imx_mxc_nandv3_data_entry_single(MX51, SZ_16K); | 59 | imx_mxc_nandv3_data_entry_single(MX51, "imx51-nand", SZ_16K); |
57 | #endif | 60 | #endif |
58 | 61 | ||
59 | struct platform_device *__init imx_add_mxc_nand( | 62 | struct platform_device *__init imx_add_mxc_nand( |
@@ -76,7 +79,7 @@ struct platform_device *__init imx_add_mxc_nand( | |||
76 | .flags = IORESOURCE_MEM, | 79 | .flags = IORESOURCE_MEM, |
77 | }, | 80 | }, |
78 | }; | 81 | }; |
79 | return imx_add_platform_device("mxc_nand", data->id, | 82 | return imx_add_platform_device(data->devid, data->id, |
80 | res, ARRAY_SIZE(res) - !data->axibase, | 83 | res, ARRAY_SIZE(res) - !data->axibase, |
81 | pdata, sizeof(*pdata)); | 84 | pdata, sizeof(*pdata)); |
82 | } | 85 | } |
diff --git a/arch/arm/plat-mxc/devices/platform-mxc_pwm.c b/arch/arm/mach-imx/devices/platform-mxc_pwm.c index b0c4ae298111..dcd289777687 100644 --- a/arch/arm/plat-mxc/devices/platform-mxc_pwm.c +++ b/arch/arm/mach-imx/devices/platform-mxc_pwm.c | |||
@@ -6,8 +6,8 @@ | |||
6 | * the terms of the GNU General Public License version 2 as published by the | 6 | * the terms of the GNU General Public License version 2 as published by the |
7 | * Free Software Foundation. | 7 | * Free Software Foundation. |
8 | */ | 8 | */ |
9 | #include <mach/hardware.h> | 9 | #include "../hardware.h" |
10 | #include <mach/devices-common.h> | 10 | #include "devices-common.h" |
11 | 11 | ||
12 | #define imx_mxc_pwm_data_entry_single(soc, _id, _hwid, _size) \ | 12 | #define imx_mxc_pwm_data_entry_single(soc, _id, _hwid, _size) \ |
13 | { \ | 13 | { \ |
diff --git a/arch/arm/plat-mxc/devices/platform-mxc_rnga.c b/arch/arm/mach-imx/devices/platform-mxc_rnga.c index b4b7612b6e17..c58404badb59 100644 --- a/arch/arm/plat-mxc/devices/platform-mxc_rnga.c +++ b/arch/arm/mach-imx/devices/platform-mxc_rnga.c | |||
@@ -6,8 +6,8 @@ | |||
6 | * the terms of the GNU General Public License version 2 as published by the | 6 | * the terms of the GNU General Public License version 2 as published by the |
7 | * Free Software Foundation. | 7 | * Free Software Foundation. |
8 | */ | 8 | */ |
9 | #include <mach/hardware.h> | 9 | #include "../hardware.h" |
10 | #include <mach/devices-common.h> | 10 | #include "devices-common.h" |
11 | 11 | ||
12 | struct imx_mxc_rnga_data { | 12 | struct imx_mxc_rnga_data { |
13 | resource_size_t iobase; | 13 | resource_size_t iobase; |
diff --git a/arch/arm/plat-mxc/devices/platform-mxc_rtc.c b/arch/arm/mach-imx/devices/platform-mxc_rtc.c index a5c9ad5721c2..c7fffaadf847 100644 --- a/arch/arm/plat-mxc/devices/platform-mxc_rtc.c +++ b/arch/arm/mach-imx/devices/platform-mxc_rtc.c | |||
@@ -6,23 +6,24 @@ | |||
6 | * the terms of the GNU General Public License version 2 as published by the | 6 | * the terms of the GNU General Public License version 2 as published by the |
7 | * Free Software Foundation. | 7 | * Free Software Foundation. |
8 | */ | 8 | */ |
9 | #include <mach/hardware.h> | 9 | #include "../hardware.h" |
10 | #include <mach/devices-common.h> | 10 | #include "devices-common.h" |
11 | 11 | ||
12 | #define imx_mxc_rtc_data_entry_single(soc) \ | 12 | #define imx_mxc_rtc_data_entry_single(soc, _devid) \ |
13 | { \ | 13 | { \ |
14 | .devid = _devid, \ | ||
14 | .iobase = soc ## _RTC_BASE_ADDR, \ | 15 | .iobase = soc ## _RTC_BASE_ADDR, \ |
15 | .irq = soc ## _INT_RTC, \ | 16 | .irq = soc ## _INT_RTC, \ |
16 | } | 17 | } |
17 | 18 | ||
18 | #ifdef CONFIG_SOC_IMX31 | 19 | #ifdef CONFIG_SOC_IMX31 |
19 | const struct imx_mxc_rtc_data imx31_mxc_rtc_data __initconst = | 20 | const struct imx_mxc_rtc_data imx31_mxc_rtc_data __initconst = |
20 | imx_mxc_rtc_data_entry_single(MX31); | 21 | imx_mxc_rtc_data_entry_single(MX31, "imx21-rtc"); |
21 | #endif /* ifdef CONFIG_SOC_IMX31 */ | 22 | #endif /* ifdef CONFIG_SOC_IMX31 */ |
22 | 23 | ||
23 | #ifdef CONFIG_SOC_IMX35 | 24 | #ifdef CONFIG_SOC_IMX35 |
24 | const struct imx_mxc_rtc_data imx35_mxc_rtc_data __initconst = | 25 | const struct imx_mxc_rtc_data imx35_mxc_rtc_data __initconst = |
25 | imx_mxc_rtc_data_entry_single(MX35); | 26 | imx_mxc_rtc_data_entry_single(MX35, "imx21-rtc"); |
26 | #endif /* ifdef CONFIG_SOC_IMX35 */ | 27 | #endif /* ifdef CONFIG_SOC_IMX35 */ |
27 | 28 | ||
28 | struct platform_device *__init imx_add_mxc_rtc( | 29 | struct platform_device *__init imx_add_mxc_rtc( |
@@ -40,6 +41,6 @@ struct platform_device *__init imx_add_mxc_rtc( | |||
40 | }, | 41 | }, |
41 | }; | 42 | }; |
42 | 43 | ||
43 | return imx_add_platform_device("mxc_rtc", -1, | 44 | return imx_add_platform_device(data->devid, -1, |
44 | res, ARRAY_SIZE(res), NULL, 0); | 45 | res, ARRAY_SIZE(res), NULL, 0); |
45 | } | 46 | } |
diff --git a/arch/arm/plat-mxc/devices/platform-mxc_w1.c b/arch/arm/mach-imx/devices/platform-mxc_w1.c index 96fa5ea91fe8..88c18b720d63 100644 --- a/arch/arm/plat-mxc/devices/platform-mxc_w1.c +++ b/arch/arm/mach-imx/devices/platform-mxc_w1.c | |||
@@ -6,8 +6,8 @@ | |||
6 | * the terms of the GNU General Public License version 2 as published by the | 6 | * the terms of the GNU General Public License version 2 as published by the |
7 | * Free Software Foundation. | 7 | * Free Software Foundation. |
8 | */ | 8 | */ |
9 | #include <mach/hardware.h> | 9 | #include "../hardware.h" |
10 | #include <mach/devices-common.h> | 10 | #include "devices-common.h" |
11 | 11 | ||
12 | #define imx_mxc_w1_data_entry_single(soc) \ | 12 | #define imx_mxc_w1_data_entry_single(soc) \ |
13 | { \ | 13 | { \ |
diff --git a/arch/arm/plat-mxc/devices/platform-pata_imx.c b/arch/arm/mach-imx/devices/platform-pata_imx.c index 70e2f2a44714..e4ec11c8ce55 100644 --- a/arch/arm/plat-mxc/devices/platform-pata_imx.c +++ b/arch/arm/mach-imx/devices/platform-pata_imx.c | |||
@@ -3,8 +3,8 @@ | |||
3 | * the terms of the GNU General Public License version 2 as published by the | 3 | * the terms of the GNU General Public License version 2 as published by the |
4 | * Free Software Foundation. | 4 | * Free Software Foundation. |
5 | */ | 5 | */ |
6 | #include <mach/hardware.h> | 6 | #include "../hardware.h" |
7 | #include <mach/devices-common.h> | 7 | #include "devices-common.h" |
8 | 8 | ||
9 | #define imx_pata_imx_data_entry_single(soc, _size) \ | 9 | #define imx_pata_imx_data_entry_single(soc, _size) \ |
10 | { \ | 10 | { \ |
diff --git a/arch/arm/plat-mxc/devices/platform-sdhci-esdhc-imx.c b/arch/arm/mach-imx/devices/platform-sdhci-esdhc-imx.c index 3793e475cd95..e66a4e316311 100644 --- a/arch/arm/plat-mxc/devices/platform-sdhci-esdhc-imx.c +++ b/arch/arm/mach-imx/devices/platform-sdhci-esdhc-imx.c | |||
@@ -6,10 +6,11 @@ | |||
6 | * Free Software Foundation. | 6 | * Free Software Foundation. |
7 | */ | 7 | */ |
8 | 8 | ||
9 | #include <mach/hardware.h> | ||
10 | #include <mach/devices-common.h> | ||
11 | #include <linux/platform_data/mmc-esdhc-imx.h> | 9 | #include <linux/platform_data/mmc-esdhc-imx.h> |
12 | 10 | ||
11 | #include "../hardware.h" | ||
12 | #include "devices-common.h" | ||
13 | |||
13 | #define imx_sdhci_esdhc_imx_data_entry_single(soc, _devid, _id, hwid) \ | 14 | #define imx_sdhci_esdhc_imx_data_entry_single(soc, _devid, _id, hwid) \ |
14 | { \ | 15 | { \ |
15 | .devid = _devid, \ | 16 | .devid = _devid, \ |
diff --git a/arch/arm/plat-mxc/devices/platform-spi_imx.c b/arch/arm/mach-imx/devices/platform-spi_imx.c index 9c50c14c8f92..8880bcb11e05 100644 --- a/arch/arm/plat-mxc/devices/platform-spi_imx.c +++ b/arch/arm/mach-imx/devices/platform-spi_imx.c | |||
@@ -6,8 +6,8 @@ | |||
6 | * the terms of the GNU General Public License version 2 as published by the | 6 | * the terms of the GNU General Public License version 2 as published by the |
7 | * Free Software Foundation. | 7 | * Free Software Foundation. |
8 | */ | 8 | */ |
9 | #include <mach/hardware.h> | 9 | #include "../hardware.h" |
10 | #include <mach/devices-common.h> | 10 | #include "devices-common.h" |
11 | 11 | ||
12 | #define imx_spi_imx_data_entry_single(soc, type, _devid, _id, hwid, _size) \ | 12 | #define imx_spi_imx_data_entry_single(soc, type, _devid, _id, hwid, _size) \ |
13 | { \ | 13 | { \ |
diff --git a/arch/arm/mach-imx/ehci-imx25.c b/arch/arm/mach-imx/ehci-imx25.c index 412c583a24b0..27e40d17de99 100644 --- a/arch/arm/mach-imx/ehci-imx25.c +++ b/arch/arm/mach-imx/ehci-imx25.c | |||
@@ -15,10 +15,10 @@ | |||
15 | 15 | ||
16 | #include <linux/platform_device.h> | 16 | #include <linux/platform_device.h> |
17 | #include <linux/io.h> | 17 | #include <linux/io.h> |
18 | |||
19 | #include <mach/hardware.h> | ||
20 | #include <linux/platform_data/usb-ehci-mxc.h> | 18 | #include <linux/platform_data/usb-ehci-mxc.h> |
21 | 19 | ||
20 | #include "hardware.h" | ||
21 | |||
22 | #define USBCTRL_OTGBASE_OFFSET 0x600 | 22 | #define USBCTRL_OTGBASE_OFFSET 0x600 |
23 | 23 | ||
24 | #define MX25_OTG_SIC_SHIFT 29 | 24 | #define MX25_OTG_SIC_SHIFT 29 |
diff --git a/arch/arm/mach-imx/ehci-imx27.c b/arch/arm/mach-imx/ehci-imx27.c index cd6e1f81508d..448d9115539d 100644 --- a/arch/arm/mach-imx/ehci-imx27.c +++ b/arch/arm/mach-imx/ehci-imx27.c | |||
@@ -15,10 +15,10 @@ | |||
15 | 15 | ||
16 | #include <linux/platform_device.h> | 16 | #include <linux/platform_device.h> |
17 | #include <linux/io.h> | 17 | #include <linux/io.h> |
18 | |||
19 | #include <mach/hardware.h> | ||
20 | #include <linux/platform_data/usb-ehci-mxc.h> | 18 | #include <linux/platform_data/usb-ehci-mxc.h> |
21 | 19 | ||
20 | #include "hardware.h" | ||
21 | |||
22 | #define USBCTRL_OTGBASE_OFFSET 0x600 | 22 | #define USBCTRL_OTGBASE_OFFSET 0x600 |
23 | 23 | ||
24 | #define MX27_OTG_SIC_SHIFT 29 | 24 | #define MX27_OTG_SIC_SHIFT 29 |
diff --git a/arch/arm/mach-imx/ehci-imx31.c b/arch/arm/mach-imx/ehci-imx31.c index 9a880c78af34..05de4e1e39d7 100644 --- a/arch/arm/mach-imx/ehci-imx31.c +++ b/arch/arm/mach-imx/ehci-imx31.c | |||
@@ -15,10 +15,10 @@ | |||
15 | 15 | ||
16 | #include <linux/platform_device.h> | 16 | #include <linux/platform_device.h> |
17 | #include <linux/io.h> | 17 | #include <linux/io.h> |
18 | |||
19 | #include <mach/hardware.h> | ||
20 | #include <linux/platform_data/usb-ehci-mxc.h> | 18 | #include <linux/platform_data/usb-ehci-mxc.h> |
21 | 19 | ||
20 | #include "hardware.h" | ||
21 | |||
22 | #define USBCTRL_OTGBASE_OFFSET 0x600 | 22 | #define USBCTRL_OTGBASE_OFFSET 0x600 |
23 | 23 | ||
24 | #define MX31_OTG_SIC_SHIFT 29 | 24 | #define MX31_OTG_SIC_SHIFT 29 |
diff --git a/arch/arm/mach-imx/ehci-imx35.c b/arch/arm/mach-imx/ehci-imx35.c index 779e16eb65cb..a596f709a937 100644 --- a/arch/arm/mach-imx/ehci-imx35.c +++ b/arch/arm/mach-imx/ehci-imx35.c | |||
@@ -15,10 +15,10 @@ | |||
15 | 15 | ||
16 | #include <linux/platform_device.h> | 16 | #include <linux/platform_device.h> |
17 | #include <linux/io.h> | 17 | #include <linux/io.h> |
18 | |||
19 | #include <mach/hardware.h> | ||
20 | #include <linux/platform_data/usb-ehci-mxc.h> | 18 | #include <linux/platform_data/usb-ehci-mxc.h> |
21 | 19 | ||
20 | #include "hardware.h" | ||
21 | |||
22 | #define USBCTRL_OTGBASE_OFFSET 0x600 | 22 | #define USBCTRL_OTGBASE_OFFSET 0x600 |
23 | 23 | ||
24 | #define MX35_OTG_SIC_SHIFT 29 | 24 | #define MX35_OTG_SIC_SHIFT 29 |
diff --git a/arch/arm/mach-imx/ehci-imx5.c b/arch/arm/mach-imx/ehci-imx5.c index cf8d00e5cce1..e49710b10c68 100644 --- a/arch/arm/mach-imx/ehci-imx5.c +++ b/arch/arm/mach-imx/ehci-imx5.c | |||
@@ -15,10 +15,10 @@ | |||
15 | 15 | ||
16 | #include <linux/platform_device.h> | 16 | #include <linux/platform_device.h> |
17 | #include <linux/io.h> | 17 | #include <linux/io.h> |
18 | |||
19 | #include <mach/hardware.h> | ||
20 | #include <linux/platform_data/usb-ehci-mxc.h> | 18 | #include <linux/platform_data/usb-ehci-mxc.h> |
21 | 19 | ||
20 | #include "hardware.h" | ||
21 | |||
22 | #define MXC_OTG_OFFSET 0 | 22 | #define MXC_OTG_OFFSET 0 |
23 | #define MXC_H1_OFFSET 0x200 | 23 | #define MXC_H1_OFFSET 0x200 |
24 | #define MXC_H2_OFFSET 0x400 | 24 | #define MXC_H2_OFFSET 0x400 |
diff --git a/arch/arm/plat-mxc/epit.c b/arch/arm/mach-imx/epit.c index 88726f4dbbfa..04a5961beeac 100644 --- a/arch/arm/plat-mxc/epit.c +++ b/arch/arm/mach-imx/epit.c | |||
@@ -51,10 +51,10 @@ | |||
51 | #include <linux/clockchips.h> | 51 | #include <linux/clockchips.h> |
52 | #include <linux/clk.h> | 52 | #include <linux/clk.h> |
53 | #include <linux/err.h> | 53 | #include <linux/err.h> |
54 | |||
55 | #include <mach/hardware.h> | ||
56 | #include <asm/mach/time.h> | 54 | #include <asm/mach/time.h> |
57 | #include <mach/common.h> | 55 | |
56 | #include "common.h" | ||
57 | #include "hardware.h" | ||
58 | 58 | ||
59 | static struct clock_event_device clockevent_epit; | 59 | static struct clock_event_device clockevent_epit; |
60 | static enum clock_event_mode clockevent_mode = CLOCK_EVT_MODE_UNUSED; | 60 | static enum clock_event_mode clockevent_mode = CLOCK_EVT_MODE_UNUSED; |
diff --git a/arch/arm/plat-mxc/include/mach/eukrea-baseboards.h b/arch/arm/mach-imx/eukrea-baseboards.h index a21d3313f994..a21d3313f994 100644 --- a/arch/arm/plat-mxc/include/mach/eukrea-baseboards.h +++ b/arch/arm/mach-imx/eukrea-baseboards.h | |||
diff --git a/arch/arm/mach-imx/eukrea_mbimx27-baseboard.c b/arch/arm/mach-imx/eukrea_mbimx27-baseboard.c index 98aef571b9f8..b4c70028d359 100644 --- a/arch/arm/mach-imx/eukrea_mbimx27-baseboard.c +++ b/arch/arm/mach-imx/eukrea_mbimx27-baseboard.c | |||
@@ -29,11 +29,10 @@ | |||
29 | 29 | ||
30 | #include <asm/mach/arch.h> | 30 | #include <asm/mach/arch.h> |
31 | 31 | ||
32 | #include <mach/common.h> | 32 | #include "common.h" |
33 | #include <mach/iomux-mx27.h> | ||
34 | #include <mach/hardware.h> | ||
35 | |||
36 | #include "devices-imx27.h" | 33 | #include "devices-imx27.h" |
34 | #include "hardware.h" | ||
35 | #include "iomux-mx27.h" | ||
37 | 36 | ||
38 | static const int eukrea_mbimx27_pins[] __initconst = { | 37 | static const int eukrea_mbimx27_pins[] __initconst = { |
39 | /* UART2 */ | 38 | /* UART2 */ |
diff --git a/arch/arm/mach-imx/eukrea_mbimxsd25-baseboard.c b/arch/arm/mach-imx/eukrea_mbimxsd25-baseboard.c index 0b84666792f0..e2b70f4c1a2c 100644 --- a/arch/arm/mach-imx/eukrea_mbimxsd25-baseboard.c +++ b/arch/arm/mach-imx/eukrea_mbimxsd25-baseboard.c | |||
@@ -26,14 +26,14 @@ | |||
26 | #include <linux/spi/spi.h> | 26 | #include <linux/spi/spi.h> |
27 | #include <video/platform_lcd.h> | 27 | #include <video/platform_lcd.h> |
28 | 28 | ||
29 | #include <mach/hardware.h> | ||
30 | #include <mach/iomux-mx25.h> | ||
31 | #include <mach/common.h> | ||
32 | #include <asm/mach-types.h> | 29 | #include <asm/mach-types.h> |
33 | #include <asm/mach/arch.h> | 30 | #include <asm/mach/arch.h> |
34 | #include <mach/mx25.h> | ||
35 | 31 | ||
32 | #include "common.h" | ||
36 | #include "devices-imx25.h" | 33 | #include "devices-imx25.h" |
34 | #include "hardware.h" | ||
35 | #include "iomux-mx25.h" | ||
36 | #include "mx25.h" | ||
37 | 37 | ||
38 | static iomux_v3_cfg_t eukrea_mbimxsd_pads[] = { | 38 | static iomux_v3_cfg_t eukrea_mbimxsd_pads[] = { |
39 | /* LCD */ | 39 | /* LCD */ |
diff --git a/arch/arm/mach-imx/eukrea_mbimxsd35-baseboard.c b/arch/arm/mach-imx/eukrea_mbimxsd35-baseboard.c index c6532a007d46..5a2d5ef12dd5 100644 --- a/arch/arm/mach-imx/eukrea_mbimxsd35-baseboard.c +++ b/arch/arm/mach-imx/eukrea_mbimxsd35-baseboard.c | |||
@@ -36,11 +36,10 @@ | |||
36 | #include <asm/mach/time.h> | 36 | #include <asm/mach/time.h> |
37 | #include <asm/mach/map.h> | 37 | #include <asm/mach/map.h> |
38 | 38 | ||
39 | #include <mach/hardware.h> | 39 | #include "common.h" |
40 | #include <mach/common.h> | ||
41 | #include <mach/iomux-mx35.h> | ||
42 | |||
43 | #include "devices-imx35.h" | 40 | #include "devices-imx35.h" |
41 | #include "hardware.h" | ||
42 | #include "iomux-mx35.h" | ||
44 | 43 | ||
45 | static const struct fb_videomode fb_modedb[] = { | 44 | static const struct fb_videomode fb_modedb[] = { |
46 | { | 45 | { |
diff --git a/arch/arm/mach-imx/eukrea_mbimxsd51-baseboard.c b/arch/arm/mach-imx/eukrea_mbimxsd51-baseboard.c index 8b0de30d7a3f..9be6c1e69d68 100644 --- a/arch/arm/mach-imx/eukrea_mbimxsd51-baseboard.c +++ b/arch/arm/mach-imx/eukrea_mbimxsd51-baseboard.c | |||
@@ -36,11 +36,10 @@ | |||
36 | #include <asm/mach/time.h> | 36 | #include <asm/mach/time.h> |
37 | #include <asm/mach/map.h> | 37 | #include <asm/mach/map.h> |
38 | 38 | ||
39 | #include <mach/hardware.h> | 39 | #include "common.h" |
40 | #include <mach/common.h> | ||
41 | #include <mach/iomux-mx51.h> | ||
42 | |||
43 | #include "devices-imx51.h" | 40 | #include "devices-imx51.h" |
41 | #include "hardware.h" | ||
42 | #include "iomux-mx51.h" | ||
44 | 43 | ||
45 | static iomux_v3_cfg_t eukrea_mbimxsd51_pads[] = { | 44 | static iomux_v3_cfg_t eukrea_mbimxsd51_pads[] = { |
46 | /* LED */ | 45 | /* LED */ |
diff --git a/arch/arm/plat-mxc/include/mach/hardware.h b/arch/arm/mach-imx/hardware.h index ebf10654bb42..3ce7fa3bd43f 100644 --- a/arch/arm/plat-mxc/include/mach/hardware.h +++ b/arch/arm/mach-imx/hardware.h | |||
@@ -105,20 +105,20 @@ | |||
105 | 105 | ||
106 | #define IMX_IO_ADDRESS(x) IOMEM(IMX_IO_P2V(x)) | 106 | #define IMX_IO_ADDRESS(x) IOMEM(IMX_IO_P2V(x)) |
107 | 107 | ||
108 | #include <mach/mxc.h> | 108 | #include "mxc.h" |
109 | 109 | ||
110 | #include <mach/mx6q.h> | 110 | #include "mx6q.h" |
111 | #include <mach/mx50.h> | 111 | #include "mx50.h" |
112 | #include <mach/mx51.h> | 112 | #include "mx51.h" |
113 | #include <mach/mx53.h> | 113 | #include "mx53.h" |
114 | #include <mach/mx3x.h> | 114 | #include "mx3x.h" |
115 | #include <mach/mx31.h> | 115 | #include "mx31.h" |
116 | #include <mach/mx35.h> | 116 | #include "mx35.h" |
117 | #include <mach/mx2x.h> | 117 | #include "mx2x.h" |
118 | #include <mach/mx21.h> | 118 | #include "mx21.h" |
119 | #include <mach/mx27.h> | 119 | #include "mx27.h" |
120 | #include <mach/mx1.h> | 120 | #include "mx1.h" |
121 | #include <mach/mx25.h> | 121 | #include "mx25.h" |
122 | 122 | ||
123 | #define imx_map_entry(soc, name, _type) { \ | 123 | #define imx_map_entry(soc, name, _type) { \ |
124 | .virtual = soc ## _IO_P2V(soc ## _ ## name ## _BASE_ADDR), \ | 124 | .virtual = soc ## _IO_P2V(soc ## _ ## name ## _BASE_ADDR), \ |
diff --git a/arch/arm/mach-imx/hotplug.c b/arch/arm/mach-imx/hotplug.c index b07b778dc9a8..3dec962b0770 100644 --- a/arch/arm/mach-imx/hotplug.c +++ b/arch/arm/mach-imx/hotplug.c | |||
@@ -13,7 +13,8 @@ | |||
13 | #include <linux/errno.h> | 13 | #include <linux/errno.h> |
14 | #include <asm/cacheflush.h> | 14 | #include <asm/cacheflush.h> |
15 | #include <asm/cp15.h> | 15 | #include <asm/cp15.h> |
16 | #include <mach/common.h> | 16 | |
17 | #include "common.h" | ||
17 | 18 | ||
18 | static inline void cpu_enter_lowpower(void) | 19 | static inline void cpu_enter_lowpower(void) |
19 | { | 20 | { |
diff --git a/arch/arm/plat-mxc/include/mach/iim.h b/arch/arm/mach-imx/iim.h index 315bffadafda..315bffadafda 100644 --- a/arch/arm/plat-mxc/include/mach/iim.h +++ b/arch/arm/mach-imx/iim.h | |||
diff --git a/arch/arm/mach-imx/imx25-dt.c b/arch/arm/mach-imx/imx25-dt.c new file mode 100644 index 000000000000..e17dfbc42192 --- /dev/null +++ b/arch/arm/mach-imx/imx25-dt.c | |||
@@ -0,0 +1,48 @@ | |||
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/of_irq.h> | ||
14 | #include <linux/of_platform.h> | ||
15 | #include <asm/mach/arch.h> | ||
16 | #include <asm/mach/time.h> | ||
17 | #include "common.h" | ||
18 | #include "mx25.h" | ||
19 | |||
20 | static void __init imx25_dt_init(void) | ||
21 | { | ||
22 | of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); | ||
23 | } | ||
24 | |||
25 | static void __init imx25_timer_init(void) | ||
26 | { | ||
27 | mx25_clocks_init_dt(); | ||
28 | } | ||
29 | |||
30 | static struct sys_timer imx25_timer = { | ||
31 | .init = imx25_timer_init, | ||
32 | }; | ||
33 | |||
34 | static const char * const imx25_dt_board_compat[] __initconst = { | ||
35 | "fsl,imx25", | ||
36 | NULL | ||
37 | }; | ||
38 | |||
39 | DT_MACHINE_START(IMX25_DT, "Freescale i.MX25 (Device Tree Support)") | ||
40 | .map_io = mx25_map_io, | ||
41 | .init_early = imx25_init_early, | ||
42 | .init_irq = mx25_init_irq, | ||
43 | .handle_irq = imx25_handle_irq, | ||
44 | .timer = &imx25_timer, | ||
45 | .init_machine = imx25_dt_init, | ||
46 | .dt_compat = imx25_dt_board_compat, | ||
47 | .restart = mxc_restart, | ||
48 | MACHINE_END | ||
diff --git a/arch/arm/mach-imx/imx27-dt.c b/arch/arm/mach-imx/imx27-dt.c index e80d5235dac0..ebfae96543c4 100644 --- a/arch/arm/mach-imx/imx27-dt.c +++ b/arch/arm/mach-imx/imx27-dt.c | |||
@@ -14,21 +14,22 @@ | |||
14 | #include <linux/of_platform.h> | 14 | #include <linux/of_platform.h> |
15 | #include <asm/mach/arch.h> | 15 | #include <asm/mach/arch.h> |
16 | #include <asm/mach/time.h> | 16 | #include <asm/mach/time.h> |
17 | #include <mach/common.h> | 17 | |
18 | #include <mach/mx27.h> | 18 | #include "common.h" |
19 | #include "mx27.h" | ||
19 | 20 | ||
20 | static const struct of_dev_auxdata imx27_auxdata_lookup[] __initconst = { | 21 | static const struct of_dev_auxdata imx27_auxdata_lookup[] __initconst = { |
21 | OF_DEV_AUXDATA("fsl,imx27-uart", MX27_UART1_BASE_ADDR, "imx21-uart.0", NULL), | 22 | OF_DEV_AUXDATA("fsl,imx27-uart", MX27_UART1_BASE_ADDR, "imx21-uart.0", NULL), |
22 | OF_DEV_AUXDATA("fsl,imx27-uart", MX27_UART2_BASE_ADDR, "imx21-uart.1", NULL), | 23 | OF_DEV_AUXDATA("fsl,imx27-uart", MX27_UART2_BASE_ADDR, "imx21-uart.1", NULL), |
23 | OF_DEV_AUXDATA("fsl,imx27-uart", MX27_UART3_BASE_ADDR, "imx21-uart.2", NULL), | 24 | OF_DEV_AUXDATA("fsl,imx27-uart", MX27_UART3_BASE_ADDR, "imx21-uart.2", NULL), |
24 | OF_DEV_AUXDATA("fsl,imx27-fec", MX27_FEC_BASE_ADDR, "imx27-fec.0", NULL), | 25 | OF_DEV_AUXDATA("fsl,imx27-fec", MX27_FEC_BASE_ADDR, "imx27-fec.0", NULL), |
25 | OF_DEV_AUXDATA("fsl,imx27-i2c", MX27_I2C1_BASE_ADDR, "imx-i2c.0", NULL), | 26 | OF_DEV_AUXDATA("fsl,imx27-i2c", MX27_I2C1_BASE_ADDR, "imx21-i2c.0", NULL), |
26 | OF_DEV_AUXDATA("fsl,imx27-i2c", MX27_I2C2_BASE_ADDR, "imx-i2c.1", NULL), | 27 | OF_DEV_AUXDATA("fsl,imx27-i2c", MX27_I2C2_BASE_ADDR, "imx21-i2c.1", NULL), |
27 | OF_DEV_AUXDATA("fsl,imx27-cspi", MX27_CSPI1_BASE_ADDR, "imx27-cspi.0", NULL), | 28 | OF_DEV_AUXDATA("fsl,imx27-cspi", MX27_CSPI1_BASE_ADDR, "imx27-cspi.0", NULL), |
28 | OF_DEV_AUXDATA("fsl,imx27-cspi", MX27_CSPI2_BASE_ADDR, "imx27-cspi.1", NULL), | 29 | OF_DEV_AUXDATA("fsl,imx27-cspi", MX27_CSPI2_BASE_ADDR, "imx27-cspi.1", NULL), |
29 | OF_DEV_AUXDATA("fsl,imx27-cspi", MX27_CSPI3_BASE_ADDR, "imx27-cspi.2", NULL), | 30 | OF_DEV_AUXDATA("fsl,imx27-cspi", MX27_CSPI3_BASE_ADDR, "imx27-cspi.2", NULL), |
30 | OF_DEV_AUXDATA("fsl,imx27-wdt", MX27_WDOG_BASE_ADDR, "imx2-wdt.0", NULL), | 31 | OF_DEV_AUXDATA("fsl,imx27-wdt", MX27_WDOG_BASE_ADDR, "imx2-wdt.0", NULL), |
31 | OF_DEV_AUXDATA("fsl,imx27-nand", MX27_NFC_BASE_ADDR, "mxc_nand.0", NULL), | 32 | OF_DEV_AUXDATA("fsl,imx27-nand", MX27_NFC_BASE_ADDR, "imx27-nand.0", NULL), |
32 | { /* sentinel */ } | 33 | { /* sentinel */ } |
33 | }; | 34 | }; |
34 | 35 | ||
diff --git a/arch/arm/mach-imx/imx31-dt.c b/arch/arm/mach-imx/imx31-dt.c index a68ba207b2b7..af476de2570e 100644 --- a/arch/arm/mach-imx/imx31-dt.c +++ b/arch/arm/mach-imx/imx31-dt.c | |||
@@ -14,8 +14,9 @@ | |||
14 | #include <linux/of_platform.h> | 14 | #include <linux/of_platform.h> |
15 | #include <asm/mach/arch.h> | 15 | #include <asm/mach/arch.h> |
16 | #include <asm/mach/time.h> | 16 | #include <asm/mach/time.h> |
17 | #include <mach/common.h> | 17 | |
18 | #include <mach/mx31.h> | 18 | #include "common.h" |
19 | #include "mx31.h" | ||
19 | 20 | ||
20 | static const struct of_dev_auxdata imx31_auxdata_lookup[] __initconst = { | 21 | static const struct of_dev_auxdata imx31_auxdata_lookup[] __initconst = { |
21 | OF_DEV_AUXDATA("fsl,imx31-uart", MX31_UART1_BASE_ADDR, | 22 | OF_DEV_AUXDATA("fsl,imx31-uart", MX31_UART1_BASE_ADDR, |
diff --git a/arch/arm/mach-imx/imx51-dt.c b/arch/arm/mach-imx/imx51-dt.c index f233b4bb2342..50742990a136 100644 --- a/arch/arm/mach-imx/imx51-dt.c +++ b/arch/arm/mach-imx/imx51-dt.c | |||
@@ -15,8 +15,9 @@ | |||
15 | #include <linux/of_platform.h> | 15 | #include <linux/of_platform.h> |
16 | #include <asm/mach/arch.h> | 16 | #include <asm/mach/arch.h> |
17 | #include <asm/mach/time.h> | 17 | #include <asm/mach/time.h> |
18 | #include <mach/common.h> | 18 | |
19 | #include <mach/mx51.h> | 19 | #include "common.h" |
20 | #include "mx51.h" | ||
20 | 21 | ||
21 | /* | 22 | /* |
22 | * Lookup table for attaching a specific name and platform_data pointer to | 23 | * Lookup table for attaching a specific name and platform_data pointer to |
@@ -36,8 +37,8 @@ static const struct of_dev_auxdata imx51_auxdata_lookup[] __initconst = { | |||
36 | OF_DEV_AUXDATA("fsl,imx51-ecspi", MX51_ECSPI1_BASE_ADDR, "imx51-ecspi.0", NULL), | 37 | OF_DEV_AUXDATA("fsl,imx51-ecspi", MX51_ECSPI1_BASE_ADDR, "imx51-ecspi.0", NULL), |
37 | OF_DEV_AUXDATA("fsl,imx51-ecspi", MX51_ECSPI2_BASE_ADDR, "imx51-ecspi.1", NULL), | 38 | OF_DEV_AUXDATA("fsl,imx51-ecspi", MX51_ECSPI2_BASE_ADDR, "imx51-ecspi.1", NULL), |
38 | OF_DEV_AUXDATA("fsl,imx51-cspi", MX51_CSPI_BASE_ADDR, "imx35-cspi.0", NULL), | 39 | OF_DEV_AUXDATA("fsl,imx51-cspi", MX51_CSPI_BASE_ADDR, "imx35-cspi.0", NULL), |
39 | OF_DEV_AUXDATA("fsl,imx51-i2c", MX51_I2C1_BASE_ADDR, "imx-i2c.0", NULL), | 40 | OF_DEV_AUXDATA("fsl,imx51-i2c", MX51_I2C1_BASE_ADDR, "imx21-i2c.0", NULL), |
40 | OF_DEV_AUXDATA("fsl,imx51-i2c", MX51_I2C2_BASE_ADDR, "imx-i2c.1", NULL), | 41 | OF_DEV_AUXDATA("fsl,imx51-i2c", MX51_I2C2_BASE_ADDR, "imx21-i2c.1", NULL), |
41 | OF_DEV_AUXDATA("fsl,imx51-sdma", MX51_SDMA_BASE_ADDR, "imx35-sdma", NULL), | 42 | OF_DEV_AUXDATA("fsl,imx51-sdma", MX51_SDMA_BASE_ADDR, "imx35-sdma", NULL), |
42 | OF_DEV_AUXDATA("fsl,imx51-wdt", MX51_WDOG1_BASE_ADDR, "imx2-wdt.0", NULL), | 43 | OF_DEV_AUXDATA("fsl,imx51-wdt", MX51_WDOG1_BASE_ADDR, "imx2-wdt.0", NULL), |
43 | { /* sentinel */ } | 44 | { /* sentinel */ } |
diff --git a/arch/arm/mach-imx/include/mach/dma-mx1-mx2.h b/arch/arm/mach-imx/include/mach/dma-mx1-mx2.h deleted file mode 100644 index df5f522da6b3..000000000000 --- a/arch/arm/mach-imx/include/mach/dma-mx1-mx2.h +++ /dev/null | |||
@@ -1,10 +0,0 @@ | |||
1 | #ifndef __MACH_DMA_MX1_MX2_H__ | ||
2 | #define __MACH_DMA_MX1_MX2_H__ | ||
3 | /* | ||
4 | * Don't use this header in new code, it will go away when all users are | ||
5 | * converted to mach/dma-v1.h | ||
6 | */ | ||
7 | |||
8 | #include <mach/dma-v1.h> | ||
9 | |||
10 | #endif /* ifndef __MACH_DMA_MX1_MX2_H__ */ | ||
diff --git a/arch/arm/mach-imx/iomux-imx31.c b/arch/arm/mach-imx/iomux-imx31.c index 82bd4403b450..cabefbc5e7c1 100644 --- a/arch/arm/mach-imx/iomux-imx31.c +++ b/arch/arm/mach-imx/iomux-imx31.c | |||
@@ -22,8 +22,9 @@ | |||
22 | #include <linux/spinlock.h> | 22 | #include <linux/spinlock.h> |
23 | #include <linux/io.h> | 23 | #include <linux/io.h> |
24 | #include <linux/kernel.h> | 24 | #include <linux/kernel.h> |
25 | #include <mach/hardware.h> | 25 | |
26 | #include <mach/iomux-mx3.h> | 26 | #include "hardware.h" |
27 | #include "iomux-mx3.h" | ||
27 | 28 | ||
28 | /* | 29 | /* |
29 | * IOMUX register (base) addresses | 30 | * IOMUX register (base) addresses |
diff --git a/arch/arm/plat-mxc/include/mach/iomux-mx1.h b/arch/arm/mach-imx/iomux-mx1.h index 6b1507cf378e..95f4681d85d7 100644 --- a/arch/arm/plat-mxc/include/mach/iomux-mx1.h +++ b/arch/arm/mach-imx/iomux-mx1.h | |||
@@ -18,7 +18,7 @@ | |||
18 | #ifndef __MACH_IOMUX_MX1_H__ | 18 | #ifndef __MACH_IOMUX_MX1_H__ |
19 | #define __MACH_IOMUX_MX1_H__ | 19 | #define __MACH_IOMUX_MX1_H__ |
20 | 20 | ||
21 | #include <mach/iomux-v1.h> | 21 | #include "iomux-v1.h" |
22 | 22 | ||
23 | #define PA0_AIN_SPI2_CLK (GPIO_PORTA | GPIO_AIN | GPIO_OUT | 0) | 23 | #define PA0_AIN_SPI2_CLK (GPIO_PORTA | GPIO_AIN | GPIO_OUT | 0) |
24 | #define PA0_AF_ETMTRACESYNC (GPIO_PORTA | GPIO_AF | 0) | 24 | #define PA0_AF_ETMTRACESYNC (GPIO_PORTA | GPIO_AF | 0) |
diff --git a/arch/arm/plat-mxc/include/mach/iomux-mx21.h b/arch/arm/mach-imx/iomux-mx21.h index 1495dfda7834..a70cffceb085 100644 --- a/arch/arm/plat-mxc/include/mach/iomux-mx21.h +++ b/arch/arm/mach-imx/iomux-mx21.h | |||
@@ -18,8 +18,8 @@ | |||
18 | #ifndef __MACH_IOMUX_MX21_H__ | 18 | #ifndef __MACH_IOMUX_MX21_H__ |
19 | #define __MACH_IOMUX_MX21_H__ | 19 | #define __MACH_IOMUX_MX21_H__ |
20 | 20 | ||
21 | #include <mach/iomux-mx2x.h> | 21 | #include "iomux-mx2x.h" |
22 | #include <mach/iomux-v1.h> | 22 | #include "iomux-v1.h" |
23 | 23 | ||
24 | /* Primary GPIO pin functions */ | 24 | /* Primary GPIO pin functions */ |
25 | 25 | ||
diff --git a/arch/arm/plat-mxc/include/mach/iomux-mx25.h b/arch/arm/mach-imx/iomux-mx25.h index c61ec0fc10d4..be51e838375c 100644 --- a/arch/arm/plat-mxc/include/mach/iomux-mx25.h +++ b/arch/arm/mach-imx/iomux-mx25.h | |||
@@ -19,7 +19,7 @@ | |||
19 | #ifndef __MACH_IOMUX_MX25_H__ | 19 | #ifndef __MACH_IOMUX_MX25_H__ |
20 | #define __MACH_IOMUX_MX25_H__ | 20 | #define __MACH_IOMUX_MX25_H__ |
21 | 21 | ||
22 | #include <mach/iomux-v3.h> | 22 | #include "iomux-v3.h" |
23 | 23 | ||
24 | /* | 24 | /* |
25 | * IOMUX/PAD Bit field definitions | 25 | * IOMUX/PAD Bit field definitions |
diff --git a/arch/arm/plat-mxc/include/mach/iomux-mx27.h b/arch/arm/mach-imx/iomux-mx27.h index d9f9a6e32d80..218e99e89e86 100644 --- a/arch/arm/plat-mxc/include/mach/iomux-mx27.h +++ b/arch/arm/mach-imx/iomux-mx27.h | |||
@@ -19,8 +19,8 @@ | |||
19 | #ifndef __MACH_IOMUX_MX27_H__ | 19 | #ifndef __MACH_IOMUX_MX27_H__ |
20 | #define __MACH_IOMUX_MX27_H__ | 20 | #define __MACH_IOMUX_MX27_H__ |
21 | 21 | ||
22 | #include <mach/iomux-mx2x.h> | 22 | #include "iomux-mx2x.h" |
23 | #include <mach/iomux-v1.h> | 23 | #include "iomux-v1.h" |
24 | 24 | ||
25 | /* Primary GPIO pin functions */ | 25 | /* Primary GPIO pin functions */ |
26 | 26 | ||
diff --git a/arch/arm/plat-mxc/include/mach/iomux-mx2x.h b/arch/arm/mach-imx/iomux-mx2x.h index 7a9b20abda09..7a9b20abda09 100644 --- a/arch/arm/plat-mxc/include/mach/iomux-mx2x.h +++ b/arch/arm/mach-imx/iomux-mx2x.h | |||
diff --git a/arch/arm/plat-mxc/include/mach/iomux-mx3.h b/arch/arm/mach-imx/iomux-mx3.h index f79f78a1c0ed..f79f78a1c0ed 100644 --- a/arch/arm/plat-mxc/include/mach/iomux-mx3.h +++ b/arch/arm/mach-imx/iomux-mx3.h | |||
diff --git a/arch/arm/plat-mxc/include/mach/iomux-mx35.h b/arch/arm/mach-imx/iomux-mx35.h index 3117c18bbbd9..90bfa6b5be6a 100644 --- a/arch/arm/plat-mxc/include/mach/iomux-mx35.h +++ b/arch/arm/mach-imx/iomux-mx35.h | |||
@@ -19,7 +19,7 @@ | |||
19 | #ifndef __MACH_IOMUX_MX35_H__ | 19 | #ifndef __MACH_IOMUX_MX35_H__ |
20 | #define __MACH_IOMUX_MX35_H__ | 20 | #define __MACH_IOMUX_MX35_H__ |
21 | 21 | ||
22 | #include <mach/iomux-v3.h> | 22 | #include "iomux-v3.h" |
23 | 23 | ||
24 | /* | 24 | /* |
25 | * The naming convention for the pad modes is MX35_PAD_<padname>__<padmode> | 25 | * The naming convention for the pad modes is MX35_PAD_<padname>__<padmode> |
diff --git a/arch/arm/plat-mxc/include/mach/iomux-mx50.h b/arch/arm/mach-imx/iomux-mx50.h index 98e7fd0b9083..00f56e0e8009 100644 --- a/arch/arm/plat-mxc/include/mach/iomux-mx50.h +++ b/arch/arm/mach-imx/iomux-mx50.h | |||
@@ -19,7 +19,7 @@ | |||
19 | #ifndef __MACH_IOMUX_MX50_H__ | 19 | #ifndef __MACH_IOMUX_MX50_H__ |
20 | #define __MACH_IOMUX_MX50_H__ | 20 | #define __MACH_IOMUX_MX50_H__ |
21 | 21 | ||
22 | #include <mach/iomux-v3.h> | 22 | #include "iomux-v3.h" |
23 | 23 | ||
24 | #define MX50_ELCDIF_PAD_CTRL (PAD_CTL_PKE | PAD_CTL_DSE_HIGH) | 24 | #define MX50_ELCDIF_PAD_CTRL (PAD_CTL_PKE | PAD_CTL_DSE_HIGH) |
25 | 25 | ||
diff --git a/arch/arm/plat-mxc/include/mach/iomux-mx51.h b/arch/arm/mach-imx/iomux-mx51.h index 2623e7a2e190..75bbcc4aa2d2 100644 --- a/arch/arm/plat-mxc/include/mach/iomux-mx51.h +++ b/arch/arm/mach-imx/iomux-mx51.h | |||
@@ -13,7 +13,7 @@ | |||
13 | #ifndef __MACH_IOMUX_MX51_H__ | 13 | #ifndef __MACH_IOMUX_MX51_H__ |
14 | #define __MACH_IOMUX_MX51_H__ | 14 | #define __MACH_IOMUX_MX51_H__ |
15 | 15 | ||
16 | #include <mach/iomux-v3.h> | 16 | #include "iomux-v3.h" |
17 | #define __NA_ 0x000 | 17 | #define __NA_ 0x000 |
18 | 18 | ||
19 | 19 | ||
diff --git a/arch/arm/plat-mxc/iomux-v1.c b/arch/arm/mach-imx/iomux-v1.c index 1f73963bc13e..2b156d1d9e21 100644 --- a/arch/arm/plat-mxc/iomux-v1.c +++ b/arch/arm/mach-imx/iomux-v1.c | |||
@@ -28,9 +28,10 @@ | |||
28 | #include <linux/string.h> | 28 | #include <linux/string.h> |
29 | #include <linux/gpio.h> | 29 | #include <linux/gpio.h> |
30 | 30 | ||
31 | #include <mach/hardware.h> | ||
32 | #include <asm/mach/map.h> | 31 | #include <asm/mach/map.h> |
33 | #include <mach/iomux-v1.h> | 32 | |
33 | #include "hardware.h" | ||
34 | #include "iomux-v1.h" | ||
34 | 35 | ||
35 | static void __iomem *imx_iomuxv1_baseaddr; | 36 | static void __iomem *imx_iomuxv1_baseaddr; |
36 | static unsigned imx_iomuxv1_numports; | 37 | static unsigned imx_iomuxv1_numports; |
diff --git a/arch/arm/plat-mxc/include/mach/iomux-v1.h b/arch/arm/mach-imx/iomux-v1.h index 02651a40fe23..02651a40fe23 100644 --- a/arch/arm/plat-mxc/include/mach/iomux-v1.h +++ b/arch/arm/mach-imx/iomux-v1.h | |||
diff --git a/arch/arm/plat-mxc/iomux-v3.c b/arch/arm/mach-imx/iomux-v3.c index 99a9cdb9d6be..9dae74bf47fc 100644 --- a/arch/arm/plat-mxc/iomux-v3.c +++ b/arch/arm/mach-imx/iomux-v3.c | |||
@@ -25,9 +25,10 @@ | |||
25 | #include <linux/string.h> | 25 | #include <linux/string.h> |
26 | #include <linux/gpio.h> | 26 | #include <linux/gpio.h> |
27 | 27 | ||
28 | #include <mach/hardware.h> | ||
29 | #include <asm/mach/map.h> | 28 | #include <asm/mach/map.h> |
30 | #include <mach/iomux-v3.h> | 29 | |
30 | #include "hardware.h" | ||
31 | #include "iomux-v3.h" | ||
31 | 32 | ||
32 | static void __iomem *base; | 33 | static void __iomem *base; |
33 | 34 | ||
diff --git a/arch/arm/plat-mxc/include/mach/iomux-v3.h b/arch/arm/mach-imx/iomux-v3.h index 2fa3b5430102..2fa3b5430102 100644 --- a/arch/arm/plat-mxc/include/mach/iomux-v3.h +++ b/arch/arm/mach-imx/iomux-v3.h | |||
diff --git a/arch/arm/plat-mxc/include/mach/iram.h b/arch/arm/mach-imx/iram.h index 022690c33702..022690c33702 100644 --- a/arch/arm/plat-mxc/include/mach/iram.h +++ b/arch/arm/mach-imx/iram.h | |||
diff --git a/arch/arm/plat-mxc/iram_alloc.c b/arch/arm/mach-imx/iram_alloc.c index 074c3869626a..6c80424f678e 100644 --- a/arch/arm/plat-mxc/iram_alloc.c +++ b/arch/arm/mach-imx/iram_alloc.c | |||
@@ -22,7 +22,8 @@ | |||
22 | #include <linux/module.h> | 22 | #include <linux/module.h> |
23 | #include <linux/spinlock.h> | 23 | #include <linux/spinlock.h> |
24 | #include <linux/genalloc.h> | 24 | #include <linux/genalloc.h> |
25 | #include <mach/iram.h> | 25 | |
26 | #include "iram.h" | ||
26 | 27 | ||
27 | static unsigned long iram_phys_base; | 28 | static unsigned long iram_phys_base; |
28 | static void __iomem *iram_virt_base; | 29 | static void __iomem *iram_virt_base; |
diff --git a/arch/arm/plat-mxc/irq-common.c b/arch/arm/mach-imx/irq-common.c index b6e11458e5ae..b6e11458e5ae 100644 --- a/arch/arm/plat-mxc/irq-common.c +++ b/arch/arm/mach-imx/irq-common.c | |||
diff --git a/arch/arm/plat-mxc/irq-common.h b/arch/arm/mach-imx/irq-common.h index 6ccb3a14c693..5b2dabba330f 100644 --- a/arch/arm/plat-mxc/irq-common.h +++ b/arch/arm/mach-imx/irq-common.h | |||
@@ -19,6 +19,9 @@ | |||
19 | #ifndef __PLAT_MXC_IRQ_COMMON_H__ | 19 | #ifndef __PLAT_MXC_IRQ_COMMON_H__ |
20 | #define __PLAT_MXC_IRQ_COMMON_H__ | 20 | #define __PLAT_MXC_IRQ_COMMON_H__ |
21 | 21 | ||
22 | /* all normal IRQs can be FIQs */ | ||
23 | #define FIQ_START 0 | ||
24 | |||
22 | struct mxc_extra_irq | 25 | struct mxc_extra_irq |
23 | { | 26 | { |
24 | int (*set_priority)(unsigned char irq, unsigned char prio); | 27 | int (*set_priority)(unsigned char irq, unsigned char prio); |
diff --git a/arch/arm/mach-imx/lluart.c b/arch/arm/mach-imx/lluart.c index c40a34c00489..5f1510363ee7 100644 --- a/arch/arm/mach-imx/lluart.c +++ b/arch/arm/mach-imx/lluart.c | |||
@@ -14,7 +14,8 @@ | |||
14 | #include <asm/page.h> | 14 | #include <asm/page.h> |
15 | #include <asm/sizes.h> | 15 | #include <asm/sizes.h> |
16 | #include <asm/mach/map.h> | 16 | #include <asm/mach/map.h> |
17 | #include <mach/hardware.h> | 17 | |
18 | #include "hardware.h" | ||
18 | 19 | ||
19 | static struct map_desc imx_lluart_desc = { | 20 | static struct map_desc imx_lluart_desc = { |
20 | #ifdef CONFIG_DEBUG_IMX6Q_UART2 | 21 | #ifdef CONFIG_DEBUG_IMX6Q_UART2 |
diff --git a/arch/arm/mach-imx/mach-apf9328.c b/arch/arm/mach-imx/mach-apf9328.c index 7b99a79722b6..5c9bd2c66e6d 100644 --- a/arch/arm/mach-imx/mach-apf9328.c +++ b/arch/arm/mach-imx/mach-apf9328.c | |||
@@ -25,11 +25,10 @@ | |||
25 | #include <asm/mach/arch.h> | 25 | #include <asm/mach/arch.h> |
26 | #include <asm/mach/time.h> | 26 | #include <asm/mach/time.h> |
27 | 27 | ||
28 | #include <mach/common.h> | 28 | #include "common.h" |
29 | #include <mach/hardware.h> | ||
30 | #include <mach/iomux-mx1.h> | ||
31 | |||
32 | #include "devices-imx1.h" | 29 | #include "devices-imx1.h" |
30 | #include "hardware.h" | ||
31 | #include "iomux-mx1.h" | ||
33 | 32 | ||
34 | static const int apf9328_pins[] __initconst = { | 33 | static const int apf9328_pins[] __initconst = { |
35 | /* UART1 */ | 34 | /* UART1 */ |
diff --git a/arch/arm/mach-imx/mach-armadillo5x0.c b/arch/arm/mach-imx/mach-armadillo5x0.c index 5985ed1b8c98..59bd6b06a6b5 100644 --- a/arch/arm/mach-imx/mach-armadillo5x0.c +++ b/arch/arm/mach-imx/mach-armadillo5x0.c | |||
@@ -41,19 +41,18 @@ | |||
41 | #include <linux/regulator/machine.h> | 41 | #include <linux/regulator/machine.h> |
42 | #include <linux/regulator/fixed.h> | 42 | #include <linux/regulator/fixed.h> |
43 | 43 | ||
44 | #include <mach/hardware.h> | ||
45 | #include <asm/mach-types.h> | 44 | #include <asm/mach-types.h> |
46 | #include <asm/mach/arch.h> | 45 | #include <asm/mach/arch.h> |
47 | #include <asm/mach/time.h> | 46 | #include <asm/mach/time.h> |
48 | #include <asm/memory.h> | 47 | #include <asm/memory.h> |
49 | #include <asm/mach/map.h> | 48 | #include <asm/mach/map.h> |
50 | 49 | ||
51 | #include <mach/common.h> | 50 | #include "common.h" |
52 | #include <mach/iomux-mx3.h> | ||
53 | #include <mach/ulpi.h> | ||
54 | |||
55 | #include "devices-imx31.h" | 51 | #include "devices-imx31.h" |
56 | #include "crmregs-imx3.h" | 52 | #include "crmregs-imx3.h" |
53 | #include "hardware.h" | ||
54 | #include "iomux-mx3.h" | ||
55 | #include "ulpi.h" | ||
57 | 56 | ||
58 | static int armadillo5x0_pins[] = { | 57 | static int armadillo5x0_pins[] = { |
59 | /* UART1 */ | 58 | /* UART1 */ |
diff --git a/arch/arm/mach-imx/mach-bug.c b/arch/arm/mach-imx/mach-bug.c index 9a9897749dd6..3a39d5aec07a 100644 --- a/arch/arm/mach-imx/mach-bug.c +++ b/arch/arm/mach-imx/mach-bug.c | |||
@@ -19,15 +19,14 @@ | |||
19 | #include <linux/init.h> | 19 | #include <linux/init.h> |
20 | #include <linux/platform_device.h> | 20 | #include <linux/platform_device.h> |
21 | 21 | ||
22 | #include <mach/iomux-mx3.h> | ||
23 | #include <mach/hardware.h> | ||
24 | #include <mach/common.h> | ||
25 | |||
26 | #include <asm/mach/time.h> | 22 | #include <asm/mach/time.h> |
27 | #include <asm/mach/arch.h> | 23 | #include <asm/mach/arch.h> |
28 | #include <asm/mach-types.h> | 24 | #include <asm/mach-types.h> |
29 | 25 | ||
26 | #include "common.h" | ||
30 | #include "devices-imx31.h" | 27 | #include "devices-imx31.h" |
28 | #include "hardware.h" | ||
29 | #include "iomux-mx3.h" | ||
31 | 30 | ||
32 | static const struct imxuart_platform_data uart_pdata __initconst = { | 31 | static const struct imxuart_platform_data uart_pdata __initconst = { |
33 | .flags = IMXUART_HAVE_RTSCTS, | 32 | .flags = IMXUART_HAVE_RTSCTS, |
diff --git a/arch/arm/mach-imx/mach-cpuimx27.c b/arch/arm/mach-imx/mach-cpuimx27.c index 2bb9e18d9ee1..12a370646b45 100644 --- a/arch/arm/mach-imx/mach-cpuimx27.c +++ b/arch/arm/mach-imx/mach-cpuimx27.c | |||
@@ -34,13 +34,12 @@ | |||
34 | #include <asm/mach/time.h> | 34 | #include <asm/mach/time.h> |
35 | #include <asm/mach/map.h> | 35 | #include <asm/mach/map.h> |
36 | 36 | ||
37 | #include <mach/eukrea-baseboards.h> | 37 | #include "common.h" |
38 | #include <mach/common.h> | ||
39 | #include <mach/hardware.h> | ||
40 | #include <mach/iomux-mx27.h> | ||
41 | #include <mach/ulpi.h> | ||
42 | |||
43 | #include "devices-imx27.h" | 38 | #include "devices-imx27.h" |
39 | #include "eukrea-baseboards.h" | ||
40 | #include "hardware.h" | ||
41 | #include "iomux-mx27.h" | ||
42 | #include "ulpi.h" | ||
44 | 43 | ||
45 | static const int eukrea_cpuimx27_pins[] __initconst = { | 44 | static const int eukrea_cpuimx27_pins[] __initconst = { |
46 | /* UART1 */ | 45 | /* UART1 */ |
diff --git a/arch/arm/mach-imx/mach-cpuimx35.c b/arch/arm/mach-imx/mach-cpuimx35.c index d49b0ec6bdec..5a31bf8c8f4c 100644 --- a/arch/arm/mach-imx/mach-cpuimx35.c +++ b/arch/arm/mach-imx/mach-cpuimx35.c | |||
@@ -37,12 +37,11 @@ | |||
37 | #include <asm/mach/time.h> | 37 | #include <asm/mach/time.h> |
38 | #include <asm/mach/map.h> | 38 | #include <asm/mach/map.h> |
39 | 39 | ||
40 | #include <mach/eukrea-baseboards.h> | 40 | #include "common.h" |
41 | #include <mach/hardware.h> | ||
42 | #include <mach/common.h> | ||
43 | #include <mach/iomux-mx35.h> | ||
44 | |||
45 | #include "devices-imx35.h" | 41 | #include "devices-imx35.h" |
42 | #include "eukrea-baseboards.h" | ||
43 | #include "hardware.h" | ||
44 | #include "iomux-mx35.h" | ||
46 | 45 | ||
47 | static const struct imxuart_platform_data uart_pdata __initconst = { | 46 | static const struct imxuart_platform_data uart_pdata __initconst = { |
48 | .flags = IMXUART_HAVE_RTSCTS, | 47 | .flags = IMXUART_HAVE_RTSCTS, |
diff --git a/arch/arm/mach-imx/mach-cpuimx51sd.c b/arch/arm/mach-imx/mach-cpuimx51sd.c index b87cc49ab1e8..b727de029c8f 100644 --- a/arch/arm/mach-imx/mach-cpuimx51sd.c +++ b/arch/arm/mach-imx/mach-cpuimx51sd.c | |||
@@ -26,18 +26,17 @@ | |||
26 | #include <linux/spi/spi.h> | 26 | #include <linux/spi/spi.h> |
27 | #include <linux/can/platform/mcp251x.h> | 27 | #include <linux/can/platform/mcp251x.h> |
28 | 28 | ||
29 | #include <mach/eukrea-baseboards.h> | ||
30 | #include <mach/common.h> | ||
31 | #include <mach/hardware.h> | ||
32 | #include <mach/iomux-mx51.h> | ||
33 | |||
34 | #include <asm/setup.h> | 29 | #include <asm/setup.h> |
35 | #include <asm/mach-types.h> | 30 | #include <asm/mach-types.h> |
36 | #include <asm/mach/arch.h> | 31 | #include <asm/mach/arch.h> |
37 | #include <asm/mach/time.h> | 32 | #include <asm/mach/time.h> |
38 | 33 | ||
34 | #include "common.h" | ||
39 | #include "devices-imx51.h" | 35 | #include "devices-imx51.h" |
40 | #include "cpu_op-mx51.h" | 36 | #include "cpu_op-mx51.h" |
37 | #include "eukrea-baseboards.h" | ||
38 | #include "hardware.h" | ||
39 | #include "iomux-mx51.h" | ||
41 | 40 | ||
42 | #define USBH1_RST IMX_GPIO_NR(2, 28) | 41 | #define USBH1_RST IMX_GPIO_NR(2, 28) |
43 | #define ETH_RST IMX_GPIO_NR(2, 31) | 42 | #define ETH_RST IMX_GPIO_NR(2, 31) |
diff --git a/arch/arm/mach-imx/mach-eukrea_cpuimx25.c b/arch/arm/mach-imx/mach-eukrea_cpuimx25.c index 017bbb70ea41..75027a5ad8b7 100644 --- a/arch/arm/mach-imx/mach-eukrea_cpuimx25.c +++ b/arch/arm/mach-imx/mach-eukrea_cpuimx25.c | |||
@@ -27,18 +27,18 @@ | |||
27 | #include <linux/usb/otg.h> | 27 | #include <linux/usb/otg.h> |
28 | #include <linux/usb/ulpi.h> | 28 | #include <linux/usb/ulpi.h> |
29 | 29 | ||
30 | #include <mach/eukrea-baseboards.h> | ||
31 | #include <mach/hardware.h> | ||
32 | #include <asm/mach-types.h> | 30 | #include <asm/mach-types.h> |
33 | #include <asm/mach/arch.h> | 31 | #include <asm/mach/arch.h> |
34 | #include <asm/mach/time.h> | 32 | #include <asm/mach/time.h> |
35 | #include <asm/memory.h> | 33 | #include <asm/memory.h> |
36 | #include <asm/mach/map.h> | 34 | #include <asm/mach/map.h> |
37 | #include <mach/common.h> | ||
38 | #include <mach/mx25.h> | ||
39 | #include <mach/iomux-mx25.h> | ||
40 | 35 | ||
36 | #include "common.h" | ||
41 | #include "devices-imx25.h" | 37 | #include "devices-imx25.h" |
38 | #include "eukrea-baseboards.h" | ||
39 | #include "hardware.h" | ||
40 | #include "iomux-mx25.h" | ||
41 | #include "mx25.h" | ||
42 | 42 | ||
43 | static const struct imxuart_platform_data uart_pdata __initconst = { | 43 | static const struct imxuart_platform_data uart_pdata __initconst = { |
44 | .flags = IMXUART_HAVE_RTSCTS, | 44 | .flags = IMXUART_HAVE_RTSCTS, |
diff --git a/arch/arm/mach-imx/mach-imx27_visstrim_m10.c b/arch/arm/mach-imx/mach-imx27_visstrim_m10.c index 141756f00ae5..b74422679126 100644 --- a/arch/arm/mach-imx/mach-imx27_visstrim_m10.c +++ b/arch/arm/mach-imx/mach-imx27_visstrim_m10.c | |||
@@ -40,11 +40,11 @@ | |||
40 | #include <asm/mach/time.h> | 40 | #include <asm/mach/time.h> |
41 | #include <asm/system_info.h> | 41 | #include <asm/system_info.h> |
42 | #include <asm/memblock.h> | 42 | #include <asm/memblock.h> |
43 | #include <mach/common.h> | ||
44 | #include <mach/hardware.h> | ||
45 | #include <mach/iomux-mx27.h> | ||
46 | 43 | ||
44 | #include "common.h" | ||
47 | #include "devices-imx27.h" | 45 | #include "devices-imx27.h" |
46 | #include "hardware.h" | ||
47 | #include "iomux-mx27.h" | ||
48 | 48 | ||
49 | #define TVP5150_RSTN (GPIO_PORTC + 18) | 49 | #define TVP5150_RSTN (GPIO_PORTC + 18) |
50 | #define TVP5150_PWDN (GPIO_PORTC + 19) | 50 | #define TVP5150_PWDN (GPIO_PORTC + 19) |
diff --git a/arch/arm/mach-imx/mach-imx27ipcam.c b/arch/arm/mach-imx/mach-imx27ipcam.c index 7381387a8905..53a860112938 100644 --- a/arch/arm/mach-imx/mach-imx27ipcam.c +++ b/arch/arm/mach-imx/mach-imx27ipcam.c | |||
@@ -17,11 +17,11 @@ | |||
17 | #include <asm/mach-types.h> | 17 | #include <asm/mach-types.h> |
18 | #include <asm/mach/arch.h> | 18 | #include <asm/mach/arch.h> |
19 | #include <asm/mach/time.h> | 19 | #include <asm/mach/time.h> |
20 | #include <mach/hardware.h> | ||
21 | #include <mach/common.h> | ||
22 | #include <mach/iomux-mx27.h> | ||
23 | 20 | ||
21 | #include "hardware.h" | ||
22 | #include "common.h" | ||
24 | #include "devices-imx27.h" | 23 | #include "devices-imx27.h" |
24 | #include "iomux-mx27.h" | ||
25 | 25 | ||
26 | static const int mx27ipcam_pins[] __initconst = { | 26 | static const int mx27ipcam_pins[] __initconst = { |
27 | /* UART1 */ | 27 | /* UART1 */ |
diff --git a/arch/arm/mach-imx/mach-imx27lite.c b/arch/arm/mach-imx/mach-imx27lite.c index 1f45b9189229..fc8dce931378 100644 --- a/arch/arm/mach-imx/mach-imx27lite.c +++ b/arch/arm/mach-imx/mach-imx27lite.c | |||
@@ -20,11 +20,11 @@ | |||
20 | #include <asm/mach/arch.h> | 20 | #include <asm/mach/arch.h> |
21 | #include <asm/mach/time.h> | 21 | #include <asm/mach/time.h> |
22 | #include <asm/mach/map.h> | 22 | #include <asm/mach/map.h> |
23 | #include <mach/hardware.h> | ||
24 | #include <mach/common.h> | ||
25 | #include <mach/iomux-mx27.h> | ||
26 | 23 | ||
24 | #include "common.h" | ||
27 | #include "devices-imx27.h" | 25 | #include "devices-imx27.h" |
26 | #include "hardware.h" | ||
27 | #include "iomux-mx27.h" | ||
28 | 28 | ||
29 | static const int mx27lite_pins[] __initconst = { | 29 | static const int mx27lite_pins[] __initconst = { |
30 | /* UART1 */ | 30 | /* UART1 */ |
diff --git a/arch/arm/mach-imx/mach-imx53.c b/arch/arm/mach-imx/mach-imx53.c index 29711e95579f..e71e62610eba 100644 --- a/arch/arm/mach-imx/mach-imx53.c +++ b/arch/arm/mach-imx/mach-imx53.c | |||
@@ -19,8 +19,9 @@ | |||
19 | #include <linux/of_platform.h> | 19 | #include <linux/of_platform.h> |
20 | #include <asm/mach/arch.h> | 20 | #include <asm/mach/arch.h> |
21 | #include <asm/mach/time.h> | 21 | #include <asm/mach/time.h> |
22 | #include <mach/common.h> | 22 | |
23 | #include <mach/mx53.h> | 23 | #include "common.h" |
24 | #include "mx53.h" | ||
24 | 25 | ||
25 | /* | 26 | /* |
26 | * Lookup table for attaching a specific name and platform_data pointer to | 27 | * Lookup table for attaching a specific name and platform_data pointer to |
@@ -42,9 +43,9 @@ static const struct of_dev_auxdata imx53_auxdata_lookup[] __initconst = { | |||
42 | OF_DEV_AUXDATA("fsl,imx53-ecspi", MX53_ECSPI1_BASE_ADDR, "imx51-ecspi.0", NULL), | 43 | OF_DEV_AUXDATA("fsl,imx53-ecspi", MX53_ECSPI1_BASE_ADDR, "imx51-ecspi.0", NULL), |
43 | OF_DEV_AUXDATA("fsl,imx53-ecspi", MX53_ECSPI2_BASE_ADDR, "imx51-ecspi.1", NULL), | 44 | OF_DEV_AUXDATA("fsl,imx53-ecspi", MX53_ECSPI2_BASE_ADDR, "imx51-ecspi.1", NULL), |
44 | OF_DEV_AUXDATA("fsl,imx53-cspi", MX53_CSPI_BASE_ADDR, "imx35-cspi.0", NULL), | 45 | OF_DEV_AUXDATA("fsl,imx53-cspi", MX53_CSPI_BASE_ADDR, "imx35-cspi.0", NULL), |
45 | OF_DEV_AUXDATA("fsl,imx53-i2c", MX53_I2C1_BASE_ADDR, "imx-i2c.0", NULL), | 46 | OF_DEV_AUXDATA("fsl,imx53-i2c", MX53_I2C1_BASE_ADDR, "imx21-i2c.0", NULL), |
46 | OF_DEV_AUXDATA("fsl,imx53-i2c", MX53_I2C2_BASE_ADDR, "imx-i2c.1", NULL), | 47 | OF_DEV_AUXDATA("fsl,imx53-i2c", MX53_I2C2_BASE_ADDR, "imx21-i2c.1", NULL), |
47 | OF_DEV_AUXDATA("fsl,imx53-i2c", MX53_I2C3_BASE_ADDR, "imx-i2c.2", NULL), | 48 | OF_DEV_AUXDATA("fsl,imx53-i2c", MX53_I2C3_BASE_ADDR, "imx21-i2c.2", NULL), |
48 | OF_DEV_AUXDATA("fsl,imx53-sdma", MX53_SDMA_BASE_ADDR, "imx35-sdma", NULL), | 49 | OF_DEV_AUXDATA("fsl,imx53-sdma", MX53_SDMA_BASE_ADDR, "imx35-sdma", NULL), |
49 | OF_DEV_AUXDATA("fsl,imx53-wdt", MX53_WDOG1_BASE_ADDR, "imx2-wdt.0", NULL), | 50 | OF_DEV_AUXDATA("fsl,imx53-wdt", MX53_WDOG1_BASE_ADDR, "imx2-wdt.0", NULL), |
50 | { /* sentinel */ } | 51 | { /* sentinel */ } |
diff --git a/arch/arm/mach-imx/mach-imx6q.c b/arch/arm/mach-imx/mach-imx6q.c index 47c91f7185d2..978b6dd00de4 100644 --- a/arch/arm/mach-imx/mach-imx6q.c +++ b/arch/arm/mach-imx/mach-imx6q.c | |||
@@ -33,10 +33,10 @@ | |||
33 | #include <asm/mach/arch.h> | 33 | #include <asm/mach/arch.h> |
34 | #include <asm/mach/time.h> | 34 | #include <asm/mach/time.h> |
35 | #include <asm/system_misc.h> | 35 | #include <asm/system_misc.h> |
36 | #include <mach/common.h> | ||
37 | #include <mach/cpuidle.h> | ||
38 | #include <mach/hardware.h> | ||
39 | 36 | ||
37 | #include "common.h" | ||
38 | #include "cpuidle.h" | ||
39 | #include "hardware.h" | ||
40 | 40 | ||
41 | void imx6q_restart(char mode, const char *cmd) | 41 | void imx6q_restart(char mode, const char *cmd) |
42 | { | 42 | { |
diff --git a/arch/arm/mach-imx/mach-kzm_arm11_01.c b/arch/arm/mach-imx/mach-kzm_arm11_01.c index 0330078ff788..2e536ea53444 100644 --- a/arch/arm/mach-imx/mach-kzm_arm11_01.c +++ b/arch/arm/mach-imx/mach-kzm_arm11_01.c | |||
@@ -36,11 +36,10 @@ | |||
36 | #include <asm/mach/map.h> | 36 | #include <asm/mach/map.h> |
37 | #include <asm/mach/time.h> | 37 | #include <asm/mach/time.h> |
38 | 38 | ||
39 | #include <mach/common.h> | 39 | #include "common.h" |
40 | #include <mach/hardware.h> | ||
41 | #include <mach/iomux-mx3.h> | ||
42 | |||
43 | #include "devices-imx31.h" | 40 | #include "devices-imx31.h" |
41 | #include "hardware.h" | ||
42 | #include "iomux-mx3.h" | ||
44 | 43 | ||
45 | #define KZM_ARM11_IO_ADDRESS(x) (IOMEM( \ | 44 | #define KZM_ARM11_IO_ADDRESS(x) (IOMEM( \ |
46 | IMX_IO_P2V_MODULE(x, MX31_CS4) ?: \ | 45 | IMX_IO_P2V_MODULE(x, MX31_CS4) ?: \ |
diff --git a/arch/arm/mach-imx/mach-mx1ads.c b/arch/arm/mach-imx/mach-mx1ads.c index 667f359a2e8b..06b483783e68 100644 --- a/arch/arm/mach-imx/mach-mx1ads.c +++ b/arch/arm/mach-imx/mach-mx1ads.c | |||
@@ -23,11 +23,10 @@ | |||
23 | #include <asm/mach/arch.h> | 23 | #include <asm/mach/arch.h> |
24 | #include <asm/mach/time.h> | 24 | #include <asm/mach/time.h> |
25 | 25 | ||
26 | #include <mach/common.h> | 26 | #include "common.h" |
27 | #include <mach/hardware.h> | ||
28 | #include <mach/iomux-mx1.h> | ||
29 | |||
30 | #include "devices-imx1.h" | 27 | #include "devices-imx1.h" |
28 | #include "hardware.h" | ||
29 | #include "iomux-mx1.h" | ||
31 | 30 | ||
32 | static const int mx1ads_pins[] __initconst = { | 31 | static const int mx1ads_pins[] __initconst = { |
33 | /* UART1 */ | 32 | /* UART1 */ |
diff --git a/arch/arm/mach-imx/mach-mx21ads.c b/arch/arm/mach-imx/mach-mx21ads.c index ed22e3fe6ec8..6adb3136bb08 100644 --- a/arch/arm/mach-imx/mach-mx21ads.c +++ b/arch/arm/mach-imx/mach-mx21ads.c | |||
@@ -18,15 +18,15 @@ | |||
18 | #include <linux/mtd/mtd.h> | 18 | #include <linux/mtd/mtd.h> |
19 | #include <linux/mtd/physmap.h> | 19 | #include <linux/mtd/physmap.h> |
20 | #include <linux/gpio.h> | 20 | #include <linux/gpio.h> |
21 | #include <mach/common.h> | ||
22 | #include <mach/hardware.h> | ||
23 | #include <asm/mach-types.h> | 21 | #include <asm/mach-types.h> |
24 | #include <asm/mach/arch.h> | 22 | #include <asm/mach/arch.h> |
25 | #include <asm/mach/time.h> | 23 | #include <asm/mach/time.h> |
26 | #include <asm/mach/map.h> | 24 | #include <asm/mach/map.h> |
27 | #include <mach/iomux-mx21.h> | ||
28 | 25 | ||
26 | #include "common.h" | ||
29 | #include "devices-imx21.h" | 27 | #include "devices-imx21.h" |
28 | #include "hardware.h" | ||
29 | #include "iomux-mx21.h" | ||
30 | 30 | ||
31 | /* | 31 | /* |
32 | * Memory-mapped I/O on MX21ADS base board | 32 | * Memory-mapped I/O on MX21ADS base board |
diff --git a/arch/arm/mach-imx/mach-mx25_3ds.c b/arch/arm/mach-imx/mach-mx25_3ds.c index ce247fd1269a..b1b03aa55bb8 100644 --- a/arch/arm/mach-imx/mach-mx25_3ds.c +++ b/arch/arm/mach-imx/mach-mx25_3ds.c | |||
@@ -31,17 +31,17 @@ | |||
31 | #include <linux/platform_device.h> | 31 | #include <linux/platform_device.h> |
32 | #include <linux/usb/otg.h> | 32 | #include <linux/usb/otg.h> |
33 | 33 | ||
34 | #include <mach/hardware.h> | ||
35 | #include <asm/mach-types.h> | 34 | #include <asm/mach-types.h> |
36 | #include <asm/mach/arch.h> | 35 | #include <asm/mach/arch.h> |
37 | #include <asm/mach/time.h> | 36 | #include <asm/mach/time.h> |
38 | #include <asm/memory.h> | 37 | #include <asm/memory.h> |
39 | #include <asm/mach/map.h> | 38 | #include <asm/mach/map.h> |
40 | #include <mach/common.h> | ||
41 | #include <mach/mx25.h> | ||
42 | #include <mach/iomux-mx25.h> | ||
43 | 39 | ||
40 | #include "common.h" | ||
44 | #include "devices-imx25.h" | 41 | #include "devices-imx25.h" |
42 | #include "hardware.h" | ||
43 | #include "iomux-mx25.h" | ||
44 | #include "mx25.h" | ||
45 | 45 | ||
46 | #define MX25PDK_CAN_PWDN IMX_GPIO_NR(4, 6) | 46 | #define MX25PDK_CAN_PWDN IMX_GPIO_NR(4, 6) |
47 | 47 | ||
diff --git a/arch/arm/mach-imx/mach-mx27_3ds.c b/arch/arm/mach-imx/mach-mx27_3ds.c index 05996f39005c..d0e547fa925f 100644 --- a/arch/arm/mach-imx/mach-mx27_3ds.c +++ b/arch/arm/mach-imx/mach-mx27_3ds.c | |||
@@ -36,13 +36,13 @@ | |||
36 | #include <asm/mach-types.h> | 36 | #include <asm/mach-types.h> |
37 | #include <asm/mach/arch.h> | 37 | #include <asm/mach/arch.h> |
38 | #include <asm/mach/time.h> | 38 | #include <asm/mach/time.h> |
39 | #include <mach/hardware.h> | ||
40 | #include <mach/common.h> | ||
41 | #include <mach/iomux-mx27.h> | ||
42 | #include <mach/ulpi.h> | ||
43 | #include <mach/3ds_debugboard.h> | ||
44 | 39 | ||
40 | #include "3ds_debugboard.h" | ||
41 | #include "common.h" | ||
45 | #include "devices-imx27.h" | 42 | #include "devices-imx27.h" |
43 | #include "hardware.h" | ||
44 | #include "iomux-mx27.h" | ||
45 | #include "ulpi.h" | ||
46 | 46 | ||
47 | #define SD1_EN_GPIO IMX_GPIO_NR(2, 25) | 47 | #define SD1_EN_GPIO IMX_GPIO_NR(2, 25) |
48 | #define OTG_PHY_RESET_GPIO IMX_GPIO_NR(2, 23) | 48 | #define OTG_PHY_RESET_GPIO IMX_GPIO_NR(2, 23) |
diff --git a/arch/arm/mach-imx/mach-mx27ads.c b/arch/arm/mach-imx/mach-mx27ads.c index 7dc59bac0e55..3d036f57f0e6 100644 --- a/arch/arm/mach-imx/mach-mx27ads.c +++ b/arch/arm/mach-imx/mach-mx27ads.c | |||
@@ -21,15 +21,15 @@ | |||
21 | #include <linux/mtd/physmap.h> | 21 | #include <linux/mtd/physmap.h> |
22 | #include <linux/i2c.h> | 22 | #include <linux/i2c.h> |
23 | #include <linux/irq.h> | 23 | #include <linux/irq.h> |
24 | #include <mach/common.h> | ||
25 | #include <mach/hardware.h> | ||
26 | #include <asm/mach-types.h> | 24 | #include <asm/mach-types.h> |
27 | #include <asm/mach/arch.h> | 25 | #include <asm/mach/arch.h> |
28 | #include <asm/mach/time.h> | 26 | #include <asm/mach/time.h> |
29 | #include <asm/mach/map.h> | 27 | #include <asm/mach/map.h> |
30 | #include <mach/iomux-mx27.h> | ||
31 | 28 | ||
29 | #include "common.h" | ||
32 | #include "devices-imx27.h" | 30 | #include "devices-imx27.h" |
31 | #include "hardware.h" | ||
32 | #include "iomux-mx27.h" | ||
33 | 33 | ||
34 | /* | 34 | /* |
35 | * Base address of PBC controller, CS4 | 35 | * Base address of PBC controller, CS4 |
diff --git a/arch/arm/mach-imx/mach-mx31_3ds.c b/arch/arm/mach-imx/mach-mx31_3ds.c index 8915f937b7d5..bc301befdd06 100644 --- a/arch/arm/mach-imx/mach-mx31_3ds.c +++ b/arch/arm/mach-imx/mach-mx31_3ds.c | |||
@@ -30,19 +30,19 @@ | |||
30 | 30 | ||
31 | #include <media/soc_camera.h> | 31 | #include <media/soc_camera.h> |
32 | 32 | ||
33 | #include <mach/hardware.h> | ||
34 | #include <asm/mach-types.h> | 33 | #include <asm/mach-types.h> |
35 | #include <asm/mach/arch.h> | 34 | #include <asm/mach/arch.h> |
36 | #include <asm/mach/time.h> | 35 | #include <asm/mach/time.h> |
37 | #include <asm/memory.h> | 36 | #include <asm/memory.h> |
38 | #include <asm/mach/map.h> | 37 | #include <asm/mach/map.h> |
39 | #include <asm/memblock.h> | 38 | #include <asm/memblock.h> |
40 | #include <mach/common.h> | ||
41 | #include <mach/iomux-mx3.h> | ||
42 | #include <mach/3ds_debugboard.h> | ||
43 | #include <mach/ulpi.h> | ||
44 | 39 | ||
40 | #include "3ds_debugboard.h" | ||
41 | #include "common.h" | ||
45 | #include "devices-imx31.h" | 42 | #include "devices-imx31.h" |
43 | #include "hardware.h" | ||
44 | #include "iomux-mx3.h" | ||
45 | #include "ulpi.h" | ||
46 | 46 | ||
47 | static int mx31_3ds_pins[] = { | 47 | static int mx31_3ds_pins[] = { |
48 | /* UART1 */ | 48 | /* UART1 */ |
@@ -393,7 +393,7 @@ static struct regulator_init_data gpo_init = { | |||
393 | }; | 393 | }; |
394 | 394 | ||
395 | static struct regulator_consumer_supply vmmc2_consumers[] = { | 395 | static struct regulator_consumer_supply vmmc2_consumers[] = { |
396 | REGULATOR_SUPPLY("vmmc", "mxc-mmc.0"), | 396 | REGULATOR_SUPPLY("vmmc", "imx31-mmc.0"), |
397 | }; | 397 | }; |
398 | 398 | ||
399 | static struct regulator_init_data vmmc2_init = { | 399 | static struct regulator_init_data vmmc2_init = { |
diff --git a/arch/arm/mach-imx/mach-mx31ads.c b/arch/arm/mach-imx/mach-mx31ads.c index e774b07f48d3..8b56f8883f32 100644 --- a/arch/arm/mach-imx/mach-mx31ads.c +++ b/arch/arm/mach-imx/mach-mx31ads.c | |||
@@ -28,8 +28,6 @@ | |||
28 | #include <asm/mach/time.h> | 28 | #include <asm/mach/time.h> |
29 | #include <asm/memory.h> | 29 | #include <asm/memory.h> |
30 | #include <asm/mach/map.h> | 30 | #include <asm/mach/map.h> |
31 | #include <mach/common.h> | ||
32 | #include <mach/iomux-mx3.h> | ||
33 | 31 | ||
34 | #ifdef CONFIG_MACH_MX31ADS_WM1133_EV1 | 32 | #ifdef CONFIG_MACH_MX31ADS_WM1133_EV1 |
35 | #include <linux/mfd/wm8350/audio.h> | 33 | #include <linux/mfd/wm8350/audio.h> |
@@ -37,7 +35,10 @@ | |||
37 | #include <linux/mfd/wm8350/pmic.h> | 35 | #include <linux/mfd/wm8350/pmic.h> |
38 | #endif | 36 | #endif |
39 | 37 | ||
38 | #include "common.h" | ||
40 | #include "devices-imx31.h" | 39 | #include "devices-imx31.h" |
40 | #include "hardware.h" | ||
41 | #include "iomux-mx3.h" | ||
41 | 42 | ||
42 | /* Base address of PBC controller */ | 43 | /* Base address of PBC controller */ |
43 | #define PBC_BASE_ADDRESS MX31_CS4_BASE_ADDR_VIRT | 44 | #define PBC_BASE_ADDRESS MX31_CS4_BASE_ADDR_VIRT |
diff --git a/arch/arm/mach-imx/mach-mx31lilly.c b/arch/arm/mach-imx/mach-mx31lilly.c index 34b9bf075daf..08b9965c8b36 100644 --- a/arch/arm/mach-imx/mach-mx31lilly.c +++ b/arch/arm/mach-imx/mach-mx31lilly.c | |||
@@ -42,13 +42,12 @@ | |||
42 | #include <asm/mach/time.h> | 42 | #include <asm/mach/time.h> |
43 | #include <asm/mach/map.h> | 43 | #include <asm/mach/map.h> |
44 | 44 | ||
45 | #include <mach/hardware.h> | 45 | #include "board-mx31lilly.h" |
46 | #include <mach/common.h> | 46 | #include "common.h" |
47 | #include <mach/iomux-mx3.h> | ||
48 | #include <mach/board-mx31lilly.h> | ||
49 | #include <mach/ulpi.h> | ||
50 | |||
51 | #include "devices-imx31.h" | 47 | #include "devices-imx31.h" |
48 | #include "hardware.h" | ||
49 | #include "iomux-mx3.h" | ||
50 | #include "ulpi.h" | ||
52 | 51 | ||
53 | /* | 52 | /* |
54 | * This file contains module-specific initialization routines for LILLY-1131. | 53 | * This file contains module-specific initialization routines for LILLY-1131. |
diff --git a/arch/arm/mach-imx/mach-mx31lite.c b/arch/arm/mach-imx/mach-mx31lite.c index ef57cff5abfb..bdcd92e59518 100644 --- a/arch/arm/mach-imx/mach-mx31lite.c +++ b/arch/arm/mach-imx/mach-mx31lite.c | |||
@@ -39,13 +39,12 @@ | |||
39 | #include <asm/page.h> | 39 | #include <asm/page.h> |
40 | #include <asm/setup.h> | 40 | #include <asm/setup.h> |
41 | 41 | ||
42 | #include <mach/hardware.h> | 42 | #include "board-mx31lite.h" |
43 | #include <mach/common.h> | 43 | #include "common.h" |
44 | #include <mach/board-mx31lite.h> | ||
45 | #include <mach/iomux-mx3.h> | ||
46 | #include <mach/ulpi.h> | ||
47 | |||
48 | #include "devices-imx31.h" | 44 | #include "devices-imx31.h" |
45 | #include "hardware.h" | ||
46 | #include "iomux-mx3.h" | ||
47 | #include "ulpi.h" | ||
49 | 48 | ||
50 | /* | 49 | /* |
51 | * This file contains the module-specific initialization routines. | 50 | * This file contains the module-specific initialization routines. |
diff --git a/arch/arm/mach-imx/mach-mx31moboard.c b/arch/arm/mach-imx/mach-mx31moboard.c index 459e754ef8c9..2517cfa9f26b 100644 --- a/arch/arm/mach-imx/mach-mx31moboard.c +++ b/arch/arm/mach-imx/mach-mx31moboard.c | |||
@@ -42,14 +42,14 @@ | |||
42 | #include <asm/mach/time.h> | 42 | #include <asm/mach/time.h> |
43 | #include <asm/mach/map.h> | 43 | #include <asm/mach/map.h> |
44 | #include <asm/memblock.h> | 44 | #include <asm/memblock.h> |
45 | #include <mach/board-mx31moboard.h> | ||
46 | #include <mach/common.h> | ||
47 | #include <mach/hardware.h> | ||
48 | #include <mach/iomux-mx3.h> | ||
49 | #include <mach/ulpi.h> | ||
50 | #include <linux/platform_data/asoc-imx-ssi.h> | 45 | #include <linux/platform_data/asoc-imx-ssi.h> |
51 | 46 | ||
47 | #include "board-mx31moboard.h" | ||
48 | #include "common.h" | ||
52 | #include "devices-imx31.h" | 49 | #include "devices-imx31.h" |
50 | #include "hardware.h" | ||
51 | #include "iomux-mx3.h" | ||
52 | #include "ulpi.h" | ||
53 | 53 | ||
54 | static unsigned int moboard_pins[] = { | 54 | static unsigned int moboard_pins[] = { |
55 | /* UART0 */ | 55 | /* UART0 */ |
@@ -175,11 +175,11 @@ static const struct spi_imx_master moboard_spi1_pdata __initconst = { | |||
175 | 175 | ||
176 | static struct regulator_consumer_supply sdhc_consumers[] = { | 176 | static struct regulator_consumer_supply sdhc_consumers[] = { |
177 | { | 177 | { |
178 | .dev_name = "mxc-mmc.0", | 178 | .dev_name = "imx31-mmc.0", |
179 | .supply = "sdhc0_vcc", | 179 | .supply = "sdhc0_vcc", |
180 | }, | 180 | }, |
181 | { | 181 | { |
182 | .dev_name = "mxc-mmc.1", | 182 | .dev_name = "imx31-mmc.1", |
183 | .supply = "sdhc1_vcc", | 183 | .supply = "sdhc1_vcc", |
184 | }, | 184 | }, |
185 | }; | 185 | }; |
diff --git a/arch/arm/mach-imx/mach-mx35_3ds.c b/arch/arm/mach-imx/mach-mx35_3ds.c index 504983c68aa8..5277da45d60c 100644 --- a/arch/arm/mach-imx/mach-mx35_3ds.c +++ b/arch/arm/mach-imx/mach-mx35_3ds.c | |||
@@ -43,15 +43,15 @@ | |||
43 | #include <asm/mach/map.h> | 43 | #include <asm/mach/map.h> |
44 | #include <asm/memblock.h> | 44 | #include <asm/memblock.h> |
45 | 45 | ||
46 | #include <mach/hardware.h> | ||
47 | #include <mach/common.h> | ||
48 | #include <mach/iomux-mx35.h> | ||
49 | #include <mach/3ds_debugboard.h> | ||
50 | #include <video/platform_lcd.h> | 46 | #include <video/platform_lcd.h> |
51 | 47 | ||
52 | #include <media/soc_camera.h> | 48 | #include <media/soc_camera.h> |
53 | 49 | ||
50 | #include "3ds_debugboard.h" | ||
51 | #include "common.h" | ||
54 | #include "devices-imx35.h" | 52 | #include "devices-imx35.h" |
53 | #include "hardware.h" | ||
54 | #include "iomux-mx35.h" | ||
55 | 55 | ||
56 | #define GPIO_MC9S08DZ60_GPS_ENABLE 0 | 56 | #define GPIO_MC9S08DZ60_GPS_ENABLE 0 |
57 | #define GPIO_MC9S08DZ60_HDD_ENABLE 4 | 57 | #define GPIO_MC9S08DZ60_HDD_ENABLE 4 |
diff --git a/arch/arm/mach-imx/mach-mx50_rdp.c b/arch/arm/mach-imx/mach-mx50_rdp.c index 42b66e8d9615..0c1f88a80bdc 100644 --- a/arch/arm/mach-imx/mach-mx50_rdp.c +++ b/arch/arm/mach-imx/mach-mx50_rdp.c | |||
@@ -24,17 +24,16 @@ | |||
24 | #include <linux/delay.h> | 24 | #include <linux/delay.h> |
25 | #include <linux/io.h> | 25 | #include <linux/io.h> |
26 | 26 | ||
27 | #include <mach/common.h> | ||
28 | #include <mach/hardware.h> | ||
29 | #include <mach/iomux-mx50.h> | ||
30 | |||
31 | #include <asm/irq.h> | 27 | #include <asm/irq.h> |
32 | #include <asm/setup.h> | 28 | #include <asm/setup.h> |
33 | #include <asm/mach-types.h> | 29 | #include <asm/mach-types.h> |
34 | #include <asm/mach/arch.h> | 30 | #include <asm/mach/arch.h> |
35 | #include <asm/mach/time.h> | 31 | #include <asm/mach/time.h> |
36 | 32 | ||
33 | #include "common.h" | ||
37 | #include "devices-imx50.h" | 34 | #include "devices-imx50.h" |
35 | #include "hardware.h" | ||
36 | #include "iomux-mx50.h" | ||
38 | 37 | ||
39 | #define FEC_EN IMX_GPIO_NR(6, 23) | 38 | #define FEC_EN IMX_GPIO_NR(6, 23) |
40 | #define FEC_RESET_B IMX_GPIO_NR(4, 12) | 39 | #define FEC_RESET_B IMX_GPIO_NR(4, 12) |
diff --git a/arch/arm/mach-imx/mach-mx51_3ds.c b/arch/arm/mach-imx/mach-mx51_3ds.c index 9ee84a4af639..abc25bd1107b 100644 --- a/arch/arm/mach-imx/mach-mx51_3ds.c +++ b/arch/arm/mach-imx/mach-mx51_3ds.c | |||
@@ -19,12 +19,11 @@ | |||
19 | #include <asm/mach/arch.h> | 19 | #include <asm/mach/arch.h> |
20 | #include <asm/mach/time.h> | 20 | #include <asm/mach/time.h> |
21 | 21 | ||
22 | #include <mach/hardware.h> | 22 | #include "3ds_debugboard.h" |
23 | #include <mach/common.h> | 23 | #include "common.h" |
24 | #include <mach/iomux-mx51.h> | ||
25 | #include <mach/3ds_debugboard.h> | ||
26 | |||
27 | #include "devices-imx51.h" | 24 | #include "devices-imx51.h" |
25 | #include "hardware.h" | ||
26 | #include "iomux-mx51.h" | ||
28 | 27 | ||
29 | #define MX51_3DS_ECSPI2_CS (GPIO_PORTC + 28) | 28 | #define MX51_3DS_ECSPI2_CS (GPIO_PORTC + 28) |
30 | 29 | ||
diff --git a/arch/arm/mach-imx/mach-mx51_babbage.c b/arch/arm/mach-imx/mach-mx51_babbage.c index 7b31cbde8775..d9a84ca2199a 100644 --- a/arch/arm/mach-imx/mach-mx51_babbage.c +++ b/arch/arm/mach-imx/mach-mx51_babbage.c | |||
@@ -20,17 +20,16 @@ | |||
20 | #include <linux/spi/flash.h> | 20 | #include <linux/spi/flash.h> |
21 | #include <linux/spi/spi.h> | 21 | #include <linux/spi/spi.h> |
22 | 22 | ||
23 | #include <mach/common.h> | ||
24 | #include <mach/hardware.h> | ||
25 | #include <mach/iomux-mx51.h> | ||
26 | |||
27 | #include <asm/setup.h> | 23 | #include <asm/setup.h> |
28 | #include <asm/mach-types.h> | 24 | #include <asm/mach-types.h> |
29 | #include <asm/mach/arch.h> | 25 | #include <asm/mach/arch.h> |
30 | #include <asm/mach/time.h> | 26 | #include <asm/mach/time.h> |
31 | 27 | ||
28 | #include "common.h" | ||
32 | #include "devices-imx51.h" | 29 | #include "devices-imx51.h" |
33 | #include "cpu_op-mx51.h" | 30 | #include "cpu_op-mx51.h" |
31 | #include "hardware.h" | ||
32 | #include "iomux-mx51.h" | ||
34 | 33 | ||
35 | #define BABBAGE_USB_HUB_RESET IMX_GPIO_NR(1, 7) | 34 | #define BABBAGE_USB_HUB_RESET IMX_GPIO_NR(1, 7) |
36 | #define BABBAGE_USBH1_STP IMX_GPIO_NR(1, 27) | 35 | #define BABBAGE_USBH1_STP IMX_GPIO_NR(1, 27) |
diff --git a/arch/arm/mach-imx/mach-mxt_td60.c b/arch/arm/mach-imx/mach-mxt_td60.c index 0bf6d30aa32d..f4a8c7e108e1 100644 --- a/arch/arm/mach-imx/mach-mxt_td60.c +++ b/arch/arm/mach-imx/mach-mxt_td60.c | |||
@@ -21,17 +21,17 @@ | |||
21 | #include <linux/mtd/physmap.h> | 21 | #include <linux/mtd/physmap.h> |
22 | #include <linux/i2c.h> | 22 | #include <linux/i2c.h> |
23 | #include <linux/irq.h> | 23 | #include <linux/irq.h> |
24 | #include <mach/common.h> | ||
25 | #include <mach/hardware.h> | ||
26 | #include <asm/mach-types.h> | 24 | #include <asm/mach-types.h> |
27 | #include <asm/mach/arch.h> | 25 | #include <asm/mach/arch.h> |
28 | #include <asm/mach/time.h> | 26 | #include <asm/mach/time.h> |
29 | #include <asm/mach/map.h> | 27 | #include <asm/mach/map.h> |
30 | #include <linux/gpio.h> | 28 | #include <linux/gpio.h> |
31 | #include <mach/iomux-mx27.h> | ||
32 | #include <linux/i2c/pca953x.h> | 29 | #include <linux/i2c/pca953x.h> |
33 | 30 | ||
31 | #include "common.h" | ||
34 | #include "devices-imx27.h" | 32 | #include "devices-imx27.h" |
33 | #include "hardware.h" | ||
34 | #include "iomux-mx27.h" | ||
35 | 35 | ||
36 | static const int mxt_td60_pins[] __initconst = { | 36 | static const int mxt_td60_pins[] __initconst = { |
37 | /* UART0 */ | 37 | /* UART0 */ |
diff --git a/arch/arm/mach-imx/mach-pca100.c b/arch/arm/mach-imx/mach-pca100.c index de8516b7d69f..eee369fa94a2 100644 --- a/arch/arm/mach-imx/mach-pca100.c +++ b/arch/arm/mach-imx/mach-pca100.c | |||
@@ -32,13 +32,13 @@ | |||
32 | 32 | ||
33 | #include <asm/mach/arch.h> | 33 | #include <asm/mach/arch.h> |
34 | #include <asm/mach-types.h> | 34 | #include <asm/mach-types.h> |
35 | #include <mach/common.h> | ||
36 | #include <mach/hardware.h> | ||
37 | #include <mach/iomux-mx27.h> | ||
38 | #include <asm/mach/time.h> | 35 | #include <asm/mach/time.h> |
39 | #include <mach/ulpi.h> | ||
40 | 36 | ||
37 | #include "common.h" | ||
41 | #include "devices-imx27.h" | 38 | #include "devices-imx27.h" |
39 | #include "hardware.h" | ||
40 | #include "iomux-mx27.h" | ||
41 | #include "ulpi.h" | ||
42 | 42 | ||
43 | #define OTG_PHY_CS_GPIO (GPIO_PORTB + 23) | 43 | #define OTG_PHY_CS_GPIO (GPIO_PORTB + 23) |
44 | #define USBH2_PHY_CS_GPIO (GPIO_PORTB + 24) | 44 | #define USBH2_PHY_CS_GPIO (GPIO_PORTB + 24) |
diff --git a/arch/arm/mach-imx/mach-pcm037.c b/arch/arm/mach-imx/mach-pcm037.c index e3c45130fb3c..547fef133f65 100644 --- a/arch/arm/mach-imx/mach-pcm037.c +++ b/arch/arm/mach-imx/mach-pcm037.c | |||
@@ -42,13 +42,13 @@ | |||
42 | #include <asm/mach/time.h> | 42 | #include <asm/mach/time.h> |
43 | #include <asm/mach/map.h> | 43 | #include <asm/mach/map.h> |
44 | #include <asm/memblock.h> | 44 | #include <asm/memblock.h> |
45 | #include <mach/common.h> | ||
46 | #include <mach/hardware.h> | ||
47 | #include <mach/iomux-mx3.h> | ||
48 | #include <mach/ulpi.h> | ||
49 | 45 | ||
46 | #include "common.h" | ||
50 | #include "devices-imx31.h" | 47 | #include "devices-imx31.h" |
48 | #include "hardware.h" | ||
49 | #include "iomux-mx3.h" | ||
51 | #include "pcm037.h" | 50 | #include "pcm037.h" |
51 | #include "ulpi.h" | ||
52 | 52 | ||
53 | static enum pcm037_board_variant pcm037_instance = PCM037_PCM970; | 53 | static enum pcm037_board_variant pcm037_instance = PCM037_PCM970; |
54 | 54 | ||
diff --git a/arch/arm/mach-imx/mach-pcm037_eet.c b/arch/arm/mach-imx/mach-pcm037_eet.c index 11ffa81ad17d..8fd8255068ee 100644 --- a/arch/arm/mach-imx/mach-pcm037_eet.c +++ b/arch/arm/mach-imx/mach-pcm037_eet.c | |||
@@ -11,13 +11,12 @@ | |||
11 | #include <linux/platform_device.h> | 11 | #include <linux/platform_device.h> |
12 | #include <linux/spi/spi.h> | 12 | #include <linux/spi/spi.h> |
13 | 13 | ||
14 | #include <mach/common.h> | ||
15 | #include <mach/iomux-mx3.h> | ||
16 | |||
17 | #include <asm/mach-types.h> | 14 | #include <asm/mach-types.h> |
18 | 15 | ||
19 | #include "pcm037.h" | 16 | #include "pcm037.h" |
17 | #include "common.h" | ||
20 | #include "devices-imx31.h" | 18 | #include "devices-imx31.h" |
19 | #include "iomux-mx3.h" | ||
21 | 20 | ||
22 | static unsigned int pcm037_eet_pins[] = { | 21 | static unsigned int pcm037_eet_pins[] = { |
23 | /* Reserve and hardwire GPIO 57 high - S6E63D6 chipselect */ | 22 | /* Reserve and hardwire GPIO 57 high - S6E63D6 chipselect */ |
diff --git a/arch/arm/mach-imx/mach-pcm038.c b/arch/arm/mach-imx/mach-pcm038.c index 95f49d936fd3..4aa0d0798605 100644 --- a/arch/arm/mach-imx/mach-pcm038.c +++ b/arch/arm/mach-imx/mach-pcm038.c | |||
@@ -33,13 +33,12 @@ | |||
33 | #include <asm/mach/arch.h> | 33 | #include <asm/mach/arch.h> |
34 | #include <asm/mach/time.h> | 34 | #include <asm/mach/time.h> |
35 | 35 | ||
36 | #include <mach/board-pcm038.h> | 36 | #include "board-pcm038.h" |
37 | #include <mach/common.h> | 37 | #include "common.h" |
38 | #include <mach/hardware.h> | ||
39 | #include <mach/iomux-mx27.h> | ||
40 | #include <mach/ulpi.h> | ||
41 | |||
42 | #include "devices-imx27.h" | 38 | #include "devices-imx27.h" |
39 | #include "hardware.h" | ||
40 | #include "iomux-mx27.h" | ||
41 | #include "ulpi.h" | ||
43 | 42 | ||
44 | static const int pcm038_pins[] __initconst = { | 43 | static const int pcm038_pins[] __initconst = { |
45 | /* UART1 */ | 44 | /* UART1 */ |
@@ -212,7 +211,7 @@ static const struct spi_imx_master pcm038_spi0_data __initconst = { | |||
212 | 211 | ||
213 | static struct regulator_consumer_supply sdhc1_consumers[] = { | 212 | static struct regulator_consumer_supply sdhc1_consumers[] = { |
214 | { | 213 | { |
215 | .dev_name = "mxc-mmc.1", | 214 | .dev_name = "imx21-mmc.1", |
216 | .supply = "sdhc_vcc", | 215 | .supply = "sdhc_vcc", |
217 | }, | 216 | }, |
218 | }; | 217 | }; |
diff --git a/arch/arm/mach-imx/mach-pcm043.c b/arch/arm/mach-imx/mach-pcm043.c index e4bd4387e344..92445440221e 100644 --- a/arch/arm/mach-imx/mach-pcm043.c +++ b/arch/arm/mach-imx/mach-pcm043.c | |||
@@ -33,12 +33,11 @@ | |||
33 | #include <asm/mach/time.h> | 33 | #include <asm/mach/time.h> |
34 | #include <asm/mach/map.h> | 34 | #include <asm/mach/map.h> |
35 | 35 | ||
36 | #include <mach/hardware.h> | 36 | #include "common.h" |
37 | #include <mach/common.h> | ||
38 | #include <mach/iomux-mx35.h> | ||
39 | #include <mach/ulpi.h> | ||
40 | |||
41 | #include "devices-imx35.h" | 37 | #include "devices-imx35.h" |
38 | #include "hardware.h" | ||
39 | #include "iomux-mx35.h" | ||
40 | #include "ulpi.h" | ||
42 | 41 | ||
43 | static const struct fb_videomode fb_modedb[] = { | 42 | static const struct fb_videomode fb_modedb[] = { |
44 | { | 43 | { |
diff --git a/arch/arm/mach-imx/mach-qong.c b/arch/arm/mach-imx/mach-qong.c index fb25fbd31226..96d9a91f8a3b 100644 --- a/arch/arm/mach-imx/mach-qong.c +++ b/arch/arm/mach-imx/mach-qong.c | |||
@@ -21,17 +21,17 @@ | |||
21 | #include <linux/mtd/nand.h> | 21 | #include <linux/mtd/nand.h> |
22 | #include <linux/gpio.h> | 22 | #include <linux/gpio.h> |
23 | 23 | ||
24 | #include <mach/hardware.h> | ||
25 | #include <asm/mach-types.h> | 24 | #include <asm/mach-types.h> |
26 | #include <asm/mach/arch.h> | 25 | #include <asm/mach/arch.h> |
27 | #include <asm/mach/time.h> | 26 | #include <asm/mach/time.h> |
28 | #include <asm/mach/map.h> | 27 | #include <asm/mach/map.h> |
29 | #include <mach/common.h> | ||
30 | #include <asm/page.h> | 28 | #include <asm/page.h> |
31 | #include <asm/setup.h> | 29 | #include <asm/setup.h> |
32 | #include <mach/iomux-mx3.h> | ||
33 | 30 | ||
31 | #include "common.h" | ||
34 | #include "devices-imx31.h" | 32 | #include "devices-imx31.h" |
33 | #include "hardware.h" | ||
34 | #include "iomux-mx3.h" | ||
35 | 35 | ||
36 | /* FPGA defines */ | 36 | /* FPGA defines */ |
37 | #define QONG_FPGA_VERSION(major, minor, rev) \ | 37 | #define QONG_FPGA_VERSION(major, minor, rev) \ |
diff --git a/arch/arm/mach-imx/mach-scb9328.c b/arch/arm/mach-imx/mach-scb9328.c index 67ff38e9a3ca..fc970409dbaf 100644 --- a/arch/arm/mach-imx/mach-scb9328.c +++ b/arch/arm/mach-imx/mach-scb9328.c | |||
@@ -20,11 +20,10 @@ | |||
20 | #include <asm/mach/arch.h> | 20 | #include <asm/mach/arch.h> |
21 | #include <asm/mach/time.h> | 21 | #include <asm/mach/time.h> |
22 | 22 | ||
23 | #include <mach/common.h> | 23 | #include "common.h" |
24 | #include <mach/hardware.h> | ||
25 | #include <mach/iomux-mx1.h> | ||
26 | |||
27 | #include "devices-imx1.h" | 24 | #include "devices-imx1.h" |
25 | #include "hardware.h" | ||
26 | #include "iomux-mx1.h" | ||
28 | 27 | ||
29 | /* | 28 | /* |
30 | * This scb9328 has a 32MiB flash | 29 | * This scb9328 has a 32MiB flash |
diff --git a/arch/arm/mach-imx/mach-vpr200.c b/arch/arm/mach-imx/mach-vpr200.c index 39eb7960e2a4..3aecf91e4289 100644 --- a/arch/arm/mach-imx/mach-vpr200.c +++ b/arch/arm/mach-imx/mach-vpr200.c | |||
@@ -28,15 +28,14 @@ | |||
28 | #include <asm/mach/arch.h> | 28 | #include <asm/mach/arch.h> |
29 | #include <asm/mach/time.h> | 29 | #include <asm/mach/time.h> |
30 | 30 | ||
31 | #include <mach/hardware.h> | ||
32 | #include <mach/common.h> | ||
33 | #include <mach/iomux-mx35.h> | ||
34 | |||
35 | #include <linux/i2c.h> | 31 | #include <linux/i2c.h> |
36 | #include <linux/i2c/at24.h> | 32 | #include <linux/i2c/at24.h> |
37 | #include <linux/mfd/mc13xxx.h> | 33 | #include <linux/mfd/mc13xxx.h> |
38 | 34 | ||
35 | #include "common.h" | ||
39 | #include "devices-imx35.h" | 36 | #include "devices-imx35.h" |
37 | #include "hardware.h" | ||
38 | #include "iomux-mx35.h" | ||
40 | 39 | ||
41 | #define GPIO_LCDPWR IMX_GPIO_NR(1, 2) | 40 | #define GPIO_LCDPWR IMX_GPIO_NR(1, 2) |
42 | #define GPIO_PMIC_INT IMX_GPIO_NR(2, 0) | 41 | #define GPIO_PMIC_INT IMX_GPIO_NR(2, 0) |
diff --git a/arch/arm/mach-imx/mm-imx1.c b/arch/arm/mach-imx/mm-imx1.c index 6d60d51868bc..7a146671e65a 100644 --- a/arch/arm/mach-imx/mm-imx1.c +++ b/arch/arm/mach-imx/mm-imx1.c | |||
@@ -22,9 +22,10 @@ | |||
22 | 22 | ||
23 | #include <asm/mach/map.h> | 23 | #include <asm/mach/map.h> |
24 | 24 | ||
25 | #include <mach/common.h> | 25 | #include "common.h" |
26 | #include <mach/hardware.h> | 26 | #include "devices/devices-common.h" |
27 | #include <mach/iomux-v1.h> | 27 | #include "hardware.h" |
28 | #include "iomux-v1.h" | ||
28 | 29 | ||
29 | static struct map_desc imx_io_desc[] __initdata = { | 30 | static struct map_desc imx_io_desc[] __initdata = { |
30 | imx_map_entry(MX1, IO, MT_DEVICE), | 31 | imx_map_entry(MX1, IO, MT_DEVICE), |
@@ -58,5 +59,7 @@ void __init imx1_soc_init(void) | |||
58 | MX1_GPIO_INT_PORTC, 0); | 59 | MX1_GPIO_INT_PORTC, 0); |
59 | mxc_register_gpio("imx1-gpio", 3, MX1_GPIO4_BASE_ADDR, SZ_256, | 60 | mxc_register_gpio("imx1-gpio", 3, MX1_GPIO4_BASE_ADDR, SZ_256, |
60 | MX1_GPIO_INT_PORTD, 0); | 61 | MX1_GPIO_INT_PORTD, 0); |
62 | imx_add_imx_dma("imx1-dma", MX1_DMA_BASE_ADDR, | ||
63 | MX1_DMA_INT, MX1_DMA_ERR); | ||
61 | pinctrl_provide_dummies(); | 64 | pinctrl_provide_dummies(); |
62 | } | 65 | } |
diff --git a/arch/arm/mach-imx/mm-imx21.c b/arch/arm/mach-imx/mm-imx21.c index d056dad0940d..d8ccd3a8ec53 100644 --- a/arch/arm/mach-imx/mm-imx21.c +++ b/arch/arm/mach-imx/mm-imx21.c | |||
@@ -21,12 +21,13 @@ | |||
21 | #include <linux/mm.h> | 21 | #include <linux/mm.h> |
22 | #include <linux/init.h> | 22 | #include <linux/init.h> |
23 | #include <linux/pinctrl/machine.h> | 23 | #include <linux/pinctrl/machine.h> |
24 | #include <mach/hardware.h> | ||
25 | #include <mach/common.h> | ||
26 | #include <mach/devices-common.h> | ||
27 | #include <asm/pgtable.h> | 24 | #include <asm/pgtable.h> |
28 | #include <asm/mach/map.h> | 25 | #include <asm/mach/map.h> |
29 | #include <mach/iomux-v1.h> | 26 | |
27 | #include "common.h" | ||
28 | #include "devices/devices-common.h" | ||
29 | #include "hardware.h" | ||
30 | #include "iomux-v1.h" | ||
30 | 31 | ||
31 | /* MX21 memory map definition */ | 32 | /* MX21 memory map definition */ |
32 | static struct map_desc imx21_io_desc[] __initdata = { | 33 | static struct map_desc imx21_io_desc[] __initdata = { |
@@ -81,6 +82,8 @@ static const struct resource imx21_audmux_res[] __initconst = { | |||
81 | 82 | ||
82 | void __init imx21_soc_init(void) | 83 | void __init imx21_soc_init(void) |
83 | { | 84 | { |
85 | mxc_device_init(); | ||
86 | |||
84 | mxc_register_gpio("imx21-gpio", 0, MX21_GPIO1_BASE_ADDR, SZ_256, MX21_INT_GPIO, 0); | 87 | mxc_register_gpio("imx21-gpio", 0, MX21_GPIO1_BASE_ADDR, SZ_256, MX21_INT_GPIO, 0); |
85 | mxc_register_gpio("imx21-gpio", 1, MX21_GPIO2_BASE_ADDR, SZ_256, MX21_INT_GPIO, 0); | 88 | mxc_register_gpio("imx21-gpio", 1, MX21_GPIO2_BASE_ADDR, SZ_256, MX21_INT_GPIO, 0); |
86 | mxc_register_gpio("imx21-gpio", 2, MX21_GPIO3_BASE_ADDR, SZ_256, MX21_INT_GPIO, 0); | 89 | mxc_register_gpio("imx21-gpio", 2, MX21_GPIO3_BASE_ADDR, SZ_256, MX21_INT_GPIO, 0); |
@@ -89,7 +92,8 @@ void __init imx21_soc_init(void) | |||
89 | mxc_register_gpio("imx21-gpio", 5, MX21_GPIO6_BASE_ADDR, SZ_256, MX21_INT_GPIO, 0); | 92 | mxc_register_gpio("imx21-gpio", 5, MX21_GPIO6_BASE_ADDR, SZ_256, MX21_INT_GPIO, 0); |
90 | 93 | ||
91 | pinctrl_provide_dummies(); | 94 | pinctrl_provide_dummies(); |
92 | imx_add_imx_dma(); | 95 | imx_add_imx_dma("imx21-dma", MX21_DMA_BASE_ADDR, |
96 | MX21_INT_DMACH0, 0); /* No ERR irq */ | ||
93 | platform_device_register_simple("imx21-audmux", 0, imx21_audmux_res, | 97 | platform_device_register_simple("imx21-audmux", 0, imx21_audmux_res, |
94 | ARRAY_SIZE(imx21_audmux_res)); | 98 | ARRAY_SIZE(imx21_audmux_res)); |
95 | } | 99 | } |
diff --git a/arch/arm/mach-imx/mm-imx25.c b/arch/arm/mach-imx/mm-imx25.c index f3f5c6542ab4..9357707bb7af 100644 --- a/arch/arm/mach-imx/mm-imx25.c +++ b/arch/arm/mach-imx/mm-imx25.c | |||
@@ -24,11 +24,11 @@ | |||
24 | #include <asm/pgtable.h> | 24 | #include <asm/pgtable.h> |
25 | #include <asm/mach/map.h> | 25 | #include <asm/mach/map.h> |
26 | 26 | ||
27 | #include <mach/common.h> | 27 | #include "common.h" |
28 | #include <mach/devices-common.h> | 28 | #include "devices/devices-common.h" |
29 | #include <mach/hardware.h> | 29 | #include "hardware.h" |
30 | #include <mach/mx25.h> | 30 | #include "iomux-v3.h" |
31 | #include <mach/iomux-v3.h> | 31 | #include "mx25.h" |
32 | 32 | ||
33 | /* | 33 | /* |
34 | * This table defines static virtual address mappings for I/O regions. | 34 | * This table defines static virtual address mappings for I/O regions. |
@@ -89,6 +89,8 @@ static const struct resource imx25_audmux_res[] __initconst = { | |||
89 | 89 | ||
90 | void __init imx25_soc_init(void) | 90 | void __init imx25_soc_init(void) |
91 | { | 91 | { |
92 | mxc_device_init(); | ||
93 | |||
92 | /* i.mx25 has the i.mx35 type gpio */ | 94 | /* i.mx25 has the i.mx35 type gpio */ |
93 | mxc_register_gpio("imx35-gpio", 0, MX25_GPIO1_BASE_ADDR, SZ_16K, MX25_INT_GPIO1, 0); | 95 | mxc_register_gpio("imx35-gpio", 0, MX25_GPIO1_BASE_ADDR, SZ_16K, MX25_INT_GPIO1, 0); |
94 | mxc_register_gpio("imx35-gpio", 1, MX25_GPIO2_BASE_ADDR, SZ_16K, MX25_INT_GPIO2, 0); | 96 | mxc_register_gpio("imx35-gpio", 1, MX25_GPIO2_BASE_ADDR, SZ_16K, MX25_INT_GPIO2, 0); |
diff --git a/arch/arm/mach-imx/mm-imx27.c b/arch/arm/mach-imx/mm-imx27.c index e7e24afc45ed..4f1be65a7b5f 100644 --- a/arch/arm/mach-imx/mm-imx27.c +++ b/arch/arm/mach-imx/mm-imx27.c | |||
@@ -21,12 +21,13 @@ | |||
21 | #include <linux/mm.h> | 21 | #include <linux/mm.h> |
22 | #include <linux/init.h> | 22 | #include <linux/init.h> |
23 | #include <linux/pinctrl/machine.h> | 23 | #include <linux/pinctrl/machine.h> |
24 | #include <mach/hardware.h> | ||
25 | #include <mach/common.h> | ||
26 | #include <mach/devices-common.h> | ||
27 | #include <asm/pgtable.h> | 24 | #include <asm/pgtable.h> |
28 | #include <asm/mach/map.h> | 25 | #include <asm/mach/map.h> |
29 | #include <mach/iomux-v1.h> | 26 | |
27 | #include "common.h" | ||
28 | #include "devices/devices-common.h" | ||
29 | #include "hardware.h" | ||
30 | #include "iomux-v1.h" | ||
30 | 31 | ||
31 | /* MX27 memory map definition */ | 32 | /* MX27 memory map definition */ |
32 | static struct map_desc imx27_io_desc[] __initdata = { | 33 | static struct map_desc imx27_io_desc[] __initdata = { |
@@ -81,6 +82,8 @@ static const struct resource imx27_audmux_res[] __initconst = { | |||
81 | 82 | ||
82 | void __init imx27_soc_init(void) | 83 | void __init imx27_soc_init(void) |
83 | { | 84 | { |
85 | mxc_device_init(); | ||
86 | |||
84 | /* i.mx27 has the i.mx21 type gpio */ | 87 | /* i.mx27 has the i.mx21 type gpio */ |
85 | mxc_register_gpio("imx21-gpio", 0, MX27_GPIO1_BASE_ADDR, SZ_256, MX27_INT_GPIO, 0); | 88 | mxc_register_gpio("imx21-gpio", 0, MX27_GPIO1_BASE_ADDR, SZ_256, MX27_INT_GPIO, 0); |
86 | mxc_register_gpio("imx21-gpio", 1, MX27_GPIO2_BASE_ADDR, SZ_256, MX27_INT_GPIO, 0); | 89 | mxc_register_gpio("imx21-gpio", 1, MX27_GPIO2_BASE_ADDR, SZ_256, MX27_INT_GPIO, 0); |
@@ -90,7 +93,8 @@ void __init imx27_soc_init(void) | |||
90 | mxc_register_gpio("imx21-gpio", 5, MX27_GPIO6_BASE_ADDR, SZ_256, MX27_INT_GPIO, 0); | 93 | mxc_register_gpio("imx21-gpio", 5, MX27_GPIO6_BASE_ADDR, SZ_256, MX27_INT_GPIO, 0); |
91 | 94 | ||
92 | pinctrl_provide_dummies(); | 95 | pinctrl_provide_dummies(); |
93 | imx_add_imx_dma(); | 96 | imx_add_imx_dma("imx27-dma", MX27_DMA_BASE_ADDR, |
97 | MX27_INT_DMACH0, 0); /* No ERR irq */ | ||
94 | /* imx27 has the imx21 type audmux */ | 98 | /* imx27 has the imx21 type audmux */ |
95 | platform_device_register_simple("imx21-audmux", 0, imx27_audmux_res, | 99 | platform_device_register_simple("imx21-audmux", 0, imx27_audmux_res, |
96 | ARRAY_SIZE(imx27_audmux_res)); | 100 | ARRAY_SIZE(imx27_audmux_res)); |
diff --git a/arch/arm/mach-imx/mm-imx3.c b/arch/arm/mach-imx/mm-imx3.c index b5deb0554552..cefa047c4053 100644 --- a/arch/arm/mach-imx/mm-imx3.c +++ b/arch/arm/mach-imx/mm-imx3.c | |||
@@ -26,12 +26,11 @@ | |||
26 | #include <asm/hardware/cache-l2x0.h> | 26 | #include <asm/hardware/cache-l2x0.h> |
27 | #include <asm/mach/map.h> | 27 | #include <asm/mach/map.h> |
28 | 28 | ||
29 | #include <mach/common.h> | 29 | #include "common.h" |
30 | #include <mach/devices-common.h> | ||
31 | #include <mach/hardware.h> | ||
32 | #include <mach/iomux-v3.h> | ||
33 | |||
34 | #include "crmregs-imx3.h" | 30 | #include "crmregs-imx3.h" |
31 | #include "devices/devices-common.h" | ||
32 | #include "hardware.h" | ||
33 | #include "iomux-v3.h" | ||
35 | 34 | ||
36 | void __iomem *mx3_ccm_base; | 35 | void __iomem *mx3_ccm_base; |
37 | 36 | ||
@@ -175,6 +174,8 @@ void __init imx31_soc_init(void) | |||
175 | 174 | ||
176 | imx3_init_l2x0(); | 175 | imx3_init_l2x0(); |
177 | 176 | ||
177 | mxc_device_init(); | ||
178 | |||
178 | mxc_register_gpio("imx31-gpio", 0, MX31_GPIO1_BASE_ADDR, SZ_16K, MX31_INT_GPIO1, 0); | 179 | mxc_register_gpio("imx31-gpio", 0, MX31_GPIO1_BASE_ADDR, SZ_16K, MX31_INT_GPIO1, 0); |
179 | mxc_register_gpio("imx31-gpio", 1, MX31_GPIO2_BASE_ADDR, SZ_16K, MX31_INT_GPIO2, 0); | 180 | mxc_register_gpio("imx31-gpio", 1, MX31_GPIO2_BASE_ADDR, SZ_16K, MX31_INT_GPIO2, 0); |
180 | mxc_register_gpio("imx31-gpio", 2, MX31_GPIO3_BASE_ADDR, SZ_16K, MX31_INT_GPIO3, 0); | 181 | mxc_register_gpio("imx31-gpio", 2, MX31_GPIO3_BASE_ADDR, SZ_16K, MX31_INT_GPIO3, 0); |
@@ -271,6 +272,8 @@ void __init imx35_soc_init(void) | |||
271 | 272 | ||
272 | imx3_init_l2x0(); | 273 | imx3_init_l2x0(); |
273 | 274 | ||
275 | mxc_device_init(); | ||
276 | |||
274 | mxc_register_gpio("imx35-gpio", 0, MX35_GPIO1_BASE_ADDR, SZ_16K, MX35_INT_GPIO1, 0); | 277 | mxc_register_gpio("imx35-gpio", 0, MX35_GPIO1_BASE_ADDR, SZ_16K, MX35_INT_GPIO1, 0); |
275 | mxc_register_gpio("imx35-gpio", 1, MX35_GPIO2_BASE_ADDR, SZ_16K, MX35_INT_GPIO2, 0); | 278 | mxc_register_gpio("imx35-gpio", 1, MX35_GPIO2_BASE_ADDR, SZ_16K, MX35_INT_GPIO2, 0); |
276 | mxc_register_gpio("imx35-gpio", 2, MX35_GPIO3_BASE_ADDR, SZ_16K, MX35_INT_GPIO3, 0); | 279 | mxc_register_gpio("imx35-gpio", 2, MX35_GPIO3_BASE_ADDR, SZ_16K, MX35_INT_GPIO3, 0); |
diff --git a/arch/arm/mach-imx/mm-imx5.c b/arch/arm/mach-imx/mm-imx5.c index acb0aadb4255..f92caf1b30ba 100644 --- a/arch/arm/mach-imx/mm-imx5.c +++ b/arch/arm/mach-imx/mm-imx5.c | |||
@@ -18,10 +18,10 @@ | |||
18 | 18 | ||
19 | #include <asm/mach/map.h> | 19 | #include <asm/mach/map.h> |
20 | 20 | ||
21 | #include <mach/hardware.h> | 21 | #include "common.h" |
22 | #include <mach/common.h> | 22 | #include "devices/devices-common.h" |
23 | #include <mach/devices-common.h> | 23 | #include "hardware.h" |
24 | #include <mach/iomux-v3.h> | 24 | #include "iomux-v3.h" |
25 | 25 | ||
26 | /* | 26 | /* |
27 | * Define the MX50 memory map. | 27 | * Define the MX50 memory map. |
@@ -138,6 +138,8 @@ static const struct resource imx51_audmux_res[] __initconst = { | |||
138 | 138 | ||
139 | void __init imx50_soc_init(void) | 139 | void __init imx50_soc_init(void) |
140 | { | 140 | { |
141 | mxc_device_init(); | ||
142 | |||
141 | /* i.mx50 has the i.mx35 type gpio */ | 143 | /* i.mx50 has the i.mx35 type gpio */ |
142 | mxc_register_gpio("imx35-gpio", 0, MX50_GPIO1_BASE_ADDR, SZ_16K, MX50_INT_GPIO1_LOW, MX50_INT_GPIO1_HIGH); | 144 | mxc_register_gpio("imx35-gpio", 0, MX50_GPIO1_BASE_ADDR, SZ_16K, MX50_INT_GPIO1_LOW, MX50_INT_GPIO1_HIGH); |
143 | mxc_register_gpio("imx35-gpio", 1, MX50_GPIO2_BASE_ADDR, SZ_16K, MX50_INT_GPIO2_LOW, MX50_INT_GPIO2_HIGH); | 145 | mxc_register_gpio("imx35-gpio", 1, MX50_GPIO2_BASE_ADDR, SZ_16K, MX50_INT_GPIO2_LOW, MX50_INT_GPIO2_HIGH); |
@@ -153,6 +155,8 @@ void __init imx50_soc_init(void) | |||
153 | 155 | ||
154 | void __init imx51_soc_init(void) | 156 | void __init imx51_soc_init(void) |
155 | { | 157 | { |
158 | mxc_device_init(); | ||
159 | |||
156 | /* i.mx51 has the i.mx35 type gpio */ | 160 | /* i.mx51 has the i.mx35 type gpio */ |
157 | mxc_register_gpio("imx35-gpio", 0, MX51_GPIO1_BASE_ADDR, SZ_16K, MX51_INT_GPIO1_LOW, MX51_INT_GPIO1_HIGH); | 161 | mxc_register_gpio("imx35-gpio", 0, MX51_GPIO1_BASE_ADDR, SZ_16K, MX51_INT_GPIO1_LOW, MX51_INT_GPIO1_HIGH); |
158 | mxc_register_gpio("imx35-gpio", 1, MX51_GPIO2_BASE_ADDR, SZ_16K, MX51_INT_GPIO2_LOW, MX51_INT_GPIO2_HIGH); | 162 | mxc_register_gpio("imx35-gpio", 1, MX51_GPIO2_BASE_ADDR, SZ_16K, MX51_INT_GPIO2_LOW, MX51_INT_GPIO2_HIGH); |
diff --git a/arch/arm/plat-mxc/include/mach/mx1.h b/arch/arm/mach-imx/mx1.h index 45bd31cc34d6..45bd31cc34d6 100644 --- a/arch/arm/plat-mxc/include/mach/mx1.h +++ b/arch/arm/mach-imx/mx1.h | |||
diff --git a/arch/arm/plat-mxc/include/mach/mx21.h b/arch/arm/mach-imx/mx21.h index 468738aa997f..468738aa997f 100644 --- a/arch/arm/plat-mxc/include/mach/mx21.h +++ b/arch/arm/mach-imx/mx21.h | |||
diff --git a/arch/arm/plat-mxc/include/mach/mx25.h b/arch/arm/mach-imx/mx25.h index ec466400a200..ec466400a200 100644 --- a/arch/arm/plat-mxc/include/mach/mx25.h +++ b/arch/arm/mach-imx/mx25.h | |||
diff --git a/arch/arm/plat-mxc/include/mach/mx27.h b/arch/arm/mach-imx/mx27.h index e074616d54ca..e074616d54ca 100644 --- a/arch/arm/plat-mxc/include/mach/mx27.h +++ b/arch/arm/mach-imx/mx27.h | |||
diff --git a/arch/arm/plat-mxc/include/mach/mx2x.h b/arch/arm/mach-imx/mx2x.h index 11642f5b224c..11642f5b224c 100644 --- a/arch/arm/plat-mxc/include/mach/mx2x.h +++ b/arch/arm/mach-imx/mx2x.h | |||
diff --git a/arch/arm/plat-mxc/include/mach/mx31.h b/arch/arm/mach-imx/mx31.h index ee9b1f9215df..ee9b1f9215df 100644 --- a/arch/arm/plat-mxc/include/mach/mx31.h +++ b/arch/arm/mach-imx/mx31.h | |||
diff --git a/arch/arm/mach-imx/mx31lilly-db.c b/arch/arm/mach-imx/mx31lilly-db.c index 29e890f92055..d4361b80c5fb 100644 --- a/arch/arm/mach-imx/mx31lilly-db.c +++ b/arch/arm/mach-imx/mx31lilly-db.c | |||
@@ -30,12 +30,11 @@ | |||
30 | #include <asm/mach/arch.h> | 30 | #include <asm/mach/arch.h> |
31 | #include <asm/mach/map.h> | 31 | #include <asm/mach/map.h> |
32 | 32 | ||
33 | #include <mach/hardware.h> | 33 | #include "board-mx31lilly.h" |
34 | #include <mach/common.h> | 34 | #include "common.h" |
35 | #include <mach/iomux-mx3.h> | ||
36 | #include <mach/board-mx31lilly.h> | ||
37 | |||
38 | #include "devices-imx31.h" | 35 | #include "devices-imx31.h" |
36 | #include "hardware.h" | ||
37 | #include "iomux-mx3.h" | ||
39 | 38 | ||
40 | /* | 39 | /* |
41 | * This file contains board-specific initialization routines for the | 40 | * This file contains board-specific initialization routines for the |
diff --git a/arch/arm/mach-imx/mx31lite-db.c b/arch/arm/mach-imx/mx31lite-db.c index 83d17d9e0bc8..5a160b7e4fce 100644 --- a/arch/arm/mach-imx/mx31lite-db.c +++ b/arch/arm/mach-imx/mx31lite-db.c | |||
@@ -31,12 +31,11 @@ | |||
31 | #include <asm/mach/arch.h> | 31 | #include <asm/mach/arch.h> |
32 | #include <asm/mach/map.h> | 32 | #include <asm/mach/map.h> |
33 | 33 | ||
34 | #include <mach/hardware.h> | 34 | #include "board-mx31lite.h" |
35 | #include <mach/common.h> | 35 | #include "common.h" |
36 | #include <mach/iomux-mx3.h> | ||
37 | #include <mach/board-mx31lite.h> | ||
38 | |||
39 | #include "devices-imx31.h" | 36 | #include "devices-imx31.h" |
37 | #include "hardware.h" | ||
38 | #include "iomux-mx3.h" | ||
40 | 39 | ||
41 | /* | 40 | /* |
42 | * This file contains board-specific initialization routines for the | 41 | * This file contains board-specific initialization routines for the |
diff --git a/arch/arm/mach-imx/mx31moboard-devboard.c b/arch/arm/mach-imx/mx31moboard-devboard.c index cc285e507286..52d5b1574721 100644 --- a/arch/arm/mach-imx/mx31moboard-devboard.c +++ b/arch/arm/mach-imx/mx31moboard-devboard.c | |||
@@ -22,12 +22,11 @@ | |||
22 | 22 | ||
23 | #include <linux/usb/otg.h> | 23 | #include <linux/usb/otg.h> |
24 | 24 | ||
25 | #include <mach/common.h> | 25 | #include "common.h" |
26 | #include <mach/iomux-mx3.h> | ||
27 | #include <mach/hardware.h> | ||
28 | #include <mach/ulpi.h> | ||
29 | |||
30 | #include "devices-imx31.h" | 26 | #include "devices-imx31.h" |
27 | #include "hardware.h" | ||
28 | #include "iomux-mx3.h" | ||
29 | #include "ulpi.h" | ||
31 | 30 | ||
32 | static unsigned int devboard_pins[] = { | 31 | static unsigned int devboard_pins[] = { |
33 | /* UART1 */ | 32 | /* UART1 */ |
diff --git a/arch/arm/mach-imx/mx31moboard-marxbot.c b/arch/arm/mach-imx/mx31moboard-marxbot.c index 135c90e3a45f..a4f43e90f3c1 100644 --- a/arch/arm/mach-imx/mx31moboard-marxbot.c +++ b/arch/arm/mach-imx/mx31moboard-marxbot.c | |||
@@ -24,14 +24,13 @@ | |||
24 | 24 | ||
25 | #include <linux/usb/otg.h> | 25 | #include <linux/usb/otg.h> |
26 | 26 | ||
27 | #include <mach/common.h> | ||
28 | #include <mach/hardware.h> | ||
29 | #include <mach/iomux-mx3.h> | ||
30 | #include <mach/ulpi.h> | ||
31 | |||
32 | #include <media/soc_camera.h> | 27 | #include <media/soc_camera.h> |
33 | 28 | ||
29 | #include "common.h" | ||
34 | #include "devices-imx31.h" | 30 | #include "devices-imx31.h" |
31 | #include "hardware.h" | ||
32 | #include "iomux-mx3.h" | ||
33 | #include "ulpi.h" | ||
35 | 34 | ||
36 | static unsigned int marxbot_pins[] = { | 35 | static unsigned int marxbot_pins[] = { |
37 | /* SDHC2 */ | 36 | /* SDHC2 */ |
diff --git a/arch/arm/mach-imx/mx31moboard-smartbot.c b/arch/arm/mach-imx/mx31moboard-smartbot.c index fabb801e7994..04ae45dbfaa7 100644 --- a/arch/arm/mach-imx/mx31moboard-smartbot.c +++ b/arch/arm/mach-imx/mx31moboard-smartbot.c | |||
@@ -23,15 +23,14 @@ | |||
23 | #include <linux/usb/otg.h> | 23 | #include <linux/usb/otg.h> |
24 | #include <linux/usb/ulpi.h> | 24 | #include <linux/usb/ulpi.h> |
25 | 25 | ||
26 | #include <mach/common.h> | ||
27 | #include <mach/hardware.h> | ||
28 | #include <mach/iomux-mx3.h> | ||
29 | #include <mach/board-mx31moboard.h> | ||
30 | #include <mach/ulpi.h> | ||
31 | |||
32 | #include <media/soc_camera.h> | 26 | #include <media/soc_camera.h> |
33 | 27 | ||
28 | #include "board-mx31moboard.h" | ||
29 | #include "common.h" | ||
34 | #include "devices-imx31.h" | 30 | #include "devices-imx31.h" |
31 | #include "hardware.h" | ||
32 | #include "iomux-mx3.h" | ||
33 | #include "ulpi.h" | ||
35 | 34 | ||
36 | static unsigned int smartbot_pins[] = { | 35 | static unsigned int smartbot_pins[] = { |
37 | /* UART1 */ | 36 | /* UART1 */ |
diff --git a/arch/arm/plat-mxc/include/mach/mx35.h b/arch/arm/mach-imx/mx35.h index 2af5d3a699c7..2af5d3a699c7 100644 --- a/arch/arm/plat-mxc/include/mach/mx35.h +++ b/arch/arm/mach-imx/mx35.h | |||
diff --git a/arch/arm/plat-mxc/include/mach/mx3x.h b/arch/arm/mach-imx/mx3x.h index 96fb4fbc8ad7..96fb4fbc8ad7 100644 --- a/arch/arm/plat-mxc/include/mach/mx3x.h +++ b/arch/arm/mach-imx/mx3x.h | |||
diff --git a/arch/arm/plat-mxc/include/mach/mx50.h b/arch/arm/mach-imx/mx50.h index 09ac19c1570c..09ac19c1570c 100644 --- a/arch/arm/plat-mxc/include/mach/mx50.h +++ b/arch/arm/mach-imx/mx50.h | |||
diff --git a/arch/arm/plat-mxc/include/mach/mx51.h b/arch/arm/mach-imx/mx51.h index af844f76261a..af844f76261a 100644 --- a/arch/arm/plat-mxc/include/mach/mx51.h +++ b/arch/arm/mach-imx/mx51.h | |||
diff --git a/arch/arm/plat-mxc/include/mach/mx53.h b/arch/arm/mach-imx/mx53.h index f829d1c22501..f829d1c22501 100644 --- a/arch/arm/plat-mxc/include/mach/mx53.h +++ b/arch/arm/mach-imx/mx53.h | |||
diff --git a/arch/arm/plat-mxc/include/mach/mx6q.h b/arch/arm/mach-imx/mx6q.h index f7e7dbac8f4b..f7e7dbac8f4b 100644 --- a/arch/arm/plat-mxc/include/mach/mx6q.h +++ b/arch/arm/mach-imx/mx6q.h | |||
diff --git a/arch/arm/plat-mxc/include/mach/mxc.h b/arch/arm/mach-imx/mxc.h index d78298366a91..d78298366a91 100644 --- a/arch/arm/plat-mxc/include/mach/mxc.h +++ b/arch/arm/mach-imx/mxc.h | |||
diff --git a/arch/arm/mach-imx/pcm970-baseboard.c b/arch/arm/mach-imx/pcm970-baseboard.c index 9917e2ff51da..51c608234089 100644 --- a/arch/arm/mach-imx/pcm970-baseboard.c +++ b/arch/arm/mach-imx/pcm970-baseboard.c | |||
@@ -23,11 +23,10 @@ | |||
23 | 23 | ||
24 | #include <asm/mach/arch.h> | 24 | #include <asm/mach/arch.h> |
25 | 25 | ||
26 | #include <mach/common.h> | 26 | #include "common.h" |
27 | #include <mach/iomux-mx27.h> | ||
28 | #include <mach/hardware.h> | ||
29 | |||
30 | #include "devices-imx27.h" | 27 | #include "devices-imx27.h" |
28 | #include "hardware.h" | ||
29 | #include "iomux-mx27.h" | ||
31 | 30 | ||
32 | static const int pcm970_pins[] __initconst = { | 31 | static const int pcm970_pins[] __initconst = { |
33 | /* SDHC */ | 32 | /* SDHC */ |
diff --git a/arch/arm/mach-imx/platsmp.c b/arch/arm/mach-imx/platsmp.c index 2ac43e1a2dfd..3777b805b76b 100644 --- a/arch/arm/mach-imx/platsmp.c +++ b/arch/arm/mach-imx/platsmp.c | |||
@@ -16,8 +16,9 @@ | |||
16 | #include <asm/smp_scu.h> | 16 | #include <asm/smp_scu.h> |
17 | #include <asm/hardware/gic.h> | 17 | #include <asm/hardware/gic.h> |
18 | #include <asm/mach/map.h> | 18 | #include <asm/mach/map.h> |
19 | #include <mach/common.h> | 19 | |
20 | #include <mach/hardware.h> | 20 | #include "common.h" |
21 | #include "hardware.h" | ||
21 | 22 | ||
22 | static void __iomem *scu_base; | 23 | static void __iomem *scu_base; |
23 | 24 | ||
diff --git a/arch/arm/mach-imx/pm-imx27.c b/arch/arm/mach-imx/pm-imx27.c index 6fcffa7db978..56d02d064fbf 100644 --- a/arch/arm/mach-imx/pm-imx27.c +++ b/arch/arm/mach-imx/pm-imx27.c | |||
@@ -10,7 +10,8 @@ | |||
10 | #include <linux/kernel.h> | 10 | #include <linux/kernel.h> |
11 | #include <linux/suspend.h> | 11 | #include <linux/suspend.h> |
12 | #include <linux/io.h> | 12 | #include <linux/io.h> |
13 | #include <mach/hardware.h> | 13 | |
14 | #include "hardware.h" | ||
14 | 15 | ||
15 | static int mx27_suspend_enter(suspend_state_t state) | 16 | static int mx27_suspend_enter(suspend_state_t state) |
16 | { | 17 | { |
diff --git a/arch/arm/mach-imx/pm-imx3.c b/arch/arm/mach-imx/pm-imx3.c index 822103bdb709..6a07006ff0f4 100644 --- a/arch/arm/mach-imx/pm-imx3.c +++ b/arch/arm/mach-imx/pm-imx3.c | |||
@@ -9,10 +9,11 @@ | |||
9 | * http://www.gnu.org/copyleft/gpl.html | 9 | * http://www.gnu.org/copyleft/gpl.html |
10 | */ | 10 | */ |
11 | #include <linux/io.h> | 11 | #include <linux/io.h> |
12 | #include <mach/common.h> | 12 | |
13 | #include <mach/hardware.h> | 13 | #include "common.h" |
14 | #include <mach/devices-common.h> | ||
15 | #include "crmregs-imx3.h" | 14 | #include "crmregs-imx3.h" |
15 | #include "devices/devices-common.h" | ||
16 | #include "hardware.h" | ||
16 | 17 | ||
17 | /* | 18 | /* |
18 | * Set cpu low power mode before WFI instruction. This function is called | 19 | * Set cpu low power mode before WFI instruction. This function is called |
diff --git a/arch/arm/mach-imx/pm-imx5.c b/arch/arm/mach-imx/pm-imx5.c index 19621ed1ffa5..2e063c2deb9e 100644 --- a/arch/arm/mach-imx/pm-imx5.c +++ b/arch/arm/mach-imx/pm-imx5.c | |||
@@ -16,10 +16,11 @@ | |||
16 | #include <asm/cacheflush.h> | 16 | #include <asm/cacheflush.h> |
17 | #include <asm/system_misc.h> | 17 | #include <asm/system_misc.h> |
18 | #include <asm/tlbflush.h> | 18 | #include <asm/tlbflush.h> |
19 | #include <mach/common.h> | 19 | |
20 | #include <mach/cpuidle.h> | 20 | #include "common.h" |
21 | #include <mach/hardware.h> | 21 | #include "cpuidle.h" |
22 | #include "crm-regs-imx5.h" | 22 | #include "crm-regs-imx5.h" |
23 | #include "hardware.h" | ||
23 | 24 | ||
24 | /* | 25 | /* |
25 | * The WAIT_UNCLOCKED_POWER_OFF state only requires <= 500ns to exit. | 26 | * The WAIT_UNCLOCKED_POWER_OFF state only requires <= 500ns to exit. |
diff --git a/arch/arm/mach-imx/pm-imx6q.c b/arch/arm/mach-imx/pm-imx6q.c index f7b0c2b1b905..a17543da602d 100644 --- a/arch/arm/mach-imx/pm-imx6q.c +++ b/arch/arm/mach-imx/pm-imx6q.c | |||
@@ -18,8 +18,9 @@ | |||
18 | #include <asm/proc-fns.h> | 18 | #include <asm/proc-fns.h> |
19 | #include <asm/suspend.h> | 19 | #include <asm/suspend.h> |
20 | #include <asm/hardware/cache-l2x0.h> | 20 | #include <asm/hardware/cache-l2x0.h> |
21 | #include <mach/common.h> | 21 | |
22 | #include <mach/hardware.h> | 22 | #include "common.h" |
23 | #include "hardware.h" | ||
23 | 24 | ||
24 | extern unsigned long phys_l2x0_saved_regs; | 25 | extern unsigned long phys_l2x0_saved_regs; |
25 | 26 | ||
diff --git a/arch/arm/plat-mxc/ssi-fiq-ksym.c b/arch/arm/mach-imx/ssi-fiq-ksym.c index 792090f9a032..792090f9a032 100644 --- a/arch/arm/plat-mxc/ssi-fiq-ksym.c +++ b/arch/arm/mach-imx/ssi-fiq-ksym.c | |||
diff --git a/arch/arm/plat-mxc/ssi-fiq.S b/arch/arm/mach-imx/ssi-fiq.S index a8b93c5f29b5..a8b93c5f29b5 100644 --- a/arch/arm/plat-mxc/ssi-fiq.S +++ b/arch/arm/mach-imx/ssi-fiq.S | |||
diff --git a/arch/arm/plat-mxc/system.c b/arch/arm/mach-imx/system.c index 3da78cfc5a94..695e0d73bf85 100644 --- a/arch/arm/plat-mxc/system.c +++ b/arch/arm/mach-imx/system.c | |||
@@ -22,12 +22,13 @@ | |||
22 | #include <linux/err.h> | 22 | #include <linux/err.h> |
23 | #include <linux/delay.h> | 23 | #include <linux/delay.h> |
24 | 24 | ||
25 | #include <mach/hardware.h> | ||
26 | #include <mach/common.h> | ||
27 | #include <asm/system_misc.h> | 25 | #include <asm/system_misc.h> |
28 | #include <asm/proc-fns.h> | 26 | #include <asm/proc-fns.h> |
29 | #include <asm/mach-types.h> | 27 | #include <asm/mach-types.h> |
30 | 28 | ||
29 | #include "common.h" | ||
30 | #include "hardware.h" | ||
31 | |||
31 | static void __iomem *wdog_base; | 32 | static void __iomem *wdog_base; |
32 | 33 | ||
33 | /* | 34 | /* |
diff --git a/arch/arm/plat-mxc/time.c b/arch/arm/mach-imx/time.c index a17abcf98325..f017302f6d09 100644 --- a/arch/arm/plat-mxc/time.c +++ b/arch/arm/mach-imx/time.c | |||
@@ -27,10 +27,11 @@ | |||
27 | #include <linux/clk.h> | 27 | #include <linux/clk.h> |
28 | #include <linux/err.h> | 28 | #include <linux/err.h> |
29 | 29 | ||
30 | #include <mach/hardware.h> | ||
31 | #include <asm/sched_clock.h> | 30 | #include <asm/sched_clock.h> |
32 | #include <asm/mach/time.h> | 31 | #include <asm/mach/time.h> |
33 | #include <mach/common.h> | 32 | |
33 | #include "common.h" | ||
34 | #include "hardware.h" | ||
34 | 35 | ||
35 | /* | 36 | /* |
36 | * There are 2 versions of the timer hardware on Freescale MXC hardware. | 37 | * There are 2 versions of the timer hardware on Freescale MXC hardware. |
diff --git a/arch/arm/plat-mxc/tzic.c b/arch/arm/mach-imx/tzic.c index 3ed1adbc09f8..9721161f208f 100644 --- a/arch/arm/plat-mxc/tzic.c +++ b/arch/arm/mach-imx/tzic.c | |||
@@ -21,10 +21,8 @@ | |||
21 | #include <asm/mach/irq.h> | 21 | #include <asm/mach/irq.h> |
22 | #include <asm/exception.h> | 22 | #include <asm/exception.h> |
23 | 23 | ||
24 | #include <mach/hardware.h> | 24 | #include "common.h" |
25 | #include <mach/common.h> | 25 | #include "hardware.h" |
26 | #include <mach/irqs.h> | ||
27 | |||
28 | #include "irq-common.h" | 26 | #include "irq-common.h" |
29 | 27 | ||
30 | /* | 28 | /* |
diff --git a/arch/arm/plat-mxc/ulpi.c b/arch/arm/mach-imx/ulpi.c index d2963427184f..0f051957d10c 100644 --- a/arch/arm/plat-mxc/ulpi.c +++ b/arch/arm/mach-imx/ulpi.c | |||
@@ -24,7 +24,7 @@ | |||
24 | #include <linux/usb/otg.h> | 24 | #include <linux/usb/otg.h> |
25 | #include <linux/usb/ulpi.h> | 25 | #include <linux/usb/ulpi.h> |
26 | 26 | ||
27 | #include <mach/ulpi.h> | 27 | #include "ulpi.h" |
28 | 28 | ||
29 | /* ULPIVIEW register bits */ | 29 | /* ULPIVIEW register bits */ |
30 | #define ULPIVW_WU (1 << 31) /* Wakeup */ | 30 | #define ULPIVW_WU (1 << 31) /* Wakeup */ |
diff --git a/arch/arm/plat-mxc/include/mach/ulpi.h b/arch/arm/mach-imx/ulpi.h index 42bdaca6d7d9..42bdaca6d7d9 100644 --- a/arch/arm/plat-mxc/include/mach/ulpi.h +++ b/arch/arm/mach-imx/ulpi.h | |||
diff --git a/arch/arm/mm/alignment.c b/arch/arm/mm/alignment.c index 023f443784ec..b820edaf3184 100644 --- a/arch/arm/mm/alignment.c +++ b/arch/arm/mm/alignment.c | |||
@@ -745,7 +745,7 @@ do_alignment_t32_to_handler(unsigned long *pinstr, struct pt_regs *regs, | |||
745 | static int | 745 | static int |
746 | do_alignment(unsigned long addr, unsigned int fsr, struct pt_regs *regs) | 746 | do_alignment(unsigned long addr, unsigned int fsr, struct pt_regs *regs) |
747 | { | 747 | { |
748 | union offset_union offset; | 748 | union offset_union uninitialized_var(offset); |
749 | unsigned long instr = 0, instrptr; | 749 | unsigned long instr = 0, instrptr; |
750 | int (*handler)(unsigned long addr, unsigned long instr, struct pt_regs *regs); | 750 | int (*handler)(unsigned long addr, unsigned long instr, struct pt_regs *regs); |
751 | unsigned int type; | 751 | unsigned int type; |
diff --git a/arch/arm/plat-mxc/Kconfig b/arch/arm/plat-mxc/Kconfig deleted file mode 100644 index 88e1e2e7a20d..000000000000 --- a/arch/arm/plat-mxc/Kconfig +++ /dev/null | |||
@@ -1,89 +0,0 @@ | |||
1 | if ARCH_MXC | ||
2 | |||
3 | source "arch/arm/plat-mxc/devices/Kconfig" | ||
4 | |||
5 | menu "Freescale MXC Implementations" | ||
6 | |||
7 | choice | ||
8 | prompt "Freescale CPU family:" | ||
9 | default ARCH_IMX_V6_V7 | ||
10 | |||
11 | config ARCH_IMX_V4_V5 | ||
12 | bool "i.MX1, i.MX21, i.MX25, i.MX27" | ||
13 | select ARM_PATCH_PHYS_VIRT | ||
14 | select AUTO_ZRELADDR if !ZBOOT_ROM | ||
15 | help | ||
16 | This enables support for systems based on the Freescale i.MX ARMv4 | ||
17 | and ARMv5 SoCs | ||
18 | |||
19 | config ARCH_IMX_V6_V7 | ||
20 | bool "i.MX3, i.MX5, i.MX6" | ||
21 | select ARM_PATCH_PHYS_VIRT | ||
22 | select AUTO_ZRELADDR if !ZBOOT_ROM | ||
23 | select MIGHT_HAVE_CACHE_L2X0 | ||
24 | help | ||
25 | This enables support for systems based on the Freescale i.MX3, i.MX5 | ||
26 | and i.MX6 family. | ||
27 | |||
28 | endchoice | ||
29 | |||
30 | source "arch/arm/mach-imx/Kconfig" | ||
31 | |||
32 | endmenu | ||
33 | |||
34 | config MXC_IRQ_PRIOR | ||
35 | bool "Use IRQ priority" | ||
36 | help | ||
37 | Select this if you want to use prioritized IRQ handling. | ||
38 | This feature prevents higher priority ISR to be interrupted | ||
39 | by lower priority IRQ even IRQF_DISABLED flag is not set. | ||
40 | This may be useful in embedded applications, where are strong | ||
41 | requirements for timing. | ||
42 | Say N here, unless you have a specialized requirement. | ||
43 | |||
44 | config MXC_TZIC | ||
45 | bool | ||
46 | |||
47 | config MXC_AVIC | ||
48 | bool | ||
49 | |||
50 | config MXC_DEBUG_BOARD | ||
51 | bool "Enable MXC debug board(for 3-stack)" | ||
52 | help | ||
53 | The debug board is an integral part of the MXC 3-stack(PDK) | ||
54 | platforms, it can be attached or removed from the peripheral | ||
55 | board. On debug board, several debug devices(ethernet, UART, | ||
56 | buttons, LEDs and JTAG) are implemented. Between the MCU and | ||
57 | these devices, a CPLD is added as a bridge which performs | ||
58 | data/address de-multiplexing and decode, signal level shift, | ||
59 | interrupt control and various board functions. | ||
60 | |||
61 | config HAVE_EPIT | ||
62 | bool | ||
63 | |||
64 | config MXC_USE_EPIT | ||
65 | bool "Use EPIT instead of GPT" | ||
66 | depends on HAVE_EPIT | ||
67 | help | ||
68 | Use EPIT as the system timer on systems that have it. Normally you | ||
69 | don't have a reason to do so as the EPIT has the same features and | ||
70 | uses the same clocks as the GPT. Anyway, on some systems the GPT | ||
71 | may be in use for other purposes. | ||
72 | |||
73 | config MXC_ULPI | ||
74 | bool | ||
75 | |||
76 | config ARCH_HAS_RNGA | ||
77 | bool | ||
78 | |||
79 | config IMX_HAVE_IOMUX_V1 | ||
80 | bool | ||
81 | |||
82 | config ARCH_MXC_IOMUX_V3 | ||
83 | bool | ||
84 | |||
85 | config IRAM_ALLOC | ||
86 | bool | ||
87 | select GENERIC_ALLOCATOR | ||
88 | |||
89 | endif | ||
diff --git a/arch/arm/plat-mxc/Makefile b/arch/arm/plat-mxc/Makefile deleted file mode 100644 index 149237e24850..000000000000 --- a/arch/arm/plat-mxc/Makefile +++ /dev/null | |||
@@ -1,24 +0,0 @@ | |||
1 | # | ||
2 | # Makefile for the linux kernel. | ||
3 | # | ||
4 | |||
5 | # Common support | ||
6 | obj-y := time.o devices.o cpu.o system.o irq-common.o | ||
7 | |||
8 | obj-$(CONFIG_MXC_TZIC) += tzic.o | ||
9 | obj-$(CONFIG_MXC_AVIC) += avic.o | ||
10 | |||
11 | obj-$(CONFIG_IMX_HAVE_IOMUX_V1) += iomux-v1.o | ||
12 | obj-$(CONFIG_ARCH_MXC_IOMUX_V3) += iomux-v3.o | ||
13 | obj-$(CONFIG_IRAM_ALLOC) += iram_alloc.o | ||
14 | obj-$(CONFIG_MXC_ULPI) += ulpi.o | ||
15 | obj-$(CONFIG_MXC_USE_EPIT) += epit.o | ||
16 | obj-$(CONFIG_MXC_DEBUG_BOARD) += 3ds_debugboard.o | ||
17 | obj-$(CONFIG_CPU_FREQ_IMX) += cpufreq.o | ||
18 | obj-$(CONFIG_CPU_IDLE) += cpuidle.o | ||
19 | ifdef CONFIG_SND_IMX_SOC | ||
20 | obj-y += ssi-fiq.o | ||
21 | obj-y += ssi-fiq-ksym.o | ||
22 | endif | ||
23 | |||
24 | obj-y += devices/ | ||
diff --git a/arch/arm/plat-mxc/include/mach/irqs.h b/arch/arm/plat-mxc/include/mach/irqs.h deleted file mode 100644 index d73f5e8ea9cb..000000000000 --- a/arch/arm/plat-mxc/include/mach/irqs.h +++ /dev/null | |||
@@ -1,21 +0,0 @@ | |||
1 | /* | ||
2 | * Copyright 2004-2007 Freescale Semiconductor, Inc. All Rights Reserved. | ||
3 | */ | ||
4 | |||
5 | /* | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | */ | ||
10 | |||
11 | #ifndef __ASM_ARCH_MXC_IRQS_H__ | ||
12 | #define __ASM_ARCH_MXC_IRQS_H__ | ||
13 | |||
14 | extern int imx_irq_set_priority(unsigned char irq, unsigned char prio); | ||
15 | |||
16 | /* all normal IRQs can be FIQs */ | ||
17 | #define FIQ_START 0 | ||
18 | /* switch between IRQ and FIQ */ | ||
19 | extern int mxc_set_irq_fiq(unsigned int irq, unsigned int type); | ||
20 | |||
21 | #endif /* __ASM_ARCH_MXC_IRQS_H__ */ | ||
diff --git a/arch/arm/plat-mxc/include/mach/timex.h b/arch/arm/plat-mxc/include/mach/timex.h deleted file mode 100644 index 10343d1f87e1..000000000000 --- a/arch/arm/plat-mxc/include/mach/timex.h +++ /dev/null | |||
@@ -1,22 +0,0 @@ | |||
1 | /* | ||
2 | * Copyright (C) 1999 ARM Limited | ||
3 | * Copyright 2004-2007 Freescale Semiconductor, Inc. All Rights Reserved. | ||
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 as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | */ | ||
15 | |||
16 | #ifndef __ASM_ARCH_MXC_TIMEX_H__ | ||
17 | #define __ASM_ARCH_MXC_TIMEX_H__ | ||
18 | |||
19 | /* Bogus value */ | ||
20 | #define CLOCK_TICK_RATE 12345678 | ||
21 | |||
22 | #endif /* __ASM_ARCH_MXC_TIMEX_H__ */ | ||
diff --git a/arch/arm/plat-mxc/include/mach/uncompress.h b/arch/arm/plat-mxc/include/mach/uncompress.h deleted file mode 100644 index 477971b00930..000000000000 --- a/arch/arm/plat-mxc/include/mach/uncompress.h +++ /dev/null | |||
@@ -1,132 +0,0 @@ | |||
1 | /* | ||
2 | * arch/arm/plat-mxc/include/mach/uncompress.h | ||
3 | * | ||
4 | * Copyright (C) 1999 ARM Limited | ||
5 | * Copyright (C) Shane Nay (shane@minirl.com) | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License as published by | ||
9 | * the Free Software Foundation; either version 2 of the License, or | ||
10 | * (at your option) any later version. | ||
11 | * | ||
12 | * This program is distributed in the hope that it will be useful, | ||
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
15 | * GNU General Public License for more details. | ||
16 | */ | ||
17 | #ifndef __ASM_ARCH_MXC_UNCOMPRESS_H__ | ||
18 | #define __ASM_ARCH_MXC_UNCOMPRESS_H__ | ||
19 | |||
20 | #define __MXC_BOOT_UNCOMPRESS | ||
21 | |||
22 | #include <asm/mach-types.h> | ||
23 | |||
24 | unsigned long uart_base; | ||
25 | |||
26 | #define UART(x) (*(volatile unsigned long *)(uart_base + (x))) | ||
27 | |||
28 | #define USR2 0x98 | ||
29 | #define USR2_TXFE (1<<14) | ||
30 | #define TXR 0x40 | ||
31 | #define UCR1 0x80 | ||
32 | #define UCR1_UARTEN 1 | ||
33 | |||
34 | /* | ||
35 | * The following code assumes the serial port has already been | ||
36 | * initialized by the bootloader. We search for the first enabled | ||
37 | * port in the most probable order. If you didn't setup a port in | ||
38 | * your bootloader then nothing will appear (which might be desired). | ||
39 | * | ||
40 | * This does not append a newline | ||
41 | */ | ||
42 | |||
43 | static void putc(int ch) | ||
44 | { | ||
45 | if (!uart_base) | ||
46 | return; | ||
47 | if (!(UART(UCR1) & UCR1_UARTEN)) | ||
48 | return; | ||
49 | |||
50 | while (!(UART(USR2) & USR2_TXFE)) | ||
51 | barrier(); | ||
52 | |||
53 | UART(TXR) = ch; | ||
54 | } | ||
55 | |||
56 | static inline void flush(void) | ||
57 | { | ||
58 | } | ||
59 | |||
60 | #define MX1_UART1_BASE_ADDR 0x00206000 | ||
61 | #define MX25_UART1_BASE_ADDR 0x43f90000 | ||
62 | #define MX2X_UART1_BASE_ADDR 0x1000a000 | ||
63 | #define MX3X_UART1_BASE_ADDR 0x43F90000 | ||
64 | #define MX3X_UART2_BASE_ADDR 0x43F94000 | ||
65 | #define MX3X_UART5_BASE_ADDR 0x43FB4000 | ||
66 | #define MX51_UART1_BASE_ADDR 0x73fbc000 | ||
67 | #define MX50_UART1_BASE_ADDR 0x53fbc000 | ||
68 | #define MX53_UART1_BASE_ADDR 0x53fbc000 | ||
69 | |||
70 | static __inline__ void __arch_decomp_setup(unsigned long arch_id) | ||
71 | { | ||
72 | switch (arch_id) { | ||
73 | case MACH_TYPE_MX1ADS: | ||
74 | case MACH_TYPE_SCB9328: | ||
75 | uart_base = MX1_UART1_BASE_ADDR; | ||
76 | break; | ||
77 | case MACH_TYPE_MX25_3DS: | ||
78 | uart_base = MX25_UART1_BASE_ADDR; | ||
79 | break; | ||
80 | case MACH_TYPE_IMX27LITE: | ||
81 | case MACH_TYPE_MX27_3DS: | ||
82 | case MACH_TYPE_MX27ADS: | ||
83 | case MACH_TYPE_PCM038: | ||
84 | case MACH_TYPE_MX21ADS: | ||
85 | case MACH_TYPE_PCA100: | ||
86 | case MACH_TYPE_MXT_TD60: | ||
87 | case MACH_TYPE_IMX27IPCAM: | ||
88 | uart_base = MX2X_UART1_BASE_ADDR; | ||
89 | break; | ||
90 | case MACH_TYPE_MX31LITE: | ||
91 | case MACH_TYPE_ARMADILLO5X0: | ||
92 | case MACH_TYPE_MX31MOBOARD: | ||
93 | case MACH_TYPE_QONG: | ||
94 | case MACH_TYPE_MX31_3DS: | ||
95 | case MACH_TYPE_PCM037: | ||
96 | case MACH_TYPE_MX31ADS: | ||
97 | case MACH_TYPE_MX35_3DS: | ||
98 | case MACH_TYPE_PCM043: | ||
99 | case MACH_TYPE_LILLY1131: | ||
100 | case MACH_TYPE_VPR200: | ||
101 | case MACH_TYPE_EUKREA_CPUIMX35SD: | ||
102 | uart_base = MX3X_UART1_BASE_ADDR; | ||
103 | break; | ||
104 | case MACH_TYPE_MAGX_ZN5: | ||
105 | uart_base = MX3X_UART2_BASE_ADDR; | ||
106 | break; | ||
107 | case MACH_TYPE_BUG: | ||
108 | uart_base = MX3X_UART5_BASE_ADDR; | ||
109 | break; | ||
110 | case MACH_TYPE_MX51_BABBAGE: | ||
111 | case MACH_TYPE_EUKREA_CPUIMX51SD: | ||
112 | case MACH_TYPE_MX51_3DS: | ||
113 | uart_base = MX51_UART1_BASE_ADDR; | ||
114 | break; | ||
115 | case MACH_TYPE_MX50_RDP: | ||
116 | uart_base = MX50_UART1_BASE_ADDR; | ||
117 | break; | ||
118 | case MACH_TYPE_MX53_EVK: | ||
119 | case MACH_TYPE_MX53_LOCO: | ||
120 | case MACH_TYPE_MX53_SMD: | ||
121 | case MACH_TYPE_MX53_ARD: | ||
122 | uart_base = MX53_UART1_BASE_ADDR; | ||
123 | break; | ||
124 | default: | ||
125 | break; | ||
126 | } | ||
127 | } | ||
128 | |||
129 | #define arch_decomp_setup() __arch_decomp_setup(arch_id) | ||
130 | #define arch_decomp_wdog() | ||
131 | |||
132 | #endif /* __ASM_ARCH_MXC_UNCOMPRESS_H__ */ | ||
diff --git a/arch/arm/vfp/vfpmodule.c b/arch/arm/vfp/vfpmodule.c index c834b32af275..3b44e0dd0a93 100644 --- a/arch/arm/vfp/vfpmodule.c +++ b/arch/arm/vfp/vfpmodule.c | |||
@@ -701,11 +701,14 @@ static int __init vfp_init(void) | |||
701 | elf_hwcap |= HWCAP_VFPv3; | 701 | elf_hwcap |= HWCAP_VFPv3; |
702 | 702 | ||
703 | /* | 703 | /* |
704 | * Check for VFPv3 D16. CPUs in this configuration | 704 | * Check for VFPv3 D16 and VFPv4 D16. CPUs in |
705 | * only have 16 x 64bit registers. | 705 | * this configuration only have 16 x 64bit |
706 | * registers. | ||
706 | */ | 707 | */ |
707 | if (((fmrx(MVFR0) & MVFR0_A_SIMD_MASK)) == 1) | 708 | if (((fmrx(MVFR0) & MVFR0_A_SIMD_MASK)) == 1) |
708 | elf_hwcap |= HWCAP_VFPv3D16; | 709 | elf_hwcap |= HWCAP_VFPv3D16; /* also v4-D16 */ |
710 | else | ||
711 | elf_hwcap |= HWCAP_VFPD32; | ||
709 | } | 712 | } |
710 | #endif | 713 | #endif |
711 | /* | 714 | /* |
diff --git a/arch/arm/xen/enlighten.c b/arch/arm/xen/enlighten.c index 59bcb96ac369..f57609275449 100644 --- a/arch/arm/xen/enlighten.c +++ b/arch/arm/xen/enlighten.c | |||
@@ -166,3 +166,14 @@ void free_xenballooned_pages(int nr_pages, struct page **pages) | |||
166 | *pages = NULL; | 166 | *pages = NULL; |
167 | } | 167 | } |
168 | EXPORT_SYMBOL_GPL(free_xenballooned_pages); | 168 | EXPORT_SYMBOL_GPL(free_xenballooned_pages); |
169 | |||
170 | /* In the hypervisor.S file. */ | ||
171 | EXPORT_SYMBOL_GPL(HYPERVISOR_event_channel_op); | ||
172 | EXPORT_SYMBOL_GPL(HYPERVISOR_grant_table_op); | ||
173 | EXPORT_SYMBOL_GPL(HYPERVISOR_xen_version); | ||
174 | EXPORT_SYMBOL_GPL(HYPERVISOR_console_io); | ||
175 | EXPORT_SYMBOL_GPL(HYPERVISOR_sched_op); | ||
176 | EXPORT_SYMBOL_GPL(HYPERVISOR_hvm_op); | ||
177 | EXPORT_SYMBOL_GPL(HYPERVISOR_memory_op); | ||
178 | EXPORT_SYMBOL_GPL(HYPERVISOR_physdev_op); | ||
179 | EXPORT_SYMBOL_GPL(privcmd_call); | ||
diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig index ef54a59a9e89..15ac18a56c93 100644 --- a/arch/arm64/Kconfig +++ b/arch/arm64/Kconfig | |||
@@ -1,6 +1,7 @@ | |||
1 | config ARM64 | 1 | config ARM64 |
2 | def_bool y | 2 | def_bool y |
3 | select ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE | 3 | select ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE |
4 | select ARCH_WANT_COMPAT_IPC_PARSE_VERSION | ||
4 | select GENERIC_CLOCKEVENTS | 5 | select GENERIC_CLOCKEVENTS |
5 | select GENERIC_HARDIRQS_NO_DEPRECATED | 6 | select GENERIC_HARDIRQS_NO_DEPRECATED |
6 | select GENERIC_IOMAP | 7 | select GENERIC_IOMAP |
diff --git a/arch/arm64/include/asm/elf.h b/arch/arm64/include/asm/elf.h index cf284649dfcb..07fea290d7c1 100644 --- a/arch/arm64/include/asm/elf.h +++ b/arch/arm64/include/asm/elf.h | |||
@@ -25,12 +25,10 @@ | |||
25 | #include <asm/user.h> | 25 | #include <asm/user.h> |
26 | 26 | ||
27 | typedef unsigned long elf_greg_t; | 27 | typedef unsigned long elf_greg_t; |
28 | typedef unsigned long elf_freg_t[3]; | ||
29 | 28 | ||
30 | #define ELF_NGREG (sizeof (struct pt_regs) / sizeof(elf_greg_t)) | 29 | #define ELF_NGREG (sizeof (struct pt_regs) / sizeof(elf_greg_t)) |
31 | typedef elf_greg_t elf_gregset_t[ELF_NGREG]; | 30 | typedef elf_greg_t elf_gregset_t[ELF_NGREG]; |
32 | 31 | typedef struct user_fpsimd_state elf_fpregset_t; | |
33 | typedef struct user_fp elf_fpregset_t; | ||
34 | 32 | ||
35 | #define EM_AARCH64 183 | 33 | #define EM_AARCH64 183 |
36 | 34 | ||
@@ -87,7 +85,6 @@ typedef struct user_fp elf_fpregset_t; | |||
87 | #define R_AARCH64_MOVW_PREL_G2_NC 292 | 85 | #define R_AARCH64_MOVW_PREL_G2_NC 292 |
88 | #define R_AARCH64_MOVW_PREL_G3 293 | 86 | #define R_AARCH64_MOVW_PREL_G3 293 |
89 | 87 | ||
90 | |||
91 | /* | 88 | /* |
92 | * These are used to set parameters in the core dumps. | 89 | * These are used to set parameters in the core dumps. |
93 | */ | 90 | */ |
diff --git a/arch/arm64/include/asm/fpsimd.h b/arch/arm64/include/asm/fpsimd.h index b42fab9f62a9..c43b4ac13008 100644 --- a/arch/arm64/include/asm/fpsimd.h +++ b/arch/arm64/include/asm/fpsimd.h | |||
@@ -25,9 +25,8 @@ | |||
25 | * - FPSR and FPCR | 25 | * - FPSR and FPCR |
26 | * - 32 128-bit data registers | 26 | * - 32 128-bit data registers |
27 | * | 27 | * |
28 | * Note that user_fp forms a prefix of this structure, which is relied | 28 | * Note that user_fpsimd forms a prefix of this structure, which is |
29 | * upon in the ptrace FP/SIMD accessors. struct user_fpsimd_state must | 29 | * relied upon in the ptrace FP/SIMD accessors. |
30 | * form a prefix of struct fpsimd_state. | ||
31 | */ | 30 | */ |
32 | struct fpsimd_state { | 31 | struct fpsimd_state { |
33 | union { | 32 | union { |
diff --git a/arch/arm64/include/asm/io.h b/arch/arm64/include/asm/io.h index 74a2a7d304a9..54f6116697f7 100644 --- a/arch/arm64/include/asm/io.h +++ b/arch/arm64/include/asm/io.h | |||
@@ -114,7 +114,7 @@ static inline u64 __raw_readq(const volatile void __iomem *addr) | |||
114 | * I/O port access primitives. | 114 | * I/O port access primitives. |
115 | */ | 115 | */ |
116 | #define IO_SPACE_LIMIT 0xffff | 116 | #define IO_SPACE_LIMIT 0xffff |
117 | #define PCI_IOBASE ((void __iomem *)0xffffffbbfffe0000UL) | 117 | #define PCI_IOBASE ((void __iomem *)(MODULES_VADDR - SZ_2M)) |
118 | 118 | ||
119 | static inline u8 inb(unsigned long addr) | 119 | static inline u8 inb(unsigned long addr) |
120 | { | 120 | { |
@@ -225,9 +225,9 @@ extern void __iounmap(volatile void __iomem *addr); | |||
225 | #define PROT_DEVICE_nGnRE (PROT_DEFAULT | PTE_XN | PTE_ATTRINDX(MT_DEVICE_nGnRE)) | 225 | #define PROT_DEVICE_nGnRE (PROT_DEFAULT | PTE_XN | PTE_ATTRINDX(MT_DEVICE_nGnRE)) |
226 | #define PROT_NORMAL_NC (PROT_DEFAULT | PTE_ATTRINDX(MT_NORMAL_NC)) | 226 | #define PROT_NORMAL_NC (PROT_DEFAULT | PTE_ATTRINDX(MT_NORMAL_NC)) |
227 | 227 | ||
228 | #define ioremap(addr, size) __ioremap((addr), (size), PROT_DEVICE_nGnRE) | 228 | #define ioremap(addr, size) __ioremap((addr), (size), __pgprot(PROT_DEVICE_nGnRE)) |
229 | #define ioremap_nocache(addr, size) __ioremap((addr), (size), PROT_DEVICE_nGnRE) | 229 | #define ioremap_nocache(addr, size) __ioremap((addr), (size), __pgprot(PROT_DEVICE_nGnRE)) |
230 | #define ioremap_wc(addr, size) __ioremap((addr), (size), PROT_NORMAL_NC) | 230 | #define ioremap_wc(addr, size) __ioremap((addr), (size), __pgprot(PROT_NORMAL_NC)) |
231 | #define iounmap __iounmap | 231 | #define iounmap __iounmap |
232 | 232 | ||
233 | #define ARCH_HAS_IOREMAP_WC | 233 | #define ARCH_HAS_IOREMAP_WC |
diff --git a/arch/arm64/include/asm/processor.h b/arch/arm64/include/asm/processor.h index 5d810044feda..77f696c14339 100644 --- a/arch/arm64/include/asm/processor.h +++ b/arch/arm64/include/asm/processor.h | |||
@@ -43,6 +43,8 @@ | |||
43 | #else | 43 | #else |
44 | #define STACK_TOP STACK_TOP_MAX | 44 | #define STACK_TOP STACK_TOP_MAX |
45 | #endif /* CONFIG_COMPAT */ | 45 | #endif /* CONFIG_COMPAT */ |
46 | |||
47 | #define ARCH_LOW_ADDRESS_LIMIT PHYS_MASK | ||
46 | #endif /* __KERNEL__ */ | 48 | #endif /* __KERNEL__ */ |
47 | 49 | ||
48 | struct debug_info { | 50 | struct debug_info { |
diff --git a/arch/arm64/include/asm/unistd.h b/arch/arm64/include/asm/unistd.h index 63f853f8b718..68aff2816e86 100644 --- a/arch/arm64/include/asm/unistd.h +++ b/arch/arm64/include/asm/unistd.h | |||
@@ -14,7 +14,6 @@ | |||
14 | * along with this program. If not, see <http://www.gnu.org/licenses/>. | 14 | * along with this program. If not, see <http://www.gnu.org/licenses/>. |
15 | */ | 15 | */ |
16 | #ifdef CONFIG_COMPAT | 16 | #ifdef CONFIG_COMPAT |
17 | #define __ARCH_WANT_COMPAT_IPC_PARSE_VERSION | ||
18 | #define __ARCH_WANT_COMPAT_STAT64 | 17 | #define __ARCH_WANT_COMPAT_STAT64 |
19 | #define __ARCH_WANT_SYS_GETHOSTNAME | 18 | #define __ARCH_WANT_SYS_GETHOSTNAME |
20 | #define __ARCH_WANT_SYS_PAUSE | 19 | #define __ARCH_WANT_SYS_PAUSE |
diff --git a/arch/arm64/kernel/perf_event.c b/arch/arm64/kernel/perf_event.c index ecbf2d81ec5c..c76c7241125b 100644 --- a/arch/arm64/kernel/perf_event.c +++ b/arch/arm64/kernel/perf_event.c | |||
@@ -613,17 +613,11 @@ enum armv8_pmuv3_perf_types { | |||
613 | ARMV8_PMUV3_PERFCTR_BUS_ACCESS = 0x19, | 613 | ARMV8_PMUV3_PERFCTR_BUS_ACCESS = 0x19, |
614 | ARMV8_PMUV3_PERFCTR_MEM_ERROR = 0x1A, | 614 | ARMV8_PMUV3_PERFCTR_MEM_ERROR = 0x1A, |
615 | ARMV8_PMUV3_PERFCTR_BUS_CYCLES = 0x1D, | 615 | ARMV8_PMUV3_PERFCTR_BUS_CYCLES = 0x1D, |
616 | |||
617 | /* | ||
618 | * This isn't an architected event. | ||
619 | * We detect this event number and use the cycle counter instead. | ||
620 | */ | ||
621 | ARMV8_PMUV3_PERFCTR_CPU_CYCLES = 0xFF, | ||
622 | }; | 616 | }; |
623 | 617 | ||
624 | /* PMUv3 HW events mapping. */ | 618 | /* PMUv3 HW events mapping. */ |
625 | static const unsigned armv8_pmuv3_perf_map[PERF_COUNT_HW_MAX] = { | 619 | static const unsigned armv8_pmuv3_perf_map[PERF_COUNT_HW_MAX] = { |
626 | [PERF_COUNT_HW_CPU_CYCLES] = ARMV8_PMUV3_PERFCTR_CPU_CYCLES, | 620 | [PERF_COUNT_HW_CPU_CYCLES] = ARMV8_PMUV3_PERFCTR_CLOCK_CYCLES, |
627 | [PERF_COUNT_HW_INSTRUCTIONS] = ARMV8_PMUV3_PERFCTR_INSTR_EXECUTED, | 621 | [PERF_COUNT_HW_INSTRUCTIONS] = ARMV8_PMUV3_PERFCTR_INSTR_EXECUTED, |
628 | [PERF_COUNT_HW_CACHE_REFERENCES] = ARMV8_PMUV3_PERFCTR_L1_DCACHE_ACCESS, | 622 | [PERF_COUNT_HW_CACHE_REFERENCES] = ARMV8_PMUV3_PERFCTR_L1_DCACHE_ACCESS, |
629 | [PERF_COUNT_HW_CACHE_MISSES] = ARMV8_PMUV3_PERFCTR_L1_DCACHE_REFILL, | 623 | [PERF_COUNT_HW_CACHE_MISSES] = ARMV8_PMUV3_PERFCTR_L1_DCACHE_REFILL, |
@@ -1106,7 +1100,7 @@ static int armv8pmu_get_event_idx(struct pmu_hw_events *cpuc, | |||
1106 | unsigned long evtype = event->config_base & ARMV8_EVTYPE_EVENT; | 1100 | unsigned long evtype = event->config_base & ARMV8_EVTYPE_EVENT; |
1107 | 1101 | ||
1108 | /* Always place a cycle counter into the cycle counter. */ | 1102 | /* Always place a cycle counter into the cycle counter. */ |
1109 | if (evtype == ARMV8_PMUV3_PERFCTR_CPU_CYCLES) { | 1103 | if (evtype == ARMV8_PMUV3_PERFCTR_CLOCK_CYCLES) { |
1110 | if (test_and_set_bit(ARMV8_IDX_CYCLE_COUNTER, cpuc->used_mask)) | 1104 | if (test_and_set_bit(ARMV8_IDX_CYCLE_COUNTER, cpuc->used_mask)) |
1111 | return -EAGAIN; | 1105 | return -EAGAIN; |
1112 | 1106 | ||
diff --git a/arch/arm64/kernel/process.c b/arch/arm64/kernel/process.c index f22965ea1cfc..e04cebdbb47f 100644 --- a/arch/arm64/kernel/process.c +++ b/arch/arm64/kernel/process.c | |||
@@ -310,24 +310,6 @@ struct task_struct *__switch_to(struct task_struct *prev, | |||
310 | } | 310 | } |
311 | 311 | ||
312 | /* | 312 | /* |
313 | * Fill in the task's elfregs structure for a core dump. | ||
314 | */ | ||
315 | int dump_task_regs(struct task_struct *t, elf_gregset_t *elfregs) | ||
316 | { | ||
317 | elf_core_copy_regs(elfregs, task_pt_regs(t)); | ||
318 | return 1; | ||
319 | } | ||
320 | |||
321 | /* | ||
322 | * fill in the fpe structure for a core dump... | ||
323 | */ | ||
324 | int dump_fpu (struct pt_regs *regs, struct user_fp *fp) | ||
325 | { | ||
326 | return 0; | ||
327 | } | ||
328 | EXPORT_SYMBOL(dump_fpu); | ||
329 | |||
330 | /* | ||
331 | * Shuffle the argument into the correct register before calling the | 313 | * Shuffle the argument into the correct register before calling the |
332 | * thread function. x1 is the thread argument, x2 is the pointer to | 314 | * thread function. x1 is the thread argument, x2 is the pointer to |
333 | * the thread function, and x3 points to the exit function. | 315 | * the thread function, and x3 points to the exit function. |
diff --git a/arch/arm64/kernel/smp.c b/arch/arm64/kernel/smp.c index 226b6bf6e9c2..538300f2273d 100644 --- a/arch/arm64/kernel/smp.c +++ b/arch/arm64/kernel/smp.c | |||
@@ -211,8 +211,7 @@ asmlinkage void __cpuinit secondary_start_kernel(void) | |||
211 | * before we continue. | 211 | * before we continue. |
212 | */ | 212 | */ |
213 | set_cpu_online(cpu, true); | 213 | set_cpu_online(cpu, true); |
214 | while (!cpu_active(cpu)) | 214 | complete(&cpu_running); |
215 | cpu_relax(); | ||
216 | 215 | ||
217 | /* | 216 | /* |
218 | * OK, it's off to the idle thread for us | 217 | * OK, it's off to the idle thread for us |
diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c index efbf7df05d3f..4cd28931dba9 100644 --- a/arch/arm64/mm/init.c +++ b/arch/arm64/mm/init.c | |||
@@ -80,7 +80,7 @@ static void __init zone_sizes_init(unsigned long min, unsigned long max) | |||
80 | #ifdef CONFIG_ZONE_DMA32 | 80 | #ifdef CONFIG_ZONE_DMA32 |
81 | /* 4GB maximum for 32-bit only capable devices */ | 81 | /* 4GB maximum for 32-bit only capable devices */ |
82 | max_dma32 = min(max, MAX_DMA32_PFN); | 82 | max_dma32 = min(max, MAX_DMA32_PFN); |
83 | zone_size[ZONE_DMA32] = max_dma32 - min; | 83 | zone_size[ZONE_DMA32] = max(min, max_dma32) - min; |
84 | #endif | 84 | #endif |
85 | zone_size[ZONE_NORMAL] = max - max_dma32; | 85 | zone_size[ZONE_NORMAL] = max - max_dma32; |
86 | 86 | ||
diff --git a/arch/h8300/include/asm/cache.h b/arch/h8300/include/asm/cache.h index c6350283649d..05887a1d80e5 100644 --- a/arch/h8300/include/asm/cache.h +++ b/arch/h8300/include/asm/cache.h | |||
@@ -2,7 +2,8 @@ | |||
2 | #define __ARCH_H8300_CACHE_H | 2 | #define __ARCH_H8300_CACHE_H |
3 | 3 | ||
4 | /* bytes per L1 cache line */ | 4 | /* bytes per L1 cache line */ |
5 | #define L1_CACHE_BYTES 4 | 5 | #define L1_CACHE_SHIFT 2 |
6 | #define L1_CACHE_BYTES (1 << L1_CACHE_SHIFT) | ||
6 | 7 | ||
7 | /* m68k-elf-gcc 2.95.2 doesn't like these */ | 8 | /* m68k-elf-gcc 2.95.2 doesn't like these */ |
8 | 9 | ||
diff --git a/arch/s390/include/asm/cio.h b/arch/s390/include/asm/cio.h index 55bde6035216..ad2b924167d7 100644 --- a/arch/s390/include/asm/cio.h +++ b/arch/s390/include/asm/cio.h | |||
@@ -9,6 +9,8 @@ | |||
9 | 9 | ||
10 | #define LPM_ANYPATH 0xff | 10 | #define LPM_ANYPATH 0xff |
11 | #define __MAX_CSSID 0 | 11 | #define __MAX_CSSID 0 |
12 | #define __MAX_SUBCHANNEL 65535 | ||
13 | #define __MAX_SSID 3 | ||
12 | 14 | ||
13 | #include <asm/scsw.h> | 15 | #include <asm/scsw.h> |
14 | 16 | ||
diff --git a/arch/s390/include/asm/pgtable.h b/arch/s390/include/asm/pgtable.h index dd647c919a66..2d3b7cb26005 100644 --- a/arch/s390/include/asm/pgtable.h +++ b/arch/s390/include/asm/pgtable.h | |||
@@ -506,12 +506,15 @@ static inline int pud_bad(pud_t pud) | |||
506 | 506 | ||
507 | static inline int pmd_present(pmd_t pmd) | 507 | static inline int pmd_present(pmd_t pmd) |
508 | { | 508 | { |
509 | return (pmd_val(pmd) & _SEGMENT_ENTRY_ORIGIN) != 0UL; | 509 | unsigned long mask = _SEGMENT_ENTRY_INV | _SEGMENT_ENTRY_RO; |
510 | return (pmd_val(pmd) & mask) == _HPAGE_TYPE_NONE || | ||
511 | !(pmd_val(pmd) & _SEGMENT_ENTRY_INV); | ||
510 | } | 512 | } |
511 | 513 | ||
512 | static inline int pmd_none(pmd_t pmd) | 514 | static inline int pmd_none(pmd_t pmd) |
513 | { | 515 | { |
514 | return (pmd_val(pmd) & _SEGMENT_ENTRY_INV) != 0UL; | 516 | return (pmd_val(pmd) & _SEGMENT_ENTRY_INV) && |
517 | !(pmd_val(pmd) & _SEGMENT_ENTRY_RO); | ||
515 | } | 518 | } |
516 | 519 | ||
517 | static inline int pmd_large(pmd_t pmd) | 520 | static inline int pmd_large(pmd_t pmd) |
@@ -1223,6 +1226,11 @@ static inline void __pmd_idte(unsigned long address, pmd_t *pmdp) | |||
1223 | } | 1226 | } |
1224 | 1227 | ||
1225 | #ifdef CONFIG_TRANSPARENT_HUGEPAGE | 1228 | #ifdef CONFIG_TRANSPARENT_HUGEPAGE |
1229 | |||
1230 | #define SEGMENT_NONE __pgprot(_HPAGE_TYPE_NONE) | ||
1231 | #define SEGMENT_RO __pgprot(_HPAGE_TYPE_RO) | ||
1232 | #define SEGMENT_RW __pgprot(_HPAGE_TYPE_RW) | ||
1233 | |||
1226 | #define __HAVE_ARCH_PGTABLE_DEPOSIT | 1234 | #define __HAVE_ARCH_PGTABLE_DEPOSIT |
1227 | extern void pgtable_trans_huge_deposit(struct mm_struct *mm, pgtable_t pgtable); | 1235 | extern void pgtable_trans_huge_deposit(struct mm_struct *mm, pgtable_t pgtable); |
1228 | 1236 | ||
@@ -1242,16 +1250,15 @@ static inline void set_pmd_at(struct mm_struct *mm, unsigned long addr, | |||
1242 | 1250 | ||
1243 | static inline unsigned long massage_pgprot_pmd(pgprot_t pgprot) | 1251 | static inline unsigned long massage_pgprot_pmd(pgprot_t pgprot) |
1244 | { | 1252 | { |
1245 | unsigned long pgprot_pmd = 0; | 1253 | /* |
1246 | 1254 | * pgprot is PAGE_NONE, PAGE_RO, or PAGE_RW (see __Pxxx / __Sxxx) | |
1247 | if (pgprot_val(pgprot) & _PAGE_INVALID) { | 1255 | * Convert to segment table entry format. |
1248 | if (pgprot_val(pgprot) & _PAGE_SWT) | 1256 | */ |
1249 | pgprot_pmd |= _HPAGE_TYPE_NONE; | 1257 | if (pgprot_val(pgprot) == pgprot_val(PAGE_NONE)) |
1250 | pgprot_pmd |= _SEGMENT_ENTRY_INV; | 1258 | return pgprot_val(SEGMENT_NONE); |
1251 | } | 1259 | if (pgprot_val(pgprot) == pgprot_val(PAGE_RO)) |
1252 | if (pgprot_val(pgprot) & _PAGE_RO) | 1260 | return pgprot_val(SEGMENT_RO); |
1253 | pgprot_pmd |= _SEGMENT_ENTRY_RO; | 1261 | return pgprot_val(SEGMENT_RW); |
1254 | return pgprot_pmd; | ||
1255 | } | 1262 | } |
1256 | 1263 | ||
1257 | static inline pmd_t pmd_modify(pmd_t pmd, pgprot_t newprot) | 1264 | static inline pmd_t pmd_modify(pmd_t pmd, pgprot_t newprot) |
@@ -1269,7 +1276,9 @@ static inline pmd_t pmd_mkhuge(pmd_t pmd) | |||
1269 | 1276 | ||
1270 | static inline pmd_t pmd_mkwrite(pmd_t pmd) | 1277 | static inline pmd_t pmd_mkwrite(pmd_t pmd) |
1271 | { | 1278 | { |
1272 | pmd_val(pmd) &= ~_SEGMENT_ENTRY_RO; | 1279 | /* Do not clobber _HPAGE_TYPE_NONE pages! */ |
1280 | if (!(pmd_val(pmd) & _SEGMENT_ENTRY_INV)) | ||
1281 | pmd_val(pmd) &= ~_SEGMENT_ENTRY_RO; | ||
1273 | return pmd; | 1282 | return pmd; |
1274 | } | 1283 | } |
1275 | 1284 | ||
diff --git a/arch/s390/kernel/sclp.S b/arch/s390/kernel/sclp.S index bf053898630d..b6506ee32a36 100644 --- a/arch/s390/kernel/sclp.S +++ b/arch/s390/kernel/sclp.S | |||
@@ -44,6 +44,12 @@ _sclp_wait_int: | |||
44 | #endif | 44 | #endif |
45 | mvc .LoldpswS1-.LbaseS1(16,%r13),0(%r8) | 45 | mvc .LoldpswS1-.LbaseS1(16,%r13),0(%r8) |
46 | mvc 0(16,%r8),0(%r9) | 46 | mvc 0(16,%r8),0(%r9) |
47 | #ifdef CONFIG_64BIT | ||
48 | epsw %r6,%r7 # set current addressing mode | ||
49 | nill %r6,0x1 # in new psw (31 or 64 bit mode) | ||
50 | nilh %r7,0x8000 | ||
51 | stm %r6,%r7,0(%r8) | ||
52 | #endif | ||
47 | lhi %r6,0x0200 # cr mask for ext int (cr0.54) | 53 | lhi %r6,0x0200 # cr mask for ext int (cr0.54) |
48 | ltr %r2,%r2 | 54 | ltr %r2,%r2 |
49 | jz .LsetctS1 | 55 | jz .LsetctS1 |
@@ -87,7 +93,7 @@ _sclp_wait_int: | |||
87 | .long 0x00080000, 0x80000000+.LwaitS1 # PSW to handle ext int | 93 | .long 0x00080000, 0x80000000+.LwaitS1 # PSW to handle ext int |
88 | #ifdef CONFIG_64BIT | 94 | #ifdef CONFIG_64BIT |
89 | .LextpswS1_64: | 95 | .LextpswS1_64: |
90 | .quad 0x0000000180000000, .LwaitS1 # PSW to handle ext int, 64 bit | 96 | .quad 0, .LwaitS1 # PSW to handle ext int, 64 bit |
91 | #endif | 97 | #endif |
92 | .LwaitpswS1: | 98 | .LwaitpswS1: |
93 | .long 0x010a0000, 0x00000000+.LloopS1 # PSW to wait for ext int | 99 | .long 0x010a0000, 0x00000000+.LloopS1 # PSW to wait for ext int |
diff --git a/arch/s390/lib/uaccess_pt.c b/arch/s390/lib/uaccess_pt.c index 2d37bb861faf..9017a63dda3d 100644 --- a/arch/s390/lib/uaccess_pt.c +++ b/arch/s390/lib/uaccess_pt.c | |||
@@ -39,7 +39,7 @@ static __always_inline unsigned long follow_table(struct mm_struct *mm, | |||
39 | pmd = pmd_offset(pud, addr); | 39 | pmd = pmd_offset(pud, addr); |
40 | if (pmd_none(*pmd)) | 40 | if (pmd_none(*pmd)) |
41 | return -0x10UL; | 41 | return -0x10UL; |
42 | if (pmd_huge(*pmd)) { | 42 | if (pmd_large(*pmd)) { |
43 | if (write && (pmd_val(*pmd) & _SEGMENT_ENTRY_RO)) | 43 | if (write && (pmd_val(*pmd) & _SEGMENT_ENTRY_RO)) |
44 | return -0x04UL; | 44 | return -0x04UL; |
45 | return (pmd_val(*pmd) & HPAGE_MASK) + (addr & ~HPAGE_MASK); | 45 | return (pmd_val(*pmd) & HPAGE_MASK) + (addr & ~HPAGE_MASK); |
diff --git a/arch/s390/mm/gup.c b/arch/s390/mm/gup.c index 60acb93a4680..8b8285310b5a 100644 --- a/arch/s390/mm/gup.c +++ b/arch/s390/mm/gup.c | |||
@@ -126,7 +126,7 @@ static inline int gup_pmd_range(pud_t *pudp, pud_t pud, unsigned long addr, | |||
126 | */ | 126 | */ |
127 | if (pmd_none(pmd) || pmd_trans_splitting(pmd)) | 127 | if (pmd_none(pmd) || pmd_trans_splitting(pmd)) |
128 | return 0; | 128 | return 0; |
129 | if (unlikely(pmd_huge(pmd))) { | 129 | if (unlikely(pmd_large(pmd))) { |
130 | if (!gup_huge_pmd(pmdp, pmd, addr, next, | 130 | if (!gup_huge_pmd(pmdp, pmd, addr, next, |
131 | write, pages, nr)) | 131 | write, pages, nr)) |
132 | return 0; | 132 | return 0; |
diff --git a/arch/sparc/Kconfig b/arch/sparc/Kconfig index b6b442b0d793..9f2edb5c5551 100644 --- a/arch/sparc/Kconfig +++ b/arch/sparc/Kconfig | |||
@@ -20,6 +20,7 @@ config SPARC | |||
20 | select HAVE_ARCH_TRACEHOOK | 20 | select HAVE_ARCH_TRACEHOOK |
21 | select SYSCTL_EXCEPTION_TRACE | 21 | select SYSCTL_EXCEPTION_TRACE |
22 | select ARCH_WANT_OPTIONAL_GPIOLIB | 22 | select ARCH_WANT_OPTIONAL_GPIOLIB |
23 | select ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE | ||
23 | select RTC_CLASS | 24 | select RTC_CLASS |
24 | select RTC_DRV_M48T59 | 25 | select RTC_DRV_M48T59 |
25 | select HAVE_IRQ_WORK | 26 | select HAVE_IRQ_WORK |
diff --git a/arch/sparc/crypto/Makefile b/arch/sparc/crypto/Makefile index 6ae1ad5e502b..5d469d81761f 100644 --- a/arch/sparc/crypto/Makefile +++ b/arch/sparc/crypto/Makefile | |||
@@ -13,13 +13,13 @@ obj-$(CONFIG_CRYPTO_DES_SPARC64) += camellia-sparc64.o | |||
13 | 13 | ||
14 | obj-$(CONFIG_CRYPTO_CRC32C_SPARC64) += crc32c-sparc64.o | 14 | obj-$(CONFIG_CRYPTO_CRC32C_SPARC64) += crc32c-sparc64.o |
15 | 15 | ||
16 | sha1-sparc64-y := sha1_asm.o sha1_glue.o crop_devid.o | 16 | sha1-sparc64-y := sha1_asm.o sha1_glue.o |
17 | sha256-sparc64-y := sha256_asm.o sha256_glue.o crop_devid.o | 17 | sha256-sparc64-y := sha256_asm.o sha256_glue.o |
18 | sha512-sparc64-y := sha512_asm.o sha512_glue.o crop_devid.o | 18 | sha512-sparc64-y := sha512_asm.o sha512_glue.o |
19 | md5-sparc64-y := md5_asm.o md5_glue.o crop_devid.o | 19 | md5-sparc64-y := md5_asm.o md5_glue.o |
20 | 20 | ||
21 | aes-sparc64-y := aes_asm.o aes_glue.o crop_devid.o | 21 | aes-sparc64-y := aes_asm.o aes_glue.o |
22 | des-sparc64-y := des_asm.o des_glue.o crop_devid.o | 22 | des-sparc64-y := des_asm.o des_glue.o |
23 | camellia-sparc64-y := camellia_asm.o camellia_glue.o crop_devid.o | 23 | camellia-sparc64-y := camellia_asm.o camellia_glue.o |
24 | 24 | ||
25 | crc32c-sparc64-y := crc32c_asm.o crc32c_glue.o crop_devid.o | 25 | crc32c-sparc64-y := crc32c_asm.o crc32c_glue.o |
diff --git a/arch/sparc/crypto/aes_glue.c b/arch/sparc/crypto/aes_glue.c index 8f1c9980f637..3965d1d36dfa 100644 --- a/arch/sparc/crypto/aes_glue.c +++ b/arch/sparc/crypto/aes_glue.c | |||
@@ -475,3 +475,5 @@ MODULE_LICENSE("GPL"); | |||
475 | MODULE_DESCRIPTION("AES Secure Hash Algorithm, sparc64 aes opcode accelerated"); | 475 | MODULE_DESCRIPTION("AES Secure Hash Algorithm, sparc64 aes opcode accelerated"); |
476 | 476 | ||
477 | MODULE_ALIAS("aes"); | 477 | MODULE_ALIAS("aes"); |
478 | |||
479 | #include "crop_devid.c" | ||
diff --git a/arch/sparc/crypto/camellia_glue.c b/arch/sparc/crypto/camellia_glue.c index 42905c084299..62c89af3fd3f 100644 --- a/arch/sparc/crypto/camellia_glue.c +++ b/arch/sparc/crypto/camellia_glue.c | |||
@@ -320,3 +320,5 @@ MODULE_LICENSE("GPL"); | |||
320 | MODULE_DESCRIPTION("Camellia Cipher Algorithm, sparc64 camellia opcode accelerated"); | 320 | MODULE_DESCRIPTION("Camellia Cipher Algorithm, sparc64 camellia opcode accelerated"); |
321 | 321 | ||
322 | MODULE_ALIAS("aes"); | 322 | MODULE_ALIAS("aes"); |
323 | |||
324 | #include "crop_devid.c" | ||
diff --git a/arch/sparc/crypto/crc32c_glue.c b/arch/sparc/crypto/crc32c_glue.c index 0bd89cea8d8e..5162fad912ce 100644 --- a/arch/sparc/crypto/crc32c_glue.c +++ b/arch/sparc/crypto/crc32c_glue.c | |||
@@ -177,3 +177,5 @@ MODULE_LICENSE("GPL"); | |||
177 | MODULE_DESCRIPTION("CRC32c (Castagnoli), sparc64 crc32c opcode accelerated"); | 177 | MODULE_DESCRIPTION("CRC32c (Castagnoli), sparc64 crc32c opcode accelerated"); |
178 | 178 | ||
179 | MODULE_ALIAS("crc32c"); | 179 | MODULE_ALIAS("crc32c"); |
180 | |||
181 | #include "crop_devid.c" | ||
diff --git a/arch/sparc/crypto/des_glue.c b/arch/sparc/crypto/des_glue.c index c4940c2d3073..41524cebcc49 100644 --- a/arch/sparc/crypto/des_glue.c +++ b/arch/sparc/crypto/des_glue.c | |||
@@ -527,3 +527,5 @@ MODULE_LICENSE("GPL"); | |||
527 | MODULE_DESCRIPTION("DES & Triple DES EDE Cipher Algorithms, sparc64 des opcode accelerated"); | 527 | MODULE_DESCRIPTION("DES & Triple DES EDE Cipher Algorithms, sparc64 des opcode accelerated"); |
528 | 528 | ||
529 | MODULE_ALIAS("des"); | 529 | MODULE_ALIAS("des"); |
530 | |||
531 | #include "crop_devid.c" | ||
diff --git a/arch/sparc/crypto/md5_glue.c b/arch/sparc/crypto/md5_glue.c index 603d723038ce..09a9ea1dfb69 100644 --- a/arch/sparc/crypto/md5_glue.c +++ b/arch/sparc/crypto/md5_glue.c | |||
@@ -186,3 +186,5 @@ MODULE_LICENSE("GPL"); | |||
186 | MODULE_DESCRIPTION("MD5 Secure Hash Algorithm, sparc64 md5 opcode accelerated"); | 186 | MODULE_DESCRIPTION("MD5 Secure Hash Algorithm, sparc64 md5 opcode accelerated"); |
187 | 187 | ||
188 | MODULE_ALIAS("md5"); | 188 | MODULE_ALIAS("md5"); |
189 | |||
190 | #include "crop_devid.c" | ||
diff --git a/arch/sparc/crypto/sha1_glue.c b/arch/sparc/crypto/sha1_glue.c index 2bbb20bee9f1..6cd5f29e1e0d 100644 --- a/arch/sparc/crypto/sha1_glue.c +++ b/arch/sparc/crypto/sha1_glue.c | |||
@@ -181,3 +181,5 @@ MODULE_LICENSE("GPL"); | |||
181 | MODULE_DESCRIPTION("SHA1 Secure Hash Algorithm, sparc64 sha1 opcode accelerated"); | 181 | MODULE_DESCRIPTION("SHA1 Secure Hash Algorithm, sparc64 sha1 opcode accelerated"); |
182 | 182 | ||
183 | MODULE_ALIAS("sha1"); | 183 | MODULE_ALIAS("sha1"); |
184 | |||
185 | #include "crop_devid.c" | ||
diff --git a/arch/sparc/crypto/sha256_glue.c b/arch/sparc/crypto/sha256_glue.c index 591e656bd891..04f555ab2680 100644 --- a/arch/sparc/crypto/sha256_glue.c +++ b/arch/sparc/crypto/sha256_glue.c | |||
@@ -239,3 +239,5 @@ MODULE_DESCRIPTION("SHA-224 and SHA-256 Secure Hash Algorithm, sparc64 sha256 op | |||
239 | 239 | ||
240 | MODULE_ALIAS("sha224"); | 240 | MODULE_ALIAS("sha224"); |
241 | MODULE_ALIAS("sha256"); | 241 | MODULE_ALIAS("sha256"); |
242 | |||
243 | #include "crop_devid.c" | ||
diff --git a/arch/sparc/crypto/sha512_glue.c b/arch/sparc/crypto/sha512_glue.c index 486f0a2b7001..f04d1994d19a 100644 --- a/arch/sparc/crypto/sha512_glue.c +++ b/arch/sparc/crypto/sha512_glue.c | |||
@@ -224,3 +224,5 @@ MODULE_DESCRIPTION("SHA-384 and SHA-512 Secure Hash Algorithm, sparc64 sha512 op | |||
224 | 224 | ||
225 | MODULE_ALIAS("sha384"); | 225 | MODULE_ALIAS("sha384"); |
226 | MODULE_ALIAS("sha512"); | 226 | MODULE_ALIAS("sha512"); |
227 | |||
228 | #include "crop_devid.c" | ||
diff --git a/arch/sparc/include/asm/atomic_64.h b/arch/sparc/include/asm/atomic_64.h index ce35a1cf1a20..be56a244c9cf 100644 --- a/arch/sparc/include/asm/atomic_64.h +++ b/arch/sparc/include/asm/atomic_64.h | |||
@@ -1,7 +1,7 @@ | |||
1 | /* atomic.h: Thankfully the V9 is at least reasonable for this | 1 | /* atomic.h: Thankfully the V9 is at least reasonable for this |
2 | * stuff. | 2 | * stuff. |
3 | * | 3 | * |
4 | * Copyright (C) 1996, 1997, 2000 David S. Miller (davem@redhat.com) | 4 | * Copyright (C) 1996, 1997, 2000, 2012 David S. Miller (davem@redhat.com) |
5 | */ | 5 | */ |
6 | 6 | ||
7 | #ifndef __ARCH_SPARC64_ATOMIC__ | 7 | #ifndef __ARCH_SPARC64_ATOMIC__ |
@@ -106,6 +106,8 @@ static inline long atomic64_add_unless(atomic64_t *v, long a, long u) | |||
106 | 106 | ||
107 | #define atomic64_inc_not_zero(v) atomic64_add_unless((v), 1, 0) | 107 | #define atomic64_inc_not_zero(v) atomic64_add_unless((v), 1, 0) |
108 | 108 | ||
109 | extern long atomic64_dec_if_positive(atomic64_t *v); | ||
110 | |||
109 | /* Atomic operations are already serializing */ | 111 | /* Atomic operations are already serializing */ |
110 | #define smp_mb__before_atomic_dec() barrier() | 112 | #define smp_mb__before_atomic_dec() barrier() |
111 | #define smp_mb__after_atomic_dec() barrier() | 113 | #define smp_mb__after_atomic_dec() barrier() |
diff --git a/arch/sparc/include/asm/backoff.h b/arch/sparc/include/asm/backoff.h index db3af0d30fb1..4e02086b839c 100644 --- a/arch/sparc/include/asm/backoff.h +++ b/arch/sparc/include/asm/backoff.h | |||
@@ -1,6 +1,46 @@ | |||
1 | #ifndef _SPARC64_BACKOFF_H | 1 | #ifndef _SPARC64_BACKOFF_H |
2 | #define _SPARC64_BACKOFF_H | 2 | #define _SPARC64_BACKOFF_H |
3 | 3 | ||
4 | /* The macros in this file implement an exponential backoff facility | ||
5 | * for atomic operations. | ||
6 | * | ||
7 | * When multiple threads compete on an atomic operation, it is | ||
8 | * possible for one thread to be continually denied a successful | ||
9 | * completion of the compare-and-swap instruction. Heavily | ||
10 | * threaded cpu implementations like Niagara can compound this | ||
11 | * problem even further. | ||
12 | * | ||
13 | * When an atomic operation fails and needs to be retried, we spin a | ||
14 | * certain number of times. At each subsequent failure of the same | ||
15 | * operation we double the spin count, realizing an exponential | ||
16 | * backoff. | ||
17 | * | ||
18 | * When we spin, we try to use an operation that will cause the | ||
19 | * current cpu strand to block, and therefore make the core fully | ||
20 | * available to any other other runnable strands. There are two | ||
21 | * options, based upon cpu capabilities. | ||
22 | * | ||
23 | * On all cpus prior to SPARC-T4 we do three dummy reads of the | ||
24 | * condition code register. Each read blocks the strand for something | ||
25 | * between 40 and 50 cpu cycles. | ||
26 | * | ||
27 | * For SPARC-T4 and later we have a special "pause" instruction | ||
28 | * available. This is implemented using writes to register %asr27. | ||
29 | * The cpu will block the number of cycles written into the register, | ||
30 | * unless a disrupting trap happens first. SPARC-T4 specifically | ||
31 | * implements pause with a granularity of 8 cycles. Each strand has | ||
32 | * an internal pause counter which decrements every 8 cycles. So the | ||
33 | * chip shifts the %asr27 value down by 3 bits, and writes the result | ||
34 | * into the pause counter. If a value smaller than 8 is written, the | ||
35 | * chip blocks for 1 cycle. | ||
36 | * | ||
37 | * To achieve the same amount of backoff as the three %ccr reads give | ||
38 | * on earlier chips, we shift the backoff value up by 7 bits. (Three | ||
39 | * %ccr reads block for about 128 cycles, 1 << 7 == 128) We write the | ||
40 | * whole amount we want to block into the pause register, rather than | ||
41 | * loop writing 128 each time. | ||
42 | */ | ||
43 | |||
4 | #define BACKOFF_LIMIT (4 * 1024) | 44 | #define BACKOFF_LIMIT (4 * 1024) |
5 | 45 | ||
6 | #ifdef CONFIG_SMP | 46 | #ifdef CONFIG_SMP |
@@ -11,16 +51,25 @@ | |||
11 | #define BACKOFF_LABEL(spin_label, continue_label) \ | 51 | #define BACKOFF_LABEL(spin_label, continue_label) \ |
12 | spin_label | 52 | spin_label |
13 | 53 | ||
14 | #define BACKOFF_SPIN(reg, tmp, label) \ | 54 | #define BACKOFF_SPIN(reg, tmp, label) \ |
15 | mov reg, tmp; \ | 55 | mov reg, tmp; \ |
16 | 88: brnz,pt tmp, 88b; \ | 56 | 88: rd %ccr, %g0; \ |
17 | sub tmp, 1, tmp; \ | 57 | rd %ccr, %g0; \ |
18 | set BACKOFF_LIMIT, tmp; \ | 58 | rd %ccr, %g0; \ |
19 | cmp reg, tmp; \ | 59 | .section .pause_3insn_patch,"ax";\ |
20 | bg,pn %xcc, label; \ | 60 | .word 88b; \ |
21 | nop; \ | 61 | sllx tmp, 7, tmp; \ |
22 | ba,pt %xcc, label; \ | 62 | wr tmp, 0, %asr27; \ |
23 | sllx reg, 1, reg; | 63 | clr tmp; \ |
64 | .previous; \ | ||
65 | brnz,pt tmp, 88b; \ | ||
66 | sub tmp, 1, tmp; \ | ||
67 | set BACKOFF_LIMIT, tmp; \ | ||
68 | cmp reg, tmp; \ | ||
69 | bg,pn %xcc, label; \ | ||
70 | nop; \ | ||
71 | ba,pt %xcc, label; \ | ||
72 | sllx reg, 1, reg; | ||
24 | 73 | ||
25 | #else | 74 | #else |
26 | 75 | ||
diff --git a/arch/sparc/include/asm/compat.h b/arch/sparc/include/asm/compat.h index cef99fbc0a21..830502fe62b4 100644 --- a/arch/sparc/include/asm/compat.h +++ b/arch/sparc/include/asm/compat.h | |||
@@ -232,9 +232,10 @@ static inline void __user *arch_compat_alloc_user_space(long len) | |||
232 | struct pt_regs *regs = current_thread_info()->kregs; | 232 | struct pt_regs *regs = current_thread_info()->kregs; |
233 | unsigned long usp = regs->u_regs[UREG_I6]; | 233 | unsigned long usp = regs->u_regs[UREG_I6]; |
234 | 234 | ||
235 | if (!(test_thread_flag(TIF_32BIT))) | 235 | if (test_thread_64bit_stack(usp)) |
236 | usp += STACK_BIAS; | 236 | usp += STACK_BIAS; |
237 | else | 237 | |
238 | if (test_thread_flag(TIF_32BIT)) | ||
238 | usp &= 0xffffffffUL; | 239 | usp &= 0xffffffffUL; |
239 | 240 | ||
240 | usp -= len; | 241 | usp -= len; |
diff --git a/arch/sparc/include/asm/processor_64.h b/arch/sparc/include/asm/processor_64.h index 4e5a483122a0..721e25f0e2ea 100644 --- a/arch/sparc/include/asm/processor_64.h +++ b/arch/sparc/include/asm/processor_64.h | |||
@@ -196,7 +196,22 @@ extern unsigned long get_wchan(struct task_struct *task); | |||
196 | #define KSTK_EIP(tsk) (task_pt_regs(tsk)->tpc) | 196 | #define KSTK_EIP(tsk) (task_pt_regs(tsk)->tpc) |
197 | #define KSTK_ESP(tsk) (task_pt_regs(tsk)->u_regs[UREG_FP]) | 197 | #define KSTK_ESP(tsk) (task_pt_regs(tsk)->u_regs[UREG_FP]) |
198 | 198 | ||
199 | #define cpu_relax() barrier() | 199 | /* Please see the commentary in asm/backoff.h for a description of |
200 | * what these instructions are doing and how they have been choosen. | ||
201 | * To make a long story short, we are trying to yield the current cpu | ||
202 | * strand during busy loops. | ||
203 | */ | ||
204 | #define cpu_relax() asm volatile("\n99:\n\t" \ | ||
205 | "rd %%ccr, %%g0\n\t" \ | ||
206 | "rd %%ccr, %%g0\n\t" \ | ||
207 | "rd %%ccr, %%g0\n\t" \ | ||
208 | ".section .pause_3insn_patch,\"ax\"\n\t"\ | ||
209 | ".word 99b\n\t" \ | ||
210 | "wr %%g0, 128, %%asr27\n\t" \ | ||
211 | "nop\n\t" \ | ||
212 | "nop\n\t" \ | ||
213 | ".previous" \ | ||
214 | ::: "memory") | ||
200 | 215 | ||
201 | /* Prefetch support. This is tuned for UltraSPARC-III and later. | 216 | /* Prefetch support. This is tuned for UltraSPARC-III and later. |
202 | * UltraSPARC-I will treat these as nops, and UltraSPARC-II has | 217 | * UltraSPARC-I will treat these as nops, and UltraSPARC-II has |
diff --git a/arch/sparc/include/asm/prom.h b/arch/sparc/include/asm/prom.h index c28765110706..f93003123bce 100644 --- a/arch/sparc/include/asm/prom.h +++ b/arch/sparc/include/asm/prom.h | |||
@@ -63,5 +63,10 @@ extern char *of_console_options; | |||
63 | extern void irq_trans_init(struct device_node *dp); | 63 | extern void irq_trans_init(struct device_node *dp); |
64 | extern char *build_path_component(struct device_node *dp); | 64 | extern char *build_path_component(struct device_node *dp); |
65 | 65 | ||
66 | /* SPARC has a local implementation */ | ||
67 | extern int of_address_to_resource(struct device_node *dev, int index, | ||
68 | struct resource *r); | ||
69 | #define of_address_to_resource of_address_to_resource | ||
70 | |||
66 | #endif /* __KERNEL__ */ | 71 | #endif /* __KERNEL__ */ |
67 | #endif /* _SPARC_PROM_H */ | 72 | #endif /* _SPARC_PROM_H */ |
diff --git a/arch/sparc/include/asm/thread_info_64.h b/arch/sparc/include/asm/thread_info_64.h index 4e2276631081..a3fe4dcc0aa6 100644 --- a/arch/sparc/include/asm/thread_info_64.h +++ b/arch/sparc/include/asm/thread_info_64.h | |||
@@ -259,6 +259,11 @@ static inline bool test_and_clear_restore_sigmask(void) | |||
259 | 259 | ||
260 | #define tsk_is_polling(t) test_tsk_thread_flag(t, TIF_POLLING_NRFLAG) | 260 | #define tsk_is_polling(t) test_tsk_thread_flag(t, TIF_POLLING_NRFLAG) |
261 | 261 | ||
262 | #define thread32_stack_is_64bit(__SP) (((__SP) & 0x1) != 0) | ||
263 | #define test_thread_64bit_stack(__SP) \ | ||
264 | ((test_thread_flag(TIF_32BIT) && !thread32_stack_is_64bit(__SP)) ? \ | ||
265 | false : true) | ||
266 | |||
262 | #endif /* !__ASSEMBLY__ */ | 267 | #endif /* !__ASSEMBLY__ */ |
263 | 268 | ||
264 | #endif /* __KERNEL__ */ | 269 | #endif /* __KERNEL__ */ |
diff --git a/arch/sparc/include/asm/ttable.h b/arch/sparc/include/asm/ttable.h index 48f2807d3265..71b5a67522ab 100644 --- a/arch/sparc/include/asm/ttable.h +++ b/arch/sparc/include/asm/ttable.h | |||
@@ -372,7 +372,9 @@ etrap_spill_fixup_64bit: \ | |||
372 | 372 | ||
373 | /* Normal 32bit spill */ | 373 | /* Normal 32bit spill */ |
374 | #define SPILL_2_GENERIC(ASI) \ | 374 | #define SPILL_2_GENERIC(ASI) \ |
375 | srl %sp, 0, %sp; \ | 375 | and %sp, 1, %g3; \ |
376 | brnz,pn %g3, (. - (128 + 4)); \ | ||
377 | srl %sp, 0, %sp; \ | ||
376 | stwa %l0, [%sp + %g0] ASI; \ | 378 | stwa %l0, [%sp + %g0] ASI; \ |
377 | mov 0x04, %g3; \ | 379 | mov 0x04, %g3; \ |
378 | stwa %l1, [%sp + %g3] ASI; \ | 380 | stwa %l1, [%sp + %g3] ASI; \ |
@@ -398,14 +400,16 @@ etrap_spill_fixup_64bit: \ | |||
398 | stwa %i6, [%g1 + %g0] ASI; \ | 400 | stwa %i6, [%g1 + %g0] ASI; \ |
399 | stwa %i7, [%g1 + %g3] ASI; \ | 401 | stwa %i7, [%g1 + %g3] ASI; \ |
400 | saved; \ | 402 | saved; \ |
401 | retry; nop; nop; \ | 403 | retry; \ |
402 | b,a,pt %xcc, spill_fixup_dax; \ | 404 | b,a,pt %xcc, spill_fixup_dax; \ |
403 | b,a,pt %xcc, spill_fixup_mna; \ | 405 | b,a,pt %xcc, spill_fixup_mna; \ |
404 | b,a,pt %xcc, spill_fixup; | 406 | b,a,pt %xcc, spill_fixup; |
405 | 407 | ||
406 | #define SPILL_2_GENERIC_ETRAP \ | 408 | #define SPILL_2_GENERIC_ETRAP \ |
407 | etrap_user_spill_32bit: \ | 409 | etrap_user_spill_32bit: \ |
408 | srl %sp, 0, %sp; \ | 410 | and %sp, 1, %g3; \ |
411 | brnz,pn %g3, etrap_user_spill_64bit; \ | ||
412 | srl %sp, 0, %sp; \ | ||
409 | stwa %l0, [%sp + 0x00] %asi; \ | 413 | stwa %l0, [%sp + 0x00] %asi; \ |
410 | stwa %l1, [%sp + 0x04] %asi; \ | 414 | stwa %l1, [%sp + 0x04] %asi; \ |
411 | stwa %l2, [%sp + 0x08] %asi; \ | 415 | stwa %l2, [%sp + 0x08] %asi; \ |
@@ -427,7 +431,7 @@ etrap_user_spill_32bit: \ | |||
427 | ba,pt %xcc, etrap_save; \ | 431 | ba,pt %xcc, etrap_save; \ |
428 | wrpr %g1, %cwp; \ | 432 | wrpr %g1, %cwp; \ |
429 | nop; nop; nop; nop; \ | 433 | nop; nop; nop; nop; \ |
430 | nop; nop; nop; nop; \ | 434 | nop; nop; \ |
431 | ba,a,pt %xcc, etrap_spill_fixup_32bit; \ | 435 | ba,a,pt %xcc, etrap_spill_fixup_32bit; \ |
432 | ba,a,pt %xcc, etrap_spill_fixup_32bit; \ | 436 | ba,a,pt %xcc, etrap_spill_fixup_32bit; \ |
433 | ba,a,pt %xcc, etrap_spill_fixup_32bit; | 437 | ba,a,pt %xcc, etrap_spill_fixup_32bit; |
@@ -592,7 +596,9 @@ user_rtt_fill_64bit: \ | |||
592 | 596 | ||
593 | /* Normal 32bit fill */ | 597 | /* Normal 32bit fill */ |
594 | #define FILL_2_GENERIC(ASI) \ | 598 | #define FILL_2_GENERIC(ASI) \ |
595 | srl %sp, 0, %sp; \ | 599 | and %sp, 1, %g3; \ |
600 | brnz,pn %g3, (. - (128 + 4)); \ | ||
601 | srl %sp, 0, %sp; \ | ||
596 | lduwa [%sp + %g0] ASI, %l0; \ | 602 | lduwa [%sp + %g0] ASI, %l0; \ |
597 | mov 0x04, %g2; \ | 603 | mov 0x04, %g2; \ |
598 | mov 0x08, %g3; \ | 604 | mov 0x08, %g3; \ |
@@ -616,14 +622,16 @@ user_rtt_fill_64bit: \ | |||
616 | lduwa [%g1 + %g3] ASI, %i6; \ | 622 | lduwa [%g1 + %g3] ASI, %i6; \ |
617 | lduwa [%g1 + %g5] ASI, %i7; \ | 623 | lduwa [%g1 + %g5] ASI, %i7; \ |
618 | restored; \ | 624 | restored; \ |
619 | retry; nop; nop; nop; nop; \ | 625 | retry; nop; nop; \ |
620 | b,a,pt %xcc, fill_fixup_dax; \ | 626 | b,a,pt %xcc, fill_fixup_dax; \ |
621 | b,a,pt %xcc, fill_fixup_mna; \ | 627 | b,a,pt %xcc, fill_fixup_mna; \ |
622 | b,a,pt %xcc, fill_fixup; | 628 | b,a,pt %xcc, fill_fixup; |
623 | 629 | ||
624 | #define FILL_2_GENERIC_RTRAP \ | 630 | #define FILL_2_GENERIC_RTRAP \ |
625 | user_rtt_fill_32bit: \ | 631 | user_rtt_fill_32bit: \ |
626 | srl %sp, 0, %sp; \ | 632 | and %sp, 1, %g3; \ |
633 | brnz,pn %g3, user_rtt_fill_64bit; \ | ||
634 | srl %sp, 0, %sp; \ | ||
627 | lduwa [%sp + 0x00] %asi, %l0; \ | 635 | lduwa [%sp + 0x00] %asi, %l0; \ |
628 | lduwa [%sp + 0x04] %asi, %l1; \ | 636 | lduwa [%sp + 0x04] %asi, %l1; \ |
629 | lduwa [%sp + 0x08] %asi, %l2; \ | 637 | lduwa [%sp + 0x08] %asi, %l2; \ |
@@ -643,7 +651,7 @@ user_rtt_fill_32bit: \ | |||
643 | ba,pt %xcc, user_rtt_pre_restore; \ | 651 | ba,pt %xcc, user_rtt_pre_restore; \ |
644 | restored; \ | 652 | restored; \ |
645 | nop; nop; nop; nop; nop; \ | 653 | nop; nop; nop; nop; nop; \ |
646 | nop; nop; nop; nop; nop; \ | 654 | nop; nop; nop; \ |
647 | ba,a,pt %xcc, user_rtt_fill_fixup; \ | 655 | ba,a,pt %xcc, user_rtt_fill_fixup; \ |
648 | ba,a,pt %xcc, user_rtt_fill_fixup; \ | 656 | ba,a,pt %xcc, user_rtt_fill_fixup; \ |
649 | ba,a,pt %xcc, user_rtt_fill_fixup; | 657 | ba,a,pt %xcc, user_rtt_fill_fixup; |
diff --git a/arch/sparc/include/uapi/asm/unistd.h b/arch/sparc/include/uapi/asm/unistd.h index 8974ef7ae920..cac719d1bc5c 100644 --- a/arch/sparc/include/uapi/asm/unistd.h +++ b/arch/sparc/include/uapi/asm/unistd.h | |||
@@ -405,8 +405,13 @@ | |||
405 | #define __NR_setns 337 | 405 | #define __NR_setns 337 |
406 | #define __NR_process_vm_readv 338 | 406 | #define __NR_process_vm_readv 338 |
407 | #define __NR_process_vm_writev 339 | 407 | #define __NR_process_vm_writev 339 |
408 | #define __NR_kern_features 340 | ||
409 | #define __NR_kcmp 341 | ||
408 | 410 | ||
409 | #define NR_syscalls 340 | 411 | #define NR_syscalls 342 |
412 | |||
413 | /* Bitmask values returned from kern_features system call. */ | ||
414 | #define KERN_FEATURE_MIXED_MODE_STACK 0x00000001 | ||
410 | 415 | ||
411 | #ifdef __32bit_syscall_numbers__ | 416 | #ifdef __32bit_syscall_numbers__ |
412 | /* Sparc 32-bit only has the "setresuid32", "getresuid32" variants, | 417 | /* Sparc 32-bit only has the "setresuid32", "getresuid32" variants, |
diff --git a/arch/sparc/kernel/entry.h b/arch/sparc/kernel/entry.h index 0c218e4c0881..cc3c5cb47cda 100644 --- a/arch/sparc/kernel/entry.h +++ b/arch/sparc/kernel/entry.h | |||
@@ -59,6 +59,13 @@ struct popc_6insn_patch_entry { | |||
59 | extern struct popc_6insn_patch_entry __popc_6insn_patch, | 59 | extern struct popc_6insn_patch_entry __popc_6insn_patch, |
60 | __popc_6insn_patch_end; | 60 | __popc_6insn_patch_end; |
61 | 61 | ||
62 | struct pause_patch_entry { | ||
63 | unsigned int addr; | ||
64 | unsigned int insns[3]; | ||
65 | }; | ||
66 | extern struct pause_patch_entry __pause_3insn_patch, | ||
67 | __pause_3insn_patch_end; | ||
68 | |||
62 | extern void __init per_cpu_patch(void); | 69 | extern void __init per_cpu_patch(void); |
63 | extern void sun4v_patch_1insn_range(struct sun4v_1insn_patch_entry *, | 70 | extern void sun4v_patch_1insn_range(struct sun4v_1insn_patch_entry *, |
64 | struct sun4v_1insn_patch_entry *); | 71 | struct sun4v_1insn_patch_entry *); |
diff --git a/arch/sparc/kernel/leon_kernel.c b/arch/sparc/kernel/leon_kernel.c index f8b6eee40bde..87f60ee65433 100644 --- a/arch/sparc/kernel/leon_kernel.c +++ b/arch/sparc/kernel/leon_kernel.c | |||
@@ -56,11 +56,13 @@ static inline unsigned int leon_eirq_get(int cpu) | |||
56 | static void leon_handle_ext_irq(unsigned int irq, struct irq_desc *desc) | 56 | static void leon_handle_ext_irq(unsigned int irq, struct irq_desc *desc) |
57 | { | 57 | { |
58 | unsigned int eirq; | 58 | unsigned int eirq; |
59 | struct irq_bucket *p; | ||
59 | int cpu = sparc_leon3_cpuid(); | 60 | int cpu = sparc_leon3_cpuid(); |
60 | 61 | ||
61 | eirq = leon_eirq_get(cpu); | 62 | eirq = leon_eirq_get(cpu); |
62 | if ((eirq & 0x10) && irq_map[eirq]->irq) /* bit4 tells if IRQ happened */ | 63 | p = irq_map[eirq]; |
63 | generic_handle_irq(irq_map[eirq]->irq); | 64 | if ((eirq & 0x10) && p && p->irq) /* bit4 tells if IRQ happened */ |
65 | generic_handle_irq(p->irq); | ||
64 | } | 66 | } |
65 | 67 | ||
66 | /* The extended IRQ controller has been found, this function registers it */ | 68 | /* The extended IRQ controller has been found, this function registers it */ |
diff --git a/arch/sparc/kernel/perf_event.c b/arch/sparc/kernel/perf_event.c index 885a8af74064..b5c38faa4ead 100644 --- a/arch/sparc/kernel/perf_event.c +++ b/arch/sparc/kernel/perf_event.c | |||
@@ -1762,15 +1762,25 @@ static void perf_callchain_user_32(struct perf_callchain_entry *entry, | |||
1762 | 1762 | ||
1763 | ufp = regs->u_regs[UREG_I6] & 0xffffffffUL; | 1763 | ufp = regs->u_regs[UREG_I6] & 0xffffffffUL; |
1764 | do { | 1764 | do { |
1765 | struct sparc_stackf32 *usf, sf; | ||
1766 | unsigned long pc; | 1765 | unsigned long pc; |
1767 | 1766 | ||
1768 | usf = (struct sparc_stackf32 *) ufp; | 1767 | if (thread32_stack_is_64bit(ufp)) { |
1769 | if (__copy_from_user_inatomic(&sf, usf, sizeof(sf))) | 1768 | struct sparc_stackf *usf, sf; |
1770 | break; | ||
1771 | 1769 | ||
1772 | pc = sf.callers_pc; | 1770 | ufp += STACK_BIAS; |
1773 | ufp = (unsigned long)sf.fp; | 1771 | usf = (struct sparc_stackf *) ufp; |
1772 | if (__copy_from_user_inatomic(&sf, usf, sizeof(sf))) | ||
1773 | break; | ||
1774 | pc = sf.callers_pc & 0xffffffff; | ||
1775 | ufp = ((unsigned long) sf.fp) & 0xffffffff; | ||
1776 | } else { | ||
1777 | struct sparc_stackf32 *usf, sf; | ||
1778 | usf = (struct sparc_stackf32 *) ufp; | ||
1779 | if (__copy_from_user_inatomic(&sf, usf, sizeof(sf))) | ||
1780 | break; | ||
1781 | pc = sf.callers_pc; | ||
1782 | ufp = (unsigned long)sf.fp; | ||
1783 | } | ||
1774 | perf_callchain_store(entry, pc); | 1784 | perf_callchain_store(entry, pc); |
1775 | } while (entry->nr < PERF_MAX_STACK_DEPTH); | 1785 | } while (entry->nr < PERF_MAX_STACK_DEPTH); |
1776 | } | 1786 | } |
diff --git a/arch/sparc/kernel/process_64.c b/arch/sparc/kernel/process_64.c index d778248ef3f8..c6e0c2910043 100644 --- a/arch/sparc/kernel/process_64.c +++ b/arch/sparc/kernel/process_64.c | |||
@@ -452,13 +452,16 @@ void flush_thread(void) | |||
452 | /* It's a bit more tricky when 64-bit tasks are involved... */ | 452 | /* It's a bit more tricky when 64-bit tasks are involved... */ |
453 | static unsigned long clone_stackframe(unsigned long csp, unsigned long psp) | 453 | static unsigned long clone_stackframe(unsigned long csp, unsigned long psp) |
454 | { | 454 | { |
455 | bool stack_64bit = test_thread_64bit_stack(psp); | ||
455 | unsigned long fp, distance, rval; | 456 | unsigned long fp, distance, rval; |
456 | 457 | ||
457 | if (!(test_thread_flag(TIF_32BIT))) { | 458 | if (stack_64bit) { |
458 | csp += STACK_BIAS; | 459 | csp += STACK_BIAS; |
459 | psp += STACK_BIAS; | 460 | psp += STACK_BIAS; |
460 | __get_user(fp, &(((struct reg_window __user *)psp)->ins[6])); | 461 | __get_user(fp, &(((struct reg_window __user *)psp)->ins[6])); |
461 | fp += STACK_BIAS; | 462 | fp += STACK_BIAS; |
463 | if (test_thread_flag(TIF_32BIT)) | ||
464 | fp &= 0xffffffff; | ||
462 | } else | 465 | } else |
463 | __get_user(fp, &(((struct reg_window32 __user *)psp)->ins[6])); | 466 | __get_user(fp, &(((struct reg_window32 __user *)psp)->ins[6])); |
464 | 467 | ||
@@ -472,7 +475,7 @@ static unsigned long clone_stackframe(unsigned long csp, unsigned long psp) | |||
472 | rval = (csp - distance); | 475 | rval = (csp - distance); |
473 | if (copy_in_user((void __user *) rval, (void __user *) psp, distance)) | 476 | if (copy_in_user((void __user *) rval, (void __user *) psp, distance)) |
474 | rval = 0; | 477 | rval = 0; |
475 | else if (test_thread_flag(TIF_32BIT)) { | 478 | else if (!stack_64bit) { |
476 | if (put_user(((u32)csp), | 479 | if (put_user(((u32)csp), |
477 | &(((struct reg_window32 __user *)rval)->ins[6]))) | 480 | &(((struct reg_window32 __user *)rval)->ins[6]))) |
478 | rval = 0; | 481 | rval = 0; |
@@ -507,18 +510,18 @@ void synchronize_user_stack(void) | |||
507 | 510 | ||
508 | flush_user_windows(); | 511 | flush_user_windows(); |
509 | if ((window = get_thread_wsaved()) != 0) { | 512 | if ((window = get_thread_wsaved()) != 0) { |
510 | int winsize = sizeof(struct reg_window); | ||
511 | int bias = 0; | ||
512 | |||
513 | if (test_thread_flag(TIF_32BIT)) | ||
514 | winsize = sizeof(struct reg_window32); | ||
515 | else | ||
516 | bias = STACK_BIAS; | ||
517 | |||
518 | window -= 1; | 513 | window -= 1; |
519 | do { | 514 | do { |
520 | unsigned long sp = (t->rwbuf_stkptrs[window] + bias); | ||
521 | struct reg_window *rwin = &t->reg_window[window]; | 515 | struct reg_window *rwin = &t->reg_window[window]; |
516 | int winsize = sizeof(struct reg_window); | ||
517 | unsigned long sp; | ||
518 | |||
519 | sp = t->rwbuf_stkptrs[window]; | ||
520 | |||
521 | if (test_thread_64bit_stack(sp)) | ||
522 | sp += STACK_BIAS; | ||
523 | else | ||
524 | winsize = sizeof(struct reg_window32); | ||
522 | 525 | ||
523 | if (!copy_to_user((char __user *)sp, rwin, winsize)) { | 526 | if (!copy_to_user((char __user *)sp, rwin, winsize)) { |
524 | shift_window_buffer(window, get_thread_wsaved() - 1, t); | 527 | shift_window_buffer(window, get_thread_wsaved() - 1, t); |
@@ -544,13 +547,6 @@ void fault_in_user_windows(void) | |||
544 | { | 547 | { |
545 | struct thread_info *t = current_thread_info(); | 548 | struct thread_info *t = current_thread_info(); |
546 | unsigned long window; | 549 | unsigned long window; |
547 | int winsize = sizeof(struct reg_window); | ||
548 | int bias = 0; | ||
549 | |||
550 | if (test_thread_flag(TIF_32BIT)) | ||
551 | winsize = sizeof(struct reg_window32); | ||
552 | else | ||
553 | bias = STACK_BIAS; | ||
554 | 550 | ||
555 | flush_user_windows(); | 551 | flush_user_windows(); |
556 | window = get_thread_wsaved(); | 552 | window = get_thread_wsaved(); |
@@ -558,8 +554,16 @@ void fault_in_user_windows(void) | |||
558 | if (likely(window != 0)) { | 554 | if (likely(window != 0)) { |
559 | window -= 1; | 555 | window -= 1; |
560 | do { | 556 | do { |
561 | unsigned long sp = (t->rwbuf_stkptrs[window] + bias); | ||
562 | struct reg_window *rwin = &t->reg_window[window]; | 557 | struct reg_window *rwin = &t->reg_window[window]; |
558 | int winsize = sizeof(struct reg_window); | ||
559 | unsigned long sp; | ||
560 | |||
561 | sp = t->rwbuf_stkptrs[window]; | ||
562 | |||
563 | if (test_thread_64bit_stack(sp)) | ||
564 | sp += STACK_BIAS; | ||
565 | else | ||
566 | winsize = sizeof(struct reg_window32); | ||
563 | 567 | ||
564 | if (unlikely(sp & 0x7UL)) | 568 | if (unlikely(sp & 0x7UL)) |
565 | stack_unaligned(sp); | 569 | stack_unaligned(sp); |
diff --git a/arch/sparc/kernel/ptrace_64.c b/arch/sparc/kernel/ptrace_64.c index 484dabac7045..7ff45e4ba681 100644 --- a/arch/sparc/kernel/ptrace_64.c +++ b/arch/sparc/kernel/ptrace_64.c | |||
@@ -151,7 +151,7 @@ static int regwindow64_get(struct task_struct *target, | |||
151 | { | 151 | { |
152 | unsigned long rw_addr = regs->u_regs[UREG_I6]; | 152 | unsigned long rw_addr = regs->u_regs[UREG_I6]; |
153 | 153 | ||
154 | if (test_tsk_thread_flag(current, TIF_32BIT)) { | 154 | if (!test_thread_64bit_stack(rw_addr)) { |
155 | struct reg_window32 win32; | 155 | struct reg_window32 win32; |
156 | int i; | 156 | int i; |
157 | 157 | ||
@@ -176,7 +176,7 @@ static int regwindow64_set(struct task_struct *target, | |||
176 | { | 176 | { |
177 | unsigned long rw_addr = regs->u_regs[UREG_I6]; | 177 | unsigned long rw_addr = regs->u_regs[UREG_I6]; |
178 | 178 | ||
179 | if (test_tsk_thread_flag(current, TIF_32BIT)) { | 179 | if (!test_thread_64bit_stack(rw_addr)) { |
180 | struct reg_window32 win32; | 180 | struct reg_window32 win32; |
181 | int i; | 181 | int i; |
182 | 182 | ||
diff --git a/arch/sparc/kernel/setup_64.c b/arch/sparc/kernel/setup_64.c index 0800e71d8a88..0eaf0059aaef 100644 --- a/arch/sparc/kernel/setup_64.c +++ b/arch/sparc/kernel/setup_64.c | |||
@@ -316,6 +316,25 @@ static void __init popc_patch(void) | |||
316 | } | 316 | } |
317 | } | 317 | } |
318 | 318 | ||
319 | static void __init pause_patch(void) | ||
320 | { | ||
321 | struct pause_patch_entry *p; | ||
322 | |||
323 | p = &__pause_3insn_patch; | ||
324 | while (p < &__pause_3insn_patch_end) { | ||
325 | unsigned long i, addr = p->addr; | ||
326 | |||
327 | for (i = 0; i < 3; i++) { | ||
328 | *(unsigned int *) (addr + (i * 4)) = p->insns[i]; | ||
329 | wmb(); | ||
330 | __asm__ __volatile__("flush %0" | ||
331 | : : "r" (addr + (i * 4))); | ||
332 | } | ||
333 | |||
334 | p++; | ||
335 | } | ||
336 | } | ||
337 | |||
319 | #ifdef CONFIG_SMP | 338 | #ifdef CONFIG_SMP |
320 | void __init boot_cpu_id_too_large(int cpu) | 339 | void __init boot_cpu_id_too_large(int cpu) |
321 | { | 340 | { |
@@ -528,6 +547,8 @@ static void __init init_sparc64_elf_hwcap(void) | |||
528 | 547 | ||
529 | if (sparc64_elf_hwcap & AV_SPARC_POPC) | 548 | if (sparc64_elf_hwcap & AV_SPARC_POPC) |
530 | popc_patch(); | 549 | popc_patch(); |
550 | if (sparc64_elf_hwcap & AV_SPARC_PAUSE) | ||
551 | pause_patch(); | ||
531 | } | 552 | } |
532 | 553 | ||
533 | void __init setup_arch(char **cmdline_p) | 554 | void __init setup_arch(char **cmdline_p) |
diff --git a/arch/sparc/kernel/sys_sparc_64.c b/arch/sparc/kernel/sys_sparc_64.c index 11c6c9603e71..878ef3d5fec5 100644 --- a/arch/sparc/kernel/sys_sparc_64.c +++ b/arch/sparc/kernel/sys_sparc_64.c | |||
@@ -751,3 +751,8 @@ int kernel_execve(const char *filename, | |||
751 | : "cc"); | 751 | : "cc"); |
752 | return __res; | 752 | return __res; |
753 | } | 753 | } |
754 | |||
755 | asmlinkage long sys_kern_features(void) | ||
756 | { | ||
757 | return KERN_FEATURE_MIXED_MODE_STACK; | ||
758 | } | ||
diff --git a/arch/sparc/kernel/systbls_32.S b/arch/sparc/kernel/systbls_32.S index 63402f9e9f51..5147f574f125 100644 --- a/arch/sparc/kernel/systbls_32.S +++ b/arch/sparc/kernel/systbls_32.S | |||
@@ -85,3 +85,4 @@ sys_call_table: | |||
85 | /*325*/ .long sys_pwritev, sys_rt_tgsigqueueinfo, sys_perf_event_open, sys_recvmmsg, sys_fanotify_init | 85 | /*325*/ .long sys_pwritev, sys_rt_tgsigqueueinfo, sys_perf_event_open, sys_recvmmsg, sys_fanotify_init |
86 | /*330*/ .long sys_fanotify_mark, sys_prlimit64, sys_name_to_handle_at, sys_open_by_handle_at, sys_clock_adjtime | 86 | /*330*/ .long sys_fanotify_mark, sys_prlimit64, sys_name_to_handle_at, sys_open_by_handle_at, sys_clock_adjtime |
87 | /*335*/ .long sys_syncfs, sys_sendmmsg, sys_setns, sys_process_vm_readv, sys_process_vm_writev | 87 | /*335*/ .long sys_syncfs, sys_sendmmsg, sys_setns, sys_process_vm_readv, sys_process_vm_writev |
88 | /*340*/ .long sys_ni_syscall, sys_kcmp | ||
diff --git a/arch/sparc/kernel/systbls_64.S b/arch/sparc/kernel/systbls_64.S index 3a58e0d66f51..1c9af9fa38e9 100644 --- a/arch/sparc/kernel/systbls_64.S +++ b/arch/sparc/kernel/systbls_64.S | |||
@@ -86,6 +86,7 @@ sys_call_table32: | |||
86 | .word compat_sys_pwritev, compat_sys_rt_tgsigqueueinfo, sys_perf_event_open, compat_sys_recvmmsg, sys_fanotify_init | 86 | .word compat_sys_pwritev, compat_sys_rt_tgsigqueueinfo, sys_perf_event_open, compat_sys_recvmmsg, sys_fanotify_init |
87 | /*330*/ .word sys32_fanotify_mark, sys_prlimit64, sys_name_to_handle_at, compat_sys_open_by_handle_at, compat_sys_clock_adjtime | 87 | /*330*/ .word sys32_fanotify_mark, sys_prlimit64, sys_name_to_handle_at, compat_sys_open_by_handle_at, compat_sys_clock_adjtime |
88 | .word sys_syncfs, compat_sys_sendmmsg, sys_setns, compat_sys_process_vm_readv, compat_sys_process_vm_writev | 88 | .word sys_syncfs, compat_sys_sendmmsg, sys_setns, compat_sys_process_vm_readv, compat_sys_process_vm_writev |
89 | /*340*/ .word sys_kern_features, sys_kcmp | ||
89 | 90 | ||
90 | #endif /* CONFIG_COMPAT */ | 91 | #endif /* CONFIG_COMPAT */ |
91 | 92 | ||
@@ -163,3 +164,4 @@ sys_call_table: | |||
163 | .word sys_pwritev, sys_rt_tgsigqueueinfo, sys_perf_event_open, sys_recvmmsg, sys_fanotify_init | 164 | .word sys_pwritev, sys_rt_tgsigqueueinfo, sys_perf_event_open, sys_recvmmsg, sys_fanotify_init |
164 | /*330*/ .word sys_fanotify_mark, sys_prlimit64, sys_name_to_handle_at, sys_open_by_handle_at, sys_clock_adjtime | 165 | /*330*/ .word sys_fanotify_mark, sys_prlimit64, sys_name_to_handle_at, sys_open_by_handle_at, sys_clock_adjtime |
165 | .word sys_syncfs, sys_sendmmsg, sys_setns, sys_process_vm_readv, sys_process_vm_writev | 166 | .word sys_syncfs, sys_sendmmsg, sys_setns, sys_process_vm_readv, sys_process_vm_writev |
167 | /*340*/ .word sys_kern_features, sys_kcmp | ||
diff --git a/arch/sparc/kernel/unaligned_64.c b/arch/sparc/kernel/unaligned_64.c index f81d038f7340..8201c25e7669 100644 --- a/arch/sparc/kernel/unaligned_64.c +++ b/arch/sparc/kernel/unaligned_64.c | |||
@@ -113,21 +113,24 @@ static inline long sign_extend_imm13(long imm) | |||
113 | 113 | ||
114 | static unsigned long fetch_reg(unsigned int reg, struct pt_regs *regs) | 114 | static unsigned long fetch_reg(unsigned int reg, struct pt_regs *regs) |
115 | { | 115 | { |
116 | unsigned long value; | 116 | unsigned long value, fp; |
117 | 117 | ||
118 | if (reg < 16) | 118 | if (reg < 16) |
119 | return (!reg ? 0 : regs->u_regs[reg]); | 119 | return (!reg ? 0 : regs->u_regs[reg]); |
120 | |||
121 | fp = regs->u_regs[UREG_FP]; | ||
122 | |||
120 | if (regs->tstate & TSTATE_PRIV) { | 123 | if (regs->tstate & TSTATE_PRIV) { |
121 | struct reg_window *win; | 124 | struct reg_window *win; |
122 | win = (struct reg_window *)(regs->u_regs[UREG_FP] + STACK_BIAS); | 125 | win = (struct reg_window *)(fp + STACK_BIAS); |
123 | value = win->locals[reg - 16]; | 126 | value = win->locals[reg - 16]; |
124 | } else if (test_thread_flag(TIF_32BIT)) { | 127 | } else if (!test_thread_64bit_stack(fp)) { |
125 | struct reg_window32 __user *win32; | 128 | struct reg_window32 __user *win32; |
126 | win32 = (struct reg_window32 __user *)((unsigned long)((u32)regs->u_regs[UREG_FP])); | 129 | win32 = (struct reg_window32 __user *)((unsigned long)((u32)fp)); |
127 | get_user(value, &win32->locals[reg - 16]); | 130 | get_user(value, &win32->locals[reg - 16]); |
128 | } else { | 131 | } else { |
129 | struct reg_window __user *win; | 132 | struct reg_window __user *win; |
130 | win = (struct reg_window __user *)(regs->u_regs[UREG_FP] + STACK_BIAS); | 133 | win = (struct reg_window __user *)(fp + STACK_BIAS); |
131 | get_user(value, &win->locals[reg - 16]); | 134 | get_user(value, &win->locals[reg - 16]); |
132 | } | 135 | } |
133 | return value; | 136 | return value; |
@@ -135,19 +138,24 @@ static unsigned long fetch_reg(unsigned int reg, struct pt_regs *regs) | |||
135 | 138 | ||
136 | static unsigned long *fetch_reg_addr(unsigned int reg, struct pt_regs *regs) | 139 | static unsigned long *fetch_reg_addr(unsigned int reg, struct pt_regs *regs) |
137 | { | 140 | { |
141 | unsigned long fp; | ||
142 | |||
138 | if (reg < 16) | 143 | if (reg < 16) |
139 | return ®s->u_regs[reg]; | 144 | return ®s->u_regs[reg]; |
145 | |||
146 | fp = regs->u_regs[UREG_FP]; | ||
147 | |||
140 | if (regs->tstate & TSTATE_PRIV) { | 148 | if (regs->tstate & TSTATE_PRIV) { |
141 | struct reg_window *win; | 149 | struct reg_window *win; |
142 | win = (struct reg_window *)(regs->u_regs[UREG_FP] + STACK_BIAS); | 150 | win = (struct reg_window *)(fp + STACK_BIAS); |
143 | return &win->locals[reg - 16]; | 151 | return &win->locals[reg - 16]; |
144 | } else if (test_thread_flag(TIF_32BIT)) { | 152 | } else if (!test_thread_64bit_stack(fp)) { |
145 | struct reg_window32 *win32; | 153 | struct reg_window32 *win32; |
146 | win32 = (struct reg_window32 *)((unsigned long)((u32)regs->u_regs[UREG_FP])); | 154 | win32 = (struct reg_window32 *)((unsigned long)((u32)fp)); |
147 | return (unsigned long *)&win32->locals[reg - 16]; | 155 | return (unsigned long *)&win32->locals[reg - 16]; |
148 | } else { | 156 | } else { |
149 | struct reg_window *win; | 157 | struct reg_window *win; |
150 | win = (struct reg_window *)(regs->u_regs[UREG_FP] + STACK_BIAS); | 158 | win = (struct reg_window *)(fp + STACK_BIAS); |
151 | return &win->locals[reg - 16]; | 159 | return &win->locals[reg - 16]; |
152 | } | 160 | } |
153 | } | 161 | } |
@@ -392,13 +400,15 @@ int handle_popc(u32 insn, struct pt_regs *regs) | |||
392 | if (rd) | 400 | if (rd) |
393 | regs->u_regs[rd] = ret; | 401 | regs->u_regs[rd] = ret; |
394 | } else { | 402 | } else { |
395 | if (test_thread_flag(TIF_32BIT)) { | 403 | unsigned long fp = regs->u_regs[UREG_FP]; |
404 | |||
405 | if (!test_thread_64bit_stack(fp)) { | ||
396 | struct reg_window32 __user *win32; | 406 | struct reg_window32 __user *win32; |
397 | win32 = (struct reg_window32 __user *)((unsigned long)((u32)regs->u_regs[UREG_FP])); | 407 | win32 = (struct reg_window32 __user *)((unsigned long)((u32)fp)); |
398 | put_user(ret, &win32->locals[rd - 16]); | 408 | put_user(ret, &win32->locals[rd - 16]); |
399 | } else { | 409 | } else { |
400 | struct reg_window __user *win; | 410 | struct reg_window __user *win; |
401 | win = (struct reg_window __user *)(regs->u_regs[UREG_FP] + STACK_BIAS); | 411 | win = (struct reg_window __user *)(fp + STACK_BIAS); |
402 | put_user(ret, &win->locals[rd - 16]); | 412 | put_user(ret, &win->locals[rd - 16]); |
403 | } | 413 | } |
404 | } | 414 | } |
@@ -554,7 +564,7 @@ void handle_ld_nf(u32 insn, struct pt_regs *regs) | |||
554 | reg[0] = 0; | 564 | reg[0] = 0; |
555 | if ((insn & 0x780000) == 0x180000) | 565 | if ((insn & 0x780000) == 0x180000) |
556 | reg[1] = 0; | 566 | reg[1] = 0; |
557 | } else if (test_thread_flag(TIF_32BIT)) { | 567 | } else if (!test_thread_64bit_stack(regs->u_regs[UREG_FP])) { |
558 | put_user(0, (int __user *) reg); | 568 | put_user(0, (int __user *) reg); |
559 | if ((insn & 0x780000) == 0x180000) | 569 | if ((insn & 0x780000) == 0x180000) |
560 | put_user(0, ((int __user *) reg) + 1); | 570 | put_user(0, ((int __user *) reg) + 1); |
diff --git a/arch/sparc/kernel/visemul.c b/arch/sparc/kernel/visemul.c index 08e074b7eb6a..c096c624ac4d 100644 --- a/arch/sparc/kernel/visemul.c +++ b/arch/sparc/kernel/visemul.c | |||
@@ -149,21 +149,24 @@ static inline void maybe_flush_windows(unsigned int rs1, unsigned int rs2, | |||
149 | 149 | ||
150 | static unsigned long fetch_reg(unsigned int reg, struct pt_regs *regs) | 150 | static unsigned long fetch_reg(unsigned int reg, struct pt_regs *regs) |
151 | { | 151 | { |
152 | unsigned long value; | 152 | unsigned long value, fp; |
153 | 153 | ||
154 | if (reg < 16) | 154 | if (reg < 16) |
155 | return (!reg ? 0 : regs->u_regs[reg]); | 155 | return (!reg ? 0 : regs->u_regs[reg]); |
156 | |||
157 | fp = regs->u_regs[UREG_FP]; | ||
158 | |||
156 | if (regs->tstate & TSTATE_PRIV) { | 159 | if (regs->tstate & TSTATE_PRIV) { |
157 | struct reg_window *win; | 160 | struct reg_window *win; |
158 | win = (struct reg_window *)(regs->u_regs[UREG_FP] + STACK_BIAS); | 161 | win = (struct reg_window *)(fp + STACK_BIAS); |
159 | value = win->locals[reg - 16]; | 162 | value = win->locals[reg - 16]; |
160 | } else if (test_thread_flag(TIF_32BIT)) { | 163 | } else if (!test_thread_64bit_stack(fp)) { |
161 | struct reg_window32 __user *win32; | 164 | struct reg_window32 __user *win32; |
162 | win32 = (struct reg_window32 __user *)((unsigned long)((u32)regs->u_regs[UREG_FP])); | 165 | win32 = (struct reg_window32 __user *)((unsigned long)((u32)fp)); |
163 | get_user(value, &win32->locals[reg - 16]); | 166 | get_user(value, &win32->locals[reg - 16]); |
164 | } else { | 167 | } else { |
165 | struct reg_window __user *win; | 168 | struct reg_window __user *win; |
166 | win = (struct reg_window __user *)(regs->u_regs[UREG_FP] + STACK_BIAS); | 169 | win = (struct reg_window __user *)(fp + STACK_BIAS); |
167 | get_user(value, &win->locals[reg - 16]); | 170 | get_user(value, &win->locals[reg - 16]); |
168 | } | 171 | } |
169 | return value; | 172 | return value; |
@@ -172,16 +175,18 @@ static unsigned long fetch_reg(unsigned int reg, struct pt_regs *regs) | |||
172 | static inline unsigned long __user *__fetch_reg_addr_user(unsigned int reg, | 175 | static inline unsigned long __user *__fetch_reg_addr_user(unsigned int reg, |
173 | struct pt_regs *regs) | 176 | struct pt_regs *regs) |
174 | { | 177 | { |
178 | unsigned long fp = regs->u_regs[UREG_FP]; | ||
179 | |||
175 | BUG_ON(reg < 16); | 180 | BUG_ON(reg < 16); |
176 | BUG_ON(regs->tstate & TSTATE_PRIV); | 181 | BUG_ON(regs->tstate & TSTATE_PRIV); |
177 | 182 | ||
178 | if (test_thread_flag(TIF_32BIT)) { | 183 | if (!test_thread_64bit_stack(fp)) { |
179 | struct reg_window32 __user *win32; | 184 | struct reg_window32 __user *win32; |
180 | win32 = (struct reg_window32 __user *)((unsigned long)((u32)regs->u_regs[UREG_FP])); | 185 | win32 = (struct reg_window32 __user *)((unsigned long)((u32)fp)); |
181 | return (unsigned long __user *)&win32->locals[reg - 16]; | 186 | return (unsigned long __user *)&win32->locals[reg - 16]; |
182 | } else { | 187 | } else { |
183 | struct reg_window __user *win; | 188 | struct reg_window __user *win; |
184 | win = (struct reg_window __user *)(regs->u_regs[UREG_FP] + STACK_BIAS); | 189 | win = (struct reg_window __user *)(fp + STACK_BIAS); |
185 | return &win->locals[reg - 16]; | 190 | return &win->locals[reg - 16]; |
186 | } | 191 | } |
187 | } | 192 | } |
@@ -204,7 +209,7 @@ static void store_reg(struct pt_regs *regs, unsigned long val, unsigned long rd) | |||
204 | } else { | 209 | } else { |
205 | unsigned long __user *rd_user = __fetch_reg_addr_user(rd, regs); | 210 | unsigned long __user *rd_user = __fetch_reg_addr_user(rd, regs); |
206 | 211 | ||
207 | if (test_thread_flag(TIF_32BIT)) | 212 | if (!test_thread_64bit_stack(regs->u_regs[UREG_FP])) |
208 | __put_user((u32)val, (u32 __user *)rd_user); | 213 | __put_user((u32)val, (u32 __user *)rd_user); |
209 | else | 214 | else |
210 | __put_user(val, rd_user); | 215 | __put_user(val, rd_user); |
diff --git a/arch/sparc/kernel/vmlinux.lds.S b/arch/sparc/kernel/vmlinux.lds.S index 89c2c29f154b..0bacceb19150 100644 --- a/arch/sparc/kernel/vmlinux.lds.S +++ b/arch/sparc/kernel/vmlinux.lds.S | |||
@@ -132,6 +132,11 @@ SECTIONS | |||
132 | *(.popc_6insn_patch) | 132 | *(.popc_6insn_patch) |
133 | __popc_6insn_patch_end = .; | 133 | __popc_6insn_patch_end = .; |
134 | } | 134 | } |
135 | .pause_3insn_patch : { | ||
136 | __pause_3insn_patch = .; | ||
137 | *(.pause_3insn_patch) | ||
138 | __pause_3insn_patch_end = .; | ||
139 | } | ||
135 | PERCPU_SECTION(SMP_CACHE_BYTES) | 140 | PERCPU_SECTION(SMP_CACHE_BYTES) |
136 | 141 | ||
137 | . = ALIGN(PAGE_SIZE); | 142 | . = ALIGN(PAGE_SIZE); |
diff --git a/arch/sparc/kernel/winfixup.S b/arch/sparc/kernel/winfixup.S index a6b0863c27df..1e67ce958369 100644 --- a/arch/sparc/kernel/winfixup.S +++ b/arch/sparc/kernel/winfixup.S | |||
@@ -43,6 +43,8 @@ spill_fixup_mna: | |||
43 | spill_fixup_dax: | 43 | spill_fixup_dax: |
44 | TRAP_LOAD_THREAD_REG(%g6, %g1) | 44 | TRAP_LOAD_THREAD_REG(%g6, %g1) |
45 | ldx [%g6 + TI_FLAGS], %g1 | 45 | ldx [%g6 + TI_FLAGS], %g1 |
46 | andcc %sp, 0x1, %g0 | ||
47 | movne %icc, 0, %g1 | ||
46 | andcc %g1, _TIF_32BIT, %g0 | 48 | andcc %g1, _TIF_32BIT, %g0 |
47 | ldub [%g6 + TI_WSAVED], %g1 | 49 | ldub [%g6 + TI_WSAVED], %g1 |
48 | sll %g1, 3, %g3 | 50 | sll %g1, 3, %g3 |
diff --git a/arch/sparc/lib/atomic_64.S b/arch/sparc/lib/atomic_64.S index 4d502da3de78..85c233d0a340 100644 --- a/arch/sparc/lib/atomic_64.S +++ b/arch/sparc/lib/atomic_64.S | |||
@@ -1,6 +1,6 @@ | |||
1 | /* atomic.S: These things are too big to do inline. | 1 | /* atomic.S: These things are too big to do inline. |
2 | * | 2 | * |
3 | * Copyright (C) 1999, 2007 David S. Miller (davem@davemloft.net) | 3 | * Copyright (C) 1999, 2007 2012 David S. Miller (davem@davemloft.net) |
4 | */ | 4 | */ |
5 | 5 | ||
6 | #include <linux/linkage.h> | 6 | #include <linux/linkage.h> |
@@ -117,3 +117,17 @@ ENTRY(atomic64_sub_ret) /* %o0 = decrement, %o1 = atomic_ptr */ | |||
117 | sub %g1, %o0, %o0 | 117 | sub %g1, %o0, %o0 |
118 | 2: BACKOFF_SPIN(%o2, %o3, 1b) | 118 | 2: BACKOFF_SPIN(%o2, %o3, 1b) |
119 | ENDPROC(atomic64_sub_ret) | 119 | ENDPROC(atomic64_sub_ret) |
120 | |||
121 | ENTRY(atomic64_dec_if_positive) /* %o0 = atomic_ptr */ | ||
122 | BACKOFF_SETUP(%o2) | ||
123 | 1: ldx [%o0], %g1 | ||
124 | brlez,pn %g1, 3f | ||
125 | sub %g1, 1, %g7 | ||
126 | casx [%o0], %g1, %g7 | ||
127 | cmp %g1, %g7 | ||
128 | bne,pn %xcc, BACKOFF_LABEL(2f, 1b) | ||
129 | nop | ||
130 | 3: retl | ||
131 | sub %g1, 1, %o0 | ||
132 | 2: BACKOFF_SPIN(%o2, %o3, 1b) | ||
133 | ENDPROC(atomic64_dec_if_positive) | ||
diff --git a/arch/sparc/lib/ksyms.c b/arch/sparc/lib/ksyms.c index ee31b884c61b..0c4e35e522fa 100644 --- a/arch/sparc/lib/ksyms.c +++ b/arch/sparc/lib/ksyms.c | |||
@@ -116,6 +116,7 @@ EXPORT_SYMBOL(atomic64_add); | |||
116 | EXPORT_SYMBOL(atomic64_add_ret); | 116 | EXPORT_SYMBOL(atomic64_add_ret); |
117 | EXPORT_SYMBOL(atomic64_sub); | 117 | EXPORT_SYMBOL(atomic64_sub); |
118 | EXPORT_SYMBOL(atomic64_sub_ret); | 118 | EXPORT_SYMBOL(atomic64_sub_ret); |
119 | EXPORT_SYMBOL(atomic64_dec_if_positive); | ||
119 | 120 | ||
120 | /* Atomic bit operations. */ | 121 | /* Atomic bit operations. */ |
121 | EXPORT_SYMBOL(test_and_set_bit); | 122 | EXPORT_SYMBOL(test_and_set_bit); |
diff --git a/arch/sparc/math-emu/math_64.c b/arch/sparc/math-emu/math_64.c index 1704068da928..034aadbff036 100644 --- a/arch/sparc/math-emu/math_64.c +++ b/arch/sparc/math-emu/math_64.c | |||
@@ -320,7 +320,7 @@ int do_mathemu(struct pt_regs *regs, struct fpustate *f, bool illegal_insn_trap) | |||
320 | XR = 0; | 320 | XR = 0; |
321 | else if (freg < 16) | 321 | else if (freg < 16) |
322 | XR = regs->u_regs[freg]; | 322 | XR = regs->u_regs[freg]; |
323 | else if (test_thread_flag(TIF_32BIT)) { | 323 | else if (!test_thread_64bit_stack(regs->u_regs[UREG_FP])) { |
324 | struct reg_window32 __user *win32; | 324 | struct reg_window32 __user *win32; |
325 | flushw_user (); | 325 | flushw_user (); |
326 | win32 = (struct reg_window32 __user *)((unsigned long)((u32)regs->u_regs[UREG_FP])); | 326 | win32 = (struct reg_window32 __user *)((unsigned long)((u32)regs->u_regs[UREG_FP])); |
diff --git a/arch/x86/include/asm/xen/hypercall.h b/arch/x86/include/asm/xen/hypercall.h index 59c226d120cd..c20d1ce62dc6 100644 --- a/arch/x86/include/asm/xen/hypercall.h +++ b/arch/x86/include/asm/xen/hypercall.h | |||
@@ -359,18 +359,14 @@ HYPERVISOR_update_va_mapping(unsigned long va, pte_t new_val, | |||
359 | return _hypercall4(int, update_va_mapping, va, | 359 | return _hypercall4(int, update_va_mapping, va, |
360 | new_val.pte, new_val.pte >> 32, flags); | 360 | new_val.pte, new_val.pte >> 32, flags); |
361 | } | 361 | } |
362 | extern int __must_check xen_event_channel_op_compat(int, void *); | ||
362 | 363 | ||
363 | static inline int | 364 | static inline int |
364 | HYPERVISOR_event_channel_op(int cmd, void *arg) | 365 | HYPERVISOR_event_channel_op(int cmd, void *arg) |
365 | { | 366 | { |
366 | int rc = _hypercall2(int, event_channel_op, cmd, arg); | 367 | int rc = _hypercall2(int, event_channel_op, cmd, arg); |
367 | if (unlikely(rc == -ENOSYS)) { | 368 | if (unlikely(rc == -ENOSYS)) |
368 | struct evtchn_op op; | 369 | rc = xen_event_channel_op_compat(cmd, arg); |
369 | op.cmd = cmd; | ||
370 | memcpy(&op.u, arg, sizeof(op.u)); | ||
371 | rc = _hypercall1(int, event_channel_op_compat, &op); | ||
372 | memcpy(arg, &op.u, sizeof(op.u)); | ||
373 | } | ||
374 | return rc; | 370 | return rc; |
375 | } | 371 | } |
376 | 372 | ||
@@ -386,17 +382,14 @@ HYPERVISOR_console_io(int cmd, int count, char *str) | |||
386 | return _hypercall3(int, console_io, cmd, count, str); | 382 | return _hypercall3(int, console_io, cmd, count, str); |
387 | } | 383 | } |
388 | 384 | ||
385 | extern int __must_check HYPERVISOR_physdev_op_compat(int, void *); | ||
386 | |||
389 | static inline int | 387 | static inline int |
390 | HYPERVISOR_physdev_op(int cmd, void *arg) | 388 | HYPERVISOR_physdev_op(int cmd, void *arg) |
391 | { | 389 | { |
392 | int rc = _hypercall2(int, physdev_op, cmd, arg); | 390 | int rc = _hypercall2(int, physdev_op, cmd, arg); |
393 | if (unlikely(rc == -ENOSYS)) { | 391 | if (unlikely(rc == -ENOSYS)) |
394 | struct physdev_op op; | 392 | rc = HYPERVISOR_physdev_op_compat(cmd, arg); |
395 | op.cmd = cmd; | ||
396 | memcpy(&op.u, arg, sizeof(op.u)); | ||
397 | rc = _hypercall1(int, physdev_op_compat, &op); | ||
398 | memcpy(arg, &op.u, sizeof(op.u)); | ||
399 | } | ||
400 | return rc; | 393 | return rc; |
401 | } | 394 | } |
402 | 395 | ||
diff --git a/crypto/cryptd.c b/crypto/cryptd.c index 671d4d6d14df..7bdd61b867c8 100644 --- a/crypto/cryptd.c +++ b/crypto/cryptd.c | |||
@@ -137,13 +137,18 @@ static void cryptd_queue_worker(struct work_struct *work) | |||
137 | struct crypto_async_request *req, *backlog; | 137 | struct crypto_async_request *req, *backlog; |
138 | 138 | ||
139 | cpu_queue = container_of(work, struct cryptd_cpu_queue, work); | 139 | cpu_queue = container_of(work, struct cryptd_cpu_queue, work); |
140 | /* Only handle one request at a time to avoid hogging crypto | 140 | /* |
141 | * workqueue. preempt_disable/enable is used to prevent | 141 | * Only handle one request at a time to avoid hogging crypto workqueue. |
142 | * being preempted by cryptd_enqueue_request() */ | 142 | * preempt_disable/enable is used to prevent being preempted by |
143 | * cryptd_enqueue_request(). local_bh_disable/enable is used to prevent | ||
144 | * cryptd_enqueue_request() being accessed from software interrupts. | ||
145 | */ | ||
146 | local_bh_disable(); | ||
143 | preempt_disable(); | 147 | preempt_disable(); |
144 | backlog = crypto_get_backlog(&cpu_queue->queue); | 148 | backlog = crypto_get_backlog(&cpu_queue->queue); |
145 | req = crypto_dequeue_request(&cpu_queue->queue); | 149 | req = crypto_dequeue_request(&cpu_queue->queue); |
146 | preempt_enable(); | 150 | preempt_enable(); |
151 | local_bh_enable(); | ||
147 | 152 | ||
148 | if (!req) | 153 | if (!req) |
149 | return; | 154 | return; |
diff --git a/drivers/base/platform.c b/drivers/base/platform.c index 8727e9c5eea4..72c776f2a1f5 100644 --- a/drivers/base/platform.c +++ b/drivers/base/platform.c | |||
@@ -83,9 +83,16 @@ EXPORT_SYMBOL_GPL(platform_get_resource); | |||
83 | */ | 83 | */ |
84 | int platform_get_irq(struct platform_device *dev, unsigned int num) | 84 | int platform_get_irq(struct platform_device *dev, unsigned int num) |
85 | { | 85 | { |
86 | #ifdef CONFIG_SPARC | ||
87 | /* sparc does not have irqs represented as IORESOURCE_IRQ resources */ | ||
88 | if (!dev || num >= dev->archdata.num_irqs) | ||
89 | return -ENXIO; | ||
90 | return dev->archdata.irqs[num]; | ||
91 | #else | ||
86 | struct resource *r = platform_get_resource(dev, IORESOURCE_IRQ, num); | 92 | struct resource *r = platform_get_resource(dev, IORESOURCE_IRQ, num); |
87 | 93 | ||
88 | return r ? r->start : -ENXIO; | 94 | return r ? r->start : -ENXIO; |
95 | #endif | ||
89 | } | 96 | } |
90 | EXPORT_SYMBOL_GPL(platform_get_irq); | 97 | EXPORT_SYMBOL_GPL(platform_get_irq); |
91 | 98 | ||
diff --git a/drivers/dma/imx-dma.c b/drivers/dma/imx-dma.c index 7d9554cc4976..dbf0e6f8de8a 100644 --- a/drivers/dma/imx-dma.c +++ b/drivers/dma/imx-dma.c | |||
@@ -29,7 +29,6 @@ | |||
29 | 29 | ||
30 | #include <asm/irq.h> | 30 | #include <asm/irq.h> |
31 | #include <linux/platform_data/dma-imx.h> | 31 | #include <linux/platform_data/dma-imx.h> |
32 | #include <mach/hardware.h> | ||
33 | 32 | ||
34 | #include "dmaengine.h" | 33 | #include "dmaengine.h" |
35 | #define IMXDMA_MAX_CHAN_DESCRIPTORS 16 | 34 | #define IMXDMA_MAX_CHAN_DESCRIPTORS 16 |
@@ -167,6 +166,12 @@ struct imxdma_channel { | |||
167 | int slot_2d; | 166 | int slot_2d; |
168 | }; | 167 | }; |
169 | 168 | ||
169 | enum imx_dma_type { | ||
170 | IMX1_DMA, | ||
171 | IMX21_DMA, | ||
172 | IMX27_DMA, | ||
173 | }; | ||
174 | |||
170 | struct imxdma_engine { | 175 | struct imxdma_engine { |
171 | struct device *dev; | 176 | struct device *dev; |
172 | struct device_dma_parameters dma_parms; | 177 | struct device_dma_parameters dma_parms; |
@@ -177,7 +182,39 @@ struct imxdma_engine { | |||
177 | spinlock_t lock; | 182 | spinlock_t lock; |
178 | struct imx_dma_2d_config slots_2d[IMX_DMA_2D_SLOTS]; | 183 | struct imx_dma_2d_config slots_2d[IMX_DMA_2D_SLOTS]; |
179 | struct imxdma_channel channel[IMX_DMA_CHANNELS]; | 184 | struct imxdma_channel channel[IMX_DMA_CHANNELS]; |
185 | enum imx_dma_type devtype; | ||
186 | }; | ||
187 | |||
188 | static struct platform_device_id imx_dma_devtype[] = { | ||
189 | { | ||
190 | .name = "imx1-dma", | ||
191 | .driver_data = IMX1_DMA, | ||
192 | }, { | ||
193 | .name = "imx21-dma", | ||
194 | .driver_data = IMX21_DMA, | ||
195 | }, { | ||
196 | .name = "imx27-dma", | ||
197 | .driver_data = IMX27_DMA, | ||
198 | }, { | ||
199 | /* sentinel */ | ||
200 | } | ||
180 | }; | 201 | }; |
202 | MODULE_DEVICE_TABLE(platform, imx_dma_devtype); | ||
203 | |||
204 | static inline int is_imx1_dma(struct imxdma_engine *imxdma) | ||
205 | { | ||
206 | return imxdma->devtype == IMX1_DMA; | ||
207 | } | ||
208 | |||
209 | static inline int is_imx21_dma(struct imxdma_engine *imxdma) | ||
210 | { | ||
211 | return imxdma->devtype == IMX21_DMA; | ||
212 | } | ||
213 | |||
214 | static inline int is_imx27_dma(struct imxdma_engine *imxdma) | ||
215 | { | ||
216 | return imxdma->devtype == IMX27_DMA; | ||
217 | } | ||
181 | 218 | ||
182 | static struct imxdma_channel *to_imxdma_chan(struct dma_chan *chan) | 219 | static struct imxdma_channel *to_imxdma_chan(struct dma_chan *chan) |
183 | { | 220 | { |
@@ -212,7 +249,9 @@ static unsigned imx_dmav1_readl(struct imxdma_engine *imxdma, unsigned offset) | |||
212 | 249 | ||
213 | static int imxdma_hw_chain(struct imxdma_channel *imxdmac) | 250 | static int imxdma_hw_chain(struct imxdma_channel *imxdmac) |
214 | { | 251 | { |
215 | if (cpu_is_mx27()) | 252 | struct imxdma_engine *imxdma = imxdmac->imxdma; |
253 | |||
254 | if (is_imx27_dma(imxdma)) | ||
216 | return imxdmac->hw_chaining; | 255 | return imxdmac->hw_chaining; |
217 | else | 256 | else |
218 | return 0; | 257 | return 0; |
@@ -267,7 +306,7 @@ static void imxdma_enable_hw(struct imxdma_desc *d) | |||
267 | imx_dmav1_writel(imxdma, imx_dmav1_readl(imxdma, DMA_CCR(channel)) | | 306 | imx_dmav1_writel(imxdma, imx_dmav1_readl(imxdma, DMA_CCR(channel)) | |
268 | CCR_CEN | CCR_ACRPT, DMA_CCR(channel)); | 307 | CCR_CEN | CCR_ACRPT, DMA_CCR(channel)); |
269 | 308 | ||
270 | if ((cpu_is_mx21() || cpu_is_mx27()) && | 309 | if (!is_imx1_dma(imxdma) && |
271 | d->sg && imxdma_hw_chain(imxdmac)) { | 310 | d->sg && imxdma_hw_chain(imxdmac)) { |
272 | d->sg = sg_next(d->sg); | 311 | d->sg = sg_next(d->sg); |
273 | if (d->sg) { | 312 | if (d->sg) { |
@@ -436,7 +475,7 @@ static irqreturn_t dma_irq_handler(int irq, void *dev_id) | |||
436 | struct imxdma_engine *imxdma = dev_id; | 475 | struct imxdma_engine *imxdma = dev_id; |
437 | int i, disr; | 476 | int i, disr; |
438 | 477 | ||
439 | if (cpu_is_mx21() || cpu_is_mx27()) | 478 | if (!is_imx1_dma(imxdma)) |
440 | imxdma_err_handler(irq, dev_id); | 479 | imxdma_err_handler(irq, dev_id); |
441 | 480 | ||
442 | disr = imx_dmav1_readl(imxdma, DMA_DISR); | 481 | disr = imx_dmav1_readl(imxdma, DMA_DISR); |
@@ -961,35 +1000,32 @@ static void imxdma_issue_pending(struct dma_chan *chan) | |||
961 | static int __init imxdma_probe(struct platform_device *pdev) | 1000 | static int __init imxdma_probe(struct platform_device *pdev) |
962 | { | 1001 | { |
963 | struct imxdma_engine *imxdma; | 1002 | struct imxdma_engine *imxdma; |
1003 | struct resource *res; | ||
964 | int ret, i; | 1004 | int ret, i; |
1005 | int irq, irq_err; | ||
965 | 1006 | ||
966 | 1007 | imxdma = devm_kzalloc(&pdev->dev, sizeof(*imxdma), GFP_KERNEL); | |
967 | imxdma = kzalloc(sizeof(*imxdma), GFP_KERNEL); | ||
968 | if (!imxdma) | 1008 | if (!imxdma) |
969 | return -ENOMEM; | 1009 | return -ENOMEM; |
970 | 1010 | ||
971 | if (cpu_is_mx1()) { | 1011 | imxdma->devtype = pdev->id_entry->driver_data; |
972 | imxdma->base = MX1_IO_ADDRESS(MX1_DMA_BASE_ADDR); | 1012 | |
973 | } else if (cpu_is_mx21()) { | 1013 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
974 | imxdma->base = MX21_IO_ADDRESS(MX21_DMA_BASE_ADDR); | 1014 | imxdma->base = devm_request_and_ioremap(&pdev->dev, res); |
975 | } else if (cpu_is_mx27()) { | 1015 | if (!imxdma->base) |
976 | imxdma->base = MX27_IO_ADDRESS(MX27_DMA_BASE_ADDR); | 1016 | return -EADDRNOTAVAIL; |
977 | } else { | 1017 | |
978 | kfree(imxdma); | 1018 | irq = platform_get_irq(pdev, 0); |
979 | return 0; | 1019 | if (irq < 0) |
980 | } | 1020 | return irq; |
981 | 1021 | ||
982 | imxdma->dma_ipg = devm_clk_get(&pdev->dev, "ipg"); | 1022 | imxdma->dma_ipg = devm_clk_get(&pdev->dev, "ipg"); |
983 | if (IS_ERR(imxdma->dma_ipg)) { | 1023 | if (IS_ERR(imxdma->dma_ipg)) |
984 | ret = PTR_ERR(imxdma->dma_ipg); | 1024 | return PTR_ERR(imxdma->dma_ipg); |
985 | goto err_clk; | ||
986 | } | ||
987 | 1025 | ||
988 | imxdma->dma_ahb = devm_clk_get(&pdev->dev, "ahb"); | 1026 | imxdma->dma_ahb = devm_clk_get(&pdev->dev, "ahb"); |
989 | if (IS_ERR(imxdma->dma_ahb)) { | 1027 | if (IS_ERR(imxdma->dma_ahb)) |
990 | ret = PTR_ERR(imxdma->dma_ahb); | 1028 | return PTR_ERR(imxdma->dma_ahb); |
991 | goto err_clk; | ||
992 | } | ||
993 | 1029 | ||
994 | clk_prepare_enable(imxdma->dma_ipg); | 1030 | clk_prepare_enable(imxdma->dma_ipg); |
995 | clk_prepare_enable(imxdma->dma_ahb); | 1031 | clk_prepare_enable(imxdma->dma_ahb); |
@@ -997,18 +1033,25 @@ static int __init imxdma_probe(struct platform_device *pdev) | |||
997 | /* reset DMA module */ | 1033 | /* reset DMA module */ |
998 | imx_dmav1_writel(imxdma, DCR_DRST, DMA_DCR); | 1034 | imx_dmav1_writel(imxdma, DCR_DRST, DMA_DCR); |
999 | 1035 | ||
1000 | if (cpu_is_mx1()) { | 1036 | if (is_imx1_dma(imxdma)) { |
1001 | ret = request_irq(MX1_DMA_INT, dma_irq_handler, 0, "DMA", imxdma); | 1037 | ret = devm_request_irq(&pdev->dev, irq, |
1038 | dma_irq_handler, 0, "DMA", imxdma); | ||
1002 | if (ret) { | 1039 | if (ret) { |
1003 | dev_warn(imxdma->dev, "Can't register IRQ for DMA\n"); | 1040 | dev_warn(imxdma->dev, "Can't register IRQ for DMA\n"); |
1004 | goto err_enable; | 1041 | goto err; |
1042 | } | ||
1043 | |||
1044 | irq_err = platform_get_irq(pdev, 1); | ||
1045 | if (irq_err < 0) { | ||
1046 | ret = irq_err; | ||
1047 | goto err; | ||
1005 | } | 1048 | } |
1006 | 1049 | ||
1007 | ret = request_irq(MX1_DMA_ERR, imxdma_err_handler, 0, "DMA", imxdma); | 1050 | ret = devm_request_irq(&pdev->dev, irq_err, |
1051 | imxdma_err_handler, 0, "DMA", imxdma); | ||
1008 | if (ret) { | 1052 | if (ret) { |
1009 | dev_warn(imxdma->dev, "Can't register ERRIRQ for DMA\n"); | 1053 | dev_warn(imxdma->dev, "Can't register ERRIRQ for DMA\n"); |
1010 | free_irq(MX1_DMA_INT, NULL); | 1054 | goto err; |
1011 | goto err_enable; | ||
1012 | } | 1055 | } |
1013 | } | 1056 | } |
1014 | 1057 | ||
@@ -1038,14 +1081,14 @@ static int __init imxdma_probe(struct platform_device *pdev) | |||
1038 | for (i = 0; i < IMX_DMA_CHANNELS; i++) { | 1081 | for (i = 0; i < IMX_DMA_CHANNELS; i++) { |
1039 | struct imxdma_channel *imxdmac = &imxdma->channel[i]; | 1082 | struct imxdma_channel *imxdmac = &imxdma->channel[i]; |
1040 | 1083 | ||
1041 | if (cpu_is_mx21() || cpu_is_mx27()) { | 1084 | if (!is_imx1_dma(imxdma)) { |
1042 | ret = request_irq(MX2x_INT_DMACH0 + i, | 1085 | ret = devm_request_irq(&pdev->dev, irq + i, |
1043 | dma_irq_handler, 0, "DMA", imxdma); | 1086 | dma_irq_handler, 0, "DMA", imxdma); |
1044 | if (ret) { | 1087 | if (ret) { |
1045 | dev_warn(imxdma->dev, "Can't register IRQ %d " | 1088 | dev_warn(imxdma->dev, "Can't register IRQ %d " |
1046 | "for DMA channel %d\n", | 1089 | "for DMA channel %d\n", |
1047 | MX2x_INT_DMACH0 + i, i); | 1090 | irq + i, i); |
1048 | goto err_init; | 1091 | goto err; |
1049 | } | 1092 | } |
1050 | init_timer(&imxdmac->watchdog); | 1093 | init_timer(&imxdmac->watchdog); |
1051 | imxdmac->watchdog.function = &imxdma_watchdog; | 1094 | imxdmac->watchdog.function = &imxdma_watchdog; |
@@ -1091,46 +1134,25 @@ static int __init imxdma_probe(struct platform_device *pdev) | |||
1091 | ret = dma_async_device_register(&imxdma->dma_device); | 1134 | ret = dma_async_device_register(&imxdma->dma_device); |
1092 | if (ret) { | 1135 | if (ret) { |
1093 | dev_err(&pdev->dev, "unable to register\n"); | 1136 | dev_err(&pdev->dev, "unable to register\n"); |
1094 | goto err_init; | 1137 | goto err; |
1095 | } | 1138 | } |
1096 | 1139 | ||
1097 | return 0; | 1140 | return 0; |
1098 | 1141 | ||
1099 | err_init: | 1142 | err: |
1100 | |||
1101 | if (cpu_is_mx21() || cpu_is_mx27()) { | ||
1102 | while (--i >= 0) | ||
1103 | free_irq(MX2x_INT_DMACH0 + i, NULL); | ||
1104 | } else if cpu_is_mx1() { | ||
1105 | free_irq(MX1_DMA_INT, NULL); | ||
1106 | free_irq(MX1_DMA_ERR, NULL); | ||
1107 | } | ||
1108 | err_enable: | ||
1109 | clk_disable_unprepare(imxdma->dma_ipg); | 1143 | clk_disable_unprepare(imxdma->dma_ipg); |
1110 | clk_disable_unprepare(imxdma->dma_ahb); | 1144 | clk_disable_unprepare(imxdma->dma_ahb); |
1111 | err_clk: | ||
1112 | kfree(imxdma); | ||
1113 | return ret; | 1145 | return ret; |
1114 | } | 1146 | } |
1115 | 1147 | ||
1116 | static int __exit imxdma_remove(struct platform_device *pdev) | 1148 | static int __exit imxdma_remove(struct platform_device *pdev) |
1117 | { | 1149 | { |
1118 | struct imxdma_engine *imxdma = platform_get_drvdata(pdev); | 1150 | struct imxdma_engine *imxdma = platform_get_drvdata(pdev); |
1119 | int i; | ||
1120 | 1151 | ||
1121 | dma_async_device_unregister(&imxdma->dma_device); | 1152 | dma_async_device_unregister(&imxdma->dma_device); |
1122 | 1153 | ||
1123 | if (cpu_is_mx21() || cpu_is_mx27()) { | ||
1124 | for (i = 0; i < IMX_DMA_CHANNELS; i++) | ||
1125 | free_irq(MX2x_INT_DMACH0 + i, NULL); | ||
1126 | } else if cpu_is_mx1() { | ||
1127 | free_irq(MX1_DMA_INT, NULL); | ||
1128 | free_irq(MX1_DMA_ERR, NULL); | ||
1129 | } | ||
1130 | |||
1131 | clk_disable_unprepare(imxdma->dma_ipg); | 1154 | clk_disable_unprepare(imxdma->dma_ipg); |
1132 | clk_disable_unprepare(imxdma->dma_ahb); | 1155 | clk_disable_unprepare(imxdma->dma_ahb); |
1133 | kfree(imxdma); | ||
1134 | 1156 | ||
1135 | return 0; | 1157 | return 0; |
1136 | } | 1158 | } |
@@ -1139,6 +1161,7 @@ static struct platform_driver imxdma_driver = { | |||
1139 | .driver = { | 1161 | .driver = { |
1140 | .name = "imx-dma", | 1162 | .name = "imx-dma", |
1141 | }, | 1163 | }, |
1164 | .id_table = imx_dma_devtype, | ||
1142 | .remove = __exit_p(imxdma_remove), | 1165 | .remove = __exit_p(imxdma_remove), |
1143 | }; | 1166 | }; |
1144 | 1167 | ||
diff --git a/drivers/dma/imx-sdma.c b/drivers/dma/imx-sdma.c index c099ca0846f4..f082aa3a918c 100644 --- a/drivers/dma/imx-sdma.c +++ b/drivers/dma/imx-sdma.c | |||
@@ -40,7 +40,6 @@ | |||
40 | #include <asm/irq.h> | 40 | #include <asm/irq.h> |
41 | #include <linux/platform_data/dma-imx-sdma.h> | 41 | #include <linux/platform_data/dma-imx-sdma.h> |
42 | #include <linux/platform_data/dma-imx.h> | 42 | #include <linux/platform_data/dma-imx.h> |
43 | #include <mach/hardware.h> | ||
44 | 43 | ||
45 | #include "dmaengine.h" | 44 | #include "dmaengine.h" |
46 | 45 | ||
diff --git a/drivers/dma/ipu/ipu_idmac.c b/drivers/dma/ipu/ipu_idmac.c index c7573e50aa14..65855373cee6 100644 --- a/drivers/dma/ipu/ipu_idmac.c +++ b/drivers/dma/ipu/ipu_idmac.c | |||
@@ -22,8 +22,7 @@ | |||
22 | #include <linux/interrupt.h> | 22 | #include <linux/interrupt.h> |
23 | #include <linux/io.h> | 23 | #include <linux/io.h> |
24 | #include <linux/module.h> | 24 | #include <linux/module.h> |
25 | 25 | #include <linux/dma/ipu-dma.h> | |
26 | #include <mach/ipu.h> | ||
27 | 26 | ||
28 | #include "../dmaengine.h" | 27 | #include "../dmaengine.h" |
29 | #include "ipu_intern.h" | 28 | #include "ipu_intern.h" |
diff --git a/drivers/dma/ipu/ipu_irq.c b/drivers/dma/ipu/ipu_irq.c index fa95bcc3de1f..a5ee37d5320f 100644 --- a/drivers/dma/ipu/ipu_irq.c +++ b/drivers/dma/ipu/ipu_irq.c | |||
@@ -15,8 +15,7 @@ | |||
15 | #include <linux/irq.h> | 15 | #include <linux/irq.h> |
16 | #include <linux/io.h> | 16 | #include <linux/io.h> |
17 | #include <linux/module.h> | 17 | #include <linux/module.h> |
18 | 18 | #include <linux/dma/ipu-dma.h> | |
19 | #include <mach/ipu.h> | ||
20 | 19 | ||
21 | #include "ipu_intern.h" | 20 | #include "ipu_intern.h" |
22 | 21 | ||
diff --git a/drivers/gpio/Kconfig b/drivers/gpio/Kconfig index d055cee36942..f11d8e3b4041 100644 --- a/drivers/gpio/Kconfig +++ b/drivers/gpio/Kconfig | |||
@@ -47,7 +47,7 @@ if GPIOLIB | |||
47 | 47 | ||
48 | config OF_GPIO | 48 | config OF_GPIO |
49 | def_bool y | 49 | def_bool y |
50 | depends on OF && !SPARC | 50 | depends on OF |
51 | 51 | ||
52 | config DEBUG_GPIO | 52 | config DEBUG_GPIO |
53 | bool "Debug GPIO calls" | 53 | bool "Debug GPIO calls" |
diff --git a/drivers/gpu/drm/drm_fops.c b/drivers/gpu/drm/drm_fops.c index 7ef1b673e1be..133b4132983e 100644 --- a/drivers/gpu/drm/drm_fops.c +++ b/drivers/gpu/drm/drm_fops.c | |||
@@ -121,6 +121,8 @@ int drm_open(struct inode *inode, struct file *filp) | |||
121 | int minor_id = iminor(inode); | 121 | int minor_id = iminor(inode); |
122 | struct drm_minor *minor; | 122 | struct drm_minor *minor; |
123 | int retcode = 0; | 123 | int retcode = 0; |
124 | int need_setup = 0; | ||
125 | struct address_space *old_mapping; | ||
124 | 126 | ||
125 | minor = idr_find(&drm_minors_idr, minor_id); | 127 | minor = idr_find(&drm_minors_idr, minor_id); |
126 | if (!minor) | 128 | if (!minor) |
@@ -132,23 +134,37 @@ int drm_open(struct inode *inode, struct file *filp) | |||
132 | if (drm_device_is_unplugged(dev)) | 134 | if (drm_device_is_unplugged(dev)) |
133 | return -ENODEV; | 135 | return -ENODEV; |
134 | 136 | ||
137 | if (!dev->open_count++) | ||
138 | need_setup = 1; | ||
139 | mutex_lock(&dev->struct_mutex); | ||
140 | old_mapping = dev->dev_mapping; | ||
141 | if (old_mapping == NULL) | ||
142 | dev->dev_mapping = &inode->i_data; | ||
143 | /* ihold ensures nobody can remove inode with our i_data */ | ||
144 | ihold(container_of(dev->dev_mapping, struct inode, i_data)); | ||
145 | inode->i_mapping = dev->dev_mapping; | ||
146 | filp->f_mapping = dev->dev_mapping; | ||
147 | mutex_unlock(&dev->struct_mutex); | ||
148 | |||
135 | retcode = drm_open_helper(inode, filp, dev); | 149 | retcode = drm_open_helper(inode, filp, dev); |
136 | if (!retcode) { | 150 | if (retcode) |
137 | atomic_inc(&dev->counts[_DRM_STAT_OPENS]); | 151 | goto err_undo; |
138 | if (!dev->open_count++) | 152 | atomic_inc(&dev->counts[_DRM_STAT_OPENS]); |
139 | retcode = drm_setup(dev); | 153 | if (need_setup) { |
140 | } | 154 | retcode = drm_setup(dev); |
141 | if (!retcode) { | 155 | if (retcode) |
142 | mutex_lock(&dev->struct_mutex); | 156 | goto err_undo; |
143 | if (dev->dev_mapping == NULL) | ||
144 | dev->dev_mapping = &inode->i_data; | ||
145 | /* ihold ensures nobody can remove inode with our i_data */ | ||
146 | ihold(container_of(dev->dev_mapping, struct inode, i_data)); | ||
147 | inode->i_mapping = dev->dev_mapping; | ||
148 | filp->f_mapping = dev->dev_mapping; | ||
149 | mutex_unlock(&dev->struct_mutex); | ||
150 | } | 157 | } |
158 | return 0; | ||
151 | 159 | ||
160 | err_undo: | ||
161 | mutex_lock(&dev->struct_mutex); | ||
162 | filp->f_mapping = old_mapping; | ||
163 | inode->i_mapping = old_mapping; | ||
164 | iput(container_of(dev->dev_mapping, struct inode, i_data)); | ||
165 | dev->dev_mapping = old_mapping; | ||
166 | mutex_unlock(&dev->struct_mutex); | ||
167 | dev->open_count--; | ||
152 | return retcode; | 168 | return retcode; |
153 | } | 169 | } |
154 | EXPORT_SYMBOL(drm_open); | 170 | EXPORT_SYMBOL(drm_open); |
diff --git a/drivers/gpu/drm/nouveau/core/engine/disp/nv50.c b/drivers/gpu/drm/nouveau/core/engine/disp/nv50.c index 16a9afb1060b..05a909a17cee 100644 --- a/drivers/gpu/drm/nouveau/core/engine/disp/nv50.c +++ b/drivers/gpu/drm/nouveau/core/engine/disp/nv50.c | |||
@@ -22,6 +22,8 @@ | |||
22 | * Authors: Ben Skeggs | 22 | * Authors: Ben Skeggs |
23 | */ | 23 | */ |
24 | 24 | ||
25 | #include <subdev/bar.h> | ||
26 | |||
25 | #include <engine/software.h> | 27 | #include <engine/software.h> |
26 | #include <engine/disp.h> | 28 | #include <engine/disp.h> |
27 | 29 | ||
@@ -37,6 +39,7 @@ nv50_disp_sclass[] = { | |||
37 | static void | 39 | static void |
38 | nv50_disp_intr_vblank(struct nv50_disp_priv *priv, int crtc) | 40 | nv50_disp_intr_vblank(struct nv50_disp_priv *priv, int crtc) |
39 | { | 41 | { |
42 | struct nouveau_bar *bar = nouveau_bar(priv); | ||
40 | struct nouveau_disp *disp = &priv->base; | 43 | struct nouveau_disp *disp = &priv->base; |
41 | struct nouveau_software_chan *chan, *temp; | 44 | struct nouveau_software_chan *chan, *temp; |
42 | unsigned long flags; | 45 | unsigned long flags; |
@@ -46,18 +49,19 @@ nv50_disp_intr_vblank(struct nv50_disp_priv *priv, int crtc) | |||
46 | if (chan->vblank.crtc != crtc) | 49 | if (chan->vblank.crtc != crtc) |
47 | continue; | 50 | continue; |
48 | 51 | ||
49 | nv_wr32(priv, 0x001704, chan->vblank.channel); | ||
50 | nv_wr32(priv, 0x001710, 0x80000000 | chan->vblank.ctxdma); | ||
51 | |||
52 | if (nv_device(priv)->chipset == 0x50) { | 52 | if (nv_device(priv)->chipset == 0x50) { |
53 | nv_wr32(priv, 0x001704, chan->vblank.channel); | ||
54 | nv_wr32(priv, 0x001710, 0x80000000 | chan->vblank.ctxdma); | ||
55 | bar->flush(bar); | ||
53 | nv_wr32(priv, 0x001570, chan->vblank.offset); | 56 | nv_wr32(priv, 0x001570, chan->vblank.offset); |
54 | nv_wr32(priv, 0x001574, chan->vblank.value); | 57 | nv_wr32(priv, 0x001574, chan->vblank.value); |
55 | } else { | 58 | } else { |
56 | if (nv_device(priv)->chipset >= 0xc0) { | 59 | nv_wr32(priv, 0x001718, 0x80000000 | chan->vblank.channel); |
57 | nv_wr32(priv, 0x06000c, | 60 | bar->flush(bar); |
58 | upper_32_bits(chan->vblank.offset)); | 61 | nv_wr32(priv, 0x06000c, |
59 | } | 62 | upper_32_bits(chan->vblank.offset)); |
60 | nv_wr32(priv, 0x060010, chan->vblank.offset); | 63 | nv_wr32(priv, 0x060010, |
64 | lower_32_bits(chan->vblank.offset)); | ||
61 | nv_wr32(priv, 0x060014, chan->vblank.value); | 65 | nv_wr32(priv, 0x060014, chan->vblank.value); |
62 | } | 66 | } |
63 | 67 | ||
diff --git a/drivers/gpu/drm/nouveau/core/engine/graph/nv40.c b/drivers/gpu/drm/nouveau/core/engine/graph/nv40.c index 8d0021049ec0..425001204a89 100644 --- a/drivers/gpu/drm/nouveau/core/engine/graph/nv40.c +++ b/drivers/gpu/drm/nouveau/core/engine/graph/nv40.c | |||
@@ -156,8 +156,8 @@ nv40_graph_context_ctor(struct nouveau_object *parent, | |||
156 | static int | 156 | static int |
157 | nv40_graph_context_fini(struct nouveau_object *object, bool suspend) | 157 | nv40_graph_context_fini(struct nouveau_object *object, bool suspend) |
158 | { | 158 | { |
159 | struct nv04_graph_priv *priv = (void *)object->engine; | 159 | struct nv40_graph_priv *priv = (void *)object->engine; |
160 | struct nv04_graph_chan *chan = (void *)object; | 160 | struct nv40_graph_chan *chan = (void *)object; |
161 | u32 inst = 0x01000000 | nv_gpuobj(chan)->addr >> 4; | 161 | u32 inst = 0x01000000 | nv_gpuobj(chan)->addr >> 4; |
162 | int ret = 0; | 162 | int ret = 0; |
163 | 163 | ||
diff --git a/drivers/gpu/drm/nouveau/core/engine/mpeg/nv40.c b/drivers/gpu/drm/nouveau/core/engine/mpeg/nv40.c index 12418574efea..f7c581ad1991 100644 --- a/drivers/gpu/drm/nouveau/core/engine/mpeg/nv40.c +++ b/drivers/gpu/drm/nouveau/core/engine/mpeg/nv40.c | |||
@@ -38,7 +38,7 @@ struct nv40_mpeg_priv { | |||
38 | }; | 38 | }; |
39 | 39 | ||
40 | struct nv40_mpeg_chan { | 40 | struct nv40_mpeg_chan { |
41 | struct nouveau_mpeg base; | 41 | struct nouveau_mpeg_chan base; |
42 | }; | 42 | }; |
43 | 43 | ||
44 | /******************************************************************************* | 44 | /******************************************************************************* |
diff --git a/drivers/gpu/drm/nouveau/core/subdev/vm/nv41.c b/drivers/gpu/drm/nouveau/core/subdev/vm/nv41.c index 49050d991e75..9474cfca6e4c 100644 --- a/drivers/gpu/drm/nouveau/core/subdev/vm/nv41.c +++ b/drivers/gpu/drm/nouveau/core/subdev/vm/nv41.c | |||
@@ -67,7 +67,7 @@ nv41_vm_unmap(struct nouveau_gpuobj *pgt, u32 pte, u32 cnt) | |||
67 | static void | 67 | static void |
68 | nv41_vm_flush(struct nouveau_vm *vm) | 68 | nv41_vm_flush(struct nouveau_vm *vm) |
69 | { | 69 | { |
70 | struct nv04_vm_priv *priv = (void *)vm->vmm; | 70 | struct nv04_vmmgr_priv *priv = (void *)vm->vmm; |
71 | 71 | ||
72 | mutex_lock(&nv_subdev(priv)->mutex); | 72 | mutex_lock(&nv_subdev(priv)->mutex); |
73 | nv_wr32(priv, 0x100810, 0x00000022); | 73 | nv_wr32(priv, 0x100810, 0x00000022); |
diff --git a/drivers/gpu/drm/nouveau/nouveau_connector.c b/drivers/gpu/drm/nouveau/nouveau_connector.c index 9a6e2cb282dc..d3595b23434a 100644 --- a/drivers/gpu/drm/nouveau/nouveau_connector.c +++ b/drivers/gpu/drm/nouveau/nouveau_connector.c | |||
@@ -355,7 +355,7 @@ nouveau_connector_detect_lvds(struct drm_connector *connector, bool force) | |||
355 | * valid - it's not (rh#613284) | 355 | * valid - it's not (rh#613284) |
356 | */ | 356 | */ |
357 | if (nv_encoder->dcb->lvdsconf.use_acpi_for_edid) { | 357 | if (nv_encoder->dcb->lvdsconf.use_acpi_for_edid) { |
358 | if (!(nv_connector->edid = nouveau_acpi_edid(dev, connector))) { | 358 | if ((nv_connector->edid = nouveau_acpi_edid(dev, connector))) { |
359 | status = connector_status_connected; | 359 | status = connector_status_connected; |
360 | goto out; | 360 | goto out; |
361 | } | 361 | } |
diff --git a/drivers/gpu/drm/radeon/atombios_crtc.c b/drivers/gpu/drm/radeon/atombios_crtc.c index 2e566e123e9e..3bce0299f64a 100644 --- a/drivers/gpu/drm/radeon/atombios_crtc.c +++ b/drivers/gpu/drm/radeon/atombios_crtc.c | |||
@@ -1696,35 +1696,43 @@ static int radeon_atom_pick_pll(struct drm_crtc *crtc) | |||
1696 | return ATOM_PPLL2; | 1696 | return ATOM_PPLL2; |
1697 | DRM_ERROR("unable to allocate a PPLL\n"); | 1697 | DRM_ERROR("unable to allocate a PPLL\n"); |
1698 | return ATOM_PPLL_INVALID; | 1698 | return ATOM_PPLL_INVALID; |
1699 | } else { | 1699 | } else if (ASIC_IS_AVIVO(rdev)) { |
1700 | if (ASIC_IS_AVIVO(rdev)) { | 1700 | /* in DP mode, the DP ref clock can come from either PPLL |
1701 | /* in DP mode, the DP ref clock can come from either PPLL | 1701 | * depending on the asic: |
1702 | * depending on the asic: | 1702 | * DCE3: PPLL1 or PPLL2 |
1703 | * DCE3: PPLL1 or PPLL2 | 1703 | */ |
1704 | */ | 1704 | if (ENCODER_MODE_IS_DP(atombios_get_encoder_mode(radeon_crtc->encoder))) { |
1705 | if (ENCODER_MODE_IS_DP(atombios_get_encoder_mode(radeon_crtc->encoder))) { | 1705 | /* use the same PPLL for all DP monitors */ |
1706 | /* use the same PPLL for all DP monitors */ | 1706 | pll = radeon_get_shared_dp_ppll(crtc); |
1707 | pll = radeon_get_shared_dp_ppll(crtc); | 1707 | if (pll != ATOM_PPLL_INVALID) |
1708 | if (pll != ATOM_PPLL_INVALID) | 1708 | return pll; |
1709 | return pll; | 1709 | } else { |
1710 | } else { | 1710 | /* use the same PPLL for all monitors with the same clock */ |
1711 | /* use the same PPLL for all monitors with the same clock */ | 1711 | pll = radeon_get_shared_nondp_ppll(crtc); |
1712 | pll = radeon_get_shared_nondp_ppll(crtc); | 1712 | if (pll != ATOM_PPLL_INVALID) |
1713 | if (pll != ATOM_PPLL_INVALID) | 1713 | return pll; |
1714 | return pll; | 1714 | } |
1715 | } | 1715 | /* all other cases */ |
1716 | /* all other cases */ | 1716 | pll_in_use = radeon_get_pll_use_mask(crtc); |
1717 | pll_in_use = radeon_get_pll_use_mask(crtc); | 1717 | /* the order shouldn't matter here, but we probably |
1718 | * need this until we have atomic modeset | ||
1719 | */ | ||
1720 | if (rdev->flags & RADEON_IS_IGP) { | ||
1718 | if (!(pll_in_use & (1 << ATOM_PPLL1))) | 1721 | if (!(pll_in_use & (1 << ATOM_PPLL1))) |
1719 | return ATOM_PPLL1; | 1722 | return ATOM_PPLL1; |
1720 | if (!(pll_in_use & (1 << ATOM_PPLL2))) | 1723 | if (!(pll_in_use & (1 << ATOM_PPLL2))) |
1721 | return ATOM_PPLL2; | 1724 | return ATOM_PPLL2; |
1722 | DRM_ERROR("unable to allocate a PPLL\n"); | ||
1723 | return ATOM_PPLL_INVALID; | ||
1724 | } else { | 1725 | } else { |
1725 | /* on pre-R5xx asics, the crtc to pll mapping is hardcoded */ | 1726 | if (!(pll_in_use & (1 << ATOM_PPLL2))) |
1726 | return radeon_crtc->crtc_id; | 1727 | return ATOM_PPLL2; |
1728 | if (!(pll_in_use & (1 << ATOM_PPLL1))) | ||
1729 | return ATOM_PPLL1; | ||
1727 | } | 1730 | } |
1731 | DRM_ERROR("unable to allocate a PPLL\n"); | ||
1732 | return ATOM_PPLL_INVALID; | ||
1733 | } else { | ||
1734 | /* on pre-R5xx asics, the crtc to pll mapping is hardcoded */ | ||
1735 | return radeon_crtc->crtc_id; | ||
1728 | } | 1736 | } |
1729 | } | 1737 | } |
1730 | 1738 | ||
diff --git a/drivers/gpu/drm/radeon/evergreen.c b/drivers/gpu/drm/radeon/evergreen.c index 14313ad43b76..af31f829f4a8 100644 --- a/drivers/gpu/drm/radeon/evergreen.c +++ b/drivers/gpu/drm/radeon/evergreen.c | |||
@@ -1372,7 +1372,7 @@ void evergreen_mc_resume(struct radeon_device *rdev, struct evergreen_mc_save *s | |||
1372 | WREG32(BIF_FB_EN, FB_READ_EN | FB_WRITE_EN); | 1372 | WREG32(BIF_FB_EN, FB_READ_EN | FB_WRITE_EN); |
1373 | 1373 | ||
1374 | for (i = 0; i < rdev->num_crtc; i++) { | 1374 | for (i = 0; i < rdev->num_crtc; i++) { |
1375 | if (save->crtc_enabled) { | 1375 | if (save->crtc_enabled[i]) { |
1376 | if (ASIC_IS_DCE6(rdev)) { | 1376 | if (ASIC_IS_DCE6(rdev)) { |
1377 | tmp = RREG32(EVERGREEN_CRTC_BLANK_CONTROL + crtc_offsets[i]); | 1377 | tmp = RREG32(EVERGREEN_CRTC_BLANK_CONTROL + crtc_offsets[i]); |
1378 | tmp |= EVERGREEN_CRTC_BLANK_DATA_EN; | 1378 | tmp |= EVERGREEN_CRTC_BLANK_DATA_EN; |
diff --git a/drivers/gpu/drm/radeon/evergreen_cs.c b/drivers/gpu/drm/radeon/evergreen_cs.c index 95e6318b6268..c042e497e450 100644 --- a/drivers/gpu/drm/radeon/evergreen_cs.c +++ b/drivers/gpu/drm/radeon/evergreen_cs.c | |||
@@ -2725,6 +2725,9 @@ static bool evergreen_vm_reg_valid(u32 reg) | |||
2725 | /* check config regs */ | 2725 | /* check config regs */ |
2726 | switch (reg) { | 2726 | switch (reg) { |
2727 | case GRBM_GFX_INDEX: | 2727 | case GRBM_GFX_INDEX: |
2728 | case CP_STRMOUT_CNTL: | ||
2729 | case CP_COHER_CNTL: | ||
2730 | case CP_COHER_SIZE: | ||
2728 | case VGT_VTX_VECT_EJECT_REG: | 2731 | case VGT_VTX_VECT_EJECT_REG: |
2729 | case VGT_CACHE_INVALIDATION: | 2732 | case VGT_CACHE_INVALIDATION: |
2730 | case VGT_GS_VERTEX_REUSE: | 2733 | case VGT_GS_VERTEX_REUSE: |
diff --git a/drivers/gpu/drm/radeon/evergreend.h b/drivers/gpu/drm/radeon/evergreend.h index df542f1a5dfb..2bc0f6a1b428 100644 --- a/drivers/gpu/drm/radeon/evergreend.h +++ b/drivers/gpu/drm/radeon/evergreend.h | |||
@@ -91,6 +91,10 @@ | |||
91 | #define FB_READ_EN (1 << 0) | 91 | #define FB_READ_EN (1 << 0) |
92 | #define FB_WRITE_EN (1 << 1) | 92 | #define FB_WRITE_EN (1 << 1) |
93 | 93 | ||
94 | #define CP_STRMOUT_CNTL 0x84FC | ||
95 | |||
96 | #define CP_COHER_CNTL 0x85F0 | ||
97 | #define CP_COHER_SIZE 0x85F4 | ||
94 | #define CP_COHER_BASE 0x85F8 | 98 | #define CP_COHER_BASE 0x85F8 |
95 | #define CP_STALLED_STAT1 0x8674 | 99 | #define CP_STALLED_STAT1 0x8674 |
96 | #define CP_STALLED_STAT2 0x8678 | 100 | #define CP_STALLED_STAT2 0x8678 |
diff --git a/drivers/gpu/drm/radeon/si.c b/drivers/gpu/drm/radeon/si.c index b0db712060fb..4422d630b33b 100644 --- a/drivers/gpu/drm/radeon/si.c +++ b/drivers/gpu/drm/radeon/si.c | |||
@@ -2474,6 +2474,7 @@ static bool si_vm_reg_valid(u32 reg) | |||
2474 | /* check config regs */ | 2474 | /* check config regs */ |
2475 | switch (reg) { | 2475 | switch (reg) { |
2476 | case GRBM_GFX_INDEX: | 2476 | case GRBM_GFX_INDEX: |
2477 | case CP_STRMOUT_CNTL: | ||
2477 | case VGT_VTX_VECT_EJECT_REG: | 2478 | case VGT_VTX_VECT_EJECT_REG: |
2478 | case VGT_CACHE_INVALIDATION: | 2479 | case VGT_CACHE_INVALIDATION: |
2479 | case VGT_ESGS_RING_SIZE: | 2480 | case VGT_ESGS_RING_SIZE: |
diff --git a/drivers/gpu/drm/radeon/sid.h b/drivers/gpu/drm/radeon/sid.h index 7d2a20e56577..a8871afc5b4e 100644 --- a/drivers/gpu/drm/radeon/sid.h +++ b/drivers/gpu/drm/radeon/sid.h | |||
@@ -424,6 +424,7 @@ | |||
424 | # define RDERR_INT_ENABLE (1 << 0) | 424 | # define RDERR_INT_ENABLE (1 << 0) |
425 | # define GUI_IDLE_INT_ENABLE (1 << 19) | 425 | # define GUI_IDLE_INT_ENABLE (1 << 19) |
426 | 426 | ||
427 | #define CP_STRMOUT_CNTL 0x84FC | ||
427 | #define SCRATCH_REG0 0x8500 | 428 | #define SCRATCH_REG0 0x8500 |
428 | #define SCRATCH_REG1 0x8504 | 429 | #define SCRATCH_REG1 0x8504 |
429 | #define SCRATCH_REG2 0x8508 | 430 | #define SCRATCH_REG2 0x8508 |
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_dmabuf.c b/drivers/gpu/drm/vmwgfx/vmwgfx_dmabuf.c index 3ce68a2e312d..d1498bfd7873 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_dmabuf.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_dmabuf.c | |||
@@ -306,7 +306,7 @@ void vmw_bo_pin(struct ttm_buffer_object *bo, bool pin) | |||
306 | 306 | ||
307 | BUG_ON(!atomic_read(&bo->reserved)); | 307 | BUG_ON(!atomic_read(&bo->reserved)); |
308 | BUG_ON(old_mem_type != TTM_PL_VRAM && | 308 | BUG_ON(old_mem_type != TTM_PL_VRAM && |
309 | old_mem_type != VMW_PL_FLAG_GMR); | 309 | old_mem_type != VMW_PL_GMR); |
310 | 310 | ||
311 | pl_flags = TTM_PL_FLAG_VRAM | VMW_PL_FLAG_GMR | TTM_PL_FLAG_CACHED; | 311 | pl_flags = TTM_PL_FLAG_VRAM | VMW_PL_FLAG_GMR | TTM_PL_FLAG_CACHED; |
312 | if (pin) | 312 | if (pin) |
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c index ed3c1e7ddde9..2dd185e42f21 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c | |||
@@ -1098,6 +1098,11 @@ static void vmw_pm_complete(struct device *kdev) | |||
1098 | struct drm_device *dev = pci_get_drvdata(pdev); | 1098 | struct drm_device *dev = pci_get_drvdata(pdev); |
1099 | struct vmw_private *dev_priv = vmw_priv(dev); | 1099 | struct vmw_private *dev_priv = vmw_priv(dev); |
1100 | 1100 | ||
1101 | mutex_lock(&dev_priv->hw_mutex); | ||
1102 | vmw_write(dev_priv, SVGA_REG_ID, SVGA_ID_2); | ||
1103 | (void) vmw_read(dev_priv, SVGA_REG_ID); | ||
1104 | mutex_unlock(&dev_priv->hw_mutex); | ||
1105 | |||
1101 | /** | 1106 | /** |
1102 | * Reclaim 3d reference held by fbdev and potentially | 1107 | * Reclaim 3d reference held by fbdev and potentially |
1103 | * start fifo. | 1108 | * start fifo. |
diff --git a/drivers/hid/hidraw.c b/drivers/hid/hidraw.c index 17d15bb610d1..7c47fc3f7b2b 100644 --- a/drivers/hid/hidraw.c +++ b/drivers/hid/hidraw.c | |||
@@ -42,7 +42,6 @@ static struct cdev hidraw_cdev; | |||
42 | static struct class *hidraw_class; | 42 | static struct class *hidraw_class; |
43 | static struct hidraw *hidraw_table[HIDRAW_MAX_DEVICES]; | 43 | static struct hidraw *hidraw_table[HIDRAW_MAX_DEVICES]; |
44 | static DEFINE_MUTEX(minors_lock); | 44 | static DEFINE_MUTEX(minors_lock); |
45 | static void drop_ref(struct hidraw *hid, int exists_bit); | ||
46 | 45 | ||
47 | static ssize_t hidraw_read(struct file *file, char __user *buffer, size_t count, loff_t *ppos) | 46 | static ssize_t hidraw_read(struct file *file, char __user *buffer, size_t count, loff_t *ppos) |
48 | { | 47 | { |
@@ -114,7 +113,7 @@ static ssize_t hidraw_send_report(struct file *file, const char __user *buffer, | |||
114 | __u8 *buf; | 113 | __u8 *buf; |
115 | int ret = 0; | 114 | int ret = 0; |
116 | 115 | ||
117 | if (!hidraw_table[minor] || !hidraw_table[minor]->exist) { | 116 | if (!hidraw_table[minor]) { |
118 | ret = -ENODEV; | 117 | ret = -ENODEV; |
119 | goto out; | 118 | goto out; |
120 | } | 119 | } |
@@ -262,7 +261,7 @@ static int hidraw_open(struct inode *inode, struct file *file) | |||
262 | } | 261 | } |
263 | 262 | ||
264 | mutex_lock(&minors_lock); | 263 | mutex_lock(&minors_lock); |
265 | if (!hidraw_table[minor] || !hidraw_table[minor]->exist) { | 264 | if (!hidraw_table[minor]) { |
266 | err = -ENODEV; | 265 | err = -ENODEV; |
267 | goto out_unlock; | 266 | goto out_unlock; |
268 | } | 267 | } |
@@ -299,12 +298,36 @@ out: | |||
299 | static int hidraw_release(struct inode * inode, struct file * file) | 298 | static int hidraw_release(struct inode * inode, struct file * file) |
300 | { | 299 | { |
301 | unsigned int minor = iminor(inode); | 300 | unsigned int minor = iminor(inode); |
301 | struct hidraw *dev; | ||
302 | struct hidraw_list *list = file->private_data; | 302 | struct hidraw_list *list = file->private_data; |
303 | int ret; | ||
304 | int i; | ||
305 | |||
306 | mutex_lock(&minors_lock); | ||
307 | if (!hidraw_table[minor]) { | ||
308 | ret = -ENODEV; | ||
309 | goto unlock; | ||
310 | } | ||
303 | 311 | ||
304 | drop_ref(hidraw_table[minor], 0); | ||
305 | list_del(&list->node); | 312 | list_del(&list->node); |
313 | dev = hidraw_table[minor]; | ||
314 | if (!--dev->open) { | ||
315 | if (list->hidraw->exist) { | ||
316 | hid_hw_power(dev->hid, PM_HINT_NORMAL); | ||
317 | hid_hw_close(dev->hid); | ||
318 | } else { | ||
319 | kfree(list->hidraw); | ||
320 | } | ||
321 | } | ||
322 | |||
323 | for (i = 0; i < HIDRAW_BUFFER_SIZE; ++i) | ||
324 | kfree(list->buffer[i].value); | ||
306 | kfree(list); | 325 | kfree(list); |
307 | return 0; | 326 | ret = 0; |
327 | unlock: | ||
328 | mutex_unlock(&minors_lock); | ||
329 | |||
330 | return ret; | ||
308 | } | 331 | } |
309 | 332 | ||
310 | static long hidraw_ioctl(struct file *file, unsigned int cmd, | 333 | static long hidraw_ioctl(struct file *file, unsigned int cmd, |
@@ -506,7 +529,21 @@ EXPORT_SYMBOL_GPL(hidraw_connect); | |||
506 | void hidraw_disconnect(struct hid_device *hid) | 529 | void hidraw_disconnect(struct hid_device *hid) |
507 | { | 530 | { |
508 | struct hidraw *hidraw = hid->hidraw; | 531 | struct hidraw *hidraw = hid->hidraw; |
509 | drop_ref(hidraw, 1); | 532 | |
533 | mutex_lock(&minors_lock); | ||
534 | hidraw->exist = 0; | ||
535 | |||
536 | device_destroy(hidraw_class, MKDEV(hidraw_major, hidraw->minor)); | ||
537 | |||
538 | hidraw_table[hidraw->minor] = NULL; | ||
539 | |||
540 | if (hidraw->open) { | ||
541 | hid_hw_close(hid); | ||
542 | wake_up_interruptible(&hidraw->wait); | ||
543 | } else { | ||
544 | kfree(hidraw); | ||
545 | } | ||
546 | mutex_unlock(&minors_lock); | ||
510 | } | 547 | } |
511 | EXPORT_SYMBOL_GPL(hidraw_disconnect); | 548 | EXPORT_SYMBOL_GPL(hidraw_disconnect); |
512 | 549 | ||
@@ -555,23 +592,3 @@ void hidraw_exit(void) | |||
555 | unregister_chrdev_region(dev_id, HIDRAW_MAX_DEVICES); | 592 | unregister_chrdev_region(dev_id, HIDRAW_MAX_DEVICES); |
556 | 593 | ||
557 | } | 594 | } |
558 | |||
559 | static void drop_ref(struct hidraw *hidraw, int exists_bit) | ||
560 | { | ||
561 | mutex_lock(&minors_lock); | ||
562 | if (exists_bit) { | ||
563 | hid_hw_close(hidraw->hid); | ||
564 | hidraw->exist = 0; | ||
565 | if (hidraw->open) | ||
566 | wake_up_interruptible(&hidraw->wait); | ||
567 | } else { | ||
568 | --hidraw->open; | ||
569 | } | ||
570 | |||
571 | if (!hidraw->open && !hidraw->exist) { | ||
572 | device_destroy(hidraw_class, MKDEV(hidraw_major, hidraw->minor)); | ||
573 | hidraw_table[hidraw->minor] = NULL; | ||
574 | kfree(hidraw); | ||
575 | } | ||
576 | mutex_unlock(&minors_lock); | ||
577 | } | ||
diff --git a/drivers/hwmon/asb100.c b/drivers/hwmon/asb100.c index a227be47149f..520e5bf4f76d 100644 --- a/drivers/hwmon/asb100.c +++ b/drivers/hwmon/asb100.c | |||
@@ -32,7 +32,7 @@ | |||
32 | * ASB100-A supports pwm1, while plain ASB100 does not. There is no known | 32 | * ASB100-A supports pwm1, while plain ASB100 does not. There is no known |
33 | * way for the driver to tell which one is there. | 33 | * way for the driver to tell which one is there. |
34 | * | 34 | * |
35 | * Chip #vin #fanin #pwm #temp wchipid vendid i2c ISA | 35 | * Chip #vin #fanin #pwm #temp wchipid vendid i2c ISA |
36 | * asb100 7 3 1 4 0x31 0x0694 yes no | 36 | * asb100 7 3 1 4 0x31 0x0694 yes no |
37 | */ | 37 | */ |
38 | 38 | ||
diff --git a/drivers/hwmon/w83627ehf.c b/drivers/hwmon/w83627ehf.c index 1821b7423d5b..de3c7e04c3b5 100644 --- a/drivers/hwmon/w83627ehf.c +++ b/drivers/hwmon/w83627ehf.c | |||
@@ -2083,6 +2083,7 @@ static int __devinit w83627ehf_probe(struct platform_device *pdev) | |||
2083 | mutex_init(&data->lock); | 2083 | mutex_init(&data->lock); |
2084 | mutex_init(&data->update_lock); | 2084 | mutex_init(&data->update_lock); |
2085 | data->name = w83627ehf_device_names[sio_data->kind]; | 2085 | data->name = w83627ehf_device_names[sio_data->kind]; |
2086 | data->bank = 0xff; /* Force initial bank selection */ | ||
2086 | platform_set_drvdata(pdev, data); | 2087 | platform_set_drvdata(pdev, data); |
2087 | 2088 | ||
2088 | /* 627EHG and 627EHF have 10 voltage inputs; 627DHG and 667HG have 9 */ | 2089 | /* 627EHG and 627EHF have 10 voltage inputs; 627DHG and 667HG have 9 */ |
diff --git a/drivers/hwmon/w83627hf.c b/drivers/hwmon/w83627hf.c index 5b1a6a666441..af1589908709 100644 --- a/drivers/hwmon/w83627hf.c +++ b/drivers/hwmon/w83627hf.c | |||
@@ -25,7 +25,7 @@ | |||
25 | /* | 25 | /* |
26 | * Supports following chips: | 26 | * Supports following chips: |
27 | * | 27 | * |
28 | * Chip #vin #fanin #pwm #temp wchipid vendid i2c ISA | 28 | * Chip #vin #fanin #pwm #temp wchipid vendid i2c ISA |
29 | * w83627hf 9 3 2 3 0x20 0x5ca3 no yes(LPC) | 29 | * w83627hf 9 3 2 3 0x20 0x5ca3 no yes(LPC) |
30 | * w83627thf 7 3 3 3 0x90 0x5ca3 no yes(LPC) | 30 | * w83627thf 7 3 3 3 0x90 0x5ca3 no yes(LPC) |
31 | * w83637hf 7 3 3 3 0x80 0x5ca3 no yes(LPC) | 31 | * w83637hf 7 3 3 3 0x80 0x5ca3 no yes(LPC) |
diff --git a/drivers/hwmon/w83781d.c b/drivers/hwmon/w83781d.c index 5a5046d94c3e..20f11d31da40 100644 --- a/drivers/hwmon/w83781d.c +++ b/drivers/hwmon/w83781d.c | |||
@@ -24,7 +24,7 @@ | |||
24 | /* | 24 | /* |
25 | * Supports following chips: | 25 | * Supports following chips: |
26 | * | 26 | * |
27 | * Chip #vin #fanin #pwm #temp wchipid vendid i2c ISA | 27 | * Chip #vin #fanin #pwm #temp wchipid vendid i2c ISA |
28 | * as99127f 7 3 0 3 0x31 0x12c3 yes no | 28 | * as99127f 7 3 0 3 0x31 0x12c3 yes no |
29 | * as99127f rev.2 (type_name = as99127f) 0x31 0x5ca3 yes no | 29 | * as99127f rev.2 (type_name = as99127f) 0x31 0x5ca3 yes no |
30 | * w83781d 7 3 0 3 0x10-1 0x5ca3 yes yes | 30 | * w83781d 7 3 0 3 0x10-1 0x5ca3 yes yes |
diff --git a/drivers/hwmon/w83791d.c b/drivers/hwmon/w83791d.c index 39ab7bcc616e..ed397c645198 100644 --- a/drivers/hwmon/w83791d.c +++ b/drivers/hwmon/w83791d.c | |||
@@ -22,7 +22,7 @@ | |||
22 | /* | 22 | /* |
23 | * Supports following chips: | 23 | * Supports following chips: |
24 | * | 24 | * |
25 | * Chip #vin #fanin #pwm #temp wchipid vendid i2c ISA | 25 | * Chip #vin #fanin #pwm #temp wchipid vendid i2c ISA |
26 | * w83791d 10 5 5 3 0x71 0x5ca3 yes no | 26 | * w83791d 10 5 5 3 0x71 0x5ca3 yes no |
27 | * | 27 | * |
28 | * The w83791d chip appears to be part way between the 83781d and the | 28 | * The w83791d chip appears to be part way between the 83781d and the |
diff --git a/drivers/hwmon/w83792d.c b/drivers/hwmon/w83792d.c index 053645279f38..301942d08453 100644 --- a/drivers/hwmon/w83792d.c +++ b/drivers/hwmon/w83792d.c | |||
@@ -31,7 +31,7 @@ | |||
31 | /* | 31 | /* |
32 | * Supports following chips: | 32 | * Supports following chips: |
33 | * | 33 | * |
34 | * Chip #vin #fanin #pwm #temp wchipid vendid i2c ISA | 34 | * Chip #vin #fanin #pwm #temp wchipid vendid i2c ISA |
35 | * w83792d 9 7 7 3 0x7a 0x5ca3 yes no | 35 | * w83792d 9 7 7 3 0x7a 0x5ca3 yes no |
36 | */ | 36 | */ |
37 | 37 | ||
diff --git a/drivers/hwmon/w83l786ng.c b/drivers/hwmon/w83l786ng.c index f0e8286c3c70..79710bcac2f7 100644 --- a/drivers/hwmon/w83l786ng.c +++ b/drivers/hwmon/w83l786ng.c | |||
@@ -20,7 +20,7 @@ | |||
20 | /* | 20 | /* |
21 | * Supports following chips: | 21 | * Supports following chips: |
22 | * | 22 | * |
23 | * Chip #vin #fanin #pwm #temp wchipid vendid i2c ISA | 23 | * Chip #vin #fanin #pwm #temp wchipid vendid i2c ISA |
24 | * w83l786ng 3 2 2 2 0x7b 0x5ca3 yes no | 24 | * w83l786ng 3 2 2 2 0x7b 0x5ca3 yes no |
25 | */ | 25 | */ |
26 | 26 | ||
diff --git a/drivers/i2c/busses/i2c-imx.c b/drivers/i2c/busses/i2c-imx.c index 2ef162d148cb..b9734747d610 100644 --- a/drivers/i2c/busses/i2c-imx.c +++ b/drivers/i2c/busses/i2c-imx.c | |||
@@ -52,8 +52,6 @@ | |||
52 | #include <linux/of_device.h> | 52 | #include <linux/of_device.h> |
53 | #include <linux/of_i2c.h> | 53 | #include <linux/of_i2c.h> |
54 | #include <linux/pinctrl/consumer.h> | 54 | #include <linux/pinctrl/consumer.h> |
55 | |||
56 | #include <mach/hardware.h> | ||
57 | #include <linux/platform_data/i2c-imx.h> | 55 | #include <linux/platform_data/i2c-imx.h> |
58 | 56 | ||
59 | /** Defines ******************************************************************** | 57 | /** Defines ******************************************************************** |
@@ -115,6 +113,11 @@ static u16 __initdata i2c_clk_div[50][2] = { | |||
115 | { 3072, 0x1E }, { 3840, 0x1F } | 113 | { 3072, 0x1E }, { 3840, 0x1F } |
116 | }; | 114 | }; |
117 | 115 | ||
116 | enum imx_i2c_type { | ||
117 | IMX1_I2C, | ||
118 | IMX21_I2C, | ||
119 | }; | ||
120 | |||
118 | struct imx_i2c_struct { | 121 | struct imx_i2c_struct { |
119 | struct i2c_adapter adapter; | 122 | struct i2c_adapter adapter; |
120 | struct clk *clk; | 123 | struct clk *clk; |
@@ -124,13 +127,33 @@ struct imx_i2c_struct { | |||
124 | unsigned int disable_delay; | 127 | unsigned int disable_delay; |
125 | int stopped; | 128 | int stopped; |
126 | unsigned int ifdr; /* IMX_I2C_IFDR */ | 129 | unsigned int ifdr; /* IMX_I2C_IFDR */ |
130 | enum imx_i2c_type devtype; | ||
131 | }; | ||
132 | |||
133 | static struct platform_device_id imx_i2c_devtype[] = { | ||
134 | { | ||
135 | .name = "imx1-i2c", | ||
136 | .driver_data = IMX1_I2C, | ||
137 | }, { | ||
138 | .name = "imx21-i2c", | ||
139 | .driver_data = IMX21_I2C, | ||
140 | }, { | ||
141 | /* sentinel */ | ||
142 | } | ||
127 | }; | 143 | }; |
144 | MODULE_DEVICE_TABLE(platform, imx_i2c_devtype); | ||
128 | 145 | ||
129 | static const struct of_device_id i2c_imx_dt_ids[] = { | 146 | static const struct of_device_id i2c_imx_dt_ids[] = { |
130 | { .compatible = "fsl,imx1-i2c", }, | 147 | { .compatible = "fsl,imx1-i2c", .data = &imx_i2c_devtype[IMX1_I2C], }, |
148 | { .compatible = "fsl,imx21-i2c", .data = &imx_i2c_devtype[IMX21_I2C], }, | ||
131 | { /* sentinel */ } | 149 | { /* sentinel */ } |
132 | }; | 150 | }; |
133 | 151 | ||
152 | static inline int is_imx1_i2c(struct imx_i2c_struct *i2c_imx) | ||
153 | { | ||
154 | return i2c_imx->devtype == IMX1_I2C; | ||
155 | } | ||
156 | |||
134 | /** Functions for IMX I2C adapter driver *************************************** | 157 | /** Functions for IMX I2C adapter driver *************************************** |
135 | *******************************************************************************/ | 158 | *******************************************************************************/ |
136 | 159 | ||
@@ -223,7 +246,7 @@ static void i2c_imx_stop(struct imx_i2c_struct *i2c_imx) | |||
223 | temp &= ~(I2CR_MSTA | I2CR_MTX); | 246 | temp &= ~(I2CR_MSTA | I2CR_MTX); |
224 | writeb(temp, i2c_imx->base + IMX_I2C_I2CR); | 247 | writeb(temp, i2c_imx->base + IMX_I2C_I2CR); |
225 | } | 248 | } |
226 | if (cpu_is_mx1()) { | 249 | if (is_imx1_i2c(i2c_imx)) { |
227 | /* | 250 | /* |
228 | * This delay caused by an i.MXL hardware bug. | 251 | * This delay caused by an i.MXL hardware bug. |
229 | * If no (or too short) delay, no "STOP" bit will be generated. | 252 | * If no (or too short) delay, no "STOP" bit will be generated. |
@@ -465,6 +488,8 @@ static struct i2c_algorithm i2c_imx_algo = { | |||
465 | 488 | ||
466 | static int __init i2c_imx_probe(struct platform_device *pdev) | 489 | static int __init i2c_imx_probe(struct platform_device *pdev) |
467 | { | 490 | { |
491 | const struct of_device_id *of_id = of_match_device(i2c_imx_dt_ids, | ||
492 | &pdev->dev); | ||
468 | struct imx_i2c_struct *i2c_imx; | 493 | struct imx_i2c_struct *i2c_imx; |
469 | struct resource *res; | 494 | struct resource *res; |
470 | struct imxi2c_platform_data *pdata = pdev->dev.platform_data; | 495 | struct imxi2c_platform_data *pdata = pdev->dev.platform_data; |
@@ -497,6 +522,10 @@ static int __init i2c_imx_probe(struct platform_device *pdev) | |||
497 | return -ENOMEM; | 522 | return -ENOMEM; |
498 | } | 523 | } |
499 | 524 | ||
525 | if (of_id) | ||
526 | pdev->id_entry = of_id->data; | ||
527 | i2c_imx->devtype = pdev->id_entry->driver_data; | ||
528 | |||
500 | /* Setup i2c_imx driver structure */ | 529 | /* Setup i2c_imx driver structure */ |
501 | strlcpy(i2c_imx->adapter.name, pdev->name, sizeof(i2c_imx->adapter.name)); | 530 | strlcpy(i2c_imx->adapter.name, pdev->name, sizeof(i2c_imx->adapter.name)); |
502 | i2c_imx->adapter.owner = THIS_MODULE; | 531 | i2c_imx->adapter.owner = THIS_MODULE; |
@@ -593,7 +622,8 @@ static struct platform_driver i2c_imx_driver = { | |||
593 | .name = DRIVER_NAME, | 622 | .name = DRIVER_NAME, |
594 | .owner = THIS_MODULE, | 623 | .owner = THIS_MODULE, |
595 | .of_match_table = i2c_imx_dt_ids, | 624 | .of_match_table = i2c_imx_dt_ids, |
596 | } | 625 | }, |
626 | .id_table = imx_i2c_devtype, | ||
597 | }; | 627 | }; |
598 | 628 | ||
599 | static int __init i2c_adap_imx_init(void) | 629 | static int __init i2c_adap_imx_init(void) |
diff --git a/drivers/isdn/Kconfig b/drivers/isdn/Kconfig index a233ed53913a..86cd75a0e84d 100644 --- a/drivers/isdn/Kconfig +++ b/drivers/isdn/Kconfig | |||
@@ -4,7 +4,7 @@ | |||
4 | 4 | ||
5 | menuconfig ISDN | 5 | menuconfig ISDN |
6 | bool "ISDN support" | 6 | bool "ISDN support" |
7 | depends on NET | 7 | depends on NET && NETDEVICES |
8 | depends on !S390 && !UML | 8 | depends on !S390 && !UML |
9 | ---help--- | 9 | ---help--- |
10 | ISDN ("Integrated Services Digital Network", called RNIS in France) | 10 | ISDN ("Integrated Services Digital Network", called RNIS in France) |
diff --git a/drivers/isdn/i4l/Kconfig b/drivers/isdn/i4l/Kconfig index 2302fbe70ac6..9c6650ea848e 100644 --- a/drivers/isdn/i4l/Kconfig +++ b/drivers/isdn/i4l/Kconfig | |||
@@ -6,7 +6,7 @@ if ISDN_I4L | |||
6 | 6 | ||
7 | config ISDN_PPP | 7 | config ISDN_PPP |
8 | bool "Support synchronous PPP" | 8 | bool "Support synchronous PPP" |
9 | depends on INET && NETDEVICES | 9 | depends on INET |
10 | select SLHC | 10 | select SLHC |
11 | help | 11 | help |
12 | Over digital connections such as ISDN, there is no need to | 12 | Over digital connections such as ISDN, there is no need to |
diff --git a/drivers/isdn/i4l/isdn_common.c b/drivers/isdn/i4l/isdn_common.c index 8c610fa6782b..e2a945ee9f05 100644 --- a/drivers/isdn/i4l/isdn_common.c +++ b/drivers/isdn/i4l/isdn_common.c | |||
@@ -1312,7 +1312,6 @@ isdn_ioctl(struct file *file, uint cmd, ulong arg) | |||
1312 | } else | 1312 | } else |
1313 | return -EINVAL; | 1313 | return -EINVAL; |
1314 | break; | 1314 | break; |
1315 | #ifdef CONFIG_NETDEVICES | ||
1316 | case IIOCNETGPN: | 1315 | case IIOCNETGPN: |
1317 | /* Get peer phone number of a connected | 1316 | /* Get peer phone number of a connected |
1318 | * isdn network interface */ | 1317 | * isdn network interface */ |
@@ -1322,7 +1321,6 @@ isdn_ioctl(struct file *file, uint cmd, ulong arg) | |||
1322 | return isdn_net_getpeer(&phone, argp); | 1321 | return isdn_net_getpeer(&phone, argp); |
1323 | } else | 1322 | } else |
1324 | return -EINVAL; | 1323 | return -EINVAL; |
1325 | #endif | ||
1326 | default: | 1324 | default: |
1327 | return -EINVAL; | 1325 | return -EINVAL; |
1328 | } | 1326 | } |
@@ -1352,7 +1350,6 @@ isdn_ioctl(struct file *file, uint cmd, ulong arg) | |||
1352 | case IIOCNETLCR: | 1350 | case IIOCNETLCR: |
1353 | printk(KERN_INFO "INFO: ISDN_ABC_LCR_SUPPORT not enabled\n"); | 1351 | printk(KERN_INFO "INFO: ISDN_ABC_LCR_SUPPORT not enabled\n"); |
1354 | return -ENODEV; | 1352 | return -ENODEV; |
1355 | #ifdef CONFIG_NETDEVICES | ||
1356 | case IIOCNETAIF: | 1353 | case IIOCNETAIF: |
1357 | /* Add a network-interface */ | 1354 | /* Add a network-interface */ |
1358 | if (arg) { | 1355 | if (arg) { |
@@ -1491,7 +1488,6 @@ isdn_ioctl(struct file *file, uint cmd, ulong arg) | |||
1491 | return -EFAULT; | 1488 | return -EFAULT; |
1492 | return isdn_net_force_hangup(name); | 1489 | return isdn_net_force_hangup(name); |
1493 | break; | 1490 | break; |
1494 | #endif /* CONFIG_NETDEVICES */ | ||
1495 | case IIOCSETVER: | 1491 | case IIOCSETVER: |
1496 | dev->net_verbose = arg; | 1492 | dev->net_verbose = arg; |
1497 | printk(KERN_INFO "isdn: Verbose-Level is %d\n", dev->net_verbose); | 1493 | printk(KERN_INFO "isdn: Verbose-Level is %d\n", dev->net_verbose); |
diff --git a/drivers/media/platform/soc_camera/mx2_camera.c b/drivers/media/platform/soc_camera/mx2_camera.c index 9fd9d1c5b218..e575ae82771d 100644 --- a/drivers/media/platform/soc_camera/mx2_camera.c +++ b/drivers/media/platform/soc_camera/mx2_camera.c | |||
@@ -41,7 +41,6 @@ | |||
41 | #include <linux/videodev2.h> | 41 | #include <linux/videodev2.h> |
42 | 42 | ||
43 | #include <linux/platform_data/camera-mx2.h> | 43 | #include <linux/platform_data/camera-mx2.h> |
44 | #include <mach/hardware.h> | ||
45 | 44 | ||
46 | #include <asm/dma.h> | 45 | #include <asm/dma.h> |
47 | 46 | ||
@@ -121,11 +120,13 @@ | |||
121 | 120 | ||
122 | #define CSICR1 0x00 | 121 | #define CSICR1 0x00 |
123 | #define CSICR2 0x04 | 122 | #define CSICR2 0x04 |
124 | #define CSISR (cpu_is_mx27() ? 0x08 : 0x18) | 123 | #define CSISR_IMX25 0x18 |
124 | #define CSISR_IMX27 0x08 | ||
125 | #define CSISTATFIFO 0x0c | 125 | #define CSISTATFIFO 0x0c |
126 | #define CSIRFIFO 0x10 | 126 | #define CSIRFIFO 0x10 |
127 | #define CSIRXCNT 0x14 | 127 | #define CSIRXCNT 0x14 |
128 | #define CSICR3 (cpu_is_mx27() ? 0x1C : 0x08) | 128 | #define CSICR3_IMX25 0x08 |
129 | #define CSICR3_IMX27 0x1c | ||
129 | #define CSIDMASA_STATFIFO 0x20 | 130 | #define CSIDMASA_STATFIFO 0x20 |
130 | #define CSIDMATA_STATFIFO 0x24 | 131 | #define CSIDMATA_STATFIFO 0x24 |
131 | #define CSIDMASA_FB1 0x28 | 132 | #define CSIDMASA_FB1 0x28 |
@@ -268,6 +269,11 @@ struct mx2_buffer { | |||
268 | struct mx2_buf_internal internal; | 269 | struct mx2_buf_internal internal; |
269 | }; | 270 | }; |
270 | 271 | ||
272 | enum mx2_camera_type { | ||
273 | IMX25_CAMERA, | ||
274 | IMX27_CAMERA, | ||
275 | }; | ||
276 | |||
271 | struct mx2_camera_dev { | 277 | struct mx2_camera_dev { |
272 | struct device *dev; | 278 | struct device *dev; |
273 | struct soc_camera_host soc_host; | 279 | struct soc_camera_host soc_host; |
@@ -291,6 +297,9 @@ struct mx2_camera_dev { | |||
291 | struct mx2_buffer *fb2_active; | 297 | struct mx2_buffer *fb2_active; |
292 | 298 | ||
293 | u32 csicr1; | 299 | u32 csicr1; |
300 | u32 reg_csisr; | ||
301 | u32 reg_csicr3; | ||
302 | enum mx2_camera_type devtype; | ||
294 | 303 | ||
295 | struct mx2_buf_internal buf_discard[2]; | 304 | struct mx2_buf_internal buf_discard[2]; |
296 | void *discard_buffer; | 305 | void *discard_buffer; |
@@ -303,6 +312,29 @@ struct mx2_camera_dev { | |||
303 | struct vb2_alloc_ctx *alloc_ctx; | 312 | struct vb2_alloc_ctx *alloc_ctx; |
304 | }; | 313 | }; |
305 | 314 | ||
315 | static struct platform_device_id mx2_camera_devtype[] = { | ||
316 | { | ||
317 | .name = "imx25-camera", | ||
318 | .driver_data = IMX25_CAMERA, | ||
319 | }, { | ||
320 | .name = "imx27-camera", | ||
321 | .driver_data = IMX27_CAMERA, | ||
322 | }, { | ||
323 | /* sentinel */ | ||
324 | } | ||
325 | }; | ||
326 | MODULE_DEVICE_TABLE(platform, mx2_camera_devtype); | ||
327 | |||
328 | static inline int is_imx25_camera(struct mx2_camera_dev *pcdev) | ||
329 | { | ||
330 | return pcdev->devtype == IMX25_CAMERA; | ||
331 | } | ||
332 | |||
333 | static inline int is_imx27_camera(struct mx2_camera_dev *pcdev) | ||
334 | { | ||
335 | return pcdev->devtype == IMX27_CAMERA; | ||
336 | } | ||
337 | |||
306 | static struct mx2_buffer *mx2_ibuf_to_buf(struct mx2_buf_internal *int_buf) | 338 | static struct mx2_buffer *mx2_ibuf_to_buf(struct mx2_buf_internal *int_buf) |
307 | { | 339 | { |
308 | return container_of(int_buf, struct mx2_buffer, internal); | 340 | return container_of(int_buf, struct mx2_buffer, internal); |
@@ -434,9 +466,9 @@ static void mx2_camera_deactivate(struct mx2_camera_dev *pcdev) | |||
434 | 466 | ||
435 | clk_disable_unprepare(pcdev->clk_csi); | 467 | clk_disable_unprepare(pcdev->clk_csi); |
436 | writel(0, pcdev->base_csi + CSICR1); | 468 | writel(0, pcdev->base_csi + CSICR1); |
437 | if (cpu_is_mx27()) { | 469 | if (is_imx27_camera(pcdev)) { |
438 | writel(0, pcdev->base_emma + PRP_CNTL); | 470 | writel(0, pcdev->base_emma + PRP_CNTL); |
439 | } else if (cpu_is_mx25()) { | 471 | } else if (is_imx25_camera(pcdev)) { |
440 | spin_lock_irqsave(&pcdev->lock, flags); | 472 | spin_lock_irqsave(&pcdev->lock, flags); |
441 | pcdev->fb1_active = NULL; | 473 | pcdev->fb1_active = NULL; |
442 | pcdev->fb2_active = NULL; | 474 | pcdev->fb2_active = NULL; |
@@ -466,7 +498,7 @@ static int mx2_camera_add_device(struct soc_camera_device *icd) | |||
466 | 498 | ||
467 | csicr1 = CSICR1_MCLKEN; | 499 | csicr1 = CSICR1_MCLKEN; |
468 | 500 | ||
469 | if (cpu_is_mx27()) | 501 | if (is_imx27_camera(pcdev)) |
470 | csicr1 |= CSICR1_PRP_IF_EN | CSICR1_FCC | | 502 | csicr1 |= CSICR1_PRP_IF_EN | CSICR1_FCC | |
471 | CSICR1_RXFF_LEVEL(0); | 503 | CSICR1_RXFF_LEVEL(0); |
472 | 504 | ||
@@ -542,7 +574,7 @@ out: | |||
542 | static irqreturn_t mx25_camera_irq(int irq_csi, void *data) | 574 | static irqreturn_t mx25_camera_irq(int irq_csi, void *data) |
543 | { | 575 | { |
544 | struct mx2_camera_dev *pcdev = data; | 576 | struct mx2_camera_dev *pcdev = data; |
545 | u32 status = readl(pcdev->base_csi + CSISR); | 577 | u32 status = readl(pcdev->base_csi + pcdev->reg_csisr); |
546 | 578 | ||
547 | if (status & CSISR_DMA_TSF_FB1_INT) | 579 | if (status & CSISR_DMA_TSF_FB1_INT) |
548 | mx25_camera_frame_done(pcdev, 1, MX2_STATE_DONE); | 580 | mx25_camera_frame_done(pcdev, 1, MX2_STATE_DONE); |
@@ -551,7 +583,7 @@ static irqreturn_t mx25_camera_irq(int irq_csi, void *data) | |||
551 | 583 | ||
552 | /* FIXME: handle CSISR_RFF_OR_INT */ | 584 | /* FIXME: handle CSISR_RFF_OR_INT */ |
553 | 585 | ||
554 | writel(status, pcdev->base_csi + CSISR); | 586 | writel(status, pcdev->base_csi + pcdev->reg_csisr); |
555 | 587 | ||
556 | return IRQ_HANDLED; | 588 | return IRQ_HANDLED; |
557 | } | 589 | } |
@@ -636,7 +668,7 @@ static void mx2_videobuf_queue(struct vb2_buffer *vb) | |||
636 | buf->state = MX2_STATE_QUEUED; | 668 | buf->state = MX2_STATE_QUEUED; |
637 | list_add_tail(&buf->internal.queue, &pcdev->capture); | 669 | list_add_tail(&buf->internal.queue, &pcdev->capture); |
638 | 670 | ||
639 | if (cpu_is_mx25()) { | 671 | if (is_imx25_camera(pcdev)) { |
640 | u32 csicr3, dma_inten = 0; | 672 | u32 csicr3, dma_inten = 0; |
641 | 673 | ||
642 | if (pcdev->fb1_active == NULL) { | 674 | if (pcdev->fb1_active == NULL) { |
@@ -655,20 +687,20 @@ static void mx2_videobuf_queue(struct vb2_buffer *vb) | |||
655 | list_del(&buf->internal.queue); | 687 | list_del(&buf->internal.queue); |
656 | buf->state = MX2_STATE_ACTIVE; | 688 | buf->state = MX2_STATE_ACTIVE; |
657 | 689 | ||
658 | csicr3 = readl(pcdev->base_csi + CSICR3); | 690 | csicr3 = readl(pcdev->base_csi + pcdev->reg_csicr3); |
659 | 691 | ||
660 | /* Reflash DMA */ | 692 | /* Reflash DMA */ |
661 | writel(csicr3 | CSICR3_DMA_REFLASH_RFF, | 693 | writel(csicr3 | CSICR3_DMA_REFLASH_RFF, |
662 | pcdev->base_csi + CSICR3); | 694 | pcdev->base_csi + pcdev->reg_csicr3); |
663 | 695 | ||
664 | /* clear & enable interrupts */ | 696 | /* clear & enable interrupts */ |
665 | writel(dma_inten, pcdev->base_csi + CSISR); | 697 | writel(dma_inten, pcdev->base_csi + pcdev->reg_csisr); |
666 | pcdev->csicr1 |= dma_inten; | 698 | pcdev->csicr1 |= dma_inten; |
667 | writel(pcdev->csicr1, pcdev->base_csi + CSICR1); | 699 | writel(pcdev->csicr1, pcdev->base_csi + CSICR1); |
668 | 700 | ||
669 | /* enable DMA */ | 701 | /* enable DMA */ |
670 | csicr3 |= CSICR3_DMA_REQ_EN_RFF | CSICR3_RXFF_LEVEL(1); | 702 | csicr3 |= CSICR3_DMA_REQ_EN_RFF | CSICR3_RXFF_LEVEL(1); |
671 | writel(csicr3, pcdev->base_csi + CSICR3); | 703 | writel(csicr3, pcdev->base_csi + pcdev->reg_csicr3); |
672 | } | 704 | } |
673 | } | 705 | } |
674 | 706 | ||
@@ -712,7 +744,7 @@ static void mx2_videobuf_release(struct vb2_buffer *vb) | |||
712 | */ | 744 | */ |
713 | 745 | ||
714 | spin_lock_irqsave(&pcdev->lock, flags); | 746 | spin_lock_irqsave(&pcdev->lock, flags); |
715 | if (cpu_is_mx25() && buf->state == MX2_STATE_ACTIVE) { | 747 | if (is_imx25_camera(pcdev) && buf->state == MX2_STATE_ACTIVE) { |
716 | if (pcdev->fb1_active == buf) { | 748 | if (pcdev->fb1_active == buf) { |
717 | pcdev->csicr1 &= ~CSICR1_FB1_DMA_INTEN; | 749 | pcdev->csicr1 &= ~CSICR1_FB1_DMA_INTEN; |
718 | writel(0, pcdev->base_csi + CSIDMASA_FB1); | 750 | writel(0, pcdev->base_csi + CSIDMASA_FB1); |
@@ -835,7 +867,7 @@ static int mx2_start_streaming(struct vb2_queue *q, unsigned int count) | |||
835 | unsigned long phys; | 867 | unsigned long phys; |
836 | int bytesperline; | 868 | int bytesperline; |
837 | 869 | ||
838 | if (cpu_is_mx27()) { | 870 | if (is_imx27_camera(pcdev)) { |
839 | unsigned long flags; | 871 | unsigned long flags; |
840 | if (count < 2) | 872 | if (count < 2) |
841 | return -EINVAL; | 873 | return -EINVAL; |
@@ -930,7 +962,7 @@ static int mx2_stop_streaming(struct vb2_queue *q) | |||
930 | void *b; | 962 | void *b; |
931 | u32 cntl; | 963 | u32 cntl; |
932 | 964 | ||
933 | if (cpu_is_mx27()) { | 965 | if (is_imx27_camera(pcdev)) { |
934 | spin_lock_irqsave(&pcdev->lock, flags); | 966 | spin_lock_irqsave(&pcdev->lock, flags); |
935 | 967 | ||
936 | cntl = readl(pcdev->base_emma + PRP_CNTL); | 968 | cntl = readl(pcdev->base_emma + PRP_CNTL); |
@@ -1082,11 +1114,11 @@ static int mx2_camera_set_bus_param(struct soc_camera_device *icd) | |||
1082 | if (bytesperline < 0) | 1114 | if (bytesperline < 0) |
1083 | return bytesperline; | 1115 | return bytesperline; |
1084 | 1116 | ||
1085 | if (cpu_is_mx27()) { | 1117 | if (is_imx27_camera(pcdev)) { |
1086 | ret = mx27_camera_emma_prp_reset(pcdev); | 1118 | ret = mx27_camera_emma_prp_reset(pcdev); |
1087 | if (ret) | 1119 | if (ret) |
1088 | return ret; | 1120 | return ret; |
1089 | } else if (cpu_is_mx25()) { | 1121 | } else if (is_imx25_camera(pcdev)) { |
1090 | writel((bytesperline * icd->user_height) >> 2, | 1122 | writel((bytesperline * icd->user_height) >> 2, |
1091 | pcdev->base_csi + CSIRXCNT); | 1123 | pcdev->base_csi + CSIRXCNT); |
1092 | writel((bytesperline << 16) | icd->user_height, | 1124 | writel((bytesperline << 16) | icd->user_height, |
@@ -1392,7 +1424,7 @@ static int mx2_camera_try_fmt(struct soc_camera_device *icd, | |||
1392 | /* FIXME: implement MX27 limits */ | 1424 | /* FIXME: implement MX27 limits */ |
1393 | 1425 | ||
1394 | /* limit to MX25 hardware capabilities */ | 1426 | /* limit to MX25 hardware capabilities */ |
1395 | if (cpu_is_mx25()) { | 1427 | if (is_imx25_camera(pcdev)) { |
1396 | if (xlate->host_fmt->bits_per_sample <= 8) | 1428 | if (xlate->host_fmt->bits_per_sample <= 8) |
1397 | width_limit = 0xffff * 4; | 1429 | width_limit = 0xffff * 4; |
1398 | else | 1430 | else |
@@ -1726,6 +1758,20 @@ static int __devinit mx2_camera_probe(struct platform_device *pdev) | |||
1726 | goto exit; | 1758 | goto exit; |
1727 | } | 1759 | } |
1728 | 1760 | ||
1761 | pcdev->devtype = pdev->id_entry->driver_data; | ||
1762 | switch (pcdev->devtype) { | ||
1763 | case IMX25_CAMERA: | ||
1764 | pcdev->reg_csisr = CSISR_IMX25; | ||
1765 | pcdev->reg_csicr3 = CSICR3_IMX25; | ||
1766 | break; | ||
1767 | case IMX27_CAMERA: | ||
1768 | pcdev->reg_csisr = CSISR_IMX27; | ||
1769 | pcdev->reg_csicr3 = CSICR3_IMX27; | ||
1770 | break; | ||
1771 | default: | ||
1772 | break; | ||
1773 | } | ||
1774 | |||
1729 | pcdev->clk_csi = devm_clk_get(&pdev->dev, "ahb"); | 1775 | pcdev->clk_csi = devm_clk_get(&pdev->dev, "ahb"); |
1730 | if (IS_ERR(pcdev->clk_csi)) { | 1776 | if (IS_ERR(pcdev->clk_csi)) { |
1731 | dev_err(&pdev->dev, "Could not get csi clock\n"); | 1777 | dev_err(&pdev->dev, "Could not get csi clock\n"); |
@@ -1763,7 +1809,7 @@ static int __devinit mx2_camera_probe(struct platform_device *pdev) | |||
1763 | pcdev->dev = &pdev->dev; | 1809 | pcdev->dev = &pdev->dev; |
1764 | platform_set_drvdata(pdev, pcdev); | 1810 | platform_set_drvdata(pdev, pcdev); |
1765 | 1811 | ||
1766 | if (cpu_is_mx25()) { | 1812 | if (is_imx25_camera(pcdev)) { |
1767 | err = devm_request_irq(&pdev->dev, irq_csi, mx25_camera_irq, 0, | 1813 | err = devm_request_irq(&pdev->dev, irq_csi, mx25_camera_irq, 0, |
1768 | MX2_CAM_DRV_NAME, pcdev); | 1814 | MX2_CAM_DRV_NAME, pcdev); |
1769 | if (err) { | 1815 | if (err) { |
@@ -1772,7 +1818,7 @@ static int __devinit mx2_camera_probe(struct platform_device *pdev) | |||
1772 | } | 1818 | } |
1773 | } | 1819 | } |
1774 | 1820 | ||
1775 | if (cpu_is_mx27()) { | 1821 | if (is_imx27_camera(pcdev)) { |
1776 | err = mx27_camera_emma_init(pdev); | 1822 | err = mx27_camera_emma_init(pdev); |
1777 | if (err) | 1823 | if (err) |
1778 | goto exit; | 1824 | goto exit; |
@@ -1789,7 +1835,7 @@ static int __devinit mx2_camera_probe(struct platform_device *pdev) | |||
1789 | pcdev->soc_host.priv = pcdev; | 1835 | pcdev->soc_host.priv = pcdev; |
1790 | pcdev->soc_host.v4l2_dev.dev = &pdev->dev; | 1836 | pcdev->soc_host.v4l2_dev.dev = &pdev->dev; |
1791 | pcdev->soc_host.nr = pdev->id; | 1837 | pcdev->soc_host.nr = pdev->id; |
1792 | if (cpu_is_mx25()) | 1838 | if (is_imx25_camera(pcdev)) |
1793 | pcdev->soc_host.capabilities = SOCAM_HOST_CAP_STRIDE; | 1839 | pcdev->soc_host.capabilities = SOCAM_HOST_CAP_STRIDE; |
1794 | 1840 | ||
1795 | pcdev->alloc_ctx = vb2_dma_contig_init_ctx(&pdev->dev); | 1841 | pcdev->alloc_ctx = vb2_dma_contig_init_ctx(&pdev->dev); |
@@ -1809,7 +1855,7 @@ static int __devinit mx2_camera_probe(struct platform_device *pdev) | |||
1809 | exit_free_emma: | 1855 | exit_free_emma: |
1810 | vb2_dma_contig_cleanup_ctx(pcdev->alloc_ctx); | 1856 | vb2_dma_contig_cleanup_ctx(pcdev->alloc_ctx); |
1811 | eallocctx: | 1857 | eallocctx: |
1812 | if (cpu_is_mx27()) { | 1858 | if (is_imx27_camera(pcdev)) { |
1813 | clk_disable_unprepare(pcdev->clk_emma_ipg); | 1859 | clk_disable_unprepare(pcdev->clk_emma_ipg); |
1814 | clk_disable_unprepare(pcdev->clk_emma_ahb); | 1860 | clk_disable_unprepare(pcdev->clk_emma_ahb); |
1815 | } | 1861 | } |
@@ -1827,7 +1873,7 @@ static int __devexit mx2_camera_remove(struct platform_device *pdev) | |||
1827 | 1873 | ||
1828 | vb2_dma_contig_cleanup_ctx(pcdev->alloc_ctx); | 1874 | vb2_dma_contig_cleanup_ctx(pcdev->alloc_ctx); |
1829 | 1875 | ||
1830 | if (cpu_is_mx27()) { | 1876 | if (is_imx27_camera(pcdev)) { |
1831 | clk_disable_unprepare(pcdev->clk_emma_ipg); | 1877 | clk_disable_unprepare(pcdev->clk_emma_ipg); |
1832 | clk_disable_unprepare(pcdev->clk_emma_ahb); | 1878 | clk_disable_unprepare(pcdev->clk_emma_ahb); |
1833 | } | 1879 | } |
@@ -1841,6 +1887,7 @@ static struct platform_driver mx2_camera_driver = { | |||
1841 | .driver = { | 1887 | .driver = { |
1842 | .name = MX2_CAM_DRV_NAME, | 1888 | .name = MX2_CAM_DRV_NAME, |
1843 | }, | 1889 | }, |
1890 | .id_table = mx2_camera_devtype, | ||
1844 | .remove = __devexit_p(mx2_camera_remove), | 1891 | .remove = __devexit_p(mx2_camera_remove), |
1845 | }; | 1892 | }; |
1846 | 1893 | ||
diff --git a/drivers/media/platform/soc_camera/mx3_camera.c b/drivers/media/platform/soc_camera/mx3_camera.c index 3557ac97e430..64d39b1b5582 100644 --- a/drivers/media/platform/soc_camera/mx3_camera.c +++ b/drivers/media/platform/soc_camera/mx3_camera.c | |||
@@ -17,6 +17,7 @@ | |||
17 | #include <linux/vmalloc.h> | 17 | #include <linux/vmalloc.h> |
18 | #include <linux/interrupt.h> | 18 | #include <linux/interrupt.h> |
19 | #include <linux/sched.h> | 19 | #include <linux/sched.h> |
20 | #include <linux/dma/ipu-dma.h> | ||
20 | 21 | ||
21 | #include <media/v4l2-common.h> | 22 | #include <media/v4l2-common.h> |
22 | #include <media/v4l2-dev.h> | 23 | #include <media/v4l2-dev.h> |
@@ -24,7 +25,6 @@ | |||
24 | #include <media/soc_camera.h> | 25 | #include <media/soc_camera.h> |
25 | #include <media/soc_mediabus.h> | 26 | #include <media/soc_mediabus.h> |
26 | 27 | ||
27 | #include <mach/ipu.h> | ||
28 | #include <linux/platform_data/camera-mx3.h> | 28 | #include <linux/platform_data/camera-mx3.h> |
29 | #include <linux/platform_data/dma-imx.h> | 29 | #include <linux/platform_data/dma-imx.h> |
30 | 30 | ||
diff --git a/drivers/mmc/host/dw_mmc-exynos.c b/drivers/mmc/host/dw_mmc-exynos.c index 660bbc528862..4d50da618166 100644 --- a/drivers/mmc/host/dw_mmc-exynos.c +++ b/drivers/mmc/host/dw_mmc-exynos.c | |||
@@ -208,7 +208,7 @@ static unsigned long exynos5250_dwmmc_caps[4] = { | |||
208 | MMC_CAP_CMD23, | 208 | MMC_CAP_CMD23, |
209 | }; | 209 | }; |
210 | 210 | ||
211 | static struct dw_mci_drv_data exynos5250_drv_data = { | 211 | static const struct dw_mci_drv_data exynos5250_drv_data = { |
212 | .caps = exynos5250_dwmmc_caps, | 212 | .caps = exynos5250_dwmmc_caps, |
213 | .init = dw_mci_exynos_priv_init, | 213 | .init = dw_mci_exynos_priv_init, |
214 | .setup_clock = dw_mci_exynos_setup_clock, | 214 | .setup_clock = dw_mci_exynos_setup_clock, |
@@ -220,14 +220,14 @@ static struct dw_mci_drv_data exynos5250_drv_data = { | |||
220 | 220 | ||
221 | static const struct of_device_id dw_mci_exynos_match[] = { | 221 | static const struct of_device_id dw_mci_exynos_match[] = { |
222 | { .compatible = "samsung,exynos5250-dw-mshc", | 222 | { .compatible = "samsung,exynos5250-dw-mshc", |
223 | .data = (void *)&exynos5250_drv_data, }, | 223 | .data = &exynos5250_drv_data, }, |
224 | {}, | 224 | {}, |
225 | }; | 225 | }; |
226 | MODULE_DEVICE_TABLE(of, dw_mci_pltfm_match); | 226 | MODULE_DEVICE_TABLE(of, dw_mci_exynos_match); |
227 | 227 | ||
228 | int dw_mci_exynos_probe(struct platform_device *pdev) | 228 | int dw_mci_exynos_probe(struct platform_device *pdev) |
229 | { | 229 | { |
230 | struct dw_mci_drv_data *drv_data; | 230 | const struct dw_mci_drv_data *drv_data; |
231 | const struct of_device_id *match; | 231 | const struct of_device_id *match; |
232 | 232 | ||
233 | match = of_match_node(dw_mci_exynos_match, pdev->dev.of_node); | 233 | match = of_match_node(dw_mci_exynos_match, pdev->dev.of_node); |
diff --git a/drivers/mmc/host/dw_mmc-pltfm.c b/drivers/mmc/host/dw_mmc-pltfm.c index c960ca7ffbe6..917936bee5d5 100644 --- a/drivers/mmc/host/dw_mmc-pltfm.c +++ b/drivers/mmc/host/dw_mmc-pltfm.c | |||
@@ -24,7 +24,7 @@ | |||
24 | #include "dw_mmc.h" | 24 | #include "dw_mmc.h" |
25 | 25 | ||
26 | int dw_mci_pltfm_register(struct platform_device *pdev, | 26 | int dw_mci_pltfm_register(struct platform_device *pdev, |
27 | struct dw_mci_drv_data *drv_data) | 27 | const struct dw_mci_drv_data *drv_data) |
28 | { | 28 | { |
29 | struct dw_mci *host; | 29 | struct dw_mci *host; |
30 | struct resource *regs; | 30 | struct resource *regs; |
@@ -50,8 +50,8 @@ int dw_mci_pltfm_register(struct platform_device *pdev, | |||
50 | if (!host->regs) | 50 | if (!host->regs) |
51 | return -ENOMEM; | 51 | return -ENOMEM; |
52 | 52 | ||
53 | if (host->drv_data->init) { | 53 | if (drv_data && drv_data->init) { |
54 | ret = host->drv_data->init(host); | 54 | ret = drv_data->init(host); |
55 | if (ret) | 55 | if (ret) |
56 | return ret; | 56 | return ret; |
57 | } | 57 | } |
diff --git a/drivers/mmc/host/dw_mmc-pltfm.h b/drivers/mmc/host/dw_mmc-pltfm.h index 301f24541fc2..2ac37b81de4d 100644 --- a/drivers/mmc/host/dw_mmc-pltfm.h +++ b/drivers/mmc/host/dw_mmc-pltfm.h | |||
@@ -13,7 +13,7 @@ | |||
13 | #define _DW_MMC_PLTFM_H_ | 13 | #define _DW_MMC_PLTFM_H_ |
14 | 14 | ||
15 | extern int dw_mci_pltfm_register(struct platform_device *pdev, | 15 | extern int dw_mci_pltfm_register(struct platform_device *pdev, |
16 | struct dw_mci_drv_data *drv_data); | 16 | const struct dw_mci_drv_data *drv_data); |
17 | extern int __devexit dw_mci_pltfm_remove(struct platform_device *pdev); | 17 | extern int __devexit dw_mci_pltfm_remove(struct platform_device *pdev); |
18 | extern const struct dev_pm_ops dw_mci_pltfm_pmops; | 18 | extern const struct dev_pm_ops dw_mci_pltfm_pmops; |
19 | 19 | ||
diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c index c2828f35c3b8..c0667c8af2bd 100644 --- a/drivers/mmc/host/dw_mmc.c +++ b/drivers/mmc/host/dw_mmc.c | |||
@@ -232,6 +232,7 @@ static u32 dw_mci_prepare_command(struct mmc_host *mmc, struct mmc_command *cmd) | |||
232 | { | 232 | { |
233 | struct mmc_data *data; | 233 | struct mmc_data *data; |
234 | struct dw_mci_slot *slot = mmc_priv(mmc); | 234 | struct dw_mci_slot *slot = mmc_priv(mmc); |
235 | struct dw_mci_drv_data *drv_data = slot->host->drv_data; | ||
235 | u32 cmdr; | 236 | u32 cmdr; |
236 | cmd->error = -EINPROGRESS; | 237 | cmd->error = -EINPROGRESS; |
237 | 238 | ||
@@ -261,8 +262,8 @@ static u32 dw_mci_prepare_command(struct mmc_host *mmc, struct mmc_command *cmd) | |||
261 | cmdr |= SDMMC_CMD_DAT_WR; | 262 | cmdr |= SDMMC_CMD_DAT_WR; |
262 | } | 263 | } |
263 | 264 | ||
264 | if (slot->host->drv_data->prepare_command) | 265 | if (drv_data && drv_data->prepare_command) |
265 | slot->host->drv_data->prepare_command(slot->host, &cmdr); | 266 | drv_data->prepare_command(slot->host, &cmdr); |
266 | 267 | ||
267 | return cmdr; | 268 | return cmdr; |
268 | } | 269 | } |
@@ -434,7 +435,7 @@ static int dw_mci_idmac_init(struct dw_mci *host) | |||
434 | return 0; | 435 | return 0; |
435 | } | 436 | } |
436 | 437 | ||
437 | static struct dw_mci_dma_ops dw_mci_idmac_ops = { | 438 | static const struct dw_mci_dma_ops dw_mci_idmac_ops = { |
438 | .init = dw_mci_idmac_init, | 439 | .init = dw_mci_idmac_init, |
439 | .start = dw_mci_idmac_start_dma, | 440 | .start = dw_mci_idmac_start_dma, |
440 | .stop = dw_mci_idmac_stop_dma, | 441 | .stop = dw_mci_idmac_stop_dma, |
@@ -772,6 +773,7 @@ static void dw_mci_request(struct mmc_host *mmc, struct mmc_request *mrq) | |||
772 | static void dw_mci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) | 773 | static void dw_mci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) |
773 | { | 774 | { |
774 | struct dw_mci_slot *slot = mmc_priv(mmc); | 775 | struct dw_mci_slot *slot = mmc_priv(mmc); |
776 | struct dw_mci_drv_data *drv_data = slot->host->drv_data; | ||
775 | u32 regs; | 777 | u32 regs; |
776 | 778 | ||
777 | /* set default 1 bit mode */ | 779 | /* set default 1 bit mode */ |
@@ -807,8 +809,8 @@ static void dw_mci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) | |||
807 | slot->clock = ios->clock; | 809 | slot->clock = ios->clock; |
808 | } | 810 | } |
809 | 811 | ||
810 | if (slot->host->drv_data->set_ios) | 812 | if (drv_data && drv_data->set_ios) |
811 | slot->host->drv_data->set_ios(slot->host, ios); | 813 | drv_data->set_ios(slot->host, ios); |
812 | 814 | ||
813 | switch (ios->power_mode) { | 815 | switch (ios->power_mode) { |
814 | case MMC_POWER_UP: | 816 | case MMC_POWER_UP: |
@@ -1815,6 +1817,7 @@ static int dw_mci_init_slot(struct dw_mci *host, unsigned int id) | |||
1815 | { | 1817 | { |
1816 | struct mmc_host *mmc; | 1818 | struct mmc_host *mmc; |
1817 | struct dw_mci_slot *slot; | 1819 | struct dw_mci_slot *slot; |
1820 | struct dw_mci_drv_data *drv_data = host->drv_data; | ||
1818 | int ctrl_id, ret; | 1821 | int ctrl_id, ret; |
1819 | u8 bus_width; | 1822 | u8 bus_width; |
1820 | 1823 | ||
@@ -1854,8 +1857,8 @@ static int dw_mci_init_slot(struct dw_mci *host, unsigned int id) | |||
1854 | } else { | 1857 | } else { |
1855 | ctrl_id = to_platform_device(host->dev)->id; | 1858 | ctrl_id = to_platform_device(host->dev)->id; |
1856 | } | 1859 | } |
1857 | if (host->drv_data && host->drv_data->caps) | 1860 | if (drv_data && drv_data->caps) |
1858 | mmc->caps |= host->drv_data->caps[ctrl_id]; | 1861 | mmc->caps |= drv_data->caps[ctrl_id]; |
1859 | 1862 | ||
1860 | if (host->pdata->caps2) | 1863 | if (host->pdata->caps2) |
1861 | mmc->caps2 = host->pdata->caps2; | 1864 | mmc->caps2 = host->pdata->caps2; |
@@ -1867,10 +1870,10 @@ static int dw_mci_init_slot(struct dw_mci *host, unsigned int id) | |||
1867 | else | 1870 | else |
1868 | bus_width = 1; | 1871 | bus_width = 1; |
1869 | 1872 | ||
1870 | if (host->drv_data->setup_bus) { | 1873 | if (drv_data && drv_data->setup_bus) { |
1871 | struct device_node *slot_np; | 1874 | struct device_node *slot_np; |
1872 | slot_np = dw_mci_of_find_slot_node(host->dev, slot->id); | 1875 | slot_np = dw_mci_of_find_slot_node(host->dev, slot->id); |
1873 | ret = host->drv_data->setup_bus(host, slot_np, bus_width); | 1876 | ret = drv_data->setup_bus(host, slot_np, bus_width); |
1874 | if (ret) | 1877 | if (ret) |
1875 | goto err_setup_bus; | 1878 | goto err_setup_bus; |
1876 | } | 1879 | } |
@@ -1968,7 +1971,7 @@ static void dw_mci_init_dma(struct dw_mci *host) | |||
1968 | /* Determine which DMA interface to use */ | 1971 | /* Determine which DMA interface to use */ |
1969 | #ifdef CONFIG_MMC_DW_IDMAC | 1972 | #ifdef CONFIG_MMC_DW_IDMAC |
1970 | host->dma_ops = &dw_mci_idmac_ops; | 1973 | host->dma_ops = &dw_mci_idmac_ops; |
1971 | dev_info(&host->dev, "Using internal DMA controller.\n"); | 1974 | dev_info(host->dev, "Using internal DMA controller.\n"); |
1972 | #endif | 1975 | #endif |
1973 | 1976 | ||
1974 | if (!host->dma_ops) | 1977 | if (!host->dma_ops) |
@@ -2035,6 +2038,7 @@ static struct dw_mci_board *dw_mci_parse_dt(struct dw_mci *host) | |||
2035 | struct dw_mci_board *pdata; | 2038 | struct dw_mci_board *pdata; |
2036 | struct device *dev = host->dev; | 2039 | struct device *dev = host->dev; |
2037 | struct device_node *np = dev->of_node; | 2040 | struct device_node *np = dev->of_node; |
2041 | struct dw_mci_drv_data *drv_data = host->drv_data; | ||
2038 | int idx, ret; | 2042 | int idx, ret; |
2039 | 2043 | ||
2040 | pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL); | 2044 | pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL); |
@@ -2062,8 +2066,8 @@ static struct dw_mci_board *dw_mci_parse_dt(struct dw_mci *host) | |||
2062 | 2066 | ||
2063 | of_property_read_u32(np, "card-detect-delay", &pdata->detect_delay_ms); | 2067 | of_property_read_u32(np, "card-detect-delay", &pdata->detect_delay_ms); |
2064 | 2068 | ||
2065 | if (host->drv_data->parse_dt) { | 2069 | if (drv_data && drv_data->parse_dt) { |
2066 | ret = host->drv_data->parse_dt(host); | 2070 | ret = drv_data->parse_dt(host); |
2067 | if (ret) | 2071 | if (ret) |
2068 | return ERR_PTR(ret); | 2072 | return ERR_PTR(ret); |
2069 | } | 2073 | } |
@@ -2080,6 +2084,7 @@ static struct dw_mci_board *dw_mci_parse_dt(struct dw_mci *host) | |||
2080 | 2084 | ||
2081 | int dw_mci_probe(struct dw_mci *host) | 2085 | int dw_mci_probe(struct dw_mci *host) |
2082 | { | 2086 | { |
2087 | struct dw_mci_drv_data *drv_data = host->drv_data; | ||
2083 | int width, i, ret = 0; | 2088 | int width, i, ret = 0; |
2084 | u32 fifo_size; | 2089 | u32 fifo_size; |
2085 | int init_slots = 0; | 2090 | int init_slots = 0; |
@@ -2127,8 +2132,8 @@ int dw_mci_probe(struct dw_mci *host) | |||
2127 | else | 2132 | else |
2128 | host->bus_hz = clk_get_rate(host->ciu_clk); | 2133 | host->bus_hz = clk_get_rate(host->ciu_clk); |
2129 | 2134 | ||
2130 | if (host->drv_data->setup_clock) { | 2135 | if (drv_data && drv_data->setup_clock) { |
2131 | ret = host->drv_data->setup_clock(host); | 2136 | ret = drv_data->setup_clock(host); |
2132 | if (ret) { | 2137 | if (ret) { |
2133 | dev_err(host->dev, | 2138 | dev_err(host->dev, |
2134 | "implementation specific clock setup failed\n"); | 2139 | "implementation specific clock setup failed\n"); |
@@ -2228,6 +2233,21 @@ int dw_mci_probe(struct dw_mci *host) | |||
2228 | else | 2233 | else |
2229 | host->num_slots = ((mci_readl(host, HCON) >> 1) & 0x1F) + 1; | 2234 | host->num_slots = ((mci_readl(host, HCON) >> 1) & 0x1F) + 1; |
2230 | 2235 | ||
2236 | /* | ||
2237 | * Enable interrupts for command done, data over, data empty, card det, | ||
2238 | * receive ready and error such as transmit, receive timeout, crc error | ||
2239 | */ | ||
2240 | mci_writel(host, RINTSTS, 0xFFFFFFFF); | ||
2241 | mci_writel(host, INTMASK, SDMMC_INT_CMD_DONE | SDMMC_INT_DATA_OVER | | ||
2242 | SDMMC_INT_TXDR | SDMMC_INT_RXDR | | ||
2243 | DW_MCI_ERROR_FLAGS | SDMMC_INT_CD); | ||
2244 | mci_writel(host, CTRL, SDMMC_CTRL_INT_ENABLE); /* Enable mci interrupt */ | ||
2245 | |||
2246 | dev_info(host->dev, "DW MMC controller at irq %d, " | ||
2247 | "%d bit host data width, " | ||
2248 | "%u deep fifo\n", | ||
2249 | host->irq, width, fifo_size); | ||
2250 | |||
2231 | /* We need at least one slot to succeed */ | 2251 | /* We need at least one slot to succeed */ |
2232 | for (i = 0; i < host->num_slots; i++) { | 2252 | for (i = 0; i < host->num_slots; i++) { |
2233 | ret = dw_mci_init_slot(host, i); | 2253 | ret = dw_mci_init_slot(host, i); |
@@ -2257,20 +2277,6 @@ int dw_mci_probe(struct dw_mci *host) | |||
2257 | else | 2277 | else |
2258 | host->data_offset = DATA_240A_OFFSET; | 2278 | host->data_offset = DATA_240A_OFFSET; |
2259 | 2279 | ||
2260 | /* | ||
2261 | * Enable interrupts for command done, data over, data empty, card det, | ||
2262 | * receive ready and error such as transmit, receive timeout, crc error | ||
2263 | */ | ||
2264 | mci_writel(host, RINTSTS, 0xFFFFFFFF); | ||
2265 | mci_writel(host, INTMASK, SDMMC_INT_CMD_DONE | SDMMC_INT_DATA_OVER | | ||
2266 | SDMMC_INT_TXDR | SDMMC_INT_RXDR | | ||
2267 | DW_MCI_ERROR_FLAGS | SDMMC_INT_CD); | ||
2268 | mci_writel(host, CTRL, SDMMC_CTRL_INT_ENABLE); /* Enable mci interrupt */ | ||
2269 | |||
2270 | dev_info(host->dev, "DW MMC controller at irq %d, " | ||
2271 | "%d bit host data width, " | ||
2272 | "%u deep fifo\n", | ||
2273 | host->irq, width, fifo_size); | ||
2274 | if (host->quirks & DW_MCI_QUIRK_IDMAC_DTO) | 2280 | if (host->quirks & DW_MCI_QUIRK_IDMAC_DTO) |
2275 | dev_info(host->dev, "Internal DMAC interrupt fix enabled.\n"); | 2281 | dev_info(host->dev, "Internal DMAC interrupt fix enabled.\n"); |
2276 | 2282 | ||
diff --git a/drivers/mmc/host/mxcmmc.c b/drivers/mmc/host/mxcmmc.c index 565c2e4fac75..477f63bad521 100644 --- a/drivers/mmc/host/mxcmmc.c +++ b/drivers/mmc/host/mxcmmc.c | |||
@@ -41,7 +41,6 @@ | |||
41 | #include <linux/platform_data/mmc-mxcmmc.h> | 41 | #include <linux/platform_data/mmc-mxcmmc.h> |
42 | 42 | ||
43 | #include <linux/platform_data/dma-imx.h> | 43 | #include <linux/platform_data/dma-imx.h> |
44 | #include <mach/hardware.h> | ||
45 | 44 | ||
46 | #define DRIVER_NAME "mxc-mmc" | 45 | #define DRIVER_NAME "mxc-mmc" |
47 | #define MXCMCI_TIMEOUT_MS 10000 | 46 | #define MXCMCI_TIMEOUT_MS 10000 |
@@ -113,6 +112,11 @@ | |||
113 | #define INT_WRITE_OP_DONE_EN (1 << 1) | 112 | #define INT_WRITE_OP_DONE_EN (1 << 1) |
114 | #define INT_READ_OP_EN (1 << 0) | 113 | #define INT_READ_OP_EN (1 << 0) |
115 | 114 | ||
115 | enum mxcmci_type { | ||
116 | IMX21_MMC, | ||
117 | IMX31_MMC, | ||
118 | }; | ||
119 | |||
116 | struct mxcmci_host { | 120 | struct mxcmci_host { |
117 | struct mmc_host *mmc; | 121 | struct mmc_host *mmc; |
118 | struct resource *res; | 122 | struct resource *res; |
@@ -153,7 +157,26 @@ struct mxcmci_host { | |||
153 | struct imx_dma_data dma_data; | 157 | struct imx_dma_data dma_data; |
154 | 158 | ||
155 | struct timer_list watchdog; | 159 | struct timer_list watchdog; |
160 | enum mxcmci_type devtype; | ||
161 | }; | ||
162 | |||
163 | static struct platform_device_id mxcmci_devtype[] = { | ||
164 | { | ||
165 | .name = "imx21-mmc", | ||
166 | .driver_data = IMX21_MMC, | ||
167 | }, { | ||
168 | .name = "imx31-mmc", | ||
169 | .driver_data = IMX31_MMC, | ||
170 | }, { | ||
171 | /* sentinel */ | ||
172 | } | ||
156 | }; | 173 | }; |
174 | MODULE_DEVICE_TABLE(platform, mxcmci_devtype); | ||
175 | |||
176 | static inline int is_imx31_mmc(struct mxcmci_host *host) | ||
177 | { | ||
178 | return host->devtype == IMX31_MMC; | ||
179 | } | ||
157 | 180 | ||
158 | static void mxcmci_set_clk_rate(struct mxcmci_host *host, unsigned int clk_ios); | 181 | static void mxcmci_set_clk_rate(struct mxcmci_host *host, unsigned int clk_ios); |
159 | 182 | ||
@@ -843,6 +866,8 @@ static void mxcmci_enable_sdio_irq(struct mmc_host *mmc, int enable) | |||
843 | 866 | ||
844 | static void mxcmci_init_card(struct mmc_host *host, struct mmc_card *card) | 867 | static void mxcmci_init_card(struct mmc_host *host, struct mmc_card *card) |
845 | { | 868 | { |
869 | struct mxcmci_host *mxcmci = mmc_priv(host); | ||
870 | |||
846 | /* | 871 | /* |
847 | * MX3 SoCs have a silicon bug which corrupts CRC calculation of | 872 | * MX3 SoCs have a silicon bug which corrupts CRC calculation of |
848 | * multi-block transfers when connected SDIO peripheral doesn't | 873 | * multi-block transfers when connected SDIO peripheral doesn't |
@@ -850,7 +875,7 @@ static void mxcmci_init_card(struct mmc_host *host, struct mmc_card *card) | |||
850 | * One way to prevent this is to only allow 1-bit transfers. | 875 | * One way to prevent this is to only allow 1-bit transfers. |
851 | */ | 876 | */ |
852 | 877 | ||
853 | if (cpu_is_mx3() && card->type == MMC_TYPE_SDIO) | 878 | if (is_imx31_mmc(mxcmci) && card->type == MMC_TYPE_SDIO) |
854 | host->caps &= ~MMC_CAP_4_BIT_DATA; | 879 | host->caps &= ~MMC_CAP_4_BIT_DATA; |
855 | else | 880 | else |
856 | host->caps |= MMC_CAP_4_BIT_DATA; | 881 | host->caps |= MMC_CAP_4_BIT_DATA; |
@@ -948,6 +973,7 @@ static int mxcmci_probe(struct platform_device *pdev) | |||
948 | 973 | ||
949 | host->mmc = mmc; | 974 | host->mmc = mmc; |
950 | host->pdata = pdev->dev.platform_data; | 975 | host->pdata = pdev->dev.platform_data; |
976 | host->devtype = pdev->id_entry->driver_data; | ||
951 | spin_lock_init(&host->lock); | 977 | spin_lock_init(&host->lock); |
952 | 978 | ||
953 | mxcmci_init_ocr(host); | 979 | mxcmci_init_ocr(host); |
@@ -1120,6 +1146,7 @@ static const struct dev_pm_ops mxcmci_pm_ops = { | |||
1120 | static struct platform_driver mxcmci_driver = { | 1146 | static struct platform_driver mxcmci_driver = { |
1121 | .probe = mxcmci_probe, | 1147 | .probe = mxcmci_probe, |
1122 | .remove = mxcmci_remove, | 1148 | .remove = mxcmci_remove, |
1149 | .id_table = mxcmci_devtype, | ||
1123 | .driver = { | 1150 | .driver = { |
1124 | .name = DRIVER_NAME, | 1151 | .name = DRIVER_NAME, |
1125 | .owner = THIS_MODULE, | 1152 | .owner = THIS_MODULE, |
@@ -1134,4 +1161,4 @@ module_platform_driver(mxcmci_driver); | |||
1134 | MODULE_DESCRIPTION("i.MX Multimedia Card Interface Driver"); | 1161 | MODULE_DESCRIPTION("i.MX Multimedia Card Interface Driver"); |
1135 | MODULE_AUTHOR("Sascha Hauer, Pengutronix"); | 1162 | MODULE_AUTHOR("Sascha Hauer, Pengutronix"); |
1136 | MODULE_LICENSE("GPL"); | 1163 | MODULE_LICENSE("GPL"); |
1137 | MODULE_ALIAS("platform:imx-mmc"); | 1164 | MODULE_ALIAS("platform:mxc-mmc"); |
diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c index 9b24bd46aad3..e7c185233b18 100644 --- a/drivers/mmc/host/omap_hsmmc.c +++ b/drivers/mmc/host/omap_hsmmc.c | |||
@@ -176,7 +176,8 @@ struct omap_hsmmc_host { | |||
176 | 176 | ||
177 | static int omap_hsmmc_card_detect(struct device *dev, int slot) | 177 | static int omap_hsmmc_card_detect(struct device *dev, int slot) |
178 | { | 178 | { |
179 | struct omap_mmc_platform_data *mmc = dev->platform_data; | 179 | struct omap_hsmmc_host *host = dev_get_drvdata(dev); |
180 | struct omap_mmc_platform_data *mmc = host->pdata; | ||
180 | 181 | ||
181 | /* NOTE: assumes card detect signal is active-low */ | 182 | /* NOTE: assumes card detect signal is active-low */ |
182 | return !gpio_get_value_cansleep(mmc->slots[0].switch_pin); | 183 | return !gpio_get_value_cansleep(mmc->slots[0].switch_pin); |
@@ -184,7 +185,8 @@ static int omap_hsmmc_card_detect(struct device *dev, int slot) | |||
184 | 185 | ||
185 | static int omap_hsmmc_get_wp(struct device *dev, int slot) | 186 | static int omap_hsmmc_get_wp(struct device *dev, int slot) |
186 | { | 187 | { |
187 | struct omap_mmc_platform_data *mmc = dev->platform_data; | 188 | struct omap_hsmmc_host *host = dev_get_drvdata(dev); |
189 | struct omap_mmc_platform_data *mmc = host->pdata; | ||
188 | 190 | ||
189 | /* NOTE: assumes write protect signal is active-high */ | 191 | /* NOTE: assumes write protect signal is active-high */ |
190 | return gpio_get_value_cansleep(mmc->slots[0].gpio_wp); | 192 | return gpio_get_value_cansleep(mmc->slots[0].gpio_wp); |
@@ -192,7 +194,8 @@ static int omap_hsmmc_get_wp(struct device *dev, int slot) | |||
192 | 194 | ||
193 | static int omap_hsmmc_get_cover_state(struct device *dev, int slot) | 195 | static int omap_hsmmc_get_cover_state(struct device *dev, int slot) |
194 | { | 196 | { |
195 | struct omap_mmc_platform_data *mmc = dev->platform_data; | 197 | struct omap_hsmmc_host *host = dev_get_drvdata(dev); |
198 | struct omap_mmc_platform_data *mmc = host->pdata; | ||
196 | 199 | ||
197 | /* NOTE: assumes card detect signal is active-low */ | 200 | /* NOTE: assumes card detect signal is active-low */ |
198 | return !gpio_get_value_cansleep(mmc->slots[0].switch_pin); | 201 | return !gpio_get_value_cansleep(mmc->slots[0].switch_pin); |
@@ -202,7 +205,8 @@ static int omap_hsmmc_get_cover_state(struct device *dev, int slot) | |||
202 | 205 | ||
203 | static int omap_hsmmc_suspend_cdirq(struct device *dev, int slot) | 206 | static int omap_hsmmc_suspend_cdirq(struct device *dev, int slot) |
204 | { | 207 | { |
205 | struct omap_mmc_platform_data *mmc = dev->platform_data; | 208 | struct omap_hsmmc_host *host = dev_get_drvdata(dev); |
209 | struct omap_mmc_platform_data *mmc = host->pdata; | ||
206 | 210 | ||
207 | disable_irq(mmc->slots[0].card_detect_irq); | 211 | disable_irq(mmc->slots[0].card_detect_irq); |
208 | return 0; | 212 | return 0; |
@@ -210,7 +214,8 @@ static int omap_hsmmc_suspend_cdirq(struct device *dev, int slot) | |||
210 | 214 | ||
211 | static int omap_hsmmc_resume_cdirq(struct device *dev, int slot) | 215 | static int omap_hsmmc_resume_cdirq(struct device *dev, int slot) |
212 | { | 216 | { |
213 | struct omap_mmc_platform_data *mmc = dev->platform_data; | 217 | struct omap_hsmmc_host *host = dev_get_drvdata(dev); |
218 | struct omap_mmc_platform_data *mmc = host->pdata; | ||
214 | 219 | ||
215 | enable_irq(mmc->slots[0].card_detect_irq); | 220 | enable_irq(mmc->slots[0].card_detect_irq); |
216 | return 0; | 221 | return 0; |
@@ -2007,9 +2012,9 @@ static int __devexit omap_hsmmc_remove(struct platform_device *pdev) | |||
2007 | clk_put(host->dbclk); | 2012 | clk_put(host->dbclk); |
2008 | } | 2013 | } |
2009 | 2014 | ||
2010 | mmc_free_host(host->mmc); | 2015 | omap_hsmmc_gpio_free(host->pdata); |
2011 | iounmap(host->base); | 2016 | iounmap(host->base); |
2012 | omap_hsmmc_gpio_free(pdev->dev.platform_data); | 2017 | mmc_free_host(host->mmc); |
2013 | 2018 | ||
2014 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); | 2019 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
2015 | if (res) | 2020 | if (res) |
diff --git a/drivers/mmc/host/sdhci-dove.c b/drivers/mmc/host/sdhci-dove.c index 90140eb03e36..8fd50a211037 100644 --- a/drivers/mmc/host/sdhci-dove.c +++ b/drivers/mmc/host/sdhci-dove.c | |||
@@ -19,6 +19,7 @@ | |||
19 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | 19 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
20 | */ | 20 | */ |
21 | 21 | ||
22 | #include <linux/err.h> | ||
22 | #include <linux/io.h> | 23 | #include <linux/io.h> |
23 | #include <linux/clk.h> | 24 | #include <linux/clk.h> |
24 | #include <linux/err.h> | 25 | #include <linux/err.h> |
@@ -84,30 +85,32 @@ static int __devinit sdhci_dove_probe(struct platform_device *pdev) | |||
84 | struct sdhci_dove_priv *priv; | 85 | struct sdhci_dove_priv *priv; |
85 | int ret; | 86 | int ret; |
86 | 87 | ||
87 | ret = sdhci_pltfm_register(pdev, &sdhci_dove_pdata); | ||
88 | if (ret) | ||
89 | goto sdhci_dove_register_fail; | ||
90 | |||
91 | priv = devm_kzalloc(&pdev->dev, sizeof(struct sdhci_dove_priv), | 88 | priv = devm_kzalloc(&pdev->dev, sizeof(struct sdhci_dove_priv), |
92 | GFP_KERNEL); | 89 | GFP_KERNEL); |
93 | if (!priv) { | 90 | if (!priv) { |
94 | dev_err(&pdev->dev, "unable to allocate private data"); | 91 | dev_err(&pdev->dev, "unable to allocate private data"); |
95 | ret = -ENOMEM; | 92 | return -ENOMEM; |
96 | goto sdhci_dove_allocate_fail; | ||
97 | } | 93 | } |
98 | 94 | ||
95 | priv->clk = clk_get(&pdev->dev, NULL); | ||
96 | if (!IS_ERR(priv->clk)) | ||
97 | clk_prepare_enable(priv->clk); | ||
98 | |||
99 | ret = sdhci_pltfm_register(pdev, &sdhci_dove_pdata); | ||
100 | if (ret) | ||
101 | goto sdhci_dove_register_fail; | ||
102 | |||
99 | host = platform_get_drvdata(pdev); | 103 | host = platform_get_drvdata(pdev); |
100 | pltfm_host = sdhci_priv(host); | 104 | pltfm_host = sdhci_priv(host); |
101 | pltfm_host->priv = priv; | 105 | pltfm_host->priv = priv; |
102 | 106 | ||
103 | priv->clk = clk_get(&pdev->dev, NULL); | ||
104 | if (!IS_ERR(priv->clk)) | ||
105 | clk_prepare_enable(priv->clk); | ||
106 | return 0; | 107 | return 0; |
107 | 108 | ||
108 | sdhci_dove_allocate_fail: | ||
109 | sdhci_pltfm_unregister(pdev); | ||
110 | sdhci_dove_register_fail: | 109 | sdhci_dove_register_fail: |
110 | if (!IS_ERR(priv->clk)) { | ||
111 | clk_disable_unprepare(priv->clk); | ||
112 | clk_put(priv->clk); | ||
113 | } | ||
111 | return ret; | 114 | return ret; |
112 | } | 115 | } |
113 | 116 | ||
@@ -117,14 +120,13 @@ static int __devexit sdhci_dove_remove(struct platform_device *pdev) | |||
117 | struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host); | 120 | struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host); |
118 | struct sdhci_dove_priv *priv = pltfm_host->priv; | 121 | struct sdhci_dove_priv *priv = pltfm_host->priv; |
119 | 122 | ||
120 | if (priv->clk) { | 123 | sdhci_pltfm_unregister(pdev); |
121 | if (!IS_ERR(priv->clk)) { | 124 | |
122 | clk_disable_unprepare(priv->clk); | 125 | if (!IS_ERR(priv->clk)) { |
123 | clk_put(priv->clk); | 126 | clk_disable_unprepare(priv->clk); |
124 | } | 127 | clk_put(priv->clk); |
125 | devm_kfree(&pdev->dev, priv->clk); | ||
126 | } | 128 | } |
127 | return sdhci_pltfm_unregister(pdev); | 129 | return 0; |
128 | } | 130 | } |
129 | 131 | ||
130 | static const struct of_device_id sdhci_dove_of_match_table[] __devinitdata = { | 132 | static const struct of_device_id sdhci_dove_of_match_table[] __devinitdata = { |
diff --git a/drivers/mmc/host/sdhci-of-esdhc.c b/drivers/mmc/host/sdhci-of-esdhc.c index ae5fcbfa1eef..63d219f57cae 100644 --- a/drivers/mmc/host/sdhci-of-esdhc.c +++ b/drivers/mmc/host/sdhci-of-esdhc.c | |||
@@ -169,6 +169,16 @@ static void esdhc_of_resume(struct sdhci_host *host) | |||
169 | } | 169 | } |
170 | #endif | 170 | #endif |
171 | 171 | ||
172 | static void esdhc_of_platform_init(struct sdhci_host *host) | ||
173 | { | ||
174 | u32 vvn; | ||
175 | |||
176 | vvn = in_be32(host->ioaddr + SDHCI_SLOT_INT_STATUS); | ||
177 | vvn = (vvn & SDHCI_VENDOR_VER_MASK) >> SDHCI_VENDOR_VER_SHIFT; | ||
178 | if (vvn == VENDOR_V_22) | ||
179 | host->quirks2 |= SDHCI_QUIRK2_HOST_NO_CMD23; | ||
180 | } | ||
181 | |||
172 | static struct sdhci_ops sdhci_esdhc_ops = { | 182 | static struct sdhci_ops sdhci_esdhc_ops = { |
173 | .read_l = esdhc_readl, | 183 | .read_l = esdhc_readl, |
174 | .read_w = esdhc_readw, | 184 | .read_w = esdhc_readw, |
@@ -180,6 +190,7 @@ static struct sdhci_ops sdhci_esdhc_ops = { | |||
180 | .enable_dma = esdhc_of_enable_dma, | 190 | .enable_dma = esdhc_of_enable_dma, |
181 | .get_max_clock = esdhc_of_get_max_clock, | 191 | .get_max_clock = esdhc_of_get_max_clock, |
182 | .get_min_clock = esdhc_of_get_min_clock, | 192 | .get_min_clock = esdhc_of_get_min_clock, |
193 | .platform_init = esdhc_of_platform_init, | ||
183 | #ifdef CONFIG_PM | 194 | #ifdef CONFIG_PM |
184 | .platform_suspend = esdhc_of_suspend, | 195 | .platform_suspend = esdhc_of_suspend, |
185 | .platform_resume = esdhc_of_resume, | 196 | .platform_resume = esdhc_of_resume, |
diff --git a/drivers/mmc/host/sdhci-pci.c b/drivers/mmc/host/sdhci-pci.c index 4bb74b042a06..04936f353ced 100644 --- a/drivers/mmc/host/sdhci-pci.c +++ b/drivers/mmc/host/sdhci-pci.c | |||
@@ -1196,7 +1196,7 @@ static struct sdhci_pci_slot * __devinit sdhci_pci_probe_slot( | |||
1196 | return ERR_PTR(-ENODEV); | 1196 | return ERR_PTR(-ENODEV); |
1197 | } | 1197 | } |
1198 | 1198 | ||
1199 | if (pci_resource_len(pdev, bar) != 0x100) { | 1199 | if (pci_resource_len(pdev, bar) < 0x100) { |
1200 | dev_err(&pdev->dev, "Invalid iomem size. You may " | 1200 | dev_err(&pdev->dev, "Invalid iomem size. You may " |
1201 | "experience problems.\n"); | 1201 | "experience problems.\n"); |
1202 | } | 1202 | } |
diff --git a/drivers/mmc/host/sdhci-pltfm.c b/drivers/mmc/host/sdhci-pltfm.c index 65551a9709cc..27164457f861 100644 --- a/drivers/mmc/host/sdhci-pltfm.c +++ b/drivers/mmc/host/sdhci-pltfm.c | |||
@@ -150,6 +150,13 @@ struct sdhci_host *sdhci_pltfm_init(struct platform_device *pdev, | |||
150 | goto err_remap; | 150 | goto err_remap; |
151 | } | 151 | } |
152 | 152 | ||
153 | /* | ||
154 | * Some platforms need to probe the controller to be able to | ||
155 | * determine which caps should be used. | ||
156 | */ | ||
157 | if (host->ops && host->ops->platform_init) | ||
158 | host->ops->platform_init(host); | ||
159 | |||
153 | platform_set_drvdata(pdev, host); | 160 | platform_set_drvdata(pdev, host); |
154 | 161 | ||
155 | return host; | 162 | return host; |
diff --git a/drivers/mmc/host/sdhci-s3c.c b/drivers/mmc/host/sdhci-s3c.c index 2903949594c6..a54dd5d7a5f9 100644 --- a/drivers/mmc/host/sdhci-s3c.c +++ b/drivers/mmc/host/sdhci-s3c.c | |||
@@ -211,8 +211,8 @@ static void sdhci_s3c_set_clock(struct sdhci_host *host, unsigned int clock) | |||
211 | if (ourhost->cur_clk != best_src) { | 211 | if (ourhost->cur_clk != best_src) { |
212 | struct clk *clk = ourhost->clk_bus[best_src]; | 212 | struct clk *clk = ourhost->clk_bus[best_src]; |
213 | 213 | ||
214 | clk_enable(clk); | 214 | clk_prepare_enable(clk); |
215 | clk_disable(ourhost->clk_bus[ourhost->cur_clk]); | 215 | clk_disable_unprepare(ourhost->clk_bus[ourhost->cur_clk]); |
216 | 216 | ||
217 | /* turn clock off to card before changing clock source */ | 217 | /* turn clock off to card before changing clock source */ |
218 | writew(0, host->ioaddr + SDHCI_CLOCK_CONTROL); | 218 | writew(0, host->ioaddr + SDHCI_CLOCK_CONTROL); |
@@ -607,7 +607,7 @@ static int __devinit sdhci_s3c_probe(struct platform_device *pdev) | |||
607 | } | 607 | } |
608 | 608 | ||
609 | /* enable the local io clock and keep it running for the moment. */ | 609 | /* enable the local io clock and keep it running for the moment. */ |
610 | clk_enable(sc->clk_io); | 610 | clk_prepare_enable(sc->clk_io); |
611 | 611 | ||
612 | for (clks = 0, ptr = 0; ptr < MAX_BUS_CLK; ptr++) { | 612 | for (clks = 0, ptr = 0; ptr < MAX_BUS_CLK; ptr++) { |
613 | struct clk *clk; | 613 | struct clk *clk; |
@@ -638,7 +638,7 @@ static int __devinit sdhci_s3c_probe(struct platform_device *pdev) | |||
638 | } | 638 | } |
639 | 639 | ||
640 | #ifndef CONFIG_PM_RUNTIME | 640 | #ifndef CONFIG_PM_RUNTIME |
641 | clk_enable(sc->clk_bus[sc->cur_clk]); | 641 | clk_prepare_enable(sc->clk_bus[sc->cur_clk]); |
642 | #endif | 642 | #endif |
643 | 643 | ||
644 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); | 644 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
@@ -747,13 +747,14 @@ static int __devinit sdhci_s3c_probe(struct platform_device *pdev) | |||
747 | sdhci_s3c_setup_card_detect_gpio(sc); | 747 | sdhci_s3c_setup_card_detect_gpio(sc); |
748 | 748 | ||
749 | #ifdef CONFIG_PM_RUNTIME | 749 | #ifdef CONFIG_PM_RUNTIME |
750 | clk_disable(sc->clk_io); | 750 | if (pdata->cd_type != S3C_SDHCI_CD_INTERNAL) |
751 | clk_disable_unprepare(sc->clk_io); | ||
751 | #endif | 752 | #endif |
752 | return 0; | 753 | return 0; |
753 | 754 | ||
754 | err_req_regs: | 755 | err_req_regs: |
755 | #ifndef CONFIG_PM_RUNTIME | 756 | #ifndef CONFIG_PM_RUNTIME |
756 | clk_disable(sc->clk_bus[sc->cur_clk]); | 757 | clk_disable_unprepare(sc->clk_bus[sc->cur_clk]); |
757 | #endif | 758 | #endif |
758 | for (ptr = 0; ptr < MAX_BUS_CLK; ptr++) { | 759 | for (ptr = 0; ptr < MAX_BUS_CLK; ptr++) { |
759 | if (sc->clk_bus[ptr]) { | 760 | if (sc->clk_bus[ptr]) { |
@@ -762,7 +763,7 @@ static int __devinit sdhci_s3c_probe(struct platform_device *pdev) | |||
762 | } | 763 | } |
763 | 764 | ||
764 | err_no_busclks: | 765 | err_no_busclks: |
765 | clk_disable(sc->clk_io); | 766 | clk_disable_unprepare(sc->clk_io); |
766 | clk_put(sc->clk_io); | 767 | clk_put(sc->clk_io); |
767 | 768 | ||
768 | err_io_clk: | 769 | err_io_clk: |
@@ -794,7 +795,8 @@ static int __devexit sdhci_s3c_remove(struct platform_device *pdev) | |||
794 | gpio_free(sc->ext_cd_gpio); | 795 | gpio_free(sc->ext_cd_gpio); |
795 | 796 | ||
796 | #ifdef CONFIG_PM_RUNTIME | 797 | #ifdef CONFIG_PM_RUNTIME |
797 | clk_enable(sc->clk_io); | 798 | if (pdata->cd_type != S3C_SDHCI_CD_INTERNAL) |
799 | clk_prepare_enable(sc->clk_io); | ||
798 | #endif | 800 | #endif |
799 | sdhci_remove_host(host, 1); | 801 | sdhci_remove_host(host, 1); |
800 | 802 | ||
@@ -802,14 +804,14 @@ static int __devexit sdhci_s3c_remove(struct platform_device *pdev) | |||
802 | pm_runtime_disable(&pdev->dev); | 804 | pm_runtime_disable(&pdev->dev); |
803 | 805 | ||
804 | #ifndef CONFIG_PM_RUNTIME | 806 | #ifndef CONFIG_PM_RUNTIME |
805 | clk_disable(sc->clk_bus[sc->cur_clk]); | 807 | clk_disable_unprepare(sc->clk_bus[sc->cur_clk]); |
806 | #endif | 808 | #endif |
807 | for (ptr = 0; ptr < MAX_BUS_CLK; ptr++) { | 809 | for (ptr = 0; ptr < MAX_BUS_CLK; ptr++) { |
808 | if (sc->clk_bus[ptr]) { | 810 | if (sc->clk_bus[ptr]) { |
809 | clk_put(sc->clk_bus[ptr]); | 811 | clk_put(sc->clk_bus[ptr]); |
810 | } | 812 | } |
811 | } | 813 | } |
812 | clk_disable(sc->clk_io); | 814 | clk_disable_unprepare(sc->clk_io); |
813 | clk_put(sc->clk_io); | 815 | clk_put(sc->clk_io); |
814 | 816 | ||
815 | if (pdev->dev.of_node) { | 817 | if (pdev->dev.of_node) { |
@@ -849,8 +851,8 @@ static int sdhci_s3c_runtime_suspend(struct device *dev) | |||
849 | 851 | ||
850 | ret = sdhci_runtime_suspend_host(host); | 852 | ret = sdhci_runtime_suspend_host(host); |
851 | 853 | ||
852 | clk_disable(ourhost->clk_bus[ourhost->cur_clk]); | 854 | clk_disable_unprepare(ourhost->clk_bus[ourhost->cur_clk]); |
853 | clk_disable(busclk); | 855 | clk_disable_unprepare(busclk); |
854 | return ret; | 856 | return ret; |
855 | } | 857 | } |
856 | 858 | ||
@@ -861,8 +863,8 @@ static int sdhci_s3c_runtime_resume(struct device *dev) | |||
861 | struct clk *busclk = ourhost->clk_io; | 863 | struct clk *busclk = ourhost->clk_io; |
862 | int ret; | 864 | int ret; |
863 | 865 | ||
864 | clk_enable(busclk); | 866 | clk_prepare_enable(busclk); |
865 | clk_enable(ourhost->clk_bus[ourhost->cur_clk]); | 867 | clk_prepare_enable(ourhost->clk_bus[ourhost->cur_clk]); |
866 | ret = sdhci_runtime_resume_host(host); | 868 | ret = sdhci_runtime_resume_host(host); |
867 | return ret; | 869 | return ret; |
868 | } | 870 | } |
diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c index 7922adb42386..c7851c0aabce 100644 --- a/drivers/mmc/host/sdhci.c +++ b/drivers/mmc/host/sdhci.c | |||
@@ -1315,16 +1315,19 @@ static void sdhci_request(struct mmc_host *mmc, struct mmc_request *mrq) | |||
1315 | */ | 1315 | */ |
1316 | if ((host->flags & SDHCI_NEEDS_RETUNING) && | 1316 | if ((host->flags & SDHCI_NEEDS_RETUNING) && |
1317 | !(present_state & (SDHCI_DOING_WRITE | SDHCI_DOING_READ))) { | 1317 | !(present_state & (SDHCI_DOING_WRITE | SDHCI_DOING_READ))) { |
1318 | /* eMMC uses cmd21 while sd and sdio use cmd19 */ | 1318 | if (mmc->card) { |
1319 | tuning_opcode = mmc->card->type == MMC_TYPE_MMC ? | 1319 | /* eMMC uses cmd21 but sd and sdio use cmd19 */ |
1320 | MMC_SEND_TUNING_BLOCK_HS200 : | 1320 | tuning_opcode = |
1321 | MMC_SEND_TUNING_BLOCK; | 1321 | mmc->card->type == MMC_TYPE_MMC ? |
1322 | spin_unlock_irqrestore(&host->lock, flags); | 1322 | MMC_SEND_TUNING_BLOCK_HS200 : |
1323 | sdhci_execute_tuning(mmc, tuning_opcode); | 1323 | MMC_SEND_TUNING_BLOCK; |
1324 | spin_lock_irqsave(&host->lock, flags); | 1324 | spin_unlock_irqrestore(&host->lock, flags); |
1325 | 1325 | sdhci_execute_tuning(mmc, tuning_opcode); | |
1326 | /* Restore original mmc_request structure */ | 1326 | spin_lock_irqsave(&host->lock, flags); |
1327 | host->mrq = mrq; | 1327 | |
1328 | /* Restore original mmc_request structure */ | ||
1329 | host->mrq = mrq; | ||
1330 | } | ||
1328 | } | 1331 | } |
1329 | 1332 | ||
1330 | if (mrq->sbc && !(host->flags & SDHCI_AUTO_CMD23)) | 1333 | if (mrq->sbc && !(host->flags & SDHCI_AUTO_CMD23)) |
@@ -2837,6 +2840,9 @@ int sdhci_add_host(struct sdhci_host *host) | |||
2837 | if (!(host->quirks & SDHCI_QUIRK_FORCE_1_BIT_DATA)) | 2840 | if (!(host->quirks & SDHCI_QUIRK_FORCE_1_BIT_DATA)) |
2838 | mmc->caps |= MMC_CAP_4_BIT_DATA; | 2841 | mmc->caps |= MMC_CAP_4_BIT_DATA; |
2839 | 2842 | ||
2843 | if (host->quirks2 & SDHCI_QUIRK2_HOST_NO_CMD23) | ||
2844 | mmc->caps &= ~MMC_CAP_CMD23; | ||
2845 | |||
2840 | if (caps[0] & SDHCI_CAN_DO_HISPD) | 2846 | if (caps[0] & SDHCI_CAN_DO_HISPD) |
2841 | mmc->caps |= MMC_CAP_SD_HIGHSPEED | MMC_CAP_MMC_HIGHSPEED; | 2847 | mmc->caps |= MMC_CAP_SD_HIGHSPEED | MMC_CAP_MMC_HIGHSPEED; |
2842 | 2848 | ||
@@ -2846,9 +2852,12 @@ int sdhci_add_host(struct sdhci_host *host) | |||
2846 | 2852 | ||
2847 | /* If vqmmc regulator and no 1.8V signalling, then there's no UHS */ | 2853 | /* If vqmmc regulator and no 1.8V signalling, then there's no UHS */ |
2848 | host->vqmmc = regulator_get(mmc_dev(mmc), "vqmmc"); | 2854 | host->vqmmc = regulator_get(mmc_dev(mmc), "vqmmc"); |
2849 | if (IS_ERR(host->vqmmc)) { | 2855 | if (IS_ERR_OR_NULL(host->vqmmc)) { |
2850 | pr_info("%s: no vqmmc regulator found\n", mmc_hostname(mmc)); | 2856 | if (PTR_ERR(host->vqmmc) < 0) { |
2851 | host->vqmmc = NULL; | 2857 | pr_info("%s: no vqmmc regulator found\n", |
2858 | mmc_hostname(mmc)); | ||
2859 | host->vqmmc = NULL; | ||
2860 | } | ||
2852 | } | 2861 | } |
2853 | else if (regulator_is_supported_voltage(host->vqmmc, 1800000, 1800000)) | 2862 | else if (regulator_is_supported_voltage(host->vqmmc, 1800000, 1800000)) |
2854 | regulator_enable(host->vqmmc); | 2863 | regulator_enable(host->vqmmc); |
@@ -2904,9 +2913,12 @@ int sdhci_add_host(struct sdhci_host *host) | |||
2904 | ocr_avail = 0; | 2913 | ocr_avail = 0; |
2905 | 2914 | ||
2906 | host->vmmc = regulator_get(mmc_dev(mmc), "vmmc"); | 2915 | host->vmmc = regulator_get(mmc_dev(mmc), "vmmc"); |
2907 | if (IS_ERR(host->vmmc)) { | 2916 | if (IS_ERR_OR_NULL(host->vmmc)) { |
2908 | pr_info("%s: no vmmc regulator found\n", mmc_hostname(mmc)); | 2917 | if (PTR_ERR(host->vmmc) < 0) { |
2909 | host->vmmc = NULL; | 2918 | pr_info("%s: no vmmc regulator found\n", |
2919 | mmc_hostname(mmc)); | ||
2920 | host->vmmc = NULL; | ||
2921 | } | ||
2910 | } else | 2922 | } else |
2911 | regulator_enable(host->vmmc); | 2923 | regulator_enable(host->vmmc); |
2912 | 2924 | ||
diff --git a/drivers/mmc/host/sdhci.h b/drivers/mmc/host/sdhci.h index 97653ea8942b..71a4a7ed46c5 100644 --- a/drivers/mmc/host/sdhci.h +++ b/drivers/mmc/host/sdhci.h | |||
@@ -278,6 +278,7 @@ struct sdhci_ops { | |||
278 | void (*hw_reset)(struct sdhci_host *host); | 278 | void (*hw_reset)(struct sdhci_host *host); |
279 | void (*platform_suspend)(struct sdhci_host *host); | 279 | void (*platform_suspend)(struct sdhci_host *host); |
280 | void (*platform_resume)(struct sdhci_host *host); | 280 | void (*platform_resume)(struct sdhci_host *host); |
281 | void (*platform_init)(struct sdhci_host *host); | ||
281 | }; | 282 | }; |
282 | 283 | ||
283 | #ifdef CONFIG_MMC_SDHCI_IO_ACCESSORS | 284 | #ifdef CONFIG_MMC_SDHCI_IO_ACCESSORS |
diff --git a/drivers/mmc/host/sh_mmcif.c b/drivers/mmc/host/sh_mmcif.c index 11d2bc3b51d5..d25bc97dc5c6 100644 --- a/drivers/mmc/host/sh_mmcif.c +++ b/drivers/mmc/host/sh_mmcif.c | |||
@@ -1466,9 +1466,9 @@ static int __devexit sh_mmcif_remove(struct platform_device *pdev) | |||
1466 | 1466 | ||
1467 | platform_set_drvdata(pdev, NULL); | 1467 | platform_set_drvdata(pdev, NULL); |
1468 | 1468 | ||
1469 | clk_disable(host->hclk); | ||
1469 | mmc_free_host(host->mmc); | 1470 | mmc_free_host(host->mmc); |
1470 | pm_runtime_put_sync(&pdev->dev); | 1471 | pm_runtime_put_sync(&pdev->dev); |
1471 | clk_disable(host->hclk); | ||
1472 | pm_runtime_disable(&pdev->dev); | 1472 | pm_runtime_disable(&pdev->dev); |
1473 | 1473 | ||
1474 | return 0; | 1474 | return 0; |
diff --git a/drivers/mtd/nand/mxc_nand.c b/drivers/mtd/nand/mxc_nand.c index 72e31d86030d..022dcdc256fb 100644 --- a/drivers/mtd/nand/mxc_nand.c +++ b/drivers/mtd/nand/mxc_nand.c | |||
@@ -37,15 +37,9 @@ | |||
37 | 37 | ||
38 | #include <asm/mach/flash.h> | 38 | #include <asm/mach/flash.h> |
39 | #include <linux/platform_data/mtd-mxc_nand.h> | 39 | #include <linux/platform_data/mtd-mxc_nand.h> |
40 | #include <mach/hardware.h> | ||
41 | 40 | ||
42 | #define DRIVER_NAME "mxc_nand" | 41 | #define DRIVER_NAME "mxc_nand" |
43 | 42 | ||
44 | #define nfc_is_v21() (cpu_is_mx25() || cpu_is_mx35()) | ||
45 | #define nfc_is_v1() (cpu_is_mx31() || cpu_is_mx27() || cpu_is_mx21()) | ||
46 | #define nfc_is_v3_2a() cpu_is_mx51() | ||
47 | #define nfc_is_v3_2b() cpu_is_mx53() | ||
48 | |||
49 | /* Addresses for NFC registers */ | 43 | /* Addresses for NFC registers */ |
50 | #define NFC_V1_V2_BUF_SIZE (host->regs + 0x00) | 44 | #define NFC_V1_V2_BUF_SIZE (host->regs + 0x00) |
51 | #define NFC_V1_V2_BUF_ADDR (host->regs + 0x04) | 45 | #define NFC_V1_V2_BUF_ADDR (host->regs + 0x04) |
@@ -1283,6 +1277,53 @@ static const struct mxc_nand_devtype_data imx53_nand_devtype_data = { | |||
1283 | .ppb_shift = 8, | 1277 | .ppb_shift = 8, |
1284 | }; | 1278 | }; |
1285 | 1279 | ||
1280 | static inline int is_imx21_nfc(struct mxc_nand_host *host) | ||
1281 | { | ||
1282 | return host->devtype_data == &imx21_nand_devtype_data; | ||
1283 | } | ||
1284 | |||
1285 | static inline int is_imx27_nfc(struct mxc_nand_host *host) | ||
1286 | { | ||
1287 | return host->devtype_data == &imx27_nand_devtype_data; | ||
1288 | } | ||
1289 | |||
1290 | static inline int is_imx25_nfc(struct mxc_nand_host *host) | ||
1291 | { | ||
1292 | return host->devtype_data == &imx25_nand_devtype_data; | ||
1293 | } | ||
1294 | |||
1295 | static inline int is_imx51_nfc(struct mxc_nand_host *host) | ||
1296 | { | ||
1297 | return host->devtype_data == &imx51_nand_devtype_data; | ||
1298 | } | ||
1299 | |||
1300 | static inline int is_imx53_nfc(struct mxc_nand_host *host) | ||
1301 | { | ||
1302 | return host->devtype_data == &imx53_nand_devtype_data; | ||
1303 | } | ||
1304 | |||
1305 | static struct platform_device_id mxcnd_devtype[] = { | ||
1306 | { | ||
1307 | .name = "imx21-nand", | ||
1308 | .driver_data = (kernel_ulong_t) &imx21_nand_devtype_data, | ||
1309 | }, { | ||
1310 | .name = "imx27-nand", | ||
1311 | .driver_data = (kernel_ulong_t) &imx27_nand_devtype_data, | ||
1312 | }, { | ||
1313 | .name = "imx25-nand", | ||
1314 | .driver_data = (kernel_ulong_t) &imx25_nand_devtype_data, | ||
1315 | }, { | ||
1316 | .name = "imx51-nand", | ||
1317 | .driver_data = (kernel_ulong_t) &imx51_nand_devtype_data, | ||
1318 | }, { | ||
1319 | .name = "imx53-nand", | ||
1320 | .driver_data = (kernel_ulong_t) &imx53_nand_devtype_data, | ||
1321 | }, { | ||
1322 | /* sentinel */ | ||
1323 | } | ||
1324 | }; | ||
1325 | MODULE_DEVICE_TABLE(platform, mxcnd_devtype); | ||
1326 | |||
1286 | #ifdef CONFIG_OF_MTD | 1327 | #ifdef CONFIG_OF_MTD |
1287 | static const struct of_device_id mxcnd_dt_ids[] = { | 1328 | static const struct of_device_id mxcnd_dt_ids[] = { |
1288 | { | 1329 | { |
@@ -1337,32 +1378,6 @@ static int __init mxcnd_probe_dt(struct mxc_nand_host *host) | |||
1337 | } | 1378 | } |
1338 | #endif | 1379 | #endif |
1339 | 1380 | ||
1340 | static int __init mxcnd_probe_pdata(struct mxc_nand_host *host) | ||
1341 | { | ||
1342 | struct mxc_nand_platform_data *pdata = host->dev->platform_data; | ||
1343 | |||
1344 | if (!pdata) | ||
1345 | return -ENODEV; | ||
1346 | |||
1347 | host->pdata = *pdata; | ||
1348 | |||
1349 | if (nfc_is_v1()) { | ||
1350 | if (cpu_is_mx21()) | ||
1351 | host->devtype_data = &imx21_nand_devtype_data; | ||
1352 | else | ||
1353 | host->devtype_data = &imx27_nand_devtype_data; | ||
1354 | } else if (nfc_is_v21()) { | ||
1355 | host->devtype_data = &imx25_nand_devtype_data; | ||
1356 | } else if (nfc_is_v3_2a()) { | ||
1357 | host->devtype_data = &imx51_nand_devtype_data; | ||
1358 | } else if (nfc_is_v3_2b()) { | ||
1359 | host->devtype_data = &imx53_nand_devtype_data; | ||
1360 | } else | ||
1361 | BUG(); | ||
1362 | |||
1363 | return 0; | ||
1364 | } | ||
1365 | |||
1366 | static int __devinit mxcnd_probe(struct platform_device *pdev) | 1381 | static int __devinit mxcnd_probe(struct platform_device *pdev) |
1367 | { | 1382 | { |
1368 | struct nand_chip *this; | 1383 | struct nand_chip *this; |
@@ -1404,8 +1419,16 @@ static int __devinit mxcnd_probe(struct platform_device *pdev) | |||
1404 | return PTR_ERR(host->clk); | 1419 | return PTR_ERR(host->clk); |
1405 | 1420 | ||
1406 | err = mxcnd_probe_dt(host); | 1421 | err = mxcnd_probe_dt(host); |
1407 | if (err > 0) | 1422 | if (err > 0) { |
1408 | err = mxcnd_probe_pdata(host); | 1423 | struct mxc_nand_platform_data *pdata = pdev->dev.platform_data; |
1424 | if (pdata) { | ||
1425 | host->pdata = *pdata; | ||
1426 | host->devtype_data = (struct mxc_nand_devtype_data *) | ||
1427 | pdev->id_entry->driver_data; | ||
1428 | } else { | ||
1429 | err = -ENODEV; | ||
1430 | } | ||
1431 | } | ||
1409 | if (err < 0) | 1432 | if (err < 0) |
1410 | return err; | 1433 | return err; |
1411 | 1434 | ||
@@ -1494,7 +1517,7 @@ static int __devinit mxcnd_probe(struct platform_device *pdev) | |||
1494 | } | 1517 | } |
1495 | 1518 | ||
1496 | /* first scan to find the device and get the page size */ | 1519 | /* first scan to find the device and get the page size */ |
1497 | if (nand_scan_ident(mtd, nfc_is_v21() ? 4 : 1, NULL)) { | 1520 | if (nand_scan_ident(mtd, is_imx25_nfc(host) ? 4 : 1, NULL)) { |
1498 | err = -ENXIO; | 1521 | err = -ENXIO; |
1499 | goto escan; | 1522 | goto escan; |
1500 | } | 1523 | } |
@@ -1508,7 +1531,7 @@ static int __devinit mxcnd_probe(struct platform_device *pdev) | |||
1508 | this->ecc.layout = host->devtype_data->ecclayout_4k; | 1531 | this->ecc.layout = host->devtype_data->ecclayout_4k; |
1509 | 1532 | ||
1510 | if (this->ecc.mode == NAND_ECC_HW) { | 1533 | if (this->ecc.mode == NAND_ECC_HW) { |
1511 | if (nfc_is_v1()) | 1534 | if (is_imx21_nfc(host) || is_imx27_nfc(host)) |
1512 | this->ecc.strength = 1; | 1535 | this->ecc.strength = 1; |
1513 | else | 1536 | else |
1514 | this->ecc.strength = (host->eccsize == 4) ? 4 : 8; | 1537 | this->ecc.strength = (host->eccsize == 4) ? 4 : 8; |
@@ -1555,6 +1578,7 @@ static struct platform_driver mxcnd_driver = { | |||
1555 | .owner = THIS_MODULE, | 1578 | .owner = THIS_MODULE, |
1556 | .of_match_table = of_match_ptr(mxcnd_dt_ids), | 1579 | .of_match_table = of_match_ptr(mxcnd_dt_ids), |
1557 | }, | 1580 | }, |
1581 | .id_table = mxcnd_devtype, | ||
1558 | .probe = mxcnd_probe, | 1582 | .probe = mxcnd_probe, |
1559 | .remove = __devexit_p(mxcnd_remove), | 1583 | .remove = __devexit_p(mxcnd_remove), |
1560 | }; | 1584 | }; |
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c index c65295dded39..6e5bdd1a31d9 100644 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c | |||
@@ -1702,7 +1702,7 @@ static int bnx2x_set_eee(struct net_device *dev, struct ethtool_eee *edata) | |||
1702 | SHMEM_EEE_ADV_STATUS_SHIFT); | 1702 | SHMEM_EEE_ADV_STATUS_SHIFT); |
1703 | if ((advertised != (eee_cfg & SHMEM_EEE_ADV_STATUS_MASK))) { | 1703 | if ((advertised != (eee_cfg & SHMEM_EEE_ADV_STATUS_MASK))) { |
1704 | DP(BNX2X_MSG_ETHTOOL, | 1704 | DP(BNX2X_MSG_ETHTOOL, |
1705 | "Direct manipulation of EEE advertisment is not supported\n"); | 1705 | "Direct manipulation of EEE advertisement is not supported\n"); |
1706 | return -EINVAL; | 1706 | return -EINVAL; |
1707 | } | 1707 | } |
1708 | 1708 | ||
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c index 6dd0dd076cc5..f6cfdc6cf20f 100644 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c | |||
@@ -9941,7 +9941,7 @@ static int bnx2x_848x3_config_init(struct bnx2x_phy *phy, | |||
9941 | else | 9941 | else |
9942 | rc = bnx2x_8483x_disable_eee(phy, params, vars); | 9942 | rc = bnx2x_8483x_disable_eee(phy, params, vars); |
9943 | if (rc) { | 9943 | if (rc) { |
9944 | DP(NETIF_MSG_LINK, "Failed to set EEE advertisment\n"); | 9944 | DP(NETIF_MSG_LINK, "Failed to set EEE advertisement\n"); |
9945 | return rc; | 9945 | return rc; |
9946 | } | 9946 | } |
9947 | } else { | 9947 | } else { |
@@ -12987,7 +12987,7 @@ static u8 bnx2x_analyze_link_error(struct link_params *params, | |||
12987 | DP(NETIF_MSG_LINK, "Analyze TX Fault\n"); | 12987 | DP(NETIF_MSG_LINK, "Analyze TX Fault\n"); |
12988 | break; | 12988 | break; |
12989 | default: | 12989 | default: |
12990 | DP(NETIF_MSG_LINK, "Analyze UNKOWN\n"); | 12990 | DP(NETIF_MSG_LINK, "Analyze UNKNOWN\n"); |
12991 | } | 12991 | } |
12992 | DP(NETIF_MSG_LINK, "Link changed:[%x %x]->%x\n", vars->link_up, | 12992 | DP(NETIF_MSG_LINK, "Link changed:[%x %x]->%x\n", vars->link_up, |
12993 | old_status, status); | 12993 | old_status, status); |
diff --git a/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c b/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c index 32eec15fe4c2..730ae2cfa49e 100644 --- a/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c +++ b/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c | |||
@@ -2519,6 +2519,7 @@ int t4_fw_bye(struct adapter *adap, unsigned int mbox) | |||
2519 | { | 2519 | { |
2520 | struct fw_bye_cmd c; | 2520 | struct fw_bye_cmd c; |
2521 | 2521 | ||
2522 | memset(&c, 0, sizeof(c)); | ||
2522 | INIT_CMD(c, BYE, WRITE); | 2523 | INIT_CMD(c, BYE, WRITE); |
2523 | return t4_wr_mbox(adap, mbox, &c, sizeof(c), NULL); | 2524 | return t4_wr_mbox(adap, mbox, &c, sizeof(c), NULL); |
2524 | } | 2525 | } |
@@ -2535,6 +2536,7 @@ int t4_early_init(struct adapter *adap, unsigned int mbox) | |||
2535 | { | 2536 | { |
2536 | struct fw_initialize_cmd c; | 2537 | struct fw_initialize_cmd c; |
2537 | 2538 | ||
2539 | memset(&c, 0, sizeof(c)); | ||
2538 | INIT_CMD(c, INITIALIZE, WRITE); | 2540 | INIT_CMD(c, INITIALIZE, WRITE); |
2539 | return t4_wr_mbox(adap, mbox, &c, sizeof(c), NULL); | 2541 | return t4_wr_mbox(adap, mbox, &c, sizeof(c), NULL); |
2540 | } | 2542 | } |
@@ -2551,6 +2553,7 @@ int t4_fw_reset(struct adapter *adap, unsigned int mbox, int reset) | |||
2551 | { | 2553 | { |
2552 | struct fw_reset_cmd c; | 2554 | struct fw_reset_cmd c; |
2553 | 2555 | ||
2556 | memset(&c, 0, sizeof(c)); | ||
2554 | INIT_CMD(c, RESET, WRITE); | 2557 | INIT_CMD(c, RESET, WRITE); |
2555 | c.val = htonl(reset); | 2558 | c.val = htonl(reset); |
2556 | return t4_wr_mbox(adap, mbox, &c, sizeof(c), NULL); | 2559 | return t4_wr_mbox(adap, mbox, &c, sizeof(c), NULL); |
@@ -2828,7 +2831,7 @@ int t4_fixup_host_params(struct adapter *adap, unsigned int page_size, | |||
2828 | HOSTPAGESIZEPF7(sge_hps)); | 2831 | HOSTPAGESIZEPF7(sge_hps)); |
2829 | 2832 | ||
2830 | t4_set_reg_field(adap, SGE_CONTROL, | 2833 | t4_set_reg_field(adap, SGE_CONTROL, |
2831 | INGPADBOUNDARY(INGPADBOUNDARY_MASK) | | 2834 | INGPADBOUNDARY_MASK | |
2832 | EGRSTATUSPAGESIZE_MASK, | 2835 | EGRSTATUSPAGESIZE_MASK, |
2833 | INGPADBOUNDARY(fl_align_log - 5) | | 2836 | INGPADBOUNDARY(fl_align_log - 5) | |
2834 | EGRSTATUSPAGESIZE(stat_len != 64)); | 2837 | EGRSTATUSPAGESIZE(stat_len != 64)); |
@@ -3278,6 +3281,7 @@ int t4_identify_port(struct adapter *adap, unsigned int mbox, unsigned int viid, | |||
3278 | { | 3281 | { |
3279 | struct fw_vi_enable_cmd c; | 3282 | struct fw_vi_enable_cmd c; |
3280 | 3283 | ||
3284 | memset(&c, 0, sizeof(c)); | ||
3281 | c.op_to_viid = htonl(FW_CMD_OP(FW_VI_ENABLE_CMD) | FW_CMD_REQUEST | | 3285 | c.op_to_viid = htonl(FW_CMD_OP(FW_VI_ENABLE_CMD) | FW_CMD_REQUEST | |
3282 | FW_CMD_EXEC | FW_VI_ENABLE_CMD_VIID(viid)); | 3286 | FW_CMD_EXEC | FW_VI_ENABLE_CMD_VIID(viid)); |
3283 | c.ien_to_len16 = htonl(FW_VI_ENABLE_CMD_LED | FW_LEN16(c)); | 3287 | c.ien_to_len16 = htonl(FW_VI_ENABLE_CMD_LED | FW_LEN16(c)); |
diff --git a/drivers/net/ethernet/freescale/gianfar.c b/drivers/net/ethernet/freescale/gianfar.c index 1d03dcdd5e56..19ac096cb07b 100644 --- a/drivers/net/ethernet/freescale/gianfar.c +++ b/drivers/net/ethernet/freescale/gianfar.c | |||
@@ -1353,8 +1353,11 @@ static int gfar_restore(struct device *dev) | |||
1353 | struct gfar_private *priv = dev_get_drvdata(dev); | 1353 | struct gfar_private *priv = dev_get_drvdata(dev); |
1354 | struct net_device *ndev = priv->ndev; | 1354 | struct net_device *ndev = priv->ndev; |
1355 | 1355 | ||
1356 | if (!netif_running(ndev)) | 1356 | if (!netif_running(ndev)) { |
1357 | netif_device_attach(ndev); | ||
1358 | |||
1357 | return 0; | 1359 | return 0; |
1360 | } | ||
1358 | 1361 | ||
1359 | gfar_init_bds(ndev); | 1362 | gfar_init_bds(ndev); |
1360 | init_registers(ndev); | 1363 | init_registers(ndev); |
diff --git a/drivers/net/ethernet/jme.c b/drivers/net/ethernet/jme.c index f8064df10cc4..92317e9c0f73 100644 --- a/drivers/net/ethernet/jme.c +++ b/drivers/net/ethernet/jme.c | |||
@@ -1948,10 +1948,10 @@ jme_close(struct net_device *netdev) | |||
1948 | 1948 | ||
1949 | JME_NAPI_DISABLE(jme); | 1949 | JME_NAPI_DISABLE(jme); |
1950 | 1950 | ||
1951 | tasklet_disable(&jme->linkch_task); | 1951 | tasklet_kill(&jme->linkch_task); |
1952 | tasklet_disable(&jme->txclean_task); | 1952 | tasklet_kill(&jme->txclean_task); |
1953 | tasklet_disable(&jme->rxclean_task); | 1953 | tasklet_kill(&jme->rxclean_task); |
1954 | tasklet_disable(&jme->rxempty_task); | 1954 | tasklet_kill(&jme->rxempty_task); |
1955 | 1955 | ||
1956 | jme_disable_rx_engine(jme); | 1956 | jme_disable_rx_engine(jme); |
1957 | jme_disable_tx_engine(jme); | 1957 | jme_disable_tx_engine(jme); |
diff --git a/drivers/net/ethernet/marvell/skge.c b/drivers/net/ethernet/marvell/skge.c index 9b9c2ac5c4c2..d19a143aa5a8 100644 --- a/drivers/net/ethernet/marvell/skge.c +++ b/drivers/net/ethernet/marvell/skge.c | |||
@@ -4026,7 +4026,7 @@ static void __devexit skge_remove(struct pci_dev *pdev) | |||
4026 | dev0 = hw->dev[0]; | 4026 | dev0 = hw->dev[0]; |
4027 | unregister_netdev(dev0); | 4027 | unregister_netdev(dev0); |
4028 | 4028 | ||
4029 | tasklet_disable(&hw->phy_task); | 4029 | tasklet_kill(&hw->phy_task); |
4030 | 4030 | ||
4031 | spin_lock_irq(&hw->hw_lock); | 4031 | spin_lock_irq(&hw->hw_lock); |
4032 | hw->intr_mask = 0; | 4032 | hw->intr_mask = 0; |
diff --git a/drivers/net/ethernet/micrel/ksz884x.c b/drivers/net/ethernet/micrel/ksz884x.c index 318fee91c79d..e558edd1cb6c 100644 --- a/drivers/net/ethernet/micrel/ksz884x.c +++ b/drivers/net/ethernet/micrel/ksz884x.c | |||
@@ -5407,8 +5407,8 @@ static int netdev_close(struct net_device *dev) | |||
5407 | /* Delay for receive task to stop scheduling itself. */ | 5407 | /* Delay for receive task to stop scheduling itself. */ |
5408 | msleep(2000 / HZ); | 5408 | msleep(2000 / HZ); |
5409 | 5409 | ||
5410 | tasklet_disable(&hw_priv->rx_tasklet); | 5410 | tasklet_kill(&hw_priv->rx_tasklet); |
5411 | tasklet_disable(&hw_priv->tx_tasklet); | 5411 | tasklet_kill(&hw_priv->tx_tasklet); |
5412 | free_irq(dev->irq, hw_priv->dev); | 5412 | free_irq(dev->irq, hw_priv->dev); |
5413 | 5413 | ||
5414 | transmit_cleanup(hw_priv, 0); | 5414 | transmit_cleanup(hw_priv, 0); |
diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c index e7ff886e8047..927aa33d4349 100644 --- a/drivers/net/ethernet/realtek/r8169.c +++ b/drivers/net/ethernet/realtek/r8169.c | |||
@@ -3827,6 +3827,8 @@ static void rtl_wol_suspend_quirk(struct rtl8169_private *tp) | |||
3827 | void __iomem *ioaddr = tp->mmio_addr; | 3827 | void __iomem *ioaddr = tp->mmio_addr; |
3828 | 3828 | ||
3829 | switch (tp->mac_version) { | 3829 | switch (tp->mac_version) { |
3830 | case RTL_GIGA_MAC_VER_25: | ||
3831 | case RTL_GIGA_MAC_VER_26: | ||
3830 | case RTL_GIGA_MAC_VER_29: | 3832 | case RTL_GIGA_MAC_VER_29: |
3831 | case RTL_GIGA_MAC_VER_30: | 3833 | case RTL_GIGA_MAC_VER_30: |
3832 | case RTL_GIGA_MAC_VER_32: | 3834 | case RTL_GIGA_MAC_VER_32: |
@@ -4519,6 +4521,9 @@ static void rtl_set_rx_mode(struct net_device *dev) | |||
4519 | mc_filter[1] = swab32(data); | 4521 | mc_filter[1] = swab32(data); |
4520 | } | 4522 | } |
4521 | 4523 | ||
4524 | if (tp->mac_version == RTL_GIGA_MAC_VER_35) | ||
4525 | mc_filter[1] = mc_filter[0] = 0xffffffff; | ||
4526 | |||
4522 | RTL_W32(MAR0 + 4, mc_filter[1]); | 4527 | RTL_W32(MAR0 + 4, mc_filter[1]); |
4523 | RTL_W32(MAR0 + 0, mc_filter[0]); | 4528 | RTL_W32(MAR0 + 0, mc_filter[0]); |
4524 | 4529 | ||
diff --git a/drivers/net/ethernet/xilinx/xilinx_axienet_main.c b/drivers/net/ethernet/xilinx/xilinx_axienet_main.c index 0793299bd39e..1d04754a6637 100644 --- a/drivers/net/ethernet/xilinx/xilinx_axienet_main.c +++ b/drivers/net/ethernet/xilinx/xilinx_axienet_main.c | |||
@@ -990,7 +990,7 @@ static int axienet_stop(struct net_device *ndev) | |||
990 | axienet_setoptions(ndev, lp->options & | 990 | axienet_setoptions(ndev, lp->options & |
991 | ~(XAE_OPTION_TXEN | XAE_OPTION_RXEN)); | 991 | ~(XAE_OPTION_TXEN | XAE_OPTION_RXEN)); |
992 | 992 | ||
993 | tasklet_disable(&lp->dma_err_tasklet); | 993 | tasklet_kill(&lp->dma_err_tasklet); |
994 | 994 | ||
995 | free_irq(lp->tx_irq, ndev); | 995 | free_irq(lp->tx_irq, ndev); |
996 | free_irq(lp->rx_irq, ndev); | 996 | free_irq(lp->rx_irq, ndev); |
diff --git a/drivers/net/usb/cdc_eem.c b/drivers/net/usb/cdc_eem.c index c81e278629ff..08d55b6bf272 100644 --- a/drivers/net/usb/cdc_eem.c +++ b/drivers/net/usb/cdc_eem.c | |||
@@ -31,6 +31,7 @@ | |||
31 | #include <linux/usb/cdc.h> | 31 | #include <linux/usb/cdc.h> |
32 | #include <linux/usb/usbnet.h> | 32 | #include <linux/usb/usbnet.h> |
33 | #include <linux/gfp.h> | 33 | #include <linux/gfp.h> |
34 | #include <linux/if_vlan.h> | ||
34 | 35 | ||
35 | 36 | ||
36 | /* | 37 | /* |
@@ -92,7 +93,7 @@ static int eem_bind(struct usbnet *dev, struct usb_interface *intf) | |||
92 | 93 | ||
93 | /* no jumbogram (16K) support for now */ | 94 | /* no jumbogram (16K) support for now */ |
94 | 95 | ||
95 | dev->net->hard_header_len += EEM_HEAD + ETH_FCS_LEN; | 96 | dev->net->hard_header_len += EEM_HEAD + ETH_FCS_LEN + VLAN_HLEN; |
96 | dev->hard_mtu = dev->net->mtu + dev->net->hard_header_len; | 97 | dev->hard_mtu = dev->net->mtu + dev->net->hard_header_len; |
97 | 98 | ||
98 | return 0; | 99 | return 0; |
diff --git a/drivers/net/usb/smsc95xx.c b/drivers/net/usb/smsc95xx.c index 7479a5761d0d..3286166415b4 100644 --- a/drivers/net/usb/smsc95xx.c +++ b/drivers/net/usb/smsc95xx.c | |||
@@ -1344,6 +1344,7 @@ static struct sk_buff *smsc95xx_tx_fixup(struct usbnet *dev, | |||
1344 | } else { | 1344 | } else { |
1345 | u32 csum_preamble = smsc95xx_calc_csum_preamble(skb); | 1345 | u32 csum_preamble = smsc95xx_calc_csum_preamble(skb); |
1346 | skb_push(skb, 4); | 1346 | skb_push(skb, 4); |
1347 | cpu_to_le32s(&csum_preamble); | ||
1347 | memcpy(skb->data, &csum_preamble, 4); | 1348 | memcpy(skb->data, &csum_preamble, 4); |
1348 | } | 1349 | } |
1349 | } | 1350 | } |
diff --git a/drivers/net/usb/usbnet.c b/drivers/net/usb/usbnet.c index cb04f900cc46..edb81ed06950 100644 --- a/drivers/net/usb/usbnet.c +++ b/drivers/net/usb/usbnet.c | |||
@@ -359,10 +359,12 @@ static enum skb_state defer_bh(struct usbnet *dev, struct sk_buff *skb, | |||
359 | void usbnet_defer_kevent (struct usbnet *dev, int work) | 359 | void usbnet_defer_kevent (struct usbnet *dev, int work) |
360 | { | 360 | { |
361 | set_bit (work, &dev->flags); | 361 | set_bit (work, &dev->flags); |
362 | if (!schedule_work (&dev->kevent)) | 362 | if (!schedule_work (&dev->kevent)) { |
363 | netdev_err(dev->net, "kevent %d may have been dropped\n", work); | 363 | if (net_ratelimit()) |
364 | else | 364 | netdev_err(dev->net, "kevent %d may have been dropped\n", work); |
365 | } else { | ||
365 | netdev_dbg(dev->net, "kevent %d scheduled\n", work); | 366 | netdev_dbg(dev->net, "kevent %d scheduled\n", work); |
367 | } | ||
366 | } | 368 | } |
367 | EXPORT_SYMBOL_GPL(usbnet_defer_kevent); | 369 | EXPORT_SYMBOL_GPL(usbnet_defer_kevent); |
368 | 370 | ||
diff --git a/drivers/net/wireless/b43legacy/pio.c b/drivers/net/wireless/b43legacy/pio.c index 192251adf986..282eedec675e 100644 --- a/drivers/net/wireless/b43legacy/pio.c +++ b/drivers/net/wireless/b43legacy/pio.c | |||
@@ -382,7 +382,7 @@ static void cancel_transfers(struct b43legacy_pioqueue *queue) | |||
382 | { | 382 | { |
383 | struct b43legacy_pio_txpacket *packet, *tmp_packet; | 383 | struct b43legacy_pio_txpacket *packet, *tmp_packet; |
384 | 384 | ||
385 | tasklet_disable(&queue->txtask); | 385 | tasklet_kill(&queue->txtask); |
386 | 386 | ||
387 | list_for_each_entry_safe(packet, tmp_packet, &queue->txrunning, list) | 387 | list_for_each_entry_safe(packet, tmp_packet, &queue->txrunning, list) |
388 | free_txpacket(packet, 0); | 388 | free_txpacket(packet, 0); |
diff --git a/drivers/pci/bus.c b/drivers/pci/bus.c index 6241fd05bd41..a543746fb354 100644 --- a/drivers/pci/bus.c +++ b/drivers/pci/bus.c | |||
@@ -320,10 +320,7 @@ void pci_walk_bus(struct pci_bus *top, int (*cb)(struct pci_dev *, void *), | |||
320 | } else | 320 | } else |
321 | next = dev->bus_list.next; | 321 | next = dev->bus_list.next; |
322 | 322 | ||
323 | /* Run device routines with the device locked */ | ||
324 | device_lock(&dev->dev); | ||
325 | retval = cb(dev, userdata); | 323 | retval = cb(dev, userdata); |
326 | device_unlock(&dev->dev); | ||
327 | if (retval) | 324 | if (retval) |
328 | break; | 325 | break; |
329 | } | 326 | } |
diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c index 94c6e2aa03d6..6c94fc9489e7 100644 --- a/drivers/pci/pci-driver.c +++ b/drivers/pci/pci-driver.c | |||
@@ -398,6 +398,8 @@ static void pci_device_shutdown(struct device *dev) | |||
398 | struct pci_dev *pci_dev = to_pci_dev(dev); | 398 | struct pci_dev *pci_dev = to_pci_dev(dev); |
399 | struct pci_driver *drv = pci_dev->driver; | 399 | struct pci_driver *drv = pci_dev->driver; |
400 | 400 | ||
401 | pm_runtime_resume(dev); | ||
402 | |||
401 | if (drv && drv->shutdown) | 403 | if (drv && drv->shutdown) |
402 | drv->shutdown(pci_dev); | 404 | drv->shutdown(pci_dev); |
403 | pci_msi_shutdown(pci_dev); | 405 | pci_msi_shutdown(pci_dev); |
@@ -408,16 +410,6 @@ static void pci_device_shutdown(struct device *dev) | |||
408 | * continue to do DMA | 410 | * continue to do DMA |
409 | */ | 411 | */ |
410 | pci_disable_device(pci_dev); | 412 | pci_disable_device(pci_dev); |
411 | |||
412 | /* | ||
413 | * Devices may be enabled to wake up by runtime PM, but they need not | ||
414 | * be supposed to wake up the system from its "power off" state (e.g. | ||
415 | * ACPI S5). Therefore disable wakeup for all devices that aren't | ||
416 | * supposed to wake up the system at this point. The state argument | ||
417 | * will be ignored by pci_enable_wake(). | ||
418 | */ | ||
419 | if (!device_may_wakeup(dev)) | ||
420 | pci_enable_wake(pci_dev, PCI_UNKNOWN, false); | ||
421 | } | 413 | } |
422 | 414 | ||
423 | #ifdef CONFIG_PM | 415 | #ifdef CONFIG_PM |
diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c index 02d107b15281..f39378d9da15 100644 --- a/drivers/pci/pci-sysfs.c +++ b/drivers/pci/pci-sysfs.c | |||
@@ -458,40 +458,6 @@ boot_vga_show(struct device *dev, struct device_attribute *attr, char *buf) | |||
458 | } | 458 | } |
459 | struct device_attribute vga_attr = __ATTR_RO(boot_vga); | 459 | struct device_attribute vga_attr = __ATTR_RO(boot_vga); |
460 | 460 | ||
461 | static void | ||
462 | pci_config_pm_runtime_get(struct pci_dev *pdev) | ||
463 | { | ||
464 | struct device *dev = &pdev->dev; | ||
465 | struct device *parent = dev->parent; | ||
466 | |||
467 | if (parent) | ||
468 | pm_runtime_get_sync(parent); | ||
469 | pm_runtime_get_noresume(dev); | ||
470 | /* | ||
471 | * pdev->current_state is set to PCI_D3cold during suspending, | ||
472 | * so wait until suspending completes | ||
473 | */ | ||
474 | pm_runtime_barrier(dev); | ||
475 | /* | ||
476 | * Only need to resume devices in D3cold, because config | ||
477 | * registers are still accessible for devices suspended but | ||
478 | * not in D3cold. | ||
479 | */ | ||
480 | if (pdev->current_state == PCI_D3cold) | ||
481 | pm_runtime_resume(dev); | ||
482 | } | ||
483 | |||
484 | static void | ||
485 | pci_config_pm_runtime_put(struct pci_dev *pdev) | ||
486 | { | ||
487 | struct device *dev = &pdev->dev; | ||
488 | struct device *parent = dev->parent; | ||
489 | |||
490 | pm_runtime_put(dev); | ||
491 | if (parent) | ||
492 | pm_runtime_put_sync(parent); | ||
493 | } | ||
494 | |||
495 | static ssize_t | 461 | static ssize_t |
496 | pci_read_config(struct file *filp, struct kobject *kobj, | 462 | pci_read_config(struct file *filp, struct kobject *kobj, |
497 | struct bin_attribute *bin_attr, | 463 | struct bin_attribute *bin_attr, |
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index 54858838f098..aabf64798bda 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c | |||
@@ -1858,6 +1858,38 @@ bool pci_dev_run_wake(struct pci_dev *dev) | |||
1858 | } | 1858 | } |
1859 | EXPORT_SYMBOL_GPL(pci_dev_run_wake); | 1859 | EXPORT_SYMBOL_GPL(pci_dev_run_wake); |
1860 | 1860 | ||
1861 | void pci_config_pm_runtime_get(struct pci_dev *pdev) | ||
1862 | { | ||
1863 | struct device *dev = &pdev->dev; | ||
1864 | struct device *parent = dev->parent; | ||
1865 | |||
1866 | if (parent) | ||
1867 | pm_runtime_get_sync(parent); | ||
1868 | pm_runtime_get_noresume(dev); | ||
1869 | /* | ||
1870 | * pdev->current_state is set to PCI_D3cold during suspending, | ||
1871 | * so wait until suspending completes | ||
1872 | */ | ||
1873 | pm_runtime_barrier(dev); | ||
1874 | /* | ||
1875 | * Only need to resume devices in D3cold, because config | ||
1876 | * registers are still accessible for devices suspended but | ||
1877 | * not in D3cold. | ||
1878 | */ | ||
1879 | if (pdev->current_state == PCI_D3cold) | ||
1880 | pm_runtime_resume(dev); | ||
1881 | } | ||
1882 | |||
1883 | void pci_config_pm_runtime_put(struct pci_dev *pdev) | ||
1884 | { | ||
1885 | struct device *dev = &pdev->dev; | ||
1886 | struct device *parent = dev->parent; | ||
1887 | |||
1888 | pm_runtime_put(dev); | ||
1889 | if (parent) | ||
1890 | pm_runtime_put_sync(parent); | ||
1891 | } | ||
1892 | |||
1861 | /** | 1893 | /** |
1862 | * pci_pm_init - Initialize PM functions of given PCI device | 1894 | * pci_pm_init - Initialize PM functions of given PCI device |
1863 | * @dev: PCI device to handle. | 1895 | * @dev: PCI device to handle. |
diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h index bacbcba69cf3..fd92aab9904b 100644 --- a/drivers/pci/pci.h +++ b/drivers/pci/pci.h | |||
@@ -72,6 +72,8 @@ extern void pci_disable_enabled_device(struct pci_dev *dev); | |||
72 | extern int pci_finish_runtime_suspend(struct pci_dev *dev); | 72 | extern int pci_finish_runtime_suspend(struct pci_dev *dev); |
73 | extern int __pci_pme_wakeup(struct pci_dev *dev, void *ign); | 73 | extern int __pci_pme_wakeup(struct pci_dev *dev, void *ign); |
74 | extern void pci_wakeup_bus(struct pci_bus *bus); | 74 | extern void pci_wakeup_bus(struct pci_bus *bus); |
75 | extern void pci_config_pm_runtime_get(struct pci_dev *dev); | ||
76 | extern void pci_config_pm_runtime_put(struct pci_dev *dev); | ||
75 | extern void pci_pm_init(struct pci_dev *dev); | 77 | extern void pci_pm_init(struct pci_dev *dev); |
76 | extern void platform_pci_wakeup_init(struct pci_dev *dev); | 78 | extern void platform_pci_wakeup_init(struct pci_dev *dev); |
77 | extern void pci_allocate_cap_save_buffers(struct pci_dev *dev); | 79 | extern void pci_allocate_cap_save_buffers(struct pci_dev *dev); |
diff --git a/drivers/pci/pcie/aer/aerdrv_core.c b/drivers/pci/pcie/aer/aerdrv_core.c index 06bad96af415..af4e31cd3a3b 100644 --- a/drivers/pci/pcie/aer/aerdrv_core.c +++ b/drivers/pci/pcie/aer/aerdrv_core.c | |||
@@ -213,6 +213,7 @@ static int report_error_detected(struct pci_dev *dev, void *data) | |||
213 | struct aer_broadcast_data *result_data; | 213 | struct aer_broadcast_data *result_data; |
214 | result_data = (struct aer_broadcast_data *) data; | 214 | result_data = (struct aer_broadcast_data *) data; |
215 | 215 | ||
216 | device_lock(&dev->dev); | ||
216 | dev->error_state = result_data->state; | 217 | dev->error_state = result_data->state; |
217 | 218 | ||
218 | if (!dev->driver || | 219 | if (!dev->driver || |
@@ -231,12 +232,14 @@ static int report_error_detected(struct pci_dev *dev, void *data) | |||
231 | dev->driver ? | 232 | dev->driver ? |
232 | "no AER-aware driver" : "no driver"); | 233 | "no AER-aware driver" : "no driver"); |
233 | } | 234 | } |
234 | return 0; | 235 | goto out; |
235 | } | 236 | } |
236 | 237 | ||
237 | err_handler = dev->driver->err_handler; | 238 | err_handler = dev->driver->err_handler; |
238 | vote = err_handler->error_detected(dev, result_data->state); | 239 | vote = err_handler->error_detected(dev, result_data->state); |
239 | result_data->result = merge_result(result_data->result, vote); | 240 | result_data->result = merge_result(result_data->result, vote); |
241 | out: | ||
242 | device_unlock(&dev->dev); | ||
240 | return 0; | 243 | return 0; |
241 | } | 244 | } |
242 | 245 | ||
@@ -247,14 +250,17 @@ static int report_mmio_enabled(struct pci_dev *dev, void *data) | |||
247 | struct aer_broadcast_data *result_data; | 250 | struct aer_broadcast_data *result_data; |
248 | result_data = (struct aer_broadcast_data *) data; | 251 | result_data = (struct aer_broadcast_data *) data; |
249 | 252 | ||
253 | device_lock(&dev->dev); | ||
250 | if (!dev->driver || | 254 | if (!dev->driver || |
251 | !dev->driver->err_handler || | 255 | !dev->driver->err_handler || |
252 | !dev->driver->err_handler->mmio_enabled) | 256 | !dev->driver->err_handler->mmio_enabled) |
253 | return 0; | 257 | goto out; |
254 | 258 | ||
255 | err_handler = dev->driver->err_handler; | 259 | err_handler = dev->driver->err_handler; |
256 | vote = err_handler->mmio_enabled(dev); | 260 | vote = err_handler->mmio_enabled(dev); |
257 | result_data->result = merge_result(result_data->result, vote); | 261 | result_data->result = merge_result(result_data->result, vote); |
262 | out: | ||
263 | device_unlock(&dev->dev); | ||
258 | return 0; | 264 | return 0; |
259 | } | 265 | } |
260 | 266 | ||
@@ -265,14 +271,17 @@ static int report_slot_reset(struct pci_dev *dev, void *data) | |||
265 | struct aer_broadcast_data *result_data; | 271 | struct aer_broadcast_data *result_data; |
266 | result_data = (struct aer_broadcast_data *) data; | 272 | result_data = (struct aer_broadcast_data *) data; |
267 | 273 | ||
274 | device_lock(&dev->dev); | ||
268 | if (!dev->driver || | 275 | if (!dev->driver || |
269 | !dev->driver->err_handler || | 276 | !dev->driver->err_handler || |
270 | !dev->driver->err_handler->slot_reset) | 277 | !dev->driver->err_handler->slot_reset) |
271 | return 0; | 278 | goto out; |
272 | 279 | ||
273 | err_handler = dev->driver->err_handler; | 280 | err_handler = dev->driver->err_handler; |
274 | vote = err_handler->slot_reset(dev); | 281 | vote = err_handler->slot_reset(dev); |
275 | result_data->result = merge_result(result_data->result, vote); | 282 | result_data->result = merge_result(result_data->result, vote); |
283 | out: | ||
284 | device_unlock(&dev->dev); | ||
276 | return 0; | 285 | return 0; |
277 | } | 286 | } |
278 | 287 | ||
@@ -280,15 +289,18 @@ static int report_resume(struct pci_dev *dev, void *data) | |||
280 | { | 289 | { |
281 | const struct pci_error_handlers *err_handler; | 290 | const struct pci_error_handlers *err_handler; |
282 | 291 | ||
292 | device_lock(&dev->dev); | ||
283 | dev->error_state = pci_channel_io_normal; | 293 | dev->error_state = pci_channel_io_normal; |
284 | 294 | ||
285 | if (!dev->driver || | 295 | if (!dev->driver || |
286 | !dev->driver->err_handler || | 296 | !dev->driver->err_handler || |
287 | !dev->driver->err_handler->resume) | 297 | !dev->driver->err_handler->resume) |
288 | return 0; | 298 | goto out; |
289 | 299 | ||
290 | err_handler = dev->driver->err_handler; | 300 | err_handler = dev->driver->err_handler; |
291 | err_handler->resume(dev); | 301 | err_handler->resume(dev); |
302 | out: | ||
303 | device_unlock(&dev->dev); | ||
292 | return 0; | 304 | return 0; |
293 | } | 305 | } |
294 | 306 | ||
diff --git a/drivers/pci/pcie/portdrv_core.c b/drivers/pci/pcie/portdrv_core.c index d03a7a39b2d8..ed129b414624 100644 --- a/drivers/pci/pcie/portdrv_core.c +++ b/drivers/pci/pcie/portdrv_core.c | |||
@@ -272,7 +272,8 @@ static int get_port_device_capability(struct pci_dev *dev) | |||
272 | } | 272 | } |
273 | 273 | ||
274 | /* Hot-Plug Capable */ | 274 | /* Hot-Plug Capable */ |
275 | if (cap_mask & PCIE_PORT_SERVICE_HP) { | 275 | if ((cap_mask & PCIE_PORT_SERVICE_HP) && |
276 | dev->pcie_flags_reg & PCI_EXP_FLAGS_SLOT) { | ||
276 | pcie_capability_read_dword(dev, PCI_EXP_SLTCAP, ®32); | 277 | pcie_capability_read_dword(dev, PCI_EXP_SLTCAP, ®32); |
277 | if (reg32 & PCI_EXP_SLTCAP_HPC) { | 278 | if (reg32 & PCI_EXP_SLTCAP_HPC) { |
278 | services |= PCIE_PORT_SERVICE_HP; | 279 | services |= PCIE_PORT_SERVICE_HP; |
diff --git a/drivers/pci/proc.c b/drivers/pci/proc.c index eb907a8faf2a..9b8505ccc56d 100644 --- a/drivers/pci/proc.c +++ b/drivers/pci/proc.c | |||
@@ -76,6 +76,8 @@ proc_bus_pci_read(struct file *file, char __user *buf, size_t nbytes, loff_t *pp | |||
76 | if (!access_ok(VERIFY_WRITE, buf, cnt)) | 76 | if (!access_ok(VERIFY_WRITE, buf, cnt)) |
77 | return -EINVAL; | 77 | return -EINVAL; |
78 | 78 | ||
79 | pci_config_pm_runtime_get(dev); | ||
80 | |||
79 | if ((pos & 1) && cnt) { | 81 | if ((pos & 1) && cnt) { |
80 | unsigned char val; | 82 | unsigned char val; |
81 | pci_user_read_config_byte(dev, pos, &val); | 83 | pci_user_read_config_byte(dev, pos, &val); |
@@ -121,6 +123,8 @@ proc_bus_pci_read(struct file *file, char __user *buf, size_t nbytes, loff_t *pp | |||
121 | cnt--; | 123 | cnt--; |
122 | } | 124 | } |
123 | 125 | ||
126 | pci_config_pm_runtime_put(dev); | ||
127 | |||
124 | *ppos = pos; | 128 | *ppos = pos; |
125 | return nbytes; | 129 | return nbytes; |
126 | } | 130 | } |
@@ -146,6 +150,8 @@ proc_bus_pci_write(struct file *file, const char __user *buf, size_t nbytes, lof | |||
146 | if (!access_ok(VERIFY_READ, buf, cnt)) | 150 | if (!access_ok(VERIFY_READ, buf, cnt)) |
147 | return -EINVAL; | 151 | return -EINVAL; |
148 | 152 | ||
153 | pci_config_pm_runtime_get(dev); | ||
154 | |||
149 | if ((pos & 1) && cnt) { | 155 | if ((pos & 1) && cnt) { |
150 | unsigned char val; | 156 | unsigned char val; |
151 | __get_user(val, buf); | 157 | __get_user(val, buf); |
@@ -191,6 +197,8 @@ proc_bus_pci_write(struct file *file, const char __user *buf, size_t nbytes, lof | |||
191 | cnt--; | 197 | cnt--; |
192 | } | 198 | } |
193 | 199 | ||
200 | pci_config_pm_runtime_put(dev); | ||
201 | |||
194 | *ppos = pos; | 202 | *ppos = pos; |
195 | i_size_write(ino, dp->size); | 203 | i_size_write(ino, dp->size); |
196 | return nbytes; | 204 | return nbytes; |
diff --git a/drivers/pinctrl/Kconfig b/drivers/pinctrl/Kconfig index 7bf914df6e91..d96caefd914a 100644 --- a/drivers/pinctrl/Kconfig +++ b/drivers/pinctrl/Kconfig | |||
@@ -179,11 +179,13 @@ config PINCTRL_COH901 | |||
179 | 179 | ||
180 | config PINCTRL_SAMSUNG | 180 | config PINCTRL_SAMSUNG |
181 | bool "Samsung pinctrl driver" | 181 | bool "Samsung pinctrl driver" |
182 | depends on OF && GPIOLIB | ||
182 | select PINMUX | 183 | select PINMUX |
183 | select PINCONF | 184 | select PINCONF |
184 | 185 | ||
185 | config PINCTRL_EXYNOS4 | 186 | config PINCTRL_EXYNOS4 |
186 | bool "Pinctrl driver data for Exynos4 SoC" | 187 | bool "Pinctrl driver data for Exynos4 SoC" |
188 | depends on OF && GPIOLIB | ||
187 | select PINCTRL_SAMSUNG | 189 | select PINCTRL_SAMSUNG |
188 | 190 | ||
189 | config PINCTRL_MVEBU | 191 | config PINCTRL_MVEBU |
diff --git a/drivers/pinctrl/spear/pinctrl-spear.c b/drivers/pinctrl/spear/pinctrl-spear.c index 5d4f44f462f0..b1fd6ee33c6c 100644 --- a/drivers/pinctrl/spear/pinctrl-spear.c +++ b/drivers/pinctrl/spear/pinctrl-spear.c | |||
@@ -244,7 +244,7 @@ static int spear_pinctrl_endisable(struct pinctrl_dev *pctldev, | |||
244 | else | 244 | else |
245 | temp = ~muxreg->val; | 245 | temp = ~muxreg->val; |
246 | 246 | ||
247 | val |= temp; | 247 | val |= muxreg->mask & temp; |
248 | pmx_writel(pmx, val, muxreg->reg); | 248 | pmx_writel(pmx, val, muxreg->reg); |
249 | } | 249 | } |
250 | } | 250 | } |
diff --git a/drivers/pinctrl/spear/pinctrl-spear1310.c b/drivers/pinctrl/spear/pinctrl-spear1310.c index d6cca8c81b92..0436fc7895d6 100644 --- a/drivers/pinctrl/spear/pinctrl-spear1310.c +++ b/drivers/pinctrl/spear/pinctrl-spear1310.c | |||
@@ -25,8 +25,8 @@ static const struct pinctrl_pin_desc spear1310_pins[] = { | |||
25 | }; | 25 | }; |
26 | 26 | ||
27 | /* registers */ | 27 | /* registers */ |
28 | #define PERIP_CFG 0x32C | 28 | #define PERIP_CFG 0x3B0 |
29 | #define MCIF_SEL_SHIFT 3 | 29 | #define MCIF_SEL_SHIFT 5 |
30 | #define MCIF_SEL_SD (0x1 << MCIF_SEL_SHIFT) | 30 | #define MCIF_SEL_SD (0x1 << MCIF_SEL_SHIFT) |
31 | #define MCIF_SEL_CF (0x2 << MCIF_SEL_SHIFT) | 31 | #define MCIF_SEL_CF (0x2 << MCIF_SEL_SHIFT) |
32 | #define MCIF_SEL_XD (0x3 << MCIF_SEL_SHIFT) | 32 | #define MCIF_SEL_XD (0x3 << MCIF_SEL_SHIFT) |
@@ -164,6 +164,10 @@ static const struct pinctrl_pin_desc spear1310_pins[] = { | |||
164 | #define PMX_SSP0_CS0_MASK (1 << 29) | 164 | #define PMX_SSP0_CS0_MASK (1 << 29) |
165 | #define PMX_SSP0_CS1_2_MASK (1 << 30) | 165 | #define PMX_SSP0_CS1_2_MASK (1 << 30) |
166 | 166 | ||
167 | #define PAD_DIRECTION_SEL_0 0x65C | ||
168 | #define PAD_DIRECTION_SEL_1 0x660 | ||
169 | #define PAD_DIRECTION_SEL_2 0x664 | ||
170 | |||
167 | /* combined macros */ | 171 | /* combined macros */ |
168 | #define PMX_GMII_MASK (PMX_GMIICLK_MASK | \ | 172 | #define PMX_GMII_MASK (PMX_GMIICLK_MASK | \ |
169 | PMX_GMIICOL_CRS_XFERER_MIITXCLK_MASK | \ | 173 | PMX_GMIICOL_CRS_XFERER_MIITXCLK_MASK | \ |
@@ -237,6 +241,10 @@ static struct spear_muxreg i2c0_muxreg[] = { | |||
237 | .reg = PAD_FUNCTION_EN_0, | 241 | .reg = PAD_FUNCTION_EN_0, |
238 | .mask = PMX_I2C0_MASK, | 242 | .mask = PMX_I2C0_MASK, |
239 | .val = PMX_I2C0_MASK, | 243 | .val = PMX_I2C0_MASK, |
244 | }, { | ||
245 | .reg = PAD_DIRECTION_SEL_0, | ||
246 | .mask = PMX_I2C0_MASK, | ||
247 | .val = PMX_I2C0_MASK, | ||
240 | }, | 248 | }, |
241 | }; | 249 | }; |
242 | 250 | ||
@@ -269,6 +277,10 @@ static struct spear_muxreg ssp0_muxreg[] = { | |||
269 | .reg = PAD_FUNCTION_EN_0, | 277 | .reg = PAD_FUNCTION_EN_0, |
270 | .mask = PMX_SSP0_MASK, | 278 | .mask = PMX_SSP0_MASK, |
271 | .val = PMX_SSP0_MASK, | 279 | .val = PMX_SSP0_MASK, |
280 | }, { | ||
281 | .reg = PAD_DIRECTION_SEL_0, | ||
282 | .mask = PMX_SSP0_MASK, | ||
283 | .val = PMX_SSP0_MASK, | ||
272 | }, | 284 | }, |
273 | }; | 285 | }; |
274 | 286 | ||
@@ -294,6 +306,10 @@ static struct spear_muxreg ssp0_cs0_muxreg[] = { | |||
294 | .reg = PAD_FUNCTION_EN_2, | 306 | .reg = PAD_FUNCTION_EN_2, |
295 | .mask = PMX_SSP0_CS0_MASK, | 307 | .mask = PMX_SSP0_CS0_MASK, |
296 | .val = PMX_SSP0_CS0_MASK, | 308 | .val = PMX_SSP0_CS0_MASK, |
309 | }, { | ||
310 | .reg = PAD_DIRECTION_SEL_2, | ||
311 | .mask = PMX_SSP0_CS0_MASK, | ||
312 | .val = PMX_SSP0_CS0_MASK, | ||
297 | }, | 313 | }, |
298 | }; | 314 | }; |
299 | 315 | ||
@@ -319,6 +335,10 @@ static struct spear_muxreg ssp0_cs1_2_muxreg[] = { | |||
319 | .reg = PAD_FUNCTION_EN_2, | 335 | .reg = PAD_FUNCTION_EN_2, |
320 | .mask = PMX_SSP0_CS1_2_MASK, | 336 | .mask = PMX_SSP0_CS1_2_MASK, |
321 | .val = PMX_SSP0_CS1_2_MASK, | 337 | .val = PMX_SSP0_CS1_2_MASK, |
338 | }, { | ||
339 | .reg = PAD_DIRECTION_SEL_2, | ||
340 | .mask = PMX_SSP0_CS1_2_MASK, | ||
341 | .val = PMX_SSP0_CS1_2_MASK, | ||
322 | }, | 342 | }, |
323 | }; | 343 | }; |
324 | 344 | ||
@@ -352,6 +372,10 @@ static struct spear_muxreg i2s0_muxreg[] = { | |||
352 | .reg = PAD_FUNCTION_EN_0, | 372 | .reg = PAD_FUNCTION_EN_0, |
353 | .mask = PMX_I2S0_MASK, | 373 | .mask = PMX_I2S0_MASK, |
354 | .val = PMX_I2S0_MASK, | 374 | .val = PMX_I2S0_MASK, |
375 | }, { | ||
376 | .reg = PAD_DIRECTION_SEL_0, | ||
377 | .mask = PMX_I2S0_MASK, | ||
378 | .val = PMX_I2S0_MASK, | ||
355 | }, | 379 | }, |
356 | }; | 380 | }; |
357 | 381 | ||
@@ -384,6 +408,10 @@ static struct spear_muxreg i2s1_muxreg[] = { | |||
384 | .reg = PAD_FUNCTION_EN_1, | 408 | .reg = PAD_FUNCTION_EN_1, |
385 | .mask = PMX_I2S1_MASK, | 409 | .mask = PMX_I2S1_MASK, |
386 | .val = PMX_I2S1_MASK, | 410 | .val = PMX_I2S1_MASK, |
411 | }, { | ||
412 | .reg = PAD_DIRECTION_SEL_1, | ||
413 | .mask = PMX_I2S1_MASK, | ||
414 | .val = PMX_I2S1_MASK, | ||
387 | }, | 415 | }, |
388 | }; | 416 | }; |
389 | 417 | ||
@@ -418,6 +446,10 @@ static struct spear_muxreg clcd_muxreg[] = { | |||
418 | .reg = PAD_FUNCTION_EN_0, | 446 | .reg = PAD_FUNCTION_EN_0, |
419 | .mask = PMX_CLCD1_MASK, | 447 | .mask = PMX_CLCD1_MASK, |
420 | .val = PMX_CLCD1_MASK, | 448 | .val = PMX_CLCD1_MASK, |
449 | }, { | ||
450 | .reg = PAD_DIRECTION_SEL_0, | ||
451 | .mask = PMX_CLCD1_MASK, | ||
452 | .val = PMX_CLCD1_MASK, | ||
421 | }, | 453 | }, |
422 | }; | 454 | }; |
423 | 455 | ||
@@ -443,6 +475,10 @@ static struct spear_muxreg clcd_high_res_muxreg[] = { | |||
443 | .reg = PAD_FUNCTION_EN_1, | 475 | .reg = PAD_FUNCTION_EN_1, |
444 | .mask = PMX_CLCD2_MASK, | 476 | .mask = PMX_CLCD2_MASK, |
445 | .val = PMX_CLCD2_MASK, | 477 | .val = PMX_CLCD2_MASK, |
478 | }, { | ||
479 | .reg = PAD_DIRECTION_SEL_1, | ||
480 | .mask = PMX_CLCD2_MASK, | ||
481 | .val = PMX_CLCD2_MASK, | ||
446 | }, | 482 | }, |
447 | }; | 483 | }; |
448 | 484 | ||
@@ -461,7 +497,7 @@ static struct spear_pingroup clcd_high_res_pingroup = { | |||
461 | .nmodemuxs = ARRAY_SIZE(clcd_high_res_modemux), | 497 | .nmodemuxs = ARRAY_SIZE(clcd_high_res_modemux), |
462 | }; | 498 | }; |
463 | 499 | ||
464 | static const char *const clcd_grps[] = { "clcd_grp", "clcd_high_res" }; | 500 | static const char *const clcd_grps[] = { "clcd_grp", "clcd_high_res_grp" }; |
465 | static struct spear_function clcd_function = { | 501 | static struct spear_function clcd_function = { |
466 | .name = "clcd", | 502 | .name = "clcd", |
467 | .groups = clcd_grps, | 503 | .groups = clcd_grps, |
@@ -479,6 +515,14 @@ static struct spear_muxreg arm_gpio_muxreg[] = { | |||
479 | .reg = PAD_FUNCTION_EN_1, | 515 | .reg = PAD_FUNCTION_EN_1, |
480 | .mask = PMX_EGPIO_1_GRP_MASK, | 516 | .mask = PMX_EGPIO_1_GRP_MASK, |
481 | .val = PMX_EGPIO_1_GRP_MASK, | 517 | .val = PMX_EGPIO_1_GRP_MASK, |
518 | }, { | ||
519 | .reg = PAD_DIRECTION_SEL_0, | ||
520 | .mask = PMX_EGPIO_0_GRP_MASK, | ||
521 | .val = PMX_EGPIO_0_GRP_MASK, | ||
522 | }, { | ||
523 | .reg = PAD_DIRECTION_SEL_1, | ||
524 | .mask = PMX_EGPIO_1_GRP_MASK, | ||
525 | .val = PMX_EGPIO_1_GRP_MASK, | ||
482 | }, | 526 | }, |
483 | }; | 527 | }; |
484 | 528 | ||
@@ -511,6 +555,10 @@ static struct spear_muxreg smi_2_chips_muxreg[] = { | |||
511 | .reg = PAD_FUNCTION_EN_0, | 555 | .reg = PAD_FUNCTION_EN_0, |
512 | .mask = PMX_SMI_MASK, | 556 | .mask = PMX_SMI_MASK, |
513 | .val = PMX_SMI_MASK, | 557 | .val = PMX_SMI_MASK, |
558 | }, { | ||
559 | .reg = PAD_DIRECTION_SEL_0, | ||
560 | .mask = PMX_SMI_MASK, | ||
561 | .val = PMX_SMI_MASK, | ||
514 | }, | 562 | }, |
515 | }; | 563 | }; |
516 | 564 | ||
@@ -539,6 +587,14 @@ static struct spear_muxreg smi_4_chips_muxreg[] = { | |||
539 | .reg = PAD_FUNCTION_EN_1, | 587 | .reg = PAD_FUNCTION_EN_1, |
540 | .mask = PMX_SMINCS2_MASK | PMX_SMINCS3_MASK, | 588 | .mask = PMX_SMINCS2_MASK | PMX_SMINCS3_MASK, |
541 | .val = PMX_SMINCS2_MASK | PMX_SMINCS3_MASK, | 589 | .val = PMX_SMINCS2_MASK | PMX_SMINCS3_MASK, |
590 | }, { | ||
591 | .reg = PAD_DIRECTION_SEL_0, | ||
592 | .mask = PMX_SMI_MASK, | ||
593 | .val = PMX_SMI_MASK, | ||
594 | }, { | ||
595 | .reg = PAD_DIRECTION_SEL_1, | ||
596 | .mask = PMX_SMINCS2_MASK | PMX_SMINCS3_MASK, | ||
597 | .val = PMX_SMINCS2_MASK | PMX_SMINCS3_MASK, | ||
542 | }, | 598 | }, |
543 | }; | 599 | }; |
544 | 600 | ||
@@ -573,6 +629,10 @@ static struct spear_muxreg gmii_muxreg[] = { | |||
573 | .reg = PAD_FUNCTION_EN_0, | 629 | .reg = PAD_FUNCTION_EN_0, |
574 | .mask = PMX_GMII_MASK, | 630 | .mask = PMX_GMII_MASK, |
575 | .val = PMX_GMII_MASK, | 631 | .val = PMX_GMII_MASK, |
632 | }, { | ||
633 | .reg = PAD_DIRECTION_SEL_0, | ||
634 | .mask = PMX_GMII_MASK, | ||
635 | .val = PMX_GMII_MASK, | ||
576 | }, | 636 | }, |
577 | }; | 637 | }; |
578 | 638 | ||
@@ -615,6 +675,18 @@ static struct spear_muxreg rgmii_muxreg[] = { | |||
615 | .reg = PAD_FUNCTION_EN_2, | 675 | .reg = PAD_FUNCTION_EN_2, |
616 | .mask = PMX_RGMII_REG2_MASK, | 676 | .mask = PMX_RGMII_REG2_MASK, |
617 | .val = 0, | 677 | .val = 0, |
678 | }, { | ||
679 | .reg = PAD_DIRECTION_SEL_0, | ||
680 | .mask = PMX_RGMII_REG0_MASK, | ||
681 | .val = PMX_RGMII_REG0_MASK, | ||
682 | }, { | ||
683 | .reg = PAD_DIRECTION_SEL_1, | ||
684 | .mask = PMX_RGMII_REG1_MASK, | ||
685 | .val = PMX_RGMII_REG1_MASK, | ||
686 | }, { | ||
687 | .reg = PAD_DIRECTION_SEL_2, | ||
688 | .mask = PMX_RGMII_REG2_MASK, | ||
689 | .val = PMX_RGMII_REG2_MASK, | ||
618 | }, | 690 | }, |
619 | }; | 691 | }; |
620 | 692 | ||
@@ -649,6 +721,10 @@ static struct spear_muxreg smii_0_1_2_muxreg[] = { | |||
649 | .reg = PAD_FUNCTION_EN_1, | 721 | .reg = PAD_FUNCTION_EN_1, |
650 | .mask = PMX_SMII_0_1_2_MASK, | 722 | .mask = PMX_SMII_0_1_2_MASK, |
651 | .val = 0, | 723 | .val = 0, |
724 | }, { | ||
725 | .reg = PAD_DIRECTION_SEL_1, | ||
726 | .mask = PMX_SMII_0_1_2_MASK, | ||
727 | .val = PMX_SMII_0_1_2_MASK, | ||
652 | }, | 728 | }, |
653 | }; | 729 | }; |
654 | 730 | ||
@@ -681,6 +757,10 @@ static struct spear_muxreg ras_mii_txclk_muxreg[] = { | |||
681 | .reg = PAD_FUNCTION_EN_1, | 757 | .reg = PAD_FUNCTION_EN_1, |
682 | .mask = PMX_NFCE2_MASK, | 758 | .mask = PMX_NFCE2_MASK, |
683 | .val = 0, | 759 | .val = 0, |
760 | }, { | ||
761 | .reg = PAD_DIRECTION_SEL_1, | ||
762 | .mask = PMX_NFCE2_MASK, | ||
763 | .val = PMX_NFCE2_MASK, | ||
684 | }, | 764 | }, |
685 | }; | 765 | }; |
686 | 766 | ||
@@ -721,6 +801,14 @@ static struct spear_muxreg nand_8bit_muxreg[] = { | |||
721 | .reg = PAD_FUNCTION_EN_1, | 801 | .reg = PAD_FUNCTION_EN_1, |
722 | .mask = PMX_NAND8BIT_1_MASK, | 802 | .mask = PMX_NAND8BIT_1_MASK, |
723 | .val = PMX_NAND8BIT_1_MASK, | 803 | .val = PMX_NAND8BIT_1_MASK, |
804 | }, { | ||
805 | .reg = PAD_DIRECTION_SEL_0, | ||
806 | .mask = PMX_NAND8BIT_0_MASK, | ||
807 | .val = PMX_NAND8BIT_0_MASK, | ||
808 | }, { | ||
809 | .reg = PAD_DIRECTION_SEL_1, | ||
810 | .mask = PMX_NAND8BIT_1_MASK, | ||
811 | .val = PMX_NAND8BIT_1_MASK, | ||
724 | }, | 812 | }, |
725 | }; | 813 | }; |
726 | 814 | ||
@@ -747,6 +835,10 @@ static struct spear_muxreg nand_16bit_muxreg[] = { | |||
747 | .reg = PAD_FUNCTION_EN_1, | 835 | .reg = PAD_FUNCTION_EN_1, |
748 | .mask = PMX_NAND16BIT_1_MASK, | 836 | .mask = PMX_NAND16BIT_1_MASK, |
749 | .val = PMX_NAND16BIT_1_MASK, | 837 | .val = PMX_NAND16BIT_1_MASK, |
838 | }, { | ||
839 | .reg = PAD_DIRECTION_SEL_1, | ||
840 | .mask = PMX_NAND16BIT_1_MASK, | ||
841 | .val = PMX_NAND16BIT_1_MASK, | ||
750 | }, | 842 | }, |
751 | }; | 843 | }; |
752 | 844 | ||
@@ -772,6 +864,10 @@ static struct spear_muxreg nand_4_chips_muxreg[] = { | |||
772 | .reg = PAD_FUNCTION_EN_1, | 864 | .reg = PAD_FUNCTION_EN_1, |
773 | .mask = PMX_NAND_4CHIPS_MASK, | 865 | .mask = PMX_NAND_4CHIPS_MASK, |
774 | .val = PMX_NAND_4CHIPS_MASK, | 866 | .val = PMX_NAND_4CHIPS_MASK, |
867 | }, { | ||
868 | .reg = PAD_DIRECTION_SEL_1, | ||
869 | .mask = PMX_NAND_4CHIPS_MASK, | ||
870 | .val = PMX_NAND_4CHIPS_MASK, | ||
775 | }, | 871 | }, |
776 | }; | 872 | }; |
777 | 873 | ||
@@ -833,6 +929,10 @@ static struct spear_muxreg keyboard_rowcol6_8_muxreg[] = { | |||
833 | .reg = PAD_FUNCTION_EN_1, | 929 | .reg = PAD_FUNCTION_EN_1, |
834 | .mask = PMX_KBD_ROWCOL68_MASK, | 930 | .mask = PMX_KBD_ROWCOL68_MASK, |
835 | .val = PMX_KBD_ROWCOL68_MASK, | 931 | .val = PMX_KBD_ROWCOL68_MASK, |
932 | }, { | ||
933 | .reg = PAD_DIRECTION_SEL_1, | ||
934 | .mask = PMX_KBD_ROWCOL68_MASK, | ||
935 | .val = PMX_KBD_ROWCOL68_MASK, | ||
836 | }, | 936 | }, |
837 | }; | 937 | }; |
838 | 938 | ||
@@ -866,6 +966,10 @@ static struct spear_muxreg uart0_muxreg[] = { | |||
866 | .reg = PAD_FUNCTION_EN_0, | 966 | .reg = PAD_FUNCTION_EN_0, |
867 | .mask = PMX_UART0_MASK, | 967 | .mask = PMX_UART0_MASK, |
868 | .val = PMX_UART0_MASK, | 968 | .val = PMX_UART0_MASK, |
969 | }, { | ||
970 | .reg = PAD_DIRECTION_SEL_0, | ||
971 | .mask = PMX_UART0_MASK, | ||
972 | .val = PMX_UART0_MASK, | ||
869 | }, | 973 | }, |
870 | }; | 974 | }; |
871 | 975 | ||
@@ -891,6 +995,10 @@ static struct spear_muxreg uart0_modem_muxreg[] = { | |||
891 | .reg = PAD_FUNCTION_EN_1, | 995 | .reg = PAD_FUNCTION_EN_1, |
892 | .mask = PMX_UART0_MODEM_MASK, | 996 | .mask = PMX_UART0_MODEM_MASK, |
893 | .val = PMX_UART0_MODEM_MASK, | 997 | .val = PMX_UART0_MODEM_MASK, |
998 | }, { | ||
999 | .reg = PAD_DIRECTION_SEL_1, | ||
1000 | .mask = PMX_UART0_MODEM_MASK, | ||
1001 | .val = PMX_UART0_MODEM_MASK, | ||
894 | }, | 1002 | }, |
895 | }; | 1003 | }; |
896 | 1004 | ||
@@ -923,6 +1031,10 @@ static struct spear_muxreg gpt0_tmr0_muxreg[] = { | |||
923 | .reg = PAD_FUNCTION_EN_1, | 1031 | .reg = PAD_FUNCTION_EN_1, |
924 | .mask = PMX_GPT0_TMR0_MASK, | 1032 | .mask = PMX_GPT0_TMR0_MASK, |
925 | .val = PMX_GPT0_TMR0_MASK, | 1033 | .val = PMX_GPT0_TMR0_MASK, |
1034 | }, { | ||
1035 | .reg = PAD_DIRECTION_SEL_1, | ||
1036 | .mask = PMX_GPT0_TMR0_MASK, | ||
1037 | .val = PMX_GPT0_TMR0_MASK, | ||
926 | }, | 1038 | }, |
927 | }; | 1039 | }; |
928 | 1040 | ||
@@ -948,6 +1060,10 @@ static struct spear_muxreg gpt0_tmr1_muxreg[] = { | |||
948 | .reg = PAD_FUNCTION_EN_1, | 1060 | .reg = PAD_FUNCTION_EN_1, |
949 | .mask = PMX_GPT0_TMR1_MASK, | 1061 | .mask = PMX_GPT0_TMR1_MASK, |
950 | .val = PMX_GPT0_TMR1_MASK, | 1062 | .val = PMX_GPT0_TMR1_MASK, |
1063 | }, { | ||
1064 | .reg = PAD_DIRECTION_SEL_1, | ||
1065 | .mask = PMX_GPT0_TMR1_MASK, | ||
1066 | .val = PMX_GPT0_TMR1_MASK, | ||
951 | }, | 1067 | }, |
952 | }; | 1068 | }; |
953 | 1069 | ||
@@ -980,6 +1096,10 @@ static struct spear_muxreg gpt1_tmr0_muxreg[] = { | |||
980 | .reg = PAD_FUNCTION_EN_1, | 1096 | .reg = PAD_FUNCTION_EN_1, |
981 | .mask = PMX_GPT1_TMR0_MASK, | 1097 | .mask = PMX_GPT1_TMR0_MASK, |
982 | .val = PMX_GPT1_TMR0_MASK, | 1098 | .val = PMX_GPT1_TMR0_MASK, |
1099 | }, { | ||
1100 | .reg = PAD_DIRECTION_SEL_1, | ||
1101 | .mask = PMX_GPT1_TMR0_MASK, | ||
1102 | .val = PMX_GPT1_TMR0_MASK, | ||
983 | }, | 1103 | }, |
984 | }; | 1104 | }; |
985 | 1105 | ||
@@ -1005,6 +1125,10 @@ static struct spear_muxreg gpt1_tmr1_muxreg[] = { | |||
1005 | .reg = PAD_FUNCTION_EN_1, | 1125 | .reg = PAD_FUNCTION_EN_1, |
1006 | .mask = PMX_GPT1_TMR1_MASK, | 1126 | .mask = PMX_GPT1_TMR1_MASK, |
1007 | .val = PMX_GPT1_TMR1_MASK, | 1127 | .val = PMX_GPT1_TMR1_MASK, |
1128 | }, { | ||
1129 | .reg = PAD_DIRECTION_SEL_1, | ||
1130 | .mask = PMX_GPT1_TMR1_MASK, | ||
1131 | .val = PMX_GPT1_TMR1_MASK, | ||
1008 | }, | 1132 | }, |
1009 | }; | 1133 | }; |
1010 | 1134 | ||
@@ -1049,6 +1173,20 @@ static const unsigned mcif_pins[] = { 86, 87, 88, 89, 90, 91, 92, 93, 213, 214, | |||
1049 | .reg = PAD_FUNCTION_EN_2, \ | 1173 | .reg = PAD_FUNCTION_EN_2, \ |
1050 | .mask = PMX_MCIFALL_2_MASK, \ | 1174 | .mask = PMX_MCIFALL_2_MASK, \ |
1051 | .val = PMX_MCIFALL_2_MASK, \ | 1175 | .val = PMX_MCIFALL_2_MASK, \ |
1176 | }, { \ | ||
1177 | .reg = PAD_DIRECTION_SEL_0, \ | ||
1178 | .mask = PMX_MCI_DATA8_15_MASK, \ | ||
1179 | .val = PMX_MCI_DATA8_15_MASK, \ | ||
1180 | }, { \ | ||
1181 | .reg = PAD_DIRECTION_SEL_1, \ | ||
1182 | .mask = PMX_MCIFALL_1_MASK | PMX_NFWPRT1_MASK | \ | ||
1183 | PMX_NFWPRT2_MASK, \ | ||
1184 | .val = PMX_MCIFALL_1_MASK | PMX_NFWPRT1_MASK | \ | ||
1185 | PMX_NFWPRT2_MASK, \ | ||
1186 | }, { \ | ||
1187 | .reg = PAD_DIRECTION_SEL_2, \ | ||
1188 | .mask = PMX_MCIFALL_2_MASK, \ | ||
1189 | .val = PMX_MCIFALL_2_MASK, \ | ||
1052 | } | 1190 | } |
1053 | 1191 | ||
1054 | /* sdhci device */ | 1192 | /* sdhci device */ |
@@ -1154,6 +1292,10 @@ static struct spear_muxreg touch_xy_muxreg[] = { | |||
1154 | .reg = PAD_FUNCTION_EN_2, | 1292 | .reg = PAD_FUNCTION_EN_2, |
1155 | .mask = PMX_TOUCH_XY_MASK, | 1293 | .mask = PMX_TOUCH_XY_MASK, |
1156 | .val = PMX_TOUCH_XY_MASK, | 1294 | .val = PMX_TOUCH_XY_MASK, |
1295 | }, { | ||
1296 | .reg = PAD_DIRECTION_SEL_2, | ||
1297 | .mask = PMX_TOUCH_XY_MASK, | ||
1298 | .val = PMX_TOUCH_XY_MASK, | ||
1157 | }, | 1299 | }, |
1158 | }; | 1300 | }; |
1159 | 1301 | ||
@@ -1187,6 +1329,10 @@ static struct spear_muxreg uart1_dis_i2c_muxreg[] = { | |||
1187 | .reg = PAD_FUNCTION_EN_0, | 1329 | .reg = PAD_FUNCTION_EN_0, |
1188 | .mask = PMX_I2C0_MASK, | 1330 | .mask = PMX_I2C0_MASK, |
1189 | .val = 0, | 1331 | .val = 0, |
1332 | }, { | ||
1333 | .reg = PAD_DIRECTION_SEL_0, | ||
1334 | .mask = PMX_I2C0_MASK, | ||
1335 | .val = PMX_I2C0_MASK, | ||
1190 | }, | 1336 | }, |
1191 | }; | 1337 | }; |
1192 | 1338 | ||
@@ -1213,6 +1359,12 @@ static struct spear_muxreg uart1_dis_sd_muxreg[] = { | |||
1213 | .mask = PMX_MCIDATA1_MASK | | 1359 | .mask = PMX_MCIDATA1_MASK | |
1214 | PMX_MCIDATA2_MASK, | 1360 | PMX_MCIDATA2_MASK, |
1215 | .val = 0, | 1361 | .val = 0, |
1362 | }, { | ||
1363 | .reg = PAD_DIRECTION_SEL_1, | ||
1364 | .mask = PMX_MCIDATA1_MASK | | ||
1365 | PMX_MCIDATA2_MASK, | ||
1366 | .val = PMX_MCIDATA1_MASK | | ||
1367 | PMX_MCIDATA2_MASK, | ||
1216 | }, | 1368 | }, |
1217 | }; | 1369 | }; |
1218 | 1370 | ||
@@ -1246,6 +1398,10 @@ static struct spear_muxreg uart2_3_muxreg[] = { | |||
1246 | .reg = PAD_FUNCTION_EN_0, | 1398 | .reg = PAD_FUNCTION_EN_0, |
1247 | .mask = PMX_I2S0_MASK, | 1399 | .mask = PMX_I2S0_MASK, |
1248 | .val = 0, | 1400 | .val = 0, |
1401 | }, { | ||
1402 | .reg = PAD_DIRECTION_SEL_0, | ||
1403 | .mask = PMX_I2S0_MASK, | ||
1404 | .val = PMX_I2S0_MASK, | ||
1249 | }, | 1405 | }, |
1250 | }; | 1406 | }; |
1251 | 1407 | ||
@@ -1278,6 +1434,10 @@ static struct spear_muxreg uart4_muxreg[] = { | |||
1278 | .reg = PAD_FUNCTION_EN_0, | 1434 | .reg = PAD_FUNCTION_EN_0, |
1279 | .mask = PMX_I2S0_MASK | PMX_CLCD1_MASK, | 1435 | .mask = PMX_I2S0_MASK | PMX_CLCD1_MASK, |
1280 | .val = 0, | 1436 | .val = 0, |
1437 | }, { | ||
1438 | .reg = PAD_DIRECTION_SEL_0, | ||
1439 | .mask = PMX_I2S0_MASK | PMX_CLCD1_MASK, | ||
1440 | .val = PMX_I2S0_MASK | PMX_CLCD1_MASK, | ||
1281 | }, | 1441 | }, |
1282 | }; | 1442 | }; |
1283 | 1443 | ||
@@ -1310,6 +1470,10 @@ static struct spear_muxreg uart5_muxreg[] = { | |||
1310 | .reg = PAD_FUNCTION_EN_0, | 1470 | .reg = PAD_FUNCTION_EN_0, |
1311 | .mask = PMX_CLCD1_MASK, | 1471 | .mask = PMX_CLCD1_MASK, |
1312 | .val = 0, | 1472 | .val = 0, |
1473 | }, { | ||
1474 | .reg = PAD_DIRECTION_SEL_0, | ||
1475 | .mask = PMX_CLCD1_MASK, | ||
1476 | .val = PMX_CLCD1_MASK, | ||
1313 | }, | 1477 | }, |
1314 | }; | 1478 | }; |
1315 | 1479 | ||
@@ -1344,6 +1508,10 @@ static struct spear_muxreg rs485_0_1_tdm_0_1_muxreg[] = { | |||
1344 | .reg = PAD_FUNCTION_EN_0, | 1508 | .reg = PAD_FUNCTION_EN_0, |
1345 | .mask = PMX_CLCD1_MASK, | 1509 | .mask = PMX_CLCD1_MASK, |
1346 | .val = 0, | 1510 | .val = 0, |
1511 | }, { | ||
1512 | .reg = PAD_DIRECTION_SEL_0, | ||
1513 | .mask = PMX_CLCD1_MASK, | ||
1514 | .val = PMX_CLCD1_MASK, | ||
1347 | }, | 1515 | }, |
1348 | }; | 1516 | }; |
1349 | 1517 | ||
@@ -1376,6 +1544,10 @@ static struct spear_muxreg i2c_1_2_muxreg[] = { | |||
1376 | .reg = PAD_FUNCTION_EN_0, | 1544 | .reg = PAD_FUNCTION_EN_0, |
1377 | .mask = PMX_CLCD1_MASK, | 1545 | .mask = PMX_CLCD1_MASK, |
1378 | .val = 0, | 1546 | .val = 0, |
1547 | }, { | ||
1548 | .reg = PAD_DIRECTION_SEL_0, | ||
1549 | .mask = PMX_CLCD1_MASK, | ||
1550 | .val = PMX_CLCD1_MASK, | ||
1379 | }, | 1551 | }, |
1380 | }; | 1552 | }; |
1381 | 1553 | ||
@@ -1409,6 +1581,10 @@ static struct spear_muxreg i2c3_dis_smi_clcd_muxreg[] = { | |||
1409 | .reg = PAD_FUNCTION_EN_0, | 1581 | .reg = PAD_FUNCTION_EN_0, |
1410 | .mask = PMX_CLCD1_MASK | PMX_SMI_MASK, | 1582 | .mask = PMX_CLCD1_MASK | PMX_SMI_MASK, |
1411 | .val = 0, | 1583 | .val = 0, |
1584 | }, { | ||
1585 | .reg = PAD_DIRECTION_SEL_0, | ||
1586 | .mask = PMX_CLCD1_MASK | PMX_SMI_MASK, | ||
1587 | .val = PMX_CLCD1_MASK | PMX_SMI_MASK, | ||
1412 | }, | 1588 | }, |
1413 | }; | 1589 | }; |
1414 | 1590 | ||
@@ -1435,6 +1611,10 @@ static struct spear_muxreg i2c3_dis_sd_i2s0_muxreg[] = { | |||
1435 | .reg = PAD_FUNCTION_EN_1, | 1611 | .reg = PAD_FUNCTION_EN_1, |
1436 | .mask = PMX_I2S1_MASK | PMX_MCIDATA3_MASK, | 1612 | .mask = PMX_I2S1_MASK | PMX_MCIDATA3_MASK, |
1437 | .val = 0, | 1613 | .val = 0, |
1614 | }, { | ||
1615 | .reg = PAD_DIRECTION_SEL_1, | ||
1616 | .mask = PMX_I2S1_MASK | PMX_MCIDATA3_MASK, | ||
1617 | .val = PMX_I2S1_MASK | PMX_MCIDATA3_MASK, | ||
1438 | }, | 1618 | }, |
1439 | }; | 1619 | }; |
1440 | 1620 | ||
@@ -1469,6 +1649,10 @@ static struct spear_muxreg i2c_4_5_dis_smi_muxreg[] = { | |||
1469 | .reg = PAD_FUNCTION_EN_0, | 1649 | .reg = PAD_FUNCTION_EN_0, |
1470 | .mask = PMX_SMI_MASK, | 1650 | .mask = PMX_SMI_MASK, |
1471 | .val = 0, | 1651 | .val = 0, |
1652 | }, { | ||
1653 | .reg = PAD_DIRECTION_SEL_0, | ||
1654 | .mask = PMX_SMI_MASK, | ||
1655 | .val = PMX_SMI_MASK, | ||
1472 | }, | 1656 | }, |
1473 | }; | 1657 | }; |
1474 | 1658 | ||
@@ -1499,6 +1683,14 @@ static struct spear_muxreg i2c4_dis_sd_muxreg[] = { | |||
1499 | .reg = PAD_FUNCTION_EN_2, | 1683 | .reg = PAD_FUNCTION_EN_2, |
1500 | .mask = PMX_MCIDATA5_MASK, | 1684 | .mask = PMX_MCIDATA5_MASK, |
1501 | .val = 0, | 1685 | .val = 0, |
1686 | }, { | ||
1687 | .reg = PAD_DIRECTION_SEL_1, | ||
1688 | .mask = PMX_MCIDATA4_MASK, | ||
1689 | .val = PMX_MCIDATA4_MASK, | ||
1690 | }, { | ||
1691 | .reg = PAD_DIRECTION_SEL_2, | ||
1692 | .mask = PMX_MCIDATA5_MASK, | ||
1693 | .val = PMX_MCIDATA5_MASK, | ||
1502 | }, | 1694 | }, |
1503 | }; | 1695 | }; |
1504 | 1696 | ||
@@ -1526,6 +1718,12 @@ static struct spear_muxreg i2c5_dis_sd_muxreg[] = { | |||
1526 | .mask = PMX_MCIDATA6_MASK | | 1718 | .mask = PMX_MCIDATA6_MASK | |
1527 | PMX_MCIDATA7_MASK, | 1719 | PMX_MCIDATA7_MASK, |
1528 | .val = 0, | 1720 | .val = 0, |
1721 | }, { | ||
1722 | .reg = PAD_DIRECTION_SEL_2, | ||
1723 | .mask = PMX_MCIDATA6_MASK | | ||
1724 | PMX_MCIDATA7_MASK, | ||
1725 | .val = PMX_MCIDATA6_MASK | | ||
1726 | PMX_MCIDATA7_MASK, | ||
1529 | }, | 1727 | }, |
1530 | }; | 1728 | }; |
1531 | 1729 | ||
@@ -1560,6 +1758,10 @@ static struct spear_muxreg i2c_6_7_dis_kbd_muxreg[] = { | |||
1560 | .reg = PAD_FUNCTION_EN_1, | 1758 | .reg = PAD_FUNCTION_EN_1, |
1561 | .mask = PMX_KBD_ROWCOL25_MASK, | 1759 | .mask = PMX_KBD_ROWCOL25_MASK, |
1562 | .val = 0, | 1760 | .val = 0, |
1761 | }, { | ||
1762 | .reg = PAD_DIRECTION_SEL_1, | ||
1763 | .mask = PMX_KBD_ROWCOL25_MASK, | ||
1764 | .val = PMX_KBD_ROWCOL25_MASK, | ||
1563 | }, | 1765 | }, |
1564 | }; | 1766 | }; |
1565 | 1767 | ||
@@ -1587,6 +1789,12 @@ static struct spear_muxreg i2c6_dis_sd_muxreg[] = { | |||
1587 | .mask = PMX_MCIIORDRE_MASK | | 1789 | .mask = PMX_MCIIORDRE_MASK | |
1588 | PMX_MCIIOWRWE_MASK, | 1790 | PMX_MCIIOWRWE_MASK, |
1589 | .val = 0, | 1791 | .val = 0, |
1792 | }, { | ||
1793 | .reg = PAD_DIRECTION_SEL_2, | ||
1794 | .mask = PMX_MCIIORDRE_MASK | | ||
1795 | PMX_MCIIOWRWE_MASK, | ||
1796 | .val = PMX_MCIIORDRE_MASK | | ||
1797 | PMX_MCIIOWRWE_MASK, | ||
1590 | }, | 1798 | }, |
1591 | }; | 1799 | }; |
1592 | 1800 | ||
@@ -1613,6 +1821,12 @@ static struct spear_muxreg i2c7_dis_sd_muxreg[] = { | |||
1613 | .mask = PMX_MCIRESETCF_MASK | | 1821 | .mask = PMX_MCIRESETCF_MASK | |
1614 | PMX_MCICS0CE_MASK, | 1822 | PMX_MCICS0CE_MASK, |
1615 | .val = 0, | 1823 | .val = 0, |
1824 | }, { | ||
1825 | .reg = PAD_DIRECTION_SEL_2, | ||
1826 | .mask = PMX_MCIRESETCF_MASK | | ||
1827 | PMX_MCICS0CE_MASK, | ||
1828 | .val = PMX_MCIRESETCF_MASK | | ||
1829 | PMX_MCICS0CE_MASK, | ||
1616 | }, | 1830 | }, |
1617 | }; | 1831 | }; |
1618 | 1832 | ||
@@ -1651,6 +1865,14 @@ static struct spear_muxreg can0_dis_nor_muxreg[] = { | |||
1651 | .reg = PAD_FUNCTION_EN_1, | 1865 | .reg = PAD_FUNCTION_EN_1, |
1652 | .mask = PMX_NFRSTPWDWN3_MASK, | 1866 | .mask = PMX_NFRSTPWDWN3_MASK, |
1653 | .val = 0, | 1867 | .val = 0, |
1868 | }, { | ||
1869 | .reg = PAD_DIRECTION_SEL_0, | ||
1870 | .mask = PMX_NFRSTPWDWN2_MASK, | ||
1871 | .val = PMX_NFRSTPWDWN2_MASK, | ||
1872 | }, { | ||
1873 | .reg = PAD_DIRECTION_SEL_1, | ||
1874 | .mask = PMX_NFRSTPWDWN3_MASK, | ||
1875 | .val = PMX_NFRSTPWDWN3_MASK, | ||
1654 | }, | 1876 | }, |
1655 | }; | 1877 | }; |
1656 | 1878 | ||
@@ -1677,6 +1899,10 @@ static struct spear_muxreg can0_dis_sd_muxreg[] = { | |||
1677 | .reg = PAD_FUNCTION_EN_2, | 1899 | .reg = PAD_FUNCTION_EN_2, |
1678 | .mask = PMX_MCICFINTR_MASK | PMX_MCIIORDY_MASK, | 1900 | .mask = PMX_MCICFINTR_MASK | PMX_MCIIORDY_MASK, |
1679 | .val = 0, | 1901 | .val = 0, |
1902 | }, { | ||
1903 | .reg = PAD_DIRECTION_SEL_2, | ||
1904 | .mask = PMX_MCICFINTR_MASK | PMX_MCIIORDY_MASK, | ||
1905 | .val = PMX_MCICFINTR_MASK | PMX_MCIIORDY_MASK, | ||
1680 | }, | 1906 | }, |
1681 | }; | 1907 | }; |
1682 | 1908 | ||
@@ -1711,6 +1937,10 @@ static struct spear_muxreg can1_dis_sd_muxreg[] = { | |||
1711 | .reg = PAD_FUNCTION_EN_2, | 1937 | .reg = PAD_FUNCTION_EN_2, |
1712 | .mask = PMX_MCICS1_MASK | PMX_MCIDMAACK_MASK, | 1938 | .mask = PMX_MCICS1_MASK | PMX_MCIDMAACK_MASK, |
1713 | .val = 0, | 1939 | .val = 0, |
1940 | }, { | ||
1941 | .reg = PAD_DIRECTION_SEL_2, | ||
1942 | .mask = PMX_MCICS1_MASK | PMX_MCIDMAACK_MASK, | ||
1943 | .val = PMX_MCICS1_MASK | PMX_MCIDMAACK_MASK, | ||
1714 | }, | 1944 | }, |
1715 | }; | 1945 | }; |
1716 | 1946 | ||
@@ -1737,6 +1967,10 @@ static struct spear_muxreg can1_dis_kbd_muxreg[] = { | |||
1737 | .reg = PAD_FUNCTION_EN_1, | 1967 | .reg = PAD_FUNCTION_EN_1, |
1738 | .mask = PMX_KBD_ROWCOL25_MASK, | 1968 | .mask = PMX_KBD_ROWCOL25_MASK, |
1739 | .val = 0, | 1969 | .val = 0, |
1970 | }, { | ||
1971 | .reg = PAD_DIRECTION_SEL_1, | ||
1972 | .mask = PMX_KBD_ROWCOL25_MASK, | ||
1973 | .val = PMX_KBD_ROWCOL25_MASK, | ||
1740 | }, | 1974 | }, |
1741 | }; | 1975 | }; |
1742 | 1976 | ||
@@ -1763,29 +1997,64 @@ static struct spear_function can1_function = { | |||
1763 | .ngroups = ARRAY_SIZE(can1_grps), | 1997 | .ngroups = ARRAY_SIZE(can1_grps), |
1764 | }; | 1998 | }; |
1765 | 1999 | ||
1766 | /* Pad multiplexing for pci device */ | 2000 | /* Pad multiplexing for (ras-ip) pci device */ |
1767 | static const unsigned pci_sata_pins[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 18, | 2001 | static const unsigned pci_pins[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 18, |
1768 | 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, | 2002 | 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, |
1769 | 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, | 2003 | 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, |
1770 | 55, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99 }; | 2004 | 55, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99 }; |
1771 | #define PCI_SATA_MUXREG \ | ||
1772 | { \ | ||
1773 | .reg = PAD_FUNCTION_EN_0, \ | ||
1774 | .mask = PMX_MCI_DATA8_15_MASK, \ | ||
1775 | .val = 0, \ | ||
1776 | }, { \ | ||
1777 | .reg = PAD_FUNCTION_EN_1, \ | ||
1778 | .mask = PMX_PCI_REG1_MASK, \ | ||
1779 | .val = 0, \ | ||
1780 | }, { \ | ||
1781 | .reg = PAD_FUNCTION_EN_2, \ | ||
1782 | .mask = PMX_PCI_REG2_MASK, \ | ||
1783 | .val = 0, \ | ||
1784 | } | ||
1785 | 2005 | ||
1786 | /* pad multiplexing for pcie0 device */ | 2006 | static struct spear_muxreg pci_muxreg[] = { |
2007 | { | ||
2008 | .reg = PAD_FUNCTION_EN_0, | ||
2009 | .mask = PMX_MCI_DATA8_15_MASK, | ||
2010 | .val = 0, | ||
2011 | }, { | ||
2012 | .reg = PAD_FUNCTION_EN_1, | ||
2013 | .mask = PMX_PCI_REG1_MASK, | ||
2014 | .val = 0, | ||
2015 | }, { | ||
2016 | .reg = PAD_FUNCTION_EN_2, | ||
2017 | .mask = PMX_PCI_REG2_MASK, | ||
2018 | .val = 0, | ||
2019 | }, { | ||
2020 | .reg = PAD_DIRECTION_SEL_0, | ||
2021 | .mask = PMX_MCI_DATA8_15_MASK, | ||
2022 | .val = PMX_MCI_DATA8_15_MASK, | ||
2023 | }, { | ||
2024 | .reg = PAD_DIRECTION_SEL_1, | ||
2025 | .mask = PMX_PCI_REG1_MASK, | ||
2026 | .val = PMX_PCI_REG1_MASK, | ||
2027 | }, { | ||
2028 | .reg = PAD_DIRECTION_SEL_2, | ||
2029 | .mask = PMX_PCI_REG2_MASK, | ||
2030 | .val = PMX_PCI_REG2_MASK, | ||
2031 | }, | ||
2032 | }; | ||
2033 | |||
2034 | static struct spear_modemux pci_modemux[] = { | ||
2035 | { | ||
2036 | .muxregs = pci_muxreg, | ||
2037 | .nmuxregs = ARRAY_SIZE(pci_muxreg), | ||
2038 | }, | ||
2039 | }; | ||
2040 | |||
2041 | static struct spear_pingroup pci_pingroup = { | ||
2042 | .name = "pci_grp", | ||
2043 | .pins = pci_pins, | ||
2044 | .npins = ARRAY_SIZE(pci_pins), | ||
2045 | .modemuxs = pci_modemux, | ||
2046 | .nmodemuxs = ARRAY_SIZE(pci_modemux), | ||
2047 | }; | ||
2048 | |||
2049 | static const char *const pci_grps[] = { "pci_grp" }; | ||
2050 | static struct spear_function pci_function = { | ||
2051 | .name = "pci", | ||
2052 | .groups = pci_grps, | ||
2053 | .ngroups = ARRAY_SIZE(pci_grps), | ||
2054 | }; | ||
2055 | |||
2056 | /* pad multiplexing for (fix-part) pcie0 device */ | ||
1787 | static struct spear_muxreg pcie0_muxreg[] = { | 2057 | static struct spear_muxreg pcie0_muxreg[] = { |
1788 | PCI_SATA_MUXREG, | ||
1789 | { | 2058 | { |
1790 | .reg = PCIE_SATA_CFG, | 2059 | .reg = PCIE_SATA_CFG, |
1791 | .mask = PCIE_CFG_VAL(0), | 2060 | .mask = PCIE_CFG_VAL(0), |
@@ -1802,15 +2071,12 @@ static struct spear_modemux pcie0_modemux[] = { | |||
1802 | 2071 | ||
1803 | static struct spear_pingroup pcie0_pingroup = { | 2072 | static struct spear_pingroup pcie0_pingroup = { |
1804 | .name = "pcie0_grp", | 2073 | .name = "pcie0_grp", |
1805 | .pins = pci_sata_pins, | ||
1806 | .npins = ARRAY_SIZE(pci_sata_pins), | ||
1807 | .modemuxs = pcie0_modemux, | 2074 | .modemuxs = pcie0_modemux, |
1808 | .nmodemuxs = ARRAY_SIZE(pcie0_modemux), | 2075 | .nmodemuxs = ARRAY_SIZE(pcie0_modemux), |
1809 | }; | 2076 | }; |
1810 | 2077 | ||
1811 | /* pad multiplexing for pcie1 device */ | 2078 | /* pad multiplexing for (fix-part) pcie1 device */ |
1812 | static struct spear_muxreg pcie1_muxreg[] = { | 2079 | static struct spear_muxreg pcie1_muxreg[] = { |
1813 | PCI_SATA_MUXREG, | ||
1814 | { | 2080 | { |
1815 | .reg = PCIE_SATA_CFG, | 2081 | .reg = PCIE_SATA_CFG, |
1816 | .mask = PCIE_CFG_VAL(1), | 2082 | .mask = PCIE_CFG_VAL(1), |
@@ -1827,15 +2093,12 @@ static struct spear_modemux pcie1_modemux[] = { | |||
1827 | 2093 | ||
1828 | static struct spear_pingroup pcie1_pingroup = { | 2094 | static struct spear_pingroup pcie1_pingroup = { |
1829 | .name = "pcie1_grp", | 2095 | .name = "pcie1_grp", |
1830 | .pins = pci_sata_pins, | ||
1831 | .npins = ARRAY_SIZE(pci_sata_pins), | ||
1832 | .modemuxs = pcie1_modemux, | 2096 | .modemuxs = pcie1_modemux, |
1833 | .nmodemuxs = ARRAY_SIZE(pcie1_modemux), | 2097 | .nmodemuxs = ARRAY_SIZE(pcie1_modemux), |
1834 | }; | 2098 | }; |
1835 | 2099 | ||
1836 | /* pad multiplexing for pcie2 device */ | 2100 | /* pad multiplexing for (fix-part) pcie2 device */ |
1837 | static struct spear_muxreg pcie2_muxreg[] = { | 2101 | static struct spear_muxreg pcie2_muxreg[] = { |
1838 | PCI_SATA_MUXREG, | ||
1839 | { | 2102 | { |
1840 | .reg = PCIE_SATA_CFG, | 2103 | .reg = PCIE_SATA_CFG, |
1841 | .mask = PCIE_CFG_VAL(2), | 2104 | .mask = PCIE_CFG_VAL(2), |
@@ -1852,22 +2115,20 @@ static struct spear_modemux pcie2_modemux[] = { | |||
1852 | 2115 | ||
1853 | static struct spear_pingroup pcie2_pingroup = { | 2116 | static struct spear_pingroup pcie2_pingroup = { |
1854 | .name = "pcie2_grp", | 2117 | .name = "pcie2_grp", |
1855 | .pins = pci_sata_pins, | ||
1856 | .npins = ARRAY_SIZE(pci_sata_pins), | ||
1857 | .modemuxs = pcie2_modemux, | 2118 | .modemuxs = pcie2_modemux, |
1858 | .nmodemuxs = ARRAY_SIZE(pcie2_modemux), | 2119 | .nmodemuxs = ARRAY_SIZE(pcie2_modemux), |
1859 | }; | 2120 | }; |
1860 | 2121 | ||
1861 | static const char *const pci_grps[] = { "pcie0_grp", "pcie1_grp", "pcie2_grp" }; | 2122 | static const char *const pcie_grps[] = { "pcie0_grp", "pcie1_grp", "pcie2_grp" |
1862 | static struct spear_function pci_function = { | 2123 | }; |
1863 | .name = "pci", | 2124 | static struct spear_function pcie_function = { |
1864 | .groups = pci_grps, | 2125 | .name = "pci_express", |
1865 | .ngroups = ARRAY_SIZE(pci_grps), | 2126 | .groups = pcie_grps, |
2127 | .ngroups = ARRAY_SIZE(pcie_grps), | ||
1866 | }; | 2128 | }; |
1867 | 2129 | ||
1868 | /* pad multiplexing for sata0 device */ | 2130 | /* pad multiplexing for sata0 device */ |
1869 | static struct spear_muxreg sata0_muxreg[] = { | 2131 | static struct spear_muxreg sata0_muxreg[] = { |
1870 | PCI_SATA_MUXREG, | ||
1871 | { | 2132 | { |
1872 | .reg = PCIE_SATA_CFG, | 2133 | .reg = PCIE_SATA_CFG, |
1873 | .mask = SATA_CFG_VAL(0), | 2134 | .mask = SATA_CFG_VAL(0), |
@@ -1884,15 +2145,12 @@ static struct spear_modemux sata0_modemux[] = { | |||
1884 | 2145 | ||
1885 | static struct spear_pingroup sata0_pingroup = { | 2146 | static struct spear_pingroup sata0_pingroup = { |
1886 | .name = "sata0_grp", | 2147 | .name = "sata0_grp", |
1887 | .pins = pci_sata_pins, | ||
1888 | .npins = ARRAY_SIZE(pci_sata_pins), | ||
1889 | .modemuxs = sata0_modemux, | 2148 | .modemuxs = sata0_modemux, |
1890 | .nmodemuxs = ARRAY_SIZE(sata0_modemux), | 2149 | .nmodemuxs = ARRAY_SIZE(sata0_modemux), |
1891 | }; | 2150 | }; |
1892 | 2151 | ||
1893 | /* pad multiplexing for sata1 device */ | 2152 | /* pad multiplexing for sata1 device */ |
1894 | static struct spear_muxreg sata1_muxreg[] = { | 2153 | static struct spear_muxreg sata1_muxreg[] = { |
1895 | PCI_SATA_MUXREG, | ||
1896 | { | 2154 | { |
1897 | .reg = PCIE_SATA_CFG, | 2155 | .reg = PCIE_SATA_CFG, |
1898 | .mask = SATA_CFG_VAL(1), | 2156 | .mask = SATA_CFG_VAL(1), |
@@ -1909,15 +2167,12 @@ static struct spear_modemux sata1_modemux[] = { | |||
1909 | 2167 | ||
1910 | static struct spear_pingroup sata1_pingroup = { | 2168 | static struct spear_pingroup sata1_pingroup = { |
1911 | .name = "sata1_grp", | 2169 | .name = "sata1_grp", |
1912 | .pins = pci_sata_pins, | ||
1913 | .npins = ARRAY_SIZE(pci_sata_pins), | ||
1914 | .modemuxs = sata1_modemux, | 2170 | .modemuxs = sata1_modemux, |
1915 | .nmodemuxs = ARRAY_SIZE(sata1_modemux), | 2171 | .nmodemuxs = ARRAY_SIZE(sata1_modemux), |
1916 | }; | 2172 | }; |
1917 | 2173 | ||
1918 | /* pad multiplexing for sata2 device */ | 2174 | /* pad multiplexing for sata2 device */ |
1919 | static struct spear_muxreg sata2_muxreg[] = { | 2175 | static struct spear_muxreg sata2_muxreg[] = { |
1920 | PCI_SATA_MUXREG, | ||
1921 | { | 2176 | { |
1922 | .reg = PCIE_SATA_CFG, | 2177 | .reg = PCIE_SATA_CFG, |
1923 | .mask = SATA_CFG_VAL(2), | 2178 | .mask = SATA_CFG_VAL(2), |
@@ -1934,8 +2189,6 @@ static struct spear_modemux sata2_modemux[] = { | |||
1934 | 2189 | ||
1935 | static struct spear_pingroup sata2_pingroup = { | 2190 | static struct spear_pingroup sata2_pingroup = { |
1936 | .name = "sata2_grp", | 2191 | .name = "sata2_grp", |
1937 | .pins = pci_sata_pins, | ||
1938 | .npins = ARRAY_SIZE(pci_sata_pins), | ||
1939 | .modemuxs = sata2_modemux, | 2192 | .modemuxs = sata2_modemux, |
1940 | .nmodemuxs = ARRAY_SIZE(sata2_modemux), | 2193 | .nmodemuxs = ARRAY_SIZE(sata2_modemux), |
1941 | }; | 2194 | }; |
@@ -1957,6 +2210,14 @@ static struct spear_muxreg ssp1_dis_kbd_muxreg[] = { | |||
1957 | PMX_KBD_COL0_MASK | PMX_NFIO8_15_MASK | PMX_NFCE1_MASK | | 2210 | PMX_KBD_COL0_MASK | PMX_NFIO8_15_MASK | PMX_NFCE1_MASK | |
1958 | PMX_NFCE2_MASK, | 2211 | PMX_NFCE2_MASK, |
1959 | .val = 0, | 2212 | .val = 0, |
2213 | }, { | ||
2214 | .reg = PAD_DIRECTION_SEL_1, | ||
2215 | .mask = PMX_KBD_ROWCOL25_MASK | PMX_KBD_COL1_MASK | | ||
2216 | PMX_KBD_COL0_MASK | PMX_NFIO8_15_MASK | PMX_NFCE1_MASK | | ||
2217 | PMX_NFCE2_MASK, | ||
2218 | .val = PMX_KBD_ROWCOL25_MASK | PMX_KBD_COL1_MASK | | ||
2219 | PMX_KBD_COL0_MASK | PMX_NFIO8_15_MASK | PMX_NFCE1_MASK | | ||
2220 | PMX_NFCE2_MASK, | ||
1960 | }, | 2221 | }, |
1961 | }; | 2222 | }; |
1962 | 2223 | ||
@@ -1983,6 +2244,12 @@ static struct spear_muxreg ssp1_dis_sd_muxreg[] = { | |||
1983 | .mask = PMX_MCIADDR0ALE_MASK | PMX_MCIADDR2_MASK | | 2244 | .mask = PMX_MCIADDR0ALE_MASK | PMX_MCIADDR2_MASK | |
1984 | PMX_MCICECF_MASK | PMX_MCICEXD_MASK, | 2245 | PMX_MCICECF_MASK | PMX_MCICEXD_MASK, |
1985 | .val = 0, | 2246 | .val = 0, |
2247 | }, { | ||
2248 | .reg = PAD_DIRECTION_SEL_2, | ||
2249 | .mask = PMX_MCIADDR0ALE_MASK | PMX_MCIADDR2_MASK | | ||
2250 | PMX_MCICECF_MASK | PMX_MCICEXD_MASK, | ||
2251 | .val = PMX_MCIADDR0ALE_MASK | PMX_MCIADDR2_MASK | | ||
2252 | PMX_MCICECF_MASK | PMX_MCICEXD_MASK, | ||
1986 | }, | 2253 | }, |
1987 | }; | 2254 | }; |
1988 | 2255 | ||
@@ -2017,6 +2284,12 @@ static struct spear_muxreg gpt64_muxreg[] = { | |||
2017 | .mask = PMX_MCICDCF1_MASK | PMX_MCICDCF2_MASK | PMX_MCICDXD_MASK | 2284 | .mask = PMX_MCICDCF1_MASK | PMX_MCICDCF2_MASK | PMX_MCICDXD_MASK |
2018 | | PMX_MCILEDS_MASK, | 2285 | | PMX_MCILEDS_MASK, |
2019 | .val = 0, | 2286 | .val = 0, |
2287 | }, { | ||
2288 | .reg = PAD_DIRECTION_SEL_2, | ||
2289 | .mask = PMX_MCICDCF1_MASK | PMX_MCICDCF2_MASK | PMX_MCICDXD_MASK | ||
2290 | | PMX_MCILEDS_MASK, | ||
2291 | .val = PMX_MCICDCF1_MASK | PMX_MCICDCF2_MASK | PMX_MCICDXD_MASK | ||
2292 | | PMX_MCILEDS_MASK, | ||
2020 | }, | 2293 | }, |
2021 | }; | 2294 | }; |
2022 | 2295 | ||
@@ -2093,6 +2366,7 @@ static struct spear_pingroup *spear1310_pingroups[] = { | |||
2093 | &can0_dis_sd_pingroup, | 2366 | &can0_dis_sd_pingroup, |
2094 | &can1_dis_sd_pingroup, | 2367 | &can1_dis_sd_pingroup, |
2095 | &can1_dis_kbd_pingroup, | 2368 | &can1_dis_kbd_pingroup, |
2369 | &pci_pingroup, | ||
2096 | &pcie0_pingroup, | 2370 | &pcie0_pingroup, |
2097 | &pcie1_pingroup, | 2371 | &pcie1_pingroup, |
2098 | &pcie2_pingroup, | 2372 | &pcie2_pingroup, |
@@ -2138,6 +2412,7 @@ static struct spear_function *spear1310_functions[] = { | |||
2138 | &can0_function, | 2412 | &can0_function, |
2139 | &can1_function, | 2413 | &can1_function, |
2140 | &pci_function, | 2414 | &pci_function, |
2415 | &pcie_function, | ||
2141 | &sata_function, | 2416 | &sata_function, |
2142 | &ssp1_function, | 2417 | &ssp1_function, |
2143 | &gpt64_function, | 2418 | &gpt64_function, |
diff --git a/drivers/pinctrl/spear/pinctrl-spear1340.c b/drivers/pinctrl/spear/pinctrl-spear1340.c index a0eb057e55bd..0606b8cf3f2c 100644 --- a/drivers/pinctrl/spear/pinctrl-spear1340.c +++ b/drivers/pinctrl/spear/pinctrl-spear1340.c | |||
@@ -213,7 +213,7 @@ static const struct pinctrl_pin_desc spear1340_pins[] = { | |||
213 | * Pad multiplexing for making all pads as gpio's. This is done to override the | 213 | * Pad multiplexing for making all pads as gpio's. This is done to override the |
214 | * values passed from bootloader and start from scratch. | 214 | * values passed from bootloader and start from scratch. |
215 | */ | 215 | */ |
216 | static const unsigned pads_as_gpio_pins[] = { 251 }; | 216 | static const unsigned pads_as_gpio_pins[] = { 12, 88, 89, 251 }; |
217 | static struct spear_muxreg pads_as_gpio_muxreg[] = { | 217 | static struct spear_muxreg pads_as_gpio_muxreg[] = { |
218 | { | 218 | { |
219 | .reg = PAD_FUNCTION_EN_1, | 219 | .reg = PAD_FUNCTION_EN_1, |
@@ -1692,7 +1692,43 @@ static struct spear_pingroup clcd_pingroup = { | |||
1692 | .nmodemuxs = ARRAY_SIZE(clcd_modemux), | 1692 | .nmodemuxs = ARRAY_SIZE(clcd_modemux), |
1693 | }; | 1693 | }; |
1694 | 1694 | ||
1695 | static const char *const clcd_grps[] = { "clcd_grp" }; | 1695 | /* Disable cld runtime to save panel damage */ |
1696 | static struct spear_muxreg clcd_sleep_muxreg[] = { | ||
1697 | { | ||
1698 | .reg = PAD_SHARED_IP_EN_1, | ||
1699 | .mask = ARM_TRACE_MASK | MIPHY_DBG_MASK, | ||
1700 | .val = 0, | ||
1701 | }, { | ||
1702 | .reg = PAD_FUNCTION_EN_5, | ||
1703 | .mask = CLCD_REG4_MASK | CLCD_AND_ARM_TRACE_REG4_MASK, | ||
1704 | .val = 0x0, | ||
1705 | }, { | ||
1706 | .reg = PAD_FUNCTION_EN_6, | ||
1707 | .mask = CLCD_AND_ARM_TRACE_REG5_MASK, | ||
1708 | .val = 0x0, | ||
1709 | }, { | ||
1710 | .reg = PAD_FUNCTION_EN_7, | ||
1711 | .mask = CLCD_AND_ARM_TRACE_REG6_MASK, | ||
1712 | .val = 0x0, | ||
1713 | }, | ||
1714 | }; | ||
1715 | |||
1716 | static struct spear_modemux clcd_sleep_modemux[] = { | ||
1717 | { | ||
1718 | .muxregs = clcd_sleep_muxreg, | ||
1719 | .nmuxregs = ARRAY_SIZE(clcd_sleep_muxreg), | ||
1720 | }, | ||
1721 | }; | ||
1722 | |||
1723 | static struct spear_pingroup clcd_sleep_pingroup = { | ||
1724 | .name = "clcd_sleep_grp", | ||
1725 | .pins = clcd_pins, | ||
1726 | .npins = ARRAY_SIZE(clcd_pins), | ||
1727 | .modemuxs = clcd_sleep_modemux, | ||
1728 | .nmodemuxs = ARRAY_SIZE(clcd_sleep_modemux), | ||
1729 | }; | ||
1730 | |||
1731 | static const char *const clcd_grps[] = { "clcd_grp", "clcd_sleep_grp" }; | ||
1696 | static struct spear_function clcd_function = { | 1732 | static struct spear_function clcd_function = { |
1697 | .name = "clcd", | 1733 | .name = "clcd", |
1698 | .groups = clcd_grps, | 1734 | .groups = clcd_grps, |
@@ -1893,6 +1929,7 @@ static struct spear_pingroup *spear1340_pingroups[] = { | |||
1893 | &sdhci_pingroup, | 1929 | &sdhci_pingroup, |
1894 | &cf_pingroup, | 1930 | &cf_pingroup, |
1895 | &xd_pingroup, | 1931 | &xd_pingroup, |
1932 | &clcd_sleep_pingroup, | ||
1896 | &clcd_pingroup, | 1933 | &clcd_pingroup, |
1897 | &arm_trace_pingroup, | 1934 | &arm_trace_pingroup, |
1898 | &miphy_dbg_pingroup, | 1935 | &miphy_dbg_pingroup, |
diff --git a/drivers/pinctrl/spear/pinctrl-spear320.c b/drivers/pinctrl/spear/pinctrl-spear320.c index 020b1e0bdb3e..ca47b0e50780 100644 --- a/drivers/pinctrl/spear/pinctrl-spear320.c +++ b/drivers/pinctrl/spear/pinctrl-spear320.c | |||
@@ -2240,6 +2240,10 @@ static struct spear_muxreg pwm2_pin_34_muxreg[] = { | |||
2240 | .mask = PMX_SSP_CS_MASK, | 2240 | .mask = PMX_SSP_CS_MASK, |
2241 | .val = 0, | 2241 | .val = 0, |
2242 | }, { | 2242 | }, { |
2243 | .reg = MODE_CONFIG_REG, | ||
2244 | .mask = PMX_PWM_MASK, | ||
2245 | .val = PMX_PWM_MASK, | ||
2246 | }, { | ||
2243 | .reg = IP_SEL_PAD_30_39_REG, | 2247 | .reg = IP_SEL_PAD_30_39_REG, |
2244 | .mask = PMX_PL_34_MASK, | 2248 | .mask = PMX_PL_34_MASK, |
2245 | .val = PMX_PWM2_PL_34_VAL, | 2249 | .val = PMX_PWM2_PL_34_VAL, |
@@ -2956,9 +2960,9 @@ static struct spear_function mii2_function = { | |||
2956 | }; | 2960 | }; |
2957 | 2961 | ||
2958 | /* Pad multiplexing for cadence mii 1_2 as smii or rmii device */ | 2962 | /* Pad multiplexing for cadence mii 1_2 as smii or rmii device */ |
2959 | static const unsigned smii0_1_pins[] = { 10, 11, 13, 14, 15, 16, 17, 18, 19, 20, | 2963 | static const unsigned rmii0_1_pins[] = { 10, 11, 13, 14, 15, 16, 17, 18, 19, 20, |
2960 | 21, 22, 23, 24, 25, 26, 27 }; | 2964 | 21, 22, 23, 24, 25, 26, 27 }; |
2961 | static const unsigned rmii0_1_pins[] = { 10, 11, 21, 22, 23, 24, 25, 26, 27 }; | 2965 | static const unsigned smii0_1_pins[] = { 10, 11, 21, 22, 23, 24, 25, 26, 27 }; |
2962 | static struct spear_muxreg mii0_1_muxreg[] = { | 2966 | static struct spear_muxreg mii0_1_muxreg[] = { |
2963 | { | 2967 | { |
2964 | .reg = PMX_CONFIG_REG, | 2968 | .reg = PMX_CONFIG_REG, |
diff --git a/drivers/pinctrl/spear/pinctrl-spear3xx.h b/drivers/pinctrl/spear/pinctrl-spear3xx.h index 31f44347f17c..7860b36053c4 100644 --- a/drivers/pinctrl/spear/pinctrl-spear3xx.h +++ b/drivers/pinctrl/spear/pinctrl-spear3xx.h | |||
@@ -15,6 +15,7 @@ | |||
15 | #include "pinctrl-spear.h" | 15 | #include "pinctrl-spear.h" |
16 | 16 | ||
17 | /* pad mux declarations */ | 17 | /* pad mux declarations */ |
18 | #define PMX_PWM_MASK (1 << 16) | ||
18 | #define PMX_FIRDA_MASK (1 << 14) | 19 | #define PMX_FIRDA_MASK (1 << 14) |
19 | #define PMX_I2C_MASK (1 << 13) | 20 | #define PMX_I2C_MASK (1 << 13) |
20 | #define PMX_SSP_CS_MASK (1 << 12) | 21 | #define PMX_SSP_CS_MASK (1 << 12) |
diff --git a/drivers/rtc/rtc-mxc.c b/drivers/rtc/rtc-mxc.c index cd0106293a49..7304139934aa 100644 --- a/drivers/rtc/rtc-mxc.c +++ b/drivers/rtc/rtc-mxc.c | |||
@@ -17,8 +17,6 @@ | |||
17 | #include <linux/platform_device.h> | 17 | #include <linux/platform_device.h> |
18 | #include <linux/clk.h> | 18 | #include <linux/clk.h> |
19 | 19 | ||
20 | #include <mach/hardware.h> | ||
21 | |||
22 | #define RTC_INPUT_CLK_32768HZ (0x00 << 5) | 20 | #define RTC_INPUT_CLK_32768HZ (0x00 << 5) |
23 | #define RTC_INPUT_CLK_32000HZ (0x01 << 5) | 21 | #define RTC_INPUT_CLK_32000HZ (0x01 << 5) |
24 | #define RTC_INPUT_CLK_38400HZ (0x02 << 5) | 22 | #define RTC_INPUT_CLK_38400HZ (0x02 << 5) |
@@ -72,14 +70,38 @@ static const u32 PIE_BIT_DEF[MAX_PIE_NUM][2] = { | |||
72 | #define RTC_TEST2 0x2C /* 32bit rtc test reg 2 */ | 70 | #define RTC_TEST2 0x2C /* 32bit rtc test reg 2 */ |
73 | #define RTC_TEST3 0x30 /* 32bit rtc test reg 3 */ | 71 | #define RTC_TEST3 0x30 /* 32bit rtc test reg 3 */ |
74 | 72 | ||
73 | enum imx_rtc_type { | ||
74 | IMX1_RTC, | ||
75 | IMX21_RTC, | ||
76 | }; | ||
77 | |||
75 | struct rtc_plat_data { | 78 | struct rtc_plat_data { |
76 | struct rtc_device *rtc; | 79 | struct rtc_device *rtc; |
77 | void __iomem *ioaddr; | 80 | void __iomem *ioaddr; |
78 | int irq; | 81 | int irq; |
79 | struct clk *clk; | 82 | struct clk *clk; |
80 | struct rtc_time g_rtc_alarm; | 83 | struct rtc_time g_rtc_alarm; |
84 | enum imx_rtc_type devtype; | ||
81 | }; | 85 | }; |
82 | 86 | ||
87 | static struct platform_device_id imx_rtc_devtype[] = { | ||
88 | { | ||
89 | .name = "imx1-rtc", | ||
90 | .driver_data = IMX1_RTC, | ||
91 | }, { | ||
92 | .name = "imx21-rtc", | ||
93 | .driver_data = IMX21_RTC, | ||
94 | }, { | ||
95 | /* sentinel */ | ||
96 | } | ||
97 | }; | ||
98 | MODULE_DEVICE_TABLE(platform, imx_rtc_devtype); | ||
99 | |||
100 | static inline int is_imx1_rtc(struct rtc_plat_data *data) | ||
101 | { | ||
102 | return data->devtype == IMX1_RTC; | ||
103 | } | ||
104 | |||
83 | /* | 105 | /* |
84 | * This function is used to obtain the RTC time or the alarm value in | 106 | * This function is used to obtain the RTC time or the alarm value in |
85 | * second. | 107 | * second. |
@@ -278,10 +300,13 @@ static int mxc_rtc_read_time(struct device *dev, struct rtc_time *tm) | |||
278 | */ | 300 | */ |
279 | static int mxc_rtc_set_mmss(struct device *dev, unsigned long time) | 301 | static int mxc_rtc_set_mmss(struct device *dev, unsigned long time) |
280 | { | 302 | { |
303 | struct platform_device *pdev = to_platform_device(dev); | ||
304 | struct rtc_plat_data *pdata = platform_get_drvdata(pdev); | ||
305 | |||
281 | /* | 306 | /* |
282 | * TTC_DAYR register is 9-bit in MX1 SoC, save time and day of year only | 307 | * TTC_DAYR register is 9-bit in MX1 SoC, save time and day of year only |
283 | */ | 308 | */ |
284 | if (cpu_is_mx1()) { | 309 | if (is_imx1_rtc(pdata)) { |
285 | struct rtc_time tm; | 310 | struct rtc_time tm; |
286 | 311 | ||
287 | rtc_time_to_tm(time, &tm); | 312 | rtc_time_to_tm(time, &tm); |
@@ -360,6 +385,8 @@ static int __devinit mxc_rtc_probe(struct platform_device *pdev) | |||
360 | if (!pdata) | 385 | if (!pdata) |
361 | return -ENOMEM; | 386 | return -ENOMEM; |
362 | 387 | ||
388 | pdata->devtype = pdev->id_entry->driver_data; | ||
389 | |||
363 | if (!devm_request_mem_region(&pdev->dev, res->start, | 390 | if (!devm_request_mem_region(&pdev->dev, res->start, |
364 | resource_size(res), pdev->name)) | 391 | resource_size(res), pdev->name)) |
365 | return -EBUSY; | 392 | return -EBUSY; |
@@ -480,6 +507,7 @@ static struct platform_driver mxc_rtc_driver = { | |||
480 | #endif | 507 | #endif |
481 | .owner = THIS_MODULE, | 508 | .owner = THIS_MODULE, |
482 | }, | 509 | }, |
510 | .id_table = imx_rtc_devtype, | ||
483 | .probe = mxc_rtc_probe, | 511 | .probe = mxc_rtc_probe, |
484 | .remove = __devexit_p(mxc_rtc_remove), | 512 | .remove = __devexit_p(mxc_rtc_remove), |
485 | }; | 513 | }; |
diff --git a/drivers/s390/cio/css.h b/drivers/s390/cio/css.h index 33bb4d891e16..4af3dfe70ef5 100644 --- a/drivers/s390/cio/css.h +++ b/drivers/s390/cio/css.h | |||
@@ -112,9 +112,6 @@ extern int for_each_subchannel(int(*fn)(struct subchannel_id, void *), void *); | |||
112 | extern void css_reiterate_subchannels(void); | 112 | extern void css_reiterate_subchannels(void); |
113 | void css_update_ssd_info(struct subchannel *sch); | 113 | void css_update_ssd_info(struct subchannel *sch); |
114 | 114 | ||
115 | #define __MAX_SUBCHANNEL 65535 | ||
116 | #define __MAX_SSID 3 | ||
117 | |||
118 | struct channel_subsystem { | 115 | struct channel_subsystem { |
119 | u8 cssid; | 116 | u8 cssid; |
120 | int valid; | 117 | int valid; |
diff --git a/drivers/s390/cio/device.c b/drivers/s390/cio/device.c index fc916f5d7314..fd3143c291c6 100644 --- a/drivers/s390/cio/device.c +++ b/drivers/s390/cio/device.c | |||
@@ -1424,7 +1424,7 @@ static enum io_sch_action sch_get_action(struct subchannel *sch) | |||
1424 | } | 1424 | } |
1425 | if (device_is_disconnected(cdev)) | 1425 | if (device_is_disconnected(cdev)) |
1426 | return IO_SCH_REPROBE; | 1426 | return IO_SCH_REPROBE; |
1427 | if (cdev->online) | 1427 | if (cdev->online && !cdev->private->flags.resuming) |
1428 | return IO_SCH_VERIFY; | 1428 | return IO_SCH_VERIFY; |
1429 | if (cdev->private->state == DEV_STATE_NOT_OPER) | 1429 | if (cdev->private->state == DEV_STATE_NOT_OPER) |
1430 | return IO_SCH_UNREG_ATTACH; | 1430 | return IO_SCH_UNREG_ATTACH; |
@@ -1469,12 +1469,6 @@ static int io_subchannel_sch_event(struct subchannel *sch, int process) | |||
1469 | rc = 0; | 1469 | rc = 0; |
1470 | goto out_unlock; | 1470 | goto out_unlock; |
1471 | case IO_SCH_VERIFY: | 1471 | case IO_SCH_VERIFY: |
1472 | if (cdev->private->flags.resuming == 1) { | ||
1473 | if (cio_enable_subchannel(sch, (u32)(addr_t)sch)) { | ||
1474 | ccw_device_set_notoper(cdev); | ||
1475 | break; | ||
1476 | } | ||
1477 | } | ||
1478 | /* Trigger path verification. */ | 1472 | /* Trigger path verification. */ |
1479 | io_subchannel_verify(sch); | 1473 | io_subchannel_verify(sch); |
1480 | rc = 0; | 1474 | rc = 0; |
diff --git a/drivers/s390/cio/idset.c b/drivers/s390/cio/idset.c index 199bc6791177..65d13e38803f 100644 --- a/drivers/s390/cio/idset.c +++ b/drivers/s390/cio/idset.c | |||
@@ -125,8 +125,7 @@ int idset_is_empty(struct idset *set) | |||
125 | 125 | ||
126 | void idset_add_set(struct idset *to, struct idset *from) | 126 | void idset_add_set(struct idset *to, struct idset *from) |
127 | { | 127 | { |
128 | int len = min(__BITOPS_WORDS(to->num_ssid * to->num_id), | 128 | int len = min(to->num_ssid * to->num_id, from->num_ssid * from->num_id); |
129 | __BITOPS_WORDS(from->num_ssid * from->num_id)); | ||
130 | 129 | ||
131 | bitmap_or(to->bitmap, to->bitmap, from->bitmap, len); | 130 | bitmap_or(to->bitmap, to->bitmap, from->bitmap, len); |
132 | } | 131 | } |
diff --git a/drivers/scsi/qlogicpti.c b/drivers/scsi/qlogicpti.c index b191dd549207..71fddbc60f18 100644 --- a/drivers/scsi/qlogicpti.c +++ b/drivers/scsi/qlogicpti.c | |||
@@ -1294,26 +1294,19 @@ static struct scsi_host_template qpti_template = { | |||
1294 | static const struct of_device_id qpti_match[]; | 1294 | static const struct of_device_id qpti_match[]; |
1295 | static int __devinit qpti_sbus_probe(struct platform_device *op) | 1295 | static int __devinit qpti_sbus_probe(struct platform_device *op) |
1296 | { | 1296 | { |
1297 | const struct of_device_id *match; | ||
1298 | struct scsi_host_template *tpnt; | ||
1299 | struct device_node *dp = op->dev.of_node; | 1297 | struct device_node *dp = op->dev.of_node; |
1300 | struct Scsi_Host *host; | 1298 | struct Scsi_Host *host; |
1301 | struct qlogicpti *qpti; | 1299 | struct qlogicpti *qpti; |
1302 | static int nqptis; | 1300 | static int nqptis; |
1303 | const char *fcode; | 1301 | const char *fcode; |
1304 | 1302 | ||
1305 | match = of_match_device(qpti_match, &op->dev); | ||
1306 | if (!match) | ||
1307 | return -EINVAL; | ||
1308 | tpnt = match->data; | ||
1309 | |||
1310 | /* Sometimes Antares cards come up not completely | 1303 | /* Sometimes Antares cards come up not completely |
1311 | * setup, and we get a report of a zero IRQ. | 1304 | * setup, and we get a report of a zero IRQ. |
1312 | */ | 1305 | */ |
1313 | if (op->archdata.irqs[0] == 0) | 1306 | if (op->archdata.irqs[0] == 0) |
1314 | return -ENODEV; | 1307 | return -ENODEV; |
1315 | 1308 | ||
1316 | host = scsi_host_alloc(tpnt, sizeof(struct qlogicpti)); | 1309 | host = scsi_host_alloc(&qpti_template, sizeof(struct qlogicpti)); |
1317 | if (!host) | 1310 | if (!host) |
1318 | return -ENOMEM; | 1311 | return -ENOMEM; |
1319 | 1312 | ||
@@ -1445,19 +1438,15 @@ static int __devexit qpti_sbus_remove(struct platform_device *op) | |||
1445 | static const struct of_device_id qpti_match[] = { | 1438 | static const struct of_device_id qpti_match[] = { |
1446 | { | 1439 | { |
1447 | .name = "ptisp", | 1440 | .name = "ptisp", |
1448 | .data = &qpti_template, | ||
1449 | }, | 1441 | }, |
1450 | { | 1442 | { |
1451 | .name = "PTI,ptisp", | 1443 | .name = "PTI,ptisp", |
1452 | .data = &qpti_template, | ||
1453 | }, | 1444 | }, |
1454 | { | 1445 | { |
1455 | .name = "QLGC,isp", | 1446 | .name = "QLGC,isp", |
1456 | .data = &qpti_template, | ||
1457 | }, | 1447 | }, |
1458 | { | 1448 | { |
1459 | .name = "SUNW,isp", | 1449 | .name = "SUNW,isp", |
1460 | .data = &qpti_template, | ||
1461 | }, | 1450 | }, |
1462 | {}, | 1451 | {}, |
1463 | }; | 1452 | }; |
diff --git a/drivers/usb/gadget/u_ether.c b/drivers/usb/gadget/u_ether.c index 6458764994ef..4ec3c0d7a18b 100644 --- a/drivers/usb/gadget/u_ether.c +++ b/drivers/usb/gadget/u_ether.c | |||
@@ -20,6 +20,7 @@ | |||
20 | #include <linux/ctype.h> | 20 | #include <linux/ctype.h> |
21 | #include <linux/etherdevice.h> | 21 | #include <linux/etherdevice.h> |
22 | #include <linux/ethtool.h> | 22 | #include <linux/ethtool.h> |
23 | #include <linux/if_vlan.h> | ||
23 | 24 | ||
24 | #include "u_ether.h" | 25 | #include "u_ether.h" |
25 | 26 | ||
@@ -295,7 +296,7 @@ static void rx_complete(struct usb_ep *ep, struct usb_request *req) | |||
295 | while (skb2) { | 296 | while (skb2) { |
296 | if (status < 0 | 297 | if (status < 0 |
297 | || ETH_HLEN > skb2->len | 298 | || ETH_HLEN > skb2->len |
298 | || skb2->len > ETH_FRAME_LEN) { | 299 | || skb2->len > VLAN_ETH_FRAME_LEN) { |
299 | dev->net->stats.rx_errors++; | 300 | dev->net->stats.rx_errors++; |
300 | dev->net->stats.rx_length_errors++; | 301 | dev->net->stats.rx_length_errors++; |
301 | DBG(dev, "rx length %d\n", skb2->len); | 302 | DBG(dev, "rx length %d\n", skb2->len); |
diff --git a/drivers/usb/host/ehci-mxc.c b/drivers/usb/host/ehci-mxc.c index 4a08fc0b27c9..8e58a5fa1994 100644 --- a/drivers/usb/host/ehci-mxc.c +++ b/drivers/usb/host/ehci-mxc.c | |||
@@ -24,7 +24,6 @@ | |||
24 | #include <linux/usb/ulpi.h> | 24 | #include <linux/usb/ulpi.h> |
25 | #include <linux/slab.h> | 25 | #include <linux/slab.h> |
26 | 26 | ||
27 | #include <mach/hardware.h> | ||
28 | #include <linux/platform_data/usb-ehci-mxc.h> | 27 | #include <linux/platform_data/usb-ehci-mxc.h> |
29 | 28 | ||
30 | #include <asm/mach-types.h> | 29 | #include <asm/mach-types.h> |
diff --git a/drivers/video/imxfb.c b/drivers/video/imxfb.c index cf2688de0832..e501dbc966b3 100644 --- a/drivers/video/imxfb.c +++ b/drivers/video/imxfb.c | |||
@@ -33,7 +33,6 @@ | |||
33 | #include <linux/math64.h> | 33 | #include <linux/math64.h> |
34 | 34 | ||
35 | #include <linux/platform_data/video-imxfb.h> | 35 | #include <linux/platform_data/video-imxfb.h> |
36 | #include <mach/hardware.h> | ||
37 | 36 | ||
38 | /* | 37 | /* |
39 | * Complain if VAR is out of range. | 38 | * Complain if VAR is out of range. |
@@ -53,8 +52,8 @@ | |||
53 | #define LCDC_SIZE 0x04 | 52 | #define LCDC_SIZE 0x04 |
54 | #define SIZE_XMAX(x) ((((x) >> 4) & 0x3f) << 20) | 53 | #define SIZE_XMAX(x) ((((x) >> 4) & 0x3f) << 20) |
55 | 54 | ||
56 | #define YMAX_MASK (cpu_is_mx1() ? 0x1ff : 0x3ff) | 55 | #define YMAX_MASK_IMX1 0x1ff |
57 | #define SIZE_YMAX(y) ((y) & YMAX_MASK) | 56 | #define YMAX_MASK_IMX21 0x3ff |
58 | 57 | ||
59 | #define LCDC_VPW 0x08 | 58 | #define LCDC_VPW 0x08 |
60 | #define VPW_VPW(x) ((x) & 0x3ff) | 59 | #define VPW_VPW(x) ((x) & 0x3ff) |
@@ -128,12 +127,18 @@ struct imxfb_rgb { | |||
128 | struct fb_bitfield transp; | 127 | struct fb_bitfield transp; |
129 | }; | 128 | }; |
130 | 129 | ||
130 | enum imxfb_type { | ||
131 | IMX1_FB, | ||
132 | IMX21_FB, | ||
133 | }; | ||
134 | |||
131 | struct imxfb_info { | 135 | struct imxfb_info { |
132 | struct platform_device *pdev; | 136 | struct platform_device *pdev; |
133 | void __iomem *regs; | 137 | void __iomem *regs; |
134 | struct clk *clk_ipg; | 138 | struct clk *clk_ipg; |
135 | struct clk *clk_ahb; | 139 | struct clk *clk_ahb; |
136 | struct clk *clk_per; | 140 | struct clk *clk_per; |
141 | enum imxfb_type devtype; | ||
137 | 142 | ||
138 | /* | 143 | /* |
139 | * These are the addresses we mapped | 144 | * These are the addresses we mapped |
@@ -168,6 +173,24 @@ struct imxfb_info { | |||
168 | void (*backlight_power)(int); | 173 | void (*backlight_power)(int); |
169 | }; | 174 | }; |
170 | 175 | ||
176 | static struct platform_device_id imxfb_devtype[] = { | ||
177 | { | ||
178 | .name = "imx1-fb", | ||
179 | .driver_data = IMX1_FB, | ||
180 | }, { | ||
181 | .name = "imx21-fb", | ||
182 | .driver_data = IMX21_FB, | ||
183 | }, { | ||
184 | /* sentinel */ | ||
185 | } | ||
186 | }; | ||
187 | MODULE_DEVICE_TABLE(platform, imxfb_devtype); | ||
188 | |||
189 | static inline int is_imx1_fb(struct imxfb_info *fbi) | ||
190 | { | ||
191 | return fbi->devtype == IMX1_FB; | ||
192 | } | ||
193 | |||
171 | #define IMX_NAME "IMX" | 194 | #define IMX_NAME "IMX" |
172 | 195 | ||
173 | /* | 196 | /* |
@@ -366,7 +389,7 @@ static int imxfb_check_var(struct fb_var_screeninfo *var, struct fb_info *info) | |||
366 | break; | 389 | break; |
367 | case 16: | 390 | case 16: |
368 | default: | 391 | default: |
369 | if (cpu_is_mx1()) | 392 | if (is_imx1_fb(fbi)) |
370 | pcr |= PCR_BPIX_12; | 393 | pcr |= PCR_BPIX_12; |
371 | else | 394 | else |
372 | pcr |= PCR_BPIX_16; | 395 | pcr |= PCR_BPIX_16; |
@@ -596,6 +619,7 @@ static struct fb_ops imxfb_ops = { | |||
596 | static int imxfb_activate_var(struct fb_var_screeninfo *var, struct fb_info *info) | 619 | static int imxfb_activate_var(struct fb_var_screeninfo *var, struct fb_info *info) |
597 | { | 620 | { |
598 | struct imxfb_info *fbi = info->par; | 621 | struct imxfb_info *fbi = info->par; |
622 | u32 ymax_mask = is_imx1_fb(fbi) ? YMAX_MASK_IMX1 : YMAX_MASK_IMX21; | ||
599 | 623 | ||
600 | pr_debug("var: xres=%d hslen=%d lm=%d rm=%d\n", | 624 | pr_debug("var: xres=%d hslen=%d lm=%d rm=%d\n", |
601 | var->xres, var->hsync_len, | 625 | var->xres, var->hsync_len, |
@@ -617,7 +641,7 @@ static int imxfb_activate_var(struct fb_var_screeninfo *var, struct fb_info *inf | |||
617 | if (var->right_margin > 255) | 641 | if (var->right_margin > 255) |
618 | printk(KERN_ERR "%s: invalid right_margin %d\n", | 642 | printk(KERN_ERR "%s: invalid right_margin %d\n", |
619 | info->fix.id, var->right_margin); | 643 | info->fix.id, var->right_margin); |
620 | if (var->yres < 1 || var->yres > YMAX_MASK) | 644 | if (var->yres < 1 || var->yres > ymax_mask) |
621 | printk(KERN_ERR "%s: invalid yres %d\n", | 645 | printk(KERN_ERR "%s: invalid yres %d\n", |
622 | info->fix.id, var->yres); | 646 | info->fix.id, var->yres); |
623 | if (var->vsync_len > 100) | 647 | if (var->vsync_len > 100) |
@@ -645,7 +669,7 @@ static int imxfb_activate_var(struct fb_var_screeninfo *var, struct fb_info *inf | |||
645 | VCR_V_WAIT_2(var->upper_margin), | 669 | VCR_V_WAIT_2(var->upper_margin), |
646 | fbi->regs + LCDC_VCR); | 670 | fbi->regs + LCDC_VCR); |
647 | 671 | ||
648 | writel(SIZE_XMAX(var->xres) | SIZE_YMAX(var->yres), | 672 | writel(SIZE_XMAX(var->xres) | (var->yres & ymax_mask), |
649 | fbi->regs + LCDC_SIZE); | 673 | fbi->regs + LCDC_SIZE); |
650 | 674 | ||
651 | writel(fbi->pcr, fbi->regs + LCDC_PCR); | 675 | writel(fbi->pcr, fbi->regs + LCDC_PCR); |
@@ -765,6 +789,7 @@ static int __init imxfb_probe(struct platform_device *pdev) | |||
765 | return -ENOMEM; | 789 | return -ENOMEM; |
766 | 790 | ||
767 | fbi = info->par; | 791 | fbi = info->par; |
792 | fbi->devtype = pdev->id_entry->driver_data; | ||
768 | 793 | ||
769 | if (!fb_mode) | 794 | if (!fb_mode) |
770 | fb_mode = pdata->mode[0].mode.name; | 795 | fb_mode = pdata->mode[0].mode.name; |
@@ -939,6 +964,7 @@ static struct platform_driver imxfb_driver = { | |||
939 | .driver = { | 964 | .driver = { |
940 | .name = DRIVER_NAME, | 965 | .name = DRIVER_NAME, |
941 | }, | 966 | }, |
967 | .id_table = imxfb_devtype, | ||
942 | }; | 968 | }; |
943 | 969 | ||
944 | static int imxfb_setup(void) | 970 | static int imxfb_setup(void) |
diff --git a/drivers/video/mx3fb.c b/drivers/video/mx3fb.c index ce1d452464ed..736887208574 100644 --- a/drivers/video/mx3fb.c +++ b/drivers/video/mx3fb.c | |||
@@ -26,10 +26,9 @@ | |||
26 | #include <linux/console.h> | 26 | #include <linux/console.h> |
27 | #include <linux/clk.h> | 27 | #include <linux/clk.h> |
28 | #include <linux/mutex.h> | 28 | #include <linux/mutex.h> |
29 | #include <linux/dma/ipu-dma.h> | ||
29 | 30 | ||
30 | #include <linux/platform_data/dma-imx.h> | 31 | #include <linux/platform_data/dma-imx.h> |
31 | #include <mach/hardware.h> | ||
32 | #include <mach/ipu.h> | ||
33 | #include <linux/platform_data/video-mx3fb.h> | 32 | #include <linux/platform_data/video-mx3fb.h> |
34 | 33 | ||
35 | #include <asm/io.h> | 34 | #include <asm/io.h> |
diff --git a/drivers/virtio/virtio.c b/drivers/virtio/virtio.c index 1e8659ca27ef..809b0de59c09 100644 --- a/drivers/virtio/virtio.c +++ b/drivers/virtio/virtio.c | |||
@@ -225,8 +225,10 @@ EXPORT_SYMBOL_GPL(register_virtio_device); | |||
225 | 225 | ||
226 | void unregister_virtio_device(struct virtio_device *dev) | 226 | void unregister_virtio_device(struct virtio_device *dev) |
227 | { | 227 | { |
228 | int index = dev->index; /* save for after device release */ | ||
229 | |||
228 | device_unregister(&dev->dev); | 230 | device_unregister(&dev->dev); |
229 | ida_simple_remove(&virtio_index_ida, dev->index); | 231 | ida_simple_remove(&virtio_index_ida, index); |
230 | } | 232 | } |
231 | EXPORT_SYMBOL_GPL(unregister_virtio_device); | 233 | EXPORT_SYMBOL_GPL(unregister_virtio_device); |
232 | 234 | ||
diff --git a/drivers/watchdog/imx2_wdt.c b/drivers/watchdog/imx2_wdt.c index bcfab2b00ad2..9a45d0294cf4 100644 --- a/drivers/watchdog/imx2_wdt.c +++ b/drivers/watchdog/imx2_wdt.c | |||
@@ -33,7 +33,6 @@ | |||
33 | #include <linux/uaccess.h> | 33 | #include <linux/uaccess.h> |
34 | #include <linux/timer.h> | 34 | #include <linux/timer.h> |
35 | #include <linux/jiffies.h> | 35 | #include <linux/jiffies.h> |
36 | #include <mach/hardware.h> | ||
37 | 36 | ||
38 | #define DRIVER_NAME "imx2-wdt" | 37 | #define DRIVER_NAME "imx2-wdt" |
39 | 38 | ||
diff --git a/drivers/xen/Makefile b/drivers/xen/Makefile index 0e8637035457..74354708c6c4 100644 --- a/drivers/xen/Makefile +++ b/drivers/xen/Makefile | |||
@@ -2,6 +2,7 @@ ifneq ($(CONFIG_ARM),y) | |||
2 | obj-y += manage.o balloon.o | 2 | obj-y += manage.o balloon.o |
3 | obj-$(CONFIG_HOTPLUG_CPU) += cpu_hotplug.o | 3 | obj-$(CONFIG_HOTPLUG_CPU) += cpu_hotplug.o |
4 | endif | 4 | endif |
5 | obj-$(CONFIG_X86) += fallback.o | ||
5 | obj-y += grant-table.o features.o events.o | 6 | obj-y += grant-table.o features.o events.o |
6 | obj-y += xenbus/ | 7 | obj-y += xenbus/ |
7 | 8 | ||
diff --git a/drivers/xen/events.c b/drivers/xen/events.c index 912ac81b6dbf..0be4df39e953 100644 --- a/drivers/xen/events.c +++ b/drivers/xen/events.c | |||
@@ -1395,10 +1395,10 @@ void xen_evtchn_do_upcall(struct pt_regs *regs) | |||
1395 | { | 1395 | { |
1396 | struct pt_regs *old_regs = set_irq_regs(regs); | 1396 | struct pt_regs *old_regs = set_irq_regs(regs); |
1397 | 1397 | ||
1398 | irq_enter(); | ||
1398 | #ifdef CONFIG_X86 | 1399 | #ifdef CONFIG_X86 |
1399 | exit_idle(); | 1400 | exit_idle(); |
1400 | #endif | 1401 | #endif |
1401 | irq_enter(); | ||
1402 | 1402 | ||
1403 | __xen_evtchn_do_upcall(); | 1403 | __xen_evtchn_do_upcall(); |
1404 | 1404 | ||
diff --git a/drivers/xen/fallback.c b/drivers/xen/fallback.c new file mode 100644 index 000000000000..0ef7c4d40f86 --- /dev/null +++ b/drivers/xen/fallback.c | |||
@@ -0,0 +1,80 @@ | |||
1 | #include <linux/kernel.h> | ||
2 | #include <linux/string.h> | ||
3 | #include <linux/bug.h> | ||
4 | #include <linux/export.h> | ||
5 | #include <asm/hypervisor.h> | ||
6 | #include <asm/xen/hypercall.h> | ||
7 | |||
8 | int xen_event_channel_op_compat(int cmd, void *arg) | ||
9 | { | ||
10 | struct evtchn_op op; | ||
11 | int rc; | ||
12 | |||
13 | op.cmd = cmd; | ||
14 | memcpy(&op.u, arg, sizeof(op.u)); | ||
15 | rc = _hypercall1(int, event_channel_op_compat, &op); | ||
16 | |||
17 | switch (cmd) { | ||
18 | case EVTCHNOP_close: | ||
19 | case EVTCHNOP_send: | ||
20 | case EVTCHNOP_bind_vcpu: | ||
21 | case EVTCHNOP_unmask: | ||
22 | /* no output */ | ||
23 | break; | ||
24 | |||
25 | #define COPY_BACK(eop) \ | ||
26 | case EVTCHNOP_##eop: \ | ||
27 | memcpy(arg, &op.u.eop, sizeof(op.u.eop)); \ | ||
28 | break | ||
29 | |||
30 | COPY_BACK(bind_interdomain); | ||
31 | COPY_BACK(bind_virq); | ||
32 | COPY_BACK(bind_pirq); | ||
33 | COPY_BACK(status); | ||
34 | COPY_BACK(alloc_unbound); | ||
35 | COPY_BACK(bind_ipi); | ||
36 | #undef COPY_BACK | ||
37 | |||
38 | default: | ||
39 | WARN_ON(rc != -ENOSYS); | ||
40 | break; | ||
41 | } | ||
42 | |||
43 | return rc; | ||
44 | } | ||
45 | EXPORT_SYMBOL_GPL(xen_event_channel_op_compat); | ||
46 | |||
47 | int HYPERVISOR_physdev_op_compat(int cmd, void *arg) | ||
48 | { | ||
49 | struct physdev_op op; | ||
50 | int rc; | ||
51 | |||
52 | op.cmd = cmd; | ||
53 | memcpy(&op.u, arg, sizeof(op.u)); | ||
54 | rc = _hypercall1(int, physdev_op_compat, &op); | ||
55 | |||
56 | switch (cmd) { | ||
57 | case PHYSDEVOP_IRQ_UNMASK_NOTIFY: | ||
58 | case PHYSDEVOP_set_iopl: | ||
59 | case PHYSDEVOP_set_iobitmap: | ||
60 | case PHYSDEVOP_apic_write: | ||
61 | /* no output */ | ||
62 | break; | ||
63 | |||
64 | #define COPY_BACK(pop, fld) \ | ||
65 | case PHYSDEVOP_##pop: \ | ||
66 | memcpy(arg, &op.u.fld, sizeof(op.u.fld)); \ | ||
67 | break | ||
68 | |||
69 | COPY_BACK(irq_status_query, irq_status_query); | ||
70 | COPY_BACK(apic_read, apic_op); | ||
71 | COPY_BACK(ASSIGN_VECTOR, irq_op); | ||
72 | #undef COPY_BACK | ||
73 | |||
74 | default: | ||
75 | WARN_ON(rc != -ENOSYS); | ||
76 | break; | ||
77 | } | ||
78 | |||
79 | return rc; | ||
80 | } | ||
diff --git a/fs/cifs/cifsacl.c b/fs/cifs/cifsacl.c index fc783e264420..0fb15bbbe43c 100644 --- a/fs/cifs/cifsacl.c +++ b/fs/cifs/cifsacl.c | |||
@@ -225,6 +225,13 @@ sid_to_str(struct cifs_sid *sidptr, char *sidstr) | |||
225 | } | 225 | } |
226 | 226 | ||
227 | static void | 227 | static void |
228 | cifs_copy_sid(struct cifs_sid *dst, const struct cifs_sid *src) | ||
229 | { | ||
230 | memcpy(dst, src, sizeof(*dst)); | ||
231 | dst->num_subauth = min_t(u8, src->num_subauth, NUM_SUBAUTHS); | ||
232 | } | ||
233 | |||
234 | static void | ||
228 | id_rb_insert(struct rb_root *root, struct cifs_sid *sidptr, | 235 | id_rb_insert(struct rb_root *root, struct cifs_sid *sidptr, |
229 | struct cifs_sid_id **psidid, char *typestr) | 236 | struct cifs_sid_id **psidid, char *typestr) |
230 | { | 237 | { |
@@ -248,7 +255,7 @@ id_rb_insert(struct rb_root *root, struct cifs_sid *sidptr, | |||
248 | } | 255 | } |
249 | } | 256 | } |
250 | 257 | ||
251 | memcpy(&(*psidid)->sid, sidptr, sizeof(struct cifs_sid)); | 258 | cifs_copy_sid(&(*psidid)->sid, sidptr); |
252 | (*psidid)->time = jiffies - (SID_MAP_RETRY + 1); | 259 | (*psidid)->time = jiffies - (SID_MAP_RETRY + 1); |
253 | (*psidid)->refcount = 0; | 260 | (*psidid)->refcount = 0; |
254 | 261 | ||
@@ -354,7 +361,7 @@ id_to_sid(unsigned long cid, uint sidtype, struct cifs_sid *ssid) | |||
354 | * any fields of the node after a reference is put . | 361 | * any fields of the node after a reference is put . |
355 | */ | 362 | */ |
356 | if (test_bit(SID_ID_MAPPED, &psidid->state)) { | 363 | if (test_bit(SID_ID_MAPPED, &psidid->state)) { |
357 | memcpy(ssid, &psidid->sid, sizeof(struct cifs_sid)); | 364 | cifs_copy_sid(ssid, &psidid->sid); |
358 | psidid->time = jiffies; /* update ts for accessing */ | 365 | psidid->time = jiffies; /* update ts for accessing */ |
359 | goto id_sid_out; | 366 | goto id_sid_out; |
360 | } | 367 | } |
@@ -370,14 +377,14 @@ id_to_sid(unsigned long cid, uint sidtype, struct cifs_sid *ssid) | |||
370 | if (IS_ERR(sidkey)) { | 377 | if (IS_ERR(sidkey)) { |
371 | rc = -EINVAL; | 378 | rc = -EINVAL; |
372 | cFYI(1, "%s: Can't map and id to a SID", __func__); | 379 | cFYI(1, "%s: Can't map and id to a SID", __func__); |
380 | } else if (sidkey->datalen < sizeof(struct cifs_sid)) { | ||
381 | rc = -EIO; | ||
382 | cFYI(1, "%s: Downcall contained malformed key " | ||
383 | "(datalen=%hu)", __func__, sidkey->datalen); | ||
373 | } else { | 384 | } else { |
374 | lsid = (struct cifs_sid *)sidkey->payload.data; | 385 | lsid = (struct cifs_sid *)sidkey->payload.data; |
375 | memcpy(&psidid->sid, lsid, | 386 | cifs_copy_sid(&psidid->sid, lsid); |
376 | sidkey->datalen < sizeof(struct cifs_sid) ? | 387 | cifs_copy_sid(ssid, &psidid->sid); |
377 | sidkey->datalen : sizeof(struct cifs_sid)); | ||
378 | memcpy(ssid, &psidid->sid, | ||
379 | sidkey->datalen < sizeof(struct cifs_sid) ? | ||
380 | sidkey->datalen : sizeof(struct cifs_sid)); | ||
381 | set_bit(SID_ID_MAPPED, &psidid->state); | 388 | set_bit(SID_ID_MAPPED, &psidid->state); |
382 | key_put(sidkey); | 389 | key_put(sidkey); |
383 | kfree(psidid->sidstr); | 390 | kfree(psidid->sidstr); |
@@ -396,7 +403,7 @@ id_to_sid(unsigned long cid, uint sidtype, struct cifs_sid *ssid) | |||
396 | return rc; | 403 | return rc; |
397 | } | 404 | } |
398 | if (test_bit(SID_ID_MAPPED, &psidid->state)) | 405 | if (test_bit(SID_ID_MAPPED, &psidid->state)) |
399 | memcpy(ssid, &psidid->sid, sizeof(struct cifs_sid)); | 406 | cifs_copy_sid(ssid, &psidid->sid); |
400 | else | 407 | else |
401 | rc = -EINVAL; | 408 | rc = -EINVAL; |
402 | } | 409 | } |
@@ -675,8 +682,6 @@ int compare_sids(const struct cifs_sid *ctsid, const struct cifs_sid *cwsid) | |||
675 | static void copy_sec_desc(const struct cifs_ntsd *pntsd, | 682 | static void copy_sec_desc(const struct cifs_ntsd *pntsd, |
676 | struct cifs_ntsd *pnntsd, __u32 sidsoffset) | 683 | struct cifs_ntsd *pnntsd, __u32 sidsoffset) |
677 | { | 684 | { |
678 | int i; | ||
679 | |||
680 | struct cifs_sid *owner_sid_ptr, *group_sid_ptr; | 685 | struct cifs_sid *owner_sid_ptr, *group_sid_ptr; |
681 | struct cifs_sid *nowner_sid_ptr, *ngroup_sid_ptr; | 686 | struct cifs_sid *nowner_sid_ptr, *ngroup_sid_ptr; |
682 | 687 | ||
@@ -692,26 +697,14 @@ static void copy_sec_desc(const struct cifs_ntsd *pntsd, | |||
692 | owner_sid_ptr = (struct cifs_sid *)((char *)pntsd + | 697 | owner_sid_ptr = (struct cifs_sid *)((char *)pntsd + |
693 | le32_to_cpu(pntsd->osidoffset)); | 698 | le32_to_cpu(pntsd->osidoffset)); |
694 | nowner_sid_ptr = (struct cifs_sid *)((char *)pnntsd + sidsoffset); | 699 | nowner_sid_ptr = (struct cifs_sid *)((char *)pnntsd + sidsoffset); |
695 | 700 | cifs_copy_sid(nowner_sid_ptr, owner_sid_ptr); | |
696 | nowner_sid_ptr->revision = owner_sid_ptr->revision; | ||
697 | nowner_sid_ptr->num_subauth = owner_sid_ptr->num_subauth; | ||
698 | for (i = 0; i < 6; i++) | ||
699 | nowner_sid_ptr->authority[i] = owner_sid_ptr->authority[i]; | ||
700 | for (i = 0; i < 5; i++) | ||
701 | nowner_sid_ptr->sub_auth[i] = owner_sid_ptr->sub_auth[i]; | ||
702 | 701 | ||
703 | /* copy group sid */ | 702 | /* copy group sid */ |
704 | group_sid_ptr = (struct cifs_sid *)((char *)pntsd + | 703 | group_sid_ptr = (struct cifs_sid *)((char *)pntsd + |
705 | le32_to_cpu(pntsd->gsidoffset)); | 704 | le32_to_cpu(pntsd->gsidoffset)); |
706 | ngroup_sid_ptr = (struct cifs_sid *)((char *)pnntsd + sidsoffset + | 705 | ngroup_sid_ptr = (struct cifs_sid *)((char *)pnntsd + sidsoffset + |
707 | sizeof(struct cifs_sid)); | 706 | sizeof(struct cifs_sid)); |
708 | 707 | cifs_copy_sid(ngroup_sid_ptr, group_sid_ptr); | |
709 | ngroup_sid_ptr->revision = group_sid_ptr->revision; | ||
710 | ngroup_sid_ptr->num_subauth = group_sid_ptr->num_subauth; | ||
711 | for (i = 0; i < 6; i++) | ||
712 | ngroup_sid_ptr->authority[i] = group_sid_ptr->authority[i]; | ||
713 | for (i = 0; i < 5; i++) | ||
714 | ngroup_sid_ptr->sub_auth[i] = group_sid_ptr->sub_auth[i]; | ||
715 | 708 | ||
716 | return; | 709 | return; |
717 | } | 710 | } |
@@ -1120,8 +1113,7 @@ static int build_sec_desc(struct cifs_ntsd *pntsd, struct cifs_ntsd *pnntsd, | |||
1120 | kfree(nowner_sid_ptr); | 1113 | kfree(nowner_sid_ptr); |
1121 | return rc; | 1114 | return rc; |
1122 | } | 1115 | } |
1123 | memcpy(owner_sid_ptr, nowner_sid_ptr, | 1116 | cifs_copy_sid(owner_sid_ptr, nowner_sid_ptr); |
1124 | sizeof(struct cifs_sid)); | ||
1125 | kfree(nowner_sid_ptr); | 1117 | kfree(nowner_sid_ptr); |
1126 | *aclflag = CIFS_ACL_OWNER; | 1118 | *aclflag = CIFS_ACL_OWNER; |
1127 | } | 1119 | } |
@@ -1139,8 +1131,7 @@ static int build_sec_desc(struct cifs_ntsd *pntsd, struct cifs_ntsd *pnntsd, | |||
1139 | kfree(ngroup_sid_ptr); | 1131 | kfree(ngroup_sid_ptr); |
1140 | return rc; | 1132 | return rc; |
1141 | } | 1133 | } |
1142 | memcpy(group_sid_ptr, ngroup_sid_ptr, | 1134 | cifs_copy_sid(group_sid_ptr, ngroup_sid_ptr); |
1143 | sizeof(struct cifs_sid)); | ||
1144 | kfree(ngroup_sid_ptr); | 1135 | kfree(ngroup_sid_ptr); |
1145 | *aclflag = CIFS_ACL_GROUP; | 1136 | *aclflag = CIFS_ACL_GROUP; |
1146 | } | 1137 | } |
diff --git a/fs/cifs/dir.c b/fs/cifs/dir.c index 7c0a81283645..d3671f2acb29 100644 --- a/fs/cifs/dir.c +++ b/fs/cifs/dir.c | |||
@@ -398,7 +398,16 @@ cifs_atomic_open(struct inode *inode, struct dentry *direntry, | |||
398 | * in network traffic in the other paths. | 398 | * in network traffic in the other paths. |
399 | */ | 399 | */ |
400 | if (!(oflags & O_CREAT)) { | 400 | if (!(oflags & O_CREAT)) { |
401 | struct dentry *res = cifs_lookup(inode, direntry, 0); | 401 | struct dentry *res; |
402 | |||
403 | /* | ||
404 | * Check for hashed negative dentry. We have already revalidated | ||
405 | * the dentry and it is fine. No need to perform another lookup. | ||
406 | */ | ||
407 | if (!d_unhashed(direntry)) | ||
408 | return -ENOENT; | ||
409 | |||
410 | res = cifs_lookup(inode, direntry, 0); | ||
402 | if (IS_ERR(res)) | 411 | if (IS_ERR(res)) |
403 | return PTR_ERR(res); | 412 | return PTR_ERR(res); |
404 | 413 | ||
diff --git a/fs/eventpoll.c b/fs/eventpoll.c index da72250ddc1c..cd96649bfe62 100644 --- a/fs/eventpoll.c +++ b/fs/eventpoll.c | |||
@@ -346,7 +346,7 @@ static inline struct epitem *ep_item_from_epqueue(poll_table *p) | |||
346 | /* Tells if the epoll_ctl(2) operation needs an event copy from userspace */ | 346 | /* Tells if the epoll_ctl(2) operation needs an event copy from userspace */ |
347 | static inline int ep_op_has_event(int op) | 347 | static inline int ep_op_has_event(int op) |
348 | { | 348 | { |
349 | return op == EPOLL_CTL_ADD || op == EPOLL_CTL_MOD; | 349 | return op != EPOLL_CTL_DEL; |
350 | } | 350 | } |
351 | 351 | ||
352 | /* Initialize the poll safe wake up structure */ | 352 | /* Initialize the poll safe wake up structure */ |
@@ -676,34 +676,6 @@ static int ep_remove(struct eventpoll *ep, struct epitem *epi) | |||
676 | return 0; | 676 | return 0; |
677 | } | 677 | } |
678 | 678 | ||
679 | /* | ||
680 | * Disables a "struct epitem" in the eventpoll set. Returns -EBUSY if the item | ||
681 | * had no event flags set, indicating that another thread may be currently | ||
682 | * handling that item's events (in the case that EPOLLONESHOT was being | ||
683 | * used). Otherwise a zero result indicates that the item has been disabled | ||
684 | * from receiving events. A disabled item may be re-enabled via | ||
685 | * EPOLL_CTL_MOD. Must be called with "mtx" held. | ||
686 | */ | ||
687 | static int ep_disable(struct eventpoll *ep, struct epitem *epi) | ||
688 | { | ||
689 | int result = 0; | ||
690 | unsigned long flags; | ||
691 | |||
692 | spin_lock_irqsave(&ep->lock, flags); | ||
693 | if (epi->event.events & ~EP_PRIVATE_BITS) { | ||
694 | if (ep_is_linked(&epi->rdllink)) | ||
695 | list_del_init(&epi->rdllink); | ||
696 | /* Ensure ep_poll_callback will not add epi back onto ready | ||
697 | list: */ | ||
698 | epi->event.events &= EP_PRIVATE_BITS; | ||
699 | } | ||
700 | else | ||
701 | result = -EBUSY; | ||
702 | spin_unlock_irqrestore(&ep->lock, flags); | ||
703 | |||
704 | return result; | ||
705 | } | ||
706 | |||
707 | static void ep_free(struct eventpoll *ep) | 679 | static void ep_free(struct eventpoll *ep) |
708 | { | 680 | { |
709 | struct rb_node *rbp; | 681 | struct rb_node *rbp; |
@@ -1048,6 +1020,8 @@ static void ep_rbtree_insert(struct eventpoll *ep, struct epitem *epi) | |||
1048 | rb_insert_color(&epi->rbn, &ep->rbr); | 1020 | rb_insert_color(&epi->rbn, &ep->rbr); |
1049 | } | 1021 | } |
1050 | 1022 | ||
1023 | |||
1024 | |||
1051 | #define PATH_ARR_SIZE 5 | 1025 | #define PATH_ARR_SIZE 5 |
1052 | /* | 1026 | /* |
1053 | * These are the number paths of length 1 to 5, that we are allowing to emanate | 1027 | * These are the number paths of length 1 to 5, that we are allowing to emanate |
@@ -1813,12 +1787,6 @@ SYSCALL_DEFINE4(epoll_ctl, int, epfd, int, op, int, fd, | |||
1813 | } else | 1787 | } else |
1814 | error = -ENOENT; | 1788 | error = -ENOENT; |
1815 | break; | 1789 | break; |
1816 | case EPOLL_CTL_DISABLE: | ||
1817 | if (epi) | ||
1818 | error = ep_disable(ep, epi); | ||
1819 | else | ||
1820 | error = -ENOENT; | ||
1821 | break; | ||
1822 | } | 1790 | } |
1823 | mutex_unlock(&ep->mtx); | 1791 | mutex_unlock(&ep->mtx); |
1824 | 1792 | ||
diff --git a/fs/gfs2/file.c b/fs/gfs2/file.c index 0def0504afc1..e056b4ce4877 100644 --- a/fs/gfs2/file.c +++ b/fs/gfs2/file.c | |||
@@ -516,15 +516,13 @@ static int gfs2_mmap(struct file *file, struct vm_area_struct *vma) | |||
516 | struct gfs2_holder i_gh; | 516 | struct gfs2_holder i_gh; |
517 | int error; | 517 | int error; |
518 | 518 | ||
519 | gfs2_holder_init(ip->i_gl, LM_ST_SHARED, LM_FLAG_ANY, &i_gh); | 519 | error = gfs2_glock_nq_init(ip->i_gl, LM_ST_SHARED, LM_FLAG_ANY, |
520 | error = gfs2_glock_nq(&i_gh); | 520 | &i_gh); |
521 | if (error == 0) { | ||
522 | file_accessed(file); | ||
523 | gfs2_glock_dq(&i_gh); | ||
524 | } | ||
525 | gfs2_holder_uninit(&i_gh); | ||
526 | if (error) | 521 | if (error) |
527 | return error; | 522 | return error; |
523 | /* grab lock to update inode */ | ||
524 | gfs2_glock_dq_uninit(&i_gh); | ||
525 | file_accessed(file); | ||
528 | } | 526 | } |
529 | vma->vm_ops = &gfs2_vm_ops; | 527 | vma->vm_ops = &gfs2_vm_ops; |
530 | 528 | ||
@@ -677,10 +675,8 @@ static ssize_t gfs2_file_aio_write(struct kiocb *iocb, const struct iovec *iov, | |||
677 | size_t writesize = iov_length(iov, nr_segs); | 675 | size_t writesize = iov_length(iov, nr_segs); |
678 | struct dentry *dentry = file->f_dentry; | 676 | struct dentry *dentry = file->f_dentry; |
679 | struct gfs2_inode *ip = GFS2_I(dentry->d_inode); | 677 | struct gfs2_inode *ip = GFS2_I(dentry->d_inode); |
680 | struct gfs2_sbd *sdp; | ||
681 | int ret; | 678 | int ret; |
682 | 679 | ||
683 | sdp = GFS2_SB(file->f_mapping->host); | ||
684 | ret = gfs2_rs_alloc(ip); | 680 | ret = gfs2_rs_alloc(ip); |
685 | if (ret) | 681 | if (ret) |
686 | return ret; | 682 | return ret; |
diff --git a/fs/gfs2/lops.c b/fs/gfs2/lops.c index 8ff95a2d54ee..9ceccb1595a3 100644 --- a/fs/gfs2/lops.c +++ b/fs/gfs2/lops.c | |||
@@ -393,12 +393,10 @@ static void buf_lo_add(struct gfs2_sbd *sdp, struct gfs2_bufdata *bd) | |||
393 | struct gfs2_meta_header *mh; | 393 | struct gfs2_meta_header *mh; |
394 | struct gfs2_trans *tr; | 394 | struct gfs2_trans *tr; |
395 | 395 | ||
396 | lock_buffer(bd->bd_bh); | ||
397 | gfs2_log_lock(sdp); | ||
398 | tr = current->journal_info; | 396 | tr = current->journal_info; |
399 | tr->tr_touched = 1; | 397 | tr->tr_touched = 1; |
400 | if (!list_empty(&bd->bd_list)) | 398 | if (!list_empty(&bd->bd_list)) |
401 | goto out; | 399 | return; |
402 | set_bit(GLF_LFLUSH, &bd->bd_gl->gl_flags); | 400 | set_bit(GLF_LFLUSH, &bd->bd_gl->gl_flags); |
403 | set_bit(GLF_DIRTY, &bd->bd_gl->gl_flags); | 401 | set_bit(GLF_DIRTY, &bd->bd_gl->gl_flags); |
404 | mh = (struct gfs2_meta_header *)bd->bd_bh->b_data; | 402 | mh = (struct gfs2_meta_header *)bd->bd_bh->b_data; |
@@ -414,9 +412,6 @@ static void buf_lo_add(struct gfs2_sbd *sdp, struct gfs2_bufdata *bd) | |||
414 | sdp->sd_log_num_buf++; | 412 | sdp->sd_log_num_buf++; |
415 | list_add(&bd->bd_list, &sdp->sd_log_le_buf); | 413 | list_add(&bd->bd_list, &sdp->sd_log_le_buf); |
416 | tr->tr_num_buf_new++; | 414 | tr->tr_num_buf_new++; |
417 | out: | ||
418 | gfs2_log_unlock(sdp); | ||
419 | unlock_buffer(bd->bd_bh); | ||
420 | } | 415 | } |
421 | 416 | ||
422 | static void gfs2_check_magic(struct buffer_head *bh) | 417 | static void gfs2_check_magic(struct buffer_head *bh) |
@@ -621,7 +616,6 @@ static void revoke_lo_add(struct gfs2_sbd *sdp, struct gfs2_bufdata *bd) | |||
621 | 616 | ||
622 | static void revoke_lo_before_commit(struct gfs2_sbd *sdp) | 617 | static void revoke_lo_before_commit(struct gfs2_sbd *sdp) |
623 | { | 618 | { |
624 | struct gfs2_log_descriptor *ld; | ||
625 | struct gfs2_meta_header *mh; | 619 | struct gfs2_meta_header *mh; |
626 | unsigned int offset; | 620 | unsigned int offset; |
627 | struct list_head *head = &sdp->sd_log_le_revoke; | 621 | struct list_head *head = &sdp->sd_log_le_revoke; |
@@ -634,7 +628,6 @@ static void revoke_lo_before_commit(struct gfs2_sbd *sdp) | |||
634 | 628 | ||
635 | length = gfs2_struct2blk(sdp, sdp->sd_log_num_revoke, sizeof(u64)); | 629 | length = gfs2_struct2blk(sdp, sdp->sd_log_num_revoke, sizeof(u64)); |
636 | page = gfs2_get_log_desc(sdp, GFS2_LOG_DESC_REVOKE, length, sdp->sd_log_num_revoke); | 630 | page = gfs2_get_log_desc(sdp, GFS2_LOG_DESC_REVOKE, length, sdp->sd_log_num_revoke); |
637 | ld = page_address(page); | ||
638 | offset = sizeof(struct gfs2_log_descriptor); | 631 | offset = sizeof(struct gfs2_log_descriptor); |
639 | 632 | ||
640 | list_for_each_entry(bd, head, bd_list) { | 633 | list_for_each_entry(bd, head, bd_list) { |
@@ -777,12 +770,10 @@ static void databuf_lo_add(struct gfs2_sbd *sdp, struct gfs2_bufdata *bd) | |||
777 | struct address_space *mapping = bd->bd_bh->b_page->mapping; | 770 | struct address_space *mapping = bd->bd_bh->b_page->mapping; |
778 | struct gfs2_inode *ip = GFS2_I(mapping->host); | 771 | struct gfs2_inode *ip = GFS2_I(mapping->host); |
779 | 772 | ||
780 | lock_buffer(bd->bd_bh); | ||
781 | gfs2_log_lock(sdp); | ||
782 | if (tr) | 773 | if (tr) |
783 | tr->tr_touched = 1; | 774 | tr->tr_touched = 1; |
784 | if (!list_empty(&bd->bd_list)) | 775 | if (!list_empty(&bd->bd_list)) |
785 | goto out; | 776 | return; |
786 | set_bit(GLF_LFLUSH, &bd->bd_gl->gl_flags); | 777 | set_bit(GLF_LFLUSH, &bd->bd_gl->gl_flags); |
787 | set_bit(GLF_DIRTY, &bd->bd_gl->gl_flags); | 778 | set_bit(GLF_DIRTY, &bd->bd_gl->gl_flags); |
788 | if (gfs2_is_jdata(ip)) { | 779 | if (gfs2_is_jdata(ip)) { |
@@ -793,9 +784,6 @@ static void databuf_lo_add(struct gfs2_sbd *sdp, struct gfs2_bufdata *bd) | |||
793 | } else { | 784 | } else { |
794 | list_add_tail(&bd->bd_list, &sdp->sd_log_le_ordered); | 785 | list_add_tail(&bd->bd_list, &sdp->sd_log_le_ordered); |
795 | } | 786 | } |
796 | out: | ||
797 | gfs2_log_unlock(sdp); | ||
798 | unlock_buffer(bd->bd_bh); | ||
799 | } | 787 | } |
800 | 788 | ||
801 | /** | 789 | /** |
diff --git a/fs/gfs2/quota.c b/fs/gfs2/quota.c index 40c4b0d42fa8..c5af8e18f27a 100644 --- a/fs/gfs2/quota.c +++ b/fs/gfs2/quota.c | |||
@@ -497,8 +497,11 @@ int gfs2_quota_hold(struct gfs2_inode *ip, u32 uid, u32 gid) | |||
497 | struct gfs2_quota_data **qd; | 497 | struct gfs2_quota_data **qd; |
498 | int error; | 498 | int error; |
499 | 499 | ||
500 | if (ip->i_res == NULL) | 500 | if (ip->i_res == NULL) { |
501 | gfs2_rs_alloc(ip); | 501 | error = gfs2_rs_alloc(ip); |
502 | if (error) | ||
503 | return error; | ||
504 | } | ||
502 | 505 | ||
503 | qd = ip->i_res->rs_qa_qd; | 506 | qd = ip->i_res->rs_qa_qd; |
504 | 507 | ||
diff --git a/fs/gfs2/rgrp.c b/fs/gfs2/rgrp.c index 3cc402ce6fea..38fe18f2f055 100644 --- a/fs/gfs2/rgrp.c +++ b/fs/gfs2/rgrp.c | |||
@@ -553,7 +553,6 @@ void gfs2_free_clones(struct gfs2_rgrpd *rgd) | |||
553 | */ | 553 | */ |
554 | int gfs2_rs_alloc(struct gfs2_inode *ip) | 554 | int gfs2_rs_alloc(struct gfs2_inode *ip) |
555 | { | 555 | { |
556 | int error = 0; | ||
557 | struct gfs2_blkreserv *res; | 556 | struct gfs2_blkreserv *res; |
558 | 557 | ||
559 | if (ip->i_res) | 558 | if (ip->i_res) |
@@ -561,7 +560,7 @@ int gfs2_rs_alloc(struct gfs2_inode *ip) | |||
561 | 560 | ||
562 | res = kmem_cache_zalloc(gfs2_rsrv_cachep, GFP_NOFS); | 561 | res = kmem_cache_zalloc(gfs2_rsrv_cachep, GFP_NOFS); |
563 | if (!res) | 562 | if (!res) |
564 | error = -ENOMEM; | 563 | return -ENOMEM; |
565 | 564 | ||
566 | RB_CLEAR_NODE(&res->rs_node); | 565 | RB_CLEAR_NODE(&res->rs_node); |
567 | 566 | ||
@@ -571,7 +570,7 @@ int gfs2_rs_alloc(struct gfs2_inode *ip) | |||
571 | else | 570 | else |
572 | ip->i_res = res; | 571 | ip->i_res = res; |
573 | up_write(&ip->i_rw_mutex); | 572 | up_write(&ip->i_rw_mutex); |
574 | return error; | 573 | return 0; |
575 | } | 574 | } |
576 | 575 | ||
577 | static void dump_rs(struct seq_file *seq, const struct gfs2_blkreserv *rs) | 576 | static void dump_rs(struct seq_file *seq, const struct gfs2_blkreserv *rs) |
@@ -1263,7 +1262,9 @@ int gfs2_fitrim(struct file *filp, void __user *argp) | |||
1263 | int ret = 0; | 1262 | int ret = 0; |
1264 | u64 amt; | 1263 | u64 amt; |
1265 | u64 trimmed = 0; | 1264 | u64 trimmed = 0; |
1265 | u64 start, end, minlen; | ||
1266 | unsigned int x; | 1266 | unsigned int x; |
1267 | unsigned bs_shift = sdp->sd_sb.sb_bsize_shift; | ||
1267 | 1268 | ||
1268 | if (!capable(CAP_SYS_ADMIN)) | 1269 | if (!capable(CAP_SYS_ADMIN)) |
1269 | return -EPERM; | 1270 | return -EPERM; |
@@ -1271,19 +1272,25 @@ int gfs2_fitrim(struct file *filp, void __user *argp) | |||
1271 | if (!blk_queue_discard(q)) | 1272 | if (!blk_queue_discard(q)) |
1272 | return -EOPNOTSUPP; | 1273 | return -EOPNOTSUPP; |
1273 | 1274 | ||
1274 | if (argp == NULL) { | 1275 | if (copy_from_user(&r, argp, sizeof(r))) |
1275 | r.start = 0; | ||
1276 | r.len = ULLONG_MAX; | ||
1277 | r.minlen = 0; | ||
1278 | } else if (copy_from_user(&r, argp, sizeof(r))) | ||
1279 | return -EFAULT; | 1276 | return -EFAULT; |
1280 | 1277 | ||
1281 | ret = gfs2_rindex_update(sdp); | 1278 | ret = gfs2_rindex_update(sdp); |
1282 | if (ret) | 1279 | if (ret) |
1283 | return ret; | 1280 | return ret; |
1284 | 1281 | ||
1285 | rgd = gfs2_blk2rgrpd(sdp, r.start, 0); | 1282 | start = r.start >> bs_shift; |
1286 | rgd_end = gfs2_blk2rgrpd(sdp, r.start + r.len, 0); | 1283 | end = start + (r.len >> bs_shift); |
1284 | minlen = max_t(u64, r.minlen, | ||
1285 | q->limits.discard_granularity) >> bs_shift; | ||
1286 | |||
1287 | rgd = gfs2_blk2rgrpd(sdp, start, 0); | ||
1288 | rgd_end = gfs2_blk2rgrpd(sdp, end - 1, 0); | ||
1289 | |||
1290 | if (end <= start || | ||
1291 | minlen > sdp->sd_max_rg_data || | ||
1292 | start > rgd_end->rd_data0 + rgd_end->rd_data) | ||
1293 | return -EINVAL; | ||
1287 | 1294 | ||
1288 | while (1) { | 1295 | while (1) { |
1289 | 1296 | ||
@@ -1295,7 +1302,9 @@ int gfs2_fitrim(struct file *filp, void __user *argp) | |||
1295 | /* Trim each bitmap in the rgrp */ | 1302 | /* Trim each bitmap in the rgrp */ |
1296 | for (x = 0; x < rgd->rd_length; x++) { | 1303 | for (x = 0; x < rgd->rd_length; x++) { |
1297 | struct gfs2_bitmap *bi = rgd->rd_bits + x; | 1304 | struct gfs2_bitmap *bi = rgd->rd_bits + x; |
1298 | ret = gfs2_rgrp_send_discards(sdp, rgd->rd_data0, NULL, bi, r.minlen, &amt); | 1305 | ret = gfs2_rgrp_send_discards(sdp, |
1306 | rgd->rd_data0, NULL, bi, minlen, | ||
1307 | &amt); | ||
1299 | if (ret) { | 1308 | if (ret) { |
1300 | gfs2_glock_dq_uninit(&gh); | 1309 | gfs2_glock_dq_uninit(&gh); |
1301 | goto out; | 1310 | goto out; |
@@ -1324,7 +1333,7 @@ int gfs2_fitrim(struct file *filp, void __user *argp) | |||
1324 | 1333 | ||
1325 | out: | 1334 | out: |
1326 | r.len = trimmed << 9; | 1335 | r.len = trimmed << 9; |
1327 | if (argp && copy_to_user(argp, &r, sizeof(r))) | 1336 | if (copy_to_user(argp, &r, sizeof(r))) |
1328 | return -EFAULT; | 1337 | return -EFAULT; |
1329 | 1338 | ||
1330 | return ret; | 1339 | return ret; |
diff --git a/fs/gfs2/super.c b/fs/gfs2/super.c index bc737261f234..d6488674d916 100644 --- a/fs/gfs2/super.c +++ b/fs/gfs2/super.c | |||
@@ -810,7 +810,8 @@ static void gfs2_dirty_inode(struct inode *inode, int flags) | |||
810 | return; | 810 | return; |
811 | } | 811 | } |
812 | need_unlock = 1; | 812 | need_unlock = 1; |
813 | } | 813 | } else if (WARN_ON_ONCE(ip->i_gl->gl_state != LM_ST_EXCLUSIVE)) |
814 | return; | ||
814 | 815 | ||
815 | if (current->journal_info == NULL) { | 816 | if (current->journal_info == NULL) { |
816 | ret = gfs2_trans_begin(sdp, RES_DINODE, 0); | 817 | ret = gfs2_trans_begin(sdp, RES_DINODE, 0); |
diff --git a/fs/gfs2/trans.c b/fs/gfs2/trans.c index adbd27875ef9..413627072f36 100644 --- a/fs/gfs2/trans.c +++ b/fs/gfs2/trans.c | |||
@@ -155,14 +155,22 @@ void gfs2_trans_add_bh(struct gfs2_glock *gl, struct buffer_head *bh, int meta) | |||
155 | struct gfs2_sbd *sdp = gl->gl_sbd; | 155 | struct gfs2_sbd *sdp = gl->gl_sbd; |
156 | struct gfs2_bufdata *bd; | 156 | struct gfs2_bufdata *bd; |
157 | 157 | ||
158 | lock_buffer(bh); | ||
159 | gfs2_log_lock(sdp); | ||
158 | bd = bh->b_private; | 160 | bd = bh->b_private; |
159 | if (bd) | 161 | if (bd) |
160 | gfs2_assert(sdp, bd->bd_gl == gl); | 162 | gfs2_assert(sdp, bd->bd_gl == gl); |
161 | else { | 163 | else { |
164 | gfs2_log_unlock(sdp); | ||
165 | unlock_buffer(bh); | ||
162 | gfs2_attach_bufdata(gl, bh, meta); | 166 | gfs2_attach_bufdata(gl, bh, meta); |
163 | bd = bh->b_private; | 167 | bd = bh->b_private; |
168 | lock_buffer(bh); | ||
169 | gfs2_log_lock(sdp); | ||
164 | } | 170 | } |
165 | lops_add(sdp, bd); | 171 | lops_add(sdp, bd); |
172 | gfs2_log_unlock(sdp); | ||
173 | unlock_buffer(bh); | ||
166 | } | 174 | } |
167 | 175 | ||
168 | void gfs2_trans_add_revoke(struct gfs2_sbd *sdp, struct gfs2_bufdata *bd) | 176 | void gfs2_trans_add_revoke(struct gfs2_sbd *sdp, struct gfs2_bufdata *bd) |
diff --git a/fs/notify/fanotify/fanotify.c b/fs/notify/fanotify/fanotify.c index f35794b97e8e..a50636025364 100644 --- a/fs/notify/fanotify/fanotify.c +++ b/fs/notify/fanotify/fanotify.c | |||
@@ -21,6 +21,7 @@ static bool should_merge(struct fsnotify_event *old, struct fsnotify_event *new) | |||
21 | if ((old->path.mnt == new->path.mnt) && | 21 | if ((old->path.mnt == new->path.mnt) && |
22 | (old->path.dentry == new->path.dentry)) | 22 | (old->path.dentry == new->path.dentry)) |
23 | return true; | 23 | return true; |
24 | break; | ||
24 | case (FSNOTIFY_EVENT_NONE): | 25 | case (FSNOTIFY_EVENT_NONE): |
25 | return true; | 26 | return true; |
26 | default: | 27 | default: |
diff --git a/fs/xfs/xfs_alloc.c b/fs/xfs/xfs_alloc.c index 4f33c32affe3..335206a9c698 100644 --- a/fs/xfs/xfs_alloc.c +++ b/fs/xfs/xfs_alloc.c | |||
@@ -1866,6 +1866,7 @@ xfs_alloc_fix_freelist( | |||
1866 | /* | 1866 | /* |
1867 | * Initialize the args structure. | 1867 | * Initialize the args structure. |
1868 | */ | 1868 | */ |
1869 | memset(&targs, 0, sizeof(targs)); | ||
1869 | targs.tp = tp; | 1870 | targs.tp = tp; |
1870 | targs.mp = mp; | 1871 | targs.mp = mp; |
1871 | targs.agbp = agbp; | 1872 | targs.agbp = agbp; |
@@ -2207,7 +2208,7 @@ xfs_alloc_read_agf( | |||
2207 | * group or loop over the allocation groups to find the result. | 2208 | * group or loop over the allocation groups to find the result. |
2208 | */ | 2209 | */ |
2209 | int /* error */ | 2210 | int /* error */ |
2210 | __xfs_alloc_vextent( | 2211 | xfs_alloc_vextent( |
2211 | xfs_alloc_arg_t *args) /* allocation argument structure */ | 2212 | xfs_alloc_arg_t *args) /* allocation argument structure */ |
2212 | { | 2213 | { |
2213 | xfs_agblock_t agsize; /* allocation group size */ | 2214 | xfs_agblock_t agsize; /* allocation group size */ |
@@ -2417,46 +2418,6 @@ error0: | |||
2417 | return error; | 2418 | return error; |
2418 | } | 2419 | } |
2419 | 2420 | ||
2420 | static void | ||
2421 | xfs_alloc_vextent_worker( | ||
2422 | struct work_struct *work) | ||
2423 | { | ||
2424 | struct xfs_alloc_arg *args = container_of(work, | ||
2425 | struct xfs_alloc_arg, work); | ||
2426 | unsigned long pflags; | ||
2427 | |||
2428 | /* we are in a transaction context here */ | ||
2429 | current_set_flags_nested(&pflags, PF_FSTRANS); | ||
2430 | |||
2431 | args->result = __xfs_alloc_vextent(args); | ||
2432 | complete(args->done); | ||
2433 | |||
2434 | current_restore_flags_nested(&pflags, PF_FSTRANS); | ||
2435 | } | ||
2436 | |||
2437 | /* | ||
2438 | * Data allocation requests often come in with little stack to work on. Push | ||
2439 | * them off to a worker thread so there is lots of stack to use. Metadata | ||
2440 | * requests, OTOH, are generally from low stack usage paths, so avoid the | ||
2441 | * context switch overhead here. | ||
2442 | */ | ||
2443 | int | ||
2444 | xfs_alloc_vextent( | ||
2445 | struct xfs_alloc_arg *args) | ||
2446 | { | ||
2447 | DECLARE_COMPLETION_ONSTACK(done); | ||
2448 | |||
2449 | if (!args->userdata) | ||
2450 | return __xfs_alloc_vextent(args); | ||
2451 | |||
2452 | |||
2453 | args->done = &done; | ||
2454 | INIT_WORK_ONSTACK(&args->work, xfs_alloc_vextent_worker); | ||
2455 | queue_work(xfs_alloc_wq, &args->work); | ||
2456 | wait_for_completion(&done); | ||
2457 | return args->result; | ||
2458 | } | ||
2459 | |||
2460 | /* | 2421 | /* |
2461 | * Free an extent. | 2422 | * Free an extent. |
2462 | * Just break up the extent address and hand off to xfs_free_ag_extent | 2423 | * Just break up the extent address and hand off to xfs_free_ag_extent |
diff --git a/fs/xfs/xfs_alloc.h b/fs/xfs/xfs_alloc.h index 93be4a667ca1..feacb061bab7 100644 --- a/fs/xfs/xfs_alloc.h +++ b/fs/xfs/xfs_alloc.h | |||
@@ -120,9 +120,6 @@ typedef struct xfs_alloc_arg { | |||
120 | char isfl; /* set if is freelist blocks - !acctg */ | 120 | char isfl; /* set if is freelist blocks - !acctg */ |
121 | char userdata; /* set if this is user data */ | 121 | char userdata; /* set if this is user data */ |
122 | xfs_fsblock_t firstblock; /* io first block allocated */ | 122 | xfs_fsblock_t firstblock; /* io first block allocated */ |
123 | struct completion *done; | ||
124 | struct work_struct work; | ||
125 | int result; | ||
126 | } xfs_alloc_arg_t; | 123 | } xfs_alloc_arg_t; |
127 | 124 | ||
128 | /* | 125 | /* |
diff --git a/fs/xfs/xfs_alloc_btree.c b/fs/xfs/xfs_alloc_btree.c index f1647caace8f..f7876c6d6165 100644 --- a/fs/xfs/xfs_alloc_btree.c +++ b/fs/xfs/xfs_alloc_btree.c | |||
@@ -121,6 +121,8 @@ xfs_allocbt_free_block( | |||
121 | xfs_extent_busy_insert(cur->bc_tp, be32_to_cpu(agf->agf_seqno), bno, 1, | 121 | xfs_extent_busy_insert(cur->bc_tp, be32_to_cpu(agf->agf_seqno), bno, 1, |
122 | XFS_EXTENT_BUSY_SKIP_DISCARD); | 122 | XFS_EXTENT_BUSY_SKIP_DISCARD); |
123 | xfs_trans_agbtree_delta(cur->bc_tp, -1); | 123 | xfs_trans_agbtree_delta(cur->bc_tp, -1); |
124 | |||
125 | xfs_trans_binval(cur->bc_tp, bp); | ||
124 | return 0; | 126 | return 0; |
125 | } | 127 | } |
126 | 128 | ||
diff --git a/fs/xfs/xfs_bmap.c b/fs/xfs/xfs_bmap.c index 848ffa77707b..83d0cf3df930 100644 --- a/fs/xfs/xfs_bmap.c +++ b/fs/xfs/xfs_bmap.c | |||
@@ -2437,6 +2437,7 @@ xfs_bmap_btalloc( | |||
2437 | * Normal allocation, done through xfs_alloc_vextent. | 2437 | * Normal allocation, done through xfs_alloc_vextent. |
2438 | */ | 2438 | */ |
2439 | tryagain = isaligned = 0; | 2439 | tryagain = isaligned = 0; |
2440 | memset(&args, 0, sizeof(args)); | ||
2440 | args.tp = ap->tp; | 2441 | args.tp = ap->tp; |
2441 | args.mp = mp; | 2442 | args.mp = mp; |
2442 | args.fsbno = ap->blkno; | 2443 | args.fsbno = ap->blkno; |
@@ -3082,6 +3083,7 @@ xfs_bmap_extents_to_btree( | |||
3082 | * Convert to a btree with two levels, one record in root. | 3083 | * Convert to a btree with two levels, one record in root. |
3083 | */ | 3084 | */ |
3084 | XFS_IFORK_FMT_SET(ip, whichfork, XFS_DINODE_FMT_BTREE); | 3085 | XFS_IFORK_FMT_SET(ip, whichfork, XFS_DINODE_FMT_BTREE); |
3086 | memset(&args, 0, sizeof(args)); | ||
3085 | args.tp = tp; | 3087 | args.tp = tp; |
3086 | args.mp = mp; | 3088 | args.mp = mp; |
3087 | args.firstblock = *firstblock; | 3089 | args.firstblock = *firstblock; |
@@ -3237,6 +3239,7 @@ xfs_bmap_local_to_extents( | |||
3237 | xfs_buf_t *bp; /* buffer for extent block */ | 3239 | xfs_buf_t *bp; /* buffer for extent block */ |
3238 | xfs_bmbt_rec_host_t *ep;/* extent record pointer */ | 3240 | xfs_bmbt_rec_host_t *ep;/* extent record pointer */ |
3239 | 3241 | ||
3242 | memset(&args, 0, sizeof(args)); | ||
3240 | args.tp = tp; | 3243 | args.tp = tp; |
3241 | args.mp = ip->i_mount; | 3244 | args.mp = ip->i_mount; |
3242 | args.firstblock = *firstblock; | 3245 | args.firstblock = *firstblock; |
@@ -4616,12 +4619,11 @@ xfs_bmapi_delay( | |||
4616 | 4619 | ||
4617 | 4620 | ||
4618 | STATIC int | 4621 | STATIC int |
4619 | xfs_bmapi_allocate( | 4622 | __xfs_bmapi_allocate( |
4620 | struct xfs_bmalloca *bma, | 4623 | struct xfs_bmalloca *bma) |
4621 | int flags) | ||
4622 | { | 4624 | { |
4623 | struct xfs_mount *mp = bma->ip->i_mount; | 4625 | struct xfs_mount *mp = bma->ip->i_mount; |
4624 | int whichfork = (flags & XFS_BMAPI_ATTRFORK) ? | 4626 | int whichfork = (bma->flags & XFS_BMAPI_ATTRFORK) ? |
4625 | XFS_ATTR_FORK : XFS_DATA_FORK; | 4627 | XFS_ATTR_FORK : XFS_DATA_FORK; |
4626 | struct xfs_ifork *ifp = XFS_IFORK_PTR(bma->ip, whichfork); | 4628 | struct xfs_ifork *ifp = XFS_IFORK_PTR(bma->ip, whichfork); |
4627 | int tmp_logflags = 0; | 4629 | int tmp_logflags = 0; |
@@ -4654,24 +4656,27 @@ xfs_bmapi_allocate( | |||
4654 | * Indicate if this is the first user data in the file, or just any | 4656 | * Indicate if this is the first user data in the file, or just any |
4655 | * user data. | 4657 | * user data. |
4656 | */ | 4658 | */ |
4657 | if (!(flags & XFS_BMAPI_METADATA)) { | 4659 | if (!(bma->flags & XFS_BMAPI_METADATA)) { |
4658 | bma->userdata = (bma->offset == 0) ? | 4660 | bma->userdata = (bma->offset == 0) ? |
4659 | XFS_ALLOC_INITIAL_USER_DATA : XFS_ALLOC_USERDATA; | 4661 | XFS_ALLOC_INITIAL_USER_DATA : XFS_ALLOC_USERDATA; |
4660 | } | 4662 | } |
4661 | 4663 | ||
4662 | bma->minlen = (flags & XFS_BMAPI_CONTIG) ? bma->length : 1; | 4664 | bma->minlen = (bma->flags & XFS_BMAPI_CONTIG) ? bma->length : 1; |
4663 | 4665 | ||
4664 | /* | 4666 | /* |
4665 | * Only want to do the alignment at the eof if it is userdata and | 4667 | * Only want to do the alignment at the eof if it is userdata and |
4666 | * allocation length is larger than a stripe unit. | 4668 | * allocation length is larger than a stripe unit. |
4667 | */ | 4669 | */ |
4668 | if (mp->m_dalign && bma->length >= mp->m_dalign && | 4670 | if (mp->m_dalign && bma->length >= mp->m_dalign && |
4669 | !(flags & XFS_BMAPI_METADATA) && whichfork == XFS_DATA_FORK) { | 4671 | !(bma->flags & XFS_BMAPI_METADATA) && whichfork == XFS_DATA_FORK) { |
4670 | error = xfs_bmap_isaeof(bma, whichfork); | 4672 | error = xfs_bmap_isaeof(bma, whichfork); |
4671 | if (error) | 4673 | if (error) |
4672 | return error; | 4674 | return error; |
4673 | } | 4675 | } |
4674 | 4676 | ||
4677 | if (bma->flags & XFS_BMAPI_STACK_SWITCH) | ||
4678 | bma->stack_switch = 1; | ||
4679 | |||
4675 | error = xfs_bmap_alloc(bma); | 4680 | error = xfs_bmap_alloc(bma); |
4676 | if (error) | 4681 | if (error) |
4677 | return error; | 4682 | return error; |
@@ -4706,7 +4711,7 @@ xfs_bmapi_allocate( | |||
4706 | * A wasdelay extent has been initialized, so shouldn't be flagged | 4711 | * A wasdelay extent has been initialized, so shouldn't be flagged |
4707 | * as unwritten. | 4712 | * as unwritten. |
4708 | */ | 4713 | */ |
4709 | if (!bma->wasdel && (flags & XFS_BMAPI_PREALLOC) && | 4714 | if (!bma->wasdel && (bma->flags & XFS_BMAPI_PREALLOC) && |
4710 | xfs_sb_version_hasextflgbit(&mp->m_sb)) | 4715 | xfs_sb_version_hasextflgbit(&mp->m_sb)) |
4711 | bma->got.br_state = XFS_EXT_UNWRITTEN; | 4716 | bma->got.br_state = XFS_EXT_UNWRITTEN; |
4712 | 4717 | ||
@@ -4734,6 +4739,45 @@ xfs_bmapi_allocate( | |||
4734 | return 0; | 4739 | return 0; |
4735 | } | 4740 | } |
4736 | 4741 | ||
4742 | static void | ||
4743 | xfs_bmapi_allocate_worker( | ||
4744 | struct work_struct *work) | ||
4745 | { | ||
4746 | struct xfs_bmalloca *args = container_of(work, | ||
4747 | struct xfs_bmalloca, work); | ||
4748 | unsigned long pflags; | ||
4749 | |||
4750 | /* we are in a transaction context here */ | ||
4751 | current_set_flags_nested(&pflags, PF_FSTRANS); | ||
4752 | |||
4753 | args->result = __xfs_bmapi_allocate(args); | ||
4754 | complete(args->done); | ||
4755 | |||
4756 | current_restore_flags_nested(&pflags, PF_FSTRANS); | ||
4757 | } | ||
4758 | |||
4759 | /* | ||
4760 | * Some allocation requests often come in with little stack to work on. Push | ||
4761 | * them off to a worker thread so there is lots of stack to use. Otherwise just | ||
4762 | * call directly to avoid the context switch overhead here. | ||
4763 | */ | ||
4764 | int | ||
4765 | xfs_bmapi_allocate( | ||
4766 | struct xfs_bmalloca *args) | ||
4767 | { | ||
4768 | DECLARE_COMPLETION_ONSTACK(done); | ||
4769 | |||
4770 | if (!args->stack_switch) | ||
4771 | return __xfs_bmapi_allocate(args); | ||
4772 | |||
4773 | |||
4774 | args->done = &done; | ||
4775 | INIT_WORK_ONSTACK(&args->work, xfs_bmapi_allocate_worker); | ||
4776 | queue_work(xfs_alloc_wq, &args->work); | ||
4777 | wait_for_completion(&done); | ||
4778 | return args->result; | ||
4779 | } | ||
4780 | |||
4737 | STATIC int | 4781 | STATIC int |
4738 | xfs_bmapi_convert_unwritten( | 4782 | xfs_bmapi_convert_unwritten( |
4739 | struct xfs_bmalloca *bma, | 4783 | struct xfs_bmalloca *bma, |
@@ -4919,6 +4963,7 @@ xfs_bmapi_write( | |||
4919 | bma.conv = !!(flags & XFS_BMAPI_CONVERT); | 4963 | bma.conv = !!(flags & XFS_BMAPI_CONVERT); |
4920 | bma.wasdel = wasdelay; | 4964 | bma.wasdel = wasdelay; |
4921 | bma.offset = bno; | 4965 | bma.offset = bno; |
4966 | bma.flags = flags; | ||
4922 | 4967 | ||
4923 | /* | 4968 | /* |
4924 | * There's a 32/64 bit type mismatch between the | 4969 | * There's a 32/64 bit type mismatch between the |
@@ -4934,7 +4979,7 @@ xfs_bmapi_write( | |||
4934 | 4979 | ||
4935 | ASSERT(len > 0); | 4980 | ASSERT(len > 0); |
4936 | ASSERT(bma.length > 0); | 4981 | ASSERT(bma.length > 0); |
4937 | error = xfs_bmapi_allocate(&bma, flags); | 4982 | error = xfs_bmapi_allocate(&bma); |
4938 | if (error) | 4983 | if (error) |
4939 | goto error0; | 4984 | goto error0; |
4940 | if (bma.blkno == NULLFSBLOCK) | 4985 | if (bma.blkno == NULLFSBLOCK) |
diff --git a/fs/xfs/xfs_bmap.h b/fs/xfs/xfs_bmap.h index 803b56d7ce16..5f469c3516eb 100644 --- a/fs/xfs/xfs_bmap.h +++ b/fs/xfs/xfs_bmap.h | |||
@@ -77,6 +77,7 @@ typedef struct xfs_bmap_free | |||
77 | * from written to unwritten, otherwise convert from unwritten to written. | 77 | * from written to unwritten, otherwise convert from unwritten to written. |
78 | */ | 78 | */ |
79 | #define XFS_BMAPI_CONVERT 0x040 | 79 | #define XFS_BMAPI_CONVERT 0x040 |
80 | #define XFS_BMAPI_STACK_SWITCH 0x080 | ||
80 | 81 | ||
81 | #define XFS_BMAPI_FLAGS \ | 82 | #define XFS_BMAPI_FLAGS \ |
82 | { XFS_BMAPI_ENTIRE, "ENTIRE" }, \ | 83 | { XFS_BMAPI_ENTIRE, "ENTIRE" }, \ |
@@ -85,7 +86,8 @@ typedef struct xfs_bmap_free | |||
85 | { XFS_BMAPI_PREALLOC, "PREALLOC" }, \ | 86 | { XFS_BMAPI_PREALLOC, "PREALLOC" }, \ |
86 | { XFS_BMAPI_IGSTATE, "IGSTATE" }, \ | 87 | { XFS_BMAPI_IGSTATE, "IGSTATE" }, \ |
87 | { XFS_BMAPI_CONTIG, "CONTIG" }, \ | 88 | { XFS_BMAPI_CONTIG, "CONTIG" }, \ |
88 | { XFS_BMAPI_CONVERT, "CONVERT" } | 89 | { XFS_BMAPI_CONVERT, "CONVERT" }, \ |
90 | { XFS_BMAPI_STACK_SWITCH, "STACK_SWITCH" } | ||
89 | 91 | ||
90 | 92 | ||
91 | static inline int xfs_bmapi_aflag(int w) | 93 | static inline int xfs_bmapi_aflag(int w) |
@@ -133,6 +135,11 @@ typedef struct xfs_bmalloca { | |||
133 | char userdata;/* set if is user data */ | 135 | char userdata;/* set if is user data */ |
134 | char aeof; /* allocated space at eof */ | 136 | char aeof; /* allocated space at eof */ |
135 | char conv; /* overwriting unwritten extents */ | 137 | char conv; /* overwriting unwritten extents */ |
138 | char stack_switch; | ||
139 | int flags; | ||
140 | struct completion *done; | ||
141 | struct work_struct work; | ||
142 | int result; | ||
136 | } xfs_bmalloca_t; | 143 | } xfs_bmalloca_t; |
137 | 144 | ||
138 | /* | 145 | /* |
diff --git a/fs/xfs/xfs_buf_item.c b/fs/xfs/xfs_buf_item.c index a8d0ed911196..becf4a97efc6 100644 --- a/fs/xfs/xfs_buf_item.c +++ b/fs/xfs/xfs_buf_item.c | |||
@@ -526,7 +526,25 @@ xfs_buf_item_unpin( | |||
526 | } | 526 | } |
527 | xfs_buf_relse(bp); | 527 | xfs_buf_relse(bp); |
528 | } else if (freed && remove) { | 528 | } else if (freed && remove) { |
529 | /* | ||
530 | * There are currently two references to the buffer - the active | ||
531 | * LRU reference and the buf log item. What we are about to do | ||
532 | * here - simulate a failed IO completion - requires 3 | ||
533 | * references. | ||
534 | * | ||
535 | * The LRU reference is removed by the xfs_buf_stale() call. The | ||
536 | * buf item reference is removed by the xfs_buf_iodone() | ||
537 | * callback that is run by xfs_buf_do_callbacks() during ioend | ||
538 | * processing (via the bp->b_iodone callback), and then finally | ||
539 | * the ioend processing will drop the IO reference if the buffer | ||
540 | * is marked XBF_ASYNC. | ||
541 | * | ||
542 | * Hence we need to take an additional reference here so that IO | ||
543 | * completion processing doesn't free the buffer prematurely. | ||
544 | */ | ||
529 | xfs_buf_lock(bp); | 545 | xfs_buf_lock(bp); |
546 | xfs_buf_hold(bp); | ||
547 | bp->b_flags |= XBF_ASYNC; | ||
530 | xfs_buf_ioerror(bp, EIO); | 548 | xfs_buf_ioerror(bp, EIO); |
531 | XFS_BUF_UNDONE(bp); | 549 | XFS_BUF_UNDONE(bp); |
532 | xfs_buf_stale(bp); | 550 | xfs_buf_stale(bp); |
diff --git a/fs/xfs/xfs_fsops.c b/fs/xfs/xfs_fsops.c index c25b094efbf7..4beaede43277 100644 --- a/fs/xfs/xfs_fsops.c +++ b/fs/xfs/xfs_fsops.c | |||
@@ -399,9 +399,26 @@ xfs_growfs_data_private( | |||
399 | 399 | ||
400 | /* update secondary superblocks. */ | 400 | /* update secondary superblocks. */ |
401 | for (agno = 1; agno < nagcount; agno++) { | 401 | for (agno = 1; agno < nagcount; agno++) { |
402 | error = xfs_trans_read_buf(mp, NULL, mp->m_ddev_targp, | 402 | error = 0; |
403 | /* | ||
404 | * new secondary superblocks need to be zeroed, not read from | ||
405 | * disk as the contents of the new area we are growing into is | ||
406 | * completely unknown. | ||
407 | */ | ||
408 | if (agno < oagcount) { | ||
409 | error = xfs_trans_read_buf(mp, NULL, mp->m_ddev_targp, | ||
403 | XFS_AGB_TO_DADDR(mp, agno, XFS_SB_BLOCK(mp)), | 410 | XFS_AGB_TO_DADDR(mp, agno, XFS_SB_BLOCK(mp)), |
404 | XFS_FSS_TO_BB(mp, 1), 0, &bp); | 411 | XFS_FSS_TO_BB(mp, 1), 0, &bp); |
412 | } else { | ||
413 | bp = xfs_trans_get_buf(NULL, mp->m_ddev_targp, | ||
414 | XFS_AGB_TO_DADDR(mp, agno, XFS_SB_BLOCK(mp)), | ||
415 | XFS_FSS_TO_BB(mp, 1), 0); | ||
416 | if (bp) | ||
417 | xfs_buf_zero(bp, 0, BBTOB(bp->b_length)); | ||
418 | else | ||
419 | error = ENOMEM; | ||
420 | } | ||
421 | |||
405 | if (error) { | 422 | if (error) { |
406 | xfs_warn(mp, | 423 | xfs_warn(mp, |
407 | "error %d reading secondary superblock for ag %d", | 424 | "error %d reading secondary superblock for ag %d", |
@@ -423,7 +440,7 @@ xfs_growfs_data_private( | |||
423 | break; /* no point in continuing */ | 440 | break; /* no point in continuing */ |
424 | } | 441 | } |
425 | } | 442 | } |
426 | return 0; | 443 | return error; |
427 | 444 | ||
428 | error0: | 445 | error0: |
429 | xfs_trans_cancel(tp, XFS_TRANS_ABORT); | 446 | xfs_trans_cancel(tp, XFS_TRANS_ABORT); |
diff --git a/fs/xfs/xfs_ialloc.c b/fs/xfs/xfs_ialloc.c index 445bf1aef31c..c5c4ef4f2bdb 100644 --- a/fs/xfs/xfs_ialloc.c +++ b/fs/xfs/xfs_ialloc.c | |||
@@ -250,6 +250,7 @@ xfs_ialloc_ag_alloc( | |||
250 | /* boundary */ | 250 | /* boundary */ |
251 | struct xfs_perag *pag; | 251 | struct xfs_perag *pag; |
252 | 252 | ||
253 | memset(&args, 0, sizeof(args)); | ||
253 | args.tp = tp; | 254 | args.tp = tp; |
254 | args.mp = tp->t_mountp; | 255 | args.mp = tp->t_mountp; |
255 | 256 | ||
diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c index 2778258fcfa2..1938b41ee9f5 100644 --- a/fs/xfs/xfs_inode.c +++ b/fs/xfs/xfs_inode.c | |||
@@ -1509,7 +1509,8 @@ xfs_ifree_cluster( | |||
1509 | * to mark all the active inodes on the buffer stale. | 1509 | * to mark all the active inodes on the buffer stale. |
1510 | */ | 1510 | */ |
1511 | bp = xfs_trans_get_buf(tp, mp->m_ddev_targp, blkno, | 1511 | bp = xfs_trans_get_buf(tp, mp->m_ddev_targp, blkno, |
1512 | mp->m_bsize * blks_per_cluster, 0); | 1512 | mp->m_bsize * blks_per_cluster, |
1513 | XBF_UNMAPPED); | ||
1513 | 1514 | ||
1514 | if (!bp) | 1515 | if (!bp) |
1515 | return ENOMEM; | 1516 | return ENOMEM; |
diff --git a/fs/xfs/xfs_ioctl.c b/fs/xfs/xfs_ioctl.c index 8305f2ac6773..c1df3c623de2 100644 --- a/fs/xfs/xfs_ioctl.c +++ b/fs/xfs/xfs_ioctl.c | |||
@@ -70,7 +70,7 @@ xfs_find_handle( | |||
70 | int hsize; | 70 | int hsize; |
71 | xfs_handle_t handle; | 71 | xfs_handle_t handle; |
72 | struct inode *inode; | 72 | struct inode *inode; |
73 | struct fd f; | 73 | struct fd f = {0}; |
74 | struct path path; | 74 | struct path path; |
75 | int error; | 75 | int error; |
76 | struct xfs_inode *ip; | 76 | struct xfs_inode *ip; |
diff --git a/fs/xfs/xfs_iomap.c b/fs/xfs/xfs_iomap.c index 973dff6ad935..7f537663365b 100644 --- a/fs/xfs/xfs_iomap.c +++ b/fs/xfs/xfs_iomap.c | |||
@@ -584,7 +584,9 @@ xfs_iomap_write_allocate( | |||
584 | * pointer that the caller gave to us. | 584 | * pointer that the caller gave to us. |
585 | */ | 585 | */ |
586 | error = xfs_bmapi_write(tp, ip, map_start_fsb, | 586 | error = xfs_bmapi_write(tp, ip, map_start_fsb, |
587 | count_fsb, 0, &first_block, 1, | 587 | count_fsb, |
588 | XFS_BMAPI_STACK_SWITCH, | ||
589 | &first_block, 1, | ||
588 | imap, &nimaps, &free_list); | 590 | imap, &nimaps, &free_list); |
589 | if (error) | 591 | if (error) |
590 | goto trans_cancel; | 592 | goto trans_cancel; |
diff --git a/fs/xfs/xfs_log.c b/fs/xfs/xfs_log.c index 7f4f9370d0e7..4dad756962d0 100644 --- a/fs/xfs/xfs_log.c +++ b/fs/xfs/xfs_log.c | |||
@@ -2387,14 +2387,27 @@ xlog_state_do_callback( | |||
2387 | 2387 | ||
2388 | 2388 | ||
2389 | /* | 2389 | /* |
2390 | * update the last_sync_lsn before we drop the | 2390 | * Completion of a iclog IO does not imply that |
2391 | * a transaction has completed, as transactions | ||
2392 | * can be large enough to span many iclogs. We | ||
2393 | * cannot change the tail of the log half way | ||
2394 | * through a transaction as this may be the only | ||
2395 | * transaction in the log and moving th etail to | ||
2396 | * point to the middle of it will prevent | ||
2397 | * recovery from finding the start of the | ||
2398 | * transaction. Hence we should only update the | ||
2399 | * last_sync_lsn if this iclog contains | ||
2400 | * transaction completion callbacks on it. | ||
2401 | * | ||
2402 | * We have to do this before we drop the | ||
2391 | * icloglock to ensure we are the only one that | 2403 | * icloglock to ensure we are the only one that |
2392 | * can update it. | 2404 | * can update it. |
2393 | */ | 2405 | */ |
2394 | ASSERT(XFS_LSN_CMP(atomic64_read(&log->l_last_sync_lsn), | 2406 | ASSERT(XFS_LSN_CMP(atomic64_read(&log->l_last_sync_lsn), |
2395 | be64_to_cpu(iclog->ic_header.h_lsn)) <= 0); | 2407 | be64_to_cpu(iclog->ic_header.h_lsn)) <= 0); |
2396 | atomic64_set(&log->l_last_sync_lsn, | 2408 | if (iclog->ic_callback) |
2397 | be64_to_cpu(iclog->ic_header.h_lsn)); | 2409 | atomic64_set(&log->l_last_sync_lsn, |
2410 | be64_to_cpu(iclog->ic_header.h_lsn)); | ||
2398 | 2411 | ||
2399 | } else | 2412 | } else |
2400 | ioerrors++; | 2413 | ioerrors++; |
diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c index 5da3ace352bf..d308749fabf1 100644 --- a/fs/xfs/xfs_log_recover.c +++ b/fs/xfs/xfs_log_recover.c | |||
@@ -3541,7 +3541,7 @@ xlog_do_recovery_pass( | |||
3541 | * - order is important. | 3541 | * - order is important. |
3542 | */ | 3542 | */ |
3543 | error = xlog_bread_offset(log, 0, | 3543 | error = xlog_bread_offset(log, 0, |
3544 | bblks - split_bblks, hbp, | 3544 | bblks - split_bblks, dbp, |
3545 | offset + BBTOB(split_bblks)); | 3545 | offset + BBTOB(split_bblks)); |
3546 | if (error) | 3546 | if (error) |
3547 | goto bread_err2; | 3547 | goto bread_err2; |
diff --git a/arch/arm/plat-mxc/include/mach/ipu.h b/include/linux/dma/ipu-dma.h index 539e559d18b2..18031115c668 100644 --- a/arch/arm/plat-mxc/include/mach/ipu.h +++ b/include/linux/dma/ipu-dma.h | |||
@@ -9,8 +9,8 @@ | |||
9 | * published by the Free Software Foundation. | 9 | * published by the Free Software Foundation. |
10 | */ | 10 | */ |
11 | 11 | ||
12 | #ifndef _IPU_H_ | 12 | #ifndef __LINUX_DMA_IPU_DMA_H |
13 | #define _IPU_H_ | 13 | #define __LINUX_DMA_IPU_DMA_H |
14 | 14 | ||
15 | #include <linux/types.h> | 15 | #include <linux/types.h> |
16 | #include <linux/dmaengine.h> | 16 | #include <linux/dmaengine.h> |
@@ -174,4 +174,4 @@ struct idmac_channel { | |||
174 | #define to_tx_desc(tx) container_of(tx, struct idmac_tx_desc, txd) | 174 | #define to_tx_desc(tx) container_of(tx, struct idmac_tx_desc, txd) |
175 | #define to_idmac_chan(c) container_of(c, struct idmac_channel, dma_chan) | 175 | #define to_idmac_chan(c) container_of(c, struct idmac_channel, dma_chan) |
176 | 176 | ||
177 | #endif | 177 | #endif /* __LINUX_DMA_IPU_DMA_H */ |
diff --git a/include/linux/mmc/dw_mmc.h b/include/linux/mmc/dw_mmc.h index 7c6a1139d8fa..96531664a061 100644 --- a/include/linux/mmc/dw_mmc.h +++ b/include/linux/mmc/dw_mmc.h | |||
@@ -137,7 +137,7 @@ struct dw_mci { | |||
137 | 137 | ||
138 | dma_addr_t sg_dma; | 138 | dma_addr_t sg_dma; |
139 | void *sg_cpu; | 139 | void *sg_cpu; |
140 | struct dw_mci_dma_ops *dma_ops; | 140 | const struct dw_mci_dma_ops *dma_ops; |
141 | #ifdef CONFIG_MMC_DW_IDMAC | 141 | #ifdef CONFIG_MMC_DW_IDMAC |
142 | unsigned int ring_size; | 142 | unsigned int ring_size; |
143 | #else | 143 | #else |
@@ -162,7 +162,7 @@ struct dw_mci { | |||
162 | u16 data_offset; | 162 | u16 data_offset; |
163 | struct device *dev; | 163 | struct device *dev; |
164 | struct dw_mci_board *pdata; | 164 | struct dw_mci_board *pdata; |
165 | struct dw_mci_drv_data *drv_data; | 165 | const struct dw_mci_drv_data *drv_data; |
166 | void *priv; | 166 | void *priv; |
167 | struct clk *biu_clk; | 167 | struct clk *biu_clk; |
168 | struct clk *ciu_clk; | 168 | struct clk *ciu_clk; |
@@ -186,7 +186,7 @@ struct dw_mci { | |||
186 | 186 | ||
187 | struct regulator *vmmc; /* Power regulator */ | 187 | struct regulator *vmmc; /* Power regulator */ |
188 | unsigned long irq_flags; /* IRQ flags */ | 188 | unsigned long irq_flags; /* IRQ flags */ |
189 | unsigned int irq; | 189 | int irq; |
190 | }; | 190 | }; |
191 | 191 | ||
192 | /* DMA ops for Internal/External DMAC interface */ | 192 | /* DMA ops for Internal/External DMAC interface */ |
diff --git a/include/linux/mmc/sdhci.h b/include/linux/mmc/sdhci.h index fa8529a859b8..1edcb4dad8c4 100644 --- a/include/linux/mmc/sdhci.h +++ b/include/linux/mmc/sdhci.h | |||
@@ -91,6 +91,7 @@ struct sdhci_host { | |||
91 | unsigned int quirks2; /* More deviations from spec. */ | 91 | unsigned int quirks2; /* More deviations from spec. */ |
92 | 92 | ||
93 | #define SDHCI_QUIRK2_HOST_OFF_CARD_ON (1<<0) | 93 | #define SDHCI_QUIRK2_HOST_OFF_CARD_ON (1<<0) |
94 | #define SDHCI_QUIRK2_HOST_NO_CMD23 (1<<1) | ||
94 | 95 | ||
95 | int irq; /* Device IRQ */ | 96 | int irq; /* Device IRQ */ |
96 | void __iomem *ioaddr; /* Mapped address */ | 97 | void __iomem *ioaddr; /* Mapped address */ |
diff --git a/include/linux/of_address.h b/include/linux/of_address.h index a1984dd037da..e20e3af68fb6 100644 --- a/include/linux/of_address.h +++ b/include/linux/of_address.h | |||
@@ -28,11 +28,13 @@ static inline unsigned long pci_address_to_pio(phys_addr_t addr) { return -1; } | |||
28 | #endif | 28 | #endif |
29 | 29 | ||
30 | #else /* CONFIG_OF_ADDRESS */ | 30 | #else /* CONFIG_OF_ADDRESS */ |
31 | #ifndef of_address_to_resource | ||
31 | static inline int of_address_to_resource(struct device_node *dev, int index, | 32 | static inline int of_address_to_resource(struct device_node *dev, int index, |
32 | struct resource *r) | 33 | struct resource *r) |
33 | { | 34 | { |
34 | return -EINVAL; | 35 | return -EINVAL; |
35 | } | 36 | } |
37 | #endif | ||
36 | static inline struct device_node *of_find_matching_node_by_address( | 38 | static inline struct device_node *of_find_matching_node_by_address( |
37 | struct device_node *from, | 39 | struct device_node *from, |
38 | const struct of_device_id *matches, | 40 | const struct of_device_id *matches, |
diff --git a/include/linux/platform_data/asoc-imx-ssi.h b/include/linux/platform_data/asoc-imx-ssi.h index 63f3c2804239..92c7fd72f636 100644 --- a/include/linux/platform_data/asoc-imx-ssi.h +++ b/include/linux/platform_data/asoc-imx-ssi.h | |||
@@ -17,5 +17,7 @@ struct imx_ssi_platform_data { | |||
17 | void (*ac97_warm_reset)(struct snd_ac97 *ac97); | 17 | void (*ac97_warm_reset)(struct snd_ac97 *ac97); |
18 | }; | 18 | }; |
19 | 19 | ||
20 | extern int mxc_set_irq_fiq(unsigned int irq, unsigned int type); | ||
21 | |||
20 | #endif /* __MACH_SSI_H */ | 22 | #endif /* __MACH_SSI_H */ |
21 | 23 | ||
diff --git a/include/linux/platform_data/dma-imx.h b/include/linux/platform_data/dma-imx.h index 1b9080385b46..f6d30cc1cb77 100644 --- a/include/linux/platform_data/dma-imx.h +++ b/include/linux/platform_data/dma-imx.h | |||
@@ -61,7 +61,9 @@ static inline int imx_dma_is_ipu(struct dma_chan *chan) | |||
61 | static inline int imx_dma_is_general_purpose(struct dma_chan *chan) | 61 | static inline int imx_dma_is_general_purpose(struct dma_chan *chan) |
62 | { | 62 | { |
63 | return strstr(dev_name(chan->device->dev), "sdma") || | 63 | return strstr(dev_name(chan->device->dev), "sdma") || |
64 | !strcmp(dev_name(chan->device->dev), "imx-dma"); | 64 | !strcmp(dev_name(chan->device->dev), "imx1-dma") || |
65 | !strcmp(dev_name(chan->device->dev), "imx21-dma") || | ||
66 | !strcmp(dev_name(chan->device->dev), "imx27-dma"); | ||
65 | } | 67 | } |
66 | 68 | ||
67 | #endif | 69 | #endif |
diff --git a/include/linux/ptp_clock_kernel.h b/include/linux/ptp_clock_kernel.h index f2dc6d8fc680..38a993508327 100644 --- a/include/linux/ptp_clock_kernel.h +++ b/include/linux/ptp_clock_kernel.h | |||
@@ -54,7 +54,8 @@ struct ptp_clock_request { | |||
54 | * clock operations | 54 | * clock operations |
55 | * | 55 | * |
56 | * @adjfreq: Adjusts the frequency of the hardware clock. | 56 | * @adjfreq: Adjusts the frequency of the hardware clock. |
57 | * parameter delta: Desired period change in parts per billion. | 57 | * parameter delta: Desired frequency offset from nominal frequency |
58 | * in parts per billion | ||
58 | * | 59 | * |
59 | * @adjtime: Shifts the time of the hardware clock. | 60 | * @adjtime: Shifts the time of the hardware clock. |
60 | * parameter delta: Desired change in nanoseconds. | 61 | * parameter delta: Desired change in nanoseconds. |
diff --git a/include/uapi/linux/eventpoll.h b/include/uapi/linux/eventpoll.h index 8c99ce7202c5..2c267bcbb85c 100644 --- a/include/uapi/linux/eventpoll.h +++ b/include/uapi/linux/eventpoll.h | |||
@@ -25,7 +25,6 @@ | |||
25 | #define EPOLL_CTL_ADD 1 | 25 | #define EPOLL_CTL_ADD 1 |
26 | #define EPOLL_CTL_DEL 2 | 26 | #define EPOLL_CTL_DEL 2 |
27 | #define EPOLL_CTL_MOD 3 | 27 | #define EPOLL_CTL_MOD 3 |
28 | #define EPOLL_CTL_DISABLE 4 | ||
29 | 28 | ||
30 | /* | 29 | /* |
31 | * Request the handling of system wakeup events so as to prevent system suspends | 30 | * Request the handling of system wakeup events so as to prevent system suspends |
diff --git a/include/xen/hvm.h b/include/xen/hvm.h index b193fa2f9fdd..13e43e41637d 100644 --- a/include/xen/hvm.h +++ b/include/xen/hvm.h | |||
@@ -5,6 +5,36 @@ | |||
5 | #include <xen/interface/hvm/params.h> | 5 | #include <xen/interface/hvm/params.h> |
6 | #include <asm/xen/hypercall.h> | 6 | #include <asm/xen/hypercall.h> |
7 | 7 | ||
8 | static const char *param_name(int op) | ||
9 | { | ||
10 | #define PARAM(x) [HVM_PARAM_##x] = #x | ||
11 | static const char *const names[] = { | ||
12 | PARAM(CALLBACK_IRQ), | ||
13 | PARAM(STORE_PFN), | ||
14 | PARAM(STORE_EVTCHN), | ||
15 | PARAM(PAE_ENABLED), | ||
16 | PARAM(IOREQ_PFN), | ||
17 | PARAM(BUFIOREQ_PFN), | ||
18 | PARAM(TIMER_MODE), | ||
19 | PARAM(HPET_ENABLED), | ||
20 | PARAM(IDENT_PT), | ||
21 | PARAM(DM_DOMAIN), | ||
22 | PARAM(ACPI_S_STATE), | ||
23 | PARAM(VM86_TSS), | ||
24 | PARAM(VPT_ALIGN), | ||
25 | PARAM(CONSOLE_PFN), | ||
26 | PARAM(CONSOLE_EVTCHN), | ||
27 | }; | ||
28 | #undef PARAM | ||
29 | |||
30 | if (op >= ARRAY_SIZE(names)) | ||
31 | return "unknown"; | ||
32 | |||
33 | if (!names[op]) | ||
34 | return "reserved"; | ||
35 | |||
36 | return names[op]; | ||
37 | } | ||
8 | static inline int hvm_get_parameter(int idx, uint64_t *value) | 38 | static inline int hvm_get_parameter(int idx, uint64_t *value) |
9 | { | 39 | { |
10 | struct xen_hvm_param xhv; | 40 | struct xen_hvm_param xhv; |
@@ -14,8 +44,8 @@ static inline int hvm_get_parameter(int idx, uint64_t *value) | |||
14 | xhv.index = idx; | 44 | xhv.index = idx; |
15 | r = HYPERVISOR_hvm_op(HVMOP_get_param, &xhv); | 45 | r = HYPERVISOR_hvm_op(HVMOP_get_param, &xhv); |
16 | if (r < 0) { | 46 | if (r < 0) { |
17 | printk(KERN_ERR "Cannot get hvm parameter %d: %d!\n", | 47 | printk(KERN_ERR "Cannot get hvm parameter %s (%d): %d!\n", |
18 | idx, r); | 48 | param_name(idx), idx, r); |
19 | return r; | 49 | return r; |
20 | } | 50 | } |
21 | *value = xhv.value; | 51 | *value = xhv.value; |
diff --git a/kernel/module.c b/kernel/module.c index 6085f5ef88ea..6e48c3a43599 100644 --- a/kernel/module.c +++ b/kernel/module.c | |||
@@ -2293,12 +2293,17 @@ static void layout_symtab(struct module *mod, struct load_info *info) | |||
2293 | src = (void *)info->hdr + symsect->sh_offset; | 2293 | src = (void *)info->hdr + symsect->sh_offset; |
2294 | nsrc = symsect->sh_size / sizeof(*src); | 2294 | nsrc = symsect->sh_size / sizeof(*src); |
2295 | 2295 | ||
2296 | /* strtab always starts with a nul, so offset 0 is the empty string. */ | ||
2297 | strtab_size = 1; | ||
2298 | |||
2296 | /* Compute total space required for the core symbols' strtab. */ | 2299 | /* Compute total space required for the core symbols' strtab. */ |
2297 | for (ndst = i = strtab_size = 1; i < nsrc; ++i, ++src) | 2300 | for (ndst = i = 0; i < nsrc; i++) { |
2298 | if (is_core_symbol(src, info->sechdrs, info->hdr->e_shnum)) { | 2301 | if (i == 0 || |
2299 | strtab_size += strlen(&info->strtab[src->st_name]) + 1; | 2302 | is_core_symbol(src+i, info->sechdrs, info->hdr->e_shnum)) { |
2303 | strtab_size += strlen(&info->strtab[src[i].st_name])+1; | ||
2300 | ndst++; | 2304 | ndst++; |
2301 | } | 2305 | } |
2306 | } | ||
2302 | 2307 | ||
2303 | /* Append room for core symbols at end of core part. */ | 2308 | /* Append room for core symbols at end of core part. */ |
2304 | info->symoffs = ALIGN(mod->core_size, symsect->sh_addralign ?: 1); | 2309 | info->symoffs = ALIGN(mod->core_size, symsect->sh_addralign ?: 1); |
@@ -2332,15 +2337,15 @@ static void add_kallsyms(struct module *mod, const struct load_info *info) | |||
2332 | mod->core_symtab = dst = mod->module_core + info->symoffs; | 2337 | mod->core_symtab = dst = mod->module_core + info->symoffs; |
2333 | mod->core_strtab = s = mod->module_core + info->stroffs; | 2338 | mod->core_strtab = s = mod->module_core + info->stroffs; |
2334 | src = mod->symtab; | 2339 | src = mod->symtab; |
2335 | *dst = *src; | ||
2336 | *s++ = 0; | 2340 | *s++ = 0; |
2337 | for (ndst = i = 1; i < mod->num_symtab; ++i, ++src) { | 2341 | for (ndst = i = 0; i < mod->num_symtab; i++) { |
2338 | if (!is_core_symbol(src, info->sechdrs, info->hdr->e_shnum)) | 2342 | if (i == 0 || |
2339 | continue; | 2343 | is_core_symbol(src+i, info->sechdrs, info->hdr->e_shnum)) { |
2340 | 2344 | dst[ndst] = src[i]; | |
2341 | dst[ndst] = *src; | 2345 | dst[ndst++].st_name = s - mod->core_strtab; |
2342 | dst[ndst++].st_name = s - mod->core_strtab; | 2346 | s += strlcpy(s, &mod->strtab[src[i].st_name], |
2343 | s += strlcpy(s, &mod->strtab[src->st_name], KSYM_NAME_LEN) + 1; | 2347 | KSYM_NAME_LEN) + 1; |
2348 | } | ||
2344 | } | 2349 | } |
2345 | mod->core_num_syms = ndst; | 2350 | mod->core_num_syms = ndst; |
2346 | } | 2351 | } |
diff --git a/mm/vmscan.c b/mm/vmscan.c index 2624edcfb420..8b055e9379bc 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c | |||
@@ -3017,6 +3017,8 @@ static int kswapd(void *p) | |||
3017 | &balanced_classzone_idx); | 3017 | &balanced_classzone_idx); |
3018 | } | 3018 | } |
3019 | } | 3019 | } |
3020 | |||
3021 | current->reclaim_state = NULL; | ||
3020 | return 0; | 3022 | return 0; |
3021 | } | 3023 | } |
3022 | 3024 | ||
diff --git a/net/core/dev.c b/net/core/dev.c index 09cb3f6dc40c..bda6d004f9f0 100644 --- a/net/core/dev.c +++ b/net/core/dev.c | |||
@@ -1666,7 +1666,7 @@ static inline int deliver_skb(struct sk_buff *skb, | |||
1666 | 1666 | ||
1667 | static inline bool skb_loop_sk(struct packet_type *ptype, struct sk_buff *skb) | 1667 | static inline bool skb_loop_sk(struct packet_type *ptype, struct sk_buff *skb) |
1668 | { | 1668 | { |
1669 | if (ptype->af_packet_priv == NULL) | 1669 | if (!ptype->af_packet_priv || !skb->sk) |
1670 | return false; | 1670 | return false; |
1671 | 1671 | ||
1672 | if (ptype->id_match) | 1672 | if (ptype->id_match) |
diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c index 76d4c2c3c89b..fad649ae4dec 100644 --- a/net/core/rtnetlink.c +++ b/net/core/rtnetlink.c | |||
@@ -2192,7 +2192,8 @@ static int nlmsg_populate_fdb(struct sk_buff *skb, | |||
2192 | goto skip; | 2192 | goto skip; |
2193 | 2193 | ||
2194 | err = nlmsg_populate_fdb_fill(skb, dev, ha->addr, | 2194 | err = nlmsg_populate_fdb_fill(skb, dev, ha->addr, |
2195 | portid, seq, 0, NTF_SELF); | 2195 | portid, seq, |
2196 | RTM_NEWNEIGH, NTF_SELF); | ||
2196 | if (err < 0) | 2197 | if (err < 0) |
2197 | return err; | 2198 | return err; |
2198 | skip: | 2199 | skip: |
diff --git a/net/ipv4/inet_diag.c b/net/ipv4/inet_diag.c index 535584c00f91..0c34bfabc11f 100644 --- a/net/ipv4/inet_diag.c +++ b/net/ipv4/inet_diag.c | |||
@@ -892,13 +892,16 @@ static int __inet_diag_dump(struct sk_buff *skb, struct netlink_callback *cb, | |||
892 | struct inet_diag_req_v2 *r, struct nlattr *bc) | 892 | struct inet_diag_req_v2 *r, struct nlattr *bc) |
893 | { | 893 | { |
894 | const struct inet_diag_handler *handler; | 894 | const struct inet_diag_handler *handler; |
895 | int err = 0; | ||
895 | 896 | ||
896 | handler = inet_diag_lock_handler(r->sdiag_protocol); | 897 | handler = inet_diag_lock_handler(r->sdiag_protocol); |
897 | if (!IS_ERR(handler)) | 898 | if (!IS_ERR(handler)) |
898 | handler->dump(skb, cb, r, bc); | 899 | handler->dump(skb, cb, r, bc); |
900 | else | ||
901 | err = PTR_ERR(handler); | ||
899 | inet_diag_unlock_handler(handler); | 902 | inet_diag_unlock_handler(handler); |
900 | 903 | ||
901 | return skb->len; | 904 | return err ? : skb->len; |
902 | } | 905 | } |
903 | 906 | ||
904 | static int inet_diag_dump(struct sk_buff *skb, struct netlink_callback *cb) | 907 | static int inet_diag_dump(struct sk_buff *skb, struct netlink_callback *cb) |
diff --git a/net/ipv6/ip6_gre.c b/net/ipv6/ip6_gre.c index 0185679c5f53..d5cb3c4e66f8 100644 --- a/net/ipv6/ip6_gre.c +++ b/net/ipv6/ip6_gre.c | |||
@@ -1633,9 +1633,9 @@ static size_t ip6gre_get_size(const struct net_device *dev) | |||
1633 | /* IFLA_GRE_OKEY */ | 1633 | /* IFLA_GRE_OKEY */ |
1634 | nla_total_size(4) + | 1634 | nla_total_size(4) + |
1635 | /* IFLA_GRE_LOCAL */ | 1635 | /* IFLA_GRE_LOCAL */ |
1636 | nla_total_size(4) + | 1636 | nla_total_size(sizeof(struct in6_addr)) + |
1637 | /* IFLA_GRE_REMOTE */ | 1637 | /* IFLA_GRE_REMOTE */ |
1638 | nla_total_size(4) + | 1638 | nla_total_size(sizeof(struct in6_addr)) + |
1639 | /* IFLA_GRE_TTL */ | 1639 | /* IFLA_GRE_TTL */ |
1640 | nla_total_size(1) + | 1640 | nla_total_size(1) + |
1641 | /* IFLA_GRE_TOS */ | 1641 | /* IFLA_GRE_TOS */ |
@@ -1659,8 +1659,8 @@ static int ip6gre_fill_info(struct sk_buff *skb, const struct net_device *dev) | |||
1659 | nla_put_be16(skb, IFLA_GRE_OFLAGS, p->o_flags) || | 1659 | nla_put_be16(skb, IFLA_GRE_OFLAGS, p->o_flags) || |
1660 | nla_put_be32(skb, IFLA_GRE_IKEY, p->i_key) || | 1660 | nla_put_be32(skb, IFLA_GRE_IKEY, p->i_key) || |
1661 | nla_put_be32(skb, IFLA_GRE_OKEY, p->o_key) || | 1661 | nla_put_be32(skb, IFLA_GRE_OKEY, p->o_key) || |
1662 | nla_put(skb, IFLA_GRE_LOCAL, sizeof(struct in6_addr), &p->raddr) || | 1662 | nla_put(skb, IFLA_GRE_LOCAL, sizeof(struct in6_addr), &p->laddr) || |
1663 | nla_put(skb, IFLA_GRE_REMOTE, sizeof(struct in6_addr), &p->laddr) || | 1663 | nla_put(skb, IFLA_GRE_REMOTE, sizeof(struct in6_addr), &p->raddr) || |
1664 | nla_put_u8(skb, IFLA_GRE_TTL, p->hop_limit) || | 1664 | nla_put_u8(skb, IFLA_GRE_TTL, p->hop_limit) || |
1665 | /*nla_put_u8(skb, IFLA_GRE_TOS, t->priority) ||*/ | 1665 | /*nla_put_u8(skb, IFLA_GRE_TOS, t->priority) ||*/ |
1666 | nla_put_u8(skb, IFLA_GRE_ENCAP_LIMIT, p->encap_limit) || | 1666 | nla_put_u8(skb, IFLA_GRE_ENCAP_LIMIT, p->encap_limit) || |
diff --git a/net/ipv6/ndisc.c b/net/ipv6/ndisc.c index ff36194a71aa..2edce30ef733 100644 --- a/net/ipv6/ndisc.c +++ b/net/ipv6/ndisc.c | |||
@@ -535,7 +535,7 @@ static void ndisc_send_unsol_na(struct net_device *dev) | |||
535 | { | 535 | { |
536 | struct inet6_dev *idev; | 536 | struct inet6_dev *idev; |
537 | struct inet6_ifaddr *ifa; | 537 | struct inet6_ifaddr *ifa; |
538 | struct in6_addr mcaddr; | 538 | struct in6_addr mcaddr = IN6ADDR_LINKLOCAL_ALLNODES_INIT; |
539 | 539 | ||
540 | idev = in6_dev_get(dev); | 540 | idev = in6_dev_get(dev); |
541 | if (!idev) | 541 | if (!idev) |
@@ -543,7 +543,6 @@ static void ndisc_send_unsol_na(struct net_device *dev) | |||
543 | 543 | ||
544 | read_lock_bh(&idev->lock); | 544 | read_lock_bh(&idev->lock); |
545 | list_for_each_entry(ifa, &idev->addr_list, if_list) { | 545 | list_for_each_entry(ifa, &idev->addr_list, if_list) { |
546 | addrconf_addr_solict_mult(&ifa->addr, &mcaddr); | ||
547 | ndisc_send_na(dev, NULL, &mcaddr, &ifa->addr, | 546 | ndisc_send_na(dev, NULL, &mcaddr, &ifa->addr, |
548 | /*router=*/ !!idev->cnf.forwarding, | 547 | /*router=*/ !!idev->cnf.forwarding, |
549 | /*solicited=*/ false, /*override=*/ true, | 548 | /*solicited=*/ false, /*override=*/ true, |
diff --git a/net/sched/sch_qfq.c b/net/sched/sch_qfq.c index f0dd83cff906..9687fa1c2275 100644 --- a/net/sched/sch_qfq.c +++ b/net/sched/sch_qfq.c | |||
@@ -84,18 +84,19 @@ | |||
84 | * grp->index is the index of the group; and grp->slot_shift | 84 | * grp->index is the index of the group; and grp->slot_shift |
85 | * is the shift for the corresponding (scaled) sigma_i. | 85 | * is the shift for the corresponding (scaled) sigma_i. |
86 | */ | 86 | */ |
87 | #define QFQ_MAX_INDEX 19 | 87 | #define QFQ_MAX_INDEX 24 |
88 | #define QFQ_MAX_WSHIFT 16 | 88 | #define QFQ_MAX_WSHIFT 12 |
89 | 89 | ||
90 | #define QFQ_MAX_WEIGHT (1<<QFQ_MAX_WSHIFT) | 90 | #define QFQ_MAX_WEIGHT (1<<QFQ_MAX_WSHIFT) |
91 | #define QFQ_MAX_WSUM (2*QFQ_MAX_WEIGHT) | 91 | #define QFQ_MAX_WSUM (16*QFQ_MAX_WEIGHT) |
92 | 92 | ||
93 | #define FRAC_BITS 30 /* fixed point arithmetic */ | 93 | #define FRAC_BITS 30 /* fixed point arithmetic */ |
94 | #define ONE_FP (1UL << FRAC_BITS) | 94 | #define ONE_FP (1UL << FRAC_BITS) |
95 | #define IWSUM (ONE_FP/QFQ_MAX_WSUM) | 95 | #define IWSUM (ONE_FP/QFQ_MAX_WSUM) |
96 | 96 | ||
97 | #define QFQ_MTU_SHIFT 11 | 97 | #define QFQ_MTU_SHIFT 16 /* to support TSO/GSO */ |
98 | #define QFQ_MIN_SLOT_SHIFT (FRAC_BITS + QFQ_MTU_SHIFT - QFQ_MAX_INDEX) | 98 | #define QFQ_MIN_SLOT_SHIFT (FRAC_BITS + QFQ_MTU_SHIFT - QFQ_MAX_INDEX) |
99 | #define QFQ_MIN_LMAX 256 /* min possible lmax for a class */ | ||
99 | 100 | ||
100 | /* | 101 | /* |
101 | * Possible group states. These values are used as indexes for the bitmaps | 102 | * Possible group states. These values are used as indexes for the bitmaps |
@@ -231,6 +232,32 @@ static void qfq_update_class_params(struct qfq_sched *q, struct qfq_class *cl, | |||
231 | q->wsum += delta_w; | 232 | q->wsum += delta_w; |
232 | } | 233 | } |
233 | 234 | ||
235 | static void qfq_update_reactivate_class(struct qfq_sched *q, | ||
236 | struct qfq_class *cl, | ||
237 | u32 inv_w, u32 lmax, int delta_w) | ||
238 | { | ||
239 | bool need_reactivation = false; | ||
240 | int i = qfq_calc_index(inv_w, lmax); | ||
241 | |||
242 | if (&q->groups[i] != cl->grp && cl->qdisc->q.qlen > 0) { | ||
243 | /* | ||
244 | * shift cl->F back, to not charge the | ||
245 | * class for the not-yet-served head | ||
246 | * packet | ||
247 | */ | ||
248 | cl->F = cl->S; | ||
249 | /* remove class from its slot in the old group */ | ||
250 | qfq_deactivate_class(q, cl); | ||
251 | need_reactivation = true; | ||
252 | } | ||
253 | |||
254 | qfq_update_class_params(q, cl, lmax, inv_w, delta_w); | ||
255 | |||
256 | if (need_reactivation) /* activate in new group */ | ||
257 | qfq_activate_class(q, cl, qdisc_peek_len(cl->qdisc)); | ||
258 | } | ||
259 | |||
260 | |||
234 | static int qfq_change_class(struct Qdisc *sch, u32 classid, u32 parentid, | 261 | static int qfq_change_class(struct Qdisc *sch, u32 classid, u32 parentid, |
235 | struct nlattr **tca, unsigned long *arg) | 262 | struct nlattr **tca, unsigned long *arg) |
236 | { | 263 | { |
@@ -238,7 +265,7 @@ static int qfq_change_class(struct Qdisc *sch, u32 classid, u32 parentid, | |||
238 | struct qfq_class *cl = (struct qfq_class *)*arg; | 265 | struct qfq_class *cl = (struct qfq_class *)*arg; |
239 | struct nlattr *tb[TCA_QFQ_MAX + 1]; | 266 | struct nlattr *tb[TCA_QFQ_MAX + 1]; |
240 | u32 weight, lmax, inv_w; | 267 | u32 weight, lmax, inv_w; |
241 | int i, err; | 268 | int err; |
242 | int delta_w; | 269 | int delta_w; |
243 | 270 | ||
244 | if (tca[TCA_OPTIONS] == NULL) { | 271 | if (tca[TCA_OPTIONS] == NULL) { |
@@ -270,16 +297,14 @@ static int qfq_change_class(struct Qdisc *sch, u32 classid, u32 parentid, | |||
270 | 297 | ||
271 | if (tb[TCA_QFQ_LMAX]) { | 298 | if (tb[TCA_QFQ_LMAX]) { |
272 | lmax = nla_get_u32(tb[TCA_QFQ_LMAX]); | 299 | lmax = nla_get_u32(tb[TCA_QFQ_LMAX]); |
273 | if (!lmax || lmax > (1UL << QFQ_MTU_SHIFT)) { | 300 | if (lmax < QFQ_MIN_LMAX || lmax > (1UL << QFQ_MTU_SHIFT)) { |
274 | pr_notice("qfq: invalid max length %u\n", lmax); | 301 | pr_notice("qfq: invalid max length %u\n", lmax); |
275 | return -EINVAL; | 302 | return -EINVAL; |
276 | } | 303 | } |
277 | } else | 304 | } else |
278 | lmax = 1UL << QFQ_MTU_SHIFT; | 305 | lmax = psched_mtu(qdisc_dev(sch)); |
279 | 306 | ||
280 | if (cl != NULL) { | 307 | if (cl != NULL) { |
281 | bool need_reactivation = false; | ||
282 | |||
283 | if (tca[TCA_RATE]) { | 308 | if (tca[TCA_RATE]) { |
284 | err = gen_replace_estimator(&cl->bstats, &cl->rate_est, | 309 | err = gen_replace_estimator(&cl->bstats, &cl->rate_est, |
285 | qdisc_root_sleeping_lock(sch), | 310 | qdisc_root_sleeping_lock(sch), |
@@ -291,24 +316,8 @@ static int qfq_change_class(struct Qdisc *sch, u32 classid, u32 parentid, | |||
291 | if (lmax == cl->lmax && inv_w == cl->inv_w) | 316 | if (lmax == cl->lmax && inv_w == cl->inv_w) |
292 | return 0; /* nothing to update */ | 317 | return 0; /* nothing to update */ |
293 | 318 | ||
294 | i = qfq_calc_index(inv_w, lmax); | ||
295 | sch_tree_lock(sch); | 319 | sch_tree_lock(sch); |
296 | if (&q->groups[i] != cl->grp && cl->qdisc->q.qlen > 0) { | 320 | qfq_update_reactivate_class(q, cl, inv_w, lmax, delta_w); |
297 | /* | ||
298 | * shift cl->F back, to not charge the | ||
299 | * class for the not-yet-served head | ||
300 | * packet | ||
301 | */ | ||
302 | cl->F = cl->S; | ||
303 | /* remove class from its slot in the old group */ | ||
304 | qfq_deactivate_class(q, cl); | ||
305 | need_reactivation = true; | ||
306 | } | ||
307 | |||
308 | qfq_update_class_params(q, cl, lmax, inv_w, delta_w); | ||
309 | |||
310 | if (need_reactivation) /* activate in new group */ | ||
311 | qfq_activate_class(q, cl, qdisc_peek_len(cl->qdisc)); | ||
312 | sch_tree_unlock(sch); | 321 | sch_tree_unlock(sch); |
313 | 322 | ||
314 | return 0; | 323 | return 0; |
@@ -663,15 +672,48 @@ static void qfq_make_eligible(struct qfq_sched *q, u64 old_V) | |||
663 | 672 | ||
664 | 673 | ||
665 | /* | 674 | /* |
666 | * XXX we should make sure that slot becomes less than 32. | 675 | * If the weight and lmax (max_pkt_size) of the classes do not change, |
667 | * This is guaranteed by the input values. | 676 | * then QFQ guarantees that the slot index is never higher than |
668 | * roundedS is always cl->S rounded on grp->slot_shift bits. | 677 | * 2 + ((1<<QFQ_MTU_SHIFT)/QFQ_MIN_LMAX) * (QFQ_MAX_WEIGHT/QFQ_MAX_WSUM). |
678 | * | ||
679 | * With the current values of the above constants, the index is | ||
680 | * then guaranteed to never be higher than 2 + 256 * (1 / 16) = 18. | ||
681 | * | ||
682 | * When the weight of a class is increased or the lmax of the class is | ||
683 | * decreased, a new class with smaller slot size may happen to be | ||
684 | * activated. The activation of this class should be properly delayed | ||
685 | * to when the service of the class has finished in the ideal system | ||
686 | * tracked by QFQ. If the activation of the class is not delayed to | ||
687 | * this reference time instant, then this class may be unjustly served | ||
688 | * before other classes waiting for service. This may cause | ||
689 | * (unfrequently) the above bound to the slot index to be violated for | ||
690 | * some of these unlucky classes. | ||
691 | * | ||
692 | * Instead of delaying the activation of the new class, which is quite | ||
693 | * complex, the following inaccurate but simple solution is used: if | ||
694 | * the slot index is higher than QFQ_MAX_SLOTS-2, then the timestamps | ||
695 | * of the class are shifted backward so as to let the slot index | ||
696 | * become equal to QFQ_MAX_SLOTS-2. This threshold is used because, if | ||
697 | * the slot index is above it, then the data structure implementing | ||
698 | * the bucket list either gets immediately corrupted or may get | ||
699 | * corrupted on a possible next packet arrival that causes the start | ||
700 | * time of the group to be shifted backward. | ||
669 | */ | 701 | */ |
670 | static void qfq_slot_insert(struct qfq_group *grp, struct qfq_class *cl, | 702 | static void qfq_slot_insert(struct qfq_group *grp, struct qfq_class *cl, |
671 | u64 roundedS) | 703 | u64 roundedS) |
672 | { | 704 | { |
673 | u64 slot = (roundedS - grp->S) >> grp->slot_shift; | 705 | u64 slot = (roundedS - grp->S) >> grp->slot_shift; |
674 | unsigned int i = (grp->front + slot) % QFQ_MAX_SLOTS; | 706 | unsigned int i; /* slot index in the bucket list */ |
707 | |||
708 | if (unlikely(slot > QFQ_MAX_SLOTS - 2)) { | ||
709 | u64 deltaS = roundedS - grp->S - | ||
710 | ((u64)(QFQ_MAX_SLOTS - 2)<<grp->slot_shift); | ||
711 | cl->S -= deltaS; | ||
712 | cl->F -= deltaS; | ||
713 | slot = QFQ_MAX_SLOTS - 2; | ||
714 | } | ||
715 | |||
716 | i = (grp->front + slot) % QFQ_MAX_SLOTS; | ||
675 | 717 | ||
676 | hlist_add_head(&cl->next, &grp->slots[i]); | 718 | hlist_add_head(&cl->next, &grp->slots[i]); |
677 | __set_bit(slot, &grp->full_slots); | 719 | __set_bit(slot, &grp->full_slots); |
@@ -892,6 +934,13 @@ static int qfq_enqueue(struct sk_buff *skb, struct Qdisc *sch) | |||
892 | } | 934 | } |
893 | pr_debug("qfq_enqueue: cl = %x\n", cl->common.classid); | 935 | pr_debug("qfq_enqueue: cl = %x\n", cl->common.classid); |
894 | 936 | ||
937 | if (unlikely(cl->lmax < qdisc_pkt_len(skb))) { | ||
938 | pr_debug("qfq: increasing maxpkt from %u to %u for class %u", | ||
939 | cl->lmax, qdisc_pkt_len(skb), cl->common.classid); | ||
940 | qfq_update_reactivate_class(q, cl, cl->inv_w, | ||
941 | qdisc_pkt_len(skb), 0); | ||
942 | } | ||
943 | |||
895 | err = qdisc_enqueue(skb, cl->qdisc); | 944 | err = qdisc_enqueue(skb, cl->qdisc); |
896 | if (unlikely(err != NET_XMIT_SUCCESS)) { | 945 | if (unlikely(err != NET_XMIT_SUCCESS)) { |
897 | pr_debug("qfq_enqueue: enqueue failed %d\n", err); | 946 | pr_debug("qfq_enqueue: enqueue failed %d\n", err); |
diff --git a/net/tipc/handler.c b/net/tipc/handler.c index 111ff8300ae5..b36f0fcd9bdf 100644 --- a/net/tipc/handler.c +++ b/net/tipc/handler.c | |||
@@ -116,7 +116,6 @@ void tipc_handler_stop(void) | |||
116 | return; | 116 | return; |
117 | 117 | ||
118 | handler_enabled = 0; | 118 | handler_enabled = 0; |
119 | tasklet_disable(&tipc_tasklet); | ||
120 | tasklet_kill(&tipc_tasklet); | 119 | tasklet_kill(&tipc_tasklet); |
121 | 120 | ||
122 | spin_lock_bh(&qitem_lock); | 121 | spin_lock_bh(&qitem_lock); |
diff --git a/scripts/Makefile.modinst b/scripts/Makefile.modinst index dda4b2b61927..ecbb44797e28 100644 --- a/scripts/Makefile.modinst +++ b/scripts/Makefile.modinst | |||
@@ -16,8 +16,9 @@ PHONY += $(modules) | |||
16 | __modinst: $(modules) | 16 | __modinst: $(modules) |
17 | @: | 17 | @: |
18 | 18 | ||
19 | # Don't stop modules_install if we can't sign external modules. | ||
19 | quiet_cmd_modules_install = INSTALL $@ | 20 | quiet_cmd_modules_install = INSTALL $@ |
20 | cmd_modules_install = mkdir -p $(2); cp $@ $(2) ; $(mod_strip_cmd) $(2)/$(notdir $@) ; $(mod_sign_cmd) $(2)/$(notdir $@) | 21 | cmd_modules_install = mkdir -p $(2); cp $@ $(2) ; $(mod_strip_cmd) $(2)/$(notdir $@) ; $(mod_sign_cmd) $(2)/$(notdir $@) $(patsubst %,|| true,$(KBUILD_EXTMOD)) |
21 | 22 | ||
22 | # Modules built outside the kernel source tree go into extra by default | 23 | # Modules built outside the kernel source tree go into extra by default |
23 | INSTALL_MOD_DIR ?= extra | 24 | INSTALL_MOD_DIR ?= extra |
diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl index 21a9f5de0a21..f18750e3bd6c 100755 --- a/scripts/checkpatch.pl +++ b/scripts/checkpatch.pl | |||
@@ -1890,8 +1890,10 @@ sub process { | |||
1890 | } | 1890 | } |
1891 | 1891 | ||
1892 | if ($realfile =~ m@^(drivers/net/|net/)@ && | 1892 | if ($realfile =~ m@^(drivers/net/|net/)@ && |
1893 | $rawline !~ m@^\+[ \t]*(\/\*|\*\/)@ && | 1893 | $rawline !~ m@^\+[ \t]*\*/[ \t]*$@ && #trailing */ |
1894 | $rawline =~ m@^\+[ \t]*.+\*\/[ \t]*$@) { | 1894 | $rawline !~ m@^\+.*/\*.*\*/[ \t]*$@ && #inline /*...*/ |
1895 | $rawline !~ m@^\+.*\*{2,}/[ \t]*$@ && #trailing **/ | ||
1896 | $rawline =~ m@^\+[ \t]*.+\*\/[ \t]*$@) { #non blank */ | ||
1895 | WARN("NETWORKING_BLOCK_COMMENT_STYLE", | 1897 | WARN("NETWORKING_BLOCK_COMMENT_STYLE", |
1896 | "networking block comments put the trailing */ on a separate line\n" . $herecurr); | 1898 | "networking block comments put the trailing */ on a separate line\n" . $herecurr); |
1897 | } | 1899 | } |
diff --git a/sound/core/oss/mixer_oss.c b/sound/core/oss/mixer_oss.c index a9a2e63c0222..e8a1d18774b2 100644 --- a/sound/core/oss/mixer_oss.c +++ b/sound/core/oss/mixer_oss.c | |||
@@ -76,6 +76,7 @@ static int snd_mixer_oss_open(struct inode *inode, struct file *file) | |||
76 | snd_card_unref(card); | 76 | snd_card_unref(card); |
77 | return -EFAULT; | 77 | return -EFAULT; |
78 | } | 78 | } |
79 | snd_card_unref(card); | ||
79 | return 0; | 80 | return 0; |
80 | } | 81 | } |
81 | 82 | ||
diff --git a/sound/core/oss/pcm_oss.c b/sound/core/oss/pcm_oss.c index f337b66a020b..4c1cc51772e6 100644 --- a/sound/core/oss/pcm_oss.c +++ b/sound/core/oss/pcm_oss.c | |||
@@ -2454,6 +2454,7 @@ static int snd_pcm_oss_open(struct inode *inode, struct file *file) | |||
2454 | mutex_unlock(&pcm->open_mutex); | 2454 | mutex_unlock(&pcm->open_mutex); |
2455 | if (err < 0) | 2455 | if (err < 0) |
2456 | goto __error; | 2456 | goto __error; |
2457 | snd_card_unref(pcm->card); | ||
2457 | return err; | 2458 | return err; |
2458 | 2459 | ||
2459 | __error: | 2460 | __error: |
diff --git a/sound/core/pcm_native.c b/sound/core/pcm_native.c index 6e8872de5ba0..f9ddecf2f4cd 100644 --- a/sound/core/pcm_native.c +++ b/sound/core/pcm_native.c | |||
@@ -2122,7 +2122,8 @@ static int snd_pcm_playback_open(struct inode *inode, struct file *file) | |||
2122 | pcm = snd_lookup_minor_data(iminor(inode), | 2122 | pcm = snd_lookup_minor_data(iminor(inode), |
2123 | SNDRV_DEVICE_TYPE_PCM_PLAYBACK); | 2123 | SNDRV_DEVICE_TYPE_PCM_PLAYBACK); |
2124 | err = snd_pcm_open(file, pcm, SNDRV_PCM_STREAM_PLAYBACK); | 2124 | err = snd_pcm_open(file, pcm, SNDRV_PCM_STREAM_PLAYBACK); |
2125 | snd_card_unref(pcm->card); | 2125 | if (pcm) |
2126 | snd_card_unref(pcm->card); | ||
2126 | return err; | 2127 | return err; |
2127 | } | 2128 | } |
2128 | 2129 | ||
@@ -2135,7 +2136,8 @@ static int snd_pcm_capture_open(struct inode *inode, struct file *file) | |||
2135 | pcm = snd_lookup_minor_data(iminor(inode), | 2136 | pcm = snd_lookup_minor_data(iminor(inode), |
2136 | SNDRV_DEVICE_TYPE_PCM_CAPTURE); | 2137 | SNDRV_DEVICE_TYPE_PCM_CAPTURE); |
2137 | err = snd_pcm_open(file, pcm, SNDRV_PCM_STREAM_CAPTURE); | 2138 | err = snd_pcm_open(file, pcm, SNDRV_PCM_STREAM_CAPTURE); |
2138 | snd_card_unref(pcm->card); | 2139 | if (pcm) |
2140 | snd_card_unref(pcm->card); | ||
2139 | return err; | 2141 | return err; |
2140 | } | 2142 | } |
2141 | 2143 | ||
diff --git a/sound/core/sound.c b/sound/core/sound.c index 89780c323f19..70ccdab74153 100644 --- a/sound/core/sound.c +++ b/sound/core/sound.c | |||
@@ -114,7 +114,7 @@ void *snd_lookup_minor_data(unsigned int minor, int type) | |||
114 | mreg = snd_minors[minor]; | 114 | mreg = snd_minors[minor]; |
115 | if (mreg && mreg->type == type) { | 115 | if (mreg && mreg->type == type) { |
116 | private_data = mreg->private_data; | 116 | private_data = mreg->private_data; |
117 | if (mreg->card_ptr) | 117 | if (private_data && mreg->card_ptr) |
118 | atomic_inc(&mreg->card_ptr->refcount); | 118 | atomic_inc(&mreg->card_ptr->refcount); |
119 | } else | 119 | } else |
120 | private_data = NULL; | 120 | private_data = NULL; |
diff --git a/sound/core/sound_oss.c b/sound/core/sound_oss.c index e1d79ee35906..726a49ac9725 100644 --- a/sound/core/sound_oss.c +++ b/sound/core/sound_oss.c | |||
@@ -54,7 +54,7 @@ void *snd_lookup_oss_minor_data(unsigned int minor, int type) | |||
54 | mreg = snd_oss_minors[minor]; | 54 | mreg = snd_oss_minors[minor]; |
55 | if (mreg && mreg->type == type) { | 55 | if (mreg && mreg->type == type) { |
56 | private_data = mreg->private_data; | 56 | private_data = mreg->private_data; |
57 | if (mreg->card_ptr) | 57 | if (private_data && mreg->card_ptr) |
58 | atomic_inc(&mreg->card_ptr->refcount); | 58 | atomic_inc(&mreg->card_ptr->refcount); |
59 | } else | 59 | } else |
60 | private_data = NULL; | 60 | private_data = NULL; |
diff --git a/sound/i2c/other/ak4113.c b/sound/i2c/other/ak4113.c index ef68d710d08c..e04e750a77ed 100644 --- a/sound/i2c/other/ak4113.c +++ b/sound/i2c/other/ak4113.c | |||
@@ -426,7 +426,7 @@ static struct snd_kcontrol_new snd_ak4113_iec958_controls[] = { | |||
426 | }, | 426 | }, |
427 | { | 427 | { |
428 | .iface = SNDRV_CTL_ELEM_IFACE_PCM, | 428 | .iface = SNDRV_CTL_ELEM_IFACE_PCM, |
429 | .name = "IEC958 Preample Capture Default", | 429 | .name = "IEC958 Preamble Capture Default", |
430 | .access = SNDRV_CTL_ELEM_ACCESS_READ | | 430 | .access = SNDRV_CTL_ELEM_ACCESS_READ | |
431 | SNDRV_CTL_ELEM_ACCESS_VOLATILE, | 431 | SNDRV_CTL_ELEM_ACCESS_VOLATILE, |
432 | .info = snd_ak4113_spdif_pinfo, | 432 | .info = snd_ak4113_spdif_pinfo, |
diff --git a/sound/i2c/other/ak4114.c b/sound/i2c/other/ak4114.c index 816e7d225fb0..5bf4fca19e48 100644 --- a/sound/i2c/other/ak4114.c +++ b/sound/i2c/other/ak4114.c | |||
@@ -401,7 +401,7 @@ static struct snd_kcontrol_new snd_ak4114_iec958_controls[] = { | |||
401 | }, | 401 | }, |
402 | { | 402 | { |
403 | .iface = SNDRV_CTL_ELEM_IFACE_PCM, | 403 | .iface = SNDRV_CTL_ELEM_IFACE_PCM, |
404 | .name = "IEC958 Preample Capture Default", | 404 | .name = "IEC958 Preamble Capture Default", |
405 | .access = SNDRV_CTL_ELEM_ACCESS_READ | SNDRV_CTL_ELEM_ACCESS_VOLATILE, | 405 | .access = SNDRV_CTL_ELEM_ACCESS_READ | SNDRV_CTL_ELEM_ACCESS_VOLATILE, |
406 | .info = snd_ak4114_spdif_pinfo, | 406 | .info = snd_ak4114_spdif_pinfo, |
407 | .get = snd_ak4114_spdif_pget, | 407 | .get = snd_ak4114_spdif_pget, |
diff --git a/sound/i2c/other/ak4117.c b/sound/i2c/other/ak4117.c index b4b2a51fc117..40e33c9f2b09 100644 --- a/sound/i2c/other/ak4117.c +++ b/sound/i2c/other/ak4117.c | |||
@@ -380,7 +380,7 @@ static struct snd_kcontrol_new snd_ak4117_iec958_controls[] = { | |||
380 | }, | 380 | }, |
381 | { | 381 | { |
382 | .iface = SNDRV_CTL_ELEM_IFACE_PCM, | 382 | .iface = SNDRV_CTL_ELEM_IFACE_PCM, |
383 | .name = "IEC958 Preample Capture Default", | 383 | .name = "IEC958 Preamble Capture Default", |
384 | .access = SNDRV_CTL_ELEM_ACCESS_READ | SNDRV_CTL_ELEM_ACCESS_VOLATILE, | 384 | .access = SNDRV_CTL_ELEM_ACCESS_READ | SNDRV_CTL_ELEM_ACCESS_VOLATILE, |
385 | .info = snd_ak4117_spdif_pinfo, | 385 | .info = snd_ak4117_spdif_pinfo, |
386 | .get = snd_ak4117_spdif_pget, | 386 | .get = snd_ak4117_spdif_pget, |
diff --git a/sound/pci/es1968.c b/sound/pci/es1968.c index 5d0e568fdea1..50169bcfd903 100644 --- a/sound/pci/es1968.c +++ b/sound/pci/es1968.c | |||
@@ -2655,6 +2655,8 @@ static struct ess_device_list pm_whitelist[] __devinitdata = { | |||
2655 | { TYPE_MAESTRO2E, 0x1179 }, | 2655 | { TYPE_MAESTRO2E, 0x1179 }, |
2656 | { TYPE_MAESTRO2E, 0x14c0 }, /* HP omnibook 4150 */ | 2656 | { TYPE_MAESTRO2E, 0x14c0 }, /* HP omnibook 4150 */ |
2657 | { TYPE_MAESTRO2E, 0x1558 }, | 2657 | { TYPE_MAESTRO2E, 0x1558 }, |
2658 | { TYPE_MAESTRO2E, 0x125d }, /* a PCI card, e.g. Terratec DMX */ | ||
2659 | { TYPE_MAESTRO2, 0x125d }, /* a PCI card, e.g. SF64-PCE2 */ | ||
2658 | }; | 2660 | }; |
2659 | 2661 | ||
2660 | static struct ess_device_list mpu_blacklist[] __devinitdata = { | 2662 | static struct ess_device_list mpu_blacklist[] __devinitdata = { |
diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c index 72b085ae7d46..cd2dbaf1be78 100644 --- a/sound/pci/hda/hda_intel.c +++ b/sound/pci/hda/hda_intel.c | |||
@@ -3563,6 +3563,8 @@ static DEFINE_PCI_DEVICE_TABLE(azx_ids) = { | |||
3563 | /* Teradici */ | 3563 | /* Teradici */ |
3564 | { PCI_DEVICE(0x6549, 0x1200), | 3564 | { PCI_DEVICE(0x6549, 0x1200), |
3565 | .driver_data = AZX_DRIVER_TERA | AZX_DCAPS_NO_64BIT }, | 3565 | .driver_data = AZX_DRIVER_TERA | AZX_DCAPS_NO_64BIT }, |
3566 | { PCI_DEVICE(0x6549, 0x2200), | ||
3567 | .driver_data = AZX_DRIVER_TERA | AZX_DCAPS_NO_64BIT }, | ||
3566 | /* Creative X-Fi (CA0110-IBG) */ | 3568 | /* Creative X-Fi (CA0110-IBG) */ |
3567 | /* CTHDA chips */ | 3569 | /* CTHDA chips */ |
3568 | { PCI_DEVICE(0x1102, 0x0010), | 3570 | { PCI_DEVICE(0x1102, 0x0010), |
diff --git a/sound/pci/hda/patch_analog.c b/sound/pci/hda/patch_analog.c index cdd43eadbc67..1eeba7386666 100644 --- a/sound/pci/hda/patch_analog.c +++ b/sound/pci/hda/patch_analog.c | |||
@@ -545,6 +545,7 @@ static int ad198x_build_pcms(struct hda_codec *codec) | |||
545 | if (spec->multiout.dig_out_nid) { | 545 | if (spec->multiout.dig_out_nid) { |
546 | info++; | 546 | info++; |
547 | codec->num_pcms++; | 547 | codec->num_pcms++; |
548 | codec->spdif_status_reset = 1; | ||
548 | info->name = "AD198x Digital"; | 549 | info->name = "AD198x Digital"; |
549 | info->pcm_type = HDA_PCM_TYPE_SPDIF; | 550 | info->pcm_type = HDA_PCM_TYPE_SPDIF; |
550 | info->stream[SNDRV_PCM_STREAM_PLAYBACK] = ad198x_pcm_digital_playback; | 551 | info->stream[SNDRV_PCM_STREAM_PLAYBACK] = ad198x_pcm_digital_playback; |
diff --git a/sound/pci/hda/patch_cirrus.c b/sound/pci/hda/patch_cirrus.c index 61a71131711c..d5f3a26d608d 100644 --- a/sound/pci/hda/patch_cirrus.c +++ b/sound/pci/hda/patch_cirrus.c | |||
@@ -101,8 +101,8 @@ enum { | |||
101 | #define CS420X_VENDOR_NID 0x11 | 101 | #define CS420X_VENDOR_NID 0x11 |
102 | #define CS_DIG_OUT1_PIN_NID 0x10 | 102 | #define CS_DIG_OUT1_PIN_NID 0x10 |
103 | #define CS_DIG_OUT2_PIN_NID 0x15 | 103 | #define CS_DIG_OUT2_PIN_NID 0x15 |
104 | #define CS_DMIC1_PIN_NID 0x12 | 104 | #define CS_DMIC1_PIN_NID 0x0e |
105 | #define CS_DMIC2_PIN_NID 0x0e | 105 | #define CS_DMIC2_PIN_NID 0x12 |
106 | 106 | ||
107 | /* coef indices */ | 107 | /* coef indices */ |
108 | #define IDX_SPDIF_STAT 0x0000 | 108 | #define IDX_SPDIF_STAT 0x0000 |
@@ -1079,14 +1079,18 @@ static void init_input(struct hda_codec *codec) | |||
1079 | cs_automic(codec, NULL); | 1079 | cs_automic(codec, NULL); |
1080 | 1080 | ||
1081 | coef = 0x000a; /* ADC1/2 - Digital and Analog Soft Ramp */ | 1081 | coef = 0x000a; /* ADC1/2 - Digital and Analog Soft Ramp */ |
1082 | cs_vendor_coef_set(codec, IDX_ADC_CFG, coef); | ||
1083 | |||
1084 | coef = cs_vendor_coef_get(codec, IDX_BEEP_CFG); | ||
1082 | if (is_active_pin(codec, CS_DMIC2_PIN_NID)) | 1085 | if (is_active_pin(codec, CS_DMIC2_PIN_NID)) |
1083 | coef |= 0x0500; /* DMIC2 2 chan on, GPIO1 off */ | 1086 | coef |= 1 << 4; /* DMIC2 2 chan on, GPIO1 off */ |
1084 | if (is_active_pin(codec, CS_DMIC1_PIN_NID)) | 1087 | if (is_active_pin(codec, CS_DMIC1_PIN_NID)) |
1085 | coef |= 0x1800; /* DMIC1 2 chan on, GPIO0 off | 1088 | coef |= 1 << 3; /* DMIC1 2 chan on, GPIO0 off |
1086 | * No effect if SPDIF_OUT2 is | 1089 | * No effect if SPDIF_OUT2 is |
1087 | * selected in IDX_SPDIF_CTL. | 1090 | * selected in IDX_SPDIF_CTL. |
1088 | */ | 1091 | */ |
1089 | cs_vendor_coef_set(codec, IDX_ADC_CFG, coef); | 1092 | |
1093 | cs_vendor_coef_set(codec, IDX_BEEP_CFG, coef); | ||
1090 | } else { | 1094 | } else { |
1091 | if (spec->mic_detect) | 1095 | if (spec->mic_detect) |
1092 | cs_automic(codec, NULL); | 1096 | cs_automic(codec, NULL); |
@@ -1107,7 +1111,7 @@ static const struct hda_verb cs_coef_init_verbs[] = { | |||
1107 | | 0x0400 /* Disable Coefficient Auto increment */ | 1111 | | 0x0400 /* Disable Coefficient Auto increment */ |
1108 | )}, | 1112 | )}, |
1109 | /* Beep */ | 1113 | /* Beep */ |
1110 | {0x11, AC_VERB_SET_COEF_INDEX, IDX_DAC_CFG}, | 1114 | {0x11, AC_VERB_SET_COEF_INDEX, IDX_BEEP_CFG}, |
1111 | {0x11, AC_VERB_SET_PROC_COEF, 0x0007}, /* Enable Beep thru DAC1/2/3 */ | 1115 | {0x11, AC_VERB_SET_PROC_COEF, 0x0007}, /* Enable Beep thru DAC1/2/3 */ |
1112 | 1116 | ||
1113 | {} /* terminator */ | 1117 | {} /* terminator */ |
@@ -1728,8 +1732,7 @@ static int cs421x_mux_enum_put(struct snd_kcontrol *kcontrol, | |||
1728 | 1732 | ||
1729 | } | 1733 | } |
1730 | 1734 | ||
1731 | static struct snd_kcontrol_new cs421x_capture_source = { | 1735 | static const struct snd_kcontrol_new cs421x_capture_source = { |
1732 | |||
1733 | .iface = SNDRV_CTL_ELEM_IFACE_MIXER, | 1736 | .iface = SNDRV_CTL_ELEM_IFACE_MIXER, |
1734 | .name = "Capture Source", | 1737 | .name = "Capture Source", |
1735 | .access = SNDRV_CTL_ELEM_ACCESS_READWRITE, | 1738 | .access = SNDRV_CTL_ELEM_ACCESS_READWRITE, |
@@ -1946,7 +1949,7 @@ static int cs421x_suspend(struct hda_codec *codec) | |||
1946 | } | 1949 | } |
1947 | #endif | 1950 | #endif |
1948 | 1951 | ||
1949 | static struct hda_codec_ops cs421x_patch_ops = { | 1952 | static const struct hda_codec_ops cs421x_patch_ops = { |
1950 | .build_controls = cs421x_build_controls, | 1953 | .build_controls = cs421x_build_controls, |
1951 | .build_pcms = cs_build_pcms, | 1954 | .build_pcms = cs_build_pcms, |
1952 | .init = cs421x_init, | 1955 | .init = cs421x_init, |
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c index f7397ad02a0d..c0ce3b1f04b4 100644 --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c | |||
@@ -5840,7 +5840,7 @@ static int alc269_parse_auto_config(struct hda_codec *codec) | |||
5840 | return alc_parse_auto_config(codec, alc269_ignore, ssids); | 5840 | return alc_parse_auto_config(codec, alc269_ignore, ssids); |
5841 | } | 5841 | } |
5842 | 5842 | ||
5843 | static void alc269_toggle_power_output(struct hda_codec *codec, int power_up) | 5843 | static void alc269vb_toggle_power_output(struct hda_codec *codec, int power_up) |
5844 | { | 5844 | { |
5845 | int val = alc_read_coef_idx(codec, 0x04); | 5845 | int val = alc_read_coef_idx(codec, 0x04); |
5846 | if (power_up) | 5846 | if (power_up) |
@@ -5857,10 +5857,10 @@ static void alc269_shutup(struct hda_codec *codec) | |||
5857 | if (spec->codec_variant != ALC269_TYPE_ALC269VB) | 5857 | if (spec->codec_variant != ALC269_TYPE_ALC269VB) |
5858 | return; | 5858 | return; |
5859 | 5859 | ||
5860 | if ((alc_get_coef0(codec) & 0x00ff) == 0x017) | 5860 | if (spec->codec_variant == ALC269_TYPE_ALC269VB) |
5861 | alc269_toggle_power_output(codec, 0); | 5861 | alc269vb_toggle_power_output(codec, 0); |
5862 | if ((alc_get_coef0(codec) & 0x00ff) == 0x018) { | 5862 | if (spec->codec_variant == ALC269_TYPE_ALC269VB && |
5863 | alc269_toggle_power_output(codec, 0); | 5863 | (alc_get_coef0(codec) & 0x00ff) == 0x018) { |
5864 | msleep(150); | 5864 | msleep(150); |
5865 | } | 5865 | } |
5866 | } | 5866 | } |
@@ -5870,24 +5870,22 @@ static int alc269_resume(struct hda_codec *codec) | |||
5870 | { | 5870 | { |
5871 | struct alc_spec *spec = codec->spec; | 5871 | struct alc_spec *spec = codec->spec; |
5872 | 5872 | ||
5873 | if (spec->codec_variant == ALC269_TYPE_ALC269VB || | 5873 | if (spec->codec_variant == ALC269_TYPE_ALC269VB) |
5874 | alc269vb_toggle_power_output(codec, 0); | ||
5875 | if (spec->codec_variant == ALC269_TYPE_ALC269VB && | ||
5874 | (alc_get_coef0(codec) & 0x00ff) == 0x018) { | 5876 | (alc_get_coef0(codec) & 0x00ff) == 0x018) { |
5875 | alc269_toggle_power_output(codec, 0); | ||
5876 | msleep(150); | 5877 | msleep(150); |
5877 | } | 5878 | } |
5878 | 5879 | ||
5879 | codec->patch_ops.init(codec); | 5880 | codec->patch_ops.init(codec); |
5880 | 5881 | ||
5881 | if (spec->codec_variant == ALC269_TYPE_ALC269VB || | 5882 | if (spec->codec_variant == ALC269_TYPE_ALC269VB) |
5883 | alc269vb_toggle_power_output(codec, 1); | ||
5884 | if (spec->codec_variant == ALC269_TYPE_ALC269VB && | ||
5882 | (alc_get_coef0(codec) & 0x00ff) == 0x017) { | 5885 | (alc_get_coef0(codec) & 0x00ff) == 0x017) { |
5883 | alc269_toggle_power_output(codec, 1); | ||
5884 | msleep(200); | 5886 | msleep(200); |
5885 | } | 5887 | } |
5886 | 5888 | ||
5887 | if (spec->codec_variant == ALC269_TYPE_ALC269VB || | ||
5888 | (alc_get_coef0(codec) & 0x00ff) == 0x018) | ||
5889 | alc269_toggle_power_output(codec, 1); | ||
5890 | |||
5891 | snd_hda_codec_resume_amp(codec); | 5889 | snd_hda_codec_resume_amp(codec); |
5892 | snd_hda_codec_resume_cache(codec); | 5890 | snd_hda_codec_resume_cache(codec); |
5893 | hda_call_check_power_status(codec, 0x01); | 5891 | hda_call_check_power_status(codec, 0x01); |
@@ -7079,6 +7077,7 @@ static const struct hda_codec_preset snd_hda_preset_realtek[] = { | |||
7079 | .patch = patch_alc662 }, | 7077 | .patch = patch_alc662 }, |
7080 | { .id = 0x10ec0663, .name = "ALC663", .patch = patch_alc662 }, | 7078 | { .id = 0x10ec0663, .name = "ALC663", .patch = patch_alc662 }, |
7081 | { .id = 0x10ec0665, .name = "ALC665", .patch = patch_alc662 }, | 7079 | { .id = 0x10ec0665, .name = "ALC665", .patch = patch_alc662 }, |
7080 | { .id = 0x10ec0668, .name = "ALC668", .patch = patch_alc662 }, | ||
7082 | { .id = 0x10ec0670, .name = "ALC670", .patch = patch_alc662 }, | 7081 | { .id = 0x10ec0670, .name = "ALC670", .patch = patch_alc662 }, |
7083 | { .id = 0x10ec0680, .name = "ALC680", .patch = patch_alc680 }, | 7082 | { .id = 0x10ec0680, .name = "ALC680", .patch = patch_alc680 }, |
7084 | { .id = 0x10ec0880, .name = "ALC880", .patch = patch_alc880 }, | 7083 | { .id = 0x10ec0880, .name = "ALC880", .patch = patch_alc880 }, |
@@ -7096,6 +7095,7 @@ static const struct hda_codec_preset snd_hda_preset_realtek[] = { | |||
7096 | { .id = 0x10ec0889, .name = "ALC889", .patch = patch_alc882 }, | 7095 | { .id = 0x10ec0889, .name = "ALC889", .patch = patch_alc882 }, |
7097 | { .id = 0x10ec0892, .name = "ALC892", .patch = patch_alc662 }, | 7096 | { .id = 0x10ec0892, .name = "ALC892", .patch = patch_alc662 }, |
7098 | { .id = 0x10ec0899, .name = "ALC898", .patch = patch_alc882 }, | 7097 | { .id = 0x10ec0899, .name = "ALC898", .patch = patch_alc882 }, |
7098 | { .id = 0x10ec0900, .name = "ALC1150", .patch = patch_alc882 }, | ||
7099 | {} /* terminator */ | 7099 | {} /* terminator */ |
7100 | }; | 7100 | }; |
7101 | 7101 | ||
diff --git a/sound/pci/hda/patch_via.c b/sound/pci/hda/patch_via.c index 72a2f60b087c..019e1a00414a 100644 --- a/sound/pci/hda/patch_via.c +++ b/sound/pci/hda/patch_via.c | |||
@@ -1809,11 +1809,11 @@ static int via_auto_fill_dac_nids(struct hda_codec *codec) | |||
1809 | { | 1809 | { |
1810 | struct via_spec *spec = codec->spec; | 1810 | struct via_spec *spec = codec->spec; |
1811 | const struct auto_pin_cfg *cfg = &spec->autocfg; | 1811 | const struct auto_pin_cfg *cfg = &spec->autocfg; |
1812 | int i, dac_num; | 1812 | int i; |
1813 | hda_nid_t nid; | 1813 | hda_nid_t nid; |
1814 | 1814 | ||
1815 | spec->multiout.num_dacs = 0; | ||
1815 | spec->multiout.dac_nids = spec->private_dac_nids; | 1816 | spec->multiout.dac_nids = spec->private_dac_nids; |
1816 | dac_num = 0; | ||
1817 | for (i = 0; i < cfg->line_outs; i++) { | 1817 | for (i = 0; i < cfg->line_outs; i++) { |
1818 | hda_nid_t dac = 0; | 1818 | hda_nid_t dac = 0; |
1819 | nid = cfg->line_out_pins[i]; | 1819 | nid = cfg->line_out_pins[i]; |
@@ -1824,16 +1824,13 @@ static int via_auto_fill_dac_nids(struct hda_codec *codec) | |||
1824 | if (!i && parse_output_path(codec, nid, dac, 1, | 1824 | if (!i && parse_output_path(codec, nid, dac, 1, |
1825 | &spec->out_mix_path)) | 1825 | &spec->out_mix_path)) |
1826 | dac = spec->out_mix_path.path[0]; | 1826 | dac = spec->out_mix_path.path[0]; |
1827 | if (dac) { | 1827 | if (dac) |
1828 | spec->private_dac_nids[i] = dac; | 1828 | spec->private_dac_nids[spec->multiout.num_dacs++] = dac; |
1829 | dac_num++; | ||
1830 | } | ||
1831 | } | 1829 | } |
1832 | if (!spec->out_path[0].depth && spec->out_mix_path.depth) { | 1830 | if (!spec->out_path[0].depth && spec->out_mix_path.depth) { |
1833 | spec->out_path[0] = spec->out_mix_path; | 1831 | spec->out_path[0] = spec->out_mix_path; |
1834 | spec->out_mix_path.depth = 0; | 1832 | spec->out_mix_path.depth = 0; |
1835 | } | 1833 | } |
1836 | spec->multiout.num_dacs = dac_num; | ||
1837 | return 0; | 1834 | return 0; |
1838 | } | 1835 | } |
1839 | 1836 | ||
@@ -3628,6 +3625,7 @@ static void set_widgets_power_state_vt2002P(struct hda_codec *codec) | |||
3628 | */ | 3625 | */ |
3629 | enum { | 3626 | enum { |
3630 | VIA_FIXUP_INTMIC_BOOST, | 3627 | VIA_FIXUP_INTMIC_BOOST, |
3628 | VIA_FIXUP_ASUS_G75, | ||
3631 | }; | 3629 | }; |
3632 | 3630 | ||
3633 | static void via_fixup_intmic_boost(struct hda_codec *codec, | 3631 | static void via_fixup_intmic_boost(struct hda_codec *codec, |
@@ -3642,13 +3640,35 @@ static const struct hda_fixup via_fixups[] = { | |||
3642 | .type = HDA_FIXUP_FUNC, | 3640 | .type = HDA_FIXUP_FUNC, |
3643 | .v.func = via_fixup_intmic_boost, | 3641 | .v.func = via_fixup_intmic_boost, |
3644 | }, | 3642 | }, |
3643 | [VIA_FIXUP_ASUS_G75] = { | ||
3644 | .type = HDA_FIXUP_PINS, | ||
3645 | .v.pins = (const struct hda_pintbl[]) { | ||
3646 | /* set 0x24 and 0x33 as speakers */ | ||
3647 | { 0x24, 0x991301f0 }, | ||
3648 | { 0x33, 0x991301f1 }, /* subwoofer */ | ||
3649 | { } | ||
3650 | } | ||
3651 | }, | ||
3645 | }; | 3652 | }; |
3646 | 3653 | ||
3647 | static const struct snd_pci_quirk vt2002p_fixups[] = { | 3654 | static const struct snd_pci_quirk vt2002p_fixups[] = { |
3655 | SND_PCI_QUIRK(0x1043, 0x1487, "Asus G75", VIA_FIXUP_ASUS_G75), | ||
3648 | SND_PCI_QUIRK(0x1043, 0x8532, "Asus X202E", VIA_FIXUP_INTMIC_BOOST), | 3656 | SND_PCI_QUIRK(0x1043, 0x8532, "Asus X202E", VIA_FIXUP_INTMIC_BOOST), |
3649 | {} | 3657 | {} |
3650 | }; | 3658 | }; |
3651 | 3659 | ||
3660 | /* NIDs 0x24 and 0x33 on VT1802 have connections to non-existing NID 0x3e | ||
3661 | * Replace this with mixer NID 0x1c | ||
3662 | */ | ||
3663 | static void fix_vt1802_connections(struct hda_codec *codec) | ||
3664 | { | ||
3665 | static hda_nid_t conn_24[] = { 0x14, 0x1c }; | ||
3666 | static hda_nid_t conn_33[] = { 0x1c }; | ||
3667 | |||
3668 | snd_hda_override_conn_list(codec, 0x24, ARRAY_SIZE(conn_24), conn_24); | ||
3669 | snd_hda_override_conn_list(codec, 0x33, ARRAY_SIZE(conn_33), conn_33); | ||
3670 | } | ||
3671 | |||
3652 | /* patch for vt2002P */ | 3672 | /* patch for vt2002P */ |
3653 | static int patch_vt2002P(struct hda_codec *codec) | 3673 | static int patch_vt2002P(struct hda_codec *codec) |
3654 | { | 3674 | { |
@@ -3663,6 +3683,8 @@ static int patch_vt2002P(struct hda_codec *codec) | |||
3663 | spec->aa_mix_nid = 0x21; | 3683 | spec->aa_mix_nid = 0x21; |
3664 | override_mic_boost(codec, 0x2b, 0, 3, 40); | 3684 | override_mic_boost(codec, 0x2b, 0, 3, 40); |
3665 | override_mic_boost(codec, 0x29, 0, 3, 40); | 3685 | override_mic_boost(codec, 0x29, 0, 3, 40); |
3686 | if (spec->codec_type == VT1802) | ||
3687 | fix_vt1802_connections(codec); | ||
3666 | add_secret_dac_path(codec); | 3688 | add_secret_dac_path(codec); |
3667 | 3689 | ||
3668 | snd_hda_pick_fixup(codec, NULL, vt2002p_fixups, via_fixups); | 3690 | snd_hda_pick_fixup(codec, NULL, vt2002p_fixups, via_fixups); |
diff --git a/sound/pci/rme9652/hdspm.c b/sound/pci/rme9652/hdspm.c index f1cd1e387801..748e36c66603 100644 --- a/sound/pci/rme9652/hdspm.c +++ b/sound/pci/rme9652/hdspm.c | |||
@@ -3979,7 +3979,8 @@ static int snd_hdspm_get_sync_check(struct snd_kcontrol *kcontrol, | |||
3979 | case 8: /* SYNC IN */ | 3979 | case 8: /* SYNC IN */ |
3980 | val = hdspm_sync_in_sync_check(hdspm); break; | 3980 | val = hdspm_sync_in_sync_check(hdspm); break; |
3981 | default: | 3981 | default: |
3982 | val = hdspm_s1_sync_check(hdspm, ucontrol->id.index-1); | 3982 | val = hdspm_s1_sync_check(hdspm, |
3983 | kcontrol->private_value-1); | ||
3983 | } | 3984 | } |
3984 | break; | 3985 | break; |
3985 | 3986 | ||
@@ -4899,7 +4900,7 @@ snd_hdspm_proc_read_madi(struct snd_info_entry * entry, | |||
4899 | insel = "Coaxial"; | 4900 | insel = "Coaxial"; |
4900 | break; | 4901 | break; |
4901 | default: | 4902 | default: |
4902 | insel = "Unkown"; | 4903 | insel = "Unknown"; |
4903 | } | 4904 | } |
4904 | 4905 | ||
4905 | snd_iprintf(buffer, | 4906 | snd_iprintf(buffer, |
diff --git a/sound/soc/codecs/cs42l52.c b/sound/soc/codecs/cs42l52.c index 61599298fb26..4d8db3685e96 100644 --- a/sound/soc/codecs/cs42l52.c +++ b/sound/soc/codecs/cs42l52.c | |||
@@ -763,7 +763,7 @@ static int cs42l52_set_sysclk(struct snd_soc_dai *codec_dai, | |||
763 | if ((freq >= CS42L52_MIN_CLK) && (freq <= CS42L52_MAX_CLK)) { | 763 | if ((freq >= CS42L52_MIN_CLK) && (freq <= CS42L52_MAX_CLK)) { |
764 | cs42l52->sysclk = freq; | 764 | cs42l52->sysclk = freq; |
765 | } else { | 765 | } else { |
766 | dev_err(codec->dev, "Invalid freq paramter\n"); | 766 | dev_err(codec->dev, "Invalid freq parameter\n"); |
767 | return -EINVAL; | 767 | return -EINVAL; |
768 | } | 768 | } |
769 | return 0; | 769 | return 0; |
diff --git a/sound/soc/codecs/wm8994.c b/sound/soc/codecs/wm8994.c index 3fddc7ad1127..b2b2b37131bd 100644 --- a/sound/soc/codecs/wm8994.c +++ b/sound/soc/codecs/wm8994.c | |||
@@ -3722,7 +3722,7 @@ static irqreturn_t wm8958_mic_irq(int irq, void *data) | |||
3722 | } while (count--); | 3722 | } while (count--); |
3723 | 3723 | ||
3724 | if (count == 0) | 3724 | if (count == 0) |
3725 | dev_warn(codec->dev, "No impedence range reported for jack\n"); | 3725 | dev_warn(codec->dev, "No impedance range reported for jack\n"); |
3726 | 3726 | ||
3727 | #ifndef CONFIG_SND_SOC_WM8994_MODULE | 3727 | #ifndef CONFIG_SND_SOC_WM8994_MODULE |
3728 | trace_snd_soc_jack_irq(dev_name(codec->dev)); | 3728 | trace_snd_soc_jack_irq(dev_name(codec->dev)); |
diff --git a/sound/soc/fsl/imx-pcm-fiq.c b/sound/soc/fsl/imx-pcm-fiq.c index 22c6130957ba..9ffc9e66308f 100644 --- a/sound/soc/fsl/imx-pcm-fiq.c +++ b/sound/soc/fsl/imx-pcm-fiq.c | |||
@@ -29,7 +29,6 @@ | |||
29 | 29 | ||
30 | #include <asm/fiq.h> | 30 | #include <asm/fiq.h> |
31 | 31 | ||
32 | #include <mach/irqs.h> | ||
33 | #include <linux/platform_data/asoc-imx-ssi.h> | 32 | #include <linux/platform_data/asoc-imx-ssi.h> |
34 | 33 | ||
35 | #include "imx-ssi.h" | 34 | #include "imx-ssi.h" |
diff --git a/sound/soc/fsl/imx-ssi.c b/sound/soc/fsl/imx-ssi.c index 006f7d465ed2..dd566444e3c3 100644 --- a/sound/soc/fsl/imx-ssi.c +++ b/sound/soc/fsl/imx-ssi.c | |||
@@ -48,7 +48,6 @@ | |||
48 | #include <sound/soc.h> | 48 | #include <sound/soc.h> |
49 | 49 | ||
50 | #include <linux/platform_data/asoc-imx-ssi.h> | 50 | #include <linux/platform_data/asoc-imx-ssi.h> |
51 | #include <mach/hardware.h> | ||
52 | 51 | ||
53 | #include "imx-ssi.h" | 52 | #include "imx-ssi.h" |
54 | 53 | ||
diff --git a/sound/usb/endpoint.c b/sound/usb/endpoint.c index 7f78c6d782b0..34de6f2faf61 100644 --- a/sound/usb/endpoint.c +++ b/sound/usb/endpoint.c | |||
@@ -35,6 +35,7 @@ | |||
35 | 35 | ||
36 | #define EP_FLAG_ACTIVATED 0 | 36 | #define EP_FLAG_ACTIVATED 0 |
37 | #define EP_FLAG_RUNNING 1 | 37 | #define EP_FLAG_RUNNING 1 |
38 | #define EP_FLAG_STOPPING 2 | ||
38 | 39 | ||
39 | /* | 40 | /* |
40 | * snd_usb_endpoint is a model that abstracts everything related to an | 41 | * snd_usb_endpoint is a model that abstracts everything related to an |
@@ -502,10 +503,20 @@ static int wait_clear_urbs(struct snd_usb_endpoint *ep) | |||
502 | if (alive) | 503 | if (alive) |
503 | snd_printk(KERN_ERR "timeout: still %d active urbs on EP #%x\n", | 504 | snd_printk(KERN_ERR "timeout: still %d active urbs on EP #%x\n", |
504 | alive, ep->ep_num); | 505 | alive, ep->ep_num); |
506 | clear_bit(EP_FLAG_STOPPING, &ep->flags); | ||
505 | 507 | ||
506 | return 0; | 508 | return 0; |
507 | } | 509 | } |
508 | 510 | ||
511 | /* sync the pending stop operation; | ||
512 | * this function itself doesn't trigger the stop operation | ||
513 | */ | ||
514 | void snd_usb_endpoint_sync_pending_stop(struct snd_usb_endpoint *ep) | ||
515 | { | ||
516 | if (ep && test_bit(EP_FLAG_STOPPING, &ep->flags)) | ||
517 | wait_clear_urbs(ep); | ||
518 | } | ||
519 | |||
509 | /* | 520 | /* |
510 | * unlink active urbs. | 521 | * unlink active urbs. |
511 | */ | 522 | */ |
@@ -918,6 +929,8 @@ void snd_usb_endpoint_stop(struct snd_usb_endpoint *ep, | |||
918 | 929 | ||
919 | if (wait) | 930 | if (wait) |
920 | wait_clear_urbs(ep); | 931 | wait_clear_urbs(ep); |
932 | else | ||
933 | set_bit(EP_FLAG_STOPPING, &ep->flags); | ||
921 | } | 934 | } |
922 | } | 935 | } |
923 | 936 | ||
diff --git a/sound/usb/endpoint.h b/sound/usb/endpoint.h index 6376ccf10fd4..3d4c9705041f 100644 --- a/sound/usb/endpoint.h +++ b/sound/usb/endpoint.h | |||
@@ -19,6 +19,7 @@ int snd_usb_endpoint_set_params(struct snd_usb_endpoint *ep, | |||
19 | int snd_usb_endpoint_start(struct snd_usb_endpoint *ep, int can_sleep); | 19 | int snd_usb_endpoint_start(struct snd_usb_endpoint *ep, int can_sleep); |
20 | void snd_usb_endpoint_stop(struct snd_usb_endpoint *ep, | 20 | void snd_usb_endpoint_stop(struct snd_usb_endpoint *ep, |
21 | int force, int can_sleep, int wait); | 21 | int force, int can_sleep, int wait); |
22 | void snd_usb_endpoint_sync_pending_stop(struct snd_usb_endpoint *ep); | ||
22 | int snd_usb_endpoint_activate(struct snd_usb_endpoint *ep); | 23 | int snd_usb_endpoint_activate(struct snd_usb_endpoint *ep); |
23 | int snd_usb_endpoint_deactivate(struct snd_usb_endpoint *ep); | 24 | int snd_usb_endpoint_deactivate(struct snd_usb_endpoint *ep); |
24 | void snd_usb_endpoint_free(struct list_head *head); | 25 | void snd_usb_endpoint_free(struct list_head *head); |
diff --git a/sound/usb/pcm.c b/sound/usb/pcm.c index 37428f74dbb6..5c12a3fe8c3e 100644 --- a/sound/usb/pcm.c +++ b/sound/usb/pcm.c | |||
@@ -568,6 +568,9 @@ static int snd_usb_pcm_prepare(struct snd_pcm_substream *substream) | |||
568 | goto unlock; | 568 | goto unlock; |
569 | } | 569 | } |
570 | 570 | ||
571 | snd_usb_endpoint_sync_pending_stop(subs->sync_endpoint); | ||
572 | snd_usb_endpoint_sync_pending_stop(subs->data_endpoint); | ||
573 | |||
571 | ret = set_format(subs, subs->cur_audiofmt); | 574 | ret = set_format(subs, subs->cur_audiofmt); |
572 | if (ret < 0) | 575 | if (ret < 0) |
573 | goto unlock; | 576 | goto unlock; |
diff --git a/tools/testing/selftests/Makefile b/tools/testing/selftests/Makefile index 43480149119e..85baf11e2acd 100644 --- a/tools/testing/selftests/Makefile +++ b/tools/testing/selftests/Makefile | |||
@@ -1,4 +1,4 @@ | |||
1 | TARGETS = breakpoints kcmp mqueue vm cpu-hotplug memory-hotplug epoll | 1 | TARGETS = breakpoints kcmp mqueue vm cpu-hotplug memory-hotplug |
2 | 2 | ||
3 | all: | 3 | all: |
4 | for TARGET in $(TARGETS); do \ | 4 | for TARGET in $(TARGETS); do \ |
diff --git a/tools/testing/selftests/epoll/Makefile b/tools/testing/selftests/epoll/Makefile deleted file mode 100644 index 19806ed62f50..000000000000 --- a/tools/testing/selftests/epoll/Makefile +++ /dev/null | |||
@@ -1,11 +0,0 @@ | |||
1 | # Makefile for epoll selftests | ||
2 | |||
3 | all: test_epoll | ||
4 | %: %.c | ||
5 | gcc -pthread -g -o $@ $^ | ||
6 | |||
7 | run_tests: all | ||
8 | ./test_epoll | ||
9 | |||
10 | clean: | ||
11 | $(RM) test_epoll | ||
diff --git a/tools/testing/selftests/epoll/test_epoll.c b/tools/testing/selftests/epoll/test_epoll.c deleted file mode 100644 index f7525392ce84..000000000000 --- a/tools/testing/selftests/epoll/test_epoll.c +++ /dev/null | |||
@@ -1,344 +0,0 @@ | |||
1 | /* | ||
2 | * tools/testing/selftests/epoll/test_epoll.c | ||
3 | * | ||
4 | * Copyright 2012 Adobe Systems Incorporated | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | * | ||
11 | * Paton J. Lewis <palewis@adobe.com> | ||
12 | * | ||
13 | */ | ||
14 | |||
15 | #include <errno.h> | ||
16 | #include <fcntl.h> | ||
17 | #include <pthread.h> | ||
18 | #include <stdio.h> | ||
19 | #include <stdlib.h> | ||
20 | #include <unistd.h> | ||
21 | #include <sys/epoll.h> | ||
22 | #include <sys/socket.h> | ||
23 | |||
24 | /* | ||
25 | * A pointer to an epoll_item_private structure will be stored in the epoll | ||
26 | * item's event structure so that we can get access to the epoll_item_private | ||
27 | * data after calling epoll_wait: | ||
28 | */ | ||
29 | struct epoll_item_private { | ||
30 | int index; /* Position of this struct within the epoll_items array. */ | ||
31 | int fd; | ||
32 | uint32_t events; | ||
33 | pthread_mutex_t mutex; /* Guards the following variables... */ | ||
34 | int stop; | ||
35 | int status; /* Stores any error encountered while handling item. */ | ||
36 | /* The following variable allows us to test whether we have encountered | ||
37 | a problem while attempting to cancel and delete the associated | ||
38 | event. When the test program exits, 'deleted' should be exactly | ||
39 | one. If it is greater than one, then the failed test reflects a real | ||
40 | world situation where we would have tried to access the epoll item's | ||
41 | private data after deleting it: */ | ||
42 | int deleted; | ||
43 | }; | ||
44 | |||
45 | struct epoll_item_private *epoll_items; | ||
46 | |||
47 | /* | ||
48 | * Delete the specified item from the epoll set. In a real-world secneario this | ||
49 | * is where we would free the associated data structure, but in this testing | ||
50 | * environment we retain the structure so that we can test for double-deletion: | ||
51 | */ | ||
52 | void delete_item(int index) | ||
53 | { | ||
54 | __sync_fetch_and_add(&epoll_items[index].deleted, 1); | ||
55 | } | ||
56 | |||
57 | /* | ||
58 | * A pointer to a read_thread_data structure will be passed as the argument to | ||
59 | * each read thread: | ||
60 | */ | ||
61 | struct read_thread_data { | ||
62 | int stop; | ||
63 | int status; /* Indicates any error encountered by the read thread. */ | ||
64 | int epoll_set; | ||
65 | }; | ||
66 | |||
67 | /* | ||
68 | * The function executed by the read threads: | ||
69 | */ | ||
70 | void *read_thread_function(void *function_data) | ||
71 | { | ||
72 | struct read_thread_data *thread_data = | ||
73 | (struct read_thread_data *)function_data; | ||
74 | struct epoll_event event_data; | ||
75 | struct epoll_item_private *item_data; | ||
76 | char socket_data; | ||
77 | |||
78 | /* Handle events until we encounter an error or this thread's 'stop' | ||
79 | condition is set: */ | ||
80 | while (1) { | ||
81 | int result = epoll_wait(thread_data->epoll_set, | ||
82 | &event_data, | ||
83 | 1, /* Number of desired events */ | ||
84 | 1000); /* Timeout in ms */ | ||
85 | if (result < 0) { | ||
86 | /* Breakpoints signal all threads. Ignore that while | ||
87 | debugging: */ | ||
88 | if (errno == EINTR) | ||
89 | continue; | ||
90 | thread_data->status = errno; | ||
91 | return 0; | ||
92 | } else if (thread_data->stop) | ||
93 | return 0; | ||
94 | else if (result == 0) /* Timeout */ | ||
95 | continue; | ||
96 | |||
97 | /* We need the mutex here because checking for the stop | ||
98 | condition and re-enabling the epoll item need to be done | ||
99 | together as one atomic operation when EPOLL_CTL_DISABLE is | ||
100 | available: */ | ||
101 | item_data = (struct epoll_item_private *)event_data.data.ptr; | ||
102 | pthread_mutex_lock(&item_data->mutex); | ||
103 | |||
104 | /* Remove the item from the epoll set if we want to stop | ||
105 | handling that event: */ | ||
106 | if (item_data->stop) | ||
107 | delete_item(item_data->index); | ||
108 | else { | ||
109 | /* Clear the data that was written to the other end of | ||
110 | our non-blocking socket: */ | ||
111 | do { | ||
112 | if (read(item_data->fd, &socket_data, 1) < 1) { | ||
113 | if ((errno == EAGAIN) || | ||
114 | (errno == EWOULDBLOCK)) | ||
115 | break; | ||
116 | else | ||
117 | goto error_unlock; | ||
118 | } | ||
119 | } while (item_data->events & EPOLLET); | ||
120 | |||
121 | /* The item was one-shot, so re-enable it: */ | ||
122 | event_data.events = item_data->events; | ||
123 | if (epoll_ctl(thread_data->epoll_set, | ||
124 | EPOLL_CTL_MOD, | ||
125 | item_data->fd, | ||
126 | &event_data) < 0) | ||
127 | goto error_unlock; | ||
128 | } | ||
129 | |||
130 | pthread_mutex_unlock(&item_data->mutex); | ||
131 | } | ||
132 | |||
133 | error_unlock: | ||
134 | thread_data->status = item_data->status = errno; | ||
135 | pthread_mutex_unlock(&item_data->mutex); | ||
136 | return 0; | ||
137 | } | ||
138 | |||
139 | /* | ||
140 | * A pointer to a write_thread_data structure will be passed as the argument to | ||
141 | * the write thread: | ||
142 | */ | ||
143 | struct write_thread_data { | ||
144 | int stop; | ||
145 | int status; /* Indicates any error encountered by the write thread. */ | ||
146 | int n_fds; | ||
147 | int *fds; | ||
148 | }; | ||
149 | |||
150 | /* | ||
151 | * The function executed by the write thread. It writes a single byte to each | ||
152 | * socket in turn until the stop condition for this thread is set. If writing to | ||
153 | * a socket would block (i.e. errno was EAGAIN), we leave that socket alone for | ||
154 | * the moment and just move on to the next socket in the list. We don't care | ||
155 | * about the order in which we deliver events to the epoll set. In fact we don't | ||
156 | * care about the data we're writing to the pipes at all; we just want to | ||
157 | * trigger epoll events: | ||
158 | */ | ||
159 | void *write_thread_function(void *function_data) | ||
160 | { | ||
161 | const char data = 'X'; | ||
162 | int index; | ||
163 | struct write_thread_data *thread_data = | ||
164 | (struct write_thread_data *)function_data; | ||
165 | while (!thread_data->stop) | ||
166 | for (index = 0; | ||
167 | !thread_data->stop && (index < thread_data->n_fds); | ||
168 | ++index) | ||
169 | if ((write(thread_data->fds[index], &data, 1) < 1) && | ||
170 | (errno != EAGAIN) && | ||
171 | (errno != EWOULDBLOCK)) { | ||
172 | thread_data->status = errno; | ||
173 | return; | ||
174 | } | ||
175 | } | ||
176 | |||
177 | /* | ||
178 | * Arguments are currently ignored: | ||
179 | */ | ||
180 | int main(int argc, char **argv) | ||
181 | { | ||
182 | const int n_read_threads = 100; | ||
183 | const int n_epoll_items = 500; | ||
184 | int index; | ||
185 | int epoll_set = epoll_create1(0); | ||
186 | struct write_thread_data write_thread_data = { | ||
187 | 0, 0, n_epoll_items, malloc(n_epoll_items * sizeof(int)) | ||
188 | }; | ||
189 | struct read_thread_data *read_thread_data = | ||
190 | malloc(n_read_threads * sizeof(struct read_thread_data)); | ||
191 | pthread_t *read_threads = malloc(n_read_threads * sizeof(pthread_t)); | ||
192 | pthread_t write_thread; | ||
193 | |||
194 | printf("-----------------\n"); | ||
195 | printf("Runing test_epoll\n"); | ||
196 | printf("-----------------\n"); | ||
197 | |||
198 | epoll_items = malloc(n_epoll_items * sizeof(struct epoll_item_private)); | ||
199 | |||
200 | if (epoll_set < 0 || epoll_items == 0 || write_thread_data.fds == 0 || | ||
201 | read_thread_data == 0 || read_threads == 0) | ||
202 | goto error; | ||
203 | |||
204 | if (sysconf(_SC_NPROCESSORS_ONLN) < 2) { | ||
205 | printf("Error: please run this test on a multi-core system.\n"); | ||
206 | goto error; | ||
207 | } | ||
208 | |||
209 | /* Create the socket pairs and epoll items: */ | ||
210 | for (index = 0; index < n_epoll_items; ++index) { | ||
211 | int socket_pair[2]; | ||
212 | struct epoll_event event_data; | ||
213 | if (socketpair(AF_UNIX, | ||
214 | SOCK_STREAM | SOCK_NONBLOCK, | ||
215 | 0, | ||
216 | socket_pair) < 0) | ||
217 | goto error; | ||
218 | write_thread_data.fds[index] = socket_pair[0]; | ||
219 | epoll_items[index].index = index; | ||
220 | epoll_items[index].fd = socket_pair[1]; | ||
221 | if (pthread_mutex_init(&epoll_items[index].mutex, NULL) != 0) | ||
222 | goto error; | ||
223 | /* We always use EPOLLONESHOT because this test is currently | ||
224 | structured to demonstrate the need for EPOLL_CTL_DISABLE, | ||
225 | which only produces useful information in the EPOLLONESHOT | ||
226 | case (without EPOLLONESHOT, calling epoll_ctl with | ||
227 | EPOLL_CTL_DISABLE will never return EBUSY). If support for | ||
228 | testing events without EPOLLONESHOT is desired, it should | ||
229 | probably be implemented in a separate unit test. */ | ||
230 | epoll_items[index].events = EPOLLIN | EPOLLONESHOT; | ||
231 | if (index < n_epoll_items / 2) | ||
232 | epoll_items[index].events |= EPOLLET; | ||
233 | epoll_items[index].stop = 0; | ||
234 | epoll_items[index].status = 0; | ||
235 | epoll_items[index].deleted = 0; | ||
236 | event_data.events = epoll_items[index].events; | ||
237 | event_data.data.ptr = &epoll_items[index]; | ||
238 | if (epoll_ctl(epoll_set, | ||
239 | EPOLL_CTL_ADD, | ||
240 | epoll_items[index].fd, | ||
241 | &event_data) < 0) | ||
242 | goto error; | ||
243 | } | ||
244 | |||
245 | /* Create and start the read threads: */ | ||
246 | for (index = 0; index < n_read_threads; ++index) { | ||
247 | read_thread_data[index].stop = 0; | ||
248 | read_thread_data[index].status = 0; | ||
249 | read_thread_data[index].epoll_set = epoll_set; | ||
250 | if (pthread_create(&read_threads[index], | ||
251 | NULL, | ||
252 | read_thread_function, | ||
253 | &read_thread_data[index]) != 0) | ||
254 | goto error; | ||
255 | } | ||
256 | |||
257 | if (pthread_create(&write_thread, | ||
258 | NULL, | ||
259 | write_thread_function, | ||
260 | &write_thread_data) != 0) | ||
261 | goto error; | ||
262 | |||
263 | /* Cancel all event pollers: */ | ||
264 | #ifdef EPOLL_CTL_DISABLE | ||
265 | for (index = 0; index < n_epoll_items; ++index) { | ||
266 | pthread_mutex_lock(&epoll_items[index].mutex); | ||
267 | ++epoll_items[index].stop; | ||
268 | if (epoll_ctl(epoll_set, | ||
269 | EPOLL_CTL_DISABLE, | ||
270 | epoll_items[index].fd, | ||
271 | NULL) == 0) | ||
272 | delete_item(index); | ||
273 | else if (errno != EBUSY) { | ||
274 | pthread_mutex_unlock(&epoll_items[index].mutex); | ||
275 | goto error; | ||
276 | } | ||
277 | /* EBUSY means events were being handled; allow the other thread | ||
278 | to delete the item. */ | ||
279 | pthread_mutex_unlock(&epoll_items[index].mutex); | ||
280 | } | ||
281 | #else | ||
282 | for (index = 0; index < n_epoll_items; ++index) { | ||
283 | pthread_mutex_lock(&epoll_items[index].mutex); | ||
284 | ++epoll_items[index].stop; | ||
285 | pthread_mutex_unlock(&epoll_items[index].mutex); | ||
286 | /* Wait in case a thread running read_thread_function is | ||
287 | currently executing code between epoll_wait and | ||
288 | pthread_mutex_lock with this item. Note that a longer delay | ||
289 | would make double-deletion less likely (at the expense of | ||
290 | performance), but there is no guarantee that any delay would | ||
291 | ever be sufficient. Note also that we delete all event | ||
292 | pollers at once for testing purposes, but in a real-world | ||
293 | environment we are likely to want to be able to cancel event | ||
294 | pollers at arbitrary times. Therefore we can't improve this | ||
295 | situation by just splitting this loop into two loops | ||
296 | (i.e. signal 'stop' for all items, sleep, and then delete all | ||
297 | items). We also can't fix the problem via EPOLL_CTL_DEL | ||
298 | because that command can't prevent the case where some other | ||
299 | thread is executing read_thread_function within the region | ||
300 | mentioned above: */ | ||
301 | usleep(1); | ||
302 | pthread_mutex_lock(&epoll_items[index].mutex); | ||
303 | if (!epoll_items[index].deleted) | ||
304 | delete_item(index); | ||
305 | pthread_mutex_unlock(&epoll_items[index].mutex); | ||
306 | } | ||
307 | #endif | ||
308 | |||
309 | /* Shut down the read threads: */ | ||
310 | for (index = 0; index < n_read_threads; ++index) | ||
311 | __sync_fetch_and_add(&read_thread_data[index].stop, 1); | ||
312 | for (index = 0; index < n_read_threads; ++index) { | ||
313 | if (pthread_join(read_threads[index], NULL) != 0) | ||
314 | goto error; | ||
315 | if (read_thread_data[index].status) | ||
316 | goto error; | ||
317 | } | ||
318 | |||
319 | /* Shut down the write thread: */ | ||
320 | __sync_fetch_and_add(&write_thread_data.stop, 1); | ||
321 | if ((pthread_join(write_thread, NULL) != 0) || write_thread_data.status) | ||
322 | goto error; | ||
323 | |||
324 | /* Check for final error conditions: */ | ||
325 | for (index = 0; index < n_epoll_items; ++index) { | ||
326 | if (epoll_items[index].status != 0) | ||
327 | goto error; | ||
328 | if (pthread_mutex_destroy(&epoll_items[index].mutex) < 0) | ||
329 | goto error; | ||
330 | } | ||
331 | for (index = 0; index < n_epoll_items; ++index) | ||
332 | if (epoll_items[index].deleted != 1) { | ||
333 | printf("Error: item data deleted %1d times.\n", | ||
334 | epoll_items[index].deleted); | ||
335 | goto error; | ||
336 | } | ||
337 | |||
338 | printf("[PASS]\n"); | ||
339 | return 0; | ||
340 | |||
341 | error: | ||
342 | printf("[FAIL]\n"); | ||
343 | return errno; | ||
344 | } | ||