Commit Graph

3547 Commits

Author SHA1 Message Date
Arnd Bergmann c8a12c063b - Add nodes for the DISP function ports
- Add dt-bindings for mt6755
 - Add basic support for mt6755 SoC
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v2
 
 iQIcBAABCAAGBQJXeLPXAAoJELQ5Ylss8dNDiKoP/3yeVm9IcmtizZRZlauOZ4PH
 Rk32lKAITXMXRT6j/xgYTP2F67S0qu+mZW4kz5Ma9vY8Su678iD6+6QfEtJfrH+Z
 T8JTT6yI75ZY6MkBWC5GtcYiWtT8ZGXkflBH8FMHhNxx4LsSN79SQAnzlyv66wFq
 yFtLSMYxRaUhwq+ffT4ksYLw9133UQKcZgf1PJgGN++eXW0bxJ8YV27PD8mzSTcV
 t847mzEY/Kqzl6/upjVjloOIyYf66CVg6xBuVBOOlM2Pa2/mhBip0fkxcE3KpvrN
 erSlIQtCJYZL2fjRnOA67omcmilZw5NIBo8yO7nc5Pzo4CG8nBpoY1k9YtLIoNTp
 sFDhmXzGUgOZHvCqwRoQAGxorNlxFn9mdyItKcClbil0wnPbxwtZ3QcE/7/Q4B03
 0HjWwRb55HKAo0IRZ7hVi2Qk/w4MERYl9/knZPR7kyV2ncyl9txtyYBzc8hosn6m
 IgI9Oyj+HPJ516EzQNbrfOc3sEVSRYJKT8TXxXqeSZnsmHzmO8Crjz3TPUPw+MdP
 5CuN8m/mNsVbqbvlZfdbAsMibJnLmDmi8YKmQ7uJjaZFQcZDayIU4NEDiK9OOqWi
 yr3Q/mO9yH6ego7Z0AQUjP5F81R7YtUG6doLKjduhjPcLPydqILHzfHyI4YQMw5A
 1b1OyLu71uvsZQ3hJjmI
 =aMUx
 -----END PGP SIGNATURE-----

Merge tag 'v4.7-next-dts' of https://github.com/mbgg/linux-mediatek into next/dt64

Merge "ARM: mediatek: dts 64 bit updates for v4.8" from Matthias Brugger:

- Add nodes for the DISP function ports
- Add dt-bindings for mt6755
- Add basic support for mt6755 SoC

* tag 'v4.7-next-dts' of https://github.com/mbgg/linux-mediatek:
  arm64: dts: mediatek: add mt6755 support
  Document: DT: Add bindings for mediatek MT6755 SoC Platform
  arm64: dts: mt8173: Add display subsystem related nodes
2016-07-07 13:58:44 +02:00
Geert Uytterhoeven c805f1a701 arm64: dts: r8a7796/salvator-x: Enable watchdog timer
Enable the Watchdog Timer (WDT) controller on the Renesas Salvator-X
board equipped with an R-Car M3-W (r8a7796) SoC.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Acked-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
Signed-off-by: Simon Horman <horms+renesas@verge.net.au>
2016-07-07 10:21:28 +02:00
Geert Uytterhoeven c8ce8007e5 arm64: dts: r8a7796: Add RWDT node
Add a device node for the Watchdog Timer (WDT) controller on the Renesas
R-Car M3-W (r8a7796) SoC.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Acked-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
Signed-off-by: Simon Horman <horms+renesas@verge.net.au>
2016-07-07 10:21:28 +02:00
Geert Uytterhoeven a9003187a9 arm64: dts: r8a7796: Use SYSC "always-on" PM Domain
Hook up all devices that are part of the CPG/MSSR Clock Domain to the
SYSC "always-on" PM Domain, for a more consistent device-power-area
description in DT.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Simon Horman <horms+renesas@verge.net.au>
2016-07-07 10:21:27 +02:00
Geert Uytterhoeven 56aebae000 arm64: dts: r8a7796: Add SYSC PM Domains
Add a device node for the System Controller.
Hook up the Cortex-A57 CPU core and L2 cache/SCU to their respective PM
Domains.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Simon Horman <horms+renesas@verge.net.au>
2016-07-07 10:21:27 +02:00
Takeshi Kihara 006e1db8f7 arm64: dts: salvator-x: add Salvator-X board on R8A7796 SoC
This patch adds initial board support for R8A7796 Salvator-X.

Signed-off-by: Takeshi Kihara <takeshi.kihara.df@renesas.com>
Signed-off-by: Simon Horman <horms+renesas@verge.net.au>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
2016-07-07 10:21:26 +02:00
Simon Horman 1561f20760 arm64: dts: r8a7796: Add Renesas R8A7796 SoC support
Basic support for the Gen 3 R-Car M3-W SoC.

Based on work for the r8a7795 and r8a7796 SoCs by
Takeshi Kihara, Dirk Behme and Geert Uytterhoeven.

Signed-off-by: Simon Horman <horms+renesas@verge.net.au>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
2016-07-07 10:21:25 +02:00
Ramesh Shanmugasundaram 162cd7845d arm64: dts: r8a7795: Add CAN FD support
Adds CAN FD controller node for r8a7795.

Note: CAN FD controller register base address specified in R-Car Gen3
Hardware User Manual v0.5E is incorrect. The correct address is:

CAN FD - 0xe66c0000

Signed-off-by: Ramesh Shanmugasundaram <ramesh.shanmugasundaram@bp.renesas.com>
Signed-off-by: Simon Horman <horms+renesas@verge.net.au>
2016-07-07 10:21:18 +02:00
Geert Uytterhoeven a5547642a4 arm64: dts: r8a7795: Add missing blank lines between cpu nodes
For consistency with a57_0/a57_1 cpu nodes, and all other nodes.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Simon Horman <horms+renesas@verge.net.au>
2016-07-07 10:21:18 +02:00
Ingo Molnar 36e91aa262 Merge branch 'locking/arch-atomic' into locking/core, because the topic is ready
Signed-off-by: Ingo Molnar <mingo@kernel.org>
2016-07-07 09:12:02 +02:00
Will Deacon 03e3c2b7ed locking/barriers, arch/arm64: Implement LDXR+WFE based smp_cond_load_acquire()
smp_cond_load_acquire() is used to spin on a variable until some
expression involving that variable becomes true.

On arm64, we can build this using the LDXR and WFE instructions, since
clearing of the exclusive monitor as a result of the variable being
changed by another CPU generates an event, which will wake us up out of WFE.

This patch implements smp_cond_load_acquire() using LDXR and WFE, which
themselves are contained in an internal __cmpwait() function.

Signed-off-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: catalin.marinas@arm.com
Cc: linux-arm-kernel@lists.infradead.org
Link: http://lkml.kernel.org/r/1467049434-30451-1-git-send-email-will.deacon@arm.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
2016-07-07 09:10:53 +02:00
Olof Johansson 135a2f38fa The rk3399 gets support for its emmc controller as well as thermal,
i2c and core io-domain nodes and some reasonable default rates
 for core clocks. The rk3368 also gets io-domains for its r88 board
 as well as a small fix for the gic's memory regions.
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1
 
 iQEcBAABCAAGBQJXdbPUAAoJEPOmecmc0R2BiAUH/2UBBQ1f5A9W5bCtxe+kirFa
 R+4tDNske10/h3ey+igciC+6SG4RavHyQn/MoQvu2rzeZvAoPRYi2IVR3/RERf86
 uuDNMqI9C0zQNujuiN/1eVMLAhAUoDZ9+uC1uEJ6ilzKwcsk6Sb+8Fo/zQnR8evd
 Z4GK+YnJtLvxQ3joEh5AcRbd+CaURjAXeJt1HGlDcLCG8HHKNNDpzaFPV2uaoVXp
 1hwx7X8tY5u13K0W7yAzaAq5C4poKa+OpdxlE5g+ryOFWqnqco4l/BBaWg+XK0z5
 XvPjtDE5Di8Wpgjeik/4KLwG/maD9ogdPAZGmg+U2SkGlwVdcOSZmSOE2mFHf3c=
 =W2eY
 -----END PGP SIGNATURE-----

Merge tag 'v4.8-rockchip-dts64-1' of git://git.kernel.org/pub/scm/linux/kernel/git/mmind/linux-rockchip into next/dt64

The rk3399 gets support for its emmc controller as well as thermal,
i2c and core io-domain nodes and some reasonable default rates
for core clocks. The rk3368 also gets io-domains for its r88 board
as well as a small fix for the gic's memory regions.

* tag 'v4.8-rockchip-dts64-1' of git://git.kernel.org/pub/scm/linux/kernel/git/mmind/linux-rockchip:
  arm64: dts: rockchip: add ap_pwroff and ddrio_pwroff pins for rk3399
  arm64: dts: rockchip: Provide emmcclk to PHY for rk3399
  arm64: dts: rockchip: Add soc-ctl-syscon to sdhci for rk3399
  arm64: dts: rockchip: fixes the gic400 2nd region size for rk3368
  arm64: dts: rockchip: add i2c nodes for rk3399
  arm64: dts: rockchip: add thermal nodes for rk3399 SoCs
  arm64: dts: rockchip: add rk3399 io-domain core nodes
  arm64: dts: rockchip: add rk3368-r88 iodomains
  arm64: dts: rockchip: add rk3368 io-domain core nodes
  arm64: dts: rockchip: make rk3368 grf syscons simple-mfds
  arm64: dts: rockchip: enable eMMC for rk3399 EVB
  arm64: dts: rockchip: add sdhci/emmc for rk3399
  arm64: dts: rockchip: make rk3399's grf a "simple-mfd"
  arm64: dts: rockchip: assign default rates for core rk3399 clocks

Signed-off-by: Olof Johansson <olof@lixom.net>
2016-07-06 22:23:27 -07:00
Olof Johansson 744f0b376d Renesas ARM64 Based SoC Defconfig Updates for v4.8
* Enable Renesas R8A7796 SoC in ARM64 defcnfig
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1
 
 iQIcBAABAgAGBQJXdRYaAAoJENfPZGlqN0++NvEQAJN5eMuk92Z426CyubNx/TBM
 pTD/TQg8FyX7wYFSL66LqLZgzYPxzuQlGl0Lfy55IlIsxoGp9xf7t4tZPcvcw5wQ
 BfvhQ6vOeQV8NGbsQS0sRmMrgH6rhPwaQWs/RUawr34v1vVhyRTNJF5pQbpBCqUD
 9pQW9G6G+1WdffjEHQ53Cp56E+nB3sZ0Y/mbI1kydfr5UNx/sTccGOuIPc7UPAwn
 xzpL8XhV6eDKUZu3tGQEDn6rw6iacyi4SB2GQE+QCzw/DB0V/Zb3Z8dd6k2R/6rm
 TZ8xHvz5lucxsGhPpJa43+IVF2nb/RwPs/EsJ8UZrMFgvDEdgCAFEKOwKtI9cPl3
 CELgofXHXMChaA8fwGOVbLlLDNi4H/gV6MEC6jFm8HP6nJRxKwrBGbWQmHKfuqnA
 YPB29ba5GsBUUzV2l8S/Re8eLO85tplzq2vgLSMLixAM4R5LN7tNB2HgRAOrSLND
 ts0qQRyYdIV8Kfdh0e/alXsXnCoJ5RCSkL/KvAsvcNQADizhPLyBKWBk6JZfN0Rr
 XSwcxRybratvNUoKDQjAyCvrSY8fbtJdE4dSa/BmEvY+CH4NsTIye9c7DmoOqluw
 Zoii6V3eTSpHNGooepd8tAtIWF9kXU0xUAB8sFvPwm+O4BSBMIsM78KkuU3E85GS
 +sQKKyhWmsBH0KbDkIZS
 =LjO1
 -----END PGP SIGNATURE-----

Merge tag 'renesas-arm64-defconfig-for-v4.8' of git://git.kernel.org/pub/scm/linux/kernel/git/horms/renesas into next/arm64

Renesas ARM64 Based SoC Defconfig Updates for v4.8

* Enable Renesas R8A7796 SoC in ARM64 defcnfig

* tag 'renesas-arm64-defconfig-for-v4.8' of git://git.kernel.org/pub/scm/linux/kernel/git/horms/renesas:
  arm64: defconfig: enable Renesas R8A7796 SoC

Signed-off-by: Olof Johansson <olof@lixom.net>
2016-07-06 22:00:41 -07:00
Juergen Gross 4b5ae0150f arm/xen: add support for vm_assist hypercall
Add support for the Xen HYPERVISOR_vm_assist hypercall.

Signed-off-by: Juergen Gross <jgross@suse.com>
Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Reviewed-by: Julien Grall <julien.grall@arm.com>
Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
Signed-off-by: David Vrabel <david.vrabel@citrix.com>
2016-07-06 10:42:14 +01:00
Shannon Zhao be1aaf4e40 ARM64: XEN: Add a function to initialize Xen specific UEFI runtime services
When running on Xen hypervisor, runtime services are supported through
hypercall. Add a Xen specific function to initialize runtime services.

Signed-off-by: Shannon Zhao <shannon.zhao@linaro.org>
Reviewed-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Tested-by: Julien Grall <julien.grall@arm.com>
Acked-by: Catalin Marinas <catalin.marinas@arm.com>
2016-07-06 10:34:46 +01:00
Shannon Zhao 9b08aaa319 ARM: XEN: Move xen_early_init() before efi_init()
Move xen_early_init() before efi_init(), then when calling efi_init()
could initialize Xen specific UEFI.

Check if it runs on Xen hypervisor through the flat dts.

Cc: Russell King <linux@arm.linux.org.uk>
Signed-off-by: Shannon Zhao <shannon.zhao@linaro.org>
Reviewed-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Reviewed-by: Julien Grall <julien.grall@arm.com>
Tested-by: Julien Grall <julien.grall@arm.com>
Acked-by: Catalin Marinas <catalin.marinas@arm.com>
2016-07-06 10:34:45 +01:00
Abhilash Kesavan a1924466b7 arm64: dts: exynos: Modify the voltage range for BUCK2 for exynos7
Change the BUCK2 (vdd_atlas) voltage range to '500 - 1200mv' since
CPU DVFS requires it.

Signed-off-by: Abhilash Kesavan <a.kesavan@samsung.com>
Signed-off-by: Krzysztof Kozlowski <k.kozlowski@samsung.com>
2016-07-06 09:43:42 +02:00
Alim Akhtar 46926e27d8 arm64: defconfig: Enable S2MPS11 clock and S3C RTC driver
The S3C RTC controller on Exynos7 platform uses RTC source clock
from S2MPS11 PMIC. This patch enables the required drivers to make
RTC work on Exynos7 Espresso board.

Signed-off-by: Alim Akhtar <alim.akhtar@samsung.com>
Reviewed-by: Javier Martinez Canillas <javier@osg.samsung.com>
Signed-off-by: Krzysztof Kozlowski <k.kozlowski@samsung.com>
2016-07-06 08:00:47 +02:00
Olof Johansson 7f95b51d54 ARM64: DT: Hisilicon Hi6220 hikey board updates for 4.8
- name the GPIO lines
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1
 
 iQIcBAABAgAGBQJXcq9/AAoJEAvIV27ZiWZcuEUQAIjDX8Bq6WNerOSsn/kyWIhb
 0lTNHae6D4mxKax6u9npwiMpBl7JsgVkfzU6es0iZtZe+g6dAOOJMOvjRX/aPZD2
 oiO05vHtU+wKlcCvRPTinTRGK3lAzsPda9xMxEuaztbcg1fmFgflpx4r+n4Gwsy4
 DsPr/Miw3bMPJGtQrx4YFd9Rb7ehkDyyq7PXUBYlRtnZs4Osgxm2LVhoZsw2vQTi
 u7JAA/N8R1bg7jYHEAIW+8GgPGJRcRPesGSmt92ELVVZHROP+7wx6y2PAsP+PDIO
 ZIuVvqGFYWfb5bgzfYS0bApYAzcVdsGLYEzbJHEuHE84ZKzXQ0YGoZmNID3RN5Ns
 2gboC7DJU+e3k6AUoBckn7drpCC7BjkwVJr3NqvyvygztdnhoibdRYxaO8ywfzD+
 TY3ul0GDyUGdWsLcwTdwtbA3azdh3xFmKGzPfJGGhcN7SNfenkTxJsvNroze5PZC
 ilqE5W25tS/ATqqqx2PBPbQQK4wTL0sULbFWSvt6jxYyV0OBekOMyvLnLLux/XOg
 Q4XltZ16nG42ujKv0j/GCz5L0oNIuLBDqt0zF7Wa9pHq0aK+BeDXMmRf3fZ2ZLUu
 4/awoQcXqorxWF8Hc8QTg/iE/I9OkiKpWzzhgIoYwabRPay/WV6Dk0kAO8UjkeAJ
 OK7zJAbKnk1zYAchYxfo
 =bqGx
 -----END PGP SIGNATURE-----

Merge tag 'hi6220-dt-for-4.8' of git://github.com/hisilicon/linux-hisi into next/dt64

ARM64: DT: Hisilicon Hi6220 hikey board updates for 4.8

- name the GPIO lines

* tag 'hi6220-dt-for-4.8' of git://github.com/hisilicon/linux-hisi:
  arm64: dts: hikey: name the GPIO lines

Signed-off-by: Olof Johansson <olof@lixom.net>
2016-07-05 21:47:46 -07:00
Olof Johansson 1fa04d923c The Freescale arm64 device tree updates for 4.8:
- Update address-cells and reg properties of cpu nodes, considering
    MPIDR_EL1[63:32] bits are not used for CPUs identification on ls1043a
    and ls2080a
  - Adds the cache nodes and next-level-cache property for ls1043a and
    ls2080a to get cacheinfo work on these platforms
  - Add dma-coherent for ls1043a PCI nodes to utilize the hardware
    capability on data coherency
  - Add dis_rxdet_inp3_quirk property for USB3 device to disable rx
    detection in P3 PHY mode
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1
 
 iQEcBAABAgAGBQJXcm2nAAoJEFBXWFqHsHzO6DAH/05cUGH7SLcJMBV0AVSEfCVK
 eQTsriBUNNXcUwt70AUBAymfUkHPNysdN4P+KfReOc0j4FMQKqUB9UttUFItmxd2
 plfhkd1wjusV5DqyqQI2Yzp7dsipgJdOoOUc206LISpJ2eaPZrOH0sOXUfZgcZ7h
 F4vz5shTGk+zrvBbOd8VmTRizxr7Q1oUYAwOvAHH0DvFUFMfs3+nK8jN7qynBhnB
 bdRbNxpNz2kkxrad3mIrKGLjPTBfNyhqTB6jwttwptzqOVxVhK59Kopox5dh2Mha
 PvhLes1KYxdpw6CcyyJov7hvleRjKKK8kq08krEBldWeXPHB/GDREuMNg7EcNGU=
 =m0V3
 -----END PGP SIGNATURE-----

Merge tag 'imx-dt64-4.8' of git://git.kernel.org/pub/scm/linux/kernel/git/shawnguo/linux into next/dt64

The Freescale arm64 device tree updates for 4.8:
 - Update address-cells and reg properties of cpu nodes, considering
   MPIDR_EL1[63:32] bits are not used for CPUs identification on ls1043a
   and ls2080a
 - Adds the cache nodes and next-level-cache property for ls1043a and
   ls2080a to get cacheinfo work on these platforms
 - Add dma-coherent for ls1043a PCI nodes to utilize the hardware
   capability on data coherency
 - Add dis_rxdet_inp3_quirk property for USB3 device to disable rx
   detection in P3 PHY mode

* tag 'imx-dt64-4.8' of git://git.kernel.org/pub/scm/linux/kernel/git/shawnguo/linux:
  arm64: dts: ls2080a: Add cache nodes for cacheinfo support
  arm64: dts: ls1043a: Add cache nodes for cacheinfo support
  arm64: dts: ls1043a: Add 'dma-coherent' for ls1043a PCI nodes
  bindings: PCI: layerscape: Add 'dma-coherent' property
  arm64: dts: ls1043a: Add dis_rxdet_inp3_quirk property to USB3 node
  arm64: dts: ls2080a: Add dis_rxdet_inp3_quirk property to USB3 node
  arm64: dts: fsl: Update address-cells and reg properties of cpu nodes

