]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/commitdiff
Pull branch 'for-rmk' of git://git.linaro.org/people/ardbiesheuvel/linux-arm into...
authorRussell King <rmk+kernel@arm.linux.org.uk>
Mon, 22 Jul 2013 16:26:27 +0000 (17:26 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Mon, 22 Jul 2013 16:46:40 +0000 (17:46 +0100)
Comments from Ard Biesheuvel:

I have included two use cases that I have been using, XOR and RAID-6
checksumming. The former gets a 60% performance boost on the NEON, the
latter over 400%.

ARM: add support for kernel mode NEON

Adds kernel_neon_begin/end (renamed from kernel_vfp_begin/end in the
previous version to de-emphasize the VFP part as VFP code that needs
software assistance is not supported currently.)

Introduces <asm/neon.h> and the Kconfig symbol KERNEL_MODE_NEON. This
has been aligned with Catalin for arm64, so any NEON code that does
not use assembly but intrinsics or the GCC vectorizer (such as my
examples) can potentially be shared between arm and arm64 archs.

ARM: move VFP init to an earlier boot stage

This is needed so the NEON is enabled when the XOR and RAID-6 algo
boot time benchmarks are run.

ARM: be strict about FP exceptions in kernel mode

This adds a check to vfp_support_entry() to flag unsupported uses of
the NEON/VFP in kernel mode. FP exceptions (bounces) are flagged as
a bug, this is because of their potentially intermittent nature.
Exceptions caused by the fact that kernel_neon_begin has not been
called are just routed through the undef handler.

ARM: crypto: add NEON accelerated XOR implementation

This is the xor_blocks() implementation built with -ftree-vectorize,
60% faster than optimized ARM code. It calls in_interrupt() to check
whether the NEON flavor can be used: this should really not be
necessary, but due to xor_blocks'squite generic nature, there is no
telling how exactly people may be using it in the real world.

lib/raid6: add ARM-NEON accelerated syndrome calculation

This is a port of the RAID-6 checksumming code in altivec.uc ported
to use NEON intrinsics. It is about 4x faster than the sequential
code.

1  2 
arch/arm/Kconfig

diff --combined arch/arm/Kconfig
index ba412e02ec0c492abed190202cab324d976d0eec,d6068b435151eb02da433a65448bf28e0c9fe1c4..ccc388d388beb047ef2d3d71bffe16b25131916e
@@@ -9,12 -9,11 +9,12 @@@ config AR
        select BUILDTIME_EXTABLE_SORT if MMU
        select CPU_PM if (SUSPEND || CPU_IDLE)
        select DCACHE_WORD_ACCESS if (CPU_V6 || CPU_V6K || CPU_V7) && !CPU_BIG_ENDIAN && MMU
 -      select GENERIC_ATOMIC64 if (CPU_V6 || !CPU_32v6K || !AEABI)
 +      select GENERIC_ATOMIC64 if (CPU_V7M || CPU_V6 || !CPU_32v6K || !AEABI)
        select GENERIC_CLOCKEVENTS_BROADCAST if SMP
        select GENERIC_IRQ_PROBE
        select GENERIC_IRQ_SHOW
        select GENERIC_PCI_IOMAP
 +      select GENERIC_SCHED_CLOCK
        select GENERIC_SMP_IDLE_THREAD
        select GENERIC_IDLE_POLL_SETUP
        select GENERIC_STRNCPY_FROM_USER
@@@ -41,7 -40,6 +41,7 @@@
        select HAVE_IDE if PCI || ISA || PCMCIA
        select HAVE_IRQ_TIME_ACCOUNTING
        select HAVE_KERNEL_GZIP
 +      select HAVE_KERNEL_LZ4
        select HAVE_KERNEL_LZMA
        select HAVE_KERNEL_LZO
        select HAVE_KERNEL_XZ
@@@ -177,9 -175,6 +177,9 @@@ config ARCH_HAS_CPUFRE
          and that the relevant menu configurations are displayed for
          it.
  
 +config ARCH_HAS_BANDGAP
 +      bool
 +
  config GENERIC_HWEIGHT
        bool
        default y
@@@ -371,12 -366,11 +371,12 @@@ config ARCH_CLPS711
        select ARCH_REQUIRE_GPIOLIB
        select AUTO_ZRELADDR
        select CLKDEV_LOOKUP
 +      select CLKSRC_MMIO
        select COMMON_CLK
        select CPU_ARM720T
        select GENERIC_CLOCKEVENTS
 +      select MFD_SYSCON
        select MULTI_IRQ_HANDLER
 -      select NEED_MACH_MEMORY_H
        select SPARSE_IRQ
        help
          Support for Cirrus Logic 711x/721x/731x based boards.
@@@ -508,7 -502,6 +508,7 @@@ config ARCH_DOV
  
  config ARCH_KIRKWOOD
        bool "Marvell Kirkwood"
 +      select ARCH_HAS_CPUFREQ
        select ARCH_REQUIRE_GPIOLIB
        select CPU_FEROCEON
        select GENERIC_CLOCKEVENTS
@@@ -630,8 -623,8 +630,8 @@@ config ARCH_MS
        bool "Qualcomm MSM"
        select ARCH_REQUIRE_GPIOLIB
        select CLKDEV_LOOKUP
 +      select COMMON_CLK
        select GENERIC_CLOCKEVENTS
 -      select HAVE_CLK
        help
          Support for Qualcomm MSM/QSD based systems.  This runs on the
          apps processor of the MSM/QSD and depends on a shared memory
  
  config ARCH_SHMOBILE
        bool "Renesas SH-Mobile / R-Mobile"
 +      select ARM_PATCH_PHYS_VIRT
        select CLKDEV_LOOKUP
        select GENERIC_CLOCKEVENTS
        select HAVE_ARM_SCU if SMP
        select HAVE_SMP
        select MIGHT_HAVE_CACHE_L2X0
        select MULTI_IRQ_HANDLER
 -      select NEED_MACH_MEMORY_H
        select NO_IOPORT
 -      select PINCTRL if ARCH_WANT_OPTIONAL_GPIOLIB
 +      select PINCTRL
        select PM_GENERIC_DOMAINS if PM
        select SPARSE_IRQ
        help
@@@ -702,7 -695,6 +702,7 @@@ config ARCH_S3C24X
        select CLKDEV_LOOKUP
        select CLKSRC_MMIO
        select GENERIC_CLOCKEVENTS
 +      select GPIO_SAMSUNG
        select HAVE_CLK
        select HAVE_S3C2410_I2C if I2C
        select HAVE_S3C2410_WATCHDOG if WATCHDOG
        select MULTI_IRQ_HANDLER
        select NEED_MACH_GPIO_H
        select NEED_MACH_IO_H
 +      select SAMSUNG_ATAGS
        help
          Samsung S3C2410, S3C2412, S3C2413, S3C2416, S3C2440, S3C2442, S3C2443
          and S3C2450 SoCs based systems, such as the Simtec Electronics BAST
@@@ -726,7 -717,6 +726,7 @@@ config ARCH_S3C64X
        select CLKSRC_MMIO
        select CPU_V6
        select GENERIC_CLOCKEVENTS
 +      select GPIO_SAMSUNG
        select HAVE_CLK
        select HAVE_S3C2410_I2C if I2C
        select HAVE_S3C2410_WATCHDOG if WATCHDOG
        select PLAT_SAMSUNG
        select S3C_DEV_NAND
        select S3C_GPIO_TRACK
 +      select SAMSUNG_ATAGS
        select SAMSUNG_CLKSRC
        select SAMSUNG_GPIOLIB_4BIT
        select SAMSUNG_IRQ_VIC_TIMER
 +      select SAMSUNG_WDT_RESET
        select USB_ARCH_HAS_OHCI
        help
          Samsung S3C64XX series based systems
@@@ -751,14 -739,11 +751,14 @@@ config ARCH_S5P64X
        select CLKSRC_MMIO
        select CPU_V6
        select GENERIC_CLOCKEVENTS
 +      select GPIO_SAMSUNG
        select HAVE_CLK
        select HAVE_S3C2410_I2C if I2C
        select HAVE_S3C2410_WATCHDOG if WATCHDOG
        select HAVE_S3C_RTC if RTC_CLASS
        select NEED_MACH_GPIO_H
 +      select SAMSUNG_WDT_RESET
 +      select SAMSUNG_ATAGS
        help
          Samsung S5P64X0 CPU based systems, such as the Samsung SMDK6440,
          SMDK6450.
@@@ -770,14 -755,11 +770,14 @@@ config ARCH_S5PC10
        select CLKSRC_MMIO
        select CPU_V7
        select GENERIC_CLOCKEVENTS
 +      select GPIO_SAMSUNG
        select HAVE_CLK
        select HAVE_S3C2410_I2C if I2C
        select HAVE_S3C2410_WATCHDOG if WATCHDOG
        select HAVE_S3C_RTC if RTC_CLASS
        select NEED_MACH_GPIO_H
 +      select SAMSUNG_WDT_RESET
 +      select SAMSUNG_ATAGS
        help
          Samsung S5PC100 series based systems
  
@@@ -790,14 -772,12 +790,14 @@@ config ARCH_S5PV21
        select CLKSRC_MMIO
        select CPU_V7
        select GENERIC_CLOCKEVENTS
 +      select GPIO_SAMSUNG
        select HAVE_CLK
        select HAVE_S3C2410_I2C if I2C
        select HAVE_S3C2410_WATCHDOG if WATCHDOG
        select HAVE_S3C_RTC if RTC_CLASS
        select NEED_MACH_GPIO_H
        select NEED_MACH_MEMORY_H
 +      select SAMSUNG_ATAGS
        help
          Samsung S5PV210/S5PC110 series based systems
  
@@@ -805,9 -785,7 +805,9 @@@ config ARCH_EXYNO
        bool "Samsung EXYNOS"
        select ARCH_HAS_CPUFREQ
        select ARCH_HAS_HOLES_MEMORYMODEL
 +      select ARCH_REQUIRE_GPIOLIB
        select ARCH_SPARSEMEM_ENABLE
 +      select ARM_GIC
        select CLKDEV_LOOKUP
        select COMMON_CLK
        select CPU_V7
        select HAVE_S3C2410_I2C if I2C
        select HAVE_S3C2410_WATCHDOG if WATCHDOG
        select HAVE_S3C_RTC if RTC_CLASS
 -      select NEED_MACH_GPIO_H
        select NEED_MACH_MEMORY_H
 +      select SPARSE_IRQ
 +      select USE_OF
        help
          Support for SAMSUNG's EXYNOS SoCs (EXYNOS4/5)
  
@@@ -836,6 -813,23 +836,6 @@@ config ARCH_SHAR
          Support for the StrongARM based Digital DNARD machine, also known
          as "Shark" (<http://www.shark-linux.de/shark.html>).
  
 -config ARCH_U300
 -      bool "ST-Ericsson U300 Series"
 -      depends on MMU
 -      select ARCH_REQUIRE_GPIOLIB
 -      select ARM_AMBA
 -      select ARM_PATCH_PHYS_VIRT
 -      select ARM_VIC
 -      select CLKDEV_LOOKUP
 -      select CLKSRC_MMIO
 -      select COMMON_CLK
 -      select CPU_ARM926T
 -      select GENERIC_CLOCKEVENTS
 -      select HAVE_TCM
 -      select SPARSE_IRQ
 -      help
 -        Support for ST-Ericsson U300 series mobile platforms.
 -
  config ARCH_DAVINCI
        bool "TI DaVinci"
        select ARCH_HAS_HOLES_MEMORYMODEL
        select GENERIC_IRQ_CHIP
        select HAVE_IDE
        select NEED_MACH_GPIO_H
 +      select TI_PRIV_EDMA
        select USE_OF
        select ZONE_DMA
        help
@@@ -878,21 -871,20 +878,21 @@@ menu "Multiple platform selection
  
  comment "CPU Core family selection"
  
 -config ARCH_MULTI_V4
 -      bool "ARMv4 based platforms (FA526, StrongARM)"
 -      depends on !ARCH_MULTI_V6_V7
 -      select ARCH_MULTI_V4_V5
 -
  config ARCH_MULTI_V4T
        bool "ARMv4T based platforms (ARM720T, ARM920T, ...)"
        depends on !ARCH_MULTI_V6_V7
        select ARCH_MULTI_V4_V5
 +      select CPU_ARM920T if !(CPU_ARM7TDMI || CPU_ARM720T || \
 +              CPU_ARM740T || CPU_ARM9TDMI || CPU_ARM922T || \
 +              CPU_ARM925T || CPU_ARM940T)
  
  config ARCH_MULTI_V5
        bool "ARMv5 based platforms (ARM926T, XSCALE, PJ1, ...)"
        depends on !ARCH_MULTI_V6_V7
        select ARCH_MULTI_V4_V5
 +      select CPU_ARM926T if (!CPU_ARM946E || CPU_ARM1020 || \
 +              CPU_ARM1020E || CPU_ARM1022 || CPU_ARM1026 || \
 +              CPU_XSCALE || CPU_XSC3 || CPU_MOHAWK || CPU_FEROCEON)
  
  config ARCH_MULTI_V4_V5
        bool
@@@ -956,8 -948,6 +956,8 @@@ source "arch/arm/mach-iop13xx/Kconfig
  
  source "arch/arm/mach-ixp4xx/Kconfig"
  
 +source "arch/arm/mach-keystone/Kconfig"
 +
  source "arch/arm/mach-kirkwood/Kconfig"
  
  source "arch/arm/mach-ks8695/Kconfig"
@@@ -974,8 -964,6 +974,8 @@@ source "arch/arm/mach-netx/Kconfig
  
  source "arch/arm/mach-nomadik/Kconfig"
  
 +source "arch/arm/mach-nspire/Kconfig"
 +
  source "arch/arm/plat-omap/Kconfig"
  
  source "arch/arm/mach-omap1/Kconfig"
@@@ -993,8 -981,6 +993,8 @@@ source "arch/arm/mach-mmp/Kconfig
  
  source "arch/arm/mach-realview/Kconfig"
  
 +source "arch/arm/mach-rockchip/Kconfig"
 +
  source "arch/arm/mach-sa1100/Kconfig"
  
  source "arch/arm/plat-samsung/Kconfig"
@@@ -1003,8 -989,6 +1003,8 @@@ source "arch/arm/mach-socfpga/Kconfig
  
  source "arch/arm/mach-spear/Kconfig"
  
 +source "arch/arm/mach-sti/Kconfig"
 +
  source "arch/arm/mach-s3c24xx/Kconfig"
  
  if ARCH_S3C64XX
@@@ -1316,7 -1300,7 +1316,7 @@@ config ARM_ERRATA_75432
  
  config ARM_ERRATA_364296
        bool "ARM errata: Possible cache data corruption with hit-under-miss enabled"
 -      depends on CPU_V6 && !SMP
 +      depends on CPU_V6
        help
          This options enables the workaround for the 364296 ARM1136
          r0p2 erratum (possible cache data corruption with
@@@ -1433,7 -1417,6 +1433,7 @@@ config PCI_HOST_ITE815
        select DMABOUNCE
  
  source "drivers/pci/Kconfig"
 +source "drivers/pci/pcie/Kconfig"
  
  source "drivers/pcmcia/Kconfig"
  
@@@ -1455,7 -1438,7 +1455,7 @@@ config SM
        depends on CPU_V6K || CPU_V7
        depends on GENERIC_CLOCKEVENTS
        depends on HAVE_SMP
 -      depends on MMU
 +      depends on MMU || ARM_MPU
        select USE_GENERIC_SMP_HELPERS
        help
          This enables support for systems with more than one CPU. If you have
  
  config SMP_ON_UP
        bool "Allow booting SMP kernel on uniprocessor systems (EXPERIMENTAL)"
 -      depends on SMP && !XIP_KERNEL
 +      depends on SMP && !XIP_KERNEL && MMU
        default y
        help
          SMP kernels contain instructions which fail on non-SMP processors.
@@@ -1569,7 -1552,7 +1569,7 @@@ config NR_CPU
  
  config HOTPLUG_CPU
        bool "Support for hot-pluggable CPUs"
 -      depends on SMP && HOTPLUG
 +      depends on SMP
        help
          Say Y here to experiment with turning CPUs off and on.  CPUs
          can be controlled through /sys/devices/system/cpu.
@@@ -1601,7 -1584,6 +1601,7 @@@ config ARCH_NR_GPI
        int
        default 1024 if ARCH_SHMOBILE || ARCH_TEGRA
        default 512 if SOC_OMAP5
 +      default 512 if ARCH_KEYSTONE
        default 392 if ARCH_U8500
        default 352 if ARCH_VT8500
        default 288 if ARCH_SUNXI
@@@ -1627,7 -1609,7 +1627,7 @@@ config SCHED_HRTIC
  
  config THUMB2_KERNEL
        bool "Compile the kernel in Thumb-2 mode" if !CPU_THUMBONLY
 -      depends on CPU_V7 && !CPU_V6 && !CPU_V6K
 +      depends on (CPU_V7 || CPU_V7M) && !CPU_V6 && !CPU_V6K
        default y if CPU_THUMBONLY
        select AEABI
        select ARM_ASM_UNIFIED
@@@ -1749,14 -1731,6 +1749,14 @@@ config HW_PERF_EVENT
          Enable hardware performance counter support for perf events. If
          disabled, perf events will use software events only.
  
 +config SYS_SUPPORTS_HUGETLBFS
 +       def_bool y
 +       depends on ARM_LPAE
 +
 +config HAVE_ARCH_TRANSPARENT_HUGEPAGE
 +       def_bool y
 +       depends on ARM_LPAE
 +
  source "mm/Kconfig"
  
  config FORCE_MAX_ZONEORDER
@@@ -2090,7 -2064,7 +2090,7 @@@ config CRASH_DUM
  
  config AUTO_ZRELADDR
        bool "Auto calculation of the decompressed kernel image address"
 -      depends on !ZBOOT_ROM && !ARCH_U300
 +      depends on !ZBOOT_ROM
        help
          ZRELADDR is the physical address where the decompressed kernel
          image will be placed. If AUTO_ZRELADDR is selected, the address
@@@ -2104,6 -2078,53 +2104,6 @@@ menu "CPU Power Management
  
  if ARCH_HAS_CPUFREQ
  source "drivers/cpufreq/Kconfig"
 -
 -config CPU_FREQ_S3C
 -      bool
 -      help
 -        Internal configuration node for common cpufreq on Samsung SoC
 -
 -config CPU_FREQ_S3C24XX
 -      bool "CPUfreq driver for Samsung S3C24XX series CPUs (EXPERIMENTAL)"
 -      depends on ARCH_S3C24XX && CPU_FREQ
 -      select CPU_FREQ_S3C
 -      help
 -        This enables the CPUfreq driver for the Samsung S3C24XX family
 -        of CPUs.
 -
 -        For details, take a look at <file:Documentation/cpu-freq>.
 -
 -        If in doubt, say N.
 -
 -config CPU_FREQ_S3C24XX_PLL
 -      bool "Support CPUfreq changing of PLL frequency (EXPERIMENTAL)"
 -      depends on CPU_FREQ_S3C24XX
 -      help
 -        Compile in support for changing the PLL frequency from the
 -        S3C24XX series CPUfreq driver. The PLL takes time to settle
 -        after a frequency change, so by default it is not enabled.
 -
 -        This also means that the PLL tables for the selected CPU(s) will
 -        be built which may increase the size of the kernel image.
 -
 -config CPU_FREQ_S3C24XX_DEBUG
 -      bool "Debug CPUfreq Samsung driver core"
 -      depends on CPU_FREQ_S3C24XX
 -      help
 -        Enable s3c_freq_dbg for the Samsung S3C CPUfreq core
 -
 -config CPU_FREQ_S3C24XX_IODEBUG
 -      bool "Debug CPUfreq Samsung driver IO timing"
 -      depends on CPU_FREQ_S3C24XX
 -      help
 -        Enable s3c_freq_iodbg for the Samsung S3C CPUfreq core
 -
 -config CPU_FREQ_S3C24XX_DEBUGFS
 -      bool "Export debugfs for CPUFreq"
 -      depends on CPU_FREQ_S3C24XX && DEBUG_FS
 -      help
 -        Export status information via debugfs.
 -
  endif
  
  source "drivers/cpuidle/Kconfig"
@@@ -2176,6 -2197,13 +2176,13 @@@ config NEO
          Say Y to include support code for NEON, the ARMv7 Advanced SIMD
          Extension.
  
+ config KERNEL_MODE_NEON
+       bool "Support for NEON in kernel mode"
+       default n
+       depends on NEON
+       help
+         Say Y to include support for NEON in kernel mode.
  endmenu
  
  menu "Userspace binary formats"