xref: /rk3399_rockchip-uboot/include/pcmcia.h (revision 1a4596601fd395f3afb8f82f3f840c5e00bdd57a)
1affae2bfSwdenk /*
204a85b3bSwdenk  * (C) Copyright 2000-2004
3affae2bfSwdenk  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
4affae2bfSwdenk  *
5*1a459660SWolfgang Denk  * SPDX-License-Identifier:	GPL-2.0+
6affae2bfSwdenk  */
7affae2bfSwdenk 
8affae2bfSwdenk #ifndef _PCMCIA_H
9affae2bfSwdenk #define _PCMCIA_H
10affae2bfSwdenk 
11affae2bfSwdenk #include <common.h>
12affae2bfSwdenk #include <config.h>
13affae2bfSwdenk 
14affae2bfSwdenk /*
15affae2bfSwdenk  * Allow configuration to select PCMCIA slot,
16affae2bfSwdenk  * or try to generate a useful default
17affae2bfSwdenk  */
18639221c7SJon Loeliger #if defined(CONFIG_CMD_PCMCIA) || \
19639221c7SJon Loeliger     (defined(CONFIG_CMD_IDE) && \
20affae2bfSwdenk 	(defined(CONFIG_IDE_8xx_PCCARD) || defined(CONFIG_IDE_8xx_DIRECT) ) )
21affae2bfSwdenk 
22affae2bfSwdenk #if !defined(CONFIG_PCMCIA_SLOT_A) && !defined(CONFIG_PCMCIA_SLOT_B)
23affae2bfSwdenk 
24affae2bfSwdenk 					/* The RPX series use SLOT_B	*/
25affae2bfSwdenk #if defined(CONFIG_RPXCLASSIC) || defined(CONFIG_RPXLITE)
26affae2bfSwdenk # define CONFIG_PCMCIA_SLOT_B
27180d3f74Swdenk #elif defined(CONFIG_ADS)		/* The ADS  board uses SLOT_A	*/
28affae2bfSwdenk # define CONFIG_PCMCIA_SLOT_A
29affae2bfSwdenk #elif defined(CONFIG_FADS)		/* The FADS series are a mess	*/
30180d3f74Swdenk # if defined(CONFIG_MPC86x) || defined(CONFIG_MPC821)
31affae2bfSwdenk #  define CONFIG_PCMCIA_SLOT_A
32affae2bfSwdenk # else
33affae2bfSwdenk #  define CONFIG_PCMCIA_SLOT_B
34affae2bfSwdenk # endif
35dc7c9a1aSwdenk #elif defined(CONFIG_TQM8xxL) || defined(CONFIG_SVM_SC8xx)
36affae2bfSwdenk # define	CONFIG_PCMCIA_SLOT_B	/* The TQM8xxL use SLOT_B	*/
37affae2bfSwdenk #elif defined(CONFIG_SPD823TS)		/* The SPD8xx  use SLOT_B	*/
38affae2bfSwdenk # define CONFIG_PCMCIA_SLOT_B
39affae2bfSwdenk #elif defined(CONFIG_IVMS8) || defined(CONFIG_IVML24)	/* The IVM* use SLOT_A	*/
40affae2bfSwdenk # define CONFIG_PCMCIA_SLOT_A
41affae2bfSwdenk #elif defined(CONFIG_LWMON)		/* The LWMON  use SLOT_B	*/
42affae2bfSwdenk # define CONFIG_PCMCIA_SLOT_B
43affae2bfSwdenk #elif defined(CONFIG_ICU862)		/* The ICU862 use SLOT_B	*/
44affae2bfSwdenk # define CONFIG_PCMCIA_SLOT_B
45affae2bfSwdenk #elif defined(CONFIG_R360MPI)		/* The R360MPI use SLOT_B	*/
46affae2bfSwdenk # define CONFIG_PCMCIA_SLOT_B
4766fd3d1cSwdenk #elif defined(CONFIG_ATC)		/* The ATC use SLOT_A	*/
4866fd3d1cSwdenk # define CONFIG_PCMCIA_SLOT_A
4904a85b3bSwdenk #elif defined(CONFIG_NETTA)
5004a85b3bSwdenk # define CONFIG_PCMCIA_SLOT_A
51f7d1572bSwdenk #elif defined(CONFIG_UC100)		/* The UC100 use SLOT_B	        */
52f7d1572bSwdenk # define CONFIG_PCMCIA_SLOT_B
53affae2bfSwdenk #else
54affae2bfSwdenk # error "PCMCIA Slot not configured"
55affae2bfSwdenk #endif
56affae2bfSwdenk 
57affae2bfSwdenk #endif /* !defined(CONFIG_PCMCIA_SLOT_A) && !defined(CONFIG_PCMCIA_SLOT_B) */
58affae2bfSwdenk 
59affae2bfSwdenk /* Make sure exactly one slot is defined - we support only one for now */
60affae2bfSwdenk #if !defined(CONFIG_PCMCIA_SLOT_A) && !defined(CONFIG_PCMCIA_SLOT_B)
61affae2bfSwdenk #error Neither CONFIG_PCMCIA_SLOT_A nor CONFIG_PCMCIA_SLOT_B configured
62affae2bfSwdenk #endif
63affae2bfSwdenk #if defined(CONFIG_PCMCIA_SLOT_A) && defined(CONFIG_PCMCIA_SLOT_B)
64affae2bfSwdenk #error Both CONFIG_PCMCIA_SLOT_A and CONFIG_PCMCIA_SLOT_B configured
65affae2bfSwdenk #endif
66affae2bfSwdenk 
67ea909b76Swdenk #ifndef PCMCIA_SOCKETS_NO
68affae2bfSwdenk #define PCMCIA_SOCKETS_NO	1
69ea909b76Swdenk #endif
70ea909b76Swdenk #ifndef PCMCIA_MEM_WIN_NO
71affae2bfSwdenk #define PCMCIA_MEM_WIN_NO	4
72ea909b76Swdenk #endif
73affae2bfSwdenk #define PCMCIA_IO_WIN_NO	2
74affae2bfSwdenk 
75affae2bfSwdenk /* define _slot_ to be able to optimize macros */
76affae2bfSwdenk #ifdef CONFIG_PCMCIA_SLOT_A
77affae2bfSwdenk # define _slot_			0
78affae2bfSwdenk # define PCMCIA_SLOT_MSG	"slot A"
79affae2bfSwdenk # define PCMCIA_SLOT_x		PCMCIA_PSLOT_A
80affae2bfSwdenk #else
81affae2bfSwdenk # define _slot_			1
82affae2bfSwdenk # define PCMCIA_SLOT_MSG	"slot B"
83affae2bfSwdenk # define PCMCIA_SLOT_x		PCMCIA_PSLOT_B
84affae2bfSwdenk #endif
85affae2bfSwdenk 
86affae2bfSwdenk /*
87affae2bfSwdenk  * The TQM850L hardware has two pins swapped! Grrrrgh!
88affae2bfSwdenk  */
89affae2bfSwdenk #ifdef	CONFIG_TQM850L
90affae2bfSwdenk #define __MY_PCMCIA_GCRX_CXRESET	PCMCIA_GCRX_CXOE
91affae2bfSwdenk #define __MY_PCMCIA_GCRX_CXOE		PCMCIA_GCRX_CXRESET
92affae2bfSwdenk #else
93affae2bfSwdenk #define __MY_PCMCIA_GCRX_CXRESET	PCMCIA_GCRX_CXRESET
94affae2bfSwdenk #define __MY_PCMCIA_GCRX_CXOE		PCMCIA_GCRX_CXOE
95affae2bfSwdenk #endif
96affae2bfSwdenk 
97affae2bfSwdenk /*
98affae2bfSwdenk  * This structure is used to address each window in the PCMCIA controller.
99affae2bfSwdenk  *
100affae2bfSwdenk  * Keep in mind that we assume that pcmcia_win_t[n+1] is mapped directly
101affae2bfSwdenk  * after pcmcia_win_t[n]...
102affae2bfSwdenk  */
103affae2bfSwdenk 
104affae2bfSwdenk typedef struct {
105affae2bfSwdenk 	ulong	br;
106affae2bfSwdenk 	ulong	or;
107affae2bfSwdenk } pcmcia_win_t;
108affae2bfSwdenk 
109affae2bfSwdenk /*
110affae2bfSwdenk  * Definitions for PCMCIA control registers to operate in IDE mode
111affae2bfSwdenk  *
112affae2bfSwdenk  * All timing related setup (PCMCIA_SHT, PCMCIA_SST, PCMCIA_SL)
113affae2bfSwdenk  * to be done later (depending on CPU clock)
114affae2bfSwdenk  */
115affae2bfSwdenk 
116affae2bfSwdenk /* Window 0:
117affae2bfSwdenk  *	Base: 0xFE100000	CS1
118affae2bfSwdenk  *	Port Size:     2 Bytes
119affae2bfSwdenk  *	Port Size:    16 Bit
120affae2bfSwdenk  *	Common Memory Space
121affae2bfSwdenk  */
122affae2bfSwdenk 
1236d0f6bcfSJean-Christophe PLAGNIOL-VILLARD #define CONFIG_SYS_PCMCIA_PBR0		0xFE100000
1246d0f6bcfSJean-Christophe PLAGNIOL-VILLARD #define CONFIG_SYS_PCMCIA_POR0	    (	PCMCIA_BSIZE_2	\
125affae2bfSwdenk 			    |	PCMCIA_PPS_16	\
126affae2bfSwdenk 			    |	PCMCIA_PRS_MEM	\
127affae2bfSwdenk 			    |	PCMCIA_SLOT_x	\
128affae2bfSwdenk 			    |	PCMCIA_PV	\
129affae2bfSwdenk 			    )
130affae2bfSwdenk 
131affae2bfSwdenk /* Window 1:
132affae2bfSwdenk  *	Base: 0xFE100080	CS1
133affae2bfSwdenk  *	Port Size:     8 Bytes
134affae2bfSwdenk  *	Port Size:     8 Bit
135affae2bfSwdenk  *	Common Memory Space
136affae2bfSwdenk  */
137affae2bfSwdenk 
1386d0f6bcfSJean-Christophe PLAGNIOL-VILLARD #define CONFIG_SYS_PCMCIA_PBR1		0xFE100080
1396d0f6bcfSJean-Christophe PLAGNIOL-VILLARD #define CONFIG_SYS_PCMCIA_POR1	    (	PCMCIA_BSIZE_8	\
140affae2bfSwdenk 			    |	PCMCIA_PPS_8	\
141affae2bfSwdenk 			    |	PCMCIA_PRS_MEM	\
142affae2bfSwdenk 			    |	PCMCIA_SLOT_x	\
143affae2bfSwdenk 			    |	PCMCIA_PV	\
144affae2bfSwdenk 			    )
145affae2bfSwdenk 
146affae2bfSwdenk /* Window 2:
147affae2bfSwdenk  *	Base: 0xFE100100	CS2
148affae2bfSwdenk  *	Port Size:     8 Bytes
149affae2bfSwdenk  *	Port Size:     8 Bit
150affae2bfSwdenk  *	Common Memory Space
151affae2bfSwdenk  */
152affae2bfSwdenk 
1536d0f6bcfSJean-Christophe PLAGNIOL-VILLARD #define CONFIG_SYS_PCMCIA_PBR2		0xFE100100
1546d0f6bcfSJean-Christophe PLAGNIOL-VILLARD #define CONFIG_SYS_PCMCIA_POR2	    (	PCMCIA_BSIZE_8	\
155affae2bfSwdenk 			    |	PCMCIA_PPS_8	\
156affae2bfSwdenk 			    |	PCMCIA_PRS_MEM	\
157affae2bfSwdenk 			    |	PCMCIA_SLOT_x	\
158affae2bfSwdenk 			    |	PCMCIA_PV	\
159affae2bfSwdenk 			    )
160affae2bfSwdenk 
161affae2bfSwdenk /* Window 3:
162affae2bfSwdenk  *	not used
163affae2bfSwdenk  */
1646d0f6bcfSJean-Christophe PLAGNIOL-VILLARD #define CONFIG_SYS_PCMCIA_PBR3		0
1656d0f6bcfSJean-Christophe PLAGNIOL-VILLARD #define CONFIG_SYS_PCMCIA_POR3		0
166affae2bfSwdenk 
167affae2bfSwdenk /* Window 4:
168affae2bfSwdenk  *	Base: 0xFE100C00	CS1
169affae2bfSwdenk  *	Port Size:     2 Bytes
170affae2bfSwdenk  *	Port Size:    16 Bit
171affae2bfSwdenk  *	Common Memory Space
172affae2bfSwdenk  */
173affae2bfSwdenk 
1746d0f6bcfSJean-Christophe PLAGNIOL-VILLARD #define CONFIG_SYS_PCMCIA_PBR4		0xFE100C00
1756d0f6bcfSJean-Christophe PLAGNIOL-VILLARD #define CONFIG_SYS_PCMCIA_POR4	    (	PCMCIA_BSIZE_2	\
176affae2bfSwdenk 			    |	PCMCIA_PPS_16	\
177affae2bfSwdenk 			    |	PCMCIA_PRS_MEM	\
178affae2bfSwdenk 			    |	PCMCIA_SLOT_x	\
179affae2bfSwdenk 			    |	PCMCIA_PV	\
180affae2bfSwdenk 			    )
181affae2bfSwdenk 
182affae2bfSwdenk /* Window 5:
183affae2bfSwdenk  *	Base: 0xFE100C80	CS1
184affae2bfSwdenk  *	Port Size:     8 Bytes
185affae2bfSwdenk  *	Port Size:     8 Bit
186affae2bfSwdenk  *	Common Memory Space
187affae2bfSwdenk  */
188affae2bfSwdenk 
1896d0f6bcfSJean-Christophe PLAGNIOL-VILLARD #define CONFIG_SYS_PCMCIA_PBR5		0xFE100C80
1906d0f6bcfSJean-Christophe PLAGNIOL-VILLARD #define CONFIG_SYS_PCMCIA_POR5	    (	PCMCIA_BSIZE_8	\
191affae2bfSwdenk 			    |	PCMCIA_PPS_8	\
192affae2bfSwdenk 			    |	PCMCIA_PRS_MEM	\
193affae2bfSwdenk 			    |	PCMCIA_SLOT_x	\
194affae2bfSwdenk 			    |	PCMCIA_PV	\
195affae2bfSwdenk 			    )
196affae2bfSwdenk 
197affae2bfSwdenk /* Window 6:
198affae2bfSwdenk  *	Base: 0xFE100D00	CS2
199affae2bfSwdenk  *	Port Size:     8 Bytes
200affae2bfSwdenk  *	Port Size:     8 Bit
201affae2bfSwdenk  *	Common Memory Space
202affae2bfSwdenk  */
203affae2bfSwdenk 
2046d0f6bcfSJean-Christophe PLAGNIOL-VILLARD #define CONFIG_SYS_PCMCIA_PBR6		0xFE100D00
2056d0f6bcfSJean-Christophe PLAGNIOL-VILLARD #define CONFIG_SYS_PCMCIA_POR6	    (	PCMCIA_BSIZE_8	\
206affae2bfSwdenk 			    |	PCMCIA_PPS_8	\
207affae2bfSwdenk 			    |	PCMCIA_PRS_MEM	\
208affae2bfSwdenk 			    |	PCMCIA_SLOT_x	\
209affae2bfSwdenk 			    |	PCMCIA_PV	\
210affae2bfSwdenk 			    )
211affae2bfSwdenk 
212affae2bfSwdenk /* Window 7:
213affae2bfSwdenk  *	not used
214affae2bfSwdenk  */
2156d0f6bcfSJean-Christophe PLAGNIOL-VILLARD #define CONFIG_SYS_PCMCIA_PBR7		0
2166d0f6bcfSJean-Christophe PLAGNIOL-VILLARD #define CONFIG_SYS_PCMCIA_POR7		0
217affae2bfSwdenk 
218affae2bfSwdenk /**********************************************************************/
219affae2bfSwdenk 
220affae2bfSwdenk /*
221affae2bfSwdenk  * CIS Tupel codes
222affae2bfSwdenk  */
223affae2bfSwdenk #define CISTPL_NULL		0x00
224affae2bfSwdenk #define CISTPL_DEVICE		0x01
225affae2bfSwdenk #define CISTPL_LONGLINK_CB	0x02
226affae2bfSwdenk #define CISTPL_INDIRECT		0x03
227affae2bfSwdenk #define CISTPL_CONFIG_CB	0x04
228affae2bfSwdenk #define CISTPL_CFTABLE_ENTRY_CB 0x05
229affae2bfSwdenk #define CISTPL_LONGLINK_MFC	0x06
230affae2bfSwdenk #define CISTPL_BAR		0x07
231affae2bfSwdenk #define CISTPL_PWR_MGMNT	0x08
232affae2bfSwdenk #define CISTPL_EXTDEVICE	0x09
233affae2bfSwdenk #define CISTPL_CHECKSUM		0x10
234affae2bfSwdenk #define CISTPL_LONGLINK_A	0x11
235affae2bfSwdenk #define CISTPL_LONGLINK_C	0x12
236affae2bfSwdenk #define CISTPL_LINKTARGET	0x13
237affae2bfSwdenk #define CISTPL_NO_LINK		0x14
238affae2bfSwdenk #define CISTPL_VERS_1		0x15
239affae2bfSwdenk #define CISTPL_ALTSTR		0x16
240affae2bfSwdenk #define CISTPL_DEVICE_A		0x17
241affae2bfSwdenk #define CISTPL_JEDEC_C		0x18
242affae2bfSwdenk #define CISTPL_JEDEC_A		0x19
243affae2bfSwdenk #define CISTPL_CONFIG		0x1a
244affae2bfSwdenk #define CISTPL_CFTABLE_ENTRY	0x1b
245affae2bfSwdenk #define CISTPL_DEVICE_OC	0x1c
246affae2bfSwdenk #define CISTPL_DEVICE_OA	0x1d
247affae2bfSwdenk #define CISTPL_DEVICE_GEO	0x1e
248affae2bfSwdenk #define CISTPL_DEVICE_GEO_A	0x1f
249affae2bfSwdenk #define CISTPL_MANFID		0x20
250affae2bfSwdenk #define CISTPL_FUNCID		0x21
251affae2bfSwdenk #define CISTPL_FUNCE		0x22
252affae2bfSwdenk #define CISTPL_SWIL		0x23
253affae2bfSwdenk #define CISTPL_END		0xff
254affae2bfSwdenk 
255affae2bfSwdenk /*
256affae2bfSwdenk  * CIS Function ID codes
257affae2bfSwdenk  */
258affae2bfSwdenk #define CISTPL_FUNCID_MULTI	0x00
259affae2bfSwdenk #define CISTPL_FUNCID_MEMORY	0x01
260affae2bfSwdenk #define CISTPL_FUNCID_SERIAL	0x02
261affae2bfSwdenk #define CISTPL_FUNCID_PARALLEL	0x03
262affae2bfSwdenk #define CISTPL_FUNCID_FIXED	0x04
263affae2bfSwdenk #define CISTPL_FUNCID_VIDEO	0x05
264affae2bfSwdenk #define CISTPL_FUNCID_NETWORK	0x06
265affae2bfSwdenk #define CISTPL_FUNCID_AIMS	0x07
266affae2bfSwdenk #define CISTPL_FUNCID_SCSI	0x08
267affae2bfSwdenk 
268affae2bfSwdenk /*
269affae2bfSwdenk  * Fixed Disk FUNCE codes
270affae2bfSwdenk  */
271affae2bfSwdenk #define CISTPL_IDE_INTERFACE	0x01
272affae2bfSwdenk 
273affae2bfSwdenk #define CISTPL_FUNCE_IDE_IFACE	0x01
274affae2bfSwdenk #define CISTPL_FUNCE_IDE_MASTER	0x02
275affae2bfSwdenk #define CISTPL_FUNCE_IDE_SLAVE	0x03
276affae2bfSwdenk 
277affae2bfSwdenk /* First feature byte */
278affae2bfSwdenk #define CISTPL_IDE_SILICON	0x04
279affae2bfSwdenk #define CISTPL_IDE_UNIQUE	0x08
280affae2bfSwdenk #define CISTPL_IDE_DUAL		0x10
281affae2bfSwdenk 
282affae2bfSwdenk /* Second feature byte */
283affae2bfSwdenk #define CISTPL_IDE_HAS_SLEEP	0x01
284affae2bfSwdenk #define CISTPL_IDE_HAS_STANDBY	0x02
285affae2bfSwdenk #define CISTPL_IDE_HAS_IDLE	0x04
286affae2bfSwdenk #define CISTPL_IDE_LOW_POWER	0x08
287affae2bfSwdenk #define CISTPL_IDE_REG_INHIBIT	0x10
288affae2bfSwdenk #define CISTPL_IDE_HAS_INDEX	0x20
289affae2bfSwdenk #define CISTPL_IDE_IOIS16	0x40
290affae2bfSwdenk 
291068b60a0SJon Loeliger #endif
292affae2bfSwdenk 
2939d407995SWolfgang Denk #ifdef	CONFIG_8xx
2949d407995SWolfgang Denk extern u_int *pcmcia_pgcrx[];
2959d407995SWolfgang Denk #define	PCMCIA_PGCRX(slot)	(*pcmcia_pgcrx[slot])
2969d407995SWolfgang Denk #endif
2979d407995SWolfgang Denk 
298c1ff6d88SMarek Vasut #if defined(CONFIG_CMD_IDE) && defined(CONFIG_IDE_8xx_PCCARD)
2999d407995SWolfgang Denk extern int check_ide_device(int slot);
3009d407995SWolfgang Denk #endif
3019d407995SWolfgang Denk 
302affae2bfSwdenk #endif /* _PCMCIA_H */
303