xref: /freebsd-src/sys/dev/flash/cqspi.h (revision 95ee2897e98f5d444f26ed2334cc7c439f9c16c6)
1*eb69ed7fSRuslan Bukin /*-
2*eb69ed7fSRuslan Bukin  * Copyright (c) 2017-2018 Ruslan Bukin <br@bsdpad.com>
3*eb69ed7fSRuslan Bukin  * All rights reserved.
4*eb69ed7fSRuslan Bukin  *
5*eb69ed7fSRuslan Bukin  * This software was developed by SRI International and the University of
6*eb69ed7fSRuslan Bukin  * Cambridge Computer Laboratory under DARPA/AFRL contract FA8750-10-C-0237
7*eb69ed7fSRuslan Bukin  * ("CTSRD"), as part of the DARPA CRASH research programme.
8*eb69ed7fSRuslan Bukin  *
9*eb69ed7fSRuslan Bukin  * Redistribution and use in source and binary forms, with or without
10*eb69ed7fSRuslan Bukin  * modification, are permitted provided that the following conditions
11*eb69ed7fSRuslan Bukin  * are met:
12*eb69ed7fSRuslan Bukin  * 1. Redistributions of source code must retain the above copyright
13*eb69ed7fSRuslan Bukin  *    notice, this list of conditions and the following disclaimer.
14*eb69ed7fSRuslan Bukin  * 2. Redistributions in binary form must reproduce the above copyright
15*eb69ed7fSRuslan Bukin  *    notice, this list of conditions and the following disclaimer in the
16*eb69ed7fSRuslan Bukin  *    documentation and/or other materials provided with the distribution.
17*eb69ed7fSRuslan Bukin  *
18*eb69ed7fSRuslan Bukin  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
19*eb69ed7fSRuslan Bukin  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20*eb69ed7fSRuslan Bukin  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21*eb69ed7fSRuslan Bukin  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
22*eb69ed7fSRuslan Bukin  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23*eb69ed7fSRuslan Bukin  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24*eb69ed7fSRuslan Bukin  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25*eb69ed7fSRuslan Bukin  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26*eb69ed7fSRuslan Bukin  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27*eb69ed7fSRuslan Bukin  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28*eb69ed7fSRuslan Bukin  * SUCH DAMAGE.
29*eb69ed7fSRuslan Bukin  */
30*eb69ed7fSRuslan Bukin 
31*eb69ed7fSRuslan Bukin #ifndef _CQSPI_H_
32*eb69ed7fSRuslan Bukin #define _CQSPI_H_
33*eb69ed7fSRuslan Bukin 
34*eb69ed7fSRuslan Bukin #define	CQSPI_CFG		0x00	/* QSPI Configuration */
35*eb69ed7fSRuslan Bukin #define	 CFG_IDLE		(1 << 31)
36*eb69ed7fSRuslan Bukin #define	 CFG_ENDMA		(1 << 15)
37*eb69ed7fSRuslan Bukin #define	 CFG_IDLE		(1 << 31)
38*eb69ed7fSRuslan Bukin #define	 CFG_BAUD_S		19
39*eb69ed7fSRuslan Bukin #define	 CFG_BAUD_M		(0xf << CFG_BAUD_S)
40*eb69ed7fSRuslan Bukin #define	 CFG_BAUD2		(0 << CFG_BAUD_S)
41*eb69ed7fSRuslan Bukin #define	 CFG_BAUD4		(1 << CFG_BAUD_S)
42*eb69ed7fSRuslan Bukin #define	 CFG_BAUD6		(2 << CFG_BAUD_S)
43*eb69ed7fSRuslan Bukin #define	 CFG_BAUD8		(3 << CFG_BAUD_S)
44*eb69ed7fSRuslan Bukin #define	 CFG_BAUD10		(4 << CFG_BAUD_S)
45*eb69ed7fSRuslan Bukin #define	 CFG_BAUD12		(5 << CFG_BAUD_S)
46*eb69ed7fSRuslan Bukin #define	 CFG_BAUD14		(6 << CFG_BAUD_S)
47*eb69ed7fSRuslan Bukin #define	 CFG_BAUD16		(7 << CFG_BAUD_S)
48*eb69ed7fSRuslan Bukin #define	 CFG_BAUD18		(8 << CFG_BAUD_S)
49*eb69ed7fSRuslan Bukin #define	 CFG_BAUD20		(9 << CFG_BAUD_S)
50*eb69ed7fSRuslan Bukin #define	 CFG_BAUD22		(10 << CFG_BAUD_S)
51*eb69ed7fSRuslan Bukin #define	 CFG_BAUD24		(11 << CFG_BAUD_S)
52*eb69ed7fSRuslan Bukin #define	 CFG_BAUD26		(12 << CFG_BAUD_S)
53*eb69ed7fSRuslan Bukin #define	 CFG_BAUD28		(13 << CFG_BAUD_S)
54*eb69ed7fSRuslan Bukin #define	 CFG_BAUD30		(14 << CFG_BAUD_S)
55*eb69ed7fSRuslan Bukin #define	 CFG_BAUD32		(0xf << CFG_BAUD_S)
56*eb69ed7fSRuslan Bukin #define	 CFG_EN			(1 << 0)
57*eb69ed7fSRuslan Bukin #define	CQSPI_DEVRD		0x04	/* Device Read Instruction Configuration */
58*eb69ed7fSRuslan Bukin #define	 DEVRD_DUMMYRDCLKS_S	24
59*eb69ed7fSRuslan Bukin #define	 DEVRD_ENMODEBITS	(1 << 20)
60*eb69ed7fSRuslan Bukin #define	 DEVRD_DATA_WIDTH_S	16
61*eb69ed7fSRuslan Bukin #define	 DEVRD_DATA_WIDTH_QUAD	(2 << DEVRD_DATA_WIDTH_S)
62*eb69ed7fSRuslan Bukin #define	 DEVRD_ADDR_WIDTH_S	12
63*eb69ed7fSRuslan Bukin #define	 DEVRD_ADDR_WIDTH_SINGLE	(0 << DEVRD_ADDR_WIDTH_S)
64*eb69ed7fSRuslan Bukin #define	 DEVRD_INST_WIDTH_S	8
65*eb69ed7fSRuslan Bukin #define	 DEVRD_INST_WIDTH_SINGLE	(0 << DEVRD_INST_WIDTH_S)
66*eb69ed7fSRuslan Bukin #define	 DEVRD_RDOPCODE_S	0
67*eb69ed7fSRuslan Bukin #define	CQSPI_DEVWR		0x08	/* Device Write Instruction Configuration */
68*eb69ed7fSRuslan Bukin #define	 DEVWR_DUMMYWRCLKS_S	24
69*eb69ed7fSRuslan Bukin #define	 DEVWR_WROPCODE_S	0
70*eb69ed7fSRuslan Bukin #define	 DEVWR_DATA_WIDTH_S	16
71*eb69ed7fSRuslan Bukin #define	 DEVWR_DATA_WIDTH_QUAD	(2 << DEVWR_DATA_WIDTH_S)
72*eb69ed7fSRuslan Bukin #define	 DEVWR_ADDR_WIDTH_S	12
73*eb69ed7fSRuslan Bukin #define	 DEVWR_ADDR_WIDTH_SINGLE	(0 << DEVWR_ADDR_WIDTH_S)
74*eb69ed7fSRuslan Bukin #define	CQSPI_DELAY		0x0C	/* QSPI Device Delay Register */
75*eb69ed7fSRuslan Bukin #define	 DELAY_NSS_S		24
76*eb69ed7fSRuslan Bukin #define	 DELAY_BTWN_S		16
77*eb69ed7fSRuslan Bukin #define	 DELAY_AFTER_S		8
78*eb69ed7fSRuslan Bukin #define	 DELAY_INIT_S		0
79*eb69ed7fSRuslan Bukin #define	CQSPI_RDDATACAP		0x10	/* Read Data Capture Register */
80*eb69ed7fSRuslan Bukin #define	 RDDATACAP_DELAY_S	1
81*eb69ed7fSRuslan Bukin #define	 RDDATACAP_DELAY_M	(0xf << RDDATACAP_DELAY_S)
82*eb69ed7fSRuslan Bukin #define	CQSPI_DEVSZ		0x14	/* Device Size Configuration Register */
83*eb69ed7fSRuslan Bukin #define	 DEVSZ_NUMADDRBYTES_S	0
84*eb69ed7fSRuslan Bukin #define	 DEVSZ_NUMADDRBYTES_M	(0xf << DEVSZ_NUMADDRBYTES_S)
85*eb69ed7fSRuslan Bukin #define	CQSPI_SRAMPART		0x18	/* SRAM Partition Configuration Register */
86*eb69ed7fSRuslan Bukin #define	CQSPI_INDADDRTRIG	0x1C	/* Indirect AHB Address Trigger Register */
87*eb69ed7fSRuslan Bukin #define	CQSPI_DMAPER		0x20	/* DMA Peripheral Configuration Register */
88*eb69ed7fSRuslan Bukin #define	 DMAPER_NUMSGLREQBYTES_S	0
89*eb69ed7fSRuslan Bukin #define	 DMAPER_NUMBURSTREQBYTES_S	8
90*eb69ed7fSRuslan Bukin #define	 DMAPER_NUMSGLREQBYTES_4	(2 << DMAPER_NUMSGLREQBYTES_S);
91*eb69ed7fSRuslan Bukin #define	 DMAPER_NUMBURSTREQBYTES_4	(2 << DMAPER_NUMBURSTREQBYTES_S);
92*eb69ed7fSRuslan Bukin #define	CQSPI_REMAPADDR		0x24	/* Remap Address Register */
93*eb69ed7fSRuslan Bukin #define	CQSPI_MODEBIT		0x28	/* Mode Bit Configuration */
94*eb69ed7fSRuslan Bukin #define	CQSPI_SRAMFILL		0x2C	/* SRAM Fill Register */
95*eb69ed7fSRuslan Bukin #define	CQSPI_TXTHRESH		0x30	/* TX Threshold Register */
96*eb69ed7fSRuslan Bukin #define	CQSPI_RXTHRESH		0x34	/* RX Threshold Register */
97*eb69ed7fSRuslan Bukin #define	CQSPI_IRQSTAT		0x40	/* Interrupt Status Register */
98*eb69ed7fSRuslan Bukin #define	CQSPI_IRQMASK		0x44	/* Interrupt Mask */
99*eb69ed7fSRuslan Bukin #define	 IRQMASK_INDSRAMFULL	(1 << 12)
100*eb69ed7fSRuslan Bukin #define	 IRQMASK_INDXFRLVL	(1 << 6)
101*eb69ed7fSRuslan Bukin #define	 IRQMASK_INDOPDONE	(1 << 2)
102*eb69ed7fSRuslan Bukin #define	CQSPI_LOWWRPROT		0x50	/* Lower Write Protection */
103*eb69ed7fSRuslan Bukin #define	CQSPI_UPPWRPROT		0x54	/* Upper Write Protection */
104*eb69ed7fSRuslan Bukin #define	CQSPI_WRPROT		0x58	/* Write Protection Control Register */
105*eb69ed7fSRuslan Bukin #define	CQSPI_INDRD		0x60	/* Indirect Read Transfer Control Register */
106*eb69ed7fSRuslan Bukin #define	 INDRD_IND_OPS_DONE_STATUS	(1 << 5)
107*eb69ed7fSRuslan Bukin #define	 INDRD_START		(1 << 0)
108*eb69ed7fSRuslan Bukin #define	CQSPI_INDRDWATER	0x64	/* Indirect Read Transfer Watermark Register */
109*eb69ed7fSRuslan Bukin #define	CQSPI_INDRDSTADDR	0x68	/* Indirect Read Transfer Start Address Register */
110*eb69ed7fSRuslan Bukin #define	CQSPI_INDRDCNT		0x6C	/* Indirect Read Transfer Number Bytes Register */
111*eb69ed7fSRuslan Bukin #define	CQSPI_INDWR		0x70	/* Indirect Write Transfer Control Register */
112*eb69ed7fSRuslan Bukin #define	CQSPI_INDWRWATER	0x74	/* Indirect Write Transfer Watermark Register */
113*eb69ed7fSRuslan Bukin #define	CQSPI_INDWRSTADDR	0x78	/* Indirect Write Transfer Start Address Register */
114*eb69ed7fSRuslan Bukin #define	CQSPI_INDWRCNT		0x7C	/* Indirect Write Transfer Number Bytes Register */
115*eb69ed7fSRuslan Bukin #define	CQSPI_FLASHCMD		0x90	/* Flash Command Control Register */
116*eb69ed7fSRuslan Bukin #define	 FLASHCMD_NUMADDRBYTES_S	16
117*eb69ed7fSRuslan Bukin #define	 FLASHCMD_NUMRDDATABYTES_S	20
118*eb69ed7fSRuslan Bukin #define	 FLASHCMD_NUMRDDATABYTES_M	(0x7 << FLASHCMD_NUMRDDATABYTES_S)
119*eb69ed7fSRuslan Bukin #define	 FLASHCMD_ENCMDADDR	(1 << 19)
120*eb69ed7fSRuslan Bukin #define	 FLASHCMD_ENRDDATA	(1 << 23)
121*eb69ed7fSRuslan Bukin #define	 FLASHCMD_CMDOPCODE_S	24
122*eb69ed7fSRuslan Bukin #define	 FLASHCMD_CMDOPCODE_M	(0xff << FLASHCMD_CMDOPCODE_S)
123*eb69ed7fSRuslan Bukin #define	 FLASHCMD_CMDEXECSTAT	(1 << 1) /* Command execution in progress. */
124*eb69ed7fSRuslan Bukin #define	 FLASHCMD_EXECCMD	(1 << 0) /* Execute the command. */
125*eb69ed7fSRuslan Bukin #define	CQSPI_FLASHCMDADDR	0x94	/* Flash Command Address Registers */
126*eb69ed7fSRuslan Bukin #define	CQSPI_FLASHCMDRDDATALO	0xA0	/* Flash Command Read Data Register (Lower) */
127*eb69ed7fSRuslan Bukin #define	CQSPI_FLASHCMDRDDATAUP	0xA4	/* Flash Command Read Data Register (Upper) */
128*eb69ed7fSRuslan Bukin #define	CQSPI_FLASHCMDWRDATALO	0xA8	/* Flash Command Write Data Register (Lower) */
129*eb69ed7fSRuslan Bukin #define	CQSPI_FLASHCMDWRDATAUP	0xAC	/* Flash Command Write Data Register (Upper) */
130*eb69ed7fSRuslan Bukin #define	CQSPI_MODULEID		0xFC	/* Module ID Register */
131*eb69ed7fSRuslan Bukin 
132*eb69ed7fSRuslan Bukin #endif /* !_CQSPI_H_ */
133