158fdd608SJacky Bai /* 258fdd608SJacky Bai * Copyright 2019-2020 NXP 358fdd608SJacky Bai * 458fdd608SJacky Bai * SPDX-License-Identifier: BSD-3-Clause 558fdd608SJacky Bai */ 658fdd608SJacky Bai 758fdd608SJacky Bai #include <stdbool.h> 858fdd608SJacky Bai 958fdd608SJacky Bai #include <arch.h> 1058fdd608SJacky Bai #include <arch_helpers.h> 1158fdd608SJacky Bai #include <common/debug.h> 1258fdd608SJacky Bai #include <lib/mmio.h> 1358fdd608SJacky Bai #include <lib/psci/psci.h> 1458fdd608SJacky Bai 1558fdd608SJacky Bai #include <gpc.h> 1658fdd608SJacky Bai #include <imx8m_psci.h> 1758fdd608SJacky Bai #include <plat_imx8.h> 1858fdd608SJacky Bai 1958fdd608SJacky Bai static const plat_psci_ops_t imx_plat_psci_ops = { 2058fdd608SJacky Bai .pwr_domain_on = imx_pwr_domain_on, 2158fdd608SJacky Bai .pwr_domain_on_finish = imx_pwr_domain_on_finish, 2258fdd608SJacky Bai .pwr_domain_off = imx_pwr_domain_off, 2358fdd608SJacky Bai .validate_ns_entrypoint = imx_validate_ns_entrypoint, 2458fdd608SJacky Bai .validate_power_state = imx_validate_power_state, 2558fdd608SJacky Bai .cpu_standby = imx_cpu_standby, 2658fdd608SJacky Bai .pwr_domain_suspend = imx_domain_suspend, 2758fdd608SJacky Bai .pwr_domain_suspend_finish = imx_domain_suspend_finish, 28*db5fe4f4SBoyan Karatotev .pwr_domain_pwr_down = imx_pwr_domain_pwr_down_wfi, 2958fdd608SJacky Bai .get_sys_suspend_power_state = imx_get_sys_suspend_power_state, 3058fdd608SJacky Bai .system_reset = imx_system_reset, 3158fdd608SJacky Bai .system_off = imx_system_off, 3258fdd608SJacky Bai }; 3358fdd608SJacky Bai 3458fdd608SJacky Bai /* export the platform specific psci ops */ 3558fdd608SJacky Bai int plat_setup_psci_ops(uintptr_t sec_entrypoint, 3658fdd608SJacky Bai const plat_psci_ops_t **psci_ops) 3758fdd608SJacky Bai { 3858fdd608SJacky Bai /* sec_entrypoint is used for warm reset */ 3958fdd608SJacky Bai imx_mailbox_init(sec_entrypoint); 4058fdd608SJacky Bai 4158fdd608SJacky Bai *psci_ops = &imx_plat_psci_ops; 4258fdd608SJacky Bai 4358fdd608SJacky Bai return 0; 4458fdd608SJacky Bai } 45