| /* |
| * Copyright (c) 2023 Nuvoton Technology Corporation. |
| * |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| #ifndef _NUVOTON_NPCX_SOC_ESPI_TAF_H_ |
| #define _NUVOTON_NPCX_SOC_ESPI_TAF_H_ |
| |
| #include <zephyr/device.h> |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| /* Transmit buffer for eSPI TAF transaction on NPCX */ |
| /* +-------------+--------------+--------------+---------------+ */ |
| /* | Byte 3 | Byte 2 | Byte 1 | Byte 0 | */ |
| /* +-------------+--------------+--------------+---------------+ */ |
| /* | Length | Tag |Length | Type | PKT_LEN | */ |
| /* | [7:0] | |[11:8] | | | */ |
| /* +-------------+--------------+--------------+---------------+ */ |
| /* | Data 3 | Data 2 | Data 1 | Data 0 | */ |
| /* +-------------+--------------+--------------+---------------+ */ |
| /* | Data 7 | Data 6 | Data 5 | Data 4 | */ |
| /* +-------------+--------------+--------------+---------------+ */ |
| /* | ... | ... | ... | ... | */ |
| /* +-------------+--------------+--------------+---------------+ */ |
| /* | Data 63 | Data 62 | Data 61 | Data 60 | */ |
| /* +-------------+--------------+--------------+---------------+ */ |
| /* PKT_LEN holds the sum of header (Type, Tag and Length) length */ |
| /* and data length */ |
| |
| /* |
| * NPCX_TAF_CMP_HEADER_LEN is the preamble length of Type, Length |
| * and Tag (i.e. byte 1~byte 3) for flash access completion packet |
| * on NPCX |
| */ |
| #define NPCX_TAF_CMP_HEADER_LEN 3 |
| |
| /* Successful Completion Without Data */ |
| #define CYC_SCS_CMP_WITHOUT_DATA 0x06 |
| /* Successful middle Completion With Data */ |
| #define CYC_SCS_CMP_WITH_DATA_MIDDLE 0x09 |
| /* Successful first Completion With Data */ |
| #define CYC_SCS_CMP_WITH_DATA_FIRST 0x0B |
| /* Successful last Completion With Data */ |
| #define CYC_SCS_CMP_WITH_DATA_LAST 0x0D |
| /* Successful only Completion With Data */ |
| #define CYC_SCS_CMP_WITH_DATA_ONLY 0x0F |
| /* Unsuccessful Completion Without Data */ |
| #define CYC_UNSCS_CMP_WITHOUT_DATA 0x08 |
| /* Unsuccessful Last Completion Without Data */ |
| #define CYC_UNSCS_CMP_WITHOUT_DATA_LAST 0x0C |
| /* Unsuccessful Only Completion Without Data */ |
| #define CYC_UNSCS_CMP_WITHOUT_DATA_ONLY 0x0E |
| |
| /* Timeout for checking transmit buffer available and no completion was sent */ |
| #define NPCX_FLASH_CHK_TIMEOUT 10000 |
| |
| /* Clear RSTBUFHEADS, FLASH_ACC_TX_AVAIL, and FLASH_ACC_NP_FREE */ |
| #define NPCX_FLASHCTL_ACCESS_MASK (~(BIT(NPCX_FLASHCTL_RSTBUFHEADS) | \ |
| BIT(NPCX_FLASHCTL_FLASH_NP_FREE) | \ |
| BIT(NPCX_FLASHCTL_FLASH_TX_AVAIL))) |
| |
| /* Flash Sharing Capability Support */ |
| #define NPCX_FLASH_SHARING_CAP_SUPP_CAF 0 |
| #define NPCX_FLASH_SHARING_CAP_SUPP_TAF 2 |
| #define NPCX_FLASH_SHARING_CAP_SUPP_TAF_AND_CAF 3 |
| |
| enum NPCX_ESPI_TAF_REQ { |
| NPCX_ESPI_TAF_REQ_READ, |
| NPCX_ESPI_TAF_REQ_WRITE, |
| NPCX_ESPI_TAF_REQ_ERASE, |
| NPCX_ESPI_TAF_REQ_RPMC_OP1, |
| NPCX_ESPI_TAF_REQ_RPMC_OP2, |
| NPCX_ESPI_TAF_REQ_UNKNOWN, |
| }; |
| |
| /* NPCX_ESPI_TAF_ERASE_BLOCK_SIZE_4KB is default */ |
| enum NPCX_ESPI_TAF_ERASE_BLOCK_SIZE { |
| NPCX_ESPI_TAF_ERASE_BLOCK_SIZE_1KB, |
| NPCX_ESPI_TAF_ERASE_BLOCK_SIZE_2KB, |
| NPCX_ESPI_TAF_ERASE_BLOCK_SIZE_4KB, |
| NPCX_ESPI_TAF_ERASE_BLOCK_SIZE_8KB, |
| NPCX_ESPI_TAF_ERASE_BLOCK_SIZE_16KB, |
| NPCX_ESPI_TAF_ERASE_BLOCK_SIZE_32KB, |
| NPCX_ESPI_TAF_ERASE_BLOCK_SIZE_64KB, |
| NPCX_ESPI_TAF_ERASE_BLOCK_SIZE_128KB, |
| }; |
| |
| /* NPCX_ESPI_TAF_MAX_READ_REQ_64B is default */ |
| enum NPCX_ESPI_TAF_MAX_READ_REQ { |
| NPCX_ESPI_TAF_MAX_READ_REQ_64B = 1, |
| NPCX_ESPI_TAF_MAX_READ_REQ_128B, |
| NPCX_ESPI_TAF_MAX_READ_REQ_256B, |
| NPCX_ESPI_TAF_MAX_READ_REQ_512B, |
| NPCX_ESPI_TAF_MAX_READ_REQ_1024B, |
| NPCX_ESPI_TAF_MAX_READ_REQ_2048B, |
| NPCX_ESPI_TAF_MAX_READ_REQ_4096B, |
| }; |
| |
| /* |
| * The configurations of SPI flash are set in FIU module. |
| * Thus, eSPI TAF driver of NPCX does not need additional hardware configuarations. |
| * Therefore, define an empty structure here to comply with espi_saf.h |
| */ |
| struct espi_saf_hw_cfg { |
| }; |
| |
| struct espi_saf_pr { |
| uint32_t start; |
| uint32_t end; |
| uint16_t override_r; |
| uint16_t override_w; |
| uint8_t master_bm_we; |
| uint8_t master_bm_rd; |
| uint8_t pr_num; |
| uint8_t flags; |
| }; |
| |
| struct espi_saf_protection { |
| size_t nregions; |
| const struct espi_saf_pr *pregions; |
| }; |
| |
| struct espi_taf_npcx_pckt { |
| uint8_t tag; |
| uint8_t *data; |
| }; |
| |
| struct espi_taf_pckt { |
| uint8_t type; |
| uint8_t tag; |
| uint32_t addr; |
| uint16_t len; |
| uint32_t src[16]; |
| }; |
| |
| struct npcx_taf_head { |
| uint8_t pkt_len; |
| uint8_t type; |
| uint8_t tag_hlen; |
| uint8_t llen; |
| }; |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif |