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