RTEMS 6.1-rc7
Loading...
Searching...
No Matches
fsl_romapi.h
1/*
2 * Copyright 2017-2020 NXP
3 * All rights reserved.
4 *
5 * SPDX-License-Identifier: BSD-3-Clause
6 */
7
8#ifndef _FSL_ROMAPI_H_
9#define _FSL_ROMAPI_H_
10
11#include "fsl_common.h"
12
19#define FSL_ROM_ROMAPI_VERSION (MAKE_VERSION(1U, 1U, 1U))
21#define FSL_ROM_FLEXSPINOR_DRIVER_VERSION (MAKE_VERSION(1U, 4U, 0U))
22
27/* @brief ROM has FLEXSPI NOR API. */
28#define FSL_ROM_HAS_FLEXSPINOR_API (1)
29/* @brief ROM has run bootloader API. */
30#define FSL_ROM_HAS_RUNBOOTLOADER_API (0)
31/* @brief ROM has FLEXSPI NOR get config API. */
32#define FSL_ROM_FLEXSPINOR_API_HAS_FEATURE_GET_CONFIG (0)
33/* @brief ROM has flash init API. */
34#define FSL_ROM_FLEXSPINOR_API_HAS_FEATURE_FLASH_INIT (1)
35/* @brief ROM has erase API. */
36#define FSL_ROM_FLEXSPINOR_API_HAS_FEATURE_ERASE (1)
37/* @brief ROM has erase sector API. */
38#define FSL_ROM_FLEXSPINOR_API_HAS_FEATURE_ERASE_SECTOR (1)
39/* @brief ROM has erase block API. */
40#define FSL_ROM_FLEXSPINOR_API_HAS_FEATURE_ERASE_BLOCK (0)
41/* @brief ROM has erase all API. */
42#define FSL_ROM_FLEXSPINOR_API_HAS_FEATURE_ERASE_ALL (1)
43/* @brief ROM has page program API. */
44#define FSL_ROM_FLEXSPINOR_API_HAS_FEATURE_PAGE_PROGRAM (1)
45/* @brief ROM has update lut API. */
46#define FSL_ROM_FLEXSPINOR_API_HAS_FEATURE_UPDATE_LUT (1)
47/* @brief ROM has FLEXSPI command API. */
48#define FSL_ROM_FLEXSPINOR_API_HAS_FEATURE_CMD_XFER (1)
49
52#define kROM_StatusGroup_FLEXSPI 60U
53#define kROM_StatusGroup_FLEXSPINOR 200U
55#define FSL_ROM_FLEXSPI_LUT_SEQ(cmd0, pad0, op0, cmd1, pad1, op1) \
56 (FLEXSPI_LUT_OPERAND0(op0) | FLEXSPI_LUT_NUM_PADS0(pad0) | FLEXSPI_LUT_OPCODE0(cmd0) | FLEXSPI_LUT_OPERAND1(op1) | \
57 FLEXSPI_LUT_NUM_PADS1(pad1) | FLEXSPI_LUT_OPCODE1(cmd1))
58
60#define FSL_ROM_FLEXSPI_BITMASK(bit_offset) (1U << (bit_offset))
61
63#define FLEXSPI_CFG_BLK_TAG (0x42464346UL)
64#define FLEXSPI_CFG_BLK_VERSION (0x56010400UL)
66#define CMD_SDR 0x01U
67#define CMD_DDR 0x21U
68#define RADDR_SDR 0x02U
69#define RADDR_DDR 0x22U
70#define CADDR_SDR 0x03U
71#define CADDR_DDR 0x23U
72#define MODE1_SDR 0x04U
73#define MODE1_DDR 0x24U
74#define MODE2_SDR 0x05U
75#define MODE2_DDR 0x25U
76#define MODE4_SDR 0x06U
77#define MODE4_DDR 0x26U
78#define MODE8_SDR 0x07U
79#define MODE8_DDR 0x27U
80#define WRITE_SDR 0x08U
81#define WRITE_DDR 0x28U
82#define READ_SDR 0x09U
83#define READ_DDR 0x29U
84#define LEARN_SDR 0x0AU
85#define LEARN_DDR 0x2AU
86#define DATSZ_SDR 0x0BU
87#define DATSZ_DDR 0x2BU
88#define DUMMY_SDR 0x0CU
89#define DUMMY_DDR 0x2CU
90#define DUMMY_RWDS_SDR 0x0DU
91#define DUMMY_RWDS_DDR 0x2DU
92#define JMP_ON_CS 0x1FU
93#define STOP 0U
94
95#define FLEXSPI_1PAD 0U
96#define FLEXSPI_2PAD 1U
97#define FLEXSPI_4PAD 2U
98#define FLEXSPI_8PAD 3U
99
100/* Lookup table related defintions */
101#define NOR_CMD_INDEX_READ 0U
102#define NOR_CMD_INDEX_READSTATUS 1U
103#define NOR_CMD_INDEX_WRITEENABLE 2U
104#define NOR_CMD_INDEX_ERASESECTOR 3U
105#define NOR_CMD_INDEX_PAGEPROGRAM 4U
106#define NOR_CMD_INDEX_CHIPERASE 5U
107#define NOR_CMD_INDEX_DUMMY 6U
108#define NOR_CMD_INDEX_ERASEBLOCK 7U
109
115#define NOR_CMD_LUT_SEQ_IDX_READ 0U
116#define NOR_CMD_LUT_SEQ_IDX_READSTATUS 1U
117#define NOR_CMD_LUT_SEQ_IDX_READSTATUS_XPI \
118 2U
119#define NOR_CMD_LUT_SEQ_IDX_WRITEENABLE 3U
120#define NOR_CMD_LUT_SEQ_IDX_WRITEENABLE_XPI \
121 4U
122#define NOR_CMD_LUT_SEQ_IDX_ERASESECTOR 5U
123#define NOR_CMD_LUT_SEQ_IDX_ERASEBLOCK 8U
124#define NOR_CMD_LUT_SEQ_IDX_PAGEPROGRAM 9U
125#define NOR_CMD_LUT_SEQ_IDX_CHIPERASE 11U
126#define NOR_CMD_LUT_SEQ_IDX_READ_SFDP 13U
127#define NOR_CMD_LUT_SEQ_IDX_RESTORE_NOCMD \
128 14U
129#define NOR_CMD_LUT_SEQ_IDX_EXIT_NOCMD \
130 15U
137enum
138{
139 kSerialFlash_1Pad = 1U,
140 kSerialFlash_2Pads = 2U,
141 kSerialFlash_4Pads = 4U,
142 kSerialFlash_8Pads = 8U,
143};
144
146enum
147{
150};
151
154{
155 kFLEXSPIReadSampleClk_LoopbackInternally = 0U,
156 kFLEXSPIReadSampleClk_LoopbackFromDqsPad = 1U,
157 kFLEXSPIReadSampleClk_LoopbackFromSckPad = 2U,
158 kFLEXSPIReadSampleClk_ExternalInputFromDqsPad = 3U,
159};
160
162enum
163{
165};
166
168enum
169{
176};
177
180{
181 kFLEXSPISerialClk_NoChange = 0U,
182 kFLEXSPISerialClk_30MHz = 1U,
183 kFLEXSPISerialClk_50MHz = 2U,
184 kFLEXSPISerialClk_60MHz = 3U,
185 kFLEXSPISerialClk_75MHz = 4U,
186 kFLEXSPISerialClk_80MHz = 5U,
187 kFLEXSPISerialClk_100MHz = 6U,
188 kFLEXSPISerialClk_133MHz = 7U,
189 kFLEXSPISerialClk_166MHz = 8U,
190 kFLEXSPISerialClk_200MHz = 9U,
191};
192
194enum
195{
204};
205
206enum
207{
213};
214
223typedef struct _flexspi_lut_seq
224{
225 uint8_t seqNum;
226 uint8_t seqId;
227 uint16_t reserved;
229
230typedef struct
231{
232 uint8_t time_100ps;
233 uint8_t delay_cells;
235
238{
239 uint32_t tag;
240 uint32_t version;
241 uint32_t reserved0;
243 uint8_t csHoldTime;
244 uint8_t csSetupTime;
254 uint32_t deviceModeArg;
256 uint8_t configModeType[3];
259 uint32_t reserved1;
260 uint32_t configCmdArgs[3];
261 uint32_t reserved2;
264 uint8_t deviceType;
268 uint8_t
271 uint32_t reserved3[2];
272 uint32_t sflashA1Size;
273 uint32_t sflashA2Size;
274 uint32_t sflashB1Size;
275 uint32_t sflashB2Size;
280 uint32_t timeoutInMs;
283 uint16_t busyOffset;
286 uint32_t lookupTable[64];
288 uint32_t reserved4[4];
290
292typedef struct _flexspi_nor_config
293{
295 uint32_t pageSize;
296 uint32_t sectorSize;
297 uint8_t ipcmdSerialClkFreq;
298 uint8_t isUniformBlockSize;
299 uint8_t isDataOrderSwapped;
300 uint8_t reserved0[1];
301 uint8_t serialNorType;
302 uint8_t needExitNoCmdMode;
303 uint8_t halfClkForNonReadCmd;
304 uint8_t needRestoreNoCmdMode;
305 uint32_t blockSize;
306 uint32_t reserve2[11];
308
312enum
313{
318};
319
322{
333};
334
336{
341 kFLEXSPIOperation_End = kFLEXSPIOperation_Read,
342} flexspi_operation_t;
343
345typedef struct _flexspi_xfer
346{
348 uint32_t baseAddress;
349 uint32_t seqId;
350 uint32_t seqNum;
352 uint32_t *txBuffer;
353 uint32_t txSize;
354 uint32_t *rxBuffer;
355 uint32_t rxSize;
357
358#ifdef __cplusplus
359extern "C" {
360#endif
361
362#if defined(FSL_FEATURE_BOOT_ROM_HAS_ROMAPI) && FSL_FEATURE_BOOT_ROM_HAS_ROMAPI
363
383status_t ROM_FLEXSPI_NorFlash_Init(uint32_t instance, flexspi_nor_config_t *config);
384
413status_t ROM_FLEXSPI_NorFlash_ProgramPage(uint32_t instance,
415 uint32_t dstAddr,
416 const uint32_t *src);
417
424#if defined(FSL_ROM_FLEXSPINOR_API_HAS_FEATURE_ERASE_SECTOR) && FSL_ROM_FLEXSPINOR_API_HAS_FEATURE_ERASE_SECTOR
444status_t ROM_FLEXSPI_NorFlash_EraseSector(uint32_t instance, flexspi_nor_config_t *config, uint32_t address);
445#endif /* FSL_ROM_FLEXSPINOR_API_HAS_FEATURE_ERASE_SECTOR */
446
447#if defined(FSL_ROM_FLEXSPINOR_API_HAS_FEATURE_ERASE_ALL) && FSL_ROM_FLEXSPINOR_API_HAS_FEATURE_ERASE_ALL
460status_t ROM_FLEXSPI_NorFlash_EraseAll(uint32_t instance, flexspi_nor_config_t *config);
461#endif /* FSL_ROM_FLEXSPINOR_API_HAS_FEATURE_ERASE_ALL */
462
487status_t ROM_FLEXSPI_NorFlash_Erase(uint32_t instance, flexspi_nor_config_t *config, uint32_t start, uint32_t length);
488
496#if defined(FSL_ROM_FLEXSPINOR_API_HAS_FEATURE_CMD_XFER) && FSL_ROM_FLEXSPINOR_API_HAS_FEATURE_CMD_XFER
510status_t ROM_FLEXSPI_NorFlash_CommandXfer(uint32_t instance, flexspi_xfer_t *xfer);
511#endif /* FSL_ROM_FLEXSPINOR_API_HAS_FEATURE_CMD_XFER */
518#if defined(FSL_ROM_FLEXSPINOR_API_HAS_FEATURE_UPDATE_LUT) && FSL_ROM_FLEXSPINOR_API_HAS_FEATURE_UPDATE_LUT
532status_t ROM_FLEXSPI_NorFlash_UpdateLut(uint32_t instance,
533 uint32_t seqIndex,
534 const uint32_t *lutBase,
535 uint32_t seqNumber);
536#endif /* FSL_ROM_FLEXSPINOR_API_HAS_FEATURE_UPDATE_LUT */
537
553void ROM_FLEXSPI_NorFlash_ClearCache(uint32_t instance);
554
557#endif /* FSL_FEATURE_BOOT_ROM_HAS_ROMAPI */
558
559#ifdef __cplusplus
560}
561#endif
562
565#endif /* _FSL_ROMAPI_H_ */
int32_t status_t
Type used for all status and error return values.
Definition: fsl_common.h:225
#define MAKE_STATUS(group, code)
Construct a status code value from a group and code number.
Definition: fsl_common.h:47
flexspi_mem_config_t memConfig
Common memory configuration info via FlexSPI.
Definition: fsl_flexspi_nor_config.h:276
_flexspi_nor_status
ROM FLEXSPI NOR flash status.
Definition: fsl_romapi.h:322
uint32_t commandInterval
Definition: fsl_romapi.h:281
uint8_t readSampleClkSrc
Definition: fsl_romapi.h:242
uint16_t waitTimeCfgCommands
Definition: fsl_romapi.h:250
uint32_t reserved0
Definition: fsl_romapi.h:241
uint32_t seqNum
Definition: fsl_romapi.h:350
bool isParallelModeEnable
Definition: fsl_romapi.h:351
uint32_t rxSize
Definition: fsl_romapi.h:355
uint8_t configModeType[3]
Definition: fsl_romapi.h:256
uint32_t sflashB1Size
Definition: fsl_romapi.h:274
uint8_t seqNum
Definition: fsl_romapi.h:225
uint8_t ipcmdSerialClkFreq
Clock frequency for IP command.
Definition: fsl_flexspi_nor_config.h:279
uint32_t dqsPadSettingOverride
Definition: fsl_romapi.h:279
uint32_t blockSize
Block size.
Definition: fsl_flexspi_nor_config.h:287
uint32_t reserved3[2]
Definition: fsl_romapi.h:271
uint8_t halfClkForNonReadCmd
Half the Serial Clock for non-read command: true/false.
Definition: fsl_flexspi_nor_config.h:285
uint16_t busyBitPolarity
Definition: fsl_romapi.h:284
#define kROM_StatusGroup_FLEXSPINOR
Definition: fsl_romapi.h:53
uint8_t deviceModeType
Definition: fsl_romapi.h:248
flexspi_dll_time_t dataValidTime[2]
Definition: fsl_romapi.h:282
uint32_t configCmdArgs[3]
Definition: fsl_romapi.h:260
uint32_t * txBuffer
Definition: fsl_romapi.h:352
uint8_t seqId
Definition: fsl_romapi.h:226
uint32_t deviceModeArg
Definition: fsl_romapi.h:254
uint8_t serialNorType
Serial NOR Flash type: 0/1/2/3.
Definition: fsl_flexspi_nor_config.h:283
uint32_t version
Definition: fsl_romapi.h:240
uint32_t reserve2[10]
Reserved for future use.
Definition: fsl_flexspi_nor_config.h:289
uint8_t lutCustomSeqEnable
Definition: fsl_romapi.h:269
uint32_t sflashA2Size
Definition: fsl_romapi.h:273
#define kROM_StatusGroup_FLEXSPI
Definition: fsl_romapi.h:52
struct _flexspi_nor_config flexspi_nor_config_t
Serial NOR configuration block.
uint32_t * rxBuffer
Definition: fsl_romapi.h:354
uint8_t serialClkFreq
Definition: fsl_romapi.h:266
_flexspi_serial_clk_freq
Defintions for FLEXSPI Serial Clock Frequency.
Definition: fsl_romapi.h:180
uint32_t sflashB2Size
Definition: fsl_romapi.h:275
uint8_t reserved0
Reserved for future use.
Definition: fsl_flexspi_nor_config.h:282
uint8_t columnAddressWidth
Definition: fsl_romapi.h:245
flexspi_operation_t operation
Definition: fsl_romapi.h:347
uint16_t busyOffset
Definition: fsl_romapi.h:283
_flexspi_operation
Definition: fsl_romapi.h:336
enum _flexspi_operation flexspi_operation_t
FLEXSPI Operation Context.
uint32_t sflashA1Size
Definition: fsl_romapi.h:272
uint8_t isUniformBlockSize
Sector/Block size is the same.
Definition: fsl_flexspi_nor_config.h:280
uint32_t dataPadSettingOverride
Definition: fsl_romapi.h:278
uint8_t time_100ps
Definition: fsl_romapi.h:232
uint8_t configCmdEnable
Definition: fsl_romapi.h:255
flexspi_lut_seq_t lutCustomSeq[12]
Definition: fsl_romapi.h:287
uint8_t csHoldTime
Definition: fsl_romapi.h:243
flexspi_lut_seq_t deviceModeSeq
Definition: fsl_romapi.h:252
uint32_t lookupTable[64]
Definition: fsl_romapi.h:286
uint32_t seqId
Definition: fsl_romapi.h:349
uint32_t baseAddress
Definition: fsl_romapi.h:348
uint32_t timeoutInMs
Definition: fsl_romapi.h:280
uint8_t deviceType
Definition: fsl_romapi.h:264
struct _flexspi_xfer flexspi_xfer_t
FLEXSPI Transfer Context.
uint8_t sflashPadType
Definition: fsl_romapi.h:265
struct _flexspi_lut_seq flexspi_lut_seq_t
FLEXSPI LUT Sequence structure.
struct _flexspi_mem_config flexspi_mem_config_t
FLEXSPI Memory Configuration Block.
uint32_t sclkPadSettingOverride
Definition: fsl_romapi.h:277
uint32_t reserved2
Definition: fsl_romapi.h:261
uint32_t pageSize
Page size of Serial NOR.
Definition: fsl_flexspi_nor_config.h:277
uint32_t tag
Definition: fsl_romapi.h:239
flexspi_lut_seq_t configCmdSeqs[3]
Definition: fsl_romapi.h:258
uint8_t deviceModeCfgEnable
Definition: fsl_romapi.h:247
uint8_t needExitNoCmdMode
Need to exit NoCmd mode before other IP command.
Definition: fsl_flexspi_nor_config.h:284
uint32_t csPadSettingOverride
Definition: fsl_romapi.h:276
uint32_t sectorSize
Sector size of Serial NOR.
Definition: fsl_flexspi_nor_config.h:278
uint32_t controllerMiscOption
Definition: fsl_romapi.h:262
uint32_t reserved1
Definition: fsl_romapi.h:259
uint32_t txSize
Definition: fsl_romapi.h:353
uint8_t isDataOrderSwapped
The data order is swapped in OPI DDR mode (only i.MXRT11*)
Definition: fsl_flexspi_nor_config.h:281
uint8_t delay_cells
Definition: fsl_romapi.h:233
uint8_t needRestoreNoCmdMode
Need to Restore NoCmd mode after IP commmand execution.
Definition: fsl_flexspi_nor_config.h:286
uint8_t csSetupTime
Definition: fsl_romapi.h:244
uint32_t reserved4[4]
Definition: fsl_romapi.h:288
_flexspi_read_sample_clk
FLEXSPI Read Sample Clock Source definition.
Definition: fsl_romapi.h:154
@ kStatus_ROM_FLEXSPI_InvalidSequence
Definition: fsl_romapi.h:325
@ kStatus_FLEXSPINOR_DTRRead_DummyProbeFailed
Definition: fsl_romapi.h:327
@ kStatus_ROM_FLEXSPINOR_SFDP_NotFound
Definition: fsl_romapi.h:329
@ kStatus_ROM_FLEXSPI_SequenceExecutionTimeout
Definition: fsl_romapi.h:323
@ kStatus_ROM_FLEXSPI_DeviceTimeout
Definition: fsl_romapi.h:326
@ kStatus_ROM_FLEXSPINOR_Flash_NotFound
Definition: fsl_romapi.h:331
@ kSerialNorType_StandardSPI
Definition: fsl_romapi.h:208
@ kSerialNorType_HyperBus
Definition: fsl_romapi.h:209
@ kSerialNorType_XPI
Definition: fsl_romapi.h:210
@ kSerialNorType_NoCmd
Definition: fsl_romapi.h:211
@ kFLEXSPIClk_DDR
Definition: fsl_romapi.h:149
@ kFLEXSPIClk_SDR
Definition: fsl_romapi.h:148
@ kFLEXSPIOperation_Write
Definition: fsl_romapi.h:339
@ kFLEXSPIOperation_Command
Definition: fsl_romapi.h:337
@ kFLEXSPIOperation_Read
Definition: fsl_romapi.h:340
@ kFLEXSPIOperation_Config
Definition: fsl_romapi.h:338
@ kFLEXSPIMiscOffset_WordAddressableEnable
Definition: fsl_romapi.h:199
@ kFLEXSPIMiscOffset_DiffClkEnable
Definition: fsl_romapi.h:196
@ kFLEXSPIMiscOffset_ParallelEnable
Definition: fsl_romapi.h:198
@ kFLEXSPIMiscOffset_DdrModeEnable
Definition: fsl_romapi.h:202
@ kFLEXSPIMiscOffset_PadSettingOverrideEnable
Definition: fsl_romapi.h:201
@ kFLEXSPIMiscOffset_SafeConfigFreqEnable
Definition: fsl_romapi.h:200
@ kFLEXSPIMiscOffset_Ck2Enable
Definition: fsl_romapi.h:197
@ kFLEXSPIMiscOffset_UseValidTimeForAllFreq
Definition: fsl_romapi.h:203
@ kSerialFlash_Cypress_ManufacturerID
Definition: fsl_romapi.h:317
@ kSerialFlash_Adesto_ManufacturerID
Definition: fsl_romapi.h:315
@ kSerialFlash_Winbond_ManufacturerID
Definition: fsl_romapi.h:316
@ kSerialFlash_ISSI_ManufacturerID
Definition: fsl_romapi.h:314
@ kDeviceConfigCmdType_Generic
Definition: fsl_romapi.h:170
@ kDeviceConfigCmdType_QuadEnable
Definition: fsl_romapi.h:171
@ kDeviceConfigCmdType_Reset
Definition: fsl_romapi.h:175
@ kDeviceConfigCmdType_Spi2Xpi
Definition: fsl_romapi.h:172
@ kDeviceConfigCmdType_Spi2NoCmd
Definition: fsl_romapi.h:174
@ kDeviceConfigCmdType_Xpi2Spi
Definition: fsl_romapi.h:173
@ kFLEXSPIDeviceType_SerialNOR
Definition: fsl_romapi.h:164
FlexSPI Memory Configuration Block.
Definition: fsl_flexspi_nor_config.h:189
FLEXSPI LUT Sequence structure.
Definition: fsl_romapi.h:224
FLEXSPI Memory Configuration Block.
Definition: fsl_romapi.h:238
Serial NOR configuration block.
Definition: fsl_flexspi_nor_config.h:275
FLEXSPI Transfer Context.
Definition: fsl_romapi.h:346
Definition: deflate.c:114
FLEXSPI DLL time.
Definition: fsl_romapi.h:231