diff options
Diffstat (limited to 'arch')
45 files changed, 639 insertions, 265 deletions
diff --git a/arch/arm/mach-integrator/impd1.c b/arch/arm/mach-integrator/impd1.c index 0a7b3267c8d8..3c8383dbe9e6 100644 --- a/arch/arm/mach-integrator/impd1.c +++ b/arch/arm/mach-integrator/impd1.c | |||
@@ -405,7 +405,7 @@ static int impd1_probe(struct lm_device *dev) | |||
405 | 405 | ||
406 | ret = amba_device_register(d, &dev->resource); | 406 | ret = amba_device_register(d, &dev->resource); |
407 | if (ret) { | 407 | if (ret) { |
408 | dev_err(&d->dev, "unable to register device: %d\n"); | 408 | dev_err(&d->dev, "unable to register device: %d\n", ret); |
409 | kfree(d); | 409 | kfree(d); |
410 | } | 410 | } |
411 | } | 411 | } |
diff --git a/arch/arm/mach-ixp4xx/fsg-setup.c b/arch/arm/mach-ixp4xx/fsg-setup.c index 0db3a909ae61..501dfdcc39fe 100644 --- a/arch/arm/mach-ixp4xx/fsg-setup.c +++ b/arch/arm/mach-ixp4xx/fsg-setup.c | |||
@@ -64,7 +64,7 @@ static struct platform_device fsg_i2c_gpio = { | |||
64 | 64 | ||
65 | static struct i2c_board_info __initdata fsg_i2c_board_info [] = { | 65 | static struct i2c_board_info __initdata fsg_i2c_board_info [] = { |
66 | { | 66 | { |
67 | I2C_BOARD_INFO("rtc-isl1208", 0x6f), | 67 | I2C_BOARD_INFO("isl1208", 0x6f), |
68 | }, | 68 | }, |
69 | }; | 69 | }; |
70 | 70 | ||
@@ -179,7 +179,6 @@ static void __init fsg_init(void) | |||
179 | { | 179 | { |
180 | DECLARE_MAC_BUF(mac_buf); | 180 | DECLARE_MAC_BUF(mac_buf); |
181 | uint8_t __iomem *f; | 181 | uint8_t __iomem *f; |
182 | int i; | ||
183 | 182 | ||
184 | ixp4xx_sys_init(); | 183 | ixp4xx_sys_init(); |
185 | 184 | ||
@@ -228,6 +227,7 @@ static void __init fsg_init(void) | |||
228 | f = ioremap(IXP4XX_EXP_BUS_BASE(0), 0x400000); | 227 | f = ioremap(IXP4XX_EXP_BUS_BASE(0), 0x400000); |
229 | if (f) { | 228 | if (f) { |
230 | #ifdef __ARMEB__ | 229 | #ifdef __ARMEB__ |
230 | int i; | ||
231 | for (i = 0; i < 6; i++) { | 231 | for (i = 0; i < 6; i++) { |
232 | fsg_plat_eth[0].hwaddr[i] = readb(f + 0x3C0422 + i); | 232 | fsg_plat_eth[0].hwaddr[i] = readb(f + 0x3C0422 + i); |
233 | fsg_plat_eth[1].hwaddr[i] = readb(f + 0x3C043B + i); | 233 | fsg_plat_eth[1].hwaddr[i] = readb(f + 0x3C043B + i); |
diff --git a/arch/arm/mach-pxa/clock.c b/arch/arm/mach-pxa/clock.c index c01eea88f787..ca8e20538157 100644 --- a/arch/arm/mach-pxa/clock.c +++ b/arch/arm/mach-pxa/clock.c | |||
@@ -125,3 +125,28 @@ void clks_register(struct clk *clks, size_t num) | |||
125 | list_add(&clks[i].node, &clocks); | 125 | list_add(&clks[i].node, &clocks); |
126 | mutex_unlock(&clocks_mutex); | 126 | mutex_unlock(&clocks_mutex); |
127 | } | 127 | } |
128 | |||
129 | int clk_add_alias(char *alias, struct device *alias_dev, char *id, | ||
130 | struct device *dev) | ||
131 | { | ||
132 | struct clk *r = clk_lookup(dev, id); | ||
133 | struct clk *new; | ||
134 | |||
135 | if (!r) | ||
136 | return -ENODEV; | ||
137 | |||
138 | new = kzalloc(sizeof(struct clk), GFP_KERNEL); | ||
139 | |||
140 | if (!new) | ||
141 | return -ENOMEM; | ||
142 | |||
143 | new->name = alias; | ||
144 | new->dev = alias_dev; | ||
145 | new->other = r; | ||
146 | |||
147 | mutex_lock(&clocks_mutex); | ||
148 | list_add(&new->node, &clocks); | ||
149 | mutex_unlock(&clocks_mutex); | ||
150 | |||
151 | return 0; | ||
152 | } | ||
diff --git a/arch/arm/mach-pxa/clock.h b/arch/arm/mach-pxa/clock.h index 1ec8f9178aaf..73be795fe3bf 100644 --- a/arch/arm/mach-pxa/clock.h +++ b/arch/arm/mach-pxa/clock.h | |||
@@ -1,3 +1,5 @@ | |||
1 | #include <linux/list.h> | ||
2 | |||
1 | struct clk; | 3 | struct clk; |
2 | 4 | ||
3 | struct clkops { | 5 | struct clkops { |
@@ -86,3 +88,6 @@ extern void clk_pxa3xx_cken_disable(struct clk *); | |||
86 | #endif | 88 | #endif |
87 | 89 | ||
88 | void clks_register(struct clk *clks, size_t num); | 90 | void clks_register(struct clk *clks, size_t num); |
91 | int clk_add_alias(char *alias, struct device *alias_dev, char *id, | ||
92 | struct device *dev); | ||
93 | |||
diff --git a/arch/arm/mach-pxa/eseries.c b/arch/arm/mach-pxa/eseries.c index 03942450885b..001a252bd514 100644 --- a/arch/arm/mach-pxa/eseries.c +++ b/arch/arm/mach-pxa/eseries.c | |||
@@ -10,18 +10,78 @@ | |||
10 | * | 10 | * |
11 | */ | 11 | */ |
12 | 12 | ||
13 | #include <linux/kernel.h> | ||
13 | #include <linux/init.h> | 14 | #include <linux/init.h> |
14 | 15 | ||
15 | #include <asm/setup.h> | 16 | #include <asm/setup.h> |
16 | #include <asm/mach/arch.h> | 17 | #include <asm/mach/arch.h> |
17 | #include <mach/hardware.h> | ||
18 | #include <asm/mach-types.h> | 18 | #include <asm/mach-types.h> |
19 | 19 | ||
20 | #include <mach/mfp-pxa25x.h> | ||
21 | #include <mach/hardware.h> | ||
22 | |||
20 | #include "generic.h" | 23 | #include "generic.h" |
21 | 24 | ||
25 | static unsigned long e740_pin_config[] __initdata = { | ||
26 | /* Chip selects */ | ||
27 | GPIO15_nCS_1, /* CS1 - Flash */ | ||
28 | GPIO79_nCS_3, /* CS3 - IMAGEON */ | ||
29 | GPIO80_nCS_4, /* CS4 - TMIO */ | ||
30 | |||
31 | /* Clocks */ | ||
32 | GPIO12_32KHz, | ||
33 | |||
34 | /* BTUART */ | ||
35 | GPIO42_BTUART_RXD, | ||
36 | GPIO43_BTUART_TXD, | ||
37 | GPIO44_BTUART_CTS, | ||
38 | GPIO45_GPIO, /* Used by TMIO for #SUSPEND */ | ||
39 | |||
40 | /* PC Card */ | ||
41 | GPIO8_GPIO, /* CD0 */ | ||
42 | GPIO44_GPIO, /* CD1 */ | ||
43 | GPIO11_GPIO, /* IRQ0 */ | ||
44 | GPIO6_GPIO, /* IRQ1 */ | ||
45 | GPIO27_GPIO, /* RST0 */ | ||
46 | GPIO24_GPIO, /* RST1 */ | ||
47 | GPIO20_GPIO, /* PWR0 */ | ||
48 | GPIO23_GPIO, /* PWR1 */ | ||
49 | GPIO48_nPOE, | ||
50 | GPIO49_nPWE, | ||
51 | GPIO50_nPIOR, | ||
52 | GPIO51_nPIOW, | ||
53 | GPIO52_nPCE_1, | ||
54 | GPIO53_nPCE_2, | ||
55 | GPIO54_nPSKTSEL, | ||
56 | GPIO55_nPREG, | ||
57 | GPIO56_nPWAIT, | ||
58 | GPIO57_nIOIS16, | ||
59 | |||
60 | /* wakeup */ | ||
61 | GPIO0_GPIO | WAKEUP_ON_EDGE_RISE, | ||
62 | }; | ||
63 | |||
64 | static unsigned long e400_pin_config[] __initdata = { | ||
65 | /* Chip selects */ | ||
66 | GPIO15_nCS_1, /* CS1 - Flash */ | ||
67 | GPIO80_nCS_4, /* CS4 - TMIO */ | ||
68 | |||
69 | /* Clocks */ | ||
70 | GPIO12_32KHz, | ||
71 | |||
72 | /* BTUART */ | ||
73 | GPIO42_BTUART_RXD, | ||
74 | GPIO43_BTUART_TXD, | ||
75 | GPIO44_BTUART_CTS, | ||
76 | GPIO45_GPIO, /* Used by TMIO for #SUSPEND */ | ||
77 | |||
78 | /* wakeup */ | ||
79 | GPIO0_GPIO | WAKEUP_ON_EDGE_RISE, | ||
80 | }; | ||
81 | |||
22 | /* Only e800 has 128MB RAM */ | 82 | /* Only e800 has 128MB RAM */ |
23 | static void __init eseries_fixup(struct machine_desc *desc, | 83 | static void __init eseries_fixup(struct machine_desc *desc, |
24 | struct tag *tags, char **cmdline, struct meminfo *mi) | 84 | struct tag *tags, char **cmdline, struct meminfo *mi) |
25 | { | 85 | { |
26 | mi->nr_banks=1; | 86 | mi->nr_banks=1; |
27 | mi->bank[0].start = 0xa0000000; | 87 | mi->bank[0].start = 0xa0000000; |
@@ -32,83 +92,95 @@ static void __init eseries_fixup(struct machine_desc *desc, | |||
32 | mi->bank[0].size = (64*1024*1024); | 92 | mi->bank[0].size = (64*1024*1024); |
33 | } | 93 | } |
34 | 94 | ||
95 | static void __init e740_init(void) | ||
96 | { | ||
97 | pxa2xx_mfp_config(ARRAY_AND_SIZE(e740_pin_config)); | ||
98 | } | ||
99 | |||
100 | static void __init e400_init(void) | ||
101 | { | ||
102 | pxa2xx_mfp_config(ARRAY_AND_SIZE(e400_pin_config)); | ||
103 | } | ||
104 | |||
35 | /* e-series machine definitions */ | 105 | /* e-series machine definitions */ |
36 | 106 | ||
37 | #ifdef CONFIG_MACH_E330 | 107 | #ifdef CONFIG_MACH_E330 |
38 | MACHINE_START(E330, "Toshiba e330") | 108 | MACHINE_START(E330, "Toshiba e330") |
39 | /* Maintainer: Ian Molton (spyro@f2s.com) */ | 109 | /* Maintainer: Ian Molton (spyro@f2s.com) */ |
40 | .phys_io = 0x40000000, | 110 | .phys_io = 0x40000000, |
41 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, | 111 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, |
42 | .boot_params = 0xa0000100, | 112 | .boot_params = 0xa0000100, |
43 | .map_io = pxa_map_io, | 113 | .map_io = pxa_map_io, |
44 | .init_irq = pxa25x_init_irq, | 114 | .init_irq = pxa25x_init_irq, |
45 | .fixup = eseries_fixup, | 115 | .fixup = eseries_fixup, |
46 | .timer = &pxa_timer, | 116 | .timer = &pxa_timer, |
47 | MACHINE_END | 117 | MACHINE_END |
48 | #endif | 118 | #endif |
49 | 119 | ||
50 | #ifdef CONFIG_MACH_E350 | 120 | #ifdef CONFIG_MACH_E350 |
51 | MACHINE_START(E350, "Toshiba e350") | 121 | MACHINE_START(E350, "Toshiba e350") |
52 | /* Maintainer: Ian Molton (spyro@f2s.com) */ | 122 | /* Maintainer: Ian Molton (spyro@f2s.com) */ |
53 | .phys_io = 0x40000000, | 123 | .phys_io = 0x40000000, |
54 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, | 124 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, |
55 | .boot_params = 0xa0000100, | 125 | .boot_params = 0xa0000100, |
56 | .map_io = pxa_map_io, | 126 | .map_io = pxa_map_io, |
57 | .init_irq = pxa25x_init_irq, | 127 | .init_irq = pxa25x_init_irq, |
58 | .fixup = eseries_fixup, | 128 | .fixup = eseries_fixup, |
59 | .timer = &pxa_timer, | 129 | .timer = &pxa_timer, |
60 | MACHINE_END | 130 | MACHINE_END |
61 | #endif | 131 | #endif |
62 | 132 | ||
63 | #ifdef CONFIG_MACH_E740 | 133 | #ifdef CONFIG_MACH_E740 |
64 | MACHINE_START(E740, "Toshiba e740") | 134 | MACHINE_START(E740, "Toshiba e740") |
65 | /* Maintainer: Ian Molton (spyro@f2s.com) */ | 135 | /* Maintainer: Ian Molton (spyro@f2s.com) */ |
66 | .phys_io = 0x40000000, | 136 | .phys_io = 0x40000000, |
67 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, | 137 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, |
68 | .boot_params = 0xa0000100, | 138 | .boot_params = 0xa0000100, |
69 | .map_io = pxa_map_io, | 139 | .map_io = pxa_map_io, |
70 | .init_irq = pxa25x_init_irq, | 140 | .init_irq = pxa25x_init_irq, |
71 | .fixup = eseries_fixup, | 141 | .fixup = eseries_fixup, |
72 | .timer = &pxa_timer, | 142 | .init_machine = e740_init, |
143 | .timer = &pxa_timer, | ||
73 | MACHINE_END | 144 | MACHINE_END |
74 | #endif | 145 | #endif |
75 | 146 | ||
76 | #ifdef CONFIG_MACH_E750 | 147 | #ifdef CONFIG_MACH_E750 |
77 | MACHINE_START(E750, "Toshiba e750") | 148 | MACHINE_START(E750, "Toshiba e750") |
78 | /* Maintainer: Ian Molton (spyro@f2s.com) */ | 149 | /* Maintainer: Ian Molton (spyro@f2s.com) */ |
79 | .phys_io = 0x40000000, | 150 | .phys_io = 0x40000000, |
80 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, | 151 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, |
81 | .boot_params = 0xa0000100, | 152 | .boot_params = 0xa0000100, |
82 | .map_io = pxa_map_io, | 153 | .map_io = pxa_map_io, |
83 | .init_irq = pxa25x_init_irq, | 154 | .init_irq = pxa25x_init_irq, |
84 | .fixup = eseries_fixup, | 155 | .fixup = eseries_fixup, |
85 | .timer = &pxa_timer, | 156 | .timer = &pxa_timer, |
86 | MACHINE_END | 157 | MACHINE_END |
87 | #endif | 158 | #endif |
88 | 159 | ||
89 | #ifdef CONFIG_MACH_E400 | 160 | #ifdef CONFIG_MACH_E400 |
90 | MACHINE_START(E400, "Toshiba e400") | 161 | MACHINE_START(E400, "Toshiba e400") |
91 | /* Maintainer: Ian Molton (spyro@f2s.com) */ | 162 | /* Maintainer: Ian Molton (spyro@f2s.com) */ |
92 | .phys_io = 0x40000000, | 163 | .phys_io = 0x40000000, |
93 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, | 164 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, |
94 | .boot_params = 0xa0000100, | 165 | .boot_params = 0xa0000100, |
95 | .map_io = pxa_map_io, | 166 | .map_io = pxa_map_io, |
96 | .init_irq = pxa25x_init_irq, | 167 | .init_irq = pxa25x_init_irq, |
97 | .fixup = eseries_fixup, | 168 | .fixup = eseries_fixup, |
98 | .timer = &pxa_timer, | 169 | .init_machine = e400_init, |
170 | .timer = &pxa_timer, | ||
99 | MACHINE_END | 171 | MACHINE_END |
100 | #endif | 172 | #endif |
101 | 173 | ||
102 | #ifdef CONFIG_MACH_E800 | 174 | #ifdef CONFIG_MACH_E800 |
103 | MACHINE_START(E800, "Toshiba e800") | 175 | MACHINE_START(E800, "Toshiba e800") |
104 | /* Maintainer: Ian Molton (spyro@f2s.com) */ | 176 | /* Maintainer: Ian Molton (spyro@f2s.com) */ |
105 | .phys_io = 0x40000000, | 177 | .phys_io = 0x40000000, |
106 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, | 178 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, |
107 | .boot_params = 0xa0000100, | 179 | .boot_params = 0xa0000100, |
108 | .map_io = pxa_map_io, | 180 | .map_io = pxa_map_io, |
109 | .init_irq = pxa25x_init_irq, | 181 | .init_irq = pxa25x_init_irq, |
110 | .fixup = eseries_fixup, | 182 | .fixup = eseries_fixup, |
111 | .timer = &pxa_timer, | 183 | .timer = &pxa_timer, |
112 | MACHINE_END | 184 | MACHINE_END |
113 | #endif | 185 | #endif |
114 | 186 | ||
diff --git a/arch/arm/mach-pxa/include/mach/irqs.h b/arch/arm/mach-pxa/include/mach/irqs.h index 32772bc6925c..108b5db9b2af 100644 --- a/arch/arm/mach-pxa/include/mach/irqs.h +++ b/arch/arm/mach-pxa/include/mach/irqs.h | |||
@@ -183,6 +183,7 @@ | |||
183 | defined(CONFIG_MACH_TOSA) || \ | 183 | defined(CONFIG_MACH_TOSA) || \ |
184 | defined(CONFIG_MACH_MAINSTONE) || \ | 184 | defined(CONFIG_MACH_MAINSTONE) || \ |
185 | defined(CONFIG_MACH_PCM027) || \ | 185 | defined(CONFIG_MACH_PCM027) || \ |
186 | defined(CONFIG_ARCH_PXA_ESERIES) || \ | ||
186 | defined(CONFIG_MACH_MAGICIAN) | 187 | defined(CONFIG_MACH_MAGICIAN) |
187 | #define NR_IRQS (IRQ_BOARD_END) | 188 | #define NR_IRQS (IRQ_BOARD_END) |
188 | #elif defined(CONFIG_MACH_ZYLONITE) | 189 | #elif defined(CONFIG_MACH_ZYLONITE) |
diff --git a/arch/arm/mach-pxa/lubbock.c b/arch/arm/mach-pxa/lubbock.c index bb9e09208b9f..4ffdff2d9ff1 100644 --- a/arch/arm/mach-pxa/lubbock.c +++ b/arch/arm/mach-pxa/lubbock.c | |||
@@ -52,6 +52,7 @@ | |||
52 | #include <mach/mmc.h> | 52 | #include <mach/mmc.h> |
53 | 53 | ||
54 | #include "generic.h" | 54 | #include "generic.h" |
55 | #include "clock.h" | ||
55 | #include "devices.h" | 56 | #include "devices.h" |
56 | 57 | ||
57 | static unsigned long lubbock_pin_config[] __initdata = { | 58 | static unsigned long lubbock_pin_config[] __initdata = { |
@@ -485,6 +486,7 @@ static void __init lubbock_init(void) | |||
485 | 486 | ||
486 | pxa2xx_mfp_config(ARRAY_AND_SIZE(lubbock_pin_config)); | 487 | pxa2xx_mfp_config(ARRAY_AND_SIZE(lubbock_pin_config)); |
487 | 488 | ||
489 | clk_add_alias("SA1111_CLK", NULL, "GPIO11_CLK", NULL); | ||
488 | pxa_set_udc_info(&udc_info); | 490 | pxa_set_udc_info(&udc_info); |
489 | set_pxa_fb_info(&sharp_lm8v31); | 491 | set_pxa_fb_info(&sharp_lm8v31); |
490 | pxa_set_mci_info(&lubbock_mci_platform_data); | 492 | pxa_set_mci_info(&lubbock_mci_platform_data); |
diff --git a/arch/arm/mach-pxa/pxa25x.c b/arch/arm/mach-pxa/pxa25x.c index 9e5d8a8c6424..305452b56e91 100644 --- a/arch/arm/mach-pxa/pxa25x.c +++ b/arch/arm/mach-pxa/pxa25x.c | |||
@@ -166,8 +166,7 @@ static struct clk pxa25x_hwuart_clk = | |||
166 | ; | 166 | ; |
167 | 167 | ||
168 | /* | 168 | /* |
169 | * PXA 2xx clock declarations. Order is important (see aliases below) | 169 | * PXA 2xx clock declarations. |
170 | * Please be careful not to disrupt the ordering. | ||
171 | */ | 170 | */ |
172 | static struct clk pxa25x_clks[] = { | 171 | static struct clk pxa25x_clks[] = { |
173 | INIT_CK("LCDCLK", LCD, &clk_pxa25x_lcd_ops, &pxa_device_fb.dev), | 172 | INIT_CK("LCDCLK", LCD, &clk_pxa25x_lcd_ops, &pxa_device_fb.dev), |
@@ -194,11 +193,6 @@ static struct clk pxa25x_clks[] = { | |||
194 | INIT_CKEN("FICPCLK", FICP, 47923000, 0, NULL), | 193 | INIT_CKEN("FICPCLK", FICP, 47923000, 0, NULL), |
195 | }; | 194 | }; |
196 | 195 | ||
197 | static struct clk pxa2xx_clk_aliases[] = { | ||
198 | INIT_CKOTHER("GPIO7_CLK", &pxa25x_clks[4], NULL), | ||
199 | INIT_CKOTHER("SA1111_CLK", &pxa25x_clks[5], NULL), | ||
200 | }; | ||
201 | |||
202 | #ifdef CONFIG_PM | 196 | #ifdef CONFIG_PM |
203 | 197 | ||
204 | #define SAVE(x) sleep_save[SLEEP_SAVE_##x] = x | 198 | #define SAVE(x) sleep_save[SLEEP_SAVE_##x] = x |
@@ -375,8 +369,6 @@ static int __init pxa25x_init(void) | |||
375 | if (cpu_is_pxa255()) | 369 | if (cpu_is_pxa255()) |
376 | ret = platform_device_register(&pxa_device_hwuart); | 370 | ret = platform_device_register(&pxa_device_hwuart); |
377 | 371 | ||
378 | clks_register(pxa2xx_clk_aliases, ARRAY_SIZE(pxa2xx_clk_aliases)); | ||
379 | |||
380 | return ret; | 372 | return ret; |
381 | } | 373 | } |
382 | 374 | ||
diff --git a/arch/arm/mach-pxa/pxa300.c b/arch/arm/mach-pxa/pxa300.c index 494fc1f032db..9adc7fc4618a 100644 --- a/arch/arm/mach-pxa/pxa300.c +++ b/arch/arm/mach-pxa/pxa300.c | |||
@@ -90,7 +90,9 @@ static struct clk common_clks[] = { | |||
90 | }; | 90 | }; |
91 | 91 | ||
92 | static struct clk pxa310_clks[] = { | 92 | static struct clk pxa310_clks[] = { |
93 | #ifdef CONFIG_CPU_PXA310 | ||
93 | PXA3xx_CKEN("MMCCLK", MMC3, 19500000, 0, &pxa3xx_device_mci3.dev), | 94 | PXA3xx_CKEN("MMCCLK", MMC3, 19500000, 0, &pxa3xx_device_mci3.dev), |
95 | #endif | ||
94 | }; | 96 | }; |
95 | 97 | ||
96 | static int __init pxa300_init(void) | 98 | static int __init pxa300_init(void) |
diff --git a/arch/arm/plat-omap/clock.c b/arch/arm/plat-omap/clock.c index 23a070599993..197974defbe4 100644 --- a/arch/arm/plat-omap/clock.c +++ b/arch/arm/plat-omap/clock.c | |||
@@ -10,7 +10,6 @@ | |||
10 | * it under the terms of the GNU General Public License version 2 as | 10 | * it under the terms of the GNU General Public License version 2 as |
11 | * published by the Free Software Foundation. | 11 | * published by the Free Software Foundation. |
12 | */ | 12 | */ |
13 | #include <linux/version.h> | ||
14 | #include <linux/kernel.h> | 13 | #include <linux/kernel.h> |
15 | #include <linux/init.h> | 14 | #include <linux/init.h> |
16 | #include <linux/module.h> | 15 | #include <linux/module.h> |
diff --git a/arch/cris/arch-v32/kernel/fasttimer.c b/arch/cris/arch-v32/kernel/fasttimer.c index 2de9d5849ef0..111caa1a2efb 100644 --- a/arch/cris/arch-v32/kernel/fasttimer.c +++ b/arch/cris/arch-v32/kernel/fasttimer.c | |||
@@ -19,8 +19,6 @@ | |||
19 | #include <asm/irq.h> | 19 | #include <asm/irq.h> |
20 | #include <asm/system.h> | 20 | #include <asm/system.h> |
21 | 21 | ||
22 | #include <linux/version.h> | ||
23 | |||
24 | #include <hwregs/reg_map.h> | 22 | #include <hwregs/reg_map.h> |
25 | #include <hwregs/reg_rdwr.h> | 23 | #include <hwregs/reg_rdwr.h> |
26 | #include <hwregs/timer_defs.h> | 24 | #include <hwregs/timer_defs.h> |
diff --git a/arch/mn10300/kernel/mn10300-serial.c b/arch/mn10300/kernel/mn10300-serial.c index 8b054e7a8ae8..aa07d0cd1905 100644 --- a/arch/mn10300/kernel/mn10300-serial.c +++ b/arch/mn10300/kernel/mn10300-serial.c | |||
@@ -17,7 +17,6 @@ static const char serial_revdate[] = "2007-11-06"; | |||
17 | #define SUPPORT_SYSRQ | 17 | #define SUPPORT_SYSRQ |
18 | #endif | 18 | #endif |
19 | 19 | ||
20 | #include <linux/version.h> | ||
21 | #include <linux/module.h> | 20 | #include <linux/module.h> |
22 | #include <linux/serial.h> | 21 | #include <linux/serial.h> |
23 | #include <linux/circ_buf.h> | 22 | #include <linux/circ_buf.h> |
diff --git a/arch/powerpc/kernel/crash_dump.c b/arch/powerpc/kernel/crash_dump.c index e0debcca0bfa..a323c9b32ee1 100644 --- a/arch/powerpc/kernel/crash_dump.c +++ b/arch/powerpc/kernel/crash_dump.c | |||
@@ -86,6 +86,19 @@ static int __init parse_savemaxmem(char *p) | |||
86 | } | 86 | } |
87 | __setup("savemaxmem=", parse_savemaxmem); | 87 | __setup("savemaxmem=", parse_savemaxmem); |
88 | 88 | ||
89 | |||
90 | static size_t copy_oldmem_vaddr(void *vaddr, char *buf, size_t csize, | ||
91 | unsigned long offset, int userbuf) | ||
92 | { | ||
93 | if (userbuf) { | ||
94 | if (copy_to_user((char __user *)buf, (vaddr + offset), csize)) | ||
95 | return -EFAULT; | ||
96 | } else | ||
97 | memcpy(buf, (vaddr + offset), csize); | ||
98 | |||
99 | return csize; | ||
100 | } | ||
101 | |||
89 | /** | 102 | /** |
90 | * copy_oldmem_page - copy one page from "oldmem" | 103 | * copy_oldmem_page - copy one page from "oldmem" |
91 | * @pfn: page frame number to be copied | 104 | * @pfn: page frame number to be copied |
@@ -107,16 +120,16 @@ ssize_t copy_oldmem_page(unsigned long pfn, char *buf, | |||
107 | if (!csize) | 120 | if (!csize) |
108 | return 0; | 121 | return 0; |
109 | 122 | ||
110 | vaddr = __ioremap(pfn << PAGE_SHIFT, PAGE_SIZE, 0); | 123 | csize = min(csize, PAGE_SIZE); |
111 | 124 | ||
112 | if (userbuf) { | 125 | if (pfn < max_pfn) { |
113 | if (copy_to_user((char __user *)buf, (vaddr + offset), csize)) { | 126 | vaddr = __va(pfn << PAGE_SHIFT); |
114 | iounmap(vaddr); | 127 | csize = copy_oldmem_vaddr(vaddr, buf, csize, offset, userbuf); |
115 | return -EFAULT; | 128 | } else { |
116 | } | 129 | vaddr = __ioremap(pfn << PAGE_SHIFT, PAGE_SIZE, 0); |
117 | } else | 130 | csize = copy_oldmem_vaddr(vaddr, buf, csize, offset, userbuf); |
118 | memcpy(buf, (vaddr + offset), csize); | 131 | iounmap(vaddr); |
132 | } | ||
119 | 133 | ||
120 | iounmap(vaddr); | ||
121 | return csize; | 134 | return csize; |
122 | } | 135 | } |
diff --git a/arch/powerpc/kernel/ibmebus.c b/arch/powerpc/kernel/ibmebus.c index 9d42eb57aea3..a06362223f8d 100644 --- a/arch/powerpc/kernel/ibmebus.c +++ b/arch/powerpc/kernel/ibmebus.c | |||
@@ -233,17 +233,6 @@ void ibmebus_free_irq(u32 ist, void *dev_id) | |||
233 | } | 233 | } |
234 | EXPORT_SYMBOL(ibmebus_free_irq); | 234 | EXPORT_SYMBOL(ibmebus_free_irq); |
235 | 235 | ||
236 | static ssize_t name_show(struct device *dev, | ||
237 | struct device_attribute *attr, char *buf) | ||
238 | { | ||
239 | return sprintf(buf, "%s\n", to_of_device(dev)->node->name); | ||
240 | } | ||
241 | |||
242 | static struct device_attribute ibmebus_dev_attrs[] = { | ||
243 | __ATTR_RO(name), | ||
244 | __ATTR_NULL | ||
245 | }; | ||
246 | |||
247 | static char *ibmebus_chomp(const char *in, size_t count) | 236 | static char *ibmebus_chomp(const char *in, size_t count) |
248 | { | 237 | { |
249 | char *out = kmalloc(count + 1, GFP_KERNEL); | 238 | char *out = kmalloc(count + 1, GFP_KERNEL); |
@@ -327,7 +316,6 @@ static struct bus_attribute ibmebus_bus_attrs[] = { | |||
327 | 316 | ||
328 | struct bus_type ibmebus_bus_type = { | 317 | struct bus_type ibmebus_bus_type = { |
329 | .uevent = of_device_uevent, | 318 | .uevent = of_device_uevent, |
330 | .dev_attrs = ibmebus_dev_attrs, | ||
331 | .bus_attrs = ibmebus_bus_attrs | 319 | .bus_attrs = ibmebus_bus_attrs |
332 | }; | 320 | }; |
333 | EXPORT_SYMBOL(ibmebus_bus_type); | 321 | EXPORT_SYMBOL(ibmebus_bus_type); |
diff --git a/arch/powerpc/kernel/vio.c b/arch/powerpc/kernel/vio.c index 22a3c33fd751..2750fbab1975 100644 --- a/arch/powerpc/kernel/vio.c +++ b/arch/powerpc/kernel/vio.c | |||
@@ -1113,7 +1113,7 @@ static int vio_bus_probe(struct device *dev) | |||
1113 | return error; | 1113 | return error; |
1114 | } | 1114 | } |
1115 | error = viodrv->probe(viodev, id); | 1115 | error = viodrv->probe(viodev, id); |
1116 | if (error) | 1116 | if (error && firmware_has_feature(FW_FEATURE_CMO)) |
1117 | vio_cmo_bus_remove(viodev); | 1117 | vio_cmo_bus_remove(viodev); |
1118 | } | 1118 | } |
1119 | 1119 | ||
diff --git a/arch/powerpc/platforms/cell/spufs/run.c b/arch/powerpc/platforms/cell/spufs/run.c index f7edba6cb795..c9bb7cfd3dca 100644 --- a/arch/powerpc/platforms/cell/spufs/run.c +++ b/arch/powerpc/platforms/cell/spufs/run.c | |||
@@ -206,11 +206,6 @@ static int spu_run_init(struct spu_context *ctx, u32 *npc) | |||
206 | (SPU_RUNCNTL_RUNNABLE | SPU_RUNCNTL_ISOLATE); | 206 | (SPU_RUNCNTL_RUNNABLE | SPU_RUNCNTL_ISOLATE); |
207 | if (runcntl == 0) | 207 | if (runcntl == 0) |
208 | runcntl = SPU_RUNCNTL_RUNNABLE; | 208 | runcntl = SPU_RUNCNTL_RUNNABLE; |
209 | } | ||
210 | |||
211 | if (ctx->flags & SPU_CREATE_NOSCHED) { | ||
212 | spuctx_switch_state(ctx, SPU_UTIL_USER); | ||
213 | ctx->ops->runcntl_write(ctx, runcntl); | ||
214 | } else { | 209 | } else { |
215 | unsigned long privcntl; | 210 | unsigned long privcntl; |
216 | 211 | ||
@@ -219,9 +214,15 @@ static int spu_run_init(struct spu_context *ctx, u32 *npc) | |||
219 | else | 214 | else |
220 | privcntl = SPU_PRIVCNTL_MODE_NORMAL; | 215 | privcntl = SPU_PRIVCNTL_MODE_NORMAL; |
221 | 216 | ||
222 | ctx->ops->npc_write(ctx, *npc); | ||
223 | ctx->ops->privcntl_write(ctx, privcntl); | 217 | ctx->ops->privcntl_write(ctx, privcntl); |
224 | ctx->ops->runcntl_write(ctx, runcntl); | 218 | ctx->ops->npc_write(ctx, *npc); |
219 | } | ||
220 | |||
221 | ctx->ops->runcntl_write(ctx, runcntl); | ||
222 | |||
223 | if (ctx->flags & SPU_CREATE_NOSCHED) { | ||
224 | spuctx_switch_state(ctx, SPU_UTIL_USER); | ||
225 | } else { | ||
225 | 226 | ||
226 | if (ctx->state == SPU_STATE_SAVED) { | 227 | if (ctx->state == SPU_STATE_SAVED) { |
227 | ret = spu_activate(ctx, 0); | 228 | ret = spu_activate(ctx, 0); |
diff --git a/arch/powerpc/platforms/cell/spufs/sched.c b/arch/powerpc/platforms/cell/spufs/sched.c index 2deeeba7eccf..1c1b627ee843 100644 --- a/arch/powerpc/platforms/cell/spufs/sched.c +++ b/arch/powerpc/platforms/cell/spufs/sched.c | |||
@@ -641,8 +641,10 @@ static struct spu *find_victim(struct spu_context *ctx) | |||
641 | 641 | ||
642 | if (tmp && tmp->prio > ctx->prio && | 642 | if (tmp && tmp->prio > ctx->prio && |
643 | !(tmp->flags & SPU_CREATE_NOSCHED) && | 643 | !(tmp->flags & SPU_CREATE_NOSCHED) && |
644 | (!victim || tmp->prio > victim->prio)) | 644 | (!victim || tmp->prio > victim->prio)) { |
645 | victim = spu->ctx; | 645 | victim = spu->ctx; |
646 | get_spu_context(victim); | ||
647 | } | ||
646 | } | 648 | } |
647 | mutex_unlock(&cbe_spu_info[node].list_mutex); | 649 | mutex_unlock(&cbe_spu_info[node].list_mutex); |
648 | 650 | ||
@@ -658,6 +660,7 @@ static struct spu *find_victim(struct spu_context *ctx) | |||
658 | * look at another context or give up after X retries. | 660 | * look at another context or give up after X retries. |
659 | */ | 661 | */ |
660 | if (!mutex_trylock(&victim->state_mutex)) { | 662 | if (!mutex_trylock(&victim->state_mutex)) { |
663 | put_spu_context(victim); | ||
661 | victim = NULL; | 664 | victim = NULL; |
662 | goto restart; | 665 | goto restart; |
663 | } | 666 | } |
@@ -670,6 +673,7 @@ static struct spu *find_victim(struct spu_context *ctx) | |||
670 | * restart the search. | 673 | * restart the search. |
671 | */ | 674 | */ |
672 | mutex_unlock(&victim->state_mutex); | 675 | mutex_unlock(&victim->state_mutex); |
676 | put_spu_context(victim); | ||
673 | victim = NULL; | 677 | victim = NULL; |
674 | goto restart; | 678 | goto restart; |
675 | } | 679 | } |
@@ -687,6 +691,7 @@ static struct spu *find_victim(struct spu_context *ctx) | |||
687 | spu_add_to_rq(victim); | 691 | spu_add_to_rq(victim); |
688 | 692 | ||
689 | mutex_unlock(&victim->state_mutex); | 693 | mutex_unlock(&victim->state_mutex); |
694 | put_spu_context(victim); | ||
690 | 695 | ||
691 | return spu; | 696 | return spu; |
692 | } | 697 | } |
@@ -985,9 +990,11 @@ static int spusched_thread(void *unused) | |||
985 | struct spu_context *ctx = spu->ctx; | 990 | struct spu_context *ctx = spu->ctx; |
986 | 991 | ||
987 | if (ctx) { | 992 | if (ctx) { |
993 | get_spu_context(ctx); | ||
988 | mutex_unlock(mtx); | 994 | mutex_unlock(mtx); |
989 | spusched_tick(ctx); | 995 | spusched_tick(ctx); |
990 | mutex_lock(mtx); | 996 | mutex_lock(mtx); |
997 | put_spu_context(ctx); | ||
991 | } | 998 | } |
992 | } | 999 | } |
993 | mutex_unlock(mtx); | 1000 | mutex_unlock(mtx); |
@@ -1030,7 +1037,7 @@ void spuctx_switch_state(struct spu_context *ctx, | |||
1030 | node = spu->node; | 1037 | node = spu->node; |
1031 | if (old_state == SPU_UTIL_USER) | 1038 | if (old_state == SPU_UTIL_USER) |
1032 | atomic_dec(&cbe_spu_info[node].busy_spus); | 1039 | atomic_dec(&cbe_spu_info[node].busy_spus); |
1033 | if (new_state == SPU_UTIL_USER); | 1040 | if (new_state == SPU_UTIL_USER) |
1034 | atomic_inc(&cbe_spu_info[node].busy_spus); | 1041 | atomic_inc(&cbe_spu_info[node].busy_spus); |
1035 | } | 1042 | } |
1036 | } | 1043 | } |
diff --git a/arch/powerpc/sysdev/bestcomm/gen_bd.c b/arch/powerpc/sysdev/bestcomm/gen_bd.c index a3a134c35b0a..e0a53e3147b2 100644 --- a/arch/powerpc/sysdev/bestcomm/gen_bd.c +++ b/arch/powerpc/sysdev/bestcomm/gen_bd.c | |||
@@ -11,7 +11,6 @@ | |||
11 | * | 11 | * |
12 | */ | 12 | */ |
13 | 13 | ||
14 | #include <linux/version.h> | ||
15 | #include <linux/module.h> | 14 | #include <linux/module.h> |
16 | #include <linux/kernel.h> | 15 | #include <linux/kernel.h> |
17 | #include <linux/string.h> | 16 | #include <linux/string.h> |
diff --git a/arch/s390/defconfig b/arch/s390/defconfig index c5cdb975d590..9b0bc2c9fba0 100644 --- a/arch/s390/defconfig +++ b/arch/s390/defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.26-rc4 | 3 | # Linux kernel version: 2.6.27-rc4 |
4 | # Fri May 30 09:49:33 2008 | 4 | # Thu Aug 21 19:43:29 2008 |
5 | # | 5 | # |
6 | CONFIG_SCHED_MC=y | 6 | CONFIG_SCHED_MC=y |
7 | CONFIG_MMU=y | 7 | CONFIG_MMU=y |
@@ -68,7 +68,6 @@ CONFIG_INITRAMFS_SOURCE="" | |||
68 | CONFIG_SYSCTL=y | 68 | CONFIG_SYSCTL=y |
69 | # CONFIG_EMBEDDED is not set | 69 | # CONFIG_EMBEDDED is not set |
70 | CONFIG_SYSCTL_SYSCALL=y | 70 | CONFIG_SYSCTL_SYSCALL=y |
71 | CONFIG_SYSCTL_SYSCALL_CHECK=y | ||
72 | CONFIG_KALLSYMS=y | 71 | CONFIG_KALLSYMS=y |
73 | # CONFIG_KALLSYMS_ALL is not set | 72 | # CONFIG_KALLSYMS_ALL is not set |
74 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | 73 | # CONFIG_KALLSYMS_EXTRA_PASS is not set |
@@ -93,11 +92,17 @@ CONFIG_SLAB=y | |||
93 | # CONFIG_MARKERS is not set | 92 | # CONFIG_MARKERS is not set |
94 | CONFIG_HAVE_OPROFILE=y | 93 | CONFIG_HAVE_OPROFILE=y |
95 | CONFIG_KPROBES=y | 94 | CONFIG_KPROBES=y |
95 | # CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS is not set | ||
96 | CONFIG_KRETPROBES=y | 96 | CONFIG_KRETPROBES=y |
97 | # CONFIG_HAVE_IOREMAP_PROT is not set | ||
97 | CONFIG_HAVE_KPROBES=y | 98 | CONFIG_HAVE_KPROBES=y |
98 | CONFIG_HAVE_KRETPROBES=y | 99 | CONFIG_HAVE_KRETPROBES=y |
100 | # CONFIG_HAVE_ARCH_TRACEHOOK is not set | ||
99 | # CONFIG_HAVE_DMA_ATTRS is not set | 101 | # CONFIG_HAVE_DMA_ATTRS is not set |
102 | # CONFIG_USE_GENERIC_SMP_HELPERS is not set | ||
103 | # CONFIG_HAVE_CLK is not set | ||
100 | CONFIG_PROC_PAGE_MONITOR=y | 104 | CONFIG_PROC_PAGE_MONITOR=y |
105 | # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set | ||
101 | CONFIG_SLABINFO=y | 106 | CONFIG_SLABINFO=y |
102 | CONFIG_RT_MUTEXES=y | 107 | CONFIG_RT_MUTEXES=y |
103 | # CONFIG_TINY_SHMEM is not set | 108 | # CONFIG_TINY_SHMEM is not set |
@@ -113,6 +118,7 @@ CONFIG_STOP_MACHINE=y | |||
113 | CONFIG_BLOCK=y | 118 | CONFIG_BLOCK=y |
114 | # CONFIG_BLK_DEV_IO_TRACE is not set | 119 | # CONFIG_BLK_DEV_IO_TRACE is not set |
115 | CONFIG_BLK_DEV_BSG=y | 120 | CONFIG_BLK_DEV_BSG=y |
121 | # CONFIG_BLK_DEV_INTEGRITY is not set | ||
116 | CONFIG_BLOCK_COMPAT=y | 122 | CONFIG_BLOCK_COMPAT=y |
117 | 123 | ||
118 | # | 124 | # |
@@ -175,6 +181,8 @@ CONFIG_PREEMPT=y | |||
175 | CONFIG_ARCH_SPARSEMEM_ENABLE=y | 181 | CONFIG_ARCH_SPARSEMEM_ENABLE=y |
176 | CONFIG_ARCH_SPARSEMEM_DEFAULT=y | 182 | CONFIG_ARCH_SPARSEMEM_DEFAULT=y |
177 | CONFIG_ARCH_SELECT_MEMORY_MODEL=y | 183 | CONFIG_ARCH_SELECT_MEMORY_MODEL=y |
184 | CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y | ||
185 | CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y | ||
178 | CONFIG_SELECT_MEMORY_MODEL=y | 186 | CONFIG_SELECT_MEMORY_MODEL=y |
179 | # CONFIG_FLATMEM_MANUAL is not set | 187 | # CONFIG_FLATMEM_MANUAL is not set |
180 | # CONFIG_DISCONTIGMEM_MANUAL is not set | 188 | # CONFIG_DISCONTIGMEM_MANUAL is not set |
@@ -185,8 +193,12 @@ CONFIG_HAVE_MEMORY_PRESENT=y | |||
185 | CONFIG_SPARSEMEM_EXTREME=y | 193 | CONFIG_SPARSEMEM_EXTREME=y |
186 | CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y | 194 | CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y |
187 | CONFIG_SPARSEMEM_VMEMMAP=y | 195 | CONFIG_SPARSEMEM_VMEMMAP=y |
196 | CONFIG_MEMORY_HOTPLUG=y | ||
197 | CONFIG_MEMORY_HOTPLUG_SPARSE=y | ||
198 | CONFIG_MEMORY_HOTREMOVE=y | ||
188 | CONFIG_PAGEFLAGS_EXTENDED=y | 199 | CONFIG_PAGEFLAGS_EXTENDED=y |
189 | CONFIG_SPLIT_PTLOCK_CPUS=4 | 200 | CONFIG_SPLIT_PTLOCK_CPUS=4 |
201 | CONFIG_MIGRATION=y | ||
190 | CONFIG_RESOURCES_64BIT=y | 202 | CONFIG_RESOURCES_64BIT=y |
191 | CONFIG_ZONE_DMA_FLAG=1 | 203 | CONFIG_ZONE_DMA_FLAG=1 |
192 | CONFIG_BOUNCE=y | 204 | CONFIG_BOUNCE=y |
@@ -198,6 +210,7 @@ CONFIG_VIRT_TO_BUS=y | |||
198 | CONFIG_MACHCHK_WARNING=y | 210 | CONFIG_MACHCHK_WARNING=y |
199 | CONFIG_QDIO=y | 211 | CONFIG_QDIO=y |
200 | # CONFIG_QDIO_DEBUG is not set | 212 | # CONFIG_QDIO_DEBUG is not set |
213 | CONFIG_CHSC_SCH=m | ||
201 | 214 | ||
202 | # | 215 | # |
203 | # Misc | 216 | # Misc |
@@ -206,6 +219,7 @@ CONFIG_IPL=y | |||
206 | # CONFIG_IPL_TAPE is not set | 219 | # CONFIG_IPL_TAPE is not set |
207 | CONFIG_IPL_VM=y | 220 | CONFIG_IPL_VM=y |
208 | CONFIG_BINFMT_ELF=y | 221 | CONFIG_BINFMT_ELF=y |
222 | CONFIG_COMPAT_BINFMT_ELF=y | ||
209 | CONFIG_BINFMT_MISC=m | 223 | CONFIG_BINFMT_MISC=m |
210 | CONFIG_FORCE_MAX_ZONEORDER=9 | 224 | CONFIG_FORCE_MAX_ZONEORDER=9 |
211 | # CONFIG_PROCESS_DEBUG is not set | 225 | # CONFIG_PROCESS_DEBUG is not set |
@@ -226,10 +240,6 @@ CONFIG_S390_HYPFS_FS=y | |||
226 | CONFIG_KEXEC=y | 240 | CONFIG_KEXEC=y |
227 | # CONFIG_ZFCPDUMP is not set | 241 | # CONFIG_ZFCPDUMP is not set |
228 | CONFIG_S390_GUEST=y | 242 | CONFIG_S390_GUEST=y |
229 | |||
230 | # | ||
231 | # Networking | ||
232 | # | ||
233 | CONFIG_NET=y | 243 | CONFIG_NET=y |
234 | 244 | ||
235 | # | 245 | # |
@@ -364,7 +374,6 @@ CONFIG_NET_SCH_CBQ=m | |||
364 | # CONFIG_NET_SCH_HTB is not set | 374 | # CONFIG_NET_SCH_HTB is not set |
365 | # CONFIG_NET_SCH_HFSC is not set | 375 | # CONFIG_NET_SCH_HFSC is not set |
366 | CONFIG_NET_SCH_PRIO=m | 376 | CONFIG_NET_SCH_PRIO=m |
367 | CONFIG_NET_SCH_RR=m | ||
368 | CONFIG_NET_SCH_RED=m | 377 | CONFIG_NET_SCH_RED=m |
369 | CONFIG_NET_SCH_SFQ=m | 378 | CONFIG_NET_SCH_SFQ=m |
370 | CONFIG_NET_SCH_TEQL=m | 379 | CONFIG_NET_SCH_TEQL=m |
@@ -430,7 +439,9 @@ CONFIG_CCW=y | |||
430 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | 439 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" |
431 | CONFIG_STANDALONE=y | 440 | CONFIG_STANDALONE=y |
432 | CONFIG_PREVENT_FIRMWARE_BUILD=y | 441 | CONFIG_PREVENT_FIRMWARE_BUILD=y |
433 | # CONFIG_FW_LOADER is not set | 442 | CONFIG_FW_LOADER=y |
443 | # CONFIG_FIRMWARE_IN_KERNEL is not set | ||
444 | CONFIG_EXTRA_FIRMWARE="" | ||
434 | # CONFIG_DEBUG_DRIVER is not set | 445 | # CONFIG_DEBUG_DRIVER is not set |
435 | # CONFIG_DEBUG_DEVRES is not set | 446 | # CONFIG_DEBUG_DEVRES is not set |
436 | CONFIG_SYS_HYPERVISOR=y | 447 | CONFIG_SYS_HYPERVISOR=y |
@@ -507,6 +518,11 @@ CONFIG_SCSI_LOWLEVEL=y | |||
507 | # CONFIG_ISCSI_TCP is not set | 518 | # CONFIG_ISCSI_TCP is not set |
508 | # CONFIG_SCSI_DEBUG is not set | 519 | # CONFIG_SCSI_DEBUG is not set |
509 | CONFIG_ZFCP=y | 520 | CONFIG_ZFCP=y |
521 | CONFIG_SCSI_DH=m | ||
522 | CONFIG_SCSI_DH_RDAC=m | ||
523 | CONFIG_SCSI_DH_HP_SW=m | ||
524 | CONFIG_SCSI_DH_EMC=m | ||
525 | CONFIG_SCSI_DH_ALUA=m | ||
510 | CONFIG_MD=y | 526 | CONFIG_MD=y |
511 | CONFIG_BLK_DEV_MD=y | 527 | CONFIG_BLK_DEV_MD=y |
512 | CONFIG_MD_LINEAR=m | 528 | CONFIG_MD_LINEAR=m |
@@ -522,14 +538,10 @@ CONFIG_DM_CRYPT=y | |||
522 | CONFIG_DM_SNAPSHOT=y | 538 | CONFIG_DM_SNAPSHOT=y |
523 | CONFIG_DM_MIRROR=y | 539 | CONFIG_DM_MIRROR=y |
524 | CONFIG_DM_ZERO=y | 540 | CONFIG_DM_ZERO=y |
525 | CONFIG_DM_MULTIPATH=y | 541 | CONFIG_DM_MULTIPATH=m |
526 | # CONFIG_DM_MULTIPATH_EMC is not set | ||
527 | # CONFIG_DM_MULTIPATH_RDAC is not set | ||
528 | # CONFIG_DM_MULTIPATH_HP is not set | ||
529 | # CONFIG_DM_DELAY is not set | 542 | # CONFIG_DM_DELAY is not set |
530 | # CONFIG_DM_UEVENT is not set | 543 | # CONFIG_DM_UEVENT is not set |
531 | CONFIG_NETDEVICES=y | 544 | CONFIG_NETDEVICES=y |
532 | # CONFIG_NETDEVICES_MULTIQUEUE is not set | ||
533 | # CONFIG_IFB is not set | 545 | # CONFIG_IFB is not set |
534 | CONFIG_DUMMY=m | 546 | CONFIG_DUMMY=m |
535 | CONFIG_BONDING=m | 547 | CONFIG_BONDING=m |
@@ -544,7 +556,6 @@ CONFIG_NET_ETHERNET=y | |||
544 | # CONFIG_IBM_NEW_EMAC_TAH is not set | 556 | # CONFIG_IBM_NEW_EMAC_TAH is not set |
545 | # CONFIG_IBM_NEW_EMAC_EMAC4 is not set | 557 | # CONFIG_IBM_NEW_EMAC_EMAC4 is not set |
546 | CONFIG_NETDEV_1000=y | 558 | CONFIG_NETDEV_1000=y |
547 | # CONFIG_E1000E_ENABLED is not set | ||
548 | CONFIG_NETDEV_10000=y | 559 | CONFIG_NETDEV_10000=y |
549 | # CONFIG_TR is not set | 560 | # CONFIG_TR is not set |
550 | # CONFIG_WAN is not set | 561 | # CONFIG_WAN is not set |
@@ -576,7 +587,10 @@ CONFIG_DEVKMEM=y | |||
576 | CONFIG_UNIX98_PTYS=y | 587 | CONFIG_UNIX98_PTYS=y |
577 | CONFIG_LEGACY_PTYS=y | 588 | CONFIG_LEGACY_PTYS=y |
578 | CONFIG_LEGACY_PTY_COUNT=256 | 589 | CONFIG_LEGACY_PTY_COUNT=256 |
590 | CONFIG_HVC_DRIVER=y | ||
591 | CONFIG_VIRTIO_CONSOLE=y | ||
579 | CONFIG_HW_RANDOM=m | 592 | CONFIG_HW_RANDOM=m |
593 | CONFIG_HW_RANDOM_VIRTIO=m | ||
580 | # CONFIG_R3964 is not set | 594 | # CONFIG_R3964 is not set |
581 | CONFIG_RAW_DRIVER=m | 595 | CONFIG_RAW_DRIVER=m |
582 | CONFIG_MAX_RAW_DEVS=256 | 596 | CONFIG_MAX_RAW_DEVS=256 |
@@ -616,6 +630,7 @@ CONFIG_MONWRITER=m | |||
616 | CONFIG_S390_VMUR=m | 630 | CONFIG_S390_VMUR=m |
617 | # CONFIG_POWER_SUPPLY is not set | 631 | # CONFIG_POWER_SUPPLY is not set |
618 | # CONFIG_THERMAL is not set | 632 | # CONFIG_THERMAL is not set |
633 | # CONFIG_THERMAL_HWMON is not set | ||
619 | # CONFIG_WATCHDOG is not set | 634 | # CONFIG_WATCHDOG is not set |
620 | 635 | ||
621 | # | 636 | # |
@@ -693,6 +708,7 @@ CONFIG_CONFIGFS_FS=m | |||
693 | # CONFIG_CRAMFS is not set | 708 | # CONFIG_CRAMFS is not set |
694 | # CONFIG_VXFS_FS is not set | 709 | # CONFIG_VXFS_FS is not set |
695 | # CONFIG_MINIX_FS is not set | 710 | # CONFIG_MINIX_FS is not set |
711 | # CONFIG_OMFS_FS is not set | ||
696 | # CONFIG_HPFS_FS is not set | 712 | # CONFIG_HPFS_FS is not set |
697 | # CONFIG_QNX4FS_FS is not set | 713 | # CONFIG_QNX4FS_FS is not set |
698 | # CONFIG_ROMFS_FS is not set | 714 | # CONFIG_ROMFS_FS is not set |
@@ -712,7 +728,6 @@ CONFIG_LOCKD_V4=y | |||
712 | CONFIG_EXPORTFS=y | 728 | CONFIG_EXPORTFS=y |
713 | CONFIG_NFS_COMMON=y | 729 | CONFIG_NFS_COMMON=y |
714 | CONFIG_SUNRPC=y | 730 | CONFIG_SUNRPC=y |
715 | # CONFIG_SUNRPC_BIND34 is not set | ||
716 | # CONFIG_RPCSEC_GSS_KRB5 is not set | 731 | # CONFIG_RPCSEC_GSS_KRB5 is not set |
717 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | 732 | # CONFIG_RPCSEC_GSS_SPKM3 is not set |
718 | # CONFIG_SMB_FS is not set | 733 | # CONFIG_SMB_FS is not set |
@@ -780,6 +795,7 @@ CONFIG_DEBUG_BUGVERBOSE=y | |||
780 | # CONFIG_DEBUG_INFO is not set | 795 | # CONFIG_DEBUG_INFO is not set |
781 | # CONFIG_DEBUG_VM is not set | 796 | # CONFIG_DEBUG_VM is not set |
782 | # CONFIG_DEBUG_WRITECOUNT is not set | 797 | # CONFIG_DEBUG_WRITECOUNT is not set |
798 | CONFIG_DEBUG_MEMORY_INIT=y | ||
783 | # CONFIG_DEBUG_LIST is not set | 799 | # CONFIG_DEBUG_LIST is not set |
784 | # CONFIG_DEBUG_SG is not set | 800 | # CONFIG_DEBUG_SG is not set |
785 | # CONFIG_FRAME_POINTER is not set | 801 | # CONFIG_FRAME_POINTER is not set |
@@ -789,6 +805,7 @@ CONFIG_DEBUG_BUGVERBOSE=y | |||
789 | # CONFIG_LKDTM is not set | 805 | # CONFIG_LKDTM is not set |
790 | # CONFIG_FAULT_INJECTION is not set | 806 | # CONFIG_FAULT_INJECTION is not set |
791 | # CONFIG_LATENCYTOP is not set | 807 | # CONFIG_LATENCYTOP is not set |
808 | CONFIG_SYSCTL_SYSCALL_CHECK=y | ||
792 | CONFIG_SAMPLES=y | 809 | CONFIG_SAMPLES=y |
793 | # CONFIG_SAMPLE_KOBJECT is not set | 810 | # CONFIG_SAMPLE_KOBJECT is not set |
794 | # CONFIG_SAMPLE_KPROBES is not set | 811 | # CONFIG_SAMPLE_KPROBES is not set |
@@ -847,6 +864,10 @@ CONFIG_CRYPTO_HMAC=m | |||
847 | # CONFIG_CRYPTO_MD4 is not set | 864 | # CONFIG_CRYPTO_MD4 is not set |
848 | CONFIG_CRYPTO_MD5=m | 865 | CONFIG_CRYPTO_MD5=m |
849 | # CONFIG_CRYPTO_MICHAEL_MIC is not set | 866 | # CONFIG_CRYPTO_MICHAEL_MIC is not set |
867 | CONFIG_CRYPTO_RMD128=m | ||
868 | CONFIG_CRYPTO_RMD160=m | ||
869 | CONFIG_CRYPTO_RMD256=m | ||
870 | CONFIG_CRYPTO_RMD320=m | ||
850 | CONFIG_CRYPTO_SHA1=m | 871 | CONFIG_CRYPTO_SHA1=m |
851 | # CONFIG_CRYPTO_SHA256 is not set | 872 | # CONFIG_CRYPTO_SHA256 is not set |
852 | # CONFIG_CRYPTO_SHA512 is not set | 873 | # CONFIG_CRYPTO_SHA512 is not set |
@@ -895,6 +916,7 @@ CONFIG_BITREVERSE=m | |||
895 | # CONFIG_GENERIC_FIND_NEXT_BIT is not set | 916 | # CONFIG_GENERIC_FIND_NEXT_BIT is not set |
896 | # CONFIG_CRC_CCITT is not set | 917 | # CONFIG_CRC_CCITT is not set |
897 | # CONFIG_CRC16 is not set | 918 | # CONFIG_CRC16 is not set |
919 | CONFIG_CRC_T10DIF=y | ||
898 | # CONFIG_CRC_ITU_T is not set | 920 | # CONFIG_CRC_ITU_T is not set |
899 | CONFIG_CRC32=m | 921 | CONFIG_CRC32=m |
900 | CONFIG_CRC7=m | 922 | CONFIG_CRC7=m |
diff --git a/arch/s390/include/asm/bitops.h b/arch/s390/include/asm/bitops.h index b4eb24ab5af9..8e9243ae0c19 100644 --- a/arch/s390/include/asm/bitops.h +++ b/arch/s390/include/asm/bitops.h | |||
@@ -709,7 +709,7 @@ static inline int find_next_zero_bit (const unsigned long * addr, | |||
709 | * __ffz_word returns __BITOPS_WORDSIZE | 709 | * __ffz_word returns __BITOPS_WORDSIZE |
710 | * if no zero bit is present in the word. | 710 | * if no zero bit is present in the word. |
711 | */ | 711 | */ |
712 | set = __ffz_word(0, *p >> bit) + bit; | 712 | set = __ffz_word(bit, *p >> bit); |
713 | if (set >= size) | 713 | if (set >= size) |
714 | return size + offset; | 714 | return size + offset; |
715 | if (set < __BITOPS_WORDSIZE) | 715 | if (set < __BITOPS_WORDSIZE) |
@@ -824,7 +824,7 @@ static inline int ext2_find_next_zero_bit(void *vaddr, unsigned long size, | |||
824 | * s390 version of ffz returns __BITOPS_WORDSIZE | 824 | * s390 version of ffz returns __BITOPS_WORDSIZE |
825 | * if no zero bit is present in the word. | 825 | * if no zero bit is present in the word. |
826 | */ | 826 | */ |
827 | set = ffz(__load_ulong_le(p, 0) >> bit) + bit; | 827 | set = __ffz_word(bit, __load_ulong_le(p, 0) >> bit); |
828 | if (set >= size) | 828 | if (set >= size) |
829 | return size + offset; | 829 | return size + offset; |
830 | if (set < __BITOPS_WORDSIZE) | 830 | if (set < __BITOPS_WORDSIZE) |
@@ -865,7 +865,7 @@ static inline int ext2_find_next_bit(void *vaddr, unsigned long size, | |||
865 | * s390 version of ffz returns __BITOPS_WORDSIZE | 865 | * s390 version of ffz returns __BITOPS_WORDSIZE |
866 | * if no zero bit is present in the word. | 866 | * if no zero bit is present in the word. |
867 | */ | 867 | */ |
868 | set = ffs(__load_ulong_le(p, 0) >> bit) + bit; | 868 | set = __ffs_word(0, __load_ulong_le(p, 0) & (~0UL << bit)); |
869 | if (set >= size) | 869 | if (set >= size) |
870 | return size + offset; | 870 | return size + offset; |
871 | if (set < __BITOPS_WORDSIZE) | 871 | if (set < __BITOPS_WORDSIZE) |
diff --git a/arch/s390/kernel/process.c b/arch/s390/kernel/process.c index 9839767d0842..3e2c05cb6a87 100644 --- a/arch/s390/kernel/process.c +++ b/arch/s390/kernel/process.c | |||
@@ -75,7 +75,9 @@ unsigned long thread_saved_pc(struct task_struct *tsk) | |||
75 | return sf->gprs[8]; | 75 | return sf->gprs[8]; |
76 | } | 76 | } |
77 | 77 | ||
78 | DEFINE_PER_CPU(struct s390_idle_data, s390_idle); | 78 | DEFINE_PER_CPU(struct s390_idle_data, s390_idle) = { |
79 | .lock = __SPIN_LOCK_UNLOCKED(s390_idle.lock) | ||
80 | }; | ||
79 | 81 | ||
80 | static int s390_idle_enter(void) | 82 | static int s390_idle_enter(void) |
81 | { | 83 | { |
diff --git a/arch/s390/kernel/smp.c b/arch/s390/kernel/smp.c index b795b3e24afd..00b9b4dec5eb 100644 --- a/arch/s390/kernel/smp.c +++ b/arch/s390/kernel/smp.c | |||
@@ -610,7 +610,6 @@ static void __init smp_create_idle(unsigned int cpu) | |||
610 | if (IS_ERR(p)) | 610 | if (IS_ERR(p)) |
611 | panic("failed fork for CPU %u: %li", cpu, PTR_ERR(p)); | 611 | panic("failed fork for CPU %u: %li", cpu, PTR_ERR(p)); |
612 | current_set[cpu] = p; | 612 | current_set[cpu] = p; |
613 | spin_lock_init(&(&per_cpu(s390_idle, cpu))->lock); | ||
614 | } | 613 | } |
615 | 614 | ||
616 | static int __cpuinit smp_alloc_lowcore(int cpu) | 615 | static int __cpuinit smp_alloc_lowcore(int cpu) |
@@ -845,7 +844,6 @@ void __init smp_prepare_boot_cpu(void) | |||
845 | current_set[0] = current; | 844 | current_set[0] = current; |
846 | smp_cpu_state[0] = CPU_STATE_CONFIGURED; | 845 | smp_cpu_state[0] = CPU_STATE_CONFIGURED; |
847 | smp_cpu_polarization[0] = POLARIZATION_UNKNWN; | 846 | smp_cpu_polarization[0] = POLARIZATION_UNKNWN; |
848 | spin_lock_init(&(&__get_cpu_var(s390_idle))->lock); | ||
849 | } | 847 | } |
850 | 848 | ||
851 | void __init smp_cpus_done(unsigned int max_cpus) | 849 | void __init smp_cpus_done(unsigned int max_cpus) |
diff --git a/arch/sh/boards/board-ap325rxa.c b/arch/sh/boards/board-ap325rxa.c index 025d4fe55a58..fd1612590bf4 100644 --- a/arch/sh/boards/board-ap325rxa.c +++ b/arch/sh/boards/board-ap325rxa.c | |||
@@ -140,6 +140,10 @@ static struct sh_mobile_lcdc_info lcdc_info = { | |||
140 | .vsync_len = 1, | 140 | .vsync_len = 1, |
141 | .sync = 0, /* hsync and vsync are active low */ | 141 | .sync = 0, /* hsync and vsync are active low */ |
142 | }, | 142 | }, |
143 | .lcd_size_cfg = { /* 7.0 inch */ | ||
144 | .width = 152, | ||
145 | .height = 91, | ||
146 | }, | ||
143 | .board_cfg = { | 147 | .board_cfg = { |
144 | .display_on = ap320_wvga_power_on, | 148 | .display_on = ap320_wvga_power_on, |
145 | }, | 149 | }, |
diff --git a/arch/sh/boards/mach-migor/setup.c b/arch/sh/boards/mach-migor/setup.c index e499ee384d58..714dce91cc9b 100644 --- a/arch/sh/boards/mach-migor/setup.c +++ b/arch/sh/boards/mach-migor/setup.c | |||
@@ -224,6 +224,10 @@ static struct sh_mobile_lcdc_info sh_mobile_lcdc_info = { | |||
224 | .vsync_len = 2, | 224 | .vsync_len = 2, |
225 | .sync = 0, | 225 | .sync = 0, |
226 | }, | 226 | }, |
227 | .lcd_size_cfg = { /* 7.0 inch */ | ||
228 | .width = 152, | ||
229 | .height = 91, | ||
230 | }, | ||
227 | } | 231 | } |
228 | #endif | 232 | #endif |
229 | #ifdef CONFIG_SH_MIGOR_QVGA | 233 | #ifdef CONFIG_SH_MIGOR_QVGA |
@@ -245,6 +249,10 @@ static struct sh_mobile_lcdc_info sh_mobile_lcdc_info = { | |||
245 | .vsync_len = 2, | 249 | .vsync_len = 2, |
246 | .sync = FB_SYNC_HOR_HIGH_ACT, | 250 | .sync = FB_SYNC_HOR_HIGH_ACT, |
247 | }, | 251 | }, |
252 | .lcd_size_cfg = { /* 2.4 inch */ | ||
253 | .width = 49, | ||
254 | .height = 37, | ||
255 | }, | ||
248 | .board_cfg = { | 256 | .board_cfg = { |
249 | .setup_sys = migor_lcd_qvga_setup, | 257 | .setup_sys = migor_lcd_qvga_setup, |
250 | }, | 258 | }, |
diff --git a/arch/sh/boards/mach-sh7763rdp/setup.c b/arch/sh/boards/mach-sh7763rdp/setup.c index 925f16af7121..23850da05e3c 100644 --- a/arch/sh/boards/mach-sh7763rdp/setup.c +++ b/arch/sh/boards/mach-sh7763rdp/setup.c | |||
@@ -15,8 +15,11 @@ | |||
15 | #include <linux/interrupt.h> | 15 | #include <linux/interrupt.h> |
16 | #include <linux/input.h> | 16 | #include <linux/input.h> |
17 | #include <linux/mtd/physmap.h> | 17 | #include <linux/mtd/physmap.h> |
18 | #include <asm/io.h> | 18 | #include <linux/fb.h> |
19 | #include <linux/io.h> | ||
19 | #include <asm/sh7763rdp.h> | 20 | #include <asm/sh7763rdp.h> |
21 | #include <asm/sh_eth.h> | ||
22 | #include <asm/sh7760fb.h> | ||
20 | 23 | ||
21 | /* NOR Flash */ | 24 | /* NOR Flash */ |
22 | static struct mtd_partition sh7763rdp_nor_flash_partitions[] = { | 25 | static struct mtd_partition sh7763rdp_nor_flash_partitions[] = { |
@@ -60,8 +63,85 @@ static struct platform_device sh7763rdp_nor_flash_device = { | |||
60 | }, | 63 | }, |
61 | }; | 64 | }; |
62 | 65 | ||
66 | /* SH-Ether */ | ||
67 | static struct resource sh_eth_resources[] = { | ||
68 | { | ||
69 | .start = 0xFEE00800, /* use eth1 */ | ||
70 | .end = 0xFEE00F7C - 1, | ||
71 | .flags = IORESOURCE_MEM, | ||
72 | }, { | ||
73 | .start = 58, /* irq number */ | ||
74 | .end = 58, | ||
75 | .flags = IORESOURCE_IRQ, | ||
76 | }, | ||
77 | }; | ||
78 | |||
79 | static struct sh_eth_plat_data sh7763_eth_pdata = { | ||
80 | .phy = 1, | ||
81 | .edmac_endian = EDMAC_LITTLE_ENDIAN, | ||
82 | }; | ||
83 | |||
84 | static struct platform_device sh7763rdp_eth_device = { | ||
85 | .name = "sh-eth", | ||
86 | .resource = sh_eth_resources, | ||
87 | .num_resources = ARRAY_SIZE(sh_eth_resources), | ||
88 | .dev = { | ||
89 | .platform_data = &sh7763_eth_pdata, | ||
90 | }, | ||
91 | }; | ||
92 | |||
93 | /* SH7763 LCDC */ | ||
94 | static struct resource sh7763rdp_fb_resources[] = { | ||
95 | { | ||
96 | .start = 0xFFE80000, | ||
97 | .end = 0xFFE80442 - 1, | ||
98 | .flags = IORESOURCE_MEM, | ||
99 | }, | ||
100 | }; | ||
101 | |||
102 | static struct fb_videomode sh7763fb_videomode = { | ||
103 | .refresh = 60, | ||
104 | .name = "VGA Monitor", | ||
105 | .xres = 640, | ||
106 | .yres = 480, | ||
107 | .pixclock = 10000, | ||
108 | .left_margin = 80, | ||
109 | .right_margin = 24, | ||
110 | .upper_margin = 30, | ||
111 | .lower_margin = 1, | ||
112 | .hsync_len = 96, | ||
113 | .vsync_len = 1, | ||
114 | .sync = 0, | ||
115 | .vmode = FB_VMODE_NONINTERLACED, | ||
116 | .flag = FBINFO_FLAG_DEFAULT, | ||
117 | }; | ||
118 | |||
119 | static struct sh7760fb_platdata sh7763fb_def_pdata = { | ||
120 | .def_mode = &sh7763fb_videomode, | ||
121 | .ldmtr = (LDMTR_TFT_COLOR_16|LDMTR_MCNT), | ||
122 | .lddfr = LDDFR_16BPP_RGB565, | ||
123 | .ldpmmr = 0x0000, | ||
124 | .ldpspr = 0xFFFF, | ||
125 | .ldaclnr = 0x0001, | ||
126 | .ldickr = 0x1102, | ||
127 | .rotate = 0, | ||
128 | .novsync = 0, | ||
129 | .blank = NULL, | ||
130 | }; | ||
131 | |||
132 | static struct platform_device sh7763rdp_fb_device = { | ||
133 | .name = "sh7760-lcdc", | ||
134 | .resource = sh7763rdp_fb_resources, | ||
135 | .num_resources = ARRAY_SIZE(sh7763rdp_fb_resources), | ||
136 | .dev = { | ||
137 | .platform_data = &sh7763fb_def_pdata, | ||
138 | }, | ||
139 | }; | ||
140 | |||
63 | static struct platform_device *sh7763rdp_devices[] __initdata = { | 141 | static struct platform_device *sh7763rdp_devices[] __initdata = { |
64 | &sh7763rdp_nor_flash_device, | 142 | &sh7763rdp_nor_flash_device, |
143 | &sh7763rdp_eth_device, | ||
144 | &sh7763rdp_fb_device, | ||
65 | }; | 145 | }; |
66 | 146 | ||
67 | static int __init sh7763rdp_devices_setup(void) | 147 | static int __init sh7763rdp_devices_setup(void) |
@@ -69,7 +149,7 @@ static int __init sh7763rdp_devices_setup(void) | |||
69 | return platform_add_devices(sh7763rdp_devices, | 149 | return platform_add_devices(sh7763rdp_devices, |
70 | ARRAY_SIZE(sh7763rdp_devices)); | 150 | ARRAY_SIZE(sh7763rdp_devices)); |
71 | } | 151 | } |
72 | __initcall(sh7763rdp_devices_setup); | 152 | device_initcall(sh7763rdp_devices_setup); |
73 | 153 | ||
74 | static void __init sh7763rdp_setup(char **cmdline_p) | 154 | static void __init sh7763rdp_setup(char **cmdline_p) |
75 | { | 155 | { |
diff --git a/arch/sh/boards/mach-x3proto/setup.c b/arch/sh/boards/mach-x3proto/setup.c index abc5b6d418fe..a70d23b21788 100644 --- a/arch/sh/boards/mach-x3proto/setup.c +++ b/arch/sh/boards/mach-x3proto/setup.c | |||
@@ -3,7 +3,7 @@ | |||
3 | * | 3 | * |
4 | * Renesas SH-X3 Prototype Board Support. | 4 | * Renesas SH-X3 Prototype Board Support. |
5 | * | 5 | * |
6 | * Copyright (C) 2007 Paul Mundt | 6 | * Copyright (C) 2007 - 2008 Paul Mundt |
7 | * | 7 | * |
8 | * This file is subject to the terms and conditions of the GNU General Public | 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 | 9 | * License. See the file "COPYING" in the main directory of this archive |
@@ -13,6 +13,7 @@ | |||
13 | #include <linux/platform_device.h> | 13 | #include <linux/platform_device.h> |
14 | #include <linux/kernel.h> | 14 | #include <linux/kernel.h> |
15 | #include <linux/io.h> | 15 | #include <linux/io.h> |
16 | #include <linux/smc91x.h> | ||
16 | #include <asm/ilsel.h> | 17 | #include <asm/ilsel.h> |
17 | 18 | ||
18 | static struct resource heartbeat_resources[] = { | 19 | static struct resource heartbeat_resources[] = { |
@@ -30,6 +31,10 @@ static struct platform_device heartbeat_device = { | |||
30 | .resource = heartbeat_resources, | 31 | .resource = heartbeat_resources, |
31 | }; | 32 | }; |
32 | 33 | ||
34 | static struct smc91x_platdata smc91x_info = { | ||
35 | .flags = SMC91X_USE_16BIT | SMC91X_NOWAIT, | ||
36 | }; | ||
37 | |||
33 | static struct resource smc91x_resources[] = { | 38 | static struct resource smc91x_resources[] = { |
34 | [0] = { | 39 | [0] = { |
35 | .start = 0x18000300, | 40 | .start = 0x18000300, |
@@ -47,6 +52,9 @@ static struct platform_device smc91x_device = { | |||
47 | .id = -1, | 52 | .id = -1, |
48 | .resource = smc91x_resources, | 53 | .resource = smc91x_resources, |
49 | .num_resources = ARRAY_SIZE(smc91x_resources), | 54 | .num_resources = ARRAY_SIZE(smc91x_resources), |
55 | .dev = { | ||
56 | .platform_data = &smc91x_info, | ||
57 | }, | ||
50 | }; | 58 | }; |
51 | 59 | ||
52 | static struct resource r8a66597_usb_host_resources[] = { | 60 | static struct resource r8a66597_usb_host_resources[] = { |
diff --git a/arch/sh/configs/sh7763rdp_defconfig b/arch/sh/configs/sh7763rdp_defconfig index 83f3fe5db3e5..baf830c4a7e4 100644 --- a/arch/sh/configs/sh7763rdp_defconfig +++ b/arch/sh/configs/sh7763rdp_defconfig | |||
@@ -1,15 +1,17 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.26-rc4 | 3 | # Linux kernel version: 2.6.27-rc2 |
4 | # Fri Jun 6 12:20:17 2008 | 4 | # Fri Aug 8 13:44:20 2008 |
5 | # | 5 | # |
6 | CONFIG_SUPERH=y | 6 | CONFIG_SUPERH=y |
7 | CONFIG_SUPERH32=y | 7 | CONFIG_SUPERH32=y |
8 | CONFIG_ARCH_DEFCONFIG="arch/sh/configs/shx3_defconfig" | ||
8 | CONFIG_RWSEM_GENERIC_SPINLOCK=y | 9 | CONFIG_RWSEM_GENERIC_SPINLOCK=y |
9 | CONFIG_GENERIC_BUG=y | 10 | CONFIG_GENERIC_BUG=y |
10 | CONFIG_GENERIC_FIND_NEXT_BIT=y | 11 | CONFIG_GENERIC_FIND_NEXT_BIT=y |
11 | CONFIG_GENERIC_HWEIGHT=y | 12 | CONFIG_GENERIC_HWEIGHT=y |
12 | CONFIG_GENERIC_HARDIRQS=y | 13 | CONFIG_GENERIC_HARDIRQS=y |
14 | CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y | ||
13 | CONFIG_GENERIC_IRQ_PROBE=y | 15 | CONFIG_GENERIC_IRQ_PROBE=y |
14 | CONFIG_GENERIC_CALIBRATE_DELAY=y | 16 | CONFIG_GENERIC_CALIBRATE_DELAY=y |
15 | CONFIG_GENERIC_TIME=y | 17 | CONFIG_GENERIC_TIME=y |
@@ -19,7 +21,6 @@ CONFIG_LOCKDEP_SUPPORT=y | |||
19 | # CONFIG_ARCH_HAS_ILOG2_U32 is not set | 21 | # CONFIG_ARCH_HAS_ILOG2_U32 is not set |
20 | # CONFIG_ARCH_HAS_ILOG2_U64 is not set | 22 | # CONFIG_ARCH_HAS_ILOG2_U64 is not set |
21 | CONFIG_ARCH_NO_VIRT_TO_BUS=y | 23 | CONFIG_ARCH_NO_VIRT_TO_BUS=y |
22 | CONFIG_ARCH_SUPPORTS_AOUT=y | ||
23 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | 24 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" |
24 | 25 | ||
25 | # | 26 | # |
@@ -83,10 +84,16 @@ CONFIG_PROFILING=y | |||
83 | # CONFIG_MARKERS is not set | 84 | # CONFIG_MARKERS is not set |
84 | CONFIG_OPROFILE=y | 85 | CONFIG_OPROFILE=y |
85 | CONFIG_HAVE_OPROFILE=y | 86 | CONFIG_HAVE_OPROFILE=y |
87 | # CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS is not set | ||
88 | # CONFIG_HAVE_IOREMAP_PROT is not set | ||
86 | # CONFIG_HAVE_KPROBES is not set | 89 | # CONFIG_HAVE_KPROBES is not set |
87 | # CONFIG_HAVE_KRETPROBES is not set | 90 | # CONFIG_HAVE_KRETPROBES is not set |
91 | # CONFIG_HAVE_ARCH_TRACEHOOK is not set | ||
88 | # CONFIG_HAVE_DMA_ATTRS is not set | 92 | # CONFIG_HAVE_DMA_ATTRS is not set |
93 | # CONFIG_USE_GENERIC_SMP_HELPERS is not set | ||
94 | CONFIG_HAVE_CLK=y | ||
89 | CONFIG_PROC_PAGE_MONITOR=y | 95 | CONFIG_PROC_PAGE_MONITOR=y |
96 | CONFIG_HAVE_GENERIC_DMA_COHERENT=y | ||
90 | CONFIG_SLABINFO=y | 97 | CONFIG_SLABINFO=y |
91 | CONFIG_RT_MUTEXES=y | 98 | CONFIG_RT_MUTEXES=y |
92 | # CONFIG_TINY_SHMEM is not set | 99 | # CONFIG_TINY_SHMEM is not set |
@@ -96,12 +103,13 @@ CONFIG_MODULES=y | |||
96 | # CONFIG_MODULE_UNLOAD is not set | 103 | # CONFIG_MODULE_UNLOAD is not set |
97 | # CONFIG_MODVERSIONS is not set | 104 | # CONFIG_MODVERSIONS is not set |
98 | # CONFIG_MODULE_SRCVERSION_ALL is not set | 105 | # CONFIG_MODULE_SRCVERSION_ALL is not set |
99 | # CONFIG_KMOD is not set | 106 | CONFIG_KMOD=y |
100 | CONFIG_BLOCK=y | 107 | CONFIG_BLOCK=y |
101 | # CONFIG_LBD is not set | 108 | # CONFIG_LBD is not set |
102 | # CONFIG_BLK_DEV_IO_TRACE is not set | 109 | # CONFIG_BLK_DEV_IO_TRACE is not set |
103 | # CONFIG_LSF is not set | 110 | # CONFIG_LSF is not set |
104 | # CONFIG_BLK_DEV_BSG is not set | 111 | # CONFIG_BLK_DEV_BSG is not set |
112 | # CONFIG_BLK_DEV_INTEGRITY is not set | ||
105 | 113 | ||
106 | # | 114 | # |
107 | # IO Schedulers | 115 | # IO Schedulers |
@@ -177,6 +185,7 @@ CONFIG_PAGE_SIZE_4KB=y | |||
177 | # CONFIG_PAGE_SIZE_8KB is not set | 185 | # CONFIG_PAGE_SIZE_8KB is not set |
178 | # CONFIG_PAGE_SIZE_16KB is not set | 186 | # CONFIG_PAGE_SIZE_16KB is not set |
179 | # CONFIG_PAGE_SIZE_64KB is not set | 187 | # CONFIG_PAGE_SIZE_64KB is not set |
188 | CONFIG_ENTRY_OFFSET=0x00001000 | ||
180 | CONFIG_SELECT_MEMORY_MODEL=y | 189 | CONFIG_SELECT_MEMORY_MODEL=y |
181 | # CONFIG_FLATMEM_MANUAL is not set | 190 | # CONFIG_FLATMEM_MANUAL is not set |
182 | # CONFIG_DISCONTIGMEM_MANUAL is not set | 191 | # CONFIG_DISCONTIGMEM_MANUAL is not set |
@@ -258,6 +267,7 @@ CONFIG_HZ=250 | |||
258 | # CONFIG_SCHED_HRTICK is not set | 267 | # CONFIG_SCHED_HRTICK is not set |
259 | # CONFIG_KEXEC is not set | 268 | # CONFIG_KEXEC is not set |
260 | # CONFIG_CRASH_DUMP is not set | 269 | # CONFIG_CRASH_DUMP is not set |
270 | CONFIG_SECCOMP=y | ||
261 | CONFIG_PREEMPT_NONE=y | 271 | CONFIG_PREEMPT_NONE=y |
262 | # CONFIG_PREEMPT_VOLUNTARY is not set | 272 | # CONFIG_PREEMPT_VOLUNTARY is not set |
263 | # CONFIG_PREEMPT is not set | 273 | # CONFIG_PREEMPT is not set |
@@ -282,10 +292,6 @@ CONFIG_CMDLINE="console=ttySC2,115200 root=/dev/sda1 rootdelay=10" | |||
282 | # | 292 | # |
283 | CONFIG_BINFMT_ELF=y | 293 | CONFIG_BINFMT_ELF=y |
284 | # CONFIG_BINFMT_MISC is not set | 294 | # CONFIG_BINFMT_MISC is not set |
285 | |||
286 | # | ||
287 | # Networking | ||
288 | # | ||
289 | CONFIG_NET=y | 295 | CONFIG_NET=y |
290 | 296 | ||
291 | # | 297 | # |
@@ -361,6 +367,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic" | |||
361 | # | 367 | # |
362 | # CONFIG_CFG80211 is not set | 368 | # CONFIG_CFG80211 is not set |
363 | CONFIG_WIRELESS_EXT=y | 369 | CONFIG_WIRELESS_EXT=y |
370 | CONFIG_WIRELESS_EXT_SYSFS=y | ||
364 | # CONFIG_MAC80211 is not set | 371 | # CONFIG_MAC80211 is not set |
365 | # CONFIG_IEEE80211 is not set | 372 | # CONFIG_IEEE80211 is not set |
366 | # CONFIG_RFKILL is not set | 373 | # CONFIG_RFKILL is not set |
@@ -377,6 +384,8 @@ CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | |||
377 | CONFIG_STANDALONE=y | 384 | CONFIG_STANDALONE=y |
378 | CONFIG_PREVENT_FIRMWARE_BUILD=y | 385 | CONFIG_PREVENT_FIRMWARE_BUILD=y |
379 | CONFIG_FW_LOADER=y | 386 | CONFIG_FW_LOADER=y |
387 | CONFIG_FIRMWARE_IN_KERNEL=y | ||
388 | CONFIG_EXTRA_FIRMWARE="" | ||
380 | # CONFIG_SYS_HYPERVISOR is not set | 389 | # CONFIG_SYS_HYPERVISOR is not set |
381 | # CONFIG_CONNECTOR is not set | 390 | # CONFIG_CONNECTOR is not set |
382 | CONFIG_MTD=y | 391 | CONFIG_MTD=y |
@@ -471,6 +480,7 @@ CONFIG_BLK_DEV=y | |||
471 | # CONFIG_BLK_DEV_RAM is not set | 480 | # CONFIG_BLK_DEV_RAM is not set |
472 | # CONFIG_CDROM_PKTCDVD is not set | 481 | # CONFIG_CDROM_PKTCDVD is not set |
473 | # CONFIG_ATA_OVER_ETH is not set | 482 | # CONFIG_ATA_OVER_ETH is not set |
483 | # CONFIG_BLK_DEV_HD is not set | ||
474 | # CONFIG_MISC_DEVICES is not set | 484 | # CONFIG_MISC_DEVICES is not set |
475 | CONFIG_HAVE_IDE=y | 485 | CONFIG_HAVE_IDE=y |
476 | # CONFIG_IDE is not set | 486 | # CONFIG_IDE is not set |
@@ -515,10 +525,10 @@ CONFIG_SCSI_WAIT_SCAN=m | |||
515 | CONFIG_SCSI_LOWLEVEL=y | 525 | CONFIG_SCSI_LOWLEVEL=y |
516 | # CONFIG_ISCSI_TCP is not set | 526 | # CONFIG_ISCSI_TCP is not set |
517 | # CONFIG_SCSI_DEBUG is not set | 527 | # CONFIG_SCSI_DEBUG is not set |
528 | # CONFIG_SCSI_DH is not set | ||
518 | # CONFIG_ATA is not set | 529 | # CONFIG_ATA is not set |
519 | # CONFIG_MD is not set | 530 | # CONFIG_MD is not set |
520 | CONFIG_NETDEVICES=y | 531 | CONFIG_NETDEVICES=y |
521 | # CONFIG_NETDEVICES_MULTIQUEUE is not set | ||
522 | # CONFIG_DUMMY is not set | 532 | # CONFIG_DUMMY is not set |
523 | # CONFIG_BONDING is not set | 533 | # CONFIG_BONDING is not set |
524 | # CONFIG_MACVLAN is not set | 534 | # CONFIG_MACVLAN is not set |
@@ -546,7 +556,9 @@ CONFIG_NET_ETHERNET=y | |||
546 | CONFIG_MII=y | 556 | CONFIG_MII=y |
547 | # CONFIG_AX88796 is not set | 557 | # CONFIG_AX88796 is not set |
548 | # CONFIG_STNIC is not set | 558 | # CONFIG_STNIC is not set |
559 | CONFIG_SH_ETH=y | ||
549 | # CONFIG_SMC91X is not set | 560 | # CONFIG_SMC91X is not set |
561 | # CONFIG_SMC911X is not set | ||
550 | # CONFIG_IBM_NEW_EMAC_ZMII is not set | 562 | # CONFIG_IBM_NEW_EMAC_ZMII is not set |
551 | # CONFIG_IBM_NEW_EMAC_RGMII is not set | 563 | # CONFIG_IBM_NEW_EMAC_RGMII is not set |
552 | # CONFIG_IBM_NEW_EMAC_TAH is not set | 564 | # CONFIG_IBM_NEW_EMAC_TAH is not set |
@@ -613,7 +625,11 @@ CONFIG_INPUT=y | |||
613 | # | 625 | # |
614 | # Character devices | 626 | # Character devices |
615 | # | 627 | # |
616 | # CONFIG_VT is not set | 628 | CONFIG_VT=y |
629 | CONFIG_CONSOLE_TRANSLATIONS=y | ||
630 | CONFIG_VT_CONSOLE=y | ||
631 | CONFIG_HW_CONSOLE=y | ||
632 | # CONFIG_VT_HW_CONSOLE_BINDING is not set | ||
617 | CONFIG_DEVKMEM=y | 633 | CONFIG_DEVKMEM=y |
618 | # CONFIG_SERIAL_NONSTANDARD is not set | 634 | # CONFIG_SERIAL_NONSTANDARD is not set |
619 | 635 | ||
@@ -644,6 +660,7 @@ CONFIG_HW_RANDOM=y | |||
644 | # CONFIG_POWER_SUPPLY is not set | 660 | # CONFIG_POWER_SUPPLY is not set |
645 | # CONFIG_HWMON is not set | 661 | # CONFIG_HWMON is not set |
646 | # CONFIG_THERMAL is not set | 662 | # CONFIG_THERMAL is not set |
663 | # CONFIG_THERMAL_HWMON is not set | ||
647 | # CONFIG_WATCHDOG is not set | 664 | # CONFIG_WATCHDOG is not set |
648 | 665 | ||
649 | # | 666 | # |
@@ -655,6 +672,7 @@ CONFIG_SSB_POSSIBLE=y | |||
655 | # | 672 | # |
656 | # Multifunction device drivers | 673 | # Multifunction device drivers |
657 | # | 674 | # |
675 | # CONFIG_MFD_CORE is not set | ||
658 | # CONFIG_MFD_SM501 is not set | 676 | # CONFIG_MFD_SM501 is not set |
659 | # CONFIG_HTC_PASIC3 is not set | 677 | # CONFIG_HTC_PASIC3 is not set |
660 | 678 | ||
@@ -679,7 +697,34 @@ CONFIG_SSB_POSSIBLE=y | |||
679 | # | 697 | # |
680 | # CONFIG_VGASTATE is not set | 698 | # CONFIG_VGASTATE is not set |
681 | # CONFIG_VIDEO_OUTPUT_CONTROL is not set | 699 | # CONFIG_VIDEO_OUTPUT_CONTROL is not set |
682 | # CONFIG_FB is not set | 700 | CONFIG_FB=y |
701 | # CONFIG_FIRMWARE_EDID is not set | ||
702 | # CONFIG_FB_DDC is not set | ||
703 | CONFIG_FB_CFB_FILLRECT=y | ||
704 | CONFIG_FB_CFB_COPYAREA=y | ||
705 | CONFIG_FB_CFB_IMAGEBLIT=y | ||
706 | # CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set | ||
707 | # CONFIG_FB_SYS_FILLRECT is not set | ||
708 | # CONFIG_FB_SYS_COPYAREA is not set | ||
709 | # CONFIG_FB_SYS_IMAGEBLIT is not set | ||
710 | CONFIG_FB_FOREIGN_ENDIAN=y | ||
711 | CONFIG_FB_BOTH_ENDIAN=y | ||
712 | # CONFIG_FB_BIG_ENDIAN is not set | ||
713 | # CONFIG_FB_LITTLE_ENDIAN is not set | ||
714 | # CONFIG_FB_SYS_FOPS is not set | ||
715 | # CONFIG_FB_SVGALIB is not set | ||
716 | # CONFIG_FB_MACMODES is not set | ||
717 | # CONFIG_FB_BACKLIGHT is not set | ||
718 | # CONFIG_FB_MODE_HELPERS is not set | ||
719 | # CONFIG_FB_TILEBLITTING is not set | ||
720 | |||
721 | # | ||
722 | # Frame buffer hardware drivers | ||
723 | # | ||
724 | # CONFIG_FB_S1D13XXX is not set | ||
725 | # CONFIG_FB_SH_MOBILE_LCDC is not set | ||
726 | CONFIG_FB_SH7760=y | ||
727 | # CONFIG_FB_VIRTUAL is not set | ||
683 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set | 728 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set |
684 | 729 | ||
685 | # | 730 | # |
@@ -688,8 +733,22 @@ CONFIG_SSB_POSSIBLE=y | |||
688 | # CONFIG_DISPLAY_SUPPORT is not set | 733 | # CONFIG_DISPLAY_SUPPORT is not set |
689 | 734 | ||
690 | # | 735 | # |
691 | # Sound | 736 | # Console display driver support |
692 | # | 737 | # |
738 | CONFIG_DUMMY_CONSOLE=y | ||
739 | CONFIG_FRAMEBUFFER_CONSOLE=y | ||
740 | # CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set | ||
741 | # CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set | ||
742 | # CONFIG_FONTS is not set | ||
743 | CONFIG_FONT_8x8=y | ||
744 | CONFIG_FONT_8x16=y | ||
745 | CONFIG_LOGO=y | ||
746 | CONFIG_LOGO_LINUX_MONO=y | ||
747 | CONFIG_LOGO_LINUX_VGA16=y | ||
748 | CONFIG_LOGO_LINUX_CLUT224=y | ||
749 | CONFIG_LOGO_SUPERH_MONO=y | ||
750 | CONFIG_LOGO_SUPERH_VGA16=y | ||
751 | CONFIG_LOGO_SUPERH_CLUT224=y | ||
693 | # CONFIG_SOUND is not set | 752 | # CONFIG_SOUND is not set |
694 | # CONFIG_HID_SUPPORT is not set | 753 | # CONFIG_HID_SUPPORT is not set |
695 | CONFIG_USB_SUPPORT=y | 754 | CONFIG_USB_SUPPORT=y |
@@ -788,11 +847,27 @@ CONFIG_USB_MON=y | |||
788 | # CONFIG_USB_IOWARRIOR is not set | 847 | # CONFIG_USB_IOWARRIOR is not set |
789 | # CONFIG_USB_ISIGHTFW is not set | 848 | # CONFIG_USB_ISIGHTFW is not set |
790 | # CONFIG_USB_GADGET is not set | 849 | # CONFIG_USB_GADGET is not set |
791 | # CONFIG_MMC is not set | 850 | CONFIG_MMC=y |
851 | # CONFIG_MMC_DEBUG is not set | ||
852 | # CONFIG_MMC_UNSAFE_RESUME is not set | ||
853 | |||
854 | # | ||
855 | # MMC/SD Card Drivers | ||
856 | # | ||
857 | CONFIG_MMC_BLOCK=y | ||
858 | CONFIG_MMC_BLOCK_BOUNCE=y | ||
859 | # CONFIG_SDIO_UART is not set | ||
860 | # CONFIG_MMC_TEST is not set | ||
861 | |||
862 | # | ||
863 | # MMC/SD Host Controller Drivers | ||
864 | # | ||
865 | # CONFIG_MMC_SDHCI is not set | ||
792 | # CONFIG_MEMSTICK is not set | 866 | # CONFIG_MEMSTICK is not set |
793 | # CONFIG_NEW_LEDS is not set | 867 | # CONFIG_NEW_LEDS is not set |
794 | # CONFIG_ACCESSIBILITY is not set | 868 | # CONFIG_ACCESSIBILITY is not set |
795 | # CONFIG_RTC_CLASS is not set | 869 | # CONFIG_RTC_CLASS is not set |
870 | # CONFIG_DMADEVICES is not set | ||
796 | # CONFIG_UIO is not set | 871 | # CONFIG_UIO is not set |
797 | 872 | ||
798 | # | 873 | # |
@@ -865,6 +940,7 @@ CONFIG_TMPFS_POSIX_ACL=y | |||
865 | # CONFIG_CRAMFS is not set | 940 | # CONFIG_CRAMFS is not set |
866 | # CONFIG_VXFS_FS is not set | 941 | # CONFIG_VXFS_FS is not set |
867 | # CONFIG_MINIX_FS is not set | 942 | # CONFIG_MINIX_FS is not set |
943 | # CONFIG_OMFS_FS is not set | ||
868 | # CONFIG_HPFS_FS is not set | 944 | # CONFIG_HPFS_FS is not set |
869 | # CONFIG_QNX4FS_FS is not set | 945 | # CONFIG_QNX4FS_FS is not set |
870 | # CONFIG_ROMFS_FS is not set | 946 | # CONFIG_ROMFS_FS is not set |
@@ -874,12 +950,11 @@ CONFIG_NETWORK_FILESYSTEMS=y | |||
874 | CONFIG_NFS_FS=y | 950 | CONFIG_NFS_FS=y |
875 | # CONFIG_NFS_V3 is not set | 951 | # CONFIG_NFS_V3 is not set |
876 | # CONFIG_NFS_V4 is not set | 952 | # CONFIG_NFS_V4 is not set |
877 | # CONFIG_NFSD is not set | ||
878 | CONFIG_ROOT_NFS=y | 953 | CONFIG_ROOT_NFS=y |
954 | # CONFIG_NFSD is not set | ||
879 | CONFIG_LOCKD=y | 955 | CONFIG_LOCKD=y |
880 | CONFIG_NFS_COMMON=y | 956 | CONFIG_NFS_COMMON=y |
881 | CONFIG_SUNRPC=y | 957 | CONFIG_SUNRPC=y |
882 | # CONFIG_SUNRPC_BIND34 is not set | ||
883 | # CONFIG_RPCSEC_GSS_KRB5 is not set | 958 | # CONFIG_RPCSEC_GSS_KRB5 is not set |
884 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | 959 | # CONFIG_RPCSEC_GSS_SPKM3 is not set |
885 | # CONFIG_SMB_FS is not set | 960 | # CONFIG_SMB_FS is not set |
@@ -949,6 +1024,7 @@ CONFIG_FRAME_WARN=1024 | |||
949 | # CONFIG_HEADERS_CHECK is not set | 1024 | # CONFIG_HEADERS_CHECK is not set |
950 | # CONFIG_DEBUG_KERNEL is not set | 1025 | # CONFIG_DEBUG_KERNEL is not set |
951 | # CONFIG_DEBUG_BUGVERBOSE is not set | 1026 | # CONFIG_DEBUG_BUGVERBOSE is not set |
1027 | # CONFIG_DEBUG_MEMORY_INIT is not set | ||
952 | # CONFIG_SAMPLES is not set | 1028 | # CONFIG_SAMPLES is not set |
953 | # CONFIG_SH_STANDARD_BIOS is not set | 1029 | # CONFIG_SH_STANDARD_BIOS is not set |
954 | # CONFIG_EARLY_SCIF_CONSOLE is not set | 1030 | # CONFIG_EARLY_SCIF_CONSOLE is not set |
@@ -1003,6 +1079,10 @@ CONFIG_CRYPTO=y | |||
1003 | # CONFIG_CRYPTO_MD4 is not set | 1079 | # CONFIG_CRYPTO_MD4 is not set |
1004 | # CONFIG_CRYPTO_MD5 is not set | 1080 | # CONFIG_CRYPTO_MD5 is not set |
1005 | # CONFIG_CRYPTO_MICHAEL_MIC is not set | 1081 | # CONFIG_CRYPTO_MICHAEL_MIC is not set |
1082 | # CONFIG_CRYPTO_RMD128 is not set | ||
1083 | # CONFIG_CRYPTO_RMD160 is not set | ||
1084 | # CONFIG_CRYPTO_RMD256 is not set | ||
1085 | # CONFIG_CRYPTO_RMD320 is not set | ||
1006 | # CONFIG_CRYPTO_SHA1 is not set | 1086 | # CONFIG_CRYPTO_SHA1 is not set |
1007 | # CONFIG_CRYPTO_SHA256 is not set | 1087 | # CONFIG_CRYPTO_SHA256 is not set |
1008 | # CONFIG_CRYPTO_SHA512 is not set | 1088 | # CONFIG_CRYPTO_SHA512 is not set |
@@ -1042,6 +1122,7 @@ CONFIG_BITREVERSE=y | |||
1042 | # CONFIG_GENERIC_FIND_FIRST_BIT is not set | 1122 | # CONFIG_GENERIC_FIND_FIRST_BIT is not set |
1043 | # CONFIG_CRC_CCITT is not set | 1123 | # CONFIG_CRC_CCITT is not set |
1044 | # CONFIG_CRC16 is not set | 1124 | # CONFIG_CRC16 is not set |
1125 | CONFIG_CRC_T10DIF=y | ||
1045 | # CONFIG_CRC_ITU_T is not set | 1126 | # CONFIG_CRC_ITU_T is not set |
1046 | CONFIG_CRC32=y | 1127 | CONFIG_CRC32=y |
1047 | # CONFIG_CRC7 is not set | 1128 | # CONFIG_CRC7 is not set |
diff --git a/arch/sh/include/asm/flat.h b/arch/sh/include/asm/flat.h index 0cc800299e06..d3b2b4f109e3 100644 --- a/arch/sh/include/asm/flat.h +++ b/arch/sh/include/asm/flat.h | |||
@@ -21,4 +21,11 @@ | |||
21 | #define flat_get_relocate_addr(rel) (rel) | 21 | #define flat_get_relocate_addr(rel) (rel) |
22 | #define flat_set_persistent(relval, p) ({ (void)p; 0; }) | 22 | #define flat_set_persistent(relval, p) ({ (void)p; 0; }) |
23 | 23 | ||
24 | #define FLAT_PLAT_INIT(_r) \ | ||
25 | do { _r->regs[0]=0; _r->regs[1]=0; _r->regs[2]=0; _r->regs[3]=0; \ | ||
26 | _r->regs[4]=0; _r->regs[5]=0; _r->regs[6]=0; _r->regs[7]=0; \ | ||
27 | _r->regs[8]=0; _r->regs[9]=0; _r->regs[10]=0; _r->regs[11]=0; \ | ||
28 | _r->regs[12]=0; _r->regs[13]=0; _r->regs[14]=0; \ | ||
29 | _r->sr = SR_FD; } while (0) | ||
30 | |||
24 | #endif /* __ASM_SH_FLAT_H */ | 31 | #endif /* __ASM_SH_FLAT_H */ |
diff --git a/arch/sh/include/asm/migor.h b/arch/sh/include/asm/migor.h index 10016e0f4a4e..c12b632c540b 100644 --- a/arch/sh/include/asm/migor.h +++ b/arch/sh/include/asm/migor.h | |||
@@ -42,9 +42,6 @@ | |||
42 | 42 | ||
43 | #define PORT_MSELCRB 0xa4050182 | 43 | #define PORT_MSELCRB 0xa4050182 |
44 | 44 | ||
45 | #define MSTPCR1 0xa4150034 | ||
46 | #define MSTPCR2 0xa4150038 | ||
47 | |||
48 | #define PORT_PSELA 0xa405014e | 45 | #define PORT_PSELA 0xa405014e |
49 | #define PORT_PSELB 0xa4050150 | 46 | #define PORT_PSELB 0xa4050150 |
50 | #define PORT_PSELC 0xa4050152 | 47 | #define PORT_PSELC 0xa4050152 |
diff --git a/arch/sh/include/asm/sh_mobile_lcdc.h b/arch/sh/include/asm/sh_mobile_lcdc.h index 27677727df4d..130102f663f5 100644 --- a/arch/sh/include/asm/sh_mobile_lcdc.h +++ b/arch/sh/include/asm/sh_mobile_lcdc.h | |||
@@ -47,12 +47,18 @@ struct sh_mobile_lcdc_board_cfg { | |||
47 | void (*display_off)(void *board_data); | 47 | void (*display_off)(void *board_data); |
48 | }; | 48 | }; |
49 | 49 | ||
50 | struct sh_mobile_lcdc_lcd_size_cfg { /* width and height of panel in mm */ | ||
51 | unsigned long width; | ||
52 | unsigned long height; | ||
53 | }; | ||
54 | |||
50 | struct sh_mobile_lcdc_chan_cfg { | 55 | struct sh_mobile_lcdc_chan_cfg { |
51 | int chan; | 56 | int chan; |
52 | int bpp; | 57 | int bpp; |
53 | int interface_type; /* selects RGBn or SYSn I/F, see above */ | 58 | int interface_type; /* selects RGBn or SYSn I/F, see above */ |
54 | int clock_divider; | 59 | int clock_divider; |
55 | struct fb_videomode lcd_cfg; | 60 | struct fb_videomode lcd_cfg; |
61 | struct sh_mobile_lcdc_lcd_size_cfg lcd_size_cfg; | ||
56 | struct sh_mobile_lcdc_board_cfg board_cfg; | 62 | struct sh_mobile_lcdc_board_cfg board_cfg; |
57 | struct sh_mobile_lcdc_sys_bus_cfg sys_bus_cfg; /* only for SYSn I/F */ | 63 | struct sh_mobile_lcdc_sys_bus_cfg sys_bus_cfg; /* only for SYSn I/F */ |
58 | }; | 64 | }; |
diff --git a/arch/sh/include/cpu-sh3/cpu/cacheflush.h b/arch/sh/include/cpu-sh3/cpu/cacheflush.h index abc909880807..1ac27aae6700 100644 --- a/arch/sh/include/cpu-sh3/cpu/cacheflush.h +++ b/arch/sh/include/cpu-sh3/cpu/cacheflush.h | |||
@@ -29,6 +29,16 @@ void flush_cache_page(struct vm_area_struct *vma, unsigned long addr, unsigned l | |||
29 | void flush_dcache_page(struct page *pg); | 29 | void flush_dcache_page(struct page *pg); |
30 | void flush_icache_range(unsigned long start, unsigned long end); | 30 | void flush_icache_range(unsigned long start, unsigned long end); |
31 | void flush_icache_page(struct vm_area_struct *vma, struct page *page); | 31 | void flush_icache_page(struct vm_area_struct *vma, struct page *page); |
32 | |||
33 | #define flush_dcache_mmap_lock(mapping) do { } while (0) | ||
34 | #define flush_dcache_mmap_unlock(mapping) do { } while (0) | ||
35 | |||
36 | /* SH3 has unified cache so no special action needed here */ | ||
37 | #define flush_cache_sigtramp(vaddr) do { } while (0) | ||
38 | #define flush_icache_user_range(vma,pg,adr,len) do { } while (0) | ||
39 | |||
40 | #define p3_cache_init() do { } while (0) | ||
41 | |||
32 | #else | 42 | #else |
33 | #include <cpu-common/cpu/cacheflush.h> | 43 | #include <cpu-common/cpu/cacheflush.h> |
34 | #endif | 44 | #endif |
diff --git a/arch/sh/kernel/cpu/sh4a/setup-sh7723.c b/arch/sh/kernel/cpu/sh4a/setup-sh7723.c index cd6baffdc896..a7412cede534 100644 --- a/arch/sh/kernel/cpu/sh4a/setup-sh7723.c +++ b/arch/sh/kernel/cpu/sh4a/setup-sh7723.c | |||
@@ -45,7 +45,7 @@ static struct platform_device vpu_device = { | |||
45 | }; | 45 | }; |
46 | 46 | ||
47 | static struct uio_info veu0_platform_data = { | 47 | static struct uio_info veu0_platform_data = { |
48 | .name = "VEU", | 48 | .name = "VEU2H", |
49 | .version = "0", | 49 | .version = "0", |
50 | .irq = 54, | 50 | .irq = 54, |
51 | }; | 51 | }; |
@@ -73,7 +73,7 @@ static struct platform_device veu0_device = { | |||
73 | }; | 73 | }; |
74 | 74 | ||
75 | static struct uio_info veu1_platform_data = { | 75 | static struct uio_info veu1_platform_data = { |
76 | .name = "VEU", | 76 | .name = "VEU2H", |
77 | .version = "0", | 77 | .version = "0", |
78 | .irq = 27, | 78 | .irq = 27, |
79 | }; | 79 | }; |
diff --git a/arch/sh/kernel/sh_ksyms_32.c b/arch/sh/kernel/sh_ksyms_32.c index 8f916536719c..6e1b1c271658 100644 --- a/arch/sh/kernel/sh_ksyms_32.c +++ b/arch/sh/kernel/sh_ksyms_32.c | |||
@@ -107,10 +107,12 @@ DECLARE_EXPORT(__movmemSI12_i4); | |||
107 | * GCC >= 4.2 emits these for division, as do GCC 4.1.x versions of the ST | 107 | * GCC >= 4.2 emits these for division, as do GCC 4.1.x versions of the ST |
108 | * compiler which include backported patches. | 108 | * compiler which include backported patches. |
109 | */ | 109 | */ |
110 | DECLARE_EXPORT(__sdivsi3_i4i); | ||
111 | DECLARE_EXPORT(__udiv_qrnnd_16); | 110 | DECLARE_EXPORT(__udiv_qrnnd_16); |
111 | #if !defined(CONFIG_CPU_SH2) | ||
112 | DECLARE_EXPORT(__sdivsi3_i4i); | ||
112 | DECLARE_EXPORT(__udivsi3_i4i); | 113 | DECLARE_EXPORT(__udivsi3_i4i); |
113 | #endif | 114 | #endif |
115 | #endif | ||
114 | #else /* GCC 3.x */ | 116 | #else /* GCC 3.x */ |
115 | DECLARE_EXPORT(__movstr_i4_even); | 117 | DECLARE_EXPORT(__movstr_i4_even); |
116 | DECLARE_EXPORT(__movstr_i4_odd); | 118 | DECLARE_EXPORT(__movstr_i4_odd); |
diff --git a/arch/sh/mm/Kconfig b/arch/sh/mm/Kconfig index 9c131cac91a4..8a03926ea84f 100644 --- a/arch/sh/mm/Kconfig +++ b/arch/sh/mm/Kconfig | |||
@@ -181,10 +181,12 @@ config ENTRY_OFFSET | |||
181 | choice | 181 | choice |
182 | prompt "HugeTLB page size" | 182 | prompt "HugeTLB page size" |
183 | depends on HUGETLB_PAGE && (CPU_SH4 || CPU_SH5) && MMU | 183 | depends on HUGETLB_PAGE && (CPU_SH4 || CPU_SH5) && MMU |
184 | default HUGETLB_PAGE_SIZE_1MB if PAGE_SIZE_64KB | ||
184 | default HUGETLB_PAGE_SIZE_64K | 185 | default HUGETLB_PAGE_SIZE_64K |
185 | 186 | ||
186 | config HUGETLB_PAGE_SIZE_64K | 187 | config HUGETLB_PAGE_SIZE_64K |
187 | bool "64kB" | 188 | bool "64kB" |
189 | depends on !PAGE_SIZE_64KB | ||
188 | 190 | ||
189 | config HUGETLB_PAGE_SIZE_256K | 191 | config HUGETLB_PAGE_SIZE_256K |
190 | bool "256kB" | 192 | bool "256kB" |
diff --git a/arch/sh/mm/consistent.c b/arch/sh/mm/consistent.c index b2ce014401b5..895bb3f335c7 100644 --- a/arch/sh/mm/consistent.c +++ b/arch/sh/mm/consistent.c | |||
@@ -95,6 +95,29 @@ void dma_cache_sync(struct device *dev, void *vaddr, size_t size, | |||
95 | } | 95 | } |
96 | EXPORT_SYMBOL(dma_cache_sync); | 96 | EXPORT_SYMBOL(dma_cache_sync); |
97 | 97 | ||
98 | static int __init memchunk_setup(char *str) | ||
99 | { | ||
100 | return 1; /* accept anything that begins with "memchunk." */ | ||
101 | } | ||
102 | __setup("memchunk.", memchunk_setup); | ||
103 | |||
104 | static void memchunk_cmdline_override(char *name, unsigned long *sizep) | ||
105 | { | ||
106 | char *p = boot_command_line; | ||
107 | int k = strlen(name); | ||
108 | |||
109 | while ((p = strstr(p, "memchunk."))) { | ||
110 | p += 9; /* strlen("memchunk.") */ | ||
111 | if (!strncmp(name, p, k) && p[k] == '=') { | ||
112 | p += k + 1; | ||
113 | *sizep = memparse(p, NULL); | ||
114 | pr_info("%s: forcing memory chunk size to 0x%08lx\n", | ||
115 | name, *sizep); | ||
116 | break; | ||
117 | } | ||
118 | } | ||
119 | } | ||
120 | |||
98 | int platform_resource_setup_memory(struct platform_device *pdev, | 121 | int platform_resource_setup_memory(struct platform_device *pdev, |
99 | char *name, unsigned long memsize) | 122 | char *name, unsigned long memsize) |
100 | { | 123 | { |
@@ -109,6 +132,10 @@ int platform_resource_setup_memory(struct platform_device *pdev, | |||
109 | return -EINVAL; | 132 | return -EINVAL; |
110 | } | 133 | } |
111 | 134 | ||
135 | memchunk_cmdline_override(name, &memsize); | ||
136 | if (!memsize) | ||
137 | return 0; | ||
138 | |||
112 | buf = dma_alloc_coherent(NULL, memsize, &dma_handle, GFP_KERNEL); | 139 | buf = dma_alloc_coherent(NULL, memsize, &dma_handle, GFP_KERNEL); |
113 | if (!buf) { | 140 | if (!buf) { |
114 | pr_warning("%s: unable to allocate memory\n", name); | 141 | pr_warning("%s: unable to allocate memory\n", name); |
diff --git a/arch/x86/kernel/cpu/cpufreq/powernow-k8.c b/arch/x86/kernel/cpu/cpufreq/powernow-k8.c index 4e7271999a74..84bb395038d8 100644 --- a/arch/x86/kernel/cpu/cpufreq/powernow-k8.c +++ b/arch/x86/kernel/cpu/cpufreq/powernow-k8.c | |||
@@ -737,63 +737,44 @@ static int find_psb_table(struct powernow_k8_data *data) | |||
737 | #ifdef CONFIG_X86_POWERNOW_K8_ACPI | 737 | #ifdef CONFIG_X86_POWERNOW_K8_ACPI |
738 | static void powernow_k8_acpi_pst_values(struct powernow_k8_data *data, unsigned int index) | 738 | static void powernow_k8_acpi_pst_values(struct powernow_k8_data *data, unsigned int index) |
739 | { | 739 | { |
740 | if (!data->acpi_data->state_count || (cpu_family == CPU_HW_PSTATE)) | 740 | if (!data->acpi_data.state_count || (cpu_family == CPU_HW_PSTATE)) |
741 | return; | 741 | return; |
742 | 742 | ||
743 | data->irt = (data->acpi_data->states[index].control >> IRT_SHIFT) & IRT_MASK; | 743 | data->irt = (data->acpi_data.states[index].control >> IRT_SHIFT) & IRT_MASK; |
744 | data->rvo = (data->acpi_data->states[index].control >> RVO_SHIFT) & RVO_MASK; | 744 | data->rvo = (data->acpi_data.states[index].control >> RVO_SHIFT) & RVO_MASK; |
745 | data->exttype = (data->acpi_data->states[index].control >> EXT_TYPE_SHIFT) & EXT_TYPE_MASK; | 745 | data->exttype = (data->acpi_data.states[index].control >> EXT_TYPE_SHIFT) & EXT_TYPE_MASK; |
746 | data->plllock = (data->acpi_data->states[index].control >> PLL_L_SHIFT) & PLL_L_MASK; | 746 | data->plllock = (data->acpi_data.states[index].control >> PLL_L_SHIFT) & PLL_L_MASK; |
747 | data->vidmvs = 1 << ((data->acpi_data->states[index].control >> MVS_SHIFT) & MVS_MASK); | 747 | data->vidmvs = 1 << ((data->acpi_data.states[index].control >> MVS_SHIFT) & MVS_MASK); |
748 | data->vstable = (data->acpi_data->states[index].control >> VST_SHIFT) & VST_MASK; | 748 | data->vstable = (data->acpi_data.states[index].control >> VST_SHIFT) & VST_MASK; |
749 | } | ||
750 | |||
751 | |||
752 | static struct acpi_processor_performance *acpi_perf_data; | ||
753 | static int preregister_valid; | ||
754 | |||
755 | static int powernow_k8_cpu_preinit_acpi(void) | ||
756 | { | ||
757 | acpi_perf_data = alloc_percpu(struct acpi_processor_performance); | ||
758 | if (!acpi_perf_data) | ||
759 | return -ENODEV; | ||
760 | |||
761 | if (acpi_processor_preregister_performance(acpi_perf_data)) | ||
762 | return -ENODEV; | ||
763 | else | ||
764 | preregister_valid = 1; | ||
765 | return 0; | ||
766 | } | 749 | } |
767 | 750 | ||
768 | static int powernow_k8_cpu_init_acpi(struct powernow_k8_data *data) | 751 | static int powernow_k8_cpu_init_acpi(struct powernow_k8_data *data) |
769 | { | 752 | { |
770 | struct cpufreq_frequency_table *powernow_table; | 753 | struct cpufreq_frequency_table *powernow_table; |
771 | int ret_val; | 754 | int ret_val; |
772 | int cpu = 0; | ||
773 | 755 | ||
774 | data->acpi_data = percpu_ptr(acpi_perf_data, cpu); | 756 | if (acpi_processor_register_performance(&data->acpi_data, data->cpu)) { |
775 | if (acpi_processor_register_performance(data->acpi_data, data->cpu)) { | ||
776 | dprintk("register performance failed: bad ACPI data\n"); | 757 | dprintk("register performance failed: bad ACPI data\n"); |
777 | return -EIO; | 758 | return -EIO; |
778 | } | 759 | } |
779 | 760 | ||
780 | /* verify the data contained in the ACPI structures */ | 761 | /* verify the data contained in the ACPI structures */ |
781 | if (data->acpi_data->state_count <= 1) { | 762 | if (data->acpi_data.state_count <= 1) { |
782 | dprintk("No ACPI P-States\n"); | 763 | dprintk("No ACPI P-States\n"); |
783 | goto err_out; | 764 | goto err_out; |
784 | } | 765 | } |
785 | 766 | ||
786 | if ((data->acpi_data->control_register.space_id != ACPI_ADR_SPACE_FIXED_HARDWARE) || | 767 | if ((data->acpi_data.control_register.space_id != ACPI_ADR_SPACE_FIXED_HARDWARE) || |
787 | (data->acpi_data->status_register.space_id != ACPI_ADR_SPACE_FIXED_HARDWARE)) { | 768 | (data->acpi_data.status_register.space_id != ACPI_ADR_SPACE_FIXED_HARDWARE)) { |
788 | dprintk("Invalid control/status registers (%x - %x)\n", | 769 | dprintk("Invalid control/status registers (%x - %x)\n", |
789 | data->acpi_data->control_register.space_id, | 770 | data->acpi_data.control_register.space_id, |
790 | data->acpi_data->status_register.space_id); | 771 | data->acpi_data.status_register.space_id); |
791 | goto err_out; | 772 | goto err_out; |
792 | } | 773 | } |
793 | 774 | ||
794 | /* fill in data->powernow_table */ | 775 | /* fill in data->powernow_table */ |
795 | powernow_table = kmalloc((sizeof(struct cpufreq_frequency_table) | 776 | powernow_table = kmalloc((sizeof(struct cpufreq_frequency_table) |
796 | * (data->acpi_data->state_count + 1)), GFP_KERNEL); | 777 | * (data->acpi_data.state_count + 1)), GFP_KERNEL); |
797 | if (!powernow_table) { | 778 | if (!powernow_table) { |
798 | dprintk("powernow_table memory alloc failure\n"); | 779 | dprintk("powernow_table memory alloc failure\n"); |
799 | goto err_out; | 780 | goto err_out; |
@@ -806,12 +787,12 @@ static int powernow_k8_cpu_init_acpi(struct powernow_k8_data *data) | |||
806 | if (ret_val) | 787 | if (ret_val) |
807 | goto err_out_mem; | 788 | goto err_out_mem; |
808 | 789 | ||
809 | powernow_table[data->acpi_data->state_count].frequency = CPUFREQ_TABLE_END; | 790 | powernow_table[data->acpi_data.state_count].frequency = CPUFREQ_TABLE_END; |
810 | powernow_table[data->acpi_data->state_count].index = 0; | 791 | powernow_table[data->acpi_data.state_count].index = 0; |
811 | data->powernow_table = powernow_table; | 792 | data->powernow_table = powernow_table; |
812 | 793 | ||
813 | /* fill in data */ | 794 | /* fill in data */ |
814 | data->numps = data->acpi_data->state_count; | 795 | data->numps = data->acpi_data.state_count; |
815 | if (first_cpu(per_cpu(cpu_core_map, data->cpu)) == data->cpu) | 796 | if (first_cpu(per_cpu(cpu_core_map, data->cpu)) == data->cpu) |
816 | print_basics(data); | 797 | print_basics(data); |
817 | powernow_k8_acpi_pst_values(data, 0); | 798 | powernow_k8_acpi_pst_values(data, 0); |
@@ -819,31 +800,16 @@ static int powernow_k8_cpu_init_acpi(struct powernow_k8_data *data) | |||
819 | /* notify BIOS that we exist */ | 800 | /* notify BIOS that we exist */ |
820 | acpi_processor_notify_smm(THIS_MODULE); | 801 | acpi_processor_notify_smm(THIS_MODULE); |
821 | 802 | ||
822 | /* determine affinity, from ACPI if available */ | ||
823 | if (preregister_valid) { | ||
824 | if ((data->acpi_data->shared_type == CPUFREQ_SHARED_TYPE_ALL) || | ||
825 | (data->acpi_data->shared_type == CPUFREQ_SHARED_TYPE_ANY)) | ||
826 | data->starting_core_affinity = data->acpi_data->shared_cpu_map; | ||
827 | else | ||
828 | data->starting_core_affinity = cpumask_of_cpu(data->cpu); | ||
829 | } else { | ||
830 | /* best guess from family if not */ | ||
831 | if (cpu_family == CPU_HW_PSTATE) | ||
832 | data->starting_core_affinity = cpumask_of_cpu(data->cpu); | ||
833 | else | ||
834 | data->starting_core_affinity = per_cpu(cpu_core_map, data->cpu); | ||
835 | } | ||
836 | |||
837 | return 0; | 803 | return 0; |
838 | 804 | ||
839 | err_out_mem: | 805 | err_out_mem: |
840 | kfree(powernow_table); | 806 | kfree(powernow_table); |
841 | 807 | ||
842 | err_out: | 808 | err_out: |
843 | acpi_processor_unregister_performance(data->acpi_data, data->cpu); | 809 | acpi_processor_unregister_performance(&data->acpi_data, data->cpu); |
844 | 810 | ||
845 | /* data->acpi_data.state_count informs us at ->exit() whether ACPI was used */ | 811 | /* data->acpi_data.state_count informs us at ->exit() whether ACPI was used */ |
846 | data->acpi_data->state_count = 0; | 812 | data->acpi_data.state_count = 0; |
847 | 813 | ||
848 | return -ENODEV; | 814 | return -ENODEV; |
849 | } | 815 | } |
@@ -855,10 +821,10 @@ static int fill_powernow_table_pstate(struct powernow_k8_data *data, struct cpuf | |||
855 | rdmsr(MSR_PSTATE_CUR_LIMIT, hi, lo); | 821 | rdmsr(MSR_PSTATE_CUR_LIMIT, hi, lo); |
856 | data->max_hw_pstate = (hi & HW_PSTATE_MAX_MASK) >> HW_PSTATE_MAX_SHIFT; | 822 | data->max_hw_pstate = (hi & HW_PSTATE_MAX_MASK) >> HW_PSTATE_MAX_SHIFT; |
857 | 823 | ||
858 | for (i = 0; i < data->acpi_data->state_count; i++) { | 824 | for (i = 0; i < data->acpi_data.state_count; i++) { |
859 | u32 index; | 825 | u32 index; |
860 | 826 | ||
861 | index = data->acpi_data->states[i].control & HW_PSTATE_MASK; | 827 | index = data->acpi_data.states[i].control & HW_PSTATE_MASK; |
862 | if (index > data->max_hw_pstate) { | 828 | if (index > data->max_hw_pstate) { |
863 | printk(KERN_ERR PFX "invalid pstate %d - bad value %d.\n", i, index); | 829 | printk(KERN_ERR PFX "invalid pstate %d - bad value %d.\n", i, index); |
864 | printk(KERN_ERR PFX "Please report to BIOS manufacturer\n"); | 830 | printk(KERN_ERR PFX "Please report to BIOS manufacturer\n"); |
@@ -874,7 +840,7 @@ static int fill_powernow_table_pstate(struct powernow_k8_data *data, struct cpuf | |||
874 | 840 | ||
875 | powernow_table[i].index = index; | 841 | powernow_table[i].index = index; |
876 | 842 | ||
877 | powernow_table[i].frequency = data->acpi_data->states[i].core_frequency * 1000; | 843 | powernow_table[i].frequency = data->acpi_data.states[i].core_frequency * 1000; |
878 | } | 844 | } |
879 | return 0; | 845 | return 0; |
880 | } | 846 | } |
@@ -883,16 +849,16 @@ static int fill_powernow_table_fidvid(struct powernow_k8_data *data, struct cpuf | |||
883 | { | 849 | { |
884 | int i; | 850 | int i; |
885 | int cntlofreq = 0; | 851 | int cntlofreq = 0; |
886 | for (i = 0; i < data->acpi_data->state_count; i++) { | 852 | for (i = 0; i < data->acpi_data.state_count; i++) { |
887 | u32 fid; | 853 | u32 fid; |
888 | u32 vid; | 854 | u32 vid; |
889 | 855 | ||
890 | if (data->exttype) { | 856 | if (data->exttype) { |
891 | fid = data->acpi_data->states[i].status & EXT_FID_MASK; | 857 | fid = data->acpi_data.states[i].status & EXT_FID_MASK; |
892 | vid = (data->acpi_data->states[i].status >> VID_SHIFT) & EXT_VID_MASK; | 858 | vid = (data->acpi_data.states[i].status >> VID_SHIFT) & EXT_VID_MASK; |
893 | } else { | 859 | } else { |
894 | fid = data->acpi_data->states[i].control & FID_MASK; | 860 | fid = data->acpi_data.states[i].control & FID_MASK; |
895 | vid = (data->acpi_data->states[i].control >> VID_SHIFT) & VID_MASK; | 861 | vid = (data->acpi_data.states[i].control >> VID_SHIFT) & VID_MASK; |
896 | } | 862 | } |
897 | 863 | ||
898 | dprintk(" %d : fid 0x%x, vid 0x%x\n", i, fid, vid); | 864 | dprintk(" %d : fid 0x%x, vid 0x%x\n", i, fid, vid); |
@@ -933,10 +899,10 @@ static int fill_powernow_table_fidvid(struct powernow_k8_data *data, struct cpuf | |||
933 | cntlofreq = i; | 899 | cntlofreq = i; |
934 | } | 900 | } |
935 | 901 | ||
936 | if (powernow_table[i].frequency != (data->acpi_data->states[i].core_frequency * 1000)) { | 902 | if (powernow_table[i].frequency != (data->acpi_data.states[i].core_frequency * 1000)) { |
937 | printk(KERN_INFO PFX "invalid freq entries %u kHz vs. %u kHz\n", | 903 | printk(KERN_INFO PFX "invalid freq entries %u kHz vs. %u kHz\n", |
938 | powernow_table[i].frequency, | 904 | powernow_table[i].frequency, |
939 | (unsigned int) (data->acpi_data->states[i].core_frequency * 1000)); | 905 | (unsigned int) (data->acpi_data.states[i].core_frequency * 1000)); |
940 | powernow_table[i].frequency = CPUFREQ_ENTRY_INVALID; | 906 | powernow_table[i].frequency = CPUFREQ_ENTRY_INVALID; |
941 | continue; | 907 | continue; |
942 | } | 908 | } |
@@ -946,12 +912,11 @@ static int fill_powernow_table_fidvid(struct powernow_k8_data *data, struct cpuf | |||
946 | 912 | ||
947 | static void powernow_k8_cpu_exit_acpi(struct powernow_k8_data *data) | 913 | static void powernow_k8_cpu_exit_acpi(struct powernow_k8_data *data) |
948 | { | 914 | { |
949 | if (data->acpi_data->state_count) | 915 | if (data->acpi_data.state_count) |
950 | acpi_processor_unregister_performance(data->acpi_data, data->cpu); | 916 | acpi_processor_unregister_performance(&data->acpi_data, data->cpu); |
951 | } | 917 | } |
952 | 918 | ||
953 | #else | 919 | #else |
954 | static int powernow_k8_cpu_preinit_acpi(void) { return -ENODEV; } | ||
955 | static int powernow_k8_cpu_init_acpi(struct powernow_k8_data *data) { return -ENODEV; } | 920 | static int powernow_k8_cpu_init_acpi(struct powernow_k8_data *data) { return -ENODEV; } |
956 | static void powernow_k8_cpu_exit_acpi(struct powernow_k8_data *data) { return; } | 921 | static void powernow_k8_cpu_exit_acpi(struct powernow_k8_data *data) { return; } |
957 | static void powernow_k8_acpi_pst_values(struct powernow_k8_data *data, unsigned int index) { return; } | 922 | static void powernow_k8_acpi_pst_values(struct powernow_k8_data *data, unsigned int index) { return; } |
@@ -1136,7 +1101,7 @@ static int powernowk8_verify(struct cpufreq_policy *pol) | |||
1136 | static int __cpuinit powernowk8_cpu_init(struct cpufreq_policy *pol) | 1101 | static int __cpuinit powernowk8_cpu_init(struct cpufreq_policy *pol) |
1137 | { | 1102 | { |
1138 | struct powernow_k8_data *data; | 1103 | struct powernow_k8_data *data; |
1139 | cpumask_t oldmask = CPU_MASK_ALL; | 1104 | cpumask_t oldmask; |
1140 | int rc; | 1105 | int rc; |
1141 | 1106 | ||
1142 | if (!cpu_online(pol->cpu)) | 1107 | if (!cpu_online(pol->cpu)) |
@@ -1209,7 +1174,10 @@ static int __cpuinit powernowk8_cpu_init(struct cpufreq_policy *pol) | |||
1209 | /* run on any CPU again */ | 1174 | /* run on any CPU again */ |
1210 | set_cpus_allowed_ptr(current, &oldmask); | 1175 | set_cpus_allowed_ptr(current, &oldmask); |
1211 | 1176 | ||
1212 | pol->cpus = data->starting_core_affinity; | 1177 | if (cpu_family == CPU_HW_PSTATE) |
1178 | pol->cpus = cpumask_of_cpu(pol->cpu); | ||
1179 | else | ||
1180 | pol->cpus = per_cpu(cpu_core_map, pol->cpu); | ||
1213 | data->available_cores = &(pol->cpus); | 1181 | data->available_cores = &(pol->cpus); |
1214 | 1182 | ||
1215 | /* Take a crude guess here. | 1183 | /* Take a crude guess here. |
@@ -1332,7 +1300,6 @@ static int __cpuinit powernowk8_init(void) | |||
1332 | } | 1300 | } |
1333 | 1301 | ||
1334 | if (supported_cpus == num_online_cpus()) { | 1302 | if (supported_cpus == num_online_cpus()) { |
1335 | powernow_k8_cpu_preinit_acpi(); | ||
1336 | printk(KERN_INFO PFX "Found %d %s " | 1303 | printk(KERN_INFO PFX "Found %d %s " |
1337 | "processors (%d cpu cores) (" VERSION ")\n", | 1304 | "processors (%d cpu cores) (" VERSION ")\n", |
1338 | num_online_nodes(), | 1305 | num_online_nodes(), |
@@ -1349,10 +1316,6 @@ static void __exit powernowk8_exit(void) | |||
1349 | dprintk("exit\n"); | 1316 | dprintk("exit\n"); |
1350 | 1317 | ||
1351 | cpufreq_unregister_driver(&cpufreq_amd64_driver); | 1318 | cpufreq_unregister_driver(&cpufreq_amd64_driver); |
1352 | |||
1353 | #ifdef CONFIG_X86_POWERNOW_K8_ACPI | ||
1354 | free_percpu(acpi_perf_data); | ||
1355 | #endif | ||
1356 | } | 1319 | } |
1357 | 1320 | ||
1358 | MODULE_AUTHOR("Paul Devriendt <paul.devriendt@amd.com> and Mark Langsdorf <mark.langsdorf@amd.com>"); | 1321 | MODULE_AUTHOR("Paul Devriendt <paul.devriendt@amd.com> and Mark Langsdorf <mark.langsdorf@amd.com>"); |
diff --git a/arch/x86/kernel/cpu/cpufreq/powernow-k8.h b/arch/x86/kernel/cpu/cpufreq/powernow-k8.h index a62612cd4be8..ab48cfed4d96 100644 --- a/arch/x86/kernel/cpu/cpufreq/powernow-k8.h +++ b/arch/x86/kernel/cpu/cpufreq/powernow-k8.h | |||
@@ -33,13 +33,12 @@ struct powernow_k8_data { | |||
33 | #ifdef CONFIG_X86_POWERNOW_K8_ACPI | 33 | #ifdef CONFIG_X86_POWERNOW_K8_ACPI |
34 | /* the acpi table needs to be kept. it's only available if ACPI was | 34 | /* the acpi table needs to be kept. it's only available if ACPI was |
35 | * used to determine valid frequency/vid/fid states */ | 35 | * used to determine valid frequency/vid/fid states */ |
36 | struct acpi_processor_performance *acpi_data; | 36 | struct acpi_processor_performance acpi_data; |
37 | #endif | 37 | #endif |
38 | /* we need to keep track of associated cores, but let cpufreq | 38 | /* we need to keep track of associated cores, but let cpufreq |
39 | * handle hotplug events - so just point at cpufreq pol->cpus | 39 | * handle hotplug events - so just point at cpufreq pol->cpus |
40 | * structure */ | 40 | * structure */ |
41 | cpumask_t *available_cores; | 41 | cpumask_t *available_cores; |
42 | cpumask_t starting_core_affinity; | ||
43 | }; | 42 | }; |
44 | 43 | ||
45 | 44 | ||
diff --git a/arch/x86/kernel/cpuid.c b/arch/x86/kernel/cpuid.c index 3fa4e926b510..6a44d6465991 100644 --- a/arch/x86/kernel/cpuid.c +++ b/arch/x86/kernel/cpuid.c | |||
@@ -88,6 +88,8 @@ static ssize_t cpuid_read(struct file *file, char __user *buf, | |||
88 | struct cpuid_regs cmd; | 88 | struct cpuid_regs cmd; |
89 | int cpu = iminor(file->f_path.dentry->d_inode); | 89 | int cpu = iminor(file->f_path.dentry->d_inode); |
90 | u64 pos = *ppos; | 90 | u64 pos = *ppos; |
91 | ssize_t bytes = 0; | ||
92 | int err = 0; | ||
91 | 93 | ||
92 | if (count % 16) | 94 | if (count % 16) |
93 | return -EINVAL; /* Invalid chunk size */ | 95 | return -EINVAL; /* Invalid chunk size */ |
@@ -95,14 +97,19 @@ static ssize_t cpuid_read(struct file *file, char __user *buf, | |||
95 | for (; count; count -= 16) { | 97 | for (; count; count -= 16) { |
96 | cmd.eax = pos; | 98 | cmd.eax = pos; |
97 | cmd.ecx = pos >> 32; | 99 | cmd.ecx = pos >> 32; |
98 | smp_call_function_single(cpu, cpuid_smp_cpuid, &cmd, 1); | 100 | err = smp_call_function_single(cpu, cpuid_smp_cpuid, &cmd, 1); |
99 | if (copy_to_user(tmp, &cmd, 16)) | 101 | if (err) |
100 | return -EFAULT; | 102 | break; |
103 | if (copy_to_user(tmp, &cmd, 16)) { | ||
104 | err = -EFAULT; | ||
105 | break; | ||
106 | } | ||
101 | tmp += 16; | 107 | tmp += 16; |
108 | bytes += 16; | ||
102 | *ppos = ++pos; | 109 | *ppos = ++pos; |
103 | } | 110 | } |
104 | 111 | ||
105 | return tmp - buf; | 112 | return bytes ? bytes : err; |
106 | } | 113 | } |
107 | 114 | ||
108 | static int cpuid_open(struct inode *inode, struct file *file) | 115 | static int cpuid_open(struct inode *inode, struct file *file) |
diff --git a/arch/x86/kernel/msr.c b/arch/x86/kernel/msr.c index e43938086885..2e2af5d18191 100644 --- a/arch/x86/kernel/msr.c +++ b/arch/x86/kernel/msr.c | |||
@@ -72,21 +72,28 @@ static ssize_t msr_read(struct file *file, char __user *buf, | |||
72 | u32 data[2]; | 72 | u32 data[2]; |
73 | u32 reg = *ppos; | 73 | u32 reg = *ppos; |
74 | int cpu = iminor(file->f_path.dentry->d_inode); | 74 | int cpu = iminor(file->f_path.dentry->d_inode); |
75 | int err; | 75 | int err = 0; |
76 | ssize_t bytes = 0; | ||
76 | 77 | ||
77 | if (count % 8) | 78 | if (count % 8) |
78 | return -EINVAL; /* Invalid chunk size */ | 79 | return -EINVAL; /* Invalid chunk size */ |
79 | 80 | ||
80 | for (; count; count -= 8) { | 81 | for (; count; count -= 8) { |
81 | err = rdmsr_safe_on_cpu(cpu, reg, &data[0], &data[1]); | 82 | err = rdmsr_safe_on_cpu(cpu, reg, &data[0], &data[1]); |
82 | if (err) | 83 | if (err) { |
83 | return -EIO; | 84 | if (err == -EFAULT) /* Fix idiotic error code */ |
84 | if (copy_to_user(tmp, &data, 8)) | 85 | err = -EIO; |
85 | return -EFAULT; | 86 | break; |
87 | } | ||
88 | if (copy_to_user(tmp, &data, 8)) { | ||
89 | err = -EFAULT; | ||
90 | break; | ||
91 | } | ||
86 | tmp += 2; | 92 | tmp += 2; |
93 | bytes += 8; | ||
87 | } | 94 | } |
88 | 95 | ||
89 | return ((char __user *)tmp) - buf; | 96 | return bytes ? bytes : err; |
90 | } | 97 | } |
91 | 98 | ||
92 | static ssize_t msr_write(struct file *file, const char __user *buf, | 99 | static ssize_t msr_write(struct file *file, const char __user *buf, |
@@ -96,21 +103,28 @@ static ssize_t msr_write(struct file *file, const char __user *buf, | |||
96 | u32 data[2]; | 103 | u32 data[2]; |
97 | u32 reg = *ppos; | 104 | u32 reg = *ppos; |
98 | int cpu = iminor(file->f_path.dentry->d_inode); | 105 | int cpu = iminor(file->f_path.dentry->d_inode); |
99 | int err; | 106 | int err = 0; |
107 | ssize_t bytes = 0; | ||
100 | 108 | ||
101 | if (count % 8) | 109 | if (count % 8) |
102 | return -EINVAL; /* Invalid chunk size */ | 110 | return -EINVAL; /* Invalid chunk size */ |
103 | 111 | ||
104 | for (; count; count -= 8) { | 112 | for (; count; count -= 8) { |
105 | if (copy_from_user(&data, tmp, 8)) | 113 | if (copy_from_user(&data, tmp, 8)) { |
106 | return -EFAULT; | 114 | err = -EFAULT; |
115 | break; | ||
116 | } | ||
107 | err = wrmsr_safe_on_cpu(cpu, reg, data[0], data[1]); | 117 | err = wrmsr_safe_on_cpu(cpu, reg, data[0], data[1]); |
108 | if (err) | 118 | if (err) { |
109 | return -EIO; | 119 | if (err == -EFAULT) /* Fix idiotic error code */ |
120 | err = -EIO; | ||
121 | break; | ||
122 | } | ||
110 | tmp += 2; | 123 | tmp += 2; |
124 | bytes += 8; | ||
111 | } | 125 | } |
112 | 126 | ||
113 | return ((char __user *)tmp) - buf; | 127 | return bytes ? bytes : err; |
114 | } | 128 | } |
115 | 129 | ||
116 | static int msr_open(struct inode *inode, struct file *file) | 130 | static int msr_open(struct inode *inode, struct file *file) |
diff --git a/arch/x86/kernel/tsc.c b/arch/x86/kernel/tsc.c index 9bed5cae4bdc..8e786b0d665a 100644 --- a/arch/x86/kernel/tsc.c +++ b/arch/x86/kernel/tsc.c | |||
@@ -314,7 +314,7 @@ static int time_cpufreq_notifier(struct notifier_block *nb, unsigned long val, | |||
314 | mark_tsc_unstable("cpufreq changes"); | 314 | mark_tsc_unstable("cpufreq changes"); |
315 | } | 315 | } |
316 | 316 | ||
317 | set_cyc2ns_scale(tsc_khz_ref, freq->cpu); | 317 | set_cyc2ns_scale(tsc_khz, freq->cpu); |
318 | 318 | ||
319 | return 0; | 319 | return 0; |
320 | } | 320 | } |
diff --git a/arch/x86/lib/msr-on-cpu.c b/arch/x86/lib/msr-on-cpu.c index d5a2b39f882b..01b868ba82f8 100644 --- a/arch/x86/lib/msr-on-cpu.c +++ b/arch/x86/lib/msr-on-cpu.c | |||
@@ -30,10 +30,11 @@ static int _rdmsr_on_cpu(unsigned int cpu, u32 msr_no, u32 *l, u32 *h, int safe) | |||
30 | 30 | ||
31 | rv.msr_no = msr_no; | 31 | rv.msr_no = msr_no; |
32 | if (safe) { | 32 | if (safe) { |
33 | smp_call_function_single(cpu, __rdmsr_safe_on_cpu, &rv, 1); | 33 | err = smp_call_function_single(cpu, __rdmsr_safe_on_cpu, |
34 | err = rv.err; | 34 | &rv, 1); |
35 | err = err ? err : rv.err; | ||
35 | } else { | 36 | } else { |
36 | smp_call_function_single(cpu, __rdmsr_on_cpu, &rv, 1); | 37 | err = smp_call_function_single(cpu, __rdmsr_on_cpu, &rv, 1); |
37 | } | 38 | } |
38 | *l = rv.l; | 39 | *l = rv.l; |
39 | *h = rv.h; | 40 | *h = rv.h; |
@@ -64,23 +65,24 @@ static int _wrmsr_on_cpu(unsigned int cpu, u32 msr_no, u32 l, u32 h, int safe) | |||
64 | rv.l = l; | 65 | rv.l = l; |
65 | rv.h = h; | 66 | rv.h = h; |
66 | if (safe) { | 67 | if (safe) { |
67 | smp_call_function_single(cpu, __wrmsr_safe_on_cpu, &rv, 1); | 68 | err = smp_call_function_single(cpu, __wrmsr_safe_on_cpu, |
68 | err = rv.err; | 69 | &rv, 1); |
70 | err = err ? err : rv.err; | ||
69 | } else { | 71 | } else { |
70 | smp_call_function_single(cpu, __wrmsr_on_cpu, &rv, 1); | 72 | err = smp_call_function_single(cpu, __wrmsr_on_cpu, &rv, 1); |
71 | } | 73 | } |
72 | 74 | ||
73 | return err; | 75 | return err; |
74 | } | 76 | } |
75 | 77 | ||
76 | void wrmsr_on_cpu(unsigned int cpu, u32 msr_no, u32 l, u32 h) | 78 | int wrmsr_on_cpu(unsigned int cpu, u32 msr_no, u32 l, u32 h) |
77 | { | 79 | { |
78 | _wrmsr_on_cpu(cpu, msr_no, l, h, 0); | 80 | return _wrmsr_on_cpu(cpu, msr_no, l, h, 0); |
79 | } | 81 | } |
80 | 82 | ||
81 | void rdmsr_on_cpu(unsigned int cpu, u32 msr_no, u32 *l, u32 *h) | 83 | int rdmsr_on_cpu(unsigned int cpu, u32 msr_no, u32 *l, u32 *h) |
82 | { | 84 | { |
83 | _rdmsr_on_cpu(cpu, msr_no, l, h, 0); | 85 | return _rdmsr_on_cpu(cpu, msr_no, l, h, 0); |
84 | } | 86 | } |
85 | 87 | ||
86 | /* These "safe" variants are slower and should be used when the target MSR | 88 | /* These "safe" variants are slower and should be used when the target MSR |
diff --git a/arch/x86/mach-rdc321x/platform.c b/arch/x86/mach-rdc321x/platform.c index a037041817c7..4f4e50c3ad3b 100644 --- a/arch/x86/mach-rdc321x/platform.c +++ b/arch/x86/mach-rdc321x/platform.c | |||
@@ -25,7 +25,6 @@ | |||
25 | #include <linux/list.h> | 25 | #include <linux/list.h> |
26 | #include <linux/device.h> | 26 | #include <linux/device.h> |
27 | #include <linux/platform_device.h> | 27 | #include <linux/platform_device.h> |
28 | #include <linux/version.h> | ||
29 | #include <linux/leds.h> | 28 | #include <linux/leds.h> |
30 | 29 | ||
31 | #include <asm/gpio.h> | 30 | #include <asm/gpio.h> |
diff --git a/arch/x86/pci/irq.c b/arch/x86/pci/irq.c index d781cc4f725a..006599db0dc7 100644 --- a/arch/x86/pci/irq.c +++ b/arch/x86/pci/irq.c | |||
@@ -590,6 +590,8 @@ static __init int intel_router_probe(struct irq_router *r, struct pci_dev *route | |||
590 | case PCI_DEVICE_ID_INTEL_ICH10_1: | 590 | case PCI_DEVICE_ID_INTEL_ICH10_1: |
591 | case PCI_DEVICE_ID_INTEL_ICH10_2: | 591 | case PCI_DEVICE_ID_INTEL_ICH10_2: |
592 | case PCI_DEVICE_ID_INTEL_ICH10_3: | 592 | case PCI_DEVICE_ID_INTEL_ICH10_3: |
593 | case PCI_DEVICE_ID_INTEL_PCH_0: | ||
594 | case PCI_DEVICE_ID_INTEL_PCH_1: | ||
593 | r->name = "PIIX/ICH"; | 595 | r->name = "PIIX/ICH"; |
594 | r->get = pirq_piix_get; | 596 | r->get = pirq_piix_get; |
595 | r->set = pirq_piix_set; | 597 | r->set = pirq_piix_set; |
diff --git a/arch/x86/pci/legacy.c b/arch/x86/pci/legacy.c index ec9ce35e44d6..b722dd481b39 100644 --- a/arch/x86/pci/legacy.c +++ b/arch/x86/pci/legacy.c | |||
@@ -14,7 +14,7 @@ static void __devinit pcibios_fixup_peer_bridges(void) | |||
14 | int n, devfn; | 14 | int n, devfn; |
15 | long node; | 15 | long node; |
16 | 16 | ||
17 | if (pcibios_last_bus <= 0 || pcibios_last_bus >= 0xff) | 17 | if (pcibios_last_bus <= 0 || pcibios_last_bus > 0xff) |
18 | return; | 18 | return; |
19 | DBG("PCI: Peer bridge fixup\n"); | 19 | DBG("PCI: Peer bridge fixup\n"); |
20 | 20 | ||
diff --git a/arch/x86/pci/mmconfig-shared.c b/arch/x86/pci/mmconfig-shared.c index 2bd5c53f6386..d9635764ce3d 100644 --- a/arch/x86/pci/mmconfig-shared.c +++ b/arch/x86/pci/mmconfig-shared.c | |||
@@ -293,7 +293,7 @@ static acpi_status __init find_mboard_resource(acpi_handle handle, u32 lvl, | |||
293 | return AE_OK; | 293 | return AE_OK; |
294 | } | 294 | } |
295 | 295 | ||
296 | static int __init is_acpi_reserved(unsigned long start, unsigned long end) | 296 | static int __init is_acpi_reserved(u64 start, u64 end, unsigned not_used) |
297 | { | 297 | { |
298 | struct resource mcfg_res; | 298 | struct resource mcfg_res; |
299 | 299 | ||
@@ -310,6 +310,41 @@ static int __init is_acpi_reserved(unsigned long start, unsigned long end) | |||
310 | return mcfg_res.flags; | 310 | return mcfg_res.flags; |
311 | } | 311 | } |
312 | 312 | ||
313 | typedef int (*check_reserved_t)(u64 start, u64 end, unsigned type); | ||
314 | |||
315 | static int __init is_mmconf_reserved(check_reserved_t is_reserved, | ||
316 | u64 addr, u64 size, int i, | ||
317 | typeof(pci_mmcfg_config[0]) *cfg, int with_e820) | ||
318 | { | ||
319 | u64 old_size = size; | ||
320 | int valid = 0; | ||
321 | |||
322 | while (!is_reserved(addr, addr + size - 1, E820_RESERVED)) { | ||
323 | size >>= 1; | ||
324 | if (size < (16UL<<20)) | ||
325 | break; | ||
326 | } | ||
327 | |||
328 | if (size >= (16UL<<20) || size == old_size) { | ||
329 | printk(KERN_NOTICE | ||
330 | "PCI: MCFG area at %Lx reserved in %s\n", | ||
331 | addr, with_e820?"E820":"ACPI motherboard resources"); | ||
332 | valid = 1; | ||
333 | |||
334 | if (old_size != size) { | ||
335 | /* update end_bus_number */ | ||
336 | cfg->end_bus_number = cfg->start_bus_number + ((size>>20) - 1); | ||
337 | printk(KERN_NOTICE "PCI: updated MCFG configuration %d: base %lx " | ||
338 | "segment %hu buses %u - %u\n", | ||
339 | i, (unsigned long)cfg->address, cfg->pci_segment, | ||
340 | (unsigned int)cfg->start_bus_number, | ||
341 | (unsigned int)cfg->end_bus_number); | ||
342 | } | ||
343 | } | ||
344 | |||
345 | return valid; | ||
346 | } | ||
347 | |||
313 | static void __init pci_mmcfg_reject_broken(int early) | 348 | static void __init pci_mmcfg_reject_broken(int early) |
314 | { | 349 | { |
315 | typeof(pci_mmcfg_config[0]) *cfg; | 350 | typeof(pci_mmcfg_config[0]) *cfg; |
@@ -324,21 +359,22 @@ static void __init pci_mmcfg_reject_broken(int early) | |||
324 | 359 | ||
325 | for (i = 0; i < pci_mmcfg_config_num; i++) { | 360 | for (i = 0; i < pci_mmcfg_config_num; i++) { |
326 | int valid = 0; | 361 | int valid = 0; |
327 | u32 size = (cfg->end_bus_number + 1) << 20; | 362 | u64 addr, size; |
363 | |||
328 | cfg = &pci_mmcfg_config[i]; | 364 | cfg = &pci_mmcfg_config[i]; |
365 | addr = cfg->start_bus_number; | ||
366 | addr <<= 20; | ||
367 | addr += cfg->address; | ||
368 | size = cfg->end_bus_number + 1 - cfg->start_bus_number; | ||
369 | size <<= 20; | ||
329 | printk(KERN_NOTICE "PCI: MCFG configuration %d: base %lx " | 370 | printk(KERN_NOTICE "PCI: MCFG configuration %d: base %lx " |
330 | "segment %hu buses %u - %u\n", | 371 | "segment %hu buses %u - %u\n", |
331 | i, (unsigned long)cfg->address, cfg->pci_segment, | 372 | i, (unsigned long)cfg->address, cfg->pci_segment, |
332 | (unsigned int)cfg->start_bus_number, | 373 | (unsigned int)cfg->start_bus_number, |
333 | (unsigned int)cfg->end_bus_number); | 374 | (unsigned int)cfg->end_bus_number); |
334 | 375 | ||
335 | if (!early && | 376 | if (!early) |
336 | is_acpi_reserved(cfg->address, cfg->address + size - 1)) { | 377 | valid = is_mmconf_reserved(is_acpi_reserved, addr, size, i, cfg, 0); |
337 | printk(KERN_NOTICE "PCI: MCFG area at %Lx reserved " | ||
338 | "in ACPI motherboard resources\n", | ||
339 | cfg->address); | ||
340 | valid = 1; | ||
341 | } | ||
342 | 378 | ||
343 | if (valid) | 379 | if (valid) |
344 | continue; | 380 | continue; |
@@ -347,16 +383,11 @@ static void __init pci_mmcfg_reject_broken(int early) | |||
347 | printk(KERN_ERR "PCI: BIOS Bug: MCFG area at %Lx is not" | 383 | printk(KERN_ERR "PCI: BIOS Bug: MCFG area at %Lx is not" |
348 | " reserved in ACPI motherboard resources\n", | 384 | " reserved in ACPI motherboard resources\n", |
349 | cfg->address); | 385 | cfg->address); |
386 | |||
350 | /* Don't try to do this check unless configuration | 387 | /* Don't try to do this check unless configuration |
351 | type 1 is available. how about type 2 ?*/ | 388 | type 1 is available. how about type 2 ?*/ |
352 | if (raw_pci_ops && e820_all_mapped(cfg->address, | 389 | if (raw_pci_ops) |
353 | cfg->address + size - 1, | 390 | valid = is_mmconf_reserved(e820_all_mapped, addr, size, i, cfg, 1); |
354 | E820_RESERVED)) { | ||
355 | printk(KERN_NOTICE | ||
356 | "PCI: MCFG area at %Lx reserved in E820\n", | ||
357 | cfg->address); | ||
358 | valid = 1; | ||
359 | } | ||
360 | 391 | ||
361 | if (!valid) | 392 | if (!valid) |
362 | goto reject; | 393 | goto reject; |