All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot] [PATCH v2 00/13] ARMv7: add PSCI support to u-boot
@ 2013-12-07 11:19 Marc Zyngier
  2013-12-07 11:19 ` [U-Boot] [PATCH v2 01/13] ARM: HYP/non-sec: fix alignment requirements for vectors Marc Zyngier
                   ` (14 more replies)
  0 siblings, 15 replies; 28+ messages in thread
From: Marc Zyngier @ 2013-12-07 11:19 UTC (permalink / raw)
  To: u-boot

PSCI is an ARM standard that provides a generic interface that
supervisory software can use to manage power in the following
situations:
- Core idle management
- CPU hotplug
- big.LITTLE migration models
- System shutdown and reset

It basically allows the kernel to offload these tasks to the firmware,
and rely on common kernel side code.

More importantly, it gives a way to ensure that CPUs enter the kernel
at the appropriate exception level (ie HYP mode, to allow the use of
the virtualization extensions), even across events like CPUs being
powered off/on or suspended.

The main idea here is to turn some of the existing u-boot code into a
separate section that can live in secure RAM (or a reserved page of
memory), containing a secure monitor that will implement the PSCI
operations. This code will still be alive when u-boot is long gone,
hence the need for a piece of memory that will not be touched by the
OS.

This patch series contains 4 parts:
- the first four patches are just bug fixes
- the next three refactor the HYP/non-secure code to allow relocation
  in secure memory
- the next three contain the generic PSCI code and DT infrastructure
- the last three implement the CPU_ON method of the Allwinner A20 (aka sun7i).

I realize the A20 u-boot code is not upstream yet (BTW is anyone
actively working on that?), but hopefully that should give a good idea
of how things are structured so far. The patches are against the sunxi
u-boot tree as of today, and the first 10 patches will directly apply
to mainline u-boot.

As for using this code, it goes like this:
sun7i# ext2load mmc 0:1 0x40008000 zImage ; ext2load mmc 0:1 0x60000000 sun7i-a20-cubietruck.dtb
2270120 bytes read in 117 ms (18.5 MiB/s)
9138 bytes read in 3 ms (2.9 MiB/s)
sun7i# fdt addr 0x60000000 ; fdt resize ; fdt set ethernet0 mac-address "[5a fe b0 07 b0 07]"
sun7i# setenv bootargs console=ttyS0,115200 earlyprintk ip=dhcp root=/dev/nfs nfsroot=/backup/a20_root,tcp
sun7i# bootz 0x40008000 - 0x60000000

The kernel now boots in HYP mode, finds its secondary CPU without any
SMP code present in the kernel, and runs KVM out of the box.
Hopefully, the Xen/ARM guys can do the same fairly easily.

This code has also been tested on a VExpress TC2, running KVM with all
5 CPUs, in order to make sure there was no obvious regression.

I'm wildly cross-posting this patch series, including to lists I'm not
subscribed to. Please keep me on Cc for any comment you may have.

Cheers,

        M.

Marc Zyngier (13):
  ARM: HYP/non-sec: fix alignment requirements for vectors
  ARM: HYP/non-sec: move switch to non-sec to the last boot phase
  ARM: HYP/non-sec: add a barrier after setting SCR.NS==1
  ARM: non-sec: reset CNTVOFF to zero
  ARM: add missing HYP mode constant
  ARM: HYP/non-sec: add separate section for secure code
  ARM: HYP/non-sec: allow relocation to secure RAM
  ARM: HYP/non-sec: add generic ARMv7 PSCI code
  ARM: HYP/non-sec: add the option for a second-stage monitor
  ARM: HYP/non-sec/PSCI: emit DT nodes
  sunxi: fix SRAM_B/SRAM_D memory map
  sunxi: HYP/non-sec: add sun7i PSCI backend
  sunxi: HYP/non-sec: configure CNTFRQ on all CPUs

 arch/arm/cpu/armv7/Makefile              |   5 +
 arch/arm/cpu/armv7/nonsec_virt.S         | 168 ++++++++++++++++---------------
 arch/arm/cpu/armv7/psci.S                | 113 +++++++++++++++++++++
 arch/arm/cpu/armv7/sunxi/Makefile        |   3 +
 arch/arm/cpu/armv7/sunxi/psci.S          | 124 +++++++++++++++++++++++
 arch/arm/cpu/armv7/sunxi/u-boot-psci.lds |  63 ++++++++++++
 arch/arm/cpu/armv7/virt-dt.c             | 102 +++++++++++++++++++
 arch/arm/cpu/armv7/virt-v7.c             |  59 ++++-------
 arch/arm/cpu/u-boot.lds                  |  30 ++++++
 arch/arm/include/asm/arch-sunxi/cpu.h    |   4 +-
 arch/arm/include/asm/armv7.h             |  11 +-
 arch/arm/include/asm/proc-armv/ptrace.h  |   2 +
 arch/arm/include/asm/psci.h              |  35 +++++++
 arch/arm/include/asm/secure.h            |  26 +++++
 arch/arm/lib/bootm.c                     |  26 ++---
 arch/arm/lib/interrupts.c                |   2 +-
 arch/arm/lib/sections.c                  |   2 +
 include/configs/sun7i.h                  |   7 ++
 18 files changed, 641 insertions(+), 141 deletions(-)
 create mode 100644 arch/arm/cpu/armv7/psci.S
 create mode 100644 arch/arm/cpu/armv7/sunxi/psci.S
 create mode 100644 arch/arm/cpu/armv7/sunxi/u-boot-psci.lds
 create mode 100644 arch/arm/cpu/armv7/virt-dt.c
 create mode 100644 arch/arm/include/asm/psci.h
 create mode 100644 arch/arm/include/asm/secure.h

