xref: /rk3399_ARM-atf/drivers/brcm/spi/iproc_qspi.h (revision 926cd70a0cc3a0cbf209a87765a8dc0b869798e3)
1*e3ee7b7dSSheetal Tigadoli /*
2*e3ee7b7dSSheetal Tigadoli  * Copyright (c) 2017 - 2020, Broadcom
3*e3ee7b7dSSheetal Tigadoli  *
4*e3ee7b7dSSheetal Tigadoli  * SPDX-License-Identifier: BSD-3-Clause
5*e3ee7b7dSSheetal Tigadoli  */
6*e3ee7b7dSSheetal Tigadoli 
7*e3ee7b7dSSheetal Tigadoli #ifndef IPROC_QSPI_H
8*e3ee7b7dSSheetal Tigadoli #define IPROC_QSPI_H
9*e3ee7b7dSSheetal Tigadoli 
10*e3ee7b7dSSheetal Tigadoli #include <platform_def.h>
11*e3ee7b7dSSheetal Tigadoli 
12*e3ee7b7dSSheetal Tigadoli /*SPI configuration enable*/
13*e3ee7b7dSSheetal Tigadoli #define IPROC_QSPI_CLK_SPEED	62500000
14*e3ee7b7dSSheetal Tigadoli #define SPI_CPHA		(1 << 0)
15*e3ee7b7dSSheetal Tigadoli #define SPI_CPOL		(1 << 1)
16*e3ee7b7dSSheetal Tigadoli #define IPROC_QSPI_MODE0	0
17*e3ee7b7dSSheetal Tigadoli #define IPROC_QSPI_MODE3	(SPI_CPOL|SPI_CPHA)
18*e3ee7b7dSSheetal Tigadoli 
19*e3ee7b7dSSheetal Tigadoli #define IPROC_QSPI_BUS                   0
20*e3ee7b7dSSheetal Tigadoli #define IPROC_QSPI_CS                    0
21*e3ee7b7dSSheetal Tigadoli #define IPROC_QSPI_BASE_REG              QSPI_CTRL_BASE_ADDR
22*e3ee7b7dSSheetal Tigadoli #define IPROC_QSPI_CRU_CONTROL_REG       QSPI_CLK_CTRL
23*e3ee7b7dSSheetal Tigadoli 
24*e3ee7b7dSSheetal Tigadoli #define QSPI_AXI_CLK                        200000000
25*e3ee7b7dSSheetal Tigadoli 
26*e3ee7b7dSSheetal Tigadoli #define QSPI_RETRY_COUNT_US_MAX             200000
27*e3ee7b7dSSheetal Tigadoli 
28*e3ee7b7dSSheetal Tigadoli /* Chip attributes */
29*e3ee7b7dSSheetal Tigadoli #define QSPI_REG_BASE			IPROC_QSPI_BASE_REG
30*e3ee7b7dSSheetal Tigadoli #define CRU_CONTROL_REG			IPROC_QSPI_CRU_CONTROL_REG
31*e3ee7b7dSSheetal Tigadoli #define SPBR_DIV_MIN			8U
32*e3ee7b7dSSheetal Tigadoli #define SPBR_DIV_MAX			255U
33*e3ee7b7dSSheetal Tigadoli #define NUM_CDRAM_BYTES			16U
34*e3ee7b7dSSheetal Tigadoli 
35*e3ee7b7dSSheetal Tigadoli /* Register fields */
36*e3ee7b7dSSheetal Tigadoli #define MSPI_SPCR0_MSB_BITS_8		0x00000020
37*e3ee7b7dSSheetal Tigadoli 
38*e3ee7b7dSSheetal Tigadoli /* Flash opcode and parameters */
39*e3ee7b7dSSheetal Tigadoli #define CDRAM_PCS0			2
40*e3ee7b7dSSheetal Tigadoli #define CDRAM_CONT			(1 << 7)
41*e3ee7b7dSSheetal Tigadoli #define CDRAM_BITS_EN			(1 << 6)
42*e3ee7b7dSSheetal Tigadoli #define CDRAM_QUAD_MODE			(1 << 8)
43*e3ee7b7dSSheetal Tigadoli #define CDRAM_RBIT_INPUT		(1 << 10)
44*e3ee7b7dSSheetal Tigadoli 
45*e3ee7b7dSSheetal Tigadoli /* MSPI registers */
46*e3ee7b7dSSheetal Tigadoli #define QSPI_MSPI_MODE_REG_BASE		(QSPI_REG_BASE + 0x200)
47*e3ee7b7dSSheetal Tigadoli #define MSPI_SPCR0_LSB_REG		0x000
48*e3ee7b7dSSheetal Tigadoli #define MSPI_SPCR0_MSB_REG		0x004
49*e3ee7b7dSSheetal Tigadoli #define MSPI_SPCR1_LSB_REG		0x008
50*e3ee7b7dSSheetal Tigadoli #define MSPI_SPCR1_MSB_REG		0x00c
51*e3ee7b7dSSheetal Tigadoli #define MSPI_NEWQP_REG			0x010
52*e3ee7b7dSSheetal Tigadoli #define MSPI_ENDQP_REG			0x014
53*e3ee7b7dSSheetal Tigadoli #define MSPI_SPCR2_REG			0x018
54*e3ee7b7dSSheetal Tigadoli #define MSPI_STATUS_REG			0x020
55*e3ee7b7dSSheetal Tigadoli #define MSPI_CPTQP_REG			0x024
56*e3ee7b7dSSheetal Tigadoli #define MSPI_TXRAM_REG			0x040
57*e3ee7b7dSSheetal Tigadoli #define MSPI_RXRAM_REG			0x0c0
58*e3ee7b7dSSheetal Tigadoli #define MSPI_CDRAM_REG			0x140
59*e3ee7b7dSSheetal Tigadoli #define MSPI_WRITE_LOCK_REG		0x180
60*e3ee7b7dSSheetal Tigadoli #define MSPI_DISABLE_FLUSH_GEN_REG	0x184
61*e3ee7b7dSSheetal Tigadoli 
62*e3ee7b7dSSheetal Tigadoli #define MSPI_SPCR0_MSB_REG_MSTR_SHIFT		7
63*e3ee7b7dSSheetal Tigadoli #define MSPI_SPCR0_MSB_REG_16_BITS_PER_WD_SHIFT	(0 << 2)
64*e3ee7b7dSSheetal Tigadoli #define MSPI_SPCR0_MSB_REG_MODE_MASK		0x3
65*e3ee7b7dSSheetal Tigadoli 
66*e3ee7b7dSSheetal Tigadoli /* BSPI registers */
67*e3ee7b7dSSheetal Tigadoli #define QSPI_BSPI_MODE_REG_BASE		QSPI_REG_BASE
68*e3ee7b7dSSheetal Tigadoli #define BSPI_MAST_N_BOOT_CTRL_REG	0x008
69*e3ee7b7dSSheetal Tigadoli #define BSPI_BUSY_STATUS_REG		0x00c
70*e3ee7b7dSSheetal Tigadoli 
71*e3ee7b7dSSheetal Tigadoli #define MSPI_CMD_COMPLETE_MASK		1
72*e3ee7b7dSSheetal Tigadoli #define BSPI_BUSY_MASK			1
73*e3ee7b7dSSheetal Tigadoli #define MSPI_CTRL_MASK			1
74*e3ee7b7dSSheetal Tigadoli 
75*e3ee7b7dSSheetal Tigadoli #define MSPI_SPE			(1 << 6)
76*e3ee7b7dSSheetal Tigadoli #define MSPI_CONT_AFTER_CMD		(1 << 7)
77*e3ee7b7dSSheetal Tigadoli 
78*e3ee7b7dSSheetal Tigadoli /* State */
79*e3ee7b7dSSheetal Tigadoli enum bcm_qspi_state {
80*e3ee7b7dSSheetal Tigadoli 	QSPI_STATE_DISABLED,
81*e3ee7b7dSSheetal Tigadoli 	QSPI_STATE_MSPI,
82*e3ee7b7dSSheetal Tigadoli 	QSPI_STATE_BSPI
83*e3ee7b7dSSheetal Tigadoli };
84*e3ee7b7dSSheetal Tigadoli 
85*e3ee7b7dSSheetal Tigadoli /* QSPI private data */
86*e3ee7b7dSSheetal Tigadoli struct bcmspi_priv {
87*e3ee7b7dSSheetal Tigadoli 	/* Specified SPI parameters */
88*e3ee7b7dSSheetal Tigadoli 	uint32_t max_hz;
89*e3ee7b7dSSheetal Tigadoli 	uint32_t spi_mode;
90*e3ee7b7dSSheetal Tigadoli 
91*e3ee7b7dSSheetal Tigadoli 	/* State */
92*e3ee7b7dSSheetal Tigadoli 	enum bcm_qspi_state state;
93*e3ee7b7dSSheetal Tigadoli 	int mspi_16bit;
94*e3ee7b7dSSheetal Tigadoli 
95*e3ee7b7dSSheetal Tigadoli 	/* Registers */
96*e3ee7b7dSSheetal Tigadoli 	uintptr_t mspi_hw;
97*e3ee7b7dSSheetal Tigadoli 	uintptr_t bspi_hw;
98*e3ee7b7dSSheetal Tigadoli };
99*e3ee7b7dSSheetal Tigadoli 
100*e3ee7b7dSSheetal Tigadoli int iproc_qspi_setup(uint32_t bus, uint32_t cs,
101*e3ee7b7dSSheetal Tigadoli 		     uint32_t max_hz, uint32_t mode);
102*e3ee7b7dSSheetal Tigadoli int iproc_qspi_claim_bus(void);
103*e3ee7b7dSSheetal Tigadoli void iproc_qspi_release_bus(void);
104*e3ee7b7dSSheetal Tigadoli int iproc_qspi_xfer(uint32_t bitlen, const void *dout,
105*e3ee7b7dSSheetal Tigadoli 		    void *din, unsigned long flags);
106*e3ee7b7dSSheetal Tigadoli 
107*e3ee7b7dSSheetal Tigadoli #endif	/* _IPROC_QSPI_H_ */
108