Signed-off-by: Olof Johansson <olof@lixom.net>
2016-07-05 21:10:09 -07:00
Florian Fainelli c4c0e2607a This pull request brings in the build support for the Raspberry Pi
arm64 port.
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1
 
 iQIcBAABCgAGBQJXea6iAAoJELXWKTbR/J7oJlkP/jtpW5QNzWMUYq833W9/XqxU
 CJQ2QvxFnYJGYAdyMUzsE+/nmXZYRwvoY/E2majlt9hblpkv8//r+EDKQzVd8KDs
 AcYIskjljDNMQAzeEIowlA8LlMLRlQzo3xGSZ1F/PqGR7O41kxEGJGEWZM3t0ZEU
 CShP028jc42z09XS/6JrFEEQZqG6QsDfp4ReCOrcI1VBG+NKzJbIAQkKDjw2Dw3g
 NckvB2j6aAHzzQU/O4RZYfS+g/qvd76sTadAbW04aBEBvZ+bArK8w939mBpetpnB
 La6LXmlujRdjugVWWVMJF8NzsE/RCLQI+TJZtUB49TFkcpaG8D4h2gMV7zwGgswv
 HecvCZiZ2eHlc+MTUB9e7buANE5lbxKxZZZXaAAiD9dCBeCfi3N5QNSZ1e5BUnet
 yJKaf0rX1CR46W9YO25pJ3lu2k5oADm7SdnmpVfCcVr6Btsq2ABEod2c0zYP2s5B
 uBPl1R/QB3mzzNltkbICx8ENairp+Z1tKa3AQcmWy7FGb5DX5iqd5ESB/11H0SQs
 uN9ePs32baGk0UyGR1m4HzbZOUlmb6dLnTwIKHdgCW2O5cUNE6QV1fJzoeU14zVK
 6SWWbiEHXEoNQZ9JuqyVO+maMEypQLAQy42SY0EoMdNsSISbcxymVFhKVYhOR+uc
 QVtEJiI3v+p0LD+xL2Nd
 =Rdgt
 -----END PGP SIGNATURE-----
gpgsig -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1
 
 iQIcBAABAgAGBQJXfH/7AAoJEIfQlpxEBwcE2y4P/isPwi6mxx5t5EbbMXBMV+Yd
 QbIH158lScKpfktBavCa9ktc6LtJOJspIGB7dsjMh4dLjtGIacufXRGIt9piakgR
 tZhRE9a49c6mRS2/9LUN7xSWiE/naSWrwxldtz7wl/oR+sf7yfTO/rU/nIgg5F0p
 KfeTq2QYn4kmY9KJl+VI1QN7vtbdIoCsyJMKn5IQRUqTyKeFERV1WQj9oQ0aUbB1
 qUy0Wa2eQvCjNjz7VRXrQIqznkqy/q2yEozsmx6pwkG0GrNWrhST7B46E4lz3h0z
 g0p8M6JvIbI3Wn/Jo8IlYv2Arsy4WNYgSE4oQapdZqFnyOae6O6tAWaJX10oYA+i
 b7ya2vzKXWHVvy37HTQ/Y4yTqdIUMuYw2b7JWIiOlOPZPQa5Y9/EpyxYILkNprQO
 WaOtrWb0R4FNP0PLJ9NXTQfXuTO+xJ/DMs2P5yzhAeNuN+MLgcM7DqJkSwSQVX/c
 40fBP2DVRd+dYodg/sKbQscJsAMmUvzanypYLSlglvAnW7QhACBy8W46Ew9rFV0o
 l1PMdOZhKZZykvrA8sXrStXqNzjnIndg7MpWer+peSr++ZUmXDtXr+4Q0N24ryD+
 fLOVNlK/NMVI9+DheG/U68x983qB1pPHz9qBZkU+KJg544bIkp89N8HV02aXKxfY
 eoA+8Qp/Gdu6e4oOMRe5
 =pK2X
 -----END PGP SIGNATURE-----

Merge tag 'bcm2835-arm64-next-2016-07-03' into soc-arm64/next

This pull request brings in the build support for the Raspberry Pi arm64
port. This has an external dependency on Jason Cooper's irqchip/bcm
branch, it is a stable branch based on v4.7-rc1, and it has been in
-next for a couple of weeks.

Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
2016-07-05 20:49:24 -07:00
Florian Fainelli b2aa1bb2be This pull request brings in the Raspberry Pi 3 DT for its arm64
support.  Note that it also merges in the ethernet DT changes so that
 the Pi3's ethernet can also get the MAC address.
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1
 
 iQIcBAABCgAGBQJXea6FAAoJELXWKTbR/J7oTygP/A85W03JieEH/8K94YZPKD/A
 H/5rag1zm77AI+hnBmItwC+z/aUUHOw2mMBJ4xHZ8+0bM0qWjfKIXpJs4IzoUXrw
 BUNRWql2SeWRC73pntv31BoJl6MmE97Eeex3SvgI10NKh/z03ps5GOyRmwjHZxr+
 T8hWRlYKB9jhapgMCA5CKh/1qzCPRArBimRUfyRwGU9OfoL3nH/ShUL/YF3pic/6
 cIY2U9I9MKEnt6M1aubdjUYts+kB7wDSACMB+LmbYBhFIOaJWyR6d6A+UFNVrlbV
 yYH736VI1mrZq2GV02i4o58u8Tmu7+R8HgTxO0x+TxoyGrqCDBBDmIJz4Kk5fdK8
 hKAngYIfOTKlsGT7FkUoLKkaRxwhmY0QarryjOzlQcyCckwouNt03irlmwtUMU1r
 yt5E1BveZfcGun9mfknJKZfsFmjWTwgUNOC0hVsPS77PY6c01sYUhUr+J8KrrwKT
 bZeJcs14VXNvPDmO5Pvnzih5d8C4whoYY75hkeQ3R0MOFwMrTAz8iHepdO825A8F
 65yJ9l6Ju/pEO0lQJL8klNYXK8gzGdQMP5xjcIKnO1SjN6/Ea/7K1dujfNo1l9Sv
 ulRtV1a50NahDf1k2oXaeTmZbStQml9wwPZmg6dVUn2ixUuVg6TDtJD71+pCwsJd
 efkY7Qr0HmGOyeSQwOXd
 =tOiy
 -----END PGP SIGNATURE-----
gpgsig -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1
 
 iQIcBAABAgAGBQJXfH9vAAoJEIfQlpxEBwcEkU8P/jZL/E1nIdeToSNGd+Rnbok/
 1CqEkx0e5tNr8o2BaslcmQT3QcJg+ioeCTiLqyHBDcg9/IyZZBscUVwa1PjRKt6N
 sD2lhE9pz/gZXZnRjeB/DT5Yr4HjGisNK2ldS6KahN4rh077b8RqKIn93z4ToiYb
 0q7uQg/tE11k9Y8XVZIzlz6Cz4BYrylkMI/oUAA4gg9kBzUMag/zvFqTSf+jVhke
 0D1ekYwrJOdlbkI03XomyRyg58XqDIoWfN2Vn8v8UwS42/dV8LfaziJdWZU8r3gE
 WXwzK8Uhcm59/AFxRiQZppx3aBiYUCwZz+OWHzSRPw4ifCvRvmZONQepFJ96Orj9
 XYam02xGSSFDigV802kBbeDxF/v8OLQgsWuswkwIYVCdy1pR+Ak1kPYbROCUAP4s
 6mhPg8cPHc8hiuGs6XKCz05JOwp+SSrL8qWfaefTI5pWM1or4ygzAeYKR889zUP7
 j4JJRyCMCKc0KNkeO6VHnnVCDkDMn6O6X3NNlfzF0QelIxRurXEu/Exhp1xDpk9w
 eUHD3rauBF6eJnz/bncmqKGO2m4GlrTMOhE2OLiRoW7i2/bLKkA02tpX56GiuIkK
 pUOehuVfCaLfIlXAY+iaUz9w5IuK3VOXkHTUS9MJZEowWT84f51e9+nZhEbwSO/3
 0sZU2VtiARV7nPoz2kCN
 =4CCL
 -----END PGP SIGNATURE-----

Merge tag 'bcm2835-dt-64-next-2016-07-03' into devicetree-arm64/next

This pull request brings in the Raspberry Pi 3 DT for its arm64
support.  Note that it also merges in the ethernet DT changes so that
the Pi3's ethernet can also get the MAC address.

Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
2016-07-05 20:47:49 -07:00
Olof Johansson 87040f7c96 Qualcomm ARM64 Updates for v4.8
* Enable assorted peripherals on APQ8016 SBC
 * Update reserved memory on MSM8916
 * Add MSM8996 peripheral support
 * Add SCM firmware node on MSM8916
 * Add PMU node on MSM8916
 * Add PSCI cpuidle support on MSM8916
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1
 
 iQIcBAABAgAGBQJXcapGAAoJEFKiBbHx2RXVvXkP/1MdEDJ1JZ8NzzCE87jXwN26
 2Hb8bTx8a7pRiOUjH8Lo7OaCWUSoSBtn49C01mtZ3utTQt3XMUqOL8QkVOMhGQnQ
 doC1Av+6r3oLMuWtu7TSvEfyAdyIj8dmA5L5hmxz2/DE9BWJOsvUETzB7abMgjjp
 9iN2p8kykoNOfa0LTLtaxbACrF2GvKbgLfJqwp+yYj+Xg0G97hqx/ce/St4Grm0X
 PCwKnAM45k+2hRLdr8uQg9ygdK3+bfHNiaGz66UmG8y61cy3TifOZESDL9DayO2/
 whU3YhQufoBhIfMMY3WUwsy1BmcVbKiIRrZiYKSnUx7LCXCcQ5lp5pn43dZ8f9GC
 JW4U0+X0jKAOVt6E4hIdPbihZQiWEQBmKGRdmFC0jHaabCwfzwQGjm5nhycMCyJa
 iqr2apjhPG+OS4vgNsCaj/EbdAYAMBnPzZHEpqEK4gpg5h4rsESRLJ9LPRIaBmNd
 pZGUx7g33fKFO7qBDjBN3BvsBPVARrzBApvVBELCMmid/RJkm2GdWJxvGI3X1YYd
 szw4iwzdb/iYobQJgYGUPfuNSPbsNzGKNWyrjUoVCoofgRGiFKAlWdwxKpsLqY+x
 d4kd+hRl5HZ01p/7Cn2ALZ0oF4AWNud8iohIeYa6h/6jZs4Ki0ESp1u1WH1HIOD5
 GZELnl6DI54ZqWE/3siJ
 =GFuN
 -----END PGP SIGNATURE-----

Merge tag 'qcom-arm64-for-4.8' of git://git.kernel.org/pub/scm/linux/kernel/git/agross/linux into next/dt64

Qualcomm ARM64 Updates for v4.8

* Enable assorted peripherals on APQ8016 SBC
* Update reserved memory on MSM8916
* Add MSM8996 peripheral support
* Add SCM firmware node on MSM8916
* Add PMU node on MSM8916
* Add PSCI cpuidle support on MSM8916

* tag 'qcom-arm64-for-4.8' of git://git.kernel.org/pub/scm/linux/kernel/git/agross/linux: (22 commits)
  arm64: dts: msm8996: add sdc2 support
  arm64: dts: msm8996: add sdc2 pinctrl
  arm64: dts: msm8996: add support to blsp2_spi5
  arm64: dts: msm8996: add support to blsp2_spi5 pinctrl
  arm64: dts: msm8996: add support to blsp1_spi0
  arm64: dts: msm8996: add support to blsp1_spi0 pinctrl
  arm64: dts: msm8996: add support to blsp2_i2c0
  arm64: dts: msm8996: add support to blsp2_i2c0 pinctrl
  arm64: dts: msm8996: add support to blsp2_i2c1
  arm64: dts: msm8996: add blsp2_i2c1 pinctrl
  arm64: dts: msm8996: add support to blsp1_i2c2 device
  arm64: dts: msm8996: add blsp1_i2c2 pinctrl nodes.
  arm64: dts: msm8996: add support blsp2_uart2
  arm64: dts: msm8996: add blsp2_uart2 pinctrl nodes.
  arm64: dts: msm8996: add blsp2_uart1 pinctrl
  arm64: dts: msm8996: add msmgpio label
  ARM: dts: msm8916: Update reserved-memory
  arm64: dts: msm8916: Add SCM firmware node
  arm64: dts: qcom: Add msm8916 PMU node
  ARM64: dts: Add PSCI cpuidle support for MSM8916
  ...

Signed-off-by: Olof Johansson <olof@lixom.net>
2016-07-04 22:24:30 -07:00
Olof Johansson 031bd3a91c Qualcomm ARM64 Based defconfig Updates for v4.8
* Enable PM8xxx pwrkey support
 * Enable MSM8996 support
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1
 
 iQIcBAABAgAGBQJXcaHFAAoJEFKiBbHx2RXVBaQQAOY09MEEUQxoOx1P/WnP1cBj
 h5mq3TsQyYRPCeudHD7VouLHFTYITMClTVX+ykFH4au2Me0FBp2Hbz9sPvwo5DrN
 doeWJZo2mRaiLiOuPFwy6/Tgm0HMQwp6zMxWiwYOpndrDjNiBpttyb0NOfCaCFj8
 8T3GvV5XnuTZHOO+8jgfwmFSZlErGibOL9DnapXuZSd0WAL4XQy0xehrY+Ij1nwv
 asswFzMT3Z67JJJwXfo+P6w5vYOkPCRG1BdhqTrRUn+nS79+AkU7ReGfdZJgHdrN
 An06R+gTpl36gdGwxcr2RCXhK+u6IJN2jyL1cs9MBbyEiFBt858SzBXiWSnCntqJ
 BsHVEAlKnwTXdFm5gXu7o90uhQbm+k+NsbdEyLSLxHLEHEm9WobZom9Ei7BZDl9c
 /1nYUalPnU05xCS319MPW/6aSEbuUiTp8xjRC7+9d4S2n/lePMAI6ukutVEe3U4p
 DKsPrk78gy2tkpLhD6NiCfC8qTPCoXAZLmjYN45cEjYWP3NehpKjBzHAeS7IJdgP
 35Z7rOjAGgGuc8nyVAXiwZb/vrT1NuwCF1CMQe350UAYdp3WQu3QCRBJScGdwDUz
 k9UyvasUOdqgiQsM2A5/2lV/7E2XdrtnKpGwM7/vw/Aevv7vxBftclZb1NmVBZmm
 CbZFy0cX77ZgWaNS3fuQ
 =gIDP
 -----END PGP SIGNATURE-----

Merge tag 'qcom-arm64-defconfig-for-4.8' of git://git.kernel.org/pub/scm/linux/kernel/git/agross/linux into next/arm64

Qualcomm ARM64 Based defconfig Updates for v4.8

* Enable PM8xxx pwrkey support
* Enable MSM8996 support

* tag 'qcom-arm64-defconfig-for-4.8' of git://git.kernel.org/pub/scm/linux/kernel/git/agross/linux:
  arm64: defconfig: enable msm8996 pinctrl support
  arm64: defconfig: Enable qcom msm8996 clk drivers
  arm: defconfig: Enable PM8941 pwr key

Signed-off-by: Olof Johansson <olof@lixom.net>
2016-07-04 22:23:23 -07:00
Olof Johansson b6aec2b94d First part of X-Gene DTS changes queued for v4.8
The changes include:
 + 2 clean-up and style-fix patches from Bjorn
 + Correct timer interrupt polarity for X-Gene 2
 + Remove unused qmlclk node on X-Gene 1
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1
 
 iQIcBAABAgAGBQJXacI8AAoJEB11UG/BVQ/g53UP/RL73CQiAEVCUtgxc82z5Vsy
 0eCBs5S5l+7l7Ve9FIBDf/Y4V4mB4Kah4xk5ZPQVTraZhFpfflRuj4ht2Hb8+Mil
 8We173sAAbbmSKUUNT0awXK5w/meBDgnJdnF0IO0UADdWpk7ThnULUsdEMUKIxtn
 +Qenp7e/XDSz2Nb25UONyPRRv8VV9rDovHC4OdRx9qMqk/pZFU9cy8vndQbzukXp
 +KzS2KZ3TrK9G75EVNisghl6NHu+vEwvKv0/u/7AOViN8RdDvCyz3B9JFqlM+XHu
 h5i6EHD8xeK+1CYp5kMBEZfS2ERY7E+3Ymm/kh0jp2bv0b90YJfZqFjtQb22xqTB
 /y8Oeht/QJEIZlvorQY5cyFaMEAptkDbwovbbFqj8OMaM6/UGUFahNz5I5RIPjNm
 CvtZf0fmw+lWQI8V2FHwPb18NqQGrRo8ro2dZWcvlH6pv4wej7uXMP7E7uNqcddv
 /uuSP7WYKuziqM11Cz3NmQ1cX6ArkLUTkNAdfSBSmKlsliaxxXOyuJiwRt55hItS
 uXuq9vKrLEB8s2sGWe3fdm6OPNU09kQqpJQUIuAYZOz0sxcuEpVq1B+9uElA7taT
 1WXAS7zZAY+Jkc19oqr040E5dscRxQ1EVejiWf+AanfHA1mnoK4G9XV5NWwiJIxu
 E5QBVuxMszMv7YPeTXkN
 =injP
 -----END PGP SIGNATURE-----

Merge tag 'xgene-dts-for-v4.8-part1' of https://github.com/AppliedMicro/xgene-next into next/dt64

First part of X-Gene DTS changes queued for v4.8

The changes include:
+ 2 clean-up and style-fix patches from Bjorn
+ Correct timer interrupt polarity for X-Gene 2
+ Remove unused qmlclk node on X-Gene 1

* tag 'xgene-dts-for-v4.8-part1' of https://github.com/AppliedMicro/xgene-next:
  arm64: dts: apm: Remove unused qmlclk node on X-Gene 1
  arm64: dts: apm: Fix timer interrupt polarity for X-Gene 2 SoC
  arm64: dts: apm: Remove leading '0x' from unit addresses
  arm64: dts: apm: Use lowercase consistently for hex constants

Signed-off-by: Olof Johansson <olof@lixom.net>
2016-07-04 21:33:31 -07:00
Olof Johansson e124174e4c ARMv8 Juno/Vexpress defconfig updates for v4.8
1. Enable support for SCPI based sensors(temperature, voltage,
    current and power)
 
 2. Enable the Generic on-chip SRAM driver. SRAM is used for SCPI based
    communication with SCP on Juno
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1
 
 iQIcBAABCAAGBQJXaQ0ZAAoJEABBurwxfuKYmooP/3VSLhrpD7gxtyNrfCxTge4O
 3w3wvFtNrdvsce3nGZzdtcUs+G6iqj69rjwcTzfGMiLBmS2oD+LTfKYAF46JWgE7
 KqHBPhUAz0d9UgfGWyLF8YEneTZ9TM6Gb6/3DFNE5zIIW1JlQBAkN61U1SYFw6JO
 JPM1RbmA51cSosdS0woFZpQ391QwwXLIKkMCQWeWuK6qCjmtMKTAynEgmCXfoejX
 Y2mdeTx0rsXDQsZIsX3Z65cKpd5M8FtN8hCoFm4hDTdMOVVX+aDhlzdk+CRsJWa7
 2pXpUDqdwH1NPOikQqVwzhTizUur6IbXXYNO2V6k/M/HqplqVpuxpu+B90nvjoDo
 UrswqKaJKjh29pRynkWVYGUggC6dQFN31lecEQMEPYk4FVifgwW7dOx3cekVvs67
 wEjBCG2tbL5DkZOLe1s2f22bJQUItEb2Rwzya+o05l6y8ehxzdz/uUyagikPrqJO
 ihCwTqsp/UOREaVUvAGrO3Av3FYcyx1fkN1GGYqsoyUPQognrMEsjBQGvRrmixHB
 Ps4/kd89jJWaCpFMJYf5t0M1lSHGEN5esgSqnG01Pg7oOy2qqt6gNzVyTbH2tnXE
 KvguBriCPIeE7TXQHb0Swep7nufXuTHvYoNQJxfa8oiqoyijlY1Bt3pLE67ST8xE
 Rh1wTtONBqDNLtXoL3sm
 =r5Ie
 -----END PGP SIGNATURE-----

Merge tag 'juno-defconfig-4.8' of git://git.kernel.org/pub/scm/linux/kernel/git/sudeep.holla/linux into next/arm64

ARMv8 Juno/Vexpress defconfig updates for v4.8

1. Enable support for SCPI based sensors(temperature, voltage,
   current and power)

2. Enable the Generic on-chip SRAM driver. SRAM is used for SCPI based
   communication with SCP on Juno

* tag 'juno-defconfig-4.8' of git://git.kernel.org/pub/scm/linux/kernel/git/sudeep.holla/linux:
  arm64: defconfig: enable SENSORS_ARM_SCPI
  arm64: defconfig: enable Generic on-chip SRAM driver

Signed-off-by: Olof Johansson <olof@lixom.net>
2016-07-04 21:32:49 -07:00
Olof Johansson f88cbd2ef9 mvebu defconfig64 for 4.8 (part 1)
- Enable the PCIe host controller found on the Armada 7K/8K SoCs
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1
 
 iEYEABECAAYFAldpA7YACgkQCwYYjhRyO9UpFwCgoVM2L6jaF0AU9Yg+aR8xeHrF
 5xUAnRCe8B0TYqE0Bucj+MwmKXbWTLU7
 =sEoy
 -----END PGP SIGNATURE-----

Merge tag 'mvebu-defconfig64-4.8-1' of git://git.infradead.org/linux-mvebu into next/arm64

mvebu defconfig64 for 4.8 (part 1)

- Enable the PCIe host controller found on the Armada 7K/8K SoCs

* tag 'mvebu-defconfig64-4.8-1' of git://git.infradead.org/linux-mvebu:
  arm64: configs: enable PCIe driver for Armada 7K/8K

Signed-off-by: Olof Johansson <olof@lixom.net>
2016-07-04 20:38:48 -07:00
Gregory CLEMENT 5f4beef6db arm64: dts: marvell: add peripherals clocks for Armada 37xx
Add two new blocks of clocks. The peripheral clocks are the source clocks
of the peripheral of the Armada 3700 SoC.

