mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-18 18:44:22 +00:00
allwinner: Use CPUIDLE hardware when available
This works even on SoCs that do not have an ARISC, and it avoids clobbering whatever ARISC firmware might be running. Change-Id: I9f2fed597189bb387de79e8e76a7da3375e1ee91 Signed-off-by: Samuel Holland <samuel@sholland.org> Signed-off-by: Andre Przywara <andre.przywara@arm.com>
This commit is contained in:
parent
2e0e51f425
commit
de37db6c59
2 changed files with 19 additions and 2 deletions
|
@ -15,11 +15,14 @@
|
|||
#include <lib/utils_def.h>
|
||||
#include <plat/common/platform.h>
|
||||
|
||||
#include <core_off_arisc.h>
|
||||
#include <sunxi_cpucfg.h>
|
||||
#include <sunxi_mmap.h>
|
||||
#include <sunxi_private.h>
|
||||
|
||||
#ifndef SUNXI_CPUIDLE_EN_REG
|
||||
#include <core_off_arisc.h>
|
||||
#endif
|
||||
|
||||
static void sunxi_cpu_disable_power(unsigned int cluster, unsigned int core)
|
||||
{
|
||||
if (mmio_read_32(SUNXI_CPU_POWER_CLAMP_REG(cluster, core)) == 0xff)
|
||||
|
@ -72,6 +75,14 @@ void sunxi_cpu_power_off_self(void)
|
|||
/* Simplifies assembly, all SoCs so far are single cluster anyway. */
|
||||
assert(MPIDR_AFFLVL1_VAL(mpidr) == 0);
|
||||
|
||||
#ifdef SUNXI_CPUIDLE_EN_REG
|
||||
/* Enable the CPUIDLE hardware (only really needs to be done once). */
|
||||
mmio_write_32(SUNXI_CPUIDLE_EN_REG, 0x16aa0000);
|
||||
mmio_write_32(SUNXI_CPUIDLE_EN_REG, 0xaa160001);
|
||||
|
||||
/* Trigger power off for this core. */
|
||||
mmio_write_32(SUNXI_CORE_CLOSE_REG, BIT_32(core));
|
||||
#else
|
||||
/*
|
||||
* If we are supposed to turn ourself off, tell the arisc SCP
|
||||
* to do that work for us. The code expects the core mask to be
|
||||
|
@ -79,6 +90,7 @@ void sunxi_cpu_power_off_self(void)
|
|||
*/
|
||||
sunxi_execute_arisc_code(arisc_core_off, sizeof(arisc_core_off),
|
||||
BIT_32(core));
|
||||
#endif
|
||||
}
|
||||
|
||||
void sunxi_cpu_on(u_register_t mpidr)
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2017-2018, ARM Limited and Contributors. All rights reserved.
|
||||
* Copyright (c) 2017-2021, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
@ -24,4 +24,9 @@
|
|||
#define SUNXI_CPU_POWER_CLAMP_REG(c, n) (SUNXI_R_CPUCFG_BASE + 0x0050 + \
|
||||
(c) * 0x10 + (n) * 4)
|
||||
|
||||
#define SUNXI_CPUIDLE_EN_REG (SUNXI_R_CPUCFG_BASE + 0x0100)
|
||||
#define SUNXI_CORE_CLOSE_REG (SUNXI_R_CPUCFG_BASE + 0x0104)
|
||||
#define SUNXI_PWR_SW_DELAY_REG (SUNXI_R_CPUCFG_BASE + 0x0140)
|
||||
#define SUNXI_CONFIG_DELAY_REG (SUNXI_R_CPUCFG_BASE + 0x0144)
|
||||
|
||||
#endif /* SUNXI_CPUCFG_H */
|
||||
|
|
Loading…
Add table
Reference in a new issue