xref: /rk3399_rockchip-uboot/drivers/spi/fsl_qspi.h (revision f0d9665a8872f98600dac3070805dcf869899d45)
16b57ff6fSAlison Wang /*
26b57ff6fSAlison Wang  * Copyright 2013-2014 Freescale Semiconductor, Inc.
36b57ff6fSAlison Wang  *
46b57ff6fSAlison Wang  * Register definitions for Freescale QSPI
56b57ff6fSAlison Wang  *
66b57ff6fSAlison Wang  * SPDX-License-Identifier:	GPL-2.0+
76b57ff6fSAlison Wang  */
86b57ff6fSAlison Wang 
96b57ff6fSAlison Wang #ifndef _FSL_QSPI_H_
106b57ff6fSAlison Wang #define _FSL_QSPI_H_
116b57ff6fSAlison Wang 
126b57ff6fSAlison Wang struct fsl_qspi_regs {
136b57ff6fSAlison Wang 	u32 mcr;
146b57ff6fSAlison Wang 	u32 rsvd0[1];
156b57ff6fSAlison Wang 	u32 ipcr;
166b57ff6fSAlison Wang 	u32 flshcr;
176b57ff6fSAlison Wang 	u32 buf0cr;
186b57ff6fSAlison Wang 	u32 buf1cr;
196b57ff6fSAlison Wang 	u32 buf2cr;
206b57ff6fSAlison Wang 	u32 buf3cr;
216b57ff6fSAlison Wang 	u32 bfgencr;
226b57ff6fSAlison Wang 	u32 soccr;
236b57ff6fSAlison Wang 	u32 rsvd1[2];
246b57ff6fSAlison Wang 	u32 buf0ind;
256b57ff6fSAlison Wang 	u32 buf1ind;
266b57ff6fSAlison Wang 	u32 buf2ind;
276b57ff6fSAlison Wang 	u32 rsvd2[49];
286b57ff6fSAlison Wang 	u32 sfar;
296b57ff6fSAlison Wang 	u32 rsvd3[1];
306b57ff6fSAlison Wang 	u32 smpr;
316b57ff6fSAlison Wang 	u32 rbsr;
326b57ff6fSAlison Wang 	u32 rbct;
336b57ff6fSAlison Wang 	u32 rsvd4[15];
346b57ff6fSAlison Wang 	u32 tbsr;
356b57ff6fSAlison Wang 	u32 tbdr;
366b57ff6fSAlison Wang 	u32 rsvd5[1];
376b57ff6fSAlison Wang 	u32 sr;
386b57ff6fSAlison Wang 	u32 fr;
396b57ff6fSAlison Wang 	u32 rser;
406b57ff6fSAlison Wang 	u32 spndst;
416b57ff6fSAlison Wang 	u32 sptrclr;
426b57ff6fSAlison Wang 	u32 rsvd6[4];
436b57ff6fSAlison Wang 	u32 sfa1ad;
446b57ff6fSAlison Wang 	u32 sfa2ad;
456b57ff6fSAlison Wang 	u32 sfb1ad;
466b57ff6fSAlison Wang 	u32 sfb2ad;
476b57ff6fSAlison Wang 	u32 rsvd7[28];
486b57ff6fSAlison Wang 	u32 rbdr[32];
496b57ff6fSAlison Wang 	u32 rsvd8[32];
506b57ff6fSAlison Wang 	u32 lutkey;
516b57ff6fSAlison Wang 	u32 lckcr;
526b57ff6fSAlison Wang 	u32 rsvd9[2];
536b57ff6fSAlison Wang 	u32 lut[64];
546b57ff6fSAlison Wang };
556b57ff6fSAlison Wang 
566b57ff6fSAlison Wang #define QSPI_IPCR_SEQID_SHIFT		24
576b57ff6fSAlison Wang #define QSPI_IPCR_SEQID_MASK		(0xf << QSPI_IPCR_SEQID_SHIFT)
586b57ff6fSAlison Wang 
596b57ff6fSAlison Wang #define QSPI_MCR_END_CFD_SHIFT		2
606b57ff6fSAlison Wang #define QSPI_MCR_END_CFD_MASK		(3 << QSPI_MCR_END_CFD_SHIFT)
615f7f70c1SPeng Fan #ifdef CONFIG_SYS_FSL_QSPI_AHB
625f7f70c1SPeng Fan /* AHB needs 64bit operation */
635f7f70c1SPeng Fan #define QSPI_MCR_END_CFD_LE		(3 << QSPI_MCR_END_CFD_SHIFT)
645f7f70c1SPeng Fan #else
656b57ff6fSAlison Wang #define QSPI_MCR_END_CFD_LE		(1 << QSPI_MCR_END_CFD_SHIFT)
665f7f70c1SPeng Fan #endif
676b57ff6fSAlison Wang #define QSPI_MCR_DDR_EN_SHIFT		7
686b57ff6fSAlison Wang #define QSPI_MCR_DDR_EN_MASK		(1 << QSPI_MCR_DDR_EN_SHIFT)
696b57ff6fSAlison Wang #define QSPI_MCR_CLR_RXF_SHIFT		10
706b57ff6fSAlison Wang #define QSPI_MCR_CLR_RXF_MASK		(1 << QSPI_MCR_CLR_RXF_SHIFT)
716b57ff6fSAlison Wang #define QSPI_MCR_CLR_TXF_SHIFT		11
726b57ff6fSAlison Wang #define QSPI_MCR_CLR_TXF_MASK		(1 << QSPI_MCR_CLR_TXF_SHIFT)
736b57ff6fSAlison Wang #define QSPI_MCR_MDIS_SHIFT		14
746b57ff6fSAlison Wang #define QSPI_MCR_MDIS_MASK		(1 << QSPI_MCR_MDIS_SHIFT)
756b57ff6fSAlison Wang #define QSPI_MCR_RESERVED_SHIFT		16
766b57ff6fSAlison Wang #define QSPI_MCR_RESERVED_MASK		(0xf << QSPI_MCR_RESERVED_SHIFT)
775f7f70c1SPeng Fan #define QSPI_MCR_SWRSTHD_SHIFT		1
785f7f70c1SPeng Fan #define QSPI_MCR_SWRSTHD_MASK		(1 << QSPI_MCR_SWRSTHD_SHIFT)
795f7f70c1SPeng Fan #define QSPI_MCR_SWRSTSD_SHIFT		0
805f7f70c1SPeng Fan #define QSPI_MCR_SWRSTSD_MASK		(1 << QSPI_MCR_SWRSTSD_SHIFT)
816b57ff6fSAlison Wang 
826b57ff6fSAlison Wang #define QSPI_SMPR_HSENA_SHIFT		0
836b57ff6fSAlison Wang #define QSPI_SMPR_HSENA_MASK		(1 << QSPI_SMPR_HSENA_SHIFT)
846b57ff6fSAlison Wang #define QSPI_SMPR_FSPHS_SHIFT		5
856b57ff6fSAlison Wang #define QSPI_SMPR_FSPHS_MASK		(1 << QSPI_SMPR_FSPHS_SHIFT)
866b57ff6fSAlison Wang #define QSPI_SMPR_FSDLY_SHIFT		6
876b57ff6fSAlison Wang #define QSPI_SMPR_FSDLY_MASK		(1 << QSPI_SMPR_FSDLY_SHIFT)
886b57ff6fSAlison Wang #define QSPI_SMPR_DDRSMP_SHIFT		16
896b57ff6fSAlison Wang #define QSPI_SMPR_DDRSMP_MASK		(7 << QSPI_SMPR_DDRSMP_SHIFT)
906b57ff6fSAlison Wang 
915f7f70c1SPeng Fan #define QSPI_BUFXCR_INVALID_MSTRID	0xe
925f7f70c1SPeng Fan #define QSPI_BUF3CR_ALLMST_SHIFT	31
935f7f70c1SPeng Fan #define QSPI_BUF3CR_ALLMST_MASK		(1 << QSPI_BUF3CR_ALLMST_SHIFT)
945f7f70c1SPeng Fan #define QSPI_BUF3CR_ADATSZ_SHIFT	8
955f7f70c1SPeng Fan #define QSPI_BUF3CR_ADATSZ_MASK		(0xFF << QSPI_BUF3CR_ADATSZ_SHIFT)
965f7f70c1SPeng Fan 
976b57ff6fSAlison Wang #define QSPI_BFGENCR_SEQID_SHIFT	12
986b57ff6fSAlison Wang #define QSPI_BFGENCR_SEQID_MASK		(0xf << QSPI_BFGENCR_SEQID_SHIFT)
996b57ff6fSAlison Wang #define QSPI_BFGENCR_PAR_EN_SHIFT	16
1006b57ff6fSAlison Wang #define QSPI_BFGENCR_PAR_EN_MASK	(1 << QSPI_BFGENCR_PAR_EN_SHIFT)
1016b57ff6fSAlison Wang 
1026b57ff6fSAlison Wang #define QSPI_RBSR_RDBFL_SHIFT		8
1036b57ff6fSAlison Wang #define QSPI_RBSR_RDBFL_MASK		(0x3f << QSPI_RBSR_RDBFL_SHIFT)
1046b57ff6fSAlison Wang 
1056b57ff6fSAlison Wang #define QSPI_RBCT_RXBRD_SHIFT		8
1066b57ff6fSAlison Wang #define QSPI_RBCT_RXBRD_USEIPS		(1 << QSPI_RBCT_RXBRD_SHIFT)
1076b57ff6fSAlison Wang 
108*f0d9665aSSuresh Gupta #define QSPI_SR_AHB_ACC_SHIFT		2
109*f0d9665aSSuresh Gupta #define QSPI_SR_AHB_ACC_MASK		(1 << QSPI_SR_AHB_ACC_SHIFT)
110*f0d9665aSSuresh Gupta #define QSPI_SR_IP_ACC_SHIFT		1
111*f0d9665aSSuresh Gupta #define QSPI_SR_IP_ACC_MASK		(1 << QSPI_SR_IP_ACC_SHIFT)
1126b57ff6fSAlison Wang #define QSPI_SR_BUSY_SHIFT		0
1136b57ff6fSAlison Wang #define QSPI_SR_BUSY_MASK		(1 << QSPI_SR_BUSY_SHIFT)
1146b57ff6fSAlison Wang 
1156b57ff6fSAlison Wang #define QSPI_LCKCR_LOCK			0x1
1166b57ff6fSAlison Wang #define QSPI_LCKCR_UNLOCK		0x2
1176b57ff6fSAlison Wang 
1186b57ff6fSAlison Wang #define LUT_KEY_VALUE			0x5af05af0
1196b57ff6fSAlison Wang 
1206b57ff6fSAlison Wang #define OPRND0_SHIFT			0
1216b57ff6fSAlison Wang #define OPRND0(x)			((x) << OPRND0_SHIFT)
1226b57ff6fSAlison Wang #define PAD0_SHIFT			8
1236b57ff6fSAlison Wang #define PAD0(x)				((x) << PAD0_SHIFT)
1246b57ff6fSAlison Wang #define INSTR0_SHIFT			10
1256b57ff6fSAlison Wang #define INSTR0(x)			((x) << INSTR0_SHIFT)
1266b57ff6fSAlison Wang #define OPRND1_SHIFT			16
1276b57ff6fSAlison Wang #define OPRND1(x)			((x) << OPRND1_SHIFT)
1286b57ff6fSAlison Wang #define PAD1_SHIFT			24
1296b57ff6fSAlison Wang #define PAD1(x)				((x) << PAD1_SHIFT)
1306b57ff6fSAlison Wang #define INSTR1_SHIFT			26
1316b57ff6fSAlison Wang #define INSTR1(x)			((x) << INSTR1_SHIFT)
1326b57ff6fSAlison Wang 
1336b57ff6fSAlison Wang #define LUT_CMD				1
1346b57ff6fSAlison Wang #define LUT_ADDR			2
1356b57ff6fSAlison Wang #define LUT_DUMMY			3
1366b57ff6fSAlison Wang #define LUT_READ			7
1376b57ff6fSAlison Wang #define LUT_WRITE			8
1386b57ff6fSAlison Wang 
1396b57ff6fSAlison Wang #define LUT_PAD1			0
1406b57ff6fSAlison Wang #define LUT_PAD2			1
1416b57ff6fSAlison Wang #define LUT_PAD4			2
1426b57ff6fSAlison Wang 
1436b57ff6fSAlison Wang #define ADDR24BIT			0x18
1446b57ff6fSAlison Wang #define ADDR32BIT			0x20
1456b57ff6fSAlison Wang 
1466b57ff6fSAlison Wang #endif /* _FSL_QSPI_H_ */
147