Create common source code to use for supporting HyperFlash. Rename 'FLASH_NXP_S32_QSPI_NOR_SFDP_RUNTIME' to 'FLASH_NXP_S32_QSPI_SFDP_RUNTIME' as a common kconfig. Add the 'max-program-buffer-size' property to use for setting memory pageSize, instead of using 'CONFIG_FLASH_NXP_S32_QSPI_LAYOUT_PAGE_SIZE' for setting. Add the 'write-block-size' propertyto use for setting the number of bytes used in write operations, it also uses to instead of the 'memory-alignment' property. Signed-off-by: Cong Nguyen Huu <cong.nguyenhuu@nxp.com>
111 lines
3.1 KiB
C
111 lines
3.1 KiB
C
/*
|
|
* 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_ */
|