1a775ef25SJacky Bai /* 2a775ef25SJacky Bai * Copyright 2020 NXP 3a775ef25SJacky Bai * 4a775ef25SJacky Bai * SPDX-License-Identifier: BSD-3-Clause 5a775ef25SJacky Bai */ 6a775ef25SJacky Bai 7a775ef25SJacky Bai #include <stdbool.h> 8a775ef25SJacky Bai 9a775ef25SJacky Bai #include <arch.h> 10a775ef25SJacky Bai #include <arch_helpers.h> 11a775ef25SJacky Bai #include <common/debug.h> 12a775ef25SJacky Bai #include <lib/mmio.h> 13a775ef25SJacky Bai #include <lib/psci/psci.h> 14a775ef25SJacky Bai 15a775ef25SJacky Bai #include <gpc.h> 16a775ef25SJacky Bai #include <imx8m_psci.h> 17a775ef25SJacky Bai #include <plat_imx8.h> 18a775ef25SJacky Bai 19a775ef25SJacky Bai static const plat_psci_ops_t imx_plat_psci_ops = { 20a775ef25SJacky Bai .pwr_domain_on = imx_pwr_domain_on, 21a775ef25SJacky Bai .pwr_domain_on_finish = imx_pwr_domain_on_finish, 22a775ef25SJacky Bai .pwr_domain_off = imx_pwr_domain_off, 23a775ef25SJacky Bai .validate_ns_entrypoint = imx_validate_ns_entrypoint, 24a775ef25SJacky Bai .validate_power_state = imx_validate_power_state, 25a775ef25SJacky Bai .cpu_standby = imx_cpu_standby, 26a775ef25SJacky Bai .pwr_domain_suspend = imx_domain_suspend, 27a775ef25SJacky Bai .pwr_domain_suspend_finish = imx_domain_suspend_finish, 28*db5fe4f4SBoyan Karatotev .pwr_domain_pwr_down = imx_pwr_domain_pwr_down_wfi, 29a775ef25SJacky Bai .get_sys_suspend_power_state = imx_get_sys_suspend_power_state, 30a775ef25SJacky Bai .system_reset = imx_system_reset, 31a775ef25SJacky Bai .system_off = imx_system_off, 32a775ef25SJacky Bai }; 33a775ef25SJacky Bai 34a775ef25SJacky Bai /* export the platform specific psci ops */ 35a775ef25SJacky Bai int plat_setup_psci_ops(uintptr_t sec_entrypoint, 36a775ef25SJacky Bai const plat_psci_ops_t **psci_ops) 37a775ef25SJacky Bai { 38a775ef25SJacky Bai /* sec_entrypoint is used for warm reset */ 39a775ef25SJacky Bai imx_mailbox_init(sec_entrypoint); 40a775ef25SJacky Bai 41a775ef25SJacky Bai *psci_ops = &imx_plat_psci_ops; 42a775ef25SJacky Bai 43a775ef25SJacky Bai return 0; 44a775ef25SJacky Bai } 45