xref: /freebsd/sys/dev/ufshci/ufshci_reg.h (revision 1349a733cf2828e0040cabef89eeadc3ff00c40b)
1*1349a733SJaeyoon Choi /*-
2*1349a733SJaeyoon Choi  * Copyright (c) 2025, Samsung Electronics Co., Ltd.
3*1349a733SJaeyoon Choi  * Written by Jaeyoon Choi
4*1349a733SJaeyoon Choi  *
5*1349a733SJaeyoon Choi  * SPDX-License-Identifier: BSD-2-Clause
6*1349a733SJaeyoon Choi  */
7*1349a733SJaeyoon Choi #ifndef __UFSHCI_REG_H__
8*1349a733SJaeyoon Choi #define __UFSHCI_REG_H__
9*1349a733SJaeyoon Choi 
10*1349a733SJaeyoon Choi #include <sys/param.h>
11*1349a733SJaeyoon Choi #include <sys/endian.h>
12*1349a733SJaeyoon Choi 
13*1349a733SJaeyoon Choi /* UFSHCI 4.1, section 5.1 Register Map */
14*1349a733SJaeyoon Choi struct ufshci_registers {
15*1349a733SJaeyoon Choi 	/* Host Capabilities (00h) */
16*1349a733SJaeyoon Choi 	uint32_t cap;	  /* Host Controller Capabiities */
17*1349a733SJaeyoon Choi 	uint32_t mcqcap;  /* Multi-Circular Queue Capability Register */
18*1349a733SJaeyoon Choi 	uint32_t ver;	  /* UFS Version */
19*1349a733SJaeyoon Choi 	uint32_t ext_cap; /* Extended Controller Capabilities */
20*1349a733SJaeyoon Choi 	uint32_t hcpid;	  /* Product ID */
21*1349a733SJaeyoon Choi 	uint32_t hcmid;	  /* Manufacturer ID */
22*1349a733SJaeyoon Choi 	uint32_t ahit;	  /* Auto-Hibernate Idle Timer */
23*1349a733SJaeyoon Choi 	uint32_t reserved1;
24*1349a733SJaeyoon Choi 	/* Operation and Runtime (20h) */
25*1349a733SJaeyoon Choi 	uint32_t is; /* Interrupt Status */
26*1349a733SJaeyoon Choi 	uint32_t ie; /* Interrupt Enable */
27*1349a733SJaeyoon Choi 	uint32_t reserved2;
28*1349a733SJaeyoon Choi 	uint32_t hcsext;  /* Host Controller Status Extended */
29*1349a733SJaeyoon Choi 	uint32_t hcs;	  /* Host Controller Status */
30*1349a733SJaeyoon Choi 	uint32_t hce;	  /* Host Controller Enable */
31*1349a733SJaeyoon Choi 	uint32_t uecpa;	  /* Host UIC Error Code PHY Adapter Layer */
32*1349a733SJaeyoon Choi 	uint32_t uecdl;	  /* Host UIC Error Code Data Link Layer */
33*1349a733SJaeyoon Choi 	uint32_t uecn;	  /* Host UIC Error Code Network Layer */
34*1349a733SJaeyoon Choi 	uint32_t uect;	  /* Host UIC Error Code Transport Layer */
35*1349a733SJaeyoon Choi 	uint32_t uecdme;  /* Host UIC Error Code DME */
36*1349a733SJaeyoon Choi 	uint32_t utriacr; /* Interrupt Aggregation Control */
37*1349a733SJaeyoon Choi 	/* UTP Transfer (50h) */
38*1349a733SJaeyoon Choi 	uint32_t utrlba;  /* UTRL Base Address */
39*1349a733SJaeyoon Choi 	uint32_t utrlbau; /* UTRL Base Address Upper 32-Bits */
40*1349a733SJaeyoon Choi 	uint32_t utrldbr; /* UTRL DoorBell Register */
41*1349a733SJaeyoon Choi 	uint32_t utrlclr; /* UTRL CLear Register */
42*1349a733SJaeyoon Choi 	uint32_t utrlrsr; /* UTR Run-Stop Register */
43*1349a733SJaeyoon Choi 	uint32_t utrlcnr; /* UTRL Completion Notification */
44*1349a733SJaeyoon Choi 	uint64_t reserved3;
45*1349a733SJaeyoon Choi 	/* UTP Task Managemeng (70h) */
46*1349a733SJaeyoon Choi 	uint32_t utmrlba;  /* UTRL Base Address */
47*1349a733SJaeyoon Choi 	uint32_t utmrlbau; /* UTMRL Base Address Upper 32-Bits */
48*1349a733SJaeyoon Choi 	uint32_t utmrldbr; /* UTMRL DoorBell Register */
49*1349a733SJaeyoon Choi 	uint32_t utmrlclr; /* UTMRL CLear Register */
50*1349a733SJaeyoon Choi 	uint32_t utmrlrsr; /* UTM Run-Stop Register */
51*1349a733SJaeyoon Choi 	uint8_t reserved4[12];
52*1349a733SJaeyoon Choi 	/* UIC Command (90h) */
53*1349a733SJaeyoon Choi 	uint32_t uiccmd;   /* UIC Command Register */
54*1349a733SJaeyoon Choi 	uint32_t ucmdarg1; /* UIC Command Argument 1 */
55*1349a733SJaeyoon Choi 	uint32_t ucmdarg2; /* UIC Command Argument 2 */
56*1349a733SJaeyoon Choi 	uint32_t ucmdarg3; /* UIC Command Argument 3 */
57*1349a733SJaeyoon Choi 	uint8_t reserved5[16];
58*1349a733SJaeyoon Choi 	/* UMA (B0h) */
59*1349a733SJaeyoon Choi 	uint8_t reserved6[16]; /* Reserved for Unified Memory Extension */
60*1349a733SJaeyoon Choi 	/* Vendor Specific (C0h) */
61*1349a733SJaeyoon Choi 	uint8_t vendor[64]; /* Vendor Specific Registers */
62*1349a733SJaeyoon Choi 	/* Crypto (100h) */
63*1349a733SJaeyoon Choi 	uint32_t ccap; /* Crypto Capability */
64*1349a733SJaeyoon Choi 	uint32_t reserved7[511];
65*1349a733SJaeyoon Choi 	/* Config (300h) */
66*1349a733SJaeyoon Choi 	uint32_t config; /* Global Configuration */
67*1349a733SJaeyoon Choi 	uint8_t reserved9[124];
68*1349a733SJaeyoon Choi 	/* MCQ Configuration (380h) */
69*1349a733SJaeyoon Choi 	uint32_t mcqconfig; /* MCQ Config Register */
70*1349a733SJaeyoon Choi 	/* Event Specific Interrupt Lower Base Address */
71*1349a733SJaeyoon Choi 	uint32_t esilba;
72*1349a733SJaeyoon Choi 	/* Event Specific Interrupt Upper Base Address */
73*1349a733SJaeyoon Choi 	uint32_t esiuba;
74*1349a733SJaeyoon Choi 	/* TODO: Need to define SQ/CQ registers */
75*1349a733SJaeyoon Choi };
76*1349a733SJaeyoon Choi 
77*1349a733SJaeyoon Choi /* Register field definitions */
78*1349a733SJaeyoon Choi #define UFSHCI__REG__SHIFT (0)
79*1349a733SJaeyoon Choi #define UFSHCI__REG__MASK  (0)
80*1349a733SJaeyoon Choi 
81*1349a733SJaeyoon Choi /*
82*1349a733SJaeyoon Choi  * UFSHCI 4.1, section 5.2.1, Offset 00h: CAP
83*1349a733SJaeyoon Choi  * Controller Capabilities
84*1349a733SJaeyoon Choi  */
85*1349a733SJaeyoon Choi #define UFSHCI_CAP_REG_NUTRS_SHIFT     (0)
86*1349a733SJaeyoon Choi #define UFSHCI_CAP_REG_NUTRS_MASK      (0xFF)
87*1349a733SJaeyoon Choi #define UFSHCI_CAP_REG_NORTT_SHIFT     (8)
88*1349a733SJaeyoon Choi #define UFSHCI_CAP_REG_NORTT_MASK      (0xFF)
89*1349a733SJaeyoon Choi #define UFSHCI_CAP_REG_NUTMRS_SHIFT    (16)
90*1349a733SJaeyoon Choi #define UFSHCI_CAP_REG_NUTMRS_MASK     (0x7)
91*1349a733SJaeyoon Choi #define UFSHCI_CAP_REG_EHSLUTRDS_SHIFT (22)
92*1349a733SJaeyoon Choi #define UFSHCI_CAP_REG_EHSLUTRDS_MASK  (0x1)
93*1349a733SJaeyoon Choi #define UFSHCI_CAP_REG_AUTOH8_SHIFT    (23)
94*1349a733SJaeyoon Choi #define UFSHCI_CAP_REG_AUTOH8_MASK     (0x1)
95*1349a733SJaeyoon Choi #define UFSHCI_CAP_REG_64AS_SHIFT      (24)
96*1349a733SJaeyoon Choi #define UFSHCI_CAP_REG_64AS_MASK       (0x1)
97*1349a733SJaeyoon Choi #define UFSHCI_CAP_REG_OODDS_SHIFT     (25)
98*1349a733SJaeyoon Choi #define UFSHCI_CAP_REG_OODDS_MASK      (0x1)
99*1349a733SJaeyoon Choi #define UFSHCI_CAP_REG_UICDMETMS_SHIFT (26)
100*1349a733SJaeyoon Choi #define UFSHCI_CAP_REG_UICDMETMS_MASK  (0x1)
101*1349a733SJaeyoon Choi #define UFSHCI_CAP_REG_CS_SHIFT	       (28)
102*1349a733SJaeyoon Choi #define UFSHCI_CAP_REG_CS_MASK	       (0x1)
103*1349a733SJaeyoon Choi #define UFSHCI_CAP_REG_LSDBS_SHIFT     (29)
104*1349a733SJaeyoon Choi #define UFSHCI_CAP_REG_LSDBS_MASK      (0x1)
105*1349a733SJaeyoon Choi #define UFSHCI_CAP_REG_MCQS_SHIFT      (30)
106*1349a733SJaeyoon Choi #define UFSHCI_CAP_REG_MCQS_MASK       (0x1)
107*1349a733SJaeyoon Choi #define UFSHCI_CAP_REG_EIS_SHIFT       (31)
108*1349a733SJaeyoon Choi #define UFSHCI_CAP_REG_EIS_MASK	       (0x1)
109*1349a733SJaeyoon Choi 
110*1349a733SJaeyoon Choi /*
111*1349a733SJaeyoon Choi  * UFSHCI 4.1, section 5.2.2, Offset 04h: MCQCAP
112*1349a733SJaeyoon Choi  * Multi-Circular Queue Capability Register
113*1349a733SJaeyoon Choi  */
114*1349a733SJaeyoon Choi #define UFSHCI_MCQCAP_REG_MAXQ_SHIFT	(0)
115*1349a733SJaeyoon Choi #define UFSHCI_MCQCAP_REG_MAXQ_MASK	(0xFF)
116*1349a733SJaeyoon Choi #define UFSHCI_MCQCAP_REG_SP_SHIFT	(8)
117*1349a733SJaeyoon Choi #define UFSHCI_MCQCAP_REG_SP_MASK	(0x1)
118*1349a733SJaeyoon Choi #define UFSHCI_MCQCAP_REG_RRP_SHIFT	(9)
119*1349a733SJaeyoon Choi #define UFSHCI_MCQCAP_REG_RRP_MASK	(0x1)
120*1349a733SJaeyoon Choi #define UFSHCI_MCQCAP_REG_EIS_SHIFT	(10)
121*1349a733SJaeyoon Choi #define UFSHCI_MCQCAP_REG_EIS_MASK	(0x1)
122*1349a733SJaeyoon Choi #define UFSHCI_MCQCAP_REG_QCFGPTR_SHIFT (16)
123*1349a733SJaeyoon Choi #define UFSHCI_MCQCAP_REG_QCFGPTR_MASK	(0xFF)
124*1349a733SJaeyoon Choi #define UFSHCI_MCQCAP_REG_MIAG_SHIFT	(24)
125*1349a733SJaeyoon Choi #define UFSHCI_MCQCAP_REG_MIAG_MASK	(0xFF)
126*1349a733SJaeyoon Choi 
127*1349a733SJaeyoon Choi /*
128*1349a733SJaeyoon Choi  * UFSHCI 4.1, section 5.2.3, Offset 08h: VER
129*1349a733SJaeyoon Choi  * UFS Version
130*1349a733SJaeyoon Choi  */
131*1349a733SJaeyoon Choi #define UFSHCI_VER_REG_VS_SHIFT	 (0)
132*1349a733SJaeyoon Choi #define UFSHCI_VER_REG_VS_MASK	 (0xF)
133*1349a733SJaeyoon Choi #define UFSHCI_VER_REG_MNR_SHIFT (4)
134*1349a733SJaeyoon Choi #define UFSHCI_VER_REG_MNR_MASK	 (0xF)
135*1349a733SJaeyoon Choi #define UFSHCI_VER_REG_MJR_SHIFT (8)
136*1349a733SJaeyoon Choi #define UFSHCI_VER_REG_MJR_MASK	 (0xFF)
137*1349a733SJaeyoon Choi 
138*1349a733SJaeyoon Choi /*
139*1349a733SJaeyoon Choi  * UFSHCI 4.1, section 5.2.4, Offset 0Ch: EXT_CAP
140*1349a733SJaeyoon Choi  * Extended Controller Capabilities
141*1349a733SJaeyoon Choi  */
142*1349a733SJaeyoon Choi #define UFSHCI_EXTCAP_REG_HOST_HINT_CACAHE_SIZE_SHIFT (0)
143*1349a733SJaeyoon Choi #define UFSHCI_EXTCAP_REG_HOST_HINT_CACAHE_SIZE_MASK  (0xFFFF)
144*1349a733SJaeyoon Choi 
145*1349a733SJaeyoon Choi /*
146*1349a733SJaeyoon Choi  * UFSHCI 4.1, section 5.2.5, Offset 10h: HCPID
147*1349a733SJaeyoon Choi  * Host Controller Identification Descriptor – Product ID
148*1349a733SJaeyoon Choi  */
149*1349a733SJaeyoon Choi #define UFSHCI_HCPID_REG_PID_SHIFT (0)
150*1349a733SJaeyoon Choi #define UFSHCI_HCPID_REG_PID_MASK  (0xFFFFFFFF)
151*1349a733SJaeyoon Choi 
152*1349a733SJaeyoon Choi /*
153*1349a733SJaeyoon Choi  * UFSHCI 4.1, section 5.2.6, Offset 14h: HCMID
154*1349a733SJaeyoon Choi  * Host Controller Identification Descriptor – Manufacturer ID
155*1349a733SJaeyoon Choi  */
156*1349a733SJaeyoon Choi #define UFSHCI_HCMID_REG_MIC_SHIFT (0)
157*1349a733SJaeyoon Choi #define UFSHCI_HCMID_REG_MIC_MASK  (0xFFFF)
158*1349a733SJaeyoon Choi #define UFSHCI_HCMID_REG_BI_SHIFT  (8)
159*1349a733SJaeyoon Choi #define UFSHCI_HCMID_REG_BI_MASK   (0xFFFF)
160*1349a733SJaeyoon Choi 
161*1349a733SJaeyoon Choi /*
162*1349a733SJaeyoon Choi  * UFSHCI 4.1, section 5.2.7, Offset 18h: AHIT
163*1349a733SJaeyoon Choi  * Auto-Hibernate Idle Timer
164*1349a733SJaeyoon Choi  */
165*1349a733SJaeyoon Choi #define UFSHCI_AHIT_REG_AH8ITV_SHIFT (0)
166*1349a733SJaeyoon Choi #define UFSHCI_AHIT_REG_AH8ITV_MASK  (0x3FF)
167*1349a733SJaeyoon Choi #define UFSHCI_AHIT_REG_TS_SHIFT     (10)
168*1349a733SJaeyoon Choi #define UFSHCI_AHIT_REG_TS_MASK	     (0x7)
169*1349a733SJaeyoon Choi 
170*1349a733SJaeyoon Choi /*
171*1349a733SJaeyoon Choi  * UFSHCI 4.1, section 5.3.1, Offset 20h: IS
172*1349a733SJaeyoon Choi  * Interrupt Status
173*1349a733SJaeyoon Choi  */
174*1349a733SJaeyoon Choi #define UFSHCI_IS_REG_UTRCS_SHIFT  (0)
175*1349a733SJaeyoon Choi #define UFSHCI_IS_REG_UTRCS_MASK   (0x1)
176*1349a733SJaeyoon Choi #define UFSHCI_IS_REG_UDEPRI_SHIFT (1)
177*1349a733SJaeyoon Choi #define UFSHCI_IS_REG_UDEPRI_MASK  (0x1)
178*1349a733SJaeyoon Choi #define UFSHCI_IS_REG_UE_SHIFT	   (2)
179*1349a733SJaeyoon Choi #define UFSHCI_IS_REG_UE_MASK	   (0x1)
180*1349a733SJaeyoon Choi #define UFSHCI_IS_REG_UTMS_SHIFT   (3)
181*1349a733SJaeyoon Choi #define UFSHCI_IS_REG_UTMS_MASK	   (0x1)
182*1349a733SJaeyoon Choi #define UFSHCI_IS_REG_UPMS_SHIFT   (4)
183*1349a733SJaeyoon Choi #define UFSHCI_IS_REG_UPMS_MASK	   (0x1)
184*1349a733SJaeyoon Choi #define UFSHCI_IS_REG_UHXS_SHIFT   (5)
185*1349a733SJaeyoon Choi #define UFSHCI_IS_REG_UHXS_MASK	   (0x1)
186*1349a733SJaeyoon Choi #define UFSHCI_IS_REG_UHES_SHIFT   (6)
187*1349a733SJaeyoon Choi #define UFSHCI_IS_REG_UHES_MASK	   (0x1)
188*1349a733SJaeyoon Choi #define UFSHCI_IS_REG_ULLS_SHIFT   (7)
189*1349a733SJaeyoon Choi #define UFSHCI_IS_REG_ULLS_MASK	   (0x1)
190*1349a733SJaeyoon Choi #define UFSHCI_IS_REG_ULSS_SHIFT   (8)
191*1349a733SJaeyoon Choi #define UFSHCI_IS_REG_ULSS_MASK	   (0x1)
192*1349a733SJaeyoon Choi #define UFSHCI_IS_REG_UTMRCS_SHIFT (9)
193*1349a733SJaeyoon Choi #define UFSHCI_IS_REG_UTMRCS_MASK  (0x1)
194*1349a733SJaeyoon Choi #define UFSHCI_IS_REG_UCCS_SHIFT   (10)
195*1349a733SJaeyoon Choi #define UFSHCI_IS_REG_UCCS_MASK	   (0x1)
196*1349a733SJaeyoon Choi #define UFSHCI_IS_REG_DFES_SHIFT   (11)
197*1349a733SJaeyoon Choi #define UFSHCI_IS_REG_DFES_MASK	   (0x1)
198*1349a733SJaeyoon Choi #define UFSHCI_IS_REG_UTPES_SHIFT  (12)
199*1349a733SJaeyoon Choi #define UFSHCI_IS_REG_UTPES_MASK   (0x1)
200*1349a733SJaeyoon Choi #define UFSHCI_IS_REG_HCFES_SHIFT  (16)
201*1349a733SJaeyoon Choi #define UFSHCI_IS_REG_HCFES_MASK   (0x1)
202*1349a733SJaeyoon Choi #define UFSHCI_IS_REG_SBFES_SHIFT  (17)
203*1349a733SJaeyoon Choi #define UFSHCI_IS_REG_SBFES_MASK   (0x1)
204*1349a733SJaeyoon Choi #define UFSHCI_IS_REG_CEFES_SHIFT  (18)
205*1349a733SJaeyoon Choi #define UFSHCI_IS_REG_CEFES_MASK   (0x1)
206*1349a733SJaeyoon Choi #define UFSHCI_IS_REG_SQES_SHIFT   (19)
207*1349a733SJaeyoon Choi #define UFSHCI_IS_REG_SQES_MASK	   (0x1)
208*1349a733SJaeyoon Choi #define UFSHCI_IS_REG_CQES_SHIFT   (20)
209*1349a733SJaeyoon Choi #define UFSHCI_IS_REG_CQES_MASK	   (0x1)
210*1349a733SJaeyoon Choi #define UFSHCI_IS_REG_IAGES_SHIFT  (21)
211*1349a733SJaeyoon Choi #define UFSHCI_IS_REG_IAGES_MASK   (0x1)
212*1349a733SJaeyoon Choi 
213*1349a733SJaeyoon Choi /*
214*1349a733SJaeyoon Choi  * UFSHCI 4.1, section 5.3.2, Offset 24h: IE
215*1349a733SJaeyoon Choi  * Interrupt Enable
216*1349a733SJaeyoon Choi  */
217*1349a733SJaeyoon Choi #define UFSHCI_IE_REG_UTRCE_SHIFT   (0)
218*1349a733SJaeyoon Choi #define UFSHCI_IE_REG_UTRCE_MASK    (0x1)
219*1349a733SJaeyoon Choi #define UFSHCI_IE_REG_UDEPRIE_SHIFT (1)
220*1349a733SJaeyoon Choi #define UFSHCI_IE_REG_UDEPRIE_MASK  (0x1)
221*1349a733SJaeyoon Choi #define UFSHCI_IE_REG_UEE_SHIFT	    (2)
222*1349a733SJaeyoon Choi #define UFSHCI_IE_REG_UEE_MASK	    (0x1)
223*1349a733SJaeyoon Choi #define UFSHCI_IE_REG_UTMSE_SHIFT   (3)
224*1349a733SJaeyoon Choi #define UFSHCI_IE_REG_UTMSE_MASK    (0x1)
225*1349a733SJaeyoon Choi #define UFSHCI_IE_REG_UPMSE_SHIFT   (4)
226*1349a733SJaeyoon Choi #define UFSHCI_IE_REG_UPMSE_MASK    (0x1)
227*1349a733SJaeyoon Choi #define UFSHCI_IE_REG_UHXSE_SHIFT   (5)
228*1349a733SJaeyoon Choi #define UFSHCI_IE_REG_UHXSE_MASK    (0x1)
229*1349a733SJaeyoon Choi #define UFSHCI_IE_REG_UHESE_SHIFT   (6)
230*1349a733SJaeyoon Choi #define UFSHCI_IE_REG_UHESE_MASK    (0x1)
231*1349a733SJaeyoon Choi #define UFSHCI_IE_REG_ULLSE_SHIFT   (7)
232*1349a733SJaeyoon Choi #define UFSHCI_IE_REG_ULLSE_MASK    (0x1)
233*1349a733SJaeyoon Choi #define UFSHCI_IE_REG_ULSSE_SHIFT   (8)
234*1349a733SJaeyoon Choi #define UFSHCI_IE_REG_ULSSE_MASK    (0x1)
235*1349a733SJaeyoon Choi #define UFSHCI_IE_REG_UTMRCE_SHIFT  (9)
236*1349a733SJaeyoon Choi #define UFSHCI_IE_REG_UTMRCE_MASK   (0x1)
237*1349a733SJaeyoon Choi #define UFSHCI_IE_REG_UCCE_SHIFT    (10)
238*1349a733SJaeyoon Choi #define UFSHCI_IE_REG_UCCE_MASK	    (0x1)
239*1349a733SJaeyoon Choi #define UFSHCI_IE_REG_DFEE_SHIFT    (11)
240*1349a733SJaeyoon Choi #define UFSHCI_IE_REG_DFEE_MASK	    (0x1)
241*1349a733SJaeyoon Choi #define UFSHCI_IE_REG_UTPEE_SHIFT   (12)
242*1349a733SJaeyoon Choi #define UFSHCI_IE_REG_UTPEE_MASK    (0x1)
243*1349a733SJaeyoon Choi #define UFSHCI_IE_REG_HCFEE_SHIFT   (16)
244*1349a733SJaeyoon Choi #define UFSHCI_IE_REG_HCFEE_MASK    (0x1)
245*1349a733SJaeyoon Choi #define UFSHCI_IE_REG_SBFEE_SHIFT   (17)
246*1349a733SJaeyoon Choi #define UFSHCI_IE_REG_SBFEE_MASK    (0x1)
247*1349a733SJaeyoon Choi #define UFSHCI_IE_REG_CEFEE_SHIFT   (18)
248*1349a733SJaeyoon Choi #define UFSHCI_IE_REG_CEFEE_MASK    (0x1)
249*1349a733SJaeyoon Choi #define UFSHCI_IE_REG_SQEE_SHIFT    (19)
250*1349a733SJaeyoon Choi #define UFSHCI_IE_REG_SQEE_MASK	    (0x1)
251*1349a733SJaeyoon Choi #define UFSHCI_IE_REG_CQEE_SHIFT    (20)
252*1349a733SJaeyoon Choi #define UFSHCI_IE_REG_CQEE_MASK	    (0x1)
253*1349a733SJaeyoon Choi #define UFSHCI_IE_REG_IAGEE_SHIFT   (21)
254*1349a733SJaeyoon Choi #define UFSHCI_IE_REG_IAGEE_MASK    (0x1)
255*1349a733SJaeyoon Choi 
256*1349a733SJaeyoon Choi /*
257*1349a733SJaeyoon Choi  * UFSHCI 4.1, section 5.3.3, Offset 2Ch: HCSEXT
258*1349a733SJaeyoon Choi  * Host Controller Status Extended
259*1349a733SJaeyoon Choi  */
260*1349a733SJaeyoon Choi #define UFSHCI_HCSEXT_IIDUTPE_SHIFT	(0)
261*1349a733SJaeyoon Choi #define UFSHCI_HCSEXT_IIDUTPE_MASK	(0xF)
262*1349a733SJaeyoon Choi #define UFSHCI_HCSEXT_EXT_IIDUTPE_SHIFT (4)
263*1349a733SJaeyoon Choi #define UFSHCI_HCSEXT_EXT_IIDUTPE_MASK	(0xF)
264*1349a733SJaeyoon Choi 
265*1349a733SJaeyoon Choi /*
266*1349a733SJaeyoon Choi  * UFSHCI 4.1, section 5.3.4, Offset 30h: HCS
267*1349a733SJaeyoon Choi  * Host Controller Status
268*1349a733SJaeyoon Choi  */
269*1349a733SJaeyoon Choi #define UFSHCI_HCS_REG_DP_SHIFT	      (0)
270*1349a733SJaeyoon Choi #define UFSHCI_HCS_REG_DP_MASK	      (0x1)
271*1349a733SJaeyoon Choi #define UFSHCI_HCS_REG_UTRLRDY_SHIFT  (1)
272*1349a733SJaeyoon Choi #define UFSHCI_HCS_REG_UTRLRDY_MASK   (0x1)
273*1349a733SJaeyoon Choi #define UFSHCI_HCS_REG_UTMRLRDY_SHIFT (2)
274*1349a733SJaeyoon Choi #define UFSHCI_HCS_REG_UTMRLRDY_MASK  (0x1)
275*1349a733SJaeyoon Choi #define UFSHCI_HCS_REG_UCRDY_SHIFT    (3)
276*1349a733SJaeyoon Choi #define UFSHCI_HCS_REG_UCRDY_MASK     (0x1)
277*1349a733SJaeyoon Choi #define UFSHCI_HCS_REG_UPMCRS_SHIFT   (7)
278*1349a733SJaeyoon Choi #define UFSHCI_HCS_REG_UPMCRS_MASK    (0x7)
279*1349a733SJaeyoon Choi #define UFSHCI_HCS_REG_UTPEC_SHIFT    (12)
280*1349a733SJaeyoon Choi #define UFSHCI_HCS_REG_UTPEC_MASK     (0xF)
281*1349a733SJaeyoon Choi #define UFSHCI_HCS_REG_TTAGUTPE_SHIFT (16)
282*1349a733SJaeyoon Choi #define UFSHCI_HCS_REG_TTAGUTPE_MASK  (0xFF)
283*1349a733SJaeyoon Choi #define UFSHCI_HCS_REG_TLUNUTPE_SHIFT (24)
284*1349a733SJaeyoon Choi #define UFSHCI_HCS_REG_TLUNUTPE_MASK  (0xFF)
285*1349a733SJaeyoon Choi 
286*1349a733SJaeyoon Choi /*
287*1349a733SJaeyoon Choi  * UFSHCI 4.1, section 5.3.5, Offset 34h: HCE
288*1349a733SJaeyoon Choi  * Host Controller Enable
289*1349a733SJaeyoon Choi  */
290*1349a733SJaeyoon Choi #define UFSHCI_HCE_REG_HCE_SHIFT (0)
291*1349a733SJaeyoon Choi #define UFSHCI_HCE_REG_HCE_MASK	 (0x1)
292*1349a733SJaeyoon Choi #define UFSHCI_HCE_REG_CGE_SHIFT (1)
293*1349a733SJaeyoon Choi #define UFSHCI_HCE_REG_CGE_MASK	 (0x1)
294*1349a733SJaeyoon Choi 
295*1349a733SJaeyoon Choi /*
296*1349a733SJaeyoon Choi  * UFSHCI 4.1, section 5.3.6, Offset 38h: UECPA
297*1349a733SJaeyoon Choi  * Host UIC Error Code PHY Adapter Layer
298*1349a733SJaeyoon Choi  */
299*1349a733SJaeyoon Choi #define UFSHCI_UECPA_REG_EC_SHIFT  (0)
300*1349a733SJaeyoon Choi #define UFSHCI_UECPA_REG_EC_MASK   (0xF)
301*1349a733SJaeyoon Choi #define UFSHCI_UECPA_REG_ERR_SHIFT (31)
302*1349a733SJaeyoon Choi #define UFSHCI_UECPA_REG_ERR_MASK  (0x1)
303*1349a733SJaeyoon Choi 
304*1349a733SJaeyoon Choi /*
305*1349a733SJaeyoon Choi  * UFSHCI 4.1, section 5.3.7, Offset 3Ch: UECDL
306*1349a733SJaeyoon Choi  * Host UIC Error Code Data Link Layer
307*1349a733SJaeyoon Choi  */
308*1349a733SJaeyoon Choi #define UFSHCI_UECDL_REG_EC_SHIFT  (0)
309*1349a733SJaeyoon Choi #define UFSHCI_UECDL_REG_EC_MASK   (0xFFFF)
310*1349a733SJaeyoon Choi #define UFSHCI_UECDL_REG_ERR_SHIFT (31)
311*1349a733SJaeyoon Choi #define UFSHCI_UECDL_REG_ERR_MASK  (0x1)
312*1349a733SJaeyoon Choi 
313*1349a733SJaeyoon Choi /*
314*1349a733SJaeyoon Choi  * UFSHCI 4.1, section 5.3.8, Offset 40h: UECN
315*1349a733SJaeyoon Choi  * Host UIC Error Code Network Layer
316*1349a733SJaeyoon Choi  */
317*1349a733SJaeyoon Choi #define UFSHCI_UECN_REG_EC_SHIFT  (0)
318*1349a733SJaeyoon Choi #define UFSHCI_UECN_REG_EC_MASK	  (0x7)
319*1349a733SJaeyoon Choi #define UFSHCI_UECN_REG_ERR_SHIFT (31)
320*1349a733SJaeyoon Choi #define UFSHCI_UECN_REG_ERR_MASK  (0x1)
321*1349a733SJaeyoon Choi 
322*1349a733SJaeyoon Choi /*
323*1349a733SJaeyoon Choi  * UFSHCI 4.1, section 5.3.9, Offset 44h: UECT
324*1349a733SJaeyoon Choi  * Host UIC Error Code Transport Layer
325*1349a733SJaeyoon Choi  */
326*1349a733SJaeyoon Choi #define UFSHCI_UECT_REG_EC_SHIFT  (0)
327*1349a733SJaeyoon Choi #define UFSHCI_UECT_REG_EC_MASK	  (0x7F)
328*1349a733SJaeyoon Choi #define UFSHCI_UECT_REG_ERR_SHIFT (31)
329*1349a733SJaeyoon Choi #define UFSHCI_UECT_REG_ERR_MASK  (0x1)
330*1349a733SJaeyoon Choi 
331*1349a733SJaeyoon Choi /*
332*1349a733SJaeyoon Choi  * UFSHCI 4.1, section 5.3.10, Offset 48h: UECDME
333*1349a733SJaeyoon Choi  * Host UIC Error Code
334*1349a733SJaeyoon Choi  */
335*1349a733SJaeyoon Choi #define UFSHCI_UECDME_REG_EC_SHIFT  (0)
336*1349a733SJaeyoon Choi #define UFSHCI_UECDME_REG_EC_MASK   (0xF)
337*1349a733SJaeyoon Choi #define UFSHCI_UECDME_REG_ERR_SHIFT (31)
338*1349a733SJaeyoon Choi #define UFSHCI_UECDME_REG_ERR_MASK  (0x1)
339*1349a733SJaeyoon Choi 
340*1349a733SJaeyoon Choi /*
341*1349a733SJaeyoon Choi  * UFSHCI 4.1, section 5.4.1, Offset 50h: UTRLBA
342*1349a733SJaeyoon Choi  * UTP Transfer Request List Base Address
343*1349a733SJaeyoon Choi  */
344*1349a733SJaeyoon Choi #define UFSHCI_UTRLBA_REG_UTRLBA_SHIFT (0)
345*1349a733SJaeyoon Choi #define UFSHCI_UTRLBA_REG_UTRLBA_MASK  (0xFFFFFFFF)
346*1349a733SJaeyoon Choi 
347*1349a733SJaeyoon Choi /*
348*1349a733SJaeyoon Choi  * UFSHCI 4.1, section 5.4.2, Offset 54h: UTRLBAU
349*1349a733SJaeyoon Choi  * UTP Transfer Request List Base Address Upper 32-bits
350*1349a733SJaeyoon Choi  */
351*1349a733SJaeyoon Choi #define UFSHCI_UTRLBAU_REG_UTRLBAU_SHIFT (0)
352*1349a733SJaeyoon Choi #define UFSHCI_UTRLBAU_REG_UTRLBAU_MASK	 (0xFFFFFFFF)
353*1349a733SJaeyoon Choi 
354*1349a733SJaeyoon Choi /*
355*1349a733SJaeyoon Choi  * UFSHCI 4.1, section 5.4.3, Offset 58h: UTRLDBR
356*1349a733SJaeyoon Choi  * UTP Transfer Request List Door Bell Register
357*1349a733SJaeyoon Choi  */
358*1349a733SJaeyoon Choi #define UFSHCI_UTRLDBR_REG_UTRLDBR_SHIFT (0)
359*1349a733SJaeyoon Choi #define UFSHCI_UTRLDBR_REG_UTRLDBR_MASK	 (0xFFFFFFFF)
360*1349a733SJaeyoon Choi 
361*1349a733SJaeyoon Choi /*
362*1349a733SJaeyoon Choi  * UFSHCI 4.1, section 5.4.4, Offset 5Ch: UTRLCLR
363*1349a733SJaeyoon Choi  * UTP Transfer Request List Clear Register
364*1349a733SJaeyoon Choi  */
365*1349a733SJaeyoon Choi #define UFSHCI_UTRLCLR_REG_UTRLCLR_SHIFT (0)
366*1349a733SJaeyoon Choi #define UFSHCI_UTRLCLR_REG_UTRLCLR_MASK	 (0xFFFFFFFF)
367*1349a733SJaeyoon Choi 
368*1349a733SJaeyoon Choi /*
369*1349a733SJaeyoon Choi  * UFSHCI 4.1, section 5.4.5, Offset 60h: UTRLRSR
370*1349a733SJaeyoon Choi  * UTP Transfer Request List Run Stop Register
371*1349a733SJaeyoon Choi  */
372*1349a733SJaeyoon Choi #define UFSHCI_UTRLRSR_REG_UTRLRSR_SHIFT (0)
373*1349a733SJaeyoon Choi #define UFSHCI_UTRLRSR_REG_UTRLRSR_MASK	 (0x1)
374*1349a733SJaeyoon Choi 
375*1349a733SJaeyoon Choi /*
376*1349a733SJaeyoon Choi  * UFSHCI 4.1, section 5.4.6, Offset 64h: UTRLCNR
377*1349a733SJaeyoon Choi  * UTP Transfer Request List Completion Notification Register
378*1349a733SJaeyoon Choi  */
379*1349a733SJaeyoon Choi #define UFSHCI_UTRLCNR_REG_UTRLCNR_SHIFT (0)
380*1349a733SJaeyoon Choi #define UFSHCI_UTRLCNR_REG_UTRLCNR_MASK	 (0xFFFFFFFF)
381*1349a733SJaeyoon Choi 
382*1349a733SJaeyoon Choi /*
383*1349a733SJaeyoon Choi  * UFSHCI 4.1, section 5.5.1, Offset 70h: UTMRLBA
384*1349a733SJaeyoon Choi  * UTP Task Management Request List Base Address
385*1349a733SJaeyoon Choi  */
386*1349a733SJaeyoon Choi #define UFSHCI_UTMRLBA_REG_UTMRLBA_SHIFT (0)
387*1349a733SJaeyoon Choi #define UFSHCI_UTMRLBA_REG_UTMRLBA_MASK	 (0xFFFFFFFF)
388*1349a733SJaeyoon Choi 
389*1349a733SJaeyoon Choi /*
390*1349a733SJaeyoon Choi  * UFSHCI 4.1, section 5.5.2, Offset 74h: UTMRLBAU
391*1349a733SJaeyoon Choi  * UTP Task Management Request List Base Address Upper 32-bits
392*1349a733SJaeyoon Choi  */
393*1349a733SJaeyoon Choi #define UFSHCI_UTMRLBAU_REG_UTMRLBAU_SHIFT (0)
394*1349a733SJaeyoon Choi #define UFSHCI_UTMRLBAU_REG_UTMRLBAU_MASK  (0xFFFFFFFF)
395*1349a733SJaeyoon Choi 
396*1349a733SJaeyoon Choi /*
397*1349a733SJaeyoon Choi  * UFSHCI 4.1, section 5.5.3, Offset 78h: UTMRLDBR
398*1349a733SJaeyoon Choi  * UTP Task Management Request List Door Bell Register
399*1349a733SJaeyoon Choi  */
400*1349a733SJaeyoon Choi #define UFSHCI_UTMRLDBR_REG_UTMRLDBR_SHIFT (0)
401*1349a733SJaeyoon Choi #define UFSHCI_UTMRLDBR_REG_UTMRLDBR_MASK  (0xFF)
402*1349a733SJaeyoon Choi 
403*1349a733SJaeyoon Choi /*
404*1349a733SJaeyoon Choi  * UFSHCI 4.1, section 5.5.4, Offset 7Ch: UTMRLCLR
405*1349a733SJaeyoon Choi  * UTP Task Management Request List CLear Register
406*1349a733SJaeyoon Choi  */
407*1349a733SJaeyoon Choi #define UFSHCI_UTMRLCLR_REG_UTMRLCLR_SHIFT (0)
408*1349a733SJaeyoon Choi #define UFSHCI_UTMRLCLR_REG_UTMRLCLR_MASK  (0xFF)
409*1349a733SJaeyoon Choi 
410*1349a733SJaeyoon Choi /*
411*1349a733SJaeyoon Choi  * UFSHCI 4.1, section 5.5.5, Offset 80h: UTMRLRSR
412*1349a733SJaeyoon Choi  * UTP Task Management Request List Run Stop Register
413*1349a733SJaeyoon Choi  */
414*1349a733SJaeyoon Choi #define UFSHCI_UTMRLRSR_REG_UTMRLRSR_SHIFT (0)
415*1349a733SJaeyoon Choi #define UFSHCI_UTMRLRSR_REG_UTMRLRSR_MASK  (0xFF)
416*1349a733SJaeyoon Choi 
417*1349a733SJaeyoon Choi /*
418*1349a733SJaeyoon Choi  * UFSHCI 4.1, section 5.6.1
419*1349a733SJaeyoon Choi  * Offset 90h: UICCMD – UIC Command
420*1349a733SJaeyoon Choi  */
421*1349a733SJaeyoon Choi #define UFSHCI_UICCMD_REG_CMDOP_SHIFT (0)
422*1349a733SJaeyoon Choi #define UFSHCI_UICCMD_REG_CMDOP_MASK  (0xFF)
423*1349a733SJaeyoon Choi 
424*1349a733SJaeyoon Choi /*
425*1349a733SJaeyoon Choi  * UFSHCI 4.1, section 5.6.2
426*1349a733SJaeyoon Choi  * Offset 94h: UICCMDARG1 – UIC Command Argument 1
427*1349a733SJaeyoon Choi  */
428*1349a733SJaeyoon Choi #define UFSHCI_UICCMDARG1_REG_ARG1_SHIFT	       (0)
429*1349a733SJaeyoon Choi #define UFSHCI_UICCMDARG1_REG_ARG1_MASK		       (0xFFFFFFFF)
430*1349a733SJaeyoon Choi #define UFSHCI_UICCMDARG1_REG_GEN_SELECTOR_INDEX_SHIFT (0)
431*1349a733SJaeyoon Choi #define UFSHCI_UICCMDARG1_REG_GEN_SELECTOR_INDEX_MASK  (0xFFFF)
432*1349a733SJaeyoon Choi #define UFSHCI_UICCMDARG1_REG_MIB_ATTR_SHIFT	       (16)
433*1349a733SJaeyoon Choi #define UFSHCI_UICCMDARG1_REG_MIB_ATTR_MASK	       (0xFFFF)
434*1349a733SJaeyoon Choi 
435*1349a733SJaeyoon Choi /*
436*1349a733SJaeyoon Choi  * UFSHCI 4.1, section 5.6.3
437*1349a733SJaeyoon Choi  * Offset 98h: UICCMDARG2 – UIC Command Argument 2
438*1349a733SJaeyoon Choi  */
439*1349a733SJaeyoon Choi #define UFSHCI_UICCMDARG2_REG_ARG2_SHIFT	  (0)
440*1349a733SJaeyoon Choi #define UFSHCI_UICCMDARG2_REG_ARG2_MASK		  (0xFFFFFFFF)
441*1349a733SJaeyoon Choi #define UFSHCI_UICCMDARG2_REG_ERROR_CODE_SHIFT	  (0)
442*1349a733SJaeyoon Choi #define UFSHCI_UICCMDARG2_REG_ERROR_CODE_MASK	  (0xFF)
443*1349a733SJaeyoon Choi #define UFSHCI_UICCMDARG2_REG_ATTR_SET_TYPE_SHIFT (16)
444*1349a733SJaeyoon Choi #define UFSHCI_UICCMDARG2_REG_ATTR_SET_TYPE_MASK  (0xFF)
445*1349a733SJaeyoon Choi 
446*1349a733SJaeyoon Choi /*
447*1349a733SJaeyoon Choi  * UFSHCI 4.1, section 5.6.4
448*1349a733SJaeyoon Choi  * Offset 9Ch: UICCMDARG3 – UIC Command Argument 3
449*1349a733SJaeyoon Choi  */
450*1349a733SJaeyoon Choi #define UFSHCI_UICCMDARG3_REG_ARG3_SHIFT (0)
451*1349a733SJaeyoon Choi #define UFSHCI_UICCMDARG3_REG_ARG3_MASK	 (0xFFFFFFFF)
452*1349a733SJaeyoon Choi 
453*1349a733SJaeyoon Choi /* Helper macro to combine *_MASK and *_SHIFT defines */
454*1349a733SJaeyoon Choi #define UFSHCIM(name) (name##_MASK << name##_SHIFT)
455*1349a733SJaeyoon Choi 
456*1349a733SJaeyoon Choi /* Helper macro to extract value from x */
457*1349a733SJaeyoon Choi #define UFSHCIV(name, x) (((x) >> name##_SHIFT) & name##_MASK)
458*1349a733SJaeyoon Choi 
459*1349a733SJaeyoon Choi /* Helper macro to construct a field value */
460*1349a733SJaeyoon Choi #define UFSHCIF(name, x) (((x)&name##_MASK) << name##_SHIFT)
461*1349a733SJaeyoon Choi 
462*1349a733SJaeyoon Choi #define UFSHCI_DUMP_REG(ctrlr, member)                                        \
463*1349a733SJaeyoon Choi 	do {                                                                  \
464*1349a733SJaeyoon Choi 		uint32_t _val = ufshci_mmio_read_4(ctrlr, member);            \
465*1349a733SJaeyoon Choi 		ufshci_printf(ctrlr, "  %-15s (0x%03lx) : 0x%08x\n", #member, \
466*1349a733SJaeyoon Choi 		    ufshci_mmio_offsetof(member), _val);                      \
467*1349a733SJaeyoon Choi 	} while (0)
468*1349a733SJaeyoon Choi 
469*1349a733SJaeyoon Choi #endif /* __UFSHCI_REG_H__ */
470