xref: /rk3399_ARM-atf/plat/imx/imx9/common/include/imx9_sys_sleep.h (revision 480e8dd9df291cc0e31695983fa6ff235e1671cd)
1*4ddfb6f1SJacky Bai /*
2*4ddfb6f1SJacky Bai  * Copyright 2025 NXP
3*4ddfb6f1SJacky Bai  *
4*4ddfb6f1SJacky Bai  * SPDX-License-Identifier: BSD-3-Clause
5*4ddfb6f1SJacky Bai  */
6*4ddfb6f1SJacky Bai 
7*4ddfb6f1SJacky Bai #ifndef IMX9_SYS_SLEEP_H
8*4ddfb6f1SJacky Bai #define IMX9_SYS_SLEEP_H
9*4ddfb6f1SJacky Bai 
10*4ddfb6f1SJacky Bai #include <stdbool.h>
11*4ddfb6f1SJacky Bai #include <stdint.h>
12*4ddfb6f1SJacky Bai 
13*4ddfb6f1SJacky Bai #include <lib/utils_def.h>
14*4ddfb6f1SJacky Bai 
15*4ddfb6f1SJacky Bai #include <platform_def.h>
16*4ddfb6f1SJacky Bai 
17*4ddfb6f1SJacky Bai #define GPIO_CTRL_REG_NUM	U(8)
18*4ddfb6f1SJacky Bai #define GPIO_PIN_MAX_NUM	U(32)
19*4ddfb6f1SJacky Bai #define GPIO_CTX(addr, num)	\
20*4ddfb6f1SJacky Bai 	{ .base = (addr), .pin_num = (num), }
21*4ddfb6f1SJacky Bai 
22*4ddfb6f1SJacky Bai struct gpio_ctx {
23*4ddfb6f1SJacky Bai 	/* gpio base */
24*4ddfb6f1SJacky Bai 	uintptr_t base;
25*4ddfb6f1SJacky Bai 	/* port control */
26*4ddfb6f1SJacky Bai 	uint32_t port_ctrl[GPIO_CTRL_REG_NUM];
27*4ddfb6f1SJacky Bai 	/* GPIO ICR, Max 32 */
28*4ddfb6f1SJacky Bai 	uint32_t pin_num;
29*4ddfb6f1SJacky Bai 	uint32_t gpio_icr[GPIO_PIN_MAX_NUM];
30*4ddfb6f1SJacky Bai };
31*4ddfb6f1SJacky Bai 
32*4ddfb6f1SJacky Bai #define WDOG_CTX(addr)		\
33*4ddfb6f1SJacky Bai 	{ .base = (addr), }
34*4ddfb6f1SJacky Bai 
35*4ddfb6f1SJacky Bai struct wdog_ctx {
36*4ddfb6f1SJacky Bai 	/* wdog base */
37*4ddfb6f1SJacky Bai 	uintptr_t base;
38*4ddfb6f1SJacky Bai 	uint32_t regs[2];
39*4ddfb6f1SJacky Bai };
40*4ddfb6f1SJacky Bai 
41*4ddfb6f1SJacky Bai #define PER_HSK_CFG(idx, irq)	\
42*4ddfb6f1SJacky Bai 	{ .per_idx = (idx, wakeup_irq = (irq), }
43*4ddfb6f1SJacky Bai 
44*4ddfb6f1SJacky Bai struct per_hsk_cfg {
45*4ddfb6f1SJacky Bai 	const uint32_t per_idx;
46*4ddfb6f1SJacky Bai 	const uint32_t wakeup_irq;
47*4ddfb6f1SJacky Bai };
48*4ddfb6f1SJacky Bai 
49*4ddfb6f1SJacky Bai extern struct gpio_ctx gpios[GPIO_NUM];
50*4ddfb6f1SJacky Bai extern struct wdog_ctx wdogs[WDOG_NUM];
51*4ddfb6f1SJacky Bai extern struct per_hsk_cfg per_hsk_cfg[PER_NUM];
52*4ddfb6f1SJacky Bai extern uint32_t wakeup_irq_mask[IMR_NUM];
53*4ddfb6f1SJacky Bai extern bool keep_wakeupmix_on;
54*4ddfb6f1SJacky Bai extern bool has_netc_irq;
55*4ddfb6f1SJacky Bai 
56*4ddfb6f1SJacky Bai void imx9_sys_sleep_prepare(uint32_t core_id);
57*4ddfb6f1SJacky Bai void imx9_sys_sleep_unprepare(uint32_t core_id);
58*4ddfb6f1SJacky Bai 
59*4ddfb6f1SJacky Bai #endif /* IMX9_SYS_SLEEP_H */
60