Skip to contentSkip to conversation

x86/platform changes for v2.6.38

GIT PULL Ingo Molnar 1 participant 1 message Jan 6, 2011

Subsystems (7)
lore
Share & tools
lore
#0 lore raw

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.c

include/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.c
Documentation/x86/boot.txt +1 -0
index 30b43e1..bdeb81c 100644
@@ -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
index e832768..6ab6310 100644
@@ -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
index 8e62185..c8bfe63 100644
@@ -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
index 4d293dc..139591a 100644
@@ -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
new file mode 100644
index 0000000..73668ab
@@ -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
index 4a711a6..719f00b 100644
@@ -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
index d6763b1..db8aa19 100644
@@ -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
index 9e13763..f60153d 100644
@@ -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
index 92543c7..7c9ab59 100644
@@ -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
index 4572f25..cd28a35 100644
@@ -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
index 7633101..7f138b3 100644
@@ -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
index fda313e..c8e41e9 100644
@@ -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
index effd96e..6b8759f 100644
@@ -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
index 7bf70b8..021eee9 100644
@@ -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
new file mode 100644
index 0000000..91fc929
@@ -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
new file mode 100644
index 0000000..db92198
@@ -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
index efbbc55..f61ccdd 100644
@@ -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
similarity index 100%
rename from arch/x86/kernel/early_printk_mrst.c
rename to arch/x86/platform/mrst/early_printk_mrst.c
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
index 41a9e34..ca35b0c 100644
@@ -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
index 2883428..4941cad 100644
@@ -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
index 4c2832d..2afdaf3 100644
@@ -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
index 7f770c6..fe81791 100644
@@ -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);