| /* |
| * Copyright (c) 2023 Intel Corporation |
| * |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| #include <zephyr/kernel.h> |
| #include <zephyr/pm/pm.h> |
| #include <zephyr/pm/policy.h> |
| #include <zephyr/device.h> |
| #include <zephyr/init.h> |
| #include <zephyr/irq.h> |
| #include <zephyr/logging/log_core.h> |
| #include <stdio.h> |
| #include <zephyr/drivers/interrupt_controller/ioapic.h> |
| |
| #include <zephyr/logging/log.h> |
| LOG_MODULE_REGISTER(pm_service, CONFIG_PM_LOG_LEVEL); |
| |
| /* low power modes */ |
| #define FW_D0 0 |
| #define FW_D0i0 1 |
| #define FW_D0i1 2 |
| #define FW_D0i2 3 |
| #define FW_D0i3 4 |
| |
| extern void sedi_pm_enter_power_state(int state); |
| |
| void pm_state_set(enum pm_state state, uint8_t substate_id) |
| { |
| LOG_DBG(" -> SoC D0i%u, idle=%u ms", substate_id, |
| k_ticks_to_ms_floor32(_kernel.idle)); |
| |
| switch (state) { |
| case PM_STATE_RUNTIME_IDLE: |
| sedi_pm_enter_power_state(FW_D0i0); |
| break; |
| case PM_STATE_SUSPEND_TO_IDLE: |
| sedi_pm_enter_power_state(FW_D0i1); |
| break; |
| case PM_STATE_SUSPEND_TO_RAM: |
| sedi_pm_enter_power_state(FW_D0i2); |
| break; |
| case PM_STATE_SUSPEND_TO_DISK: |
| sedi_pm_enter_power_state(FW_D0i3); |
| break; |
| default: |
| LOG_DBG("Unsupported power state %u", state); |
| break; |
| } |
| |
| LOG_DBG("SoC D0i%u ->", substate_id); |
| } |
| |
| /* Handle SOC specific activity after Low Power Mode Exit */ |
| void pm_state_exit_post_ops(enum pm_state state, uint8_t substate_id) |
| { |
| ARG_UNUSED(state); |
| ARG_UNUSED(substate_id); |
| __asm__ volatile ("sti" ::: "memory"); |
| } |
| |
| #if defined(CONFIG_REBOOT) && !defined(CONFIG_REBOOT_RST_CNT) |
| extern void sedi_pm_reset(void); |
| |
| void sys_arch_reboot(int type) |
| { |
| ARG_UNUSED(type); |
| sedi_pm_reset(); |
| } |
| #endif |
| |
| extern void sedi_pm_init(void); |
| |
| static int ish_sedi_pm_init(void) |
| { |
| sedi_pm_init(); |
| |
| return 0; |
| } |
| |
| SYS_INIT(ish_sedi_pm_init, PRE_KERNEL_2, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT); |