blob: cb2be6eed421b2805730429434f34dfef321f5a0 [file] [log] [blame]
/*
* 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 */