diff options
author | H. Peter Anvin <hpa@linux.intel.com> | 2013-01-29 17:59:09 -0500 |
---|---|---|
committer | H. Peter Anvin <hpa@linux.intel.com> | 2013-01-29 18:10:15 -0500 |
commit | de65d816aa44f9ddd79861ae21d75010cc1fd003 (patch) | |
tree | 04a637a43b2e52a733d0dcb7595a47057571e7da /arch/x86/platform | |
parent | 9710f581bb4c35589ac046b0cfc0deb7f369fc85 (diff) | |
parent | 5dcd14ecd41ea2b3ae3295a9b30d98769d52165f (diff) |
Merge remote-tracking branch 'origin/x86/boot' into x86/mm2
Coming patches to x86/mm2 require the changes and advanced baseline in
x86/boot.
Resolved Conflicts:
arch/x86/kernel/setup.c
mm/nobootmem.c
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
Diffstat (limited to 'arch/x86/platform')
-rw-r--r-- | arch/x86/platform/ce4100/ce4100.c | 27 | ||||
-rw-r--r-- | arch/x86/platform/efi/efi-bgrt.c | 2 | ||||
-rw-r--r-- | arch/x86/platform/iris/iris.c | 67 | ||||
-rw-r--r-- | arch/x86/platform/mrst/mrst.c | 2 | ||||
-rw-r--r-- | arch/x86/platform/olpc/olpc-xo1-pm.c | 8 | ||||
-rw-r--r-- | arch/x86/platform/olpc/olpc-xo1-sci.c | 18 | ||||
-rw-r--r-- | arch/x86/platform/scx200/scx200_32.c | 6 |
7 files changed, 103 insertions, 27 deletions
diff --git a/arch/x86/platform/ce4100/ce4100.c b/arch/x86/platform/ce4100/ce4100.c index 4c61b52191eb..f8ab4945892e 100644 --- a/arch/x86/platform/ce4100/ce4100.c +++ b/arch/x86/platform/ce4100/ce4100.c | |||
@@ -21,12 +21,25 @@ | |||
21 | #include <asm/i8259.h> | 21 | #include <asm/i8259.h> |
22 | #include <asm/io.h> | 22 | #include <asm/io.h> |
23 | #include <asm/io_apic.h> | 23 | #include <asm/io_apic.h> |
24 | #include <asm/emergency-restart.h> | ||
24 | 25 | ||
25 | static int ce4100_i8042_detect(void) | 26 | static int ce4100_i8042_detect(void) |
26 | { | 27 | { |
27 | return 0; | 28 | return 0; |
28 | } | 29 | } |
29 | 30 | ||
31 | /* | ||
32 | * The CE4100 platform has an internal 8051 Microcontroller which is | ||
33 | * responsible for signaling to the external Power Management Unit the | ||
34 | * intention to reset, reboot or power off the system. This 8051 device has | ||
35 | * its command register mapped at I/O port 0xcf9 and the value 0x4 is used | ||
36 | * to power off the system. | ||
37 | */ | ||
38 | static void ce4100_power_off(void) | ||
39 | { | ||
40 | outb(0x4, 0xcf9); | ||
41 | } | ||
42 | |||
30 | #ifdef CONFIG_SERIAL_8250 | 43 | #ifdef CONFIG_SERIAL_8250 |
31 | 44 | ||
32 | static unsigned int mem_serial_in(struct uart_port *p, int offset) | 45 | static unsigned int mem_serial_in(struct uart_port *p, int offset) |
@@ -92,8 +105,11 @@ static void ce4100_serial_fixup(int port, struct uart_port *up, | |||
92 | up->membase = | 105 | up->membase = |
93 | (void __iomem *)__fix_to_virt(FIX_EARLYCON_MEM_BASE); | 106 | (void __iomem *)__fix_to_virt(FIX_EARLYCON_MEM_BASE); |
94 | up->membase += up->mapbase & ~PAGE_MASK; | 107 | up->membase += up->mapbase & ~PAGE_MASK; |
108 | up->mapbase += port * 0x100; | ||
109 | up->membase += port * 0x100; | ||
95 | up->iotype = UPIO_MEM32; | 110 | up->iotype = UPIO_MEM32; |
96 | up->regshift = 2; | 111 | up->regshift = 2; |
112 | up->irq = 4; | ||
97 | } | 113 | } |
98 | #endif | 114 | #endif |
99 | up->iobase = 0; | 115 | up->iobase = 0; |
@@ -139,8 +155,19 @@ void __init x86_ce4100_early_setup(void) | |||
139 | x86_init.mpparse.find_smp_config = x86_init_noop; | 155 | x86_init.mpparse.find_smp_config = x86_init_noop; |
140 | x86_init.pci.init = ce4100_pci_init; | 156 | x86_init.pci.init = ce4100_pci_init; |
141 | 157 | ||
158 | /* | ||
159 | * By default, the reboot method is ACPI which is supported by the | ||
160 | * CE4100 bootloader CEFDK using FADT.ResetReg Address and ResetValue | ||
161 | * the bootloader will however issue a system power off instead of | ||
162 | * reboot. By using BOOT_KBD we ensure proper system reboot as | ||
163 | * expected. | ||
164 | */ | ||
165 | reboot_type = BOOT_KBD; | ||
166 | |||
142 | #ifdef CONFIG_X86_IO_APIC | 167 | #ifdef CONFIG_X86_IO_APIC |
143 | x86_init.pci.init_irq = sdv_pci_init; | 168 | x86_init.pci.init_irq = sdv_pci_init; |
144 | x86_init.mpparse.setup_ioapic_ids = setup_ioapic_ids_from_mpc_nocheck; | 169 | x86_init.mpparse.setup_ioapic_ids = setup_ioapic_ids_from_mpc_nocheck; |
145 | #endif | 170 | #endif |
171 | |||
172 | pm_power_off = ce4100_power_off; | ||
146 | } | 173 | } |
diff --git a/arch/x86/platform/efi/efi-bgrt.c b/arch/x86/platform/efi/efi-bgrt.c index f6a0c1b8e518..d9c1b95af17c 100644 --- a/arch/x86/platform/efi/efi-bgrt.c +++ b/arch/x86/platform/efi/efi-bgrt.c | |||
@@ -39,6 +39,8 @@ void efi_bgrt_init(void) | |||
39 | if (ACPI_FAILURE(status)) | 39 | if (ACPI_FAILURE(status)) |
40 | return; | 40 | return; |
41 | 41 | ||
42 | if (bgrt_tab->header.length < sizeof(*bgrt_tab)) | ||
43 | return; | ||
42 | if (bgrt_tab->version != 1) | 44 | if (bgrt_tab->version != 1) |
43 | return; | 45 | return; |
44 | if (bgrt_tab->image_type != 0 || !bgrt_tab->image_address) | 46 | if (bgrt_tab->image_type != 0 || !bgrt_tab->image_address) |
diff --git a/arch/x86/platform/iris/iris.c b/arch/x86/platform/iris/iris.c index 5917eb56b313..e6cb80f620af 100644 --- a/arch/x86/platform/iris/iris.c +++ b/arch/x86/platform/iris/iris.c | |||
@@ -23,6 +23,7 @@ | |||
23 | 23 | ||
24 | #include <linux/moduleparam.h> | 24 | #include <linux/moduleparam.h> |
25 | #include <linux/module.h> | 25 | #include <linux/module.h> |
26 | #include <linux/platform_device.h> | ||
26 | #include <linux/kernel.h> | 27 | #include <linux/kernel.h> |
27 | #include <linux/errno.h> | 28 | #include <linux/errno.h> |
28 | #include <linux/delay.h> | 29 | #include <linux/delay.h> |
@@ -62,29 +63,75 @@ static void iris_power_off(void) | |||
62 | * by reading its input port and seeing whether the read value is | 63 | * by reading its input port and seeing whether the read value is |
63 | * meaningful. | 64 | * meaningful. |
64 | */ | 65 | */ |
65 | static int iris_init(void) | 66 | static int iris_probe(struct platform_device *pdev) |
66 | { | 67 | { |
67 | unsigned char status; | 68 | unsigned char status = inb(IRIS_GIO_INPUT); |
68 | if (force != 1) { | ||
69 | printk(KERN_ERR "The force parameter has not been set to 1 so the Iris poweroff handler will not be installed.\n"); | ||
70 | return -ENODEV; | ||
71 | } | ||
72 | status = inb(IRIS_GIO_INPUT); | ||
73 | if (status == IRIS_GIO_NODEV) { | 69 | if (status == IRIS_GIO_NODEV) { |
74 | printk(KERN_ERR "This machine does not seem to be an Iris. Power_off handler not installed.\n"); | 70 | printk(KERN_ERR "This machine does not seem to be an Iris. " |
71 | "Power off handler not installed.\n"); | ||
75 | return -ENODEV; | 72 | return -ENODEV; |
76 | } | 73 | } |
77 | old_pm_power_off = pm_power_off; | 74 | old_pm_power_off = pm_power_off; |
78 | pm_power_off = &iris_power_off; | 75 | pm_power_off = &iris_power_off; |
79 | printk(KERN_INFO "Iris power_off handler installed.\n"); | 76 | printk(KERN_INFO "Iris power_off handler installed.\n"); |
80 | |||
81 | return 0; | 77 | return 0; |
82 | } | 78 | } |
83 | 79 | ||
84 | static void iris_exit(void) | 80 | static int iris_remove(struct platform_device *pdev) |
85 | { | 81 | { |
86 | pm_power_off = old_pm_power_off; | 82 | pm_power_off = old_pm_power_off; |
87 | printk(KERN_INFO "Iris power_off handler uninstalled.\n"); | 83 | printk(KERN_INFO "Iris power_off handler uninstalled.\n"); |
84 | return 0; | ||
85 | } | ||
86 | |||
87 | static struct platform_driver iris_driver = { | ||
88 | .driver = { | ||
89 | .name = "iris", | ||
90 | .owner = THIS_MODULE, | ||
91 | }, | ||
92 | .probe = iris_probe, | ||
93 | .remove = iris_remove, | ||
94 | }; | ||
95 | |||
96 | static struct resource iris_resources[] = { | ||
97 | { | ||
98 | .start = IRIS_GIO_BASE, | ||
99 | .end = IRIS_GIO_OUTPUT, | ||
100 | .flags = IORESOURCE_IO, | ||
101 | .name = "address" | ||
102 | } | ||
103 | }; | ||
104 | |||
105 | static struct platform_device *iris_device; | ||
106 | |||
107 | static int iris_init(void) | ||
108 | { | ||
109 | int ret; | ||
110 | if (force != 1) { | ||
111 | printk(KERN_ERR "The force parameter has not been set to 1." | ||
112 | " The Iris poweroff handler will not be installed.\n"); | ||
113 | return -ENODEV; | ||
114 | } | ||
115 | ret = platform_driver_register(&iris_driver); | ||
116 | if (ret < 0) { | ||
117 | printk(KERN_ERR "Failed to register iris platform driver: %d\n", | ||
118 | ret); | ||
119 | return ret; | ||
120 | } | ||
121 | iris_device = platform_device_register_simple("iris", (-1), | ||
122 | iris_resources, ARRAY_SIZE(iris_resources)); | ||
123 | if (IS_ERR(iris_device)) { | ||
124 | printk(KERN_ERR "Failed to register iris platform device\n"); | ||
125 | platform_driver_unregister(&iris_driver); | ||
126 | return PTR_ERR(iris_device); | ||
127 | } | ||
128 | return 0; | ||
129 | } | ||
130 | |||
131 | static void iris_exit(void) | ||
132 | { | ||
133 | platform_device_unregister(iris_device); | ||
134 | platform_driver_unregister(&iris_driver); | ||
88 | } | 135 | } |
89 | 136 | ||
90 | module_init(iris_init); | 137 | module_init(iris_init); |
diff --git a/arch/x86/platform/mrst/mrst.c b/arch/x86/platform/mrst/mrst.c index fd41a9262d65..e31bcd8f2eee 100644 --- a/arch/x86/platform/mrst/mrst.c +++ b/arch/x86/platform/mrst/mrst.c | |||
@@ -782,7 +782,7 @@ BLOCKING_NOTIFIER_HEAD(intel_scu_notifier); | |||
782 | EXPORT_SYMBOL_GPL(intel_scu_notifier); | 782 | EXPORT_SYMBOL_GPL(intel_scu_notifier); |
783 | 783 | ||
784 | /* Called by IPC driver */ | 784 | /* Called by IPC driver */ |
785 | void __devinit intel_scu_devices_create(void) | 785 | void intel_scu_devices_create(void) |
786 | { | 786 | { |
787 | int i; | 787 | int i; |
788 | 788 | ||
diff --git a/arch/x86/platform/olpc/olpc-xo1-pm.c b/arch/x86/platform/olpc/olpc-xo1-pm.c index d75582d1aa55..ff0174dda810 100644 --- a/arch/x86/platform/olpc/olpc-xo1-pm.c +++ b/arch/x86/platform/olpc/olpc-xo1-pm.c | |||
@@ -121,7 +121,7 @@ static const struct platform_suspend_ops xo1_suspend_ops = { | |||
121 | .enter = xo1_power_state_enter, | 121 | .enter = xo1_power_state_enter, |
122 | }; | 122 | }; |
123 | 123 | ||
124 | static int __devinit xo1_pm_probe(struct platform_device *pdev) | 124 | static int xo1_pm_probe(struct platform_device *pdev) |
125 | { | 125 | { |
126 | struct resource *res; | 126 | struct resource *res; |
127 | int err; | 127 | int err; |
@@ -154,7 +154,7 @@ static int __devinit xo1_pm_probe(struct platform_device *pdev) | |||
154 | return 0; | 154 | return 0; |
155 | } | 155 | } |
156 | 156 | ||
157 | static int __devexit xo1_pm_remove(struct platform_device *pdev) | 157 | static int xo1_pm_remove(struct platform_device *pdev) |
158 | { | 158 | { |
159 | mfd_cell_disable(pdev); | 159 | mfd_cell_disable(pdev); |
160 | 160 | ||
@@ -173,7 +173,7 @@ static struct platform_driver cs5535_pms_driver = { | |||
173 | .owner = THIS_MODULE, | 173 | .owner = THIS_MODULE, |
174 | }, | 174 | }, |
175 | .probe = xo1_pm_probe, | 175 | .probe = xo1_pm_probe, |
176 | .remove = __devexit_p(xo1_pm_remove), | 176 | .remove = xo1_pm_remove, |
177 | }; | 177 | }; |
178 | 178 | ||
179 | static struct platform_driver cs5535_acpi_driver = { | 179 | static struct platform_driver cs5535_acpi_driver = { |
@@ -182,7 +182,7 @@ static struct platform_driver cs5535_acpi_driver = { | |||
182 | .owner = THIS_MODULE, | 182 | .owner = THIS_MODULE, |
183 | }, | 183 | }, |
184 | .probe = xo1_pm_probe, | 184 | .probe = xo1_pm_probe, |
185 | .remove = __devexit_p(xo1_pm_remove), | 185 | .remove = xo1_pm_remove, |
186 | }; | 186 | }; |
187 | 187 | ||
188 | static int __init xo1_pm_init(void) | 188 | static int __init xo1_pm_init(void) |
diff --git a/arch/x86/platform/olpc/olpc-xo1-sci.c b/arch/x86/platform/olpc/olpc-xo1-sci.c index 63d4aa40956e..74704be7b1fe 100644 --- a/arch/x86/platform/olpc/olpc-xo1-sci.c +++ b/arch/x86/platform/olpc/olpc-xo1-sci.c | |||
@@ -309,7 +309,7 @@ static int xo1_sci_resume(struct platform_device *pdev) | |||
309 | return 0; | 309 | return 0; |
310 | } | 310 | } |
311 | 311 | ||
312 | static int __devinit setup_sci_interrupt(struct platform_device *pdev) | 312 | static int setup_sci_interrupt(struct platform_device *pdev) |
313 | { | 313 | { |
314 | u32 lo, hi; | 314 | u32 lo, hi; |
315 | u32 sts; | 315 | u32 sts; |
@@ -351,7 +351,7 @@ static int __devinit setup_sci_interrupt(struct platform_device *pdev) | |||
351 | return r; | 351 | return r; |
352 | } | 352 | } |
353 | 353 | ||
354 | static int __devinit setup_ec_sci(void) | 354 | static int setup_ec_sci(void) |
355 | { | 355 | { |
356 | int r; | 356 | int r; |
357 | 357 | ||
@@ -395,7 +395,7 @@ static void free_ec_sci(void) | |||
395 | gpio_free(OLPC_GPIO_ECSCI); | 395 | gpio_free(OLPC_GPIO_ECSCI); |
396 | } | 396 | } |
397 | 397 | ||
398 | static int __devinit setup_lid_events(void) | 398 | static int setup_lid_events(void) |
399 | { | 399 | { |
400 | int r; | 400 | int r; |
401 | 401 | ||
@@ -432,7 +432,7 @@ static void free_lid_events(void) | |||
432 | gpio_free(OLPC_GPIO_LID); | 432 | gpio_free(OLPC_GPIO_LID); |
433 | } | 433 | } |
434 | 434 | ||
435 | static int __devinit setup_power_button(struct platform_device *pdev) | 435 | static int setup_power_button(struct platform_device *pdev) |
436 | { | 436 | { |
437 | int r; | 437 | int r; |
438 | 438 | ||
@@ -463,7 +463,7 @@ static void free_power_button(void) | |||
463 | input_free_device(power_button_idev); | 463 | input_free_device(power_button_idev); |
464 | } | 464 | } |
465 | 465 | ||
466 | static int __devinit setup_ebook_switch(struct platform_device *pdev) | 466 | static int setup_ebook_switch(struct platform_device *pdev) |
467 | { | 467 | { |
468 | int r; | 468 | int r; |
469 | 469 | ||
@@ -494,7 +494,7 @@ static void free_ebook_switch(void) | |||
494 | input_free_device(ebook_switch_idev); | 494 | input_free_device(ebook_switch_idev); |
495 | } | 495 | } |
496 | 496 | ||
497 | static int __devinit setup_lid_switch(struct platform_device *pdev) | 497 | static int setup_lid_switch(struct platform_device *pdev) |
498 | { | 498 | { |
499 | int r; | 499 | int r; |
500 | 500 | ||
@@ -538,7 +538,7 @@ static void free_lid_switch(void) | |||
538 | input_free_device(lid_switch_idev); | 538 | input_free_device(lid_switch_idev); |
539 | } | 539 | } |
540 | 540 | ||
541 | static int __devinit xo1_sci_probe(struct platform_device *pdev) | 541 | static int xo1_sci_probe(struct platform_device *pdev) |
542 | { | 542 | { |
543 | struct resource *res; | 543 | struct resource *res; |
544 | int r; | 544 | int r; |
@@ -613,7 +613,7 @@ err_ebook: | |||
613 | return r; | 613 | return r; |
614 | } | 614 | } |
615 | 615 | ||
616 | static int __devexit xo1_sci_remove(struct platform_device *pdev) | 616 | static int xo1_sci_remove(struct platform_device *pdev) |
617 | { | 617 | { |
618 | mfd_cell_disable(pdev); | 618 | mfd_cell_disable(pdev); |
619 | free_irq(sci_irq, pdev); | 619 | free_irq(sci_irq, pdev); |
@@ -632,7 +632,7 @@ static struct platform_driver xo1_sci_driver = { | |||
632 | .name = "olpc-xo1-sci-acpi", | 632 | .name = "olpc-xo1-sci-acpi", |
633 | }, | 633 | }, |
634 | .probe = xo1_sci_probe, | 634 | .probe = xo1_sci_probe, |
635 | .remove = __devexit_p(xo1_sci_remove), | 635 | .remove = xo1_sci_remove, |
636 | .suspend = xo1_sci_suspend, | 636 | .suspend = xo1_sci_suspend, |
637 | .resume = xo1_sci_resume, | 637 | .resume = xo1_sci_resume, |
638 | }; | 638 | }; |
diff --git a/arch/x86/platform/scx200/scx200_32.c b/arch/x86/platform/scx200/scx200_32.c index 7a9ad30d6c9f..3dc9aee41d91 100644 --- a/arch/x86/platform/scx200/scx200_32.c +++ b/arch/x86/platform/scx200/scx200_32.c | |||
@@ -35,7 +35,7 @@ static struct pci_device_id scx200_tbl[] = { | |||
35 | }; | 35 | }; |
36 | MODULE_DEVICE_TABLE(pci,scx200_tbl); | 36 | MODULE_DEVICE_TABLE(pci,scx200_tbl); |
37 | 37 | ||
38 | static int __devinit scx200_probe(struct pci_dev *, const struct pci_device_id *); | 38 | static int scx200_probe(struct pci_dev *, const struct pci_device_id *); |
39 | 39 | ||
40 | static struct pci_driver scx200_pci_driver = { | 40 | static struct pci_driver scx200_pci_driver = { |
41 | .name = "scx200", | 41 | .name = "scx200", |
@@ -45,7 +45,7 @@ static struct pci_driver scx200_pci_driver = { | |||
45 | 45 | ||
46 | static DEFINE_MUTEX(scx200_gpio_config_lock); | 46 | static DEFINE_MUTEX(scx200_gpio_config_lock); |
47 | 47 | ||
48 | static void __devinit scx200_init_shadow(void) | 48 | static void scx200_init_shadow(void) |
49 | { | 49 | { |
50 | int bank; | 50 | int bank; |
51 | 51 | ||
@@ -54,7 +54,7 @@ static void __devinit scx200_init_shadow(void) | |||
54 | scx200_gpio_shadow[bank] = inl(scx200_gpio_base + 0x10 * bank); | 54 | scx200_gpio_shadow[bank] = inl(scx200_gpio_base + 0x10 * bank); |
55 | } | 55 | } |
56 | 56 | ||
57 | static int __devinit scx200_probe(struct pci_dev *pdev, const struct pci_device_id *ent) | 57 | static int scx200_probe(struct pci_dev *pdev, const struct pci_device_id *ent) |
58 | { | 58 | { |
59 | unsigned base; | 59 | unsigned base; |
60 | 60 | ||