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>
This commit is contained in:
@@ -21,12 +21,25 @@
|
||||
#include <asm/i8259.h>
|
||||
#include <asm/io.h>
|
||||
#include <asm/io_apic.h>
|
||||
#include <asm/emergency-restart.h>
|
||||
|
||||
static int ce4100_i8042_detect(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* The CE4100 platform has an internal 8051 Microcontroller which is
|
||||
* responsible for signaling to the external Power Management Unit the
|
||||
* intention to reset, reboot or power off the system. This 8051 device has
|
||||
* its command register mapped at I/O port 0xcf9 and the value 0x4 is used
|
||||
* to power off the system.
|
||||
*/
|
||||
static void ce4100_power_off(void)
|
||||
{
|
||||
outb(0x4, 0xcf9);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SERIAL_8250
|
||||
|
||||
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,
|
||||
up->membase =
|
||||
(void __iomem *)__fix_to_virt(FIX_EARLYCON_MEM_BASE);
|
||||
up->membase += up->mapbase & ~PAGE_MASK;
|
||||
up->mapbase += port * 0x100;
|
||||
up->membase += port * 0x100;
|
||||
up->iotype = UPIO_MEM32;
|
||||
up->regshift = 2;
|
||||
up->irq = 4;
|
||||
}
|
||||
#endif
|
||||
up->iobase = 0;
|
||||
@@ -139,8 +155,19 @@ void __init x86_ce4100_early_setup(void)
|
||||
x86_init.mpparse.find_smp_config = x86_init_noop;
|
||||
x86_init.pci.init = ce4100_pci_init;
|
||||
|
||||
/*
|
||||
* By default, the reboot method is ACPI which is supported by the
|
||||
* CE4100 bootloader CEFDK using FADT.ResetReg Address and ResetValue
|
||||
* the bootloader will however issue a system power off instead of
|
||||
* reboot. By using BOOT_KBD we ensure proper system reboot as
|
||||
* expected.
|
||||
*/
|
||||
reboot_type = BOOT_KBD;
|
||||
|
||||
#ifdef CONFIG_X86_IO_APIC
|
||||
x86_init.pci.init_irq = sdv_pci_init;
|
||||
x86_init.mpparse.setup_ioapic_ids = setup_ioapic_ids_from_mpc_nocheck;
|
||||
#endif
|
||||
|
||||
pm_power_off = ce4100_power_off;
|
||||
}
|
||||
|
@@ -39,6 +39,8 @@ void efi_bgrt_init(void)
|
||||
if (ACPI_FAILURE(status))
|
||||
return;
|
||||
|
||||
if (bgrt_tab->header.length < sizeof(*bgrt_tab))
|
||||
return;
|
||||
if (bgrt_tab->version != 1)
|
||||
return;
|
||||
if (bgrt_tab->image_type != 0 || !bgrt_tab->image_address)
|
||||
|
@@ -23,6 +23,7 @@
|
||||
|
||||
#include <linux/moduleparam.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/delay.h>
|
||||
@@ -62,29 +63,75 @@ static void iris_power_off(void)
|
||||
* by reading its input port and seeing whether the read value is
|
||||
* meaningful.
|
||||
*/
|
||||
static int iris_init(void)
|
||||
static int iris_probe(struct platform_device *pdev)
|
||||
{
|
||||
unsigned char status;
|
||||
if (force != 1) {
|
||||
printk(KERN_ERR "The force parameter has not been set to 1 so the Iris poweroff handler will not be installed.\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
status = inb(IRIS_GIO_INPUT);
|
||||
unsigned char status = inb(IRIS_GIO_INPUT);
|
||||
if (status == IRIS_GIO_NODEV) {
|
||||
printk(KERN_ERR "This machine does not seem to be an Iris. Power_off handler not installed.\n");
|
||||
printk(KERN_ERR "This machine does not seem to be an Iris. "
|
||||
"Power off handler not installed.\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
old_pm_power_off = pm_power_off;
|
||||
pm_power_off = &iris_power_off;
|
||||
printk(KERN_INFO "Iris power_off handler installed.\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int iris_remove(struct platform_device *pdev)
|
||||
{
|
||||
pm_power_off = old_pm_power_off;
|
||||
printk(KERN_INFO "Iris power_off handler uninstalled.\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct platform_driver iris_driver = {
|
||||
.driver = {
|
||||
.name = "iris",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
.probe = iris_probe,
|
||||
.remove = iris_remove,
|
||||
};
|
||||
|
||||
static struct resource iris_resources[] = {
|
||||
{
|
||||
.start = IRIS_GIO_BASE,
|
||||
.end = IRIS_GIO_OUTPUT,
|
||||
.flags = IORESOURCE_IO,
|
||||
.name = "address"
|
||||
}
|
||||
};
|
||||
|
||||
static struct platform_device *iris_device;
|
||||
|
||||
static int iris_init(void)
|
||||
{
|
||||
int ret;
|
||||
if (force != 1) {
|
||||
printk(KERN_ERR "The force parameter has not been set to 1."
|
||||
" The Iris poweroff handler will not be installed.\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
ret = platform_driver_register(&iris_driver);
|
||||
if (ret < 0) {
|
||||
printk(KERN_ERR "Failed to register iris platform driver: %d\n",
|
||||
ret);
|
||||
return ret;
|
||||
}
|
||||
iris_device = platform_device_register_simple("iris", (-1),
|
||||
iris_resources, ARRAY_SIZE(iris_resources));
|
||||
if (IS_ERR(iris_device)) {
|
||||
printk(KERN_ERR "Failed to register iris platform device\n");
|
||||
platform_driver_unregister(&iris_driver);
|
||||
return PTR_ERR(iris_device);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void iris_exit(void)
|
||||
{
|
||||
pm_power_off = old_pm_power_off;
|
||||
printk(KERN_INFO "Iris power_off handler uninstalled.\n");
|
||||
platform_device_unregister(iris_device);
|
||||
platform_driver_unregister(&iris_driver);
|
||||
}
|
||||
|
||||
module_init(iris_init);
|
||||
|
@@ -782,7 +782,7 @@ BLOCKING_NOTIFIER_HEAD(intel_scu_notifier);
|
||||
EXPORT_SYMBOL_GPL(intel_scu_notifier);
|
||||
|
||||
/* Called by IPC driver */
|
||||
void __devinit intel_scu_devices_create(void)
|
||||
void intel_scu_devices_create(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
|
@@ -121,7 +121,7 @@ static const struct platform_suspend_ops xo1_suspend_ops = {
|
||||
.enter = xo1_power_state_enter,
|
||||
};
|
||||
|
||||
static int __devinit xo1_pm_probe(struct platform_device *pdev)
|
||||
static int xo1_pm_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct resource *res;
|
||||
int err;
|
||||
@@ -154,7 +154,7 @@ static int __devinit xo1_pm_probe(struct platform_device *pdev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int __devexit xo1_pm_remove(struct platform_device *pdev)
|
||||
static int xo1_pm_remove(struct platform_device *pdev)
|
||||
{
|
||||
mfd_cell_disable(pdev);
|
||||
|
||||
@@ -173,7 +173,7 @@ static struct platform_driver cs5535_pms_driver = {
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
.probe = xo1_pm_probe,
|
||||
.remove = __devexit_p(xo1_pm_remove),
|
||||
.remove = xo1_pm_remove,
|
||||
};
|
||||
|
||||
static struct platform_driver cs5535_acpi_driver = {
|
||||
@@ -182,7 +182,7 @@ static struct platform_driver cs5535_acpi_driver = {
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
.probe = xo1_pm_probe,
|
||||
.remove = __devexit_p(xo1_pm_remove),
|
||||
.remove = xo1_pm_remove,
|
||||
};
|
||||
|
||||
static int __init xo1_pm_init(void)
|
||||
|
@@ -309,7 +309,7 @@ static int xo1_sci_resume(struct platform_device *pdev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int __devinit setup_sci_interrupt(struct platform_device *pdev)
|
||||
static int setup_sci_interrupt(struct platform_device *pdev)
|
||||
{
|
||||
u32 lo, hi;
|
||||
u32 sts;
|
||||
@@ -351,7 +351,7 @@ static int __devinit setup_sci_interrupt(struct platform_device *pdev)
|
||||
return r;
|
||||
}
|
||||
|
||||
static int __devinit setup_ec_sci(void)
|
||||
static int setup_ec_sci(void)
|
||||
{
|
||||
int r;
|
||||
|
||||
@@ -395,7 +395,7 @@ static void free_ec_sci(void)
|
||||
gpio_free(OLPC_GPIO_ECSCI);
|
||||
}
|
||||
|
||||
static int __devinit setup_lid_events(void)
|
||||
static int setup_lid_events(void)
|
||||
{
|
||||
int r;
|
||||
|
||||
@@ -432,7 +432,7 @@ static void free_lid_events(void)
|
||||
gpio_free(OLPC_GPIO_LID);
|
||||
}
|
||||
|
||||
static int __devinit setup_power_button(struct platform_device *pdev)
|
||||
static int setup_power_button(struct platform_device *pdev)
|
||||
{
|
||||
int r;
|
||||
|
||||
@@ -463,7 +463,7 @@ static void free_power_button(void)
|
||||
input_free_device(power_button_idev);
|
||||
}
|
||||
|
||||
static int __devinit setup_ebook_switch(struct platform_device *pdev)
|
||||
static int setup_ebook_switch(struct platform_device *pdev)
|
||||
{
|
||||
int r;
|
||||
|
||||
@@ -494,7 +494,7 @@ static void free_ebook_switch(void)
|
||||
input_free_device(ebook_switch_idev);
|
||||
}
|
||||
|
||||
static int __devinit setup_lid_switch(struct platform_device *pdev)
|
||||
static int setup_lid_switch(struct platform_device *pdev)
|
||||
{
|
||||
int r;
|
||||
|
||||
@@ -538,7 +538,7 @@ static void free_lid_switch(void)
|
||||
input_free_device(lid_switch_idev);
|
||||
}
|
||||
|
||||
static int __devinit xo1_sci_probe(struct platform_device *pdev)
|
||||
static int xo1_sci_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct resource *res;
|
||||
int r;
|
||||
@@ -613,7 +613,7 @@ err_ebook:
|
||||
return r;
|
||||
}
|
||||
|
||||
static int __devexit xo1_sci_remove(struct platform_device *pdev)
|
||||
static int xo1_sci_remove(struct platform_device *pdev)
|
||||
{
|
||||
mfd_cell_disable(pdev);
|
||||
free_irq(sci_irq, pdev);
|
||||
@@ -632,7 +632,7 @@ static struct platform_driver xo1_sci_driver = {
|
||||
.name = "olpc-xo1-sci-acpi",
|
||||
},
|
||||
.probe = xo1_sci_probe,
|
||||
.remove = __devexit_p(xo1_sci_remove),
|
||||
.remove = xo1_sci_remove,
|
||||
.suspend = xo1_sci_suspend,
|
||||
.resume = xo1_sci_resume,
|
||||
};
|
||||
|
@@ -35,7 +35,7 @@ static struct pci_device_id scx200_tbl[] = {
|
||||
};
|
||||
MODULE_DEVICE_TABLE(pci,scx200_tbl);
|
||||
|
||||
static int __devinit scx200_probe(struct pci_dev *, const struct pci_device_id *);
|
||||
static int scx200_probe(struct pci_dev *, const struct pci_device_id *);
|
||||
|
||||
static struct pci_driver scx200_pci_driver = {
|
||||
.name = "scx200",
|
||||
@@ -45,7 +45,7 @@ static struct pci_driver scx200_pci_driver = {
|
||||
|
||||
static DEFINE_MUTEX(scx200_gpio_config_lock);
|
||||
|
||||
static void __devinit scx200_init_shadow(void)
|
||||
static void scx200_init_shadow(void)
|
||||
{
|
||||
int bank;
|
||||
|
||||
@@ -54,7 +54,7 @@ static void __devinit scx200_init_shadow(void)
|
||||
scx200_gpio_shadow[bank] = inl(scx200_gpio_base + 0x10 * bank);
|
||||
}
|
||||
|
||||
static int __devinit scx200_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
static int scx200_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
{
|
||||
unsigned base;
|
||||
|
||||
|
مرجع در شماره جدید
Block a user