Signed-off-by: Gregory CLEMENT <gregory.clement@free-electrons.com>
2016-07-04 22:21:13 +02:00
Gregory CLEMENT e3e1a55eda arm64: dts: marvell: add tbg clocks for Armada 37xx
Add a new block of clocks. The Time Base Generators clocks can be the
parent of the peripheral clocks.

Signed-off-by: Gregory CLEMENT <gregory.clement@free-electrons.com>
2016-07-04 22:21:03 +02:00
Gregory CLEMENT ddeba40b05 arm64: dts: marvell: Add xtal clock support for Armada 3700
The configuration of the clock depend of the gpio latch. This information
is stored in the gpio block registers. That's why the block is shared
using a syscon node.

Signed-off-by: Gregory CLEMENT <gregory.clement@free-electrons.com>
2016-07-04 22:19:34 +02:00
Gregory CLEMENT ff60d834d1 arm64: marvell: enable Armada 3700 clock drivers
This patch enables the support for the clocks drivers used on the
Armada 3700.

Signed-off-by: Gregory CLEMENT <gregory.clement@free-electrons.com>
2016-07-04 22:18:06 +02:00
Marc Zyngier 6c41a413fd arm/arm64: Get rid of KERN_TO_HYP
We have both KERN_TO_HYP and kern_hyp_va, which do the exact same
thing. Let's standardize on the latter.

Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Signed-off-by: Christoffer Dall <christoffer.dall@linaro.org>
2016-07-03 23:41:27 +02:00
Marc Zyngier f7bec68d2f arm/arm64: KVM: Prune unused #defines
We can now remove a number of dead #defines, thanks to the trampoline
code being gone.

Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Signed-off-by: Christoffer Dall <christoffer.dall@linaro.org>
2016-07-03 23:41:27 +02:00
Marc Zyngier e537ecd7ef arm: KVM: Allow hyp teardown
So far, KVM was getting in the way of kexec on 32bit (and the arm64
kexec hackers couldn't be bothered to fix it on 32bit...).

With simpler page tables, tearing KVM down becomes very easy, so
let's just do it.

Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Signed-off-by: Christoffer Dall <christoffer.dall@linaro.org>
2016-07-03 23:41:27 +02:00
Marc Zyngier 26781f9ce1 arm/arm64: KVM: Kill free_boot_hyp_pgd
There is no way to free the boot PGD, because it doesn't exist
anymore as a standalone entity.

Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Signed-off-by: Christoffer Dall <christoffer.dall@linaro.org>
2016-07-03 23:41:27 +02:00
Marc Zyngier 12fda8123d arm/arm64: KVM: Drop boot_pgd
Since we now only have one set of page tables, the concept of
boot_pgd is useless and can be removed. We still keep it as
an element of the "extended idmap" thing.

Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Signed-off-by: Christoffer Dall <christoffer.dall@linaro.org>
2016-07-03 23:41:27 +02:00
Marc Zyngier 3421e9d88d arm64: KVM: Simplify HYP init/teardown
Now that we only have the "merged page tables" case to deal with,
there is a bunch of things we can simplify in the HYP code (both
at init and teardown time).

Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Signed-off-by: Christoffer Dall <christoffer.dall@linaro.org>
2016-07-03 23:41:27 +02:00
Marc Zyngier 0535a3e2b2 arm/arm64: KVM: Always have merged page tables
We're in a position where we can now always have "merged" page
tables, where both the runtime mapping and the idmap coexist.

This results in some code being removed, but there is more to come.

Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Signed-off-by: Christoffer Dall <christoffer.dall@linaro.org>
2016-07-03 23:41:27 +02:00
Marc Zyngier d174591016 arm64: KVM: Runtime detection of lower HYP offset
Add the code that enables the switch to the lower HYP VA range.

Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Signed-off-by: Christoffer Dall <christoffer.dall@linaro.org>
2016-07-03 23:41:27 +02:00
Marc Zyngier 1df3e2347a arm/arm64: KVM: Export __hyp_text_start/end symbols
Declare the __hyp_text_start/end symbols in asm/virt.h so that
they can be reused without having to declare them locally.

Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Signed-off-by: Christoffer Dall <christoffer.dall@linaro.org>
2016-07-03 23:41:27 +02:00
Marc Zyngier fd81e6bf39 arm64: KVM: Refactor kern_hyp_va to deal with multiple offsets
As we move towards a selectable HYP VA range, it is obvious that
we don't want to test a variable to find out if we need to use
the bottom VA range, the top VA range, or use the address as is
(for VHE).

Instead, we can expand our current helper to generate the right
mask or nop with code patching. We default to using the top VA
space, with alternatives to switch to the bottom one or to nop
out the instructions.

Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Signed-off-by: Christoffer Dall <christoffer.dall@linaro.org>
2016-07-03 23:41:27 +02:00
Marc Zyngier d53d9bc652 arm64: KVM: Define HYP offset masks
Define the two possible HYP VA regions in terms of VA_BITS,
and keep HYP_PAGE_OFFSET_MASK as a temporary compatibility
definition.

Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Signed-off-by: Christoffer Dall <christoffer.dall@linaro.org>
2016-07-03 23:41:27 +02:00
Marc Zyngier 853c3b21ff arm64: Add ARM64_HYP_OFFSET_LOW capability
As we need to indicate to the rest of the kernel which region of
the HYP VA space is safe to use, add a capability that will
indicate that KVM should use the [VA_BITS-2:0] range.

Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Signed-off-by: Christoffer Dall <christoffer.dall@linaro.org>
2016-07-03 23:41:27 +02:00
Marc Zyngier fd16fe6820 arm64: KVM: Kill HYP_PAGE_OFFSET
HYP_PAGE_OFFSET is not massively useful. And the way we use it
in KERN_HYP_VA is inconsistent with the equivalent operation in
EL2, where we use a mask instead.

Let's replace the uses of HYP_PAGE_OFFSET with HYP_PAGE_OFFSET_MASK,
and get rid of the pointless macro.

Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Signed-off-by: Christoffer Dall <christoffer.dall@linaro.org>
2016-07-03 23:41:27 +02:00
Marc Zyngier 3f0f8830d4 arm/arm64: KVM: Remove hyp_kern_va helper
hyp_kern_va is now completely unused, so let's remove it entirely.

Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Signed-off-by: Christoffer Dall <christoffer.dall@linaro.org>
2016-07-03 23:41:27 +02:00
Marc Zyngier cf7df13d3c arm64: KVM: Always reference __hyp_panic_string via its kernel VA
__hyp_panic_string is passed via the HYP panic code to the panic
function, and is being "upgraded" to a kernel address, as it is
referenced by the HYP code (in a PC-relative way).

This is a bit silly, and we'd be better off obtaining the kernel
address and not mess with it at all. This patch implements this
with a tiny bit of asm glue, by forcing the string pointer to be
read from the literal pool.

Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Signed-off-by: Christoffer Dall <christoffer.dall@linaro.org>
2016-07-03 23:41:27 +02:00
Marc Zyngier 82a81bff90 arm64: KVM: Merged page tables documentation
Since dealing with VA ranges tends to hurt my brain badly, let's
start with a bit of documentation that will hopefully help
understanding what comes next...

Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Signed-off-by: Christoffer Dall <christoffer.dall@linaro.org>
2016-07-03 23:41:27 +02:00
Marc Zyngier 50926d82fa KVM: arm/arm64: The GIC is dead, long live the GIC
I don't think any single piece of the KVM/ARM code ever generated
as much hatred as the GIC emulation.

It was written by someone who had zero experience in modeling
hardware (me), was riddled with design flaws, should have been
scrapped and rewritten from scratch long before having a remote
chance of reaching mainline, and yet we supported it for a good
three years. No need to mention the names of those who suffered,
the git log is singing their praises.

Thankfully, we now have a much more maintainable implementation,
and we can safely put the grumpy old GIC to rest.

Fellow hackers, please raise your glass in memory of the GIC:

	The GIC is dead, long live the GIC!

Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Signed-off-by: Christoffer Dall <christoffer.dall@linaro.org>
2016-07-03 23:09:37 +02:00
Mars Cheng aea1c315b6 arm64: dts: mediatek: add mt6755 support
This adds basic chip support for MT6755 SoC.

Signed-off-by: Mars Cheng <mars.cheng@mediatek.com>
Signed-off-by: Matthias Brugger <matthias.bgg@gmail.com>
2016-07-03 07:57:21 +02:00
Ard Biesheuvel 40f87d3114 arm64: mm: fold init_pgd() into __create_pgd_mapping()
The routine __create_pgd_mapping() does nothing except calling init_pgd(),
which has no other callers. So fold the latter into the former. Also, drop
a comment that has gone stale.

Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
2016-07-01 11:56:27 +01:00
Catalin Marinas 4133af6c04 arm64: mm: Remove split_p*d() functions
Since the efi_create_mapping() no longer generates block mappings
and being the last user of the split_p*d code, remove these functions
and the corresponding TLBI.

Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
[ardb: replace 'overlapping regions' with 'block mappings' in commit log]
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
2016-07-01 11:56:27 +01:00
Ard Biesheuvel 74c102c988 arm64: efi: avoid block mappings for unaligned UEFI memory regions
When running the OS with a page size > 4 KB, we need to round up mappings
for regions that are not aligned to the OS's page size. We already avoid
block mappings for EfiRuntimeServicesCode/Data regions for other reasons,
but in the unlikely event that other unaliged regions exists that have the
EFI_MEMORY_RUNTIME attribute set, ensure that unaligned regions are always
mapped down to pages. This way, the overlapping page is guaranteed not to
be covered by a block mapping that needs to be split.

Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
2016-07-01 11:56:26 +01:00
Ard Biesheuvel bd264d046a arm64: efi: always map runtime services code and data regions down to pages
To avoid triggering diagnostics in the MMU code that are finicky about
splitting block mappings into more granular mappings, ensure that regions
that are likely to appear in the Memory Attributes table as well as the
UEFI memory map are always mapped down to pages. This way, we can use
apply_to_page_range() instead of create_pgd_mapping() for the second pass,
which cannot split or merge block entries, and operates strictly on PTEs.

Note that this aligns the arm64 Memory Attributes table handling code with
the ARM code, which already uses apply_to_page_range() to set the strict
permissions.

Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
2016-07-01 11:56:26 +01:00
Ard Biesheuvel 53e1b32910 arm64: mm: add param to force create_pgd_mapping() to use page mappings
Add a bool parameter 'allow_block_mappings' to create_pgd_mapping() and
the various helper functions that it descends into, to give the caller
control over whether block entries may be used to create the mapping.

The UEFI runtime mapping routines will use this to avoid creating block
entries that would need to split up into page entries when applying the
permissions listed in the Memory Attributes firmware table.

This also replaces the block_mappings_allowed() helper function that was
added for DEBUG_PAGEALLOC functionality, but the resulting code is
functionally equivalent (given that debug_page_alloc does not operate on
EFI page table entries anyway)

Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
2016-07-01 11:56:26 +01:00
Andre Przywara 7dd01aef05 arm64: trap userspace "dc cvau" cache operation on errata-affected core
The ARM errata 819472, 826319, 827319 and 824069 for affected
Cortex-A53 cores demand to promote "dc cvau" instructions to
"dc civac". Since we allow userspace to also emit those instructions,
we should make sure that "dc cvau" gets promoted there too.
So lets grasp the nettle here and actually trap every userland cache
maintenance instruction once we detect at least one affected core in
the system.
We then emulate the instruction by executing it on behalf of userland,
promoting "dc cvau" to "dc civac" on the way and injecting access
fault back into userspace.

Signed-off-by: Andre Przywara <andre.przywara@arm.com>
[catalin.marinas@arm.com: s/set_segfault/arm64_notify_segfault/]
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
2016-07-01 11:46:00 +01:00
Andre Przywara 390bf1773c arm64: consolidate signal injection on emulation errors
The code for injecting a signal into userland if a trapped instruction
fails emulation due to a _userland_ error (like an illegal address)
will be used more often with the next patch.
Factor out the core functionality into a separate function and use
that both for the existing trap handler and for the deprecated
instructions emulation.

Signed-off-by: Andre Przywara <andre.przywara@arm.com>
[catalin.marinas@arm.com: s/set_segfault/arm64_notify_segfault/]
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
2016-07-01 11:43:30 +01:00
Andre Przywara 8e2318521b arm64: errata: Calling enable functions for CPU errata too
Currently we call the (optional) enable function for CPU _features_
only. As CPU _errata_ descriptions share the same data structure and
having an enable function is useful for errata as well (for instance
to set bits in SCTLR), lets call it when enumerating erratas too.

Signed-off-by: Andre Przywara <andre.przywara@arm.com>
Reviewed-by: Suzuki K Poulose <suzuki.poulose@arm.com>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
2016-07-01 11:30:28 +01:00
Andre Przywara 823066d9ed arm64: include alternative handling in dcache_by_line_op
The newly introduced dcache_by_line_op macro is used at least in
one occassion at the moment to issue a "dc cvau" instruction,
which is affected by ARM errata 819472, 826319, 827319 and 824069.
Change the macro to allow for alternative patching in there to
protect affected Cortex-A53 cores.

Signed-off-by: Andre Przywara <andre.przywara@arm.com>
[catalin.marinas@arm.com: indentation fixups]
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
2016-07-01 11:28:16 +01:00
Andre Przywara 290622efc7 arm64: fix "dc cvau" cache operation on errata-affected core
The ARM errata 819472, 826319, 827319 and 824069 for affected
Cortex-A53 cores demand to promote "dc cvau" instructions to
"dc civac" as well.
Attribute the usage of the instruction in __flush_cache_user_range
to also be covered by our alternative patching efforts.
For that we introduce an assembly macro which both deals with
alternatives while still tagging the instructions as USER.

Signed-off-by: Andre Przywara <andre.przywara@arm.com>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
2016-07-01 11:26:20 +01:00
Andre Przywara b82bfa4793 Revert "arm64: alternatives: add enable parameter to conditional asm macros"
Commit 77ee306c0a ("arm64: alternatives: add enable parameter to
conditional asm macros") extended the alternative assembly macros.
Unfortunately this does not really work as one would expect, as the
enable parameter in fact correctly protects the alternative section
magic, but not the actual code sequences.
This results in having both the original instruction(s) _and_  the
alternative ones, if enable if false.
Since there is no user of this macros anyway, just revert it.

This reverts commit 77ee306c0a.

Signed-off-by: Andre Przywara <andre.przywara@arm.com>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
2016-07-01 11:26:15 +01:00
Kefeng Wang 6c5269f33e arm64: mm: remove unnecessary BUG_ON
The memblock_alloc() and memblock_alloc_base() will panic on their own
if no free memory, remove pointless BUG_ON.

Signed-off-by: Kefeng Wang <wangkefeng.wang@huawei.com>
Acked-by: Mark Rutland <mark.rutland@arm.com>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
2016-06-30 17:55:04 +01:00
Thomas Petazzoni c7f2735547 arm64: dts: marvell: add XOR engine description for Armada 7K/8K CP
This commit adds the Device Tree description for the two XOR engines
found in the CP part of the Armada 7K/8K SoC.

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Signed-off-by: Gregory CLEMENT <gregory.clement@free-electrons.com>
2016-06-30 13:50:30 +02:00
Thomas Petazzoni 7eec659478 arm64: dts: marvell: adjust to the latest mv-xor-v2 DT binding
As suggested by Rob Herring, we should:

 1/ Use a SoC-specific compatible string in addition to the more generic
    one.

 2/ The generic compatible string has been changed from
    "marvell,mv-xor-v2" to "marvell,xor-v2".

We simply reflect the changes made to the Device Tree bindings to the
relevant Marvell 7K/8K Device Tree files.

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Signed-off-by: Gregory CLEMENT <gregory.clement@free-electrons.com>
2016-06-30 13:49:55 +02:00
David S. Miller ee58b57100 Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Several cases of overlapping changes, except the packet scheduler
conflicts which deal with the addition of the free list parameter
to qdisc_enqueue().

Signed-off-by: David S. Miller <davem@davemloft.net>
2016-06-30 05:03:36 -04:00
Xinliang Liu 339d00cb17 arm64: dts: hi6220: Add media subsystem reset dts
Add media subsystem reset dts support.

Signed-off-by: Chen Feng <puck.chen@hisilicon.com>
Signed-off-by: Xinliang Liu <xinliang.liu@linaro.org>
Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
2016-06-29 23:39:08 +02:00
Marc Zyngier 0996353f8e arm/arm64: KVM: Make default HYP mappings non-excutable
Structures that can be generally written to don't have any requirement
to be executable (quite the opposite). This includes the kvm and vcpu
structures, as well as the stacks.

Let's change the default to incorporate the XN flag.

Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Signed-off-by: Christoffer Dall <christoffer.dall@linaro.org>
2016-06-29 14:01:34 +02:00
Marc Zyngier 5900270550 arm/arm64: KVM: Map the HYP text as read-only
There should be no reason for mapping the HYP text read/write.

As such, let's have a new set of flags (PAGE_HYP_EXEC) that allows
execution, but makes the page as read-only, and update the two call
sites that deal with mapping code.

Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Signed-off-by: Christoffer Dall <christoffer.dall@linaro.org>
2016-06-29 14:01:34 +02:00
Marc Zyngier 74a6b8885f arm/arm64: KVM: Enforce HYP read-only mapping of the kernel's rodata section
In order to be able to use C code in HYP, we're now mapping the kernel's
rodata in HYP. It works absolutely fine, except that we're mapping it RWX,
which is not what it should be.

Add a new HYP_PAGE_RO protection, and pass it as the protection flags
when mapping the rodata section.

Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Signed-off-by: Christoffer Dall <christoffer.dall@linaro.org>
2016-06-29 13:59:14 +02:00
Marc Zyngier 1166f3fe6a arm64: Add PTE_HYP_XN page table flag
EL2 page tables can be configured to deny code from being
executed, which is done by setting bit 54 in the page descriptor.

It is the same bit as PTE_UXN, but the "USER" reference felt odd
in the hypervisor code.

Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Signed-off-by: Christoffer Dall <christoffer.dall@linaro.org>
2016-06-29 13:59:14 +02:00
Marc Zyngier c8dddecdeb arm/arm64: KVM: Add a protection parameter to create_hyp_mappings
Currently, create_hyp_mappings applies a "one size fits all" page
protection (PAGE_HYP). As we're heading towards separate protections
for different sections, let's make this protection a parameter, and
let the callers pass their prefered protection (PAGE_HYP for everyone
for the time being).

Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Signed-off-by: Christoffer Dall <christoffer.dall@linaro.org>
2016-06-29 13:59:14 +02:00
Linus Walleij bbaf867e2d arm64: dts: hikey: name the GPIO lines
This names the GPIO lines on the HiKey board in accordance with
the 96Board Specification for especially the Low Speed External
Connector: "GPIO-A" thru "GPIO-L".

This will make these line names reflect through to userspace
so that they can easily be identified and used with the new
character device ABI.

Some care has been taken to name all lines, not just those used
by the external connectors, also lines that are muxed into some
other function than GPIO: these are named "[FOO]" so that users
can see with lsgpio what all lines are used for.

Cc: devicetree@vger.kernel.org
Cc: John Stultz <john.stultz@linaro.org>
Cc: Rob Herring <robh@kernel.org>
Cc: David Mandala <david.mandala@linaro.org>
Cc: Haojian Zhuang <haojian.zhuang@linaro.org>
Cc: Wei Xu <xuwei5@hisilicon.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Wei Xu <xuwei5@hisilicon.com>
2016-06-28 17:36:04 +01:00
Huang Tao 1e8567d53d arm64: dts: rockchip: Add rktimer device node for rk3399
Add a 'rktimer' node in the device treee for the ARM64 rk3399 SoC.

Signed-off-by: Huang Tao <huangtao@rock-chips.com>
Cc: Daniel Lezcano <daniel.lezcano@linaro.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Heiko Stuebner <heiko@sntech.de>
Tested-by: Jianqun Xu <jay.xu@rock-chips.com>
Signed-off-by: Caesar Wang <wxt@rock-chips.com>
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
2016-06-28 10:17:09 +02:00
Ard Biesheuvel 9fdc14c55c arm64: mm: fix location of _etext
As Kees Cook notes in the ARM counterpart of this patch [0]:

  The _etext position is defined to be the end of the kernel text code,
  and should not include any part of the data segments. This interferes
  with things that might check memory ranges and expect executable code
  up to _etext.

In particular, Kees is referring to the HARDENED_USERCOPY patch set [1],
which rejects attempts to call copy_to_user() on kernel ranges containing
executable code, but does allow access to the .rodata segment. Regardless
of whether one may or may not agree with the distinction, it makes sense
for _etext to have the same meaning across architectures.

So let's put _etext where it belongs, between .text and .rodata, and fix
up existing references to use __init_begin instead, which unlike _end_rodata
includes the exception and notes sections as well.

The _etext references in kaslr.c are left untouched, since its references
to [_stext, _etext) are meant to capture potential jump instruction targets,
and so disregarding .rodata is actually an improvement here.

[0] http://article.gmane.org/gmane.linux.kernel/2245084
[1] http://thread.gmane.org/gmane.linux.kernel.hardened.devel/2502

Reported-by: Kees Cook <keescook@chromium.org>
Reviewed-by: Mark Rutland <mark.rutland@arm.com>
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Reviewed-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
2016-06-27 18:21:27 +01:00
Mark Rutland ea2cbee3bc arm64: mm: simplify memblock numa node extraction
We currently open-code extracting the NUMA node of a memblock region,
which requires an ifdef to cater for !CONFIG_NUMA builds where the
memblock_region::nid field does not exist.

The generic memblock_get_region_node helper is intended to cater for
this. For CONFIG_HAVE_MEMBLOCK_NODE_MAP, builds this returns reg->nid,
and for for !CONFIG_HAVE_MEMBLOCK_NODE_MAP builds this is a static
inline that returns 0. Note that for arm64,
CONFIG_HAVE_MEMBLOCK_NODE_MAP is selected iff CONFIG_NUMA is.

This patch makes use of memblock_get_region_node to simplify the arm64
code. At the same time, we can move the nid variable definition into the
loop, as this is the only place it is used.

Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Reviewed-by: Steve Capper <steve.capper@arm.com>
Acked-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
2016-06-27 18:05:39 +01:00
Geoff Levand 221f2c770e arm64/kexec: Add pr_debug output
To aid in debugging kexec problems or when adding new functionality to
kexec add a new routine kexec_image_info() and several inline pr_debug
statements.

Signed-off-by: Geoff Levand <geoff@infradead.org>
Reviewed-by: James Morse <james.morse@arm.com>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
2016-06-27 16:31:26 +01:00
Geoff Levand b26a4ae399 arm64/kexec: Enable kexec in the arm64 defconfig
Signed-off-by: Geoff Levand <geoff@infradead.org>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
2016-06-27 16:31:25 +01:00
Geoff Levand d28f6df130 arm64/kexec: Add core kexec support
Add three new files, kexec.h, machine_kexec.c and relocate_kernel.S to the
arm64 architecture that add support for the kexec re-boot mechanism
(CONFIG_KEXEC) on arm64 platforms.

Signed-off-by: Geoff Levand <geoff@infradead.org>
Reviewed-by: James Morse <james.morse@arm.com>
[catalin.marinas@arm.com: removed dead code following James Morse's comments]
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
2016-06-27 16:31:25 +01:00
Geoff Levand f9076ecfb1 arm64: Add back cpu reset routines
Commit 68234df4ea ("arm64: kill flush_cache_all()") removed the global
arm64 routines cpu_reset() and cpu_soft_restart() needed by the arm64
kexec and kdump support.  Add back a simplified version of
cpu_soft_restart() with some changes needed for kexec in the new files
cpu_reset.S, and cpu_reset.h.

When a CPU is reset it needs to be put into the exception level it had when
it entered the kernel. Update cpu_soft_restart() to accept an argument
which signals if the reset address should be entered at EL1 or EL2, and
add a new hypercall HVC_SOFT_RESTART which is used for the EL2 switch.

Signed-off-by: Geoff Levand <geoff@infradead.org>
Reviewed-by: James Morse <james.morse@arm.com>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
2016-06-27 16:31:25 +01:00
James Morse b69e0dc14c arm64: smp: Add function to determine if cpus are stuck in the kernel
kernel/smp.c has a fancy counter that keeps track of the number of CPUs
it marked as not-present and left in cpu_park_loop(). If there are any
CPUs spinning in here, features like kexec or hibernate may release them
by overwriting this memory.

This problem also occurs on machines using spin-tables to release
secondary cores.
After commit 44dbcc93ab ("arm64: Fix behavior of maxcpus=N")
we bring all known cpus into the secondary holding pen, meaning this
memory can't be re-used by kexec or hibernate.

Add a function cpus_are_stuck_in_kernel() to determine if either of these
cases have occurred.

Signed-off-by: James Morse <james.morse@arm.com>
Acked-by: Mark Rutland <mark.rutland@arm.com>
Reviewed-by: Suzuki K Poulose <suzuki.poulose@arm.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
[catalin.marinas@arm.com: cherry-picked from mainline for kexec dependency]
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
2016-06-27 16:24:51 +01:00
Alex Thorlton 80e7559607 efi: Convert efi_call_virt() to efi_call_virt_pointer()
This commit makes a few slight modifications to the efi_call_virt() macro
to get it to work with function pointers that are stored in locations
other than efi.systab->runtime, and renames the macro to
efi_call_virt_pointer().  The majority of the changes here are to pull
these macros up into header files so that they can be accessed from
outside of drivers/firmware/efi/runtime-wrappers.c.

The most significant change not directly related to the code move is to
add an extra "p" argument into the appropriate efi_call macros, and use
that new argument in place of the, formerly hard-coded,
efi.systab->runtime pointer.

The last piece of the puzzle was to add an efi_call_virt() macro back into
drivers/firmware/efi/runtime-wrappers.c to wrap around the new
efi_call_virt_pointer() macro - this was mainly to keep the code from
looking too cluttered by adding a bunch of extra references to
efi.systab->runtime everywhere.

Note that I also broke up the code in the efi_call_virt_pointer() macro a
bit in the process of moving it.

Signed-off-by: Alex Thorlton <athorlton@sgi.com>
Signed-off-by: Matt Fleming <matt@codeblueprint.co.uk>
Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Dimitri Sivanich <sivanich@sgi.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Roy Franz <roy.franz@linaro.org>
Cc: Russ Anderson <rja@sgi.com>
Cc: Russell King <linux@armlinux.org.uk>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Will Deacon <will.deacon@arm.com>
Cc: linux-arm-kernel@lists.infradead.org
Cc: linux-efi@vger.kernel.org
Link: http://lkml.kernel.org/r/1466839230-12781-5-git-send-email-matt@codeblueprint.co.uk
Signed-off-by: Ingo Molnar <mingo@kernel.org>
2016-06-27 13:06:56 +02:00
Douglas Anderson 5d26ad9cfb arm64: dts: rockchip: add ap_pwroff and ddrio_pwroff pins for rk3399
There are two sleep related pins on rk3399: ap_pwroff and ddrio_pwroff.
Let's add the definition of these two pins to rk3399's main dtsi file so
that boards can use them.

These two pins are similar to the global_pwroff and ddrio_pwroff pins in
rk3288 and are expected to be used in the same way: boards will likely
want to configure these pinctrl settings in their global pinctrl hog
list.

Note that on rk3288 there were two additional pins in the "sleep"
section: "ddr0_retention" and "ddr1_retention".  On rk3288 designs these
pins appeared to actually route from rk3288 back to rk3288.  Presumably
on rk3399 this is simply not needed since the pins don't appear to exist
there.

Signed-off-by: Douglas Anderson <dianders@chromium.org>
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
2016-06-27 01:07:40 +02:00
Srinivas Kandagatla f1a176f25a arm64: defconfig: enable msm8996 pinctrl support
This patch enables pinctrl support required to boot msm8996/apq8096
boards.

Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Signed-off-by: Andy Gross <andy.gross@linaro.org>
2016-06-24 22:36:33 -05:00
Stephen Boyd 28f049df25 arm64: defconfig: Enable qcom msm8996 clk drivers
Enable the clk drivers on msm8996. This allows us to boot and
test most device drivers on this SoC.

Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
Signed-off-by: Andy Gross <andy.gross@linaro.org>
2016-06-24 22:36:33 -05:00
Andy Gross fde88a0715 arm: defconfig: Enable PM8941 pwr key
This patch enables the PM8941 pwr key driver.

Signed-off-by: Andy Gross <andy.gross@linaro.org>
Reviewed-by: Bjorn Andersson <bjorn.andersson@linaro.org>
2016-06-24 22:36:33 -05:00
Srinivas Kandagatla a670279898 arm64: dts: msm8996: add sdc2 support
This patch adds support to sdc2 sdhci controller, which is used on some
of the boards.

Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Signed-off-by: Andy Gross <andy.gross@linaro.org>
2016-06-24 22:30:17 -05:00
Srinivas Kandagatla 84ddf1ee1e arm64: dts: msm8996: add sdc2 pinctrl
This patch adds pinctrl required for sdhci for external sd card
controller.

Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Signed-off-by: Andy Gross <andy.gross@linaro.org>
2016-06-24 22:30:17 -05:00
Srinivas Kandagatla db6c8c8325 arm64: dts: msm8996: add support to blsp2_spi5
This patch adds support to blsp2_spi5 device, which is used in some of
the APQ8096 based boards.

Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Signed-off-by: Andy Gross <andy.gross@linaro.org>
2016-06-24 22:30:17 -05:00
Srinivas Kandagatla 7dba64a23e arm64: dts: msm8996: add support to blsp2_spi5 pinctrl
This patch adds pinctrl required for blsp2_spi5 device.

Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Signed-off-by: Andy Gross <andy.gross@linaro.org>
2016-06-24 22:30:17 -05:00
Srinivas Kandagatla 604677b415 arm64: dts: msm8996: add support to blsp1_spi0
This patch adds support to blsp1_spi0 which is used on some of APQ8096
based boards.

Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Signed-off-by: Andy Gross <andy.gross@linaro.org>
2016-06-24 22:30:17 -05:00
Srinivas Kandagatla 9f05d8ff8a arm64: dts: msm8996: add support to blsp1_spi0 pinctrl
This patch adds pinctrl nodes required for blsp1_spi0.

Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Signed-off-by: Andy Gross <andy.gross@linaro.org>
2016-06-24 22:30:17 -05:00
Srinivas Kandagatla bf5443bcaa arm64: dts: msm8996: add support to blsp2_i2c0
This patch adds support to blsp2_i2c0, which is used on some of the
APQ8096 based boards.

Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Signed-off-by: Andy Gross <andy.gross@linaro.org>
2016-06-24 22:30:17 -05:00
Srinivas Kandagatla e25d57c106 arm64: dts: msm8996: add support to blsp2_i2c0 pinctrl
This patch adds support to blsp2_i2c0 pinctrl.

Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Signed-off-by: Andy Gross <andy.gross@linaro.org>
2016-06-24 22:30:17 -05:00
Srinivas Kandagatla d41d0cee9a arm64: dts: msm8996: add support to blsp2_i2c1
This patch adds support to blsp2_i2c1, which is used in one of the
apq8096 based boards.

Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Signed-off-by: Andy Gross <andy.gross@linaro.org>
2016-06-24 22:30:16 -05:00
Srinivas Kandagatla 0e7f196083 arm64: dts: msm8996: add blsp2_i2c1 pinctrl
This patch adds support to blsp2_i2c1 pinctrl nodes.

Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Signed-off-by: Andy Gross <andy.gross@linaro.org>
2016-06-24 22:30:16 -05:00
Srinivas Kandagatla 21a4038461 arm64: dts: msm8996: add support to blsp1_i2c2 device
This patch adds blsp1_i2c2 support, as this bus is used on some of the
apq8096 boards.

Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Signed-off-by: Andy Gross <andy.gross@linaro.org>
2016-06-24 22:30:16 -05:00
Srinivas Kandagatla 5f9d54ffc1 arm64: dts: msm8996: add blsp1_i2c2 pinctrl nodes.
This patch adds pinctrl nodes required for blsp1_i2c2.

Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Signed-off-by: Andy Gross <andy.gross@linaro.org>
2016-06-24 22:30:16 -05:00
Srinivas Kandagatla fda48e6109 arm64: dts: msm8996: add support blsp2_uart2
This patch adds bslp2_uart2 node in soc so that boards that use this
uart can enable it.

Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Signed-off-by: Andy Gross <andy.gross@linaro.org>
2016-06-24 22:30:16 -05:00
Srinivas Kandagatla 96f86b7d68 arm64: dts: msm8996: add blsp2_uart2 pinctrl nodes.
This patch adds blsp2_uart2 pinctrl nodes.

Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Signed-off-by: Andy Gross <andy.gross@linaro.org>
2016-06-24 22:30:16 -05:00
Srinivas Kandagatla 22e6789f94 arm64: dts: msm8996: add blsp2_uart1 pinctrl
This patch adds 2pin and 4 pin uart pinctrl support for blsp2_uart1

Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Signed-off-by: Andy Gross <andy.gross@linaro.org>
2016-06-24 22:30:16 -05:00
Srinivas Kandagatla 84361086df arm64: dts: msm8996: add msmgpio label
This patch adds msmgpio label for pin and gpio controller so that
it can referenced in dedicated pins file and other board level gpios.

Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Signed-off-by: Andy Gross <andy.gross@linaro.org>
2016-06-24 22:30:16 -05:00
Linus Torvalds 086e3eb65e Merge branch 'akpm' (patches from Andrew)
Merge misc fixes from Andrew Morton:
 "Two weeks worth of fixes here"

* emailed patches from Andrew Morton <akpm@linux-foundation.org>: (41 commits)
  init/main.c: fix initcall_blacklisted on ia64, ppc64 and parisc64
  autofs: don't get stuck in a loop if vfs_write() returns an error
  mm/page_owner: avoid null pointer dereference
  tools/vm/slabinfo: fix spelling mistake: "Ocurrences" -> "Occurrences"
  fs/nilfs2: fix potential underflow in call to crc32_le
  oom, suspend: fix oom_reaper vs. oom_killer_disable race
  ocfs2: disable BUG assertions in reading blocks
  mm, compaction: abort free scanner if split fails
  mm: prevent KASAN false positives in kmemleak
  mm/hugetlb: clear compound_mapcount when freeing gigantic pages
  mm/swap.c: flush lru pvecs on compound page arrival
  memcg: css_alloc should return an ERR_PTR value on error
  memcg: mem_cgroup_migrate() may be called with irq disabled
  hugetlb: fix nr_pmds accounting with shared page tables
  Revert "mm: disable fault around on emulated access bit architecture"
  Revert "mm: make faultaround produce old ptes"
  mailmap: add Boris Brezillon's email
  mailmap: add Antoine Tenart's email
  mm, sl[au]b: add __GFP_ATOMIC to the GFP reclaim mask
  mm: mempool: kasan: don't poot mempool objects in quarantine
  ...
2016-06-24 19:08:33 -07:00
Michal Hocko f3610a6aff arm64: get rid of superfluous __GFP_REPEAT
__GFP_REPEAT has a rather weak semantic but since it has been introduced
around 2.6.12 it has been ignored for low order allocations.

{pte,pmd,pud}_alloc_one{_kernel}, late_pgtable_alloc use PGALLOC_GFP for
__get_free_page (aka order-0).

pgd_alloc is slightly more complex because it allocates from pgd_cache
if PGD_SIZE != PAGE_SIZE and PGD_SIZE depends on the configuration
(CONFIG_ARM64_VA_BITS, PAGE_SHIFT and CONFIG_PGTABLE_LEVELS).

As per
config PGTABLE_LEVELS
	int
	default 2 if ARM64_16K_PAGES && ARM64_VA_BITS_36
	default 2 if ARM64_64K_PAGES && ARM64_VA_BITS_42
	default 3 if ARM64_64K_PAGES && ARM64_VA_BITS_48
	default 3 if ARM64_4K_PAGES && ARM64_VA_BITS_39
	default 3 if ARM64_16K_PAGES && ARM64_VA_BITS_47
	default 4 if !ARM64_64K_PAGES && ARM64_VA_BITS_48

we should have the following options

  CONFIG_ARM64_VA_BITS:48 CONFIG_PGTABLE_LEVELS:4 PAGE_SIZE:4k size:4096 pages:1
  CONFIG_ARM64_VA_BITS:48 CONFIG_PGTABLE_LEVELS:4 PAGE_SIZE:16k size:16 pages:1
  CONFIG_ARM64_VA_BITS:48 CONFIG_PGTABLE_LEVELS:3 PAGE_SIZE:64k size:512 pages:1
  CONFIG_ARM64_VA_BITS:47 CONFIG_PGTABLE_LEVELS:3 PAGE_SIZE:16k size:16384 pages:1
  CONFIG_ARM64_VA_BITS:42 CONFIG_PGTABLE_LEVELS:2 PAGE_SIZE:64k size:65536 pages:1
  CONFIG_ARM64_VA_BITS:39 CONFIG_PGTABLE_LEVELS:3 PAGE_SIZE:4k size:4096 pages:1
  CONFIG_ARM64_VA_BITS:36 CONFIG_PGTABLE_LEVELS:2 PAGE_SIZE:16k size:16384 pages:1

All of them fit into a single page (aka order-0).  This means that this
flag has never been actually useful here because it has always been used
only for PAGE_ALLOC_COSTLY requests.

Link: http://lkml.kernel.org/r/1464599699-30131-6-git-send-email-mhocko@kernel.org
Signed-off-by: Michal Hocko <mhocko@suse.com>
Acked-by: Will Deacon <will.deacon@arm.com>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2016-06-24 17:23:52 -07:00
Kevin Hilman 72557a658a arm64: defconfig: enable stmmac and realtek PHY as modules
Some Amlogic GXBB boards use the stmmac ethernet driver.  Also, enable
the realtek PHY used on meson-gxbb-odroidc2.  The micrel PHY used on the
meson-gxbb-p20x boards is already enabled.

Signed-off-by: Kevin Hilman <khilman@baylibre.com>
2016-06-23 16:53:37 -07:00
Kevin Hilman f3abd62961 ARM64: DTS: meson-gxbb: switch ethernet to real clock
With the clock driver upstream, switch to the real clock.

Signed-off-by: Kevin Hilman <khilman@baylibre.com>
2016-06-23 15:59:31 -07:00
Michael Turquette ba6a6c7fa6 arm64: dts: gxbb clock controller
Add the clock controller node for the AmLogic GXBB machine.

Signed-off-by: Michael Turquette <mturquette@baylibre.com>
Signed-off-by: Kevin Hilman <khilman@baylibre.com>
2016-06-23 15:23:04 -07:00
Lorenzo Pieralisi f615bca4cc ARM64/PCI: Remove arch-specific pcibios_enable_device()
On systems with PCI_PROBE_ONLY set, we rely on BAR assignments from
firmware.  Previously we did not insert those resources into the resource
tree, so we had to skip pci_enable_resources() because it fails if
resources are not in the resource tree.

Now that we *do* insert resources even when PCI_PROBE_ONLY is set, we no
longer need the ARM64-specific pcibios_enable_device().  Remove it so we
use the generic version.

[bhelgaas: changelog]
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Acked-by: Will Deacon <will.deacon@arm.com>
CC: Arnd Bergmann <arnd@arndb.de>
CC: Catalin Marinas <catalin.marinas@arm.com>
2016-06-23 17:15:30 -05:00
Kefeng Wang 9a4ef881d2 arm64: Remove unnecessary of_platform_populate with default match table
After patch "of/platform: Add common method to populate default bus",
it is possible for arch code to remove unnecessary callers of
of_platform_populate with default match table.

Acked-by: Catalin Marinas <catalin.marinas@arm.com>
Cc: Will Deacon <will.deacon@arm.com>
Cc: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Kefeng Wang <wangkefeng.wang@huawei.com>
Signed-off-by: Rob Herring <robh@kernel.org>
2016-06-23 14:59:16 -05:00
Kefeng Wang bb8e15d604 of: iommu: make of_iommu_init() postcore_initcall_sync
The of_iommu_init() is called multiple times by arch code,
make it postcore_initcall_sync, then we can drop relevant
calls fully.

Note, the IOMMUs should have a chance to perform some basic
initialisation before we start adding masters to them. So
postcore_initcall_sync is good choice, it ensures of_iommu_init()
called before of_platform_populate.

Acked-by: Rich Felker <dalias@libc.org>
Tested-by: Marek Szyprowski <m.szyprowski@samsung.com>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Marek Szyprowski <m.szyprowski@samsung.com>
Cc: Rich Felker <dalias@libc.org>
Cc: Rob Herring <robh+dt@kernel.org>
Cc: Robin Murphy <robin.murphy@arm.com>
Cc: Will Deacon <will.deacon@arm.com>
Signed-off-by: Kefeng Wang <wangkefeng.wang@huawei.com>
Acked-by: Joerg Roedel <jroedel@suse.de>
Signed-off-by: Rob Herring <robh@kernel.org>
2016-06-23 14:57:40 -05:00
Douglas Anderson ed388cdd2e arm64: dts: rockchip: Provide emmcclk to PHY for rk3399
Previous changes in this series allowed exposing the card clock from the
rk3399 SDHCI device and allowed consuming the card clock in the rk3399
eMMC PHY.  Hook things up in the main rk3399 dtsi file.

Signed-off-by: Douglas Anderson <dianders@chromium.org>
Tested-by: Heiko Stuebner <heiko@sntech.de>
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
2016-06-22 18:24:33 +02:00
Douglas Anderson 64e3481c8a arm64: dts: rockchip: Add soc-ctl-syscon to sdhci for rk3399
On rk3399 we'd like to be able to properly set corecfg registers in the
Arasan SDHCI component.  Specify the syscon to enable that.

Signed-off-by: Douglas Anderson <dianders@chromium.org>
Tested-by: Heiko Stuebner <heiko@sntech.de>
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
2016-06-22 18:24:05 +02:00
James Morse d74b4e4f1a arm64: hibernate: Don't hibernate on systems with stuck CPUs
Hibernate relies on cpu hotplug to prevent secondary cores executing
the kernel text while it is being restored.

Add a call to cpus_are_stuck_in_kernel() to determine if there are
CPUs not counted by 'num_online_cpus()', and prevent hibernate in this
case.

Fixes: 82869ac57b ("arm64: kernel: Add support for hibernate/suspend-to-disk")
Acked-by: Mark Rutland <mark.rutland@arm.com>
Signed-off-by: James Morse <james.morse@arm.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
2016-06-22 15:48:10 +01:00
James Morse 5c492c3f52 arm64: smp: Add function to determine if cpus are stuck in the kernel
kernel/smp.c has a fancy counter that keeps track of the number of CPUs
it marked as not-present and left in cpu_park_loop(). If there are any
CPUs spinning in here, features like kexec or hibernate may release them
by overwriting this memory.

This problem also occurs on machines using spin-tables to release
secondary cores.
After commit 44dbcc93ab ("arm64: Fix behavior of maxcpus=N")
we bring all known cpus into the secondary holding pen, meaning this
memory can't be re-used by kexec or hibernate.

Add a function cpus_are_stuck_in_kernel() to determine if either of these
cases have occurred.

Signed-off-by: James Morse <james.morse@arm.com>
Acked-by: Mark Rutland <mark.rutland@arm.com>
Reviewed-by: Suzuki K Poulose <suzuki.poulose@arm.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
2016-06-22 15:48:09 +01:00
Catalin Marinas d770b5a047 Revert "arm64: Add support ARCH_SUPPORTS_INT128"
This reverts commit 6b14c517a2.

The original patch and UBSAN+KASAN enabled causes Linux to fail to link
with:

lib/built-in.o: In function `get_signed_val':
lib/ubsan.c:93: undefined reference to `__ashlti3'
lib/ubsan.c:93: undefined reference to `__ashrti3'

Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
2016-06-22 12:00:46 +01:00
Jon Masters 38b04a74c5 ACPI: ARM64: support for ACPI_TABLE_UPGRADE
This patch adds support for ACPI_TABLE_UPGRADE for ARM64

To access initrd image we need to move initialization
of linear mapping a bit earlier.

The implementation of the feature acpi_table_upgrade()
(drivers/acpi/tables.c) works with initrd data represented as an array
in virtual memory.  It uses some library utility to find the redefined
tables in that array and iterates over it to copy the data to new
allocated memory.  So to access the initrd data via fixmap
we need to rewrite it considerably.

In x86 arch, kernel memory is already mapped by the time when
acpi_table_upgrade() and acpi_boot_table_init() are called so I
think that we can just move this mapping one function earlier too.

Signed-off-by: Jon Masters <jcm@redhat.com>
Signed-off-by: Aleksey Makarov <aleksey.makarov@linaro.org>
Acked-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2016-06-22 01:16:15 +02:00
Shaokun Zhang 20c27a4270 arm64: mm: remove page_mapping check in __sync_icache_dcache
__sync_icache_dcache unconditionally skips the cache maintenance for
anonymous pages, under the assumption that flushing is only required in
the presence of D-side aliases [see 7249b79f6b ("arm64: Do not flush
the D-cache for anonymous pages")].

Unfortunately, this breaks migration of anonymous pages holding
self-modifying code, where userspace cannot be reasonably expected to
reissue maintenance instructions in response to a migration.

This patch fixes the problem by removing the broken page_mapping(page)
check from the cache syncing code, otherwise we may end up fetching and
executing stale instructions from the PoU.

Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Will Deacon <will.deacon@arm.com>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: <stable@vger.kernel.org>
Reviewed-by: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Shaokun Zhang <zhangshaokun@hisilicon.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
2016-06-21 20:10:18 +01:00
Masahiro Yamada 9ca4e58c20 arm64: fix boot image dependencies to not generate invalid images
I fixed boot image dependencies for arch/arm in commit 3939f33450
("ARM: 8418/1: add boot image dependencies to not generate invalid
images").

I see a similar problem for arch/arm64; "make -jN Image Image.gz"
would sometimes end up generating bad images where N > 1.

Fix the dependency in arch/arm64/Makefile to avoid the race
between "make Image" and "make Image.*".

Acked-by: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
2016-06-21 20:10:18 +01:00
Jean-Philippe Brucker f7e0efc9b5 arm64: update ASID limit
During a rollover, we mark the active ASID on each CPU as reserved, before
allocating a new ID for the task that caused the rollover. This means that
with N CPUs, we can only guarantee the new task to obtain a valid ASID if
we have at least N+1 ASIDs. Update this limit in the initcall check.

Note that this restriction was introduced by commit 8e648066 on the
arch/arm side, which disallow re-using the previously active ASID on the
local CPU, as it would introduce a TLB race.

In addition, we only dispose of NUM_USER_ASIDS-1, since ASID 0 is
reserved. Add this restriction as well.

Signed-off-by: Jean-Philippe Brucker <jean-philippe.brucker@arm.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
2016-06-21 20:10:18 +01:00
Mark Rutland 541ec870ef arm64: kill ESR_LNX_EXEC
Currently we treat ESR_EL1 bit 24 as software-defined for distinguishing
instruction aborts from data aborts, but this bit is architecturally
RES0 for instruction aborts, and could be allocated for an arbitrary
purpose in future. Additionally, we hard-code the value in entry.S
without the mnemonic, making the code difficult to understand.

Instead, remove ESR_LNX_EXEC, and distinguish aborts based on the esr,
which we already pass to the sole use of ESR_LNX_EXEC. A new helper,
is_el0_instruction_abort() is added to make the logic clear. Any
instruction aborts taken from EL1 will already have been handled by
bad_mode, so we need not handle that case in the helper.

For consistency, the existing permission_fault helper is renamed to
is_permission_fault, and the return type is changed to bool. There
should be no functional changes as the return value was a boolean
expression, and the result is only used in another boolean expression.

Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Cc: Dave P Martin <dave.martin@arm.com>
Cc: Huang Shijie <shijie.huang@arm.com>
Cc: James Morse <james.morse@arm.com>
Cc: Marc Zyngier <marc.zyngier@arm.com>
Cc: Will Deacon <will.deacon@arm.com>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
2016-06-21 17:07:48 +01:00
Mark Rutland 561454e25d arm64/kvm: use ESR_ELx_EC to extract EC
Now that we have a helper to extract the EC from an ESR_ELx value, make
use of this in the arm64 KVM code for simplicity and consistency. There
should be no functional changes as a result of this patch.

Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Cc: Dave P Martin <dave.martin@arm.com>
Cc: Huang Shijie <shijie.huang@arm.com>
Cc: James Morse <james.morse@arm.com>
Cc: Marc Zyngier <marc.zyngier@arm.com>
Cc: Will Deacon <will.deacon@arm.com>
Cc: kvmarm@lists.cs.columbia.edu
Acked-by: Christoffer Dall <christoffer.dall@linaro.org>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
2016-06-21 17:07:38 +01:00
Mark Rutland 275f344bec arm64: add macro to extract ESR_ELx.EC
Several places open-code extraction of the EC field from an ESR_ELx
value, in subtly different ways. This is unfortunate duplication and
variation, and the precise logic used to extract the field is a
distraction.

This patch adds a new macro, ESR_ELx_EC(), to extract the EC field from
an ESR_ELx value in a consistent fashion.

Existing open-coded extractions in core arm64 code are moved over to the
new helper. KVM code is left as-is for the moment.

Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Tested-by: Huang Shijie <shijie.huang@arm.com>
Cc: Dave P Martin <dave.martin@arm.com>
Cc: James Morse <james.morse@arm.com>
Cc: Marc Zyngier <marc.zyngier@arm.com>
Cc: Will Deacon <will.deacon@arm.com>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
2016-06-21 17:07:09 +01:00
Jisheng Zhang b67a8b29df arm64: mm: only initialize swiotlb when necessary
we only initialize swiotlb when swiotlb_force is true or not all system
memory is DMA-able, this trivial optimization saves us 64MB when
swiotlb is not necessary.

Signed-off-by: Jisheng Zhang <jszhang@marvell.com>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
2016-06-21 16:54:53 +01:00
Alexander Potapenko 5e4c7549f7 arm64: allow building with kcov coverage on ARM64
Add ARCH_HAS_KCOV to ARM64 config. To avoid potential crashes, disable
instrumentation of the files in arch/arm64/kvm/hyp/*.

Signed-off-by: Alexander Potapenko <glider@google.com>
Acked-by: Mark Rutland <mark.rutland@arm.com>
Acked-by: Marc Zyngier <marc.zyngier@arm.com>
Tested-by: James Morse <james.morse@arm.com>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
2016-06-21 16:15:57 +01:00
Kefeng Wang 6b14c517a2 arm64: Add support ARCH_SUPPORTS_INT128
The gcc support __SIZEOF_INT128__ and __int128 in arm64, thus,
enable ARCH_SUPPORTS_INT128 to make mul_u64_u32_shr() a bit
more efficient in scheduler.

Signed-off-by: Kefeng Wang <wangkefeng.wang@huawei.com>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
2016-06-21 16:12:57 +01:00
Mark Rutland 7ceb3a1040 arm64: simplify dump_mem
Currently dump_mem attempts to dump memory in 64-bit chunks when
reporting a failure in 64-bit code, or 32-bit chunks when reporting a
failure in 32-bit code. We added code to handle these two cases
separately in commit e147ae6d7f ("arm64: modify the dump mem for
64 bit addresses").

However, in all cases dump_mem is called, the failing context is a
kernel rather than user context. Additionally dump_mem is assumed to
only be used for kernel contexts, as internally it switches to
KERNEL_DS, and its callers pass kernel stack bounds.

This patch removes the redundant 32-bit chunk logic and associated
compat parameter, largely reverting the aforementioned commit. For the
call in __die(), the check of in_interrupt() is removed also, as __die()
is only called in response to faults from the kernel's exception level,
and thus the !user_mode(regs) check is sufficient. Were this not the
case, the used of task_stack_page(tsk) to generate the stack bounds
would be erroneous.

Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Cc: Will Deacon <will.deacon@arm.com>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
2016-06-21 15:47:31 +01:00
Yang Shi bffe1baff5 arm64: kasan: instrument user memory access API
The upstream commit 1771c6e1a5
("x86/kasan: instrument user memory access API") added KASAN instrument to
x86 user memory access API, so added such instrument to ARM64 too.

Define __copy_to/from_user in C in order to add kasan_check_read/write call,
rename assembly implementation to __arch_copy_to/from_user.

Tested by test_kasan module.

Acked-by: Andrey Ryabinin <aryabinin@virtuozzo.com>
Reviewed-by: Mark Rutland <mark.rutland@arm.com>
Tested-by: Mark Rutland <mark.rutland@arm.com>
Signed-off-by: Yang Shi <yang.shi@linaro.org>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
2016-06-21 15:37:18 +01:00
Javi Merino f7b636a8d8 arm64: dts: juno: add thermal zones for scpi sensors
The juno dts have entries for the hwmon scpi, let's create thermal zones
for the temperature sensors described in the Juno ARM Development
Platform Implementation Details.

Cc: Liviu Dudau <liviu.dudau@arm.com>
Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Cc: Rob Herring <robh+dt@kernel.org>
Cc: Mark Rutland <mark.rutland@arm.com>
Acked-by: Punit Agrawal <punit.agrawal@arm.com>
Signed-off-by: Javi Merino <javi.merino@arm.com>
Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
2016-06-21 15:17:31 +01:00
Sudeep Holla bdeaa21aff arm64: dts: juno: add SCPI power domains for device power management
This patch adds power domain information to coresight devices using
SCPI power domains.

Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Acked-by: Liviu Dudau <liviu.dudau@arm.com>
Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
2016-06-21 15:17:16 +01:00
Sudeep Holla 3e287cf6ef arm64: dts: juno: add coresight support
Most of the debug-related components on Juno are located in the coreSight
subsystem while others are located in the Cortex-Axx clusters, the SCP
subsystem, and in the main system.

Each core in the two processor clusters contain an Embedded Trace
Macrocell(ETM) which generates real-time trace information that trace
tools can use and an ATB trace output that is sent to a funnel before
going to the CoreSight subsystem.

The trace output signals combine with two trace expansions using another
funnel and fed into the Embedded Trace FIFO(ETF0).

The output trace data stream of the funnel is then replicated before it
is sent to either the:
- Trace Port Interface Unit(TPIU), that sends it out using the trace port.
- ETR that can write the trace data to memory located in the application
  memory space

Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Acked-by: Liviu Dudau <liviu.dudau@arm.com>
Acked-by: Mathieu Poirier <mathieu.poirier@linaro.org>
Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
2016-06-21 15:10:56 +01:00
Mark Rutland 4674fdb9f1 arm64: mm: dump: make page table dumping reusable
For debugging purposes, it would be nice if we could export page tables
other than the swapper_pg_dir to userspace. To enable this, this patch
refactors the arm64 page table dumping code such that multiple tables
may be registered with the framework, and exported under debugfs.

Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Cc: Laura Abbott <labbott@fedoraproject.org>
Cc: Will Deacon <will.deacon@arm.com>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
2016-06-21 15:09:11 +01:00
Robin Murphy 0e455d8e80 arm64: Implement optimised IP checksum helpers
AArch64 is capable of 128-bit memory accesses without alignment
restrictions, which makes it both possible and highly practical to slurp
up a typical 20-byte IP header in just 2 loads. Implement our own
version of ip_fast_checksum() to take advantage of that, resulting in
considerably fewer instructions and memory accesses than the generic
version. We can also get more optimal code generation for csum_fold() by
defining it a slightly different way round from the generic version, so
throw that into the mix too.

Suggested-by: Luke Starrett <luke.starrett@broadcom.com>
Acked-by: Luke Starrett <luke.starrett@broadcom.com>
Signed-off-by: Robin Murphy <robin.murphy@arm.com>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
2016-06-21 15:09:11 +01:00
Li Yang 2983e625bf arm64: dts: ls2080a: Add cache nodes for cacheinfo support
Adds the cache nodes and next-level-cache property for the
cacheinfo to work.

Signed-off-by: Li Yang <leoyang.li@nxp.com>
Signed-off-by: Shawn Guo <shawnguo@kernel.org>
2016-06-21 14:33:34 +08:00
Li Yang ec049f3348 arm64: dts: ls1043a: Add cache nodes for cacheinfo support
Adds the cache nodes and next-level-cache property for the
cacheinfo to work.

Signed-off-by: Li Yang <leoyang.li@nxp.com>
Signed-off-by: Shawn Guo <shawnguo@kernel.org>
2016-06-21 14:33:30 +08:00
Sudeep Holla 8da7cc087b arm64: Kconfig: select PM{,_GENERIC_DOMAINS} for ARCH_VEXPRESS
The Linux AMBA bus framework probes the peripheral IDs when adding the
AMBA devices very early on the boot. Generally they are on APB bus and
just require APB clocks to be on even when most of the core logic of the
IP is powered down.

However on Juno, the entire debugsys domain needs to be ON to access
even the coresight components' CID/PID registers and hence broken by
design. Accessing those while debugsys power domain is off will lead to
the bridge stalling the transactions instead of returning the slave error.

Further, the AMBA framework can't deal with !CONFIG_PM_GENERIC_DOMAINS
case: it ignores the error and proceeds to access the device region.
It was suggested to always enable CONFIG_PM{,_GENERIC_DOMAINS} in order
to handle above explained scenario.

Cc: Arnd Bergmann <arnd@arndb.de>
Suggested-by: Ulf Hansson <ulf.hansson@linaro.org>
Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
Signed-off-by: Olof Johansson <olof@lixom.net>
2016-06-20 22:59:54 -07:00
Duc Dang ddbc71d960 arm64: dts: apm: Remove unused qmlclk node on X-Gene 1
Node qmlclk has no consumer, so remove it.

Signed-off-by: Duc Dang <dhdang@apm.com>
2016-06-20 18:41:49 -07:00
Duc Dang f0a78909bd arm64: dts: apm: Fix timer interrupt polarity for X-Gene 2 SoC
Correct X-Gene 2 timer interrupt polarity as low-level triggered.

Signed-off-by: Duc Dang <dhdang@apm.com>
2016-06-20 18:26:35 -07:00
Bjorn Helgaas 0e999c79c0 arm64: dts: apm: Remove leading '0x' from unit addresses
Unit addresses should not have a leading '0x'.  Remove them.

Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Acked-by: Rob Herring <robh@kernel.org>
Signed-off-by: Duc Dang <dhdang@apm.com>
2016-06-20 18:15:25 -07:00
Bjorn Helgaas cafc4cd0c8 arm64: dts: apm: Use lowercase consistently for hex constants
The convention in these files is to use lowercase for "0x" prefixes and for
the hex constants themselves, but a few changes didn't follow that
convention, which makes the file annoying to read.

Use lowercase consistently for the hex constants.  No functional change
intended.

Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Acked-by: Rob Herring <robh@kernel.org>
Signed-off-by: Duc Dang <dhdang@apm.com>
2016-06-20 18:13:54 -07:00
Javi Merino 2a0e527c7e arm64: defconfig: enable SENSORS_ARM_SCPI
ARM SCPI Sensors were merged for v4.4 and they are defined in the Juno
dts.  Enable it in the defconfig to get them registered automatically in
Juno by default.

Signed-off-by: Javi Merino <javi.merino@arm.com>
Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
2016-06-20 16:45:30 +01:00
Sudeep Holla 71ee68a8e7 arm64: defconfig: enable Generic on-chip SRAM driver
Most of the ARM SoCs have small SRAM memory used for various purposes
that require faster access to data compared to normal DDR.

This patch enables the Generic on-chip SRAM driver on ARM64.

Cc: Kevin Hilman <khilman@kernel.org>
Cc: Olof Johansson <olof@lixom.net>
Cc: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
2016-06-20 16:44:18 +01:00
Olof Johansson 7a4fad480d This pull request contains Device Tree changes for Broadcom ARM64-based SoCS:
- Anup adds nodes for the AHCI and SATA3 PHY peripherals to the Northstar2 SoCs
 
 - Dhanajay enables pinctrl for the Northstar2 SoCs
 
 - Jon Mason enables all of the UART peripherals found in the NS2 SVK and
   finally adds the CCI-400 and PMU nodes
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1
 
 iQIcBAABAgAGBQJXY1QtAAoJEIfQlpxEBwcEOk4QAObsEiL/mCR0mx/6+QC0kivU
 LRrfHKKkMOjpvGZaY9I19CW3toWZB5Nr7B8FtsEQf/Nwp35ug4e0ajPw52DGuvyU
 1xhWHwQ7rIPP9FU3/1wHZ1Na26m9GeN1RAr7ljHCymOaK0yyFNWvP6GQs1ZyYZsf
 kc4NjRU4gckNi5ouYtdPM5DtU1OGeXk4jesX8PEZJ/C4DxhIpIod6pgZRmxxw6p8
 6MLra/ZccNHsSUoc0OV66GYLc02TRNGejB9vIVNl6QyoNabsEWRXMNEdM0Zn9i80
 nF8kZvwYS1333wS1p5RilwFMOfE2qF0MzYFnwDgOqdk0D7ugoEE/Y1lYolce2u1p
 rTdf3y4QpRnRWAf+SwcGcJZE4XZ6kY19qBfvGv3kbRKnPTVMVME+w7vYQdGyPcMz
 jxgU1gaAqK/nHoCnOuh0GoP5PROlJOLXyC2ivRUehsnfg+0U6XU+jjtj9H5cnq20
 ZQSv8uwqeppu7uPyh3BChrc1Zm78fUQRYcqOvtJkrttub+oeVN/tWIIkUu9t1m89
 vBJe3zixuN/EghMn85sLimB+yEu7ETTujgvGtbp6Wp7ku5+7RbDJy+QlbdDZho8K
 JYfLq2kCW6KBrrIXyrvYrbTv/vys5bFaZ88XcHYNs657xVR+rxUov8O9jvNEqbxp
 qSrWCfaMyLqOV1VCrf5s
 =296G
 -----END PGP SIGNATURE-----

Merge tag 'arm-soc/for-4.8/devicetree-arm64' of http://github.com/Broadcom/stblinux into next/dt64

This pull request contains Device Tree changes for Broadcom ARM64-based SoCS:

- Anup adds nodes for the AHCI and SATA3 PHY peripherals to the Northstar2 SoCs

- Dhanajay enables pinctrl for the Northstar2 SoCs

- Jon Mason enables all of the UART peripherals found in the NS2 SVK and
  finally adds the CCI-400 and PMU nodes

* tag 'arm-soc/for-4.8/devicetree-arm64' of http://github.com/Broadcom/stblinux:
  arm64: dts: NS2: Add CCI-400 PMU support
  arm64: dts: NS2: Add all of the UARTs
  arm64: dts: Enable GPIO for Broadcom NS2 SoC
  arm64: dts: enable pinctrl for Broadcom NS2 SoC
  arm64: dts: Add SATA3 AHCI and SATA3 PHY DT nodes for NS2
  dt-bindings: ata: add compatible string for iProc AHCI controller

Signed-off-by: Olof Johansson <olof@lixom.net>
2016-06-19 22:48:17 -07:00
Olof Johansson cfa999ef5b This pull request contains SoC changes for Broadcom ARM64-based SoCs:
- Kamlakant updates the Broadcom Vulcan Kconfig entry with GPIOLIB to enable
   GPIO on these platforms
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1
 
 iQIcBAABAgAGBQJXY1ZeAAoJEIfQlpxEBwcEtosP/1DjcxRFQrpVmOkLyMU6lR9h
 gTbV47sRNIw+kWSGU6yqtWfQybIUI3CDdQOZFcsYc4rd26YpSO9cszB2dYjoC3a+
 11xJPj2MjUdIyNEBHC8LuN1X+SZKxVvgcXD9rJ3GEKHbFW5vwKXfM0TFBOQClWME
 2YE5Ucr+LE4CmXzPiw16lqsdaU33ea5ZKwk6+RXJHxBNTGiYe7mEZ7FJuAsX/dzd
 pzqk3VgrpmhxHrWLfDyDfogR5dz+FrfX7acw4IfFyLwTK9LC/B7luG/lfnO622Ym
 xJ+1dRnB/qj1TcO8hQtZck+rEZbL9yerQ+Lh3MTrZEUVbBTIXQ0NWP57xvSL3Zge
 VfspJTgyxfLIpiiHVCbPmA+tCIogm1PKN8JRH+YVUgR67MAEWkt7JACgrMUrHwY4
 aXVNnDcfPglqJrA/K7o5kpKSgkVSTDL2Wq5t9ao8PrURVNfag0nk3c+nzhkQCtmZ
 2NmvisYRvCSkXww3cGlLiZs5CM4PLQ+UX2Ao/3j5H3DHqeYM9LqMBzPj21Z+G0Rr
 SH/XdoLlW0dLoA8FoGqBCsXXsMOWaY8hF+LFTiFcInoYsxxeezb7ILOASZk1MZng
 b27yX/9JY94AFqEH2AQWrTOf52ou7UcoV4PL+IHOALhA5ATXIbxWVUul8MW+dUHO
 aMRkaGRScNUTO7CmEwjg
 =MnRp
 -----END PGP SIGNATURE-----

Merge tag 'arm-soc/for-4.8/soc-arm64' of http://github.com/Broadcom/stblinux into next/arm64

This pull request contains SoC changes for Broadcom ARM64-based SoCs:

- Kamlakant updates the Broadcom Vulcan Kconfig entry with GPIOLIB to enable
  GPIO on these platforms

* tag 'arm-soc/for-4.8/soc-arm64' of http://github.com/Broadcom/stblinux:
  arm64: vulcan: enable GPIOLIB in Kconfig

Signed-off-by: Olof Johansson <olof@lixom.net>
2016-06-19 22:43:50 -07:00
Olof Johansson 4fb92c60eb Amlogic DT 64-bit changes for v4.8
- add pinctrl driver and pins for several devices
 - add reset driver
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v2
 
 iQIcBAABCAAGBQJXYGq/AAoJEFk3GJrT+8ZlqYMP/3YG+227gYXrWn9wHNurvj7v
 AMKYX0tsHZT+r4JYVimUmGN6//SGVIHuWpIoS4LUIdeh9uJg9xCE1rHYICGvv5eh
 DyFpty3oMxwV++U3H13axDuzQBTDQsmIz3vquusif1Paq9ncR806M1y7ZQIr4yUm
 UbmEKGxQqo/rCLSoIuSUAZjGLneJx+ixsGIiWBICwDz9tAzDcElr9tpTbJptoF5U
 7QRzhv/NdPcyxNE092U+hFvCWrABnBdiicdFIrnoExXtR0zvC4JcNpFvPLHfUgqg
 mjn4NxiSTidexVxuri5mI8uJnj++5ejEp0TQvp6MT+R7kbhovL2SbmiNqt3Gds1D
 T5jkcWz+Ow3tZobmp7CQX/oiCUTy81kAQ6+VCYPu+NUKZeyiMFs2SRF1s3wOxZU/
 6nFi6JpazCe9j5CwJC+TPxflUNb7mNheARpi0ZDxCA5Q/TVA42wASO69iG8+gipX
 X79a6uIRoVuFJcOYFhPRvtXBjQqG75RV21uBgDMryK4+sT9IF7bKbwQl9pHTFWU0
 Xg2VDhaX5u9vGxJLxjcL/e0kM2vGEi9DuhoxMGywFAcGYwoBM5CH2GW8Ok6FEgO1
 1EHq917VPbazzLIxVldm0FHBqg6aeA4Ps24m+8TNgw6sG2JSTiyI/9lZx/A6FHGC
 AU5efPPy2nPROcrrHP6c
 =SyuX
 -----END PGP SIGNATURE-----

Merge tag 'amlogic-dt64' of git://git.kernel.org/pub/scm/linux/kernel/git/khilman/linux-amlogic into next/dt64

Amlogic DT 64-bit changes for v4.8
- add pinctrl driver and pins for several devices
- add reset driver

* tag 'amlogic-dt64' of git://git.kernel.org/pub/scm/linux/kernel/git/khilman/linux-amlogic:
  ARM64: dts: amlogic: Enable Reset Controller on GXBB-based platforms
  ARM64: dts: amlogic: gxbb: add ethernet
  ARM64: dts: amlogic: gxbb: pinctrl: add/update UART
  ARM64: dts: amlogic: add pins for EMMC, SD
  ARM64: dts: amlogic: Enable pin controller on GXBB-based platforms
  documentation: Add compatibles for Amlogic Meson GXBB pin controllers
  ARM64: dts: amlogic: Add hiu and periphs buses

Signed-off-by: Olof Johansson <olof@lixom.net>
2016-06-19 22:30:16 -07:00
Linus Torvalds 049a40c0a2 ARM: SoC fixes
Another batch of fixes for ARM SoC platforms. Most are smaller fixes,
 
 Two areas that are worth pointing out are:
 
 * OMAP had a handful of changes to voltage specs that caused a bit of churn,
   most of volume of change in this branch is due to this.
 
 * There are a couple of _rcuidle fixes from Paul that touch common code and
   came in through the OMAP tree since they were the ones who saw the problems.
 
 The rest is smaller changes across a handful of platforms.
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1
 
 iQIcBAABAgAGBQJXZjf6AAoJEIwa5zzehBx3ExoP/2eGTZyGUt9DFutZs2OhZRgh
 tI3zBgfPaAEmt+rnvVE3NhDbfjPsV2cANDxE/MaZsFaKkgkHNBbmZpJ3Y7OlgB+k
 3kl4y87Ez1NEJrzQKzqVICzCD3IKA3cxUwUELIp3C7LhnKO1UXmRXp8UXee1Yc1E
 gL23Z2FncrDLOdvVfp/dTj1scB1XQrt3kePSu7sIuyDuGiPLRvO8fNjvIfOQaGDt
 Y27Yk1GrNpvqiOAkziOzUmSGZ6ZZ+wUdUKc/+QcxSnqxrSldtaQDsmmL4z6DQ1xj
 j0jagfVGXNLrCUj0zyWwwPG7pZ37BDJ1mj7AMiX9N7LDQFHR9owEVNf2zd1ar37k
 64Vlz+38m8lXNHM2/gL6gqFZIm0Kjt9C/wrvyealsuflGmx4xMSTRr2yvde5URBO
 diFzee3y2NPhvaRaEd1/yFJ/c0D5bVS8M1lced6GXn/l8SrWjg1SrYZley2PGjQH
 esEr7odTR7Um1UIXalpL1yBxoOVfGJl3bPYe8/veniFSi4DV+yeCOCc6pN0Km4WQ
 huUlzJkIXgtgAUt5gvWAw7sC+qzYPL+qOMAJsfb/vANoGg2QMrt+u9RAWnMKidpo
 GcjKNvAhAmAfwUgVHeLxO714MjIHWhKEVGkGsiDwoLCisn7HTLmaYk8qmOTlExcC
 g/nj7vtaXFfMDcD3uco0
 =C0Az
 -----END PGP SIGNATURE-----

Merge tag 'armsoc-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc

Pull ARM SoC fixes from Olof Johansson:
 "Another batch of fixes for ARM SoC platforms.  Most are smaller fixes.

  Two areas that are worth pointing out are:

   - OMAP had a handful of changes to voltage specs that caused a bit of
     churn, most of volume of change in this branch is due to this.

   - There are a couple of _rcuidle fixes from Paul that touch common
     code and came in through the OMAP tree since they were the ones who
     saw the problems.

 The rest is smaller changes across a handful of platforms"

* tag 'armsoc-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc: (36 commits)
  ARM: dts: STi: stih407-family: Disable reserved-memory co-processor nodes
  ARM: dts: am437x-sk-evm: Reduce i2c0 bus speed for tps65218
  ARM: OMAP2+: timer: add probe for clocksources
  ARM: OMAP1: fix ams-delta FIQ handler to work with sparse IRQ
  memory: omap-gpmc: Fix omap gpmc EXTRADELAY timing
  arm: Use _rcuidle for smp_cross_call() tracepoints
  MAINTAINERS: Add myself as reviewer of ARM FSL/NXP
  ARM: OMAP: DRA7: powerdomain data: Remove unused pwrsts_mem_ret
  ARM: OMAP: DRA7: powerdomain data: Remove unused pwrsts_logic_ret
  ARM: OMAP: DRA7: powerdomain data: Set L3init and L4per to ON
  ARM: imx6ul: Fix Micrel PHY mask
  ARM: OMAP2+: Select OMAP_INTERCONNECT for SOC_AM43XX
  ARM: dts: DRA74x: fix DSS PLL2 addresses
  ARM: OMAP2: Enable Errata 430973 for OMAP3
  ARM: dts: socfpga: Add missing PHY phandle
  ARM: dts: exynos: Fix port nodes names for Exynos5420 Peach Pit board
  ARM: dts: exynos: Fix port nodes names for Exynos5250 Snow board
  ARM: dts: sun6i: yones-toptech-bs1078-v2: Drop constraints on dc1sw regulator
  ARM: dts: sun6i: primo81: Drop constraints on dc1sw regulator
  ARM: dts: sunxi: Add OLinuXino Lime2 eMMC to the Makefile
  ...
2016-06-18 20:36:17 -10:00
Olof Johansson 8fd0976702 OMAP-GPMC: Fixes for for v4.7-rc cycle:
- Fix omap gpmc EXTRADELAY timing. The DT provided timings
 were wrongly used causing devices requiring extra delay timing
 to fail.
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1
 
 iQIcBAABAgAGBQJXYmsiAAoJENJaa9O+djCTGEwQAIird142noq4p13rRf8js1Vy
 1r808DkkXqF1n19UONio1oFWZEPdKmjGhdqntlR/tW83PNeSsAba+YjW3GvsisAx
 /Wf9kgOd2iCOIGqEu35/v1VQ4XR5CMMASK0SwhDRNjddj1gRikrOZLGaZ67TUzUz
 Ry2CX4qKzA6G9E/Tvgw/pzcUyRZyXPoXJDD5ACPfuAqBBocZM7NMrXw0m54kHFXm
 LDnXXW8XVw4um/68IKZzcscSe1hOoSKjd0IFbVvR4PVmrl4ed5iDsvjHE3NL/oqT
 nyeLQSeSnT2tLcSG1/sl78eaTbTMfAR1s3jR87PMkxe7p9ya3QBVI60xuD2Awna5
 HR/ZjZXnkLHeTfGnhaB7uKeZDan+RrUI88bGxO42HKFMthUCZI0siH04c4DFdTQS
 pmhrk6CQLgPCb93j0xdyZBNm+MH8PKEARLQ2SucTDo4R9eIe96tnQMHXZRnbZm7h
 +VM2kTwOaAgrDbkfyyS3o/E1KKMR7NZa59pb3SD7m9KbKQGr8Q8O9xijPS5XT03d
 9fxqATGc1G4n/Qwp6yu6Qkf7uxCNwzmjSySMiavH3kryHqNXR5TZJ8Zt6itgeSWb
 ko/pLjvbSt+yrHU93Hr4rntczJykyxrC9maza4b4YIm6MWwSXGH41uAO140NGelG
 QFJdeXNA1ybqY7KbwyaR
 =c0F/
 -----END PGP SIGNATURE-----

Merge tag 'gpmc-omap-fixes-for-v4.7' of https://github.com/rogerq/linux into fixes

OMAP-GPMC: Fixes for for v4.7-rc cycle:

- Fix omap gpmc EXTRADELAY timing. The DT provided timings
were wrongly used causing devices requiring extra delay timing
to fail.

* tag 'gpmc-omap-fixes-for-v4.7' of https://github.com/rogerq/linux:
  memory: omap-gpmc: Fix omap gpmc EXTRADELAY timing
  + Linux 4.7-rc3

Signed-off-by: Olof Johansson <olof@lixom.net>
2016-06-18 22:59:07 -07:00
Olof Johansson 58935f24a9 Fixes for omaps for v4.7-rc cycle:
- Fix dra7 for hardware issues limiting L4Per and L3init power domains
   to on state. Without this the devices may not work correctly after
   some time of use because of asymmetric aging. And related to this,
   let's also remove the unusable states.
 
 - Always select omap interconnect for am43x as otherwise the am43x
   only configurations will not boot properly. This can happen easily
   for any product kernels that leave out other SoCs to save memory.
 
 - Fix DSS PLL2 addresses that have gone unused for now
 
 - Select erratum 430973 for omap3, this is now safe to do and can
   save quite a bit of debugging time for people who may have left
   it out.
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1
 
 iQIcBAABAgAGBQJXXm6cAAoJEBvUPslcq6VzgiAP/3j+Zvaks93gLf0Hc1sQ5ow+
 UxQ3Gb3/gVGEh1OSb/c4MI800UBK1B0f6CqLK7zDFAuDHyUwmqJ27nrARfazoMPD
 DxRYZoEs897peB0/SWwDtHR+yje5UmIB0P31kRJ+t5nYwXBKvmvkWPFrOISxgI1Z
 yLc62tFoVy37IYfeH6pRNwMyJz9scl4qXjiBCHTmBQvgo4I3IPpvhFAWN5YMBZlz
 VwXDtmR9B/WlcRYel+RplYQrQrXVvaaT01wTPfejKHI9dyNQmbJQDWFMuuvdQKjE
 O7yjcgR6DdWjdDwCmIHLuc2FyrwW+wt1AY/5UXKGroxfW6Ct3JKuhUPPxsHfRMKX
 2NnQtgUcUxiIAGrsEZFadUAIEedd+DBVK+aztn1reaaHR1R/pBnMcEnch9WRuAOQ
 srOaaL2Had/NG+QRE0psgck9ayzpDHw+LMd18BckCN+1mIiFBnXYZrCVUPrutgPP
 5RbDWIeSVeAwbdaxPRqkXOcMGZ1MDRGoS+UBlTms+gWuSLjFj6sye0+Dao+68Ehz
 im/xhh0YCHgN0TvuvTla5BgLgOunlCNtXMNWyg801lDIvzOj/ngEQlasng9uzuri
 mfGf5w8ctub0Ileq4eU+rYb+bRDiDagjmiVBjbRmLWtgOUcsrNr+FX9sp5NDELmS
 oEa/VB8jNmI3aSv6OrNi
 =mQyc
 -----END PGP SIGNATURE-----

Merge tag 'omap-for-v4.7/fixes-powedomain' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap into fixes

Fixes for omaps for v4.7-rc cycle:

- Fix dra7 for hardware issues limiting L4Per and L3init power domains
  to on state. Without this the devices may not work correctly after
  some time of use because of asymmetric aging. And related to this,
  let's also remove the unusable states.

- Always select omap interconnect for am43x as otherwise the am43x
  only configurations will not boot properly. This can happen easily
  for any product kernels that leave out other SoCs to save memory.

- Fix DSS PLL2 addresses that have gone unused for now

- Select erratum 430973 for omap3, this is now safe to do and can
  save quite a bit of debugging time for people who may have left
  it out.

* tag 'omap-for-v4.7/fixes-powedomain' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap:
  ARM: OMAP: DRA7: powerdomain data: Remove unused pwrsts_mem_ret
  ARM: OMAP: DRA7: powerdomain data: Remove unused pwrsts_logic_ret
  ARM: OMAP: DRA7: powerdomain data: Set L3init and L4per to ON
  ARM: OMAP2+: Select OMAP_INTERCONNECT for SOC_AM43XX
  ARM: dts: DRA74x: fix DSS PLL2 addresses
  ARM: OMAP2: Enable Errata 430973 for OMAP3
  + Linux 4.7-rc2

Signed-off-by: Olof Johansson <olof@lixom.net>
2016-06-18 22:57:48 -07:00
Caesar Wang ad1cfdf518 arm64: dts: rockchip: fixes the gic400 2nd region size for rk3368
The 2nd additional region is the GIC virtual cpu interface register
base and size.

As the gic400 of rk3368 says, the cpu interface register map as below

:

-0x0000 GICC_CTRL
.
.
.
-0x00fc GICC_IIDR
-0x1000 GICC_IDR

Obviously, the region size should be greater than 0x1000.
So we should make sure to include the GICC_IDR since the kernel will access
it in some cases.

Fixes: b790c2cab5 ("arm64: dts: add Rockchip rk3368 core dtsi and board dts for the r88 board")
Signed-off-by: Caesar Wang <wxt@rock-chips.com>
Reviewed-by: Shawn Lin <shawn.lin@rock-chips.com>
Cc: stable@vger.kernel.org

[added Fixes and stable-cc]
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
2016-06-18 14:54:23 +02:00
David Wu 69e5a8fe8c arm64: dts: rockchip: add i2c nodes for rk3399
We've got 9 (count em!) i2c controllers on rk3399, some of which are in
the PMU power domain and some of which are normal peripherals.  Add them
all to the main rk3399 dtsi file so future patches can turn them on in
the board dts files.

Note: by default we try to set the i2c clock rate to 200 MHz so that we
can achieve good i2c functional clock rates.  200 MHz gives us the
ability to make very close to 100 kHz / 400 kHz / 1 MHz rates.  If
boards want to tune clock rates further they can always override.
Possibly boards could want to tune this if:
- they wanted to save an infinitesimal amount of power and they knew
  their i2c bus was slow anyway.  Since we gate the functional clock
  when the i2c bus is not active, power savings would only be while i2c
  transfers were happening and probably won't be very big anyway.
- they wanted to eek out a bit more speed by carefully tuning the source
  clock to make divisions work out perfectly, accounting for the rise /
  fall time measured on an actual board.

Note also that we still request 200 MHz for the PMU i2c busses even
though we expect that we won't make that exactly (currently PPLL is 676
MHz which gives us 169 MHz).

Signed-off-by: David Wu <david.wu@rock-chips.com>
Signed-off-by: Jianqun Xu <jay.xu@rock-chips.com>
[dianders: wrote desc; put in assigned-clocks; reordered nodes]
Signed-off-by: Douglas Anderson <dianders@chromium.org>
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
2016-06-18 14:00:23 +02:00
Daniel Thompson 0d15ef6778 arm64: kgdb: Match pstate size with gdbserver protocol
Current versions of gdb do not interoperate cleanly with kgdb on arm64
systems because gdb and kgdb do not use the same register description.
This patch modifies kgdb to work with recent releases of gdb (>= 7.8.1).

Compatibility with gdb (after the patch is applied) is as follows:

  gdb-7.6 and earlier  Ok
  gdb-7.7 series       Works if user provides custom target description
  gdb-7.8(.0)          Works if user provides custom target description
  gdb-7.8.1 and later  Ok

When commit 44679a4f14 ("arm64: KGDB: Add step debugging support") was
introduced it was paired with a gdb patch that made an incompatible
change to the gdbserver protocol. This patch was eventually merged into
the gdb sources:
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=commit;h=a4d9ba85ec5597a6a556afe26b712e878374b9dd

The change to the protocol was mostly made to simplify big-endian support
inside the kernel gdb stub. Unfortunately the gdb project released
gdb-7.7.x and gdb-7.8.0 before the protocol incompatibility was identified
and reversed:
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=commit;h=bdc144174bcb11e808b4e73089b850cf9620a7ee

This leaves us in a position where kgdb still uses the no-longer-used
protocol; gdb-7.8.1, which restored the original behaviour, was
released on 2014-10-29.

I don't believe it is possible to detect/correct the protocol
incompatiblity which means the kernel must take a view about which
version of the gdb remote protocol is "correct". This patch takes the
view that the original/current version of the protocol is correct
and that version found in gdb-7.7.x and gdb-7.8.0 is anomalous.

Signed-off-by: Daniel Thompson <daniel.thompson@linaro.org>
Signed-off-by: Will Deacon <will.deacon@arm.com>
2016-06-16 19:20:51 +01:00
Thomas Petazzoni 4cf28937ca arm64: configs: enable PCIe driver for Armada 7K/8K
This patch enables the driver for the PCIe host controller found on
the Marvell Armada 7K/8K ARM64 SoCs.

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Signed-off-by: Gregory CLEMENT <gregory.clement@free-electrons.com>
2016-06-16 17:08:50 +02:00
Peter Zijlstra b53d6bedbe locking/atomic: Remove linux/atomic.h:atomic_fetch_or()
Since all architectures have this implemented now natively, remove this
dead code.

Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: linux-arch@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org>
2016-06-16 10:48:32 +02:00
Will Deacon 2efe95fe69 locking/atomic, arch/arm64: Implement atomic{,64}_fetch_{add,sub,and,andnot,or,xor}{,_relaxed,_acquire,_release}() for LSE instructions
Implement FETCH-OP atomic primitives, these are very similar to the
existing OP-RETURN primitives we already have, except they return the
value of the atomic variable _before_ modification.

This is especially useful for irreversible operations -- such as
bitops (because it becomes impossible to reconstruct the state prior
to modification).

This patch implements the LSE variants.

Signed-off-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Steve Capper <steve.capper@arm.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: linux-arch@vger.kernel.org
Cc: linux-arm-kernel@lists.infradead.org
Cc: linux-kernel@vger.kernel.org
Link: http://lkml.kernel.org/r/1461344493-8262-2-git-send-email-will.deacon@arm.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
2016-06-16 10:48:22 +02:00
Will Deacon 6822a84dd4 locking/atomic, arch/arm64: Generate LSE non-return cases using common macros
atomic[64]_{add,and,andnot,or,xor} all follow the same patterns, so
generate them using macros, like we do for the LL/SC case already.

Signed-off-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Steve Capper <steve.capper@arm.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: linux-arch@vger.kernel.org
Cc: linux-arm-kernel@lists.infradead.org
Cc: linux-kernel@vger.kernel.org
Link: http://lkml.kernel.org/r/1461344493-8262-1-git-send-email-will.deacon@arm.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
2016-06-16 10:48:22 +02:00
Peter Zijlstra e490f9b1d3 locking/atomic, arch/arm64: Implement atomic{,64}_fetch_{add,sub,and,andnot,or,xor}{,_relaxed,_acquire,_release}()
Implement FETCH-OP atomic primitives, these are very similar to the
existing OP-RETURN primitives we already have, except they return the
value of the atomic variable _before_ modification.

This is especially useful for irreversible operations -- such as
bitops (because it becomes impossible to reconstruct the state prior
to modification).

[wildea01: compile fixes for ll/sc]
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Steve Capper <steve.capper@arm.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Will Deacon <will.deacon@arm.com>
Cc: linux-arch@vger.kernel.org
Cc: linux-arm-kernel@lists.infradead.org
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org>
2016-06-16 10:48:21 +02:00
Liu Gang f8ed1d9b0f arm64: dts: ls1043a: Add 'dma-coherent' for ls1043a PCI nodes
The 'dma-coherent' indicates that the hardware IP block can ensure
the coherency of the data transferred from/to the IP block. This
can avoid the software cache flush/invalid actions, and improve
the performance significantly.

The PCI IP block of ls1043a has this capability, so adding this
feature to improve the PCI performance.

Signed-off-by: Liu Gang <Gang.Liu@nxp.com>
Signed-off-by: Shawn Guo <shawnguo@kernel.org>
2016-06-16 08:43:10 +08:00
Eric Anholt 628d30d1cc arm64: Add platform selection for BCM2835.
Signed-off-by: Eric Anholt <eric@anholt.net>
[ kraxel: copy some selects from arm to arm64 ]
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Acked-by: Catalin Marinas <catalin.marinas@arm.com>
2016-06-15 14:10:30 -07:00
Arnd Bergmann 3ee803641e PCI/MSI: irqchip: Fix PCI_MSI dependencies
The PCI_MSI symbol is used inconsistently throughout the tree, with some
drivers using 'select' and others using 'depends on', or using conditional
selects.  This keeps causing problems; the latest one is a result of
ARCH_ALPINE using a 'select' statement to enable its platform-specific MSI
driver without enabling MSI:

  warning: (ARCH_ALPINE) selects ALPINE_MSI which has unmet direct dependencies (PCI && PCI_MSI)
  drivers/irqchip/irq-alpine-msi.c:104:15: error: variable 'alpine_msix_domain_info' has initializer but incomplete type
   static struct msi_domain_info alpine_msix_domain_info = {
		 ^~~~~~~~~~~~~~~
  drivers/irqchip/irq-alpine-msi.c:105:2: error: unknown field 'flags' specified in initializer
    .flags = MSI_FLAG_USE_DEF_DOM_OPS | MSI_FLAG_USE_DEF_CHIP_OPS |
    ^
  drivers/irqchip/irq-alpine-msi.c:105:11: error: 'MSI_FLAG_USE_DEF_DOM_OPS' undeclared here (not in a function)
    .flags = MSI_FLAG_USE_DEF_DOM_OPS | MSI_FLAG_USE_DEF_CHIP_OPS |
	     ^~~~~~~~~~~~~~~~~~~~~~~~

There is little reason to enable PCI support for a platform that uses MSI
but then leave MSI disabled at compile time.

Select PCI_MSI from irqchips that implement MSI, and make PCI host bridges
that use MSI on ARM depend on PCI_MSI_IRQ_DOMAIN.

For all three architectures that support PCI_MSI_IRQ_DOMAIN (ARM, ARM64,
X86), enable it by default whenever MSI is enabled.

[bhelgaas: changelog, omit crypto config change]
Suggested-by: Marc Zyngier <marc.zyngier@arm.com>
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Acked-by: Marc Zyngier <marc.zyngier@arm.com>
2016-06-15 15:47:33 -05:00
Neil Armstrong 4b7bed3852 ARM64: dts: meson-gxbb: Add Hardware Random Generator node
Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
Signed-off-by: Kevin Hilman <khilman@baylibre.com>
2016-06-15 08:53:33 -07:00
Will Deacon c56bdcac15 arm64: spinlock: Ensure forward-progress in spin_unlock_wait
Rather than wait until we observe the lock being free (which might never
happen), we can also return from spin_unlock_wait if we observe that the
lock is now held by somebody else, which implies that it was unlocked
but we just missed seeing it in that state.

Furthermore, in such a scenario there is no longer a need to write back
the value that we loaded, since we know that there has been a lock
hand-off, which is sufficient to publish any stores prior to the
unlock_wait because the ARm architecture ensures that a Store-Release
instruction is multi-copy atomic when observed by a Load-Acquire
instruction.

The litmus test is something like:

AArch64
{
0:X1=x; 0:X3=y;
1:X1=y;
2:X1=y; 2:X3=x;
}
 P0          | P1           | P2           ;
 MOV W0,#1   | MOV W0,#1    | LDAR W0,[X1] ;
 STR W0,[X1] | STLR W0,[X1] | LDR W2,[X3]  ;
 DMB SY      |              |              ;
 LDR W2,[X3] |              |              ;
exists
(0:X2=0 /\ 2:X0=1 /\ 2:X2=0)

where P0 is doing spin_unlock_wait, P1 is doing spin_unlock and P2 is
doing spin_lock.

Signed-off-by: Will Deacon <will.deacon@arm.com>
2016-06-15 11:23:14 +01:00
Will Deacon 3a5facd09d arm64: spinlock: fix spin_unlock_wait for LSE atomics
Commit d86b8da04d ("arm64: spinlock: serialise spin_unlock_wait against
concurrent lockers") fixed spin_unlock_wait for LL/SC-based atomics under
the premise that the LSE atomics (in particular, the LDADDA instruction)
are indivisible.

Unfortunately, these instructions are only indivisible when used with the
-AL (full ordering) suffix and, consequently, the same issue can
theoretically be observed with LSE atomics, where a later (in program
order) load can be speculated before the write portion of the atomic
operation.

This patch fixes the issue by performing a CAS of the lock once we've
established that it's unlocked, in much the same way as the LL/SC code.

Fixes: d86b8da04d ("arm64: spinlock: serialise spin_unlock_wait against concurrent lockers")
Signed-off-by: Will Deacon <will.deacon@arm.com>
2016-06-15 09:51:36 +01:00
Will Deacon 38b850a730 arm64: spinlock: order spin_{is_locked,unlock_wait} against local locks
spin_is_locked has grown two very different use-cases:

(1) [The sane case] API functions may require a certain lock to be held
    by the caller and can therefore use spin_is_locked as part of an
    assert statement in order to verify that the lock is indeed held.
    For example, usage of assert_spin_locked.

(2) [The insane case] There are two locks, where a CPU takes one of the
    locks and then checks whether or not the other one is held before
    accessing some shared state. For example, the "optimized locking" in
    ipc/sem.c.

In the latter case, the sequence looks like:

  spin_lock(&sem->lock);
  if (!spin_is_locked(&sma->sem_perm.lock))
    /* Access shared state */

and requires that the spin_is_locked check is ordered after taking the
sem->lock. Unfortunately, since our spinlocks are implemented using a
LDAXR/STXR sequence, the read of &sma->sem_perm.lock can be speculated
before the STXR and consequently return a stale value.

Whilst this hasn't been seen to cause issues in practice, PowerPC fixed
the same issue in 51d7d5205d ("powerpc: Add smp_mb() to
arch_spin_is_locked()") and, although we did something similar for
spin_unlock_wait in d86b8da04d ("arm64: spinlock: serialise
spin_unlock_wait against concurrent lockers") that doesn't actually take
care of ordering against local acquisition of a different lock.

This patch adds an smp_mb() to the start of our arch_spin_is_locked and
arch_spin_unlock_wait routines to ensure that the lock value is always
loaded after any other locks have been taken by the current CPU.

Reported-by: Peter Zijlstra <peterz@infradead.org>
Signed-off-by: Will Deacon <will.deacon@arm.com>
2016-06-15 09:51:35 +01:00
Kees Cook a5cd110cb8 arm64/ptrace: run seccomp after ptrace
Close the hole where ptrace can change a syscall out from under seccomp.

Signed-off-by: Kees Cook <keescook@chromium.org>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Will Deacon <will.deacon@arm.com>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: linux-arm-kernel@lists.infradead.org
2016-06-14 10:54:43 -07:00
Andy Lutomirski 2f275de5d1 seccomp: Add a seccomp_data parameter secure_computing()
Currently, if arch code wants to supply seccomp_data directly to
seccomp (which is generally much faster than having seccomp do it
using the syscall_get_xyz() API), it has to use the two-phase
seccomp hooks. Add it to the easy hooks, too.

Cc: linux-arch@vger.kernel.org
Signed-off-by: Andy Lutomirski <luto@kernel.org>
Signed-off-by: Kees Cook <keescook@chromium.org>
2016-06-14 10:54:39 -07:00
Masahiro Yamada ffd8a5ed57 arm64: dts: uniphier: add /memreserve/ for spin-table release address
As Documentation/arm64/booting.txt says, the cpu-release-addr
location should be reserved.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Acked-by: Mark Rutland <mark.rutland@arm.com>
Signed-off-by: Olof Johansson <olof@lixom.net>
2016-06-14 10:40:31 -07:00
Masahiro Yamada 1388ea2a8d arm64: dts: uniphier: change cpu-release-address
At first, 256 byte of the head of DRAM space was reserved for some
reasons.  However, as the progress of development, it turned out
unnecessary, and it was never used in the end.  Move the CPU release
address to leave no space.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Signed-off-by: Olof Johansson <olof@lixom.net>
2016-06-14 10:40:29 -07:00
Masahiro Yamada ed6cca5f9a arm64: dts: uniphier: add SoC-Glue node to UniPhier 64bit SoCs
This node consists of various system-level configuration registers.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Signed-off-by: Olof Johansson <olof@lixom.net>
2016-06-14 10:40:15 -07:00
Olof Johansson 97e80da315 Amlogic SoC changes for v4.8
-----BEGIN PGP SIGNATURE-----
 Version: GnuPG v2
 
 iQIcBAABCAAGBQJXUcY0AAoJEFk3GJrT+8ZlGUsP+wdX5d96MDcm+zOBNHpdNorQ
 A/fk1cSXHDk91ya0sRf6ktybrltthJL1NuntX1iKpyvlhTh7QFrZaInxm1HvwQAI
 g/bRi44G6BN2goVn8gUU1ErPIejYMTjLMfGjBhkGwzwxbx0wi39Z0aQjaapJ2xlU
 oyGV3hqrSMeAyKCuyCjo1QrODWr7vyDWcnY5cfIYR6KAX3LUPA2A2j3EwTOlRi3h
 meOE/ZWiFAVO6eOZCQnOZOVVRoxcWJMwEEp4uWALmL4xBsg4pHrfA1RKOb7tCPzl
 5qQ68+8OOG3FbiNd+0SJ2LXLrAajknW6Jvvx5GrM1NzopR3ZCqQRTgMLXq3PQa1M
 BMkZ80+D3wVJdJPLPhU0eE2mPPy+0RcjDmGUhgk0B8vJeVVtitJ4BbSfKI3svSdl
 0gNxuIFZ00fUkDIiO4A1J1rpTUEja1gOTjY9zKlkH7UN4uykKTdUEmFwUwAPubjU
 TmgGzXPEXn+LmeyoawbkOQ4NM1Z1E1V/WjlwmBEWjKbxM6lZC2eRIFfq5Ss5WJ3F
 whI9GWXoDh8EB1FiwSf2RDb4GOiYgrblmYbNrZRa7qGHD5E+zOh8n1z+zdC1OCDA
 W0nKcKE8lL44QnW4XDIwCtPV6YB4ycU1Ns9yUd/sYoZzHtk6Rc0m0goLxX1FYNiU
 t2jCOnJZUH7HXxk2NAAs
 =usWW
 -----END PGP SIGNATURE-----

Merge tag 'amlogic-soc' of git://git.kernel.org/pub/scm/linux/kernel/git/khilman/linux-amlogic into next/arm64

Amlogic SoC changes for v4.8

* tag 'amlogic-soc' of git://git.kernel.org/pub/scm/linux/kernel/git/khilman/linux-amlogic:
  ARM64: Kconfig: Select the Amlogic Meson pin controller driver

Signed-off-by: Olof Johansson <olof@lixom.net>
2016-06-14 10:31:31 -07:00
Ard Biesheuvel 16740e7f89 arm64: defconfig: disable plain NEON implementation of AES
The plain NEON implementation of AES is only suited for v8 cores that lack
the ARMv8 Crypto Extensions but have an implementation of the NEON tbl/tbx
instruction that is not pathetically slow. Unfortunately, this is currently
the empty set, so there is no point in including this implementation by
default. So disable it.

Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Signed-off-by: Olof Johansson <olof@lixom.net>
2016-06-14 10:28:27 -07:00
Mark Rutland bbb1681ee3 arm64: mm: mark fault_info table const
Unlike the debug_fault_info table, we never intentionally alter the
fault_info table at runtime, and all derived pointers are treated as
const currently.

Make the table const so that it can be placed in .rodata and protected
from unintentional writes, as we do for the syscall tables.

Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Will Deacon <will.deacon@arm.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
2016-06-14 15:02:34 +01:00
Mark Rutland c5cea06be0 arm64: fix dump_instr when PAN and UAO are in use
If the kernel is set to show unhandled signals, and a user task does not
handle a SIGILL as a result of an instruction abort, we will attempt to
log the offending instruction with dump_instr before killing the task.

We use dump_instr to log the encoding of the offending userspace
instruction. However, dump_instr is also used to dump instructions from
kernel space, and internally always switches to KERNEL_DS before dumping
the instruction with get_user. When both PAN and UAO are in use, reading
a user instruction via get_user while in KERNEL_DS will result in a
permission fault, which leads to an Oops.

As we have regs corresponding to the context of the original instruction
abort, we can inspect this and only flip to KERNEL_DS if the original
abort was taken from the kernel, avoiding this issue. At the same time,
remove the redundant (and incorrect) comments regarding the order
dump_mem and dump_instr are called in.

Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: James Morse <james.morse@arm.com>
Cc: Robin Murphy <robin.murphy@arm.com>
Cc: <stable@vger.kernel.org> #4.6+
Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Reported-by: Vladimir Murzin <vladimir.murzin@arm.com>
Tested-by: Vladimir Murzin <vladimir.murzin@arm.com>
Fixes: 57f4959bad ("arm64: kernel: Add support for User Access Override")
Signed-off-by: Will Deacon <will.deacon@arm.com>
2016-06-14 15:02:33 +01:00
Andrea Gelmini edce2292c1 KVM: ARM64: Fix typos
Signed-off-by: Andrea Gelmini <andrea.gelmini@gelma.net>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2016-06-14 11:16:27 +02:00
Olof Johansson 045ab0c54c Renesas ARM64 Based SoC DT Updates for v4.8
* Fix W=1 dtc warnings and other cleanups
 * Enable watchdog timer
 * Enable DMA for I2C
 * Increase the size of GIC-400 mapped registers: be nicer to hypervisors
 * Support RTS/CTS hardware flow control
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1
 
 iQIcBAABAgAGBQJXV2xoAAoJENfPZGlqN0++9JIP/RctMD58b1wlt6yHDSgBDcTl
 5jBeJjRzSfYF+6M0vPKamAFWtsb+vJgiSXZJFQ/sKwWLlqIKvv/cGNl4+sjcoNrN
 U0vfC3O6F9egk8watUbkfl/Q1BB/+1MT/w6mkFyKFg9tqvmPeS8cRTtHikYfzHMZ
 y1/3pxSMg3GkDunCAnoEqgJOOqn3kknK29Be9coxBbzhGU8DhFUqJRrQQEfwSUiC
 01mY8C1uyL6uMyJAGTsHhL1qByOoPChKPBAwrqaeT6HRW/npOzJWn0zdUbz1afVR
 pao+GEL9i848cei9K7rkCwjiOF9j042X8H4f4FJyswfiwv1Pj+mA0Zv7eVgO48jb
 zFfrSmk+WcXXuUsjBLlCRWDgrfWuMMqRcYgpGIuAUZdjjUgUjL1J5zCy8nJoZLr9
 4Zpyk3AIrZ7ZWkNqTdpGNCYDAbcJPtRiRyU5iPS4xuzs9aK+DXhf9QGZQa0i+6JT
 aBe2fihNjOgLHPspE7f6p4cWlCkQFII/eIPnAd4HW7wjRF6BYp56IkFV6YPzChbl
 /r17GUJHziXhL0D7YlP8Oq5VX4Dz07/xSUXujfWaSpzqK04T49Jdob6SmXpFFjQN
 sw5yvdro6l1TQhBeFT10OC4xEt+Vy8QcDpuWQjpU7Saic3+qYQwJ0WQM7r63oun8
 mouN1qeq4P3jMy7mj3wy
 =wT01
 -----END PGP SIGNATURE-----

Merge tag 'renesas-arm64-dt-for-v4.8' of git://git.kernel.org/pub/scm/linux/kernel/git/horms/renesas into next/dt64

Renesas ARM64 Based SoC DT Updates for v4.8

* Fix W=1 dtc warnings and other cleanups
* Enable watchdog timer
* Enable DMA for I2C
* Increase the size of GIC-400 mapped registers: be nicer to hypervisors
* Support RTS/CTS hardware flow control

* tag 'renesas-arm64-dt-for-v4.8' of git://git.kernel.org/pub/scm/linux/kernel/git/horms/renesas:
  arm64: dts: r8a7795: Drop 0x from unit address of gic
  arm64: dts: salvator-x: Fix W=1 dtc warnings
  arm64: dts: r8a7795: Fix W=1 dtc warnings
  arm64: dts: r8a7795: Use SYSC "always-on" PM Domain for RWDT node
  arm64: dts: salvator-x: Enable watchdog timer
  arm64: dts: r8a7795: Add RWDT node
  arm64: dts: r8a7795: enable DMA for I2C
  arm64: dts: r8a7795: Increase the size of GIC-400 mapped registers
  arm64: dts: salvator-x: SCIF1 supports RTS/CTS hardware flow control

Signed-off-by: Olof Johansson <olof@lixom.net>
2016-06-13 15:29:12 -07:00
Olof Johansson 087eb3167d Samsung arm64 update for v4.8:
1. Select drivers/soc/samsung.
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1
 
 iQIcBAABAgAGBQJXVWESAAoJEME3ZuaGi4PX5ZEP/3I6KS+bFH6hANtrnx/PxmI6
 FMzldAUaMcO/72/qe+cQ36JIBWy4Mo6cOkDVV0GMJ5NQAJmespSLSHPmAAYEk62c
 zYErvmr9+FZiKsDARintUB4/FMdVnBvti7lUd39QBC/1vbfxtXyET7Jes3zvclsJ
 UMJbshVAFDjXydfffDAxT0MLavQfR4f9AclAZUrv/N3eWA0xUu/PIJYkI93CAjqY
 AjNSj/PtgxZJsmJ4E+RRq+nvqicNAVV5ZTN+/v5Qk7tOHK/p7+Y0h+btgIG6UgZV
 tR4ZA1M+H8ppxTRqZuGMn9UsPMGnHMJ2tzgX5i9cXj7RQ4AaKjfv/bFUkhzxx2LH
 awWB4pO1ureoeq8i/60KO4X7kotlweHF14crDOMSqqH/Epkkkp/DSyIzY5ki2qUq
 jqOfdxsOBcxZttXmwykHjjy7/to52c5lnZ2XpgETYV4RkxAFO0MXQ+BBVQJ5Fsys
 Sbgm+wiF8Zawg6bS3ZfCbHbg9tRnMmrhm8iPb8qre4DIwohBUx44s2EUBFOi9VyV
 /3p+rlkcvXnm1HAuWR7nbK4XrRiYSz6Dqc+6fq3kQvgrzzuY3sT3A80d2/S3Dlo4
 NRgLD5dYiWtaCQ1OS/yhvm0sEya/2mXtFHmQsEumhBycFBVRuQWdcZYrV1OMDf7Y
 3q+0+fn7oOHy8QucAazo
 =mZFG
 -----END PGP SIGNATURE-----

Merge tag 'samsung-soc64-4.8' of git://git.kernel.org/pub/scm/linux/kernel/git/krzk/linux into next/arm64

Samsung arm64 update for v4.8:
1. Select drivers/soc/samsung.

* tag 'samsung-soc64-4.8' of git://git.kernel.org/pub/scm/linux/kernel/git/krzk/linux:
  arm64: exynos: Select SOC specific drivers

Signed-off-by: Olof Johansson <olof@lixom.net>
2016-06-13 14:25:18 -07:00
Bjorn Andersson 7258e10e6a ARM: dts: msm8916: Update reserved-memory
Update reserved-memory in accordance with memory the detailed memory map
for 8916, so that we will be able to reference the firmware memory
regions.

Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
Signed-off-by: Andy Gross <andy.gross@linaro.org>
2016-06-12 00:48:11 -05:00
Andy Gross ea49e164b5 arm64: dts: msm8916: Add SCM firmware node
This adds the devicetree node for the SCM firmware.

Acked-by: Bjorn Andersson <bjorn.andersson@linaro.org>
Signed-off-by: Andy Gross <andy.gross@linaro.org>
Reviewed-by: Stephen Boyd <sboyd@codeaurora.org>
2016-06-12 00:48:11 -05:00
Stephen Boyd 5daa7a6031 arm64: dts: qcom: Add msm8916 PMU node
Add the PMU so we can get proper perf event support on this SoC.

Signed-off-by: Stephen Boyd <stephen.boyd@linaro.org>
Signed-off-by: Andy Gross <andy.gross@linaro.org>
2016-06-12 00:48:11 -05:00
Lina Iyer a0df399fee ARM64: dts: Add PSCI cpuidle support for MSM8916
Add device bindings for CPUs to suspend using PSCI as the enable-method.

Cc: <devicetree@vger.kernel.org>
Signed-off-by: Lina Iyer <lina.iyer@linaro.org>
Tested-by: Andy Gross <andy.gross@linaro.org>
Signed-off-by: Andy Gross <andy.gross@linaro.org>
2016-06-12 00:48:11 -05:00
Srinivas Kandagatla 3f452fe71f arm64: dts: qcom: apq8016-sbc: enable bam dma node.
This patch enables bam dma node, dma is used for both tx and rx on spi
and on high speed serial.

Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Signed-off-by: Andy Gross <andy.gross@linaro.org>
2016-06-12 00:46:49 -05:00
Georgi Djakov a9f91b40e2 arm64: dts: apq8016-sbc: Add DT node for the uSD SDHC interface
Add the necessary properties to enable the SD-card on db410c boards.

Signed-off-by: Georgi Djakov <georgi.djakov@linaro.org>
Tested-by: Kevin Hilman <khilman@baylibre.com>
Signed-off-by: Andy Gross <andy.gross@linaro.org>
2016-06-12 00:46:49 -05:00
Rajesh Bhagat bf26225fc6 arm64: dts: ls1043a: Add dis_rxdet_inp3_quirk property to USB3 node
Add "dis_rxdet_inp3_quirk" boolean property to USB3 node. This property
is used to disable rx detection in P3 PHY mode.

Signed-off-by: Rajesh Bhagat <rajesh.bhagat@nxp.com>
Signed-off-by: Shawn Guo <shawnguo@kernel.org>
2016-06-11 22:11:24 +08:00
Rajesh Bhagat 1cd78dd6bd arm64: dts: ls2080a: Add dis_rxdet_inp3_quirk property to USB3 node
Add "dis_rxdet_inp3_quirk" boolean property to USB3 node. This property
is used to disable rx detection in P3 PHY mode.

Signed-off-by: Rajesh Bhagat <rajesh.bhagat@nxp.com>
Signed-off-by: Shawn Guo <shawnguo@kernel.org>
2016-06-11 22:10:59 +08:00
Pramod Kumar 5f1a067bfa dt: mdio-mux: Add mdio multiplexer driver node
Add integrated MDIO multiplexer driver node which contains
two mux PCIe bus and one ethernet bus along with phys
lying on these bus.

Signed-off-by: Pramod Kumar <pramod.kumar@broadcom.com>
Acked-by: Rob Herring <robh@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-06-10 23:24:54 -07:00
Zi Shen Lim 643c332d51 arm64: bpf: optimize LD_ABS, LD_IND
Remove superfluous stack frame, saving us 3 instructions for every
LD_ABS or LD_IND.

Signed-off-by: Zi Shen Lim <zlim.lnx@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-06-10 23:11:50 -07:00
Zi Shen Lim 997ce88832 arm64: bpf: optimize JMP_CALL
Remove superfluous stack frame, saving us 3 instructions for
every JMP_CALL.

Signed-off-by: Zi Shen Lim <zlim.lnx@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-06-10 23:11:50 -07:00
Zi Shen Lim ddb55992b0 arm64: bpf: implement bpf_tail_call() helper
Add support for JMP_CALL_X (tail call) introduced by commit 04fd61ab36
("bpf: allow bpf programs to tail-call other bpf programs").

bpf_tail_call() arguments:
  ctx   - context pointer passed to next program
  array - pointer to map which type is BPF_MAP_TYPE_PROG_ARRAY
  index - index inside array that selects specific program to run

In this implementation arm64 JIT jumps into callee program after prologue,
so callee program reuses the same stack. For tail_call_cnt, we use the
callee-saved R26 (which was already saved/restored but previously unused
by JIT).

With this patch a tail call generates the following code on arm64:

  if (index >= array->map.max_entries)
      goto out;

  34:   mov     x10, #0x10                      // #16
  38:   ldr     w10, [x1,x10]
  3c:   cmp     w2, w10
  40:   b.ge    0x0000000000000074

  if (tail_call_cnt > MAX_TAIL_CALL_CNT)
      goto out;
  tail_call_cnt++;

  44:   mov     x10, #0x20                      // #32
  48:   cmp     x26, x10
  4c:   b.gt    0x0000000000000074
  50:   add     x26, x26, #0x1

  prog = array->ptrs[index];
  if (prog == NULL)
      goto out;

  54:   mov     x10, #0x68                      // #104
  58:   ldr     x10, [x1,x10]
  5c:   ldr     x11, [x10,x2]
  60:   cbz     x11, 0x0000000000000074

  goto *(prog->bpf_func + prologue_size);

  64:   mov     x10, #0x20                      // #32
  68:   ldr     x10, [x11,x10]
  6c:   add     x10, x10, #0x20
  70:   br      x10
  74:

Signed-off-by: Zi Shen Lim <zlim.lnx@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-06-10 23:11:49 -07:00
Tomasz Nowicki 0cb0786bac ARM64: PCI: Support ACPI-based PCI host controller
Implement pci_acpi_scan_root() and other arch-specific calls so ARM64 can
use ACPI to setup and enumerate PCI buses.

Use memory-mapped configuration space information from either the ACPI
_CBA method or the MCFG table and the ECAM library and generic ECAM config
accessor ops.

Implement acpi_pci_bus_find_domain_nr() to retrieve the domain number from
the acpi_pci_root structure.

Implement pcibios_add_bus() and pcibios_remove_bus() to call
acpi_pci_add_bus() and acpi_pci_remove_bus() for ACPI slot management and
other configuration.

Signed-off-by: Tomasz Nowicki <tn@semihalf.com>
Signed-off-by: Jayachandran C <jchandra@broadcom.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
2016-06-10 18:37:25 -05:00
Tomasz Nowicki f058f4fbd6 ARM64: PCI: Implement AML accessors for PCI_Config region
On ACPI systems, the PCI_Config OperationRegion allows AML to access PCI
configuration space.  The ACPI CA AML interpreter uses performs config
space accesses with acpi_os_read_pci_configuration() and
acpi_os_write_pci_configuration(), which are OS-dependent functions
supplied by acpi/osl.c.

Implement the arch-specific raw_pci_read() and raw_pci_write() interfaces
used by acpi/osl.c for PCI_Config accesses.

N.B. PCI_Config accesses are not supported before PCI bus enumeration.

[bhelgaas: changelog]
Signed-off-by: Tomasz Nowicki <tn@semihalf.com>
Signed-off-by: Jayachandran C <jchandra@broadcom.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
2016-06-10 18:36:19 -05:00
Tomasz Nowicki d8ed75d593 ARM64: PCI: ACPI support for legacy IRQs parsing and consolidation with DT code
To enable PCI legacy IRQs on platforms booting with ACPI, arch code should
include ACPI-specific callbacks that parse and set-up the device IRQ
number, equivalent to the DT boot path. Owing to the current ACPI core scan
handlers implementation, ACPI PCI legacy IRQs bindings cannot be parsed at
device add time, since that would trigger ACPI scan handlers ordering
issues depending on how the ACPI tables are defined.

To solve this problem and consolidate FW PCI legacy IRQs parsing in one
single pcibios callback (pending final removal), this patch moves DT PCI
IRQ parsing to the pcibios_alloc_irq() callback (called by PCI core code at
driver probe time) and adds ACPI PCI legacy IRQs parsing to the same
callback too, so that FW PCI legacy IRQs parsing is confined in one single
arch callback that can be easily removed when code parsing PCI legacy IRQs
is consolidated and moved to core PCI code.

Suggested-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Signed-off-by: Tomasz Nowicki <tn@semihalf.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
2016-06-10 18:29:46 -05:00
Tomasz Nowicki 2ab51ddeca ARM64: PCI: Add acpi_pci_bus_find_domain_nr()
Extend pci_bus_find_domain_nr() so it can find the domain from either:

  - ACPI, via the new acpi_pci_bus_find_domain_nr() interface, or
  - DT, via of_pci_bus_find_domain_nr()

Note that this is only used for CONFIG_PCI_DOMAINS_GENERIC=y, so it does
not affect x86 or ia64.

[bhelgaas: changelog]
Signed-off-by: Tomasz Nowicki <tn@semihalf.com>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
2016-06-10 18:28:39 -05:00
Alison Wang e6d66c50b9 arm64: dts: fsl: Update address-cells and reg properties of cpu nodes
MPIDR_EL1[63:32] value is equal to 0 for the CPUs of the LS1043A and
LS2080A SoCs. The ARM CPU binding allows #address-cells to be set to 1,
since MPIDR_EL1[63:32] bits are not used for CPUs identification. Update
the #address-cells and reg properties accordingly.

Signed-off-by: Alison Wang <alison.wang@nxp.com>
Signed-off-by: Shawn Guo <shawnguo@kernel.org>
2016-06-09 10:18:25 +08:00
Will Deacon 0106d456c4 arm64: mm: always take dirty state from new pte in ptep_set_access_flags
Commit 66dbd6e61a ("arm64: Implement ptep_set_access_flags() for
hardware AF/DBM") ensured that pte flags are updated atomically in the
face of potential concurrent, hardware-assisted updates. However, Alex
reports that:

 | This patch breaks swapping for me.
 | In the broken case, you'll see either systemd cpu time spike (because
 | it's stuck in a page fault loop) or the system hang (because the
 | application owning the screen is stuck in a page fault loop).

It turns out that this is because the 'dirty' argument to
ptep_set_access_flags is always 0 for read faults, and so we can't use
it to set PTE_RDONLY. The failing sequence is:

  1. We put down a PTE_WRITE | PTE_DIRTY | PTE_AF pte
  2. Memory pressure -> pte_mkold(pte) -> clear PTE_AF
  3. A read faults due to the missing access flag
  4. ptep_set_access_flags is called with dirty = 0, due to the read fault
  5. pte is then made PTE_WRITE | PTE_DIRTY | PTE_AF | PTE_RDONLY (!)
  6. A write faults, but pte_write is true so we get stuck

The solution is to check the new page table entry (as would be done by
the generic, non-atomic definition of ptep_set_access_flags that just
calls set_pte_at) to establish the dirty state.

Cc: <stable@vger.kernel.org> # 4.3+
Fixes: 66dbd6e61a ("arm64: Implement ptep_set_access_flags() for hardware AF/DBM")
Reviewed-by: Catalin Marinas <catalin.marinas@arm.com>
Reported-by: Alexander Graf <agraf@suse.de>
Tested-by: Alexander Graf <agraf@suse.de>
Signed-off-by: Will Deacon <will.deacon@arm.com>
2016-06-08 10:23:44 +01:00
Gerd Hoffmann 02d0860364 ARM: bcm2837: dt: Add the ethernet to the device trees
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
2016-06-07 15:23:08 -07:00
Eric Anholt 9d56c22a78 ARM: bcm2835: Add devicetree for the Raspberry Pi 3.
While this devicetree also works for booting in 32-bit mode, it's
placed in arm64 since it's a 64-bit CPU (as suggested by Arnd).

Signed-off-by: Eric Anholt <eric@anholt.net>
Acked-by: Stephen Warren <swarren@wwwdotorg.org> (v1)
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
2016-06-07 15:21:55 -07:00
Emese Revfy 6b90bd4ba4 GCC plugin infrastructure
This patch allows to build the whole kernel with GCC plugins. It was ported from
grsecurity/PaX. The infrastructure supports building out-of-tree modules and
building in a separate directory. Cross-compilation is supported too.
Currently the x86, arm, arm64 and uml architectures enable plugins.

The directory of the gcc plugins is scripts/gcc-plugins. You can use a file or a directory
there. The plugins compile with these options:
 * -fno-rtti: gcc is compiled with this option so the plugins must use it too
 * -fno-exceptions: this is inherited from gcc too
 * -fasynchronous-unwind-tables: this is inherited from gcc too
 * -ggdb: it is useful for debugging a plugin (better backtrace on internal
    errors)
 * -Wno-narrowing: to suppress warnings from gcc headers (ipa-utils.h)
 * -Wno-unused-variable: to suppress warnings from gcc headers (gcc_version
    variable, plugin-version.h)

The infrastructure introduces a new Makefile target called gcc-plugins. It
supports all gcc versions from 4.5 to 6.0. The scripts/gcc-plugin.sh script
chooses the proper host compiler (gcc-4.7 can be built by either gcc or g++).
This script also checks the availability of the included headers in
scripts/gcc-plugins/gcc-common.h.

The gcc-common.h header contains frequently included headers for GCC plugins
and it has a compatibility layer for the supported gcc versions.

The gcc-generate-*-pass.h headers automatically generate the registration
structures for GIMPLE, SIMPLE_IPA, IPA and RTL passes.

Note that 'make clean' keeps the *.so files (only the distclean or mrproper
targets clean all) because they are needed for out-of-tree modules.

Based on work created by the PaX Team.

Signed-off-by: Emese Revfy <re.emese@gmail.com>
Acked-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Michal Marek <mmarek@suse.com>
2016-06-07 22:57:10 +02:00
Horia Geantă 63dac35b58 arm64: dts: ls1043a: add crypto node
LS1043A has a SEC v5.4 security engine.
For now don't add rtic or sec_mon subnodes, since these features
haven't been tested yet.

Signed-off-by: Horia Geantă <horia.geanta@nxp.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
2016-06-07 18:42:44 +08:00
Alexander Graf 1a9a0536d8 arm64: Allow for different DMA and CPU bus offsets
On arm64, all SoCs we supported so far either have an IOMMU or have bus
addresses equal to CPU addresses.

However, with the Raspberry Pi 3 coming up, this is no longer true. To
allow DMA to work with an AArch64 kernel on those devices, let's allow
devices to have DMA offsets again.

Signed-off-by: Alexander Graf <agraf@suse.de>
Acked-by: Arnd Bergmann <arnd@arndb.de>
Acked-by: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Eric Anholt <eric@anholt.net>
2016-06-06 13:48:54 -07:00
Caesar Wang 95c27ba7bd arm64: dts: rockchip: add thermal nodes for rk3399 SoCs
This adds thermal zone and tsadc nodes to rk3399 dtsi, rk3399 thermal
data is including the cpu and gpu sensor zone node.

The thermal zone node is the node containing all the required info
for describing a thermal zone, including its cooling device bindings.
The thermal zone node must contain, apart from its own properties, one
sub-node containing trip nodes and one sub-node containing all the zone
cooling maps.

The following is the parameter is introduced:
* polling-delay:
The maximum number of milliseconds to wait between polls

* polling-delay-passive:
The maximum number of milliseconds to wait between polls when performing
passive cooling.

* trips:
A sub-node which is a container of only trip point nodes required to
describe the thermal zone.

* cooling-maps:
A sub-node which is a container of only cooling device map nodes, used to
describe the relation between trips and cooling devices.

* cooling-device:
A phandle of a cooling device with its specifier, referring to which
cooling device is used in this cooling specifier binding. In the cooling
specifier, the first cell is the minimum cooling state and the second cell
is the maximum cooling state used in this map.

Signed-off-by: Caesar Wang <wxt@rock-chips.com>
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
2016-06-06 13:02:00 +02:00
Takeshi Kihara 62bcf90871 arm64: defconfig: enable Renesas R8A7796 SoC
This patch enables the Renesas R8A7796 SoC in the arm64 defconfig.

Signed-off-by: Takeshi Kihara <takeshi.kihara.df@renesas.com>
Signed-off-by: Simon Horman <horms+renesas@verge.net.au>
Acked-by: Geert Uytterhoeven <geert+renesas@glider.be>
2016-06-06 10:26:04 +09:00
Linus Torvalds 8c52b6dcdd Merge branch 'irq-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull irq fixes from Thomas Gleixner:
 - a few simple fixes for fallout from the recent gic-v3 changes
 - a workaround for a Cavium thunderX erratum
 - a bugfix for the pic32 irqchip to make external interrupts work proper
 - a missing return value in the generic IPI management code

* 'irq-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  irqchip/irq-pic32-evic: Fix bug with external interrupts.
  irqchip/gicv3-its: numa: Enable workaround for Cavium thunderx erratum 23144
  irqchip/gic-v3: Fix quiescence check in gic_enable_redist
  irqchip/gic-v3: Fix copy+paste mistakes in defines
  irqchip/gic-v3: Fix ICC_SGI1R_EL1.INTID decoding mask
  genirq: Fix missing return value in irq_destroy_ipi()
2016-06-03 16:12:35 -07:00
Linus Torvalds d29e472301 arm64 fixes:
- Revert a previous revert and get hugetlb going with contiguous hints
 - Wire up missing compat syscalls
 - Enable CONFIG_SET_MODULE_RONX by default
 - Add missing line to our compat /proc/cpuinfo output
 - Clarify levels in our page table dumps
 - Fix booting with RANDOMIZE_TEXT_OFFSET enabled
 - Misc fixes to the ARM CPU PMU driver (refcounting, probe failure)
 - Remove some dead code and update a comment
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1
 
 iQEcBAABCgAGBQJXUZzdAAoJELescNyEwWM0Fm4H/215TJBXcohdIpTYX/Nr3+Bh
 5jOqMgEWKe6ipmXCnzWpZ1F1GHoxLxndSWhJbi1Gwpdc+EYdXWxT5Z/IsQMKZXOb
 n81RzJbit6hXlebZ99YbEjfokfpMATno/9pD8sr1F2Xg/LsrD00O/0aPk9Fp38vX
 VRK2TlaVdBQbF80rMI6fUEEVksbJBqS+jBlqwkRri9JPusP+F5F4Qg8f4VqXDSef
 ZDEBzaI1BjrIQhDGSf0baXQ9EvuyotT2VR1NKAbYzdK8JoLTYiacIDviU2TCsuYZ
 ujB3MTOUytxAJbFhC2KBiDJfukSNY8vg+fLFg7rM3qUj6TMw6ESe1goYVScljHY=
 =cAlD
 -----END PGP SIGNATURE-----

Merge tag 'arm64-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux

Pull arm64 fixes from Will Deacon:
 "The main thing here is reviving hugetlb support using contiguous ptes,
  which we ended up reverting at the last minute in 4.5 pending a fix
  which went into the core mm/ code during the recent merge window.

   - Revert a previous revert and get hugetlb going with contiguous hints
   - Wire up missing compat syscalls
   - Enable CONFIG_SET_MODULE_RONX by default
   - Add missing line to our compat /proc/cpuinfo output
   - Clarify levels in our page table dumps
   - Fix booting with RANDOMIZE_TEXT_OFFSET enabled
   - Misc fixes to the ARM CPU PMU driver (refcounting, probe failure)
   - Remove some dead code and update a comment"

* tag 'arm64-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux:
  arm64: fix alignment when RANDOMIZE_TEXT_OFFSET is enabled
  arm64: move {PAGE,CONT}_SHIFT into Kconfig
  arm64: mm: dump: log span level
  arm64: update stale PAGE_OFFSET comment
  drivers/perf: arm_pmu: Avoid leaking pmu->irq_affinity on error
  drivers/perf: arm_pmu: Defer the setting of __oprofile_cpu_pmu
  drivers/perf: arm_pmu: Fix reference count of a device_node in of_pmu_irq_cfg
  arm64: report CPU number in bad_mode
  arm64: unistd32.h: wire up missing syscalls for compat tasks
  arm64: Provide "model name" in /proc/cpuinfo for PER_LINUX32 tasks
  arm64: enable CONFIG_SET_MODULE_RONX by default
  arm64: Remove orphaned __addr_ok() definition
  Revert "arm64: hugetlb: partial revert of 66b3923a1a0f"
2016-06-03 14:29:47 -07:00
Chanho Min ad763ee761 arm64: defconfig: Enable Cadence MACB/GEM support
This patch enables the cadence MACB/GEM support that is needed
by lg1k SoCs.

Signed-off-by: Chanho Min <chanho.min@lge.com>
Signed-off-by: Olof Johansson <olof@lixom.net>
2016-06-03 12:22:50 -07:00