| From: |
| Nicolas Pitre <nicolas.pitre@linaro.org> |
| To: |
| linux-arm-kernel@lists.infradead.org |
| Subject: |
| [PATCH 00/16] big.LITTLE low-level CPU and cluster power management |
| Date: |
| Wed, 09 Jan 2013 19:20:35 -0500 |
| Message-ID: |
| <1357777251-13541-1-git-send-email-nicolas.pitre@linaro.org> |
| Archive-link: |
| Article, Thread
|
This is the initial public posting of the initial support for big.LITTLE.
Included here is the code required to safely power up and down CPUs in a
b.L system, whether this is via CPU hotplug, a cpuidle driver or the
Linaro b.L in-kernel switcher[*] on top of this. Only SMP secondary
boot and CPU hotplug support is included at this time. Getting to this
point already represents a significcant chunk of code as illustrated by
the diffstat below.
This work was presented at Linaro Connect in Copenhagen by Dave Martin and
myself. The presentation slides are available here:
http://www.linaro.org/documents/download/f3569407bb1fb8bd...
The code is now stable on both Fast Models as well as Virtual Express TC2
and ready for public review.
Platform support is included for Fast Models implementing the
Cortex-A15x4-A7x4 and Cortex-A15x1-A7x1 configurations. To allow
successful compilation, I also included a preliminary version of the
CCI400 driver from Lorenzo Pieralisi.
Support for actual hardware such as Vexpress TC2 should come later,
once the basic infrastructure from this series is merged. A few DT
bindings are used but not yet documented.
This series is made of the following parts:
Low-level support code:
[PATCH 01/16] ARM: b.L: secondary kernel entry code
[PATCH 02/16] ARM: b.L: introduce the CPU/cluster power API
[PATCH 03/16] ARM: b.L: introduce helpers for platform coherency
[PATCH 04/16] ARM: b.L: Add baremetal voting mutexes
[PATCH 05/16] ARM: bL_head: vlock-based first man election
Adaptation layer to hook with the generic kernel infrastructure:
[PATCH 06/16] ARM: b.L: generic SMP secondary bringup and hotplug
[PATCH 07/16] ARM: bL_platsmp.c: close the kernel entry gate before
[PATCH 08/16] ARM: bL_platsmp.c: make sure the GIC interface of a
[PATCH 09/16] ARM: vexpress: Select the correct SMP operations at
Fast Models support:
[PATCH 10/16] ARM: vexpress: introduce DCSCB support
[PATCH 11/16] ARM: vexpress/dcscb: add CPU use counts to the power
[PATCH 12/16] ARM: vexpress/dcscb: do not hardcode number of CPUs
[PATCH 13/16] drivers: misc: add ARM CCI support
[PATCH 14/16] ARM: TC2: ensure powerdown-time data is flushed from
[PATCH 15/16] ARM: vexpress/dcscb: handle platform coherency
[PATCH 16/16] ARM: vexpress/dcscb: probe via device tree
Here's the diffstat:
.../big.LITTLE/cluster-pm-race-avoidance.txt | 498 ++++++++++++++++++
Documentation/arm/big.LITTLE/vlocks.txt | 211 ++++++++
arch/arm/Kconfig | 6 +
arch/arm/common/Makefile | 3 +
arch/arm/common/bL_entry.c | 278 ++++++++++
arch/arm/common/bL_head.S | 232 ++++++++
arch/arm/common/bL_platsmp.c | 85 +++
arch/arm/common/gic.c | 6 +
arch/arm/common/vlock.S | 108 ++++
arch/arm/common/vlock.h | 43 ++
arch/arm/include/asm/bL_entry.h | 189 +++++++
arch/arm/include/asm/hardware/gic.h | 2 +
arch/arm/include/asm/mach/arch.h | 3 +
arch/arm/kernel/setup.c | 5 +-
arch/arm/mach-vexpress/Kconfig | 9 +
arch/arm/mach-vexpress/Makefile | 1 +
arch/arm/mach-vexpress/core.h | 2 +
arch/arm/mach-vexpress/dcscb.c | 257 +++++++++
arch/arm/mach-vexpress/dcscb_setup.S | 77 +++
arch/arm/mach-vexpress/platsmp.c | 12 +
arch/arm/mach-vexpress/v2m.c | 2 +-
drivers/misc/Kconfig | 4 +
drivers/misc/Makefile | 1 +
drivers/misc/arm-cci.c | 124 +++++
include/linux/arm-cci.h | 30 ++
25 files changed, 2186 insertions(+), 2 deletions(-)
Review comments are welcome!
[*] General design information on the b.L switcher can be found here:
http://lwn.net/Articles/481055/
However the code is only accessible to Linaro members for the
time being.