1*91f16700Schasinglulu /* 2*91f16700Schasinglulu * Copyright (c) 2022-2023, Intel Corporation. All rights reserved. 3*91f16700Schasinglulu * 4*91f16700Schasinglulu * SPDX-License-Identifier: BSD-3-Clause 5*91f16700Schasinglulu */ 6*91f16700Schasinglulu 7*91f16700Schasinglulu #ifndef POWERMANAGER_H 8*91f16700Schasinglulu #define POWERMANAGER_H 9*91f16700Schasinglulu 10*91f16700Schasinglulu #include "socfpga_handoff.h" 11*91f16700Schasinglulu 12*91f16700Schasinglulu #define AGX5_PWRMGR_BASE 0x10d14000 13*91f16700Schasinglulu 14*91f16700Schasinglulu /* DSU */ 15*91f16700Schasinglulu #define AGX5_PWRMGR_DSU_FWENCTL 0x0 16*91f16700Schasinglulu #define AGX5_PWRMGR_DSU_PGENCTL 0x4 17*91f16700Schasinglulu #define AGX5_PWRMGR_DSU_PGSTAT 0x8 18*91f16700Schasinglulu #define AGX5_PWRMGR_DSU_PWRCTLR 0xc 19*91f16700Schasinglulu #define AGX5_PWRMGR_DSU_PWRSTAT0 0x10 20*91f16700Schasinglulu #define AGX5_PWRMGR_DSU_PWRSTAT1 0x14 21*91f16700Schasinglulu 22*91f16700Schasinglulu /* DSU Macros*/ 23*91f16700Schasinglulu #define AGX5_PWRMGR_DSU_FWEN(x) ((x) & 0xf) 24*91f16700Schasinglulu #define AGX5_PWRMGR_DSU_PGEN(x) ((x) & 0xf) 25*91f16700Schasinglulu #define AGX5_PWRMGR_DSU_PGEN_OUT(x) ((x) & 0xf) 26*91f16700Schasinglulu #define AGX5_PWRMGR_DSU_SINGLE_PACCEPT(x) ((x) & 0x1) 27*91f16700Schasinglulu #define AGX5_PWRMGR_DSU_SINGLE_PDENY(x) (((x) & 0x1) << 1) 28*91f16700Schasinglulu #define AGX5_PWRMGR_DSU_SINGLE_FSM_STATE(x) (((x) & 0xff) << 8) 29*91f16700Schasinglulu #define AGX5_PWRMGR_DSU_SINGLE_PCH_DONE(x) (((x) & 0x1) << 31) 30*91f16700Schasinglulu #define AGX5_PWRMGR_DSU_MULTI_PACTIVE_IN(x) ((x) & 0xff) 31*91f16700Schasinglulu #define AGX5_PWRMGR_DSU_MULTI_PACCEPT(x) (((x) & 0xff) << 8) 32*91f16700Schasinglulu #define AGX5_PWRMGR_DSU_MULTI_PDENY(x) (((x) & 0xff) << 16) 33*91f16700Schasinglulu #define AGX5_PWRMGR_DSU_MULTI_PCH_DONE(x) (((x) & 0x1) << 31) 34*91f16700Schasinglulu 35*91f16700Schasinglulu /* CPU */ 36*91f16700Schasinglulu #define AGX5_PWRMGR_CPU_PWRCTLR0 0x18 37*91f16700Schasinglulu #define AGX5_PWRMGR_CPU_PWRCTLR1 0x20 38*91f16700Schasinglulu #define AGX5_PWRMGR_CPU_PWRCTLR2 0x28 39*91f16700Schasinglulu #define AGX5_PWRMGR_CPU_PWRCTLR3 0x30 40*91f16700Schasinglulu #define AGX5_PWRMGR_CPU_PWRSTAT0 0x1c 41*91f16700Schasinglulu #define AGX5_PWRMGR_CPU_PWRSTAT1 0x24 42*91f16700Schasinglulu #define AGX5_PWRMGR_CPU_PWRSTAT2 0x2c 43*91f16700Schasinglulu #define AGX5_PWRMGR_CPU_PWRSTAT3 0x34 44*91f16700Schasinglulu 45*91f16700Schasinglulu /* APS */ 46*91f16700Schasinglulu #define AGX5_PWRMGR_APS_FWENCTL 0x38 47*91f16700Schasinglulu #define AGX5_PWRMGR_APS_PGENCTL 0x3C 48*91f16700Schasinglulu #define AGX5_PWRMGR_APS_PGSTAT 0x40 49*91f16700Schasinglulu 50*91f16700Schasinglulu /* PSS */ 51*91f16700Schasinglulu #define AGX5_PWRMGR_PSS_FWENCTL 0x44 52*91f16700Schasinglulu #define AGX5_PWRMGR_PSS_PGENCTL 0x48 53*91f16700Schasinglulu #define AGX5_PWRMGR_PSS_PGSTAT 0x4c 54*91f16700Schasinglulu 55*91f16700Schasinglulu /* PSS Macros*/ 56*91f16700Schasinglulu #define AGX5_PWRMGR_PSS_FWEN(x) ((x) & 0xff) 57*91f16700Schasinglulu #define AGX5_PWRMGR_PSS_PGEN(x) ((x) & 0xff) 58*91f16700Schasinglulu #define AGX5_PWRMGR_PSS_PGEN_OUT(x) ((x) & 0xff) 59*91f16700Schasinglulu 60*91f16700Schasinglulu /* MPU */ 61*91f16700Schasinglulu #define AGX5_PWRMGR_MPU_PCHCTLR 0x50 62*91f16700Schasinglulu #define AGX5_PWRMGR_MPU_PCHSTAT 0x54 63*91f16700Schasinglulu #define AGX5_PWRMGR_MPU_BOOTCONFIG 0x58 64*91f16700Schasinglulu #define AGX5_PWRMGR_CPU_POWER_STATE_MASK 0x1E 65*91f16700Schasinglulu 66*91f16700Schasinglulu /* MPU Macros*/ 67*91f16700Schasinglulu #define AGX5_PWRMGR_MPU_TRIGGER_PCH_DSU(x) ((x) & 0x1) 68*91f16700Schasinglulu #define AGX5_PWRMGR_MPU_TRIGGER_PCH_CPU(x) (((x) & 0xf) << 1) 69*91f16700Schasinglulu #define AGX5_PWRMGR_MPU_STATUS_PCH_CPU(x) (((x) & 0xf) << 1) 70*91f16700Schasinglulu 71*91f16700Schasinglulu /* Shared Macros */ 72*91f16700Schasinglulu #define AGX5_PWRMGR(_reg) (AGX5_PWRMGR_BASE + \ 73*91f16700Schasinglulu (AGX5_PWRMGR_##_reg)) 74*91f16700Schasinglulu 75*91f16700Schasinglulu /* POWER MANAGER ERROR CODE */ 76*91f16700Schasinglulu #define AGX5_PWRMGR_HANDOFF_PERIPHERAL -1 77*91f16700Schasinglulu #define AGX5_PWRMGR_PSS_STAT_BUSY_E_BUSY 0x0 78*91f16700Schasinglulu #define AGX5_PWRMGR_PSS_STAT_BUSY(x) (((x) & 0x000000FF) >> 0) 79*91f16700Schasinglulu 80*91f16700Schasinglulu int pss_sram_power_off(handoff *hoff_ptr); 81*91f16700Schasinglulu int wait_verify_fsm(uint16_t timeout, uint32_t peripheral_handoff); 82*91f16700Schasinglulu 83*91f16700Schasinglulu #endif 84