xref: /rk3399_ARM-atf/include/lib/cpus/aarch64/dsu_def.h (revision f8901e3851759ed5a740b65f39b9fa53d09cf54f)
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 Karatotev static 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