xref: /plan9/sys/src/9/kw/io.h (revision 7365b686ae7154552580a79fd89a0ba5dc9297c4)
1154abd99SDavid du Colombier enum {
2154abd99SDavid du Colombier 	BusCBUS		= 0,		/* Corollary CBUS */
3154abd99SDavid du Colombier 	BusCBUSII,			/* Corollary CBUS II */
4154abd99SDavid du Colombier 	BusEISA,			/* Extended ISA */
5154abd99SDavid du Colombier 	BusFUTURE,			/* IEEE Futurebus */
6154abd99SDavid du Colombier 	BusINTERN,			/* Internal bus */
7154abd99SDavid du Colombier 	BusISA,				/* Industry Standard Architecture */
8154abd99SDavid du Colombier 	BusMBI,				/* Multibus I */
9154abd99SDavid du Colombier 	BusMBII,			/* Multibus II */
10154abd99SDavid du Colombier 	BusMCA,				/* Micro Channel Architecture */
11154abd99SDavid du Colombier 	BusMPI,				/* MPI */
12154abd99SDavid du Colombier 	BusMPSA,			/* MPSA */
13154abd99SDavid du Colombier 	BusNUBUS,			/* Apple Macintosh NuBus */
14154abd99SDavid du Colombier 	BusPCI,				/* Peripheral Component Interconnect */
15154abd99SDavid du Colombier 	BusPCMCIA,			/* PC Memory Card International Association */
16154abd99SDavid du Colombier 	BusTC,				/* DEC TurboChannel */
17154abd99SDavid du Colombier 	BusVL,				/* VESA Local bus */
18154abd99SDavid du Colombier 	BusVME,				/* VMEbus */
19154abd99SDavid du Colombier 	BusXPRESS,			/* Express System Bus */
20154abd99SDavid du Colombier 	BUSUNKNOWN = -1
21154abd99SDavid du Colombier };
22154abd99SDavid du Colombier 
23154abd99SDavid du Colombier #define MKBUS(t,b,d,f)	(((t)<<24)|(((b)&0xFF)<<16)|(((d)&0x1F)<<11)|(((f)&0x07)<<8))
24154abd99SDavid du Colombier #define BUSFNO(tbdf)	(((tbdf)>>8)&0x07)
25154abd99SDavid du Colombier #define BUSDNO(tbdf)	(((tbdf)>>11)&0x1F)
26154abd99SDavid du Colombier #define BUSBNO(tbdf)	(((tbdf)>>16)&0xFF)
27154abd99SDavid du Colombier #define BUSTYPE(tbdf)	((tbdf)>>24)
28154abd99SDavid du Colombier #define BUSBDF(tbdf)	((tbdf)&0x00FFFF00)
29154abd99SDavid du Colombier 
30154abd99SDavid du Colombier /*
31154abd99SDavid du Colombier  * PCI support code.
32154abd99SDavid du Colombier  */
33154abd99SDavid du Colombier enum {					/* type 0 & type 1 pre-defined header */
34154abd99SDavid du Colombier 	PciVID		= 0x00,		/* vendor ID */
35154abd99SDavid du Colombier 	PciDID		= 0x02,		/* device ID */
36154abd99SDavid du Colombier 	PciPCR		= 0x04,		/* command */
37154abd99SDavid du Colombier 	PciPSR		= 0x06,		/* status */
38154abd99SDavid du Colombier 	PciRID		= 0x08,		/* revision ID */
39154abd99SDavid du Colombier 	PciCCRp		= 0x09,		/* programming interface class code */
40154abd99SDavid du Colombier 	PciCCRu		= 0x0A,		/* sub-class code */
41154abd99SDavid du Colombier 	PciCCRb		= 0x0B,		/* base class code */
42154abd99SDavid du Colombier 	PciCLS		= 0x0C,		/* cache line size */
43154abd99SDavid du Colombier 	PciLTR		= 0x0D,		/* latency timer */
44154abd99SDavid du Colombier 	PciHDT		= 0x0E,		/* header type */
45154abd99SDavid du Colombier 	PciBST		= 0x0F,		/* BIST */
46154abd99SDavid du Colombier };
47154abd99SDavid du Colombier 
48154abd99SDavid du Colombier /* ccrb (base class code) values; controller types */
49154abd99SDavid du Colombier enum {
50154abd99SDavid du Colombier 	Pcibcpci1	= 0,		/* pci 1.0; no class codes defined */
51154abd99SDavid du Colombier 	Pcibcstore	= 1,		/* mass storage */
52154abd99SDavid du Colombier 	Pcibcnet	= 2,		/* network */
53154abd99SDavid du Colombier 	Pcibcdisp	= 3,		/* display */
54154abd99SDavid du Colombier 	Pcibcmmedia	= 4,		/* multimedia */
55154abd99SDavid du Colombier 	Pcibcmem	= 5,		/* memory */
56154abd99SDavid du Colombier 	Pcibcbridge	= 6,		/* bridge */
57154abd99SDavid du Colombier 	Pcibccomm	= 7,		/* simple comms (e.g., serial) */
58154abd99SDavid du Colombier 	Pcibcbasesys	= 8,		/* base system */
59154abd99SDavid du Colombier 	Pcibcinput	= 9,		/* input */
60154abd99SDavid du Colombier 	Pcibcdock	= 0xa,		/* docking stations */
61154abd99SDavid du Colombier 	Pcibcproc	= 0xb,		/* processors */
62154abd99SDavid du Colombier 	Pcibcserial	= 0xc,		/* serial bus (e.g., USB) */
63154abd99SDavid du Colombier 	Pcibcwireless	= 0xd,		/* wireless */
64154abd99SDavid du Colombier 	Pcibcintell	= 0xe,		/* intelligent i/o */
65154abd99SDavid du Colombier 	Pcibcsatcom	= 0xf,		/* satellite comms */
66154abd99SDavid du Colombier 	Pcibccrypto	= 0x10,		/* encryption/decryption */
67154abd99SDavid du Colombier 	Pcibcdacq	= 0x11,		/* data acquisition & signal proc. */
68154abd99SDavid du Colombier };
69154abd99SDavid du Colombier 
70154abd99SDavid du Colombier /* ccru (sub-class code) values; common cases only */
71154abd99SDavid du Colombier enum {
72154abd99SDavid du Colombier 	/* mass storage */
73154abd99SDavid du Colombier 	Pciscscsi	= 0,		/* SCSI */
74154abd99SDavid du Colombier 	Pciscide	= 1,		/* IDE (ATA) */
75154abd99SDavid du Colombier 
76154abd99SDavid du Colombier 	/* network */
77154abd99SDavid du Colombier 	Pciscether	= 0,		/* Ethernet */
78154abd99SDavid du Colombier 
79154abd99SDavid du Colombier 	/* display */
80154abd99SDavid du Colombier 	Pciscvga	= 0,		/* VGA */
81154abd99SDavid du Colombier 	Pciscxga	= 1,		/* XGA */
82154abd99SDavid du Colombier 	Pcisc3d		= 2,		/* 3D */
83154abd99SDavid du Colombier 
84154abd99SDavid du Colombier 	/* bridges */
85154abd99SDavid du Colombier 	Pcischostpci	= 0,		/* host/pci */
86154abd99SDavid du Colombier 	Pciscpcicpci	= 1,		/* pci/pci */
87154abd99SDavid du Colombier 
88154abd99SDavid du Colombier 	/* simple comms */
89154abd99SDavid du Colombier 	Pciscserial	= 0,		/* 16450, etc. */
90154abd99SDavid du Colombier 	Pciscmultiser	= 1,		/* multiport serial */
91154abd99SDavid du Colombier 
92154abd99SDavid du Colombier 	/* serial bus */
93154abd99SDavid du Colombier 	Pciscusb	= 3,		/* USB */
94154abd99SDavid du Colombier };
95154abd99SDavid du Colombier 
96154abd99SDavid du Colombier enum {					/* type 0 pre-defined header */
97154abd99SDavid du Colombier 	PciCIS		= 0x28,		/* cardbus CIS pointer */
98154abd99SDavid du Colombier 	PciSVID		= 0x2C,		/* subsystem vendor ID */
99154abd99SDavid du Colombier 	PciSID		= 0x2E,		/* cardbus CIS pointer */
100154abd99SDavid du Colombier 	PciEBAR0	= 0x30,		/* expansion ROM base address */
101154abd99SDavid du Colombier 	PciMGNT		= 0x3E,		/* burst period length */
102154abd99SDavid du Colombier 	PciMLT		= 0x3F,		/* maximum latency between bursts */
103154abd99SDavid du Colombier };
104154abd99SDavid du Colombier 
105154abd99SDavid du Colombier enum {					/* type 1 pre-defined header */
106154abd99SDavid du Colombier 	PciPBN		= 0x18,		/* primary bus number */
107154abd99SDavid du Colombier 	PciSBN		= 0x19,		/* secondary bus number */
108154abd99SDavid du Colombier 	PciUBN		= 0x1A,		/* subordinate bus number */
109154abd99SDavid du Colombier 	PciSLTR		= 0x1B,		/* secondary latency timer */
110154abd99SDavid du Colombier 	PciIBR		= 0x1C,		/* I/O base */
111154abd99SDavid du Colombier 	PciILR		= 0x1D,		/* I/O limit */
112154abd99SDavid du Colombier 	PciSPSR		= 0x1E,		/* secondary status */
113154abd99SDavid du Colombier 	PciMBR		= 0x20,		/* memory base */
114154abd99SDavid du Colombier 	PciMLR		= 0x22,		/* memory limit */
115154abd99SDavid du Colombier 	PciPMBR		= 0x24,		/* prefetchable memory base */
116154abd99SDavid du Colombier 	PciPMLR		= 0x26,		/* prefetchable memory limit */
117154abd99SDavid du Colombier 	PciPUBR		= 0x28,		/* prefetchable base upper 32 bits */
118154abd99SDavid du Colombier 	PciPULR		= 0x2C,		/* prefetchable limit upper 32 bits */
119154abd99SDavid du Colombier 	PciIUBR		= 0x30,		/* I/O base upper 16 bits */
120154abd99SDavid du Colombier 	PciIULR		= 0x32,		/* I/O limit upper 16 bits */
121154abd99SDavid du Colombier 	PciEBAR1	= 0x28,		/* expansion ROM base address */
122154abd99SDavid du Colombier 	PciBCR		= 0x3E,		/* bridge control register */
123154abd99SDavid du Colombier };
124154abd99SDavid du Colombier 
125154abd99SDavid du Colombier enum {					/* type 2 pre-defined header */
126154abd99SDavid du Colombier 	PciCBExCA	= 0x10,
127154abd99SDavid du Colombier 	PciCBSPSR	= 0x16,
128154abd99SDavid du Colombier 	PciCBPBN	= 0x18,		/* primary bus number */
129154abd99SDavid du Colombier 	PciCBSBN	= 0x19,		/* secondary bus number */
130154abd99SDavid du Colombier 	PciCBUBN	= 0x1A,		/* subordinate bus number */
131154abd99SDavid du Colombier 	PciCBSLTR	= 0x1B,		/* secondary latency timer */
132154abd99SDavid du Colombier 	PciCBMBR0	= 0x1C,
133154abd99SDavid du Colombier 	PciCBMLR0	= 0x20,
134154abd99SDavid du Colombier 	PciCBMBR1	= 0x24,
135154abd99SDavid du Colombier 	PciCBMLR1	= 0x28,
136154abd99SDavid du Colombier 	PciCBIBR0	= 0x2C,		/* I/O base */
137154abd99SDavid du Colombier 	PciCBILR0	= 0x30,		/* I/O limit */
138154abd99SDavid du Colombier 	PciCBIBR1	= 0x34,		/* I/O base */
139154abd99SDavid du Colombier 	PciCBILR1	= 0x38,		/* I/O limit */
140154abd99SDavid du Colombier 	PciCBSVID	= 0x40,		/* subsystem vendor ID */
141154abd99SDavid du Colombier 	PciCBSID	= 0x42,		/* subsystem ID */
142154abd99SDavid du Colombier 	PciCBLMBAR	= 0x44,		/* legacy mode base address */
143154abd99SDavid du Colombier };
144154abd99SDavid du Colombier 
145154abd99SDavid du Colombier typedef struct Pcisiz Pcisiz;
146154abd99SDavid du Colombier struct Pcisiz
147154abd99SDavid du Colombier {
148154abd99SDavid du Colombier 	Pcidev*	dev;
149154abd99SDavid du Colombier 	int	siz;
150154abd99SDavid du Colombier 	int	bar;
151154abd99SDavid du Colombier };
152154abd99SDavid du Colombier 
153154abd99SDavid du Colombier typedef struct Pcidev Pcidev;
154154abd99SDavid du Colombier struct Pcidev
155154abd99SDavid du Colombier {
156154abd99SDavid du Colombier 	int	tbdf;			/* type+bus+device+function */
157154abd99SDavid du Colombier 	ushort	vid;			/* vendor ID */
158154abd99SDavid du Colombier 	ushort	did;			/* device ID */
159154abd99SDavid du Colombier 
160154abd99SDavid du Colombier 	ushort	pcr;
161154abd99SDavid du Colombier 
162154abd99SDavid du Colombier 	uchar	rid;
163154abd99SDavid du Colombier 	uchar	ccrp;
164154abd99SDavid du Colombier 	uchar	ccru;
165154abd99SDavid du Colombier 	uchar	ccrb;
166154abd99SDavid du Colombier 	uchar	cls;
167154abd99SDavid du Colombier 	uchar	ltr;
168154abd99SDavid du Colombier 
169154abd99SDavid du Colombier 	struct {
170154abd99SDavid du Colombier 		ulong	bar;		/* base address */
171154abd99SDavid du Colombier 		int	size;
172154abd99SDavid du Colombier 	} mem[6];
173154abd99SDavid du Colombier 
174154abd99SDavid du Colombier 	struct {
175154abd99SDavid du Colombier 		ulong	bar;
176154abd99SDavid du Colombier 		int	size;
177154abd99SDavid du Colombier 	} rom;
178154abd99SDavid du Colombier 	uchar	intl;			/* interrupt line */
179154abd99SDavid du Colombier 
180154abd99SDavid du Colombier 	Pcidev*	list;
181154abd99SDavid du Colombier 	Pcidev*	link;			/* next device on this bno */
182154abd99SDavid du Colombier 
183154abd99SDavid du Colombier 	Pcidev*	bridge;			/* down a bus */
184154abd99SDavid du Colombier 	struct {
185154abd99SDavid du Colombier 		ulong	bar;
186154abd99SDavid du Colombier 		int	size;
187154abd99SDavid du Colombier 	} ioa, mema;
188154abd99SDavid du Colombier 
189154abd99SDavid du Colombier 	int	pmrb;			/* power management register block */
190154abd99SDavid du Colombier };
191154abd99SDavid du Colombier 
192154abd99SDavid du Colombier #define PCIWINDOW	0
193154abd99SDavid du Colombier #define PCIWADDR(va)	(PADDR(va)+PCIWINDOW)
194154abd99SDavid du Colombier 
195154abd99SDavid du Colombier /*
1965e27dea9SDavid du Colombier  * Kirkwood stuff
197154abd99SDavid du Colombier  */
198154abd99SDavid du Colombier 
199154abd99SDavid du Colombier enum {
2008a12d8dfSDavid du Colombier 	AddrEfuse	= PHYSIO+0x1008c,
201*7365b686SDavid du Colombier 	Addrpci		= PHYSIO+0x40000,	/* for registers below */
202*7365b686SDavid du Colombier 	Addrpcibase	= PHYSIO+0x41800,	/* for registers below */
203*7365b686SDavid du Colombier 	AddrMpp		= PHYSIO+0x10000,
2048a12d8dfSDavid du Colombier 	AddrSdio	= PHYSIO+0x90000,
205154abd99SDavid du Colombier };
206154abd99SDavid du Colombier 
207154abd99SDavid du Colombier enum {
208897ae9c1SDavid du Colombier 	Socrevz0,
209897ae9c1SDavid du Colombier 	Socreva0 = 2,
210897ae9c1SDavid du Colombier 	Socreva1,
211897ae9c1SDavid du Colombier };
212897ae9c1SDavid du Colombier 
213897ae9c1SDavid du Colombier enum {
214*7365b686SDavid du Colombier 	/* registers; if we actually use these, change to soc.pci(base)->reg */
215154abd99SDavid du Colombier 	PciBAR0		= Addrpcibase + 4,	/* base address */
216154abd99SDavid du Colombier 	PciBAR1		= Addrpcibase + 8,
217154abd99SDavid du Colombier 
218154abd99SDavid du Colombier 	PciCP		= Addrpci + 0x64,	/* capabilities pointer */
219154abd99SDavid du Colombier 
220154abd99SDavid du Colombier 	PciINTL		= Addrpci + 0x3c,	/* interrupt line */
221154abd99SDavid du Colombier 	PciINTP		= PciINTL + 1,	/* interrupt pin */
222154abd99SDavid du Colombier };
223154abd99SDavid du Colombier 
224154abd99SDavid du Colombier /*
225154abd99SDavid du Colombier  * interrupt stuff
226154abd99SDavid du Colombier  */
227154abd99SDavid du Colombier 
228154abd99SDavid du Colombier enum {
229154abd99SDavid du Colombier 	Irqlo, Irqhi, Irqbridge,
230154abd99SDavid du Colombier };
231154abd99SDavid du Colombier 
232154abd99SDavid du Colombier enum {
233154abd99SDavid du Colombier 	/* main interrupt cause low register bit #s (LE) */
234154abd99SDavid du Colombier 	IRQ0hisum,		/* summary of main intr high cause reg */
235154abd99SDavid du Colombier 	IRQ0bridge,
236154abd99SDavid du Colombier 	IRQ0h2cdoorbell,
237154abd99SDavid du Colombier 	IRQ0c2hdoorbell,
238154abd99SDavid du Colombier 	_IRQ0reserved0,
239154abd99SDavid du Colombier 	IRQ0xor0chan0,
240154abd99SDavid du Colombier 	IRQ0xor0chan1,
241154abd99SDavid du Colombier 	IRQ0xor1chan0,
242154abd99SDavid du Colombier 	IRQ0xor1chan1,
243154abd99SDavid du Colombier 	IRQ0pex0int,		/* pex = pci-express */
244154abd99SDavid du Colombier 	_IRQ0reserved1,
245154abd99SDavid du Colombier 	IRQ0gbe0sum,
246154abd99SDavid du Colombier 	IRQ0gbe0rx,
247154abd99SDavid du Colombier 	IRQ0gbe0tx,
248154abd99SDavid du Colombier 	IRQ0gbe0misc,
249154abd99SDavid du Colombier 	IRQ0gbe1sum,
250154abd99SDavid du Colombier 	IRQ0gbe1rx,
251154abd99SDavid du Colombier 	IRQ0gbe1tx,
252154abd99SDavid du Colombier 	IRQ0gbe1misc,
253154abd99SDavid du Colombier 	IRQ0usb0,
254154abd99SDavid du Colombier 	_IRQ0reserved2,
255154abd99SDavid du Colombier 	IRQ0sata,
256154abd99SDavid du Colombier 	IRQ0crypto,
257154abd99SDavid du Colombier 	IRQ0spi,
258154abd99SDavid du Colombier 	IRQ0audio,
259154abd99SDavid du Colombier 	_IRQ0reserved3,
260154abd99SDavid du Colombier 	IRQ0ts0,
261154abd99SDavid du Colombier 	_IRQ0reserved4,
262154abd99SDavid du Colombier 	IRQ0sdio,
263154abd99SDavid du Colombier 	IRQ0twsi,
264154abd99SDavid du Colombier 	IRQ0avb,
265154abd99SDavid du Colombier 	IRQ0tdm,
266154abd99SDavid du Colombier 
267154abd99SDavid du Colombier 	/* main interrupt cause high register bit #s (LE) */
268154abd99SDavid du Colombier 	_IRQ1reserved0 = 0,
269154abd99SDavid du Colombier 	IRQ1uart0,
270154abd99SDavid du Colombier 	IRQ1uart1,
271154abd99SDavid du Colombier 	IRQ1gpiolo0,
272154abd99SDavid du Colombier 	IRQ1gpiolo1,
273154abd99SDavid du Colombier 	IRQ1gpiolo2,
274154abd99SDavid du Colombier 	IRQ1gpiolo3,
275154abd99SDavid du Colombier 	IRQ1gpiohi0,
276154abd99SDavid du Colombier 	IRQ1gpiohi1,
277154abd99SDavid du Colombier 	IRQ1gpiohi2,
278154abd99SDavid du Colombier 	IRQ1gpiohi3,
279154abd99SDavid du Colombier 	IRQ1xor0err,
280154abd99SDavid du Colombier 	IRQ1xor1err,
281154abd99SDavid du Colombier 	IRQ1pex0err,
282154abd99SDavid du Colombier 	_IRQ1reserved1,
283154abd99SDavid du Colombier 	IRQ1gbe0err,
284154abd99SDavid du Colombier 	IRQ1gbe1err,
285154abd99SDavid du Colombier 	IRQ1usberr,
286154abd99SDavid du Colombier 	IRQ1cryptoerr,
287154abd99SDavid du Colombier 	IRQ1audioerr,
288154abd99SDavid du Colombier 	_IRQ1reserved2,
289154abd99SDavid du Colombier 	_IRQ1reserved3,
290154abd99SDavid du Colombier 	IRQ1rtc,
291154abd99SDavid du Colombier 
292154abd99SDavid du Colombier 	/* bridged-interrupt causes */
293154abd99SDavid du Colombier 	IRQcpuself = 0,
294154abd99SDavid du Colombier 	IRQcputimer0,
295154abd99SDavid du Colombier 	IRQcputimer1,
296154abd99SDavid du Colombier 	IRQcputimerwd,
297304cb050SDavid du Colombier 	IRQaccesserr,
298154abd99SDavid du Colombier };
299154abd99SDavid du Colombier 
300154abd99SDavid du Colombier /*
301154abd99SDavid du Colombier  * interrupt controller
302154abd99SDavid du Colombier  */
303154abd99SDavid du Colombier typedef struct IntrReg IntrReg;
304154abd99SDavid du Colombier struct IntrReg
305154abd99SDavid du Colombier {
306154abd99SDavid du Colombier 	struct {
307154abd99SDavid du Colombier 		ulong	irq;		/* main intr cause reg (ro) */
308154abd99SDavid du Colombier 		ulong	irqmask;
309154abd99SDavid du Colombier 		ulong	fiqmask;
310154abd99SDavid du Colombier 		ulong	epmask;
311154abd99SDavid du Colombier 	} lo, hi;
312154abd99SDavid du Colombier };
313154abd99SDavid du Colombier 
314154abd99SDavid du Colombier /*
3155e27dea9SDavid du Colombier  * CPU control & status (archkw.c and trap.c)
316154abd99SDavid du Colombier  */
317154abd99SDavid du Colombier typedef struct CpucsReg CpucsReg;
318154abd99SDavid du Colombier struct CpucsReg
319154abd99SDavid du Colombier {
320154abd99SDavid du Colombier 	ulong	cpucfg;
321154abd99SDavid du Colombier 	ulong	cpucsr;
322154abd99SDavid du Colombier 	ulong	rstout;
323154abd99SDavid du Colombier 	ulong	softreset;
3245e27dea9SDavid du Colombier 	ulong	irq;		/* mbus(-l) bridge interrupt cause */
3255e27dea9SDavid du Colombier 	ulong	irqmask;	/* ⋯ mask */
3265e27dea9SDavid du Colombier 	ulong	mempm;		/* memory power mgmt. control */
3275e27dea9SDavid du Colombier 	ulong	clockgate;	/* clock enable bits */
328154abd99SDavid du Colombier 	ulong	biu;
329154abd99SDavid du Colombier 	ulong	pad0;
330154abd99SDavid du Colombier 	ulong	l2cfg;		/* turn l2 cache on or off, set coherency */
331154abd99SDavid du Colombier 	ulong	pad1[2];
332154abd99SDavid du Colombier 	ulong	l2tm0;
333154abd99SDavid du Colombier 	ulong	l2tm1;
334154abd99SDavid du Colombier 	ulong	pad2[2];
335154abd99SDavid du Colombier 	ulong	l2pm;
336154abd99SDavid du Colombier 	ulong	ram0;
337154abd99SDavid du Colombier 	ulong	ram1;
338154abd99SDavid du Colombier 	ulong	ram2;
339154abd99SDavid du Colombier 	ulong	ram3;
340154abd99SDavid du Colombier };
341154abd99SDavid du Colombier 
342154abd99SDavid du Colombier enum {
343154abd99SDavid du Colombier 	/* cpucfg bits */
344154abd99SDavid du Colombier 	Cfgvecinithi	= 1<<1,	/* boot at 0xffff0000, not 0; default 1 */
345154abd99SDavid du Colombier 	Cfgbigendreset	= 3<<1,	/* init. as big-endian at reset; default 0 */
34656713243SDavid du Colombier 	Cfgiprefetch	= 1<<16,	/* instruction prefetch enable */
34756713243SDavid du Colombier 	Cfgdprefetch	= 1<<17,	/* data prefetch enable */
348154abd99SDavid du Colombier 
3495e27dea9SDavid du Colombier 	/* cpucsr bits */
350ac10c8dbSDavid du Colombier 	Reset		= 1<<1,		/* reset cpu core */
3515e27dea9SDavid du Colombier 
3525e27dea9SDavid du Colombier 	/* rstout bits */
353ac10c8dbSDavid du Colombier 	RstoutPex	= 1<<0,		/* assert RSTOUTn at pci-e reset */
354ac10c8dbSDavid du Colombier 	RstoutWatchdog	= 1<<1,		/* assert RSTOUTn at watchdog timeout */
355ac10c8dbSDavid du Colombier 	RstoutSoft	= 1<<2,		/* assert RSTOUTn at sw reset */
3565e27dea9SDavid du Colombier 
3575e27dea9SDavid du Colombier 	/* softreset bits */
358ac10c8dbSDavid du Colombier 	ResetSystem	= 1<<0,		/* assert RSTOUTn pin on SoftRstOutEn */
3595e27dea9SDavid du Colombier 
360154abd99SDavid du Colombier 	/* l2cfg bits */
361154abd99SDavid du Colombier 	L2ecc		= 1<<2,
362ffc08dc1SDavid du Colombier 	L2exists	= 1<<3,		/* l2 cache doesn't ignore cpu */
363003c0964SDavid du Colombier 	L2writethru	= 1<<4,		/* always WT, else see PTE C & B */
364154abd99SDavid du Colombier };
365ec4ca6beSDavid du Colombier 
366ec4ca6beSDavid du Colombier enum {
367ec4ca6beSDavid du Colombier 	/* from 88f6281 func'l specs (MV-S104860-00), tables 2 & 3, chapter 2 */
368ec4ca6beSDavid du Colombier 	Targdram	= 0,		/* ddr sdram */
369ec4ca6beSDavid du Colombier 	Targflash	= 1,
3707bc319fbSDavid du Colombier 	Targcesasram	= 3,		/* security accelerator sram */
371ec4ca6beSDavid du Colombier 
372ec4ca6beSDavid du Colombier 	/* attributes */
373ec4ca6beSDavid du Colombier 	Attrcs0		= 0xe,		/* chip select 0 (low dram) */
374ec4ca6beSDavid du Colombier 	Attrcs1		= 0xd,		/* chip select 1 (high dram) */
375ec4ca6beSDavid du Colombier 	Attrbootrom	= 0x1d,
376ec4ca6beSDavid du Colombier 	Attrspi		= 0x1e,
377ec4ca6beSDavid du Colombier 	Attrnand	= 0x2f,
37806f6463aSDavid du Colombier 
37906f6463aSDavid du Colombier 	Winenable	= 1<<0,
380ec4ca6beSDavid du Colombier };
381ec4ca6beSDavid du Colombier 
382ec4ca6beSDavid du Colombier typedef struct Pciex Pciex;
383ec4ca6beSDavid du Colombier struct Pciex {
384ec4ca6beSDavid du Colombier 	ushort	venid;			/* 0x11ab means Marvell */
385ec4ca6beSDavid du Colombier 	ushort	devid;			/* 0x6281 means 6281 */
386ec4ca6beSDavid du Colombier 	ulong	csr;
387ec4ca6beSDavid du Colombier 	ulong	revid;
388ec4ca6beSDavid du Colombier 	ulong	bistcache;		/* bist hdr type & cache-line size */
389ec4ca6beSDavid du Colombier 	ulong	bar0;
390ec4ca6beSDavid du Colombier 	ulong	bar0hi;
391ec4ca6beSDavid du Colombier 	ulong	bar1;
392ec4ca6beSDavid du Colombier 	ulong	bar1hi;
393ec4ca6beSDavid du Colombier 	ulong	bar2;
394ec4ca6beSDavid du Colombier 	ulong	bar2hi;
395ec4ca6beSDavid du Colombier 	ulong	_pad0;
396ec4ca6beSDavid du Colombier 	ushort	ssvenid;		/* 0x11ab means Marvell */
397ec4ca6beSDavid du Colombier 	ushort	ssdevid;		/* 0x11ab means Marvell */
398ec4ca6beSDavid du Colombier 	ulong	rombar;
399ec4ca6beSDavid du Colombier 	ulong	caplist;
400ec4ca6beSDavid du Colombier 	ulong	_pad1;
401ec4ca6beSDavid du Colombier 	ulong	intrpinline;		/* interrupt pin & line */
402ec4ca6beSDavid du Colombier 	ulong	pmcap;			/* power mgmt. capability header */
403ec4ca6beSDavid du Colombier 	ulong	pmcsr;			/* power mgmt. control & status */
404ec4ca6beSDavid du Colombier 	ulong	_pad2[2];
405ec4ca6beSDavid du Colombier 	ulong	msictl;			/* msi message control */
406ec4ca6beSDavid du Colombier 	ulong	msiaddr;
407ec4ca6beSDavid du Colombier 	ulong	msiaddrhi;
408ec4ca6beSDavid du Colombier 	ulong	msidata;
409ec4ca6beSDavid du Colombier 	ulong	cap;
410ec4ca6beSDavid du Colombier 	ulong	devcap;
411ec4ca6beSDavid du Colombier 	ulong	devcsr;
412ec4ca6beSDavid du Colombier 	ulong	linkcap;
413ec4ca6beSDavid du Colombier 	ulong	linkcsr;
414ec4ca6beSDavid du Colombier 
415ec4ca6beSDavid du Colombier 	uchar	_pad[0x40100-0x40074];
416ec4ca6beSDavid du Colombier 	ulong	errrep;			/* advanced error report header */
417ec4ca6beSDavid du Colombier 	ulong	uncorrerr;		/* uncorrectable error status */
418ec4ca6beSDavid du Colombier 	ulong	uncorrerrmask;		/* uncorrectable error mask */
419ec4ca6beSDavid du Colombier 	ulong	uncorrerrsev;		/* uncorrectable error severity */
420ec4ca6beSDavid du Colombier 	ulong	correrr;		/* correctable error status */
421ec4ca6beSDavid du Colombier 	ulong	correrrmask;		/* correctable error mask */
422ec4ca6beSDavid du Colombier 	ulong	errcap;			/* advanced error capability & ctl. */
423ec4ca6beSDavid du Colombier 	ulong	hdrlog[4];		/* header log */
424ec4ca6beSDavid du Colombier 	/* continues with more rubbish at 0x41a00.  some day... */
425ec4ca6beSDavid du Colombier };
426