18a677180SJohn Tsichritzis /* 2b62673c6SBoyan Karatotev * Copyright (c) 2018-2025, Arm Limited and Contributors. All rights reserved. 38a677180SJohn Tsichritzis * 48a677180SJohn Tsichritzis * SPDX-License-Identifier: BSD-3-Clause 58a677180SJohn Tsichritzis */ 68a677180SJohn Tsichritzis 78a677180SJohn Tsichritzis #ifndef DSU_DEF_H 88a677180SJohn Tsichritzis #define DSU_DEF_H 98a677180SJohn Tsichritzis 1009d40e0eSAntonio Nino Diaz #include <lib/utils_def.h> 118a677180SJohn Tsichritzis 128a677180SJohn Tsichritzis /******************************************************************** 132c3b76ceSLouis Mayencourt * DSU Cluster Configuration registers definitions 148a677180SJohn Tsichritzis ********************************************************************/ 158a677180SJohn Tsichritzis #define CLUSTERCFR_EL1 S3_0_C15_C3_0 162c3b76ceSLouis Mayencourt 172c3b76ceSLouis Mayencourt #define CLUSTERCFR_ACP_SHIFT U(11) 188a677180SJohn Tsichritzis 198a677180SJohn Tsichritzis /******************************************************************** 202c3b76ceSLouis Mayencourt * DSU Cluster Main Revision ID registers definitions 218a677180SJohn Tsichritzis ********************************************************************/ 222c3b76ceSLouis Mayencourt #define CLUSTERIDR_EL1 S3_0_C15_C3_1 232c3b76ceSLouis Mayencourt 248a677180SJohn Tsichritzis #define CLUSTERIDR_REV_SHIFT U(0) 258a677180SJohn Tsichritzis #define CLUSTERIDR_REV_BITS U(4) 268a677180SJohn Tsichritzis #define CLUSTERIDR_VAR_SHIFT U(4) 278a677180SJohn Tsichritzis #define CLUSTERIDR_VAR_BITS U(4) 288a677180SJohn Tsichritzis 29efc945f1SArvind Ram Prakash #define CLUSTERREVIDR_EL1 S3_0_C15_C3_2 30efc945f1SArvind Ram Prakash 318a677180SJohn Tsichritzis /******************************************************************** 322c3b76ceSLouis Mayencourt * DSU Cluster Auxiliary Control registers definitions 332c3b76ceSLouis Mayencourt ********************************************************************/ 342c3b76ceSLouis Mayencourt #define CLUSTERACTLR_EL1 S3_0_C15_C3_3 35*d52ff2b3SArvind Ram Prakash 36*d52ff2b3SArvind Ram Prakash /* CLUSTERPWRCTLR_EL1 register definitions */ 379fd9f1d0Sshengfei Xu #define CLUSTERPWRCTLR_EL1 S3_0_C15_C3_5 38*d52ff2b3SArvind Ram Prakash #define CLUSTERPWRCTLR_FUNCRET_WIDTH U(3) 39*d52ff2b3SArvind Ram Prakash #define CLUSTERPWRCTLR_FUNCRET_SHIFT U(0) 40*d52ff2b3SArvind Ram Prakash #define CLUSTERPWRCTLR_FUNCRET_RESET U(0) 41*d52ff2b3SArvind Ram Prakash #define CLUSTERPWRCTLR_CACHEPWR_WIDTH U(4) 42*d52ff2b3SArvind Ram Prakash #define CLUSTERPWRCTLR_CACHEPWR_SHIFT U(4) 43*d52ff2b3SArvind Ram Prakash #define CLUSTERPWRCTLR_CACHEPWR_RESET U(7) 442c3b76ceSLouis Mayencourt 45efc945f1SArvind Ram Prakash #define CLUSTERACTLR_EL1_ASSERT_CBUSY (ULL(1) << 8) 460e985d70SLouis Mayencourt #define CLUSTERACTLR_EL1_DISABLE_CLOCK_GATING (ULL(1) << 15) 477e3273e8SBipin Ravi #define CLUSTERACTLR_EL1_DISABLE_SCLK_GATING (ULL(3) << 15) 48efc945f1SArvind Ram Prakash #define CLUSTERACTLR_EL1_IGNORE_INTERCONNECT_CBUSY (ULL(3) << 20) 490e985d70SLouis Mayencourt 50*d52ff2b3SArvind Ram Prakash /* CLUSTERPWRDN_EL1 register definitions */ 51*d52ff2b3SArvind Ram Prakash #define CLUSTERPWRDN_PWRDN_WIDTH U(1) 52*d52ff2b3SArvind Ram Prakash #define CLUSTERPWRDN_PWRDN_SHIFT U(0) 53*d52ff2b3SArvind Ram Prakash #define CLUSTERPWRDN_MEMRET_WIDTH U(1) 54*d52ff2b3SArvind Ram Prakash #define CLUSTERPWRDN_MEMRET_SHIFT U(1) 55*d52ff2b3SArvind Ram Prakash 562c3b76ceSLouis Mayencourt /******************************************************************** 572c3b76ceSLouis Mayencourt * Masks applied for DSU errata workarounds 588a677180SJohn Tsichritzis ********************************************************************/ 591a74e4a8SAntonio Nino Diaz #define DSU_ERRATA_936184_MASK (U(0x3) << 15) 608a677180SJohn Tsichritzis 61b62673c6SBoyan Karatotev #define CPUCFR_EL1 S3_0_C15_C0_0 62b62673c6SBoyan Karatotev /* SCU bit of CPU Configuration Register, EL1 */ 63b62673c6SBoyan Karatotev #define SCU_SHIFT U(2) 64b62673c6SBoyan Karatotev 659fd9f1d0Sshengfei Xu #ifndef __ASSEMBLER__ 66b62673c6SBoyan Karatotev DEFINE_RENAME_SYSREG_RW_FUNCS(clusterpwrctlr_el1, CLUSTERPWRCTLR_EL1); 67b62673c6SBoyan Karatotev 68b62673c6SBoyan Karatotev /* --------------------------------------------- 69b62673c6SBoyan Karatotev * controls power features of the cluster 70b62673c6SBoyan Karatotev * 1. Cache portion power not request 71b62673c6SBoyan Karatotev * 2. Disable the retention circuit 72b62673c6SBoyan Karatotev * --------------------------------------------- 73b62673c6SBoyan Karatotev */ dsu_pwr_dwn(void)74b62673c6SBoyan Karatotevstatic inline void dsu_pwr_dwn(void) 75b62673c6SBoyan Karatotev { 76b62673c6SBoyan Karatotev write_clusterpwrctlr_el1(0); 77b62673c6SBoyan Karatotev isb(); 78b62673c6SBoyan Karatotev } 799fd9f1d0Sshengfei Xu #endif 808a677180SJohn Tsichritzis #endif /* DSU_DEF_H */ 81