File indexing completed on 2025-05-11 08:23:42
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035 #ifndef XQSPIPSU_FLASH_CONFIG_H_
0036 #define XQSPIPSU_FLASH_CONFIG_H_
0037
0038 #ifdef __cplusplus
0039 extern "C" {
0040 #endif
0041
0042
0043
0044 #ifndef __rtems__
0045 #include "xparameters.h" /* SDK generated parameters */
0046 #else
0047 #include <bsp/xil-compat.h>
0048 #endif
0049 #include "xqspipsu.h" /* QSPIPSU device driver */
0050
0051
0052
0053
0054
0055
0056
0057 #define WRITE_STATUS_CMD 0x01
0058 #define WRITE_CMD 0x02
0059 #define READ_CMD 0x03
0060 #define WRITE_DISABLE_CMD 0x04
0061 #define READ_STATUS_CMD 0x05
0062 #define WRITE_ENABLE_CMD 0x06
0063 #define VOLATILE_WRITE_ENABLE_CMD 0x50
0064 #define QUAD_MODE_ENABLE_BIT 0x06
0065 #define FAST_READ_CMD 0x0B
0066 #define DUAL_READ_CMD 0x3B
0067 #define QUAD_READ_CMD 0x6B
0068 #define BULK_ERASE_CMD 0xC7
0069 #define SEC_ERASE_CMD 0xD8
0070 #define READ_ID 0x9F
0071 #define READ_SFDP 0x5A
0072 #define READ_CONFIG_CMD 0x35
0073 #define WRITE_CONFIG_CMD 0x01
0074 #define ENTER_4B_ADDR_MODE 0xB7
0075 #define EXIT_4B_ADDR_MODE 0xE9
0076 #define EXIT_4B_ADDR_MODE_ISSI 0x29
0077
0078 #define READ_CMD_4B 0x13
0079 #define FAST_READ_CMD_4B 0x0C
0080 #define DUAL_READ_CMD_4B 0x3C
0081 #define QUAD_READ_CMD_4B 0x6C
0082 #define WRITE_CMD_4B 0x12
0083 #define SEC_ERASE_CMD_4B 0xDC
0084
0085 #define BANK_REG_RD 0x16
0086 #define BANK_REG_WR 0x17
0087 #define READ_ECCSR 0x18
0088
0089 #define EXTADD_REG_RD 0xC8
0090 #define EXTADD_REG_WR 0xC5
0091 #define DIE_ERASE_CMD 0xC4
0092 #define READ_FLAG_STATUS_CMD 0x70
0093
0094 #define WRITE_STATUS_REG_2_CMD 0x31
0095 #define READ_STATUS_REG_2_CMD 0x35
0096 #define WB_QUAD_MODE_ENABLE_BIT 0x01
0097
0098
0099
0100
0101
0102
0103
0104
0105 #define COMMAND_OFFSET 0
0106 #define ADDRESS_1_OFFSET 1
0107 #define ADDRESS_2_OFFSET 2
0108 #define ADDRESS_3_OFFSET 3
0109 #define ADDRESS_4_OFFSET 4
0110
0111
0112 #define DATA_OFFSET 5
0113 #define DUMMY_OFFSET 4
0114
0115
0116 #define DUMMY_SIZE 1
0117
0118
0119 #define DUMMY_CLOCKS 8
0120
0121
0122 #define RD_ID_SIZE 4
0123 #define BULK_ERASE_SIZE 1
0124 #define SEC_ERASE_SIZE 4
0125 #define BANK_SEL_SIZE 2
0126
0127
0128 #define RD_CFG_SIZE 2
0129
0130
0131 #define WR_CFG_SIZE 3
0132
0133
0134 #define DIE_ERASE_SIZE 4
0135
0136
0137
0138
0139
0140
0141 #define OVERHEAD_SIZE 4
0142
0143
0144
0145
0146 #define FLASH1BASE 0x0000000
0147
0148
0149
0150
0151 #define SIXTEENMB 0x1000000
0152
0153
0154
0155
0156
0157 #define FLASH_QUAD_EN_MASK 0x02
0158
0159 #define FLASH_SRWD_MASK 0x80
0160
0161
0162
0163
0164 #define BANKMASK 0xF000000
0165
0166
0167
0168
0169 #define BUSWIDTH_SINGLE 0
0170 #define BUSWIDTH_DOUBLE 1
0171
0172
0173
0174
0175
0176
0177
0178
0179
0180
0181
0182
0183
0184
0185 #define MICRON_ID_BYTE0 0x20
0186 #define SPANSION_ID_BYTE0 0x01
0187 #define WINBOND_ID_BYTE0 0xEF
0188 #define MACRONIX_ID_BYTE0 0xC2
0189 #define ISSI_ID_BYTE0 0x9D
0190
0191
0192
0193 typedef struct{
0194 u32 jedec_id;
0195
0196 u32 SectSize;
0197
0198
0199 u32 NumSect;
0200
0201
0202 u32 PageSize;
0203
0204
0205
0206 u32 NumPage;
0207
0208
0209 u32 FlashDeviceSize;
0210
0211
0212
0213 u32 SectMask;
0214 u8 NumDie;
0215 } FlashInfo;
0216
0217
0218 FlashInfo Flash_Config_Table[] = {
0219
0220
0221 {0x016017, SECTOR_SIZE_64K, NUM_OF_SECTORS128, BYTES256_PER_PAGE,
0222 0x8000, 0x800000, 0xFFFF0000, 1},
0223
0224 {0x016018, SECTOR_SIZE_64K, NUM_OF_SECTORS256, BYTES256_PER_PAGE,
0225 0x10000, 0x1000000, 0xFFFF0000, 1},
0226
0227 {0x016019, SECTOR_SIZE_64K, NUM_OF_SECTORS512, BYTES256_PER_PAGE,
0228 0x20000, 0x2000000, 0xFFFF0000, 1},
0229
0230 {0x010220, SECTOR_SIZE_256K, NUM_OF_SECTORS256, BYTES512_PER_PAGE,
0231 0x20000, 0x4000000, 0xFFFC0000, 1},
0232
0233
0234
0235 {0x20bb18, SECTOR_SIZE_64K, NUM_OF_SECTORS256, BYTES256_PER_PAGE,
0236 0x10000, 0x1000000, 0xFFFF0000, 1},
0237
0238 {0x20ba18, SECTOR_SIZE_64K, NUM_OF_SECTORS256, BYTES256_PER_PAGE,
0239 0x10000, 0x1000000, 0xFFFF0000, 1},
0240
0241 {0x20bb19, SECTOR_SIZE_64K, NUM_OF_SECTORS512, BYTES256_PER_PAGE,
0242 0x20000, 0x2000000, 0xFFFF0000, 1},
0243
0244 {0x20ba19, SECTOR_SIZE_64K, NUM_OF_SECTORS512, BYTES256_PER_PAGE,
0245 0x20000, 0x2000000, 0xFFFF0000, 1},
0246
0247 {0x20bb20, SECTOR_SIZE_64K, NUM_OF_SECTORS1024, BYTES256_PER_PAGE,
0248 0x40000, 0x4000000, 0xFFFF0000, 2},
0249
0250 {0x20ba20, SECTOR_SIZE_64K, NUM_OF_SECTORS1024, BYTES256_PER_PAGE,
0251 0x40000, 0x4000000, 0xFFFF0000, 2},
0252
0253 {0x20bb21, SECTOR_SIZE_64K, NUM_OF_SECTORS2048, BYTES256_PER_PAGE,
0254 0x80000, 0x8000000, 0xFFFF0000, 4},
0255
0256 {0x20ba21, SECTOR_SIZE_64K, NUM_OF_SECTORS2048, BYTES256_PER_PAGE,
0257 0x80000, 0x8000000, 0xFFFF0000, 4},
0258
0259 {0x20bb22, SECTOR_SIZE_64K, NUM_OF_SECTORS4096, BYTES256_PER_PAGE,
0260 0x100000, 0x10000000, 0xFFFF0000, 4},
0261
0262 {0x20ba22, SECTOR_SIZE_64K, NUM_OF_SECTORS4096, BYTES256_PER_PAGE,
0263 0x100000, 0x10000000, 0xFFFF0000, 4},
0264
0265
0266 {0xef6018, SECTOR_SIZE_64K, NUM_OF_SECTORS256, BYTES256_PER_PAGE,
0267 0x10000, 0x1000000, 0xFFFF0000, 1},
0268
0269 {0xef7018, SECTOR_SIZE_64K, NUM_OF_SECTORS256, BYTES256_PER_PAGE,
0270 0x10000, 0x1000000, 0xFFFF0000, 1},
0271
0272 {0xef9022, SECTOR_SIZE_64K, NUM_OF_SECTORS4096, BYTES256_PER_PAGE,
0273 0x100000, 0x10000000, 0xFFFF0000, 4},
0274
0275
0276 {0xc2201b, SECTOR_SIZE_64K, NUM_OF_SECTORS2048, BYTES256_PER_PAGE,
0277 0x80000, 0x8000000, 0xFFFF0000, 4},
0278
0279 {0xc2261b, SECTOR_SIZE_64K, NUM_OF_SECTORS2048, BYTES256_PER_PAGE,
0280 0x80000, 0x8000000, 0xFFFF0000, 4},
0281
0282 {0xc2253b, SECTOR_SIZE_64K, NUM_OF_SECTORS2048, BYTES256_PER_PAGE,
0283 0x80000, 0x8000000, 0xFFFF0000, 4},
0284
0285 {0xc2201c, SECTOR_SIZE_64K, NUM_OF_SECTORS4096, BYTES256_PER_PAGE,
0286 0x100000, 0x10000000, 0xFFFF0000, 1},
0287
0288 {0xc2253c, SECTOR_SIZE_64K, NUM_OF_SECTORS4096, BYTES256_PER_PAGE,
0289 0x100000, 0x10000000, 0xFFFF0000, 1},
0290
0291
0292 {0x9d7014, SECTOR_SIZE_64K, NUM_OF_SECTORS16, BYTES256_PER_PAGE,
0293 0x1000, 0x100000, 0xFFFF0000, 1},
0294
0295 {0x9d6014, SECTOR_SIZE_64K, NUM_OF_SECTORS16, BYTES256_PER_PAGE,
0296 0x1000, 0x100000, 0xFFFF0000, 1},
0297
0298 {0x9d7015, SECTOR_SIZE_64K, NUM_OF_SECTORS32, BYTES256_PER_PAGE,
0299 0x2000, 0x200000, 0xFFFF0000, 1},
0300
0301 {0x9d6015, SECTOR_SIZE_64K, NUM_OF_SECTORS32, BYTES256_PER_PAGE,
0302 0x2000, 0x200000, 0xFFFF0000, 1},
0303
0304 {0x9d7016, SECTOR_SIZE_64K, NUM_OF_SECTORS64, BYTES256_PER_PAGE,
0305 0x4000, 0x400000, 0xFFFF0000, 1},
0306
0307 {0x9d6016, SECTOR_SIZE_64K, NUM_OF_SECTORS64, BYTES256_PER_PAGE,
0308 0x4000, 0x400000, 0xFFFF0000, 1},
0309
0310 {0x9d7017, SECTOR_SIZE_64K, NUM_OF_SECTORS128, BYTES256_PER_PAGE,
0311 0x8000, 0x800000, 0xFFFF0000, 1},
0312
0313 {0x9d6017, SECTOR_SIZE_64K, NUM_OF_SECTORS128, BYTES256_PER_PAGE,
0314 0x8000, 0x800000, 0xFFFF0000, 1},
0315
0316 {0x9d7018, SECTOR_SIZE_64K, NUM_OF_SECTORS256, BYTES256_PER_PAGE,
0317 0x10000, 0x1000000, 0xFFFF0000, 1},
0318
0319 {0x9d6018, SECTOR_SIZE_64K, NUM_OF_SECTORS256, BYTES256_PER_PAGE,
0320 0x10000, 0x1000000, 0xFFFF0000, 1},
0321
0322 {0x9d6019, SECTOR_SIZE_64K, NUM_OF_SECTORS512, BYTES256_PER_PAGE,
0323 0x20000, 0x2000000, 0xFFFF0000, 1},
0324
0325 {0x9d7019, SECTOR_SIZE_64K, NUM_OF_SECTORS512, BYTES256_PER_PAGE,
0326 0x20000, 0x2000000, 0xFFFF0000, 1},
0327
0328 {0x9d601a, SECTOR_SIZE_64K, NUM_OF_SECTORS1024, BYTES256_PER_PAGE,
0329 0x40000, 0x4000000, 0xFFFF0000, 2},
0330
0331 {0x9d701a, SECTOR_SIZE_64K, NUM_OF_SECTORS1024, BYTES256_PER_PAGE,
0332 0x40000, 0x4000000, 0xFFFF0000, 2},
0333
0334 {0x9d601b, SECTOR_SIZE_64K, NUM_OF_SECTORS2048, BYTES256_PER_PAGE,
0335 0x80000, 0x8000000, 0xFFFF0000, 1},
0336
0337 {0x9d701b, SECTOR_SIZE_64K, NUM_OF_SECTORS2048, BYTES256_PER_PAGE,
0338 0x80000, 0x8000000, 0xFFFF0000, 1}
0339 };
0340
0341 static INLINE u32 CalculateFCTIndex(u32 ReadId, u32 *FCTIndex)
0342 {
0343 u32 Index;
0344
0345 for (Index = 0; Index < sizeof(Flash_Config_Table)/sizeof(Flash_Config_Table[0]);
0346 Index++) {
0347 if (ReadId == Flash_Config_Table[Index].jedec_id) {
0348 *FCTIndex = Index;
0349 return XST_SUCCESS;
0350 }
0351 }
0352
0353 return XST_FAILURE;
0354 }
0355
0356 #ifdef __cplusplus
0357 }
0358 #endif
0359
0360 #endif
0361