xref: /rk3399_ARM-atf/plat/allwinner/common/sunxi_pm.c (revision fe753c97408a92ba245239abd0c056050ae42630)
158032586SSamuel Holland /*
2814dce8fSSamuel Holland  * Copyright (c) 2017-2021, ARM Limited and Contributors. All rights reserved.
358032586SSamuel Holland  *
458032586SSamuel Holland  * SPDX-License-Identifier: BSD-3-Clause
558032586SSamuel Holland  */
658032586SSamuel Holland 
758032586SSamuel Holland #include <assert.h>
809d40e0eSAntonio Nino Diaz 
958032586SSamuel Holland #include <platform_def.h>
1009d40e0eSAntonio Nino Diaz 
1109d40e0eSAntonio Nino Diaz #include <common/debug.h>
1209d40e0eSAntonio Nino Diaz #include <lib/mmio.h>
1309d40e0eSAntonio Nino Diaz #include <lib/psci/psci.h>
1409d40e0eSAntonio Nino Diaz 
15560581ecSSamuel Holland #include <sunxi_cpucfg.h>
164ec1a239SAndre Przywara #include <sunxi_private.h>
1758032586SSamuel Holland 
18*fe753c97SSamuel Holland int sunxi_validate_ns_entrypoint(uintptr_t ns_entrypoint)
19560581ecSSamuel Holland {
20560581ecSSamuel Holland 	/* The non-secure entry point must be in DRAM */
21814dce8fSSamuel Holland 	if (ns_entrypoint < SUNXI_DRAM_BASE) {
22560581ecSSamuel Holland 		return PSCI_E_INVALID_ADDRESS;
23560581ecSSamuel Holland 	}
24560581ecSSamuel Holland 
25814dce8fSSamuel Holland 	return PSCI_E_SUCCESS;
26814dce8fSSamuel Holland }
27814dce8fSSamuel Holland 
2858032586SSamuel Holland int plat_setup_psci_ops(uintptr_t sec_entrypoint,
2958032586SSamuel Holland 			const plat_psci_ops_t **psci_ops)
3058032586SSamuel Holland {
3158032586SSamuel Holland 	assert(psci_ops);
3258032586SSamuel Holland 
33e382c88eSSamuel Holland 	/* Program all CPU entry points. */
34e382c88eSSamuel Holland 	for (unsigned int cpu = 0; cpu < PLATFORM_CORE_COUNT; ++cpu) {
35560581ecSSamuel Holland 		mmio_write_32(SUNXI_CPUCFG_RVBAR_LO_REG(cpu),
36560581ecSSamuel Holland 			      sec_entrypoint & 0xffffffff);
37560581ecSSamuel Holland 		mmio_write_32(SUNXI_CPUCFG_RVBAR_HI_REG(cpu),
38560581ecSSamuel Holland 			      sec_entrypoint >> 32);
39560581ecSSamuel Holland 	}
40560581ecSSamuel Holland 
41*fe753c97SSamuel Holland 	if (sunxi_set_scpi_psci_ops(psci_ops) == 0) {
42*fe753c97SSamuel Holland 		INFO("PSCI: Suspend is available via SCPI\n");
43*fe753c97SSamuel Holland 	} else {
44*fe753c97SSamuel Holland 		INFO("PSCI: Suspend is unavailable\n");
45*fe753c97SSamuel Holland 		sunxi_set_native_psci_ops(psci_ops);
46e382c88eSSamuel Holland 	}
4758032586SSamuel Holland 
4858032586SSamuel Holland 	return 0;
4958032586SSamuel Holland }
50