diff options
author | Tony Lindgren <tony@atomide.com> | 2011-11-23 17:46:10 -0500 |
---|---|---|
committer | Tony Lindgren <tony@atomide.com> | 2011-11-23 17:46:10 -0500 |
commit | 52f3a41e0aca5625fbd118ed57a4debb25817e99 (patch) | |
tree | 86730c862fc97eef5f1eb1a81bf74bf2a8a36754 /arch | |
parent | e9b7086b80c4d9e354f4edc9e280ae85a60df408 (diff) | |
parent | 8770b07c2dff3cec2c751b289ee690137c88ea54 (diff) |
Merge branch 'fixes-v3.2-rc2' into fixes
Diffstat (limited to 'arch')
203 files changed, 1902 insertions, 2099 deletions
diff --git a/arch/arm/boot/dts/tegra-ventana.dts b/arch/arm/boot/dts/tegra-ventana.dts index 9b29a623aaf1..3f9abd6b6964 100644 --- a/arch/arm/boot/dts/tegra-ventana.dts +++ b/arch/arm/boot/dts/tegra-ventana.dts | |||
@@ -22,11 +22,10 @@ | |||
22 | sdhci@c8000400 { | 22 | sdhci@c8000400 { |
23 | cd-gpios = <&gpio 69 0>; /* gpio PI5 */ | 23 | cd-gpios = <&gpio 69 0>; /* gpio PI5 */ |
24 | wp-gpios = <&gpio 57 0>; /* gpio PH1 */ | 24 | wp-gpios = <&gpio 57 0>; /* gpio PH1 */ |
25 | power-gpios = <&gpio 155 0>; /* gpio PT3 */ | 25 | power-gpios = <&gpio 70 0>; /* gpio PI6 */ |
26 | }; | 26 | }; |
27 | 27 | ||
28 | sdhci@c8000600 { | 28 | sdhci@c8000600 { |
29 | power-gpios = <&gpio 70 0>; /* gpio PI6 */ | ||
30 | support-8bit; | 29 | support-8bit; |
31 | }; | 30 | }; |
32 | }; | 31 | }; |
diff --git a/arch/arm/mach-at91/at91cap9_devices.c b/arch/arm/mach-at91/at91cap9_devices.c index a4401d6b5b07..adad70db70eb 100644 --- a/arch/arm/mach-at91/at91cap9_devices.c +++ b/arch/arm/mach-at91/at91cap9_devices.c | |||
@@ -98,7 +98,7 @@ void __init at91_add_device_usbh(struct at91_usbh_data *data) {} | |||
98 | * USB HS Device (Gadget) | 98 | * USB HS Device (Gadget) |
99 | * -------------------------------------------------------------------- */ | 99 | * -------------------------------------------------------------------- */ |
100 | 100 | ||
101 | #if defined(CONFIG_USB_GADGET_ATMEL_USBA) || defined(CONFIG_USB_GADGET_ATMEL_USBA_MODULE) | 101 | #if defined(CONFIG_USB_ATMEL_USBA) || defined(CONFIG_USB_ATMEL_USBA_MODULE) |
102 | 102 | ||
103 | static struct resource usba_udc_resources[] = { | 103 | static struct resource usba_udc_resources[] = { |
104 | [0] = { | 104 | [0] = { |
@@ -1021,8 +1021,8 @@ void __init at91_add_device_ssc(unsigned id, unsigned pins) {} | |||
1021 | #if defined(CONFIG_SERIAL_ATMEL) | 1021 | #if defined(CONFIG_SERIAL_ATMEL) |
1022 | static struct resource dbgu_resources[] = { | 1022 | static struct resource dbgu_resources[] = { |
1023 | [0] = { | 1023 | [0] = { |
1024 | .start = AT91_VA_BASE_SYS + AT91_DBGU, | 1024 | .start = AT91_BASE_SYS + AT91_DBGU, |
1025 | .end = AT91_VA_BASE_SYS + AT91_DBGU + SZ_512 - 1, | 1025 | .end = AT91_BASE_SYS + AT91_DBGU + SZ_512 - 1, |
1026 | .flags = IORESOURCE_MEM, | 1026 | .flags = IORESOURCE_MEM, |
1027 | }, | 1027 | }, |
1028 | [1] = { | 1028 | [1] = { |
@@ -1035,7 +1035,6 @@ static struct resource dbgu_resources[] = { | |||
1035 | static struct atmel_uart_data dbgu_data = { | 1035 | static struct atmel_uart_data dbgu_data = { |
1036 | .use_dma_tx = 0, | 1036 | .use_dma_tx = 0, |
1037 | .use_dma_rx = 0, /* DBGU not capable of receive DMA */ | 1037 | .use_dma_rx = 0, /* DBGU not capable of receive DMA */ |
1038 | .regs = (void __iomem *)(AT91_VA_BASE_SYS + AT91_DBGU), | ||
1039 | }; | 1038 | }; |
1040 | 1039 | ||
1041 | static u64 dbgu_dmamask = DMA_BIT_MASK(32); | 1040 | static u64 dbgu_dmamask = DMA_BIT_MASK(32); |
diff --git a/arch/arm/mach-at91/at91rm9200_devices.c b/arch/arm/mach-at91/at91rm9200_devices.c index 01d8bbd1468b..66591fa53e05 100644 --- a/arch/arm/mach-at91/at91rm9200_devices.c +++ b/arch/arm/mach-at91/at91rm9200_devices.c | |||
@@ -877,8 +877,8 @@ void __init at91_add_device_ssc(unsigned id, unsigned pins) {} | |||
877 | #if defined(CONFIG_SERIAL_ATMEL) | 877 | #if defined(CONFIG_SERIAL_ATMEL) |
878 | static struct resource dbgu_resources[] = { | 878 | static struct resource dbgu_resources[] = { |
879 | [0] = { | 879 | [0] = { |
880 | .start = AT91_VA_BASE_SYS + AT91_DBGU, | 880 | .start = AT91_BASE_SYS + AT91_DBGU, |
881 | .end = AT91_VA_BASE_SYS + AT91_DBGU + SZ_512 - 1, | 881 | .end = AT91_BASE_SYS + AT91_DBGU + SZ_512 - 1, |
882 | .flags = IORESOURCE_MEM, | 882 | .flags = IORESOURCE_MEM, |
883 | }, | 883 | }, |
884 | [1] = { | 884 | [1] = { |
@@ -891,7 +891,6 @@ static struct resource dbgu_resources[] = { | |||
891 | static struct atmel_uart_data dbgu_data = { | 891 | static struct atmel_uart_data dbgu_data = { |
892 | .use_dma_tx = 0, | 892 | .use_dma_tx = 0, |
893 | .use_dma_rx = 0, /* DBGU not capable of receive DMA */ | 893 | .use_dma_rx = 0, /* DBGU not capable of receive DMA */ |
894 | .regs = (void __iomem *)(AT91_VA_BASE_SYS + AT91_DBGU), | ||
895 | }; | 894 | }; |
896 | 895 | ||
897 | static u64 dbgu_dmamask = DMA_BIT_MASK(32); | 896 | static u64 dbgu_dmamask = DMA_BIT_MASK(32); |
diff --git a/arch/arm/mach-at91/at91sam9260_devices.c b/arch/arm/mach-at91/at91sam9260_devices.c index 24b6f8c0440d..25e3464fb07f 100644 --- a/arch/arm/mach-at91/at91sam9260_devices.c +++ b/arch/arm/mach-at91/at91sam9260_devices.c | |||
@@ -837,8 +837,8 @@ void __init at91_add_device_ssc(unsigned id, unsigned pins) {} | |||
837 | #if defined(CONFIG_SERIAL_ATMEL) | 837 | #if defined(CONFIG_SERIAL_ATMEL) |
838 | static struct resource dbgu_resources[] = { | 838 | static struct resource dbgu_resources[] = { |
839 | [0] = { | 839 | [0] = { |
840 | .start = AT91_VA_BASE_SYS + AT91_DBGU, | 840 | .start = AT91_BASE_SYS + AT91_DBGU, |
841 | .end = AT91_VA_BASE_SYS + AT91_DBGU + SZ_512 - 1, | 841 | .end = AT91_BASE_SYS + AT91_DBGU + SZ_512 - 1, |
842 | .flags = IORESOURCE_MEM, | 842 | .flags = IORESOURCE_MEM, |
843 | }, | 843 | }, |
844 | [1] = { | 844 | [1] = { |
@@ -851,7 +851,6 @@ static struct resource dbgu_resources[] = { | |||
851 | static struct atmel_uart_data dbgu_data = { | 851 | static struct atmel_uart_data dbgu_data = { |
852 | .use_dma_tx = 0, | 852 | .use_dma_tx = 0, |
853 | .use_dma_rx = 0, /* DBGU not capable of receive DMA */ | 853 | .use_dma_rx = 0, /* DBGU not capable of receive DMA */ |
854 | .regs = (void __iomem *)(AT91_VA_BASE_SYS + AT91_DBGU), | ||
855 | }; | 854 | }; |
856 | 855 | ||
857 | static u64 dbgu_dmamask = DMA_BIT_MASK(32); | 856 | static u64 dbgu_dmamask = DMA_BIT_MASK(32); |
diff --git a/arch/arm/mach-at91/at91sam9261_devices.c b/arch/arm/mach-at91/at91sam9261_devices.c index 3b70b3897d95..ae78f4d03b73 100644 --- a/arch/arm/mach-at91/at91sam9261_devices.c +++ b/arch/arm/mach-at91/at91sam9261_devices.c | |||
@@ -816,8 +816,8 @@ void __init at91_add_device_ssc(unsigned id, unsigned pins) {} | |||
816 | #if defined(CONFIG_SERIAL_ATMEL) | 816 | #if defined(CONFIG_SERIAL_ATMEL) |
817 | static struct resource dbgu_resources[] = { | 817 | static struct resource dbgu_resources[] = { |
818 | [0] = { | 818 | [0] = { |
819 | .start = AT91_VA_BASE_SYS + AT91_DBGU, | 819 | .start = AT91_BASE_SYS + AT91_DBGU, |
820 | .end = AT91_VA_BASE_SYS + AT91_DBGU + SZ_512 - 1, | 820 | .end = AT91_BASE_SYS + AT91_DBGU + SZ_512 - 1, |
821 | .flags = IORESOURCE_MEM, | 821 | .flags = IORESOURCE_MEM, |
822 | }, | 822 | }, |
823 | [1] = { | 823 | [1] = { |
@@ -830,7 +830,6 @@ static struct resource dbgu_resources[] = { | |||
830 | static struct atmel_uart_data dbgu_data = { | 830 | static struct atmel_uart_data dbgu_data = { |
831 | .use_dma_tx = 0, | 831 | .use_dma_tx = 0, |
832 | .use_dma_rx = 0, /* DBGU not capable of receive DMA */ | 832 | .use_dma_rx = 0, /* DBGU not capable of receive DMA */ |
833 | .regs = (void __iomem *)(AT91_VA_BASE_SYS + AT91_DBGU), | ||
834 | }; | 833 | }; |
835 | 834 | ||
836 | static u64 dbgu_dmamask = DMA_BIT_MASK(32); | 835 | static u64 dbgu_dmamask = DMA_BIT_MASK(32); |
diff --git a/arch/arm/mach-at91/at91sam9263_devices.c b/arch/arm/mach-at91/at91sam9263_devices.c index 3faa1fde9ad9..ad017eb1f8df 100644 --- a/arch/arm/mach-at91/at91sam9263_devices.c +++ b/arch/arm/mach-at91/at91sam9263_devices.c | |||
@@ -1196,8 +1196,8 @@ void __init at91_add_device_ssc(unsigned id, unsigned pins) {} | |||
1196 | 1196 | ||
1197 | static struct resource dbgu_resources[] = { | 1197 | static struct resource dbgu_resources[] = { |
1198 | [0] = { | 1198 | [0] = { |
1199 | .start = AT91_VA_BASE_SYS + AT91_DBGU, | 1199 | .start = AT91_BASE_SYS + AT91_DBGU, |
1200 | .end = AT91_VA_BASE_SYS + AT91_DBGU + SZ_512 - 1, | 1200 | .end = AT91_BASE_SYS + AT91_DBGU + SZ_512 - 1, |
1201 | .flags = IORESOURCE_MEM, | 1201 | .flags = IORESOURCE_MEM, |
1202 | }, | 1202 | }, |
1203 | [1] = { | 1203 | [1] = { |
@@ -1210,7 +1210,6 @@ static struct resource dbgu_resources[] = { | |||
1210 | static struct atmel_uart_data dbgu_data = { | 1210 | static struct atmel_uart_data dbgu_data = { |
1211 | .use_dma_tx = 0, | 1211 | .use_dma_tx = 0, |
1212 | .use_dma_rx = 0, /* DBGU not capable of receive DMA */ | 1212 | .use_dma_rx = 0, /* DBGU not capable of receive DMA */ |
1213 | .regs = (void __iomem *)(AT91_VA_BASE_SYS + AT91_DBGU), | ||
1214 | }; | 1213 | }; |
1215 | 1214 | ||
1216 | static u64 dbgu_dmamask = DMA_BIT_MASK(32); | 1215 | static u64 dbgu_dmamask = DMA_BIT_MASK(32); |
diff --git a/arch/arm/mach-at91/at91sam9g45_devices.c b/arch/arm/mach-at91/at91sam9g45_devices.c index 000b5e1da965..09a16d6bd5cd 100644 --- a/arch/arm/mach-at91/at91sam9g45_devices.c +++ b/arch/arm/mach-at91/at91sam9g45_devices.c | |||
@@ -197,7 +197,7 @@ void __init at91_add_device_usbh_ehci(struct at91_usbh_data *data) {} | |||
197 | * USB HS Device (Gadget) | 197 | * USB HS Device (Gadget) |
198 | * -------------------------------------------------------------------- */ | 198 | * -------------------------------------------------------------------- */ |
199 | 199 | ||
200 | #if defined(CONFIG_USB_GADGET_ATMEL_USBA) || defined(CONFIG_USB_GADGET_ATMEL_USBA_MODULE) | 200 | #if defined(CONFIG_USB_ATMEL_USBA) || defined(CONFIG_USB_ATMEL_USBA_MODULE) |
201 | static struct resource usba_udc_resources[] = { | 201 | static struct resource usba_udc_resources[] = { |
202 | [0] = { | 202 | [0] = { |
203 | .start = AT91SAM9G45_UDPHS_FIFO, | 203 | .start = AT91SAM9G45_UDPHS_FIFO, |
@@ -1332,8 +1332,8 @@ void __init at91_add_device_ssc(unsigned id, unsigned pins) {} | |||
1332 | #if defined(CONFIG_SERIAL_ATMEL) | 1332 | #if defined(CONFIG_SERIAL_ATMEL) |
1333 | static struct resource dbgu_resources[] = { | 1333 | static struct resource dbgu_resources[] = { |
1334 | [0] = { | 1334 | [0] = { |
1335 | .start = AT91_VA_BASE_SYS + AT91_DBGU, | 1335 | .start = AT91_BASE_SYS + AT91_DBGU, |
1336 | .end = AT91_VA_BASE_SYS + AT91_DBGU + SZ_512 - 1, | 1336 | .end = AT91_BASE_SYS + AT91_DBGU + SZ_512 - 1, |
1337 | .flags = IORESOURCE_MEM, | 1337 | .flags = IORESOURCE_MEM, |
1338 | }, | 1338 | }, |
1339 | [1] = { | 1339 | [1] = { |
@@ -1346,7 +1346,6 @@ static struct resource dbgu_resources[] = { | |||
1346 | static struct atmel_uart_data dbgu_data = { | 1346 | static struct atmel_uart_data dbgu_data = { |
1347 | .use_dma_tx = 0, | 1347 | .use_dma_tx = 0, |
1348 | .use_dma_rx = 0, | 1348 | .use_dma_rx = 0, |
1349 | .regs = (void __iomem *)(AT91_VA_BASE_SYS + AT91_DBGU), | ||
1350 | }; | 1349 | }; |
1351 | 1350 | ||
1352 | static u64 dbgu_dmamask = DMA_BIT_MASK(32); | 1351 | static u64 dbgu_dmamask = DMA_BIT_MASK(32); |
diff --git a/arch/arm/mach-at91/at91sam9rl_devices.c b/arch/arm/mach-at91/at91sam9rl_devices.c index 305a851b5bff..628eb566d60c 100644 --- a/arch/arm/mach-at91/at91sam9rl_devices.c +++ b/arch/arm/mach-at91/at91sam9rl_devices.c | |||
@@ -75,7 +75,7 @@ void __init at91_add_device_hdmac(void) {} | |||
75 | * USB HS Device (Gadget) | 75 | * USB HS Device (Gadget) |
76 | * -------------------------------------------------------------------- */ | 76 | * -------------------------------------------------------------------- */ |
77 | 77 | ||
78 | #if defined(CONFIG_USB_GADGET_ATMEL_USBA) || defined(CONFIG_USB_GADGET_ATMEL_USBA_MODULE) | 78 | #if defined(CONFIG_USB_ATMEL_USBA) || defined(CONFIG_USB_ATMEL_USBA_MODULE) |
79 | 79 | ||
80 | static struct resource usba_udc_resources[] = { | 80 | static struct resource usba_udc_resources[] = { |
81 | [0] = { | 81 | [0] = { |
@@ -908,8 +908,8 @@ void __init at91_add_device_ssc(unsigned id, unsigned pins) {} | |||
908 | #if defined(CONFIG_SERIAL_ATMEL) | 908 | #if defined(CONFIG_SERIAL_ATMEL) |
909 | static struct resource dbgu_resources[] = { | 909 | static struct resource dbgu_resources[] = { |
910 | [0] = { | 910 | [0] = { |
911 | .start = AT91_VA_BASE_SYS + AT91_DBGU, | 911 | .start = AT91_BASE_SYS + AT91_DBGU, |
912 | .end = AT91_VA_BASE_SYS + AT91_DBGU + SZ_512 - 1, | 912 | .end = AT91_BASE_SYS + AT91_DBGU + SZ_512 - 1, |
913 | .flags = IORESOURCE_MEM, | 913 | .flags = IORESOURCE_MEM, |
914 | }, | 914 | }, |
915 | [1] = { | 915 | [1] = { |
@@ -922,7 +922,6 @@ static struct resource dbgu_resources[] = { | |||
922 | static struct atmel_uart_data dbgu_data = { | 922 | static struct atmel_uart_data dbgu_data = { |
923 | .use_dma_tx = 0, | 923 | .use_dma_tx = 0, |
924 | .use_dma_rx = 0, /* DBGU not capable of receive DMA */ | 924 | .use_dma_rx = 0, /* DBGU not capable of receive DMA */ |
925 | .regs = (void __iomem *)(AT91_VA_BASE_SYS + AT91_DBGU), | ||
926 | }; | 925 | }; |
927 | 926 | ||
928 | static u64 dbgu_dmamask = DMA_BIT_MASK(32); | 927 | static u64 dbgu_dmamask = DMA_BIT_MASK(32); |
diff --git a/arch/arm/mach-at91/board-afeb-9260v1.c b/arch/arm/mach-at91/board-afeb-9260v1.c index 0487ea10c2d6..4282d96dffa8 100644 --- a/arch/arm/mach-at91/board-afeb-9260v1.c +++ b/arch/arm/mach-at91/board-afeb-9260v1.c | |||
@@ -130,19 +130,14 @@ static struct mtd_partition __initdata afeb9260_nand_partition[] = { | |||
130 | }, | 130 | }, |
131 | }; | 131 | }; |
132 | 132 | ||
133 | static struct mtd_partition * __init nand_partitions(int size, int *num_partitions) | ||
134 | { | ||
135 | *num_partitions = ARRAY_SIZE(afeb9260_nand_partition); | ||
136 | return afeb9260_nand_partition; | ||
137 | } | ||
138 | |||
139 | static struct atmel_nand_data __initdata afeb9260_nand_data = { | 133 | static struct atmel_nand_data __initdata afeb9260_nand_data = { |
140 | .ale = 21, | 134 | .ale = 21, |
141 | .cle = 22, | 135 | .cle = 22, |
142 | .rdy_pin = AT91_PIN_PC13, | 136 | .rdy_pin = AT91_PIN_PC13, |
143 | .enable_pin = AT91_PIN_PC14, | 137 | .enable_pin = AT91_PIN_PC14, |
144 | .partition_info = nand_partitions, | ||
145 | .bus_width_16 = 0, | 138 | .bus_width_16 = 0, |
139 | .parts = afeb9260_nand_partition, | ||
140 | .num_parts = ARRAY_SIZE(afeb9260_nand_partition), | ||
146 | }; | 141 | }; |
147 | 142 | ||
148 | 143 | ||
diff --git a/arch/arm/mach-at91/board-cam60.c b/arch/arm/mach-at91/board-cam60.c index 747b2eaa9737..f90cfb32bad2 100644 --- a/arch/arm/mach-at91/board-cam60.c +++ b/arch/arm/mach-at91/board-cam60.c | |||
@@ -132,19 +132,14 @@ static struct mtd_partition __initdata cam60_nand_partition[] = { | |||
132 | }, | 132 | }, |
133 | }; | 133 | }; |
134 | 134 | ||
135 | static struct mtd_partition * __init nand_partitions(int size, int *num_partitions) | ||
136 | { | ||
137 | *num_partitions = ARRAY_SIZE(cam60_nand_partition); | ||
138 | return cam60_nand_partition; | ||
139 | } | ||
140 | |||
141 | static struct atmel_nand_data __initdata cam60_nand_data = { | 135 | static struct atmel_nand_data __initdata cam60_nand_data = { |
142 | .ale = 21, | 136 | .ale = 21, |
143 | .cle = 22, | 137 | .cle = 22, |
144 | // .det_pin = ... not there | 138 | // .det_pin = ... not there |
145 | .rdy_pin = AT91_PIN_PA9, | 139 | .rdy_pin = AT91_PIN_PA9, |
146 | .enable_pin = AT91_PIN_PA7, | 140 | .enable_pin = AT91_PIN_PA7, |
147 | .partition_info = nand_partitions, | 141 | .parts = cam60_nand_partition, |
142 | .num_parts = ARRAY_SIZE(cam60_nand_partition), | ||
148 | }; | 143 | }; |
149 | 144 | ||
150 | static struct sam9_smc_config __initdata cam60_nand_smc_config = { | 145 | static struct sam9_smc_config __initdata cam60_nand_smc_config = { |
diff --git a/arch/arm/mach-at91/board-cap9adk.c b/arch/arm/mach-at91/board-cap9adk.c index 062670351a6a..5dffd3be62d2 100644 --- a/arch/arm/mach-at91/board-cap9adk.c +++ b/arch/arm/mach-at91/board-cap9adk.c | |||
@@ -169,19 +169,14 @@ static struct mtd_partition __initdata cap9adk_nand_partitions[] = { | |||
169 | }, | 169 | }, |
170 | }; | 170 | }; |
171 | 171 | ||
172 | static struct mtd_partition * __init nand_partitions(int size, int *num_partitions) | ||
173 | { | ||
174 | *num_partitions = ARRAY_SIZE(cap9adk_nand_partitions); | ||
175 | return cap9adk_nand_partitions; | ||
176 | } | ||
177 | |||
178 | static struct atmel_nand_data __initdata cap9adk_nand_data = { | 172 | static struct atmel_nand_data __initdata cap9adk_nand_data = { |
179 | .ale = 21, | 173 | .ale = 21, |
180 | .cle = 22, | 174 | .cle = 22, |
181 | // .det_pin = ... not connected | 175 | // .det_pin = ... not connected |
182 | // .rdy_pin = ... not connected | 176 | // .rdy_pin = ... not connected |
183 | .enable_pin = AT91_PIN_PD15, | 177 | .enable_pin = AT91_PIN_PD15, |
184 | .partition_info = nand_partitions, | 178 | .parts = cap9adk_nand_partitions, |
179 | .num_parts = ARRAY_SIZE(cap9adk_nand_partitions), | ||
185 | }; | 180 | }; |
186 | 181 | ||
187 | static struct sam9_smc_config __initdata cap9adk_nand_smc_config = { | 182 | static struct sam9_smc_config __initdata cap9adk_nand_smc_config = { |
diff --git a/arch/arm/mach-at91/board-kb9202.c b/arch/arm/mach-at91/board-kb9202.c index 15a3f1a87ab0..e61351ffad50 100644 --- a/arch/arm/mach-at91/board-kb9202.c +++ b/arch/arm/mach-at91/board-kb9202.c | |||
@@ -97,19 +97,14 @@ static struct mtd_partition __initdata kb9202_nand_partition[] = { | |||
97 | }, | 97 | }, |
98 | }; | 98 | }; |
99 | 99 | ||
100 | static struct mtd_partition * __init nand_partitions(int size, int *num_partitions) | ||
101 | { | ||
102 | *num_partitions = ARRAY_SIZE(kb9202_nand_partition); | ||
103 | return kb9202_nand_partition; | ||
104 | } | ||
105 | |||
106 | static struct atmel_nand_data __initdata kb9202_nand_data = { | 100 | static struct atmel_nand_data __initdata kb9202_nand_data = { |
107 | .ale = 22, | 101 | .ale = 22, |
108 | .cle = 21, | 102 | .cle = 21, |
109 | // .det_pin = ... not there | 103 | // .det_pin = ... not there |
110 | .rdy_pin = AT91_PIN_PC29, | 104 | .rdy_pin = AT91_PIN_PC29, |
111 | .enable_pin = AT91_PIN_PC28, | 105 | .enable_pin = AT91_PIN_PC28, |
112 | .partition_info = nand_partitions, | 106 | .parts = kb9202_nand_partition, |
107 | .num_parts = ARRAY_SIZE(kb9202_nand_partition), | ||
113 | }; | 108 | }; |
114 | 109 | ||
115 | static void __init kb9202_board_init(void) | 110 | static void __init kb9202_board_init(void) |
diff --git a/arch/arm/mach-at91/board-neocore926.c b/arch/arm/mach-at91/board-neocore926.c index 6094496f7edb..ef816c17dc61 100644 --- a/arch/arm/mach-at91/board-neocore926.c +++ b/arch/arm/mach-at91/board-neocore926.c | |||
@@ -182,19 +182,14 @@ static struct mtd_partition __initdata neocore926_nand_partition[] = { | |||
182 | }, | 182 | }, |
183 | }; | 183 | }; |
184 | 184 | ||
185 | static struct mtd_partition * __init nand_partitions(int size, int *num_partitions) | ||
186 | { | ||
187 | *num_partitions = ARRAY_SIZE(neocore926_nand_partition); | ||
188 | return neocore926_nand_partition; | ||
189 | } | ||
190 | |||
191 | static struct atmel_nand_data __initdata neocore926_nand_data = { | 185 | static struct atmel_nand_data __initdata neocore926_nand_data = { |
192 | .ale = 21, | 186 | .ale = 21, |
193 | .cle = 22, | 187 | .cle = 22, |
194 | .rdy_pin = AT91_PIN_PB19, | 188 | .rdy_pin = AT91_PIN_PB19, |
195 | .rdy_pin_active_low = 1, | 189 | .rdy_pin_active_low = 1, |
196 | .enable_pin = AT91_PIN_PD15, | 190 | .enable_pin = AT91_PIN_PD15, |
197 | .partition_info = nand_partitions, | 191 | .parts = neocore926_nand_partition, |
192 | .num_parts = ARRAY_SIZE(neocore926_nand_partition), | ||
198 | }; | 193 | }; |
199 | 194 | ||
200 | static struct sam9_smc_config __initdata neocore926_nand_smc_config = { | 195 | static struct sam9_smc_config __initdata neocore926_nand_smc_config = { |
diff --git a/arch/arm/mach-at91/board-qil-a9260.c b/arch/arm/mach-at91/board-qil-a9260.c index 938cc390bea3..07421bdb88ea 100644 --- a/arch/arm/mach-at91/board-qil-a9260.c +++ b/arch/arm/mach-at91/board-qil-a9260.c | |||
@@ -130,19 +130,14 @@ static struct mtd_partition __initdata ek_nand_partition[] = { | |||
130 | }, | 130 | }, |
131 | }; | 131 | }; |
132 | 132 | ||
133 | static struct mtd_partition * __init nand_partitions(int size, int *num_partitions) | ||
134 | { | ||
135 | *num_partitions = ARRAY_SIZE(ek_nand_partition); | ||
136 | return ek_nand_partition; | ||
137 | } | ||
138 | |||
139 | static struct atmel_nand_data __initdata ek_nand_data = { | 133 | static struct atmel_nand_data __initdata ek_nand_data = { |
140 | .ale = 21, | 134 | .ale = 21, |
141 | .cle = 22, | 135 | .cle = 22, |
142 | // .det_pin = ... not connected | 136 | // .det_pin = ... not connected |
143 | .rdy_pin = AT91_PIN_PC13, | 137 | .rdy_pin = AT91_PIN_PC13, |
144 | .enable_pin = AT91_PIN_PC14, | 138 | .enable_pin = AT91_PIN_PC14, |
145 | .partition_info = nand_partitions, | 139 | .parts = ek_nand_partition, |
140 | .num_parts = ARRAY_SIZE(ek_nand_partition), | ||
146 | }; | 141 | }; |
147 | 142 | ||
148 | static struct sam9_smc_config __initdata ek_nand_smc_config = { | 143 | static struct sam9_smc_config __initdata ek_nand_smc_config = { |
diff --git a/arch/arm/mach-at91/board-rm9200dk.c b/arch/arm/mach-at91/board-rm9200dk.c index b4ac30e38a9e..80a8c9c6e922 100644 --- a/arch/arm/mach-at91/board-rm9200dk.c +++ b/arch/arm/mach-at91/board-rm9200dk.c | |||
@@ -138,19 +138,14 @@ static struct mtd_partition __initdata dk_nand_partition[] = { | |||
138 | }, | 138 | }, |
139 | }; | 139 | }; |
140 | 140 | ||
141 | static struct mtd_partition * __init nand_partitions(int size, int *num_partitions) | ||
142 | { | ||
143 | *num_partitions = ARRAY_SIZE(dk_nand_partition); | ||
144 | return dk_nand_partition; | ||
145 | } | ||
146 | |||
147 | static struct atmel_nand_data __initdata dk_nand_data = { | 141 | static struct atmel_nand_data __initdata dk_nand_data = { |
148 | .ale = 22, | 142 | .ale = 22, |
149 | .cle = 21, | 143 | .cle = 21, |
150 | .det_pin = AT91_PIN_PB1, | 144 | .det_pin = AT91_PIN_PB1, |
151 | .rdy_pin = AT91_PIN_PC2, | 145 | .rdy_pin = AT91_PIN_PC2, |
152 | // .enable_pin = ... not there | 146 | // .enable_pin = ... not there |
153 | .partition_info = nand_partitions, | 147 | .parts = dk_nand_partition, |
148 | .num_parts = ARRAY_SIZE(dk_nand_partition), | ||
154 | }; | 149 | }; |
155 | 150 | ||
156 | #define DK_FLASH_BASE AT91_CHIPSELECT_0 | 151 | #define DK_FLASH_BASE AT91_CHIPSELECT_0 |
diff --git a/arch/arm/mach-at91/board-sam9-l9260.c b/arch/arm/mach-at91/board-sam9-l9260.c index 2a21e790250e..072d53af98d9 100644 --- a/arch/arm/mach-at91/board-sam9-l9260.c +++ b/arch/arm/mach-at91/board-sam9-l9260.c | |||
@@ -131,19 +131,14 @@ static struct mtd_partition __initdata ek_nand_partition[] = { | |||
131 | }, | 131 | }, |
132 | }; | 132 | }; |
133 | 133 | ||
134 | static struct mtd_partition * __init nand_partitions(int size, int *num_partitions) | ||
135 | { | ||
136 | *num_partitions = ARRAY_SIZE(ek_nand_partition); | ||
137 | return ek_nand_partition; | ||
138 | } | ||
139 | |||
140 | static struct atmel_nand_data __initdata ek_nand_data = { | 134 | static struct atmel_nand_data __initdata ek_nand_data = { |
141 | .ale = 21, | 135 | .ale = 21, |
142 | .cle = 22, | 136 | .cle = 22, |
143 | // .det_pin = ... not connected | 137 | // .det_pin = ... not connected |
144 | .rdy_pin = AT91_PIN_PC13, | 138 | .rdy_pin = AT91_PIN_PC13, |
145 | .enable_pin = AT91_PIN_PC14, | 139 | .enable_pin = AT91_PIN_PC14, |
146 | .partition_info = nand_partitions, | 140 | .parts = ek_nand_partition, |
141 | .num_parts = ARRAY_SIZE(ek_nand_partition), | ||
147 | }; | 142 | }; |
148 | 143 | ||
149 | static struct sam9_smc_config __initdata ek_nand_smc_config = { | 144 | static struct sam9_smc_config __initdata ek_nand_smc_config = { |
diff --git a/arch/arm/mach-at91/board-sam9260ek.c b/arch/arm/mach-at91/board-sam9260ek.c index 89c8b579bfda..4f10181a0782 100644 --- a/arch/arm/mach-at91/board-sam9260ek.c +++ b/arch/arm/mach-at91/board-sam9260ek.c | |||
@@ -173,19 +173,14 @@ static struct mtd_partition __initdata ek_nand_partition[] = { | |||
173 | }, | 173 | }, |
174 | }; | 174 | }; |
175 | 175 | ||
176 | static struct mtd_partition * __init nand_partitions(int size, int *num_partitions) | ||
177 | { | ||
178 | *num_partitions = ARRAY_SIZE(ek_nand_partition); | ||
179 | return ek_nand_partition; | ||
180 | } | ||
181 | |||
182 | static struct atmel_nand_data __initdata ek_nand_data = { | 176 | static struct atmel_nand_data __initdata ek_nand_data = { |
183 | .ale = 21, | 177 | .ale = 21, |
184 | .cle = 22, | 178 | .cle = 22, |
185 | // .det_pin = ... not connected | 179 | // .det_pin = ... not connected |
186 | .rdy_pin = AT91_PIN_PC13, | 180 | .rdy_pin = AT91_PIN_PC13, |
187 | .enable_pin = AT91_PIN_PC14, | 181 | .enable_pin = AT91_PIN_PC14, |
188 | .partition_info = nand_partitions, | 182 | .parts = ek_nand_partition, |
183 | .num_parts = ARRAY_SIZE(ek_nand_partition), | ||
189 | }; | 184 | }; |
190 | 185 | ||
191 | static struct sam9_smc_config __initdata ek_nand_smc_config = { | 186 | static struct sam9_smc_config __initdata ek_nand_smc_config = { |
diff --git a/arch/arm/mach-at91/board-sam9261ek.c b/arch/arm/mach-at91/board-sam9261ek.c index 3741f43cdae9..b005b738e8ff 100644 --- a/arch/arm/mach-at91/board-sam9261ek.c +++ b/arch/arm/mach-at91/board-sam9261ek.c | |||
@@ -179,19 +179,14 @@ static struct mtd_partition __initdata ek_nand_partition[] = { | |||
179 | }, | 179 | }, |
180 | }; | 180 | }; |
181 | 181 | ||
182 | static struct mtd_partition * __init nand_partitions(int size, int *num_partitions) | ||
183 | { | ||
184 | *num_partitions = ARRAY_SIZE(ek_nand_partition); | ||
185 | return ek_nand_partition; | ||
186 | } | ||
187 | |||
188 | static struct atmel_nand_data __initdata ek_nand_data = { | 182 | static struct atmel_nand_data __initdata ek_nand_data = { |
189 | .ale = 22, | 183 | .ale = 22, |
190 | .cle = 21, | 184 | .cle = 21, |
191 | // .det_pin = ... not connected | 185 | // .det_pin = ... not connected |
192 | .rdy_pin = AT91_PIN_PC15, | 186 | .rdy_pin = AT91_PIN_PC15, |
193 | .enable_pin = AT91_PIN_PC14, | 187 | .enable_pin = AT91_PIN_PC14, |
194 | .partition_info = nand_partitions, | 188 | .parts = ek_nand_partition, |
189 | .num_parts = ARRAY_SIZE(ek_nand_partition), | ||
195 | }; | 190 | }; |
196 | 191 | ||
197 | static struct sam9_smc_config __initdata ek_nand_smc_config = { | 192 | static struct sam9_smc_config __initdata ek_nand_smc_config = { |
diff --git a/arch/arm/mach-at91/board-sam9263ek.c b/arch/arm/mach-at91/board-sam9263ek.c index a580dd451a41..bccdcf23caa1 100644 --- a/arch/arm/mach-at91/board-sam9263ek.c +++ b/arch/arm/mach-at91/board-sam9263ek.c | |||
@@ -180,19 +180,14 @@ static struct mtd_partition __initdata ek_nand_partition[] = { | |||
180 | }, | 180 | }, |
181 | }; | 181 | }; |
182 | 182 | ||
183 | static struct mtd_partition * __init nand_partitions(int size, int *num_partitions) | ||
184 | { | ||
185 | *num_partitions = ARRAY_SIZE(ek_nand_partition); | ||
186 | return ek_nand_partition; | ||
187 | } | ||
188 | |||
189 | static struct atmel_nand_data __initdata ek_nand_data = { | 183 | static struct atmel_nand_data __initdata ek_nand_data = { |
190 | .ale = 21, | 184 | .ale = 21, |
191 | .cle = 22, | 185 | .cle = 22, |
192 | // .det_pin = ... not connected | 186 | // .det_pin = ... not connected |
193 | .rdy_pin = AT91_PIN_PA22, | 187 | .rdy_pin = AT91_PIN_PA22, |
194 | .enable_pin = AT91_PIN_PD15, | 188 | .enable_pin = AT91_PIN_PD15, |
195 | .partition_info = nand_partitions, | 189 | .parts = ek_nand_partition, |
190 | .num_parts = ARRAY_SIZE(ek_nand_partition), | ||
196 | }; | 191 | }; |
197 | 192 | ||
198 | static struct sam9_smc_config __initdata ek_nand_smc_config = { | 193 | static struct sam9_smc_config __initdata ek_nand_smc_config = { |
diff --git a/arch/arm/mach-at91/board-sam9g20ek.c b/arch/arm/mach-at91/board-sam9g20ek.c index 8d77c2ff96b2..64fc75c9d0ac 100644 --- a/arch/arm/mach-at91/board-sam9g20ek.c +++ b/arch/arm/mach-at91/board-sam9g20ek.c | |||
@@ -157,19 +157,14 @@ static struct mtd_partition __initdata ek_nand_partition[] = { | |||
157 | }, | 157 | }, |
158 | }; | 158 | }; |
159 | 159 | ||
160 | static struct mtd_partition * __init nand_partitions(int size, int *num_partitions) | ||
161 | { | ||
162 | *num_partitions = ARRAY_SIZE(ek_nand_partition); | ||
163 | return ek_nand_partition; | ||
164 | } | ||
165 | |||
166 | /* det_pin is not connected */ | 160 | /* det_pin is not connected */ |
167 | static struct atmel_nand_data __initdata ek_nand_data = { | 161 | static struct atmel_nand_data __initdata ek_nand_data = { |
168 | .ale = 21, | 162 | .ale = 21, |
169 | .cle = 22, | 163 | .cle = 22, |
170 | .rdy_pin = AT91_PIN_PC13, | 164 | .rdy_pin = AT91_PIN_PC13, |
171 | .enable_pin = AT91_PIN_PC14, | 165 | .enable_pin = AT91_PIN_PC14, |
172 | .partition_info = nand_partitions, | 166 | .parts = ek_nand_partition, |
167 | .num_parts = ARRAY_SIZE(ek_nand_partition), | ||
173 | }; | 168 | }; |
174 | 169 | ||
175 | static struct sam9_smc_config __initdata ek_nand_smc_config = { | 170 | static struct sam9_smc_config __initdata ek_nand_smc_config = { |
diff --git a/arch/arm/mach-at91/board-sam9m10g45ek.c b/arch/arm/mach-at91/board-sam9m10g45ek.c index 2d6203ac1a42..92de9127923a 100644 --- a/arch/arm/mach-at91/board-sam9m10g45ek.c +++ b/arch/arm/mach-at91/board-sam9m10g45ek.c | |||
@@ -137,19 +137,14 @@ static struct mtd_partition __initdata ek_nand_partition[] = { | |||
137 | }, | 137 | }, |
138 | }; | 138 | }; |
139 | 139 | ||
140 | static struct mtd_partition * __init nand_partitions(int size, int *num_partitions) | ||
141 | { | ||
142 | *num_partitions = ARRAY_SIZE(ek_nand_partition); | ||
143 | return ek_nand_partition; | ||
144 | } | ||
145 | |||
146 | /* det_pin is not connected */ | 140 | /* det_pin is not connected */ |
147 | static struct atmel_nand_data __initdata ek_nand_data = { | 141 | static struct atmel_nand_data __initdata ek_nand_data = { |
148 | .ale = 21, | 142 | .ale = 21, |
149 | .cle = 22, | 143 | .cle = 22, |
150 | .rdy_pin = AT91_PIN_PC8, | 144 | .rdy_pin = AT91_PIN_PC8, |
151 | .enable_pin = AT91_PIN_PC14, | 145 | .enable_pin = AT91_PIN_PC14, |
152 | .partition_info = nand_partitions, | 146 | .parts = ek_nand_partition, |
147 | .num_parts = ARRAY_SIZE(ek_nand_partition), | ||
153 | }; | 148 | }; |
154 | 149 | ||
155 | static struct sam9_smc_config __initdata ek_nand_smc_config = { | 150 | static struct sam9_smc_config __initdata ek_nand_smc_config = { |
diff --git a/arch/arm/mach-at91/board-sam9rlek.c b/arch/arm/mach-at91/board-sam9rlek.c index 39a28effc3df..b2b748239f36 100644 --- a/arch/arm/mach-at91/board-sam9rlek.c +++ b/arch/arm/mach-at91/board-sam9rlek.c | |||
@@ -88,19 +88,14 @@ static struct mtd_partition __initdata ek_nand_partition[] = { | |||
88 | }, | 88 | }, |
89 | }; | 89 | }; |
90 | 90 | ||
91 | static struct mtd_partition * __init nand_partitions(int size, int *num_partitions) | ||
92 | { | ||
93 | *num_partitions = ARRAY_SIZE(ek_nand_partition); | ||
94 | return ek_nand_partition; | ||
95 | } | ||
96 | |||
97 | static struct atmel_nand_data __initdata ek_nand_data = { | 91 | static struct atmel_nand_data __initdata ek_nand_data = { |
98 | .ale = 21, | 92 | .ale = 21, |
99 | .cle = 22, | 93 | .cle = 22, |
100 | // .det_pin = ... not connected | 94 | // .det_pin = ... not connected |
101 | .rdy_pin = AT91_PIN_PD17, | 95 | .rdy_pin = AT91_PIN_PD17, |
102 | .enable_pin = AT91_PIN_PB6, | 96 | .enable_pin = AT91_PIN_PB6, |
103 | .partition_info = nand_partitions, | 97 | .parts = ek_nand_partition, |
98 | .num_parts = ARRAY_SIZE(ek_nand_partition), | ||
104 | }; | 99 | }; |
105 | 100 | ||
106 | static struct sam9_smc_config __initdata ek_nand_smc_config = { | 101 | static struct sam9_smc_config __initdata ek_nand_smc_config = { |
diff --git a/arch/arm/mach-at91/board-snapper9260.c b/arch/arm/mach-at91/board-snapper9260.c index c73d25e5faea..0df01c6e2d0c 100644 --- a/arch/arm/mach-at91/board-snapper9260.c +++ b/arch/arm/mach-at91/board-snapper9260.c | |||
@@ -97,18 +97,12 @@ static struct mtd_partition __initdata snapper9260_nand_partitions[] = { | |||
97 | }, | 97 | }, |
98 | }; | 98 | }; |
99 | 99 | ||
100 | static struct mtd_partition * __init | ||
101 | snapper9260_nand_partition_info(int size, int *num_partitions) | ||
102 | { | ||
103 | *num_partitions = ARRAY_SIZE(snapper9260_nand_partitions); | ||
104 | return snapper9260_nand_partitions; | ||
105 | } | ||
106 | |||
107 | static struct atmel_nand_data __initdata snapper9260_nand_data = { | 100 | static struct atmel_nand_data __initdata snapper9260_nand_data = { |
108 | .ale = 21, | 101 | .ale = 21, |
109 | .cle = 22, | 102 | .cle = 22, |
110 | .rdy_pin = AT91_PIN_PC13, | 103 | .rdy_pin = AT91_PIN_PC13, |
111 | .partition_info = snapper9260_nand_partition_info, | 104 | .parts = snapper9260_nand_partitions, |
105 | .num_parts = ARRAY_SIZE(snapper9260_nand_partitions), | ||
112 | .bus_width_16 = 0, | 106 | .bus_width_16 = 0, |
113 | }; | 107 | }; |
114 | 108 | ||
diff --git a/arch/arm/mach-at91/board-usb-a926x.c b/arch/arm/mach-at91/board-usb-a926x.c index 5852d3d9890c..0a20bab21f99 100644 --- a/arch/arm/mach-at91/board-usb-a926x.c +++ b/arch/arm/mach-at91/board-usb-a926x.c | |||
@@ -190,19 +190,14 @@ static struct mtd_partition __initdata ek_nand_partition[] = { | |||
190 | } | 190 | } |
191 | }; | 191 | }; |
192 | 192 | ||
193 | static struct mtd_partition * __init nand_partitions(int size, int *num_partitions) | ||
194 | { | ||
195 | *num_partitions = ARRAY_SIZE(ek_nand_partition); | ||
196 | return ek_nand_partition; | ||
197 | } | ||
198 | |||
199 | static struct atmel_nand_data __initdata ek_nand_data = { | 193 | static struct atmel_nand_data __initdata ek_nand_data = { |
200 | .ale = 21, | 194 | .ale = 21, |
201 | .cle = 22, | 195 | .cle = 22, |
202 | // .det_pin = ... not connected | 196 | // .det_pin = ... not connected |
203 | .rdy_pin = AT91_PIN_PA22, | 197 | .rdy_pin = AT91_PIN_PA22, |
204 | .enable_pin = AT91_PIN_PD15, | 198 | .enable_pin = AT91_PIN_PD15, |
205 | .partition_info = nand_partitions, | 199 | .parts = ek_nand_partition, |
200 | .num_parts = ARRAY_SIZE(ek_nand_partition), | ||
206 | }; | 201 | }; |
207 | 202 | ||
208 | static struct sam9_smc_config __initdata usb_a9260_nand_smc_config = { | 203 | static struct sam9_smc_config __initdata usb_a9260_nand_smc_config = { |
diff --git a/arch/arm/mach-at91/board-yl-9200.c b/arch/arm/mach-at91/board-yl-9200.c index 3c288b396fc4..12a3f955162b 100644 --- a/arch/arm/mach-at91/board-yl-9200.c +++ b/arch/arm/mach-at91/board-yl-9200.c | |||
@@ -172,19 +172,14 @@ static struct mtd_partition __initdata yl9200_nand_partition[] = { | |||
172 | } | 172 | } |
173 | }; | 173 | }; |
174 | 174 | ||
175 | static struct mtd_partition * __init nand_partitions(int size, int *num_partitions) | ||
176 | { | ||
177 | *num_partitions = ARRAY_SIZE(yl9200_nand_partition); | ||
178 | return yl9200_nand_partition; | ||
179 | } | ||
180 | |||
181 | static struct atmel_nand_data __initdata yl9200_nand_data = { | 175 | static struct atmel_nand_data __initdata yl9200_nand_data = { |
182 | .ale = 6, | 176 | .ale = 6, |
183 | .cle = 7, | 177 | .cle = 7, |
184 | // .det_pin = ... not connected | 178 | // .det_pin = ... not connected |
185 | .rdy_pin = AT91_PIN_PC14, /* R/!B (Sheet10) */ | 179 | .rdy_pin = AT91_PIN_PC14, /* R/!B (Sheet10) */ |
186 | .enable_pin = AT91_PIN_PC15, /* !CE (Sheet10) */ | 180 | .enable_pin = AT91_PIN_PC15, /* !CE (Sheet10) */ |
187 | .partition_info = nand_partitions, | 181 | .parts = yl9200_nand_partition, |
182 | .num_parts = ARRAY_SIZE(yl9200_nand_partition), | ||
188 | }; | 183 | }; |
189 | 184 | ||
190 | /* | 185 | /* |
@@ -389,7 +384,7 @@ static struct spi_board_info yl9200_spi_devices[] = { | |||
389 | #include <video/s1d13xxxfb.h> | 384 | #include <video/s1d13xxxfb.h> |
390 | 385 | ||
391 | 386 | ||
392 | static void __init yl9200_init_video(void) | 387 | static void yl9200_init_video(void) |
393 | { | 388 | { |
394 | /* NWAIT Signal */ | 389 | /* NWAIT Signal */ |
395 | at91_set_A_periph(AT91_PIN_PC6, 0); | 390 | at91_set_A_periph(AT91_PIN_PC6, 0); |
diff --git a/arch/arm/mach-at91/cpuidle.c b/arch/arm/mach-at91/cpuidle.c index f474272c0eac..a851e6c98421 100644 --- a/arch/arm/mach-at91/cpuidle.c +++ b/arch/arm/mach-at91/cpuidle.c | |||
@@ -34,7 +34,8 @@ static struct cpuidle_driver at91_idle_driver = { | |||
34 | 34 | ||
35 | /* Actual code that puts the SoC in different idle states */ | 35 | /* Actual code that puts the SoC in different idle states */ |
36 | static int at91_enter_idle(struct cpuidle_device *dev, | 36 | static int at91_enter_idle(struct cpuidle_device *dev, |
37 | struct cpuidle_state *state) | 37 | struct cpuidle_driver *drv, |
38 | int index) | ||
38 | { | 39 | { |
39 | struct timeval before, after; | 40 | struct timeval before, after; |
40 | int idle_time; | 41 | int idle_time; |
@@ -42,10 +43,10 @@ static int at91_enter_idle(struct cpuidle_device *dev, | |||
42 | 43 | ||
43 | local_irq_disable(); | 44 | local_irq_disable(); |
44 | do_gettimeofday(&before); | 45 | do_gettimeofday(&before); |
45 | if (state == &dev->states[0]) | 46 | if (index == 0) |
46 | /* Wait for interrupt state */ | 47 | /* Wait for interrupt state */ |
47 | cpu_do_idle(); | 48 | cpu_do_idle(); |
48 | else if (state == &dev->states[1]) { | 49 | else if (index == 1) { |
49 | asm("b 1f; .align 5; 1:"); | 50 | asm("b 1f; .align 5; 1:"); |
50 | asm("mcr p15, 0, r0, c7, c10, 4"); /* drain write buffer */ | 51 | asm("mcr p15, 0, r0, c7, c10, 4"); /* drain write buffer */ |
51 | saved_lpr = sdram_selfrefresh_enable(); | 52 | saved_lpr = sdram_selfrefresh_enable(); |
@@ -56,34 +57,38 @@ static int at91_enter_idle(struct cpuidle_device *dev, | |||
56 | local_irq_enable(); | 57 | local_irq_enable(); |
57 | idle_time = (after.tv_sec - before.tv_sec) * USEC_PER_SEC + | 58 | idle_time = (after.tv_sec - before.tv_sec) * USEC_PER_SEC + |
58 | (after.tv_usec - before.tv_usec); | 59 | (after.tv_usec - before.tv_usec); |
59 | return idle_time; | 60 | |
61 | dev->last_residency = idle_time; | ||
62 | return index; | ||
60 | } | 63 | } |
61 | 64 | ||
62 | /* Initialize CPU idle by registering the idle states */ | 65 | /* Initialize CPU idle by registering the idle states */ |
63 | static int at91_init_cpuidle(void) | 66 | static int at91_init_cpuidle(void) |
64 | { | 67 | { |
65 | struct cpuidle_device *device; | 68 | struct cpuidle_device *device; |
66 | 69 | struct cpuidle_driver *driver = &at91_idle_driver; | |
67 | cpuidle_register_driver(&at91_idle_driver); | ||
68 | 70 | ||
69 | device = &per_cpu(at91_cpuidle_device, smp_processor_id()); | 71 | device = &per_cpu(at91_cpuidle_device, smp_processor_id()); |
70 | device->state_count = AT91_MAX_STATES; | 72 | device->state_count = AT91_MAX_STATES; |
73 | driver->state_count = AT91_MAX_STATES; | ||
71 | 74 | ||
72 | /* Wait for interrupt state */ | 75 | /* Wait for interrupt state */ |
73 | device->states[0].enter = at91_enter_idle; | 76 | driver->states[0].enter = at91_enter_idle; |
74 | device->states[0].exit_latency = 1; | 77 | driver->states[0].exit_latency = 1; |
75 | device->states[0].target_residency = 10000; | 78 | driver->states[0].target_residency = 10000; |
76 | device->states[0].flags = CPUIDLE_FLAG_TIME_VALID; | 79 | driver->states[0].flags = CPUIDLE_FLAG_TIME_VALID; |
77 | strcpy(device->states[0].name, "WFI"); | 80 | strcpy(driver->states[0].name, "WFI"); |
78 | strcpy(device->states[0].desc, "Wait for interrupt"); | 81 | strcpy(driver->states[0].desc, "Wait for interrupt"); |
79 | 82 | ||
80 | /* Wait for interrupt and RAM self refresh state */ | 83 | /* Wait for interrupt and RAM self refresh state */ |
81 | device->states[1].enter = at91_enter_idle; | 84 | driver->states[1].enter = at91_enter_idle; |
82 | device->states[1].exit_latency = 10; | 85 | driver->states[1].exit_latency = 10; |
83 | device->states[1].target_residency = 10000; | 86 | driver->states[1].target_residency = 10000; |
84 | device->states[1].flags = CPUIDLE_FLAG_TIME_VALID; | 87 | driver->states[1].flags = CPUIDLE_FLAG_TIME_VALID; |
85 | strcpy(device->states[1].name, "RAM_SR"); | 88 | strcpy(driver->states[1].name, "RAM_SR"); |
86 | strcpy(device->states[1].desc, "WFI and RAM Self Refresh"); | 89 | strcpy(driver->states[1].desc, "WFI and RAM Self Refresh"); |
90 | |||
91 | cpuidle_register_driver(&at91_idle_driver); | ||
87 | 92 | ||
88 | if (cpuidle_register_device(device)) { | 93 | if (cpuidle_register_device(device)) { |
89 | printk(KERN_ERR "at91_init_cpuidle: Failed registering\n"); | 94 | printk(KERN_ERR "at91_init_cpuidle: Failed registering\n"); |
diff --git a/arch/arm/mach-at91/include/mach/board.h b/arch/arm/mach-at91/include/mach/board.h index d07767f4052e..eac92e995bb5 100644 --- a/arch/arm/mach-at91/include/mach/board.h +++ b/arch/arm/mach-at91/include/mach/board.h | |||
@@ -117,7 +117,8 @@ struct atmel_nand_data { | |||
117 | u8 ale; /* address line number connected to ALE */ | 117 | u8 ale; /* address line number connected to ALE */ |
118 | u8 cle; /* address line number connected to CLE */ | 118 | u8 cle; /* address line number connected to CLE */ |
119 | u8 bus_width_16; /* buswidth is 16 bit */ | 119 | u8 bus_width_16; /* buswidth is 16 bit */ |
120 | struct mtd_partition* (*partition_info)(int, int*); | 120 | struct mtd_partition *parts; |
121 | unsigned int num_parts; | ||
121 | }; | 122 | }; |
122 | extern void __init at91_add_device_nand(struct atmel_nand_data *data); | 123 | extern void __init at91_add_device_nand(struct atmel_nand_data *data); |
123 | 124 | ||
diff --git a/arch/arm/mach-at91/include/mach/vmalloc.h b/arch/arm/mach-at91/include/mach/vmalloc.h index 8eb459f3f5b7..8e4a1bd0ab1d 100644 --- a/arch/arm/mach-at91/include/mach/vmalloc.h +++ b/arch/arm/mach-at91/include/mach/vmalloc.h | |||
@@ -21,6 +21,8 @@ | |||
21 | #ifndef __ASM_ARCH_VMALLOC_H | 21 | #ifndef __ASM_ARCH_VMALLOC_H |
22 | #define __ASM_ARCH_VMALLOC_H | 22 | #define __ASM_ARCH_VMALLOC_H |
23 | 23 | ||
24 | #include <mach/hardware.h> | ||
25 | |||
24 | #define VMALLOC_END (AT91_VIRT_BASE & PGDIR_MASK) | 26 | #define VMALLOC_END (AT91_VIRT_BASE & PGDIR_MASK) |
25 | 27 | ||
26 | #endif | 28 | #endif |
diff --git a/arch/arm/mach-davinci/board-da830-evm.c b/arch/arm/mach-davinci/board-da830-evm.c index 26d94c0b555c..11c3db985285 100644 --- a/arch/arm/mach-davinci/board-da830-evm.c +++ b/arch/arm/mach-davinci/board-da830-evm.c | |||
@@ -377,7 +377,7 @@ static struct davinci_nand_pdata da830_evm_nand_pdata = { | |||
377 | .nr_parts = ARRAY_SIZE(da830_evm_nand_partitions), | 377 | .nr_parts = ARRAY_SIZE(da830_evm_nand_partitions), |
378 | .ecc_mode = NAND_ECC_HW, | 378 | .ecc_mode = NAND_ECC_HW, |
379 | .ecc_bits = 4, | 379 | .ecc_bits = 4, |
380 | .options = NAND_USE_FLASH_BBT, | 380 | .bbt_options = NAND_BBT_USE_FLASH, |
381 | .bbt_td = &da830_evm_nand_bbt_main_descr, | 381 | .bbt_td = &da830_evm_nand_bbt_main_descr, |
382 | .bbt_md = &da830_evm_nand_bbt_mirror_descr, | 382 | .bbt_md = &da830_evm_nand_bbt_mirror_descr, |
383 | .timing = &da830_evm_nandflash_timing, | 383 | .timing = &da830_evm_nandflash_timing, |
diff --git a/arch/arm/mach-davinci/board-da850-evm.c b/arch/arm/mach-davinci/board-da850-evm.c index ec21663f8ddc..1d7d24995226 100644 --- a/arch/arm/mach-davinci/board-da850-evm.c +++ b/arch/arm/mach-davinci/board-da850-evm.c | |||
@@ -256,7 +256,7 @@ static struct davinci_nand_pdata da850_evm_nandflash_data = { | |||
256 | .nr_parts = ARRAY_SIZE(da850_evm_nandflash_partition), | 256 | .nr_parts = ARRAY_SIZE(da850_evm_nandflash_partition), |
257 | .ecc_mode = NAND_ECC_HW, | 257 | .ecc_mode = NAND_ECC_HW, |
258 | .ecc_bits = 4, | 258 | .ecc_bits = 4, |
259 | .options = NAND_USE_FLASH_BBT, | 259 | .bbt_options = NAND_BBT_USE_FLASH, |
260 | .timing = &da850_evm_nandflash_timing, | 260 | .timing = &da850_evm_nandflash_timing, |
261 | }; | 261 | }; |
262 | 262 | ||
diff --git a/arch/arm/mach-davinci/board-dm355-evm.c b/arch/arm/mach-davinci/board-dm355-evm.c index 65566280b7c9..4e0e707c313d 100644 --- a/arch/arm/mach-davinci/board-dm355-evm.c +++ b/arch/arm/mach-davinci/board-dm355-evm.c | |||
@@ -77,7 +77,7 @@ static struct davinci_nand_pdata davinci_nand_data = { | |||
77 | .parts = davinci_nand_partitions, | 77 | .parts = davinci_nand_partitions, |
78 | .nr_parts = ARRAY_SIZE(davinci_nand_partitions), | 78 | .nr_parts = ARRAY_SIZE(davinci_nand_partitions), |
79 | .ecc_mode = NAND_ECC_HW, | 79 | .ecc_mode = NAND_ECC_HW, |
80 | .options = NAND_USE_FLASH_BBT, | 80 | .bbt_options = NAND_BBT_USE_FLASH, |
81 | .ecc_bits = 4, | 81 | .ecc_bits = 4, |
82 | }; | 82 | }; |
83 | 83 | ||
diff --git a/arch/arm/mach-davinci/board-dm355-leopard.c b/arch/arm/mach-davinci/board-dm355-leopard.c index b307470b071d..ff2d2413279a 100644 --- a/arch/arm/mach-davinci/board-dm355-leopard.c +++ b/arch/arm/mach-davinci/board-dm355-leopard.c | |||
@@ -74,7 +74,7 @@ static struct davinci_nand_pdata davinci_nand_data = { | |||
74 | .parts = davinci_nand_partitions, | 74 | .parts = davinci_nand_partitions, |
75 | .nr_parts = ARRAY_SIZE(davinci_nand_partitions), | 75 | .nr_parts = ARRAY_SIZE(davinci_nand_partitions), |
76 | .ecc_mode = NAND_ECC_HW_SYNDROME, | 76 | .ecc_mode = NAND_ECC_HW_SYNDROME, |
77 | .options = NAND_USE_FLASH_BBT, | 77 | .bbt_options = NAND_BBT_USE_FLASH, |
78 | }; | 78 | }; |
79 | 79 | ||
80 | static struct resource davinci_nand_resources[] = { | 80 | static struct resource davinci_nand_resources[] = { |
diff --git a/arch/arm/mach-davinci/board-dm365-evm.c b/arch/arm/mach-davinci/board-dm365-evm.c index 04c43abcca66..1918ae711428 100644 --- a/arch/arm/mach-davinci/board-dm365-evm.c +++ b/arch/arm/mach-davinci/board-dm365-evm.c | |||
@@ -139,7 +139,7 @@ static struct davinci_nand_pdata davinci_nand_data = { | |||
139 | .parts = davinci_nand_partitions, | 139 | .parts = davinci_nand_partitions, |
140 | .nr_parts = ARRAY_SIZE(davinci_nand_partitions), | 140 | .nr_parts = ARRAY_SIZE(davinci_nand_partitions), |
141 | .ecc_mode = NAND_ECC_HW, | 141 | .ecc_mode = NAND_ECC_HW, |
142 | .options = NAND_USE_FLASH_BBT, | 142 | .bbt_options = NAND_BBT_USE_FLASH, |
143 | .ecc_bits = 4, | 143 | .ecc_bits = 4, |
144 | }; | 144 | }; |
145 | 145 | ||
diff --git a/arch/arm/mach-davinci/board-dm644x-evm.c b/arch/arm/mach-davinci/board-dm644x-evm.c index 28fafa7819bc..0cf8abf78d33 100644 --- a/arch/arm/mach-davinci/board-dm644x-evm.c +++ b/arch/arm/mach-davinci/board-dm644x-evm.c | |||
@@ -151,7 +151,7 @@ static struct davinci_nand_pdata davinci_evm_nandflash_data = { | |||
151 | .parts = davinci_evm_nandflash_partition, | 151 | .parts = davinci_evm_nandflash_partition, |
152 | .nr_parts = ARRAY_SIZE(davinci_evm_nandflash_partition), | 152 | .nr_parts = ARRAY_SIZE(davinci_evm_nandflash_partition), |
153 | .ecc_mode = NAND_ECC_HW, | 153 | .ecc_mode = NAND_ECC_HW, |
154 | .options = NAND_USE_FLASH_BBT, | 154 | .bbt_options = NAND_BBT_USE_FLASH, |
155 | .timing = &davinci_evm_nandflash_timing, | 155 | .timing = &davinci_evm_nandflash_timing, |
156 | }; | 156 | }; |
157 | 157 | ||
diff --git a/arch/arm/mach-davinci/board-mityomapl138.c b/arch/arm/mach-davinci/board-mityomapl138.c index 6efc84cceca0..3cfff555e8f2 100644 --- a/arch/arm/mach-davinci/board-mityomapl138.c +++ b/arch/arm/mach-davinci/board-mityomapl138.c | |||
@@ -396,7 +396,8 @@ static struct davinci_nand_pdata mityomapl138_nandflash_data = { | |||
396 | .parts = mityomapl138_nandflash_partition, | 396 | .parts = mityomapl138_nandflash_partition, |
397 | .nr_parts = ARRAY_SIZE(mityomapl138_nandflash_partition), | 397 | .nr_parts = ARRAY_SIZE(mityomapl138_nandflash_partition), |
398 | .ecc_mode = NAND_ECC_HW, | 398 | .ecc_mode = NAND_ECC_HW, |
399 | .options = NAND_USE_FLASH_BBT | NAND_BUSWIDTH_16, | 399 | .bbt_options = NAND_BBT_USE_FLASH, |
400 | .options = NAND_BUSWIDTH_16, | ||
400 | .ecc_bits = 1, /* 4 bit mode is not supported with 16 bit NAND */ | 401 | .ecc_bits = 1, /* 4 bit mode is not supported with 16 bit NAND */ |
401 | }; | 402 | }; |
402 | 403 | ||
diff --git a/arch/arm/mach-davinci/board-neuros-osd2.c b/arch/arm/mach-davinci/board-neuros-osd2.c index 38d6f644d8b9..e5f231aefee4 100644 --- a/arch/arm/mach-davinci/board-neuros-osd2.c +++ b/arch/arm/mach-davinci/board-neuros-osd2.c | |||
@@ -87,7 +87,7 @@ static struct davinci_nand_pdata davinci_ntosd2_nandflash_data = { | |||
87 | .parts = davinci_ntosd2_nandflash_partition, | 87 | .parts = davinci_ntosd2_nandflash_partition, |
88 | .nr_parts = ARRAY_SIZE(davinci_ntosd2_nandflash_partition), | 88 | .nr_parts = ARRAY_SIZE(davinci_ntosd2_nandflash_partition), |
89 | .ecc_mode = NAND_ECC_HW, | 89 | .ecc_mode = NAND_ECC_HW, |
90 | .options = NAND_USE_FLASH_BBT, | 90 | .bbt_options = NAND_BBT_USE_FLASH, |
91 | }; | 91 | }; |
92 | 92 | ||
93 | static struct resource davinci_ntosd2_nandflash_resource[] = { | 93 | static struct resource davinci_ntosd2_nandflash_resource[] = { |
diff --git a/arch/arm/mach-davinci/board-tnetv107x-evm.c b/arch/arm/mach-davinci/board-tnetv107x-evm.c index 90ee7b5aabdc..f69e40a29e02 100644 --- a/arch/arm/mach-davinci/board-tnetv107x-evm.c +++ b/arch/arm/mach-davinci/board-tnetv107x-evm.c | |||
@@ -144,7 +144,7 @@ static struct davinci_nand_pdata nand_config = { | |||
144 | .parts = nand_partitions, | 144 | .parts = nand_partitions, |
145 | .nr_parts = ARRAY_SIZE(nand_partitions), | 145 | .nr_parts = ARRAY_SIZE(nand_partitions), |
146 | .ecc_mode = NAND_ECC_HW, | 146 | .ecc_mode = NAND_ECC_HW, |
147 | .options = NAND_USE_FLASH_BBT, | 147 | .bbt_options = NAND_BBT_USE_FLASH, |
148 | .ecc_bits = 1, | 148 | .ecc_bits = 1, |
149 | }; | 149 | }; |
150 | 150 | ||
diff --git a/arch/arm/mach-davinci/cpuidle.c b/arch/arm/mach-davinci/cpuidle.c index 60d2f4871afa..a30c7c5a6d83 100644 --- a/arch/arm/mach-davinci/cpuidle.c +++ b/arch/arm/mach-davinci/cpuidle.c | |||
@@ -79,9 +79,11 @@ static struct davinci_ops davinci_states[DAVINCI_CPUIDLE_MAX_STATES] = { | |||
79 | 79 | ||
80 | /* Actual code that puts the SoC in different idle states */ | 80 | /* Actual code that puts the SoC in different idle states */ |
81 | static int davinci_enter_idle(struct cpuidle_device *dev, | 81 | static int davinci_enter_idle(struct cpuidle_device *dev, |
82 | struct cpuidle_state *state) | 82 | struct cpuidle_driver *drv, |
83 | int index) | ||
83 | { | 84 | { |
84 | struct davinci_ops *ops = cpuidle_get_statedata(state); | 85 | struct cpuidle_state_usage *state_usage = &dev->states_usage[index]; |
86 | struct davinci_ops *ops = cpuidle_get_statedata(state_usage); | ||
85 | struct timeval before, after; | 87 | struct timeval before, after; |
86 | int idle_time; | 88 | int idle_time; |
87 | 89 | ||
@@ -99,13 +101,17 @@ static int davinci_enter_idle(struct cpuidle_device *dev, | |||
99 | local_irq_enable(); | 101 | local_irq_enable(); |
100 | idle_time = (after.tv_sec - before.tv_sec) * USEC_PER_SEC + | 102 | idle_time = (after.tv_sec - before.tv_sec) * USEC_PER_SEC + |
101 | (after.tv_usec - before.tv_usec); | 103 | (after.tv_usec - before.tv_usec); |
102 | return idle_time; | 104 | |
105 | dev->last_residency = idle_time; | ||
106 | |||
107 | return index; | ||
103 | } | 108 | } |
104 | 109 | ||
105 | static int __init davinci_cpuidle_probe(struct platform_device *pdev) | 110 | static int __init davinci_cpuidle_probe(struct platform_device *pdev) |
106 | { | 111 | { |
107 | int ret; | 112 | int ret; |
108 | struct cpuidle_device *device; | 113 | struct cpuidle_device *device; |
114 | struct cpuidle_driver *driver = &davinci_idle_driver; | ||
109 | struct davinci_cpuidle_config *pdata = pdev->dev.platform_data; | 115 | struct davinci_cpuidle_config *pdata = pdev->dev.platform_data; |
110 | 116 | ||
111 | device = &per_cpu(davinci_cpuidle_device, smp_processor_id()); | 117 | device = &per_cpu(davinci_cpuidle_device, smp_processor_id()); |
@@ -117,32 +123,33 @@ static int __init davinci_cpuidle_probe(struct platform_device *pdev) | |||
117 | 123 | ||
118 | ddr2_reg_base = pdata->ddr2_ctlr_base; | 124 | ddr2_reg_base = pdata->ddr2_ctlr_base; |
119 | 125 | ||
120 | ret = cpuidle_register_driver(&davinci_idle_driver); | ||
121 | if (ret) { | ||
122 | dev_err(&pdev->dev, "failed to register driver\n"); | ||
123 | return ret; | ||
124 | } | ||
125 | |||
126 | /* Wait for interrupt state */ | 126 | /* Wait for interrupt state */ |
127 | device->states[0].enter = davinci_enter_idle; | 127 | driver->states[0].enter = davinci_enter_idle; |
128 | device->states[0].exit_latency = 1; | 128 | driver->states[0].exit_latency = 1; |
129 | device->states[0].target_residency = 10000; | 129 | driver->states[0].target_residency = 10000; |
130 | device->states[0].flags = CPUIDLE_FLAG_TIME_VALID; | 130 | driver->states[0].flags = CPUIDLE_FLAG_TIME_VALID; |
131 | strcpy(device->states[0].name, "WFI"); | 131 | strcpy(driver->states[0].name, "WFI"); |
132 | strcpy(device->states[0].desc, "Wait for interrupt"); | 132 | strcpy(driver->states[0].desc, "Wait for interrupt"); |
133 | 133 | ||
134 | /* Wait for interrupt and DDR self refresh state */ | 134 | /* Wait for interrupt and DDR self refresh state */ |
135 | device->states[1].enter = davinci_enter_idle; | 135 | driver->states[1].enter = davinci_enter_idle; |
136 | device->states[1].exit_latency = 10; | 136 | driver->states[1].exit_latency = 10; |
137 | device->states[1].target_residency = 10000; | 137 | driver->states[1].target_residency = 10000; |
138 | device->states[1].flags = CPUIDLE_FLAG_TIME_VALID; | 138 | driver->states[1].flags = CPUIDLE_FLAG_TIME_VALID; |
139 | strcpy(device->states[1].name, "DDR SR"); | 139 | strcpy(driver->states[1].name, "DDR SR"); |
140 | strcpy(device->states[1].desc, "WFI and DDR Self Refresh"); | 140 | strcpy(driver->states[1].desc, "WFI and DDR Self Refresh"); |
141 | if (pdata->ddr2_pdown) | 141 | if (pdata->ddr2_pdown) |
142 | davinci_states[1].flags |= DAVINCI_CPUIDLE_FLAGS_DDR2_PWDN; | 142 | davinci_states[1].flags |= DAVINCI_CPUIDLE_FLAGS_DDR2_PWDN; |
143 | cpuidle_set_statedata(&device->states[1], &davinci_states[1]); | 143 | cpuidle_set_statedata(&device->states_usage[1], &davinci_states[1]); |
144 | 144 | ||
145 | device->state_count = DAVINCI_CPUIDLE_MAX_STATES; | 145 | device->state_count = DAVINCI_CPUIDLE_MAX_STATES; |
146 | driver->state_count = DAVINCI_CPUIDLE_MAX_STATES; | ||
147 | |||
148 | ret = cpuidle_register_driver(&davinci_idle_driver); | ||
149 | if (ret) { | ||
150 | dev_err(&pdev->dev, "failed to register driver\n"); | ||
151 | return ret; | ||
152 | } | ||
146 | 153 | ||
147 | ret = cpuidle_register_device(device); | 154 | ret = cpuidle_register_device(device); |
148 | if (ret) { | 155 | if (ret) { |
diff --git a/arch/arm/mach-davinci/include/mach/nand.h b/arch/arm/mach-davinci/include/mach/nand.h index 025151049f05..1cf555aef896 100644 --- a/arch/arm/mach-davinci/include/mach/nand.h +++ b/arch/arm/mach-davinci/include/mach/nand.h | |||
@@ -74,8 +74,10 @@ struct davinci_nand_pdata { /* platform_data */ | |||
74 | nand_ecc_modes_t ecc_mode; | 74 | nand_ecc_modes_t ecc_mode; |
75 | u8 ecc_bits; | 75 | u8 ecc_bits; |
76 | 76 | ||
77 | /* e.g. NAND_BUSWIDTH_16 or NAND_USE_FLASH_BBT */ | 77 | /* e.g. NAND_BUSWIDTH_16 */ |
78 | unsigned options; | 78 | unsigned options; |
79 | /* e.g. NAND_BBT_USE_FLASH */ | ||
80 | unsigned bbt_options; | ||
79 | 81 | ||
80 | /* Main and mirror bbt descriptor overrides */ | 82 | /* Main and mirror bbt descriptor overrides */ |
81 | struct nand_bbt_descr *bbt_td; | 83 | struct nand_bbt_descr *bbt_td; |
diff --git a/arch/arm/mach-ep93xx/ts72xx.c b/arch/arm/mach-ep93xx/ts72xx.c index 1ade3c340507..8b2f1435bcac 100644 --- a/arch/arm/mach-ep93xx/ts72xx.c +++ b/arch/arm/mach-ep93xx/ts72xx.c | |||
@@ -116,8 +116,9 @@ static struct mtd_partition ts72xx_nand_parts[] = { | |||
116 | .mask_flags = MTD_WRITEABLE, /* force read-only */ | 116 | .mask_flags = MTD_WRITEABLE, /* force read-only */ |
117 | }, { | 117 | }, { |
118 | .name = "Linux", | 118 | .name = "Linux", |
119 | .offset = MTDPART_OFS_APPEND, | 119 | .offset = MTDPART_OFS_RETAIN, |
120 | .size = 0, /* filled in later */ | 120 | .size = TS72XX_REDBOOT_PART_SIZE, |
121 | /* leave so much for last partition */ | ||
121 | }, { | 122 | }, { |
122 | .name = "RedBoot", | 123 | .name = "RedBoot", |
123 | .offset = MTDPART_OFS_APPEND, | 124 | .offset = MTDPART_OFS_APPEND, |
@@ -126,28 +127,14 @@ static struct mtd_partition ts72xx_nand_parts[] = { | |||
126 | }, | 127 | }, |
127 | }; | 128 | }; |
128 | 129 | ||
129 | static void ts72xx_nand_set_parts(uint64_t size, | ||
130 | struct platform_nand_chip *chip) | ||
131 | { | ||
132 | /* Factory TS-72xx boards only come with 32MiB or 128MiB NAND options */ | ||
133 | if (size == SZ_32M || size == SZ_128M) { | ||
134 | /* Set the "Linux" partition size */ | ||
135 | ts72xx_nand_parts[1].size = size - TS72XX_REDBOOT_PART_SIZE; | ||
136 | |||
137 | chip->partitions = ts72xx_nand_parts; | ||
138 | chip->nr_partitions = ARRAY_SIZE(ts72xx_nand_parts); | ||
139 | } else { | ||
140 | pr_warning("Unknown nand disk size:%lluMiB\n", size >> 20); | ||
141 | } | ||
142 | } | ||
143 | |||
144 | static struct platform_nand_data ts72xx_nand_data = { | 130 | static struct platform_nand_data ts72xx_nand_data = { |
145 | .chip = { | 131 | .chip = { |
146 | .nr_chips = 1, | 132 | .nr_chips = 1, |
147 | .chip_offset = 0, | 133 | .chip_offset = 0, |
148 | .chip_delay = 15, | 134 | .chip_delay = 15, |
149 | .part_probe_types = ts72xx_nand_part_probes, | 135 | .part_probe_types = ts72xx_nand_part_probes, |
150 | .set_parts = ts72xx_nand_set_parts, | 136 | .partitions = ts72xx_nand_parts, |
137 | .nr_partitions = ARRAY_SIZE(ts72xx_nand_parts), | ||
151 | }, | 138 | }, |
152 | .ctrl = { | 139 | .ctrl = { |
153 | .cmd_ctrl = ts72xx_nand_hwcontrol, | 140 | .cmd_ctrl = ts72xx_nand_hwcontrol, |
diff --git a/arch/arm/mach-exynos/cpuidle.c b/arch/arm/mach-exynos/cpuidle.c index bf7e96f2793a..35f6502144ae 100644 --- a/arch/arm/mach-exynos/cpuidle.c +++ b/arch/arm/mach-exynos/cpuidle.c | |||
@@ -16,7 +16,8 @@ | |||
16 | #include <asm/proc-fns.h> | 16 | #include <asm/proc-fns.h> |
17 | 17 | ||
18 | static int exynos4_enter_idle(struct cpuidle_device *dev, | 18 | static int exynos4_enter_idle(struct cpuidle_device *dev, |
19 | struct cpuidle_state *state); | 19 | struct cpuidle_driver *drv, |
20 | int index); | ||
20 | 21 | ||
21 | static struct cpuidle_state exynos4_cpuidle_set[] = { | 22 | static struct cpuidle_state exynos4_cpuidle_set[] = { |
22 | [0] = { | 23 | [0] = { |
@@ -37,7 +38,8 @@ static struct cpuidle_driver exynos4_idle_driver = { | |||
37 | }; | 38 | }; |
38 | 39 | ||
39 | static int exynos4_enter_idle(struct cpuidle_device *dev, | 40 | static int exynos4_enter_idle(struct cpuidle_device *dev, |
40 | struct cpuidle_state *state) | 41 | struct cpuidle_driver *drv, |
42 | int index) | ||
41 | { | 43 | { |
42 | struct timeval before, after; | 44 | struct timeval before, after; |
43 | int idle_time; | 45 | int idle_time; |
@@ -52,29 +54,31 @@ static int exynos4_enter_idle(struct cpuidle_device *dev, | |||
52 | idle_time = (after.tv_sec - before.tv_sec) * USEC_PER_SEC + | 54 | idle_time = (after.tv_sec - before.tv_sec) * USEC_PER_SEC + |
53 | (after.tv_usec - before.tv_usec); | 55 | (after.tv_usec - before.tv_usec); |
54 | 56 | ||
55 | return idle_time; | 57 | dev->last_residency = idle_time; |
58 | return index; | ||
56 | } | 59 | } |
57 | 60 | ||
58 | static int __init exynos4_init_cpuidle(void) | 61 | static int __init exynos4_init_cpuidle(void) |
59 | { | 62 | { |
60 | int i, max_cpuidle_state, cpu_id; | 63 | int i, max_cpuidle_state, cpu_id; |
61 | struct cpuidle_device *device; | 64 | struct cpuidle_device *device; |
62 | 65 | struct cpuidle_driver *drv = &exynos4_idle_driver; | |
66 | |||
67 | /* Setup cpuidle driver */ | ||
68 | drv->state_count = (sizeof(exynos4_cpuidle_set) / | ||
69 | sizeof(struct cpuidle_state)); | ||
70 | max_cpuidle_state = drv->state_count; | ||
71 | for (i = 0; i < max_cpuidle_state; i++) { | ||
72 | memcpy(&drv->states[i], &exynos4_cpuidle_set[i], | ||
73 | sizeof(struct cpuidle_state)); | ||
74 | } | ||
63 | cpuidle_register_driver(&exynos4_idle_driver); | 75 | cpuidle_register_driver(&exynos4_idle_driver); |
64 | 76 | ||
65 | for_each_cpu(cpu_id, cpu_online_mask) { | 77 | for_each_cpu(cpu_id, cpu_online_mask) { |
66 | device = &per_cpu(exynos4_cpuidle_device, cpu_id); | 78 | device = &per_cpu(exynos4_cpuidle_device, cpu_id); |
67 | device->cpu = cpu_id; | 79 | device->cpu = cpu_id; |
68 | 80 | ||
69 | device->state_count = (sizeof(exynos4_cpuidle_set) / | 81 | device->state_count = drv->state_count; |
70 | sizeof(struct cpuidle_state)); | ||
71 | |||
72 | max_cpuidle_state = device->state_count; | ||
73 | |||
74 | for (i = 0; i < max_cpuidle_state; i++) { | ||
75 | memcpy(&device->states[i], &exynos4_cpuidle_set[i], | ||
76 | sizeof(struct cpuidle_state)); | ||
77 | } | ||
78 | 82 | ||
79 | if (cpuidle_register_device(device)) { | 83 | if (cpuidle_register_device(device)) { |
80 | printk(KERN_ERR "CPUidle register device failed\n,"); | 84 | printk(KERN_ERR "CPUidle register device failed\n,"); |
diff --git a/arch/arm/mach-imx/Makefile.boot b/arch/arm/mach-imx/Makefile.boot index 22d85889f622..cfede5768aa0 100644 --- a/arch/arm/mach-imx/Makefile.boot +++ b/arch/arm/mach-imx/Makefile.boot | |||
@@ -1,22 +1,26 @@ | |||
1 | zreladdr-$(CONFIG_ARCH_MX1) += 0x08008000 | 1 | zreladdr-$(CONFIG_SOC_IMX1) += 0x08008000 |
2 | params_phys-$(CONFIG_ARCH_MX1) := 0x08000100 | 2 | params_phys-$(CONFIG_SOC_IMX1) := 0x08000100 |
3 | initrd_phys-$(CONFIG_ARCH_MX1) := 0x08800000 | 3 | initrd_phys-$(CONFIG_SOC_IMX1) := 0x08800000 |
4 | 4 | ||
5 | zreladdr-$(CONFIG_MACH_MX21) += 0xC0008000 | 5 | zreladdr-$(CONFIG_SOC_IMX21) += 0xC0008000 |
6 | params_phys-$(CONFIG_MACH_MX21) := 0xC0000100 | 6 | params_phys-$(CONFIG_SOC_IMX21) := 0xC0000100 |
7 | initrd_phys-$(CONFIG_MACH_MX21) := 0xC0800000 | 7 | initrd_phys-$(CONFIG_SOC_IMX21) := 0xC0800000 |
8 | 8 | ||
9 | zreladdr-$(CONFIG_ARCH_MX25) += 0x80008000 | 9 | zreladdr-$(CONFIG_SOC_IMX25) += 0x80008000 |
10 | params_phys-$(CONFIG_ARCH_MX25) := 0x80000100 | 10 | params_phys-$(CONFIG_SOC_IMX25) := 0x80000100 |
11 | initrd_phys-$(CONFIG_ARCH_MX25) := 0x80800000 | 11 | initrd_phys-$(CONFIG_SOC_IMX25) := 0x80800000 |
12 | 12 | ||
13 | zreladdr-$(CONFIG_MACH_MX27) += 0xA0008000 | 13 | zreladdr-$(CONFIG_SOC_IMX27) += 0xA0008000 |
14 | params_phys-$(CONFIG_MACH_MX27) := 0xA0000100 | 14 | params_phys-$(CONFIG_SOC_IMX27) := 0xA0000100 |
15 | initrd_phys-$(CONFIG_MACH_MX27) := 0xA0800000 | 15 | initrd_phys-$(CONFIG_SOC_IMX27) := 0xA0800000 |
16 | 16 | ||
17 | zreladdr-$(CONFIG_ARCH_MX3) += 0x80008000 | 17 | zreladdr-$(CONFIG_SOC_IMX31) += 0x80008000 |
18 | params_phys-$(CONFIG_ARCH_MX3) := 0x80000100 | 18 | params_phys-$(CONFIG_SOC_IMX31) := 0x80000100 |
19 | initrd_phys-$(CONFIG_ARCH_MX3) := 0x80800000 | 19 | initrd_phys-$(CONFIG_SOC_IMX31) := 0x80800000 |
20 | |||
21 | zreladdr-$(CONFIG_SOC_IMX35) += 0x80008000 | ||
22 | params_phys-$(CONFIG_SOC_IMX35) := 0x80000100 | ||
23 | initrd_phys-$(CONFIG_SOC_IMX35) := 0x80800000 | ||
20 | 24 | ||
21 | zreladdr-$(CONFIG_SOC_IMX6Q) += 0x10008000 | 25 | zreladdr-$(CONFIG_SOC_IMX6Q) += 0x10008000 |
22 | params_phys-$(CONFIG_SOC_IMX6Q) := 0x10000100 | 26 | params_phys-$(CONFIG_SOC_IMX6Q) := 0x10000100 |
diff --git a/arch/arm/mach-imx/clock-imx6q.c b/arch/arm/mach-imx/clock-imx6q.c index e0b926dfeced..613a1b993bff 100644 --- a/arch/arm/mach-imx/clock-imx6q.c +++ b/arch/arm/mach-imx/clock-imx6q.c | |||
@@ -1139,7 +1139,7 @@ static int _clk_set_rate(struct clk *clk, unsigned long rate) | |||
1139 | return -EINVAL; | 1139 | return -EINVAL; |
1140 | 1140 | ||
1141 | max_div = ((d->bm_pred >> d->bp_pred) + 1) * | 1141 | max_div = ((d->bm_pred >> d->bp_pred) + 1) * |
1142 | ((d->bm_pred >> d->bp_pred) + 1); | 1142 | ((d->bm_podf >> d->bp_podf) + 1); |
1143 | 1143 | ||
1144 | div = parent_rate / rate; | 1144 | div = parent_rate / rate; |
1145 | if (div == 0) | 1145 | if (div == 0) |
@@ -2002,6 +2002,21 @@ int __init mx6q_clocks_init(void) | |||
2002 | clk_set_rate(&asrc_serial_clk, 1500000); | 2002 | clk_set_rate(&asrc_serial_clk, 1500000); |
2003 | clk_set_rate(&enfc_clk, 11000000); | 2003 | clk_set_rate(&enfc_clk, 11000000); |
2004 | 2004 | ||
2005 | /* | ||
2006 | * Before pinctrl API is available, we have to rely on the pad | ||
2007 | * configuration set up by bootloader. For usdhc example here, | ||
2008 | * u-boot sets up the pads for 49.5 MHz case, and we have to lower | ||
2009 | * the usdhc clock from 198 to 49.5 MHz to match the pad configuration. | ||
2010 | * | ||
2011 | * FIXME: This is should be removed after pinctrl API is available. | ||
2012 | * At that time, usdhc driver can call pinctrl API to change pad | ||
2013 | * configuration dynamically per different usdhc clock settings. | ||
2014 | */ | ||
2015 | clk_set_rate(&usdhc1_clk, 49500000); | ||
2016 | clk_set_rate(&usdhc2_clk, 49500000); | ||
2017 | clk_set_rate(&usdhc3_clk, 49500000); | ||
2018 | clk_set_rate(&usdhc4_clk, 49500000); | ||
2019 | |||
2005 | np = of_find_compatible_node(NULL, NULL, "fsl,imx6q-gpt"); | 2020 | np = of_find_compatible_node(NULL, NULL, "fsl,imx6q-gpt"); |
2006 | base = of_iomap(np, 0); | 2021 | base = of_iomap(np, 0); |
2007 | WARN_ON(!base); | 2022 | WARN_ON(!base); |
diff --git a/arch/arm/mach-kirkwood/cpuidle.c b/arch/arm/mach-kirkwood/cpuidle.c index 864e569f684e..7088180b018b 100644 --- a/arch/arm/mach-kirkwood/cpuidle.c +++ b/arch/arm/mach-kirkwood/cpuidle.c | |||
@@ -33,17 +33,18 @@ static DEFINE_PER_CPU(struct cpuidle_device, kirkwood_cpuidle_device); | |||
33 | 33 | ||
34 | /* Actual code that puts the SoC in different idle states */ | 34 | /* Actual code that puts the SoC in different idle states */ |
35 | static int kirkwood_enter_idle(struct cpuidle_device *dev, | 35 | static int kirkwood_enter_idle(struct cpuidle_device *dev, |
36 | struct cpuidle_state *state) | 36 | struct cpuidle_driver *drv, |
37 | int index) | ||
37 | { | 38 | { |
38 | struct timeval before, after; | 39 | struct timeval before, after; |
39 | int idle_time; | 40 | int idle_time; |
40 | 41 | ||
41 | local_irq_disable(); | 42 | local_irq_disable(); |
42 | do_gettimeofday(&before); | 43 | do_gettimeofday(&before); |
43 | if (state == &dev->states[0]) | 44 | if (index == 0) |
44 | /* Wait for interrupt state */ | 45 | /* Wait for interrupt state */ |
45 | cpu_do_idle(); | 46 | cpu_do_idle(); |
46 | else if (state == &dev->states[1]) { | 47 | else if (index == 1) { |
47 | /* | 48 | /* |
48 | * Following write will put DDR in self refresh. | 49 | * Following write will put DDR in self refresh. |
49 | * Note that we have 256 cycles before DDR puts it | 50 | * Note that we have 256 cycles before DDR puts it |
@@ -58,35 +59,40 @@ static int kirkwood_enter_idle(struct cpuidle_device *dev, | |||
58 | local_irq_enable(); | 59 | local_irq_enable(); |
59 | idle_time = (after.tv_sec - before.tv_sec) * USEC_PER_SEC + | 60 | idle_time = (after.tv_sec - before.tv_sec) * USEC_PER_SEC + |
60 | (after.tv_usec - before.tv_usec); | 61 | (after.tv_usec - before.tv_usec); |
61 | return idle_time; | 62 | |
63 | /* Update last residency */ | ||
64 | dev->last_residency = idle_time; | ||
65 | |||
66 | return index; | ||
62 | } | 67 | } |
63 | 68 | ||
64 | /* Initialize CPU idle by registering the idle states */ | 69 | /* Initialize CPU idle by registering the idle states */ |
65 | static int kirkwood_init_cpuidle(void) | 70 | static int kirkwood_init_cpuidle(void) |
66 | { | 71 | { |
67 | struct cpuidle_device *device; | 72 | struct cpuidle_device *device; |
68 | 73 | struct cpuidle_driver *driver = &kirkwood_idle_driver; | |
69 | cpuidle_register_driver(&kirkwood_idle_driver); | ||
70 | 74 | ||
71 | device = &per_cpu(kirkwood_cpuidle_device, smp_processor_id()); | 75 | device = &per_cpu(kirkwood_cpuidle_device, smp_processor_id()); |
72 | device->state_count = KIRKWOOD_MAX_STATES; | 76 | device->state_count = KIRKWOOD_MAX_STATES; |
77 | driver->state_count = KIRKWOOD_MAX_STATES; | ||
73 | 78 | ||
74 | /* Wait for interrupt state */ | 79 | /* Wait for interrupt state */ |
75 | device->states[0].enter = kirkwood_enter_idle; | 80 | driver->states[0].enter = kirkwood_enter_idle; |
76 | device->states[0].exit_latency = 1; | 81 | driver->states[0].exit_latency = 1; |
77 | device->states[0].target_residency = 10000; | 82 | driver->states[0].target_residency = 10000; |
78 | device->states[0].flags = CPUIDLE_FLAG_TIME_VALID; | 83 | driver->states[0].flags = CPUIDLE_FLAG_TIME_VALID; |
79 | strcpy(device->states[0].name, "WFI"); | 84 | strcpy(driver->states[0].name, "WFI"); |
80 | strcpy(device->states[0].desc, "Wait for interrupt"); | 85 | strcpy(driver->states[0].desc, "Wait for interrupt"); |
81 | 86 | ||
82 | /* Wait for interrupt and DDR self refresh state */ | 87 | /* Wait for interrupt and DDR self refresh state */ |
83 | device->states[1].enter = kirkwood_enter_idle; | 88 | driver->states[1].enter = kirkwood_enter_idle; |
84 | device->states[1].exit_latency = 10; | 89 | driver->states[1].exit_latency = 10; |
85 | device->states[1].target_residency = 10000; | 90 | driver->states[1].target_residency = 10000; |
86 | device->states[1].flags = CPUIDLE_FLAG_TIME_VALID; | 91 | driver->states[1].flags = CPUIDLE_FLAG_TIME_VALID; |
87 | strcpy(device->states[1].name, "DDR SR"); | 92 | strcpy(driver->states[1].name, "DDR SR"); |
88 | strcpy(device->states[1].desc, "WFI and DDR Self Refresh"); | 93 | strcpy(driver->states[1].desc, "WFI and DDR Self Refresh"); |
89 | 94 | ||
95 | cpuidle_register_driver(&kirkwood_idle_driver); | ||
90 | if (cpuidle_register_device(device)) { | 96 | if (cpuidle_register_device(device)) { |
91 | printk(KERN_ERR "kirkwood_init_cpuidle: Failed registering\n"); | 97 | printk(KERN_ERR "kirkwood_init_cpuidle: Failed registering\n"); |
92 | return -EIO; | 98 | return -EIO; |
diff --git a/arch/arm/mach-mmp/aspenite.c b/arch/arm/mach-mmp/aspenite.c index 06b5ad774604..7a60bbbce7a4 100644 --- a/arch/arm/mach-mmp/aspenite.c +++ b/arch/arm/mach-mmp/aspenite.c | |||
@@ -167,8 +167,9 @@ static struct mtd_partition aspenite_nand_partitions[] = { | |||
167 | 167 | ||
168 | static struct pxa3xx_nand_platform_data aspenite_nand_info = { | 168 | static struct pxa3xx_nand_platform_data aspenite_nand_info = { |
169 | .enable_arbiter = 1, | 169 | .enable_arbiter = 1, |
170 | .parts = aspenite_nand_partitions, | 170 | .num_cs = 1, |
171 | .nr_parts = ARRAY_SIZE(aspenite_nand_partitions), | 171 | .parts[0] = aspenite_nand_partitions, |
172 | .nr_parts[0] = ARRAY_SIZE(aspenite_nand_partitions), | ||
172 | }; | 173 | }; |
173 | 174 | ||
174 | static struct i2c_board_info aspenite_i2c_info[] __initdata = { | 175 | static struct i2c_board_info aspenite_i2c_info[] __initdata = { |
diff --git a/arch/arm/mach-msm/Makefile b/arch/arm/mach-msm/Makefile index 4285dfd80b6f..4ad3969b9881 100644 --- a/arch/arm/mach-msm/Makefile +++ b/arch/arm/mach-msm/Makefile | |||
@@ -15,6 +15,8 @@ obj-$(CONFIG_MSM_SMD) += smd.o smd_debug.o | |||
15 | obj-$(CONFIG_MSM_SMD) += last_radio_log.o | 15 | obj-$(CONFIG_MSM_SMD) += last_radio_log.o |
16 | obj-$(CONFIG_MSM_SCM) += scm.o scm-boot.o | 16 | obj-$(CONFIG_MSM_SCM) += scm.o scm-boot.o |
17 | 17 | ||
18 | CFLAGS_scm.o :=$(call as-instr,.arch_extension sec,-DREQUIRES_SEC=1) | ||
19 | |||
18 | obj-$(CONFIG_HOTPLUG_CPU) += hotplug.o | 20 | obj-$(CONFIG_HOTPLUG_CPU) += hotplug.o |
19 | obj-$(CONFIG_SMP) += headsmp.o platsmp.o | 21 | obj-$(CONFIG_SMP) += headsmp.o platsmp.o |
20 | 22 | ||
diff --git a/arch/arm/mach-msm/board-msm7x30.c b/arch/arm/mach-msm/board-msm7x30.c index 71de5062c71e..db81ed531031 100644 --- a/arch/arm/mach-msm/board-msm7x30.c +++ b/arch/arm/mach-msm/board-msm7x30.c | |||
@@ -42,8 +42,8 @@ | |||
42 | 42 | ||
43 | extern struct sys_timer msm_timer; | 43 | extern struct sys_timer msm_timer; |
44 | 44 | ||
45 | static void __init msm7x30_fixup(struct machine_desc *desc, struct tag *tag, | 45 | static void __init msm7x30_fixup(struct tag *tag, char **cmdline, |
46 | char **cmdline, struct meminfo *mi) | 46 | struct meminfo *mi) |
47 | { | 47 | { |
48 | for (; tag->hdr.size; tag = tag_next(tag)) | 48 | for (; tag->hdr.size; tag = tag_next(tag)) |
49 | if (tag->hdr.tag == ATAG_MEM && tag->u.mem.start == 0x200000) { | 49 | if (tag->hdr.tag == ATAG_MEM && tag->u.mem.start == 0x200000) { |
diff --git a/arch/arm/mach-msm/board-msm8960.c b/arch/arm/mach-msm/board-msm8960.c index b04468e7d00e..6dc1cbd2a595 100644 --- a/arch/arm/mach-msm/board-msm8960.c +++ b/arch/arm/mach-msm/board-msm8960.c | |||
@@ -32,8 +32,8 @@ | |||
32 | 32 | ||
33 | #include "devices.h" | 33 | #include "devices.h" |
34 | 34 | ||
35 | static void __init msm8960_fixup(struct machine_desc *desc, struct tag *tag, | 35 | static void __init msm8960_fixup(struct tag *tag, char **cmdline, |
36 | char **cmdline, struct meminfo *mi) | 36 | struct meminfo *mi) |
37 | { | 37 | { |
38 | for (; tag->hdr.size; tag = tag_next(tag)) | 38 | for (; tag->hdr.size; tag = tag_next(tag)) |
39 | if (tag->hdr.tag == ATAG_MEM && | 39 | if (tag->hdr.tag == ATAG_MEM && |
diff --git a/arch/arm/mach-msm/board-msm8x60.c b/arch/arm/mach-msm/board-msm8x60.c index cf38e2284fa9..44bf71688373 100644 --- a/arch/arm/mach-msm/board-msm8x60.c +++ b/arch/arm/mach-msm/board-msm8x60.c | |||
@@ -28,8 +28,8 @@ | |||
28 | #include <mach/board.h> | 28 | #include <mach/board.h> |
29 | #include <mach/msm_iomap.h> | 29 | #include <mach/msm_iomap.h> |
30 | 30 | ||
31 | static void __init msm8x60_fixup(struct machine_desc *desc, struct tag *tag, | 31 | static void __init msm8x60_fixup(struct tag *tag, char **cmdline, |
32 | char **cmdline, struct meminfo *mi) | 32 | struct meminfo *mi) |
33 | { | 33 | { |
34 | for (; tag->hdr.size; tag = tag_next(tag)) | 34 | for (; tag->hdr.size; tag = tag_next(tag)) |
35 | if (tag->hdr.tag == ATAG_MEM && | 35 | if (tag->hdr.tag == ATAG_MEM && |
diff --git a/arch/arm/mach-msm/scm.c b/arch/arm/mach-msm/scm.c index 232f97a04504..bafabb502580 100644 --- a/arch/arm/mach-msm/scm.c +++ b/arch/arm/mach-msm/scm.c | |||
@@ -180,6 +180,9 @@ static u32 smc(u32 cmd_addr) | |||
180 | __asmeq("%1", "r0") | 180 | __asmeq("%1", "r0") |
181 | __asmeq("%2", "r1") | 181 | __asmeq("%2", "r1") |
182 | __asmeq("%3", "r2") | 182 | __asmeq("%3", "r2") |
183 | #ifdef REQUIRES_SEC | ||
184 | ".arch_extension sec\n" | ||
185 | #endif | ||
183 | "smc #0 @ switch to secure world\n" | 186 | "smc #0 @ switch to secure world\n" |
184 | : "=r" (r0) | 187 | : "=r" (r0) |
185 | : "r" (r0), "r" (r1), "r" (r2) | 188 | : "r" (r0), "r" (r1), "r" (r2) |
diff --git a/arch/arm/mach-mx5/clock-mx51-mx53.c b/arch/arm/mach-mx5/clock-mx51-mx53.c index 2aacf41c48e7..4cb276977190 100644 --- a/arch/arm/mach-mx5/clock-mx51-mx53.c +++ b/arch/arm/mach-mx5/clock-mx51-mx53.c | |||
@@ -1281,9 +1281,9 @@ DEFINE_CLOCK(gpt_clk, 0, MXC_CCM_CCGR2, MXC_CCM_CCGRx_CG9_OFFSET, | |||
1281 | NULL, NULL, &ipg_clk, &gpt_ipg_clk); | 1281 | NULL, NULL, &ipg_clk, &gpt_ipg_clk); |
1282 | 1282 | ||
1283 | DEFINE_CLOCK(pwm1_clk, 0, MXC_CCM_CCGR2, MXC_CCM_CCGRx_CG6_OFFSET, | 1283 | DEFINE_CLOCK(pwm1_clk, 0, MXC_CCM_CCGR2, MXC_CCM_CCGRx_CG6_OFFSET, |
1284 | NULL, NULL, &ipg_clk, NULL); | 1284 | NULL, NULL, &ipg_perclk, NULL); |
1285 | DEFINE_CLOCK(pwm2_clk, 0, MXC_CCM_CCGR2, MXC_CCM_CCGRx_CG8_OFFSET, | 1285 | DEFINE_CLOCK(pwm2_clk, 0, MXC_CCM_CCGR2, MXC_CCM_CCGRx_CG8_OFFSET, |
1286 | NULL, NULL, &ipg_clk, NULL); | 1286 | NULL, NULL, &ipg_perclk, NULL); |
1287 | 1287 | ||
1288 | /* I2C */ | 1288 | /* I2C */ |
1289 | DEFINE_CLOCK(i2c1_clk, 0, MXC_CCM_CCGR1, MXC_CCM_CCGRx_CG9_OFFSET, | 1289 | DEFINE_CLOCK(i2c1_clk, 0, MXC_CCM_CCGR1, MXC_CCM_CCGRx_CG9_OFFSET, |
@@ -1634,6 +1634,7 @@ int __init mx53_clocks_init(unsigned long ckil, unsigned long osc, | |||
1634 | return 0; | 1634 | return 0; |
1635 | } | 1635 | } |
1636 | 1636 | ||
1637 | #ifdef CONFIG_OF | ||
1637 | static void __init clk_get_freq_dt(unsigned long *ckil, unsigned long *osc, | 1638 | static void __init clk_get_freq_dt(unsigned long *ckil, unsigned long *osc, |
1638 | unsigned long *ckih1, unsigned long *ckih2) | 1639 | unsigned long *ckih1, unsigned long *ckih2) |
1639 | { | 1640 | { |
@@ -1671,3 +1672,4 @@ int __init mx53_clocks_init_dt(void) | |||
1671 | clk_get_freq_dt(&ckil, &osc, &ckih1, &ckih2); | 1672 | clk_get_freq_dt(&ckil, &osc, &ckih1, &ckih2); |
1672 | return mx53_clocks_init(ckil, osc, ckih1, ckih2); | 1673 | return mx53_clocks_init(ckil, osc, ckih1, ckih2); |
1673 | } | 1674 | } |
1675 | #endif | ||
diff --git a/arch/arm/mach-mxs/mach-mx28evk.c b/arch/arm/mach-mxs/mach-mx28evk.c index ac2316d53d3c..064ec5abaa55 100644 --- a/arch/arm/mach-mxs/mach-mx28evk.c +++ b/arch/arm/mach-mxs/mach-mx28evk.c | |||
@@ -471,7 +471,8 @@ static void __init mx28evk_init(void) | |||
471 | "mmc0-slot-power"); | 471 | "mmc0-slot-power"); |
472 | if (ret) | 472 | if (ret) |
473 | pr_warn("failed to request gpio mmc0-slot-power: %d\n", ret); | 473 | pr_warn("failed to request gpio mmc0-slot-power: %d\n", ret); |
474 | mx28_add_mxs_mmc(0, &mx28evk_mmc_pdata[0]); | 474 | else |
475 | mx28_add_mxs_mmc(0, &mx28evk_mmc_pdata[0]); | ||
475 | 476 | ||
476 | ret = gpio_request_one(MX28EVK_MMC1_SLOT_POWER, GPIOF_OUT_INIT_LOW, | 477 | ret = gpio_request_one(MX28EVK_MMC1_SLOT_POWER, GPIOF_OUT_INIT_LOW, |
477 | "mmc1-slot-power"); | 478 | "mmc1-slot-power"); |
@@ -480,7 +481,6 @@ static void __init mx28evk_init(void) | |||
480 | else | 481 | else |
481 | mx28_add_mxs_mmc(1, &mx28evk_mmc_pdata[1]); | 482 | mx28_add_mxs_mmc(1, &mx28evk_mmc_pdata[1]); |
482 | 483 | ||
483 | mx28_add_mxs_mmc(1, &mx28evk_mmc_pdata[1]); | ||
484 | mx28_add_rtc_stmp3xxx(); | 484 | mx28_add_rtc_stmp3xxx(); |
485 | 485 | ||
486 | gpio_led_register_device(0, &mx28evk_led_data); | 486 | gpio_led_register_device(0, &mx28evk_led_data); |
diff --git a/arch/arm/mach-omap2/Kconfig b/arch/arm/mach-omap2/Kconfig index 503414718905..e1293aa513d3 100644 --- a/arch/arm/mach-omap2/Kconfig +++ b/arch/arm/mach-omap2/Kconfig | |||
@@ -334,6 +334,7 @@ config MACH_OMAP4_PANDA | |||
334 | config OMAP3_EMU | 334 | config OMAP3_EMU |
335 | bool "OMAP3 debugging peripherals" | 335 | bool "OMAP3 debugging peripherals" |
336 | depends on ARCH_OMAP3 | 336 | depends on ARCH_OMAP3 |
337 | select ARM_AMBA | ||
337 | select OC_ETM | 338 | select OC_ETM |
338 | help | 339 | help |
339 | Say Y here to enable debugging hardware of omap3 | 340 | Say Y here to enable debugging hardware of omap3 |
diff --git a/arch/arm/mach-omap2/cpuidle34xx.c b/arch/arm/mach-omap2/cpuidle34xx.c index 2e0fa5a4aaeb..942bb4f19f9f 100644 --- a/arch/arm/mach-omap2/cpuidle34xx.c +++ b/arch/arm/mach-omap2/cpuidle34xx.c | |||
@@ -89,17 +89,21 @@ static int _cpuidle_deny_idle(struct powerdomain *pwrdm, | |||
89 | /** | 89 | /** |
90 | * omap3_enter_idle - Programs OMAP3 to enter the specified state | 90 | * omap3_enter_idle - Programs OMAP3 to enter the specified state |
91 | * @dev: cpuidle device | 91 | * @dev: cpuidle device |
92 | * @state: The target state to be programmed | 92 | * @drv: cpuidle driver |
93 | * @index: the index of state to be entered | ||
93 | * | 94 | * |
94 | * Called from the CPUidle framework to program the device to the | 95 | * Called from the CPUidle framework to program the device to the |
95 | * specified target state selected by the governor. | 96 | * specified target state selected by the governor. |
96 | */ | 97 | */ |
97 | static int omap3_enter_idle(struct cpuidle_device *dev, | 98 | static int omap3_enter_idle(struct cpuidle_device *dev, |
98 | struct cpuidle_state *state) | 99 | struct cpuidle_driver *drv, |
100 | int index) | ||
99 | { | 101 | { |
100 | struct omap3_idle_statedata *cx = cpuidle_get_statedata(state); | 102 | struct omap3_idle_statedata *cx = |
103 | cpuidle_get_statedata(&dev->states_usage[index]); | ||
101 | struct timespec ts_preidle, ts_postidle, ts_idle; | 104 | struct timespec ts_preidle, ts_postidle, ts_idle; |
102 | u32 mpu_state = cx->mpu_state, core_state = cx->core_state; | 105 | u32 mpu_state = cx->mpu_state, core_state = cx->core_state; |
106 | int idle_time; | ||
103 | 107 | ||
104 | /* Used to keep track of the total time in idle */ | 108 | /* Used to keep track of the total time in idle */ |
105 | getnstimeofday(&ts_preidle); | 109 | getnstimeofday(&ts_preidle); |
@@ -114,7 +118,7 @@ static int omap3_enter_idle(struct cpuidle_device *dev, | |||
114 | goto return_sleep_time; | 118 | goto return_sleep_time; |
115 | 119 | ||
116 | /* Deny idle for C1 */ | 120 | /* Deny idle for C1 */ |
117 | if (state == &dev->states[0]) { | 121 | if (index == 0) { |
118 | pwrdm_for_each_clkdm(mpu_pd, _cpuidle_deny_idle); | 122 | pwrdm_for_each_clkdm(mpu_pd, _cpuidle_deny_idle); |
119 | pwrdm_for_each_clkdm(core_pd, _cpuidle_deny_idle); | 123 | pwrdm_for_each_clkdm(core_pd, _cpuidle_deny_idle); |
120 | } | 124 | } |
@@ -123,7 +127,7 @@ static int omap3_enter_idle(struct cpuidle_device *dev, | |||
123 | omap_sram_idle(); | 127 | omap_sram_idle(); |
124 | 128 | ||
125 | /* Re-allow idle for C1 */ | 129 | /* Re-allow idle for C1 */ |
126 | if (state == &dev->states[0]) { | 130 | if (index == 0) { |
127 | pwrdm_for_each_clkdm(mpu_pd, _cpuidle_allow_idle); | 131 | pwrdm_for_each_clkdm(mpu_pd, _cpuidle_allow_idle); |
128 | pwrdm_for_each_clkdm(core_pd, _cpuidle_allow_idle); | 132 | pwrdm_for_each_clkdm(core_pd, _cpuidle_allow_idle); |
129 | } | 133 | } |
@@ -135,28 +139,38 @@ return_sleep_time: | |||
135 | local_irq_enable(); | 139 | local_irq_enable(); |
136 | local_fiq_enable(); | 140 | local_fiq_enable(); |
137 | 141 | ||
138 | return ts_idle.tv_nsec / NSEC_PER_USEC + ts_idle.tv_sec * USEC_PER_SEC; | 142 | idle_time = ts_idle.tv_nsec / NSEC_PER_USEC + ts_idle.tv_sec * \ |
143 | USEC_PER_SEC; | ||
144 | |||
145 | /* Update cpuidle counters */ | ||
146 | dev->last_residency = idle_time; | ||
147 | |||
148 | return index; | ||
139 | } | 149 | } |
140 | 150 | ||
141 | /** | 151 | /** |
142 | * next_valid_state - Find next valid C-state | 152 | * next_valid_state - Find next valid C-state |
143 | * @dev: cpuidle device | 153 | * @dev: cpuidle device |
144 | * @state: Currently selected C-state | 154 | * @drv: cpuidle driver |
155 | * @index: Index of currently selected c-state | ||
145 | * | 156 | * |
146 | * If the current state is valid, it is returned back to the caller. | 157 | * If the state corresponding to index is valid, index is returned back |
147 | * Else, this function searches for a lower c-state which is still | 158 | * to the caller. Else, this function searches for a lower c-state which is |
148 | * valid. | 159 | * still valid (as defined in omap3_power_states[]) and returns its index. |
149 | * | 160 | * |
150 | * A state is valid if the 'valid' field is enabled and | 161 | * A state is valid if the 'valid' field is enabled and |
151 | * if it satisfies the enable_off_mode condition. | 162 | * if it satisfies the enable_off_mode condition. |
152 | */ | 163 | */ |
153 | static struct cpuidle_state *next_valid_state(struct cpuidle_device *dev, | 164 | static int next_valid_state(struct cpuidle_device *dev, |
154 | struct cpuidle_state *curr) | 165 | struct cpuidle_driver *drv, |
166 | int index) | ||
155 | { | 167 | { |
156 | struct cpuidle_state *next = NULL; | 168 | struct cpuidle_state_usage *curr_usage = &dev->states_usage[index]; |
157 | struct omap3_idle_statedata *cx = cpuidle_get_statedata(curr); | 169 | struct cpuidle_state *curr = &drv->states[index]; |
170 | struct omap3_idle_statedata *cx = cpuidle_get_statedata(curr_usage); | ||
158 | u32 mpu_deepest_state = PWRDM_POWER_RET; | 171 | u32 mpu_deepest_state = PWRDM_POWER_RET; |
159 | u32 core_deepest_state = PWRDM_POWER_RET; | 172 | u32 core_deepest_state = PWRDM_POWER_RET; |
173 | int next_index = -1; | ||
160 | 174 | ||
161 | if (enable_off_mode) { | 175 | if (enable_off_mode) { |
162 | mpu_deepest_state = PWRDM_POWER_OFF; | 176 | mpu_deepest_state = PWRDM_POWER_OFF; |
@@ -173,20 +187,20 @@ static struct cpuidle_state *next_valid_state(struct cpuidle_device *dev, | |||
173 | if ((cx->valid) && | 187 | if ((cx->valid) && |
174 | (cx->mpu_state >= mpu_deepest_state) && | 188 | (cx->mpu_state >= mpu_deepest_state) && |
175 | (cx->core_state >= core_deepest_state)) { | 189 | (cx->core_state >= core_deepest_state)) { |
176 | return curr; | 190 | return index; |
177 | } else { | 191 | } else { |
178 | int idx = OMAP3_NUM_STATES - 1; | 192 | int idx = OMAP3_NUM_STATES - 1; |
179 | 193 | ||
180 | /* Reach the current state starting at highest C-state */ | 194 | /* Reach the current state starting at highest C-state */ |
181 | for (; idx >= 0; idx--) { | 195 | for (; idx >= 0; idx--) { |
182 | if (&dev->states[idx] == curr) { | 196 | if (&drv->states[idx] == curr) { |
183 | next = &dev->states[idx]; | 197 | next_index = idx; |
184 | break; | 198 | break; |
185 | } | 199 | } |
186 | } | 200 | } |
187 | 201 | ||
188 | /* Should never hit this condition */ | 202 | /* Should never hit this condition */ |
189 | WARN_ON(next == NULL); | 203 | WARN_ON(next_index == -1); |
190 | 204 | ||
191 | /* | 205 | /* |
192 | * Drop to next valid state. | 206 | * Drop to next valid state. |
@@ -194,41 +208,44 @@ static struct cpuidle_state *next_valid_state(struct cpuidle_device *dev, | |||
194 | */ | 208 | */ |
195 | idx--; | 209 | idx--; |
196 | for (; idx >= 0; idx--) { | 210 | for (; idx >= 0; idx--) { |
197 | cx = cpuidle_get_statedata(&dev->states[idx]); | 211 | cx = cpuidle_get_statedata(&dev->states_usage[idx]); |
198 | if ((cx->valid) && | 212 | if ((cx->valid) && |
199 | (cx->mpu_state >= mpu_deepest_state) && | 213 | (cx->mpu_state >= mpu_deepest_state) && |
200 | (cx->core_state >= core_deepest_state)) { | 214 | (cx->core_state >= core_deepest_state)) { |
201 | next = &dev->states[idx]; | 215 | next_index = idx; |
202 | break; | 216 | break; |
203 | } | 217 | } |
204 | } | 218 | } |
205 | /* | 219 | /* |
206 | * C1 is always valid. | 220 | * C1 is always valid. |
207 | * So, no need to check for 'next==NULL' outside this loop. | 221 | * So, no need to check for 'next_index == -1' outside |
222 | * this loop. | ||
208 | */ | 223 | */ |
209 | } | 224 | } |
210 | 225 | ||
211 | return next; | 226 | return next_index; |
212 | } | 227 | } |
213 | 228 | ||
214 | /** | 229 | /** |
215 | * omap3_enter_idle_bm - Checks for any bus activity | 230 | * omap3_enter_idle_bm - Checks for any bus activity |
216 | * @dev: cpuidle device | 231 | * @dev: cpuidle device |
217 | * @state: The target state to be programmed | 232 | * @drv: cpuidle driver |
233 | * @index: array index of target state to be programmed | ||
218 | * | 234 | * |
219 | * This function checks for any pending activity and then programs | 235 | * This function checks for any pending activity and then programs |
220 | * the device to the specified or a safer state. | 236 | * the device to the specified or a safer state. |
221 | */ | 237 | */ |
222 | static int omap3_enter_idle_bm(struct cpuidle_device *dev, | 238 | static int omap3_enter_idle_bm(struct cpuidle_device *dev, |
223 | struct cpuidle_state *state) | 239 | struct cpuidle_driver *drv, |
240 | int index) | ||
224 | { | 241 | { |
225 | struct cpuidle_state *new_state; | 242 | int new_state_idx; |
226 | u32 core_next_state, per_next_state = 0, per_saved_state = 0, cam_state; | 243 | u32 core_next_state, per_next_state = 0, per_saved_state = 0, cam_state; |
227 | struct omap3_idle_statedata *cx; | 244 | struct omap3_idle_statedata *cx; |
228 | int ret; | 245 | int ret; |
229 | 246 | ||
230 | if (!omap3_can_sleep()) { | 247 | if (!omap3_can_sleep()) { |
231 | new_state = dev->safe_state; | 248 | new_state_idx = drv->safe_state_index; |
232 | goto select_state; | 249 | goto select_state; |
233 | } | 250 | } |
234 | 251 | ||
@@ -238,7 +255,7 @@ static int omap3_enter_idle_bm(struct cpuidle_device *dev, | |||
238 | */ | 255 | */ |
239 | cam_state = pwrdm_read_pwrst(cam_pd); | 256 | cam_state = pwrdm_read_pwrst(cam_pd); |
240 | if (cam_state == PWRDM_POWER_ON) { | 257 | if (cam_state == PWRDM_POWER_ON) { |
241 | new_state = dev->safe_state; | 258 | new_state_idx = drv->safe_state_index; |
242 | goto select_state; | 259 | goto select_state; |
243 | } | 260 | } |
244 | 261 | ||
@@ -254,7 +271,7 @@ static int omap3_enter_idle_bm(struct cpuidle_device *dev, | |||
254 | * Prevent PER off if CORE is not in retention or off as this | 271 | * Prevent PER off if CORE is not in retention or off as this |
255 | * would disable PER wakeups completely. | 272 | * would disable PER wakeups completely. |
256 | */ | 273 | */ |
257 | cx = cpuidle_get_statedata(state); | 274 | cx = cpuidle_get_statedata(&dev->states_usage[index]); |
258 | core_next_state = cx->core_state; | 275 | core_next_state = cx->core_state; |
259 | per_next_state = per_saved_state = pwrdm_read_next_pwrst(per_pd); | 276 | per_next_state = per_saved_state = pwrdm_read_next_pwrst(per_pd); |
260 | if ((per_next_state == PWRDM_POWER_OFF) && | 277 | if ((per_next_state == PWRDM_POWER_OFF) && |
@@ -265,11 +282,10 @@ static int omap3_enter_idle_bm(struct cpuidle_device *dev, | |||
265 | if (per_next_state != per_saved_state) | 282 | if (per_next_state != per_saved_state) |
266 | pwrdm_set_next_pwrst(per_pd, per_next_state); | 283 | pwrdm_set_next_pwrst(per_pd, per_next_state); |
267 | 284 | ||
268 | new_state = next_valid_state(dev, state); | 285 | new_state_idx = next_valid_state(dev, drv, index); |
269 | 286 | ||
270 | select_state: | 287 | select_state: |
271 | dev->last_state = new_state; | 288 | ret = omap3_enter_idle(dev, drv, new_state_idx); |
272 | ret = omap3_enter_idle(dev, new_state); | ||
273 | 289 | ||
274 | /* Restore original PER state if it was modified */ | 290 | /* Restore original PER state if it was modified */ |
275 | if (per_next_state != per_saved_state) | 291 | if (per_next_state != per_saved_state) |
@@ -302,22 +318,31 @@ struct cpuidle_driver omap3_idle_driver = { | |||
302 | .owner = THIS_MODULE, | 318 | .owner = THIS_MODULE, |
303 | }; | 319 | }; |
304 | 320 | ||
305 | /* Helper to fill the C-state common data and register the driver_data */ | 321 | /* Helper to fill the C-state common data*/ |
306 | static inline struct omap3_idle_statedata *_fill_cstate( | 322 | static inline void _fill_cstate(struct cpuidle_driver *drv, |
307 | struct cpuidle_device *dev, | ||
308 | int idx, const char *descr) | 323 | int idx, const char *descr) |
309 | { | 324 | { |
310 | struct omap3_idle_statedata *cx = &omap3_idle_data[idx]; | 325 | struct cpuidle_state *state = &drv->states[idx]; |
311 | struct cpuidle_state *state = &dev->states[idx]; | ||
312 | 326 | ||
313 | state->exit_latency = cpuidle_params_table[idx].exit_latency; | 327 | state->exit_latency = cpuidle_params_table[idx].exit_latency; |
314 | state->target_residency = cpuidle_params_table[idx].target_residency; | 328 | state->target_residency = cpuidle_params_table[idx].target_residency; |
315 | state->flags = CPUIDLE_FLAG_TIME_VALID; | 329 | state->flags = CPUIDLE_FLAG_TIME_VALID; |
316 | state->enter = omap3_enter_idle_bm; | 330 | state->enter = omap3_enter_idle_bm; |
317 | cx->valid = cpuidle_params_table[idx].valid; | ||
318 | sprintf(state->name, "C%d", idx + 1); | 331 | sprintf(state->name, "C%d", idx + 1); |
319 | strncpy(state->desc, descr, CPUIDLE_DESC_LEN); | 332 | strncpy(state->desc, descr, CPUIDLE_DESC_LEN); |
320 | cpuidle_set_statedata(state, cx); | 333 | |
334 | } | ||
335 | |||
336 | /* Helper to register the driver_data */ | ||
337 | static inline struct omap3_idle_statedata *_fill_cstate_usage( | ||
338 | struct cpuidle_device *dev, | ||
339 | int idx) | ||
340 | { | ||
341 | struct omap3_idle_statedata *cx = &omap3_idle_data[idx]; | ||
342 | struct cpuidle_state_usage *state_usage = &dev->states_usage[idx]; | ||
343 | |||
344 | cx->valid = cpuidle_params_table[idx].valid; | ||
345 | cpuidle_set_statedata(state_usage, cx); | ||
321 | 346 | ||
322 | return cx; | 347 | return cx; |
323 | } | 348 | } |
@@ -331,6 +356,7 @@ static inline struct omap3_idle_statedata *_fill_cstate( | |||
331 | int __init omap3_idle_init(void) | 356 | int __init omap3_idle_init(void) |
332 | { | 357 | { |
333 | struct cpuidle_device *dev; | 358 | struct cpuidle_device *dev; |
359 | struct cpuidle_driver *drv = &omap3_idle_driver; | ||
334 | struct omap3_idle_statedata *cx; | 360 | struct omap3_idle_statedata *cx; |
335 | 361 | ||
336 | mpu_pd = pwrdm_lookup("mpu_pwrdm"); | 362 | mpu_pd = pwrdm_lookup("mpu_pwrdm"); |
@@ -338,44 +364,52 @@ int __init omap3_idle_init(void) | |||
338 | per_pd = pwrdm_lookup("per_pwrdm"); | 364 | per_pd = pwrdm_lookup("per_pwrdm"); |
339 | cam_pd = pwrdm_lookup("cam_pwrdm"); | 365 | cam_pd = pwrdm_lookup("cam_pwrdm"); |
340 | 366 | ||
341 | cpuidle_register_driver(&omap3_idle_driver); | 367 | |
368 | drv->safe_state_index = -1; | ||
342 | dev = &per_cpu(omap3_idle_dev, smp_processor_id()); | 369 | dev = &per_cpu(omap3_idle_dev, smp_processor_id()); |
343 | 370 | ||
344 | /* C1 . MPU WFI + Core active */ | 371 | /* C1 . MPU WFI + Core active */ |
345 | cx = _fill_cstate(dev, 0, "MPU ON + CORE ON"); | 372 | _fill_cstate(drv, 0, "MPU ON + CORE ON"); |
346 | (&dev->states[0])->enter = omap3_enter_idle; | 373 | (&drv->states[0])->enter = omap3_enter_idle; |
347 | dev->safe_state = &dev->states[0]; | 374 | drv->safe_state_index = 0; |
375 | cx = _fill_cstate_usage(dev, 0); | ||
348 | cx->valid = 1; /* C1 is always valid */ | 376 | cx->valid = 1; /* C1 is always valid */ |
349 | cx->mpu_state = PWRDM_POWER_ON; | 377 | cx->mpu_state = PWRDM_POWER_ON; |
350 | cx->core_state = PWRDM_POWER_ON; | 378 | cx->core_state = PWRDM_POWER_ON; |
351 | 379 | ||
352 | /* C2 . MPU WFI + Core inactive */ | 380 | /* C2 . MPU WFI + Core inactive */ |
353 | cx = _fill_cstate(dev, 1, "MPU ON + CORE ON"); | 381 | _fill_cstate(drv, 1, "MPU ON + CORE ON"); |
382 | cx = _fill_cstate_usage(dev, 1); | ||
354 | cx->mpu_state = PWRDM_POWER_ON; | 383 | cx->mpu_state = PWRDM_POWER_ON; |
355 | cx->core_state = PWRDM_POWER_ON; | 384 | cx->core_state = PWRDM_POWER_ON; |
356 | 385 | ||
357 | /* C3 . MPU CSWR + Core inactive */ | 386 | /* C3 . MPU CSWR + Core inactive */ |
358 | cx = _fill_cstate(dev, 2, "MPU RET + CORE ON"); | 387 | _fill_cstate(drv, 2, "MPU RET + CORE ON"); |
388 | cx = _fill_cstate_usage(dev, 2); | ||
359 | cx->mpu_state = PWRDM_POWER_RET; | 389 | cx->mpu_state = PWRDM_POWER_RET; |
360 | cx->core_state = PWRDM_POWER_ON; | 390 | cx->core_state = PWRDM_POWER_ON; |
361 | 391 | ||
362 | /* C4 . MPU OFF + Core inactive */ | 392 | /* C4 . MPU OFF + Core inactive */ |
363 | cx = _fill_cstate(dev, 3, "MPU OFF + CORE ON"); | 393 | _fill_cstate(drv, 3, "MPU OFF + CORE ON"); |
394 | cx = _fill_cstate_usage(dev, 3); | ||
364 | cx->mpu_state = PWRDM_POWER_OFF; | 395 | cx->mpu_state = PWRDM_POWER_OFF; |
365 | cx->core_state = PWRDM_POWER_ON; | 396 | cx->core_state = PWRDM_POWER_ON; |
366 | 397 | ||
367 | /* C5 . MPU RET + Core RET */ | 398 | /* C5 . MPU RET + Core RET */ |
368 | cx = _fill_cstate(dev, 4, "MPU RET + CORE RET"); | 399 | _fill_cstate(drv, 4, "MPU RET + CORE RET"); |
400 | cx = _fill_cstate_usage(dev, 4); | ||
369 | cx->mpu_state = PWRDM_POWER_RET; | 401 | cx->mpu_state = PWRDM_POWER_RET; |
370 | cx->core_state = PWRDM_POWER_RET; | 402 | cx->core_state = PWRDM_POWER_RET; |
371 | 403 | ||
372 | /* C6 . MPU OFF + Core RET */ | 404 | /* C6 . MPU OFF + Core RET */ |
373 | cx = _fill_cstate(dev, 5, "MPU OFF + CORE RET"); | 405 | _fill_cstate(drv, 5, "MPU OFF + CORE RET"); |
406 | cx = _fill_cstate_usage(dev, 5); | ||
374 | cx->mpu_state = PWRDM_POWER_OFF; | 407 | cx->mpu_state = PWRDM_POWER_OFF; |
375 | cx->core_state = PWRDM_POWER_RET; | 408 | cx->core_state = PWRDM_POWER_RET; |
376 | 409 | ||
377 | /* C7 . MPU OFF + Core OFF */ | 410 | /* C7 . MPU OFF + Core OFF */ |
378 | cx = _fill_cstate(dev, 6, "MPU OFF + CORE OFF"); | 411 | _fill_cstate(drv, 6, "MPU OFF + CORE OFF"); |
412 | cx = _fill_cstate_usage(dev, 6); | ||
379 | /* | 413 | /* |
380 | * Erratum i583: implementation for ES rev < Es1.2 on 3630. We cannot | 414 | * Erratum i583: implementation for ES rev < Es1.2 on 3630. We cannot |
381 | * enable OFF mode in a stable form for previous revisions. | 415 | * enable OFF mode in a stable form for previous revisions. |
@@ -389,6 +423,9 @@ int __init omap3_idle_init(void) | |||
389 | cx->mpu_state = PWRDM_POWER_OFF; | 423 | cx->mpu_state = PWRDM_POWER_OFF; |
390 | cx->core_state = PWRDM_POWER_OFF; | 424 | cx->core_state = PWRDM_POWER_OFF; |
391 | 425 | ||
426 | drv->state_count = OMAP3_NUM_STATES; | ||
427 | cpuidle_register_driver(&omap3_idle_driver); | ||
428 | |||
392 | dev->state_count = OMAP3_NUM_STATES; | 429 | dev->state_count = OMAP3_NUM_STATES; |
393 | if (cpuidle_register_device(dev)) { | 430 | if (cpuidle_register_device(dev)) { |
394 | printk(KERN_ERR "%s: CPUidle register device failed\n", | 431 | printk(KERN_ERR "%s: CPUidle register device failed\n", |
diff --git a/arch/arm/mach-omap2/io.h b/arch/arm/mach-omap2/io.h deleted file mode 100644 index e69de29bb2d1..000000000000 --- a/arch/arm/mach-omap2/io.h +++ /dev/null | |||
diff --git a/arch/arm/mach-omap2/omap_hwmod.c b/arch/arm/mach-omap2/omap_hwmod.c index 6b3088db83b7..207a2ff9a8c4 100644 --- a/arch/arm/mach-omap2/omap_hwmod.c +++ b/arch/arm/mach-omap2/omap_hwmod.c | |||
@@ -749,7 +749,7 @@ static int _count_mpu_irqs(struct omap_hwmod *oh) | |||
749 | ohii = &oh->mpu_irqs[i++]; | 749 | ohii = &oh->mpu_irqs[i++]; |
750 | } while (ohii->irq != -1); | 750 | } while (ohii->irq != -1); |
751 | 751 | ||
752 | return i; | 752 | return i-1; |
753 | } | 753 | } |
754 | 754 | ||
755 | /** | 755 | /** |
@@ -772,7 +772,7 @@ static int _count_sdma_reqs(struct omap_hwmod *oh) | |||
772 | ohdi = &oh->sdma_reqs[i++]; | 772 | ohdi = &oh->sdma_reqs[i++]; |
773 | } while (ohdi->dma_req != -1); | 773 | } while (ohdi->dma_req != -1); |
774 | 774 | ||
775 | return i; | 775 | return i-1; |
776 | } | 776 | } |
777 | 777 | ||
778 | /** | 778 | /** |
@@ -795,7 +795,7 @@ static int _count_ocp_if_addr_spaces(struct omap_hwmod_ocp_if *os) | |||
795 | mem = &os->addr[i++]; | 795 | mem = &os->addr[i++]; |
796 | } while (mem->pa_start != mem->pa_end); | 796 | } while (mem->pa_start != mem->pa_end); |
797 | 797 | ||
798 | return i; | 798 | return i-1; |
799 | } | 799 | } |
800 | 800 | ||
801 | /** | 801 | /** |
diff --git a/arch/arm/mach-omap2/omap_l3_noc.c b/arch/arm/mach-omap2/omap_l3_noc.c index 6a66aa5e2a5b..d15225ff5c49 100644 --- a/arch/arm/mach-omap2/omap_l3_noc.c +++ b/arch/arm/mach-omap2/omap_l3_noc.c | |||
@@ -237,7 +237,7 @@ static int __devexit omap4_l3_remove(struct platform_device *pdev) | |||
237 | static const struct of_device_id l3_noc_match[] = { | 237 | static const struct of_device_id l3_noc_match[] = { |
238 | {.compatible = "ti,omap4-l3-noc", }, | 238 | {.compatible = "ti,omap4-l3-noc", }, |
239 | {}, | 239 | {}, |
240 | } | 240 | }; |
241 | MODULE_DEVICE_TABLE(of, l3_noc_match); | 241 | MODULE_DEVICE_TABLE(of, l3_noc_match); |
242 | #else | 242 | #else |
243 | #define l3_noc_match NULL | 243 | #define l3_noc_match NULL |
diff --git a/arch/arm/mach-omap2/pm.c b/arch/arm/mach-omap2/pm.c index 1e79bdf313e3..00bff46ca48b 100644 --- a/arch/arm/mach-omap2/pm.c +++ b/arch/arm/mach-omap2/pm.c | |||
@@ -24,6 +24,7 @@ | |||
24 | #include "powerdomain.h" | 24 | #include "powerdomain.h" |
25 | #include "clockdomain.h" | 25 | #include "clockdomain.h" |
26 | #include "pm.h" | 26 | #include "pm.h" |
27 | #include "twl-common.h" | ||
27 | 28 | ||
28 | static struct omap_device_pm_latency *pm_lats; | 29 | static struct omap_device_pm_latency *pm_lats; |
29 | 30 | ||
@@ -226,11 +227,8 @@ postcore_initcall(omap2_common_pm_init); | |||
226 | 227 | ||
227 | static int __init omap2_common_pm_late_init(void) | 228 | static int __init omap2_common_pm_late_init(void) |
228 | { | 229 | { |
229 | /* Init the OMAP TWL parameters */ | ||
230 | omap3_twl_init(); | ||
231 | omap4_twl_init(); | ||
232 | |||
233 | /* Init the voltage layer */ | 230 | /* Init the voltage layer */ |
231 | omap_pmic_late_init(); | ||
234 | omap_voltage_late_init(); | 232 | omap_voltage_late_init(); |
235 | 233 | ||
236 | /* Initialize the voltages */ | 234 | /* Initialize the voltages */ |
diff --git a/arch/arm/mach-omap2/smartreflex.c b/arch/arm/mach-omap2/smartreflex.c index 6a4f6839a7d9..cf246b39bac7 100644 --- a/arch/arm/mach-omap2/smartreflex.c +++ b/arch/arm/mach-omap2/smartreflex.c | |||
@@ -139,7 +139,7 @@ static irqreturn_t sr_interrupt(int irq, void *data) | |||
139 | sr_write_reg(sr_info, ERRCONFIG_V1, status); | 139 | sr_write_reg(sr_info, ERRCONFIG_V1, status); |
140 | } else if (sr_info->ip_type == SR_TYPE_V2) { | 140 | } else if (sr_info->ip_type == SR_TYPE_V2) { |
141 | /* Read the status bits */ | 141 | /* Read the status bits */ |
142 | sr_read_reg(sr_info, IRQSTATUS); | 142 | status = sr_read_reg(sr_info, IRQSTATUS); |
143 | 143 | ||
144 | /* Clear them by writing back */ | 144 | /* Clear them by writing back */ |
145 | sr_write_reg(sr_info, IRQSTATUS, status); | 145 | sr_write_reg(sr_info, IRQSTATUS, status); |
diff --git a/arch/arm/mach-omap2/twl-common.c b/arch/arm/mach-omap2/twl-common.c index 522435772168..10b20c652e5d 100644 --- a/arch/arm/mach-omap2/twl-common.c +++ b/arch/arm/mach-omap2/twl-common.c | |||
@@ -30,6 +30,7 @@ | |||
30 | #include <plat/usb.h> | 30 | #include <plat/usb.h> |
31 | 31 | ||
32 | #include "twl-common.h" | 32 | #include "twl-common.h" |
33 | #include "pm.h" | ||
33 | 34 | ||
34 | static struct i2c_board_info __initdata pmic_i2c_board_info = { | 35 | static struct i2c_board_info __initdata pmic_i2c_board_info = { |
35 | .addr = 0x48, | 36 | .addr = 0x48, |
@@ -48,6 +49,16 @@ void __init omap_pmic_init(int bus, u32 clkrate, | |||
48 | omap_register_i2c_bus(bus, clkrate, &pmic_i2c_board_info, 1); | 49 | omap_register_i2c_bus(bus, clkrate, &pmic_i2c_board_info, 1); |
49 | } | 50 | } |
50 | 51 | ||
52 | void __init omap_pmic_late_init(void) | ||
53 | { | ||
54 | /* Init the OMAP TWL parameters (if PMIC has been registerd) */ | ||
55 | if (!pmic_i2c_board_info.irq) | ||
56 | return; | ||
57 | |||
58 | omap3_twl_init(); | ||
59 | omap4_twl_init(); | ||
60 | } | ||
61 | |||
51 | #if defined(CONFIG_ARCH_OMAP3) | 62 | #if defined(CONFIG_ARCH_OMAP3) |
52 | static struct twl4030_usb_data omap3_usb_pdata = { | 63 | static struct twl4030_usb_data omap3_usb_pdata = { |
53 | .usb_mode = T2_USB_MODE_ULPI, | 64 | .usb_mode = T2_USB_MODE_ULPI, |
diff --git a/arch/arm/mach-omap2/twl-common.h b/arch/arm/mach-omap2/twl-common.h index 5e83a5bd37fb..275dde8cb27a 100644 --- a/arch/arm/mach-omap2/twl-common.h +++ b/arch/arm/mach-omap2/twl-common.h | |||
@@ -1,6 +1,8 @@ | |||
1 | #ifndef __OMAP_PMIC_COMMON__ | 1 | #ifndef __OMAP_PMIC_COMMON__ |
2 | #define __OMAP_PMIC_COMMON__ | 2 | #define __OMAP_PMIC_COMMON__ |
3 | 3 | ||
4 | #include <plat/irqs.h> | ||
5 | |||
4 | #define TWL_COMMON_PDATA_USB (1 << 0) | 6 | #define TWL_COMMON_PDATA_USB (1 << 0) |
5 | #define TWL_COMMON_PDATA_BCI (1 << 1) | 7 | #define TWL_COMMON_PDATA_BCI (1 << 1) |
6 | #define TWL_COMMON_PDATA_MADC (1 << 2) | 8 | #define TWL_COMMON_PDATA_MADC (1 << 2) |
@@ -30,6 +32,7 @@ struct twl4030_platform_data; | |||
30 | 32 | ||
31 | void omap_pmic_init(int bus, u32 clkrate, const char *pmic_type, int pmic_irq, | 33 | void omap_pmic_init(int bus, u32 clkrate, const char *pmic_type, int pmic_irq, |
32 | struct twl4030_platform_data *pmic_data); | 34 | struct twl4030_platform_data *pmic_data); |
35 | void omap_pmic_late_init(void); | ||
33 | 36 | ||
34 | static inline void omap2_pmic_init(const char *pmic_type, | 37 | static inline void omap2_pmic_init(const char *pmic_type, |
35 | struct twl4030_platform_data *pmic_data) | 38 | struct twl4030_platform_data *pmic_data) |
diff --git a/arch/arm/mach-orion5x/ts78xx-setup.c b/arch/arm/mach-orion5x/ts78xx-setup.c index 6c75cd35c4c8..b35e2005a348 100644 --- a/arch/arm/mach-orion5x/ts78xx-setup.c +++ b/arch/arm/mach-orion5x/ts78xx-setup.c | |||
@@ -275,7 +275,7 @@ static struct platform_nand_data ts78xx_ts_nand_data = { | |||
275 | .partitions = ts78xx_ts_nand_parts, | 275 | .partitions = ts78xx_ts_nand_parts, |
276 | .nr_partitions = ARRAY_SIZE(ts78xx_ts_nand_parts), | 276 | .nr_partitions = ARRAY_SIZE(ts78xx_ts_nand_parts), |
277 | .chip_delay = 15, | 277 | .chip_delay = 15, |
278 | .options = NAND_USE_FLASH_BBT, | 278 | .bbt_options = NAND_BBT_USE_FLASH, |
279 | }, | 279 | }, |
280 | .ctrl = { | 280 | .ctrl = { |
281 | /* | 281 | /* |
diff --git a/arch/arm/mach-picoxcell/include/mach/debug-macro.S b/arch/arm/mach-picoxcell/include/mach/debug-macro.S index 8f2c234ed9d9..58d4ee3ae949 100644 --- a/arch/arm/mach-picoxcell/include/mach/debug-macro.S +++ b/arch/arm/mach-picoxcell/include/mach/debug-macro.S | |||
@@ -14,7 +14,7 @@ | |||
14 | 14 | ||
15 | #define UART_SHIFT 2 | 15 | #define UART_SHIFT 2 |
16 | 16 | ||
17 | .macro addruart, rp, rv | 17 | .macro addruart, rp, rv, tmp |
18 | ldr \rv, =PHYS_TO_IO(PICOXCELL_UART1_BASE) | 18 | ldr \rv, =PHYS_TO_IO(PICOXCELL_UART1_BASE) |
19 | ldr \rp, =PICOXCELL_UART1_BASE | 19 | ldr \rp, =PICOXCELL_UART1_BASE |
20 | .endm | 20 | .endm |
diff --git a/arch/arm/mach-pxa/cm-x300.c b/arch/arm/mach-pxa/cm-x300.c index 3a7387f93c38..e096bba8fd57 100644 --- a/arch/arm/mach-pxa/cm-x300.c +++ b/arch/arm/mach-pxa/cm-x300.c | |||
@@ -424,8 +424,9 @@ static struct mtd_partition cm_x300_nand_partitions[] = { | |||
424 | static struct pxa3xx_nand_platform_data cm_x300_nand_info = { | 424 | static struct pxa3xx_nand_platform_data cm_x300_nand_info = { |
425 | .enable_arbiter = 1, | 425 | .enable_arbiter = 1, |
426 | .keep_config = 1, | 426 | .keep_config = 1, |
427 | .parts = cm_x300_nand_partitions, | 427 | .num_cs = 1, |
428 | .nr_parts = ARRAY_SIZE(cm_x300_nand_partitions), | 428 | .parts[0] = cm_x300_nand_partitions, |
429 | .nr_parts[0] = ARRAY_SIZE(cm_x300_nand_partitions), | ||
429 | }; | 430 | }; |
430 | 431 | ||
431 | static void __init cm_x300_init_nand(void) | 432 | static void __init cm_x300_init_nand(void) |
diff --git a/arch/arm/mach-pxa/colibri-pxa3xx.c b/arch/arm/mach-pxa/colibri-pxa3xx.c index 3f9be419959d..2b8ca0de8a3d 100644 --- a/arch/arm/mach-pxa/colibri-pxa3xx.c +++ b/arch/arm/mach-pxa/colibri-pxa3xx.c | |||
@@ -139,8 +139,9 @@ static struct mtd_partition colibri_nand_partitions[] = { | |||
139 | static struct pxa3xx_nand_platform_data colibri_nand_info = { | 139 | static struct pxa3xx_nand_platform_data colibri_nand_info = { |
140 | .enable_arbiter = 1, | 140 | .enable_arbiter = 1, |
141 | .keep_config = 1, | 141 | .keep_config = 1, |
142 | .parts = colibri_nand_partitions, | 142 | .num_cs = 1, |
143 | .nr_parts = ARRAY_SIZE(colibri_nand_partitions), | 143 | .parts[0] = colibri_nand_partitions, |
144 | .nr_parts[0] = ARRAY_SIZE(colibri_nand_partitions), | ||
144 | }; | 145 | }; |
145 | 146 | ||
146 | void __init colibri_pxa3xx_init_nand(void) | 147 | void __init colibri_pxa3xx_init_nand(void) |
diff --git a/arch/arm/mach-pxa/littleton.c b/arch/arm/mach-pxa/littleton.c index 0037e57e0cec..7b324ec6449f 100644 --- a/arch/arm/mach-pxa/littleton.c +++ b/arch/arm/mach-pxa/littleton.c | |||
@@ -325,8 +325,9 @@ static struct mtd_partition littleton_nand_partitions[] = { | |||
325 | 325 | ||
326 | static struct pxa3xx_nand_platform_data littleton_nand_info = { | 326 | static struct pxa3xx_nand_platform_data littleton_nand_info = { |
327 | .enable_arbiter = 1, | 327 | .enable_arbiter = 1, |
328 | .parts = littleton_nand_partitions, | 328 | .num_cs = 1, |
329 | .nr_parts = ARRAY_SIZE(littleton_nand_partitions), | 329 | .parts[0] = littleton_nand_partitions, |
330 | .nr_parts[0] = ARRAY_SIZE(littleton_nand_partitions), | ||
330 | }; | 331 | }; |
331 | 332 | ||
332 | static void __init littleton_init_nand(void) | 333 | static void __init littleton_init_nand(void) |
diff --git a/arch/arm/mach-pxa/mxm8x10.c b/arch/arm/mach-pxa/mxm8x10.c index b5a8fd3fce04..90928d6e1a5b 100644 --- a/arch/arm/mach-pxa/mxm8x10.c +++ b/arch/arm/mach-pxa/mxm8x10.c | |||
@@ -389,10 +389,11 @@ static struct mtd_partition mxm_8x10_nand_partitions[] = { | |||
389 | }; | 389 | }; |
390 | 390 | ||
391 | static struct pxa3xx_nand_platform_data mxm_8x10_nand_info = { | 391 | static struct pxa3xx_nand_platform_data mxm_8x10_nand_info = { |
392 | .enable_arbiter = 1, | 392 | .enable_arbiter = 1, |
393 | .keep_config = 1, | 393 | .keep_config = 1, |
394 | .parts = mxm_8x10_nand_partitions, | 394 | .num_cs = 1, |
395 | .nr_parts = ARRAY_SIZE(mxm_8x10_nand_partitions) | 395 | .parts[0] = mxm_8x10_nand_partitions, |
396 | .nr_parts[0] = ARRAY_SIZE(mxm_8x10_nand_partitions) | ||
396 | }; | 397 | }; |
397 | 398 | ||
398 | static void __init mxm_8x10_nand_init(void) | 399 | static void __init mxm_8x10_nand_init(void) |
diff --git a/arch/arm/mach-pxa/raumfeld.c b/arch/arm/mach-pxa/raumfeld.c index 6810cddec927..f0c05f4d12ed 100644 --- a/arch/arm/mach-pxa/raumfeld.c +++ b/arch/arm/mach-pxa/raumfeld.c | |||
@@ -346,8 +346,9 @@ static struct mtd_partition raumfeld_nand_partitions[] = { | |||
346 | static struct pxa3xx_nand_platform_data raumfeld_nand_info = { | 346 | static struct pxa3xx_nand_platform_data raumfeld_nand_info = { |
347 | .enable_arbiter = 1, | 347 | .enable_arbiter = 1, |
348 | .keep_config = 1, | 348 | .keep_config = 1, |
349 | .parts = raumfeld_nand_partitions, | 349 | .num_cs = 1, |
350 | .nr_parts = ARRAY_SIZE(raumfeld_nand_partitions), | 350 | .parts[0] = raumfeld_nand_partitions, |
351 | .nr_parts[0] = ARRAY_SIZE(raumfeld_nand_partitions), | ||
351 | }; | 352 | }; |
352 | 353 | ||
353 | /** | 354 | /** |
diff --git a/arch/arm/mach-pxa/zylonite.c b/arch/arm/mach-pxa/zylonite.c index 31d496891891..6c39c3328418 100644 --- a/arch/arm/mach-pxa/zylonite.c +++ b/arch/arm/mach-pxa/zylonite.c | |||
@@ -366,8 +366,9 @@ static struct mtd_partition zylonite_nand_partitions[] = { | |||
366 | 366 | ||
367 | static struct pxa3xx_nand_platform_data zylonite_nand_info = { | 367 | static struct pxa3xx_nand_platform_data zylonite_nand_info = { |
368 | .enable_arbiter = 1, | 368 | .enable_arbiter = 1, |
369 | .parts = zylonite_nand_partitions, | 369 | .num_cs = 1, |
370 | .nr_parts = ARRAY_SIZE(zylonite_nand_partitions), | 370 | .parts[0] = zylonite_nand_partitions, |
371 | .nr_parts[0] = ARRAY_SIZE(zylonite_nand_partitions), | ||
371 | }; | 372 | }; |
372 | 373 | ||
373 | static void __init zylonite_init_nand(void) | 374 | static void __init zylonite_init_nand(void) |
diff --git a/arch/arm/mach-shmobile/Makefile b/arch/arm/mach-shmobile/Makefile index 2aec2f732515..737bdc631b0d 100644 --- a/arch/arm/mach-shmobile/Makefile +++ b/arch/arm/mach-shmobile/Makefile | |||
@@ -3,7 +3,7 @@ | |||
3 | # | 3 | # |
4 | 4 | ||
5 | # Common objects | 5 | # Common objects |
6 | obj-y := timer.o console.o clock.o pm_runtime.o | 6 | obj-y := timer.o console.o clock.o |
7 | 7 | ||
8 | # CPU objects | 8 | # CPU objects |
9 | obj-$(CONFIG_ARCH_SH7367) += setup-sh7367.o clock-sh7367.o intc-sh7367.o | 9 | obj-$(CONFIG_ARCH_SH7367) += setup-sh7367.o clock-sh7367.o intc-sh7367.o |
diff --git a/arch/arm/mach-shmobile/board-ag5evm.c b/arch/arm/mach-shmobile/board-ag5evm.c index 83624e26b884..b862e9f81e3e 100644 --- a/arch/arm/mach-shmobile/board-ag5evm.c +++ b/arch/arm/mach-shmobile/board-ag5evm.c | |||
@@ -515,14 +515,14 @@ static void __init ag5evm_init(void) | |||
515 | /* enable MMCIF */ | 515 | /* enable MMCIF */ |
516 | gpio_request(GPIO_FN_MMCCLK0, NULL); | 516 | gpio_request(GPIO_FN_MMCCLK0, NULL); |
517 | gpio_request(GPIO_FN_MMCCMD0_PU, NULL); | 517 | gpio_request(GPIO_FN_MMCCMD0_PU, NULL); |
518 | gpio_request(GPIO_FN_MMCD0_0, NULL); | 518 | gpio_request(GPIO_FN_MMCD0_0_PU, NULL); |
519 | gpio_request(GPIO_FN_MMCD0_1, NULL); | 519 | gpio_request(GPIO_FN_MMCD0_1_PU, NULL); |
520 | gpio_request(GPIO_FN_MMCD0_2, NULL); | 520 | gpio_request(GPIO_FN_MMCD0_2_PU, NULL); |
521 | gpio_request(GPIO_FN_MMCD0_3, NULL); | 521 | gpio_request(GPIO_FN_MMCD0_3_PU, NULL); |
522 | gpio_request(GPIO_FN_MMCD0_4, NULL); | 522 | gpio_request(GPIO_FN_MMCD0_4_PU, NULL); |
523 | gpio_request(GPIO_FN_MMCD0_5, NULL); | 523 | gpio_request(GPIO_FN_MMCD0_5_PU, NULL); |
524 | gpio_request(GPIO_FN_MMCD0_6, NULL); | 524 | gpio_request(GPIO_FN_MMCD0_6_PU, NULL); |
525 | gpio_request(GPIO_FN_MMCD0_7, NULL); | 525 | gpio_request(GPIO_FN_MMCD0_7_PU, NULL); |
526 | gpio_request(GPIO_PORT208, NULL); /* Reset */ | 526 | gpio_request(GPIO_PORT208, NULL); /* Reset */ |
527 | gpio_direction_output(GPIO_PORT208, 1); | 527 | gpio_direction_output(GPIO_PORT208, 1); |
528 | 528 | ||
diff --git a/arch/arm/mach-shmobile/board-ap4evb.c b/arch/arm/mach-shmobile/board-ap4evb.c index a3aa0f6df964..4c865ece9ac4 100644 --- a/arch/arm/mach-shmobile/board-ap4evb.c +++ b/arch/arm/mach-shmobile/board-ap4evb.c | |||
@@ -201,7 +201,7 @@ static struct physmap_flash_data nor_flash_data = { | |||
201 | static struct resource nor_flash_resources[] = { | 201 | static struct resource nor_flash_resources[] = { |
202 | [0] = { | 202 | [0] = { |
203 | .start = 0x20000000, /* CS0 shadow instead of regular CS0 */ | 203 | .start = 0x20000000, /* CS0 shadow instead of regular CS0 */ |
204 | .end = 0x28000000 - 1, /* needed by USB MASK ROM boot */ | 204 | .end = 0x28000000 - 1, /* needed by USB MASK ROM boot */ |
205 | .flags = IORESOURCE_MEM, | 205 | .flags = IORESOURCE_MEM, |
206 | } | 206 | } |
207 | }; | 207 | }; |
diff --git a/arch/arm/mach-shmobile/board-kota2.c b/arch/arm/mach-shmobile/board-kota2.c index adc73122bf20..bd9a78424d6b 100644 --- a/arch/arm/mach-shmobile/board-kota2.c +++ b/arch/arm/mach-shmobile/board-kota2.c | |||
@@ -48,6 +48,7 @@ | |||
48 | #include <asm/hardware/cache-l2x0.h> | 48 | #include <asm/hardware/cache-l2x0.h> |
49 | #include <asm/traps.h> | 49 | #include <asm/traps.h> |
50 | 50 | ||
51 | /* SMSC 9220 */ | ||
51 | static struct resource smsc9220_resources[] = { | 52 | static struct resource smsc9220_resources[] = { |
52 | [0] = { | 53 | [0] = { |
53 | .start = 0x14000000, /* CS5A */ | 54 | .start = 0x14000000, /* CS5A */ |
@@ -77,6 +78,7 @@ static struct platform_device eth_device = { | |||
77 | .num_resources = ARRAY_SIZE(smsc9220_resources), | 78 | .num_resources = ARRAY_SIZE(smsc9220_resources), |
78 | }; | 79 | }; |
79 | 80 | ||
81 | /* KEYSC */ | ||
80 | static struct sh_keysc_info keysc_platdata = { | 82 | static struct sh_keysc_info keysc_platdata = { |
81 | .mode = SH_KEYSC_MODE_6, | 83 | .mode = SH_KEYSC_MODE_6, |
82 | .scan_timing = 3, | 84 | .scan_timing = 3, |
@@ -120,6 +122,7 @@ static struct platform_device keysc_device = { | |||
120 | }, | 122 | }, |
121 | }; | 123 | }; |
122 | 124 | ||
125 | /* GPIO KEY */ | ||
123 | #define GPIO_KEY(c, g, d) { .code = c, .gpio = g, .desc = d, .active_low = 1 } | 126 | #define GPIO_KEY(c, g, d) { .code = c, .gpio = g, .desc = d, .active_low = 1 } |
124 | 127 | ||
125 | static struct gpio_keys_button gpio_buttons[] = { | 128 | static struct gpio_keys_button gpio_buttons[] = { |
@@ -150,6 +153,7 @@ static struct platform_device gpio_keys_device = { | |||
150 | }, | 153 | }, |
151 | }; | 154 | }; |
152 | 155 | ||
156 | /* GPIO LED */ | ||
153 | #define GPIO_LED(n, g) { .name = n, .gpio = g } | 157 | #define GPIO_LED(n, g) { .name = n, .gpio = g } |
154 | 158 | ||
155 | static struct gpio_led gpio_leds[] = { | 159 | static struct gpio_led gpio_leds[] = { |
@@ -175,6 +179,7 @@ static struct platform_device gpio_leds_device = { | |||
175 | }, | 179 | }, |
176 | }; | 180 | }; |
177 | 181 | ||
182 | /* MMCIF */ | ||
178 | static struct resource mmcif_resources[] = { | 183 | static struct resource mmcif_resources[] = { |
179 | [0] = { | 184 | [0] = { |
180 | .name = "MMCIF", | 185 | .name = "MMCIF", |
@@ -207,6 +212,7 @@ static struct platform_device mmcif_device = { | |||
207 | .resource = mmcif_resources, | 212 | .resource = mmcif_resources, |
208 | }; | 213 | }; |
209 | 214 | ||
215 | /* SDHI0 */ | ||
210 | static struct sh_mobile_sdhi_info sdhi0_info = { | 216 | static struct sh_mobile_sdhi_info sdhi0_info = { |
211 | .tmio_caps = MMC_CAP_SD_HIGHSPEED, | 217 | .tmio_caps = MMC_CAP_SD_HIGHSPEED, |
212 | .tmio_flags = TMIO_MMC_WRPROTECT_DISABLE | TMIO_MMC_HAS_IDLE_WAIT, | 218 | .tmio_flags = TMIO_MMC_WRPROTECT_DISABLE | TMIO_MMC_HAS_IDLE_WAIT, |
@@ -243,6 +249,7 @@ static struct platform_device sdhi0_device = { | |||
243 | }, | 249 | }, |
244 | }; | 250 | }; |
245 | 251 | ||
252 | /* SDHI1 */ | ||
246 | static struct sh_mobile_sdhi_info sdhi1_info = { | 253 | static struct sh_mobile_sdhi_info sdhi1_info = { |
247 | .tmio_caps = MMC_CAP_NONREMOVABLE | MMC_CAP_SDIO_IRQ, | 254 | .tmio_caps = MMC_CAP_NONREMOVABLE | MMC_CAP_SDIO_IRQ, |
248 | .tmio_flags = TMIO_MMC_WRPROTECT_DISABLE | TMIO_MMC_HAS_IDLE_WAIT, | 255 | .tmio_flags = TMIO_MMC_WRPROTECT_DISABLE | TMIO_MMC_HAS_IDLE_WAIT, |
diff --git a/arch/arm/mach-shmobile/clock-sh7372.c b/arch/arm/mach-shmobile/clock-sh7372.c index 66975921e646..995a9c3aec8f 100644 --- a/arch/arm/mach-shmobile/clock-sh7372.c +++ b/arch/arm/mach-shmobile/clock-sh7372.c | |||
@@ -476,7 +476,7 @@ static struct clk_ops fsidiv_clk_ops = { | |||
476 | .disable = fsidiv_disable, | 476 | .disable = fsidiv_disable, |
477 | }; | 477 | }; |
478 | 478 | ||
479 | static struct clk_mapping sh7372_fsidiva_clk_mapping = { | 479 | static struct clk_mapping fsidiva_clk_mapping = { |
480 | .phys = FSIDIVA, | 480 | .phys = FSIDIVA, |
481 | .len = 8, | 481 | .len = 8, |
482 | }; | 482 | }; |
@@ -484,10 +484,10 @@ static struct clk_mapping sh7372_fsidiva_clk_mapping = { | |||
484 | struct clk sh7372_fsidiva_clk = { | 484 | struct clk sh7372_fsidiva_clk = { |
485 | .ops = &fsidiv_clk_ops, | 485 | .ops = &fsidiv_clk_ops, |
486 | .parent = &div6_reparent_clks[DIV6_FSIA], /* late install */ | 486 | .parent = &div6_reparent_clks[DIV6_FSIA], /* late install */ |
487 | .mapping = &sh7372_fsidiva_clk_mapping, | 487 | .mapping = &fsidiva_clk_mapping, |
488 | }; | 488 | }; |
489 | 489 | ||
490 | static struct clk_mapping sh7372_fsidivb_clk_mapping = { | 490 | static struct clk_mapping fsidivb_clk_mapping = { |
491 | .phys = FSIDIVB, | 491 | .phys = FSIDIVB, |
492 | .len = 8, | 492 | .len = 8, |
493 | }; | 493 | }; |
@@ -495,7 +495,7 @@ static struct clk_mapping sh7372_fsidivb_clk_mapping = { | |||
495 | struct clk sh7372_fsidivb_clk = { | 495 | struct clk sh7372_fsidivb_clk = { |
496 | .ops = &fsidiv_clk_ops, | 496 | .ops = &fsidiv_clk_ops, |
497 | .parent = &div6_reparent_clks[DIV6_FSIB], /* late install */ | 497 | .parent = &div6_reparent_clks[DIV6_FSIB], /* late install */ |
498 | .mapping = &sh7372_fsidivb_clk_mapping, | 498 | .mapping = &fsidivb_clk_mapping, |
499 | }; | 499 | }; |
500 | 500 | ||
501 | static struct clk *late_main_clks[] = { | 501 | static struct clk *late_main_clks[] = { |
diff --git a/arch/arm/mach-shmobile/cpuidle.c b/arch/arm/mach-shmobile/cpuidle.c index 2e44f11f592e..1b2334277e85 100644 --- a/arch/arm/mach-shmobile/cpuidle.c +++ b/arch/arm/mach-shmobile/cpuidle.c | |||
@@ -26,65 +26,59 @@ void (*shmobile_cpuidle_modes[CPUIDLE_STATE_MAX])(void) = { | |||
26 | }; | 26 | }; |
27 | 27 | ||
28 | static int shmobile_cpuidle_enter(struct cpuidle_device *dev, | 28 | static int shmobile_cpuidle_enter(struct cpuidle_device *dev, |
29 | struct cpuidle_state *state) | 29 | struct cpuidle_driver *drv, |
30 | int index) | ||
30 | { | 31 | { |
31 | ktime_t before, after; | 32 | ktime_t before, after; |
32 | int requested_state = state - &dev->states[0]; | ||
33 | 33 | ||
34 | dev->last_state = &dev->states[requested_state]; | ||
35 | before = ktime_get(); | 34 | before = ktime_get(); |
36 | 35 | ||
37 | local_irq_disable(); | 36 | local_irq_disable(); |
38 | local_fiq_disable(); | 37 | local_fiq_disable(); |
39 | 38 | ||
40 | shmobile_cpuidle_modes[requested_state](); | 39 | shmobile_cpuidle_modes[index](); |
41 | 40 | ||
42 | local_irq_enable(); | 41 | local_irq_enable(); |
43 | local_fiq_enable(); | 42 | local_fiq_enable(); |
44 | 43 | ||
45 | after = ktime_get(); | 44 | after = ktime_get(); |
46 | return ktime_to_ns(ktime_sub(after, before)) >> 10; | 45 | dev->last_residency = ktime_to_ns(ktime_sub(after, before)) >> 10; |
46 | |||
47 | return index; | ||
47 | } | 48 | } |
48 | 49 | ||
49 | static struct cpuidle_device shmobile_cpuidle_dev; | 50 | static struct cpuidle_device shmobile_cpuidle_dev; |
50 | static struct cpuidle_driver shmobile_cpuidle_driver = { | 51 | static struct cpuidle_driver shmobile_cpuidle_driver = { |
51 | .name = "shmobile_cpuidle", | 52 | .name = "shmobile_cpuidle", |
52 | .owner = THIS_MODULE, | 53 | .owner = THIS_MODULE, |
54 | .states[0] = { | ||
55 | .name = "C1", | ||
56 | .desc = "WFI", | ||
57 | .exit_latency = 1, | ||
58 | .target_residency = 1 * 2, | ||
59 | .flags = CPUIDLE_FLAG_TIME_VALID, | ||
60 | }, | ||
61 | .safe_state_index = 0, /* C1 */ | ||
62 | .state_count = 1, | ||
53 | }; | 63 | }; |
54 | 64 | ||
55 | void (*shmobile_cpuidle_setup)(struct cpuidle_device *dev); | 65 | void (*shmobile_cpuidle_setup)(struct cpuidle_driver *drv); |
56 | 66 | ||
57 | static int shmobile_cpuidle_init(void) | 67 | static int shmobile_cpuidle_init(void) |
58 | { | 68 | { |
59 | struct cpuidle_device *dev = &shmobile_cpuidle_dev; | 69 | struct cpuidle_device *dev = &shmobile_cpuidle_dev; |
60 | struct cpuidle_state *state; | 70 | struct cpuidle_driver *drv = &shmobile_cpuidle_driver; |
61 | int i; | 71 | int i; |
62 | 72 | ||
63 | cpuidle_register_driver(&shmobile_cpuidle_driver); | 73 | for (i = 0; i < CPUIDLE_STATE_MAX; i++) |
64 | 74 | drv->states[i].enter = shmobile_cpuidle_enter; | |
65 | for (i = 0; i < CPUIDLE_STATE_MAX; i++) { | ||
66 | dev->states[i].name[0] = '\0'; | ||
67 | dev->states[i].desc[0] = '\0'; | ||
68 | dev->states[i].enter = shmobile_cpuidle_enter; | ||
69 | } | ||
70 | |||
71 | i = CPUIDLE_DRIVER_STATE_START; | ||
72 | |||
73 | state = &dev->states[i++]; | ||
74 | snprintf(state->name, CPUIDLE_NAME_LEN, "C1"); | ||
75 | strncpy(state->desc, "WFI", CPUIDLE_DESC_LEN); | ||
76 | state->exit_latency = 1; | ||
77 | state->target_residency = 1 * 2; | ||
78 | state->power_usage = 3; | ||
79 | state->flags = 0; | ||
80 | state->flags |= CPUIDLE_FLAG_TIME_VALID; | ||
81 | |||
82 | dev->safe_state = state; | ||
83 | dev->state_count = i; | ||
84 | 75 | ||
85 | if (shmobile_cpuidle_setup) | 76 | if (shmobile_cpuidle_setup) |
86 | shmobile_cpuidle_setup(dev); | 77 | shmobile_cpuidle_setup(drv); |
78 | |||
79 | cpuidle_register_driver(drv); | ||
87 | 80 | ||
81 | dev->state_count = drv->state_count; | ||
88 | cpuidle_register_device(dev); | 82 | cpuidle_register_device(dev); |
89 | 83 | ||
90 | return 0; | 84 | return 0; |
diff --git a/arch/arm/mach-shmobile/include/mach/common.h b/arch/arm/mach-shmobile/include/mach/common.h index c0cdbf997c91..834bd6cd508f 100644 --- a/arch/arm/mach-shmobile/include/mach/common.h +++ b/arch/arm/mach-shmobile/include/mach/common.h | |||
@@ -9,9 +9,9 @@ extern int clk_init(void); | |||
9 | extern void shmobile_handle_irq_intc(struct pt_regs *); | 9 | extern void shmobile_handle_irq_intc(struct pt_regs *); |
10 | extern void shmobile_handle_irq_gic(struct pt_regs *); | 10 | extern void shmobile_handle_irq_gic(struct pt_regs *); |
11 | extern struct platform_suspend_ops shmobile_suspend_ops; | 11 | extern struct platform_suspend_ops shmobile_suspend_ops; |
12 | struct cpuidle_device; | 12 | struct cpuidle_driver; |
13 | extern void (*shmobile_cpuidle_modes[])(void); | 13 | extern void (*shmobile_cpuidle_modes[])(void); |
14 | extern void (*shmobile_cpuidle_setup)(struct cpuidle_device *dev); | 14 | extern void (*shmobile_cpuidle_setup)(struct cpuidle_driver *drv); |
15 | 15 | ||
16 | extern void sh7367_init_irq(void); | 16 | extern void sh7367_init_irq(void); |
17 | extern void sh7367_add_early_devices(void); | 17 | extern void sh7367_add_early_devices(void); |
diff --git a/arch/arm/mach-shmobile/include/mach/sh73a0.h b/arch/arm/mach-shmobile/include/mach/sh73a0.h index 18ae6a990bc2..881d515a9686 100644 --- a/arch/arm/mach-shmobile/include/mach/sh73a0.h +++ b/arch/arm/mach-shmobile/include/mach/sh73a0.h | |||
@@ -470,6 +470,14 @@ enum { | |||
470 | GPIO_FN_SDHICMD2_PU, | 470 | GPIO_FN_SDHICMD2_PU, |
471 | GPIO_FN_MMCCMD0_PU, | 471 | GPIO_FN_MMCCMD0_PU, |
472 | GPIO_FN_MMCCMD1_PU, | 472 | GPIO_FN_MMCCMD1_PU, |
473 | GPIO_FN_MMCD0_0_PU, | ||
474 | GPIO_FN_MMCD0_1_PU, | ||
475 | GPIO_FN_MMCD0_2_PU, | ||
476 | GPIO_FN_MMCD0_3_PU, | ||
477 | GPIO_FN_MMCD0_4_PU, | ||
478 | GPIO_FN_MMCD0_5_PU, | ||
479 | GPIO_FN_MMCD0_6_PU, | ||
480 | GPIO_FN_MMCD0_7_PU, | ||
473 | GPIO_FN_FSIACK_PU, | 481 | GPIO_FN_FSIACK_PU, |
474 | GPIO_FN_FSIAILR_PU, | 482 | GPIO_FN_FSIAILR_PU, |
475 | GPIO_FN_FSIAIBT_PU, | 483 | GPIO_FN_FSIAIBT_PU, |
diff --git a/arch/arm/mach-shmobile/pfc-sh7367.c b/arch/arm/mach-shmobile/pfc-sh7367.c index 128555e76e43..e6e524654e67 100644 --- a/arch/arm/mach-shmobile/pfc-sh7367.c +++ b/arch/arm/mach-shmobile/pfc-sh7367.c | |||
@@ -21,68 +21,49 @@ | |||
21 | #include <linux/gpio.h> | 21 | #include <linux/gpio.h> |
22 | #include <mach/sh7367.h> | 22 | #include <mach/sh7367.h> |
23 | 23 | ||
24 | #define _1(fn, pfx, sfx) fn(pfx, sfx) | 24 | #define CPU_ALL_PORT(fn, pfx, sfx) \ |
25 | 25 | PORT_10(fn, pfx, sfx), PORT_90(fn, pfx, sfx), \ | |
26 | #define _10(fn, pfx, sfx) \ | 26 | PORT_10(fn, pfx##10, sfx), PORT_90(fn, pfx##1, sfx), \ |
27 | _1(fn, pfx##0, sfx), _1(fn, pfx##1, sfx), \ | 27 | PORT_10(fn, pfx##20, sfx), PORT_10(fn, pfx##21, sfx), \ |
28 | _1(fn, pfx##2, sfx), _1(fn, pfx##3, sfx), \ | 28 | PORT_10(fn, pfx##22, sfx), PORT_10(fn, pfx##23, sfx), \ |
29 | _1(fn, pfx##4, sfx), _1(fn, pfx##5, sfx), \ | 29 | PORT_10(fn, pfx##24, sfx), PORT_10(fn, pfx##25, sfx), \ |
30 | _1(fn, pfx##6, sfx), _1(fn, pfx##7, sfx), \ | 30 | PORT_10(fn, pfx##26, sfx), PORT_1(fn, pfx##270, sfx), \ |
31 | _1(fn, pfx##8, sfx), _1(fn, pfx##9, sfx) | 31 | PORT_1(fn, pfx##271, sfx), PORT_1(fn, pfx##272, sfx) |
32 | |||
33 | #define _90(fn, pfx, sfx) \ | ||
34 | _10(fn, pfx##1, sfx), _10(fn, pfx##2, sfx), \ | ||
35 | _10(fn, pfx##3, sfx), _10(fn, pfx##4, sfx), \ | ||
36 | _10(fn, pfx##5, sfx), _10(fn, pfx##6, sfx), \ | ||
37 | _10(fn, pfx##7, sfx), _10(fn, pfx##8, sfx), \ | ||
38 | _10(fn, pfx##9, sfx) | ||
39 | |||
40 | #define _273(fn, pfx, sfx) \ | ||
41 | _10(fn, pfx, sfx), _90(fn, pfx, sfx), \ | ||
42 | _10(fn, pfx##10, sfx), _90(fn, pfx##1, sfx), \ | ||
43 | _10(fn, pfx##20, sfx), _10(fn, pfx##21, sfx), \ | ||
44 | _10(fn, pfx##22, sfx), _10(fn, pfx##23, sfx), \ | ||
45 | _10(fn, pfx##24, sfx), _10(fn, pfx##25, sfx), \ | ||
46 | _10(fn, pfx##26, sfx), _1(fn, pfx##270, sfx), \ | ||
47 | _1(fn, pfx##271, sfx), _1(fn, pfx##272, sfx) | ||
48 | |||
49 | #define _PORT(pfx, sfx) pfx##_##sfx | ||
50 | #define PORT_273(str) _273(_PORT, PORT, str) | ||
51 | 32 | ||
52 | enum { | 33 | enum { |
53 | PINMUX_RESERVED = 0, | 34 | PINMUX_RESERVED = 0, |
54 | 35 | ||
55 | PINMUX_DATA_BEGIN, | 36 | PINMUX_DATA_BEGIN, |
56 | PORT_273(DATA), /* PORT0_DATA -> PORT272_DATA */ | 37 | PORT_ALL(DATA), /* PORT0_DATA -> PORT272_DATA */ |
57 | PINMUX_DATA_END, | 38 | PINMUX_DATA_END, |
58 | 39 | ||
59 | PINMUX_INPUT_BEGIN, | 40 | PINMUX_INPUT_BEGIN, |
60 | PORT_273(IN), /* PORT0_IN -> PORT272_IN */ | 41 | PORT_ALL(IN), /* PORT0_IN -> PORT272_IN */ |
61 | PINMUX_INPUT_END, | 42 | PINMUX_INPUT_END, |
62 | 43 | ||
63 | PINMUX_INPUT_PULLUP_BEGIN, | 44 | PINMUX_INPUT_PULLUP_BEGIN, |
64 | PORT_273(IN_PU), /* PORT0_IN_PU -> PORT272_IN_PU */ | 45 | PORT_ALL(IN_PU), /* PORT0_IN_PU -> PORT272_IN_PU */ |
65 | PINMUX_INPUT_PULLUP_END, | 46 | PINMUX_INPUT_PULLUP_END, |
66 | 47 | ||
67 | PINMUX_INPUT_PULLDOWN_BEGIN, | 48 | PINMUX_INPUT_PULLDOWN_BEGIN, |
68 | PORT_273(IN_PD), /* PORT0_IN_PD -> PORT272_IN_PD */ | 49 | PORT_ALL(IN_PD), /* PORT0_IN_PD -> PORT272_IN_PD */ |
69 | PINMUX_INPUT_PULLDOWN_END, | 50 | PINMUX_INPUT_PULLDOWN_END, |
70 | 51 | ||
71 | PINMUX_OUTPUT_BEGIN, | 52 | PINMUX_OUTPUT_BEGIN, |
72 | PORT_273(OUT), /* PORT0_OUT -> PORT272_OUT */ | 53 | PORT_ALL(OUT), /* PORT0_OUT -> PORT272_OUT */ |
73 | PINMUX_OUTPUT_END, | 54 | PINMUX_OUTPUT_END, |
74 | 55 | ||
75 | PINMUX_FUNCTION_BEGIN, | 56 | PINMUX_FUNCTION_BEGIN, |
76 | PORT_273(FN_IN), /* PORT0_FN_IN -> PORT272_FN_IN */ | 57 | PORT_ALL(FN_IN), /* PORT0_FN_IN -> PORT272_FN_IN */ |
77 | PORT_273(FN_OUT), /* PORT0_FN_OUT -> PORT272_FN_OUT */ | 58 | PORT_ALL(FN_OUT), /* PORT0_FN_OUT -> PORT272_FN_OUT */ |
78 | PORT_273(FN0), /* PORT0_FN0 -> PORT272_FN0 */ | 59 | PORT_ALL(FN0), /* PORT0_FN0 -> PORT272_FN0 */ |
79 | PORT_273(FN1), /* PORT0_FN1 -> PORT272_FN1 */ | 60 | PORT_ALL(FN1), /* PORT0_FN1 -> PORT272_FN1 */ |
80 | PORT_273(FN2), /* PORT0_FN2 -> PORT272_FN2 */ | 61 | PORT_ALL(FN2), /* PORT0_FN2 -> PORT272_FN2 */ |
81 | PORT_273(FN3), /* PORT0_FN3 -> PORT272_FN3 */ | 62 | PORT_ALL(FN3), /* PORT0_FN3 -> PORT272_FN3 */ |
82 | PORT_273(FN4), /* PORT0_FN4 -> PORT272_FN4 */ | 63 | PORT_ALL(FN4), /* PORT0_FN4 -> PORT272_FN4 */ |
83 | PORT_273(FN5), /* PORT0_FN5 -> PORT272_FN5 */ | 64 | PORT_ALL(FN5), /* PORT0_FN5 -> PORT272_FN5 */ |
84 | PORT_273(FN6), /* PORT0_FN6 -> PORT272_FN6 */ | 65 | PORT_ALL(FN6), /* PORT0_FN6 -> PORT272_FN6 */ |
85 | PORT_273(FN7), /* PORT0_FN7 -> PORT272_FN7 */ | 66 | PORT_ALL(FN7), /* PORT0_FN7 -> PORT272_FN7 */ |
86 | 67 | ||
87 | MSELBCR_MSEL2_1, MSELBCR_MSEL2_0, | 68 | MSELBCR_MSEL2_1, MSELBCR_MSEL2_0, |
88 | PINMUX_FUNCTION_END, | 69 | PINMUX_FUNCTION_END, |
@@ -327,41 +308,6 @@ enum { | |||
327 | PINMUX_MARK_END, | 308 | PINMUX_MARK_END, |
328 | }; | 309 | }; |
329 | 310 | ||
330 | #define PORT_DATA_I(nr) \ | ||
331 | PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, PORT##nr##_IN) | ||
332 | |||
333 | #define PORT_DATA_I_PD(nr) \ | ||
334 | PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, \ | ||
335 | PORT##nr##_IN, PORT##nr##_IN_PD) | ||
336 | |||
337 | #define PORT_DATA_I_PU(nr) \ | ||
338 | PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, \ | ||
339 | PORT##nr##_IN, PORT##nr##_IN_PU) | ||
340 | |||
341 | #define PORT_DATA_I_PU_PD(nr) \ | ||
342 | PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, \ | ||
343 | PORT##nr##_IN, PORT##nr##_IN_PD, PORT##nr##_IN_PU) | ||
344 | |||
345 | #define PORT_DATA_O(nr) \ | ||
346 | PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, PORT##nr##_OUT) | ||
347 | |||
348 | #define PORT_DATA_IO(nr) \ | ||
349 | PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, PORT##nr##_OUT, \ | ||
350 | PORT##nr##_IN) | ||
351 | |||
352 | #define PORT_DATA_IO_PD(nr) \ | ||
353 | PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, PORT##nr##_OUT, \ | ||
354 | PORT##nr##_IN, PORT##nr##_IN_PD) | ||
355 | |||
356 | #define PORT_DATA_IO_PU(nr) \ | ||
357 | PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, PORT##nr##_OUT, \ | ||
358 | PORT##nr##_IN, PORT##nr##_IN_PU) | ||
359 | |||
360 | #define PORT_DATA_IO_PU_PD(nr) \ | ||
361 | PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, PORT##nr##_OUT, \ | ||
362 | PORT##nr##_IN, PORT##nr##_IN_PD, PORT##nr##_IN_PU) | ||
363 | |||
364 | |||
365 | static pinmux_enum_t pinmux_data[] = { | 311 | static pinmux_enum_t pinmux_data[] = { |
366 | 312 | ||
367 | /* specify valid pin states for each pin in GPIO mode */ | 313 | /* specify valid pin states for each pin in GPIO mode */ |
@@ -1098,13 +1044,9 @@ static pinmux_enum_t pinmux_data[] = { | |||
1098 | PINMUX_DATA(DIVLOCK_MARK, PORT272_FN1), | 1044 | PINMUX_DATA(DIVLOCK_MARK, PORT272_FN1), |
1099 | }; | 1045 | }; |
1100 | 1046 | ||
1101 | #define _GPIO_PORT(pfx, sfx) PINMUX_GPIO(GPIO_PORT##pfx, PORT##pfx##_DATA) | ||
1102 | #define GPIO_PORT_273() _273(_GPIO_PORT, , unused) | ||
1103 | #define GPIO_FN(str) PINMUX_GPIO(GPIO_FN_##str, str##_MARK) | ||
1104 | |||
1105 | static struct pinmux_gpio pinmux_gpios[] = { | 1047 | static struct pinmux_gpio pinmux_gpios[] = { |
1106 | /* 49-1 -> 49-6 (GPIO) */ | 1048 | /* 49-1 -> 49-6 (GPIO) */ |
1107 | GPIO_PORT_273(), | 1049 | GPIO_PORT_ALL(), |
1108 | 1050 | ||
1109 | /* Special Pull-up / Pull-down Functions */ | 1051 | /* Special Pull-up / Pull-down Functions */ |
1110 | GPIO_FN(PORT48_KEYIN0_PU), GPIO_FN(PORT49_KEYIN1_PU), | 1052 | GPIO_FN(PORT48_KEYIN0_PU), GPIO_FN(PORT49_KEYIN1_PU), |
@@ -1345,22 +1287,6 @@ static struct pinmux_gpio pinmux_gpios[] = { | |||
1345 | GPIO_FN(DIVLOCK), | 1287 | GPIO_FN(DIVLOCK), |
1346 | }; | 1288 | }; |
1347 | 1289 | ||
1348 | /* helper for top 4 bits in PORTnCR */ | ||
1349 | #define PCRH(in, in_pd, in_pu, out) \ | ||
1350 | 0, (out), (in), 0, \ | ||
1351 | 0, 0, 0, 0, \ | ||
1352 | 0, 0, (in_pd), 0, \ | ||
1353 | 0, 0, (in_pu), 0 | ||
1354 | |||
1355 | #define PORTCR(nr, reg) \ | ||
1356 | { PINMUX_CFG_REG("PORT" nr "CR", reg, 8, 4) { \ | ||
1357 | PCRH(PORT##nr##_IN, PORT##nr##_IN_PD, \ | ||
1358 | PORT##nr##_IN_PU, PORT##nr##_OUT), \ | ||
1359 | PORT##nr##_FN0, PORT##nr##_FN1, PORT##nr##_FN2, \ | ||
1360 | PORT##nr##_FN3, PORT##nr##_FN4, PORT##nr##_FN5, \ | ||
1361 | PORT##nr##_FN6, PORT##nr##_FN7 } \ | ||
1362 | } | ||
1363 | |||
1364 | static struct pinmux_cfg_reg pinmux_config_regs[] = { | 1290 | static struct pinmux_cfg_reg pinmux_config_regs[] = { |
1365 | PORTCR(0, 0xe6050000), /* PORT0CR */ | 1291 | PORTCR(0, 0xe6050000), /* PORT0CR */ |
1366 | PORTCR(1, 0xe6050001), /* PORT1CR */ | 1292 | PORTCR(1, 0xe6050001), /* PORT1CR */ |
diff --git a/arch/arm/mach-shmobile/pfc-sh7372.c b/arch/arm/mach-shmobile/pfc-sh7372.c index 9c265dae138a..1bd6585a6acf 100644 --- a/arch/arm/mach-shmobile/pfc-sh7372.c +++ b/arch/arm/mach-shmobile/pfc-sh7372.c | |||
@@ -25,27 +25,13 @@ | |||
25 | #include <linux/gpio.h> | 25 | #include <linux/gpio.h> |
26 | #include <mach/sh7372.h> | 26 | #include <mach/sh7372.h> |
27 | 27 | ||
28 | #define _1(fn, pfx, sfx) fn(pfx, sfx) | 28 | #define CPU_ALL_PORT(fn, pfx, sfx) \ |
29 | 29 | PORT_10(fn, pfx, sfx), PORT_90(fn, pfx, sfx), \ | |
30 | #define _10(fn, pfx, sfx) \ | 30 | PORT_10(fn, pfx##10, sfx), PORT_10(fn, pfx##11, sfx), \ |
31 | _1(fn, pfx##0, sfx), _1(fn, pfx##1, sfx), \ | 31 | PORT_10(fn, pfx##12, sfx), PORT_10(fn, pfx##13, sfx), \ |
32 | _1(fn, pfx##2, sfx), _1(fn, pfx##3, sfx), \ | 32 | PORT_10(fn, pfx##14, sfx), PORT_10(fn, pfx##15, sfx), \ |
33 | _1(fn, pfx##4, sfx), _1(fn, pfx##5, sfx), \ | 33 | PORT_10(fn, pfx##16, sfx), PORT_10(fn, pfx##17, sfx), \ |
34 | _1(fn, pfx##6, sfx), _1(fn, pfx##7, sfx), \ | 34 | PORT_10(fn, pfx##18, sfx), PORT_1(fn, pfx##190, sfx) |
35 | _1(fn, pfx##8, sfx), _1(fn, pfx##9, sfx) | ||
36 | |||
37 | #define _80(fn, pfx, sfx) \ | ||
38 | _10(fn, pfx##1, sfx), _10(fn, pfx##2, sfx), \ | ||
39 | _10(fn, pfx##3, sfx), _10(fn, pfx##4, sfx), \ | ||
40 | _10(fn, pfx##5, sfx), _10(fn, pfx##6, sfx), \ | ||
41 | _10(fn, pfx##7, sfx), _10(fn, pfx##8, sfx) | ||
42 | |||
43 | #define _190(fn, pfx, sfx) \ | ||
44 | _10(fn, pfx, sfx), _80(fn, pfx, sfx), _10(fn, pfx##9, sfx), \ | ||
45 | _10(fn, pfx##10, sfx), _80(fn, pfx##1, sfx), _1(fn, pfx##190, sfx) | ||
46 | |||
47 | #define _PORT(pfx, sfx) pfx##_##sfx | ||
48 | #define PORT_ALL(str) _190(_PORT, PORT, str) | ||
49 | 35 | ||
50 | enum { | 36 | enum { |
51 | PINMUX_RESERVED = 0, | 37 | PINMUX_RESERVED = 0, |
@@ -381,108 +367,124 @@ enum { | |||
381 | PINMUX_MARK_END, | 367 | PINMUX_MARK_END, |
382 | }; | 368 | }; |
383 | 369 | ||
384 | /* PORT_DATA_I_PD(nr) */ | ||
385 | #define _I___D(nr) \ | ||
386 | PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, \ | ||
387 | PORT##nr##_IN, PORT##nr##_IN_PD) | ||
388 | |||
389 | /* PORT_DATA_I_PU(nr) */ | ||
390 | #define _I__U_(nr) \ | ||
391 | PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, \ | ||
392 | PORT##nr##_IN, PORT##nr##_IN_PU) | ||
393 | |||
394 | /* PORT_DATA_I_PU_PD(nr) */ | ||
395 | #define _I__UD(nr) \ | ||
396 | PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, \ | ||
397 | PORT##nr##_IN, PORT##nr##_IN_PD, PORT##nr##_IN_PU) | ||
398 | |||
399 | /* PORT_DATA_O(nr) */ | ||
400 | #define __O___(nr) \ | ||
401 | PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, PORT##nr##_OUT) | ||
402 | |||
403 | /* PORT_DATA_IO(nr) */ | ||
404 | #define _IO___(nr) \ | ||
405 | PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, PORT##nr##_OUT, \ | ||
406 | PORT##nr##_IN) | ||
407 | |||
408 | /* PORT_DATA_IO_PD(nr) */ | ||
409 | #define _IO__D(nr) \ | ||
410 | PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, PORT##nr##_OUT, \ | ||
411 | PORT##nr##_IN, PORT##nr##_IN_PD) | ||
412 | |||
413 | /* PORT_DATA_IO_PU(nr) */ | ||
414 | #define _IO_U_(nr) \ | ||
415 | PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, PORT##nr##_OUT, \ | ||
416 | PORT##nr##_IN, PORT##nr##_IN_PU) | ||
417 | |||
418 | /* PORT_DATA_IO_PU_PD(nr) */ | ||
419 | #define _IO_UD(nr) \ | ||
420 | PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, PORT##nr##_OUT, \ | ||
421 | PORT##nr##_IN, PORT##nr##_IN_PD, PORT##nr##_IN_PU) | ||
422 | |||
423 | |||
424 | static pinmux_enum_t pinmux_data[] = { | 370 | static pinmux_enum_t pinmux_data[] = { |
425 | 371 | ||
426 | /* specify valid pin states for each pin in GPIO mode */ | 372 | /* specify valid pin states for each pin in GPIO mode */ |
427 | 373 | PORT_DATA_IO_PD(0), PORT_DATA_IO_PD(1), | |
428 | _IO__D(0), _IO__D(1), __O___(2), _I___D(3), _I___D(4), | 374 | PORT_DATA_O(2), PORT_DATA_I_PD(3), |
429 | _I___D(5), _IO_UD(6), _I___D(7), _IO__D(8), __O___(9), | 375 | PORT_DATA_I_PD(4), PORT_DATA_I_PD(5), |
430 | 376 | PORT_DATA_IO_PU_PD(6), PORT_DATA_I_PD(7), | |
431 | __O___(10), __O___(11), _IO_UD(12), _IO__D(13), _IO__D(14), | 377 | PORT_DATA_IO_PD(8), PORT_DATA_O(9), |
432 | __O___(15), _IO__D(16), _IO__D(17), _I___D(18), _IO___(19), | 378 | |
433 | 379 | PORT_DATA_O(10), PORT_DATA_O(11), | |
434 | _IO___(20), _IO___(21), _IO___(22), _IO___(23), _IO___(24), | 380 | PORT_DATA_IO_PU_PD(12), PORT_DATA_IO_PD(13), |
435 | _IO___(25), _IO___(26), _IO___(27), _IO___(28), _IO___(29), | 381 | PORT_DATA_IO_PD(14), PORT_DATA_O(15), |
436 | 382 | PORT_DATA_IO_PD(16), PORT_DATA_IO_PD(17), | |
437 | _IO___(30), _IO___(31), _IO___(32), _IO___(33), _IO___(34), | 383 | PORT_DATA_I_PD(18), PORT_DATA_IO(19), |
438 | _IO___(35), _IO___(36), _IO___(37), _IO___(38), _IO___(39), | 384 | |
439 | 385 | PORT_DATA_IO(20), PORT_DATA_IO(21), | |
440 | _IO___(40), _IO___(41), _IO___(42), _IO___(43), _IO___(44), | 386 | PORT_DATA_IO(22), PORT_DATA_IO(23), |
441 | _IO___(45), _IO_U_(46), _IO_U_(47), _IO_U_(48), _IO_U_(49), | 387 | PORT_DATA_IO(24), PORT_DATA_IO(25), |
442 | 388 | PORT_DATA_IO(26), PORT_DATA_IO(27), | |
443 | _IO_U_(50), _IO_U_(51), _IO_U_(52), _IO_U_(53), _IO_U_(54), | 389 | PORT_DATA_IO(28), PORT_DATA_IO(29), |
444 | _IO_U_(55), _IO_U_(56), _IO_U_(57), _IO_U_(58), _IO_U_(59), | 390 | |
445 | 391 | PORT_DATA_IO(30), PORT_DATA_IO(31), | |
446 | _IO_U_(60), _IO_U_(61), _IO___(62), __O___(63), __O___(64), | 392 | PORT_DATA_IO(32), PORT_DATA_IO(33), |
447 | _IO_U_(65), __O___(66), _IO_U_(67), __O___(68), _IO___(69), /*66?*/ | 393 | PORT_DATA_IO(34), PORT_DATA_IO(35), |
448 | 394 | PORT_DATA_IO(36), PORT_DATA_IO(37), | |
449 | _IO___(70), _IO___(71), __O___(72), _I__U_(73), _I__UD(74), | 395 | PORT_DATA_IO(38), PORT_DATA_IO(39), |
450 | _IO_UD(75), _IO_UD(76), _IO_UD(77), _IO_UD(78), _IO_UD(79), | 396 | |
451 | 397 | PORT_DATA_IO(40), PORT_DATA_IO(41), | |
452 | _IO_UD(80), _IO_UD(81), _IO_UD(82), _IO_UD(83), _IO_UD(84), | 398 | PORT_DATA_IO(42), PORT_DATA_IO(43), |
453 | _IO_UD(85), _IO_UD(86), _IO_UD(87), _IO_UD(88), _IO_UD(89), | 399 | PORT_DATA_IO(44), PORT_DATA_IO(45), |
454 | 400 | PORT_DATA_IO_PU(46), PORT_DATA_IO_PU(47), | |
455 | _IO_UD(90), _IO_UD(91), _IO_UD(92), _IO_UD(93), _IO_UD(94), | 401 | PORT_DATA_IO_PU(48), PORT_DATA_IO_PU(49), |
456 | _IO_UD(95), _IO_U_(96), _IO_UD(97), _IO_UD(98), __O___(99), /*99?*/ | 402 | |
457 | 403 | PORT_DATA_IO_PU(50), PORT_DATA_IO_PU(51), | |
458 | _IO__D(100), _IO__D(101), _IO__D(102), _IO__D(103), _IO__D(104), | 404 | PORT_DATA_IO_PU(52), PORT_DATA_IO_PU(53), |
459 | _IO__D(105), _IO_U_(106), _IO_U_(107), _IO_U_(108), _IO_U_(109), | 405 | PORT_DATA_IO_PU(54), PORT_DATA_IO_PU(55), |
460 | 406 | PORT_DATA_IO_PU(56), PORT_DATA_IO_PU(57), | |
461 | _IO_U_(110), _IO_U_(111), _IO__D(112), _IO__D(113), _IO_U_(114), | 407 | PORT_DATA_IO_PU(58), PORT_DATA_IO_PU(59), |
462 | _IO_U_(115), _IO_U_(116), _IO_U_(117), _IO_U_(118), _IO_U_(119), | 408 | |
463 | 409 | PORT_DATA_IO_PU(60), PORT_DATA_IO_PU(61), | |
464 | _IO_U_(120), _IO__D(121), _IO__D(122), _IO__D(123), _IO__D(124), | 410 | PORT_DATA_IO(62), PORT_DATA_O(63), |
465 | _IO__D(125), _IO__D(126), _IO__D(127), _IO__D(128), _IO_UD(129), | 411 | PORT_DATA_O(64), PORT_DATA_IO_PU(65), |
466 | 412 | PORT_DATA_O(66), PORT_DATA_IO_PU(67), /*66?*/ | |
467 | _IO_UD(130), _IO_UD(131), _IO_UD(132), _IO_UD(133), _IO_UD(134), | 413 | PORT_DATA_O(68), PORT_DATA_IO(69), |
468 | _IO_UD(135), _IO__D(136), _IO__D(137), _IO__D(138), _IO__D(139), | 414 | |
469 | 415 | PORT_DATA_IO(70), PORT_DATA_IO(71), | |
470 | _IO__D(140), _IO__D(141), _IO__D(142), _IO_UD(143), _IO__D(144), | 416 | PORT_DATA_O(72), PORT_DATA_I_PU(73), |
471 | _IO__D(145), _IO__D(146), _IO__D(147), _IO__D(148), _IO__D(149), | 417 | PORT_DATA_I_PU_PD(74), PORT_DATA_IO_PU_PD(75), |
472 | 418 | PORT_DATA_IO_PU_PD(76), PORT_DATA_IO_PU_PD(77), | |
473 | _IO__D(150), _IO__D(151), _IO_UD(152), _I___D(153), _IO_UD(154), | 419 | PORT_DATA_IO_PU_PD(78), PORT_DATA_IO_PU_PD(79), |
474 | _I___D(155), _IO__D(156), _IO__D(157), _I___D(158), _IO__D(159), | 420 | |
475 | 421 | PORT_DATA_IO_PU_PD(80), PORT_DATA_IO_PU_PD(81), | |
476 | __O___(160), _IO__D(161), _IO__D(162), _IO__D(163), _I___D(164), | 422 | PORT_DATA_IO_PU_PD(82), PORT_DATA_IO_PU_PD(83), |
477 | _IO__D(165), _I___D(166), _I___D(167), _I___D(168), _I___D(169), | 423 | PORT_DATA_IO_PU_PD(84), PORT_DATA_IO_PU_PD(85), |
478 | 424 | PORT_DATA_IO_PU_PD(86), PORT_DATA_IO_PU_PD(87), | |
479 | _I___D(170), __O___(171), _IO_UD(172), _IO_UD(173), _IO_UD(174), | 425 | PORT_DATA_IO_PU_PD(88), PORT_DATA_IO_PU_PD(89), |
480 | _IO_UD(175), _IO_UD(176), _IO_UD(177), _IO_UD(178), __O___(179), | 426 | |
481 | 427 | PORT_DATA_IO_PU_PD(90), PORT_DATA_IO_PU_PD(91), | |
482 | _IO_UD(180), _IO_UD(181), _IO_UD(182), _IO_UD(183), _IO_UD(184), | 428 | PORT_DATA_IO_PU_PD(92), PORT_DATA_IO_PU_PD(93), |
483 | __O___(185), _IO_UD(186), _IO_UD(187), _IO_UD(188), _IO_UD(189), | 429 | PORT_DATA_IO_PU_PD(94), PORT_DATA_IO_PU_PD(95), |
484 | 430 | PORT_DATA_IO_PU(96), PORT_DATA_IO_PU_PD(97), | |
485 | _IO_UD(190), | 431 | PORT_DATA_IO_PU_PD(98), PORT_DATA_O(99), /*99?*/ |
432 | |||
433 | PORT_DATA_IO_PD(100), PORT_DATA_IO_PD(101), | ||
434 | PORT_DATA_IO_PD(102), PORT_DATA_IO_PD(103), | ||
435 | PORT_DATA_IO_PD(104), PORT_DATA_IO_PD(105), | ||
436 | PORT_DATA_IO_PU(106), PORT_DATA_IO_PU(107), | ||
437 | PORT_DATA_IO_PU(108), PORT_DATA_IO_PU(109), | ||
438 | |||
439 | PORT_DATA_IO_PU(110), PORT_DATA_IO_PU(111), | ||
440 | PORT_DATA_IO_PD(112), PORT_DATA_IO_PD(113), | ||
441 | PORT_DATA_IO_PU(114), PORT_DATA_IO_PU(115), | ||
442 | PORT_DATA_IO_PU(116), PORT_DATA_IO_PU(117), | ||
443 | PORT_DATA_IO_PU(118), PORT_DATA_IO_PU(119), | ||
444 | |||
445 | PORT_DATA_IO_PU(120), PORT_DATA_IO_PD(121), | ||
446 | PORT_DATA_IO_PD(122), PORT_DATA_IO_PD(123), | ||
447 | PORT_DATA_IO_PD(124), PORT_DATA_IO_PD(125), | ||
448 | PORT_DATA_IO_PD(126), PORT_DATA_IO_PD(127), | ||
449 | PORT_DATA_IO_PD(128), PORT_DATA_IO_PU_PD(129), | ||
450 | |||
451 | PORT_DATA_IO_PU_PD(130), PORT_DATA_IO_PU_PD(131), | ||
452 | PORT_DATA_IO_PU_PD(132), PORT_DATA_IO_PU_PD(133), | ||
453 | PORT_DATA_IO_PU_PD(134), PORT_DATA_IO_PU_PD(135), | ||
454 | PORT_DATA_IO_PD(136), PORT_DATA_IO_PD(137), | ||
455 | PORT_DATA_IO_PD(138), PORT_DATA_IO_PD(139), | ||
456 | |||
457 | PORT_DATA_IO_PD(140), PORT_DATA_IO_PD(141), | ||
458 | PORT_DATA_IO_PD(142), PORT_DATA_IO_PU_PD(143), | ||
459 | PORT_DATA_IO_PD(144), PORT_DATA_IO_PD(145), | ||
460 | PORT_DATA_IO_PD(146), PORT_DATA_IO_PD(147), | ||
461 | PORT_DATA_IO_PD(148), PORT_DATA_IO_PD(149), | ||
462 | |||
463 | PORT_DATA_IO_PD(150), PORT_DATA_IO_PD(151), | ||
464 | PORT_DATA_IO_PU_PD(152), PORT_DATA_I_PD(153), | ||
465 | PORT_DATA_IO_PU_PD(154), PORT_DATA_I_PD(155), | ||
466 | PORT_DATA_IO_PD(156), PORT_DATA_IO_PD(157), | ||
467 | PORT_DATA_I_PD(158), PORT_DATA_IO_PD(159), | ||
468 | |||
469 | PORT_DATA_O(160), PORT_DATA_IO_PD(161), | ||
470 | PORT_DATA_IO_PD(162), PORT_DATA_IO_PD(163), | ||
471 | PORT_DATA_I_PD(164), PORT_DATA_IO_PD(165), | ||
472 | PORT_DATA_I_PD(166), PORT_DATA_I_PD(167), | ||
473 | PORT_DATA_I_PD(168), PORT_DATA_I_PD(169), | ||
474 | |||
475 | PORT_DATA_I_PD(170), PORT_DATA_O(171), | ||
476 | PORT_DATA_IO_PU_PD(172), PORT_DATA_IO_PU_PD(173), | ||
477 | PORT_DATA_IO_PU_PD(174), PORT_DATA_IO_PU_PD(175), | ||
478 | PORT_DATA_IO_PU_PD(176), PORT_DATA_IO_PU_PD(177), | ||
479 | PORT_DATA_IO_PU_PD(178), PORT_DATA_O(179), | ||
480 | |||
481 | PORT_DATA_IO_PU_PD(180), PORT_DATA_IO_PU_PD(181), | ||
482 | PORT_DATA_IO_PU_PD(182), PORT_DATA_IO_PU_PD(183), | ||
483 | PORT_DATA_IO_PU_PD(184), PORT_DATA_O(185), | ||
484 | PORT_DATA_IO_PU_PD(186), PORT_DATA_IO_PU_PD(187), | ||
485 | PORT_DATA_IO_PU_PD(188), PORT_DATA_IO_PU_PD(189), | ||
486 | |||
487 | PORT_DATA_IO_PU_PD(190), | ||
486 | 488 | ||
487 | /* IRQ */ | 489 | /* IRQ */ |
488 | PINMUX_DATA(IRQ0_6_MARK, PORT6_FN0, MSEL1CR_0_0), | 490 | PINMUX_DATA(IRQ0_6_MARK, PORT6_FN0, MSEL1CR_0_0), |
@@ -926,10 +928,6 @@ static pinmux_enum_t pinmux_data[] = { | |||
926 | PINMUX_DATA(MFIv4_MARK, MSEL4CR_6_1), | 928 | PINMUX_DATA(MFIv4_MARK, MSEL4CR_6_1), |
927 | }; | 929 | }; |
928 | 930 | ||
929 | #define _GPIO_PORT(pfx, sfx) PINMUX_GPIO(GPIO_PORT##pfx, PORT##pfx##_DATA) | ||
930 | #define GPIO_PORT_ALL() _190(_GPIO_PORT, , unused) | ||
931 | #define GPIO_FN(str) PINMUX_GPIO(GPIO_FN_##str, str##_MARK) | ||
932 | |||
933 | static struct pinmux_gpio pinmux_gpios[] = { | 931 | static struct pinmux_gpio pinmux_gpios[] = { |
934 | 932 | ||
935 | /* PORT */ | 933 | /* PORT */ |
@@ -1201,22 +1199,6 @@ static struct pinmux_gpio pinmux_gpios[] = { | |||
1201 | GPIO_FN(SDENC_DV_CLKI), | 1199 | GPIO_FN(SDENC_DV_CLKI), |
1202 | }; | 1200 | }; |
1203 | 1201 | ||
1204 | /* helper for top 4 bits in PORTnCR */ | ||
1205 | #define PCRH(in, in_pd, in_pu, out) \ | ||
1206 | 0, (out), (in), 0, \ | ||
1207 | 0, 0, 0, 0, \ | ||
1208 | 0, 0, (in_pd), 0, \ | ||
1209 | 0, 0, (in_pu), 0 | ||
1210 | |||
1211 | #define PORTCR(nr, reg) \ | ||
1212 | { PINMUX_CFG_REG("PORT" nr "CR", reg, 8, 4) { \ | ||
1213 | PCRH(PORT##nr##_IN, PORT##nr##_IN_PD, \ | ||
1214 | PORT##nr##_IN_PU, PORT##nr##_OUT), \ | ||
1215 | PORT##nr##_FN0, PORT##nr##_FN1, PORT##nr##_FN2, \ | ||
1216 | PORT##nr##_FN3, PORT##nr##_FN4, PORT##nr##_FN5, \ | ||
1217 | PORT##nr##_FN6, PORT##nr##_FN7 } \ | ||
1218 | } | ||
1219 | |||
1220 | static struct pinmux_cfg_reg pinmux_config_regs[] = { | 1202 | static struct pinmux_cfg_reg pinmux_config_regs[] = { |
1221 | PORTCR(0, 0xE6051000), /* PORT0CR */ | 1203 | PORTCR(0, 0xE6051000), /* PORT0CR */ |
1222 | PORTCR(1, 0xE6051001), /* PORT1CR */ | 1204 | PORTCR(1, 0xE6051001), /* PORT1CR */ |
diff --git a/arch/arm/mach-shmobile/pfc-sh7377.c b/arch/arm/mach-shmobile/pfc-sh7377.c index 613e6842ad05..2f10511946ad 100644 --- a/arch/arm/mach-shmobile/pfc-sh7377.c +++ b/arch/arm/mach-shmobile/pfc-sh7377.c | |||
@@ -22,84 +22,65 @@ | |||
22 | #include <linux/gpio.h> | 22 | #include <linux/gpio.h> |
23 | #include <mach/sh7377.h> | 23 | #include <mach/sh7377.h> |
24 | 24 | ||
25 | #define _1(fn, pfx, sfx) fn(pfx, sfx) | 25 | #define CPU_ALL_PORT(fn, pfx, sfx) \ |
26 | 26 | PORT_10(fn, pfx, sfx), PORT_90(fn, pfx, sfx), \ | |
27 | #define _10(fn, pfx, sfx) \ | 27 | PORT_10(fn, pfx##10, sfx), \ |
28 | _1(fn, pfx##0, sfx), _1(fn, pfx##1, sfx), \ | 28 | PORT_1(fn, pfx##110, sfx), PORT_1(fn, pfx##111, sfx), \ |
29 | _1(fn, pfx##2, sfx), _1(fn, pfx##3, sfx), \ | 29 | PORT_1(fn, pfx##112, sfx), PORT_1(fn, pfx##113, sfx), \ |
30 | _1(fn, pfx##4, sfx), _1(fn, pfx##5, sfx), \ | 30 | PORT_1(fn, pfx##114, sfx), PORT_1(fn, pfx##115, sfx), \ |
31 | _1(fn, pfx##6, sfx), _1(fn, pfx##7, sfx), \ | 31 | PORT_1(fn, pfx##116, sfx), PORT_1(fn, pfx##117, sfx), \ |
32 | _1(fn, pfx##8, sfx), _1(fn, pfx##9, sfx) | 32 | PORT_1(fn, pfx##118, sfx), \ |
33 | 33 | PORT_1(fn, pfx##128, sfx), PORT_1(fn, pfx##129, sfx), \ | |
34 | #define _90(fn, pfx, sfx) \ | 34 | PORT_10(fn, pfx##13, sfx), PORT_10(fn, pfx##14, sfx), \ |
35 | _10(fn, pfx##1, sfx), _10(fn, pfx##2, sfx), \ | 35 | PORT_10(fn, pfx##15, sfx), \ |
36 | _10(fn, pfx##3, sfx), _10(fn, pfx##4, sfx), \ | 36 | PORT_1(fn, pfx##160, sfx), PORT_1(fn, pfx##161, sfx), \ |
37 | _10(fn, pfx##5, sfx), _10(fn, pfx##6, sfx), \ | 37 | PORT_1(fn, pfx##162, sfx), PORT_1(fn, pfx##163, sfx), \ |
38 | _10(fn, pfx##7, sfx), _10(fn, pfx##8, sfx), \ | 38 | PORT_1(fn, pfx##164, sfx), \ |
39 | _10(fn, pfx##9, sfx) | 39 | PORT_1(fn, pfx##192, sfx), PORT_1(fn, pfx##193, sfx), \ |
40 | 40 | PORT_1(fn, pfx##194, sfx), PORT_1(fn, pfx##195, sfx), \ | |
41 | #define _265(fn, pfx, sfx) \ | 41 | PORT_1(fn, pfx##196, sfx), PORT_1(fn, pfx##197, sfx), \ |
42 | _10(fn, pfx, sfx), _90(fn, pfx, sfx), \ | 42 | PORT_1(fn, pfx##198, sfx), PORT_1(fn, pfx##199, sfx), \ |
43 | _10(fn, pfx##10, sfx), \ | 43 | PORT_10(fn, pfx##20, sfx), PORT_10(fn, pfx##21, sfx), \ |
44 | _1(fn, pfx##110, sfx), _1(fn, pfx##111, sfx), \ | 44 | PORT_10(fn, pfx##22, sfx), PORT_10(fn, pfx##23, sfx), \ |
45 | _1(fn, pfx##112, sfx), _1(fn, pfx##113, sfx), \ | 45 | PORT_10(fn, pfx##24, sfx), PORT_10(fn, pfx##25, sfx), \ |
46 | _1(fn, pfx##114, sfx), _1(fn, pfx##115, sfx), \ | 46 | PORT_1(fn, pfx##260, sfx), PORT_1(fn, pfx##261, sfx), \ |
47 | _1(fn, pfx##116, sfx), _1(fn, pfx##117, sfx), \ | 47 | PORT_1(fn, pfx##262, sfx), PORT_1(fn, pfx##263, sfx), \ |
48 | _1(fn, pfx##118, sfx), \ | 48 | PORT_1(fn, pfx##264, sfx) |
49 | _1(fn, pfx##128, sfx), _1(fn, pfx##129, sfx), \ | ||
50 | _10(fn, pfx##13, sfx), _10(fn, pfx##14, sfx), \ | ||
51 | _10(fn, pfx##15, sfx), \ | ||
52 | _1(fn, pfx##160, sfx), _1(fn, pfx##161, sfx), \ | ||
53 | _1(fn, pfx##162, sfx), _1(fn, pfx##163, sfx), \ | ||
54 | _1(fn, pfx##164, sfx), \ | ||
55 | _1(fn, pfx##192, sfx), _1(fn, pfx##193, sfx), \ | ||
56 | _1(fn, pfx##194, sfx), _1(fn, pfx##195, sfx), \ | ||
57 | _1(fn, pfx##196, sfx), _1(fn, pfx##197, sfx), \ | ||
58 | _1(fn, pfx##198, sfx), _1(fn, pfx##199, sfx), \ | ||
59 | _10(fn, pfx##20, sfx), _10(fn, pfx##21, sfx), \ | ||
60 | _10(fn, pfx##22, sfx), _10(fn, pfx##23, sfx), \ | ||
61 | _10(fn, pfx##24, sfx), _10(fn, pfx##25, sfx), \ | ||
62 | _1(fn, pfx##260, sfx), _1(fn, pfx##261, sfx), \ | ||
63 | _1(fn, pfx##262, sfx), _1(fn, pfx##263, sfx), \ | ||
64 | _1(fn, pfx##264, sfx) | ||
65 | |||
66 | #define _PORT(pfx, sfx) pfx##_##sfx | ||
67 | #define PORT_265(str) _265(_PORT, PORT, str) | ||
68 | 49 | ||
69 | enum { | 50 | enum { |
70 | PINMUX_RESERVED = 0, | 51 | PINMUX_RESERVED = 0, |
71 | 52 | ||
72 | PINMUX_DATA_BEGIN, | 53 | PINMUX_DATA_BEGIN, |
73 | PORT_265(DATA), /* PORT0_DATA -> PORT264_DATA */ | 54 | PORT_ALL(DATA), /* PORT0_DATA -> PORT264_DATA */ |
74 | PINMUX_DATA_END, | 55 | PINMUX_DATA_END, |
75 | 56 | ||
76 | PINMUX_INPUT_BEGIN, | 57 | PINMUX_INPUT_BEGIN, |
77 | PORT_265(IN), /* PORT0_IN -> PORT264_IN */ | 58 | PORT_ALL(IN), /* PORT0_IN -> PORT264_IN */ |
78 | PINMUX_INPUT_END, | 59 | PINMUX_INPUT_END, |
79 | 60 | ||
80 | PINMUX_INPUT_PULLUP_BEGIN, | 61 | PINMUX_INPUT_PULLUP_BEGIN, |
81 | PORT_265(IN_PU), /* PORT0_IN_PU -> PORT264_IN_PU */ | 62 | PORT_ALL(IN_PU), /* PORT0_IN_PU -> PORT264_IN_PU */ |
82 | PINMUX_INPUT_PULLUP_END, | 63 | PINMUX_INPUT_PULLUP_END, |
83 | 64 | ||
84 | PINMUX_INPUT_PULLDOWN_BEGIN, | 65 | PINMUX_INPUT_PULLDOWN_BEGIN, |
85 | PORT_265(IN_PD), /* PORT0_IN_PD -> PORT264_IN_PD */ | 66 | PORT_ALL(IN_PD), /* PORT0_IN_PD -> PORT264_IN_PD */ |
86 | PINMUX_INPUT_PULLDOWN_END, | 67 | PINMUX_INPUT_PULLDOWN_END, |
87 | 68 | ||
88 | PINMUX_OUTPUT_BEGIN, | 69 | PINMUX_OUTPUT_BEGIN, |
89 | PORT_265(OUT), /* PORT0_OUT -> PORT264_OUT */ | 70 | PORT_ALL(OUT), /* PORT0_OUT -> PORT264_OUT */ |
90 | PINMUX_OUTPUT_END, | 71 | PINMUX_OUTPUT_END, |
91 | 72 | ||
92 | PINMUX_FUNCTION_BEGIN, | 73 | PINMUX_FUNCTION_BEGIN, |
93 | PORT_265(FN_IN), /* PORT0_FN_IN -> PORT264_FN_IN */ | 74 | PORT_ALL(FN_IN), /* PORT0_FN_IN -> PORT264_FN_IN */ |
94 | PORT_265(FN_OUT), /* PORT0_FN_OUT -> PORT264_FN_OUT */ | 75 | PORT_ALL(FN_OUT), /* PORT0_FN_OUT -> PORT264_FN_OUT */ |
95 | PORT_265(FN0), /* PORT0_FN0 -> PORT264_FN0 */ | 76 | PORT_ALL(FN0), /* PORT0_FN0 -> PORT264_FN0 */ |
96 | PORT_265(FN1), /* PORT0_FN1 -> PORT264_FN1 */ | 77 | PORT_ALL(FN1), /* PORT0_FN1 -> PORT264_FN1 */ |
97 | PORT_265(FN2), /* PORT0_FN2 -> PORT264_FN2 */ | 78 | PORT_ALL(FN2), /* PORT0_FN2 -> PORT264_FN2 */ |
98 | PORT_265(FN3), /* PORT0_FN3 -> PORT264_FN3 */ | 79 | PORT_ALL(FN3), /* PORT0_FN3 -> PORT264_FN3 */ |
99 | PORT_265(FN4), /* PORT0_FN4 -> PORT264_FN4 */ | 80 | PORT_ALL(FN4), /* PORT0_FN4 -> PORT264_FN4 */ |
100 | PORT_265(FN5), /* PORT0_FN5 -> PORT264_FN5 */ | 81 | PORT_ALL(FN5), /* PORT0_FN5 -> PORT264_FN5 */ |
101 | PORT_265(FN6), /* PORT0_FN6 -> PORT264_FN6 */ | 82 | PORT_ALL(FN6), /* PORT0_FN6 -> PORT264_FN6 */ |
102 | PORT_265(FN7), /* PORT0_FN7 -> PORT264_FN7 */ | 83 | PORT_ALL(FN7), /* PORT0_FN7 -> PORT264_FN7 */ |
103 | 84 | ||
104 | MSELBCR_MSEL17_1, MSELBCR_MSEL17_0, | 85 | MSELBCR_MSEL17_1, MSELBCR_MSEL17_0, |
105 | MSELBCR_MSEL16_1, MSELBCR_MSEL16_0, | 86 | MSELBCR_MSEL16_1, MSELBCR_MSEL16_0, |
@@ -360,45 +341,6 @@ enum { | |||
360 | PINMUX_MARK_END, | 341 | PINMUX_MARK_END, |
361 | }; | 342 | }; |
362 | 343 | ||
363 | #define PORT_DATA_I(nr) \ | ||
364 | PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, PORT##nr##_IN) | ||
365 | |||
366 | #define PORT_DATA_I_PD(nr) \ | ||
367 | PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, \ | ||
368 | PORT##nr##_IN, PORT##nr##_IN_PD) | ||
369 | |||
370 | #define PORT_DATA_I_PU(nr) \ | ||
371 | PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, \ | ||
372 | PORT##nr##_IN, PORT##nr##_IN_PU) | ||
373 | |||
374 | #define PORT_DATA_I_PU_PD(nr) \ | ||
375 | PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, \ | ||
376 | PORT##nr##_IN, PORT##nr##_IN_PD, \ | ||
377 | PORT##nr##_IN_PU) | ||
378 | |||
379 | #define PORT_DATA_O(nr) \ | ||
380 | PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, \ | ||
381 | PORT##nr##_OUT) | ||
382 | |||
383 | #define PORT_DATA_IO(nr) \ | ||
384 | PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, \ | ||
385 | PORT##nr##_OUT, PORT##nr##_IN) | ||
386 | |||
387 | #define PORT_DATA_IO_PD(nr) \ | ||
388 | PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, \ | ||
389 | PORT##nr##_OUT, PORT##nr##_IN, \ | ||
390 | PORT##nr##_IN_PD) | ||
391 | |||
392 | #define PORT_DATA_IO_PU(nr) \ | ||
393 | PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, \ | ||
394 | PORT##nr##_OUT, PORT##nr##_IN, \ | ||
395 | PORT##nr##_IN_PU) | ||
396 | |||
397 | #define PORT_DATA_IO_PU_PD(nr) \ | ||
398 | PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, \ | ||
399 | PORT##nr##_OUT, PORT##nr##_IN, \ | ||
400 | PORT##nr##_IN_PD, PORT##nr##_IN_PU) | ||
401 | |||
402 | static pinmux_enum_t pinmux_data[] = { | 344 | static pinmux_enum_t pinmux_data[] = { |
403 | /* specify valid pin states for each pin in GPIO mode */ | 345 | /* specify valid pin states for each pin in GPIO mode */ |
404 | /* 55-1 (GPIO) */ | 346 | /* 55-1 (GPIO) */ |
@@ -1078,13 +1020,9 @@ static pinmux_enum_t pinmux_data[] = { | |||
1078 | PINMUX_DATA(RESETOUTS_MARK, PORT264_FN1), | 1020 | PINMUX_DATA(RESETOUTS_MARK, PORT264_FN1), |
1079 | }; | 1021 | }; |
1080 | 1022 | ||
1081 | #define _GPIO_PORT(pfx, sfx) PINMUX_GPIO(GPIO_PORT##pfx, PORT##pfx##_DATA) | ||
1082 | #define GPIO_PORT_265() _265(_GPIO_PORT, , unused) | ||
1083 | #define GPIO_FN(str) PINMUX_GPIO(GPIO_FN_##str, str##_MARK) | ||
1084 | |||
1085 | static struct pinmux_gpio pinmux_gpios[] = { | 1023 | static struct pinmux_gpio pinmux_gpios[] = { |
1086 | /* 55-1 -> 55-5 (GPIO) */ | 1024 | /* 55-1 -> 55-5 (GPIO) */ |
1087 | GPIO_PORT_265(), | 1025 | GPIO_PORT_ALL(), |
1088 | 1026 | ||
1089 | /* Special Pull-up / Pull-down Functions */ | 1027 | /* Special Pull-up / Pull-down Functions */ |
1090 | GPIO_FN(PORT66_KEYIN0_PU), GPIO_FN(PORT67_KEYIN1_PU), | 1028 | GPIO_FN(PORT66_KEYIN0_PU), GPIO_FN(PORT67_KEYIN1_PU), |
@@ -1362,23 +1300,6 @@ static struct pinmux_gpio pinmux_gpios[] = { | |||
1362 | GPIO_FN(RESETOUTS), | 1300 | GPIO_FN(RESETOUTS), |
1363 | }; | 1301 | }; |
1364 | 1302 | ||
1365 | /* helper for top 4 bits in PORTnCR */ | ||
1366 | #define PCRH(in, in_pd, in_pu, out) \ | ||
1367 | 0, (out), (in), 0, \ | ||
1368 | 0, 0, 0, 0, \ | ||
1369 | 0, 0, (in_pd), 0, \ | ||
1370 | 0, 0, (in_pu), 0 | ||
1371 | |||
1372 | #define PORTCR(nr, reg) \ | ||
1373 | { PINMUX_CFG_REG("PORT" nr "CR", reg, 8, 4) { \ | ||
1374 | PCRH(PORT##nr##_IN, PORT##nr##_IN_PD, \ | ||
1375 | PORT##nr##_IN_PU, PORT##nr##_OUT), \ | ||
1376 | PORT##nr##_FN0, PORT##nr##_FN1, \ | ||
1377 | PORT##nr##_FN2, PORT##nr##_FN3, \ | ||
1378 | PORT##nr##_FN4, PORT##nr##_FN5, \ | ||
1379 | PORT##nr##_FN6, PORT##nr##_FN7 } \ | ||
1380 | } | ||
1381 | |||
1382 | static struct pinmux_cfg_reg pinmux_config_regs[] = { | 1303 | static struct pinmux_cfg_reg pinmux_config_regs[] = { |
1383 | PORTCR(0, 0xe6050000), /* PORT0CR */ | 1304 | PORTCR(0, 0xe6050000), /* PORT0CR */ |
1384 | PORTCR(1, 0xe6050001), /* PORT1CR */ | 1305 | PORTCR(1, 0xe6050001), /* PORT1CR */ |
diff --git a/arch/arm/mach-shmobile/pfc-sh73a0.c b/arch/arm/mach-shmobile/pfc-sh73a0.c index 5abe02fbd6b9..e05634ce2e0d 100644 --- a/arch/arm/mach-shmobile/pfc-sh73a0.c +++ b/arch/arm/mach-shmobile/pfc-sh73a0.c | |||
@@ -24,83 +24,71 @@ | |||
24 | #include <mach/sh73a0.h> | 24 | #include <mach/sh73a0.h> |
25 | #include <mach/irqs.h> | 25 | #include <mach/irqs.h> |
26 | 26 | ||
27 | #define _1(fn, pfx, sfx) fn(pfx, sfx) | 27 | #define CPU_ALL_PORT(fn, pfx, sfx) \ |
28 | 28 | PORT_10(fn, pfx, sfx), PORT_10(fn, pfx##1, sfx), \ | |
29 | #define _10(fn, pfx, sfx) \ | 29 | PORT_10(fn, pfx##2, sfx), PORT_10(fn, pfx##3, sfx), \ |
30 | _1(fn, pfx##0, sfx), _1(fn, pfx##1, sfx), \ | 30 | PORT_10(fn, pfx##4, sfx), PORT_10(fn, pfx##5, sfx), \ |
31 | _1(fn, pfx##2, sfx), _1(fn, pfx##3, sfx), \ | 31 | PORT_10(fn, pfx##6, sfx), PORT_10(fn, pfx##7, sfx), \ |
32 | _1(fn, pfx##4, sfx), _1(fn, pfx##5, sfx), \ | 32 | PORT_10(fn, pfx##8, sfx), PORT_10(fn, pfx##9, sfx), \ |
33 | _1(fn, pfx##6, sfx), _1(fn, pfx##7, sfx), \ | 33 | PORT_10(fn, pfx##10, sfx), \ |
34 | _1(fn, pfx##8, sfx), _1(fn, pfx##9, sfx) | 34 | PORT_1(fn, pfx##110, sfx), PORT_1(fn, pfx##111, sfx), \ |
35 | 35 | PORT_1(fn, pfx##112, sfx), PORT_1(fn, pfx##113, sfx), \ | |
36 | #define _310(fn, pfx, sfx) \ | 36 | PORT_1(fn, pfx##114, sfx), PORT_1(fn, pfx##115, sfx), \ |
37 | _10(fn, pfx, sfx), _10(fn, pfx##1, sfx), \ | 37 | PORT_1(fn, pfx##116, sfx), PORT_1(fn, pfx##117, sfx), \ |
38 | _10(fn, pfx##2, sfx), _10(fn, pfx##3, sfx), \ | 38 | PORT_1(fn, pfx##118, sfx), \ |
39 | _10(fn, pfx##4, sfx), _10(fn, pfx##5, sfx), \ | 39 | PORT_1(fn, pfx##128, sfx), PORT_1(fn, pfx##129, sfx), \ |
40 | _10(fn, pfx##6, sfx), _10(fn, pfx##7, sfx), \ | 40 | PORT_10(fn, pfx##13, sfx), PORT_10(fn, pfx##14, sfx), \ |
41 | _10(fn, pfx##8, sfx), _10(fn, pfx##9, sfx), \ | 41 | PORT_10(fn, pfx##15, sfx), \ |
42 | _10(fn, pfx##10, sfx), \ | 42 | PORT_1(fn, pfx##160, sfx), PORT_1(fn, pfx##161, sfx), \ |
43 | _1(fn, pfx##110, sfx), _1(fn, pfx##111, sfx), \ | 43 | PORT_1(fn, pfx##162, sfx), PORT_1(fn, pfx##163, sfx), \ |
44 | _1(fn, pfx##112, sfx), _1(fn, pfx##113, sfx), \ | 44 | PORT_1(fn, pfx##164, sfx), \ |
45 | _1(fn, pfx##114, sfx), _1(fn, pfx##115, sfx), \ | 45 | PORT_1(fn, pfx##192, sfx), PORT_1(fn, pfx##193, sfx), \ |
46 | _1(fn, pfx##116, sfx), _1(fn, pfx##117, sfx), \ | 46 | PORT_1(fn, pfx##194, sfx), PORT_1(fn, pfx##195, sfx), \ |
47 | _1(fn, pfx##118, sfx), \ | 47 | PORT_1(fn, pfx##196, sfx), PORT_1(fn, pfx##197, sfx), \ |
48 | _1(fn, pfx##128, sfx), _1(fn, pfx##129, sfx), \ | 48 | PORT_1(fn, pfx##198, sfx), PORT_1(fn, pfx##199, sfx), \ |
49 | _10(fn, pfx##13, sfx), _10(fn, pfx##14, sfx), \ | 49 | PORT_10(fn, pfx##20, sfx), PORT_10(fn, pfx##21, sfx), \ |
50 | _10(fn, pfx##15, sfx), \ | 50 | PORT_10(fn, pfx##22, sfx), PORT_10(fn, pfx##23, sfx), \ |
51 | _1(fn, pfx##160, sfx), _1(fn, pfx##161, sfx), \ | 51 | PORT_10(fn, pfx##24, sfx), PORT_10(fn, pfx##25, sfx), \ |
52 | _1(fn, pfx##162, sfx), _1(fn, pfx##163, sfx), \ | 52 | PORT_10(fn, pfx##26, sfx), PORT_10(fn, pfx##27, sfx), \ |
53 | _1(fn, pfx##164, sfx), \ | 53 | PORT_1(fn, pfx##280, sfx), PORT_1(fn, pfx##281, sfx), \ |
54 | _1(fn, pfx##192, sfx), _1(fn, pfx##193, sfx), \ | 54 | PORT_1(fn, pfx##282, sfx), \ |
55 | _1(fn, pfx##194, sfx), _1(fn, pfx##195, sfx), \ | 55 | PORT_1(fn, pfx##288, sfx), PORT_1(fn, pfx##289, sfx), \ |
56 | _1(fn, pfx##196, sfx), _1(fn, pfx##197, sfx), \ | 56 | PORT_10(fn, pfx##29, sfx), PORT_10(fn, pfx##30, sfx) |
57 | _1(fn, pfx##198, sfx), _1(fn, pfx##199, sfx), \ | ||
58 | _10(fn, pfx##20, sfx), _10(fn, pfx##21, sfx), \ | ||
59 | _10(fn, pfx##22, sfx), _10(fn, pfx##23, sfx), \ | ||
60 | _10(fn, pfx##24, sfx), _10(fn, pfx##25, sfx), \ | ||
61 | _10(fn, pfx##26, sfx), _10(fn, pfx##27, sfx), \ | ||
62 | _1(fn, pfx##280, sfx), _1(fn, pfx##281, sfx), \ | ||
63 | _1(fn, pfx##282, sfx), \ | ||
64 | _1(fn, pfx##288, sfx), _1(fn, pfx##289, sfx), \ | ||
65 | _10(fn, pfx##29, sfx), _10(fn, pfx##30, sfx) | ||
66 | |||
67 | #define _PORT(pfx, sfx) pfx##_##sfx | ||
68 | #define PORT_310(str) _310(_PORT, PORT, str) | ||
69 | 57 | ||
70 | enum { | 58 | enum { |
71 | PINMUX_RESERVED = 0, | 59 | PINMUX_RESERVED = 0, |
72 | 60 | ||
73 | PINMUX_DATA_BEGIN, | 61 | PINMUX_DATA_BEGIN, |
74 | PORT_310(DATA), /* PORT0_DATA -> PORT309_DATA */ | 62 | PORT_ALL(DATA), /* PORT0_DATA -> PORT309_DATA */ |
75 | PINMUX_DATA_END, | 63 | PINMUX_DATA_END, |
76 | 64 | ||
77 | PINMUX_INPUT_BEGIN, | 65 | PINMUX_INPUT_BEGIN, |
78 | PORT_310(IN), /* PORT0_IN -> PORT309_IN */ | 66 | PORT_ALL(IN), /* PORT0_IN -> PORT309_IN */ |
79 | PINMUX_INPUT_END, | 67 | PINMUX_INPUT_END, |
80 | 68 | ||
81 | PINMUX_INPUT_PULLUP_BEGIN, | 69 | PINMUX_INPUT_PULLUP_BEGIN, |
82 | PORT_310(IN_PU), /* PORT0_IN_PU -> PORT309_IN_PU */ | 70 | PORT_ALL(IN_PU), /* PORT0_IN_PU -> PORT309_IN_PU */ |
83 | PINMUX_INPUT_PULLUP_END, | 71 | PINMUX_INPUT_PULLUP_END, |
84 | 72 | ||
85 | PINMUX_INPUT_PULLDOWN_BEGIN, | 73 | PINMUX_INPUT_PULLDOWN_BEGIN, |
86 | PORT_310(IN_PD), /* PORT0_IN_PD -> PORT309_IN_PD */ | 74 | PORT_ALL(IN_PD), /* PORT0_IN_PD -> PORT309_IN_PD */ |
87 | PINMUX_INPUT_PULLDOWN_END, | 75 | PINMUX_INPUT_PULLDOWN_END, |
88 | 76 | ||
89 | PINMUX_OUTPUT_BEGIN, | 77 | PINMUX_OUTPUT_BEGIN, |
90 | PORT_310(OUT), /* PORT0_OUT -> PORT309_OUT */ | 78 | PORT_ALL(OUT), /* PORT0_OUT -> PORT309_OUT */ |
91 | PINMUX_OUTPUT_END, | 79 | PINMUX_OUTPUT_END, |
92 | 80 | ||
93 | PINMUX_FUNCTION_BEGIN, | 81 | PINMUX_FUNCTION_BEGIN, |
94 | PORT_310(FN_IN), /* PORT0_FN_IN -> PORT309_FN_IN */ | 82 | PORT_ALL(FN_IN), /* PORT0_FN_IN -> PORT309_FN_IN */ |
95 | PORT_310(FN_OUT), /* PORT0_FN_OUT -> PORT309_FN_OUT */ | 83 | PORT_ALL(FN_OUT), /* PORT0_FN_OUT -> PORT309_FN_OUT */ |
96 | PORT_310(FN0), /* PORT0_FN0 -> PORT309_FN0 */ | 84 | PORT_ALL(FN0), /* PORT0_FN0 -> PORT309_FN0 */ |
97 | PORT_310(FN1), /* PORT0_FN1 -> PORT309_FN1 */ | 85 | PORT_ALL(FN1), /* PORT0_FN1 -> PORT309_FN1 */ |
98 | PORT_310(FN2), /* PORT0_FN2 -> PORT309_FN2 */ | 86 | PORT_ALL(FN2), /* PORT0_FN2 -> PORT309_FN2 */ |
99 | PORT_310(FN3), /* PORT0_FN3 -> PORT309_FN3 */ | 87 | PORT_ALL(FN3), /* PORT0_FN3 -> PORT309_FN3 */ |
100 | PORT_310(FN4), /* PORT0_FN4 -> PORT309_FN4 */ | 88 | PORT_ALL(FN4), /* PORT0_FN4 -> PORT309_FN4 */ |
101 | PORT_310(FN5), /* PORT0_FN5 -> PORT309_FN5 */ | 89 | PORT_ALL(FN5), /* PORT0_FN5 -> PORT309_FN5 */ |
102 | PORT_310(FN6), /* PORT0_FN6 -> PORT309_FN6 */ | 90 | PORT_ALL(FN6), /* PORT0_FN6 -> PORT309_FN6 */ |
103 | PORT_310(FN7), /* PORT0_FN7 -> PORT309_FN7 */ | 91 | PORT_ALL(FN7), /* PORT0_FN7 -> PORT309_FN7 */ |
104 | 92 | ||
105 | MSEL2CR_MSEL19_0, MSEL2CR_MSEL19_1, | 93 | MSEL2CR_MSEL19_0, MSEL2CR_MSEL19_1, |
106 | MSEL2CR_MSEL18_0, MSEL2CR_MSEL18_1, | 94 | MSEL2CR_MSEL18_0, MSEL2CR_MSEL18_1, |
@@ -508,6 +496,14 @@ enum { | |||
508 | SDHICMD2_PU_MARK, | 496 | SDHICMD2_PU_MARK, |
509 | MMCCMD0_PU_MARK, | 497 | MMCCMD0_PU_MARK, |
510 | MMCCMD1_PU_MARK, | 498 | MMCCMD1_PU_MARK, |
499 | MMCD0_0_PU_MARK, | ||
500 | MMCD0_1_PU_MARK, | ||
501 | MMCD0_2_PU_MARK, | ||
502 | MMCD0_3_PU_MARK, | ||
503 | MMCD0_4_PU_MARK, | ||
504 | MMCD0_5_PU_MARK, | ||
505 | MMCD0_6_PU_MARK, | ||
506 | MMCD0_7_PU_MARK, | ||
511 | FSIBISLD_PU_MARK, | 507 | FSIBISLD_PU_MARK, |
512 | FSIACK_PU_MARK, | 508 | FSIACK_PU_MARK, |
513 | FSIAILR_PU_MARK, | 509 | FSIAILR_PU_MARK, |
@@ -517,45 +513,6 @@ enum { | |||
517 | PINMUX_MARK_END, | 513 | PINMUX_MARK_END, |
518 | }; | 514 | }; |
519 | 515 | ||
520 | #define PORT_DATA_I(nr) \ | ||
521 | PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, PORT##nr##_IN) | ||
522 | |||
523 | #define PORT_DATA_I_PD(nr) \ | ||
524 | PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, \ | ||
525 | PORT##nr##_IN, PORT##nr##_IN_PD) | ||
526 | |||
527 | #define PORT_DATA_I_PU(nr) \ | ||
528 | PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, \ | ||
529 | PORT##nr##_IN, PORT##nr##_IN_PU) | ||
530 | |||
531 | #define PORT_DATA_I_PU_PD(nr) \ | ||
532 | PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, \ | ||
533 | PORT##nr##_IN, PORT##nr##_IN_PD, \ | ||
534 | PORT##nr##_IN_PU) | ||
535 | |||
536 | #define PORT_DATA_O(nr) \ | ||
537 | PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, \ | ||
538 | PORT##nr##_OUT) | ||
539 | |||
540 | #define PORT_DATA_IO(nr) \ | ||
541 | PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, \ | ||
542 | PORT##nr##_OUT, PORT##nr##_IN) | ||
543 | |||
544 | #define PORT_DATA_IO_PD(nr) \ | ||
545 | PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, \ | ||
546 | PORT##nr##_OUT, PORT##nr##_IN, \ | ||
547 | PORT##nr##_IN_PD) | ||
548 | |||
549 | #define PORT_DATA_IO_PU(nr) \ | ||
550 | PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, \ | ||
551 | PORT##nr##_OUT, PORT##nr##_IN, \ | ||
552 | PORT##nr##_IN_PU) | ||
553 | |||
554 | #define PORT_DATA_IO_PU_PD(nr) \ | ||
555 | PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, \ | ||
556 | PORT##nr##_OUT, PORT##nr##_IN, \ | ||
557 | PORT##nr##_IN_PD, PORT##nr##_IN_PU) | ||
558 | |||
559 | static pinmux_enum_t pinmux_data[] = { | 516 | static pinmux_enum_t pinmux_data[] = { |
560 | /* specify valid pin states for each pin in GPIO mode */ | 517 | /* specify valid pin states for each pin in GPIO mode */ |
561 | 518 | ||
@@ -1561,6 +1518,24 @@ static pinmux_enum_t pinmux_data[] = { | |||
1561 | MSEL4CR_MSEL15_0), | 1518 | MSEL4CR_MSEL15_0), |
1562 | PINMUX_DATA(MMCCMD1_PU_MARK, PORT297_FN2, PORT297_IN_PU, | 1519 | PINMUX_DATA(MMCCMD1_PU_MARK, PORT297_FN2, PORT297_IN_PU, |
1563 | MSEL4CR_MSEL15_1), | 1520 | MSEL4CR_MSEL15_1), |
1521 | |||
1522 | PINMUX_DATA(MMCD0_0_PU_MARK, | ||
1523 | PORT271_FN1, PORT271_IN_PU, MSEL4CR_MSEL15_0), | ||
1524 | PINMUX_DATA(MMCD0_1_PU_MARK, | ||
1525 | PORT272_FN1, PORT272_IN_PU, MSEL4CR_MSEL15_0), | ||
1526 | PINMUX_DATA(MMCD0_2_PU_MARK, | ||
1527 | PORT273_FN1, PORT273_IN_PU, MSEL4CR_MSEL15_0), | ||
1528 | PINMUX_DATA(MMCD0_3_PU_MARK, | ||
1529 | PORT274_FN1, PORT274_IN_PU, MSEL4CR_MSEL15_0), | ||
1530 | PINMUX_DATA(MMCD0_4_PU_MARK, | ||
1531 | PORT275_FN1, PORT275_IN_PU, MSEL4CR_MSEL15_0), | ||
1532 | PINMUX_DATA(MMCD0_5_PU_MARK, | ||
1533 | PORT276_FN1, PORT276_IN_PU, MSEL4CR_MSEL15_0), | ||
1534 | PINMUX_DATA(MMCD0_6_PU_MARK, | ||
1535 | PORT277_FN1, PORT277_IN_PU, MSEL4CR_MSEL15_0), | ||
1536 | PINMUX_DATA(MMCD0_7_PU_MARK, | ||
1537 | PORT278_FN1, PORT278_IN_PU, MSEL4CR_MSEL15_0), | ||
1538 | |||
1564 | PINMUX_DATA(FSIBISLD_PU_MARK, PORT39_FN1, PORT39_IN_PU), | 1539 | PINMUX_DATA(FSIBISLD_PU_MARK, PORT39_FN1, PORT39_IN_PU), |
1565 | PINMUX_DATA(FSIACK_PU_MARK, PORT49_FN1, PORT49_IN_PU), | 1540 | PINMUX_DATA(FSIACK_PU_MARK, PORT49_FN1, PORT49_IN_PU), |
1566 | PINMUX_DATA(FSIAILR_PU_MARK, PORT50_FN5, PORT50_IN_PU), | 1541 | PINMUX_DATA(FSIAILR_PU_MARK, PORT50_FN5, PORT50_IN_PU), |
@@ -1568,12 +1543,8 @@ static pinmux_enum_t pinmux_data[] = { | |||
1568 | PINMUX_DATA(FSIAISLD_PU_MARK, PORT55_FN1, PORT55_IN_PU), | 1543 | PINMUX_DATA(FSIAISLD_PU_MARK, PORT55_FN1, PORT55_IN_PU), |
1569 | }; | 1544 | }; |
1570 | 1545 | ||
1571 | #define _GPIO_PORT(pfx, sfx) PINMUX_GPIO(GPIO_PORT##pfx, PORT##pfx##_DATA) | ||
1572 | #define GPIO_PORT_310() _310(_GPIO_PORT, , unused) | ||
1573 | #define GPIO_FN(str) PINMUX_GPIO(GPIO_FN_##str, str##_MARK) | ||
1574 | |||
1575 | static struct pinmux_gpio pinmux_gpios[] = { | 1546 | static struct pinmux_gpio pinmux_gpios[] = { |
1576 | GPIO_PORT_310(), | 1547 | GPIO_PORT_ALL(), |
1577 | 1548 | ||
1578 | /* Table 25-1 (Functions 0-7) */ | 1549 | /* Table 25-1 (Functions 0-7) */ |
1579 | GPIO_FN(VBUS_0), | 1550 | GPIO_FN(VBUS_0), |
@@ -2236,24 +2207,20 @@ static struct pinmux_gpio pinmux_gpios[] = { | |||
2236 | GPIO_FN(SDHICMD2_PU), | 2207 | GPIO_FN(SDHICMD2_PU), |
2237 | GPIO_FN(MMCCMD0_PU), | 2208 | GPIO_FN(MMCCMD0_PU), |
2238 | GPIO_FN(MMCCMD1_PU), | 2209 | GPIO_FN(MMCCMD1_PU), |
2210 | GPIO_FN(MMCD0_0_PU), | ||
2211 | GPIO_FN(MMCD0_1_PU), | ||
2212 | GPIO_FN(MMCD0_2_PU), | ||
2213 | GPIO_FN(MMCD0_3_PU), | ||
2214 | GPIO_FN(MMCD0_4_PU), | ||
2215 | GPIO_FN(MMCD0_5_PU), | ||
2216 | GPIO_FN(MMCD0_6_PU), | ||
2217 | GPIO_FN(MMCD0_7_PU), | ||
2239 | GPIO_FN(FSIACK_PU), | 2218 | GPIO_FN(FSIACK_PU), |
2240 | GPIO_FN(FSIAILR_PU), | 2219 | GPIO_FN(FSIAILR_PU), |
2241 | GPIO_FN(FSIAIBT_PU), | 2220 | GPIO_FN(FSIAIBT_PU), |
2242 | GPIO_FN(FSIAISLD_PU), | 2221 | GPIO_FN(FSIAISLD_PU), |
2243 | }; | 2222 | }; |
2244 | 2223 | ||
2245 | #define PORTCR(nr, reg) \ | ||
2246 | { PINMUX_CFG_REG("PORT" nr "CR", reg, 8, 4) { \ | ||
2247 | 0, \ | ||
2248 | /*0001*/ PORT##nr##_OUT , \ | ||
2249 | /*0010*/ PORT##nr##_IN , 0, 0, 0, 0, 0, 0, 0, \ | ||
2250 | /*1010*/ PORT##nr##_IN_PD, 0, 0, 0, \ | ||
2251 | /*1110*/ PORT##nr##_IN_PU, 0, \ | ||
2252 | PORT##nr##_FN0, PORT##nr##_FN1, PORT##nr##_FN2, \ | ||
2253 | PORT##nr##_FN3, PORT##nr##_FN4, PORT##nr##_FN5, \ | ||
2254 | PORT##nr##_FN6, PORT##nr##_FN7, 0, 0, 0, 0, 0, 0, 0, 0 } \ | ||
2255 | } | ||
2256 | |||
2257 | static struct pinmux_cfg_reg pinmux_config_regs[] = { | 2224 | static struct pinmux_cfg_reg pinmux_config_regs[] = { |
2258 | PORTCR(0, 0xe6050000), /* PORT0CR */ | 2225 | PORTCR(0, 0xe6050000), /* PORT0CR */ |
2259 | PORTCR(1, 0xe6050001), /* PORT1CR */ | 2226 | PORTCR(1, 0xe6050001), /* PORT1CR */ |
diff --git a/arch/arm/mach-shmobile/pm-sh7372.c b/arch/arm/mach-shmobile/pm-sh7372.c index 79612737c5b2..0a5b22942fd3 100644 --- a/arch/arm/mach-shmobile/pm-sh7372.c +++ b/arch/arm/mach-shmobile/pm-sh7372.c | |||
@@ -402,22 +402,18 @@ static void sh7372_setup_a3sm(unsigned long msk, unsigned long msk2) | |||
402 | 402 | ||
403 | #ifdef CONFIG_CPU_IDLE | 403 | #ifdef CONFIG_CPU_IDLE |
404 | 404 | ||
405 | static void sh7372_cpuidle_setup(struct cpuidle_device *dev) | 405 | static void sh7372_cpuidle_setup(struct cpuidle_driver *drv) |
406 | { | 406 | { |
407 | struct cpuidle_state *state; | 407 | struct cpuidle_state *state = &drv->states[drv->state_count]; |
408 | int i = dev->state_count; | ||
409 | 408 | ||
410 | state = &dev->states[i]; | ||
411 | snprintf(state->name, CPUIDLE_NAME_LEN, "C2"); | 409 | snprintf(state->name, CPUIDLE_NAME_LEN, "C2"); |
412 | strncpy(state->desc, "Core Standby Mode", CPUIDLE_DESC_LEN); | 410 | strncpy(state->desc, "Core Standby Mode", CPUIDLE_DESC_LEN); |
413 | state->exit_latency = 10; | 411 | state->exit_latency = 10; |
414 | state->target_residency = 20 + 10; | 412 | state->target_residency = 20 + 10; |
415 | state->power_usage = 1; /* perhaps not */ | 413 | state->flags = CPUIDLE_FLAG_TIME_VALID; |
416 | state->flags = 0; | 414 | shmobile_cpuidle_modes[drv->state_count] = sh7372_enter_core_standby; |
417 | state->flags |= CPUIDLE_FLAG_TIME_VALID; | ||
418 | shmobile_cpuidle_modes[i] = sh7372_enter_core_standby; | ||
419 | 415 | ||
420 | dev->state_count = i + 1; | 416 | drv->state_count++; |
421 | } | 417 | } |
422 | 418 | ||
423 | static void sh7372_cpuidle_init(void) | 419 | static void sh7372_cpuidle_init(void) |
diff --git a/arch/arm/mach-shmobile/pm_runtime.c b/arch/arm/mach-shmobile/pm_runtime.c deleted file mode 100644 index bd5c6a3b8c55..000000000000 --- a/arch/arm/mach-shmobile/pm_runtime.c +++ /dev/null | |||
@@ -1,67 +0,0 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-shmobile/pm_runtime.c | ||
3 | * | ||
4 | * Runtime PM support code for SuperH Mobile ARM | ||
5 | * | ||
6 | * Copyright (C) 2009-2010 Magnus Damm | ||
7 | * | ||
8 | * This file is subject to the terms and conditions of the GNU General Public | ||
9 | * License. See the file "COPYING" in the main directory of this archive | ||
10 | * for more details. | ||
11 | */ | ||
12 | |||
13 | #include <linux/init.h> | ||
14 | #include <linux/kernel.h> | ||
15 | #include <linux/io.h> | ||
16 | #include <linux/pm_runtime.h> | ||
17 | #include <linux/pm_domain.h> | ||
18 | #include <linux/pm_clock.h> | ||
19 | #include <linux/platform_device.h> | ||
20 | #include <linux/clk.h> | ||
21 | #include <linux/sh_clk.h> | ||
22 | #include <linux/bitmap.h> | ||
23 | #include <linux/slab.h> | ||
24 | |||
25 | #ifdef CONFIG_PM_RUNTIME | ||
26 | |||
27 | static int default_platform_runtime_idle(struct device *dev) | ||
28 | { | ||
29 | /* suspend synchronously to disable clocks immediately */ | ||
30 | return pm_runtime_suspend(dev); | ||
31 | } | ||
32 | |||
33 | static struct dev_pm_domain default_pm_domain = { | ||
34 | .ops = { | ||
35 | .runtime_suspend = pm_clk_suspend, | ||
36 | .runtime_resume = pm_clk_resume, | ||
37 | .runtime_idle = default_platform_runtime_idle, | ||
38 | USE_PLATFORM_PM_SLEEP_OPS | ||
39 | }, | ||
40 | }; | ||
41 | |||
42 | #define DEFAULT_PM_DOMAIN_PTR (&default_pm_domain) | ||
43 | |||
44 | #else | ||
45 | |||
46 | #define DEFAULT_PM_DOMAIN_PTR NULL | ||
47 | |||
48 | #endif /* CONFIG_PM_RUNTIME */ | ||
49 | |||
50 | static struct pm_clk_notifier_block platform_bus_notifier = { | ||
51 | .pm_domain = DEFAULT_PM_DOMAIN_PTR, | ||
52 | .con_ids = { NULL, }, | ||
53 | }; | ||
54 | |||
55 | static int __init sh_pm_runtime_init(void) | ||
56 | { | ||
57 | pm_clk_add_notifier(&platform_bus_type, &platform_bus_notifier); | ||
58 | return 0; | ||
59 | } | ||
60 | core_initcall(sh_pm_runtime_init); | ||
61 | |||
62 | static int __init sh_pm_runtime_late_init(void) | ||
63 | { | ||
64 | pm_genpd_poweroff_unused(); | ||
65 | return 0; | ||
66 | } | ||
67 | late_initcall(sh_pm_runtime_late_init); | ||
diff --git a/arch/arm/mach-tegra/board-dt.c b/arch/arm/mach-tegra/board-dt.c index d368f8dafcfd..74743ad3d2d3 100644 --- a/arch/arm/mach-tegra/board-dt.c +++ b/arch/arm/mach-tegra/board-dt.c | |||
@@ -101,6 +101,13 @@ static void __init tegra_dt_init(void) | |||
101 | 101 | ||
102 | tegra_clk_init_from_table(tegra_dt_clk_init_table); | 102 | tegra_clk_init_from_table(tegra_dt_clk_init_table); |
103 | 103 | ||
104 | /* | ||
105 | * Finished with the static registrations now; fill in the missing | ||
106 | * devices | ||
107 | */ | ||
108 | of_platform_populate(NULL, tegra_dt_match_table, | ||
109 | tegra20_auxdata_lookup, NULL); | ||
110 | |||
104 | for (i = 0; i < ARRAY_SIZE(pinmux_configs); i++) { | 111 | for (i = 0; i < ARRAY_SIZE(pinmux_configs); i++) { |
105 | if (of_machine_is_compatible(pinmux_configs[i].machine)) { | 112 | if (of_machine_is_compatible(pinmux_configs[i].machine)) { |
106 | pinmux_configs[i].init(); | 113 | pinmux_configs[i].init(); |
@@ -110,12 +117,6 @@ static void __init tegra_dt_init(void) | |||
110 | 117 | ||
111 | WARN(i == ARRAY_SIZE(pinmux_configs), | 118 | WARN(i == ARRAY_SIZE(pinmux_configs), |
112 | "Unknown platform! Pinmuxing not initialized\n"); | 119 | "Unknown platform! Pinmuxing not initialized\n"); |
113 | |||
114 | /* | ||
115 | * Finished with the static registrations now; fill in the missing | ||
116 | * devices | ||
117 | */ | ||
118 | of_platform_populate(NULL, tegra_dt_match_table, tegra20_auxdata_lookup, NULL); | ||
119 | } | 120 | } |
120 | 121 | ||
121 | static const char * tegra_dt_board_compat[] = { | 122 | static const char * tegra_dt_board_compat[] = { |
diff --git a/arch/arm/mach-tegra/board-harmony-pinmux.c b/arch/arm/mach-tegra/board-harmony-pinmux.c index e99b45618cd0..7a4a26d5174c 100644 --- a/arch/arm/mach-tegra/board-harmony-pinmux.c +++ b/arch/arm/mach-tegra/board-harmony-pinmux.c | |||
@@ -16,6 +16,8 @@ | |||
16 | 16 | ||
17 | #include <linux/kernel.h> | 17 | #include <linux/kernel.h> |
18 | #include <linux/gpio.h> | 18 | #include <linux/gpio.h> |
19 | #include <linux/of.h> | ||
20 | |||
19 | #include <mach/pinmux.h> | 21 | #include <mach/pinmux.h> |
20 | 22 | ||
21 | #include "gpio-names.h" | 23 | #include "gpio-names.h" |
@@ -161,7 +163,9 @@ static struct tegra_gpio_table gpio_table[] = { | |||
161 | 163 | ||
162 | void harmony_pinmux_init(void) | 164 | void harmony_pinmux_init(void) |
163 | { | 165 | { |
164 | platform_add_devices(pinmux_devices, ARRAY_SIZE(pinmux_devices)); | 166 | if (!of_machine_is_compatible("nvidia,tegra20")) |
167 | platform_add_devices(pinmux_devices, | ||
168 | ARRAY_SIZE(pinmux_devices)); | ||
165 | 169 | ||
166 | tegra_pinmux_config_table(harmony_pinmux, ARRAY_SIZE(harmony_pinmux)); | 170 | tegra_pinmux_config_table(harmony_pinmux, ARRAY_SIZE(harmony_pinmux)); |
167 | 171 | ||
diff --git a/arch/arm/mach-tegra/board-paz00-pinmux.c b/arch/arm/mach-tegra/board-paz00-pinmux.c index fb20894862b0..be30e215f4b7 100644 --- a/arch/arm/mach-tegra/board-paz00-pinmux.c +++ b/arch/arm/mach-tegra/board-paz00-pinmux.c | |||
@@ -16,6 +16,8 @@ | |||
16 | 16 | ||
17 | #include <linux/kernel.h> | 17 | #include <linux/kernel.h> |
18 | #include <linux/gpio.h> | 18 | #include <linux/gpio.h> |
19 | #include <linux/of.h> | ||
20 | |||
19 | #include <mach/pinmux.h> | 21 | #include <mach/pinmux.h> |
20 | 22 | ||
21 | #include "gpio-names.h" | 23 | #include "gpio-names.h" |
@@ -158,7 +160,9 @@ static struct tegra_gpio_table gpio_table[] = { | |||
158 | 160 | ||
159 | void paz00_pinmux_init(void) | 161 | void paz00_pinmux_init(void) |
160 | { | 162 | { |
161 | platform_add_devices(pinmux_devices, ARRAY_SIZE(pinmux_devices)); | 163 | if (!of_machine_is_compatible("nvidia,tegra20")) |
164 | platform_add_devices(pinmux_devices, | ||
165 | ARRAY_SIZE(pinmux_devices)); | ||
162 | 166 | ||
163 | tegra_pinmux_config_table(paz00_pinmux, ARRAY_SIZE(paz00_pinmux)); | 167 | tegra_pinmux_config_table(paz00_pinmux, ARRAY_SIZE(paz00_pinmux)); |
164 | 168 | ||
diff --git a/arch/arm/mach-tegra/board-seaboard-pinmux.c b/arch/arm/mach-tegra/board-seaboard-pinmux.c index fbce31daa3c9..b1c2972f62fe 100644 --- a/arch/arm/mach-tegra/board-seaboard-pinmux.c +++ b/arch/arm/mach-tegra/board-seaboard-pinmux.c | |||
@@ -16,6 +16,7 @@ | |||
16 | #include <linux/kernel.h> | 16 | #include <linux/kernel.h> |
17 | #include <linux/init.h> | 17 | #include <linux/init.h> |
18 | #include <linux/gpio.h> | 18 | #include <linux/gpio.h> |
19 | #include <linux/of.h> | ||
19 | 20 | ||
20 | #include <mach/pinmux.h> | 21 | #include <mach/pinmux.h> |
21 | #include <mach/pinmux-t2.h> | 22 | #include <mach/pinmux-t2.h> |
@@ -191,6 +192,7 @@ static struct tegra_gpio_table common_gpio_table[] = { | |||
191 | { .gpio = TEGRA_GPIO_SD2_POWER, .enable = true }, | 192 | { .gpio = TEGRA_GPIO_SD2_POWER, .enable = true }, |
192 | { .gpio = TEGRA_GPIO_LIDSWITCH, .enable = true }, | 193 | { .gpio = TEGRA_GPIO_LIDSWITCH, .enable = true }, |
193 | { .gpio = TEGRA_GPIO_POWERKEY, .enable = true }, | 194 | { .gpio = TEGRA_GPIO_POWERKEY, .enable = true }, |
195 | { .gpio = TEGRA_GPIO_HP_DET, .enable = true }, | ||
194 | { .gpio = TEGRA_GPIO_ISL29018_IRQ, .enable = true }, | 196 | { .gpio = TEGRA_GPIO_ISL29018_IRQ, .enable = true }, |
195 | { .gpio = TEGRA_GPIO_CDC_IRQ, .enable = true }, | 197 | { .gpio = TEGRA_GPIO_CDC_IRQ, .enable = true }, |
196 | { .gpio = TEGRA_GPIO_USB1, .enable = true }, | 198 | { .gpio = TEGRA_GPIO_USB1, .enable = true }, |
@@ -218,7 +220,9 @@ static void __init update_pinmux(struct tegra_pingroup_config *newtbl, int size) | |||
218 | 220 | ||
219 | void __init seaboard_common_pinmux_init(void) | 221 | void __init seaboard_common_pinmux_init(void) |
220 | { | 222 | { |
221 | platform_add_devices(pinmux_devices, ARRAY_SIZE(pinmux_devices)); | 223 | if (!of_machine_is_compatible("nvidia,tegra20")) |
224 | platform_add_devices(pinmux_devices, | ||
225 | ARRAY_SIZE(pinmux_devices)); | ||
222 | 226 | ||
223 | tegra_pinmux_config_table(seaboard_pinmux, ARRAY_SIZE(seaboard_pinmux)); | 227 | tegra_pinmux_config_table(seaboard_pinmux, ARRAY_SIZE(seaboard_pinmux)); |
224 | 228 | ||
diff --git a/arch/arm/mach-tegra/board-trimslice-pinmux.c b/arch/arm/mach-tegra/board-trimslice-pinmux.c index 4969dd28a04c..7ab719d46da0 100644 --- a/arch/arm/mach-tegra/board-trimslice-pinmux.c +++ b/arch/arm/mach-tegra/board-trimslice-pinmux.c | |||
@@ -16,6 +16,7 @@ | |||
16 | #include <linux/gpio.h> | 16 | #include <linux/gpio.h> |
17 | #include <linux/kernel.h> | 17 | #include <linux/kernel.h> |
18 | #include <linux/init.h> | 18 | #include <linux/init.h> |
19 | #include <linux/of.h> | ||
19 | 20 | ||
20 | #include <mach/pinmux.h> | 21 | #include <mach/pinmux.h> |
21 | 22 | ||
@@ -157,7 +158,9 @@ static struct tegra_gpio_table gpio_table[] = { | |||
157 | 158 | ||
158 | void __init trimslice_pinmux_init(void) | 159 | void __init trimslice_pinmux_init(void) |
159 | { | 160 | { |
160 | platform_add_devices(pinmux_devices, ARRAY_SIZE(pinmux_devices)); | 161 | if (!of_machine_is_compatible("nvidia,tegra20")) |
162 | platform_add_devices(pinmux_devices, | ||
163 | ARRAY_SIZE(pinmux_devices)); | ||
161 | tegra_pinmux_config_table(trimslice_pinmux, ARRAY_SIZE(trimslice_pinmux)); | 164 | tegra_pinmux_config_table(trimslice_pinmux, ARRAY_SIZE(trimslice_pinmux)); |
162 | tegra_gpio_config(gpio_table, ARRAY_SIZE(gpio_table)); | 165 | tegra_gpio_config(gpio_table, ARRAY_SIZE(gpio_table)); |
163 | } | 166 | } |
diff --git a/arch/arm/plat-mxc/Kconfig b/arch/arm/plat-mxc/Kconfig index a08a95107a63..b3a1f2b3ada3 100644 --- a/arch/arm/plat-mxc/Kconfig +++ b/arch/arm/plat-mxc/Kconfig | |||
@@ -10,7 +10,7 @@ choice | |||
10 | 10 | ||
11 | config ARCH_IMX_V4_V5 | 11 | config ARCH_IMX_V4_V5 |
12 | bool "i.MX1, i.MX21, i.MX25, i.MX27" | 12 | bool "i.MX1, i.MX21, i.MX25, i.MX27" |
13 | select AUTO_ZRELADDR | 13 | select AUTO_ZRELADDR if !ZBOOT_ROM |
14 | select ARM_PATCH_PHYS_VIRT | 14 | select ARM_PATCH_PHYS_VIRT |
15 | help | 15 | help |
16 | This enables support for systems based on the Freescale i.MX ARMv4 | 16 | This enables support for systems based on the Freescale i.MX ARMv4 |
@@ -26,7 +26,7 @@ config ARCH_IMX_V6_V7 | |||
26 | 26 | ||
27 | config ARCH_MX5 | 27 | config ARCH_MX5 |
28 | bool "i.MX50, i.MX51, i.MX53" | 28 | bool "i.MX50, i.MX51, i.MX53" |
29 | select AUTO_ZRELADDR | 29 | select AUTO_ZRELADDR if !ZBOOT_ROM |
30 | select ARM_PATCH_PHYS_VIRT | 30 | select ARM_PATCH_PHYS_VIRT |
31 | help | 31 | help |
32 | This enables support for machines using Freescale's i.MX50 and i.MX53 | 32 | This enables support for machines using Freescale's i.MX50 and i.MX53 |
diff --git a/arch/arm/plat-mxc/avic.c b/arch/arm/plat-mxc/avic.c index 8875fb415f68..55f15699a383 100644 --- a/arch/arm/plat-mxc/avic.c +++ b/arch/arm/plat-mxc/avic.c | |||
@@ -22,6 +22,7 @@ | |||
22 | #include <linux/io.h> | 22 | #include <linux/io.h> |
23 | #include <mach/common.h> | 23 | #include <mach/common.h> |
24 | #include <asm/mach/irq.h> | 24 | #include <asm/mach/irq.h> |
25 | #include <asm/exception.h> | ||
25 | #include <mach/hardware.h> | 26 | #include <mach/hardware.h> |
26 | 27 | ||
27 | #include "irq-common.h" | 28 | #include "irq-common.h" |
diff --git a/arch/arm/plat-mxc/gic.c b/arch/arm/plat-mxc/gic.c index b3b8eed263b8..12f8f8109010 100644 --- a/arch/arm/plat-mxc/gic.c +++ b/arch/arm/plat-mxc/gic.c | |||
@@ -28,21 +28,14 @@ asmlinkage void __exception_irq_entry gic_handle_irq(struct pt_regs *regs) | |||
28 | if (irqnr == 1023) | 28 | if (irqnr == 1023) |
29 | break; | 29 | break; |
30 | 30 | ||
31 | if (irqnr > 29 && irqnr < 1021) | 31 | if (irqnr > 15 && irqnr < 1021) |
32 | handle_IRQ(irqnr, regs); | 32 | handle_IRQ(irqnr, regs); |
33 | #ifdef CONFIG_SMP | 33 | #ifdef CONFIG_SMP |
34 | else if (irqnr < 16) { | 34 | else { |
35 | writel_relaxed(irqstat, gic_cpu_base_addr + | 35 | writel_relaxed(irqstat, gic_cpu_base_addr + |
36 | GIC_CPU_EOI); | 36 | GIC_CPU_EOI); |
37 | handle_IPI(irqnr, regs); | 37 | handle_IPI(irqnr, regs); |
38 | } | 38 | } |
39 | #endif | 39 | #endif |
40 | #ifdef CONFIG_LOCAL_TIMERS | ||
41 | else if (irqnr == 29) { | ||
42 | writel_relaxed(irqstat, gic_cpu_base_addr + | ||
43 | GIC_CPU_EOI); | ||
44 | handle_local_timer(regs); | ||
45 | } | ||
46 | #endif | ||
47 | } while (1); | 40 | } while (1); |
48 | } | 41 | } |
diff --git a/arch/arm/plat-mxc/include/mach/entry-macro.S b/arch/arm/plat-mxc/include/mach/entry-macro.S index 9fe0dfcf4e7e..ca5cf26a04b1 100644 --- a/arch/arm/plat-mxc/include/mach/entry-macro.S +++ b/arch/arm/plat-mxc/include/mach/entry-macro.S | |||
@@ -25,6 +25,3 @@ | |||
25 | 25 | ||
26 | .macro test_for_ipi, irqnr, irqstat, base, tmp | 26 | .macro test_for_ipi, irqnr, irqstat, base, tmp |
27 | .endm | 27 | .endm |
28 | |||
29 | .macro test_for_ltirq, irqnr, irqstat, base, tmp | ||
30 | .endm | ||
diff --git a/arch/arm/plat-mxc/tzic.c b/arch/arm/plat-mxc/tzic.c index e993a184189a..a3c164c7ba82 100644 --- a/arch/arm/plat-mxc/tzic.c +++ b/arch/arm/plat-mxc/tzic.c | |||
@@ -17,6 +17,7 @@ | |||
17 | #include <linux/io.h> | 17 | #include <linux/io.h> |
18 | 18 | ||
19 | #include <asm/mach/irq.h> | 19 | #include <asm/mach/irq.h> |
20 | #include <asm/exception.h> | ||
20 | 21 | ||
21 | #include <mach/hardware.h> | 22 | #include <mach/hardware.h> |
22 | #include <mach/common.h> | 23 | #include <mach/common.h> |
diff --git a/arch/arm/plat-pxa/include/plat/pxa3xx_nand.h b/arch/arm/plat-pxa/include/plat/pxa3xx_nand.h index 442301fe48b4..c42f39f20195 100644 --- a/arch/arm/plat-pxa/include/plat/pxa3xx_nand.h +++ b/arch/arm/plat-pxa/include/plat/pxa3xx_nand.h | |||
@@ -41,6 +41,19 @@ struct pxa3xx_nand_flash { | |||
41 | struct pxa3xx_nand_timing *timing; /* NAND Flash timing */ | 41 | struct pxa3xx_nand_timing *timing; /* NAND Flash timing */ |
42 | }; | 42 | }; |
43 | 43 | ||
44 | /* | ||
45 | * Current pxa3xx_nand controller has two chip select which | ||
46 | * both be workable. | ||
47 | * | ||
48 | * Notice should be taken that: | ||
49 | * When you want to use this feature, you should not enable the | ||
50 | * keep configuration feature, for two chip select could be | ||
51 | * attached with different nand chip. The different page size | ||
52 | * and timing requirement make the keep configuration impossible. | ||
53 | */ | ||
54 | |||
55 | /* The max num of chip select current support */ | ||
56 | #define NUM_CHIP_SELECT (2) | ||
44 | struct pxa3xx_nand_platform_data { | 57 | struct pxa3xx_nand_platform_data { |
45 | 58 | ||
46 | /* the data flash bus is shared between the Static Memory | 59 | /* the data flash bus is shared between the Static Memory |
@@ -52,8 +65,11 @@ struct pxa3xx_nand_platform_data { | |||
52 | /* allow platform code to keep OBM/bootloader defined NFC config */ | 65 | /* allow platform code to keep OBM/bootloader defined NFC config */ |
53 | int keep_config; | 66 | int keep_config; |
54 | 67 | ||
55 | const struct mtd_partition *parts; | 68 | /* indicate how many chip selects will be used */ |
56 | unsigned int nr_parts; | 69 | int num_cs; |
70 | |||
71 | const struct mtd_partition *parts[NUM_CHIP_SELECT]; | ||
72 | unsigned int nr_parts[NUM_CHIP_SELECT]; | ||
57 | 73 | ||
58 | const struct pxa3xx_nand_flash * flash; | 74 | const struct pxa3xx_nand_flash * flash; |
59 | size_t num_flash; | 75 | size_t num_flash; |
diff --git a/arch/arm/plat-samsung/dma-ops.c b/arch/arm/plat-samsung/dma-ops.c index 6e3d9abc9e2e..93a994a5dd8f 100644 --- a/arch/arm/plat-samsung/dma-ops.c +++ b/arch/arm/plat-samsung/dma-ops.c | |||
@@ -14,6 +14,7 @@ | |||
14 | #include <linux/errno.h> | 14 | #include <linux/errno.h> |
15 | #include <linux/amba/pl330.h> | 15 | #include <linux/amba/pl330.h> |
16 | #include <linux/scatterlist.h> | 16 | #include <linux/scatterlist.h> |
17 | #include <linux/export.h> | ||
17 | 18 | ||
18 | #include <mach/dma.h> | 19 | #include <mach/dma.h> |
19 | 20 | ||
diff --git a/arch/arm/plat-samsung/s3c-dma-ops.c b/arch/arm/plat-samsung/s3c-dma-ops.c index 582333c70585..781494912827 100644 --- a/arch/arm/plat-samsung/s3c-dma-ops.c +++ b/arch/arm/plat-samsung/s3c-dma-ops.c | |||
@@ -14,6 +14,7 @@ | |||
14 | #include <linux/errno.h> | 14 | #include <linux/errno.h> |
15 | #include <linux/slab.h> | 15 | #include <linux/slab.h> |
16 | #include <linux/types.h> | 16 | #include <linux/types.h> |
17 | #include <linux/export.h> | ||
17 | 18 | ||
18 | #include <mach/dma.h> | 19 | #include <mach/dma.h> |
19 | 20 | ||
diff --git a/arch/avr32/boards/atngw100/setup.c b/arch/avr32/boards/atngw100/setup.c index fafed4c38fd2..1f17bde52cd4 100644 --- a/arch/avr32/boards/atngw100/setup.c +++ b/arch/avr32/boards/atngw100/setup.c | |||
@@ -90,11 +90,6 @@ static struct mtd_partition nand_partitions[] = { | |||
90 | }, | 90 | }, |
91 | }; | 91 | }; |
92 | 92 | ||
93 | static struct mtd_partition *nand_part_info(int size, int *num_partitions) | ||
94 | { | ||
95 | *num_partitions = ARRAY_SIZE(nand_partitions); | ||
96 | return nand_partitions; | ||
97 | } | ||
98 | 93 | ||
99 | static struct atmel_nand_data atngw100mkii_nand_data __initdata = { | 94 | static struct atmel_nand_data atngw100mkii_nand_data __initdata = { |
100 | .cle = 21, | 95 | .cle = 21, |
@@ -102,7 +97,8 @@ static struct atmel_nand_data atngw100mkii_nand_data __initdata = { | |||
102 | .rdy_pin = GPIO_PIN_PB(28), | 97 | .rdy_pin = GPIO_PIN_PB(28), |
103 | .enable_pin = GPIO_PIN_PE(23), | 98 | .enable_pin = GPIO_PIN_PE(23), |
104 | .bus_width_16 = true, | 99 | .bus_width_16 = true, |
105 | .partition_info = nand_part_info, | 100 | .parts = nand_partitions, |
101 | .num_parts = ARRAY_SIZE(nand_partitions), | ||
106 | }; | 102 | }; |
107 | #endif | 103 | #endif |
108 | 104 | ||
diff --git a/arch/avr32/boards/atstk1000/atstk1002.c b/arch/avr32/boards/atstk1000/atstk1002.c index 6ce30fb2ec94..4643ff5107c9 100644 --- a/arch/avr32/boards/atstk1000/atstk1002.c +++ b/arch/avr32/boards/atstk1000/atstk1002.c | |||
@@ -90,18 +90,13 @@ static struct mtd_partition nand_partitions[] = { | |||
90 | }, | 90 | }, |
91 | }; | 91 | }; |
92 | 92 | ||
93 | static struct mtd_partition *nand_part_info(int size, int *num_partitions) | ||
94 | { | ||
95 | *num_partitions = ARRAY_SIZE(nand_partitions); | ||
96 | return nand_partitions; | ||
97 | } | ||
98 | |||
99 | static struct atmel_nand_data atstk1006_nand_data __initdata = { | 93 | static struct atmel_nand_data atstk1006_nand_data __initdata = { |
100 | .cle = 21, | 94 | .cle = 21, |
101 | .ale = 22, | 95 | .ale = 22, |
102 | .rdy_pin = GPIO_PIN_PB(30), | 96 | .rdy_pin = GPIO_PIN_PB(30), |
103 | .enable_pin = GPIO_PIN_PB(29), | 97 | .enable_pin = GPIO_PIN_PB(29), |
104 | .partition_info = nand_part_info, | 98 | .parts = nand_partitions, |
99 | .num_parts = ARRAY_SIZE(num_partitions), | ||
105 | }; | 100 | }; |
106 | #endif | 101 | #endif |
107 | 102 | ||
diff --git a/arch/avr32/mach-at32ap/include/mach/board.h b/arch/avr32/mach-at32ap/include/mach/board.h index 679458d9a622..5d7ffca7d69f 100644 --- a/arch/avr32/mach-at32ap/include/mach/board.h +++ b/arch/avr32/mach-at32ap/include/mach/board.h | |||
@@ -128,7 +128,8 @@ struct atmel_nand_data { | |||
128 | u8 ale; /* address line number connected to ALE */ | 128 | u8 ale; /* address line number connected to ALE */ |
129 | u8 cle; /* address line number connected to CLE */ | 129 | u8 cle; /* address line number connected to CLE */ |
130 | u8 bus_width_16; /* buswidth is 16 bit */ | 130 | u8 bus_width_16; /* buswidth is 16 bit */ |
131 | struct mtd_partition *(*partition_info)(int size, int *num_partitions); | 131 | struct mtd_partition *parts; |
132 | unsigned int num_parts; | ||
132 | }; | 133 | }; |
133 | struct platform_device * | 134 | struct platform_device * |
134 | at32_add_device_nand(unsigned int id, struct atmel_nand_data *data); | 135 | at32_add_device_nand(unsigned int id, struct atmel_nand_data *data); |
diff --git a/arch/blackfin/include/asm/bfin_serial.h b/arch/blackfin/include/asm/bfin_serial.h index 7fd0ec7b5b0f..ecacdf34768b 100644 --- a/arch/blackfin/include/asm/bfin_serial.h +++ b/arch/blackfin/include/asm/bfin_serial.h | |||
@@ -32,6 +32,8 @@ struct work_struct; | |||
32 | struct bfin_serial_port { | 32 | struct bfin_serial_port { |
33 | struct uart_port port; | 33 | struct uart_port port; |
34 | unsigned int old_status; | 34 | unsigned int old_status; |
35 | int tx_irq; | ||
36 | int rx_irq; | ||
35 | int status_irq; | 37 | int status_irq; |
36 | #ifndef BFIN_UART_BF54X_STYLE | 38 | #ifndef BFIN_UART_BF54X_STYLE |
37 | unsigned int lsr; | 39 | unsigned int lsr; |
diff --git a/arch/blackfin/mach-bf518/boards/ezbrd.c b/arch/blackfin/mach-bf518/boards/ezbrd.c index 1082e49f7a9f..d1c0c0cff3ef 100644 --- a/arch/blackfin/mach-bf518/boards/ezbrd.c +++ b/arch/blackfin/mach-bf518/boards/ezbrd.c | |||
@@ -373,8 +373,13 @@ static struct resource bfin_uart0_resources[] = { | |||
373 | .flags = IORESOURCE_MEM, | 373 | .flags = IORESOURCE_MEM, |
374 | }, | 374 | }, |
375 | { | 375 | { |
376 | .start = IRQ_UART0_TX, | ||
377 | .end = IRQ_UART0_TX, | ||
378 | .flags = IORESOURCE_IRQ, | ||
379 | }, | ||
380 | { | ||
376 | .start = IRQ_UART0_RX, | 381 | .start = IRQ_UART0_RX, |
377 | .end = IRQ_UART0_RX+1, | 382 | .end = IRQ_UART0_RX, |
378 | .flags = IORESOURCE_IRQ, | 383 | .flags = IORESOURCE_IRQ, |
379 | }, | 384 | }, |
380 | { | 385 | { |
@@ -416,8 +421,13 @@ static struct resource bfin_uart1_resources[] = { | |||
416 | .flags = IORESOURCE_MEM, | 421 | .flags = IORESOURCE_MEM, |
417 | }, | 422 | }, |
418 | { | 423 | { |
424 | .start = IRQ_UART1_TX, | ||
425 | .end = IRQ_UART1_TX, | ||
426 | .flags = IORESOURCE_IRQ, | ||
427 | }, | ||
428 | { | ||
419 | .start = IRQ_UART1_RX, | 429 | .start = IRQ_UART1_RX, |
420 | .end = IRQ_UART1_RX+1, | 430 | .end = IRQ_UART1_RX, |
421 | .flags = IORESOURCE_IRQ, | 431 | .flags = IORESOURCE_IRQ, |
422 | }, | 432 | }, |
423 | { | 433 | { |
diff --git a/arch/blackfin/mach-bf518/boards/tcm-bf518.c b/arch/blackfin/mach-bf518/boards/tcm-bf518.c index 55c127908815..5470bf89e52e 100644 --- a/arch/blackfin/mach-bf518/boards/tcm-bf518.c +++ b/arch/blackfin/mach-bf518/boards/tcm-bf518.c | |||
@@ -309,8 +309,13 @@ static struct resource bfin_uart0_resources[] = { | |||
309 | .flags = IORESOURCE_MEM, | 309 | .flags = IORESOURCE_MEM, |
310 | }, | 310 | }, |
311 | { | 311 | { |
312 | .start = IRQ_UART0_TX, | ||
313 | .end = IRQ_UART0_TX, | ||
314 | .flags = IORESOURCE_IRQ, | ||
315 | }, | ||
316 | { | ||
312 | .start = IRQ_UART0_RX, | 317 | .start = IRQ_UART0_RX, |
313 | .end = IRQ_UART0_RX+1, | 318 | .end = IRQ_UART0_RX, |
314 | .flags = IORESOURCE_IRQ, | 319 | .flags = IORESOURCE_IRQ, |
315 | }, | 320 | }, |
316 | { | 321 | { |
@@ -352,8 +357,13 @@ static struct resource bfin_uart1_resources[] = { | |||
352 | .flags = IORESOURCE_MEM, | 357 | .flags = IORESOURCE_MEM, |
353 | }, | 358 | }, |
354 | { | 359 | { |
360 | .start = IRQ_UART1_TX, | ||
361 | .end = IRQ_UART1_TX, | ||
362 | .flags = IORESOURCE_IRQ, | ||
363 | }, | ||
364 | { | ||
355 | .start = IRQ_UART1_RX, | 365 | .start = IRQ_UART1_RX, |
356 | .end = IRQ_UART1_RX+1, | 366 | .end = IRQ_UART1_RX, |
357 | .flags = IORESOURCE_IRQ, | 367 | .flags = IORESOURCE_IRQ, |
358 | }, | 368 | }, |
359 | { | 369 | { |
diff --git a/arch/blackfin/mach-bf527/boards/ad7160eval.c b/arch/blackfin/mach-bf527/boards/ad7160eval.c index 8d65d476f118..5bc6938157ad 100644 --- a/arch/blackfin/mach-bf527/boards/ad7160eval.c +++ b/arch/blackfin/mach-bf527/boards/ad7160eval.c | |||
@@ -381,8 +381,13 @@ static struct resource bfin_uart0_resources[] = { | |||
381 | .flags = IORESOURCE_MEM, | 381 | .flags = IORESOURCE_MEM, |
382 | }, | 382 | }, |
383 | { | 383 | { |
384 | .start = IRQ_UART0_TX, | ||
385 | .end = IRQ_UART0_TX, | ||
386 | .flags = IORESOURCE_IRQ, | ||
387 | }, | ||
388 | { | ||
384 | .start = IRQ_UART0_RX, | 389 | .start = IRQ_UART0_RX, |
385 | .end = IRQ_UART0_RX+1, | 390 | .end = IRQ_UART0_RX, |
386 | .flags = IORESOURCE_IRQ, | 391 | .flags = IORESOURCE_IRQ, |
387 | }, | 392 | }, |
388 | { | 393 | { |
@@ -424,8 +429,13 @@ static struct resource bfin_uart1_resources[] = { | |||
424 | .flags = IORESOURCE_MEM, | 429 | .flags = IORESOURCE_MEM, |
425 | }, | 430 | }, |
426 | { | 431 | { |
432 | .start = IRQ_UART1_TX, | ||
433 | .end = IRQ_UART1_TX, | ||
434 | .flags = IORESOURCE_IRQ, | ||
435 | }, | ||
436 | { | ||
427 | .start = IRQ_UART1_RX, | 437 | .start = IRQ_UART1_RX, |
428 | .end = IRQ_UART1_RX+1, | 438 | .end = IRQ_UART1_RX, |
429 | .flags = IORESOURCE_IRQ, | 439 | .flags = IORESOURCE_IRQ, |
430 | }, | 440 | }, |
431 | { | 441 | { |
diff --git a/arch/blackfin/mach-bf527/boards/cm_bf527.c b/arch/blackfin/mach-bf527/boards/cm_bf527.c index 6410fc1af8ed..cd289698b4dd 100644 --- a/arch/blackfin/mach-bf527/boards/cm_bf527.c +++ b/arch/blackfin/mach-bf527/boards/cm_bf527.c | |||
@@ -8,6 +8,7 @@ | |||
8 | */ | 8 | */ |
9 | 9 | ||
10 | #include <linux/device.h> | 10 | #include <linux/device.h> |
11 | #include <linux/export.h> | ||
11 | #include <linux/platform_device.h> | 12 | #include <linux/platform_device.h> |
12 | #include <linux/mtd/mtd.h> | 13 | #include <linux/mtd/mtd.h> |
13 | #include <linux/mtd/partitions.h> | 14 | #include <linux/mtd/partitions.h> |
@@ -539,8 +540,13 @@ static struct resource bfin_uart0_resources[] = { | |||
539 | .flags = IORESOURCE_MEM, | 540 | .flags = IORESOURCE_MEM, |
540 | }, | 541 | }, |
541 | { | 542 | { |
543 | .start = IRQ_UART0_TX, | ||
544 | .end = IRQ_UART0_TX, | ||
545 | .flags = IORESOURCE_IRQ, | ||
546 | }, | ||
547 | { | ||
542 | .start = IRQ_UART0_RX, | 548 | .start = IRQ_UART0_RX, |
543 | .end = IRQ_UART0_RX+1, | 549 | .end = IRQ_UART0_RX, |
544 | .flags = IORESOURCE_IRQ, | 550 | .flags = IORESOURCE_IRQ, |
545 | }, | 551 | }, |
546 | { | 552 | { |
@@ -582,8 +588,13 @@ static struct resource bfin_uart1_resources[] = { | |||
582 | .flags = IORESOURCE_MEM, | 588 | .flags = IORESOURCE_MEM, |
583 | }, | 589 | }, |
584 | { | 590 | { |
591 | .start = IRQ_UART1_TX, | ||
592 | .end = IRQ_UART1_TX, | ||
593 | .flags = IORESOURCE_IRQ, | ||
594 | }, | ||
595 | { | ||
585 | .start = IRQ_UART1_RX, | 596 | .start = IRQ_UART1_RX, |
586 | .end = IRQ_UART1_RX+1, | 597 | .end = IRQ_UART1_RX, |
587 | .flags = IORESOURCE_IRQ, | 598 | .flags = IORESOURCE_IRQ, |
588 | }, | 599 | }, |
589 | { | 600 | { |
@@ -801,7 +812,6 @@ static struct platform_device bfin_sport1_uart_device = { | |||
801 | #if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE) | 812 | #if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE) |
802 | #include <linux/input.h> | 813 | #include <linux/input.h> |
803 | #include <linux/gpio_keys.h> | 814 | #include <linux/gpio_keys.h> |
804 | #include <linux/export.h> | ||
805 | 815 | ||
806 | static struct gpio_keys_button bfin_gpio_keys_table[] = { | 816 | static struct gpio_keys_button bfin_gpio_keys_table[] = { |
807 | {BTN_0, GPIO_PF14, 1, "gpio-keys: BTN0"}, | 817 | {BTN_0, GPIO_PF14, 1, "gpio-keys: BTN0"}, |
diff --git a/arch/blackfin/mach-bf527/boards/ezbrd.c b/arch/blackfin/mach-bf527/boards/ezbrd.c index 64f7278aba53..9f792eafd1cc 100644 --- a/arch/blackfin/mach-bf527/boards/ezbrd.c +++ b/arch/blackfin/mach-bf527/boards/ezbrd.c | |||
@@ -7,6 +7,7 @@ | |||
7 | */ | 7 | */ |
8 | 8 | ||
9 | #include <linux/device.h> | 9 | #include <linux/device.h> |
10 | #include <linux/export.h> | ||
10 | #include <linux/platform_device.h> | 11 | #include <linux/platform_device.h> |
11 | #include <linux/mtd/mtd.h> | 12 | #include <linux/mtd/mtd.h> |
12 | #include <linux/mtd/partitions.h> | 13 | #include <linux/mtd/partitions.h> |
@@ -417,8 +418,13 @@ static struct resource bfin_uart0_resources[] = { | |||
417 | .flags = IORESOURCE_MEM, | 418 | .flags = IORESOURCE_MEM, |
418 | }, | 419 | }, |
419 | { | 420 | { |
421 | .start = IRQ_UART0_TX, | ||
422 | .end = IRQ_UART0_TX, | ||
423 | .flags = IORESOURCE_IRQ, | ||
424 | }, | ||
425 | { | ||
420 | .start = IRQ_UART0_RX, | 426 | .start = IRQ_UART0_RX, |
421 | .end = IRQ_UART0_RX+1, | 427 | .end = IRQ_UART0_RX, |
422 | .flags = IORESOURCE_IRQ, | 428 | .flags = IORESOURCE_IRQ, |
423 | }, | 429 | }, |
424 | { | 430 | { |
@@ -460,8 +466,13 @@ static struct resource bfin_uart1_resources[] = { | |||
460 | .flags = IORESOURCE_MEM, | 466 | .flags = IORESOURCE_MEM, |
461 | }, | 467 | }, |
462 | { | 468 | { |
469 | .start = IRQ_UART1_TX, | ||
470 | .end = IRQ_UART1_TX, | ||
471 | .flags = IORESOURCE_IRQ, | ||
472 | }, | ||
473 | { | ||
463 | .start = IRQ_UART1_RX, | 474 | .start = IRQ_UART1_RX, |
464 | .end = IRQ_UART1_RX+1, | 475 | .end = IRQ_UART1_RX, |
465 | .flags = IORESOURCE_IRQ, | 476 | .flags = IORESOURCE_IRQ, |
466 | }, | 477 | }, |
467 | { | 478 | { |
@@ -674,7 +685,6 @@ static struct platform_device bfin_sport1_uart_device = { | |||
674 | #if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE) | 685 | #if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE) |
675 | #include <linux/input.h> | 686 | #include <linux/input.h> |
676 | #include <linux/gpio_keys.h> | 687 | #include <linux/gpio_keys.h> |
677 | #include <linux/export.h> | ||
678 | 688 | ||
679 | static struct gpio_keys_button bfin_gpio_keys_table[] = { | 689 | static struct gpio_keys_button bfin_gpio_keys_table[] = { |
680 | {BTN_0, GPIO_PG0, 1, "gpio-keys: BTN0"}, | 690 | {BTN_0, GPIO_PG0, 1, "gpio-keys: BTN0"}, |
diff --git a/arch/blackfin/mach-bf527/boards/ezkit.c b/arch/blackfin/mach-bf527/boards/ezkit.c index e4c6a122b66c..3ecafff5d2ef 100644 --- a/arch/blackfin/mach-bf527/boards/ezkit.c +++ b/arch/blackfin/mach-bf527/boards/ezkit.c | |||
@@ -711,8 +711,13 @@ static struct resource bfin_uart0_resources[] = { | |||
711 | .flags = IORESOURCE_MEM, | 711 | .flags = IORESOURCE_MEM, |
712 | }, | 712 | }, |
713 | { | 713 | { |
714 | .start = IRQ_UART0_TX, | ||
715 | .end = IRQ_UART0_TX, | ||
716 | .flags = IORESOURCE_IRQ, | ||
717 | }, | ||
718 | { | ||
714 | .start = IRQ_UART0_RX, | 719 | .start = IRQ_UART0_RX, |
715 | .end = IRQ_UART0_RX+1, | 720 | .end = IRQ_UART0_RX, |
716 | .flags = IORESOURCE_IRQ, | 721 | .flags = IORESOURCE_IRQ, |
717 | }, | 722 | }, |
718 | { | 723 | { |
@@ -754,8 +759,13 @@ static struct resource bfin_uart1_resources[] = { | |||
754 | .flags = IORESOURCE_MEM, | 759 | .flags = IORESOURCE_MEM, |
755 | }, | 760 | }, |
756 | { | 761 | { |
762 | .start = IRQ_UART1_TX, | ||
763 | .end = IRQ_UART1_TX, | ||
764 | .flags = IORESOURCE_IRQ, | ||
765 | }, | ||
766 | { | ||
757 | .start = IRQ_UART1_RX, | 767 | .start = IRQ_UART1_RX, |
758 | .end = IRQ_UART1_RX+1, | 768 | .end = IRQ_UART1_RX, |
759 | .flags = IORESOURCE_IRQ, | 769 | .flags = IORESOURCE_IRQ, |
760 | }, | 770 | }, |
761 | { | 771 | { |
diff --git a/arch/blackfin/mach-bf527/boards/tll6527m.c b/arch/blackfin/mach-bf527/boards/tll6527m.c index 76dbc03a8d4d..3a92c4318d2d 100644 --- a/arch/blackfin/mach-bf527/boards/tll6527m.c +++ b/arch/blackfin/mach-bf527/boards/tll6527m.c | |||
@@ -496,8 +496,13 @@ static struct resource bfin_uart0_resources[] = { | |||
496 | .flags = IORESOURCE_MEM, | 496 | .flags = IORESOURCE_MEM, |
497 | }, | 497 | }, |
498 | { | 498 | { |
499 | .start = IRQ_UART0_TX, | ||
500 | .end = IRQ_UART0_TX, | ||
501 | .flags = IORESOURCE_IRQ, | ||
502 | }, | ||
503 | { | ||
499 | .start = IRQ_UART0_RX, | 504 | .start = IRQ_UART0_RX, |
500 | .end = IRQ_UART0_RX+1, | 505 | .end = IRQ_UART0_RX, |
501 | .flags = IORESOURCE_IRQ, | 506 | .flags = IORESOURCE_IRQ, |
502 | }, | 507 | }, |
503 | { | 508 | { |
@@ -540,8 +545,13 @@ static struct resource bfin_uart1_resources[] = { | |||
540 | .flags = IORESOURCE_MEM, | 545 | .flags = IORESOURCE_MEM, |
541 | }, | 546 | }, |
542 | { | 547 | { |
548 | .start = IRQ_UART1_TX, | ||
549 | .end = IRQ_UART1_TX, | ||
550 | .flags = IORESOURCE_IRQ, | ||
551 | }, | ||
552 | { | ||
543 | .start = IRQ_UART1_RX, | 553 | .start = IRQ_UART1_RX, |
544 | .end = IRQ_UART1_RX+1, | 554 | .end = IRQ_UART1_RX, |
545 | .flags = IORESOURCE_IRQ, | 555 | .flags = IORESOURCE_IRQ, |
546 | }, | 556 | }, |
547 | { | 557 | { |
diff --git a/arch/blackfin/mach-bf533/boards/H8606.c b/arch/blackfin/mach-bf533/boards/H8606.c index 5da5787fc4ef..47cadd316e76 100644 --- a/arch/blackfin/mach-bf533/boards/H8606.c +++ b/arch/blackfin/mach-bf533/boards/H8606.c | |||
@@ -238,8 +238,13 @@ static struct resource bfin_uart0_resources[] = { | |||
238 | .flags = IORESOURCE_MEM, | 238 | .flags = IORESOURCE_MEM, |
239 | }, | 239 | }, |
240 | { | 240 | { |
241 | .start = IRQ_UART0_TX, | ||
242 | .end = IRQ_UART0_TX, | ||
243 | .flags = IORESOURCE_IRQ, | ||
244 | }, | ||
245 | { | ||
241 | .start = IRQ_UART0_RX, | 246 | .start = IRQ_UART0_RX, |
242 | .end = IRQ_UART0_RX + 1, | 247 | .end = IRQ_UART0_RX, |
243 | .flags = IORESOURCE_IRQ, | 248 | .flags = IORESOURCE_IRQ, |
244 | }, | 249 | }, |
245 | { | 250 | { |
diff --git a/arch/blackfin/mach-bf533/boards/blackstamp.c b/arch/blackfin/mach-bf533/boards/blackstamp.c index b0ec825fb4ec..18817d57c7a1 100644 --- a/arch/blackfin/mach-bf533/boards/blackstamp.c +++ b/arch/blackfin/mach-bf533/boards/blackstamp.c | |||
@@ -193,8 +193,13 @@ static struct resource bfin_uart0_resources[] = { | |||
193 | .flags = IORESOURCE_MEM, | 193 | .flags = IORESOURCE_MEM, |
194 | }, | 194 | }, |
195 | { | 195 | { |
196 | .start = IRQ_UART0_TX, | ||
197 | .end = IRQ_UART0_TX, | ||
198 | .flags = IORESOURCE_IRQ, | ||
199 | }, | ||
200 | { | ||
196 | .start = IRQ_UART0_RX, | 201 | .start = IRQ_UART0_RX, |
197 | .end = IRQ_UART0_RX + 1, | 202 | .end = IRQ_UART0_RX, |
198 | .flags = IORESOURCE_IRQ, | 203 | .flags = IORESOURCE_IRQ, |
199 | }, | 204 | }, |
200 | { | 205 | { |
diff --git a/arch/blackfin/mach-bf533/boards/cm_bf533.c b/arch/blackfin/mach-bf533/boards/cm_bf533.c index 14f54a31e74c..2c8f30ef6a7b 100644 --- a/arch/blackfin/mach-bf533/boards/cm_bf533.c +++ b/arch/blackfin/mach-bf533/boards/cm_bf533.c | |||
@@ -221,8 +221,13 @@ static struct resource bfin_uart0_resources[] = { | |||
221 | .flags = IORESOURCE_MEM, | 221 | .flags = IORESOURCE_MEM, |
222 | }, | 222 | }, |
223 | { | 223 | { |
224 | .start = IRQ_UART0_TX, | ||
225 | .end = IRQ_UART0_TX, | ||
226 | .flags = IORESOURCE_IRQ, | ||
227 | }, | ||
228 | { | ||
224 | .start = IRQ_UART0_RX, | 229 | .start = IRQ_UART0_RX, |
225 | .end = IRQ_UART0_RX + 1, | 230 | .end = IRQ_UART0_RX, |
226 | .flags = IORESOURCE_IRQ, | 231 | .flags = IORESOURCE_IRQ, |
227 | }, | 232 | }, |
228 | { | 233 | { |
diff --git a/arch/blackfin/mach-bf533/boards/ezkit.c b/arch/blackfin/mach-bf533/boards/ezkit.c index ecd2801f050d..144556e14499 100644 --- a/arch/blackfin/mach-bf533/boards/ezkit.c +++ b/arch/blackfin/mach-bf533/boards/ezkit.c | |||
@@ -292,8 +292,13 @@ static struct resource bfin_uart0_resources[] = { | |||
292 | .flags = IORESOURCE_MEM, | 292 | .flags = IORESOURCE_MEM, |
293 | }, | 293 | }, |
294 | { | 294 | { |
295 | .start = IRQ_UART0_TX, | ||
296 | .end = IRQ_UART0_TX, | ||
297 | .flags = IORESOURCE_IRQ, | ||
298 | }, | ||
299 | { | ||
295 | .start = IRQ_UART0_RX, | 300 | .start = IRQ_UART0_RX, |
296 | .end = IRQ_UART0_RX + 1, | 301 | .end = IRQ_UART0_RX, |
297 | .flags = IORESOURCE_IRQ, | 302 | .flags = IORESOURCE_IRQ, |
298 | }, | 303 | }, |
299 | { | 304 | { |
diff --git a/arch/blackfin/mach-bf533/boards/ip0x.c b/arch/blackfin/mach-bf533/boards/ip0x.c index fbee77fa9211..b597d4e50d58 100644 --- a/arch/blackfin/mach-bf533/boards/ip0x.c +++ b/arch/blackfin/mach-bf533/boards/ip0x.c | |||
@@ -151,8 +151,13 @@ static struct resource bfin_uart0_resources[] = { | |||
151 | .flags = IORESOURCE_MEM, | 151 | .flags = IORESOURCE_MEM, |
152 | }, | 152 | }, |
153 | { | 153 | { |
154 | .start = IRQ_UART0_TX, | ||
155 | .end = IRQ_UART0_TX, | ||
156 | .flags = IORESOURCE_IRQ, | ||
157 | }, | ||
158 | { | ||
154 | .start = IRQ_UART0_RX, | 159 | .start = IRQ_UART0_RX, |
155 | .end = IRQ_UART0_RX + 1, | 160 | .end = IRQ_UART0_RX, |
156 | .flags = IORESOURCE_IRQ, | 161 | .flags = IORESOURCE_IRQ, |
157 | }, | 162 | }, |
158 | { | 163 | { |
diff --git a/arch/blackfin/mach-bf533/boards/stamp.c b/arch/blackfin/mach-bf533/boards/stamp.c index 964a8e5f79b4..2afd02e14bd1 100644 --- a/arch/blackfin/mach-bf533/boards/stamp.c +++ b/arch/blackfin/mach-bf533/boards/stamp.c | |||
@@ -298,8 +298,13 @@ static struct resource bfin_uart0_resources[] = { | |||
298 | .flags = IORESOURCE_MEM, | 298 | .flags = IORESOURCE_MEM, |
299 | }, | 299 | }, |
300 | { | 300 | { |
301 | .start = IRQ_UART0_TX, | ||
302 | .end = IRQ_UART0_TX, | ||
303 | .flags = IORESOURCE_IRQ, | ||
304 | }, | ||
305 | { | ||
301 | .start = IRQ_UART0_RX, | 306 | .start = IRQ_UART0_RX, |
302 | .end = IRQ_UART0_RX + 1, | 307 | .end = IRQ_UART0_RX, |
303 | .flags = IORESOURCE_IRQ, | 308 | .flags = IORESOURCE_IRQ, |
304 | }, | 309 | }, |
305 | { | 310 | { |
diff --git a/arch/blackfin/mach-bf537/boards/cm_bf537e.c b/arch/blackfin/mach-bf537/boards/cm_bf537e.c index 1471c51ea697..604a430038e1 100644 --- a/arch/blackfin/mach-bf537/boards/cm_bf537e.c +++ b/arch/blackfin/mach-bf537/boards/cm_bf537e.c | |||
@@ -8,6 +8,7 @@ | |||
8 | */ | 8 | */ |
9 | 9 | ||
10 | #include <linux/device.h> | 10 | #include <linux/device.h> |
11 | #include <linux/export.h> | ||
11 | #include <linux/etherdevice.h> | 12 | #include <linux/etherdevice.h> |
12 | #include <linux/platform_device.h> | 13 | #include <linux/platform_device.h> |
13 | #include <linux/mtd/mtd.h> | 14 | #include <linux/mtd/mtd.h> |
@@ -305,8 +306,13 @@ static struct resource bfin_uart0_resources[] = { | |||
305 | .flags = IORESOURCE_MEM, | 306 | .flags = IORESOURCE_MEM, |
306 | }, | 307 | }, |
307 | { | 308 | { |
309 | .start = IRQ_UART0_TX, | ||
310 | .end = IRQ_UART0_TX, | ||
311 | .flags = IORESOURCE_IRQ, | ||
312 | }, | ||
313 | { | ||
308 | .start = IRQ_UART0_RX, | 314 | .start = IRQ_UART0_RX, |
309 | .end = IRQ_UART0_RX+1, | 315 | .end = IRQ_UART0_RX, |
310 | .flags = IORESOURCE_IRQ, | 316 | .flags = IORESOURCE_IRQ, |
311 | }, | 317 | }, |
312 | { | 318 | { |
@@ -366,8 +372,13 @@ static struct resource bfin_uart1_resources[] = { | |||
366 | .flags = IORESOURCE_MEM, | 372 | .flags = IORESOURCE_MEM, |
367 | }, | 373 | }, |
368 | { | 374 | { |
375 | .start = IRQ_UART1_TX, | ||
376 | .end = IRQ_UART1_TX, | ||
377 | .flags = IORESOURCE_IRQ, | ||
378 | }, | ||
379 | { | ||
369 | .start = IRQ_UART1_RX, | 380 | .start = IRQ_UART1_RX, |
370 | .end = IRQ_UART1_RX+1, | 381 | .end = IRQ_UART1_RX, |
371 | .flags = IORESOURCE_IRQ, | 382 | .flags = IORESOURCE_IRQ, |
372 | }, | 383 | }, |
373 | { | 384 | { |
@@ -569,7 +580,6 @@ static struct platform_device bfin_sport1_uart_device = { | |||
569 | 580 | ||
570 | #if defined(CONFIG_BFIN_MAC) || defined(CONFIG_BFIN_MAC_MODULE) | 581 | #if defined(CONFIG_BFIN_MAC) || defined(CONFIG_BFIN_MAC_MODULE) |
571 | #include <linux/bfin_mac.h> | 582 | #include <linux/bfin_mac.h> |
572 | #include <linux/export.h> | ||
573 | static const unsigned short bfin_mac_peripherals[] = P_MII0; | 583 | static const unsigned short bfin_mac_peripherals[] = P_MII0; |
574 | 584 | ||
575 | static struct bfin_phydev_platform_data bfin_phydev_data[] = { | 585 | static struct bfin_phydev_platform_data bfin_phydev_data[] = { |
diff --git a/arch/blackfin/mach-bf537/boards/cm_bf537u.c b/arch/blackfin/mach-bf537/boards/cm_bf537u.c index 47cf37de33ba..d916b46a44fe 100644 --- a/arch/blackfin/mach-bf537/boards/cm_bf537u.c +++ b/arch/blackfin/mach-bf537/boards/cm_bf537u.c | |||
@@ -9,6 +9,7 @@ | |||
9 | 9 | ||
10 | #include <linux/device.h> | 10 | #include <linux/device.h> |
11 | #include <linux/etherdevice.h> | 11 | #include <linux/etherdevice.h> |
12 | #include <linux/export.h> | ||
12 | #include <linux/platform_device.h> | 13 | #include <linux/platform_device.h> |
13 | #include <linux/mtd/mtd.h> | 14 | #include <linux/mtd/mtd.h> |
14 | #include <linux/mtd/partitions.h> | 15 | #include <linux/mtd/partitions.h> |
@@ -306,8 +307,13 @@ static struct resource bfin_uart0_resources[] = { | |||
306 | .flags = IORESOURCE_MEM, | 307 | .flags = IORESOURCE_MEM, |
307 | }, | 308 | }, |
308 | { | 309 | { |
310 | .start = IRQ_UART0_TX, | ||
311 | .end = IRQ_UART0_TX, | ||
312 | .flags = IORESOURCE_IRQ, | ||
313 | }, | ||
314 | { | ||
309 | .start = IRQ_UART0_RX, | 315 | .start = IRQ_UART0_RX, |
310 | .end = IRQ_UART0_RX+1, | 316 | .end = IRQ_UART0_RX, |
311 | .flags = IORESOURCE_IRQ, | 317 | .flags = IORESOURCE_IRQ, |
312 | }, | 318 | }, |
313 | { | 319 | { |
@@ -349,8 +355,13 @@ static struct resource bfin_uart1_resources[] = { | |||
349 | .flags = IORESOURCE_MEM, | 355 | .flags = IORESOURCE_MEM, |
350 | }, | 356 | }, |
351 | { | 357 | { |
358 | .start = IRQ_UART1_TX, | ||
359 | .end = IRQ_UART1_TX, | ||
360 | .flags = IORESOURCE_IRQ, | ||
361 | }, | ||
362 | { | ||
352 | .start = IRQ_UART1_RX, | 363 | .start = IRQ_UART1_RX, |
353 | .end = IRQ_UART1_RX+1, | 364 | .end = IRQ_UART1_RX, |
354 | .flags = IORESOURCE_IRQ, | 365 | .flags = IORESOURCE_IRQ, |
355 | }, | 366 | }, |
356 | { | 367 | { |
@@ -534,7 +545,6 @@ static struct platform_device bfin_sport1_uart_device = { | |||
534 | 545 | ||
535 | #if defined(CONFIG_BFIN_MAC) || defined(CONFIG_BFIN_MAC_MODULE) | 546 | #if defined(CONFIG_BFIN_MAC) || defined(CONFIG_BFIN_MAC_MODULE) |
536 | #include <linux/bfin_mac.h> | 547 | #include <linux/bfin_mac.h> |
537 | #include <linux/export.h> | ||
538 | static const unsigned short bfin_mac_peripherals[] = P_MII0; | 548 | static const unsigned short bfin_mac_peripherals[] = P_MII0; |
539 | 549 | ||
540 | static struct bfin_phydev_platform_data bfin_phydev_data[] = { | 550 | static struct bfin_phydev_platform_data bfin_phydev_data[] = { |
diff --git a/arch/blackfin/mach-bf537/boards/dnp5370.c b/arch/blackfin/mach-bf537/boards/dnp5370.c index 33e69e427e98..5f307228be63 100644 --- a/arch/blackfin/mach-bf537/boards/dnp5370.c +++ b/arch/blackfin/mach-bf537/boards/dnp5370.c | |||
@@ -12,6 +12,7 @@ | |||
12 | */ | 12 | */ |
13 | 13 | ||
14 | #include <linux/device.h> | 14 | #include <linux/device.h> |
15 | #include <linux/export.h> | ||
15 | #include <linux/kernel.h> | 16 | #include <linux/kernel.h> |
16 | #include <linux/platform_device.h> | 17 | #include <linux/platform_device.h> |
17 | #include <linux/io.h> | 18 | #include <linux/io.h> |
@@ -49,7 +50,6 @@ static struct platform_device rtc_device = { | |||
49 | 50 | ||
50 | #if defined(CONFIG_BFIN_MAC) || defined(CONFIG_BFIN_MAC_MODULE) | 51 | #if defined(CONFIG_BFIN_MAC) || defined(CONFIG_BFIN_MAC_MODULE) |
51 | #include <linux/bfin_mac.h> | 52 | #include <linux/bfin_mac.h> |
52 | #include <linux/export.h> | ||
53 | static const unsigned short bfin_mac_peripherals[] = P_RMII0; | 53 | static const unsigned short bfin_mac_peripherals[] = P_RMII0; |
54 | 54 | ||
55 | static struct bfin_phydev_platform_data bfin_phydev_data[] = { | 55 | static struct bfin_phydev_platform_data bfin_phydev_data[] = { |
@@ -237,8 +237,13 @@ static struct resource bfin_uart0_resources[] = { | |||
237 | .flags = IORESOURCE_MEM, | 237 | .flags = IORESOURCE_MEM, |
238 | }, | 238 | }, |
239 | { | 239 | { |
240 | .start = IRQ_UART0_TX, | ||
241 | .end = IRQ_UART0_TX, | ||
242 | .flags = IORESOURCE_IRQ, | ||
243 | }, | ||
244 | { | ||
240 | .start = IRQ_UART0_RX, | 245 | .start = IRQ_UART0_RX, |
241 | .end = IRQ_UART0_RX+1, | 246 | .end = IRQ_UART0_RX, |
242 | .flags = IORESOURCE_IRQ, | 247 | .flags = IORESOURCE_IRQ, |
243 | }, | 248 | }, |
244 | { | 249 | { |
@@ -281,8 +286,13 @@ static struct resource bfin_uart1_resources[] = { | |||
281 | .flags = IORESOURCE_MEM, | 286 | .flags = IORESOURCE_MEM, |
282 | }, | 287 | }, |
283 | { | 288 | { |
289 | .start = IRQ_UART1_TX, | ||
290 | .end = IRQ_UART1_TX, | ||
291 | .flags = IORESOURCE_IRQ, | ||
292 | }, | ||
293 | { | ||
284 | .start = IRQ_UART1_RX, | 294 | .start = IRQ_UART1_RX, |
285 | .end = IRQ_UART1_RX+1, | 295 | .end = IRQ_UART1_RX, |
286 | .flags = IORESOURCE_IRQ, | 296 | .flags = IORESOURCE_IRQ, |
287 | }, | 297 | }, |
288 | { | 298 | { |
diff --git a/arch/blackfin/mach-bf537/boards/minotaur.c b/arch/blackfin/mach-bf537/boards/minotaur.c index c62f9dccd9f7..3901dd093b90 100644 --- a/arch/blackfin/mach-bf537/boards/minotaur.c +++ b/arch/blackfin/mach-bf537/boards/minotaur.c | |||
@@ -240,8 +240,13 @@ static struct resource bfin_uart0_resources[] = { | |||
240 | .flags = IORESOURCE_MEM, | 240 | .flags = IORESOURCE_MEM, |
241 | }, | 241 | }, |
242 | { | 242 | { |
243 | .start = IRQ_UART0_TX, | ||
244 | .end = IRQ_UART0_TX, | ||
245 | .flags = IORESOURCE_IRQ, | ||
246 | }, | ||
247 | { | ||
243 | .start = IRQ_UART0_RX, | 248 | .start = IRQ_UART0_RX, |
244 | .end = IRQ_UART0_RX+1, | 249 | .end = IRQ_UART0_RX, |
245 | .flags = IORESOURCE_IRQ, | 250 | .flags = IORESOURCE_IRQ, |
246 | }, | 251 | }, |
247 | { | 252 | { |
@@ -283,8 +288,13 @@ static struct resource bfin_uart1_resources[] = { | |||
283 | .flags = IORESOURCE_MEM, | 288 | .flags = IORESOURCE_MEM, |
284 | }, | 289 | }, |
285 | { | 290 | { |
291 | .start = IRQ_UART1_TX, | ||
292 | .end = IRQ_UART1_TX, | ||
293 | .flags = IORESOURCE_IRQ, | ||
294 | }, | ||
295 | { | ||
286 | .start = IRQ_UART1_RX, | 296 | .start = IRQ_UART1_RX, |
287 | .end = IRQ_UART1_RX+1, | 297 | .end = IRQ_UART1_RX, |
288 | .flags = IORESOURCE_IRQ, | 298 | .flags = IORESOURCE_IRQ, |
289 | }, | 299 | }, |
290 | { | 300 | { |
diff --git a/arch/blackfin/mach-bf537/boards/pnav10.c b/arch/blackfin/mach-bf537/boards/pnav10.c index 3099e91114fc..aebd31c845f0 100644 --- a/arch/blackfin/mach-bf537/boards/pnav10.c +++ b/arch/blackfin/mach-bf537/boards/pnav10.c | |||
@@ -8,6 +8,7 @@ | |||
8 | 8 | ||
9 | #include <linux/device.h> | 9 | #include <linux/device.h> |
10 | #include <linux/etherdevice.h> | 10 | #include <linux/etherdevice.h> |
11 | #include <linux/export.h> | ||
11 | #include <linux/platform_device.h> | 12 | #include <linux/platform_device.h> |
12 | #include <linux/mtd/mtd.h> | 13 | #include <linux/mtd/mtd.h> |
13 | #include <linux/mtd/partitions.h> | 14 | #include <linux/mtd/partitions.h> |
@@ -309,8 +310,13 @@ static struct resource bfin_uart0_resources[] = { | |||
309 | .flags = IORESOURCE_MEM, | 310 | .flags = IORESOURCE_MEM, |
310 | }, | 311 | }, |
311 | { | 312 | { |
313 | .start = IRQ_UART0_TX, | ||
314 | .end = IRQ_UART0_TX, | ||
315 | .flags = IORESOURCE_IRQ, | ||
316 | }, | ||
317 | { | ||
312 | .start = IRQ_UART0_RX, | 318 | .start = IRQ_UART0_RX, |
313 | .end = IRQ_UART0_RX+1, | 319 | .end = IRQ_UART0_RX, |
314 | .flags = IORESOURCE_IRQ, | 320 | .flags = IORESOURCE_IRQ, |
315 | }, | 321 | }, |
316 | { | 322 | { |
@@ -352,8 +358,13 @@ static struct resource bfin_uart1_resources[] = { | |||
352 | .flags = IORESOURCE_MEM, | 358 | .flags = IORESOURCE_MEM, |
353 | }, | 359 | }, |
354 | { | 360 | { |
361 | .start = IRQ_UART1_TX, | ||
362 | .end = IRQ_UART1_TX, | ||
363 | .flags = IORESOURCE_IRQ, | ||
364 | }, | ||
365 | { | ||
355 | .start = IRQ_UART1_RX, | 366 | .start = IRQ_UART1_RX, |
356 | .end = IRQ_UART1_RX+1, | 367 | .end = IRQ_UART1_RX, |
357 | .flags = IORESOURCE_IRQ, | 368 | .flags = IORESOURCE_IRQ, |
358 | }, | 369 | }, |
359 | { | 370 | { |
diff --git a/arch/blackfin/mach-bf537/boards/stamp.c b/arch/blackfin/mach-bf537/boards/stamp.c index 27f955db9976..7fbb0bbf8676 100644 --- a/arch/blackfin/mach-bf537/boards/stamp.c +++ b/arch/blackfin/mach-bf537/boards/stamp.c | |||
@@ -7,6 +7,7 @@ | |||
7 | */ | 7 | */ |
8 | 8 | ||
9 | #include <linux/device.h> | 9 | #include <linux/device.h> |
10 | #include <linux/export.h> | ||
10 | #include <linux/kernel.h> | 11 | #include <linux/kernel.h> |
11 | #include <linux/platform_device.h> | 12 | #include <linux/platform_device.h> |
12 | #include <linux/io.h> | 13 | #include <linux/io.h> |
@@ -1566,8 +1567,13 @@ static struct resource bfin_uart0_resources[] = { | |||
1566 | .flags = IORESOURCE_MEM, | 1567 | .flags = IORESOURCE_MEM, |
1567 | }, | 1568 | }, |
1568 | { | 1569 | { |
1570 | .start = IRQ_UART0_TX, | ||
1571 | .end = IRQ_UART0_TX, | ||
1572 | .flags = IORESOURCE_IRQ, | ||
1573 | }, | ||
1574 | { | ||
1569 | .start = IRQ_UART0_RX, | 1575 | .start = IRQ_UART0_RX, |
1570 | .end = IRQ_UART0_RX+1, | 1576 | .end = IRQ_UART0_RX, |
1571 | .flags = IORESOURCE_IRQ, | 1577 | .flags = IORESOURCE_IRQ, |
1572 | }, | 1578 | }, |
1573 | { | 1579 | { |
@@ -1621,8 +1627,13 @@ static struct resource bfin_uart1_resources[] = { | |||
1621 | .flags = IORESOURCE_MEM, | 1627 | .flags = IORESOURCE_MEM, |
1622 | }, | 1628 | }, |
1623 | { | 1629 | { |
1630 | .start = IRQ_UART1_TX, | ||
1631 | .end = IRQ_UART1_TX, | ||
1632 | .flags = IORESOURCE_IRQ, | ||
1633 | }, | ||
1634 | { | ||
1624 | .start = IRQ_UART1_RX, | 1635 | .start = IRQ_UART1_RX, |
1625 | .end = IRQ_UART1_RX+1, | 1636 | .end = IRQ_UART1_RX, |
1626 | .flags = IORESOURCE_IRQ, | 1637 | .flags = IORESOURCE_IRQ, |
1627 | }, | 1638 | }, |
1628 | { | 1639 | { |
@@ -1992,7 +2003,6 @@ static struct adp8870_backlight_platform_data adp8870_pdata = { | |||
1992 | 2003 | ||
1993 | #if defined(CONFIG_BACKLIGHT_ADP8860) || defined(CONFIG_BACKLIGHT_ADP8860_MODULE) | 2004 | #if defined(CONFIG_BACKLIGHT_ADP8860) || defined(CONFIG_BACKLIGHT_ADP8860_MODULE) |
1994 | #include <linux/i2c/adp8860.h> | 2005 | #include <linux/i2c/adp8860.h> |
1995 | #include <linux/export.h> | ||
1996 | static struct led_info adp8860_leds[] = { | 2006 | static struct led_info adp8860_leds[] = { |
1997 | { | 2007 | { |
1998 | .name = "adp8860-led7", | 2008 | .name = "adp8860-led7", |
diff --git a/arch/blackfin/mach-bf537/boards/tcm_bf537.c b/arch/blackfin/mach-bf537/boards/tcm_bf537.c index 841803038d6f..6917ce2fa55e 100644 --- a/arch/blackfin/mach-bf537/boards/tcm_bf537.c +++ b/arch/blackfin/mach-bf537/boards/tcm_bf537.c | |||
@@ -9,6 +9,7 @@ | |||
9 | 9 | ||
10 | #include <linux/device.h> | 10 | #include <linux/device.h> |
11 | #include <linux/etherdevice.h> | 11 | #include <linux/etherdevice.h> |
12 | #include <linux/export.h> | ||
12 | #include <linux/platform_device.h> | 13 | #include <linux/platform_device.h> |
13 | #include <linux/mtd/mtd.h> | 14 | #include <linux/mtd/mtd.h> |
14 | #include <linux/mtd/partitions.h> | 15 | #include <linux/mtd/partitions.h> |
@@ -306,8 +307,13 @@ static struct resource bfin_uart0_resources[] = { | |||
306 | .flags = IORESOURCE_MEM, | 307 | .flags = IORESOURCE_MEM, |
307 | }, | 308 | }, |
308 | { | 309 | { |
310 | .start = IRQ_UART0_TX, | ||
311 | .end = IRQ_UART0_TX, | ||
312 | .flags = IORESOURCE_IRQ, | ||
313 | }, | ||
314 | { | ||
309 | .start = IRQ_UART0_RX, | 315 | .start = IRQ_UART0_RX, |
310 | .end = IRQ_UART0_RX+1, | 316 | .end = IRQ_UART0_RX, |
311 | .flags = IORESOURCE_IRQ, | 317 | .flags = IORESOURCE_IRQ, |
312 | }, | 318 | }, |
313 | { | 319 | { |
@@ -349,8 +355,13 @@ static struct resource bfin_uart1_resources[] = { | |||
349 | .flags = IORESOURCE_MEM, | 355 | .flags = IORESOURCE_MEM, |
350 | }, | 356 | }, |
351 | { | 357 | { |
358 | .start = IRQ_UART1_TX, | ||
359 | .end = IRQ_UART1_TX, | ||
360 | .flags = IORESOURCE_IRQ, | ||
361 | }, | ||
362 | { | ||
352 | .start = IRQ_UART1_RX, | 363 | .start = IRQ_UART1_RX, |
353 | .end = IRQ_UART1_RX+1, | 364 | .end = IRQ_UART1_RX, |
354 | .flags = IORESOURCE_IRQ, | 365 | .flags = IORESOURCE_IRQ, |
355 | }, | 366 | }, |
356 | { | 367 | { |
@@ -536,7 +547,6 @@ static struct platform_device bfin_sport1_uart_device = { | |||
536 | 547 | ||
537 | #if defined(CONFIG_BFIN_MAC) || defined(CONFIG_BFIN_MAC_MODULE) | 548 | #if defined(CONFIG_BFIN_MAC) || defined(CONFIG_BFIN_MAC_MODULE) |
538 | #include <linux/bfin_mac.h> | 549 | #include <linux/bfin_mac.h> |
539 | #include <linux/export.h> | ||
540 | static const unsigned short bfin_mac_peripherals[] = P_MII0; | 550 | static const unsigned short bfin_mac_peripherals[] = P_MII0; |
541 | 551 | ||
542 | static struct bfin_phydev_platform_data bfin_phydev_data[] = { | 552 | static struct bfin_phydev_platform_data bfin_phydev_data[] = { |
diff --git a/arch/blackfin/mach-bf538/boards/ezkit.c b/arch/blackfin/mach-bf538/boards/ezkit.c index 629f3c333415..8356eb599f19 100644 --- a/arch/blackfin/mach-bf538/boards/ezkit.c +++ b/arch/blackfin/mach-bf538/boards/ezkit.c | |||
@@ -49,8 +49,13 @@ static struct resource bfin_uart0_resources[] = { | |||
49 | .flags = IORESOURCE_MEM, | 49 | .flags = IORESOURCE_MEM, |
50 | }, | 50 | }, |
51 | { | 51 | { |
52 | .start = IRQ_UART0_TX, | ||
53 | .end = IRQ_UART0_TX, | ||
54 | .flags = IORESOURCE_IRQ, | ||
55 | }, | ||
56 | { | ||
52 | .start = IRQ_UART0_RX, | 57 | .start = IRQ_UART0_RX, |
53 | .end = IRQ_UART0_RX+1, | 58 | .end = IRQ_UART0_RX, |
54 | .flags = IORESOURCE_IRQ, | 59 | .flags = IORESOURCE_IRQ, |
55 | }, | 60 | }, |
56 | { | 61 | { |
@@ -104,8 +109,13 @@ static struct resource bfin_uart1_resources[] = { | |||
104 | .flags = IORESOURCE_MEM, | 109 | .flags = IORESOURCE_MEM, |
105 | }, | 110 | }, |
106 | { | 111 | { |
112 | .start = IRQ_UART1_TX, | ||
113 | .end = IRQ_UART1_TX, | ||
114 | .flags = IORESOURCE_IRQ, | ||
115 | }, | ||
116 | { | ||
107 | .start = IRQ_UART1_RX, | 117 | .start = IRQ_UART1_RX, |
108 | .end = IRQ_UART1_RX+1, | 118 | .end = IRQ_UART1_RX, |
109 | .flags = IORESOURCE_IRQ, | 119 | .flags = IORESOURCE_IRQ, |
110 | }, | 120 | }, |
111 | { | 121 | { |
@@ -147,8 +157,13 @@ static struct resource bfin_uart2_resources[] = { | |||
147 | .flags = IORESOURCE_MEM, | 157 | .flags = IORESOURCE_MEM, |
148 | }, | 158 | }, |
149 | { | 159 | { |
160 | .start = IRQ_UART2_TX, | ||
161 | .end = IRQ_UART2_TX, | ||
162 | .flags = IORESOURCE_IRQ, | ||
163 | }, | ||
164 | { | ||
150 | .start = IRQ_UART2_RX, | 165 | .start = IRQ_UART2_RX, |
151 | .end = IRQ_UART2_RX+1, | 166 | .end = IRQ_UART2_RX, |
152 | .flags = IORESOURCE_IRQ, | 167 | .flags = IORESOURCE_IRQ, |
153 | }, | 168 | }, |
154 | { | 169 | { |
diff --git a/arch/blackfin/mach-bf548/boards/cm_bf548.c b/arch/blackfin/mach-bf548/boards/cm_bf548.c index 212b9e0a08c8..0350eacec21b 100644 --- a/arch/blackfin/mach-bf548/boards/cm_bf548.c +++ b/arch/blackfin/mach-bf548/boards/cm_bf548.c | |||
@@ -135,8 +135,13 @@ static struct resource bfin_uart0_resources[] = { | |||
135 | .flags = IORESOURCE_MEM, | 135 | .flags = IORESOURCE_MEM, |
136 | }, | 136 | }, |
137 | { | 137 | { |
138 | .start = IRQ_UART0_TX, | ||
139 | .end = IRQ_UART0_TX, | ||
140 | .flags = IORESOURCE_IRQ, | ||
141 | }, | ||
142 | { | ||
138 | .start = IRQ_UART0_RX, | 143 | .start = IRQ_UART0_RX, |
139 | .end = IRQ_UART0_RX+1, | 144 | .end = IRQ_UART0_RX, |
140 | .flags = IORESOURCE_IRQ, | 145 | .flags = IORESOURCE_IRQ, |
141 | }, | 146 | }, |
142 | { | 147 | { |
@@ -178,8 +183,13 @@ static struct resource bfin_uart1_resources[] = { | |||
178 | .flags = IORESOURCE_MEM, | 183 | .flags = IORESOURCE_MEM, |
179 | }, | 184 | }, |
180 | { | 185 | { |
186 | .start = IRQ_UART1_TX, | ||
187 | .end = IRQ_UART1_TX, | ||
188 | .flags = IORESOURCE_IRQ, | ||
189 | }, | ||
190 | { | ||
181 | .start = IRQ_UART1_RX, | 191 | .start = IRQ_UART1_RX, |
182 | .end = IRQ_UART1_RX+1, | 192 | .end = IRQ_UART1_RX, |
183 | .flags = IORESOURCE_IRQ, | 193 | .flags = IORESOURCE_IRQ, |
184 | }, | 194 | }, |
185 | { | 195 | { |
@@ -237,8 +247,13 @@ static struct resource bfin_uart2_resources[] = { | |||
237 | .flags = IORESOURCE_MEM, | 247 | .flags = IORESOURCE_MEM, |
238 | }, | 248 | }, |
239 | { | 249 | { |
250 | .start = IRQ_UART2_TX, | ||
251 | .end = IRQ_UART2_TX, | ||
252 | .flags = IORESOURCE_IRQ, | ||
253 | }, | ||
254 | { | ||
240 | .start = IRQ_UART2_RX, | 255 | .start = IRQ_UART2_RX, |
241 | .end = IRQ_UART2_RX+1, | 256 | .end = IRQ_UART2_RX, |
242 | .flags = IORESOURCE_IRQ, | 257 | .flags = IORESOURCE_IRQ, |
243 | }, | 258 | }, |
244 | { | 259 | { |
@@ -280,8 +295,13 @@ static struct resource bfin_uart3_resources[] = { | |||
280 | .flags = IORESOURCE_MEM, | 295 | .flags = IORESOURCE_MEM, |
281 | }, | 296 | }, |
282 | { | 297 | { |
298 | .start = IRQ_UART3_TX, | ||
299 | .end = IRQ_UART3_TX, | ||
300 | .flags = IORESOURCE_IRQ, | ||
301 | }, | ||
302 | { | ||
283 | .start = IRQ_UART3_RX, | 303 | .start = IRQ_UART3_RX, |
284 | .end = IRQ_UART3_RX+1, | 304 | .end = IRQ_UART3_RX, |
285 | .flags = IORESOURCE_IRQ, | 305 | .flags = IORESOURCE_IRQ, |
286 | }, | 306 | }, |
287 | { | 307 | { |
diff --git a/arch/blackfin/mach-bf548/boards/ezkit.c b/arch/blackfin/mach-bf548/boards/ezkit.c index cd9cbb68de69..bb868ac0fe2d 100644 --- a/arch/blackfin/mach-bf548/boards/ezkit.c +++ b/arch/blackfin/mach-bf548/boards/ezkit.c | |||
@@ -241,8 +241,13 @@ static struct resource bfin_uart0_resources[] = { | |||
241 | .flags = IORESOURCE_MEM, | 241 | .flags = IORESOURCE_MEM, |
242 | }, | 242 | }, |
243 | { | 243 | { |
244 | .start = IRQ_UART0_TX, | ||
245 | .end = IRQ_UART0_TX, | ||
246 | .flags = IORESOURCE_IRQ, | ||
247 | }, | ||
248 | { | ||
244 | .start = IRQ_UART0_RX, | 249 | .start = IRQ_UART0_RX, |
245 | .end = IRQ_UART0_RX+1, | 250 | .end = IRQ_UART0_RX, |
246 | .flags = IORESOURCE_IRQ, | 251 | .flags = IORESOURCE_IRQ, |
247 | }, | 252 | }, |
248 | { | 253 | { |
@@ -284,8 +289,13 @@ static struct resource bfin_uart1_resources[] = { | |||
284 | .flags = IORESOURCE_MEM, | 289 | .flags = IORESOURCE_MEM, |
285 | }, | 290 | }, |
286 | { | 291 | { |
292 | .start = IRQ_UART1_TX, | ||
293 | .end = IRQ_UART1_TX, | ||
294 | .flags = IORESOURCE_IRQ, | ||
295 | }, | ||
296 | { | ||
287 | .start = IRQ_UART1_RX, | 297 | .start = IRQ_UART1_RX, |
288 | .end = IRQ_UART1_RX+1, | 298 | .end = IRQ_UART1_RX, |
289 | .flags = IORESOURCE_IRQ, | 299 | .flags = IORESOURCE_IRQ, |
290 | }, | 300 | }, |
291 | { | 301 | { |
@@ -343,8 +353,13 @@ static struct resource bfin_uart2_resources[] = { | |||
343 | .flags = IORESOURCE_MEM, | 353 | .flags = IORESOURCE_MEM, |
344 | }, | 354 | }, |
345 | { | 355 | { |
356 | .start = IRQ_UART2_TX, | ||
357 | .end = IRQ_UART2_TX, | ||
358 | .flags = IORESOURCE_IRQ, | ||
359 | }, | ||
360 | { | ||
346 | .start = IRQ_UART2_RX, | 361 | .start = IRQ_UART2_RX, |
347 | .end = IRQ_UART2_RX+1, | 362 | .end = IRQ_UART2_RX, |
348 | .flags = IORESOURCE_IRQ, | 363 | .flags = IORESOURCE_IRQ, |
349 | }, | 364 | }, |
350 | { | 365 | { |
@@ -386,8 +401,13 @@ static struct resource bfin_uart3_resources[] = { | |||
386 | .flags = IORESOURCE_MEM, | 401 | .flags = IORESOURCE_MEM, |
387 | }, | 402 | }, |
388 | { | 403 | { |
404 | .start = IRQ_UART3_TX, | ||
405 | .end = IRQ_UART3_TX, | ||
406 | .flags = IORESOURCE_IRQ, | ||
407 | }, | ||
408 | { | ||
389 | .start = IRQ_UART3_RX, | 409 | .start = IRQ_UART3_RX, |
390 | .end = IRQ_UART3_RX+1, | 410 | .end = IRQ_UART3_RX, |
391 | .flags = IORESOURCE_IRQ, | 411 | .flags = IORESOURCE_IRQ, |
392 | }, | 412 | }, |
393 | { | 413 | { |
diff --git a/arch/blackfin/mach-bf561/boards/acvilon.c b/arch/blackfin/mach-bf561/boards/acvilon.c index 972e1347c6bc..b1b7339b6ba7 100644 --- a/arch/blackfin/mach-bf561/boards/acvilon.c +++ b/arch/blackfin/mach-bf561/boards/acvilon.c | |||
@@ -203,8 +203,13 @@ static struct resource bfin_uart0_resources[] = { | |||
203 | .flags = IORESOURCE_MEM, | 203 | .flags = IORESOURCE_MEM, |
204 | }, | 204 | }, |
205 | { | 205 | { |
206 | .start = IRQ_UART_TX, | ||
207 | .end = IRQ_UART_TX, | ||
208 | .flags = IORESOURCE_IRQ, | ||
209 | }, | ||
210 | { | ||
206 | .start = IRQ_UART_RX, | 211 | .start = IRQ_UART_RX, |
207 | .end = IRQ_UART_RX + 1, | 212 | .end = IRQ_UART_RX, |
208 | .flags = IORESOURCE_IRQ, | 213 | .flags = IORESOURCE_IRQ, |
209 | }, | 214 | }, |
210 | { | 215 | { |
diff --git a/arch/blackfin/mach-bf561/boards/cm_bf561.c b/arch/blackfin/mach-bf561/boards/cm_bf561.c index c1b72f2d6354..c017cf07ed4e 100644 --- a/arch/blackfin/mach-bf561/boards/cm_bf561.c +++ b/arch/blackfin/mach-bf561/boards/cm_bf561.c | |||
@@ -277,8 +277,13 @@ static struct resource bfin_uart0_resources[] = { | |||
277 | .flags = IORESOURCE_MEM, | 277 | .flags = IORESOURCE_MEM, |
278 | }, | 278 | }, |
279 | { | 279 | { |
280 | .start = IRQ_UART_TX, | ||
281 | .end = IRQ_UART_TX, | ||
282 | .flags = IORESOURCE_IRQ, | ||
283 | }, | ||
284 | { | ||
280 | .start = IRQ_UART_RX, | 285 | .start = IRQ_UART_RX, |
281 | .end = IRQ_UART_RX+1, | 286 | .end = IRQ_UART_RX, |
282 | .flags = IORESOURCE_IRQ, | 287 | .flags = IORESOURCE_IRQ, |
283 | }, | 288 | }, |
284 | { | 289 | { |
diff --git a/arch/blackfin/mach-bf561/boards/ezkit.c b/arch/blackfin/mach-bf561/boards/ezkit.c index 9490dc800ca5..27f22ed381d9 100644 --- a/arch/blackfin/mach-bf561/boards/ezkit.c +++ b/arch/blackfin/mach-bf561/boards/ezkit.c | |||
@@ -172,8 +172,13 @@ static struct resource bfin_uart0_resources[] = { | |||
172 | .flags = IORESOURCE_MEM, | 172 | .flags = IORESOURCE_MEM, |
173 | }, | 173 | }, |
174 | { | 174 | { |
175 | .start = IRQ_UART_TX, | ||
176 | .end = IRQ_UART_TX, | ||
177 | .flags = IORESOURCE_IRQ, | ||
178 | }, | ||
179 | { | ||
175 | .start = IRQ_UART_RX, | 180 | .start = IRQ_UART_RX, |
176 | .end = IRQ_UART_RX+1, | 181 | .end = IRQ_UART_RX, |
177 | .flags = IORESOURCE_IRQ, | 182 | .flags = IORESOURCE_IRQ, |
178 | }, | 183 | }, |
179 | { | 184 | { |
diff --git a/arch/blackfin/mach-bf561/boards/tepla.c b/arch/blackfin/mach-bf561/boards/tepla.c index bb056e60f6ed..1a57bc986aad 100644 --- a/arch/blackfin/mach-bf561/boards/tepla.c +++ b/arch/blackfin/mach-bf561/boards/tepla.c | |||
@@ -51,8 +51,13 @@ static struct resource bfin_uart0_resources[] = { | |||
51 | .flags = IORESOURCE_MEM, | 51 | .flags = IORESOURCE_MEM, |
52 | }, | 52 | }, |
53 | { | 53 | { |
54 | .start = IRQ_UART_TX, | ||
55 | .end = IRQ_UART_TX, | ||
56 | .flags = IORESOURCE_IRQ, | ||
57 | }, | ||
58 | { | ||
54 | .start = IRQ_UART_RX, | 59 | .start = IRQ_UART_RX, |
55 | .end = IRQ_UART_RX+1, | 60 | .end = IRQ_UART_RX, |
56 | .flags = IORESOURCE_IRQ, | 61 | .flags = IORESOURCE_IRQ, |
57 | }, | 62 | }, |
58 | { | 63 | { |
diff --git a/arch/cris/arch-v32/drivers/mach-a3/nandflash.c b/arch/cris/arch-v32/drivers/mach-a3/nandflash.c index f58f2c1c5295..7fb52128ddc9 100644 --- a/arch/cris/arch-v32/drivers/mach-a3/nandflash.c +++ b/arch/cris/arch-v32/drivers/mach-a3/nandflash.c | |||
@@ -163,7 +163,7 @@ struct mtd_info *__init crisv32_nand_flash_probe(void) | |||
163 | this->ecc.mode = NAND_ECC_SOFT; | 163 | this->ecc.mode = NAND_ECC_SOFT; |
164 | 164 | ||
165 | /* Enable the following for a flash based bad block table */ | 165 | /* Enable the following for a flash based bad block table */ |
166 | /* this->options = NAND_USE_FLASH_BBT; */ | 166 | /* this->bbt_options = NAND_BBT_USE_FLASH; */ |
167 | 167 | ||
168 | /* Scan to find existence of the device */ | 168 | /* Scan to find existence of the device */ |
169 | if (nand_scan(crisv32_mtd, 1)) { | 169 | if (nand_scan(crisv32_mtd, 1)) { |
diff --git a/arch/cris/arch-v32/drivers/mach-fs/nandflash.c b/arch/cris/arch-v32/drivers/mach-fs/nandflash.c index d5b0cc9f976b..e03238454b0e 100644 --- a/arch/cris/arch-v32/drivers/mach-fs/nandflash.c +++ b/arch/cris/arch-v32/drivers/mach-fs/nandflash.c | |||
@@ -154,7 +154,7 @@ struct mtd_info *__init crisv32_nand_flash_probe(void) | |||
154 | this->ecc.mode = NAND_ECC_SOFT; | 154 | this->ecc.mode = NAND_ECC_SOFT; |
155 | 155 | ||
156 | /* Enable the following for a flash based bad block table */ | 156 | /* Enable the following for a flash based bad block table */ |
157 | /* this->options = NAND_USE_FLASH_BBT; */ | 157 | /* this->bbt_options = NAND_BBT_USE_FLASH; */ |
158 | 158 | ||
159 | /* Scan to find existence of the device */ | 159 | /* Scan to find existence of the device */ |
160 | if (nand_scan(crisv32_mtd, 1)) { | 160 | if (nand_scan(crisv32_mtd, 1)) { |
diff --git a/arch/ia64/include/asm/xen/interface.h b/arch/ia64/include/asm/xen/interface.h index e951e740bdf2..1d2427d116e3 100644 --- a/arch/ia64/include/asm/xen/interface.h +++ b/arch/ia64/include/asm/xen/interface.h | |||
@@ -76,6 +76,7 @@ DEFINE_GUEST_HANDLE(char); | |||
76 | DEFINE_GUEST_HANDLE(int); | 76 | DEFINE_GUEST_HANDLE(int); |
77 | DEFINE_GUEST_HANDLE(long); | 77 | DEFINE_GUEST_HANDLE(long); |
78 | DEFINE_GUEST_HANDLE(void); | 78 | DEFINE_GUEST_HANDLE(void); |
79 | DEFINE_GUEST_HANDLE(uint64_t); | ||
79 | 80 | ||
80 | typedef unsigned long xen_pfn_t; | 81 | typedef unsigned long xen_pfn_t; |
81 | DEFINE_GUEST_HANDLE(xen_pfn_t); | 82 | DEFINE_GUEST_HANDLE(xen_pfn_t); |
diff --git a/arch/m68k/Kconfig b/arch/m68k/Kconfig index 6c28582fb98f..361d54019bb0 100644 --- a/arch/m68k/Kconfig +++ b/arch/m68k/Kconfig | |||
@@ -4,8 +4,8 @@ config M68K | |||
4 | select HAVE_IDE | 4 | select HAVE_IDE |
5 | select HAVE_AOUT if MMU | 5 | select HAVE_AOUT if MMU |
6 | select GENERIC_ATOMIC64 if MMU | 6 | select GENERIC_ATOMIC64 if MMU |
7 | select HAVE_GENERIC_HARDIRQS if !MMU | 7 | select HAVE_GENERIC_HARDIRQS |
8 | select GENERIC_IRQ_SHOW if !MMU | 8 | select GENERIC_IRQ_SHOW |
9 | select ARCH_HAVE_NMI_SAFE_CMPXCHG if RMW_INSNS | 9 | select ARCH_HAVE_NMI_SAFE_CMPXCHG if RMW_INSNS |
10 | 10 | ||
11 | config RWSEM_GENERIC_SPINLOCK | 11 | config RWSEM_GENERIC_SPINLOCK |
diff --git a/arch/m68k/Kconfig.bus b/arch/m68k/Kconfig.bus index 8294f0c1785e..3adb499584fb 100644 --- a/arch/m68k/Kconfig.bus +++ b/arch/m68k/Kconfig.bus | |||
@@ -2,6 +2,15 @@ if MMU | |||
2 | 2 | ||
3 | comment "Bus Support" | 3 | comment "Bus Support" |
4 | 4 | ||
5 | config DIO | ||
6 | bool "DIO bus support" | ||
7 | depends on HP300 | ||
8 | default y | ||
9 | help | ||
10 | Say Y here to enable support for the "DIO" expansion bus used in | ||
11 | HP300 machines. If you are using such a system you almost certainly | ||
12 | want this. | ||
13 | |||
5 | config NUBUS | 14 | config NUBUS |
6 | bool | 15 | bool |
7 | depends on MAC | 16 | depends on MAC |
diff --git a/arch/m68k/Kconfig.devices b/arch/m68k/Kconfig.devices index d214034be6a6..6033f5d4e67e 100644 --- a/arch/m68k/Kconfig.devices +++ b/arch/m68k/Kconfig.devices | |||
@@ -24,6 +24,37 @@ config PROC_HARDWARE | |||
24 | including the model, CPU, MMU, clock speed, BogoMIPS rating, | 24 | including the model, CPU, MMU, clock speed, BogoMIPS rating, |
25 | and memory size. | 25 | and memory size. |
26 | 26 | ||
27 | config NATFEAT | ||
28 | bool "ARAnyM emulator support" | ||
29 | depends on ATARI | ||
30 | help | ||
31 | This option enables support for ARAnyM native features, such as | ||
32 | access to a disk image as /dev/hda. | ||
33 | |||
34 | config NFBLOCK | ||
35 | tristate "NatFeat block device support" | ||
36 | depends on BLOCK && NATFEAT | ||
37 | help | ||
38 | Say Y to include support for the ARAnyM NatFeat block device | ||
39 | which allows direct access to the hard drives without using | ||
40 | the hardware emulation. | ||
41 | |||
42 | config NFCON | ||
43 | tristate "NatFeat console driver" | ||
44 | depends on NATFEAT | ||
45 | help | ||
46 | Say Y to include support for the ARAnyM NatFeat console driver | ||
47 | which allows the console output to be redirected to the stderr | ||
48 | output of ARAnyM. | ||
49 | |||
50 | config NFETH | ||
51 | tristate "NatFeat Ethernet support" | ||
52 | depends on ETHERNET && NATFEAT | ||
53 | help | ||
54 | Say Y to include support for the ARAnyM NatFeat network device | ||
55 | which will emulate a regular ethernet device while presenting an | ||
56 | ethertap device to the host system. | ||
57 | |||
27 | endmenu | 58 | endmenu |
28 | 59 | ||
29 | menu "Character devices" | 60 | menu "Character devices" |
diff --git a/arch/m68k/amiga/amiints.c b/arch/m68k/amiga/amiints.c index c5b5212cc3f9..47b5f90002ab 100644 --- a/arch/m68k/amiga/amiints.c +++ b/arch/m68k/amiga/amiints.c | |||
@@ -1,43 +1,15 @@ | |||
1 | /* | 1 | /* |
2 | * linux/arch/m68k/amiga/amiints.c -- Amiga Linux interrupt handling code | 2 | * Amiga Linux interrupt handling code |
3 | * | 3 | * |
4 | * This file is subject to the terms and conditions of the GNU General Public | 4 | * This file is subject to the terms and conditions of the GNU General Public |
5 | * License. See the file COPYING in the main directory of this archive | 5 | * License. See the file COPYING in the main directory of this archive |
6 | * for more details. | 6 | * for more details. |
7 | * | ||
8 | * 11/07/96: rewritten interrupt handling, irq lists are exists now only for | ||
9 | * this sources where it makes sense (VERTB/PORTS/EXTER) and you must | ||
10 | * be careful that dev_id for this sources is unique since this the | ||
11 | * only possibility to distinguish between different handlers for | ||
12 | * free_irq. irq lists also have different irq flags: | ||
13 | * - IRQ_FLG_FAST: handler is inserted at top of list (after other | ||
14 | * fast handlers) | ||
15 | * - IRQ_FLG_SLOW: handler is inserted at bottom of list and before | ||
16 | * they're executed irq level is set to the previous | ||
17 | * one, but handlers don't need to be reentrant, if | ||
18 | * reentrance occurred, slow handlers will be just | ||
19 | * called again. | ||
20 | * The whole interrupt handling for CIAs is moved to cia.c | ||
21 | * /Roman Zippel | ||
22 | * | ||
23 | * 07/08/99: rewamp of the interrupt handling - we now have two types of | ||
24 | * interrupts, normal and fast handlers, fast handlers being | ||
25 | * marked with IRQF_DISABLED and runs with all other interrupts | ||
26 | * disabled. Normal interrupts disable their own source but | ||
27 | * run with all other interrupt sources enabled. | ||
28 | * PORTS and EXTER interrupts are always shared even if the | ||
29 | * drivers do not explicitly mark this when calling | ||
30 | * request_irq which they really should do. | ||
31 | * This is similar to the way interrupts are handled on all | ||
32 | * other architectures and makes a ton of sense besides | ||
33 | * having the advantage of making it easier to share | ||
34 | * drivers. | ||
35 | * /Jes | ||
36 | */ | 7 | */ |
37 | 8 | ||
38 | #include <linux/init.h> | 9 | #include <linux/init.h> |
39 | #include <linux/interrupt.h> | 10 | #include <linux/interrupt.h> |
40 | #include <linux/errno.h> | 11 | #include <linux/errno.h> |
12 | #include <linux/irq.h> | ||
41 | 13 | ||
42 | #include <asm/irq.h> | 14 | #include <asm/irq.h> |
43 | #include <asm/traps.h> | 15 | #include <asm/traps.h> |
@@ -45,56 +17,6 @@ | |||
45 | #include <asm/amigaints.h> | 17 | #include <asm/amigaints.h> |
46 | #include <asm/amipcmcia.h> | 18 | #include <asm/amipcmcia.h> |
47 | 19 | ||
48 | static void amiga_enable_irq(unsigned int irq); | ||
49 | static void amiga_disable_irq(unsigned int irq); | ||
50 | static irqreturn_t ami_int1(int irq, void *dev_id); | ||
51 | static irqreturn_t ami_int3(int irq, void *dev_id); | ||
52 | static irqreturn_t ami_int4(int irq, void *dev_id); | ||
53 | static irqreturn_t ami_int5(int irq, void *dev_id); | ||
54 | |||
55 | static struct irq_controller amiga_irq_controller = { | ||
56 | .name = "amiga", | ||
57 | .lock = __SPIN_LOCK_UNLOCKED(amiga_irq_controller.lock), | ||
58 | .enable = amiga_enable_irq, | ||
59 | .disable = amiga_disable_irq, | ||
60 | }; | ||
61 | |||
62 | /* | ||
63 | * void amiga_init_IRQ(void) | ||
64 | * | ||
65 | * Parameters: None | ||
66 | * | ||
67 | * Returns: Nothing | ||
68 | * | ||
69 | * This function should be called during kernel startup to initialize | ||
70 | * the amiga IRQ handling routines. | ||
71 | */ | ||
72 | |||
73 | void __init amiga_init_IRQ(void) | ||
74 | { | ||
75 | if (request_irq(IRQ_AUTO_1, ami_int1, 0, "int1", NULL)) | ||
76 | pr_err("Couldn't register int%d\n", 1); | ||
77 | if (request_irq(IRQ_AUTO_3, ami_int3, 0, "int3", NULL)) | ||
78 | pr_err("Couldn't register int%d\n", 3); | ||
79 | if (request_irq(IRQ_AUTO_4, ami_int4, 0, "int4", NULL)) | ||
80 | pr_err("Couldn't register int%d\n", 4); | ||
81 | if (request_irq(IRQ_AUTO_5, ami_int5, 0, "int5", NULL)) | ||
82 | pr_err("Couldn't register int%d\n", 5); | ||
83 | |||
84 | m68k_setup_irq_controller(&amiga_irq_controller, IRQ_USER, AMI_STD_IRQS); | ||
85 | |||
86 | /* turn off PCMCIA interrupts */ | ||
87 | if (AMIGAHW_PRESENT(PCMCIA)) | ||
88 | gayle.inten = GAYLE_IRQ_IDE; | ||
89 | |||
90 | /* turn off all interrupts and enable the master interrupt bit */ | ||
91 | amiga_custom.intena = 0x7fff; | ||
92 | amiga_custom.intreq = 0x7fff; | ||
93 | amiga_custom.intena = IF_SETCLR | IF_INTEN; | ||
94 | |||
95 | cia_init_IRQ(&ciaa_base); | ||
96 | cia_init_IRQ(&ciab_base); | ||
97 | } | ||
98 | 20 | ||
99 | /* | 21 | /* |
100 | * Enable/disable a particular machine specific interrupt source. | 22 | * Enable/disable a particular machine specific interrupt source. |
@@ -103,112 +25,150 @@ void __init amiga_init_IRQ(void) | |||
103 | * internal data, that may not be changed by the interrupt at the same time. | 25 | * internal data, that may not be changed by the interrupt at the same time. |
104 | */ | 26 | */ |
105 | 27 | ||
106 | static void amiga_enable_irq(unsigned int irq) | 28 | static void amiga_irq_enable(struct irq_data *data) |
107 | { | 29 | { |
108 | amiga_custom.intena = IF_SETCLR | (1 << (irq - IRQ_USER)); | 30 | amiga_custom.intena = IF_SETCLR | (1 << (data->irq - IRQ_USER)); |
109 | } | 31 | } |
110 | 32 | ||
111 | static void amiga_disable_irq(unsigned int irq) | 33 | static void amiga_irq_disable(struct irq_data *data) |
112 | { | 34 | { |
113 | amiga_custom.intena = 1 << (irq - IRQ_USER); | 35 | amiga_custom.intena = 1 << (data->irq - IRQ_USER); |
114 | } | 36 | } |
115 | 37 | ||
38 | static struct irq_chip amiga_irq_chip = { | ||
39 | .name = "amiga", | ||
40 | .irq_enable = amiga_irq_enable, | ||
41 | .irq_disable = amiga_irq_disable, | ||
42 | }; | ||
43 | |||
44 | |||
116 | /* | 45 | /* |
117 | * The builtin Amiga hardware interrupt handlers. | 46 | * The builtin Amiga hardware interrupt handlers. |
118 | */ | 47 | */ |
119 | 48 | ||
120 | static irqreturn_t ami_int1(int irq, void *dev_id) | 49 | static void ami_int1(unsigned int irq, struct irq_desc *desc) |
121 | { | 50 | { |
122 | unsigned short ints = amiga_custom.intreqr & amiga_custom.intenar; | 51 | unsigned short ints = amiga_custom.intreqr & amiga_custom.intenar; |
123 | 52 | ||
124 | /* if serial transmit buffer empty, interrupt */ | 53 | /* if serial transmit buffer empty, interrupt */ |
125 | if (ints & IF_TBE) { | 54 | if (ints & IF_TBE) { |
126 | amiga_custom.intreq = IF_TBE; | 55 | amiga_custom.intreq = IF_TBE; |
127 | m68k_handle_int(IRQ_AMIGA_TBE); | 56 | generic_handle_irq(IRQ_AMIGA_TBE); |
128 | } | 57 | } |
129 | 58 | ||
130 | /* if floppy disk transfer complete, interrupt */ | 59 | /* if floppy disk transfer complete, interrupt */ |
131 | if (ints & IF_DSKBLK) { | 60 | if (ints & IF_DSKBLK) { |
132 | amiga_custom.intreq = IF_DSKBLK; | 61 | amiga_custom.intreq = IF_DSKBLK; |
133 | m68k_handle_int(IRQ_AMIGA_DSKBLK); | 62 | generic_handle_irq(IRQ_AMIGA_DSKBLK); |
134 | } | 63 | } |
135 | 64 | ||
136 | /* if software interrupt set, interrupt */ | 65 | /* if software interrupt set, interrupt */ |
137 | if (ints & IF_SOFT) { | 66 | if (ints & IF_SOFT) { |
138 | amiga_custom.intreq = IF_SOFT; | 67 | amiga_custom.intreq = IF_SOFT; |
139 | m68k_handle_int(IRQ_AMIGA_SOFT); | 68 | generic_handle_irq(IRQ_AMIGA_SOFT); |
140 | } | 69 | } |
141 | return IRQ_HANDLED; | ||
142 | } | 70 | } |
143 | 71 | ||
144 | static irqreturn_t ami_int3(int irq, void *dev_id) | 72 | static void ami_int3(unsigned int irq, struct irq_desc *desc) |
145 | { | 73 | { |
146 | unsigned short ints = amiga_custom.intreqr & amiga_custom.intenar; | 74 | unsigned short ints = amiga_custom.intreqr & amiga_custom.intenar; |
147 | 75 | ||
148 | /* if a blitter interrupt */ | 76 | /* if a blitter interrupt */ |
149 | if (ints & IF_BLIT) { | 77 | if (ints & IF_BLIT) { |
150 | amiga_custom.intreq = IF_BLIT; | 78 | amiga_custom.intreq = IF_BLIT; |
151 | m68k_handle_int(IRQ_AMIGA_BLIT); | 79 | generic_handle_irq(IRQ_AMIGA_BLIT); |
152 | } | 80 | } |
153 | 81 | ||
154 | /* if a copper interrupt */ | 82 | /* if a copper interrupt */ |
155 | if (ints & IF_COPER) { | 83 | if (ints & IF_COPER) { |
156 | amiga_custom.intreq = IF_COPER; | 84 | amiga_custom.intreq = IF_COPER; |
157 | m68k_handle_int(IRQ_AMIGA_COPPER); | 85 | generic_handle_irq(IRQ_AMIGA_COPPER); |
158 | } | 86 | } |
159 | 87 | ||
160 | /* if a vertical blank interrupt */ | 88 | /* if a vertical blank interrupt */ |
161 | if (ints & IF_VERTB) { | 89 | if (ints & IF_VERTB) { |
162 | amiga_custom.intreq = IF_VERTB; | 90 | amiga_custom.intreq = IF_VERTB; |
163 | m68k_handle_int(IRQ_AMIGA_VERTB); | 91 | generic_handle_irq(IRQ_AMIGA_VERTB); |
164 | } | 92 | } |
165 | return IRQ_HANDLED; | ||
166 | } | 93 | } |
167 | 94 | ||
168 | static irqreturn_t ami_int4(int irq, void *dev_id) | 95 | static void ami_int4(unsigned int irq, struct irq_desc *desc) |
169 | { | 96 | { |
170 | unsigned short ints = amiga_custom.intreqr & amiga_custom.intenar; | 97 | unsigned short ints = amiga_custom.intreqr & amiga_custom.intenar; |
171 | 98 | ||
172 | /* if audio 0 interrupt */ | 99 | /* if audio 0 interrupt */ |
173 | if (ints & IF_AUD0) { | 100 | if (ints & IF_AUD0) { |
174 | amiga_custom.intreq = IF_AUD0; | 101 | amiga_custom.intreq = IF_AUD0; |
175 | m68k_handle_int(IRQ_AMIGA_AUD0); | 102 | generic_handle_irq(IRQ_AMIGA_AUD0); |
176 | } | 103 | } |
177 | 104 | ||
178 | /* if audio 1 interrupt */ | 105 | /* if audio 1 interrupt */ |
179 | if (ints & IF_AUD1) { | 106 | if (ints & IF_AUD1) { |
180 | amiga_custom.intreq = IF_AUD1; | 107 | amiga_custom.intreq = IF_AUD1; |
181 | m68k_handle_int(IRQ_AMIGA_AUD1); | 108 | generic_handle_irq(IRQ_AMIGA_AUD1); |
182 | } | 109 | } |
183 | 110 | ||
184 | /* if audio 2 interrupt */ | 111 | /* if audio 2 interrupt */ |
185 | if (ints & IF_AUD2) { | 112 | if (ints & IF_AUD2) { |
186 | amiga_custom.intreq = IF_AUD2; | 113 | amiga_custom.intreq = IF_AUD2; |
187 | m68k_handle_int(IRQ_AMIGA_AUD2); | 114 | generic_handle_irq(IRQ_AMIGA_AUD2); |
188 | } | 115 | } |
189 | 116 | ||
190 | /* if audio 3 interrupt */ | 117 | /* if audio 3 interrupt */ |
191 | if (ints & IF_AUD3) { | 118 | if (ints & IF_AUD3) { |
192 | amiga_custom.intreq = IF_AUD3; | 119 | amiga_custom.intreq = IF_AUD3; |
193 | m68k_handle_int(IRQ_AMIGA_AUD3); | 120 | generic_handle_irq(IRQ_AMIGA_AUD3); |
194 | } | 121 | } |
195 | return IRQ_HANDLED; | ||
196 | } | 122 | } |
197 | 123 | ||
198 | static irqreturn_t ami_int5(int irq, void *dev_id) | 124 | static void ami_int5(unsigned int irq, struct irq_desc *desc) |
199 | { | 125 | { |
200 | unsigned short ints = amiga_custom.intreqr & amiga_custom.intenar; | 126 | unsigned short ints = amiga_custom.intreqr & amiga_custom.intenar; |
201 | 127 | ||
202 | /* if serial receive buffer full interrupt */ | 128 | /* if serial receive buffer full interrupt */ |
203 | if (ints & IF_RBF) { | 129 | if (ints & IF_RBF) { |
204 | /* acknowledge of IF_RBF must be done by the serial interrupt */ | 130 | /* acknowledge of IF_RBF must be done by the serial interrupt */ |
205 | m68k_handle_int(IRQ_AMIGA_RBF); | 131 | generic_handle_irq(IRQ_AMIGA_RBF); |
206 | } | 132 | } |
207 | 133 | ||
208 | /* if a disk sync interrupt */ | 134 | /* if a disk sync interrupt */ |
209 | if (ints & IF_DSKSYN) { | 135 | if (ints & IF_DSKSYN) { |
210 | amiga_custom.intreq = IF_DSKSYN; | 136 | amiga_custom.intreq = IF_DSKSYN; |
211 | m68k_handle_int(IRQ_AMIGA_DSKSYN); | 137 | generic_handle_irq(IRQ_AMIGA_DSKSYN); |
212 | } | 138 | } |
213 | return IRQ_HANDLED; | 139 | } |
140 | |||
141 | |||
142 | /* | ||
143 | * void amiga_init_IRQ(void) | ||
144 | * | ||
145 | * Parameters: None | ||
146 | * | ||
147 | * Returns: Nothing | ||
148 | * | ||
149 | * This function should be called during kernel startup to initialize | ||
150 | * the amiga IRQ handling routines. | ||
151 | */ | ||
152 | |||
153 | void __init amiga_init_IRQ(void) | ||
154 | { | ||
155 | m68k_setup_irq_controller(&amiga_irq_chip, handle_simple_irq, IRQ_USER, | ||
156 | AMI_STD_IRQS); | ||
157 | |||
158 | irq_set_chained_handler(IRQ_AUTO_1, ami_int1); | ||
159 | irq_set_chained_handler(IRQ_AUTO_3, ami_int3); | ||
160 | irq_set_chained_handler(IRQ_AUTO_4, ami_int4); | ||
161 | irq_set_chained_handler(IRQ_AUTO_5, ami_int5); | ||
162 | |||
163 | /* turn off PCMCIA interrupts */ | ||
164 | if (AMIGAHW_PRESENT(PCMCIA)) | ||
165 | gayle.inten = GAYLE_IRQ_IDE; | ||
166 | |||
167 | /* turn off all interrupts and enable the master interrupt bit */ | ||
168 | amiga_custom.intena = 0x7fff; | ||
169 | amiga_custom.intreq = 0x7fff; | ||
170 | amiga_custom.intena = IF_SETCLR | IF_INTEN; | ||
171 | |||
172 | cia_init_IRQ(&ciaa_base); | ||
173 | cia_init_IRQ(&ciab_base); | ||
214 | } | 174 | } |
diff --git a/arch/m68k/amiga/cia.c b/arch/m68k/amiga/cia.c index ecd0f7ca6f0e..18c0e29976e3 100644 --- a/arch/m68k/amiga/cia.c +++ b/arch/m68k/amiga/cia.c | |||
@@ -93,13 +93,14 @@ static irqreturn_t cia_handler(int irq, void *dev_id) | |||
93 | amiga_custom.intreq = base->int_mask; | 93 | amiga_custom.intreq = base->int_mask; |
94 | for (; ints; mach_irq++, ints >>= 1) { | 94 | for (; ints; mach_irq++, ints >>= 1) { |
95 | if (ints & 1) | 95 | if (ints & 1) |
96 | m68k_handle_int(mach_irq); | 96 | generic_handle_irq(mach_irq); |
97 | } | 97 | } |
98 | return IRQ_HANDLED; | 98 | return IRQ_HANDLED; |
99 | } | 99 | } |
100 | 100 | ||
101 | static void cia_enable_irq(unsigned int irq) | 101 | static void cia_irq_enable(struct irq_data *data) |
102 | { | 102 | { |
103 | unsigned int irq = data->irq; | ||
103 | unsigned char mask; | 104 | unsigned char mask; |
104 | 105 | ||
105 | if (irq >= IRQ_AMIGA_CIAB) { | 106 | if (irq >= IRQ_AMIGA_CIAB) { |
@@ -113,19 +114,20 @@ static void cia_enable_irq(unsigned int irq) | |||
113 | } | 114 | } |
114 | } | 115 | } |
115 | 116 | ||
116 | static void cia_disable_irq(unsigned int irq) | 117 | static void cia_irq_disable(struct irq_data *data) |
117 | { | 118 | { |
119 | unsigned int irq = data->irq; | ||
120 | |||
118 | if (irq >= IRQ_AMIGA_CIAB) | 121 | if (irq >= IRQ_AMIGA_CIAB) |
119 | cia_able_irq(&ciab_base, 1 << (irq - IRQ_AMIGA_CIAB)); | 122 | cia_able_irq(&ciab_base, 1 << (irq - IRQ_AMIGA_CIAB)); |
120 | else | 123 | else |
121 | cia_able_irq(&ciaa_base, 1 << (irq - IRQ_AMIGA_CIAA)); | 124 | cia_able_irq(&ciaa_base, 1 << (irq - IRQ_AMIGA_CIAA)); |
122 | } | 125 | } |
123 | 126 | ||
124 | static struct irq_controller cia_irq_controller = { | 127 | static struct irq_chip cia_irq_chip = { |
125 | .name = "cia", | 128 | .name = "cia", |
126 | .lock = __SPIN_LOCK_UNLOCKED(cia_irq_controller.lock), | 129 | .irq_enable = cia_irq_enable, |
127 | .enable = cia_enable_irq, | 130 | .irq_disable = cia_irq_disable, |
128 | .disable = cia_disable_irq, | ||
129 | }; | 131 | }; |
130 | 132 | ||
131 | /* | 133 | /* |
@@ -134,9 +136,9 @@ static struct irq_controller cia_irq_controller = { | |||
134 | * into this chain. | 136 | * into this chain. |
135 | */ | 137 | */ |
136 | 138 | ||
137 | static void auto_enable_irq(unsigned int irq) | 139 | static void auto_irq_enable(struct irq_data *data) |
138 | { | 140 | { |
139 | switch (irq) { | 141 | switch (data->irq) { |
140 | case IRQ_AUTO_2: | 142 | case IRQ_AUTO_2: |
141 | amiga_custom.intena = IF_SETCLR | IF_PORTS; | 143 | amiga_custom.intena = IF_SETCLR | IF_PORTS; |
142 | break; | 144 | break; |
@@ -146,9 +148,9 @@ static void auto_enable_irq(unsigned int irq) | |||
146 | } | 148 | } |
147 | } | 149 | } |
148 | 150 | ||
149 | static void auto_disable_irq(unsigned int irq) | 151 | static void auto_irq_disable(struct irq_data *data) |
150 | { | 152 | { |
151 | switch (irq) { | 153 | switch (data->irq) { |
152 | case IRQ_AUTO_2: | 154 | case IRQ_AUTO_2: |
153 | amiga_custom.intena = IF_PORTS; | 155 | amiga_custom.intena = IF_PORTS; |
154 | break; | 156 | break; |
@@ -158,24 +160,25 @@ static void auto_disable_irq(unsigned int irq) | |||
158 | } | 160 | } |
159 | } | 161 | } |
160 | 162 | ||
161 | static struct irq_controller auto_irq_controller = { | 163 | static struct irq_chip auto_irq_chip = { |
162 | .name = "auto", | 164 | .name = "auto", |
163 | .lock = __SPIN_LOCK_UNLOCKED(auto_irq_controller.lock), | 165 | .irq_enable = auto_irq_enable, |
164 | .enable = auto_enable_irq, | 166 | .irq_disable = auto_irq_disable, |
165 | .disable = auto_disable_irq, | ||
166 | }; | 167 | }; |
167 | 168 | ||
168 | void __init cia_init_IRQ(struct ciabase *base) | 169 | void __init cia_init_IRQ(struct ciabase *base) |
169 | { | 170 | { |
170 | m68k_setup_irq_controller(&cia_irq_controller, base->cia_irq, CIA_IRQS); | 171 | m68k_setup_irq_controller(&cia_irq_chip, handle_simple_irq, |
172 | base->cia_irq, CIA_IRQS); | ||
171 | 173 | ||
172 | /* clear any pending interrupt and turn off all interrupts */ | 174 | /* clear any pending interrupt and turn off all interrupts */ |
173 | cia_set_irq(base, CIA_ICR_ALL); | 175 | cia_set_irq(base, CIA_ICR_ALL); |
174 | cia_able_irq(base, CIA_ICR_ALL); | 176 | cia_able_irq(base, CIA_ICR_ALL); |
175 | 177 | ||
176 | /* override auto int and install CIA handler */ | 178 | /* override auto int and install CIA handler */ |
177 | m68k_setup_irq_controller(&auto_irq_controller, base->handler_irq, 1); | 179 | m68k_setup_irq_controller(&auto_irq_chip, handle_simple_irq, |
178 | m68k_irq_startup(base->handler_irq); | 180 | base->handler_irq, 1); |
181 | m68k_irq_startup_irq(base->handler_irq); | ||
179 | if (request_irq(base->handler_irq, cia_handler, IRQF_SHARED, | 182 | if (request_irq(base->handler_irq, cia_handler, IRQF_SHARED, |
180 | base->name, base)) | 183 | base->name, base)) |
181 | pr_err("Couldn't register %s interrupt\n", base->name); | 184 | pr_err("Couldn't register %s interrupt\n", base->name); |
diff --git a/arch/m68k/apollo/dn_ints.c b/arch/m68k/apollo/dn_ints.c index 5d47f3aa3810..17be1e7e2df2 100644 --- a/arch/m68k/apollo/dn_ints.c +++ b/arch/m68k/apollo/dn_ints.c | |||
@@ -1,19 +1,13 @@ | |||
1 | #include <linux/interrupt.h> | 1 | #include <linux/interrupt.h> |
2 | #include <linux/irq.h> | ||
2 | 3 | ||
3 | #include <asm/irq.h> | ||
4 | #include <asm/traps.h> | 4 | #include <asm/traps.h> |
5 | #include <asm/apollohw.h> | 5 | #include <asm/apollohw.h> |
6 | 6 | ||
7 | void dn_process_int(unsigned int irq, struct pt_regs *fp) | 7 | unsigned int apollo_irq_startup(struct irq_data *data) |
8 | { | 8 | { |
9 | __m68k_handle_int(irq, fp); | 9 | unsigned int irq = data->irq; |
10 | 10 | ||
11 | *(volatile unsigned char *)(pica)=0x20; | ||
12 | *(volatile unsigned char *)(picb)=0x20; | ||
13 | } | ||
14 | |||
15 | int apollo_irq_startup(unsigned int irq) | ||
16 | { | ||
17 | if (irq < 8) | 11 | if (irq < 8) |
18 | *(volatile unsigned char *)(pica+1) &= ~(1 << irq); | 12 | *(volatile unsigned char *)(pica+1) &= ~(1 << irq); |
19 | else | 13 | else |
@@ -21,24 +15,33 @@ int apollo_irq_startup(unsigned int irq) | |||
21 | return 0; | 15 | return 0; |
22 | } | 16 | } |
23 | 17 | ||
24 | void apollo_irq_shutdown(unsigned int irq) | 18 | void apollo_irq_shutdown(struct irq_data *data) |
25 | { | 19 | { |
20 | unsigned int irq = data->irq; | ||
21 | |||
26 | if (irq < 8) | 22 | if (irq < 8) |
27 | *(volatile unsigned char *)(pica+1) |= (1 << irq); | 23 | *(volatile unsigned char *)(pica+1) |= (1 << irq); |
28 | else | 24 | else |
29 | *(volatile unsigned char *)(picb+1) |= (1 << (irq - 8)); | 25 | *(volatile unsigned char *)(picb+1) |= (1 << (irq - 8)); |
30 | } | 26 | } |
31 | 27 | ||
32 | static struct irq_controller apollo_irq_controller = { | 28 | void apollo_irq_eoi(struct irq_data *data) |
29 | { | ||
30 | *(volatile unsigned char *)(pica) = 0x20; | ||
31 | *(volatile unsigned char *)(picb) = 0x20; | ||
32 | } | ||
33 | |||
34 | static struct irq_chip apollo_irq_chip = { | ||
33 | .name = "apollo", | 35 | .name = "apollo", |
34 | .lock = __SPIN_LOCK_UNLOCKED(apollo_irq_controller.lock), | 36 | .irq_startup = apollo_irq_startup, |
35 | .startup = apollo_irq_startup, | 37 | .irq_shutdown = apollo_irq_shutdown, |
36 | .shutdown = apollo_irq_shutdown, | 38 | .irq_eoi = apollo_irq_eoi, |
37 | }; | 39 | }; |
38 | 40 | ||
39 | 41 | ||
40 | void __init dn_init_IRQ(void) | 42 | void __init dn_init_IRQ(void) |
41 | { | 43 | { |
42 | m68k_setup_user_interrupt(VEC_USER + 96, 16, dn_process_int); | 44 | m68k_setup_user_interrupt(VEC_USER + 96, 16); |
43 | m68k_setup_irq_controller(&apollo_irq_controller, IRQ_APOLLO, 16); | 45 | m68k_setup_irq_controller(&apollo_irq_chip, handle_fasteoi_irq, |
46 | IRQ_APOLLO, 16); | ||
44 | } | 47 | } |
diff --git a/arch/m68k/atari/ataints.c b/arch/m68k/atari/ataints.c index 26a804e67bce..6d196dadfdbc 100644 --- a/arch/m68k/atari/ataints.c +++ b/arch/m68k/atari/ataints.c | |||
@@ -60,243 +60,7 @@ | |||
60 | * <asm/atariints.h>): Autovector interrupts are 1..7, then follow ST-MFP, | 60 | * <asm/atariints.h>): Autovector interrupts are 1..7, then follow ST-MFP, |
61 | * TT-MFP, SCC, and finally VME interrupts. Vector numbers for the latter can | 61 | * TT-MFP, SCC, and finally VME interrupts. Vector numbers for the latter can |
62 | * be allocated by atari_register_vme_int(). | 62 | * be allocated by atari_register_vme_int(). |
63 | * | ||
64 | * Each interrupt can be of three types: | ||
65 | * | ||
66 | * - SLOW: The handler runs with all interrupts enabled, except the one it | ||
67 | * was called by (to avoid reentering). This should be the usual method. | ||
68 | * But it is currently possible only for MFP ints, since only the MFP | ||
69 | * offers an easy way to mask interrupts. | ||
70 | * | ||
71 | * - FAST: The handler runs with all interrupts disabled. This should be used | ||
72 | * only for really fast handlers, that just do actions immediately | ||
73 | * necessary, and let the rest do a bottom half or task queue. | ||
74 | * | ||
75 | * - PRIORITIZED: The handler can be interrupted by higher-level ints | ||
76 | * (greater IPL, no MFP priorities!). This is the method of choice for ints | ||
77 | * which should be slow, but are not from a MFP. | ||
78 | * | ||
79 | * The feature of more than one handler for one int source is still there, but | ||
80 | * only applicable if all handers are of the same type. To not slow down | ||
81 | * processing of ints with only one handler by the chaining feature, the list | ||
82 | * calling function atari_call_irq_list() is only plugged in at the time the | ||
83 | * second handler is registered. | ||
84 | * | ||
85 | * Implementation notes: For fast-as-possible int handling, there are separate | ||
86 | * entry points for each type (slow/fast/prio). The assembler handler calls | ||
87 | * the irq directly in the usual case, no C wrapper is involved. In case of | ||
88 | * multiple handlers, atari_call_irq_list() is registered as handler and calls | ||
89 | * in turn the real irq's. To ease access from assembler level to the irq | ||
90 | * function pointer and accompanying data, these two are stored in a separate | ||
91 | * array, irq_handler[]. The rest of data (type, name) are put into a second | ||
92 | * array, irq_param, that is accessed from C only. For each slow interrupt (32 | ||
93 | * in all) there are separate handler functions, which makes it possible to | ||
94 | * hard-code the MFP register address and value, are necessary to mask the | ||
95 | * int. If there'd be only one generic function, lots of calculations would be | ||
96 | * needed to determine MFP register and int mask from the vector number :-( | ||
97 | * | ||
98 | * Furthermore, slow ints may not lower the IPL below its previous value | ||
99 | * (before the int happened). This is needed so that an int of class PRIO, on | ||
100 | * that this int may be stacked, cannot be reentered. This feature is | ||
101 | * implemented as follows: If the stack frame format is 1 (throwaway), the int | ||
102 | * is not stacked, and the IPL is anded with 0xfbff, resulting in a new level | ||
103 | * 2, which still blocks the HSYNC, but no interrupts of interest. If the | ||
104 | * frame format is 0, the int is nested, and the old IPL value can be found in | ||
105 | * the sr copy in the frame. | ||
106 | */ | ||
107 | |||
108 | #if 0 | ||
109 | |||
110 | #define NUM_INT_SOURCES (8 + NUM_ATARI_SOURCES) | ||
111 | |||
112 | typedef void (*asm_irq_handler)(void); | ||
113 | |||
114 | struct irqhandler { | ||
115 | irqreturn_t (*handler)(int, void *, struct pt_regs *); | ||
116 | void *dev_id; | ||
117 | }; | ||
118 | |||
119 | struct irqparam { | ||
120 | unsigned long flags; | ||
121 | const char *devname; | ||
122 | }; | ||
123 | |||
124 | /* | ||
125 | * Array with irq's and their parameter data. This array is accessed from low | ||
126 | * level assembler code, so an element size of 8 allows usage of index scaling | ||
127 | * addressing mode. | ||
128 | */ | 63 | */ |
129 | static struct irqhandler irq_handler[NUM_INT_SOURCES]; | ||
130 | |||
131 | /* | ||
132 | * This array hold the rest of parameters of int handlers: type | ||
133 | * (slow,fast,prio) and the name of the handler. These values are only | ||
134 | * accessed from C | ||
135 | */ | ||
136 | static struct irqparam irq_param[NUM_INT_SOURCES]; | ||
137 | |||
138 | /* check for valid int number (complex, sigh...) */ | ||
139 | #define IS_VALID_INTNO(n) \ | ||
140 | ((n) > 0 && \ | ||
141 | /* autovec and ST-MFP ok anyway */ \ | ||
142 | (((n) < TTMFP_SOURCE_BASE) || \ | ||
143 | /* TT-MFP ok if present */ \ | ||
144 | ((n) >= TTMFP_SOURCE_BASE && (n) < SCC_SOURCE_BASE && \ | ||
145 | ATARIHW_PRESENT(TT_MFP)) || \ | ||
146 | /* SCC ok if present and number even */ \ | ||
147 | ((n) >= SCC_SOURCE_BASE && (n) < VME_SOURCE_BASE && \ | ||
148 | !((n) & 1) && ATARIHW_PRESENT(SCC)) || \ | ||
149 | /* greater numbers ok if they are registered VME vectors */ \ | ||
150 | ((n) >= VME_SOURCE_BASE && (n) < VME_SOURCE_BASE + VME_MAX_SOURCES && \ | ||
151 | free_vme_vec_bitmap & (1 << ((n) - VME_SOURCE_BASE))))) | ||
152 | |||
153 | |||
154 | /* | ||
155 | * Here start the assembler entry points for interrupts | ||
156 | */ | ||
157 | |||
158 | #define IRQ_NAME(nr) atari_slow_irq_##nr##_handler(void) | ||
159 | |||
160 | #define BUILD_SLOW_IRQ(n) \ | ||
161 | asmlinkage void IRQ_NAME(n); \ | ||
162 | /* Dummy function to allow asm with operands. */ \ | ||
163 | void atari_slow_irq_##n##_dummy (void) { \ | ||
164 | __asm__ (__ALIGN_STR "\n" \ | ||
165 | "atari_slow_irq_" #n "_handler:\t" \ | ||
166 | " addl %6,%5\n" /* preempt_count() += HARDIRQ_OFFSET */ \ | ||
167 | SAVE_ALL_INT "\n" \ | ||
168 | GET_CURRENT(%%d0) "\n" \ | ||
169 | " andb #~(1<<(%c3&7)),%a4:w\n" /* mask this interrupt */ \ | ||
170 | /* get old IPL from stack frame */ \ | ||
171 | " bfextu %%sp@(%c2){#5,#3},%%d0\n" \ | ||
172 | " movew %%sr,%%d1\n" \ | ||
173 | " bfins %%d0,%%d1{#21,#3}\n" \ | ||
174 | " movew %%d1,%%sr\n" /* set IPL = previous value */ \ | ||
175 | " addql #1,%a0\n" \ | ||
176 | " lea %a1,%%a0\n" \ | ||
177 | " pea %%sp@\n" /* push addr of frame */ \ | ||
178 | " movel %%a0@(4),%%sp@-\n" /* push handler data */ \ | ||
179 | " pea (%c3+8)\n" /* push int number */ \ | ||
180 | " movel %%a0@,%%a0\n" \ | ||
181 | " jbsr %%a0@\n" /* call the handler */ \ | ||
182 | " addql #8,%%sp\n" \ | ||
183 | " addql #4,%%sp\n" \ | ||
184 | " orw #0x0600,%%sr\n" \ | ||
185 | " andw #0xfeff,%%sr\n" /* set IPL = 6 again */ \ | ||
186 | " orb #(1<<(%c3&7)),%a4:w\n" /* now unmask the int again */ \ | ||
187 | " jbra ret_from_interrupt\n" \ | ||
188 | : : "i" (&kstat_cpu(0).irqs[n+8]), "i" (&irq_handler[n+8]), \ | ||
189 | "n" (PT_OFF_SR), "n" (n), \ | ||
190 | "i" (n & 8 ? (n & 16 ? &tt_mfp.int_mk_a : &st_mfp.int_mk_a) \ | ||
191 | : (n & 16 ? &tt_mfp.int_mk_b : &st_mfp.int_mk_b)), \ | ||
192 | "m" (preempt_count()), "di" (HARDIRQ_OFFSET) \ | ||
193 | ); \ | ||
194 | for (;;); /* fake noreturn */ \ | ||
195 | } | ||
196 | |||
197 | BUILD_SLOW_IRQ(0); | ||
198 | BUILD_SLOW_IRQ(1); | ||
199 | BUILD_SLOW_IRQ(2); | ||
200 | BUILD_SLOW_IRQ(3); | ||
201 | BUILD_SLOW_IRQ(4); | ||
202 | BUILD_SLOW_IRQ(5); | ||
203 | BUILD_SLOW_IRQ(6); | ||
204 | BUILD_SLOW_IRQ(7); | ||
205 | BUILD_SLOW_IRQ(8); | ||
206 | BUILD_SLOW_IRQ(9); | ||
207 | BUILD_SLOW_IRQ(10); | ||
208 | BUILD_SLOW_IRQ(11); | ||
209 | BUILD_SLOW_IRQ(12); | ||
210 | BUILD_SLOW_IRQ(13); | ||
211 | BUILD_SLOW_IRQ(14); | ||
212 | BUILD_SLOW_IRQ(15); | ||
213 | BUILD_SLOW_IRQ(16); | ||
214 | BUILD_SLOW_IRQ(17); | ||
215 | BUILD_SLOW_IRQ(18); | ||
216 | BUILD_SLOW_IRQ(19); | ||
217 | BUILD_SLOW_IRQ(20); | ||
218 | BUILD_SLOW_IRQ(21); | ||
219 | BUILD_SLOW_IRQ(22); | ||
220 | BUILD_SLOW_IRQ(23); | ||
221 | BUILD_SLOW_IRQ(24); | ||
222 | BUILD_SLOW_IRQ(25); | ||
223 | BUILD_SLOW_IRQ(26); | ||
224 | BUILD_SLOW_IRQ(27); | ||
225 | BUILD_SLOW_IRQ(28); | ||
226 | BUILD_SLOW_IRQ(29); | ||
227 | BUILD_SLOW_IRQ(30); | ||
228 | BUILD_SLOW_IRQ(31); | ||
229 | |||
230 | asm_irq_handler slow_handlers[32] = { | ||
231 | [0] = atari_slow_irq_0_handler, | ||
232 | [1] = atari_slow_irq_1_handler, | ||
233 | [2] = atari_slow_irq_2_handler, | ||
234 | [3] = atari_slow_irq_3_handler, | ||
235 | [4] = atari_slow_irq_4_handler, | ||
236 | [5] = atari_slow_irq_5_handler, | ||
237 | [6] = atari_slow_irq_6_handler, | ||
238 | [7] = atari_slow_irq_7_handler, | ||
239 | [8] = atari_slow_irq_8_handler, | ||
240 | [9] = atari_slow_irq_9_handler, | ||
241 | [10] = atari_slow_irq_10_handler, | ||
242 | [11] = atari_slow_irq_11_handler, | ||
243 | [12] = atari_slow_irq_12_handler, | ||
244 | [13] = atari_slow_irq_13_handler, | ||
245 | [14] = atari_slow_irq_14_handler, | ||
246 | [15] = atari_slow_irq_15_handler, | ||
247 | [16] = atari_slow_irq_16_handler, | ||
248 | [17] = atari_slow_irq_17_handler, | ||
249 | [18] = atari_slow_irq_18_handler, | ||
250 | [19] = atari_slow_irq_19_handler, | ||
251 | [20] = atari_slow_irq_20_handler, | ||
252 | [21] = atari_slow_irq_21_handler, | ||
253 | [22] = atari_slow_irq_22_handler, | ||
254 | [23] = atari_slow_irq_23_handler, | ||
255 | [24] = atari_slow_irq_24_handler, | ||
256 | [25] = atari_slow_irq_25_handler, | ||
257 | [26] = atari_slow_irq_26_handler, | ||
258 | [27] = atari_slow_irq_27_handler, | ||
259 | [28] = atari_slow_irq_28_handler, | ||
260 | [29] = atari_slow_irq_29_handler, | ||
261 | [30] = atari_slow_irq_30_handler, | ||
262 | [31] = atari_slow_irq_31_handler | ||
263 | }; | ||
264 | |||
265 | asmlinkage void atari_fast_irq_handler( void ); | ||
266 | asmlinkage void atari_prio_irq_handler( void ); | ||
267 | |||
268 | /* Dummy function to allow asm with operands. */ | ||
269 | void atari_fast_prio_irq_dummy (void) { | ||
270 | __asm__ (__ALIGN_STR "\n" | ||
271 | "atari_fast_irq_handler:\n\t" | ||
272 | "orw #0x700,%%sr\n" /* disable all interrupts */ | ||
273 | "atari_prio_irq_handler:\n\t" | ||
274 | "addl %3,%2\n\t" /* preempt_count() += HARDIRQ_OFFSET */ | ||
275 | SAVE_ALL_INT "\n\t" | ||
276 | GET_CURRENT(%%d0) "\n\t" | ||
277 | /* get vector number from stack frame and convert to source */ | ||
278 | "bfextu %%sp@(%c1){#4,#10},%%d0\n\t" | ||
279 | "subw #(0x40-8),%%d0\n\t" | ||
280 | "jpl 1f\n\t" | ||
281 | "addw #(0x40-8-0x18),%%d0\n" | ||
282 | "1:\tlea %a0,%%a0\n\t" | ||
283 | "addql #1,%%a0@(%%d0:l:4)\n\t" | ||
284 | "lea irq_handler,%%a0\n\t" | ||
285 | "lea %%a0@(%%d0:l:8),%%a0\n\t" | ||
286 | "pea %%sp@\n\t" /* push frame address */ | ||
287 | "movel %%a0@(4),%%sp@-\n\t" /* push handler data */ | ||
288 | "movel %%d0,%%sp@-\n\t" /* push int number */ | ||
289 | "movel %%a0@,%%a0\n\t" | ||
290 | "jsr %%a0@\n\t" /* and call the handler */ | ||
291 | "addql #8,%%sp\n\t" | ||
292 | "addql #4,%%sp\n\t" | ||
293 | "jbra ret_from_interrupt" | ||
294 | : : "i" (&kstat_cpu(0).irqs), "n" (PT_OFF_FORMATVEC), | ||
295 | "m" (preempt_count()), "di" (HARDIRQ_OFFSET) | ||
296 | ); | ||
297 | for (;;); | ||
298 | } | ||
299 | #endif | ||
300 | 64 | ||
301 | /* | 65 | /* |
302 | * Bitmap for free interrupt vector numbers | 66 | * Bitmap for free interrupt vector numbers |
@@ -320,31 +84,44 @@ extern void atari_microwire_cmd(int cmd); | |||
320 | 84 | ||
321 | extern int atari_SCC_reset_done; | 85 | extern int atari_SCC_reset_done; |
322 | 86 | ||
323 | static int atari_startup_irq(unsigned int irq) | 87 | static unsigned int atari_irq_startup(struct irq_data *data) |
324 | { | 88 | { |
325 | m68k_irq_startup(irq); | 89 | unsigned int irq = data->irq; |
90 | |||
91 | m68k_irq_startup(data); | ||
326 | atari_turnon_irq(irq); | 92 | atari_turnon_irq(irq); |
327 | atari_enable_irq(irq); | 93 | atari_enable_irq(irq); |
328 | return 0; | 94 | return 0; |
329 | } | 95 | } |
330 | 96 | ||
331 | static void atari_shutdown_irq(unsigned int irq) | 97 | static void atari_irq_shutdown(struct irq_data *data) |
332 | { | 98 | { |
99 | unsigned int irq = data->irq; | ||
100 | |||
333 | atari_disable_irq(irq); | 101 | atari_disable_irq(irq); |
334 | atari_turnoff_irq(irq); | 102 | atari_turnoff_irq(irq); |
335 | m68k_irq_shutdown(irq); | 103 | m68k_irq_shutdown(data); |
336 | 104 | ||
337 | if (irq == IRQ_AUTO_4) | 105 | if (irq == IRQ_AUTO_4) |
338 | vectors[VEC_INT4] = falcon_hblhandler; | 106 | vectors[VEC_INT4] = falcon_hblhandler; |
339 | } | 107 | } |
340 | 108 | ||
341 | static struct irq_controller atari_irq_controller = { | 109 | static void atari_irq_enable(struct irq_data *data) |
110 | { | ||
111 | atari_enable_irq(data->irq); | ||
112 | } | ||
113 | |||
114 | static void atari_irq_disable(struct irq_data *data) | ||
115 | { | ||
116 | atari_disable_irq(data->irq); | ||
117 | } | ||
118 | |||
119 | static struct irq_chip atari_irq_chip = { | ||
342 | .name = "atari", | 120 | .name = "atari", |
343 | .lock = __SPIN_LOCK_UNLOCKED(atari_irq_controller.lock), | 121 | .irq_startup = atari_irq_startup, |
344 | .startup = atari_startup_irq, | 122 | .irq_shutdown = atari_irq_shutdown, |
345 | .shutdown = atari_shutdown_irq, | 123 | .irq_enable = atari_irq_enable, |
346 | .enable = atari_enable_irq, | 124 | .irq_disable = atari_irq_disable, |
347 | .disable = atari_disable_irq, | ||
348 | }; | 125 | }; |
349 | 126 | ||
350 | /* | 127 | /* |
@@ -360,8 +137,9 @@ static struct irq_controller atari_irq_controller = { | |||
360 | 137 | ||
361 | void __init atari_init_IRQ(void) | 138 | void __init atari_init_IRQ(void) |
362 | { | 139 | { |
363 | m68k_setup_user_interrupt(VEC_USER, NUM_ATARI_SOURCES - IRQ_USER, NULL); | 140 | m68k_setup_user_interrupt(VEC_USER, NUM_ATARI_SOURCES - IRQ_USER); |
364 | m68k_setup_irq_controller(&atari_irq_controller, 1, NUM_ATARI_SOURCES - 1); | 141 | m68k_setup_irq_controller(&atari_irq_chip, handle_simple_irq, 1, |
142 | NUM_ATARI_SOURCES - 1); | ||
365 | 143 | ||
366 | /* Initialize the MFP(s) */ | 144 | /* Initialize the MFP(s) */ |
367 | 145 | ||
diff --git a/arch/m68k/bvme6000/config.c b/arch/m68k/bvme6000/config.c index 1edd95095cb4..81286476f740 100644 --- a/arch/m68k/bvme6000/config.c +++ b/arch/m68k/bvme6000/config.c | |||
@@ -86,7 +86,7 @@ static void bvme6000_get_model(char *model) | |||
86 | */ | 86 | */ |
87 | static void __init bvme6000_init_IRQ(void) | 87 | static void __init bvme6000_init_IRQ(void) |
88 | { | 88 | { |
89 | m68k_setup_user_interrupt(VEC_USER, 192, NULL); | 89 | m68k_setup_user_interrupt(VEC_USER, 192); |
90 | } | 90 | } |
91 | 91 | ||
92 | void __init config_bvme6000(void) | 92 | void __init config_bvme6000(void) |
diff --git a/arch/m68k/hp300/time.c b/arch/m68k/hp300/time.c index f6312c7d8727..c87fe69b0728 100644 --- a/arch/m68k/hp300/time.c +++ b/arch/m68k/hp300/time.c | |||
@@ -70,7 +70,7 @@ void __init hp300_sched_init(irq_handler_t vector) | |||
70 | 70 | ||
71 | asm volatile(" movpw %0,%1@(5)" : : "d" (INTVAL), "a" (CLOCKBASE)); | 71 | asm volatile(" movpw %0,%1@(5)" : : "d" (INTVAL), "a" (CLOCKBASE)); |
72 | 72 | ||
73 | if (request_irq(IRQ_AUTO_6, hp300_tick, IRQ_FLG_STD, "timer tick", vector)) | 73 | if (request_irq(IRQ_AUTO_6, hp300_tick, 0, "timer tick", vector)) |
74 | pr_err("Couldn't register timer interrupt\n"); | 74 | pr_err("Couldn't register timer interrupt\n"); |
75 | 75 | ||
76 | out_8(CLOCKBASE + CLKCR2, 0x1); /* select CR1 */ | 76 | out_8(CLOCKBASE + CLKCR2, 0x1); /* select CR1 */ |
diff --git a/arch/m68k/include/asm/hardirq.h b/arch/m68k/include/asm/hardirq.h index 870e5347155b..db30ed276878 100644 --- a/arch/m68k/include/asm/hardirq.h +++ b/arch/m68k/include/asm/hardirq.h | |||
@@ -18,6 +18,11 @@ | |||
18 | 18 | ||
19 | #ifdef CONFIG_MMU | 19 | #ifdef CONFIG_MMU |
20 | 20 | ||
21 | static inline void ack_bad_irq(unsigned int irq) | ||
22 | { | ||
23 | pr_crit("unexpected IRQ trap at vector %02x\n", irq); | ||
24 | } | ||
25 | |||
21 | /* entry.S is sensitive to the offsets of these fields */ | 26 | /* entry.S is sensitive to the offsets of these fields */ |
22 | typedef struct { | 27 | typedef struct { |
23 | unsigned int __softirq_pending; | 28 | unsigned int __softirq_pending; |
diff --git a/arch/m68k/include/asm/irq.h b/arch/m68k/include/asm/irq.h index 69ed0d74d532..6198df5ff245 100644 --- a/arch/m68k/include/asm/irq.h +++ b/arch/m68k/include/asm/irq.h | |||
@@ -27,11 +27,6 @@ | |||
27 | 27 | ||
28 | #ifdef CONFIG_MMU | 28 | #ifdef CONFIG_MMU |
29 | 29 | ||
30 | #include <linux/linkage.h> | ||
31 | #include <linux/hardirq.h> | ||
32 | #include <linux/irqreturn.h> | ||
33 | #include <linux/spinlock_types.h> | ||
34 | |||
35 | /* | 30 | /* |
36 | * Interrupt source definitions | 31 | * Interrupt source definitions |
37 | * General interrupt sources are the level 1-7. | 32 | * General interrupt sources are the level 1-7. |
@@ -54,10 +49,6 @@ | |||
54 | 49 | ||
55 | #define IRQ_USER 8 | 50 | #define IRQ_USER 8 |
56 | 51 | ||
57 | extern unsigned int irq_canonicalize(unsigned int irq); | ||
58 | |||
59 | struct pt_regs; | ||
60 | |||
61 | /* | 52 | /* |
62 | * various flags for request_irq() - the Amiga now uses the standard | 53 | * various flags for request_irq() - the Amiga now uses the standard |
63 | * mechanism like all other architectures - IRQF_DISABLED and | 54 | * mechanism like all other architectures - IRQF_DISABLED and |
@@ -71,57 +62,27 @@ struct pt_regs; | |||
71 | #define IRQ_FLG_STD (0x8000) /* internally used */ | 62 | #define IRQ_FLG_STD (0x8000) /* internally used */ |
72 | #endif | 63 | #endif |
73 | 64 | ||
74 | /* | 65 | struct irq_data; |
75 | * This structure is used to chain together the ISRs for a particular | 66 | struct irq_chip; |
76 | * interrupt source (if it supports chaining). | 67 | struct irq_desc; |
77 | */ | 68 | extern unsigned int m68k_irq_startup(struct irq_data *data); |
78 | typedef struct irq_node { | 69 | extern unsigned int m68k_irq_startup_irq(unsigned int irq); |
79 | irqreturn_t (*handler)(int, void *); | 70 | extern void m68k_irq_shutdown(struct irq_data *data); |
80 | void *dev_id; | 71 | extern void m68k_setup_auto_interrupt(void (*handler)(unsigned int, |
81 | struct irq_node *next; | 72 | struct pt_regs *)); |
82 | unsigned long flags; | 73 | extern void m68k_setup_user_interrupt(unsigned int vec, unsigned int cnt); |
83 | const char *devname; | 74 | extern void m68k_setup_irq_controller(struct irq_chip *, |
84 | } irq_node_t; | 75 | void (*handle)(unsigned int irq, |
85 | 76 | struct irq_desc *desc), | |
86 | /* | 77 | unsigned int irq, unsigned int cnt); |
87 | * This structure has only 4 elements for speed reasons | ||
88 | */ | ||
89 | struct irq_handler { | ||
90 | int (*handler)(int, void *); | ||
91 | unsigned long flags; | ||
92 | void *dev_id; | ||
93 | const char *devname; | ||
94 | }; | ||
95 | |||
96 | struct irq_controller { | ||
97 | const char *name; | ||
98 | spinlock_t lock; | ||
99 | int (*startup)(unsigned int irq); | ||
100 | void (*shutdown)(unsigned int irq); | ||
101 | void (*enable)(unsigned int irq); | ||
102 | void (*disable)(unsigned int irq); | ||
103 | }; | ||
104 | |||
105 | extern int m68k_irq_startup(unsigned int); | ||
106 | extern void m68k_irq_shutdown(unsigned int); | ||
107 | |||
108 | /* | ||
109 | * This function returns a new irq_node_t | ||
110 | */ | ||
111 | extern irq_node_t *new_irq_node(void); | ||
112 | 78 | ||
113 | extern void m68k_setup_auto_interrupt(void (*handler)(unsigned int, struct pt_regs *)); | 79 | extern unsigned int irq_canonicalize(unsigned int irq); |
114 | extern void m68k_setup_user_interrupt(unsigned int vec, unsigned int cnt, | ||
115 | void (*handler)(unsigned int, struct pt_regs *)); | ||
116 | extern void m68k_setup_irq_controller(struct irq_controller *, unsigned int, unsigned int); | ||
117 | |||
118 | asmlinkage void m68k_handle_int(unsigned int); | ||
119 | asmlinkage void __m68k_handle_int(unsigned int, struct pt_regs *); | ||
120 | 80 | ||
121 | #else | 81 | #else |
122 | #define irq_canonicalize(irq) (irq) | 82 | #define irq_canonicalize(irq) (irq) |
123 | #endif /* CONFIG_MMU */ | 83 | #endif /* CONFIG_MMU */ |
124 | 84 | ||
125 | asmlinkage void do_IRQ(int irq, struct pt_regs *regs); | 85 | asmlinkage void do_IRQ(int irq, struct pt_regs *regs); |
86 | extern atomic_t irq_err_count; | ||
126 | 87 | ||
127 | #endif /* _M68K_IRQ_H_ */ | 88 | #endif /* _M68K_IRQ_H_ */ |
diff --git a/arch/m68k/include/asm/macintosh.h b/arch/m68k/include/asm/macintosh.h index c2a1c5eac1a6..12ebe43b008b 100644 --- a/arch/m68k/include/asm/macintosh.h +++ b/arch/m68k/include/asm/macintosh.h | |||
@@ -12,6 +12,8 @@ extern void mac_reset(void); | |||
12 | extern void mac_poweroff(void); | 12 | extern void mac_poweroff(void); |
13 | extern void mac_init_IRQ(void); | 13 | extern void mac_init_IRQ(void); |
14 | extern int mac_irq_pending(unsigned int); | 14 | extern int mac_irq_pending(unsigned int); |
15 | extern void mac_irq_enable(struct irq_data *data); | ||
16 | extern void mac_irq_disable(struct irq_data *data); | ||
15 | 17 | ||
16 | /* | 18 | /* |
17 | * Floppy driver magic hook - probably shouldn't be here | 19 | * Floppy driver magic hook - probably shouldn't be here |
diff --git a/arch/m68k/include/asm/q40ints.h b/arch/m68k/include/asm/q40ints.h index 3d970afb708f..22f12c9eb910 100644 --- a/arch/m68k/include/asm/q40ints.h +++ b/arch/m68k/include/asm/q40ints.h | |||
@@ -24,6 +24,3 @@ | |||
24 | #define Q40_IRQ10_MASK (1<<5) | 24 | #define Q40_IRQ10_MASK (1<<5) |
25 | #define Q40_IRQ14_MASK (1<<6) | 25 | #define Q40_IRQ14_MASK (1<<6) |
26 | #define Q40_IRQ15_MASK (1<<7) | 26 | #define Q40_IRQ15_MASK (1<<7) |
27 | |||
28 | extern unsigned long q40_probe_irq_on (void); | ||
29 | extern int q40_probe_irq_off (unsigned long irqs); | ||
diff --git a/arch/m68k/kernel/Makefile b/arch/m68k/kernel/Makefile index e7f0f2e5ad44..c5696193281a 100644 --- a/arch/m68k/kernel/Makefile +++ b/arch/m68k/kernel/Makefile | |||
@@ -6,16 +6,15 @@ extra-$(CONFIG_MMU) := head.o | |||
6 | extra-$(CONFIG_SUN3) := sun3-head.o | 6 | extra-$(CONFIG_SUN3) := sun3-head.o |
7 | extra-y += vmlinux.lds | 7 | extra-y += vmlinux.lds |
8 | 8 | ||
9 | obj-y := entry.o m68k_ksyms.o module.o process.o ptrace.o setup.o signal.o \ | 9 | obj-y := entry.o irq.o m68k_ksyms.o module.o process.o ptrace.o setup.o \ |
10 | sys_m68k.o syscalltable.o time.o traps.o | 10 | signal.o sys_m68k.o syscalltable.o time.o traps.o |
11 | 11 | ||
12 | obj-$(CONFIG_MMU) += ints.o devres.o vectors.o | 12 | obj-$(CONFIG_MMU) += ints.o vectors.o |
13 | devres-$(CONFIG_MMU) = ../../../kernel/irq/devres.o | ||
14 | 13 | ||
15 | ifndef CONFIG_MMU_SUN3 | 14 | ifndef CONFIG_MMU_SUN3 |
16 | obj-y += dma.o | 15 | obj-y += dma.o |
17 | endif | 16 | endif |
18 | ifndef CONFIG_MMU | 17 | ifndef CONFIG_MMU |
19 | obj-y += init_task.o irq.o | 18 | obj-y += init_task.o |
20 | endif | 19 | endif |
21 | 20 | ||
diff --git a/arch/m68k/kernel/entry_mm.S b/arch/m68k/kernel/entry_mm.S index bd0ec05263b2..c713f514843d 100644 --- a/arch/m68k/kernel/entry_mm.S +++ b/arch/m68k/kernel/entry_mm.S | |||
@@ -48,7 +48,7 @@ | |||
48 | .globl sys_fork, sys_clone, sys_vfork | 48 | .globl sys_fork, sys_clone, sys_vfork |
49 | .globl ret_from_interrupt, bad_interrupt | 49 | .globl ret_from_interrupt, bad_interrupt |
50 | .globl auto_irqhandler_fixup | 50 | .globl auto_irqhandler_fixup |
51 | .globl user_irqvec_fixup, user_irqhandler_fixup | 51 | .globl user_irqvec_fixup |
52 | 52 | ||
53 | .text | 53 | .text |
54 | ENTRY(buserr) | 54 | ENTRY(buserr) |
@@ -207,7 +207,7 @@ ENTRY(auto_inthandler) | |||
207 | movel %sp,%sp@- | 207 | movel %sp,%sp@- |
208 | movel %d0,%sp@- | put vector # on stack | 208 | movel %d0,%sp@- | put vector # on stack |
209 | auto_irqhandler_fixup = . + 2 | 209 | auto_irqhandler_fixup = . + 2 |
210 | jsr __m68k_handle_int | process the IRQ | 210 | jsr do_IRQ | process the IRQ |
211 | addql #8,%sp | pop parameters off stack | 211 | addql #8,%sp | pop parameters off stack |
212 | 212 | ||
213 | ret_from_interrupt: | 213 | ret_from_interrupt: |
@@ -240,8 +240,7 @@ user_irqvec_fixup = . + 2 | |||
240 | 240 | ||
241 | movel %sp,%sp@- | 241 | movel %sp,%sp@- |
242 | movel %d0,%sp@- | put vector # on stack | 242 | movel %d0,%sp@- | put vector # on stack |
243 | user_irqhandler_fixup = . + 2 | 243 | jsr do_IRQ | process the IRQ |
244 | jsr __m68k_handle_int | process the IRQ | ||
245 | addql #8,%sp | pop parameters off stack | 244 | addql #8,%sp | pop parameters off stack |
246 | 245 | ||
247 | subqb #1,%curptr@(TASK_INFO+TINFO_PREEMPT+1) | 246 | subqb #1,%curptr@(TASK_INFO+TINFO_PREEMPT+1) |
diff --git a/arch/m68k/kernel/ints.c b/arch/m68k/kernel/ints.c index 761ee0440c99..74fefac00899 100644 --- a/arch/m68k/kernel/ints.c +++ b/arch/m68k/kernel/ints.c | |||
@@ -4,25 +4,6 @@ | |||
4 | * This file is subject to the terms and conditions of the GNU General Public | 4 | * This file is subject to the terms and conditions of the GNU General Public |
5 | * License. See the file COPYING in the main directory of this archive | 5 | * License. See the file COPYING in the main directory of this archive |
6 | * for more details. | 6 | * for more details. |
7 | * | ||
8 | * 07/03/96: Timer initialization, and thus mach_sched_init(), | ||
9 | * removed from request_irq() and moved to init_time(). | ||
10 | * We should therefore consider renaming our add_isr() and | ||
11 | * remove_isr() to request_irq() and free_irq() | ||
12 | * respectively, so they are compliant with the other | ||
13 | * architectures. /Jes | ||
14 | * 11/07/96: Changed all add_/remove_isr() to request_/free_irq() calls. | ||
15 | * Removed irq list support, if any machine needs an irq server | ||
16 | * it must implement this itself (as it's already done), instead | ||
17 | * only default handler are used with mach_default_handler. | ||
18 | * request_irq got some flags different from other architectures: | ||
19 | * - IRQ_FLG_REPLACE : Replace an existing handler (the default one | ||
20 | * can be replaced without this flag) | ||
21 | * - IRQ_FLG_LOCK : handler can't be replaced | ||
22 | * There are other machine depending flags, see there | ||
23 | * If you want to replace a default handler you should know what | ||
24 | * you're doing, since it might handle different other irq sources | ||
25 | * which must be served /Roman Zippel | ||
26 | */ | 7 | */ |
27 | 8 | ||
28 | #include <linux/module.h> | 9 | #include <linux/module.h> |
@@ -47,33 +28,22 @@ | |||
47 | #endif | 28 | #endif |
48 | 29 | ||
49 | extern u32 auto_irqhandler_fixup[]; | 30 | extern u32 auto_irqhandler_fixup[]; |
50 | extern u32 user_irqhandler_fixup[]; | ||
51 | extern u16 user_irqvec_fixup[]; | 31 | extern u16 user_irqvec_fixup[]; |
52 | 32 | ||
53 | /* table for system interrupt handlers */ | ||
54 | static struct irq_node *irq_list[NR_IRQS]; | ||
55 | static struct irq_controller *irq_controller[NR_IRQS]; | ||
56 | static int irq_depth[NR_IRQS]; | ||
57 | |||
58 | static int m68k_first_user_vec; | 33 | static int m68k_first_user_vec; |
59 | 34 | ||
60 | static struct irq_controller auto_irq_controller = { | 35 | static struct irq_chip auto_irq_chip = { |
61 | .name = "auto", | 36 | .name = "auto", |
62 | .lock = __SPIN_LOCK_UNLOCKED(auto_irq_controller.lock), | 37 | .irq_startup = m68k_irq_startup, |
63 | .startup = m68k_irq_startup, | 38 | .irq_shutdown = m68k_irq_shutdown, |
64 | .shutdown = m68k_irq_shutdown, | ||
65 | }; | 39 | }; |
66 | 40 | ||
67 | static struct irq_controller user_irq_controller = { | 41 | static struct irq_chip user_irq_chip = { |
68 | .name = "user", | 42 | .name = "user", |
69 | .lock = __SPIN_LOCK_UNLOCKED(user_irq_controller.lock), | 43 | .irq_startup = m68k_irq_startup, |
70 | .startup = m68k_irq_startup, | 44 | .irq_shutdown = m68k_irq_shutdown, |
71 | .shutdown = m68k_irq_shutdown, | ||
72 | }; | 45 | }; |
73 | 46 | ||
74 | #define NUM_IRQ_NODES 100 | ||
75 | static irq_node_t nodes[NUM_IRQ_NODES]; | ||
76 | |||
77 | /* | 47 | /* |
78 | * void init_IRQ(void) | 48 | * void init_IRQ(void) |
79 | * | 49 | * |
@@ -96,7 +66,7 @@ void __init init_IRQ(void) | |||
96 | } | 66 | } |
97 | 67 | ||
98 | for (i = IRQ_AUTO_1; i <= IRQ_AUTO_7; i++) | 68 | for (i = IRQ_AUTO_1; i <= IRQ_AUTO_7; i++) |
99 | irq_controller[i] = &auto_irq_controller; | 69 | irq_set_chip_and_handler(i, &auto_irq_chip, handle_simple_irq); |
100 | 70 | ||
101 | mach_init_IRQ(); | 71 | mach_init_IRQ(); |
102 | } | 72 | } |
@@ -106,7 +76,7 @@ void __init init_IRQ(void) | |||
106 | * @handler: called from auto vector interrupts | 76 | * @handler: called from auto vector interrupts |
107 | * | 77 | * |
108 | * setup the handler to be called from auto vector interrupts instead of the | 78 | * setup the handler to be called from auto vector interrupts instead of the |
109 | * standard __m68k_handle_int(), it will be called with irq numbers in the range | 79 | * standard do_IRQ(), it will be called with irq numbers in the range |
110 | * from IRQ_AUTO_1 - IRQ_AUTO_7. | 80 | * from IRQ_AUTO_1 - IRQ_AUTO_7. |
111 | */ | 81 | */ |
112 | void __init m68k_setup_auto_interrupt(void (*handler)(unsigned int, struct pt_regs *)) | 82 | void __init m68k_setup_auto_interrupt(void (*handler)(unsigned int, struct pt_regs *)) |
@@ -120,217 +90,49 @@ void __init m68k_setup_auto_interrupt(void (*handler)(unsigned int, struct pt_re | |||
120 | * m68k_setup_user_interrupt | 90 | * m68k_setup_user_interrupt |
121 | * @vec: first user vector interrupt to handle | 91 | * @vec: first user vector interrupt to handle |
122 | * @cnt: number of active user vector interrupts | 92 | * @cnt: number of active user vector interrupts |
123 | * @handler: called from user vector interrupts | ||
124 | * | 93 | * |
125 | * setup user vector interrupts, this includes activating the specified range | 94 | * setup user vector interrupts, this includes activating the specified range |
126 | * of interrupts, only then these interrupts can be requested (note: this is | 95 | * of interrupts, only then these interrupts can be requested (note: this is |
127 | * different from auto vector interrupts). An optional handler can be installed | 96 | * different from auto vector interrupts). |
128 | * to be called instead of the default __m68k_handle_int(), it will be called | ||
129 | * with irq numbers starting from IRQ_USER. | ||
130 | */ | 97 | */ |
131 | void __init m68k_setup_user_interrupt(unsigned int vec, unsigned int cnt, | 98 | void __init m68k_setup_user_interrupt(unsigned int vec, unsigned int cnt) |
132 | void (*handler)(unsigned int, struct pt_regs *)) | ||
133 | { | 99 | { |
134 | int i; | 100 | int i; |
135 | 101 | ||
136 | BUG_ON(IRQ_USER + cnt > NR_IRQS); | 102 | BUG_ON(IRQ_USER + cnt > NR_IRQS); |
137 | m68k_first_user_vec = vec; | 103 | m68k_first_user_vec = vec; |
138 | for (i = 0; i < cnt; i++) | 104 | for (i = 0; i < cnt; i++) |
139 | irq_controller[IRQ_USER + i] = &user_irq_controller; | 105 | irq_set_chip(IRQ_USER + i, &user_irq_chip); |
140 | *user_irqvec_fixup = vec - IRQ_USER; | 106 | *user_irqvec_fixup = vec - IRQ_USER; |
141 | if (handler) | ||
142 | *user_irqhandler_fixup = (u32)handler; | ||
143 | flush_icache(); | 107 | flush_icache(); |
144 | } | 108 | } |
145 | 109 | ||
146 | /** | 110 | /** |
147 | * m68k_setup_irq_controller | 111 | * m68k_setup_irq_controller |
148 | * @contr: irq controller which controls specified irq | 112 | * @chip: irq chip which controls specified irq |
113 | * @handle: flow handler which handles specified irq | ||
149 | * @irq: first irq to be managed by the controller | 114 | * @irq: first irq to be managed by the controller |
115 | * @cnt: number of irqs to be managed by the controller | ||
150 | * | 116 | * |
151 | * Change the controller for the specified range of irq, which will be used to | 117 | * Change the controller for the specified range of irq, which will be used to |
152 | * manage these irq. auto/user irq already have a default controller, which can | 118 | * manage these irq. auto/user irq already have a default controller, which can |
153 | * be changed as well, but the controller probably should use m68k_irq_startup/ | 119 | * be changed as well, but the controller probably should use m68k_irq_startup/ |
154 | * m68k_irq_shutdown. | 120 | * m68k_irq_shutdown. |
155 | */ | 121 | */ |
156 | void m68k_setup_irq_controller(struct irq_controller *contr, unsigned int irq, | 122 | void m68k_setup_irq_controller(struct irq_chip *chip, |
123 | irq_flow_handler_t handle, unsigned int irq, | ||
157 | unsigned int cnt) | 124 | unsigned int cnt) |
158 | { | 125 | { |
159 | int i; | 126 | int i; |
160 | 127 | ||
161 | for (i = 0; i < cnt; i++) | 128 | for (i = 0; i < cnt; i++) { |
162 | irq_controller[irq + i] = contr; | 129 | irq_set_chip(irq + i, chip); |
163 | } | 130 | if (handle) |
164 | 131 | irq_set_handler(irq + i, handle); | |
165 | irq_node_t *new_irq_node(void) | ||
166 | { | ||
167 | irq_node_t *node; | ||
168 | short i; | ||
169 | |||
170 | for (node = nodes, i = NUM_IRQ_NODES-1; i >= 0; node++, i--) { | ||
171 | if (!node->handler) { | ||
172 | memset(node, 0, sizeof(*node)); | ||
173 | return node; | ||
174 | } | ||
175 | } | 132 | } |
176 | |||
177 | printk ("new_irq_node: out of nodes\n"); | ||
178 | return NULL; | ||
179 | } | 133 | } |
180 | 134 | ||
181 | int setup_irq(unsigned int irq, struct irq_node *node) | 135 | unsigned int m68k_irq_startup_irq(unsigned int irq) |
182 | { | ||
183 | struct irq_controller *contr; | ||
184 | struct irq_node **prev; | ||
185 | unsigned long flags; | ||
186 | |||
187 | if (irq >= NR_IRQS || !(contr = irq_controller[irq])) { | ||
188 | printk("%s: Incorrect IRQ %d from %s\n", | ||
189 | __func__, irq, node->devname); | ||
190 | return -ENXIO; | ||
191 | } | ||
192 | |||
193 | spin_lock_irqsave(&contr->lock, flags); | ||
194 | |||
195 | prev = irq_list + irq; | ||
196 | if (*prev) { | ||
197 | /* Can't share interrupts unless both agree to */ | ||
198 | if (!((*prev)->flags & node->flags & IRQF_SHARED)) { | ||
199 | spin_unlock_irqrestore(&contr->lock, flags); | ||
200 | return -EBUSY; | ||
201 | } | ||
202 | while (*prev) | ||
203 | prev = &(*prev)->next; | ||
204 | } | ||
205 | |||
206 | if (!irq_list[irq]) { | ||
207 | if (contr->startup) | ||
208 | contr->startup(irq); | ||
209 | else | ||
210 | contr->enable(irq); | ||
211 | } | ||
212 | node->next = NULL; | ||
213 | *prev = node; | ||
214 | |||
215 | spin_unlock_irqrestore(&contr->lock, flags); | ||
216 | |||
217 | return 0; | ||
218 | } | ||
219 | |||
220 | int request_irq(unsigned int irq, | ||
221 | irq_handler_t handler, | ||
222 | unsigned long flags, const char *devname, void *dev_id) | ||
223 | { | ||
224 | struct irq_node *node; | ||
225 | int res; | ||
226 | |||
227 | node = new_irq_node(); | ||
228 | if (!node) | ||
229 | return -ENOMEM; | ||
230 | |||
231 | node->handler = handler; | ||
232 | node->flags = flags; | ||
233 | node->dev_id = dev_id; | ||
234 | node->devname = devname; | ||
235 | |||
236 | res = setup_irq(irq, node); | ||
237 | if (res) | ||
238 | node->handler = NULL; | ||
239 | |||
240 | return res; | ||
241 | } | ||
242 | |||
243 | EXPORT_SYMBOL(request_irq); | ||
244 | |||
245 | void free_irq(unsigned int irq, void *dev_id) | ||
246 | { | ||
247 | struct irq_controller *contr; | ||
248 | struct irq_node **p, *node; | ||
249 | unsigned long flags; | ||
250 | |||
251 | if (irq >= NR_IRQS || !(contr = irq_controller[irq])) { | ||
252 | printk("%s: Incorrect IRQ %d\n", __func__, irq); | ||
253 | return; | ||
254 | } | ||
255 | |||
256 | spin_lock_irqsave(&contr->lock, flags); | ||
257 | |||
258 | p = irq_list + irq; | ||
259 | while ((node = *p)) { | ||
260 | if (node->dev_id == dev_id) | ||
261 | break; | ||
262 | p = &node->next; | ||
263 | } | ||
264 | |||
265 | if (node) { | ||
266 | *p = node->next; | ||
267 | node->handler = NULL; | ||
268 | } else | ||
269 | printk("%s: Removing probably wrong IRQ %d\n", | ||
270 | __func__, irq); | ||
271 | |||
272 | if (!irq_list[irq]) { | ||
273 | if (contr->shutdown) | ||
274 | contr->shutdown(irq); | ||
275 | else | ||
276 | contr->disable(irq); | ||
277 | } | ||
278 | |||
279 | spin_unlock_irqrestore(&contr->lock, flags); | ||
280 | } | ||
281 | |||
282 | EXPORT_SYMBOL(free_irq); | ||
283 | |||
284 | void enable_irq(unsigned int irq) | ||
285 | { | ||
286 | struct irq_controller *contr; | ||
287 | unsigned long flags; | ||
288 | |||
289 | if (irq >= NR_IRQS || !(contr = irq_controller[irq])) { | ||
290 | printk("%s: Incorrect IRQ %d\n", | ||
291 | __func__, irq); | ||
292 | return; | ||
293 | } | ||
294 | |||
295 | spin_lock_irqsave(&contr->lock, flags); | ||
296 | if (irq_depth[irq]) { | ||
297 | if (!--irq_depth[irq]) { | ||
298 | if (contr->enable) | ||
299 | contr->enable(irq); | ||
300 | } | ||
301 | } else | ||
302 | WARN_ON(1); | ||
303 | spin_unlock_irqrestore(&contr->lock, flags); | ||
304 | } | ||
305 | |||
306 | EXPORT_SYMBOL(enable_irq); | ||
307 | |||
308 | void disable_irq(unsigned int irq) | ||
309 | { | ||
310 | struct irq_controller *contr; | ||
311 | unsigned long flags; | ||
312 | |||
313 | if (irq >= NR_IRQS || !(contr = irq_controller[irq])) { | ||
314 | printk("%s: Incorrect IRQ %d\n", | ||
315 | __func__, irq); | ||
316 | return; | ||
317 | } | ||
318 | |||
319 | spin_lock_irqsave(&contr->lock, flags); | ||
320 | if (!irq_depth[irq]++) { | ||
321 | if (contr->disable) | ||
322 | contr->disable(irq); | ||
323 | } | ||
324 | spin_unlock_irqrestore(&contr->lock, flags); | ||
325 | } | ||
326 | |||
327 | EXPORT_SYMBOL(disable_irq); | ||
328 | |||
329 | void disable_irq_nosync(unsigned int irq) __attribute__((alias("disable_irq"))); | ||
330 | |||
331 | EXPORT_SYMBOL(disable_irq_nosync); | ||
332 | |||
333 | int m68k_irq_startup(unsigned int irq) | ||
334 | { | 136 | { |
335 | if (irq <= IRQ_AUTO_7) | 137 | if (irq <= IRQ_AUTO_7) |
336 | vectors[VEC_SPUR + irq] = auto_inthandler; | 138 | vectors[VEC_SPUR + irq] = auto_inthandler; |
@@ -339,41 +141,21 @@ int m68k_irq_startup(unsigned int irq) | |||
339 | return 0; | 141 | return 0; |
340 | } | 142 | } |
341 | 143 | ||
342 | void m68k_irq_shutdown(unsigned int irq) | 144 | unsigned int m68k_irq_startup(struct irq_data *data) |
343 | { | 145 | { |
344 | if (irq <= IRQ_AUTO_7) | 146 | return m68k_irq_startup_irq(data->irq); |
345 | vectors[VEC_SPUR + irq] = bad_inthandler; | ||
346 | else | ||
347 | vectors[m68k_first_user_vec + irq - IRQ_USER] = bad_inthandler; | ||
348 | } | 147 | } |
349 | 148 | ||
350 | 149 | void m68k_irq_shutdown(struct irq_data *data) | |
351 | /* | ||
352 | * Do we need these probe functions on the m68k? | ||
353 | * | ||
354 | * ... may be useful with ISA devices | ||
355 | */ | ||
356 | unsigned long probe_irq_on (void) | ||
357 | { | 150 | { |
358 | #ifdef CONFIG_Q40 | 151 | unsigned int irq = data->irq; |
359 | if (MACH_IS_Q40) | ||
360 | return q40_probe_irq_on(); | ||
361 | #endif | ||
362 | return 0; | ||
363 | } | ||
364 | 152 | ||
365 | EXPORT_SYMBOL(probe_irq_on); | 153 | if (irq <= IRQ_AUTO_7) |
366 | 154 | vectors[VEC_SPUR + irq] = bad_inthandler; | |
367 | int probe_irq_off (unsigned long irqs) | 155 | else |
368 | { | 156 | vectors[m68k_first_user_vec + irq - IRQ_USER] = bad_inthandler; |
369 | #ifdef CONFIG_Q40 | ||
370 | if (MACH_IS_Q40) | ||
371 | return q40_probe_irq_off(irqs); | ||
372 | #endif | ||
373 | return 0; | ||
374 | } | 157 | } |
375 | 158 | ||
376 | EXPORT_SYMBOL(probe_irq_off); | ||
377 | 159 | ||
378 | unsigned int irq_canonicalize(unsigned int irq) | 160 | unsigned int irq_canonicalize(unsigned int irq) |
379 | { | 161 | { |
@@ -386,52 +168,9 @@ unsigned int irq_canonicalize(unsigned int irq) | |||
386 | 168 | ||
387 | EXPORT_SYMBOL(irq_canonicalize); | 169 | EXPORT_SYMBOL(irq_canonicalize); |
388 | 170 | ||
389 | asmlinkage void m68k_handle_int(unsigned int irq) | ||
390 | { | ||
391 | struct irq_node *node; | ||
392 | kstat_cpu(0).irqs[irq]++; | ||
393 | node = irq_list[irq]; | ||
394 | do { | ||
395 | node->handler(irq, node->dev_id); | ||
396 | node = node->next; | ||
397 | } while (node); | ||
398 | } | ||
399 | |||
400 | asmlinkage void __m68k_handle_int(unsigned int irq, struct pt_regs *regs) | ||
401 | { | ||
402 | struct pt_regs *old_regs; | ||
403 | old_regs = set_irq_regs(regs); | ||
404 | m68k_handle_int(irq); | ||
405 | set_irq_regs(old_regs); | ||
406 | } | ||
407 | 171 | ||
408 | asmlinkage void handle_badint(struct pt_regs *regs) | 172 | asmlinkage void handle_badint(struct pt_regs *regs) |
409 | { | 173 | { |
410 | kstat_cpu(0).irqs[0]++; | 174 | atomic_inc(&irq_err_count); |
411 | printk("unexpected interrupt from %u\n", regs->vector); | 175 | pr_warn("unexpected interrupt from %u\n", regs->vector); |
412 | } | ||
413 | |||
414 | int show_interrupts(struct seq_file *p, void *v) | ||
415 | { | ||
416 | struct irq_controller *contr; | ||
417 | struct irq_node *node; | ||
418 | int i = *(loff_t *) v; | ||
419 | |||
420 | /* autovector interrupts */ | ||
421 | if (irq_list[i]) { | ||
422 | contr = irq_controller[i]; | ||
423 | node = irq_list[i]; | ||
424 | seq_printf(p, "%-8s %3u: %10u %s", contr->name, i, kstat_cpu(0).irqs[i], node->devname); | ||
425 | while ((node = node->next)) | ||
426 | seq_printf(p, ", %s", node->devname); | ||
427 | seq_puts(p, "\n"); | ||
428 | } | ||
429 | return 0; | ||
430 | } | ||
431 | |||
432 | #ifdef CONFIG_PROC_FS | ||
433 | void init_irq_proc(void) | ||
434 | { | ||
435 | /* Insert /proc/irq driver here */ | ||
436 | } | 176 | } |
437 | #endif | ||
diff --git a/arch/m68k/mac/baboon.c b/arch/m68k/mac/baboon.c index 2a96bebd8969..b403924a1cad 100644 --- a/arch/m68k/mac/baboon.c +++ b/arch/m68k/mac/baboon.c | |||
@@ -11,6 +11,7 @@ | |||
11 | #include <linux/mm.h> | 11 | #include <linux/mm.h> |
12 | #include <linux/delay.h> | 12 | #include <linux/delay.h> |
13 | #include <linux/init.h> | 13 | #include <linux/init.h> |
14 | #include <linux/irq.h> | ||
14 | 15 | ||
15 | #include <asm/traps.h> | 16 | #include <asm/traps.h> |
16 | #include <asm/bootinfo.h> | 17 | #include <asm/bootinfo.h> |
@@ -20,9 +21,6 @@ | |||
20 | 21 | ||
21 | /* #define DEBUG_IRQS */ | 22 | /* #define DEBUG_IRQS */ |
22 | 23 | ||
23 | extern void mac_enable_irq(unsigned int); | ||
24 | extern void mac_disable_irq(unsigned int); | ||
25 | |||
26 | int baboon_present; | 24 | int baboon_present; |
27 | static volatile struct baboon *baboon; | 25 | static volatile struct baboon *baboon; |
28 | static unsigned char baboon_disabled; | 26 | static unsigned char baboon_disabled; |
@@ -53,7 +51,7 @@ void __init baboon_init(void) | |||
53 | * Baboon interrupt handler. This works a lot like a VIA. | 51 | * Baboon interrupt handler. This works a lot like a VIA. |
54 | */ | 52 | */ |
55 | 53 | ||
56 | static irqreturn_t baboon_irq(int irq, void *dev_id) | 54 | static void baboon_irq(unsigned int irq, struct irq_desc *desc) |
57 | { | 55 | { |
58 | int irq_bit, irq_num; | 56 | int irq_bit, irq_num; |
59 | unsigned char events; | 57 | unsigned char events; |
@@ -64,15 +62,16 @@ static irqreturn_t baboon_irq(int irq, void *dev_id) | |||
64 | (uint) baboon->mb_status); | 62 | (uint) baboon->mb_status); |
65 | #endif | 63 | #endif |
66 | 64 | ||
67 | if (!(events = baboon->mb_ifr & 0x07)) | 65 | events = baboon->mb_ifr & 0x07; |
68 | return IRQ_NONE; | 66 | if (!events) |
67 | return; | ||
69 | 68 | ||
70 | irq_num = IRQ_BABOON_0; | 69 | irq_num = IRQ_BABOON_0; |
71 | irq_bit = 1; | 70 | irq_bit = 1; |
72 | do { | 71 | do { |
73 | if (events & irq_bit) { | 72 | if (events & irq_bit) { |
74 | baboon->mb_ifr &= ~irq_bit; | 73 | baboon->mb_ifr &= ~irq_bit; |
75 | m68k_handle_int(irq_num); | 74 | generic_handle_irq(irq_num); |
76 | } | 75 | } |
77 | irq_bit <<= 1; | 76 | irq_bit <<= 1; |
78 | irq_num++; | 77 | irq_num++; |
@@ -82,7 +81,6 @@ static irqreturn_t baboon_irq(int irq, void *dev_id) | |||
82 | /* for now we need to smash all interrupts */ | 81 | /* for now we need to smash all interrupts */ |
83 | baboon->mb_ifr &= ~events; | 82 | baboon->mb_ifr &= ~events; |
84 | #endif | 83 | #endif |
85 | return IRQ_HANDLED; | ||
86 | } | 84 | } |
87 | 85 | ||
88 | /* | 86 | /* |
@@ -92,8 +90,7 @@ static irqreturn_t baboon_irq(int irq, void *dev_id) | |||
92 | void __init baboon_register_interrupts(void) | 90 | void __init baboon_register_interrupts(void) |
93 | { | 91 | { |
94 | baboon_disabled = 0; | 92 | baboon_disabled = 0; |
95 | if (request_irq(IRQ_NUBUS_C, baboon_irq, 0, "baboon", (void *)baboon)) | 93 | irq_set_chained_handler(IRQ_NUBUS_C, baboon_irq); |
96 | pr_err("Couldn't register baboon interrupt\n"); | ||
97 | } | 94 | } |
98 | 95 | ||
99 | /* | 96 | /* |
@@ -111,7 +108,7 @@ void baboon_irq_enable(int irq) | |||
111 | 108 | ||
112 | baboon_disabled &= ~(1 << irq_idx); | 109 | baboon_disabled &= ~(1 << irq_idx); |
113 | if (!baboon_disabled) | 110 | if (!baboon_disabled) |
114 | mac_enable_irq(IRQ_NUBUS_C); | 111 | mac_irq_enable(irq_get_irq_data(IRQ_NUBUS_C)); |
115 | } | 112 | } |
116 | 113 | ||
117 | void baboon_irq_disable(int irq) | 114 | void baboon_irq_disable(int irq) |
@@ -124,7 +121,7 @@ void baboon_irq_disable(int irq) | |||
124 | 121 | ||
125 | baboon_disabled |= 1 << irq_idx; | 122 | baboon_disabled |= 1 << irq_idx; |
126 | if (baboon_disabled) | 123 | if (baboon_disabled) |
127 | mac_disable_irq(IRQ_NUBUS_C); | 124 | mac_irq_disable(irq_get_irq_data(IRQ_NUBUS_C)); |
128 | } | 125 | } |
129 | 126 | ||
130 | void baboon_irq_clear(int irq) | 127 | void baboon_irq_clear(int irq) |
diff --git a/arch/m68k/mac/iop.c b/arch/m68k/mac/iop.c index 1ad4e9d80eba..a5462cc0bfd6 100644 --- a/arch/m68k/mac/iop.c +++ b/arch/m68k/mac/iop.c | |||
@@ -305,15 +305,13 @@ void __init iop_register_interrupts(void) | |||
305 | { | 305 | { |
306 | if (iop_ism_present) { | 306 | if (iop_ism_present) { |
307 | if (oss_present) { | 307 | if (oss_present) { |
308 | if (request_irq(OSS_IRQLEV_IOPISM, iop_ism_irq, | 308 | if (request_irq(OSS_IRQLEV_IOPISM, iop_ism_irq, 0, |
309 | IRQ_FLG_LOCK, "ISM IOP", | 309 | "ISM IOP", (void *)IOP_NUM_ISM)) |
310 | (void *) IOP_NUM_ISM)) | ||
311 | pr_err("Couldn't register ISM IOP interrupt\n"); | 310 | pr_err("Couldn't register ISM IOP interrupt\n"); |
312 | oss_irq_enable(IRQ_MAC_ADB); | 311 | oss_irq_enable(IRQ_MAC_ADB); |
313 | } else { | 312 | } else { |
314 | if (request_irq(IRQ_VIA2_0, iop_ism_irq, | 313 | if (request_irq(IRQ_VIA2_0, iop_ism_irq, 0, "ISM IOP", |
315 | IRQ_FLG_LOCK|IRQ_FLG_FAST, "ISM IOP", | 314 | (void *)IOP_NUM_ISM)) |
316 | (void *) IOP_NUM_ISM)) | ||
317 | pr_err("Couldn't register ISM IOP interrupt\n"); | 315 | pr_err("Couldn't register ISM IOP interrupt\n"); |
318 | } | 316 | } |
319 | if (!iop_alive(iop_base[IOP_NUM_ISM])) { | 317 | if (!iop_alive(iop_base[IOP_NUM_ISM])) { |
diff --git a/arch/m68k/mac/macints.c b/arch/m68k/mac/macints.c index f92190c159b4..ba220b70ab8c 100644 --- a/arch/m68k/mac/macints.c +++ b/arch/m68k/mac/macints.c | |||
@@ -190,14 +190,10 @@ irqreturn_t mac_debug_handler(int, void *); | |||
190 | 190 | ||
191 | /* #define DEBUG_MACINTS */ | 191 | /* #define DEBUG_MACINTS */ |
192 | 192 | ||
193 | void mac_enable_irq(unsigned int irq); | 193 | static struct irq_chip mac_irq_chip = { |
194 | void mac_disable_irq(unsigned int irq); | ||
195 | |||
196 | static struct irq_controller mac_irq_controller = { | ||
197 | .name = "mac", | 194 | .name = "mac", |
198 | .lock = __SPIN_LOCK_UNLOCKED(mac_irq_controller.lock), | 195 | .irq_enable = mac_irq_enable, |
199 | .enable = mac_enable_irq, | 196 | .irq_disable = mac_irq_disable, |
200 | .disable = mac_disable_irq, | ||
201 | }; | 197 | }; |
202 | 198 | ||
203 | void __init mac_init_IRQ(void) | 199 | void __init mac_init_IRQ(void) |
@@ -205,7 +201,7 @@ void __init mac_init_IRQ(void) | |||
205 | #ifdef DEBUG_MACINTS | 201 | #ifdef DEBUG_MACINTS |
206 | printk("mac_init_IRQ(): Setting things up...\n"); | 202 | printk("mac_init_IRQ(): Setting things up...\n"); |
207 | #endif | 203 | #endif |
208 | m68k_setup_irq_controller(&mac_irq_controller, IRQ_USER, | 204 | m68k_setup_irq_controller(&mac_irq_chip, handle_simple_irq, IRQ_USER, |
209 | NUM_MAC_SOURCES - IRQ_USER); | 205 | NUM_MAC_SOURCES - IRQ_USER); |
210 | /* Make sure the SONIC interrupt is cleared or things get ugly */ | 206 | /* Make sure the SONIC interrupt is cleared or things get ugly */ |
211 | #ifdef SHUTUP_SONIC | 207 | #ifdef SHUTUP_SONIC |
@@ -241,16 +237,17 @@ void __init mac_init_IRQ(void) | |||
241 | } | 237 | } |
242 | 238 | ||
243 | /* | 239 | /* |
244 | * mac_enable_irq - enable an interrupt source | 240 | * mac_irq_enable - enable an interrupt source |
245 | * mac_disable_irq - disable an interrupt source | 241 | * mac_irq_disable - disable an interrupt source |
246 | * mac_clear_irq - clears a pending interrupt | 242 | * mac_clear_irq - clears a pending interrupt |
247 | * mac_pending_irq - Returns the pending status of an IRQ (nonzero = pending) | 243 | * mac_irq_pending - returns the pending status of an IRQ (nonzero = pending) |
248 | * | 244 | * |
249 | * These routines are just dispatchers to the VIA/OSS/PSC routines. | 245 | * These routines are just dispatchers to the VIA/OSS/PSC routines. |
250 | */ | 246 | */ |
251 | 247 | ||
252 | void mac_enable_irq(unsigned int irq) | 248 | void mac_irq_enable(struct irq_data *data) |
253 | { | 249 | { |
250 | int irq = data->irq; | ||
254 | int irq_src = IRQ_SRC(irq); | 251 | int irq_src = IRQ_SRC(irq); |
255 | 252 | ||
256 | switch(irq_src) { | 253 | switch(irq_src) { |
@@ -283,8 +280,9 @@ void mac_enable_irq(unsigned int irq) | |||
283 | } | 280 | } |
284 | } | 281 | } |
285 | 282 | ||
286 | void mac_disable_irq(unsigned int irq) | 283 | void mac_irq_disable(struct irq_data *data) |
287 | { | 284 | { |
285 | int irq = data->irq; | ||
288 | int irq_src = IRQ_SRC(irq); | 286 | int irq_src = IRQ_SRC(irq); |
289 | 287 | ||
290 | switch(irq_src) { | 288 | switch(irq_src) { |
diff --git a/arch/m68k/mac/oss.c b/arch/m68k/mac/oss.c index a9c0f5ab4cc0..a4c82dab9ff1 100644 --- a/arch/m68k/mac/oss.c +++ b/arch/m68k/mac/oss.c | |||
@@ -19,6 +19,7 @@ | |||
19 | #include <linux/mm.h> | 19 | #include <linux/mm.h> |
20 | #include <linux/delay.h> | 20 | #include <linux/delay.h> |
21 | #include <linux/init.h> | 21 | #include <linux/init.h> |
22 | #include <linux/irq.h> | ||
22 | 23 | ||
23 | #include <asm/bootinfo.h> | 24 | #include <asm/bootinfo.h> |
24 | #include <asm/macintosh.h> | 25 | #include <asm/macintosh.h> |
@@ -29,10 +30,7 @@ | |||
29 | int oss_present; | 30 | int oss_present; |
30 | volatile struct mac_oss *oss; | 31 | volatile struct mac_oss *oss; |
31 | 32 | ||
32 | static irqreturn_t oss_irq(int, void *); | 33 | extern void via1_irq(unsigned int irq, struct irq_desc *desc); |
33 | static irqreturn_t oss_nubus_irq(int, void *); | ||
34 | |||
35 | extern irqreturn_t via1_irq(int, void *); | ||
36 | 34 | ||
37 | /* | 35 | /* |
38 | * Initialize the OSS | 36 | * Initialize the OSS |
@@ -60,26 +58,6 @@ void __init oss_init(void) | |||
60 | } | 58 | } |
61 | 59 | ||
62 | /* | 60 | /* |
63 | * Register the OSS and NuBus interrupt dispatchers. | ||
64 | */ | ||
65 | |||
66 | void __init oss_register_interrupts(void) | ||
67 | { | ||
68 | if (request_irq(OSS_IRQLEV_SCSI, oss_irq, IRQ_FLG_LOCK, | ||
69 | "scsi", (void *) oss)) | ||
70 | pr_err("Couldn't register %s interrupt\n", "scsi"); | ||
71 | if (request_irq(OSS_IRQLEV_NUBUS, oss_nubus_irq, IRQ_FLG_LOCK, | ||
72 | "nubus", (void *) oss)) | ||
73 | pr_err("Couldn't register %s interrupt\n", "nubus"); | ||
74 | if (request_irq(OSS_IRQLEV_SOUND, oss_irq, IRQ_FLG_LOCK, | ||
75 | "sound", (void *) oss)) | ||
76 | pr_err("Couldn't register %s interrupt\n", "sound"); | ||
77 | if (request_irq(OSS_IRQLEV_VIA1, via1_irq, IRQ_FLG_LOCK, | ||
78 | "via1", (void *) via1)) | ||
79 | pr_err("Couldn't register %s interrupt\n", "via1"); | ||
80 | } | ||
81 | |||
82 | /* | ||
83 | * Initialize OSS for Nubus access | 61 | * Initialize OSS for Nubus access |
84 | */ | 62 | */ |
85 | 63 | ||
@@ -92,17 +70,17 @@ void __init oss_nubus_init(void) | |||
92 | * and SCSI; everything else is routed to its own autovector IRQ. | 70 | * and SCSI; everything else is routed to its own autovector IRQ. |
93 | */ | 71 | */ |
94 | 72 | ||
95 | static irqreturn_t oss_irq(int irq, void *dev_id) | 73 | static void oss_irq(unsigned int irq, struct irq_desc *desc) |
96 | { | 74 | { |
97 | int events; | 75 | int events; |
98 | 76 | ||
99 | events = oss->irq_pending & (OSS_IP_SOUND|OSS_IP_SCSI); | 77 | events = oss->irq_pending & (OSS_IP_SOUND|OSS_IP_SCSI); |
100 | if (!events) | 78 | if (!events) |
101 | return IRQ_NONE; | 79 | return; |
102 | 80 | ||
103 | #ifdef DEBUG_IRQS | 81 | #ifdef DEBUG_IRQS |
104 | if ((console_loglevel == 10) && !(events & OSS_IP_SCSI)) { | 82 | if ((console_loglevel == 10) && !(events & OSS_IP_SCSI)) { |
105 | printk("oss_irq: irq %d events = 0x%04X\n", irq, | 83 | printk("oss_irq: irq %u events = 0x%04X\n", irq, |
106 | (int) oss->irq_pending); | 84 | (int) oss->irq_pending); |
107 | } | 85 | } |
108 | #endif | 86 | #endif |
@@ -113,11 +91,10 @@ static irqreturn_t oss_irq(int irq, void *dev_id) | |||
113 | /* FIXME: call sound handler */ | 91 | /* FIXME: call sound handler */ |
114 | } else if (events & OSS_IP_SCSI) { | 92 | } else if (events & OSS_IP_SCSI) { |
115 | oss->irq_pending &= ~OSS_IP_SCSI; | 93 | oss->irq_pending &= ~OSS_IP_SCSI; |
116 | m68k_handle_int(IRQ_MAC_SCSI); | 94 | generic_handle_irq(IRQ_MAC_SCSI); |
117 | } else { | 95 | } else { |
118 | /* FIXME: error check here? */ | 96 | /* FIXME: error check here? */ |
119 | } | 97 | } |
120 | return IRQ_HANDLED; | ||
121 | } | 98 | } |
122 | 99 | ||
123 | /* | 100 | /* |
@@ -126,13 +103,13 @@ static irqreturn_t oss_irq(int irq, void *dev_id) | |||
126 | * Unlike the VIA/RBV this is on its own autovector interrupt level. | 103 | * Unlike the VIA/RBV this is on its own autovector interrupt level. |
127 | */ | 104 | */ |
128 | 105 | ||
129 | static irqreturn_t oss_nubus_irq(int irq, void *dev_id) | 106 | static void oss_nubus_irq(unsigned int irq, struct irq_desc *desc) |
130 | { | 107 | { |
131 | int events, irq_bit, i; | 108 | int events, irq_bit, i; |
132 | 109 | ||
133 | events = oss->irq_pending & OSS_IP_NUBUS; | 110 | events = oss->irq_pending & OSS_IP_NUBUS; |
134 | if (!events) | 111 | if (!events) |
135 | return IRQ_NONE; | 112 | return; |
136 | 113 | ||
137 | #ifdef DEBUG_NUBUS_INT | 114 | #ifdef DEBUG_NUBUS_INT |
138 | if (console_loglevel > 7) { | 115 | if (console_loglevel > 7) { |
@@ -148,10 +125,21 @@ static irqreturn_t oss_nubus_irq(int irq, void *dev_id) | |||
148 | irq_bit >>= 1; | 125 | irq_bit >>= 1; |
149 | if (events & irq_bit) { | 126 | if (events & irq_bit) { |
150 | oss->irq_pending &= ~irq_bit; | 127 | oss->irq_pending &= ~irq_bit; |
151 | m68k_handle_int(NUBUS_SOURCE_BASE + i); | 128 | generic_handle_irq(NUBUS_SOURCE_BASE + i); |
152 | } | 129 | } |
153 | } while(events & (irq_bit - 1)); | 130 | } while(events & (irq_bit - 1)); |
154 | return IRQ_HANDLED; | 131 | } |
132 | |||
133 | /* | ||
134 | * Register the OSS and NuBus interrupt dispatchers. | ||
135 | */ | ||
136 | |||
137 | void __init oss_register_interrupts(void) | ||
138 | { | ||
139 | irq_set_chained_handler(OSS_IRQLEV_SCSI, oss_irq); | ||
140 | irq_set_chained_handler(OSS_IRQLEV_NUBUS, oss_nubus_irq); | ||
141 | irq_set_chained_handler(OSS_IRQLEV_SOUND, oss_irq); | ||
142 | irq_set_chained_handler(OSS_IRQLEV_VIA1, via1_irq); | ||
155 | } | 143 | } |
156 | 144 | ||
157 | /* | 145 | /* |
diff --git a/arch/m68k/mac/psc.c b/arch/m68k/mac/psc.c index a4c3eb60706e..e6c2d20f328d 100644 --- a/arch/m68k/mac/psc.c +++ b/arch/m68k/mac/psc.c | |||
@@ -18,6 +18,7 @@ | |||
18 | #include <linux/mm.h> | 18 | #include <linux/mm.h> |
19 | #include <linux/delay.h> | 19 | #include <linux/delay.h> |
20 | #include <linux/init.h> | 20 | #include <linux/init.h> |
21 | #include <linux/irq.h> | ||
21 | 22 | ||
22 | #include <asm/traps.h> | 23 | #include <asm/traps.h> |
23 | #include <asm/bootinfo.h> | 24 | #include <asm/bootinfo.h> |
@@ -30,8 +31,6 @@ | |||
30 | int psc_present; | 31 | int psc_present; |
31 | volatile __u8 *psc; | 32 | volatile __u8 *psc; |
32 | 33 | ||
33 | irqreturn_t psc_irq(int, void *); | ||
34 | |||
35 | /* | 34 | /* |
36 | * Debugging dump, used in various places to see what's going on. | 35 | * Debugging dump, used in various places to see what's going on. |
37 | */ | 36 | */ |
@@ -112,52 +111,52 @@ void __init psc_init(void) | |||
112 | } | 111 | } |
113 | 112 | ||
114 | /* | 113 | /* |
115 | * Register the PSC interrupt dispatchers for autovector interrupts 3-6. | ||
116 | */ | ||
117 | |||
118 | void __init psc_register_interrupts(void) | ||
119 | { | ||
120 | if (request_irq(IRQ_AUTO_3, psc_irq, 0, "psc3", (void *) 0x30)) | ||
121 | pr_err("Couldn't register psc%d interrupt\n", 3); | ||
122 | if (request_irq(IRQ_AUTO_4, psc_irq, 0, "psc4", (void *) 0x40)) | ||
123 | pr_err("Couldn't register psc%d interrupt\n", 4); | ||
124 | if (request_irq(IRQ_AUTO_5, psc_irq, 0, "psc5", (void *) 0x50)) | ||
125 | pr_err("Couldn't register psc%d interrupt\n", 5); | ||
126 | if (request_irq(IRQ_AUTO_6, psc_irq, 0, "psc6", (void *) 0x60)) | ||
127 | pr_err("Couldn't register psc%d interrupt\n", 6); | ||
128 | } | ||
129 | |||
130 | /* | ||
131 | * PSC interrupt handler. It's a lot like the VIA interrupt handler. | 114 | * PSC interrupt handler. It's a lot like the VIA interrupt handler. |
132 | */ | 115 | */ |
133 | 116 | ||
134 | irqreturn_t psc_irq(int irq, void *dev_id) | 117 | static void psc_irq(unsigned int irq, struct irq_desc *desc) |
135 | { | 118 | { |
136 | int pIFR = pIFRbase + ((int) dev_id); | 119 | unsigned int offset = (unsigned int)irq_desc_get_handler_data(desc); |
137 | int pIER = pIERbase + ((int) dev_id); | 120 | int pIFR = pIFRbase + offset; |
121 | int pIER = pIERbase + offset; | ||
138 | int irq_num; | 122 | int irq_num; |
139 | unsigned char irq_bit, events; | 123 | unsigned char irq_bit, events; |
140 | 124 | ||
141 | #ifdef DEBUG_IRQS | 125 | #ifdef DEBUG_IRQS |
142 | printk("psc_irq: irq %d pIFR = 0x%02X pIER = 0x%02X\n", | 126 | printk("psc_irq: irq %u pIFR = 0x%02X pIER = 0x%02X\n", |
143 | irq, (int) psc_read_byte(pIFR), (int) psc_read_byte(pIER)); | 127 | irq, (int) psc_read_byte(pIFR), (int) psc_read_byte(pIER)); |
144 | #endif | 128 | #endif |
145 | 129 | ||
146 | events = psc_read_byte(pIFR) & psc_read_byte(pIER) & 0xF; | 130 | events = psc_read_byte(pIFR) & psc_read_byte(pIER) & 0xF; |
147 | if (!events) | 131 | if (!events) |
148 | return IRQ_NONE; | 132 | return; |
149 | 133 | ||
150 | irq_num = irq << 3; | 134 | irq_num = irq << 3; |
151 | irq_bit = 1; | 135 | irq_bit = 1; |
152 | do { | 136 | do { |
153 | if (events & irq_bit) { | 137 | if (events & irq_bit) { |
154 | psc_write_byte(pIFR, irq_bit); | 138 | psc_write_byte(pIFR, irq_bit); |
155 | m68k_handle_int(irq_num); | 139 | generic_handle_irq(irq_num); |
156 | } | 140 | } |
157 | irq_num++; | 141 | irq_num++; |
158 | irq_bit <<= 1; | 142 | irq_bit <<= 1; |
159 | } while (events >= irq_bit); | 143 | } while (events >= irq_bit); |
160 | return IRQ_HANDLED; | 144 | } |
145 | |||
146 | /* | ||
147 | * Register the PSC interrupt dispatchers for autovector interrupts 3-6. | ||
148 | */ | ||
149 | |||
150 | void __init psc_register_interrupts(void) | ||
151 | { | ||
152 | irq_set_chained_handler(IRQ_AUTO_3, psc_irq); | ||
153 | irq_set_handler_data(IRQ_AUTO_3, (void *)0x30); | ||
154 | irq_set_chained_handler(IRQ_AUTO_4, psc_irq); | ||
155 | irq_set_handler_data(IRQ_AUTO_4, (void *)0x40); | ||
156 | irq_set_chained_handler(IRQ_AUTO_5, psc_irq); | ||
157 | irq_set_handler_data(IRQ_AUTO_5, (void *)0x50); | ||
158 | irq_set_chained_handler(IRQ_AUTO_6, psc_irq); | ||
159 | irq_set_handler_data(IRQ_AUTO_6, (void *)0x60); | ||
161 | } | 160 | } |
162 | 161 | ||
163 | void psc_irq_enable(int irq) { | 162 | void psc_irq_enable(int irq) { |
diff --git a/arch/m68k/mac/via.c b/arch/m68k/mac/via.c index e71166daec6a..f1600ad26621 100644 --- a/arch/m68k/mac/via.c +++ b/arch/m68k/mac/via.c | |||
@@ -28,6 +28,7 @@ | |||
28 | #include <linux/delay.h> | 28 | #include <linux/delay.h> |
29 | #include <linux/init.h> | 29 | #include <linux/init.h> |
30 | #include <linux/module.h> | 30 | #include <linux/module.h> |
31 | #include <linux/irq.h> | ||
31 | 32 | ||
32 | #include <asm/bootinfo.h> | 33 | #include <asm/bootinfo.h> |
33 | #include <asm/macintosh.h> | 34 | #include <asm/macintosh.h> |
@@ -77,9 +78,6 @@ static int gIER,gIFR,gBufA,gBufB; | |||
77 | static u8 nubus_disabled; | 78 | static u8 nubus_disabled; |
78 | 79 | ||
79 | void via_debug_dump(void); | 80 | void via_debug_dump(void); |
80 | irqreturn_t via1_irq(int, void *); | ||
81 | irqreturn_t via2_irq(int, void *); | ||
82 | irqreturn_t via_nubus_irq(int, void *); | ||
83 | void via_irq_enable(int irq); | 81 | void via_irq_enable(int irq); |
84 | void via_irq_disable(int irq); | 82 | void via_irq_disable(int irq); |
85 | void via_irq_clear(int irq); | 83 | void via_irq_clear(int irq); |
@@ -281,40 +279,11 @@ void __init via_init_clock(irq_handler_t func) | |||
281 | via1[vT1CL] = MAC_CLOCK_LOW; | 279 | via1[vT1CL] = MAC_CLOCK_LOW; |
282 | via1[vT1CH] = MAC_CLOCK_HIGH; | 280 | via1[vT1CH] = MAC_CLOCK_HIGH; |
283 | 281 | ||
284 | if (request_irq(IRQ_MAC_TIMER_1, func, IRQ_FLG_LOCK, "timer", func)) | 282 | if (request_irq(IRQ_MAC_TIMER_1, func, 0, "timer", func)) |
285 | pr_err("Couldn't register %s interrupt\n", "timer"); | 283 | pr_err("Couldn't register %s interrupt\n", "timer"); |
286 | } | 284 | } |
287 | 285 | ||
288 | /* | 286 | /* |
289 | * Register the interrupt dispatchers for VIA or RBV machines only. | ||
290 | */ | ||
291 | |||
292 | void __init via_register_interrupts(void) | ||
293 | { | ||
294 | if (via_alt_mapping) { | ||
295 | if (request_irq(IRQ_AUTO_1, via1_irq, | ||
296 | IRQ_FLG_LOCK|IRQ_FLG_FAST, "software", | ||
297 | (void *) via1)) | ||
298 | pr_err("Couldn't register %s interrupt\n", "software"); | ||
299 | if (request_irq(IRQ_AUTO_6, via1_irq, | ||
300 | IRQ_FLG_LOCK|IRQ_FLG_FAST, "via1", | ||
301 | (void *) via1)) | ||
302 | pr_err("Couldn't register %s interrupt\n", "via1"); | ||
303 | } else { | ||
304 | if (request_irq(IRQ_AUTO_1, via1_irq, | ||
305 | IRQ_FLG_LOCK|IRQ_FLG_FAST, "via1", | ||
306 | (void *) via1)) | ||
307 | pr_err("Couldn't register %s interrupt\n", "via1"); | ||
308 | } | ||
309 | if (request_irq(IRQ_AUTO_2, via2_irq, IRQ_FLG_LOCK|IRQ_FLG_FAST, | ||
310 | "via2", (void *) via2)) | ||
311 | pr_err("Couldn't register %s interrupt\n", "via2"); | ||
312 | if (request_irq(IRQ_MAC_NUBUS, via_nubus_irq, | ||
313 | IRQ_FLG_LOCK|IRQ_FLG_FAST, "nubus", (void *) via2)) | ||
314 | pr_err("Couldn't register %s interrupt\n", "nubus"); | ||
315 | } | ||
316 | |||
317 | /* | ||
318 | * Debugging dump, used in various places to see what's going on. | 287 | * Debugging dump, used in various places to see what's going on. |
319 | */ | 288 | */ |
320 | 289 | ||
@@ -446,48 +415,46 @@ void __init via_nubus_init(void) | |||
446 | * via6522.c :-), disable/pending masks added. | 415 | * via6522.c :-), disable/pending masks added. |
447 | */ | 416 | */ |
448 | 417 | ||
449 | irqreturn_t via1_irq(int irq, void *dev_id) | 418 | void via1_irq(unsigned int irq, struct irq_desc *desc) |
450 | { | 419 | { |
451 | int irq_num; | 420 | int irq_num; |
452 | unsigned char irq_bit, events; | 421 | unsigned char irq_bit, events; |
453 | 422 | ||
454 | events = via1[vIFR] & via1[vIER] & 0x7F; | 423 | events = via1[vIFR] & via1[vIER] & 0x7F; |
455 | if (!events) | 424 | if (!events) |
456 | return IRQ_NONE; | 425 | return; |
457 | 426 | ||
458 | irq_num = VIA1_SOURCE_BASE; | 427 | irq_num = VIA1_SOURCE_BASE; |
459 | irq_bit = 1; | 428 | irq_bit = 1; |
460 | do { | 429 | do { |
461 | if (events & irq_bit) { | 430 | if (events & irq_bit) { |
462 | via1[vIFR] = irq_bit; | 431 | via1[vIFR] = irq_bit; |
463 | m68k_handle_int(irq_num); | 432 | generic_handle_irq(irq_num); |
464 | } | 433 | } |
465 | ++irq_num; | 434 | ++irq_num; |
466 | irq_bit <<= 1; | 435 | irq_bit <<= 1; |
467 | } while (events >= irq_bit); | 436 | } while (events >= irq_bit); |
468 | return IRQ_HANDLED; | ||
469 | } | 437 | } |
470 | 438 | ||
471 | irqreturn_t via2_irq(int irq, void *dev_id) | 439 | static void via2_irq(unsigned int irq, struct irq_desc *desc) |
472 | { | 440 | { |
473 | int irq_num; | 441 | int irq_num; |
474 | unsigned char irq_bit, events; | 442 | unsigned char irq_bit, events; |
475 | 443 | ||
476 | events = via2[gIFR] & via2[gIER] & 0x7F; | 444 | events = via2[gIFR] & via2[gIER] & 0x7F; |
477 | if (!events) | 445 | if (!events) |
478 | return IRQ_NONE; | 446 | return; |
479 | 447 | ||
480 | irq_num = VIA2_SOURCE_BASE; | 448 | irq_num = VIA2_SOURCE_BASE; |
481 | irq_bit = 1; | 449 | irq_bit = 1; |
482 | do { | 450 | do { |
483 | if (events & irq_bit) { | 451 | if (events & irq_bit) { |
484 | via2[gIFR] = irq_bit | rbv_clear; | 452 | via2[gIFR] = irq_bit | rbv_clear; |
485 | m68k_handle_int(irq_num); | 453 | generic_handle_irq(irq_num); |
486 | } | 454 | } |
487 | ++irq_num; | 455 | ++irq_num; |
488 | irq_bit <<= 1; | 456 | irq_bit <<= 1; |
489 | } while (events >= irq_bit); | 457 | } while (events >= irq_bit); |
490 | return IRQ_HANDLED; | ||
491 | } | 458 | } |
492 | 459 | ||
493 | /* | 460 | /* |
@@ -495,7 +462,7 @@ irqreturn_t via2_irq(int irq, void *dev_id) | |||
495 | * VIA2 dispatcher as a fast interrupt handler. | 462 | * VIA2 dispatcher as a fast interrupt handler. |
496 | */ | 463 | */ |
497 | 464 | ||
498 | irqreturn_t via_nubus_irq(int irq, void *dev_id) | 465 | void via_nubus_irq(unsigned int irq, struct irq_desc *desc) |
499 | { | 466 | { |
500 | int slot_irq; | 467 | int slot_irq; |
501 | unsigned char slot_bit, events; | 468 | unsigned char slot_bit, events; |
@@ -506,7 +473,7 @@ irqreturn_t via_nubus_irq(int irq, void *dev_id) | |||
506 | else | 473 | else |
507 | events &= ~via2[vDirA]; | 474 | events &= ~via2[vDirA]; |
508 | if (!events) | 475 | if (!events) |
509 | return IRQ_NONE; | 476 | return; |
510 | 477 | ||
511 | do { | 478 | do { |
512 | slot_irq = IRQ_NUBUS_F; | 479 | slot_irq = IRQ_NUBUS_F; |
@@ -514,7 +481,7 @@ irqreturn_t via_nubus_irq(int irq, void *dev_id) | |||
514 | do { | 481 | do { |
515 | if (events & slot_bit) { | 482 | if (events & slot_bit) { |
516 | events &= ~slot_bit; | 483 | events &= ~slot_bit; |
517 | m68k_handle_int(slot_irq); | 484 | generic_handle_irq(slot_irq); |
518 | } | 485 | } |
519 | --slot_irq; | 486 | --slot_irq; |
520 | slot_bit >>= 1; | 487 | slot_bit >>= 1; |
@@ -528,7 +495,24 @@ irqreturn_t via_nubus_irq(int irq, void *dev_id) | |||
528 | else | 495 | else |
529 | events &= ~via2[vDirA]; | 496 | events &= ~via2[vDirA]; |
530 | } while (events); | 497 | } while (events); |
531 | return IRQ_HANDLED; | 498 | } |
499 | |||
500 | /* | ||
501 | * Register the interrupt dispatchers for VIA or RBV machines only. | ||
502 | */ | ||
503 | |||
504 | void __init via_register_interrupts(void) | ||
505 | { | ||
506 | if (via_alt_mapping) { | ||
507 | /* software interrupt */ | ||
508 | irq_set_chained_handler(IRQ_AUTO_1, via1_irq); | ||
509 | /* via1 interrupt */ | ||
510 | irq_set_chained_handler(IRQ_AUTO_6, via1_irq); | ||
511 | } else { | ||
512 | irq_set_chained_handler(IRQ_AUTO_1, via1_irq); | ||
513 | } | ||
514 | irq_set_chained_handler(IRQ_AUTO_2, via2_irq); | ||
515 | irq_set_chained_handler(IRQ_MAC_NUBUS, via_nubus_irq); | ||
532 | } | 516 | } |
533 | 517 | ||
534 | void via_irq_enable(int irq) { | 518 | void via_irq_enable(int irq) { |
diff --git a/arch/m68k/mvme147/config.c b/arch/m68k/mvme147/config.c index 6cb9c3a9b6c9..5de924ef42ed 100644 --- a/arch/m68k/mvme147/config.c +++ b/arch/m68k/mvme147/config.c | |||
@@ -81,7 +81,7 @@ static void mvme147_get_model(char *model) | |||
81 | 81 | ||
82 | void __init mvme147_init_IRQ(void) | 82 | void __init mvme147_init_IRQ(void) |
83 | { | 83 | { |
84 | m68k_setup_user_interrupt(VEC_USER, 192, NULL); | 84 | m68k_setup_user_interrupt(VEC_USER, 192); |
85 | } | 85 | } |
86 | 86 | ||
87 | void __init config_mvme147(void) | 87 | void __init config_mvme147(void) |
@@ -114,8 +114,7 @@ static irqreturn_t mvme147_timer_int (int irq, void *dev_id) | |||
114 | void mvme147_sched_init (irq_handler_t timer_routine) | 114 | void mvme147_sched_init (irq_handler_t timer_routine) |
115 | { | 115 | { |
116 | tick_handler = timer_routine; | 116 | tick_handler = timer_routine; |
117 | if (request_irq(PCC_IRQ_TIMER1, mvme147_timer_int, IRQ_FLG_REPLACE, | 117 | if (request_irq(PCC_IRQ_TIMER1, mvme147_timer_int, 0, "timer 1", NULL)) |
118 | "timer 1", NULL)) | ||
119 | pr_err("Couldn't register timer interrupt\n"); | 118 | pr_err("Couldn't register timer interrupt\n"); |
120 | 119 | ||
121 | /* Init the clock with a value */ | 120 | /* Init the clock with a value */ |
diff --git a/arch/m68k/mvme16x/config.c b/arch/m68k/mvme16x/config.c index 0b28e2621653..31a66d99cbca 100644 --- a/arch/m68k/mvme16x/config.c +++ b/arch/m68k/mvme16x/config.c | |||
@@ -117,7 +117,7 @@ static void mvme16x_get_hardware_list(struct seq_file *m) | |||
117 | 117 | ||
118 | static void __init mvme16x_init_IRQ (void) | 118 | static void __init mvme16x_init_IRQ (void) |
119 | { | 119 | { |
120 | m68k_setup_user_interrupt(VEC_USER, 192, NULL); | 120 | m68k_setup_user_interrupt(VEC_USER, 192); |
121 | } | 121 | } |
122 | 122 | ||
123 | #define pcc2chip ((volatile u_char *)0xfff42000) | 123 | #define pcc2chip ((volatile u_char *)0xfff42000) |
diff --git a/arch/m68k/q40/q40ints.c b/arch/m68k/q40/q40ints.c index 9f0e3d59bf92..2b888491f29a 100644 --- a/arch/m68k/q40/q40ints.c +++ b/arch/m68k/q40/q40ints.c | |||
@@ -15,10 +15,10 @@ | |||
15 | #include <linux/kernel.h> | 15 | #include <linux/kernel.h> |
16 | #include <linux/errno.h> | 16 | #include <linux/errno.h> |
17 | #include <linux/interrupt.h> | 17 | #include <linux/interrupt.h> |
18 | #include <linux/irq.h> | ||
18 | 19 | ||
19 | #include <asm/ptrace.h> | 20 | #include <asm/ptrace.h> |
20 | #include <asm/system.h> | 21 | #include <asm/system.h> |
21 | #include <asm/irq.h> | ||
22 | #include <asm/traps.h> | 22 | #include <asm/traps.h> |
23 | 23 | ||
24 | #include <asm/q40_master.h> | 24 | #include <asm/q40_master.h> |
@@ -35,35 +35,36 @@ | |||
35 | */ | 35 | */ |
36 | 36 | ||
37 | static void q40_irq_handler(unsigned int, struct pt_regs *fp); | 37 | static void q40_irq_handler(unsigned int, struct pt_regs *fp); |
38 | static void q40_enable_irq(unsigned int); | 38 | static void q40_irq_enable(struct irq_data *data); |
39 | static void q40_disable_irq(unsigned int); | 39 | static void q40_irq_disable(struct irq_data *data); |
40 | 40 | ||
41 | unsigned short q40_ablecount[35]; | 41 | unsigned short q40_ablecount[35]; |
42 | unsigned short q40_state[35]; | 42 | unsigned short q40_state[35]; |
43 | 43 | ||
44 | static int q40_irq_startup(unsigned int irq) | 44 | static unsigned int q40_irq_startup(struct irq_data *data) |
45 | { | 45 | { |
46 | unsigned int irq = data->irq; | ||
47 | |||
46 | /* test for ISA ints not implemented by HW */ | 48 | /* test for ISA ints not implemented by HW */ |
47 | switch (irq) { | 49 | switch (irq) { |
48 | case 1: case 2: case 8: case 9: | 50 | case 1: case 2: case 8: case 9: |
49 | case 11: case 12: case 13: | 51 | case 11: case 12: case 13: |
50 | printk("%s: ISA IRQ %d not implemented by HW\n", __func__, irq); | 52 | printk("%s: ISA IRQ %d not implemented by HW\n", __func__, irq); |
51 | return -ENXIO; | 53 | /* FIXME return -ENXIO; */ |
52 | } | 54 | } |
53 | return 0; | 55 | return 0; |
54 | } | 56 | } |
55 | 57 | ||
56 | static void q40_irq_shutdown(unsigned int irq) | 58 | static void q40_irq_shutdown(struct irq_data *data) |
57 | { | 59 | { |
58 | } | 60 | } |
59 | 61 | ||
60 | static struct irq_controller q40_irq_controller = { | 62 | static struct irq_chip q40_irq_chip = { |
61 | .name = "q40", | 63 | .name = "q40", |
62 | .lock = __SPIN_LOCK_UNLOCKED(q40_irq_controller.lock), | 64 | .irq_startup = q40_irq_startup, |
63 | .startup = q40_irq_startup, | 65 | .irq_shutdown = q40_irq_shutdown, |
64 | .shutdown = q40_irq_shutdown, | 66 | .irq_enable = q40_irq_enable, |
65 | .enable = q40_enable_irq, | 67 | .irq_disable = q40_irq_disable, |
66 | .disable = q40_disable_irq, | ||
67 | }; | 68 | }; |
68 | 69 | ||
69 | /* | 70 | /* |
@@ -81,13 +82,14 @@ static int disabled; | |||
81 | 82 | ||
82 | void __init q40_init_IRQ(void) | 83 | void __init q40_init_IRQ(void) |
83 | { | 84 | { |
84 | m68k_setup_irq_controller(&q40_irq_controller, 1, Q40_IRQ_MAX); | 85 | m68k_setup_irq_controller(&q40_irq_chip, handle_simple_irq, 1, |
86 | Q40_IRQ_MAX); | ||
85 | 87 | ||
86 | /* setup handler for ISA ints */ | 88 | /* setup handler for ISA ints */ |
87 | m68k_setup_auto_interrupt(q40_irq_handler); | 89 | m68k_setup_auto_interrupt(q40_irq_handler); |
88 | 90 | ||
89 | m68k_irq_startup(IRQ_AUTO_2); | 91 | m68k_irq_startup_irq(IRQ_AUTO_2); |
90 | m68k_irq_startup(IRQ_AUTO_4); | 92 | m68k_irq_startup_irq(IRQ_AUTO_4); |
91 | 93 | ||
92 | /* now enable some ints.. */ | 94 | /* now enable some ints.. */ |
93 | master_outb(1, EXT_ENABLE_REG); /* ISA IRQ 5-15 */ | 95 | master_outb(1, EXT_ENABLE_REG); /* ISA IRQ 5-15 */ |
@@ -218,11 +220,11 @@ static void q40_irq_handler(unsigned int irq, struct pt_regs *fp) | |||
218 | switch (irq) { | 220 | switch (irq) { |
219 | case 4: | 221 | case 4: |
220 | case 6: | 222 | case 6: |
221 | __m68k_handle_int(Q40_IRQ_SAMPLE, fp); | 223 | do_IRQ(Q40_IRQ_SAMPLE, fp); |
222 | return; | 224 | return; |
223 | } | 225 | } |
224 | if (mir & Q40_IRQ_FRAME_MASK) { | 226 | if (mir & Q40_IRQ_FRAME_MASK) { |
225 | __m68k_handle_int(Q40_IRQ_FRAME, fp); | 227 | do_IRQ(Q40_IRQ_FRAME, fp); |
226 | master_outb(-1, FRAME_CLEAR_REG); | 228 | master_outb(-1, FRAME_CLEAR_REG); |
227 | } | 229 | } |
228 | if ((mir & Q40_IRQ_SER_MASK) || (mir & Q40_IRQ_EXT_MASK)) { | 230 | if ((mir & Q40_IRQ_SER_MASK) || (mir & Q40_IRQ_EXT_MASK)) { |
@@ -257,7 +259,7 @@ static void q40_irq_handler(unsigned int irq, struct pt_regs *fp) | |||
257 | goto iirq; | 259 | goto iirq; |
258 | } | 260 | } |
259 | q40_state[irq] |= IRQ_INPROGRESS; | 261 | q40_state[irq] |= IRQ_INPROGRESS; |
260 | __m68k_handle_int(irq, fp); | 262 | do_IRQ(irq, fp); |
261 | q40_state[irq] &= ~IRQ_INPROGRESS; | 263 | q40_state[irq] &= ~IRQ_INPROGRESS; |
262 | 264 | ||
263 | /* naively enable everything, if that fails than */ | 265 | /* naively enable everything, if that fails than */ |
@@ -288,25 +290,29 @@ static void q40_irq_handler(unsigned int irq, struct pt_regs *fp) | |||
288 | mir = master_inb(IIRQ_REG); | 290 | mir = master_inb(IIRQ_REG); |
289 | /* should test whether keyboard irq is really enabled, doing it in defhand */ | 291 | /* should test whether keyboard irq is really enabled, doing it in defhand */ |
290 | if (mir & Q40_IRQ_KEYB_MASK) | 292 | if (mir & Q40_IRQ_KEYB_MASK) |
291 | __m68k_handle_int(Q40_IRQ_KEYBOARD, fp); | 293 | do_IRQ(Q40_IRQ_KEYBOARD, fp); |
292 | 294 | ||
293 | return; | 295 | return; |
294 | } | 296 | } |
295 | 297 | ||
296 | void q40_enable_irq(unsigned int irq) | 298 | void q40_irq_enable(struct irq_data *data) |
297 | { | 299 | { |
300 | unsigned int irq = data->irq; | ||
301 | |||
298 | if (irq >= 5 && irq <= 15) { | 302 | if (irq >= 5 && irq <= 15) { |
299 | mext_disabled--; | 303 | mext_disabled--; |
300 | if (mext_disabled > 0) | 304 | if (mext_disabled > 0) |
301 | printk("q40_enable_irq : nested disable/enable\n"); | 305 | printk("q40_irq_enable : nested disable/enable\n"); |
302 | if (mext_disabled == 0) | 306 | if (mext_disabled == 0) |
303 | master_outb(1, EXT_ENABLE_REG); | 307 | master_outb(1, EXT_ENABLE_REG); |
304 | } | 308 | } |
305 | } | 309 | } |
306 | 310 | ||
307 | 311 | ||
308 | void q40_disable_irq(unsigned int irq) | 312 | void q40_irq_disable(struct irq_data *data) |
309 | { | 313 | { |
314 | unsigned int irq = data->irq; | ||
315 | |||
310 | /* disable ISA iqs : only do something if the driver has been | 316 | /* disable ISA iqs : only do something if the driver has been |
311 | * verified to be Q40 "compatible" - right now IDE, NE2K | 317 | * verified to be Q40 "compatible" - right now IDE, NE2K |
312 | * Any driver should not attempt to sleep across disable_irq !! | 318 | * Any driver should not attempt to sleep across disable_irq !! |
@@ -319,13 +325,3 @@ void q40_disable_irq(unsigned int irq) | |||
319 | printk("disable_irq nesting count %d\n",mext_disabled); | 325 | printk("disable_irq nesting count %d\n",mext_disabled); |
320 | } | 326 | } |
321 | } | 327 | } |
322 | |||
323 | unsigned long q40_probe_irq_on(void) | ||
324 | { | ||
325 | printk("irq probing not working - reconfigure the driver to avoid this\n"); | ||
326 | return -1; | ||
327 | } | ||
328 | int q40_probe_irq_off(unsigned long irqs) | ||
329 | { | ||
330 | return -1; | ||
331 | } | ||
diff --git a/arch/m68k/sun3/sun3ints.c b/arch/m68k/sun3/sun3ints.c index 6464ad3ae3e6..78b60f53e90a 100644 --- a/arch/m68k/sun3/sun3ints.c +++ b/arch/m68k/sun3/sun3ints.c | |||
@@ -51,25 +51,29 @@ void sun3_disable_irq(unsigned int irq) | |||
51 | 51 | ||
52 | static irqreturn_t sun3_int7(int irq, void *dev_id) | 52 | static irqreturn_t sun3_int7(int irq, void *dev_id) |
53 | { | 53 | { |
54 | *sun3_intreg |= (1 << irq); | 54 | unsigned int cnt; |
55 | if (!(kstat_cpu(0).irqs[irq] % 2000)) | 55 | |
56 | sun3_leds(led_pattern[(kstat_cpu(0).irqs[irq] % 16000) / 2000]); | 56 | cnt = kstat_irqs_cpu(irq, 0); |
57 | if (!(cnt % 2000)) | ||
58 | sun3_leds(led_pattern[cnt % 16000 / 2000]); | ||
57 | return IRQ_HANDLED; | 59 | return IRQ_HANDLED; |
58 | } | 60 | } |
59 | 61 | ||
60 | static irqreturn_t sun3_int5(int irq, void *dev_id) | 62 | static irqreturn_t sun3_int5(int irq, void *dev_id) |
61 | { | 63 | { |
64 | unsigned int cnt; | ||
65 | |||
62 | #ifdef CONFIG_SUN3 | 66 | #ifdef CONFIG_SUN3 |
63 | intersil_clear(); | 67 | intersil_clear(); |
64 | #endif | 68 | #endif |
65 | *sun3_intreg |= (1 << irq); | ||
66 | #ifdef CONFIG_SUN3 | 69 | #ifdef CONFIG_SUN3 |
67 | intersil_clear(); | 70 | intersil_clear(); |
68 | #endif | 71 | #endif |
69 | xtime_update(1); | 72 | xtime_update(1); |
70 | update_process_times(user_mode(get_irq_regs())); | 73 | update_process_times(user_mode(get_irq_regs())); |
71 | if (!(kstat_cpu(0).irqs[irq] % 20)) | 74 | cnt = kstat_irqs_cpu(irq, 0); |
72 | sun3_leds(led_pattern[(kstat_cpu(0).irqs[irq] % 160) / 20]); | 75 | if (!(cnt % 20)) |
76 | sun3_leds(led_pattern[cnt % 160 / 20]); | ||
73 | return IRQ_HANDLED; | 77 | return IRQ_HANDLED; |
74 | } | 78 | } |
75 | 79 | ||
@@ -79,29 +83,33 @@ static irqreturn_t sun3_vec255(int irq, void *dev_id) | |||
79 | return IRQ_HANDLED; | 83 | return IRQ_HANDLED; |
80 | } | 84 | } |
81 | 85 | ||
82 | static void sun3_inthandle(unsigned int irq, struct pt_regs *fp) | 86 | static void sun3_irq_enable(struct irq_data *data) |
83 | { | 87 | { |
84 | *sun3_intreg &= ~(1 << irq); | 88 | sun3_enable_irq(data->irq); |
89 | }; | ||
85 | 90 | ||
86 | __m68k_handle_int(irq, fp); | 91 | static void sun3_irq_disable(struct irq_data *data) |
87 | } | 92 | { |
93 | sun3_disable_irq(data->irq); | ||
94 | }; | ||
88 | 95 | ||
89 | static struct irq_controller sun3_irq_controller = { | 96 | static struct irq_chip sun3_irq_chip = { |
90 | .name = "sun3", | 97 | .name = "sun3", |
91 | .lock = __SPIN_LOCK_UNLOCKED(sun3_irq_controller.lock), | 98 | .irq_startup = m68k_irq_startup, |
92 | .startup = m68k_irq_startup, | 99 | .irq_shutdown = m68k_irq_shutdown, |
93 | .shutdown = m68k_irq_shutdown, | 100 | .irq_enable = sun3_irq_enable, |
94 | .enable = sun3_enable_irq, | 101 | .irq_disable = sun3_irq_disable, |
95 | .disable = sun3_disable_irq, | 102 | .irq_mask = sun3_irq_disable, |
103 | .irq_unmask = sun3_irq_enable, | ||
96 | }; | 104 | }; |
97 | 105 | ||
98 | void __init sun3_init_IRQ(void) | 106 | void __init sun3_init_IRQ(void) |
99 | { | 107 | { |
100 | *sun3_intreg = 1; | 108 | *sun3_intreg = 1; |
101 | 109 | ||
102 | m68k_setup_auto_interrupt(sun3_inthandle); | 110 | m68k_setup_irq_controller(&sun3_irq_chip, handle_level_irq, IRQ_AUTO_1, |
103 | m68k_setup_irq_controller(&sun3_irq_controller, IRQ_AUTO_1, 7); | 111 | 7); |
104 | m68k_setup_user_interrupt(VEC_USER, 128, NULL); | 112 | m68k_setup_user_interrupt(VEC_USER, 128); |
105 | 113 | ||
106 | if (request_irq(IRQ_AUTO_5, sun3_int5, 0, "int5", NULL)) | 114 | if (request_irq(IRQ_AUTO_5, sun3_int5, 0, "int5", NULL)) |
107 | pr_err("Couldn't register %s interrupt\n", "int5"); | 115 | pr_err("Couldn't register %s interrupt\n", "int5"); |
diff --git a/arch/mips/Makefile b/arch/mips/Makefile index 9b4cb00407d7..0be318609fc6 100644 --- a/arch/mips/Makefile +++ b/arch/mips/Makefile | |||
@@ -286,11 +286,11 @@ CLEAN_FILES += vmlinux.32 vmlinux.64 | |||
286 | archprepare: | 286 | archprepare: |
287 | ifdef CONFIG_MIPS32_N32 | 287 | ifdef CONFIG_MIPS32_N32 |
288 | @echo ' Checking missing-syscalls for N32' | 288 | @echo ' Checking missing-syscalls for N32' |
289 | $(Q)$(MAKE) $(build)=. missing-syscalls ccflags-y="-mabi=n32" | 289 | $(Q)$(MAKE) $(build)=. missing-syscalls missing_syscalls_flags="-mabi=n32" |
290 | endif | 290 | endif |
291 | ifdef CONFIG_MIPS32_O32 | 291 | ifdef CONFIG_MIPS32_O32 |
292 | @echo ' Checking missing-syscalls for O32' | 292 | @echo ' Checking missing-syscalls for O32' |
293 | $(Q)$(MAKE) $(build)=. missing-syscalls ccflags-y="-mabi=32" | 293 | $(Q)$(MAKE) $(build)=. missing-syscalls missing_syscalls_flags="-mabi=32" |
294 | endif | 294 | endif |
295 | 295 | ||
296 | install: | 296 | install: |
diff --git a/arch/powerpc/boot/dts/charon.dts b/arch/powerpc/boot/dts/charon.dts new file mode 100644 index 000000000000..0e00e508eaa6 --- /dev/null +++ b/arch/powerpc/boot/dts/charon.dts | |||
@@ -0,0 +1,236 @@ | |||
1 | /* | ||
2 | * charon board Device Tree Source | ||
3 | * | ||
4 | * Copyright (C) 2007 Semihalf | ||
5 | * Marian Balakowicz <m8@semihalf.com> | ||
6 | * | ||
7 | * Copyright (C) 2010 DENX Software Engineering GmbH | ||
8 | * Heiko Schocher <hs@denx.de> | ||
9 | * | ||
10 | * This program is free software; you can redistribute it and/or modify it | ||
11 | * under the terms of the GNU General Public License as published by the | ||
12 | * Free Software Foundation; either version 2 of the License, or (at your | ||
13 | * option) any later version. | ||
14 | */ | ||
15 | |||
16 | /dts-v1/; | ||
17 | |||
18 | / { | ||
19 | model = "anon,charon"; | ||
20 | compatible = "anon,charon"; | ||
21 | #address-cells = <1>; | ||
22 | #size-cells = <1>; | ||
23 | interrupt-parent = <&mpc5200_pic>; | ||
24 | |||
25 | cpus { | ||
26 | #address-cells = <1>; | ||
27 | #size-cells = <0>; | ||
28 | |||
29 | PowerPC,5200@0 { | ||
30 | device_type = "cpu"; | ||
31 | reg = <0>; | ||
32 | d-cache-line-size = <32>; | ||
33 | i-cache-line-size = <32>; | ||
34 | d-cache-size = <0x4000>; // L1, 16K | ||
35 | i-cache-size = <0x4000>; // L1, 16K | ||
36 | timebase-frequency = <0>; // from bootloader | ||
37 | bus-frequency = <0>; // from bootloader | ||
38 | clock-frequency = <0>; // from bootloader | ||
39 | }; | ||
40 | }; | ||
41 | |||
42 | memory { | ||
43 | device_type = "memory"; | ||
44 | reg = <0x00000000 0x08000000>; // 128MB | ||
45 | }; | ||
46 | |||
47 | soc5200@f0000000 { | ||
48 | #address-cells = <1>; | ||
49 | #size-cells = <1>; | ||
50 | compatible = "fsl,mpc5200-immr"; | ||
51 | ranges = <0 0xf0000000 0x0000c000>; | ||
52 | reg = <0xf0000000 0x00000100>; | ||
53 | bus-frequency = <0>; // from bootloader | ||
54 | system-frequency = <0>; // from bootloader | ||
55 | |||
56 | cdm@200 { | ||
57 | compatible = "fsl,mpc5200-cdm"; | ||
58 | reg = <0x200 0x38>; | ||
59 | }; | ||
60 | |||
61 | mpc5200_pic: interrupt-controller@500 { | ||
62 | // 5200 interrupts are encoded into two levels; | ||
63 | interrupt-controller; | ||
64 | #interrupt-cells = <3>; | ||
65 | compatible = "fsl,mpc5200-pic"; | ||
66 | reg = <0x500 0x80>; | ||
67 | }; | ||
68 | |||
69 | timer@600 { // General Purpose Timer | ||
70 | compatible = "fsl,mpc5200-gpt"; | ||
71 | reg = <0x600 0x10>; | ||
72 | interrupts = <1 9 0>; | ||
73 | fsl,has-wdt; | ||
74 | }; | ||
75 | |||
76 | can@900 { | ||
77 | compatible = "fsl,mpc5200-mscan"; | ||
78 | interrupts = <2 17 0>; | ||
79 | reg = <0x900 0x80>; | ||
80 | }; | ||
81 | |||
82 | can@980 { | ||
83 | compatible = "fsl,mpc5200-mscan"; | ||
84 | interrupts = <2 18 0>; | ||
85 | reg = <0x980 0x80>; | ||
86 | }; | ||
87 | |||
88 | gpio_simple: gpio@b00 { | ||
89 | compatible = "fsl,mpc5200-gpio"; | ||
90 | reg = <0xb00 0x40>; | ||
91 | interrupts = <1 7 0>; | ||
92 | gpio-controller; | ||
93 | #gpio-cells = <2>; | ||
94 | }; | ||
95 | |||
96 | usb@1000 { | ||
97 | compatible = "fsl,mpc5200-ohci","ohci-be"; | ||
98 | reg = <0x1000 0xff>; | ||
99 | interrupts = <2 6 0>; | ||
100 | }; | ||
101 | |||
102 | dma-controller@1200 { | ||
103 | device_type = "dma-controller"; | ||
104 | compatible = "fsl,mpc5200-bestcomm"; | ||
105 | reg = <0x1200 0x80>; | ||
106 | interrupts = <3 0 0 3 1 0 3 2 0 3 3 0 | ||
107 | 3 4 0 3 5 0 3 6 0 3 7 0 | ||
108 | 3 8 0 3 9 0 3 10 0 3 11 0 | ||
109 | 3 12 0 3 13 0 3 14 0 3 15 0>; | ||
110 | }; | ||
111 | |||
112 | xlb@1f00 { | ||
113 | compatible = "fsl,mpc5200-xlb"; | ||
114 | reg = <0x1f00 0x100>; | ||
115 | }; | ||
116 | |||
117 | serial@2000 { // PSC1 | ||
118 | compatible = "fsl,mpc5200-psc-uart"; | ||
119 | reg = <0x2000 0x100>; | ||
120 | interrupts = <2 1 0>; | ||
121 | }; | ||
122 | |||
123 | serial@2400 { // PSC3 | ||
124 | compatible = "fsl,mpc5200-psc-uart"; | ||
125 | reg = <0x2400 0x100>; | ||
126 | interrupts = <2 3 0>; | ||
127 | }; | ||
128 | |||
129 | ethernet@3000 { | ||
130 | compatible = "fsl,mpc5200-fec"; | ||
131 | reg = <0x3000 0x400>; | ||
132 | local-mac-address = [ 00 00 00 00 00 00 ]; | ||
133 | interrupts = <2 5 0>; | ||
134 | fixed-link = <1 1 100 0 0>; | ||
135 | }; | ||
136 | |||
137 | mdio@3000 { | ||
138 | #address-cells = <1>; | ||
139 | #size-cells = <0>; | ||
140 | compatible = "fsl,mpc5200-mdio"; | ||
141 | reg = <0x3000 0x400>; // fec range, since we need to setup fec interrupts | ||
142 | interrupts = <2 5 0>; // these are for "mii command finished", not link changes & co. | ||
143 | }; | ||
144 | |||
145 | ata@3a00 { | ||
146 | compatible = "fsl,mpc5200-ata"; | ||
147 | reg = <0x3a00 0x100>; | ||
148 | interrupts = <2 7 0>; | ||
149 | }; | ||
150 | |||
151 | i2c@3d00 { | ||
152 | #address-cells = <1>; | ||
153 | #size-cells = <0>; | ||
154 | compatible = "fsl,mpc5200-i2c","fsl-i2c"; | ||
155 | reg = <0x3d00 0x40>; | ||
156 | interrupts = <2 15 0>; | ||
157 | }; | ||
158 | |||
159 | |||
160 | i2c@3d40 { | ||
161 | #address-cells = <1>; | ||
162 | #size-cells = <0>; | ||
163 | compatible = "fsl,mpc5200-i2c","fsl-i2c"; | ||
164 | reg = <0x3d40 0x40>; | ||
165 | interrupts = <2 16 0>; | ||
166 | |||
167 | dtt@28 { | ||
168 | compatible = "national,lm80"; | ||
169 | reg = <0x28>; | ||
170 | }; | ||
171 | |||
172 | rtc@68 { | ||
173 | compatible = "dallas,ds1374"; | ||
174 | reg = <0x68>; | ||
175 | }; | ||
176 | }; | ||
177 | |||
178 | sram@8000 { | ||
179 | compatible = "fsl,mpc5200-sram"; | ||
180 | reg = <0x8000 0x4000>; | ||
181 | }; | ||
182 | }; | ||
183 | |||
184 | localbus { | ||
185 | compatible = "fsl,mpc5200-lpb","simple-bus"; | ||
186 | #address-cells = <2>; | ||
187 | #size-cells = <1>; | ||
188 | ranges = < 0 0 0xfc000000 0x02000000 | ||
189 | 1 0 0xe0000000 0x04000000 // CS1 range, SM501 | ||
190 | 3 0 0xe8000000 0x00080000>; | ||
191 | |||
192 | flash@0,0 { | ||
193 | compatible = "cfi-flash"; | ||
194 | reg = <0 0 0x02000000>; | ||
195 | bank-width = <4>; | ||
196 | device-width = <2>; | ||
197 | #size-cells = <1>; | ||
198 | #address-cells = <1>; | ||
199 | }; | ||
200 | |||
201 | display@1,0 { | ||
202 | compatible = "smi,sm501"; | ||
203 | reg = <1 0x00000000 0x00800000 | ||
204 | 1 0x03e00000 0x00200000>; | ||
205 | mode = "640x480-32@60"; | ||
206 | interrupts = <1 1 3>; | ||
207 | little-endian; | ||
208 | }; | ||
209 | |||
210 | mram0@3,0 { | ||
211 | compatible = "mtd-ram"; | ||
212 | reg = <3 0x00000 0x80000>; | ||
213 | bank-width = <1>; | ||
214 | }; | ||
215 | }; | ||
216 | |||
217 | pci@f0000d00 { | ||
218 | #interrupt-cells = <1>; | ||
219 | #size-cells = <2>; | ||
220 | #address-cells = <3>; | ||
221 | device_type = "pci"; | ||
222 | compatible = "fsl,mpc5200-pci"; | ||
223 | reg = <0xf0000d00 0x100>; | ||
224 | interrupt-map-mask = <0xf800 0 0 7>; | ||
225 | interrupt-map = <0xc000 0 0 1 &mpc5200_pic 0 0 3 | ||
226 | 0xc000 0 0 2 &mpc5200_pic 0 0 3 | ||
227 | 0xc000 0 0 3 &mpc5200_pic 0 0 3 | ||
228 | 0xc000 0 0 4 &mpc5200_pic 0 0 3>; | ||
229 | clock-frequency = <0>; // From boot loader | ||
230 | interrupts = <2 8 0 2 9 0 2 10 0>; | ||
231 | bus-range = <0 0>; | ||
232 | ranges = <0x42000000 0 0x80000000 0x80000000 0 0x10000000 | ||
233 | 0x02000000 0 0x90000000 0x90000000 0 0x10000000 | ||
234 | 0x01000000 0 0x00000000 0xa0000000 0 0x01000000>; | ||
235 | }; | ||
236 | }; | ||
diff --git a/arch/powerpc/configs/52xx/tqm5200_defconfig b/arch/powerpc/configs/52xx/tqm5200_defconfig index 959cd2cfc275..716a37be16e3 100644 --- a/arch/powerpc/configs/52xx/tqm5200_defconfig +++ b/arch/powerpc/configs/52xx/tqm5200_defconfig | |||
@@ -1,9 +1,10 @@ | |||
1 | CONFIG_EXPERIMENTAL=y | 1 | CONFIG_EXPERIMENTAL=y |
2 | CONFIG_SYSVIPC=y | 2 | CONFIG_SYSVIPC=y |
3 | CONFIG_SPARSE_IRQ=y | ||
3 | CONFIG_LOG_BUF_SHIFT=14 | 4 | CONFIG_LOG_BUF_SHIFT=14 |
4 | CONFIG_BLK_DEV_INITRD=y | 5 | CONFIG_BLK_DEV_INITRD=y |
5 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 6 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
6 | CONFIG_EXPERT=y | 7 | CONFIG_EMBEDDED=y |
7 | # CONFIG_SYSCTL_SYSCALL is not set | 8 | # CONFIG_SYSCTL_SYSCALL is not set |
8 | # CONFIG_KALLSYMS is not set | 9 | # CONFIG_KALLSYMS is not set |
9 | # CONFIG_EPOLL is not set | 10 | # CONFIG_EPOLL is not set |
@@ -17,7 +18,6 @@ CONFIG_PPC_MPC5200_SIMPLE=y | |||
17 | CONFIG_PPC_MPC5200_BUGFIX=y | 18 | CONFIG_PPC_MPC5200_BUGFIX=y |
18 | # CONFIG_PPC_PMAC is not set | 19 | # CONFIG_PPC_PMAC is not set |
19 | CONFIG_PPC_BESTCOMM=y | 20 | CONFIG_PPC_BESTCOMM=y |
20 | CONFIG_SPARSE_IRQ=y | ||
21 | CONFIG_PM=y | 21 | CONFIG_PM=y |
22 | # CONFIG_PCI is not set | 22 | # CONFIG_PCI is not set |
23 | CONFIG_NET=y | 23 | CONFIG_NET=y |
@@ -38,17 +38,18 @@ CONFIG_MTD=y | |||
38 | CONFIG_MTD_CONCAT=y | 38 | CONFIG_MTD_CONCAT=y |
39 | CONFIG_MTD_PARTITIONS=y | 39 | CONFIG_MTD_PARTITIONS=y |
40 | CONFIG_MTD_CMDLINE_PARTS=y | 40 | CONFIG_MTD_CMDLINE_PARTS=y |
41 | CONFIG_MTD_OF_PARTS=y | ||
41 | CONFIG_MTD_CHAR=y | 42 | CONFIG_MTD_CHAR=y |
42 | CONFIG_MTD_BLOCK=y | 43 | CONFIG_MTD_BLOCK=y |
43 | CONFIG_MTD_CFI=y | 44 | CONFIG_MTD_CFI=y |
44 | CONFIG_MTD_CFI_AMDSTD=y | 45 | CONFIG_MTD_CFI_AMDSTD=y |
45 | CONFIG_MTD_ROM=y | 46 | CONFIG_MTD_ROM=y |
46 | CONFIG_MTD_PHYSMAP_OF=y | 47 | CONFIG_MTD_PHYSMAP_OF=y |
48 | CONFIG_MTD_PLATRAM=y | ||
47 | CONFIG_PROC_DEVICETREE=y | 49 | CONFIG_PROC_DEVICETREE=y |
48 | CONFIG_BLK_DEV_LOOP=y | 50 | CONFIG_BLK_DEV_LOOP=y |
49 | CONFIG_BLK_DEV_RAM=y | 51 | CONFIG_BLK_DEV_RAM=y |
50 | CONFIG_BLK_DEV_RAM_SIZE=32768 | 52 | CONFIG_BLK_DEV_RAM_SIZE=32768 |
51 | # CONFIG_MISC_DEVICES is not set | ||
52 | CONFIG_BLK_DEV_SD=y | 53 | CONFIG_BLK_DEV_SD=y |
53 | CONFIG_CHR_DEV_SG=y | 54 | CONFIG_CHR_DEV_SG=y |
54 | CONFIG_ATA=y | 55 | CONFIG_ATA=y |
@@ -56,13 +57,11 @@ CONFIG_PATA_MPC52xx=y | |||
56 | CONFIG_PATA_PLATFORM=y | 57 | CONFIG_PATA_PLATFORM=y |
57 | CONFIG_NETDEVICES=y | 58 | CONFIG_NETDEVICES=y |
58 | CONFIG_LXT_PHY=y | 59 | CONFIG_LXT_PHY=y |
60 | CONFIG_FIXED_PHY=y | ||
59 | CONFIG_NET_ETHERNET=y | 61 | CONFIG_NET_ETHERNET=y |
60 | CONFIG_FEC_MPC52xx=y | 62 | CONFIG_FEC_MPC52xx=y |
61 | # CONFIG_NETDEV_1000 is not set | 63 | # CONFIG_NETDEV_1000 is not set |
62 | # CONFIG_NETDEV_10000 is not set | 64 | # CONFIG_NETDEV_10000 is not set |
63 | # CONFIG_INPUT is not set | ||
64 | # CONFIG_SERIO is not set | ||
65 | # CONFIG_VT is not set | ||
66 | CONFIG_SERIAL_MPC52xx=y | 65 | CONFIG_SERIAL_MPC52xx=y |
67 | CONFIG_SERIAL_MPC52xx_CONSOLE=y | 66 | CONFIG_SERIAL_MPC52xx_CONSOLE=y |
68 | CONFIG_SERIAL_MPC52xx_CONSOLE_BAUD=115200 | 67 | CONFIG_SERIAL_MPC52xx_CONSOLE_BAUD=115200 |
@@ -70,7 +69,13 @@ CONFIG_SERIAL_MPC52xx_CONSOLE_BAUD=115200 | |||
70 | CONFIG_I2C=y | 69 | CONFIG_I2C=y |
71 | CONFIG_I2C_CHARDEV=y | 70 | CONFIG_I2C_CHARDEV=y |
72 | CONFIG_I2C_MPC=y | 71 | CONFIG_I2C_MPC=y |
72 | CONFIG_SENSORS_LM80=y | ||
73 | CONFIG_WATCHDOG=y | 73 | CONFIG_WATCHDOG=y |
74 | CONFIG_MFD_SM501=y | ||
75 | CONFIG_FB=y | ||
76 | CONFIG_FB_FOREIGN_ENDIAN=y | ||
77 | CONFIG_FB_SM501=y | ||
78 | CONFIG_FRAMEBUFFER_CONSOLE=y | ||
74 | CONFIG_USB=y | 79 | CONFIG_USB=y |
75 | CONFIG_USB_DEVICEFS=y | 80 | CONFIG_USB_DEVICEFS=y |
76 | # CONFIG_USB_DEVICE_CLASS is not set | 81 | # CONFIG_USB_DEVICE_CLASS is not set |
@@ -80,10 +85,10 @@ CONFIG_USB_OHCI_HCD_PPC_OF_BE=y | |||
80 | CONFIG_USB_STORAGE=y | 85 | CONFIG_USB_STORAGE=y |
81 | CONFIG_RTC_CLASS=y | 86 | CONFIG_RTC_CLASS=y |
82 | CONFIG_RTC_DRV_DS1307=y | 87 | CONFIG_RTC_DRV_DS1307=y |
88 | CONFIG_RTC_DRV_DS1374=y | ||
83 | CONFIG_EXT2_FS=y | 89 | CONFIG_EXT2_FS=y |
84 | CONFIG_EXT3_FS=y | 90 | CONFIG_EXT3_FS=y |
85 | # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set | 91 | # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set |
86 | CONFIG_INOTIFY=y | ||
87 | CONFIG_MSDOS_FS=y | 92 | CONFIG_MSDOS_FS=y |
88 | CONFIG_VFAT_FS=y | 93 | CONFIG_VFAT_FS=y |
89 | CONFIG_PROC_KCORE=y | 94 | CONFIG_PROC_KCORE=y |
@@ -102,7 +107,6 @@ CONFIG_DEBUG_KERNEL=y | |||
102 | CONFIG_DETECT_HUNG_TASK=y | 107 | CONFIG_DETECT_HUNG_TASK=y |
103 | # CONFIG_DEBUG_BUGVERBOSE is not set | 108 | # CONFIG_DEBUG_BUGVERBOSE is not set |
104 | CONFIG_DEBUG_INFO=y | 109 | CONFIG_DEBUG_INFO=y |
105 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set | ||
106 | CONFIG_CRYPTO_ECB=y | 110 | CONFIG_CRYPTO_ECB=y |
107 | CONFIG_CRYPTO_PCBC=y | 111 | CONFIG_CRYPTO_PCBC=y |
108 | # CONFIG_CRYPTO_ANSI_CPRNG is not set | 112 | # CONFIG_CRYPTO_ANSI_CPRNG is not set |
diff --git a/arch/powerpc/configs/ppc64_defconfig b/arch/powerpc/configs/ppc64_defconfig index 84a685a505fe..535711fcb13c 100644 --- a/arch/powerpc/configs/ppc64_defconfig +++ b/arch/powerpc/configs/ppc64_defconfig | |||
@@ -485,3 +485,7 @@ CONFIG_CRYPTO_TWOFISH=m | |||
485 | CONFIG_CRYPTO_LZO=m | 485 | CONFIG_CRYPTO_LZO=m |
486 | # CONFIG_CRYPTO_ANSI_CPRNG is not set | 486 | # CONFIG_CRYPTO_ANSI_CPRNG is not set |
487 | # CONFIG_CRYPTO_HW is not set | 487 | # CONFIG_CRYPTO_HW is not set |
488 | CONFIG_VIRTUALIZATION=y | ||
489 | CONFIG_KVM_BOOK3S_64=m | ||
490 | CONFIG_KVM_BOOK3S_64_HV=y | ||
491 | CONFIG_VHOST_NET=m | ||
diff --git a/arch/powerpc/configs/pseries_defconfig b/arch/powerpc/configs/pseries_defconfig index 96a58b709705..a72f2415a647 100644 --- a/arch/powerpc/configs/pseries_defconfig +++ b/arch/powerpc/configs/pseries_defconfig | |||
@@ -362,3 +362,7 @@ CONFIG_CRYPTO_TWOFISH=m | |||
362 | CONFIG_CRYPTO_LZO=m | 362 | CONFIG_CRYPTO_LZO=m |
363 | # CONFIG_CRYPTO_ANSI_CPRNG is not set | 363 | # CONFIG_CRYPTO_ANSI_CPRNG is not set |
364 | # CONFIG_CRYPTO_HW is not set | 364 | # CONFIG_CRYPTO_HW is not set |
365 | CONFIG_VIRTUALIZATION=y | ||
366 | CONFIG_KVM_BOOK3S_64=m | ||
367 | CONFIG_KVM_BOOK3S_64_HV=y | ||
368 | CONFIG_VHOST_NET=m | ||
diff --git a/arch/powerpc/include/asm/floppy.h b/arch/powerpc/include/asm/floppy.h index 24bd34c57e9d..936a904ae78c 100644 --- a/arch/powerpc/include/asm/floppy.h +++ b/arch/powerpc/include/asm/floppy.h | |||
@@ -108,10 +108,10 @@ static int fd_request_irq(void) | |||
108 | { | 108 | { |
109 | if (can_use_virtual_dma) | 109 | if (can_use_virtual_dma) |
110 | return request_irq(FLOPPY_IRQ, floppy_hardint, | 110 | return request_irq(FLOPPY_IRQ, floppy_hardint, |
111 | IRQF_DISABLED, "floppy", NULL); | 111 | 0, "floppy", NULL); |
112 | else | 112 | else |
113 | return request_irq(FLOPPY_IRQ, floppy_interrupt, | 113 | return request_irq(FLOPPY_IRQ, floppy_interrupt, |
114 | IRQF_DISABLED, "floppy", NULL); | 114 | 0, "floppy", NULL); |
115 | } | 115 | } |
116 | 116 | ||
117 | static int vdma_dma_setup(char *addr, unsigned long size, int mode, int io) | 117 | static int vdma_dma_setup(char *addr, unsigned long size, int mode, int io) |
diff --git a/arch/powerpc/include/asm/lv1call.h b/arch/powerpc/include/asm/lv1call.h index 9cd5fc828a37..f77c708c67a0 100644 --- a/arch/powerpc/include/asm/lv1call.h +++ b/arch/powerpc/include/asm/lv1call.h | |||
@@ -316,7 +316,7 @@ LV1_CALL(gpu_context_free, 1, 0, 218 ) | |||
316 | LV1_CALL(gpu_context_iomap, 5, 0, 221 ) | 316 | LV1_CALL(gpu_context_iomap, 5, 0, 221 ) |
317 | LV1_CALL(gpu_context_attribute, 6, 0, 225 ) | 317 | LV1_CALL(gpu_context_attribute, 6, 0, 225 ) |
318 | LV1_CALL(gpu_context_intr, 1, 1, 227 ) | 318 | LV1_CALL(gpu_context_intr, 1, 1, 227 ) |
319 | LV1_CALL(gpu_attribute, 5, 0, 228 ) | 319 | LV1_CALL(gpu_attribute, 3, 0, 228 ) |
320 | LV1_CALL(get_rtc, 0, 2, 232 ) | 320 | LV1_CALL(get_rtc, 0, 2, 232 ) |
321 | LV1_CALL(set_ppe_periodic_tracer_frequency, 1, 0, 240 ) | 321 | LV1_CALL(set_ppe_periodic_tracer_frequency, 1, 0, 240 ) |
322 | LV1_CALL(start_ppe_periodic_tracer, 5, 0, 241 ) | 322 | LV1_CALL(start_ppe_periodic_tracer, 5, 0, 241 ) |
diff --git a/arch/powerpc/include/asm/xics.h b/arch/powerpc/include/asm/xics.h index bd6c401c0ee5..c48de98ba94e 100644 --- a/arch/powerpc/include/asm/xics.h +++ b/arch/powerpc/include/asm/xics.h | |||
@@ -15,8 +15,8 @@ | |||
15 | #define DEFAULT_PRIORITY 5 | 15 | #define DEFAULT_PRIORITY 5 |
16 | 16 | ||
17 | /* | 17 | /* |
18 | * Mark IPIs as higher priority so we can take them inside interrupts that | 18 | * Mark IPIs as higher priority so we can take them inside interrupts |
19 | * arent marked IRQF_DISABLED | 19 | * FIXME: still true now? |
20 | */ | 20 | */ |
21 | #define IPI_PRIORITY 4 | 21 | #define IPI_PRIORITY 4 |
22 | 22 | ||
diff --git a/arch/powerpc/kernel/exceptions-64s.S b/arch/powerpc/kernel/exceptions-64s.S index a54d92fec612..cf9c69b9189c 100644 --- a/arch/powerpc/kernel/exceptions-64s.S +++ b/arch/powerpc/kernel/exceptions-64s.S | |||
@@ -267,7 +267,7 @@ vsx_unavailable_pSeries_1: | |||
267 | 267 | ||
268 | #ifdef CONFIG_CBE_RAS | 268 | #ifdef CONFIG_CBE_RAS |
269 | STD_EXCEPTION_HV(0x1200, 0x1202, cbe_system_error) | 269 | STD_EXCEPTION_HV(0x1200, 0x1202, cbe_system_error) |
270 | KVM_HANDLER_PR_SKIP(PACA_EXGEN, EXC_HV, 0x1202) | 270 | KVM_HANDLER_SKIP(PACA_EXGEN, EXC_HV, 0x1202) |
271 | #endif /* CONFIG_CBE_RAS */ | 271 | #endif /* CONFIG_CBE_RAS */ |
272 | 272 | ||
273 | STD_EXCEPTION_PSERIES(0x1300, 0x1300, instruction_breakpoint) | 273 | STD_EXCEPTION_PSERIES(0x1300, 0x1300, instruction_breakpoint) |
@@ -275,7 +275,7 @@ vsx_unavailable_pSeries_1: | |||
275 | 275 | ||
276 | #ifdef CONFIG_CBE_RAS | 276 | #ifdef CONFIG_CBE_RAS |
277 | STD_EXCEPTION_HV(0x1600, 0x1602, cbe_maintenance) | 277 | STD_EXCEPTION_HV(0x1600, 0x1602, cbe_maintenance) |
278 | KVM_HANDLER_PR_SKIP(PACA_EXGEN, EXC_HV, 0x1602) | 278 | KVM_HANDLER_SKIP(PACA_EXGEN, EXC_HV, 0x1602) |
279 | #endif /* CONFIG_CBE_RAS */ | 279 | #endif /* CONFIG_CBE_RAS */ |
280 | 280 | ||
281 | STD_EXCEPTION_PSERIES(0x1700, 0x1700, altivec_assist) | 281 | STD_EXCEPTION_PSERIES(0x1700, 0x1700, altivec_assist) |
@@ -283,7 +283,7 @@ vsx_unavailable_pSeries_1: | |||
283 | 283 | ||
284 | #ifdef CONFIG_CBE_RAS | 284 | #ifdef CONFIG_CBE_RAS |
285 | STD_EXCEPTION_HV(0x1800, 0x1802, cbe_thermal) | 285 | STD_EXCEPTION_HV(0x1800, 0x1802, cbe_thermal) |
286 | KVM_HANDLER_PR_SKIP(PACA_EXGEN, EXC_HV, 0x1802) | 286 | KVM_HANDLER_SKIP(PACA_EXGEN, EXC_HV, 0x1802) |
287 | #endif /* CONFIG_CBE_RAS */ | 287 | #endif /* CONFIG_CBE_RAS */ |
288 | 288 | ||
289 | . = 0x3000 | 289 | . = 0x3000 |
diff --git a/arch/powerpc/kernel/smp.c b/arch/powerpc/kernel/smp.c index 25ddbfc7dd36..6df70907d60a 100644 --- a/arch/powerpc/kernel/smp.c +++ b/arch/powerpc/kernel/smp.c | |||
@@ -187,7 +187,7 @@ int smp_request_message_ipi(int virq, int msg) | |||
187 | return 1; | 187 | return 1; |
188 | } | 188 | } |
189 | #endif | 189 | #endif |
190 | err = request_irq(virq, smp_ipi_action[msg], IRQF_DISABLED|IRQF_PERCPU, | 190 | err = request_irq(virq, smp_ipi_action[msg], IRQF_PERCPU, |
191 | smp_ipi_name[msg], 0); | 191 | smp_ipi_name[msg], 0); |
192 | WARN(err < 0, "unable to request_irq %d for %s (rc %d)\n", | 192 | WARN(err < 0, "unable to request_irq %d for %s (rc %d)\n", |
193 | virq, smp_ipi_name[msg], err); | 193 | virq, smp_ipi_name[msg], err); |
diff --git a/arch/powerpc/kvm/book3s_hv_rmhandlers.S b/arch/powerpc/kvm/book3s_hv_rmhandlers.S index f422231d9235..44d8829334ab 100644 --- a/arch/powerpc/kvm/book3s_hv_rmhandlers.S +++ b/arch/powerpc/kvm/book3s_hv_rmhandlers.S | |||
@@ -1263,7 +1263,7 @@ END_FTR_SECTION_IFCLR(CPU_FTR_ARCH_206) | |||
1263 | addi r6,r5,VCORE_NAPPING_THREADS | 1263 | addi r6,r5,VCORE_NAPPING_THREADS |
1264 | 31: lwarx r4,0,r6 | 1264 | 31: lwarx r4,0,r6 |
1265 | or r4,r4,r0 | 1265 | or r4,r4,r0 |
1266 | popcntw r7,r4 | 1266 | PPC_POPCNTW(r7,r4) |
1267 | cmpw r7,r8 | 1267 | cmpw r7,r8 |
1268 | bge 2f | 1268 | bge 2f |
1269 | stwcx. r4,0,r6 | 1269 | stwcx. r4,0,r6 |
diff --git a/arch/powerpc/mm/mem.c b/arch/powerpc/mm/mem.c index 16da595ff402..2dd6bdd31fe1 100644 --- a/arch/powerpc/mm/mem.c +++ b/arch/powerpc/mm/mem.c | |||
@@ -34,6 +34,7 @@ | |||
34 | #include <linux/suspend.h> | 34 | #include <linux/suspend.h> |
35 | #include <linux/memblock.h> | 35 | #include <linux/memblock.h> |
36 | #include <linux/hugetlb.h> | 36 | #include <linux/hugetlb.h> |
37 | #include <linux/slab.h> | ||
37 | 38 | ||
38 | #include <asm/pgalloc.h> | 39 | #include <asm/pgalloc.h> |
39 | #include <asm/prom.h> | 40 | #include <asm/prom.h> |
@@ -555,3 +556,32 @@ void update_mmu_cache(struct vm_area_struct *vma, unsigned long address, | |||
555 | book3e_hugetlb_preload(vma->vm_mm, address, *ptep); | 556 | book3e_hugetlb_preload(vma->vm_mm, address, *ptep); |
556 | #endif | 557 | #endif |
557 | } | 558 | } |
559 | |||
560 | /* | ||
561 | * System memory should not be in /proc/iomem but various tools expect it | ||
562 | * (eg kdump). | ||
563 | */ | ||
564 | static int add_system_ram_resources(void) | ||
565 | { | ||
566 | struct memblock_region *reg; | ||
567 | |||
568 | for_each_memblock(memory, reg) { | ||
569 | struct resource *res; | ||
570 | unsigned long base = reg->base; | ||
571 | unsigned long size = reg->size; | ||
572 | |||
573 | res = kzalloc(sizeof(struct resource), GFP_KERNEL); | ||
574 | WARN_ON(!res); | ||
575 | |||
576 | if (res) { | ||
577 | res->name = "System RAM"; | ||
578 | res->start = base; | ||
579 | res->end = base + size - 1; | ||
580 | res->flags = IORESOURCE_MEM; | ||
581 | WARN_ON(request_resource(&iomem_resource, res) < 0); | ||
582 | } | ||
583 | } | ||
584 | |||
585 | return 0; | ||
586 | } | ||
587 | subsys_initcall(add_system_ram_resources); | ||
diff --git a/arch/powerpc/mm/numa.c b/arch/powerpc/mm/numa.c index c7dd4dec4df8..b22a83a91cb8 100644 --- a/arch/powerpc/mm/numa.c +++ b/arch/powerpc/mm/numa.c | |||
@@ -315,7 +315,10 @@ static int __init find_min_common_depth(void) | |||
315 | struct device_node *root; | 315 | struct device_node *root; |
316 | const char *vec5; | 316 | const char *vec5; |
317 | 317 | ||
318 | root = of_find_node_by_path("/rtas"); | 318 | if (firmware_has_feature(FW_FEATURE_OPAL)) |
319 | root = of_find_node_by_path("/ibm,opal"); | ||
320 | else | ||
321 | root = of_find_node_by_path("/rtas"); | ||
319 | if (!root) | 322 | if (!root) |
320 | root = of_find_node_by_path("/"); | 323 | root = of_find_node_by_path("/"); |
321 | 324 | ||
@@ -344,12 +347,19 @@ static int __init find_min_common_depth(void) | |||
344 | 347 | ||
345 | #define VEC5_AFFINITY_BYTE 5 | 348 | #define VEC5_AFFINITY_BYTE 5 |
346 | #define VEC5_AFFINITY 0x80 | 349 | #define VEC5_AFFINITY 0x80 |
347 | chosen = of_find_node_by_path("/chosen"); | 350 | |
348 | if (chosen) { | 351 | if (firmware_has_feature(FW_FEATURE_OPAL)) |
349 | vec5 = of_get_property(chosen, "ibm,architecture-vec-5", NULL); | 352 | form1_affinity = 1; |
350 | if (vec5 && (vec5[VEC5_AFFINITY_BYTE] & VEC5_AFFINITY)) { | 353 | else { |
351 | dbg("Using form 1 affinity\n"); | 354 | chosen = of_find_node_by_path("/chosen"); |
352 | form1_affinity = 1; | 355 | if (chosen) { |
356 | vec5 = of_get_property(chosen, | ||
357 | "ibm,architecture-vec-5", NULL); | ||
358 | if (vec5 && (vec5[VEC5_AFFINITY_BYTE] & | ||
359 | VEC5_AFFINITY)) { | ||
360 | dbg("Using form 1 affinity\n"); | ||
361 | form1_affinity = 1; | ||
362 | } | ||
353 | } | 363 | } |
354 | } | 364 | } |
355 | 365 | ||
diff --git a/arch/powerpc/platforms/52xx/mpc5200_simple.c b/arch/powerpc/platforms/52xx/mpc5200_simple.c index e36d6e232ae6..846b789fb195 100644 --- a/arch/powerpc/platforms/52xx/mpc5200_simple.c +++ b/arch/powerpc/platforms/52xx/mpc5200_simple.c | |||
@@ -50,6 +50,7 @@ static void __init mpc5200_simple_setup_arch(void) | |||
50 | 50 | ||
51 | /* list of the supported boards */ | 51 | /* list of the supported boards */ |
52 | static const char *board[] __initdata = { | 52 | static const char *board[] __initdata = { |
53 | "anon,charon", | ||
53 | "intercontrol,digsy-mtc", | 54 | "intercontrol,digsy-mtc", |
54 | "manroland,mucmc52", | 55 | "manroland,mucmc52", |
55 | "manroland,uc101", | 56 | "manroland,uc101", |
diff --git a/arch/powerpc/platforms/cell/beat.c b/arch/powerpc/platforms/cell/beat.c index 232fc384e855..852592b2b712 100644 --- a/arch/powerpc/platforms/cell/beat.c +++ b/arch/powerpc/platforms/cell/beat.c | |||
@@ -230,7 +230,7 @@ static int __init beat_register_event(void) | |||
230 | } | 230 | } |
231 | ev->virq = virq; | 231 | ev->virq = virq; |
232 | 232 | ||
233 | rc = request_irq(virq, ev->handler, IRQF_DISABLED, | 233 | rc = request_irq(virq, ev->handler, 0, |
234 | ev->typecode, NULL); | 234 | ev->typecode, NULL); |
235 | if (rc != 0) { | 235 | if (rc != 0) { |
236 | printk(KERN_ERR "Beat: failed to request virtual IRQ" | 236 | printk(KERN_ERR "Beat: failed to request virtual IRQ" |
diff --git a/arch/powerpc/platforms/cell/celleb_scc_pciex.c b/arch/powerpc/platforms/cell/celleb_scc_pciex.c index ae790ac4a589..14be2bd358b8 100644 --- a/arch/powerpc/platforms/cell/celleb_scc_pciex.c +++ b/arch/powerpc/platforms/cell/celleb_scc_pciex.c | |||
@@ -514,7 +514,7 @@ static __init int celleb_setup_pciex(struct device_node *node, | |||
514 | virq = irq_create_of_mapping(oirq.controller, oirq.specifier, | 514 | virq = irq_create_of_mapping(oirq.controller, oirq.specifier, |
515 | oirq.size); | 515 | oirq.size); |
516 | if (request_irq(virq, pciex_handle_internal_irq, | 516 | if (request_irq(virq, pciex_handle_internal_irq, |
517 | IRQF_DISABLED, "pciex", (void *)phb)) { | 517 | 0, "pciex", (void *)phb)) { |
518 | pr_err("PCIEXC:Failed to request irq\n"); | 518 | pr_err("PCIEXC:Failed to request irq\n"); |
519 | goto error; | 519 | goto error; |
520 | } | 520 | } |
diff --git a/arch/powerpc/platforms/cell/iommu.c b/arch/powerpc/platforms/cell/iommu.c index fc46fcac3921..592c3d51b817 100644 --- a/arch/powerpc/platforms/cell/iommu.c +++ b/arch/powerpc/platforms/cell/iommu.c | |||
@@ -412,8 +412,7 @@ static void cell_iommu_enable_hardware(struct cbe_iommu *iommu) | |||
412 | IIC_IRQ_IOEX_ATI | (iommu->nid << IIC_IRQ_NODE_SHIFT)); | 412 | IIC_IRQ_IOEX_ATI | (iommu->nid << IIC_IRQ_NODE_SHIFT)); |
413 | BUG_ON(virq == NO_IRQ); | 413 | BUG_ON(virq == NO_IRQ); |
414 | 414 | ||
415 | ret = request_irq(virq, ioc_interrupt, IRQF_DISABLED, | 415 | ret = request_irq(virq, ioc_interrupt, 0, iommu->name, iommu); |
416 | iommu->name, iommu); | ||
417 | BUG_ON(ret); | 416 | BUG_ON(ret); |
418 | 417 | ||
419 | /* set the IOC segment table origin register (and turn on the iommu) */ | 418 | /* set the IOC segment table origin register (and turn on the iommu) */ |
diff --git a/arch/powerpc/platforms/cell/pmu.c b/arch/powerpc/platforms/cell/pmu.c index 1acf36010423..59c1a1694104 100644 --- a/arch/powerpc/platforms/cell/pmu.c +++ b/arch/powerpc/platforms/cell/pmu.c | |||
@@ -392,7 +392,7 @@ static int __init cbe_init_pm_irq(void) | |||
392 | } | 392 | } |
393 | 393 | ||
394 | rc = request_irq(irq, cbe_pm_irq, | 394 | rc = request_irq(irq, cbe_pm_irq, |
395 | IRQF_DISABLED, "cbe-pmu-0", NULL); | 395 | 0, "cbe-pmu-0", NULL); |
396 | if (rc) { | 396 | if (rc) { |
397 | printk("ERROR: Request for irq on node %d failed\n", | 397 | printk("ERROR: Request for irq on node %d failed\n", |
398 | node); | 398 | node); |
diff --git a/arch/powerpc/platforms/cell/spu_base.c b/arch/powerpc/platforms/cell/spu_base.c index 3675da73623f..e94d3ecdd8bb 100644 --- a/arch/powerpc/platforms/cell/spu_base.c +++ b/arch/powerpc/platforms/cell/spu_base.c | |||
@@ -442,8 +442,7 @@ static int spu_request_irqs(struct spu *spu) | |||
442 | snprintf(spu->irq_c0, sizeof (spu->irq_c0), "spe%02d.0", | 442 | snprintf(spu->irq_c0, sizeof (spu->irq_c0), "spe%02d.0", |
443 | spu->number); | 443 | spu->number); |
444 | ret = request_irq(spu->irqs[0], spu_irq_class_0, | 444 | ret = request_irq(spu->irqs[0], spu_irq_class_0, |
445 | IRQF_DISABLED, | 445 | 0, spu->irq_c0, spu); |
446 | spu->irq_c0, spu); | ||
447 | if (ret) | 446 | if (ret) |
448 | goto bail0; | 447 | goto bail0; |
449 | } | 448 | } |
@@ -451,8 +450,7 @@ static int spu_request_irqs(struct spu *spu) | |||
451 | snprintf(spu->irq_c1, sizeof (spu->irq_c1), "spe%02d.1", | 450 | snprintf(spu->irq_c1, sizeof (spu->irq_c1), "spe%02d.1", |
452 | spu->number); | 451 | spu->number); |
453 | ret = request_irq(spu->irqs[1], spu_irq_class_1, | 452 | ret = request_irq(spu->irqs[1], spu_irq_class_1, |
454 | IRQF_DISABLED, | 453 | 0, spu->irq_c1, spu); |
455 | spu->irq_c1, spu); | ||
456 | if (ret) | 454 | if (ret) |
457 | goto bail1; | 455 | goto bail1; |
458 | } | 456 | } |
@@ -460,8 +458,7 @@ static int spu_request_irqs(struct spu *spu) | |||
460 | snprintf(spu->irq_c2, sizeof (spu->irq_c2), "spe%02d.2", | 458 | snprintf(spu->irq_c2, sizeof (spu->irq_c2), "spe%02d.2", |
461 | spu->number); | 459 | spu->number); |
462 | ret = request_irq(spu->irqs[2], spu_irq_class_2, | 460 | ret = request_irq(spu->irqs[2], spu_irq_class_2, |
463 | IRQF_DISABLED, | 461 | 0, spu->irq_c2, spu); |
464 | spu->irq_c2, spu); | ||
465 | if (ret) | 462 | if (ret) |
466 | goto bail2; | 463 | goto bail2; |
467 | } | 464 | } |
diff --git a/arch/powerpc/platforms/powermac/pic.c b/arch/powerpc/platforms/powermac/pic.c index cb40e921a565..901bfbddc3dd 100644 --- a/arch/powerpc/platforms/powermac/pic.c +++ b/arch/powerpc/platforms/powermac/pic.c | |||
@@ -272,7 +272,6 @@ static struct irqaction xmon_action = { | |||
272 | 272 | ||
273 | static struct irqaction gatwick_cascade_action = { | 273 | static struct irqaction gatwick_cascade_action = { |
274 | .handler = gatwick_action, | 274 | .handler = gatwick_action, |
275 | .flags = IRQF_DISABLED, | ||
276 | .name = "cascade", | 275 | .name = "cascade", |
277 | }; | 276 | }; |
278 | 277 | ||
diff --git a/arch/powerpc/platforms/powermac/smp.c b/arch/powerpc/platforms/powermac/smp.c index 9a521dc8e485..9b6a820bdd7d 100644 --- a/arch/powerpc/platforms/powermac/smp.c +++ b/arch/powerpc/platforms/powermac/smp.c | |||
@@ -200,7 +200,7 @@ static int psurge_secondary_ipi_init(void) | |||
200 | 200 | ||
201 | if (psurge_secondary_virq) | 201 | if (psurge_secondary_virq) |
202 | rc = request_irq(psurge_secondary_virq, psurge_ipi_intr, | 202 | rc = request_irq(psurge_secondary_virq, psurge_ipi_intr, |
203 | IRQF_DISABLED|IRQF_PERCPU, "IPI", NULL); | 203 | IRQF_PERCPU, "IPI", NULL); |
204 | 204 | ||
205 | if (rc) | 205 | if (rc) |
206 | pr_err("Failed to setup secondary cpu IPI\n"); | 206 | pr_err("Failed to setup secondary cpu IPI\n"); |
@@ -408,7 +408,7 @@ static int __init smp_psurge_kick_cpu(int nr) | |||
408 | 408 | ||
409 | static struct irqaction psurge_irqaction = { | 409 | static struct irqaction psurge_irqaction = { |
410 | .handler = psurge_ipi_intr, | 410 | .handler = psurge_ipi_intr, |
411 | .flags = IRQF_DISABLED|IRQF_PERCPU, | 411 | .flags = IRQF_PERCPU, |
412 | .name = "primary IPI", | 412 | .name = "primary IPI", |
413 | }; | 413 | }; |
414 | 414 | ||
diff --git a/arch/powerpc/platforms/ps3/device-init.c b/arch/powerpc/platforms/ps3/device-init.c index 6c4b5837fc8a..3f175e8aedb4 100644 --- a/arch/powerpc/platforms/ps3/device-init.c +++ b/arch/powerpc/platforms/ps3/device-init.c | |||
@@ -825,7 +825,7 @@ static int ps3_probe_thread(void *data) | |||
825 | 825 | ||
826 | spin_lock_init(&dev.lock); | 826 | spin_lock_init(&dev.lock); |
827 | 827 | ||
828 | res = request_irq(irq, ps3_notification_interrupt, IRQF_DISABLED, | 828 | res = request_irq(irq, ps3_notification_interrupt, 0, |
829 | "ps3_notification", &dev); | 829 | "ps3_notification", &dev); |
830 | if (res) { | 830 | if (res) { |
831 | pr_err("%s:%u: request_irq failed %d\n", __func__, __LINE__, | 831 | pr_err("%s:%u: request_irq failed %d\n", __func__, __LINE__, |
diff --git a/arch/powerpc/platforms/ps3/repository.c b/arch/powerpc/platforms/ps3/repository.c index 5e304c292f68..ca40f6afd35d 100644 --- a/arch/powerpc/platforms/ps3/repository.c +++ b/arch/powerpc/platforms/ps3/repository.c | |||
@@ -184,7 +184,7 @@ int ps3_repository_read_bus_type(unsigned int bus_index, | |||
184 | enum ps3_bus_type *bus_type) | 184 | enum ps3_bus_type *bus_type) |
185 | { | 185 | { |
186 | int result; | 186 | int result; |
187 | u64 v1; | 187 | u64 v1 = 0; |
188 | 188 | ||
189 | result = read_node(PS3_LPAR_ID_PME, | 189 | result = read_node(PS3_LPAR_ID_PME, |
190 | make_first_field("bus", bus_index), | 190 | make_first_field("bus", bus_index), |
@@ -199,7 +199,7 @@ int ps3_repository_read_bus_num_dev(unsigned int bus_index, | |||
199 | unsigned int *num_dev) | 199 | unsigned int *num_dev) |
200 | { | 200 | { |
201 | int result; | 201 | int result; |
202 | u64 v1; | 202 | u64 v1 = 0; |
203 | 203 | ||
204 | result = read_node(PS3_LPAR_ID_PME, | 204 | result = read_node(PS3_LPAR_ID_PME, |
205 | make_first_field("bus", bus_index), | 205 | make_first_field("bus", bus_index), |
@@ -239,7 +239,7 @@ int ps3_repository_read_dev_type(unsigned int bus_index, | |||
239 | unsigned int dev_index, enum ps3_dev_type *dev_type) | 239 | unsigned int dev_index, enum ps3_dev_type *dev_type) |
240 | { | 240 | { |
241 | int result; | 241 | int result; |
242 | u64 v1; | 242 | u64 v1 = 0; |
243 | 243 | ||
244 | result = read_node(PS3_LPAR_ID_PME, | 244 | result = read_node(PS3_LPAR_ID_PME, |
245 | make_first_field("bus", bus_index), | 245 | make_first_field("bus", bus_index), |
@@ -256,8 +256,8 @@ int ps3_repository_read_dev_intr(unsigned int bus_index, | |||
256 | enum ps3_interrupt_type *intr_type, unsigned int *interrupt_id) | 256 | enum ps3_interrupt_type *intr_type, unsigned int *interrupt_id) |
257 | { | 257 | { |
258 | int result; | 258 | int result; |
259 | u64 v1; | 259 | u64 v1 = 0; |
260 | u64 v2; | 260 | u64 v2 = 0; |
261 | 261 | ||
262 | result = read_node(PS3_LPAR_ID_PME, | 262 | result = read_node(PS3_LPAR_ID_PME, |
263 | make_first_field("bus", bus_index), | 263 | make_first_field("bus", bus_index), |
@@ -275,7 +275,7 @@ int ps3_repository_read_dev_reg_type(unsigned int bus_index, | |||
275 | enum ps3_reg_type *reg_type) | 275 | enum ps3_reg_type *reg_type) |
276 | { | 276 | { |
277 | int result; | 277 | int result; |
278 | u64 v1; | 278 | u64 v1 = 0; |
279 | 279 | ||
280 | result = read_node(PS3_LPAR_ID_PME, | 280 | result = read_node(PS3_LPAR_ID_PME, |
281 | make_first_field("bus", bus_index), | 281 | make_first_field("bus", bus_index), |
@@ -615,7 +615,7 @@ int ps3_repository_read_stor_dev_num_regions(unsigned int bus_index, | |||
615 | unsigned int dev_index, unsigned int *num_regions) | 615 | unsigned int dev_index, unsigned int *num_regions) |
616 | { | 616 | { |
617 | int result; | 617 | int result; |
618 | u64 v1; | 618 | u64 v1 = 0; |
619 | 619 | ||
620 | result = read_node(PS3_LPAR_ID_PME, | 620 | result = read_node(PS3_LPAR_ID_PME, |
621 | make_first_field("bus", bus_index), | 621 | make_first_field("bus", bus_index), |
@@ -631,7 +631,7 @@ int ps3_repository_read_stor_dev_region_id(unsigned int bus_index, | |||
631 | unsigned int *region_id) | 631 | unsigned int *region_id) |
632 | { | 632 | { |
633 | int result; | 633 | int result; |
634 | u64 v1; | 634 | u64 v1 = 0; |
635 | 635 | ||
636 | result = read_node(PS3_LPAR_ID_PME, | 636 | result = read_node(PS3_LPAR_ID_PME, |
637 | make_first_field("bus", bus_index), | 637 | make_first_field("bus", bus_index), |
@@ -786,7 +786,7 @@ int ps3_repository_read_mm_info(u64 *rm_base, u64 *rm_size, u64 *region_total) | |||
786 | int ps3_repository_read_num_spu_reserved(unsigned int *num_spu_reserved) | 786 | int ps3_repository_read_num_spu_reserved(unsigned int *num_spu_reserved) |
787 | { | 787 | { |
788 | int result; | 788 | int result; |
789 | u64 v1; | 789 | u64 v1 = 0; |
790 | 790 | ||
791 | result = read_node(PS3_LPAR_ID_CURRENT, | 791 | result = read_node(PS3_LPAR_ID_CURRENT, |
792 | make_first_field("bi", 0), | 792 | make_first_field("bi", 0), |
@@ -805,7 +805,7 @@ int ps3_repository_read_num_spu_reserved(unsigned int *num_spu_reserved) | |||
805 | int ps3_repository_read_num_spu_resource_id(unsigned int *num_resource_id) | 805 | int ps3_repository_read_num_spu_resource_id(unsigned int *num_resource_id) |
806 | { | 806 | { |
807 | int result; | 807 | int result; |
808 | u64 v1; | 808 | u64 v1 = 0; |
809 | 809 | ||
810 | result = read_node(PS3_LPAR_ID_CURRENT, | 810 | result = read_node(PS3_LPAR_ID_CURRENT, |
811 | make_first_field("bi", 0), | 811 | make_first_field("bi", 0), |
@@ -827,8 +827,8 @@ int ps3_repository_read_spu_resource_id(unsigned int res_index, | |||
827 | enum ps3_spu_resource_type *resource_type, unsigned int *resource_id) | 827 | enum ps3_spu_resource_type *resource_type, unsigned int *resource_id) |
828 | { | 828 | { |
829 | int result; | 829 | int result; |
830 | u64 v1; | 830 | u64 v1 = 0; |
831 | u64 v2; | 831 | u64 v2 = 0; |
832 | 832 | ||
833 | result = read_node(PS3_LPAR_ID_CURRENT, | 833 | result = read_node(PS3_LPAR_ID_CURRENT, |
834 | make_first_field("bi", 0), | 834 | make_first_field("bi", 0), |
@@ -854,7 +854,7 @@ static int ps3_repository_read_boot_dat_address(u64 *address) | |||
854 | int ps3_repository_read_boot_dat_size(unsigned int *size) | 854 | int ps3_repository_read_boot_dat_size(unsigned int *size) |
855 | { | 855 | { |
856 | int result; | 856 | int result; |
857 | u64 v1; | 857 | u64 v1 = 0; |
858 | 858 | ||
859 | result = read_node(PS3_LPAR_ID_CURRENT, | 859 | result = read_node(PS3_LPAR_ID_CURRENT, |
860 | make_first_field("bi", 0), | 860 | make_first_field("bi", 0), |
@@ -869,7 +869,7 @@ int ps3_repository_read_boot_dat_size(unsigned int *size) | |||
869 | int ps3_repository_read_vuart_av_port(unsigned int *port) | 869 | int ps3_repository_read_vuart_av_port(unsigned int *port) |
870 | { | 870 | { |
871 | int result; | 871 | int result; |
872 | u64 v1; | 872 | u64 v1 = 0; |
873 | 873 | ||
874 | result = read_node(PS3_LPAR_ID_CURRENT, | 874 | result = read_node(PS3_LPAR_ID_CURRENT, |
875 | make_first_field("bi", 0), | 875 | make_first_field("bi", 0), |
@@ -884,7 +884,7 @@ int ps3_repository_read_vuart_av_port(unsigned int *port) | |||
884 | int ps3_repository_read_vuart_sysmgr_port(unsigned int *port) | 884 | int ps3_repository_read_vuart_sysmgr_port(unsigned int *port) |
885 | { | 885 | { |
886 | int result; | 886 | int result; |
887 | u64 v1; | 887 | u64 v1 = 0; |
888 | 888 | ||
889 | result = read_node(PS3_LPAR_ID_CURRENT, | 889 | result = read_node(PS3_LPAR_ID_CURRENT, |
890 | make_first_field("bi", 0), | 890 | make_first_field("bi", 0), |
@@ -919,7 +919,7 @@ int ps3_repository_read_boot_dat_info(u64 *lpar_addr, unsigned int *size) | |||
919 | int ps3_repository_read_num_be(unsigned int *num_be) | 919 | int ps3_repository_read_num_be(unsigned int *num_be) |
920 | { | 920 | { |
921 | int result; | 921 | int result; |
922 | u64 v1; | 922 | u64 v1 = 0; |
923 | 923 | ||
924 | result = read_node(PS3_LPAR_ID_PME, | 924 | result = read_node(PS3_LPAR_ID_PME, |
925 | make_first_field("ben", 0), | 925 | make_first_field("ben", 0), |
diff --git a/arch/powerpc/sysdev/fsl_rio.c b/arch/powerpc/sysdev/fsl_rio.c index de170fd5ba4e..22ffccd8bef5 100644 --- a/arch/powerpc/sysdev/fsl_rio.c +++ b/arch/powerpc/sysdev/fsl_rio.c | |||
@@ -23,7 +23,7 @@ | |||
23 | */ | 23 | */ |
24 | 24 | ||
25 | #include <linux/init.h> | 25 | #include <linux/init.h> |
26 | #include <linux/export.h> | 26 | #include <linux/module.h> |
27 | #include <linux/types.h> | 27 | #include <linux/types.h> |
28 | #include <linux/dma-mapping.h> | 28 | #include <linux/dma-mapping.h> |
29 | #include <linux/interrupt.h> | 29 | #include <linux/interrupt.h> |
diff --git a/arch/powerpc/sysdev/mpic.c b/arch/powerpc/sysdev/mpic.c index 0842c6f8a3e6..8c7e8528e7c4 100644 --- a/arch/powerpc/sysdev/mpic.c +++ b/arch/powerpc/sysdev/mpic.c | |||
@@ -800,8 +800,6 @@ static void mpic_end_ipi(struct irq_data *d) | |||
800 | * IPIs are marked IRQ_PER_CPU. This has the side effect of | 800 | * IPIs are marked IRQ_PER_CPU. This has the side effect of |
801 | * preventing the IRQ_PENDING/IRQ_INPROGRESS logic from | 801 | * preventing the IRQ_PENDING/IRQ_INPROGRESS logic from |
802 | * applying to them. We EOI them late to avoid re-entering. | 802 | * applying to them. We EOI them late to avoid re-entering. |
803 | * We mark IPI's with IRQF_DISABLED as they must run with | ||
804 | * irqs disabled. | ||
805 | */ | 803 | */ |
806 | mpic_eoi(mpic); | 804 | mpic_eoi(mpic); |
807 | } | 805 | } |
diff --git a/arch/powerpc/sysdev/ppc4xx_soc.c b/arch/powerpc/sysdev/ppc4xx_soc.c index d3d6ce3c33b4..0debcc31ad70 100644 --- a/arch/powerpc/sysdev/ppc4xx_soc.c +++ b/arch/powerpc/sysdev/ppc4xx_soc.c | |||
@@ -115,7 +115,7 @@ static int __init ppc4xx_l2c_probe(void) | |||
115 | } | 115 | } |
116 | 116 | ||
117 | /* Install error handler */ | 117 | /* Install error handler */ |
118 | if (request_irq(irq, l2c_error_handler, IRQF_DISABLED, "L2C", 0) < 0) { | 118 | if (request_irq(irq, l2c_error_handler, 0, "L2C", 0) < 0) { |
119 | printk(KERN_ERR "Cannot install L2C error handler" | 119 | printk(KERN_ERR "Cannot install L2C error handler" |
120 | ", cache is not enabled\n"); | 120 | ", cache is not enabled\n"); |
121 | of_node_put(np); | 121 | of_node_put(np); |
diff --git a/arch/powerpc/sysdev/xics/xics-common.c b/arch/powerpc/sysdev/xics/xics-common.c index 3d93a8ded0f8..63762c672a03 100644 --- a/arch/powerpc/sysdev/xics/xics-common.c +++ b/arch/powerpc/sysdev/xics/xics-common.c | |||
@@ -134,11 +134,10 @@ static void xics_request_ipi(void) | |||
134 | BUG_ON(ipi == NO_IRQ); | 134 | BUG_ON(ipi == NO_IRQ); |
135 | 135 | ||
136 | /* | 136 | /* |
137 | * IPIs are marked IRQF_DISABLED as they must run with irqs | 137 | * IPIs are marked IRQF_PERCPU. The handler was set in map. |
138 | * disabled, and PERCPU. The handler was set in map. | ||
139 | */ | 138 | */ |
140 | BUG_ON(request_irq(ipi, icp_ops->ipi_action, | 139 | BUG_ON(request_irq(ipi, icp_ops->ipi_action, |
141 | IRQF_DISABLED|IRQF_PERCPU, "IPI", NULL)); | 140 | IRQF_PERCPU, "IPI", NULL)); |
142 | } | 141 | } |
143 | 142 | ||
144 | int __init xics_smp_probe(void) | 143 | int __init xics_smp_probe(void) |
diff --git a/arch/s390/kernel/jump_label.c b/arch/s390/kernel/jump_label.c index 44cc06bedf77..b987ab2c1541 100644 --- a/arch/s390/kernel/jump_label.c +++ b/arch/s390/kernel/jump_label.c | |||
@@ -18,26 +18,15 @@ struct insn { | |||
18 | } __packed; | 18 | } __packed; |
19 | 19 | ||
20 | struct insn_args { | 20 | struct insn_args { |
21 | unsigned long *target; | 21 | struct jump_entry *entry; |
22 | struct insn *insn; | 22 | enum jump_label_type type; |
23 | ssize_t size; | ||
24 | }; | 23 | }; |
25 | 24 | ||
26 | static int __arch_jump_label_transform(void *data) | 25 | static void __jump_label_transform(struct jump_entry *entry, |
26 | enum jump_label_type type) | ||
27 | { | 27 | { |
28 | struct insn_args *args = data; | ||
29 | int rc; | ||
30 | |||
31 | rc = probe_kernel_write(args->target, args->insn, args->size); | ||
32 | WARN_ON_ONCE(rc < 0); | ||
33 | return 0; | ||
34 | } | ||
35 | |||
36 | void arch_jump_label_transform(struct jump_entry *entry, | ||
37 | enum jump_label_type type) | ||
38 | { | ||
39 | struct insn_args args; | ||
40 | struct insn insn; | 28 | struct insn insn; |
29 | int rc; | ||
41 | 30 | ||
42 | if (type == JUMP_LABEL_ENABLE) { | 31 | if (type == JUMP_LABEL_ENABLE) { |
43 | /* brcl 15,offset */ | 32 | /* brcl 15,offset */ |
@@ -49,11 +38,33 @@ void arch_jump_label_transform(struct jump_entry *entry, | |||
49 | insn.offset = 0; | 38 | insn.offset = 0; |
50 | } | 39 | } |
51 | 40 | ||
52 | args.target = (void *) entry->code; | 41 | rc = probe_kernel_write((void *)entry->code, &insn, JUMP_LABEL_NOP_SIZE); |
53 | args.insn = &insn; | 42 | WARN_ON_ONCE(rc < 0); |
54 | args.size = JUMP_LABEL_NOP_SIZE; | 43 | } |
55 | 44 | ||
56 | stop_machine(__arch_jump_label_transform, &args, NULL); | 45 | static int __sm_arch_jump_label_transform(void *data) |
46 | { | ||
47 | struct insn_args *args = data; | ||
48 | |||
49 | __jump_label_transform(args->entry, args->type); | ||
50 | return 0; | ||
51 | } | ||
52 | |||
53 | void arch_jump_label_transform(struct jump_entry *entry, | ||
54 | enum jump_label_type type) | ||
55 | { | ||
56 | struct insn_args args; | ||
57 | |||
58 | args.entry = entry; | ||
59 | args.type = type; | ||
60 | |||
61 | stop_machine(__sm_arch_jump_label_transform, &args, NULL); | ||
62 | } | ||
63 | |||
64 | void arch_jump_label_transform_static(struct jump_entry *entry, | ||
65 | enum jump_label_type type) | ||
66 | { | ||
67 | __jump_label_transform(entry, type); | ||
57 | } | 68 | } |
58 | 69 | ||
59 | #endif | 70 | #endif |
diff --git a/arch/sh/include/asm/page.h b/arch/sh/include/asm/page.h index 0dca9a5c6be6..15d970328f71 100644 --- a/arch/sh/include/asm/page.h +++ b/arch/sh/include/asm/page.h | |||
@@ -151,8 +151,13 @@ typedef struct page *pgtable_t; | |||
151 | #endif /* !__ASSEMBLY__ */ | 151 | #endif /* !__ASSEMBLY__ */ |
152 | 152 | ||
153 | #ifdef CONFIG_UNCACHED_MAPPING | 153 | #ifdef CONFIG_UNCACHED_MAPPING |
154 | #if defined(CONFIG_29BIT) | ||
155 | #define UNCAC_ADDR(addr) P2SEGADDR(addr) | ||
156 | #define CAC_ADDR(addr) P1SEGADDR(addr) | ||
157 | #else | ||
154 | #define UNCAC_ADDR(addr) ((addr) - PAGE_OFFSET + uncached_start) | 158 | #define UNCAC_ADDR(addr) ((addr) - PAGE_OFFSET + uncached_start) |
155 | #define CAC_ADDR(addr) ((addr) - uncached_start + PAGE_OFFSET) | 159 | #define CAC_ADDR(addr) ((addr) - uncached_start + PAGE_OFFSET) |
160 | #endif | ||
156 | #else | 161 | #else |
157 | #define UNCAC_ADDR(addr) ((addr)) | 162 | #define UNCAC_ADDR(addr) ((addr)) |
158 | #define CAC_ADDR(addr) ((addr)) | 163 | #define CAC_ADDR(addr) ((addr)) |
diff --git a/arch/sh/include/asm/unistd_32.h b/arch/sh/include/asm/unistd_32.h index 3432008d2888..152b8627a184 100644 --- a/arch/sh/include/asm/unistd_32.h +++ b/arch/sh/include/asm/unistd_32.h | |||
@@ -375,8 +375,10 @@ | |||
375 | #define __NR_syncfs 362 | 375 | #define __NR_syncfs 362 |
376 | #define __NR_sendmmsg 363 | 376 | #define __NR_sendmmsg 363 |
377 | #define __NR_setns 364 | 377 | #define __NR_setns 364 |
378 | #define __NR_process_vm_readv 365 | ||
379 | #define __NR_process_vm_writev 366 | ||
378 | 380 | ||
379 | #define NR_syscalls 365 | 381 | #define NR_syscalls 367 |
380 | 382 | ||
381 | #ifdef __KERNEL__ | 383 | #ifdef __KERNEL__ |
382 | 384 | ||
diff --git a/arch/sh/include/asm/unistd_64.h b/arch/sh/include/asm/unistd_64.h index ec9898665f23..c330c23db5a0 100644 --- a/arch/sh/include/asm/unistd_64.h +++ b/arch/sh/include/asm/unistd_64.h | |||
@@ -396,10 +396,12 @@ | |||
396 | #define __NR_syncfs 373 | 396 | #define __NR_syncfs 373 |
397 | #define __NR_sendmmsg 374 | 397 | #define __NR_sendmmsg 374 |
398 | #define __NR_setns 375 | 398 | #define __NR_setns 375 |
399 | #define __NR_process_vm_readv 376 | ||
400 | #define __NR_process_vm_writev 377 | ||
399 | 401 | ||
400 | #ifdef __KERNEL__ | 402 | #ifdef __KERNEL__ |
401 | 403 | ||
402 | #define NR_syscalls 376 | 404 | #define NR_syscalls 378 |
403 | 405 | ||
404 | #define __ARCH_WANT_IPC_PARSE_VERSION | 406 | #define __ARCH_WANT_IPC_PARSE_VERSION |
405 | #define __ARCH_WANT_OLD_READDIR | 407 | #define __ARCH_WANT_OLD_READDIR |
diff --git a/arch/sh/kernel/cpu/sh2a/setup-sh7203.c b/arch/sh/kernel/cpu/sh2a/setup-sh7203.c index a43124e608c3..0bd744f9a3b7 100644 --- a/arch/sh/kernel/cpu/sh2a/setup-sh7203.c +++ b/arch/sh/kernel/cpu/sh2a/setup-sh7203.c | |||
@@ -176,10 +176,12 @@ static DECLARE_INTC_DESC(intc_desc, "sh7203", vectors, groups, | |||
176 | static struct plat_sci_port scif0_platform_data = { | 176 | static struct plat_sci_port scif0_platform_data = { |
177 | .mapbase = 0xfffe8000, | 177 | .mapbase = 0xfffe8000, |
178 | .flags = UPF_BOOT_AUTOCONF, | 178 | .flags = UPF_BOOT_AUTOCONF, |
179 | .scscr = SCSCR_RE | SCSCR_TE | SCSCR_REIE, | 179 | .scscr = SCSCR_RIE | SCSCR_TIE | SCSCR_RE | SCSCR_TE | |
180 | SCSCR_REIE, | ||
180 | .scbrr_algo_id = SCBRR_ALGO_2, | 181 | .scbrr_algo_id = SCBRR_ALGO_2, |
181 | .type = PORT_SCIF, | 182 | .type = PORT_SCIF, |
182 | .irqs = { 192, 192, 192, 192 }, | 183 | .irqs = { 192, 192, 192, 192 }, |
184 | .regtype = SCIx_SH2_SCIF_FIFODATA_REGTYPE, | ||
183 | }; | 185 | }; |
184 | 186 | ||
185 | static struct platform_device scif0_device = { | 187 | static struct platform_device scif0_device = { |
@@ -193,10 +195,12 @@ static struct platform_device scif0_device = { | |||
193 | static struct plat_sci_port scif1_platform_data = { | 195 | static struct plat_sci_port scif1_platform_data = { |
194 | .mapbase = 0xfffe8800, | 196 | .mapbase = 0xfffe8800, |
195 | .flags = UPF_BOOT_AUTOCONF, | 197 | .flags = UPF_BOOT_AUTOCONF, |
196 | .scscr = SCSCR_RE | SCSCR_TE | SCSCR_REIE, | 198 | .scscr = SCSCR_RIE | SCSCR_TIE | SCSCR_RE | SCSCR_TE | |
199 | SCSCR_REIE, | ||
197 | .scbrr_algo_id = SCBRR_ALGO_2, | 200 | .scbrr_algo_id = SCBRR_ALGO_2, |
198 | .type = PORT_SCIF, | 201 | .type = PORT_SCIF, |
199 | .irqs = { 196, 196, 196, 196 }, | 202 | .irqs = { 196, 196, 196, 196 }, |
203 | .regtype = SCIx_SH2_SCIF_FIFODATA_REGTYPE, | ||
200 | }; | 204 | }; |
201 | 205 | ||
202 | static struct platform_device scif1_device = { | 206 | static struct platform_device scif1_device = { |
@@ -210,10 +214,12 @@ static struct platform_device scif1_device = { | |||
210 | static struct plat_sci_port scif2_platform_data = { | 214 | static struct plat_sci_port scif2_platform_data = { |
211 | .mapbase = 0xfffe9000, | 215 | .mapbase = 0xfffe9000, |
212 | .flags = UPF_BOOT_AUTOCONF, | 216 | .flags = UPF_BOOT_AUTOCONF, |
213 | .scscr = SCSCR_RE | SCSCR_TE | SCSCR_REIE, | 217 | .scscr = SCSCR_RIE | SCSCR_TIE | SCSCR_RE | SCSCR_TE | |
218 | SCSCR_REIE, | ||
214 | .scbrr_algo_id = SCBRR_ALGO_2, | 219 | .scbrr_algo_id = SCBRR_ALGO_2, |
215 | .type = PORT_SCIF, | 220 | .type = PORT_SCIF, |
216 | .irqs = { 200, 200, 200, 200 }, | 221 | .irqs = { 200, 200, 200, 200 }, |
222 | .regtype = SCIx_SH2_SCIF_FIFODATA_REGTYPE, | ||
217 | }; | 223 | }; |
218 | 224 | ||
219 | static struct platform_device scif2_device = { | 225 | static struct platform_device scif2_device = { |
@@ -227,10 +233,12 @@ static struct platform_device scif2_device = { | |||
227 | static struct plat_sci_port scif3_platform_data = { | 233 | static struct plat_sci_port scif3_platform_data = { |
228 | .mapbase = 0xfffe9800, | 234 | .mapbase = 0xfffe9800, |
229 | .flags = UPF_BOOT_AUTOCONF, | 235 | .flags = UPF_BOOT_AUTOCONF, |
230 | .scscr = SCSCR_RE | SCSCR_TE | SCSCR_REIE, | 236 | .scscr = SCSCR_RIE | SCSCR_TIE | SCSCR_RE | SCSCR_TE | |
237 | SCSCR_REIE, | ||
231 | .scbrr_algo_id = SCBRR_ALGO_2, | 238 | .scbrr_algo_id = SCBRR_ALGO_2, |
232 | .type = PORT_SCIF, | 239 | .type = PORT_SCIF, |
233 | .irqs = { 204, 204, 204, 204 }, | 240 | .irqs = { 204, 204, 204, 204 }, |
241 | .regtype = SCIx_SH2_SCIF_FIFODATA_REGTYPE, | ||
234 | }; | 242 | }; |
235 | 243 | ||
236 | static struct platform_device scif3_device = { | 244 | static struct platform_device scif3_device = { |
diff --git a/arch/sh/kernel/cpu/shmobile/cpuidle.c b/arch/sh/kernel/cpu/shmobile/cpuidle.c index 7d98f909a8ac..1cc257c9b1e3 100644 --- a/arch/sh/kernel/cpu/shmobile/cpuidle.c +++ b/arch/sh/kernel/cpu/shmobile/cpuidle.c | |||
@@ -26,11 +26,12 @@ static unsigned long cpuidle_mode[] = { | |||
26 | }; | 26 | }; |
27 | 27 | ||
28 | static int cpuidle_sleep_enter(struct cpuidle_device *dev, | 28 | static int cpuidle_sleep_enter(struct cpuidle_device *dev, |
29 | struct cpuidle_state *state) | 29 | struct cpuidle_driver *drv, |
30 | int index) | ||
30 | { | 31 | { |
31 | unsigned long allowed_mode = arch_hwblk_sleep_mode(); | 32 | unsigned long allowed_mode = arch_hwblk_sleep_mode(); |
32 | ktime_t before, after; | 33 | ktime_t before, after; |
33 | int requested_state = state - &dev->states[0]; | 34 | int requested_state = index; |
34 | int allowed_state; | 35 | int allowed_state; |
35 | int k; | 36 | int k; |
36 | 37 | ||
@@ -47,11 +48,13 @@ static int cpuidle_sleep_enter(struct cpuidle_device *dev, | |||
47 | */ | 48 | */ |
48 | k = min_t(int, allowed_state, requested_state); | 49 | k = min_t(int, allowed_state, requested_state); |
49 | 50 | ||
50 | dev->last_state = &dev->states[k]; | ||
51 | before = ktime_get(); | 51 | before = ktime_get(); |
52 | sh_mobile_call_standby(cpuidle_mode[k]); | 52 | sh_mobile_call_standby(cpuidle_mode[k]); |
53 | after = ktime_get(); | 53 | after = ktime_get(); |
54 | return ktime_to_ns(ktime_sub(after, before)) >> 10; | 54 | |
55 | dev->last_residency = (int)ktime_to_ns(ktime_sub(after, before)) >> 10; | ||
56 | |||
57 | return k; | ||
55 | } | 58 | } |
56 | 59 | ||
57 | static struct cpuidle_device cpuidle_dev; | 60 | static struct cpuidle_device cpuidle_dev; |
@@ -63,19 +66,19 @@ static struct cpuidle_driver cpuidle_driver = { | |||
63 | void sh_mobile_setup_cpuidle(void) | 66 | void sh_mobile_setup_cpuidle(void) |
64 | { | 67 | { |
65 | struct cpuidle_device *dev = &cpuidle_dev; | 68 | struct cpuidle_device *dev = &cpuidle_dev; |
69 | struct cpuidle_driver *drv = &cpuidle_driver; | ||
66 | struct cpuidle_state *state; | 70 | struct cpuidle_state *state; |
67 | int i; | 71 | int i; |
68 | 72 | ||
69 | cpuidle_register_driver(&cpuidle_driver); | ||
70 | 73 | ||
71 | for (i = 0; i < CPUIDLE_STATE_MAX; i++) { | 74 | for (i = 0; i < CPUIDLE_STATE_MAX; i++) { |
72 | dev->states[i].name[0] = '\0'; | 75 | drv->states[i].name[0] = '\0'; |
73 | dev->states[i].desc[0] = '\0'; | 76 | drv->states[i].desc[0] = '\0'; |
74 | } | 77 | } |
75 | 78 | ||
76 | i = CPUIDLE_DRIVER_STATE_START; | 79 | i = CPUIDLE_DRIVER_STATE_START; |
77 | 80 | ||
78 | state = &dev->states[i++]; | 81 | state = &drv->states[i++]; |
79 | snprintf(state->name, CPUIDLE_NAME_LEN, "C1"); | 82 | snprintf(state->name, CPUIDLE_NAME_LEN, "C1"); |
80 | strncpy(state->desc, "SuperH Sleep Mode", CPUIDLE_DESC_LEN); | 83 | strncpy(state->desc, "SuperH Sleep Mode", CPUIDLE_DESC_LEN); |
81 | state->exit_latency = 1; | 84 | state->exit_latency = 1; |
@@ -85,10 +88,10 @@ void sh_mobile_setup_cpuidle(void) | |||
85 | state->flags |= CPUIDLE_FLAG_TIME_VALID; | 88 | state->flags |= CPUIDLE_FLAG_TIME_VALID; |
86 | state->enter = cpuidle_sleep_enter; | 89 | state->enter = cpuidle_sleep_enter; |
87 | 90 | ||
88 | dev->safe_state = state; | 91 | drv->safe_state_index = i-1; |
89 | 92 | ||
90 | if (sh_mobile_sleep_supported & SUSP_SH_SF) { | 93 | if (sh_mobile_sleep_supported & SUSP_SH_SF) { |
91 | state = &dev->states[i++]; | 94 | state = &drv->states[i++]; |
92 | snprintf(state->name, CPUIDLE_NAME_LEN, "C2"); | 95 | snprintf(state->name, CPUIDLE_NAME_LEN, "C2"); |
93 | strncpy(state->desc, "SuperH Sleep Mode [SF]", | 96 | strncpy(state->desc, "SuperH Sleep Mode [SF]", |
94 | CPUIDLE_DESC_LEN); | 97 | CPUIDLE_DESC_LEN); |
@@ -101,7 +104,7 @@ void sh_mobile_setup_cpuidle(void) | |||
101 | } | 104 | } |
102 | 105 | ||
103 | if (sh_mobile_sleep_supported & SUSP_SH_STANDBY) { | 106 | if (sh_mobile_sleep_supported & SUSP_SH_STANDBY) { |
104 | state = &dev->states[i++]; | 107 | state = &drv->states[i++]; |
105 | snprintf(state->name, CPUIDLE_NAME_LEN, "C3"); | 108 | snprintf(state->name, CPUIDLE_NAME_LEN, "C3"); |
106 | strncpy(state->desc, "SuperH Mobile Standby Mode [SF]", | 109 | strncpy(state->desc, "SuperH Mobile Standby Mode [SF]", |
107 | CPUIDLE_DESC_LEN); | 110 | CPUIDLE_DESC_LEN); |
@@ -113,7 +116,10 @@ void sh_mobile_setup_cpuidle(void) | |||
113 | state->enter = cpuidle_sleep_enter; | 116 | state->enter = cpuidle_sleep_enter; |
114 | } | 117 | } |
115 | 118 | ||
119 | drv->state_count = i; | ||
116 | dev->state_count = i; | 120 | dev->state_count = i; |
117 | 121 | ||
122 | cpuidle_register_driver(&cpuidle_driver); | ||
123 | |||
118 | cpuidle_register_device(dev); | 124 | cpuidle_register_device(dev); |
119 | } | 125 | } |
diff --git a/arch/sh/kernel/syscalls_32.S b/arch/sh/kernel/syscalls_32.S index 293e39c59c00..ee56a9b1a981 100644 --- a/arch/sh/kernel/syscalls_32.S +++ b/arch/sh/kernel/syscalls_32.S | |||
@@ -382,3 +382,5 @@ ENTRY(sys_call_table) | |||
382 | .long sys_syncfs | 382 | .long sys_syncfs |
383 | .long sys_sendmmsg | 383 | .long sys_sendmmsg |
384 | .long sys_setns | 384 | .long sys_setns |
385 | .long sys_process_vm_readv /* 365 */ | ||
386 | .long sys_process_vm_writev | ||
diff --git a/arch/sh/kernel/syscalls_64.S b/arch/sh/kernel/syscalls_64.S index ceb34b94afa9..9af7de26fb71 100644 --- a/arch/sh/kernel/syscalls_64.S +++ b/arch/sh/kernel/syscalls_64.S | |||
@@ -402,3 +402,5 @@ sys_call_table: | |||
402 | .long sys_syncfs | 402 | .long sys_syncfs |
403 | .long sys_sendmmsg | 403 | .long sys_sendmmsg |
404 | .long sys_setns /* 375 */ | 404 | .long sys_setns /* 375 */ |
405 | .long sys_process_vm_readv | ||
406 | .long sys_process_vm_writev | ||
diff --git a/arch/sparc/include/asm/unistd.h b/arch/sparc/include/asm/unistd.h index 6260d5deeabc..c7cb0af0eb59 100644 --- a/arch/sparc/include/asm/unistd.h +++ b/arch/sparc/include/asm/unistd.h | |||
@@ -406,8 +406,10 @@ | |||
406 | #define __NR_syncfs 335 | 406 | #define __NR_syncfs 335 |
407 | #define __NR_sendmmsg 336 | 407 | #define __NR_sendmmsg 336 |
408 | #define __NR_setns 337 | 408 | #define __NR_setns 337 |
409 | #define __NR_process_vm_readv 338 | ||
410 | #define __NR_process_vm_writev 339 | ||
409 | 411 | ||
410 | #define NR_syscalls 338 | 412 | #define NR_syscalls 340 |
411 | 413 | ||
412 | #ifdef __32bit_syscall_numbers__ | 414 | #ifdef __32bit_syscall_numbers__ |
413 | /* Sparc 32-bit only has the "setresuid32", "getresuid32" variants, | 415 | /* Sparc 32-bit only has the "setresuid32", "getresuid32" variants, |
diff --git a/arch/sparc/kernel/jump_label.c b/arch/sparc/kernel/jump_label.c index ea2dafc93d78..971fd435a281 100644 --- a/arch/sparc/kernel/jump_label.c +++ b/arch/sparc/kernel/jump_label.c | |||
@@ -36,12 +36,4 @@ void arch_jump_label_transform(struct jump_entry *entry, | |||
36 | put_online_cpus(); | 36 | put_online_cpus(); |
37 | } | 37 | } |
38 | 38 | ||
39 | void arch_jump_label_text_poke_early(jump_label_t addr) | ||
40 | { | ||
41 | u32 *insn_p = (u32 *) (unsigned long) addr; | ||
42 | |||
43 | *insn_p = 0x01000000; | ||
44 | flushi(insn_p); | ||
45 | } | ||
46 | |||
47 | #endif | 39 | #endif |
diff --git a/arch/sparc/kernel/systbls_32.S b/arch/sparc/kernel/systbls_32.S index 09d8ec454450..63402f9e9f51 100644 --- a/arch/sparc/kernel/systbls_32.S +++ b/arch/sparc/kernel/systbls_32.S | |||
@@ -84,4 +84,4 @@ sys_call_table: | |||
84 | /*320*/ .long sys_dup3, sys_pipe2, sys_inotify_init1, sys_accept4, sys_preadv | 84 | /*320*/ .long sys_dup3, sys_pipe2, sys_inotify_init1, sys_accept4, sys_preadv |
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 | 87 | /*335*/ .long sys_syncfs, sys_sendmmsg, sys_setns, sys_process_vm_readv, sys_process_vm_writev |
diff --git a/arch/sparc/kernel/systbls_64.S b/arch/sparc/kernel/systbls_64.S index edbec45d4688..db86b1a0e9a9 100644 --- a/arch/sparc/kernel/systbls_64.S +++ b/arch/sparc/kernel/systbls_64.S | |||
@@ -85,7 +85,7 @@ sys_call_table32: | |||
85 | /*320*/ .word sys_dup3, sys_pipe2, sys_inotify_init1, sys_accept4, compat_sys_preadv | 85 | /*320*/ .word sys_dup3, sys_pipe2, sys_inotify_init1, sys_accept4, compat_sys_preadv |
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 | 88 | .word sys_syncfs, compat_sys_sendmmsg, sys_setns, compat_sys_process_vm_readv, compat_sys_process_vm_writev |
89 | 89 | ||
90 | #endif /* CONFIG_COMPAT */ | 90 | #endif /* CONFIG_COMPAT */ |
91 | 91 | ||
@@ -162,4 +162,4 @@ sys_call_table: | |||
162 | /*320*/ .word sys_dup3, sys_pipe2, sys_inotify_init1, sys_accept4, sys_preadv | 162 | /*320*/ .word sys_dup3, sys_pipe2, sys_inotify_init1, sys_accept4, sys_preadv |
163 | .word sys_pwritev, sys_rt_tgsigqueueinfo, sys_perf_event_open, sys_recvmmsg, sys_fanotify_init | 163 | .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 | 164 | /*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 | 165 | .word sys_syncfs, sys_sendmmsg, sys_setns, sys_process_vm_readv, sys_process_vm_writev |
diff --git a/arch/x86/include/asm/xen/hypercall.h b/arch/x86/include/asm/xen/hypercall.h index 417777de5a40..5728852fb90f 100644 --- a/arch/x86/include/asm/xen/hypercall.h +++ b/arch/x86/include/asm/xen/hypercall.h | |||
@@ -47,6 +47,7 @@ | |||
47 | #include <xen/interface/xen.h> | 47 | #include <xen/interface/xen.h> |
48 | #include <xen/interface/sched.h> | 48 | #include <xen/interface/sched.h> |
49 | #include <xen/interface/physdev.h> | 49 | #include <xen/interface/physdev.h> |
50 | #include <xen/interface/platform.h> | ||
50 | 51 | ||
51 | /* | 52 | /* |
52 | * The hypercall asms have to meet several constraints: | 53 | * The hypercall asms have to meet several constraints: |
@@ -301,6 +302,13 @@ HYPERVISOR_set_timer_op(u64 timeout) | |||
301 | } | 302 | } |
302 | 303 | ||
303 | static inline int | 304 | static inline int |
305 | HYPERVISOR_dom0_op(struct xen_platform_op *platform_op) | ||
306 | { | ||
307 | platform_op->interface_version = XENPF_INTERFACE_VERSION; | ||
308 | return _hypercall1(int, dom0_op, platform_op); | ||
309 | } | ||
310 | |||
311 | static inline int | ||
304 | HYPERVISOR_set_debugreg(int reg, unsigned long value) | 312 | HYPERVISOR_set_debugreg(int reg, unsigned long value) |
305 | { | 313 | { |
306 | return _hypercall2(int, set_debugreg, reg, value); | 314 | return _hypercall2(int, set_debugreg, reg, value); |
diff --git a/arch/x86/include/asm/xen/interface.h b/arch/x86/include/asm/xen/interface.h index 5d4922ad4b9b..a1f2db5f1170 100644 --- a/arch/x86/include/asm/xen/interface.h +++ b/arch/x86/include/asm/xen/interface.h | |||
@@ -55,6 +55,7 @@ DEFINE_GUEST_HANDLE(char); | |||
55 | DEFINE_GUEST_HANDLE(int); | 55 | DEFINE_GUEST_HANDLE(int); |
56 | DEFINE_GUEST_HANDLE(long); | 56 | DEFINE_GUEST_HANDLE(long); |
57 | DEFINE_GUEST_HANDLE(void); | 57 | DEFINE_GUEST_HANDLE(void); |
58 | DEFINE_GUEST_HANDLE(uint64_t); | ||
58 | #endif | 59 | #endif |
59 | 60 | ||
60 | #ifndef HYPERVISOR_VIRT_START | 61 | #ifndef HYPERVISOR_VIRT_START |
diff --git a/arch/x86/kernel/jump_label.c b/arch/x86/kernel/jump_label.c index cacdd46d184d..ea9d5f2f13ef 100644 --- a/arch/x86/kernel/jump_label.c +++ b/arch/x86/kernel/jump_label.c | |||
@@ -24,8 +24,9 @@ union jump_code_union { | |||
24 | } __attribute__((packed)); | 24 | } __attribute__((packed)); |
25 | }; | 25 | }; |
26 | 26 | ||
27 | void arch_jump_label_transform(struct jump_entry *entry, | 27 | static void __jump_label_transform(struct jump_entry *entry, |
28 | enum jump_label_type type) | 28 | enum jump_label_type type, |
29 | void *(*poker)(void *, const void *, size_t)) | ||
29 | { | 30 | { |
30 | union jump_code_union code; | 31 | union jump_code_union code; |
31 | 32 | ||
@@ -35,17 +36,24 @@ void arch_jump_label_transform(struct jump_entry *entry, | |||
35 | (entry->code + JUMP_LABEL_NOP_SIZE); | 36 | (entry->code + JUMP_LABEL_NOP_SIZE); |
36 | } else | 37 | } else |
37 | memcpy(&code, ideal_nops[NOP_ATOMIC5], JUMP_LABEL_NOP_SIZE); | 38 | memcpy(&code, ideal_nops[NOP_ATOMIC5], JUMP_LABEL_NOP_SIZE); |
39 | |||
40 | (*poker)((void *)entry->code, &code, JUMP_LABEL_NOP_SIZE); | ||
41 | } | ||
42 | |||
43 | void arch_jump_label_transform(struct jump_entry *entry, | ||
44 | enum jump_label_type type) | ||
45 | { | ||
38 | get_online_cpus(); | 46 | get_online_cpus(); |
39 | mutex_lock(&text_mutex); | 47 | mutex_lock(&text_mutex); |
40 | text_poke_smp((void *)entry->code, &code, JUMP_LABEL_NOP_SIZE); | 48 | __jump_label_transform(entry, type, text_poke_smp); |
41 | mutex_unlock(&text_mutex); | 49 | mutex_unlock(&text_mutex); |
42 | put_online_cpus(); | 50 | put_online_cpus(); |
43 | } | 51 | } |
44 | 52 | ||
45 | void __init_or_module arch_jump_label_text_poke_early(jump_label_t addr) | 53 | void arch_jump_label_transform_static(struct jump_entry *entry, |
54 | enum jump_label_type type) | ||
46 | { | 55 | { |
47 | text_poke_early((void *)addr, ideal_nops[NOP_ATOMIC5], | 56 | __jump_label_transform(entry, type, text_poke_early); |
48 | JUMP_LABEL_NOP_SIZE); | ||
49 | } | 57 | } |
50 | 58 | ||
51 | #endif | 59 | #endif |
diff --git a/arch/x86/platform/ce4100/ce4100.c b/arch/x86/platform/ce4100/ce4100.c index 28071bb31db7..4c61b52191eb 100644 --- a/arch/x86/platform/ce4100/ce4100.c +++ b/arch/x86/platform/ce4100/ce4100.c | |||
@@ -109,7 +109,7 @@ static __init void sdv_serial_fixup(void) | |||
109 | } | 109 | } |
110 | 110 | ||
111 | #else | 111 | #else |
112 | static inline void sdv_serial_fixup(void); | 112 | static inline void sdv_serial_fixup(void) {}; |
113 | #endif | 113 | #endif |
114 | 114 | ||
115 | static void __init sdv_arch_setup(void) | 115 | static void __init sdv_arch_setup(void) |
diff --git a/arch/x86/platform/mrst/mrst.c b/arch/x86/platform/mrst/mrst.c index 6ed7afdaf4af..541020df0da6 100644 --- a/arch/x86/platform/mrst/mrst.c +++ b/arch/x86/platform/mrst/mrst.c | |||
@@ -608,6 +608,7 @@ static void *msic_ocd_platform_data(void *info) | |||
608 | } | 608 | } |
609 | 609 | ||
610 | static const struct devs_id __initconst device_ids[] = { | 610 | static const struct devs_id __initconst device_ids[] = { |
611 | {"bma023", SFI_DEV_TYPE_I2C, 1, &no_platform_data}, | ||
611 | {"pmic_gpio", SFI_DEV_TYPE_SPI, 1, &pmic_gpio_platform_data}, | 612 | {"pmic_gpio", SFI_DEV_TYPE_SPI, 1, &pmic_gpio_platform_data}, |
612 | {"spi_max3111", SFI_DEV_TYPE_SPI, 0, &max3111_platform_data}, | 613 | {"spi_max3111", SFI_DEV_TYPE_SPI, 0, &max3111_platform_data}, |
613 | {"i2c_max7315", SFI_DEV_TYPE_I2C, 1, &max7315_platform_data}, | 614 | {"i2c_max7315", SFI_DEV_TYPE_I2C, 1, &max7315_platform_data}, |
diff --git a/arch/x86/platform/mrst/pmu.c b/arch/x86/platform/mrst/pmu.c index 9281da7d91bd..c0ac06da57ac 100644 --- a/arch/x86/platform/mrst/pmu.c +++ b/arch/x86/platform/mrst/pmu.c | |||
@@ -70,7 +70,7 @@ static struct mrst_device mrst_devs[] = { | |||
70 | /* 24 */ { 0x4110, 0 }, /* Lincroft */ | 70 | /* 24 */ { 0x4110, 0 }, /* Lincroft */ |
71 | }; | 71 | }; |
72 | 72 | ||
73 | /* n.b. We ignore PCI-id 0x815 in LSS9 b/c MeeGo has no driver for it */ | 73 | /* n.b. We ignore PCI-id 0x815 in LSS9 b/c Linux has no driver for it */ |
74 | static u16 mrst_lss9_pci_ids[] = {0x080a, 0x0814, 0}; | 74 | static u16 mrst_lss9_pci_ids[] = {0x080a, 0x0814, 0}; |
75 | static u16 mrst_lss10_pci_ids[] = {0x0800, 0x0801, 0x0802, 0x0803, | 75 | static u16 mrst_lss10_pci_ids[] = {0x0800, 0x0801, 0x0802, 0x0803, |
76 | 0x0804, 0x0805, 0x080f, 0}; | 76 | 0x0804, 0x0805, 0x080f, 0}; |
diff --git a/arch/x86/platform/mrst/vrtc.c b/arch/x86/platform/mrst/vrtc.c index a8ac6f1eb66d..225bd0f0f675 100644 --- a/arch/x86/platform/mrst/vrtc.c +++ b/arch/x86/platform/mrst/vrtc.c | |||
@@ -76,8 +76,8 @@ unsigned long vrtc_get_time(void) | |||
76 | 76 | ||
77 | spin_unlock_irqrestore(&rtc_lock, flags); | 77 | spin_unlock_irqrestore(&rtc_lock, flags); |
78 | 78 | ||
79 | /* vRTC YEAR reg contains the offset to 1960 */ | 79 | /* vRTC YEAR reg contains the offset to 1972 */ |
80 | year += 1960; | 80 | year += 1972; |
81 | 81 | ||
82 | printk(KERN_INFO "vRTC: sec: %d min: %d hour: %d day: %d " | 82 | printk(KERN_INFO "vRTC: sec: %d min: %d hour: %d day: %d " |
83 | "mon: %d year: %d\n", sec, min, hour, mday, mon, year); | 83 | "mon: %d year: %d\n", sec, min, hour, mday, mon, year); |
diff --git a/arch/x86/xen/time.c b/arch/x86/xen/time.c index 163b4679556e..0296a9522501 100644 --- a/arch/x86/xen/time.c +++ b/arch/x86/xen/time.c | |||
@@ -201,8 +201,22 @@ static unsigned long xen_get_wallclock(void) | |||
201 | 201 | ||
202 | static int xen_set_wallclock(unsigned long now) | 202 | static int xen_set_wallclock(unsigned long now) |
203 | { | 203 | { |
204 | struct xen_platform_op op; | ||
205 | int rc; | ||
206 | |||
204 | /* do nothing for domU */ | 207 | /* do nothing for domU */ |
205 | return -1; | 208 | if (!xen_initial_domain()) |
209 | return -1; | ||
210 | |||
211 | op.cmd = XENPF_settime; | ||
212 | op.u.settime.secs = now; | ||
213 | op.u.settime.nsecs = 0; | ||
214 | op.u.settime.system_time = xen_clocksource_read(); | ||
215 | |||
216 | rc = HYPERVISOR_dom0_op(&op); | ||
217 | WARN(rc != 0, "XENPF_settime failed: now=%ld\n", now); | ||
218 | |||
219 | return rc; | ||
206 | } | 220 | } |
207 | 221 | ||
208 | static struct clocksource xen_clocksource __read_mostly = { | 222 | static struct clocksource xen_clocksource __read_mostly = { |