summaryrefslogtreecommitdiff
path: root/arch/arm64
AgeCommit message (Collapse)Author
2016-01-06arm64: head.S: use memset to clear BSSMark Rutland
Currently we use an open-coded memzero to clear the BSS. As it is a trivial implementation, it is sub-optimal. Our optimised memset doesn't use the stack, is position-independent, and for the memzero case can use of DC ZVA to clear large blocks efficiently. In __mmap_switched the MMU is on and there are no live caller-saved registers, so we can safely call an uninstrumented memset. This patch changes __mmap_switched to use memset when clearing the BSS. We use the __pi_memset alias so as to avoid any instrumentation in all kernel configurations. Cc: Catalin Marinas <catalin.marinas@arm.com> Cc: Marc Zyngier <marc.zyngier@arm.com> Reviewed-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> Signed-off-by: Mark Rutland <mark.rutland@arm.com> Signed-off-by: Will Deacon <will.deacon@arm.com>
2016-01-06arm64: entry: remove pointless SPSR mode checkMark Rutland
In work_pending, we may skip work if the stacked SPSR value represents anything other than an EL0 context. We then immediately invoke the kernel_exit 0 macro as part of ret_to_user, assuming a return to EL0. This is somewhat confusing. We use work_pending as part of the ret_to_user/ret_fast_syscall state machine. We only use ret_fast_syscall in the return from an SVC issued from EL0. We use ret_to_user for return from EL0 exception handlers and also for return from ret_from_fork in the case the task was not a kernel thread (i.e. it is a user task). Thus in all cases the stacked SPSR value must represent an EL0 context, and the check is redundant. This patch removes it, along with the now unused no_work_pending label. Cc: Chris Metcalf <cmetcalf@ezchip.com> Acked-by: Catalin Marinas <catalin.marinas@arm.com> Signed-off-by: Mark Rutland <mark.rutland@arm.com> Signed-off-by: Will Deacon <will.deacon@arm.com>
2016-01-05arm64: mm: move pgd_cache initialisation to pgtable_cache_initWill Deacon
Initialising the suppport for EFI runtime services requires us to allocate a pgd off the back of an early_initcall. On systems where the PGD_SIZE is smaller than PAGE_SIZE (e.g. 64k pages and 48-bit VA), the pgd_cache isn't initialised at this stage, and we panic with a NULL dereference during boot: Unable to handle kernel NULL pointer dereference at virtual address 00000000 __create_mapping.isra.5+0x84/0x350 create_pgd_mapping+0x20/0x28 efi_create_mapping+0x5c/0x6c arm_enable_runtime_services+0x154/0x1e4 do_one_initcall+0x8c/0x190 kernel_init_freeable+0x84/0x1ec kernel_init+0x10/0xe0 ret_from_fork+0x10/0x50 This patch fixes the problem by initialising the pgd_cache earlier, in the pgtable_cache_init callback, which sounds suspiciously like what it was intended for. Reported-by: Dennis Chen <dennis.chen@arm.com> Signed-off-by: Will Deacon <will.deacon@arm.com>
2016-01-05arm64: module: avoid undefined shift behavior in reloc_data()Ard Biesheuvel
Compilers may engage the improbability drive when encountering shifts by a distance that is a multiple of the size of the operand type. Since the required bounds check is very simple here, we can get rid of all the fuzzy masking, shifting and comparing, and use the documented bounds directly. Reported-by: David Binderman <dcb314@hotmail.com> Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> Signed-off-by: Will Deacon <will.deacon@arm.com>
2016-01-05arm64: module: fix relocation of movz instruction with negative immediateArd Biesheuvel
The test whether a movz instruction with a signed immediate should be turned into a movn instruction (i.e., when the immediate is negative) is flawed, since the value of imm is always positive. Also, the subsequent bounds check is incorrect since the limit update never executes, due to the fact that the imm_type comparison will always be false for negative signed immediates. Let's fix this by performing the sign test on sval directly, and replacing the bounds check with a simple comparison against U16_MAX. Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> [will: tidied up use of sval, renamed MOVK enum value to MOVKZ] Signed-off-by: Will Deacon <will.deacon@arm.com>
2016-01-05Merge branches 'misc' and 'misc-rc6' into for-linusRussell King
2016-01-04ARM: 8481/2: drivers: psci: replace psci firmware callsJens Wiklander
Switch to use a generic interface for issuing SMC/HVC based on ARM SMC Calling Convention. Removes now the now unused psci-call.S. Acked-by: Will Deacon <will.deacon@arm.com> Reviewed-by: Mark Rutland <mark.rutland@arm.com> Tested-by: Mark Rutland <mark.rutland@arm.com> Acked-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> Tested-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> Signed-off-by: Jens Wiklander <jens.wiklander@linaro.org> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2016-01-04ARM: 8480/2: arm64: add implementation for arm-smcccJens Wiklander
Adds implementation for arm-smccc and enables CONFIG_HAVE_SMCCC. Acked-by: Will Deacon <will.deacon@arm.com> Signed-off-by: Jens Wiklander <jens.wiklander@linaro.org> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2016-01-04Merge tag 'arm32-efi-for-v4.5' of ↵Russell King
git://git.linaro.org/people/ard.biesheuvel/linux-arm into devel-stable This implements UEFI kernel support for 32-bit ARM, based on the existing arm64 support and existing generic early ioremap support. It is based on commit f7d924894265 ("arm64/efi: refactor EFI init and runtime code for reuse by 32-bit ARM"), which was pulled from the arm64 repo [1] as branch 'aarch64/efi' [1] git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux.git
2015-12-31Merge tag 'xgene-dts-fixes-for-v4.5' of ↵Arnd Bergmann
https://github.com/AppliedMicro/xgene-next into next/dt64 Merge "Fixes for X-Gene DTS for v4.5" from Duc Dang: This patch set fixes the node names of X-Gene I2C, GPIO controller DT nodes; and also removes I2C clock nodes as the same clock is shared between 2 I2C controllers on X-Gene SoC. * tag 'xgene-dts-fixes-for-v4.5' of https://github.com/AppliedMicro/xgene-next: arm64: dts: X-Gene v2: I2C1 clock is always on arm64: dts: X-Gene v1: I2C0 clock is always on arm64: dts: Fix to use standard DT node names for X-Gene 1 and X-Gene 2 platforms
2015-12-31dts/ls2080a: Update DTSI to add support of SP805 WDTBhupesh Sharma
This patch updates the LS2080a DTSI (DTS Include) file to add support for eight SP805 Watchdog units which can be used to reset the eight Cortex-A57 cores available on LS2080A. Signed-off-by: Bhupesh Sharma <bhupesh.sharma@freescale.com> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
2015-12-29arm64: dts: X-Gene v2: I2C1 clock is always onDuc Dang
X-Gene v2 I2C0 and I2C1 controllers share the same clock enable register field. This patch remove clock node for I2C1 and leave I2C1 clock always on as having it toggled on/off will affect I2C0 operation. Signed-off-by: Duc Dang <dhdang@apm.com>
2015-12-29arm64: dts: X-Gene v1: I2C0 clock is always onDuc Dang
X-Gene v1 I2C0 and I2C1 controllers share the same clock enable register field. This patch remove clock node for I2C0 and leave I2C0 clock always on as having it toggled on/off will affect I2C1 operation. Signed-off-by: Duc Dang <dhdang@apm.com>
2015-12-29arm64: dts: Fix to use standard DT node names for X-Gene 1 and X-Gene 2 ↵Duc Dang
platforms Use devicetree standard node name for I2C (i2c@...), GFC GPIO (gpio@...), DW GPIO (gpio@...), Standby GPIO (gpio@...). The DT node name of USB (dwusb@...) still needs to be kept to maintain backward compatibility with old firmware. Signed-off-by: Duc Dang <dhdang@apm.com>
2015-12-22Merge tag 'v4.5-rockchip-dts64-2' of ↵Olof Johansson
git://git.kernel.org/pub/scm/linux/kernel/git/mmind/linux-rockchip into next/dt64 New node for the broadcast-timer of the rk3368, a non-critical fix for a regulator voltage and a typo fix. * tag 'v4.5-rockchip-dts64-2' of git://git.kernel.org/pub/scm/linux/kernel/git/mmind/linux-rockchip: arm64: dts: rockchip: Add the broadcast-timer for RK3368 SoC arm64: dts: rockchip: Fix typo in rk3368 sdmmc card detect pin name arm64: dts: rockchip: correct voltage range for rk3368-evb-act8846 board Signed-off-by: Olof Johansson <olof@lixom.net>
2015-12-22Merge tag 'v4.4-next-kconfig' of https://github.com/mbgg/linux-mediatek into ↵Olof Johansson
next/config64 Enable mediatek clocksource driver by default as otherwise the system does not boot. * tag 'v4.4-next-kconfig' of https://github.com/mbgg/linux-mediatek: arm64: mediatek: enable MTK_TIMER Signed-off-by: Olof Johansson <olof@lixom.net>
2015-12-22Merge tag 'v4.4-next-dts' of https://github.com/mbgg/linux-mediatek into next/dtOlof Johansson
Add regulators to the scpsys binding. Move the include of the reset contoller to include/dt-bindings/reset. Add basic support for mt2701 SoC and evaluation board. * tag 'v4.4-next-dts' of https://github.com/mbgg/linux-mediatek: dt-bindings: soc: Add supplies for Mediatek SCPSYS unit ARM: mediatek: DT: Move reset controller constants into common location ARM: dts: mediatek: add MT2701 basic support Document: DT: Add bindings for mediatek MT2701 SoC Platform Signed-off-by: Olof Johansson <olof@lixom.net>
2015-12-22Merge tag 'v4.4-next-arm64' of https://github.com/mbgg/linux-mediatek into ↵Olof Johansson
next/dt64 Update psci support to the arm,psci-1.0 to mt8173 Add display PWM driver to mt8173 Add mediatek general porpose timer to mt8173 * tag 'v4.4-next-arm64' of https://github.com/mbgg/linux-mediatek: arm64: dts: mediatek: mt8173 PSCI-1.0 support arm64: dts: mt8173: add MT8173 display PWM driver support node arm64: dts: mt8173: add timer node Signed-off-by: Olof Johansson <olof@lixom.net>
2015-12-22Merge tag 'renesas-arm64-dt3-for-v4.5' of ↵Olof Johansson
git://git.kernel.org/pub/scm/linux/kernel/git/horms/renesas into next/dt64 Third Round of Renesas ARM64 Based SoC DT Updates for v4.5 * Enable SATA * Add salvator-x part number to DT bindings documentation * Enable all four A57 cores instead of just one * Enhanced audio support: - Use CS2000 as AUDIO_CLK_B - Set ak4613 In/Out pin as single-end * tag 'renesas-arm64-dt3-for-v4.5' of git://git.kernel.org/pub/scm/linux/kernel/git/horms/renesas: arm64: renesas: r8a7795: fix SATA clock assignment arm64: dts: salvator-x: Enable SATA controller arm64: dts: r8a7795: Add SATA controller node arm64: renesas: r8a7795: add internal delay for i2c IPs arm64: renesas: salvator-x: Add board part number to DT bindings arm64: dts: r8a7795: Add pmu device nodes arm64: dts: r8a7795: Add Cortex-A57 CPU cores arm64: dts: r8a7795: Add PSCI node arm64: renesas: salvator-x: use CS2000 as AUDIO_CLK_B arm64: renesas: salvator-x: set ak4613 In/Out pin as single-end Signed-off-by: Olof Johansson <olof@lixom.net>
2015-12-22Merge tag 'renesas-arm64-defconfig3-for-v4.5' of ↵Olof Johansson
git://git.kernel.org/pub/scm/linux/kernel/git/horms/renesas into next/config64 Third Round of Renesas ARM64 Based SoC Defconfig Updates for v4.5 * Enable CS2000 and Renesas R-Car SATA driver * tag 'renesas-arm64-defconfig3-for-v4.5' of git://git.kernel.org/pub/scm/linux/kernel/git/horms/renesas: arm64: defconfig: add CS2000 support arm64: defconfig: Add Renesas R-Car SATA driver for R-Car Gen3 SoCs Signed-off-by: Olof Johansson <olof@lixom.net>
2015-12-22Merge tag 'qcom-arm64-for-4.5' of ↵Olof Johansson
git://git.kernel.org/pub/scm/linux/kernel/git/agross/linux into next/dt64 Qualcomm ARM64 Updates for v4.5 * Add fixed rate oscillators to dts * Fixup PMIC alias and properties * Change 8916-MTP compatible to be compliant with new scheme * Fix 8x16 UART pinctrl configuration * Add SMEM, RPM/SMD, and PM8916 support on MSM8916 * tag 'qcom-arm64-for-4.5' of git://git.kernel.org/pub/scm/linux/kernel/git/agross/linux: arm64: dts: Add PM8916 support on MSM8916 arm64: dts: qcom: Add RPM/SMD support on MSM8916 arm64: dts: qcom: Add MSM8916 SMEM nodes arm64: dts: set the default i2c pin drive strength to 16mA arm64: dts: fix the i2c aliasing to match to schematics. arm64: dts: qcom: msm8916: Add fixed rate on-board oscillators arm64: dts: qcom: Alias pm8916 on msm8916 devices arm64: dts: qcom: Make msm8916-mtp compatible string compliant arm64: dts: qcom: 8x16: UART1 and UART2 use DMA for RX and TX arm64: dts: qcom: 8x16: UART1 add CTS_N, RTS_N pin configurations Signed-off-by: Olof Johansson <olof@lixom.net>
2015-12-22Merge tag 'tegra-for-4.5-defconfig' of ↵Olof Johansson
git://git.kernel.org/pub/scm/linux/kernel/git/tegra/linux into next/config64 ARM: tegra: Default configuration updates for v4.5-rc1 This set of patches enable various drivers and features required by 64-bit Tegra SoCs (Tegra132 and Tegra210). * tag 'tegra-for-4.5-defconfig' of git://git.kernel.org/pub/scm/linux/kernel/git/tegra/linux: arm64: defconfig: Enable printk timestamps arm64: defconfig: Enable squashfs support arm64: defconfig: Enable sdhci-tegra driver arm64: defconfig: Enable serial-tegra driver arm64: defconfig: Enable tegra-apbdma driver arm64: defconfig: Do not disable Tegra AHB driver arm64: defconfig: Enable Tegra210 support Signed-off-by: Olof Johansson <olof@lixom.net>
2015-12-22Merge tag 'zynqmp-dt-for-4.5' of https://github.com/Xilinx/linux-xlnx into ↵Olof Johansson
next/dt64 arm: Xilinx ZynqMP dt patches for v4.5 - Label GPIO controller as interrupt controller * tag 'zynqmp-dt-for-4.5' of https://github.com/Xilinx/linux-xlnx: ARM64: zynqmp: DT: Add interrupt-controller property to GPIO Signed-off-by: Olof Johansson <olof@lixom.net>
2015-12-22arm64: dts: hikey: add label properties to UARTsRob Herring
Add label properties to provide a way to identify UARTs based on their board or connector name. This follows naming convention in 96boards CE spec. Ports without external connections are not labelled. Signed-off-by: Rob Herring <robh@kernel.org> Signed-off-by: Olof Johansson <olof@lixom.net>
2015-12-22arm64: dts: apq8016-sbc: add label properties for UART, I2C, and SPIRob Herring
Add label properties to provide a way to identify UART, I2C and SPI ports based on their connector names. This follows naming convention in 96boards CE spec. Ports without external connections are not labelled. Signed-off-by: Rob Herring <robh@kernel.org> Cc: Srinivas Kandagatla <srinivas.kandagatla@linaro.org> Cc: Andy Gross <agross@codeaurora.org> Acked-by: Kevin Hilman <khilman@linaro.org> Tested-by: Kevin Hilman <khilman@linaro.org> Signed-off-by: Olof Johansson <olof@lixom.net>
2015-12-22arm64: dts: apq8016-sbc: enable UART0 on LS connectorRob Herring
The LS UART0 is not used by anything else and should be enabled for expansion boards. Signed-off-by: Rob Herring <robh@kernel.org> Cc: Srinivas Kandagatla <srinivas.kandagatla@linaro.org> Cc: Andy Gross <agross@codeaurora.org> Signed-off-by: Olof Johansson <olof@lixom.net>
2015-12-22arm64: dts: juno: Add idle-states to device treeJon Medhurst (Tixy)
This patch adds idle-states bindings data collected through a set of benchmarking experiments (latency and energy consumption) on Juno boards. Latencies data represents the worst case scenarios as required by the DT idle-states bindings. Signed-off-by: Jon Medhurst <tixy@linaro.org> Acked-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> Signed-off-by: Olof Johansson <olof@lixom.net>
2015-12-22arm64: dts: Added syscon-reboot node for FSL's LS2080A SoCJ. German Rivera
Added sys-reboot node to the FSL's LS2080A SoC DT to leverage the ARM-generic reboot mechanism for this SoC. This mechanism is enabled through CONFIG_POWER_RESET_SYSCON. Signed-off-by: J. German Rivera <German.Rivera@freescale.com> Signed-off-by: Li Yang <leoli@freescale.com> Signed-off-by: Olof Johansson <olof@lixom.net>
2015-12-22arm64: dts: add LS1043a-RDB board supportShaohui Xie
Signed-off-by: Shaohui Xie <Shaohui.Xie@freescale.com> Signed-off-by: Mingkai Hu <Mingkai.Hu@freescale.com> Signed-off-by: Wenbin Song <Wenbin.Song@freescale.com> Signed-off-by: Hou Zhiqiang <B48286@freescale.com> Signed-off-by: Li Yang <leoli@freescale.com> Signed-off-by: Olof Johansson <olof@lixom.net>
2015-12-22arm64: dts: add Freescale LS1043a SoC supportMingkai Hu
LS1043a is an SoC with 4 ARMv8 A53 cores and most other IP blocks are similar to LS1021a which also complies to Freescale Chassis 2.1 spec. Created LS1043a SoC DTSI file to be included by board level DTS files. Signed-off-by: Li Yang <leoli@freescale.com> Signed-off-by: Hou Zhiqiang <B48286@freescale.com> Signed-off-by: Mingkai Hu <Mingkai.Hu@freescale.com> Signed-off-by: Wenbin Song <Wenbin.Song@freescale.com> Signed-off-by: Olof Johansson <olof@lixom.net>
2015-12-22arm64: perf: add support for Cortex-A72Will Deacon
Cortex-A72 has a PMUv3 implementation that is compatible with the PMU implemented by Cortex-A57. This patch hooks up the new compatible string so that the Cortex-A57 event mappings are used. Signed-off-by: Will Deacon <will.deacon@arm.com>
2015-12-22arm64: perf: add format entry to describe event -> config mappingWill Deacon
It's all very well providing an events directory to userspace that details our events in terms of "event=0xNN", but if we don't define how to encode the "event" field in the perf attr.config, then it's a waste of time. This patch adds a single format entry to describe that the event field occupies the bottom 10 bits of our config field on ARMv8 (PMUv3). Signed-off-by: Will Deacon <will.deacon@arm.com>
2015-12-21Merge tag 'samsung-dt64-4.5' of ↵Olof Johansson
https://git.kernel.org/pub/scm/linux/kernel/git/krzk/linux into next/dt64 Samsung DeviceTree ARM64 updates and improvements for 4.5: 1. Add S2MPS15 PMIC node to Espresso board. This gives proper control over regulators, provides 32KHz clocks and RTC driver. 2. Enable HS200 mode operation on Espresso board for MMC0. 3. Add reboot capability (generic syscon-reboot). * tag 'samsung-dt64-4.5' of https://git.kernel.org/pub/scm/linux/kernel/git/krzk/linux: arm64: dts: Add reboot node for exynos7 arm64: dts: Enable HS200 mode operation on exynos7-espresso arm64: dts: Add S2MPS15 PMIC node on exynos7-espresso Signed-off-by: Olof Johansson <olof@lixom.net>
2015-12-21arm64: dts: uniphier: add PH1-LD10 SoC/board supportMasahiro Yamada
This is the first ARMv8 SoC from Socionext Inc. Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com> Signed-off-by: Olof Johansson <olof@lixom.net>
2015-12-21arm64: traps: address fallout from printk -> pr_* conversionWill Deacon
Commit ac7b406c1a9d ("arm64: Use pr_* instead of printk") was a fairly mindless s/printk/pr_*/ change driven by a complaint from checkpatch. As is usual with such changes, this has led to some odd behaviour on arm64: * syslog now picks up the "pr_emerg" line from dump_backtrace, but not the actual trace, which leads to a bunch of "kernel:Call trace:" lines in the log * __{pte,pmd,pgd}_error print at KERN_CRIT, as opposed to KERN_ERR which is used by other architectures. This patch restores the original printk behaviour for dump_backtrace and downgrade the pgtable error macros to KERN_ERR. Signed-off-by: Will Deacon <will.deacon@arm.com>
2015-12-21arm64: ftrace: fix a stack tracer's output under function graph tracerAKASHI Takahiro
Function graph tracer modifies a return address (LR) in a stack frame to hook a function return. This will result in many useless entries (return_to_handler) showing up in a) a stack tracer's output b) perf call graph (with perf record -g) c) dump_backtrace (at panic et al.) For example, in case of a), $ echo function_graph > /sys/kernel/debug/tracing/current_tracer $ echo 1 > /proc/sys/kernel/stack_trace_enabled $ cat /sys/kernel/debug/tracing/stack_trace Depth Size Location (54 entries) ----- ---- -------- 0) 4504 16 gic_raise_softirq+0x28/0x150 1) 4488 80 smp_cross_call+0x38/0xb8 2) 4408 48 return_to_handler+0x0/0x40 3) 4360 32 return_to_handler+0x0/0x40 ... In case of b), $ echo function_graph > /sys/kernel/debug/tracing/current_tracer $ perf record -e mem:XXX:x -ag -- sleep 10 $ perf report ... | | |--0.22%-- 0x550f8 | | | 0x10888 | | | el0_svc_naked | | | sys_openat | | | return_to_handler | | | return_to_handler ... In case of c), $ echo function_graph > /sys/kernel/debug/tracing/current_tracer $ echo c > /proc/sysrq-trigger ... Call trace: [<ffffffc00044d3ac>] sysrq_handle_crash+0x24/0x30 [<ffffffc000092250>] return_to_handler+0x0/0x40 [<ffffffc000092250>] return_to_handler+0x0/0x40 ... This patch replaces such entries with real addresses preserved in current->ret_stack[] at unwind_frame(). This way, we can cover all the cases. Reviewed-by: Jungseok Lee <jungseoklee85@gmail.com> Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org> [will: fixed minor context changes conflicting with irq stack bits] Signed-off-by: Will Deacon <will.deacon@arm.com>
2015-12-21arm64: pass a task parameter to unwind_frame()AKASHI Takahiro
Function graph tracer modifies a return address (LR) in a stack frame to hook a function's return. This will result in many useless entries (return_to_handler) showing up in a call stack list. We will fix this problem in a later patch ("arm64: ftrace: fix a stack tracer's output under function graph tracer"). But since real return addresses are saved in ret_stack[] array in struct task_struct, unwind functions need to be notified of, in addition to a stack pointer address, which task is being traced in order to find out real return addresses. This patch extends unwind functions' interfaces by adding an extra argument of a pointer to task_struct. Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org> Signed-off-by: Will Deacon <will.deacon@arm.com>
2015-12-21arm64: ftrace: modify a stack frame in a safe wayAKASHI Takahiro
Function graph tracer modifies a return address (LR) in a stack frame by calling ftrace_prepare_return() in a traced function's function prologue. The current code does this modification before preserving an original address at ftrace_push_return_trace() and there is always a small window of inconsistency when an interrupt occurs. This doesn't matter, as far as an interrupt stack is introduced, because stack tracer won't be invoked in an interrupt context. But it would be better to proactively minimize such a window by moving the LR modification after ftrace_push_return_trace(). Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org> Signed-off-by: Will Deacon <will.deacon@arm.com>
2015-12-21arm64: remove irq_count and do_softirq_own_stack()James Morse
sysrq_handle_reboot() re-enables interrupts while on the irq stack. The irq_stack implementation wrongly assumed this would only ever happen via the softirq path, allowing it to update irq_count late, in do_softirq_own_stack(). This means if an irq occurs in sysrq_handle_reboot(), during emergency_restart() the stack will be corrupted, as irq_count wasn't updated. Lose the optimisation, and instead of moving the adding/subtracting of irq_count into irq_stack_entry/irq_stack_exit, remove it, and compare sp_el0 (struct thread_info) with sp & ~(THREAD_SIZE - 1). This tells us if we are on a task stack, if so, we can safely switch to the irq stack. Finally, remove do_softirq_own_stack(), we don't need it anymore. Reported-by: Will Deacon <will.deacon@arm.com> Signed-off-by: James Morse <james.morse@arm.com> [will: use get_thread_info macro] Signed-off-by: Will Deacon <will.deacon@arm.com>
2015-12-21arm64: hugetlb: add support for PTE contiguous bitDavid Woods
The arm64 MMU supports a Contiguous bit which is a hint that the TTE is one of a set of contiguous entries which can be cached in a single TLB entry. Supporting this bit adds new intermediate huge page sizes. The set of huge page sizes available depends on the base page size. Without using contiguous pages the huge page sizes are as follows. 4KB: 2MB 1GB 64KB: 512MB With a 4KB granule, the contiguous bit groups together sets of 16 pages and with a 64KB granule it groups sets of 32 pages. This enables two new huge page sizes in each case, so that the full set of available sizes is as follows. 4KB: 64KB 2MB 32MB 1GB 64KB: 2MB 512MB 16GB If a 16KB granule is used then the contiguous bit groups 128 pages at the PTE level and 32 pages at the PMD level. If the base page size is set to 64KB then 2MB pages are enabled by default. It is possible in the future to make 2MB the default huge page size for both 4KB and 64KB granules. Reviewed-by: Chris Metcalf <cmetcalf@ezchip.com> Reviewed-by: Steve Capper <steve.capper@linaro.org> Signed-off-by: David Woods <dwoods@ezchip.com> Signed-off-by: Will Deacon <will.deacon@arm.com>
2015-12-21arm64: kernel: enforce pmuserenr_el0 initialization and restoreLorenzo Pieralisi
The pmuserenr_el0 register value is architecturally UNKNOWN on reset. Current kernel code resets that register value iff the core pmu device is correctly probed in the kernel. On platforms with missing DT pmu nodes (or disabled perf events in the kernel), the pmu is not probed, therefore the pmuserenr_el0 register is not reset in the kernel, which means that its value retains the reset value that is architecturally UNKNOWN (system may run with eg pmuserenr_el0 == 0x1, which means that PMU counters access is available at EL0, which must be disallowed). This patch adds code that resets pmuserenr_el0 on cold boot and restores it on core resume from shutdown, so that the pmuserenr_el0 setup is always enforced in the kernel. Cc: <stable@vger.kernel.org> Cc: Mark Rutland <mark.rutland@arm.com> Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> Signed-off-by: Will Deacon <will.deacon@arm.com>
2015-12-21xen/arm: introduce HYPERVISOR_platform_op on arm and arm64Stefano Stabellini
Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
2015-12-21arm64: introduce CONFIG_PARAVIRT, PARAVIRT_TIME_ACCOUNTING and pv_time_opsStefano Stabellini
Introduce CONFIG_PARAVIRT and PARAVIRT_TIME_ACCOUNTING on ARM64. Necessary duplication of paravirt.h and paravirt.c with ARM. The only paravirt interface supported is pv_time_ops.steal_clock, so no runtime pvops patching needed. This allows us to make use of steal_account_process_tick for stolen ticks accounting. Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com> Acked-by: Marc Zyngier <marc.zyngier@arm.com>
2015-12-18bpf: move clearing of A/X into classic to eBPF migration prologueDaniel Borkmann
Back in the days where eBPF (or back then "internal BPF" ;->) was not exposed to user space, and only the classic BPF programs internally translated into eBPF programs, we missed the fact that for classic BPF A and X needed to be cleared. It was fixed back then via 83d5b7ef99c9 ("net: filter: initialize A and X registers"), and thus classic BPF specifics were added to the eBPF interpreter core to work around it. This added some confusion for JIT developers later on that take the eBPF interpreter code as an example for deriving their JIT. F.e. in f75298f5c3fe ("s390/bpf: clear correct BPF accumulator register"), at least X could leak stack memory. Furthermore, since this is only needed for classic BPF translations and not for eBPF (verifier takes care that read access to regs cannot be done uninitialized), more complexity is added to JITs as they need to determine whether they deal with migrations or native eBPF where they can just omit clearing A/X in their prologue and thus reduce image size a bit, see f.e. cde66c2d88da ("s390/bpf: Only clear A and X for converted BPF programs"). In other cases (x86, arm64), A and X is being cleared in the prologue also for eBPF case, which is unnecessary. Lets move this into the BPF migration in bpf_convert_filter() where it actually belongs as long as the number of eBPF JITs are still few. It can thus be done generically; allowing us to remove the quirk from __bpf_prog_run() and to slightly reduce JIT image size in case of eBPF, while reducing code duplication on this matter in current(/future) eBPF JITs. Signed-off-by: Daniel Borkmann <daniel@iogearbox.net> Acked-by: Alexei Starovoitov <ast@kernel.org> Reviewed-by: Michael Holzheu <holzheu@linux.vnet.ibm.com> Tested-by: Michael Holzheu <holzheu@linux.vnet.ibm.com> Cc: Zi Shen Lim <zlim.lnx@gmail.com> Cc: Yang Shi <yang.shi@linaro.org> Acked-by: Yang Shi <yang.shi@linaro.org> Acked-by: Zi Shen Lim <zlim.lnx@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
2015-12-18arm64: KVM: Add support for 16-bit VMIDVladimir Murzin
The ARMv8.1 architecture extension allows to choose between 8-bit and 16-bit of VMID, so use this capability for KVM. Reviewed-by: Christoffer Dall <christoffer.dall@linaro.org> Signed-off-by: Vladimir Murzin <vladimir.murzin@arm.com> Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
2015-12-18arm/arm64: KVM: Remove unreferenced S2_PGD_ORDERVladimir Murzin
Since commit a987370 ("arm64: KVM: Fix stage-2 PGD allocation to have per-page refcounting") there is no reference to S2_PGD_ORDER, so kill it for the good. Acked-by: Christoffer Dall <christoffer.dall@linaro.org> Signed-off-by: Vladimir Murzin <vladimir.murzin@arm.com> Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
2015-12-18arm64: KVM: debug: Remove spurious inline attributesMarc Zyngier
The debug trapping code is pretty heavy on the "inline" attribute, but most functions are actually referenced in the sysreg tables, making the inlining imposible. Removing the useless inline qualifier seems the right thing to do, having verified that the output code is similar. Cc: Alex Bennée <alex.bennee@linaro.org> Acked-by: Christoffer Dall <christoffer.dall@linaro.org> Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
2015-12-18arm64: mediatek: enable MTK_TIMERYingjoe Chen
Enable MTK_TIMER for MediaTek plaform, which will be used as tick broadcast device and schedule clock. Signed-off-by: Yingjoe Chen <yingjoe.chen@mediatek.com> Signed-off-by: Matthias Brugger <matthias.bgg@gmail.com>
2015-12-18arm64: renesas: r8a7795: fix SATA clock assignmentUlrich Hecht
SATA clock is 815, not 915. Signed-off-by: Ulrich Hecht <ulrich.hecht+renesas@gmail.com> Acked-by: Geert Uytterhoeven <geert+renesas@glider.be> Signed-off-by: Simon Horman <horms+renesas@verge.net.au>
2015-12-18arm64: dts: salvator-x: Enable SATA controllerKouei Abe
This enables SATA device in r8a7795-salvator-x.dts. Signed-off-by: Kouei Abe <kouei.abe.cp@renesas.com> Signed-off-by: Simon Horman <horms+renesas@verge.net.au>