/* * Copyright (c) 2023 Nuvoton Technology Corporation. * * SPDX-License-Identifier: Apache-2.0 */ #ifndef ZEPHYR_DRIVERS_FLASH_NPCX_FIU_QSPI_H_ #define ZEPHYR_DRIVERS_FLASH_NPCX_FIU_QSPI_H_ #include #include "jesd216.h" #ifdef __cplusplus extern "C" { #endif /* UMA operation flags */ #define NPCX_UMA_ACCESS_WRITE BIT(0) #define NPCX_UMA_ACCESS_READ BIT(1) #define NPCX_UMA_ACCESS_ADDR BIT(2) /* Valid value of Dn_NADDRB that sets the number of address bytes in a transaction */ #define NPCX_DEV_NUM_ADDR_1BYTE 1 #define NPCX_DEV_NUM_ADDR_2BYTE 2 #define NPCX_DEV_NUM_ADDR_3BYTE 3 #define NPCX_DEV_NUM_ADDR_4BYTE 4 /* UMA operation configuration for a SPI device */ struct npcx_uma_cfg { uint8_t opcode; uint8_t *tx_buf; size_t tx_count; uint8_t *rx_buf; size_t rx_count; union { uint32_t u32; uint8_t u8[4]; } addr; }; /* QSPI bus configuration for a SPI device */ struct npcx_qspi_cfg { /* Type of Quad Enable bit in status register */ enum jesd216_dw15_qer_type qer_type; /* Pinctrl for QSPI bus */ const struct pinctrl_dev_config *pcfg; /* Enter four bytes address mode value */ uint8_t enter_4ba; /* SPI read access type of Direct Read Access mode */ uint8_t rd_mode; /* Configurations for the Quad-SPI peripherals */ int flags; }; /** * @brief Execute UMA transactions on qspi bus * * @param dev Pointer to the device structure for qspi bus controller instance. * @param cfg Pointer to the configuration of UMA transactions. * @param flags Flags to be used during transactions. * @retval 0 on success, -EPERM if an UMA transaction is not permitted. */ int qspi_npcx_fiu_uma_transceive(const struct device *dev, struct npcx_uma_cfg *cfg, uint32_t flags); /** * @brief Lock the mutex of npcx qspi bus controller and apply its configuration * * @param dev Pointer to the device structure for qspi bus controller instance. * @param cfg Pointer to the configuration for the device on qspi bus. * @param operation Qspi bus operation for the device. */ void qspi_npcx_fiu_mutex_lock_configure(const struct device *dev, const struct npcx_qspi_cfg *cfg, const uint32_t operation); /** * @brief Unlock the mutex of npcx qspi bus controller. * * @param dev Pointer to the device structure for qspi bus controller instance. */ void qspi_npcx_fiu_mutex_unlock(const struct device *dev); #ifdef __cplusplus } #endif #endif /* ZEPHYR_DRIVERS_FLASH_NPCX_FIU_QSPI_H_ */