linux_dsm_epyc7002/arch/arm
Masahiro Yamada b1e4006aed ARM: uniphier: rework SMP operations to use trampoline code
The complexity of the boot sequence of UniPhier SoC family is
a PITA due to the following hardware limitations:

[1] No dedicated on-chip SRAM
SoCs in general have small SRAM, on which a tiny firmware or a boot
loader can run before SDRAM is initialized.  As UniPhier SoCs do not
have any dedicated SRAM accessible from CPUs, the locked outer cache
is used instead.  Due to the ARM specification, to have access to
the outer cache, the MMU must be enabled.  This is done for all CPU
cores by the program hard-wired in the boot ROM.  The boot ROM code
loads a small amount of program (this is usually SPL of U-Boot) from
a non-volatile device onto the locked outer cache, and the primary
CPU jumps to it.  The secondary CPUs stay in the boot ROM until they
are kicked by the primary CPU.

[2] CPUs can not directly jump to SDRAM address space
As mentioned above, the MMU is enable for all the CPUs with the page
table hard-wired in the boot ROM.  Unfortunately, the page table only
has minimal sets of valid sections; all the sections of SDRAM address
space are zero-filled.  That means all the CPUs, including secondary
ones, can not jump directly to SDRAM address space.  So, the primary
CPU must bring up secondary CPUs to accessible address mapped onto
the outer cache, then again kick them to SDRAM address space.

Before this commit, this complex task was done with help of a boot
loader (U-Boot); U-Boot SPL brings up the secondary CPUs to the entry
of U-Boot SPL and they stay there until they are kicked by Linux.
This is not nice because a boot loader must put the secondary CPUs
into a certain state expected by the kernel.  It makes difficult to
port another boot loader because the boot loader and the kernel must
work in sync to wake up the secondary CPUs.