-- 
1.8.4.3

^ permalink raw reply	[flat|nested] 28+ messages in thread

end of thread, other threads:[~2014-02-26 12:22 UTC | newest]

Thread overview: 28+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-12-07 11:19 [U-Boot] [PATCH v2 00/13] ARMv7: add PSCI support to u-boot Marc Zyngier
2013-12-07 11:19 ` [U-Boot] [PATCH v2 01/13] ARM: HYP/non-sec: fix alignment requirements for vectors Marc Zyngier
2013-12-09 10:52   ` Ian Campbell
2013-12-07 11:19 ` [U-Boot] [PATCH v2 02/13] ARM: HYP/non-sec: move switch to non-sec to the last boot phase Marc Zyngier
2013-12-07 11:19 ` [U-Boot] [PATCH v2 03/13] ARM: HYP/non-sec: add a barrier after setting SCR.NS==1 Marc Zyngier
2013-12-07 11:19 ` [U-Boot] [PATCH v2 04/13] ARM: non-sec: reset CNTVOFF to zero Marc Zyngier
2013-12-07 11:19 ` [U-Boot] [PATCH v2 05/13] ARM: add missing HYP mode constant Marc Zyngier
2013-12-07 11:19 ` [U-Boot] [PATCH v2 06/13] ARM: HYP/non-sec: add separate section for secure code Marc Zyngier
2013-12-07 11:19 ` [U-Boot] [PATCH v2 07/13] ARM: HYP/non-sec: allow relocation to secure RAM Marc Zyngier
2013-12-12 10:47   ` Albert ARIBAUD
2014-02-12  8:36     ` Albert ARIBAUD
2014-02-12 10:52       ` Marc Zyngier
2013-12-07 11:19 ` [U-Boot] [PATCH v2 08/13] ARM: HYP/non-sec: add generic ARMv7 PSCI code Marc Zyngier
2013-12-07 11:19 ` [U-Boot] [PATCH v2 09/13] ARM: HYP/non-sec: add the option for a second-stage monitor Marc Zyngier
2013-12-07 11:19 ` [U-Boot] [PATCH v2 10/13] ARM: HYP/non-sec/PSCI: emit DT nodes Marc Zyngier
2013-12-07 11:19 ` [U-Boot] [PATCH v2 11/13] sunxi: fix SRAM_B/SRAM_D memory map Marc Zyngier
2013-12-07 11:19 ` [U-Boot] [PATCH v2 12/13] sunxi: HYP/non-sec: add sun7i PSCI backend Marc Zyngier
2013-12-07 11:19 ` [U-Boot] [PATCH v2 13/13] sunxi: HYP/non-sec: configure CNTFRQ on all CPUs Marc Zyngier
2013-12-09 10:51 ` [U-Boot] [PATCH v2 00/13] ARMv7: add PSCI support to u-boot Ian Campbell
2013-12-09 10:57   ` Marc Zyngier
2013-12-09 11:29   ` [U-Boot] [linux-sunxi] " Hans de Goede
2013-12-09 12:20     ` Marc Zyngier
2013-12-09 12:28     ` Ian Campbell
2014-02-13 10:11 ` [U-Boot] " Albert ARIBAUD
2014-02-13 10:16   ` Marc Zyngier
2014-02-25 13:38     ` Ezaul Zillmer
2014-02-25 14:04       ` Marc Zyngier
2014-02-26 12:22         ` Ezaul Zillmer

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.