x86/platform changes for v3.5
Subsystems (4)
Linus,
Please pull the latest x86-platform-for-linus git tree from:
git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git x86-platform-for-linus
HEAD: ead91d4b8c3b1fb08a73aaa4a191230ecf717ee0 x86/vsmp: Fix number of CPUs when vsmp is disabled
This tree includes assorted platform driver updates and a preparatory series for a platform with custom DMA remapping semantics (sta2x11 I/O hub).
out-of-topic modifications in x86-platform-for-linus:
-----------------------------------------------------
arch/parisc/include/asm/kbdleds.h # b2d0b7a: keyboard: Use BIOS Keyboard varia drivers/tty/vt/keyboard.c # b2d0b7a: keyboard: Use BIOS Keyboard varia include/linux/cs5535.h # c2c21e9: x86/olpc/xo1/sci: Report RTC wake
Thanks,
Ingo
------------------>
Alessandro Rubini (3):
x86-32: Introduce CONFIG_X86_DEV_DMA_OPS
x86: Introduce CONFIG_X86_DMA_REMAP
x86, platform: Initial support for sta2x11 I/O hub
Daniel Drake (2):
x86/olpc/xo1/sci: Produce wakeup events for buttons and switches x86/olpc/xo1/sci: Report RTC wakeup events
Joshua Cov (1):
keyboard: Use BIOS Keyboard variable to set Numlock
Shai Fultheim (1):
x86/vsmp: Fix number of CPUs when vsmp is disabled
arch/parisc/include/asm/kbdleds.h | 19 ++ arch/x86/Kconfig | 35 +++- arch/x86/boot/main.c | 18 +- arch/x86/include/asm/bootparam.h | 3 +- arch/x86/include/asm/device.h | 4 +- arch/x86/include/asm/dma-mapping.h | 9 +- arch/x86/include/asm/kbdleds.h | 17 ++ arch/x86/kernel/vsmp_64.c | 40 ++++ arch/x86/pci/Makefile | 2 + arch/x86/pci/sta2x11-fixup.c | 366 ++++++++++++++++++++++++++++++++++ arch/x86/platform/olpc/olpc-xo1-sci.c | 43 +++- drivers/tty/vt/keyboard.c | 20 +- include/linux/cs5535.h | 1 + 13 files changed, 544 insertions(+), 33 deletions(-) create mode 100644 arch/parisc/include/asm/kbdleds.h create mode 100644 arch/x86/include/asm/kbdleds.h create mode 100644 arch/x86/pci/sta2x11-fixup.c
arch/parisc/include/asm/kbdleds.h new file +19 -0
@@ -0,0 +1,19 @@ +#ifndef _ASM_PARISC_KBDLEDS_H +#define _ASM_PARISC_KBDLEDS_H + +/* +* On HIL keyboards of PARISC machines there is no NumLock key and +* everyone expects the keypad to be used for numbers. That's why +* we can safely turn on the NUMLOCK bit. +*/ + +static inline int kbd_defleds (void ) +{ +#if defined(CONFIG_KEYBOARD_HIL ) || defined(CONFIG_KEYBOARD_HIL_OLD ) +return 1 <<VC_NUMLOCK ; +#else +return 0 ; +#endif +} + +#endif /* _ASM_PARISC_KBDLEDS_H */
arch/x86/Kconfig +31 -4
@@ -12,6 +12,7 @@ config X86_32 config X86_64 def_bool 64BIT + select X86_DEV_DMA_OPS ### Arch settings config X86
@@ -328,6 +329,7 @@ config X86_EXTENDED_PLATFORM NUMAQ (IBM/Sequent) RDC R-321x SoC SGI 320/540 (Visual Workstation) + STA2X11-based (e.g. Northville) Summit/EXA (IBM x440) Unisys ES7000 IA32 series Moorestown MID devices
@@ -374,6 +376,7 @@ config X86_VSMP select PARAVIRT depends on X86_64 && PCI depends on X86_EXTENDED_PLATFORM + depends on SMP ---help--- Support for ScaleMP vSMP systems. Say 'Y' here if this kernel is supposed to run on these EM64T-based machines. Only choose this option
@@ -460,10 +463,10 @@ config X86_32_NON_STANDARD depends on X86_32 && SMP depends on X86_EXTENDED_PLATFORM ---help--- - This option compiles in the NUMAQ, Summit, bigsmp, ES7000, default - subarchitectures. It is intended for a generic binary kernel. - if you select them all, kernel will probe it one by one. and will - fallback to default. + This option compiles in the NUMAQ, Summit, bigsmp, ES7000, + STA2X11, default subarchitectures. It is intended for a generic + binary kernel. If you select them all, kernel will probe it + one by one and will fallback to default. # Alphabetically sorted list of Non standard 32 bit platforms
@@ -503,6 +506,22 @@ config X86_VISWS A kernel compiled for the Visual Workstation will run on general PCs as well. See <file:Documentation/sgi-visws.txt> for details. +config STA2X11 + bool "STA2X11 Companion Chip Support" + depends on X86_32_NON_STANDARD && PCI + select X86_DEV_DMA_OPS + select X86_DMA_REMAP + select SWIOTLB + select MFD_STA2X11 + select ARCH_REQUIRE_GPIOLIB + default n + ---help--- + This adds support for boards based on the STA2X11 IO-Hub, + a.k.a. "ConneXt". The chip is used in place of the standard + PC chipset, so all "standard" peripherals are missing. If this + option is selected the kernel will still be able to boot on + standard PC machines. + config X86_SUMMIT bool "Summit/EXA (IBM x440)" depends on X86_32_NON_STANDARD
@@ -2215,6 +2234,14 @@ config HAVE_TEXT_POKE_SMP bool select STOP_MACHINE if SMP +config X86_DEV_DMA_OPS + bool + depends on X86_64 || STA2X11 + +config X86_DMA_REMAP + bool + depends on STA2X11 + source "net/Kconfig" source "drivers/Kconfig"
arch/x86/boot/main.c +12 -6
@@ -57,14 +57,20 @@ static void copy_boot_params(void) }/* -* Set the keyboard repeat rate to maximum. Unclear why this +* Query the keyboard lock status as given by the BIOS, and +* set the keyboard repeat rate to maximum. Unclear why the latter * is done here; this might be possible to kill off as stale code. */ -static void keyboard_set_repeat (void ) +static void keyboard_init (void ) { -struct biosregs ireg; +struct biosregs ireg, oreg;initregs (&ireg); - ireg.ax =0x0305 ; + + ireg.ah =0x02 ;/* Get keyboard status */ +intcall (0x16 , &ireg, &oreg); + boot_params.kbd_status = oreg.al; + + ireg.ax =0x0305 ;/* Set keyboard repeat rate */ intcall (0x16 , &ireg,NULL ); }
@@ -151,8 +157,8 @@ void main(void)/* Detect memory layout */ detect_memory (); -/* Set keyboard repeat rate (why?) */ -keyboard_set_repeat (); +/* Set keyboard repeat rate (why?) and query the lock flags */ +keyboard_init ();/* Query MCA information */ query_mca ();
arch/x86/include/asm/bootparam.h +2 -1
@@ -112,7 +112,8 @@ struct boot_params {__u8 e820_entries;/* 0x1e8 */ __u8 eddbuf_entries;/* 0x1e9 */ __u8 edd_mbr_sig_buf_entries;/* 0x1ea */ -__u8 _pad6[6 ];/* 0x1eb */ +__u8 kbd_status;/* 0x1eb */ +__u8 _pad6[5 ];/* 0x1ec */ struct setup_header hdr;/* setup header */ /* 0x1f1 */ __u8 _pad7[0x290 -0x1f1 -sizeof (struct setup_header )];__u32 edd_mbr_sig_buffer[EDD_MBR_SIG_MAX ];/* 0x290 */
arch/x86/include/asm/device.h +2 -2
@@ -5,8 +5,8 @@ struct dev_archdata {#ifdef CONFIG_ACPI void *acpi_handle;#endif -#ifdef CONFIG_X86_64 -struct dma_map_ops *dma_ops; +#ifdef CONFIG_X86_DEV_DMA_OPS +struct dma_map_ops *dma_ops;#endif #if defined(CONFIG_INTEL_IOMMU ) || defined(CONFIG_AMD_IOMMU )void *iommu;/* hook for IOMMU specific extension */
arch/x86/include/asm/dma-mapping.h +8 -1
@@ -30,7 +30,7 @@ extern struct dma_map_ops *dma_ops;static inline struct dma_map_ops *get_dma_ops (struct device *dev) { -#ifdef CONFIG_X86_32 +#ifndef CONFIG_X86_DEV_DMA_OPS return dma_ops;#else if (unlikely (!dev) || !dev->archdata.dma_ops)
@@ -62,6 +62,12 @@ extern void *dma_generic_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_addr, gfp_t flag, struct dma_attrs *attrs); +#ifdef CONFIG_X86_DMA_REMAP /* Platform code defines bridge-specific code */ +extern bool dma_capable (struct device *dev,dma_addr_t addr,size_t size); +extern dma_addr_t phys_to_dma (struct device *dev,phys_addr_t paddr); +extern phys_addr_t dma_to_phys (struct device *dev,dma_addr_t daddr); +#else +static inline bool dma_capable (struct device *dev,dma_addr_t addr,size_t size) {if (!dev->dma_mask)
@@ -79,6 +85,7 @@ static inline phys_addr_t dma_to_phys(struct device *dev, dma_addr_t daddr) {return daddr; } +#endif /* CONFIG_X86_DMA_REMAP */ static inline void dma_cache_sync(struct device *dev, void *vaddr, size_t size,
arch/x86/include/asm/kbdleds.h new file +17 -0
@@ -0,0 +1,17 @@ +#ifndef _ASM_X86_KBDLEDS_H +#define _ASM_X86_KBDLEDS_H + +/* +* Some laptops take the 789uiojklm,. keys as number pad when NumLock is on. +* This seems a good reason to start with NumLock off. That's why on X86 we +* ask the bios for the correct state. +*/ + +#include <asm/setup.h> + +static inline int kbd_defleds (void ) +{ +return boot_params.kbd_status &0x20 ? (1 <<VC_NUMLOCK ) :0 ; +} + +#endif /* _ASM_X86_KBDLEDS_H */
arch/x86/kernel/vsmp_64.c +40 -0
@@ -15,6 +15,7 @@#include <linux/init.h> #include <linux/pci_ids.h> #include <linux/pci_regs.h> +#include <linux/smp.h> #include <asm/apic.h> #include <asm/pci-direct.h>
@@ -22,6 +23,8 @@#include <asm/paravirt.h> #include <asm/setup.h> +#define TOPOLOGY_REGISTER_OFFSET 0x10 +#if definedCONFIG_PCI && definedCONFIG_PARAVIRT /* * Interrupt control on vSMPowered systems:
@@ -149,12 +152,49 @@ int is_vsmp_box(void)return 0 ; }#endif + +static void __init vsmp_cap_cpus (void ) +{ +#if !defined(CONFIG_X86_VSMP ) && defined(CONFIG_SMP ) +void __iomem *address; +unsigned int cfg, topology, node_shift, maxcpus; + +/* +* CONFIG_X86_VSMP is not configured, so limit the number CPUs to the +* ones present in the first board, unless explicitly overridden by +* setup_max_cpus +*/ +if (setup_max_cpus !=NR_CPUS ) +return ; + +/* Read the vSMP Foundation topology register */ + cfg =read_pci_config (0 ,0x1f ,0 ,PCI_BASE_ADDRESS_0 ); + address =early_ioremap (cfg +TOPOLOGY_REGISTER_OFFSET ,4 ); +if (WARN_ON (!address)) +return ; + + topology =readl (address); + node_shift = (topology >>16 ) &0x7 ; +if (!node_shift) +/* The value 0 should be decoded as 8 */ + node_shift =8 ; + maxcpus = (topology & ((1 << node_shift) -1 )) +1 ; + +pr_info ("vSMP CTL: Capping CPUs to %d (CONFIG_X86_VSMP is unset)\n" , + maxcpus); + setup_max_cpus = maxcpus; +early_iounmap (address,4 ); +#endif +} +void __init vsmp_init (void ) {detect_vsmp_box ();if (!is_vsmp_box ())return ; +vsmp_cap_cpus (); +set_vsmp_pv_ops ();return ; }
arch/x86/pci/Makefile +2 -0
@@ -11,6 +11,8 @@ obj-$(CONFIG_X86_INTEL_CE) += ce4100.o obj-$(CONFIG_ACPI) += acpi.o obj-y += legacy.o irq.o +obj-$(CONFIG_STA2X11) += sta2x11-fixup.o + obj-$(CONFIG_X86_VISWS) += visws.o obj-$(CONFIG_X86_NUMAQ) += numaq_32.o
arch/x86/pci/sta2x11-fixup.c new file +366 -0
366 lines not on this page · raw message
arch/x86/platform/olpc/olpc-xo1-sci.c +36 -7
78 lines not on this page · raw message
drivers/tty/vt/keyboard.c +8 -12
@@ -53,17 +53,13 @@ extern void ctrl_alt_del(void);#define KBD_DEFMODE ((1 << VC_REPEAT) | (1 << VC_META)) -/* -* Some laptops take the 789uiojklm,. keys as number pad when NumLock is on. -* This seems a good reason to start with NumLock off. On HIL keyboards -* of PARISC machines however there is no NumLock key and everyone expects the -* keypad to be used for numbers. -*/ - -#if defined(CONFIG_PARISC ) && (defined(CONFIG_KEYBOARD_HIL ) || defined(CONFIG_KEYBOARD_HIL_OLD )) -#define KBD_DEFLEDS (1 << VC_NUMLOCK) +#if defined(CONFIG_X86 ) || defined(CONFIG_PARISC ) +#include <asm/kbdleds.h> #else -#define KBD_DEFLEDS 0 +static inline int kbd_defleds (void ) +{ +return 0 ; +}#endif #define KBD_DEFLOCK 0
@@ -1512,8 +1508,8 @@ int __init kbd_init(void)int error;for (i =0 ; i <MAX_NR_CONSOLES ; i++) { - kbd_table[i].ledflagstate =KBD_DEFLEDS ; - kbd_table[i].default_ledflagstate =KBD_DEFLEDS ; + kbd_table[i].ledflagstate =kbd_defleds (); + kbd_table[i].default_ledflagstate =kbd_defleds (); kbd_table[i].ledmode =LED_SHOW_FLAGS ; kbd_table[i].lockstate =KBD_DEFLOCK ; kbd_table[i].slockstate =0 ;
include/linux/cs5535.h +1 -0
@@ -95,6 +95,7 @@ static inline int cs5535_pic_unreqz_select_high(unsigned int group,/* CS5536_PM1_STS bits */ #define CS5536_WAK_FLAG (1 << 15) +#define CS5536_RTC_FLAG (1 << 10)#define CS5536_PWRBTN_FLAG (1 << 8)/* CS5536_PM1_EN bits */