You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
111 lines
3.1 KiB
111 lines
3.1 KiB
/* |
|
* Copyright 2023-2024 NXP |
|
* |
|
* SPDX-License-Identifier: Apache-2.0 |
|
*/ |
|
|
|
#ifndef ZEPHYR_DRIVERS_FLASH_NXP_S32_QSPI_H_ |
|
#define ZEPHYR_DRIVERS_FLASH_NXP_S32_QSPI_H_ |
|
|
|
#include "jesd216.h" |
|
|
|
#define QSPI_ERASE_VALUE 0xff |
|
|
|
#define QSPI_IS_ALIGNED(addr, bits) (((addr) & BIT_MASK(bits)) == 0) |
|
|
|
#if defined(CONFIG_FLASH_NXP_S32_QSPI_SFDP_RUNTIME) |
|
/* Size of LUT */ |
|
#define QSPI_SFDP_LUT_SIZE 130U |
|
/* Size of init operations */ |
|
#define QSPI_SFDP_INIT_OP_SIZE 8U |
|
#if defined(CONFIG_FLASH_JESD216_API) |
|
/* Size of all LUT sequences for JESD216 operations */ |
|
#define QSPI_JESD216_SEQ_SIZE 8U |
|
#endif /* CONFIG_FLASH_JESD216_API */ |
|
#endif /* CONFIG_FLASH_NXP_S32_QSPI_SFDP_RUNTIME */ |
|
|
|
struct nxp_s32_qspi_config { |
|
const struct device *controller; |
|
struct flash_parameters flash_parameters; |
|
#if defined(CONFIG_FLASH_PAGE_LAYOUT) |
|
struct flash_pages_layout layout; |
|
#endif |
|
#if !defined(CONFIG_FLASH_NXP_S32_QSPI_SFDP_RUNTIME) |
|
const Qspi_Ip_MemoryConfigType memory_cfg; |
|
enum jesd216_dw15_qer_type qer_type; |
|
bool quad_mode; |
|
#endif |
|
}; |
|
|
|
struct nxp_s32_qspi_data { |
|
uint8_t instance; |
|
Qspi_Ip_MemoryConnectionType memory_conn_cfg; |
|
uint8_t read_sfdp_lut_idx; |
|
#if defined(CONFIG_FLASH_NXP_S32_QSPI_SFDP_RUNTIME) |
|
Qspi_Ip_MemoryConfigType memory_cfg; |
|
Qspi_Ip_InstrOpType lut_ops[QSPI_SFDP_LUT_SIZE]; |
|
Qspi_Ip_InitOperationType init_ops[QSPI_SFDP_INIT_OP_SIZE]; |
|
#endif |
|
#if defined(CONFIG_MULTITHREADING) |
|
struct k_sem sem; |
|
#endif |
|
}; |
|
|
|
static ALWAYS_INLINE Qspi_Ip_MemoryConfigType *get_memory_config(const struct device *dev) |
|
{ |
|
#if defined(CONFIG_FLASH_NXP_S32_QSPI_SFDP_RUNTIME) |
|
return &((struct nxp_s32_qspi_data *)dev->data)->memory_cfg; |
|
#else |
|
return ((Qspi_Ip_MemoryConfigType *)&((const struct nxp_s32_qspi_config *)dev->config) |
|
->memory_cfg); |
|
#endif |
|
} |
|
|
|
static inline void nxp_s32_qspi_lock(const struct device *dev) |
|
{ |
|
#ifdef CONFIG_MULTITHREADING |
|
struct nxp_s32_qspi_data *data = dev->data; |
|
|
|
k_sem_take(&data->sem, K_FOREVER); |
|
#else |
|
ARG_UNUSED(dev); |
|
#endif |
|
} |
|
|
|
static inline void nxp_s32_qspi_unlock(const struct device *dev) |
|
{ |
|
#ifdef CONFIG_MULTITHREADING |
|
struct nxp_s32_qspi_data *data = dev->data; |
|
|
|
k_sem_give(&data->sem); |
|
#else |
|
ARG_UNUSED(dev); |
|
#endif |
|
} |
|
|
|
/* |
|
* This function retrieves the device instance used by the HAL |
|
* to access the internal driver state. |
|
*/ |
|
uint8_t nxp_s32_qspi_register_device(void); |
|
|
|
int nxp_s32_qspi_wait_until_ready(const struct device *dev); |
|
|
|
int nxp_s32_qspi_read(const struct device *dev, off_t offset, void *dest, size_t size); |
|
|
|
int nxp_s32_qspi_write(const struct device *dev, off_t offset, const void *src, size_t size); |
|
|
|
int nxp_s32_qspi_erase(const struct device *dev, off_t offset, size_t size); |
|
|
|
const struct flash_parameters *nxp_s32_qspi_get_parameters(const struct device *dev); |
|
|
|
#if defined(CONFIG_FLASH_PAGE_LAYOUT) |
|
void nxp_s32_qspi_pages_layout(const struct device *dev, const struct flash_pages_layout **layout, |
|
size_t *layout_size); |
|
#endif /* CONFIG_FLASH_PAGE_LAYOUT */ |
|
|
|
#if defined(CONFIG_FLASH_JESD216_API) || !defined(CONFIG_FLASH_NXP_S32_QSPI_SFDP_RUNTIME) |
|
int nxp_s32_qspi_read_id(const struct device *dev, uint8_t *id); |
|
#endif /* CONFIG_FLASH_JESD216_API || !CONFIG_FLASH_NXP_S32_QSPI_SFDP_RUNTIME */ |
|
|
|
#endif /* ZEPHYR_DRIVERS_FLASH_NXP_S32_QSPI_H_ */
|
|
|