| // SPDX-License-Identifier: GPL-2.0-only |
| /* |
| * Intel CE4100 platform specific setup code |
| * |
| * (C) Copyright 2010 Intel Corporation |
| */ |
| #include <linux/init.h> |
| #include <linux/reboot.h> |
| |
| #include <asm/ce4100.h> |
| #include <asm/prom.h> |
| #include <asm/setup.h> |
| #include <asm/io.h> |
| |
| /* |
| * 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); |
| } |
| |
| static void __init sdv_arch_setup(void) |
| { |
| sdv_serial_fixup(); |
| } |
| |
| static void sdv_pci_init(void) |
| { |
| x86_of_pci_init(); |
| } |
| |
| /* |
| * CE4100 specific x86_init function overrides and early setup |
| * calls. |
| */ |
| void __init x86_ce4100_early_setup(void) |
| { |
| x86_init.oem.arch_setup = sdv_arch_setup; |
| x86_init.resources.probe_roms = x86_init_noop; |
| x86_init.mpparse.find_mptable = x86_init_noop; |
| x86_init.mpparse.early_parse_smp_cfg = x86_init_noop; |
| x86_init.pci.init = ce4100_pci_init; |
| x86_init.pci.init_irq = sdv_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; |
| |
| pm_power_off = ce4100_power_off; |
| } |