aboutsummaryrefslogtreecommitdiff
path: root/lib/chibios-contrib/ext/mcux-sdk/devices/MIMXRT1062/drivers/fsl_romapi.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/chibios-contrib/ext/mcux-sdk/devices/MIMXRT1062/drivers/fsl_romapi.c')
-rw-r--r--lib/chibios-contrib/ext/mcux-sdk/devices/MIMXRT1062/drivers/fsl_romapi.c196
1 files changed, 196 insertions, 0 deletions
diff --git a/lib/chibios-contrib/ext/mcux-sdk/devices/MIMXRT1062/drivers/fsl_romapi.c b/lib/chibios-contrib/ext/mcux-sdk/devices/MIMXRT1062/drivers/fsl_romapi.c
new file mode 100644
index 000000000..92684d794
--- /dev/null
+++ b/lib/chibios-contrib/ext/mcux-sdk/devices/MIMXRT1062/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 */
26typedef 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 */
49typedef 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 */
81void 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 */
93status_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 */
107status_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 */
124status_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 */
139status_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. */
146status_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 */
154status_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. */
162status_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. */
172void 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. */
179status_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 */