xref: /rk3399_rockchip-uboot/include/linux/mtd/st_smi.h (revision 0e88ff08febcb88fc4081f0393c4fca02b847146)
1f3fcf92dSVipin KUMAR /*
2f3fcf92dSVipin KUMAR  * (C) Copyright 2009
3f3fcf92dSVipin KUMAR  * Vipin Kumar, ST Micoelectronics, vipin.kumar@st.com.
4f3fcf92dSVipin KUMAR  *
5f3fcf92dSVipin KUMAR  * See file CREDITS for list of people who contributed to this
6f3fcf92dSVipin KUMAR  * project.
7f3fcf92dSVipin KUMAR  *
8f3fcf92dSVipin KUMAR  * This program is free software; you can redistribute it and/or
9f3fcf92dSVipin KUMAR  * modify it under the terms of the GNU General Public License as
10f3fcf92dSVipin KUMAR  * published by the Free Software Foundation; either version 2 of
11f3fcf92dSVipin KUMAR  * the License, or (at your option) any later version.
12f3fcf92dSVipin KUMAR  *
13f3fcf92dSVipin KUMAR  * This program is distributed in the hope that it will be useful,
14f3fcf92dSVipin KUMAR  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15f3fcf92dSVipin KUMAR  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16f3fcf92dSVipin KUMAR  * GNU General Public License for more details.
17f3fcf92dSVipin KUMAR  *
18f3fcf92dSVipin KUMAR  * You should have received a copy of the GNU General Public License
19f3fcf92dSVipin KUMAR  * along with this program; if not, write to the Free Software
20f3fcf92dSVipin KUMAR  * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
21f3fcf92dSVipin KUMAR  * MA 02111-1307 USA
22f3fcf92dSVipin KUMAR  */
23f3fcf92dSVipin KUMAR 
24f3fcf92dSVipin KUMAR #ifndef ST_SMI_H
25f3fcf92dSVipin KUMAR #define ST_SMI_H
26f3fcf92dSVipin KUMAR 
27f3fcf92dSVipin KUMAR /* 0xF800.0000 . 0xFBFF.FFFF	64MB	SMI (Serial Flash Mem) */
28f3fcf92dSVipin KUMAR /* 0xFC00.0000 . 0xFC1F.FFFF	2MB	SMI (Serial Flash Reg.) */
29f3fcf92dSVipin KUMAR 
30f3fcf92dSVipin KUMAR #define FLASH_START_ADDRESS	CONFIG_SYS_FLASH_BASE
31f3fcf92dSVipin KUMAR #define FLASH_BANK_SIZE		CONFIG_SYS_FLASH_BANK_SIZE
32f3fcf92dSVipin KUMAR 
33f3fcf92dSVipin KUMAR #define SMIBANK0_BASE		(FLASH_START_ADDRESS)
34f3fcf92dSVipin KUMAR #define SMIBANK1_BASE		(SMIBANK0_BASE + FLASH_BANK_SIZE)
35f3fcf92dSVipin KUMAR #define SMIBANK2_BASE		(SMIBANK1_BASE + FLASH_BANK_SIZE)
36f3fcf92dSVipin KUMAR #define SMIBANK3_BASE		(SMIBANK2_BASE + FLASH_BANK_SIZE)
37f3fcf92dSVipin KUMAR 
38f3fcf92dSVipin KUMAR #define BANK0			0
39f3fcf92dSVipin KUMAR #define BANK1			1
40f3fcf92dSVipin KUMAR #define BANK2			2
41f3fcf92dSVipin KUMAR #define BANK3			3
42f3fcf92dSVipin KUMAR 
43f3fcf92dSVipin KUMAR struct smi_regs {
44f3fcf92dSVipin KUMAR 	u32 smi_cr1;
45f3fcf92dSVipin KUMAR 	u32 smi_cr2;
46f3fcf92dSVipin KUMAR 	u32 smi_sr;
47f3fcf92dSVipin KUMAR 	u32 smi_tr;
48f3fcf92dSVipin KUMAR 	u32 smi_rr;
49f3fcf92dSVipin KUMAR };
50f3fcf92dSVipin KUMAR 
51f3fcf92dSVipin KUMAR /* CONTROL REG 1 */
52f3fcf92dSVipin KUMAR #define BANK_EN			0x0000000F	/* enables all banks */
53f3fcf92dSVipin KUMAR #define DSEL_TIME		0x00000060	/* Deselect time */
54f3fcf92dSVipin KUMAR #define PRESCAL5		0x00000500	/* AHB_CK prescaling value */
55f3fcf92dSVipin KUMAR #define PRESCALA		0x00000A00	/* AHB_CK prescaling value */
56f3fcf92dSVipin KUMAR #define PRESCAL3		0x00000300	/* AHB_CK prescaling value */
57f3fcf92dSVipin KUMAR #define PRESCAL4		0x00000400	/* AHB_CK prescaling value */
58f3fcf92dSVipin KUMAR #define SW_MODE			0x10000000	/* enables SW Mode */
59f3fcf92dSVipin KUMAR #define WB_MODE			0x20000000	/* Write Burst Mode */
60f3fcf92dSVipin KUMAR #define FAST_MODE		0x00008000	/* Fast Mode */
61f3fcf92dSVipin KUMAR #define HOLD1			0x00010000
62f3fcf92dSVipin KUMAR 
63f3fcf92dSVipin KUMAR /* CONTROL REG 2 */
64f3fcf92dSVipin KUMAR #define RD_STATUS_REG		0x00000400	/* reads status reg */
65f3fcf92dSVipin KUMAR #define WE			0x00000800	/* Write Enable */
66f3fcf92dSVipin KUMAR #define BANK0_SEL		0x00000000	/* Select Banck0 */
67f3fcf92dSVipin KUMAR #define BANK1_SEL		0x00001000	/* Select Banck1 */
68f3fcf92dSVipin KUMAR #define BANK2_SEL		0x00002000	/* Select Banck2 */
69f3fcf92dSVipin KUMAR #define BANK3_SEL		0x00003000	/* Select Banck3 */
70f3fcf92dSVipin KUMAR #define BANKSEL_SHIFT		12
71f3fcf92dSVipin KUMAR #define SEND			0x00000080	/* Send data */
72f3fcf92dSVipin KUMAR #define TX_LEN_1		0x00000001	/* data length = 1 byte */
73f3fcf92dSVipin KUMAR #define TX_LEN_2		0x00000002	/* data length = 2 byte */
74f3fcf92dSVipin KUMAR #define TX_LEN_3		0x00000003	/* data length = 3 byte */
75f3fcf92dSVipin KUMAR #define TX_LEN_4		0x00000004	/* data length = 4 byte */
76f3fcf92dSVipin KUMAR #define RX_LEN_1		0x00000010	/* data length = 1 byte */
77f3fcf92dSVipin KUMAR #define RX_LEN_2		0x00000020	/* data length = 2 byte */
78f3fcf92dSVipin KUMAR #define RX_LEN_3		0x00000030	/* data length = 3 byte */
79f3fcf92dSVipin KUMAR #define RX_LEN_4		0x00000040	/* data length = 4 byte */
80f3fcf92dSVipin KUMAR #define TFIE			0x00000100	/* Tx Flag Interrupt Enable */
81f3fcf92dSVipin KUMAR #define WCIE			0x00000200	/* WCF Interrupt Enable */
82f3fcf92dSVipin KUMAR 
83f3fcf92dSVipin KUMAR /* STATUS_REG */
84f3fcf92dSVipin KUMAR #define INT_WCF_CLR		0xFFFFFDFF	/* clear: WCF clear */
85f3fcf92dSVipin KUMAR #define INT_TFF_CLR		0xFFFFFEFF	/* clear: TFF clear */
86f3fcf92dSVipin KUMAR #define WIP_BIT			0x00000001	/* WIP Bit of SPI SR */
87f3fcf92dSVipin KUMAR #define WEL_BIT			0x00000002	/* WEL Bit of SPI SR */
88f3fcf92dSVipin KUMAR #define RSR			0x00000005	/* Read Status regiser */
89f3fcf92dSVipin KUMAR #define TFF			0x00000100	/* Transfer Finished FLag */
90f3fcf92dSVipin KUMAR #define WCF			0x00000200	/* Transfer Finished FLag */
91f3fcf92dSVipin KUMAR #define ERF1			0x00000400	/* Error Flag 1 */
92f3fcf92dSVipin KUMAR #define ERF2			0x00000800	/* Error Flag 2 */
93f3fcf92dSVipin KUMAR #define WM0			0x00001000	/* WM Bank 0 */
94f3fcf92dSVipin KUMAR #define WM1			0x00002000	/* WM Bank 1 */
95f3fcf92dSVipin KUMAR #define WM2			0x00004000	/* WM Bank 2 */
96f3fcf92dSVipin KUMAR #define WM3			0x00008000	/* WM Bank 3 */
97f3fcf92dSVipin KUMAR #define WM_SHIFT		12
98f3fcf92dSVipin KUMAR 
99f3fcf92dSVipin KUMAR /* TR REG */
100f3fcf92dSVipin KUMAR #define READ_ID			0x0000009F	/* Read Identification */
101f3fcf92dSVipin KUMAR #define BULK_ERASE		0x000000C7	/* BULK erase */
102f3fcf92dSVipin KUMAR #define SECTOR_ERASE		0x000000D8	/* SECTOR erase */
103f3fcf92dSVipin KUMAR #define WRITE_ENABLE		0x00000006	/* Wenable command to FLASH */
104f3fcf92dSVipin KUMAR 
105f3fcf92dSVipin KUMAR struct flash_dev {
106f3fcf92dSVipin KUMAR 	u32 density;
107f3fcf92dSVipin KUMAR 	ulong size;
108f3fcf92dSVipin KUMAR 	ushort sector_count;
109f3fcf92dSVipin KUMAR };
110f3fcf92dSVipin KUMAR 
111f3fcf92dSVipin KUMAR #define SFLASH_PAGE_SIZE	0x100	/* flash page size */
112*0e88ff08SAmit Virdi #define XFER_FINISH_TOUT	15	/* xfer finish timeout(in ms) */
113*0e88ff08SAmit Virdi #define WMODE_TOUT		15	/* write enable timeout(in ms) */
114f3fcf92dSVipin KUMAR 
115f3fcf92dSVipin KUMAR extern void smi_init(void);
116f3fcf92dSVipin KUMAR 
117f3fcf92dSVipin KUMAR #endif
118