xref: /rk3399_ARM-atf/plat/mediatek/mt8192/plat_pm.c (revision addc4e969bb157d736ccd0d46db85c8e9c835d42)
1 /*
2  * Copyright (c) 2020, MediaTek Inc. All rights reserved.
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  */
6 
7 /* common headers */
8 #include <arch_helpers.h>
9 #include <common/debug.h>
10 #include <drivers/gpio.h>
11 #include <lib/psci/psci.h>
12 
13 /* mediatek platform specific headers */
14 #include <plat_params.h>
15 
16 /*******************************************************************************
17  * MTK handlers to shutdown/reboot the system
18  ******************************************************************************/
19 static void __dead2 plat_mtk_system_reset(void)
20 {
21 	struct bl_aux_gpio_info *gpio_reset = plat_get_mtk_gpio_reset();
22 
23 	INFO("MTK System Reset\n");
24 
25 	gpio_set_value(gpio_reset->index, gpio_reset->polarity);
26 
27 	wfi();
28 	ERROR("MTK System Reset: operation not handled.\n");
29 	panic();
30 }
31 
32 /*******************************************************************************
33  * MTK_platform handler called when an affinity instance is about to be turned
34  * on. The level and mpidr determine the affinity instance.
35  ******************************************************************************/
36 static const plat_psci_ops_t plat_plat_pm_ops = {
37 	.system_reset         = plat_mtk_system_reset,
38 };
39 
40 int plat_setup_psci_ops(uintptr_t sec_entrypoint,
41 			const plat_psci_ops_t **psci_ops)
42 {
43 	*psci_ops = &plat_plat_pm_ops;
44 
45 	return 0;
46 }
47