58#ifdef XPAR_T4NFC_HLPER_7_BASEADDR
59#define NSC_7_CONNECTED 1
60#define NSC_7_UCODEADDR XPAR_AXI_BRAM_CTRL_7_S_AXI_BASEADDR
61#define NSC_7_BASEADDR XPAR_T4NFC_HLPER_7_BASEADDR
63#define NSC_7_CONNECTED 0
64#define NSC_7_UCODEADDR 0
65#define NSC_7_BASEADDR 0
67#ifdef XPAR_T4NFC_HLPER_6_BASEADDR
68#define NSC_6_CONNECTED 1
69#define NSC_6_UCODEADDR XPAR_AXI_BRAM_CTRL_6_S_AXI_BASEADDR
70#define NSC_6_BASEADDR XPAR_T4NFC_HLPER_6_BASEADDR
72#define NSC_6_CONNECTED 0
73#define NSC_6_UCODEADDR 0
74#define NSC_6_BASEADDR 0
76#ifdef XPAR_T4NFC_HLPER_5_BASEADDR
77#define NSC_5_CONNECTED 1
78#define NSC_5_UCODEADDR XPAR_AXI_BRAM_CTRL_5_S_AXI_BASEADDR
79#define NSC_5_BASEADDR XPAR_T4NFC_HLPER_5_BASEADDR
81#define NSC_5_CONNECTED 0
82#define NSC_5_UCODEADDR 0
83#define NSC_5_BASEADDR 0
85#ifdef XPAR_T4NFC_HLPER_4_BASEADDR
86#define NSC_4_CONNECTED 1
87#define NSC_4_UCODEADDR XPAR_AXI_BRAM_CTRL_4_S_AXI_BASEADDR
88#define NSC_4_BASEADDR XPAR_T4NFC_HLPER_4_BASEADDR
90#define NSC_4_CONNECTED 0
91#define NSC_4_UCODEADDR 0
92#define NSC_4_BASEADDR 0
94#ifdef XPAR_T4NFC_HLPER_3_BASEADDR
95#define NSC_3_CONNECTED 1
96#define NSC_3_UCODEADDR XPAR_AXI_BRAM_CTRL_3_S_AXI_BASEADDR
97#define NSC_3_BASEADDR XPAR_T4NFC_HLPER_3_BASEADDR
99#define NSC_3_CONNECTED 0
100#define NSC_3_UCODEADDR 0
101#define NSC_3_BASEADDR 0
103#ifdef XPAR_T4NFC_HLPER_2_BASEADDR
104#define NSC_2_CONNECTED 1
105#define NSC_2_UCODEADDR XPAR_AXI_BRAM_CTRL_2_S_AXI_BASEADDR
106#define NSC_2_BASEADDR XPAR_T4NFC_HLPER_2_BASEADDR
108#define NSC_2_CONNECTED 0
109#define NSC_2_UCODEADDR 0
110#define NSC_2_BASEADDR 0
112#ifdef XPAR_T4NFC_HLPER_1_BASEADDR
113#define NSC_1_CONNECTED 1
114#define NSC_1_UCODEADDR XPAR_AXI_BRAM_CTRL_1_S_AXI_BASEADDR
115#define NSC_1_BASEADDR XPAR_T4NFC_HLPER_1_BASEADDR
117#define NSC_1_CONNECTED 0
118#define NSC_1_UCODEADDR 0
119#define NSC_1_BASEADDR 0
121#ifdef XPAR_T4NFC_HLPER_0_BASEADDR
122#define NSC_0_CONNECTED 1
123#define NSC_0_UCODEADDR XPAR_AXI_BRAM_CTRL_0_S_AXI_BASEADDR
124#define NSC_0_BASEADDR XPAR_T4NFC_HLPER_0_BASEADDR
126#define NSC_0_CONNECTED 0
127#define NSC_0_UCODEADDR 0
128#define NSC_0_BASEADDR 0
132#define NUMBER_OF_CONNECTED_CHANNEL \
133 (NSC_7_CONNECTED + NSC_6_CONNECTED + NSC_5_CONNECTED + NSC_4_CONNECTED + NSC_3_CONNECTED + NSC_2_CONNECTED + \
134 NSC_1_CONNECTED + NSC_0_CONNECTED)
140#define BYTES_PER_DATA_REGION_OF_NAND_ROW 16384
141#define BYTES_PER_SPARE_REGION_OF_NAND_ROW 1664
144#define BYTES_PER_NAND_ROW (BYTES_PER_DATA_REGION_OF_NAND_ROW + BYTES_PER_SPARE_REGION_OF_NAND_ROW)
150#define ROWS_PER_SLC_BLOCK 256
151#define ROWS_PER_MLC_BLOCK 256
153#define MAIN_BLOCKS_PER_LUN 2732
154#define EXTENDED_BLOCKS_PER_LUN 224
155#define TOTAL_BLOCKS_PER_LUN (MAIN_BLOCKS_PER_LUN + EXTENDED_BLOCKS_PER_LUN)
157#define MAIN_ROWS_PER_SLC_LUN (ROWS_PER_SLC_BLOCK * MAIN_BLOCKS_PER_LUN)
158#define MAIN_ROWS_PER_MLC_LUN (ROWS_PER_MLC_BLOCK * MAIN_BLOCKS_PER_LUN)
160#define LUNS_PER_DIE 1
162#define MAIN_BLOCKS_PER_DIE (MAIN_BLOCKS_PER_LUN * LUNS_PER_DIE)
163#define TOTAL_BLOCKS_PER_DIE (TOTAL_BLOCKS_PER_LUN * LUNS_PER_DIE)
165#define BAD_BLOCK_MARK_PAGE0 0
166#define BAD_BLOCK_MARK_PAGE1 (ROWS_PER_MLC_BLOCK - 1)
167#define BAD_BLOCK_MARK_BYTE0 0
168#define BAD_BLOCK_MARK_BYTE1 (BYTES_PER_DATA_REGION_OF_NAND_ROW)
175#define NSC_MAX_CHANNELS (NUMBER_OF_CONNECTED_CHANNEL)
176#define NSC_MAX_WAYS 8
179#define BYTES_PER_DATA_REGION_OF_PAGE 16384
180#define BYTES_PER_SPARE_REGION_OF_PAGE 256
182#define PAGES_PER_SLC_BLOCK (ROWS_PER_SLC_BLOCK)
183#define PAGES_PER_MLC_BLOCK (ROWS_PER_MLC_BLOCK)
186#define ECC_CHUNKS_PER_PAGE 32
187#define BIT_ERROR_THRESHOLD_PER_CHUNK 24
188#define ERROR_INFO_WORD_COUNT 11
194#define BYTES_PER_NVME_BLOCK 4096
195#define NVME_BLOCKS_PER_PAGE (BYTES_PER_DATA_REGION_OF_PAGE / BYTES_PER_NVME_BLOCK)
205#define BITS_PER_FLASH_CELL SLC_MODE
206#define USER_BLOCKS_PER_LUN 2048
207#define USER_CHANNELS 8
212#define BYTES_PER_DATA_REGION_OF_SLICE 16384
213#define BYTES_PER_SPARE_REGION_OF_SLICE 256
215#define SLICES_PER_PAGE \
216 (BYTES_PER_DATA_REGION_OF_PAGE / BYTES_PER_DATA_REGION_OF_SLICE)
217#define NVME_BLOCKS_PER_SLICE (BYTES_PER_DATA_REGION_OF_SLICE / BYTES_PER_NVME_BLOCK)
219#define USER_DIES (USER_CHANNELS * USER_WAYS)
221#define USER_PAGES_PER_BLOCK (PAGES_PER_SLC_BLOCK * BITS_PER_FLASH_CELL)
222#define USER_PAGES_PER_LUN (USER_PAGES_PER_BLOCK * USER_BLOCKS_PER_LUN)
223#define USER_PAGES_PER_DIE (USER_PAGES_PER_LUN * LUNS_PER_DIE)
224#define USER_PAGES_PER_CHANNEL (USER_PAGES_PER_DIE * USER_WAYS)
225#define USER_PAGES_PER_SSD (USER_PAGES_PER_CHANNEL * USER_CHANNELS)
227#define SLICES_PER_BLOCK (USER_PAGES_PER_BLOCK * SLICES_PER_PAGE)
228#define SLICES_PER_LUN (USER_PAGES_PER_LUN * SLICES_PER_PAGE)
229#define SLICES_PER_DIE (USER_PAGES_PER_DIE * SLICES_PER_PAGE)
230#define SLICES_PER_CHANNEL (USER_PAGES_PER_CHANNEL * SLICES_PER_PAGE)
231#define SLICES_PER_SSD (USER_PAGES_PER_SSD * SLICES_PER_PAGE)
233#define USER_BLOCKS_PER_DIE (USER_BLOCKS_PER_LUN * LUNS_PER_DIE)
234#define USER_BLOCKS_PER_CHANNEL (USER_BLOCKS_PER_DIE * USER_WAYS)
235#define USER_BLOCKS_PER_SSD (USER_BLOCKS_PER_CHANNEL * USER_CHANNELS)
237#define MB_PER_BLOCK ((BYTES_PER_DATA_REGION_OF_SLICE * SLICES_PER_BLOCK) / (1024 * 1024))
238#define MB_PER_SSD (USER_BLOCKS_PER_SSD * MB_PER_BLOCK)
239#define MB_PER_MIN_FREE_BLOCK_SPACE (USER_DIES * MB_PER_BLOCK)
240#define MB_PER_METADATA_BLOCK_SPACE (USER_DIES * MB_PER_BLOCK)
241#define MB_PER_OVER_PROVISION_BLOCK_SPACE ((USER_BLOCKS_PER_SSD / 10) * MB_PER_BLOCK)
void InitNandArray()
Send RESET and SET_FEATURE to all the flash dies.
void InitChCtlReg()
Initialize the base addresses of all channel controllers.
T4REGS chCtlReg[USER_CHANNELS]
void CheckConfigRestriction()
Check the configurations are legal before the initializations start.
void InitFTL()
The entry function for FTL initialization.
unsigned int storageCapacity_L