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; |
