Commit 32b3ab23 authored by Marcin Szymczyk's avatar Marcin Szymczyk Committed by Ioannis Glaropoulos
Browse files

soc: nrf53: add power management



Only System OFF mode is supported.

Signed-off-by: default avatarMarcin Szymczyk <marcin.szymczyk@nordicsemi.no>
parent 0c3fbaa8
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -3,3 +3,7 @@
zephyr_sources(
  soc.c
  )

zephyr_library_sources_ifdef(CONFIG_SYS_POWER_MANAGEMENT
  power.c
  )
+0 −1
Original line number Diff line number Diff line
@@ -8,7 +8,6 @@ config SOC_SERIES_NRF53X
	select CPU_CORTEX_M33
	select CPU_HAS_ARM_MPU
	select SOC_FAMILY_NRF
	select HAS_SYS_POWER_STATE_DEEP_SLEEP_1
	select XIP
	select HAS_NRFX
	select HAS_SEGGER_RTT
+1 −0
Original line number Diff line number Diff line
@@ -9,6 +9,7 @@ config SOC_NRF5340_CPUAPP
	select CPU_HAS_NRF_IDAU
	select CPU_HAS_FPU
	select ARMV8_M_DSP
	select HAS_SYS_POWER_STATE_DEEP_SLEEP_1
	select HAS_HW_NRF_CC312
	select HAS_HW_NRF_CLOCK
	select HAS_HW_NRF_DPPIC
+55 −0
Original line number Diff line number Diff line
/*
 * Copyright (c) 2017 Intel Corporation.
 * Copytight (c) 2019 Nordic Semiconductor ASA
 *
 * SPDX-License-Identifier: Apache-2.0
 */
#include <zephyr.h>
#include <power/power.h>

#ifdef CONFIG_HAS_SYS_POWER_STATE_DEEP_SLEEP_1
#include <hal/nrf_regulators.h>
#endif

#include <logging/log.h>
LOG_MODULE_DECLARE(soc, CONFIG_SOC_LOG_LEVEL);

/* Invoke Low Power/System Off specific Tasks */
void sys_set_power_state(enum power_states state)
{
	switch (state) {
#ifdef CONFIG_SYS_POWER_DEEP_SLEEP_STATES
 #ifdef CONFIG_HAS_SYS_POWER_STATE_DEEP_SLEEP_1
	case SYS_POWER_STATE_DEEP_SLEEP_1:
		nrf_regulators_system_off(NRF_REGULATORS);
		break;
 #endif
#endif
	default:
		LOG_DBG("Unsupported power state %u", state);
		break;
	}
}

/* Handle SOC specific activity after Low Power Mode Exit */
void _sys_pm_power_state_exit_post_ops(enum power_states state)
{
	switch (state) {
#ifdef CONFIG_SYS_POWER_DEEP_SLEEP_STATES
 #ifdef CONFIG_HAS_SYS_POWER_STATE_DEEP_SLEEP_1
	case SYS_POWER_STATE_DEEP_SLEEP_1:
		/* Nothing to do. */
		break;
 #endif
#endif
	default:
		LOG_DBG("Unsupported power state %u", state);
		break;
	}

	/*
	 * System is now in active mode. Reenable interrupts which were disabled
	 * when OS started idling code.
	 */
	irq_unlock(0);
}
+1 −1
Original line number Diff line number Diff line
@@ -22,7 +22,7 @@ LOG_MODULE_DECLARE(power);
 * to build the device list based on devices power
 * and clock domain dependencies.
 */
#if defined(CONFIG_SOC_SERIES_NRF52X) || defined(CONFIG_SOC_SERIES_NRF51X)
#if defined(CONFIG_SOC_SERIES_NRF52X) || defined(CONFIG_SOC_SERIES_NRF51X) || defined(CONFIG_SOC_SERIES_NRF53X)
#define MAX_PM_DEVICES	15
#define NUM_CORE_DEVICES	4
#define MAX_DEV_NAME_LEN	16