This commit reworks the SMP operations so that they do not rely on
particular boot loader implementation; the SMP operations (platsmp.c)
put trampoline code (headsmp.S) on a locked way of the outer cache.
The secondary CPUs jump from the boot ROM to secondary_entry via the
trampoline code.  The boot loader no longer needs to take care of SMP.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Signed-off-by: Olof Johansson <olof@lixom.net>
2015-10-27 09:20:53 +09:00
..
boot Fixes for omaps for v4.3-rc cycle: 2015-09-26 22:22:31 -07:00
common genirq: Remove irq argument from irq flow handlers 2015-09-16 15:47:51 +02:00
configs ARM: omap2plus_defconfig: enable GPIO_PCA953X 2015-09-16 17:01:39 -07:00
crypto
firmware
include ARM: uniphier: add outer cache support 2015-10-27 09:20:50 +09:00
kernel ARM: uniphier: add outer cache support 2015-10-27 09:20:50 +09:00
kvm arm/arm64: KVM: Remove 'config KVM_ARM_MAX_VCPUS' 2015-09-17 13:13:27 +01:00
lib Merge branch 'uaccess' into fixes 2015-09-11 19:18:28 +01:00
mach-alpine
mach-asm9260
mach-at91 ARM: at91: pm: at91_pm_suspend_in_sram() must be 8-byte aligned 2015-10-19 22:58:44 +02:00
mach-axxia
mach-bcm ARM: brcmstb: Setup BIU control registers during boot 2015-10-09 13:42:18 -07:00
mach-berlin arm: berlin: add CPU hotplug support 2015-10-15 21:14:28 +02:00
mach-clps711x libnvdimm for 4.3: 2015-09-08 14:35:59 -07:00
mach-cns3xxx
mach-davinci ARM: SoC platform updates for v4.3 2015-09-01 12:18:40 -07:00
mach-digicolor ARM: digicolor: select pinctrl/gpio driver 2015-10-15 22:27:30 +02:00
mach-dove genirq: Remove irq argument from irq flow handlers 2015-09-16 15:47:51 +02:00
mach-ebsa110
mach-efm32
mach-ep93xx ARM/fb: ep93xx: switch framebuffer to use modedb only 2015-08-13 12:25:44 +02:00
mach-exynos ARM: SoC: late fixes and dependencies 2015-09-10 17:59:04 -07:00
mach-footbridge genirq: Remove irq argument from irq flow handlers 2015-09-16 15:47:51 +02:00
mach-gemini genirq: Remove irq argument from irq flow handlers 2015-09-16 15:47:51 +02:00
mach-highbank
mach-hisi
mach-imx The i.MX SoC updates for 4.4: 2015-10-23 10:49:47 -07:00
mach-integrator
mach-iop13xx genirq: Remove irq argument from irq flow handlers 2015-09-16 15:47:51 +02:00
mach-iop32x
mach-iop33x
mach-ixp4xx
mach-keystone
mach-ks8695
mach-lpc18xx
mach-lpc32xx genirq: Remove irq argument from irq flow handlers 2015-09-16 15:47:51 +02:00
mach-mediatek ARM: mediatek: add smp bringup code 2015-10-14 15:34:44 +02:00
mach-meson ARM: meson: Enable Meson8b SoCs 2015-10-08 17:22:11 +02:00
mach-mmp ARM: mmp: remove unused RTC register definitions 2015-09-05 19:37:17 +02:00
mach-moxart
mach-mv78xx0
mach-mvebu ARM: mvebu: add broken-idle option 2015-10-23 17:34:37 +02:00
mach-mxs
mach-netx genirq: Remove irq argument from irq flow handlers 2015-09-16 15:47:51 +02:00
mach-nomadik ARM: nomadik: move l2x0 setup to device tree 2015-08-11 15:29:59 +02:00
mach-nspire
mach-omap1 genirq: Remove irq argument from irq flow handlers 2015-09-16 15:47:51 +02:00
mach-omap2 ARM: SoC fixes for v4.3-rc 2015-09-27 06:45:18 -04:00
mach-orion5x ARM: orion5x: use mac_pton() helper 2015-10-23 17:18:22 +02:00
mach-picoxcell
mach-prima2 Merge branches 'cleanup', 'fixes', 'misc', 'omap-barrier' and 'uaccess' into for-linus 2015-09-03 15:28:37 +01:00
mach-pxa ARM: SoC fixes for v4.3-rc 2015-09-27 06:45:18 -04:00
mach-qcom
mach-realview
mach-rockchip ARM: rockchip: pm: Fix PTR_ERR() argument 2015-08-24 12:39:14 +02:00
mach-rpc genirq: Remove irq argument from irq flow handlers 2015-09-16 15:47:51 +02:00
mach-s3c24xx Samsung SoC updates for v4.4 2015-10-26 10:18:41 +09:00
mach-s3c64xx Samsung SoC updates for v4.4 2015-10-26 10:18:41 +09:00
mach-s5pv210
mach-sa1100 genirq: Remove irq argument from irq flow handlers 2015-09-16 15:47:51 +02:00
mach-shmobile ARM: shmobile: R-Mobile: Use CPG/MSTP Clock Domain attach/detach helpers 2015-09-18 09:12:51 +09:00
mach-socfpga genalloc: add name arg to gen_pool_get() and devm_gen_pool_create() 2015-09-04 16:54:41 -07:00
mach-spear ARM: SoC cleanups for v4.3 2015-09-01 12:10:20 -07:00
mach-sti ARM: SoC platform updates for v4.3 2015-09-01 12:18:40 -07:00
mach-stm32
mach-sunxi ARM: sunxi: Add R8 support 2015-10-17 18:47:28 +02:00
mach-tegra ARM: tegra: paz00: use con_id's to refer GPIO's in gpiod_lookup table 2015-10-02 14:30:57 +02:00
mach-u300
mach-uniphier ARM: uniphier: rework SMP operations to use trampoline code 2015-10-27 09:20:53 +09:00
mach-ux500 Merge branch 'for-linus' of git://ftp.arm.linux.org.uk/~rmk/linux-arm 2015-09-03 16:27:01 -07:00
mach-versatile
mach-vexpress
mach-vt8500
mach-w90x900
mach-zx ARM: SoC platform updates for v4.3 2015-09-01 12:18:40 -07:00
mach-zynq Merge branch 'irq-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2015-09-01 14:33:35 -07:00
mm ARM: uniphier: add outer cache support 2015-10-27 09:20:50 +09:00
net
nwfpe ARM: swpan: fix nwfpe for uaccess changes 2015-09-09 23:26:11 +01:00
oprofile
plat-iop
plat-omap
plat-orion genirq: Remove irq argument from irq flow handlers 2015-09-16 15:47:51 +02:00
plat-pxa ARM: pxa: ssp: Fix build error by removing originally incorrect DT binding 2015-09-13 12:55:27 +02:00
plat-samsung
plat-versatile
probes
tools
vdso
vfp
xen Merge branch 'fixes' of git://ftp.arm.linux.org.uk/~rmk/linux-arm 2015-09-14 12:24:10 -07:00
Kconfig Merge branch 'uaccess' into fixes 2015-09-11 19:18:28 +01:00
Kconfig-nommu
Kconfig.debug ARM: at91: debug: use DEBUG_UART_PHYS 2015-09-21 16:31:15 +02:00
Makefile ARM: 8429/1: disable GCC SRA optimization 2015-09-07 13:24:05 +01:00