x86/platform changes for v2.6.38
Subsystems (7)
Linus,
Please pull the latest x86-platform-for-linus git tree from:
git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip.git x86-platform-for-linus
out-of-topic modifications in x86-platform-for-linus:
-----------------------------------------------------
drivers/platform/x86/intel_scu_ipc.c# 1da4b1c: x86/mrst: Add SFI platform device
drivers/rtc/Kconfig # 0146f26: rtc: Add drivers/rtc/rtc-mrst.c
drivers/rtc/Makefile # 0146f26: rtc: Add drivers/rtc/rtc-mrst.c
drivers/rtc/rtc-mrst.c # d3e1884: x86, mrst: Add explanation for us
# 0146f26: rtc: Add drivers/rtc/rtc-mrst.cinclude/linux/sfi.h # 1da4b1c: x86/mrst: Add SFI platform device
Thanks,
Ingo
------------------>
Alan Cox (1):
x86, mrst: The shutdown for MRST requires the SCU IPC mechanism
Alek Du (1):
x86: mrst: Add Moorestown specific reboot/shutdown support
Dirk Brandewie (3):
ce4100: Add PCI register emulation for CE4100
x86: Ce4100: Add reboot_fixup() for CE4100
ce4100: Add errata fixes for UART on CE4100
Feng Tang (7):
x86/mrst: Add SFI platform device parsing code
x86: mrst: Add vrtc driver which serves as a wall clock device
rtc: Add drivers/rtc/rtc-mrst.c
x86: mrst: Set vRTC's IRQ to level trigger type
x86, mrst: Add explanation for using 1960 as the year offset for vrtc x86, apbt: Setup affinity for apb timers acting as per-cpu timer x86, earlyprintk: Move mrst early console to platform/ and fix a typo
Jacob Pan (1):
x86: mrst: Parse SFI timer table for all timer configs
Randy Dunlap (1):
x86, mrst: Fix dependencies of "select INTEL_SCU_IPC"
Shérab (1):
x86/platform: Add Eurobraille/Iris power off support
Thomas Gleixner (2):
x86: Add CE4100 platform support
x86: platform: Move iris to x86/platform where it belongs
Vasiliy Kulikov (1):
x86, mrst: Check platform_device_register() return code
Vinod Koul (1):
x86: mrst: Add audio driver bindings
Documentation/x86/boot.txt | 1 +
arch/x86/Kconfig | 29 +
arch/x86/include/asm/bootparam.h | 1 +
arch/x86/include/asm/fixmap.h | 4 +
arch/x86/include/asm/mrst-vrtc.h | 9 +
arch/x86/include/asm/mrst.h | 14 +-
arch/x86/include/asm/setup.h | 6 +
arch/x86/kernel/Makefile | 1 -
arch/x86/kernel/apb_timer.c | 1 +
arch/x86/kernel/early_printk.c | 3 +-
arch/x86/kernel/head32.c | 3 +
arch/x86/kernel/reboot_fixups_32.c | 16 +
arch/x86/pci/Makefile | 1 +
arch/x86/pci/ce4100.c | 315 +++++++++++
arch/x86/platform/Makefile | 2 +
arch/x86/platform/ce4100/Makefile | 1 +
arch/x86/platform/ce4100/ce4100.c | 132 +++++
arch/x86/platform/iris/Makefile | 1 +
arch/x86/platform/iris/iris.c | 91 +++
arch/x86/platform/mrst/Makefile | 2 +
.../{kernel => platform/mrst}/early_printk_mrst.c | 0
arch/x86/platform/mrst/mrst.c | 546 ++++++++++++++++++-
arch/x86/platform/mrst/vrtc.c | 165 ++++++
drivers/platform/x86/intel_scu_ipc.c | 5 +
drivers/rtc/Kconfig | 12 +
drivers/rtc/Makefile | 1 +
drivers/rtc/rtc-mrst.c | 582 ++++++++++++++++++++
include/linux/sfi.h | 8 +-
28 files changed, 1934 insertions(+), 18 deletions(-)
create mode 100644 arch/x86/include/asm/mrst-vrtc.h
create mode 100644 arch/x86/pci/ce4100.c
create mode 100644 arch/x86/platform/ce4100/Makefile
create mode 100644 arch/x86/platform/ce4100/ce4100.c
create mode 100644 arch/x86/platform/iris/Makefile
create mode 100644 arch/x86/platform/iris/iris.c
rename arch/x86/{kernel => platform/mrst}/early_printk_mrst.c (100%)
create mode 100644 arch/x86/platform/mrst/vrtc.c
create mode 100644 drivers/rtc/rtc-mrst.cDocumentation/x86/boot.txt +1 -0
@@ -600,6 +600,7 @@ Protocol: 2.07+ 0x00000001 lguest 0x00000002 Xen 0x00000003 Moorestown MID + 0x00000004 CE4100 TV Platform Field name: hardware_subarch_data Type: write (subarch-dependent)
arch/x86/Kconfig +29 -0
@@ -377,6 +377,18 @@ config X86_ELAN If unsure, choose "PC-compatible" instead. +config X86_INTEL_CE + bool "CE4100 TV platform" + depends on PCI + depends on PCI_GODIRECT + depends on X86_32 + depends on X86_EXTENDED_PLATFORM + select X86_REBOOTFIXUPS + ---help--- + Select for the Intel CE media processor (CE4100) SOC. + This option compiles in support for the CE4100 SOC for settop + boxes and media devices. + config X86_MRST bool "Moorestown MID platform" depends on PCI
@@ -385,6 +397,10 @@ config X86_MRST depends on X86_EXTENDED_PLATFORM depends on X86_IO_APIC select APB_TIMER + select I2C + select SPI + select INTEL_SCU_IPC + select X86_PLATFORM_DEVICES ---help--- Moorestown is Intel's Low Power Intel Architecture (LPIA) based Moblin Internet Device(MID) platform. Moorestown consists of two chips:
@@ -466,6 +482,19 @@ config X86_ES7000 Support for Unisys ES7000 systems. Say 'Y' here if this kernel is supposed to run on an IA32-based Unisys ES7000 system. +config X86_32_IRIS + tristate "Eurobraille/Iris poweroff module" + depends on X86_32 + ---help--- + The Iris machines from EuroBraille do not have APM or ACPI support + to shut themselves down properly. A special I/O sequence is + needed to do so, which is what this module does at + kernel shutdown. + + This is only for Iris machines from EuroBraille. + + If unused, say N. + config SCHED_OMIT_FRAME_POINTER def_bool y prompt "Single-depth WCHAN output"
arch/x86/include/asm/bootparam.h +1 -0
@@ -124,6 +124,7 @@ enum {X86_SUBARCH_LGUEST ,X86_SUBARCH_XEN ,X86_SUBARCH_MRST , +X86_SUBARCH_CE4100 , X86_NR_SUBARCHS, };
arch/x86/include/asm/fixmap.h +4 -0
@@ -117,6 +117,10 @@ enum fixed_addresses {FIX_TEXT_POKE1 ,/* reserve 2 pages for text_poke() */ FIX_TEXT_POKE0 ,/* first page is last, because allocation is backward */ __end_of_permanent_fixed_addresses, + +#ifdef CONFIG_X86_MRST + FIX_LNW_VRTC, +#endif/* * 256 temporary boot-time mappings, used by early_ioremap(), * before ioremap() is functional.
arch/x86/include/asm/mrst-vrtc.h new file +9 -0
@@ -0,0 +1,9 @@ +#ifndef _MRST_VRTC_H +#define _MRST_VRTC_H + +extern unsigned char vrtc_cmos_read (unsigned char reg); +extern void vrtc_cmos_write (unsigned char val,unsigned char reg); +extern unsigned long vrtc_get_time (void ); +extern int vrtc_set_mmss (unsigned long nowtime); + +#endif
arch/x86/include/asm/mrst.h +13 -1
@@ -14,7 +14,9 @@#include <linux/sfi.h> extern int pci_mrst_init (void ); -int __init sfi_parse_mrtc (struct sfi_table_header *table); +extern int __init sfi_parse_mrtc (struct sfi_table_header *table); +extern int sfi_mrtc_num; +extern struct sfi_rtc_table_entry sfi_mrtc_array[];/* * Medfield is the follow-up of Moorestown, it combines two chip solution into
@@ -50,4 +52,14 @@ extern void mrst_early_console_init(void);extern struct console early_hsu_console;extern void hsu_early_console_init (void ); + +extern void intel_scu_devices_create (void ); +extern void intel_scu_devices_destroy (void ); + +/* VRTC timer */ +#define MRST_VRTC_MAP_SZ (1024) +/*#define MRST_VRTC_PGOFFSET (0xc00) */ + +extern void mrst_rtc_init (void ); +#endif /* _ASM_X86_MRST_H */
arch/x86/include/asm/setup.h +6 -0
@@ -53,6 +53,12 @@ extern void x86_mrst_early_setup(void);static inline void x86_mrst_early_setup (void ) { }#endif +#ifdef CONFIG_X86_INTEL_CE +extern void x86_ce4100_early_setup (void ); +#else +static inline void x86_ce4100_early_setup (void ) { } +#endif +#ifndef _SETUP/*
arch/x86/kernel/Makefile +0 -1
@@ -84,7 +84,6 @@ obj-$(CONFIG_DOUBLEFAULT) += doublefault_32.o obj-$(CONFIG_KGDB) += kgdb.o obj-$(CONFIG_VM86) += vm86_32.o obj-$(CONFIG_EARLY_PRINTK) += early_printk.o -obj-$(CONFIG_EARLY_PRINTK_MRST) += early_printk_mrst.o obj-$(CONFIG_HPET_TIMER) += hpet.o obj-$(CONFIG_APB_TIMER) += apb_timer.o
arch/x86/kernel/apb_timer.c +1 -0
@@ -315,6 +315,7 @@ static void apbt_setup_irq(struct apbt_dev *adev)if (system_state ==SYSTEM_BOOTING ) {irq_modify_status (adev->irq,0 ,IRQ_MOVE_PCNTXT ); +irq_set_affinity (adev->irq,cpumask_of (adev->cpu));/* APB timer irqs are set up as mp_irqs, timer is edge type */ __set_irq_handler (adev->irq, handle_edge_irq,0 ,"edge" ); if (request_irq(adev->irq, apbt_interrupt_handler,
arch/x86/kernel/early_printk.c +1 -2
@@ -240,7 +240,7 @@ static int __init setup_early_printk(char *buf)if (!strncmp (buf,"xen" ,3 ))early_console_register (&xenboot_console, keep);#endif -#ifdef CONFIG_X86_MRST_EARLY_PRINTK +#ifdef CONFIG_EARLY_PRINTK_MRST if (!strncmp (buf,"mrst" ,4 )) {mrst_early_console_init ();early_console_register (&early_mrst_console, keep);
@@ -250,7 +250,6 @@ static int __init setup_early_printk(char *buf)hsu_early_console_init (); early_console_register(&early_hsu_console, keep); } -#endif buf++; }
arch/x86/kernel/head32.c +3 -0
@@ -61,6 +61,9 @@ void __init i386_start_kernel(void)case X86_SUBARCH_MRST :x86_mrst_early_setup ();break ; +case X86_SUBARCH_CE4100 : +x86_ce4100_early_setup (); +break ;default :i386_default_early_setup ();break ;
arch/x86/kernel/reboot_fixups_32.c +16 -0
@@ -43,17 +43,33 @@ static void rdc321x_reset(struct pci_dev *dev)outb (1 ,0x92 ); } +static void ce4100_reset (struct pci_dev *dev) +{ +int i; + +for (i =0 ; i <10 ; i++) { +outb (0x2 ,0xcf9 ); +udelay (50 ); + } +} +struct device_fixup {unsigned int vendor;unsigned int device;void (*reboot_fixup)(struct pci_dev *); }; +/* +* PCI ids solely used for fixups_table go here +*/ +#define PCI_DEVICE_ID_INTEL_CE4100 0x0708 +static const struct device_fixup fixups_table[] = { {PCI_VENDOR_ID_CYRIX ,PCI_DEVICE_ID_CYRIX_5530_LEGACY , cs5530a_warm_reset }, {PCI_VENDOR_ID_AMD ,PCI_DEVICE_ID_AMD_CS5536_ISA , cs5536_warm_reset }, {PCI_VENDOR_ID_NS ,PCI_DEVICE_ID_NS_SC1100_BRIDGE , cs5530a_warm_reset }, {PCI_VENDOR_ID_RDC ,PCI_DEVICE_ID_RDC_R6030 , rdc321x_reset }, +{PCI_VENDOR_ID_INTEL ,PCI_DEVICE_ID_INTEL_CE4100 , ce4100_reset }, };/*
arch/x86/pci/Makefile +1 -0
@@ -7,6 +7,7 @@ obj-$(CONFIG_PCI_OLPC) += olpc.o obj-$(CONFIG_PCI_XEN) += xen.o obj-y += fixup.o +obj-$(CONFIG_X86_INTEL_CE) += ce4100.o obj-$(CONFIG_ACPI) += acpi.o obj-y += legacy.o irq.o
arch/x86/pci/ce4100.c new file +315 -0
315 lines not on this page · raw message
arch/x86/platform/Makefile +2 -0
@@ -1,5 +1,7 @@ # Platform specific code goes here +obj-y += ce4100/ obj-y += efi/ +obj-y += iris/ obj-y += mrst/ obj-y += olpc/ obj-y += scx200/
arch/x86/platform/ce4100/Makefile new file +1 -0
@@ -0,0 +1 @@ +obj-$(CONFIG_X86_INTEL_CE) += ce4100.o
arch/x86/platform/ce4100/ce4100.c new file +132 -0
132 lines not on this page · raw message
arch/x86/platform/iris/Makefile new file +1 -0
@@ -0,0 +1 @@ +obj-$(CONFIG_X86_32_IRIS) += iris.o
arch/x86/platform/iris/iris.c new file +91 -0
91 lines not on this page · raw message
arch/x86/platform/mrst/Makefile +2 -0
@@ -1 +1,3 @@ obj-$(CONFIG_X86_MRST) += mrst.o +obj-$(CONFIG_X86_MRST) += vrtc.o +obj-$(CONFIG_EARLY_PRINTK_MRST) += early_printk_mrst.o
arch/x86/platform/mrst/early_printk_mrst.c renamed from arch/x86/kernel/early_printk_mrst.c +0 -0
arch/x86/platform/mrst/mrst.c +535 -11
612 lines not on this page · raw message
arch/x86/platform/mrst/vrtc.c new file +165 -0
165 lines not on this page · raw message
drivers/platform/x86/intel_scu_ipc.c +5 -0
@@ -26,6 +26,7 @@#include <linux/sfi.h> #include <asm/mrst.h> #include <asm/intel_scu_ipc.h> +#include <asm/mrst.h> /* IPC defines the following message types */ #define IPCMSG_WATCHDOG_TIMER 0xF8/* Set Kernel Watchdog Threshold */
@@ -699,6 +700,9 @@ static int ipc_probe(struct pci_dev *dev, const struct pci_device_id *id)iounmap (ipcdev.ipc_base);return -ENOMEM ; } + +intel_scu_devices_create (); +return 0 ; }
@@ -720,6 +724,7 @@ static void ipc_remove(struct pci_dev *pdev)iounmap (ipcdev.ipc_base);iounmap (ipcdev.i2c_base); ipcdev.pdev =NULL ; +intel_scu_devices_destroy (); }static const struct pci_device_id pci_ids[] = {
drivers/rtc/Kconfig +12 -0
@@ -463,6 +463,18 @@ config RTC_DRV_CMOS This driver can also be built as a module. If so, the module will be called rtc-cmos. +config RTC_DRV_VRTC + tristate "Virtual RTC for Moorestown platforms" + depends on X86_MRST + default y if X86_MRST + + help + Say "yes" here to get direct support for the real time clock + found on Moorestown platforms. The VRTC is a emulated RTC that + derives its clock source from a real RTC in the PMIC. The MC146818 + style programming interface is mostly conserved, but any + updates are done via IPC calls to the system controller FW. + config RTC_DRV_DS1216 tristate "Dallas DS1216" depends on SNI_RM
drivers/rtc/Makefile +1 -0
@@ -30,6 +30,7 @@ obj-$(CONFIG_RTC_DRV_CMOS) += rtc-cmos.o obj-$(CONFIG_RTC_DRV_COH901331) += rtc-coh901331.o obj-$(CONFIG_RTC_DRV_DAVINCI) += rtc-davinci.o obj-$(CONFIG_RTC_DRV_DM355EVM) += rtc-dm355evm.o +obj-$(CONFIG_RTC_DRV_VRTC) += rtc-mrst.o obj-$(CONFIG_RTC_DRV_DS1216) += rtc-ds1216.o obj-$(CONFIG_RTC_DRV_DS1286) += rtc-ds1286.o obj-$(CONFIG_RTC_DRV_DS1302) += rtc-ds1302.o
drivers/rtc/rtc-mrst.c new file +582 -0
582 lines not on this page · raw message
include/linux/sfi.h +5 -3
@@ -77,6 +77,8 @@#define SFI_OEM_ID_SIZE 6#define SFI_OEM_TABLE_ID_SIZE 8 +#define SFI_NAME_LEN 16 +#define SFI_SYST_SEARCH_BEGIN 0x000E0000#define SFI_SYST_SEARCH_END 0x000FFFFF
@@ -156,13 +158,13 @@ struct sfi_device_table_entry {u16 addr;u8 irq;u32 max_freq; -char name[16 ]; +char name[SFI_NAME_LEN ]; } __packed;struct sfi_gpio_table_entry { -char controller_name[16 ]; +char controller_name[SFI_NAME_LEN ];u16 pin_no; -char pin_name[16 ]; +char pin_name[SFI_NAME_LEN ]; } __packed;typedef int (*sfi_table_handler ) (struct sfi_table_header *table);