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