RTEMS 7.0-rc1
Loading...
Searching...
No Matches
zynq-qspi-flash-defs.h
1/* SPDX-License-Identifier: BSD-2-Clause */
2
3/*
4 * Copyright (C) 2024 Contemporary Software
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 *
15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS
16 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
19 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25 * POSSIBILITY OF SUCH DAMAGE.
26 */
27
28#if !defined(_ZYNQ_QSPI_FLASH_DEFS_H_)
29#define _ZYNQ_QSPI_FLASH_DEFS_H_
30
31#include <dev/spi/zynq-qspi-flash.h>
32
33#define ZQSPI_QSPI_BASE 0xE000D000
34
35/*
36 * Flash commands.
37 */
38
39#define ZQSPI_FLASH_COMMAND_SIZE 1
40
41#define ZQSPI_FLASH_4B_WRITE_CMD 0x12
42#define ZQSPI_FLASH_4B_FAST_READ_CMD 0x0C
43#define ZQSPI_FLASH_4B_READ_CMD 0x13
44#define ZQSPI_FLASH_4B_SEC_ERASE_CMD 0xDC
45
46#define ZQSPI_FLASH_3B_WRITE_CMD 0x02
47#define ZQSPI_FLASH_3B_FAST_READ_CMD 0x0B
48#define ZQSPI_FLASH_3B_READ_CMD 0x03
49#define ZQSPI_FLASH_3B_SEC_ERASE_CMD 0xD8
50
51#define ZQSPI_FLASH_READ_CONFIG_CMD 0x35
52#define ZQSPI_FLASH_WRITE_STATUS_CMD 0x01
53#define ZQSPI_FLASH_WRITE_DISABLE_CMD 0x04
54#define ZQSPI_FLASH_READ_STATUS_CMD 0x05
55#define ZQSPI_FLASH_WRITE_DISABLE_CMD 0x04
56#define ZQSPI_FLASH_WRITE_ENABLE_CMD 0x06
57#define ZQSPI_FLASH_BULK_ERASE_CMD 0xC7
58#define ZQSPI_FLASH_READ_ID 0x9F
59
60#define ZQSPI_FLASH_READ_STATUS_FLAG_CMD 0x05
61
62/*
63 * QSPI registers.
64 */
65#define ZQSPI_QSPI_REG_CONFIG 0x00000000
66#define ZQSPI_QSPI_REG_INTR_STATUS 0x00000004
67#define ZQSPI_QSPI_REG_INTR_ENABLE 0x00000008
68#define ZQSPI_QSPI_REG_INTR_DISABLE 0x0000000c
69#define ZQSPI_QSPI_REG_INTR_MASK 0x00000010
70#define ZQSPI_QSPI_REG_EN 0x00000014
71#define ZQSPI_QSPI_REG_DELAY 0x00000018
72#define ZQSPI_QSPI_REG_TXD0 0x0000001c
73#define ZQSPI_QSPI_REG_RX_DATA 0x00000020
74#define ZQSPI_QSPI_REG_SLAVE_IDLE_COUNT 0x00000024
75#define ZQSPI_QSPI_REG_TX_THRES 0x00000028
76#define ZQSPI_QSPI_REG_RX_THRES 0x0000002c
77#define ZQSPI_QSPI_REG_GPIO 0x00000030
78#define ZQSPI_QSPI_REG_LPBK_DLY_ADJ 0x00000038
79#define ZQSPI_QSPI_REG_TXD1 0x00000080
80#define ZQSPI_QSPI_REG_TXD2 0x00000084
81#define ZQSPI_QSPI_REG_TXD3 0x00000088
82#define ZQSPI_QSPI_REG_LSPI_CFG 0x000000a0
83#define ZQSPI_QSPI_REG_LSPI_STS 0x000000a4
84#define ZQSPI_QSPI_REG_MOD_ID 0x000000fc
85
86/*
87 * TX FIFO depth in words.
88 */
89#define ZQSPI_QSPI_FIFO_DEPTH (63)
90
91/*
92 * Control register.
93 */
94#define ZQSPI_QSPI_CR_HOLDB_DR (1 << 19)
95#define ZQSPI_QSPI_CR_MANSTRT (1 << 16)
96#define ZQSPI_QSPI_CR_MANSTRTEN (1 << 15)
97#define ZQSPI_QSPI_CR_SSFORCE (1 << 14)
98#define ZQSPI_QSPI_CR_PCS (1 << 10)
99#define ZQSPI_QSPI_CR_BAUD_RATE_DIV_2 (0 << 3)
100#define ZQSPI_QSPI_CR_BAUD_RATE_DIV_4 (1 << 3)
101#define ZQSPI_QSPI_CR_BAUD_RATE_DIV_8 (2 << 3)
102#define ZQSPI_QSPI_CR_MODE_SEL (1 << 0)
103
104/*
105 * Fast clock rate of 100MHz for fast reads.
106 */
107#define ZQSPI_QSPI_CR_BAUD_RATE_FAST ZQSPI_QSPI_CR_BAUD_RATE_DIV_2
108
109/*
110 * Status register.
111 */
112#define ZQSPI_QSPI_IXR_TXUF (1 << 6)
113#define ZQSPI_QSPI_IXR_RXFULL (1 << 5)
114#define ZQSPI_QSPI_IXR_RXNEMPTY (1 << 4)
115#define ZQSPI_QSPI_IXR_TXFULL (1 << 3)
116#define ZQSPI_QSPI_IXR_TXOW (1 << 2)
117#define ZQSPI_QSPI_INTR_RXOVR (1 << 0)
118
119/*
120 * Enable register.
121 */
122#define ZQSPI_QSPI_EN_SPI_ENABLE (1 << 0)
123
124/*
125 * Clock rate is 200MHz and 50MHz is the normal rate and 100MHz the fast rate.
126 */
127#if FLASH_FAST_READ
128 #define ZQSPI_QSPI_CR_BAUD_RATE ZQSPI_QSPI_CR_BAUD_RATE_DIV_2
129#else
130 #define ZQSPI_QSPI_CR_BAUD_RATE ZQSPI_QSPI_CR_BAUD_RATE_DIV_4
131#endif
132
133/*
134 * Flash Status bits.
135 */
136#define ZQSPI_FLASH_SR_WIP (1 << 0)
137#define ZQSPI_FLASH_SR_WEL (1 << 1)
138#define ZQSPI_FLASH_SR_BP0 (1 << 2)
139#define ZQSPI_FLASH_SR_BP1 (1 << 3)
140#define ZQSPI_FLASH_SR_BP2 (1 << 4)
141#define ZQSPI_FLASH_SR_E_ERR (1 << 5)
142#define ZQSPI_FLASH_SR_P_ERR (1 << 6)
143#define ZQSPI_FLASH_SR_SRWD (1 << 7)
144
145
146void zqspi_write_unlock(zqspiflash *driver);
147
148void zqspi_write_lock(zqspiflash *driver);
149
150zqspi_error zqspi_transfer(zqspi_transfer_buffer* transfer, bool *initialised);
151
152void zqspi_transfer_intr(zqspiflash *driver);
153
154#endif /* _ZYNQ_QSPI_FLASH_DEFS_H_ */
Definition: zynq-qspi-flash.h:86
Definition: zynq-qspi-flash.h:115