| b.liu | e958203 | 2025-04-17 19:18:16 +0800 | [diff] [blame] | 1 | #ifndef _QSPI_COMMON_H |
| 2 | #define _QSPI_COMMON_H |
| 3 | |
| 4 | // --------------------------------------------------------------- |
| 5 | // Memory Map |
| 6 | // --------------------------------------------------------------- |
| 7 | #define QSPI0_REG_BASE 0xd420B000 //QSPI1_IPS_BASE_ADDR |
| 8 | #define QSPI0_ARDB_BASE 0xa0000000 //AHB RX Data Buffer base addr(QSPI_ARDB0 to QSPI_ARDB31) |
| 9 | #define QSPI0_AMBA_BASE 0x80000000 //AHB base addr |
| 10 | #define QSPI0_FLASH_A1_BASE_Z1 0x80300000 |
| 11 | #define QSPI0_FLASH_A1_TOP_Z1 0x88300000 |
| 12 | #define QSPI0_FLASH_A1_BASE 0x80000000 |
| 13 | #define QSPI0_FLASH_A1_TOP 0x88000000 |
| 14 | #define QSPI0_FLASH_A2_BASE 0x88000000 |
| 15 | #define QSPI0_FLASH_A2_TOP 0x90000000 |
| 16 | #define QSPI0_FLASH_B1_BASE 0x90000000 |
| 17 | #define QSPI0_FLASH_B1_TOP 0x98000000 |
| 18 | #define QSPI0_FLASH_B2_BASE 0x98000000 |
| 19 | #define QSPI0_FLASH_B2_TOP 0xa0000000 |
| 20 | |
| 21 | // --------------------------------------------------------------- |
| 22 | // Register definitions |
| 23 | // --------------------------------------------------------------- |
| 24 | #define QSPI_MCR_OFFSET 0x000 |
| 25 | #define QSPI_IPCR_OFFSET 0x008 |
| 26 | #define QSPI_FLSHCR_OFFSET 0x00C |
| 27 | #define QSPI_BUF0CR_OFFSET 0x010 |
| 28 | #define QSPI_BUF1CR_OFFSET 0x014 |
| 29 | #define QSPI_BUF2CR_OFFSET 0x018 |
| 30 | #define QSPI_BUF3CR_OFFSET 0x01C |
| 31 | #define QSPI_BFGENCR_OFFSET 0x020 |
| 32 | #define QSPI_SOCCR_OFFSET 0x024 |
| 33 | #define QSPI_BUF0IND_OFFSET 0x030 |
| 34 | #define QSPI_BUF1IND_OFFSET 0x034 |
| 35 | #define QSPI_BUF2IND_OFFSET 0x038 |
| 36 | #define QSPI_DLACR_OFFSET 0x03C |
| 37 | #define QSPI_SFAR_OFFSET 0x100 |
| 38 | #define QSPI_SFACR_OFFSET 0x104 |
| 39 | #define QSPI_SMPR_OFFSET 0x108 |
| 40 | #define QSPI_RBSR_OFFSET 0x10C |
| 41 | #define QSPI_RBCT_OFFSET 0x110 |
| 42 | #define QSPI_TBSR_OFFSET 0x150 |
| 43 | #define QSPI_TBDR_OFFSET 0x154 |
| 44 | #define QSPI_TBCT_OFFSET 0x158 |
| 45 | #define QSPI_SR_OFFSET 0x15C |
| 46 | #define QSPI_FR_OFFSET 0x160 |
| 47 | #define QSPI_RSER_OFFSET 0x164 |
| 48 | #define QSPI_SPNDST_OFFSET 0x168 |
| 49 | #define QSPI_SPTRCLR_OFFSET 0x16C |
| 50 | #define QSPI_SFA1AD_OFFSET 0x180 |
| 51 | #define QSPI_SFA2AD_OFFSET 0x184 |
| 52 | #define QSPI_SFB1AD_OFFSET 0x188 |
| 53 | #define QSPI_SFB2AD_OFFSET 0x18C |
| 54 | #define QSPI_DLPV_OFFSET 0x190 |
| 55 | #define QSPI_RBDR0_OFFSET 0x200 |
| 56 | #define QSPI_LUTKEY_OFFSET 0x300 |
| 57 | #define QSPI_LCKCR_OFFSET 0x304 |
| 58 | #define QSPI_LUT0_OFFSET 0x310 |
| 59 | #define QSPI_LUT1_OFFSET 0x314 |
| 60 | #define QSPI_LUT2_OFFSET 0x318 |
| 61 | #define QSPI_LUT3_OFFSET 0x31C |
| 62 | |
| 63 | // --------------------------------------------------------------- |
| 64 | // Register definitions |
| 65 | // --------------------------------------------------------------- |
| 66 | #define QSPI0_MCR (QSPI0_REG_BASE + QSPI_MCR_OFFSET) |
| 67 | #define QSPI0_IPCR (QSPI0_REG_BASE + QSPI_IPCR_OFFSET) |
| 68 | #define QSPI0_FLSHCR (QSPI0_REG_BASE + QSPI_FLSHCR_OFFSET) |
| 69 | #define QSPI0_BUF0CR (QSPI0_REG_BASE + QSPI_BUF0CR_OFFSET) |
| 70 | #define QSPI0_BUF1CR (QSPI0_REG_BASE + QSPI_BUF1CR_OFFSET) |
| 71 | #define QSPI0_BUF2CR (QSPI0_REG_BASE + QSPI_BUF2CR_OFFSET) |
| 72 | #define QSPI0_BUF3CR (QSPI0_REG_BASE + QSPI_BUF3CR_OFFSET) |
| 73 | #define QSPI0_BFGENCR (QSPI0_REG_BASE + QSPI_BFGENCR_OFFSET) |
| 74 | #define QSPI0_SOCCR (QSPI0_REG_BASE + QSPI_SOCCR_OFFSET) |
| 75 | #define QSPI0_BUF0IND (QSPI0_REG_BASE + QSPI_BUF0IND_OFFSET) |
| 76 | #define QSPI0_BUF1IND (QSPI0_REG_BASE + QSPI_BUF1IND_OFFSET) |
| 77 | #define QSPI0_BUF2IND (QSPI0_REG_BASE + QSPI_BUF2IND_OFFSET) |
| 78 | #define QSPI0_DLACR (QSPI0_REG_BASE + QSPI_DLACR_OFFSET) |
| 79 | #define QSPI0_SFAR (QSPI0_REG_BASE + QSPI_SFAR_OFFSET) |
| 80 | #define QSPI0_SFACR (QSPI0_REG_BASE + QSPI_SFACR_OFFSET) |
| 81 | #define QSPI0_SMPR (QSPI0_REG_BASE + QSPI_SMPR_OFFSET) |
| 82 | #define QSPI0_RBSR (QSPI0_REG_BASE + QSPI_RBSR_OFFSET) |
| 83 | #define QSPI0_RBCT (QSPI0_REG_BASE + QSPI_RBCT_OFFSET) |
| 84 | #define QSPI0_TBSR (QSPI0_REG_BASE + QSPI_TBSR_OFFSET) |
| 85 | #define QSPI0_TBDR (QSPI0_REG_BASE + QSPI_TBDR_OFFSET) |
| 86 | #define QSPI0_TBCT (QSPI0_REG_BASE + QSPI_TBCT_OFFSET) |
| 87 | #define QSPI0_SR (QSPI0_REG_BASE + QSPI_SR_OFFSET) |
| 88 | #define QSPI0_FR (QSPI0_REG_BASE + QSPI_FR_OFFSET) |
| 89 | #define QSPI0_RSER (QSPI0_REG_BASE + QSPI_RSER_OFFSET) |
| 90 | #define QSPI0_SPNDST (QSPI0_REG_BASE + QSPI_SPNDST_OFFSET) |
| 91 | #define QSPI0_SPTRCLR (QSPI0_REG_BASE + QSPI_SPTRCLR_OFFSET) |
| 92 | #define QSPI0_SFA1AD (QSPI0_REG_BASE + QSPI_SFA1AD_OFFSET) |
| 93 | #define QSPI0_SFA2AD (QSPI0_REG_BASE + QSPI_SFA2AD_OFFSET) |
| 94 | #define QSPI0_SFB1AD (QSPI0_REG_BASE + QSPI_SFB1AD_OFFSET) |
| 95 | #define QSPI0_SFB2AD (QSPI0_REG_BASE + QSPI_SFB2AD_OFFSET) |
| 96 | #define QSPI0_DLPV (QSPI0_REG_BASE + QSPI_DLPV_OFFSET) |
| 97 | #define QSPI0_RBDR0 (QSPI0_REG_BASE + QSPI_RBDR0_OFFSET) |
| 98 | #define QSPI0_LUTKEY (QSPI0_REG_BASE + QSPI_LUTKEY_OFFSET) |
| 99 | #define QSPI0_LCKCR (QSPI0_REG_BASE + QSPI_LCKCR_OFFSET) |
| 100 | #define QSPI0_LUT0 (QSPI0_REG_BASE + QSPI_LUT0_OFFSET) |
| 101 | #define QSPI0_LUT1 (QSPI0_REG_BASE + QSPI_LUT1_OFFSET) |
| 102 | #define QSPI0_LUT2 (QSPI0_REG_BASE + QSPI_LUT2_OFFSET) |
| 103 | #define QSPI0_LUT3 (QSPI0_REG_BASE + QSPI_LUT3_OFFSET) |
| 104 | |
| 105 | #define QSPI_SFACR_RESV (0x7fff << 17 | 0xfff << 4) |
| 106 | |
| 107 | #define QSPI_IPCR_SEQID_SHIFT 24 |
| 108 | #define QSPI_IPCR_SEQID_MASK (0xf << QSPI_IPCR_SEQID_SHIFT) |
| 109 | #define QSPI_IPCR_RESV (0xf << 28 | 0x7f << 17) |
| 110 | |
| 111 | #define QSPI_FLSHCR_TDH_SHIFT 16 |
| 112 | #define QSPI_FLSHCR_TDH_MASK (0x3 << QSPI_FLSHCR_TDH_SHIFT) |
| 113 | #define QSPI_FLSHCR_TDH_HALF_2X (0x1 << QSPI_FLSHCR_TDH_SHIFT) |
| 114 | #define QSPI_FLSHCR_TDH_HALF_4X (0x2 << QSPI_FLSHCR_TDH_SHIFT) |
| 115 | |
| 116 | #define QSPI_MCR_END_CFD_SHIFT 2 |
| 117 | #define QSPI_MCR_END_CFD_MASK (3 << QSPI_MCR_END_CFD_SHIFT) |
| 118 | #define QSPI_MCR_END_CFD_LE (3 << QSPI_MCR_END_CFD_SHIFT) |
| 119 | #define QSPI_MCR_DQS_EN BIT6 |
| 120 | #define QSPI_MCR_DDR_EN BIT7 |
| 121 | #define QSPI_MCR_CLR_RXF BIT10 |
| 122 | #define QSPI_MCR_CLR_TXF BIT11 |
| 123 | #define QSPI_MCR_MDIS BIT14 |
| 124 | #define QSPI_MCR_DQS_LP_EN BIT25 |
| 125 | #define QSPI_MCR_DQS_INV_EN BIT26 |
| 126 | #define QSPI_MCR_ISDX_SHIFT 16 |
| 127 | #define QSPI_MCR_ISDX_MASK (0xf << QSPI_MCR_ISDX_SHIFT) |
| 128 | #define QSPI_MCR_SWRSTHD BIT1 |
| 129 | #define QSPI_MCR_SWRSTSD BIT0 |
| 130 | #define QSPI_MCR_RESV (0xf << 20 | 0x3 << 12 | 0x3 << 8 | 0x1 << 4) |
| 131 | |
| 132 | #define QSPI_SMPR_HSENA BIT0 |
| 133 | #define QSPI_SMPR_FSPHS BIT5 |
| 134 | #define QSPI_SMPR_FSDLY BIT6 |
| 135 | #define QSPI_SMPR_DDRSMP_SHIFT 16 |
| 136 | #define QSPI_SMPR_DDRSMP_MASK (7 << QSPI_SMPR_DDRSMP_SHIFT) |
| 137 | |
| 138 | #define QSPI_BUFXCR_INVALID_MSTRID 0xe |
| 139 | #define QSPI_BUF3CR_ALLMST BIT31 |
| 140 | #define QSPI_BUF3CR_ADATSZ_SHIFT 8 |
| 141 | #define QSPI_BUF3CR_ADATSZ_MASK (0xFF << QSPI_BUF3CR_ADATSZ_SHIFT) |
| 142 | |
| 143 | #define QSPI_BFGENCR_SEQID_SHIFT 12 |
| 144 | #define QSPI_BFGENCR_SEQID_MASK (0xf << QSPI_BFGENCR_SEQID_SHIFT) |
| 145 | #define QSPI_BFGENCR_PAR_EN BIT16 |
| 146 | |
| 147 | #define QSPI_SOCCR_DLINE_EN BIT8 |
| 148 | #define QSPI_DLACR_DLINE_CODE_SHIFT 0 |
| 149 | #define QSPI_DLACR_DLINE_CODE_MASK (0xFF << QSPI_DLACR_DLINE_CODE_SHIFT) |
| 150 | #define QSPI_DLACR_DLINE_STEP_SHIFT 8 |
| 151 | #define QSPI_DLACR_DLINE_STEP_MASK (0xFF << QSPI_DLACR_DLINE_STEP_SHIFT) |
| 152 | |
| 153 | #define QSPI_RBSR_RDBFL_SHIFT 8 |
| 154 | #define QSPI_RBSR_RDBFL_MASK (0x3f << QSPI_RBSR_RDBFL_SHIFT) |
| 155 | |
| 156 | #define QSPI_RBCT_RXBRD BIT8 |
| 157 | #define QSPI_RBCT_WMRK_SHITT 0 |
| 158 | #define QSPI_RBCT_WMRK_MASK (0x1f << QSPI_RBCT_WMRK_SHITT) |
| 159 | #define QSPI_RBCT_RESV (0x7fffff << 9 | 0x7 << 5) |
| 160 | |
| 161 | #define QSPI_TBCT_WMRK_SHITT 0 |
| 162 | #define QSPI_TBCT_WMRK_MASK (0x1f << QSPI_TBCT_WMRK_SHITT) |
| 163 | #define QSPI_TBCT_RESV (~0x1f) |
| 164 | |
| 165 | #define QSPI_SR_TXFULL BIT27 |
| 166 | #define QSPI_SR_TXDMA BIT26 |
| 167 | #define QSPI_SR_TXWA BIT25 |
| 168 | #define QSPI_SR_TXEDA BIT24 |
| 169 | #define QSPI_SR_RXDMA BIT23 |
| 170 | #define QSPI_SR_RXFULL BIT19 |
| 171 | #define QSPI_SR_RXWE BIT16 |
| 172 | #define QSPI_SR_AHB_ACC BIT2 |
| 173 | #define QSPI_SR_IP_ACC BIT1 |
| 174 | #define QSPI_SR_BUSY BIT0 |
| 175 | |
| 176 | #define QSPI_FR_DLPFF BIT31 |
| 177 | #define QSPI_FR_TBFF BIT27 |
| 178 | #define QSPI_FR_TBUF BIT26 |
| 179 | #define QSPI_FR_ILLINE BIT23 |
| 180 | #define QSPI_FR_RBOF BIT17 |
| 181 | #define QSPI_FR_RBDF BIT16 |
| 182 | #define QSPI_FR_ABSEF BIT15 |
| 183 | #define QSPI_FR_AITEF BIT14 |
| 184 | #define QSPI_FR_AIBSEF BIT13 |
| 185 | #define QSPI_FR_ABOF BIT12 |
| 186 | #define QSPI_FR_IUEF BIT11 |
| 187 | #define QSPI_FR_IPAEF BIT7 |
| 188 | #define QSPI_FR_IPIEF BIT6 |
| 189 | #define QSPI_FR_IPGEF BIT4 |
| 190 | #define QSPI_FR_TFF BIT0 |
| 191 | |
| 192 | #define QSPI_RSER_DLPFIE BIT31 |
| 193 | #define QSPI_RSER_TBFIE BIT27 |
| 194 | #define QSPI_RSER_TBUIE BIT26 |
| 195 | #define QSPI_RSER_TBFDE BIT25 |
| 196 | #define QSPI_RSER_ILLINIE BIT23 |
| 197 | #define QSPI_RSER_RBDDE BIT21 |
| 198 | #define QSPI_RSER_RBOIE BIT17 |
| 199 | #define QSPI_RSER_RBDIE BIT16 |
| 200 | #define QSPI_RSER_ABSEIE BIT15 |
| 201 | #define QSPI_RSER_AITIE BIT14 |
| 202 | #define QSPI_RSER_AIBSIE BIT13 |
| 203 | #define QSPI_RSER_ABOIE BIT12 |
| 204 | #define QSPI_RSER_IUEIE BIT11 |
| 205 | #define QSPI_RSER_IPIEIE BIT6 |
| 206 | #define QSPI_RSER_IPGEIE BIT4 |
| 207 | #define QSPI_RSER_TFIE BIT0 |
| 208 | #define QSPI_RSER_RESV (0x7 << 28 | 0x1 << 24 | 0x1 << 22 | \ |
| 209 | 0x7 << 18 | 0x7 << 8 | 0x1 << 5 | \ |
| 210 | 0x7 << 1) |
| 211 | |
| 212 | #define QSPI_SPTRCLR_IPPTRC BIT8 |
| 213 | #define QSPI_SPTRCLR_RESV (0x7fffff << 9 | 0x7f << 1) |
| 214 | |
| 215 | #define QSPI_LCKCR_LOCK BIT0 |
| 216 | #define QSPI_LCKCR_UNLOCK BIT1 |
| 217 | |
| 218 | #define LUT_KEY_VALUE 0x5af05af0 |
| 219 | |
| 220 | // --------------------------------------------------------------- |
| 221 | // Enumeration & Structure |
| 222 | // --------------------------------------------------------------- |
| 223 | enum QSPI_INST_E { |
| 224 | QSPI_INSTR_STOP = 0x0, |
| 225 | QSPI_INSTR_CMD = 0x1, |
| 226 | QSPI_INSTR_ADDR = 0x2, |
| 227 | QSPI_INSTR_DUMMY = 0x3, |
| 228 | QSPI_INSTR_MODE = 0x4, |
| 229 | QSPI_INSTR_MODE2 = 0x5, |
| 230 | QSPI_INSTR_MODE4 = 0x6, |
| 231 | QSPI_INSTR_READ = 0x7, |
| 232 | QSPI_INSTR_WRITE = 0x8, |
| 233 | QSPI_INSTR_JMP_ON_CS = 0x9, |
| 234 | QSPI_INSTR_ADDR_DDR = 0xA, |
| 235 | QSPI_INSTR_MODE_DDR = 0xB, |
| 236 | QSPI_INSTR_MODE2_DDR = 0xC, |
| 237 | QSPI_INSTR_MODE4_DDR = 0xD, |
| 238 | QSPI_INSTR_READ_DDR = 0xE, |
| 239 | QSPI_INSTR_WRITE_DDR = 0xF, |
| 240 | QSPI_INSTR_DATA_LEARN = 0x10, |
| 241 | QSPI_INSTR_CMD_DDR = 0x11, |
| 242 | }; |
| 243 | |
| 244 | enum QSPI_PAD_E { |
| 245 | QSPI_PAD_1X = 0x0, |
| 246 | QSPI_PAD_2X = 0x1, |
| 247 | QSPI_PAD_4X = 0x2, |
| 248 | QSPI_PAD_RSVD = 0x3 |
| 249 | }; |
| 250 | |
| 251 | #define EIO 5 /* I/O error */ |
| 252 | #define EAGAIN 11 /* Try again */ |
| 253 | #define ENOMEM 12 /* Out of memory */ |
| 254 | #define ENODEV 19 /* No such device */ |
| 255 | #define EINVAL 22 /* Invalid argument */ |
| 256 | #define EBADMSG 74 /* Not a data message */ |
| 257 | #define ETIMEDOUT 110 /* Connection timed out */ |
| 258 | #define EUCLEAN 117 /* Chip needs cleaning */ |
| 259 | #define ENOTSUPP 524 /* Operation is not supported */ |
| 260 | |
| 261 | #endif // QSPI_COMMON_H |