| /* |
| * Copyright (c) 2021 Microchip Technology Inc. and its subsidiaries. |
| * |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| #ifndef _MEC_QSPI_H_ |
| #define _MEC_QSPI_H_ |
| |
| #include <stdint.h> |
| #include <stddef.h> |
| |
| #define QMPSPI_HW_VER 4u |
| |
| #define MCHP_QMSPI_BASE_ADDR 0x40070000u |
| |
| #define MCHP_QMSPI_MAX_DESCR 16u |
| |
| #define MCHP_QMSPI_INPUT_CLOCK_FREQ_HZ 96000000u |
| #define MCHP_QMSPI_MAX_FREQ_KHZ \ |
| ((MCHP_QMSPI_INPUT_CLOCK_FREQ_HZ) / 1000u) |
| #define MCHP_QMSPI_MIN_FREQ_KHZ (MCHP_QMSPI_MAX_FREQ_KHZ / 256u) |
| |
| /* Mode 0: Clock idle = Low. Data change falling edge, sample rising edge */ |
| #define MCHP_QMSPI_SPI_MODE0 0u |
| /* Mode 1: Clock idle = Low. Data change rising edge, sample falling edge */ |
| #define MCHP_QMSPI_SPI_MODE1 0x06u |
| /* Mode 2: Clock idle = High. Data change rising edge, sample falling edge */ |
| #define MCHP_QMSPI_SPI_MODE2 0x06u |
| /* Mode 3: Clock idle = High. Data change falling edge, sample rising edge */ |
| #define MCHP_QMSPI_SPI_MODE3 0x07u |
| |
| /* Device ID used in DMA channel Control.DeviceID field */ |
| #define MCHP_QMSPI_TX_DMA_REQ_ID 10u |
| #define MCHP_QMSPI_RX_DMA_REQ_ID 11u |
| |
| /* QMSPI transmit and receive FIFO lengths */ |
| #define MCHP_QMSPI_TX_FIFO_LEN 8u |
| #define MCHP_QMSPI_RX_FIFO_LEN 8u |
| |
| /* QMSPI Local DMA channels */ |
| #define MCHP_QMSPI_LDMA_RX_CHANNELS 3u |
| #define MCHP_QMSPI_LDMA_TX_CHANNELS 3u |
| |
| #define MCHP_QMSPI_M_ACT_SRST_OFS 0u |
| #define MCHP_QMSPI_M_SPI_MODE_OFS 1u |
| #define MCHP_QMSPI_M_CLK_DIV_OFS 2u |
| #define MCHP_QMSPI_CTRL_OFS 4u |
| #define MCHP_QMSPI_EXE_OFS 8u |
| #define MCHP_QMSPI_IF_CTRL_OFS 0x0cu |
| #define MCHP_QMSPI_STS_OFS 0x10u |
| #define MCHP_QMSPI_BUF_CNT_STS_OFS 0x14u |
| #define MCHP_QMSPI_IEN_OFS 0x18u |
| #define MCHP_QMSPI_BUF_CNT_TRIG_OFS 0x1cu |
| #define MCHP_QMSPI_TX_FIFO_OFS 0x20u |
| #define MCHP_QMSPI_RX_FIFO_OFS 0x24u |
| #define MCHP_QMSPI_CSTM_OFS 0x28u |
| /* 0 <= n < MCHP_QMSPI_MAX_DESCR */ |
| #define MCHP_QMSPI_DESC0_OFS 0x30u |
| #define MCHP_QMSPI_DESCR_OFS(n) (0x30u + ((uint32_t)(n) * 4u)) |
| #define MCHP_QMSPI_ALIAS_CTRL_OFS 0xb0u |
| #define MCHP_QMSPI_MODE_ALT1_OFS 0xc0u |
| #define MCHP_QMSPI_TAPS_OFS 0xd0u |
| #define MCHP_QMSPI_TAPS_ADJ_OFS 0xd4u |
| #define MCHP_QMSPI_TAPS_CTRL_OFS 0xd8u |
| #define MCHP_QMSPI_LDMA_RX_EN_OFS 0x100u |
| #define MCHP_QMSPI_LDMA_TX_EN_OFS 0x104u |
| #define MCHP_QMSPI_LDMA_RX_0_CTRL_OFS 0x110u |
| #define MCHP_QMSPI_LDMA_RX_0_START_OFS 0x114u |
| #define MCHP_QMSPI_LDMA_RX_0_LEN_OFS 0x118u |
| #define MCHP_QMSPI_LDMA_RX_1_CTRL_OFS 0x120u |
| #define MCHP_QMSPI_LDMA_RX_1_START_OFS 0x124u |
| #define MCHP_QMSPI_LDMA_RX_1_LEN_OFS 0x128u |
| #define MCHP_QMSPI_LDMA_RX_2_CTRL_OFS 0x130u |
| #define MCHP_QMSPI_LDMA_RX_2_START_OFS 0x134u |
| #define MCHP_QMSPI_LDMA_RX_2_LEN_OFS 0x138u |
| #define MCHP_QMSPI_LDMA_TX_0_CTRL_OFS 0x140u |
| #define MCHP_QMSPI_LDMA_TX_0_START_OFS 0x144u |
| #define MCHP_QMSPI_LDMA_TX_0_LEN_OFS 0x148u |
| #define MCHP_QMSPI_LDMA_TX_1_CTRL_OFS 0x150u |
| #define MCHP_QMSPI_LDMA_TX_1_START_OFS 0x154u |
| #define MCHP_QMSPI_LDMA_TX_1_LEN_OFS 0x158u |
| #define MCHP_QMSPI_LDMA_TX_2_CTRL_OFS 0x160u |
| #define MCHP_QMSPI_LDMA_TX_2_START_OFS 0x164u |
| #define MCHP_QMSPI_LDMA_TX_2_LEN_OFS 0x168u |
| |
| #define MCHP_QMSPI_MODE_ADDR (MCHP_QMSPI_BASE_ADDR + 0x00) |
| #define MCHP_QMSPI_CTRL_ADDR (MCHP_QMSPI_BASE_ADDR + 0x04) |
| #define MCHP_QMSPI_EXE_ADDR (MCHP_QMSPI_BASE_ADDR + 0x08) |
| #define MCHP_QMSPI_IFC_ADDR (MCHP_QMSPI_BASE_ADDR + 0x0c) |
| #define MCHP_QMSPI_STS_ADDR (MCHP_QMSPI_BASE_ADDR + 0x10) |
| #define MCHP_QMSPI_BUFCNT_STS_ADDR (MCHP_QMSPI_BASE_ADDR + 0x14) |
| #define MCHP_QMSPI_TX_BCNT_STS_ADDR (MCHP_QMSPI_BASE_ADDR + 0x14) |
| #define MCHP_QMSPI_RX_BCNT_STS_ADDR (MCHP_QMSPI_BASE_ADDR + 0x16) |
| #define MCHP_QMSPI_IEN_ADDR (MCHP_QMSPI_BASE_ADDR + 0x18) |
| #define MCHP_QMSPI_TXB_ADDR (MCHP_QMSPI_BASE_ADDR + 0x20) |
| #define MCHP_QMSPI_RXB_ADDR (MCHP_QMSPI_BASE_ADDR + 0x24) |
| #define MCHP_QMSPI_CSTM_ADDR (MCHP_QMSPI_BASE_ADDR + 0x28) |
| #define MCHP_QMSPI_DESCR_ADDR(n) \ |
| (MCHP_QMSPI_BASE_ADDR + (0x30 + (((uint32_t)(n) & 0x0Fu) << 2))) |
| |
| #define MCHP_QMSPI_ALIAS_CTRL_ADDR (MCHP_QMSPI_BASE_ADDR + 0xb0u) |
| #define MCHP_QMSPI_MODE_ALT1_ADDR (MCHP_QMSPI_BASE_ADDR + 0xc0u) |
| #define MCHP_QMSPI_TAPS_ADDR (MCHP_QMSPI_BASE_ADDR + 0xd0u) |
| #define MCHP_QMSPI_TAPS_ADJ_ADDR (MCHP_QMSPI_BASE_ADDR + 0xd4u) |
| #define MCHP_QMSPI_TAPS_CTRL_ADDR (MCHP_QMSPI_BASE_ADDR + 0xd8u) |
| #define MCHP_QMSPI_LDMA_RX_EN_ADDR (MCHP_QMSPI_BASE_ADDR + 0x100u) |
| #define MCHP_QMSPI_LDMA_TX_EN_ADDR (MCHP_QMSPI_BASE_ADDR + 0x104u) |
| #define MCHP_QMSPI_LDMA_RX_0_CTRL_ADDR (MCHP_QMSPI_BASE_ADDR + 0x110u) |
| #define MCHP_QMSPI_LDMA_RX_0_START_ADDR (MCHP_QMSPI_BASE_ADDR + 0x114u) |
| #define MCHP_QMSPI_LDMA_RX_0_LEN_ADDR (MCHP_QMSPI_BASE_ADDR + 0x118u) |
| #define MCHP_QMSPI_LDMA_RX_1_CTRL_ADDR (MCHP_QMSPI_BASE_ADDR + 0x120u) |
| #define MCHP_QMSPI_LDMA_RX_1_START_ADDR (MCHP_QMSPI_BASE_ADDR + 0x124u) |
| #define MCHP_QMSPI_LDMA_RX_1_LEN_ADDR (MCHP_QMSPI_BASE_ADDR + 0x128u) |
| #define MCHP_QMSPI_LDMA_RX_2_CTRL_ADDR (MCHP_QMSPI_BASE_ADDR + 0x130u) |
| #define MCHP_QMSPI_LDMA_RX_2_START_ADDR (MCHP_QMSPI_BASE_ADDR + 0x134u) |
| #define MCHP_QMSPI_LDMA_RX_2_LEN_ADDR (MCHP_QMSPI_BASE_ADDR + 0x138u) |
| #define MCHP_QMSPI_LDMA_TX_0_CTRL_ADDR (MCHP_QMSPI_BASE_ADDR + 0x140u) |
| #define MCHP_QMSPI_LDMA_TX_0_START_ADDR (MCHP_QMSPI_BASE_ADDR + 0x144u) |
| #define MCHP_QMSPI_LDMA_TX_0_LEN_ADDR (MCHP_QMSPI_BASE_ADDR + 0x148u) |
| #define MCHP_QMSPI_LDMA_TX_1_CTRL_ADDR (MCHP_QMSPI_BASE_ADDR + 0x150u) |
| #define MCHP_QMSPI_LDMA_TX_1_START_ADDR (MCHP_QMSPI_BASE_ADDR + 0x154u) |
| #define MCHP_QMSPI_LDMA_TX_1_LEN_ADDR (MCHP_QMSPI_BASE_ADDR + 0x158u) |
| #define MCHP_QMSPI_LDMA_TX_2_CTRL_ADDR (MCHP_QMSPI_BASE_ADDR + 0x160u) |
| #define MCHP_QMSPI_LDMA_TX_2_START_ADDR (MCHP_QMSPI_BASE_ADDR + 0x164u) |
| #define MCHP_QMSPI_LDMA_TX_2_LEN_ADDR (MCHP_QMSPI_BASE_ADDR + 0x168u) |
| |
| /* Mode Register */ |
| #define MCHP_QMSPI_M_MASK 0x00ff371fu |
| #define MCHP_QMSPI_M_ACTIVATE BIT(0) |
| #define MCHP_QMSPI_M_SRST BIT(1) |
| #define MCHP_QMSPI_M_SAF_DMA_MODE_EN BIT(2) |
| #define MCHP_QMSPI_M_LDMA_RX_EN BIT(3) |
| #define MCHP_QMSPI_M_LDMA_TX_EN BIT(4) |
| #define MCHP_QMSPI_M_CPOL_POS 8u |
| #define MCHP_QMSPI_M_CPOL_CLK_IDLE_LO 0 |
| #define MCHP_QMSPI_M_CPOL_CLK_IDLE_HI BIT(8) |
| |
| #define MCHP_QMSPI_M_CPHA_MOSI_POS 9u |
| /* MOSI data changes on first clock edge of clock pulse */ |
| #define MCHP_QMSPI_M_CPHA_MOSI_CE1 0u |
| /* MOSI data changes on second clock edge of clock pulse */ |
| #define MCHP_QMSPI_M_CPHA_MOSI_CE2 BIT(9) |
| |
| #define MCHP_QMSPI_M_CPHA_MIS0_POS 10u |
| /* MISO data capture on first clock edge of clock pulse */ |
| #define MCHP_QMSPI_M_CPHA_MISO_CE1 0u |
| /* MISO data capture on second clock edge of clock pulse */ |
| #define MCHP_QMSPI_M_CPHA_MISO_CE2 BIT(10) |
| |
| #define MCHP_QMSPI_M_SIG_POS 8u |
| #define MCHP_QMSPI_M_SIG_MASK0 0x07u |
| #define MCHP_QMSPI_M_SIG_MASK 0x0700u |
| #define MCHP_QMSPI_M_SIG_MODE0_VAL 0u |
| #define MCHP_QMSPI_M_SIG_MODE1_VAL 0x06u |
| #define MCHP_QMSPI_M_SIG_MODE2_VAL 0x01u |
| #define MCHP_QMSPI_M_SIG_MODE3_VAL 0x07u |
| #define MCHP_QMSPI_M_SIG_MODE0 0u |
| #define MCHP_QMSPI_M_SIG_MODE1 SHLU32(6u, MCHP_QMSPI_M_SIG_POS) |
| #define MCHP_QMSPI_M_SIG_MODE2 SHLU32(1u, MCHP_QMSPI_M_SIG_POS) |
| #define MCHP_QMSPI_M_SIG_MODE3 SHLU32(7u, MCHP_QMSPI_M_SIG_POS) |
| #define MCHP_QMSPI_M_CS_POS 12u |
| #define MCHP_QMSPI_M_CS_MASK0 0x03u |
| #define MCHP_QMSPI_M_CS_MASK SHLU32(3u, 12) |
| #define MCHP_QMSPI_M_CS0 SHLU32(0u, 12) |
| #define MCHP_QMSPI_M_CS1 SHLU32(1u, 12) |
| /* Two chip selects only 0 and 1 */ |
| #define MCHP_QMSPI_M_CS(n) \ |
| (((uint32_t)(n) & MCHP_QMSPI_M_CS_MASK0) << MCHP_QMSPI_M_CS_POS) |
| #define MCHP_QMSPI_M_FDIV_POS 16u |
| #define MCHP_QMSPI_M_FDIV_MASK0 0xffu |
| #define MCHP_QMSPI_M_FDIV_MASK 0x00ff0000u |
| |
| /* Control/Descriptors */ |
| #define MCHP_QMSPI_C_IFM_MASK 0x03u |
| #define MCHP_QMSPI_C_IFM_1X 0u |
| #define MCHP_QMSPI_C_IFM_2X 1u |
| #define MCHP_QMSPI_C_IFM_4X 2u |
| #define MCHP_QMSPI_C_TX_POS 2u |
| #define MCHP_QMSPI_C_TX_MASK SHLU32(3u, MCHP_QMSPI_C_TX_POS) |
| #define MCHP_QMSPI_C_TX_DIS 0u |
| #define MCHP_QMSPI_C_TX_DATA SHLU32(1u, MCHP_QMSPI_C_TX_POS) |
| #define MCHP_QMSPI_C_TX_ZEROS SHLU32(2u, MCHP_QMSPI_C_TX_POS) |
| #define MCHP_QMSPI_C_TX_ONES SHLU32(3u, MCHP_QMSPI_C_TX_POS) |
| #define MCHP_QMSPI_C_TX_DMA_POS 4u |
| #define MCHP_QMSPI_C_TX_DMA_MASK SHLU32(3u, MCHP_QMSPI_C_TX_DMA_POS) |
| #define MCHP_QMSPI_C_TX_DMA_DIS 0u |
| #define MCHP_QMSPI_C_TX_DMA_1B SHLU32(1u, MCHP_QMSPI_C_TX_DMA_POS) |
| #define MCHP_QMSPI_C_TX_DMA_2B SHLU32(2u, MCHP_QMSPI_C_TX_DMA_POS) |
| #define MCHP_QMSPI_C_TX_DMA_4B SHLU32(3u, MCHP_QMSPI_C_TX_DMA_POS) |
| #define MCHP_QMSPI_C_RX_POS 6u |
| #define MCHP_QMSPI_C_RX_DIS 0u |
| #define MCHP_QMSPI_C_RX_EN BIT(MCHP_QMSPI_C_RX_POS) |
| #define MCHP_QMSPI_C_RX_DMA_POS 7u |
| #define MCHP_QMSPI_C_RX_DMA_MASK SHLU32(3u, MCHP_QMSPI_C_RX_DMA_POS) |
| #define MCHP_QMSPI_C_RX_DMA_DIS 0u |
| #define MCHP_QMSPI_C_RX_DMA_1B SHLU32(1u, MCHP_QMSPI_C_RX_DMA_POS) |
| #define MCHP_QMSPI_C_RX_DMA_2B SHLU32(2u, MCHP_QMSPI_C_RX_DMA_POS) |
| #define MCHP_QMSPI_C_RX_DMA_4B SHLU32(3u, MCHP_QMSPI_C_RX_DMA_POS) |
| #define MCHP_QMSPI_C_CLOSE_POS 9u |
| #define MCHP_QMSPI_C_NO_CLOSE 0u |
| #define MCHP_QMSPI_C_CLOSE BIT(MCHP_QMSPI_C_CLOSE_POS) |
| #define MCHP_QMSPI_C_XFR_UNITS_POS 10u |
| #define MCHP_QMSPI_C_XFR_UNITS_MASK SHLU32(3u, MCHP_QMSPI_C_XFR_UNITS_POS) |
| #define MCHP_QMSPI_C_XFR_UNITS_BITS 0u |
| #define MCHP_QMSPI_C_XFR_UNITS_1 SHLU32(1u, MCHP_QMSPI_C_XFR_UNITS_POS) |
| #define MCHP_QMSPI_C_XFR_UNITS_4 SHLU32(2u, MCHP_QMSPI_C_XFR_UNITS_POS) |
| #define MCHP_QMSPI_C_XFR_UNITS_16 SHLU32(3u, MCHP_QMSPI_C_XFR_UNITS_POS) |
| #define MCHP_QMSPI_C_NEXT_DESCR_POS 12u |
| #define MCHP_QMSPI_C_NEXT_DESCR_MASK0 0x0fu |
| #define MCHP_QMSPI_C_NEXT_DESCR_MASK 0xf000u |
| #define MCHP_QMSPI_C_DESCR0 0u |
| #define MCHP_QMSPI_C_DESCR1 0x1000u |
| #define MCHP_QMSPI_C_DESCR2 0x2000u |
| #define MCHP_QMSPI_C_DESCR3 0x3000u |
| #define MCHP_QMSPI_C_DESCR4 0x4000u |
| /* Control register start descriptor field */ |
| #define MCHP_QMSPI_C_DESCR(n) \ |
| SHLU32(((n) & 0xFu), MCHP_QMSPI_C_NEXT_DESCR_POS) |
| /* Descriptor registers next descriptor field */ |
| #define MCHP_QMSPI_C_NEXT_DESCR(n) \ |
| SHLU32(((n) & 0xFu), MCHP_QMSPI_C_NEXT_DESCR_POS) |
| /* Control register descriptor mode enable */ |
| #define MCHP_QMSPI_C_DESCR_EN_POS 16u |
| #define MCHP_QMSPI_C_DESCR_EN BIT(MCHP_QMSPI_C_DESCR_EN_POS) |
| /* Descriptor registers last descriptor flag */ |
| #define MCHP_QMSPI_C_DESCR_LAST BIT(MCHP_QMSPI_C_DESCR_EN_POS) |
| #define MCHP_QMSPI_C_MAX_UNITS 0x7fffu |
| #define MCHP_QMSPI_C_MAX_UNITS_MASK 0x7fffu |
| #define MCHP_QMSPI_C_XFR_NUNITS_POS 17u |
| #define MCHP_QMSPI_C_XFR_NUNITS_MASK0 0x7fffu |
| #define MCHP_QMSPI_C_XFR_NUNITS_MASK 0xfffe0000u |
| #define MCHP_QMSPI_C_XFR_NUNITS(n) SHLU32((n), MCHP_QMSPI_C_XFR_NUNITS_POS) |
| #define MCHP_QMSPI_C_XFR_NUNITS_GET(descr) ((uint32_t)(descr) >> 17) |
| |
| /* Exe */ |
| #define MCHP_QMSPI_EXE_START BIT(0) |
| #define MCHP_QMSPI_EXE_STOP BIT(1) |
| #define MCHP_QMSPI_EXE_CLR_FIFOS BIT(2) |
| |
| /* Interface Control */ |
| #define MCHP_QMSPI_IFC_DFLT 0u |
| #define MCHP_QMSPI_IFC_WP_OUT_HI BIT(0) |
| #define MCHP_QMSPI_IFC_WP_OUT_EN BIT(1) |
| #define MCHP_QMSPI_IFC_HOLD_OUT_HI BIT(2) |
| #define MCHP_QMSPI_IFC_HOLD_OUT_EN BIT(3) |
| #define MCHP_QMSPI_IFC_PD_ON_NS BIT(4) |
| #define MCHP_QMSPI_IFC_PU_ON_NS BIT(5) |
| #define MCHP_QMSPI_IFC_PD_ON_ND BIT(6) |
| #define MCHP_QMSPI_IFC_PU_ON_ND BIT(7) |
| |
| /* Status Register */ |
| #define MCHP_QMSPI_STS_REG_MASK 0x0f01ff1fu |
| #define MCHP_QMSPI_STS_RO_MASK 0x0f013300u |
| #define MCHP_QMSPI_STS_RW1C_MASK 0x0000cc7fu |
| #define MCHP_QMSPI_STS_DONE BIT(0) |
| #define MCHP_QMSPI_STS_DMA_DONE BIT(1) |
| #define MCHP_QMSPI_STS_TXB_ERR BIT(2) |
| #define MCHP_QMSPI_STS_RXB_ERR BIT(3) |
| #define MCHP_QMSPI_STS_PROG_ERR BIT(4) |
| #define MCHP_QMSPI_STS_LDMA_RX_ERR BIT(5) |
| #define MCHP_QMSPI_STS_LDMA_TX_ERR BIT(6) |
| #define MCHP_QMSPI_STS_TXBF_RO BIT(8) |
| #define MCHP_QMSPI_STS_TXBE_RO BIT(9) |
| #define MCHP_QMSPI_STS_TXBR BIT(10) |
| #define MCHP_QMSPI_STS_TXBS BIT(11) |
| #define MCHP_QMSPI_STS_RXBF_RO BIT(12) |
| #define MCHP_QMSPI_STS_RXBE_RO BIT(13) |
| #define MCHP_QMSPI_STS_RXBR BIT(14) |
| #define MCHP_QMSPI_STS_RXBS BIT(15) |
| #define MCHP_QMSPI_STS_ACTIVE_RO BIT(16) |
| #define MCHP_QMSPI_STS_CD_POS 24u |
| #define MCHP_QMSPI_STS_CD_MASK0 0x0fu |
| #define MCHP_QMSPI_STS_CD_MASK 0x0f000000u |
| |
| /* Buffer Count Status (RO) */ |
| #define MCHP_QMSPI_TX_BUF_CNT_STS_POS 0u |
| #define MCHP_QMSPI_TX_BUF_CNT_STS_MASK 0xffffu |
| #define MCHP_QMSPI_RX_BUF_CNT_STS_POS 16u |
| #define MCHP_QMSPI_RX_BUF_CNT_STS_MASK 0xffff0000u |
| |
| /* Interrupt Enable Register */ |
| #define MCHP_QMSPI_IEN_XFR_DONE BIT(0) |
| #define MCHP_QMSPI_IEN_DMA_DONE BIT(1) |
| #define MCHP_QMSPI_IEN_TXB_ERR BIT(2) |
| #define MCHP_QMSPI_IEN_RXB_ERR BIT(3) |
| #define MCHP_QMSPI_IEN_PROG_ERR BIT(4) |
| #define MCHP_QMSPI_IEN_LDMA_RX_ERR BIT(5) |
| #define MCHP_QMSPI_IEN_LDMA_TX_ERR BIT(6) |
| #define MCHP_QMSPI_IEN_TXB_FULL BIT(8) |
| #define MCHP_QMSPI_IEN_TXB_EMPTY BIT(9) |
| #define MCHP_QMSPI_IEN_TXB_REQ BIT(10) |
| #define MCHP_QMSPI_IEN_RXB_FULL BIT(12) |
| #define MCHP_QMSPI_IEN_RXB_EMPTY BIT(13) |
| #define MCHP_QMSPI_IEN_RXB_REQ BIT(14) |
| |
| /* Buffer Count Trigger (RW) */ |
| #define MCHP_QMSPI_TX_BUF_CNT_TRIG_POS 0u |
| #define MCHP_QMSPI_RX_BUF_CNT_TRIG_POS 16u |
| |
| /* Chip Select Timing (RW) */ |
| #define MCHP_QMSPI_CSTM_MASK 0xff0f0f0fu |
| #define MCHP_QMSPI_CSTM_DFLT 0x06060406u |
| #define MCHP_QMSPI_DLY_CS_ON_CK_STR_POS 0u |
| #define MCHP_QMSPI_DLY_CS_ON_CK_STR_MASK 0x0fu |
| #define MCHP_QMSPI_DLY_CK_STP_CS_OFF_POS 8u |
| #define MCHP_QMSPI_DLY_CK_STP_CS_OFF_MASK 0x0f00u |
| #define MCHP_QMSPI_DLY_LST_DAT_HLD_POS 16u |
| #define MCHP_QMSPI_DLY_LST_DAT_HLD_MASK 0x0f0000u |
| #define MCHP_QMSPI_DLY_CS_OFF_CS_ON_POS 24u |
| #define MCHP_QMSPI_DLY_CS_OFF_CS_ON_MASK 0x0f000000u |
| |
| /* Alias Control (WO) */ |
| #define MCHP_QMSPI_ACTRL_MASK 0xffffff7fu |
| #define MCHP_QMSPI_ACTRL_ESTART BIT(0) |
| #define MCHP_QMSPI_ACTRL_CDE BIT(1) |
| #define MCHP_QMSPI_ACTRL_TXBW BIT(2) |
| #define MCHP_QMSPI_ACTRL_DLEN BIT(3) |
| #define MCHP_QMSPI_ACTRL_CS_POS 4 |
| #define MCHP_QMSPI_ACTRL_CS0 0u |
| #define MCHP_QMSPI_ACTRL_CS1 0x10u |
| #define MCHP_QMSPI_ACTRL_LDIA BIT(6) |
| #define MCHP_QMSPI_ACTRL_DBP_POS 8 |
| #define MCHP_QMSPI_ACTRL_DBP_0 0u |
| #define MCHP_QMSPI_ACTRL_DBP_1 0x100u |
| #define MCHP_QMSPI_ACTRL_DBP_N(n) SHLU32(((n) & 0xFu), 8) |
| #define MCHP_QMSPI_ACTRL_BSEL_POS 12 |
| #define MCHP_QMSPI_ACTRL_BSEL_MSK 0xf000u |
| #define MCHP_QMSPI_ACTRL_DBLEN_POS 16 |
| #define MCHP_QMSPI_ACTRL_DBLEN_MSK 0xff0000u |
| #define MCHP_QMSPI_ACTRL_TXB_DATA_POS 24 |
| #define MCHP_QMSPI_ACTRL_TXB_DATA_MSK 0xff000000u |
| |
| /* Mode Alternate 1 (RW) */ |
| #define MCHP_QMSPI_MA1_MASK 0xffff0001u |
| #define MCHP_QMSPI_MA1_CS1_CDIV_EN BIT(0) |
| #define MCHP_QMSPI_MA1_CS1_CDIV_POS 16 |
| #define MCHP_QMSPI_MA1_CS1_CDIV_MSK 0xffff0000u |
| |
| /* TAPS select and TAPS Adjust registers */ |
| #define MCHP_QMSPI_TAPS_MASK 0xffffu |
| #define MCHP_QMSPI_TAPS_SCK_MASK 0xffu |
| #define MCHP_QMSPI_TAPS_CTL_MASK 0xff00u |
| |
| /* TAPS Control register */ |
| #define MCHP_QMSPI_TCTRL_MASK 0x70107u |
| #define MCHP_QMSPI_TCTRL_AUTO_MODE_MASK 0x03u |
| #define MCHP_QMSPI_TCTRL_AM_OFF 0x00u |
| #define MCHP_QMSPI_TCTRL_AM_ON 0x01u |
| #define MCHP_QMSPI_TCTRL_AM_PERIODIC 0x02u |
| #define MCHP_QMSPI_TCTRL_UPDATE_EN BIT(2) |
| #define MCHP_QMSPI_TCTRL_UPDATE_NOW BIT(8) |
| #define MCHP_QMSPI_TCTRL_MULT_POS 16 |
| #define MCHP_QMSPI_TCTRL_MULT_MSK 0x70000u |
| |
| /* Local DMA RX Descriptor Enable bit map */ |
| /* Local DMA TX Descriptor Enable bit map */ |
| #define MCHP_QMSPI_LDMA_DESCR_EN_MASK 0xffffu |
| #define MCHP_QMSPI_LDMA_DESCR_EN(n) BIT((n) & 0xfu) |
| |
| /* Each Local DMA channel implements 4 32-bit registers. |
| * Channels are identical for RX and TX |
| * offset 0x00: Control |
| * offset 0x04: memory start address |
| * offset 0x08: transfer byte length |
| * offset 0x0c: reserved read-only 0 |
| */ |
| |
| /* LDMA Channel Control register */ |
| #define MCHP_QMSPI_LDC_MASK 0x7fu |
| /* enable channel */ |
| #define MCHP_QMSPI_LDC_EN BIT(0) |
| /* re-enable channel upon done */ |
| #define MCHP_QMSPI_LDC_RS_EN BIT(1) |
| /* on restart put memory start address back to its original value */ |
| #define MCHP_QMSPI_LDC_RSA_EN BIT(2) |
| /* use channel length not length in descriptor */ |
| #define MCHP_QMSPI_LDC_UCHL_EN BIT(3) |
| /* LDMA unit(access) size: 1, 2, or 4 bytes */ |
| #define MCHP_QMSPI_LDC_ASZ_POS 4 |
| #define MCHP_QMSPI_LDC_ASZ_MSK 0x30u |
| #define MCHP_QMSPI_LDC_ASZ_1 0u |
| #define MCHP_QMSPI_LDC_ASZ_2 0x10u |
| #define MCHP_QMSPI_LDC_ASZ_4 0x20u |
| /* LDMA increment memory start address by access size */ |
| #define MCHP_QMSPI_LDC_INCR_EN BIT(6) |
| |
| /* LDMA Channel (memory) Start address register */ |
| #define MCHP_QMSPI_LDMS_MASK 0xffffffffu |
| |
| /* LDMA Channel Length register */ |
| #define MCHP_QMSPI_LDLEN_MASK 0xffffffffu |
| |
| /** @brief QMSPI Local DMA channel registers */ |
| struct qldma_chan { |
| volatile uint32_t CTRL; |
| volatile uint32_t MSTART; |
| volatile uint32_t LEN; |
| uint32_t RSVD1[1]; |
| }; |
| |
| /** @brief QMSPI controller. Size = 368(0x170) */ |
| struct qmspi_regs { |
| volatile uint32_t MODE; |
| volatile uint32_t CTRL; |
| volatile uint32_t EXE; |
| volatile uint32_t IFCTRL; |
| volatile uint32_t STS; |
| volatile uint32_t BCNT_STS; |
| volatile uint32_t IEN; |
| volatile uint32_t BCNT_TRIG; |
| volatile uint32_t TX_FIFO; |
| volatile uint32_t RX_FIFO; |
| volatile uint32_t CSTM; |
| uint32_t RSVD1[1]; |
| volatile uint32_t DESCR[16]; |
| uint32_t RSVD2[16]; |
| volatile uint32_t ALIAS_CTRL; |
| uint32_t RSVD3[3]; |
| volatile uint32_t MODE_ALT1; |
| uint32_t RSVD4[3]; |
| volatile uint32_t TM_TAPS; |
| volatile uint32_t TM_TAPS_ADJ; |
| volatile uint32_t TM_TAPS_CTRL; |
| uint32_t RSVD5[9]; |
| volatile uint32_t LDMA_RX_DESCR_BM; |
| volatile uint32_t LDMA_TX_DESCR_BM; |
| uint32_t RSVD6[2]; |
| struct qldma_chan LDRX[3]; |
| struct qldma_chan LDTX[3]; |
| }; |
| |
| #endif /* #ifndef _MEC_QSPI_H */ |