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