diff options
Diffstat (limited to 'lib/chibios-contrib/ext/mcux-sdk/devices/MIMXRT1061/drivers/fsl_romapi.c')
-rw-r--r-- | lib/chibios-contrib/ext/mcux-sdk/devices/MIMXRT1061/drivers/fsl_romapi.c | 196 |
1 files changed, 196 insertions, 0 deletions
diff --git a/lib/chibios-contrib/ext/mcux-sdk/devices/MIMXRT1061/drivers/fsl_romapi.c b/lib/chibios-contrib/ext/mcux-sdk/devices/MIMXRT1061/drivers/fsl_romapi.c new file mode 100644 index 000000000..92684d794 --- /dev/null +++ b/lib/chibios-contrib/ext/mcux-sdk/devices/MIMXRT1061/drivers/fsl_romapi.c | |||
@@ -0,0 +1,196 @@ | |||
1 | /* | ||
2 | * Copyright 2017-2020 NXP | ||
3 | * All rights reserved. | ||
4 | * | ||
5 | * SPDX-License-Identifier: BSD-3-Clause | ||
6 | */ | ||
7 | |||
8 | #include "fsl_romapi.h" | ||
9 | |||
10 | /******************************************************************************* | ||
11 | * Definitions | ||
12 | ******************************************************************************/ | ||
13 | |||
14 | /* Component ID definition, used by tools. */ | ||
15 | #ifndef FSL_COMPONENT_ID | ||
16 | #define FSL_COMPONENT_ID "driver.romapi" | ||
17 | #endif | ||
18 | |||
19 | /******************************************************************************* | ||
20 | * Prototypes | ||
21 | ******************************************************************************/ | ||
22 | |||
23 | /*! | ||
24 | * @brief Interface for the ROM FLEXSPI NOR flash driver. | ||
25 | */ | ||
26 | typedef struct | ||
27 | { | ||
28 | uint32_t version; | ||
29 | status_t (*init)(uint32_t instance, flexspi_nor_config_t *config); | ||
30 | status_t (*program)(uint32_t instance, flexspi_nor_config_t *config, uint32_t dst_addr, const uint32_t *src); | ||
31 | status_t (*erase_all)(uint32_t instance, flexspi_nor_config_t *config); | ||
32 | status_t (*erase)(uint32_t instance, flexspi_nor_config_t *config, uint32_t start, uint32_t lengthInBytes); | ||
33 | status_t (*read)( | ||
34 | uint32_t instance, flexspi_nor_config_t *config, uint32_t *dst, uint32_t addr, uint32_t lengthInBytes); | ||
35 | void (*clear_cache)(uint32_t instance); | ||
36 | status_t (*xfer)(uint32_t instance, flexspi_xfer_t *xfer); | ||
37 | status_t (*update_lut)(uint32_t instance, uint32_t seqIndex, const uint32_t *lutBase, uint32_t seqNumber); | ||
38 | status_t (*get_config)(uint32_t instance, flexspi_nor_config_t *config, serial_nor_config_option_t *option); | ||
39 | } flexspi_nor_driver_interface_t; | ||
40 | |||
41 | /*! | ||
42 | * @brief Root of the bootloader api tree. | ||
43 | * | ||
44 | * An instance of this struct resides in read-only memory in the bootloader. It | ||
45 | * provides a user application access to APIs exported by the bootloader. | ||
46 | * | ||
47 | * @note The order of existing fields must not be changed. | ||
48 | */ | ||
49 | typedef struct | ||
50 | { | ||
51 | const uint32_t version; /*!< Bootloader version number */ | ||
52 | const char *copyright; /*!< Bootloader Copyright */ | ||
53 | void (*runBootloader)(void *arg); /*!< Function to start the bootloader executing */ | ||
54 | const uint32_t *reserved0; /*!< Reserved */ | ||
55 | const flexspi_nor_driver_interface_t *flexSpiNorDriver; /*!< FlexSPI NOR Flash API */ | ||
56 | const uint32_t *reserved1[5]; /*!< Reserved */ | ||
57 | } bootloader_api_entry_t; | ||
58 | |||
59 | /******************************************************************************* | ||
60 | * Variables | ||
61 | ******************************************************************************/ | ||
62 | |||
63 | #define g_bootloaderTree ((bootloader_api_entry_t *)*(uint32_t *)0x0020001cU) | ||
64 | |||
65 | /******************************************************************************* | ||
66 | * Codes | ||
67 | ******************************************************************************/ | ||
68 | |||
69 | /******************************************************************************* | ||
70 | * ROM FLEXSPI NOR driver | ||
71 | ******************************************************************************/ | ||
72 | #if defined(FSL_FEATURE_BOOT_ROM_HAS_ROMAPI) && FSL_FEATURE_BOOT_ROM_HAS_ROMAPI | ||
73 | |||
74 | #if defined(FSL_ROM_HAS_RUNBOOTLOADER_API) && FSL_ROM_HAS_RUNBOOTLOADER_API | ||
75 | /*! | ||
76 | * @brief Enter Bootloader. | ||
77 | * | ||
78 | * @param arg A pointer to the storage for the bootloader param. | ||
79 | * refer to System Boot Chapter in device reference manual for details. | ||
80 | */ | ||
81 | void ROM_RunBootloader(void *arg) | ||
82 | { | ||
83 | g_bootloaderTree->runBootloader(arg); | ||
84 | } | ||
85 | #endif /* FSL_ROM_HAS_RUNBOOTLOADER_API */ | ||
86 | |||
87 | /*! | ||
88 | * @brief Initialize Serial NOR devices via FLEXSPI. | ||
89 | * | ||
90 | * @param instance storge the instance of FLEXSPI. | ||
91 | * @param config A pointer to the storage for the driver runtime state. | ||
92 | */ | ||
93 | status_t ROM_FLEXSPI_NorFlash_Init(uint32_t instance, flexspi_nor_config_t *config) | ||
94 | { | ||
95 | return g_bootloaderTree->flexSpiNorDriver->init(instance, config); | ||
96 | } | ||
97 | |||
98 | /*! | ||
99 | * @brief Program data to Serial NOR via FLEXSPI. | ||
100 | * | ||
101 | * @param instance storge the instance of FLEXSPI. | ||
102 | * @param config A pointer to the storage for the driver runtime state. | ||
103 | * @param dstAddr A pointer to the desired flash memory to be programmed. | ||
104 | * @param src A pointer to the source buffer of data that is to be programmed | ||
105 | * into the NOR flash. | ||
106 | */ | ||
107 | status_t ROM_FLEXSPI_NorFlash_ProgramPage(uint32_t instance, | ||
108 | flexspi_nor_config_t *config, | ||
109 | uint32_t dstAddr, | ||
110 | const uint32_t *src) | ||
111 | { | ||
112 | return g_bootloaderTree->flexSpiNorDriver->program(instance, config, dstAddr, src); | ||
113 | } | ||
114 | |||
115 | #if defined(FSL_ROM_FLEXSPINOR_API_HAS_FEATURE_READ) && FSL_ROM_FLEXSPINOR_API_HAS_FEATURE_READ | ||
116 | /*! | ||
117 | * @brief Read data from Serial NOR | ||
118 | * | ||
119 | * @param instance storge the instance of FLEXSPI. | ||
120 | * @param config A pointer to the storage for the driver runtime state. | ||
121 | * @param dst A pointer to the dest buffer of data that is to be read from the NOR flash. | ||
122 | * @param lengthInBytes The length, given in bytes to be read. | ||
123 | */ | ||
124 | status_t ROM_FLEXSPI_NorFlash_Read( | ||
125 | uint32_t instance, flexspi_nor_config_t *config, uint32_t *dst, uint32_t addr, uint32_t lengthInBytes) | ||
126 | { | ||
127 | return g_bootloaderTree->flexSpiNorDriver->read(instance, config, dst, addr, lengthInBytes); | ||
128 | } | ||
129 | #endif /* FSL_ROM_FLEXSPINOR_API_HAS_FEATURE_READ */ | ||
130 | |||
131 | /*! | ||
132 | * @brief Erase Flash Region specified by address and length. | ||
133 | * | ||
134 | * @param instance storge the index of FLEXSPI. | ||
135 | * @param config A pointer to the storage for the driver runtime state. | ||
136 | * @param start The start address of the desired NOR flash memory to be erased. | ||
137 | * @param length The length, given in bytes to be erased. | ||
138 | */ | ||
139 | status_t ROM_FLEXSPI_NorFlash_Erase(uint32_t instance, flexspi_nor_config_t *config, uint32_t start, uint32_t length) | ||
140 | { | ||
141 | return g_bootloaderTree->flexSpiNorDriver->erase(instance, config, start, length); | ||
142 | } | ||
143 | |||
144 | #if defined(FSL_ROM_FLEXSPINOR_API_HAS_FEATURE_ERASE_ALL) && FSL_ROM_FLEXSPINOR_API_HAS_FEATURE_ERASE_ALL | ||
145 | /*! @brief Erase all the Serial NOR devices connected on FLEXSPI. */ | ||
146 | status_t ROM_FLEXSPI_NorFlash_EraseAll(uint32_t instance, flexspi_nor_config_t *config) | ||
147 | { | ||
148 | return g_bootloaderTree->flexSpiNorDriver->erase_all(instance, config); | ||
149 | } | ||
150 | #endif /* FSL_ROM_FLEXSPINOR_API_HAS_FEATURE_ERASE_ALL */ | ||
151 | |||
152 | #if defined(FSL_ROM_FLEXSPINOR_API_HAS_FEATURE_CMD_XFER) && FSL_ROM_FLEXSPINOR_API_HAS_FEATURE_CMD_XFER | ||
153 | /*! @brief FLEXSPI command */ | ||
154 | status_t ROM_FLEXSPI_NorFlash_CommandXfer(uint32_t instance, flexspi_xfer_t *xfer) | ||
155 | { | ||
156 | return g_bootloaderTree->flexSpiNorDriver->xfer(instance, xfer); | ||
157 | } | ||
158 | #endif /* FSL_ROM_FLEXSPINOR_API_HAS_FEATURE_CMD_XFER */ | ||
159 | |||
160 | #if defined(FSL_ROM_FLEXSPINOR_API_HAS_FEATURE_UPDATE_LUT) && FSL_ROM_FLEXSPINOR_API_HAS_FEATURE_UPDATE_LUT | ||
161 | /*! @brief Configure FLEXSPI Lookup table. */ | ||
162 | status_t ROM_FLEXSPI_NorFlash_UpdateLut(uint32_t instance, | ||
163 | uint32_t seqIndex, | ||
164 | const uint32_t *lutBase, | ||
165 | uint32_t seqNumber) | ||
166 | { | ||
167 | return g_bootloaderTree->flexSpiNorDriver->update_lut(instance, seqIndex, lutBase, seqNumber); | ||
168 | } | ||
169 | #endif /* FSL_ROM_FLEXSPINOR_API_HAS_FEATURE_UPDATE_LUT */ | ||
170 | |||
171 | /*! @brief Software reset for the FLEXSPI logic. */ | ||
172 | void ROM_FLEXSPI_NorFlash_ClearCache(uint32_t instance) | ||
173 | { | ||
174 | g_bootloaderTree->flexSpiNorDriver->clear_cache(instance); | ||
175 | } | ||
176 | |||
177 | #if defined(FSL_ROM_FLEXSPINOR_API_HAS_FEATURE_GET_CONFIG) && FSL_ROM_FLEXSPINOR_API_HAS_FEATURE_GET_CONFIG | ||
178 | /*! @brief Get FLEXSPI NOR Configuration Block based on specified option. */ | ||
179 | status_t ROM_FLEXSPI_NorFlash_GetConfig(uint32_t instance, | ||
180 | flexspi_nor_config_t *config, | ||
181 | serial_nor_config_option_t *option) | ||
182 | { | ||
183 | status_t status = g_bootloaderTree->flexSpiNorDriver->get_config(instance, config, option); | ||
184 | if (status == kStatus_Success) | ||
185 | { | ||
186 | if (config->memConfig.readSampleClkSrc == kFLEXSPIReadSampleClk_LoopbackInternally) | ||
187 | { | ||
188 | config->memConfig.readSampleClkSrc = kFLEXSPIReadSampleClk_LoopbackFromDqsPad; | ||
189 | } | ||
190 | } | ||
191 | |||
192 | return status; | ||
193 | } | ||
194 | #endif /* FSL_ROM_FLEXSPINOR_API_HAS_FEATURE_GET_CONFIG */ | ||
195 | |||
196 | #endif /* FSL_FEATURE_BOOT_ROM_HAS_ROMAPI */ | ||