xref: /OK3568_Linux_fs/kernel/arch/mips/include/asm/txx9/tx4927pcic.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  * include/asm-mips/txx9/tx4927pcic.h
3*4882a593Smuzhiyun  * TX4927 PCI controller definitions.
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * This file is subject to the terms and conditions of the GNU General Public
6*4882a593Smuzhiyun  * License.  See the file "COPYING" in the main directory of this archive
7*4882a593Smuzhiyun  * for more details.
8*4882a593Smuzhiyun  */
9*4882a593Smuzhiyun #ifndef __ASM_TXX9_TX4927PCIC_H
10*4882a593Smuzhiyun #define __ASM_TXX9_TX4927PCIC_H
11*4882a593Smuzhiyun 
12*4882a593Smuzhiyun #include <linux/pci.h>
13*4882a593Smuzhiyun #include <linux/irqreturn.h>
14*4882a593Smuzhiyun 
15*4882a593Smuzhiyun struct tx4927_pcic_reg {
16*4882a593Smuzhiyun 	u32 pciid;
17*4882a593Smuzhiyun 	u32 pcistatus;
18*4882a593Smuzhiyun 	u32 pciccrev;
19*4882a593Smuzhiyun 	u32 pcicfg1;
20*4882a593Smuzhiyun 	u32 p2gm0plbase;		/* +10 */
21*4882a593Smuzhiyun 	u32 p2gm0pubase;
22*4882a593Smuzhiyun 	u32 p2gm1plbase;
23*4882a593Smuzhiyun 	u32 p2gm1pubase;
24*4882a593Smuzhiyun 	u32 p2gm2pbase;		/* +20 */
25*4882a593Smuzhiyun 	u32 p2giopbase;
26*4882a593Smuzhiyun 	u32 unused0;
27*4882a593Smuzhiyun 	u32 pcisid;
28*4882a593Smuzhiyun 	u32 unused1;		/* +30 */
29*4882a593Smuzhiyun 	u32 pcicapptr;
30*4882a593Smuzhiyun 	u32 unused2;
31*4882a593Smuzhiyun 	u32 pcicfg2;
32*4882a593Smuzhiyun 	u32 g2ptocnt;		/* +40 */
33*4882a593Smuzhiyun 	u32 unused3[15];
34*4882a593Smuzhiyun 	u32 g2pstatus;		/* +80 */
35*4882a593Smuzhiyun 	u32 g2pmask;
36*4882a593Smuzhiyun 	u32 pcisstatus;
37*4882a593Smuzhiyun 	u32 pcimask;
38*4882a593Smuzhiyun 	u32 p2gcfg;		/* +90 */
39*4882a593Smuzhiyun 	u32 p2gstatus;
40*4882a593Smuzhiyun 	u32 p2gmask;
41*4882a593Smuzhiyun 	u32 p2gccmd;
42*4882a593Smuzhiyun 	u32 unused4[24];		/* +a0 */
43*4882a593Smuzhiyun 	u32 pbareqport;		/* +100 */
44*4882a593Smuzhiyun 	u32 pbacfg;
45*4882a593Smuzhiyun 	u32 pbastatus;
46*4882a593Smuzhiyun 	u32 pbamask;
47*4882a593Smuzhiyun 	u32 pbabm;		/* +110 */
48*4882a593Smuzhiyun 	u32 pbacreq;
49*4882a593Smuzhiyun 	u32 pbacgnt;
50*4882a593Smuzhiyun 	u32 pbacstate;
51*4882a593Smuzhiyun 	u64 g2pmgbase[3];		/* +120 */
52*4882a593Smuzhiyun 	u64 g2piogbase;
53*4882a593Smuzhiyun 	u32 g2pmmask[3];		/* +140 */
54*4882a593Smuzhiyun 	u32 g2piomask;
55*4882a593Smuzhiyun 	u64 g2pmpbase[3];		/* +150 */
56*4882a593Smuzhiyun 	u64 g2piopbase;
57*4882a593Smuzhiyun 	u32 pciccfg;		/* +170 */
58*4882a593Smuzhiyun 	u32 pcicstatus;
59*4882a593Smuzhiyun 	u32 pcicmask;
60*4882a593Smuzhiyun 	u32 unused5;
61*4882a593Smuzhiyun 	u64 p2gmgbase[3];		/* +180 */
62*4882a593Smuzhiyun 	u64 p2giogbase;
63*4882a593Smuzhiyun 	u32 g2pcfgadrs;		/* +1a0 */
64*4882a593Smuzhiyun 	u32 g2pcfgdata;
65*4882a593Smuzhiyun 	u32 unused6[8];
66*4882a593Smuzhiyun 	u32 g2pintack;
67*4882a593Smuzhiyun 	u32 g2pspc;
68*4882a593Smuzhiyun 	u32 unused7[12];		/* +1d0 */
69*4882a593Smuzhiyun 	u64 pdmca;		/* +200 */
70*4882a593Smuzhiyun 	u64 pdmga;
71*4882a593Smuzhiyun 	u64 pdmpa;
72*4882a593Smuzhiyun 	u64 pdmctr;
73*4882a593Smuzhiyun 	u64 pdmcfg;		/* +220 */
74*4882a593Smuzhiyun 	u64 pdmsts;
75*4882a593Smuzhiyun };
76*4882a593Smuzhiyun 
77*4882a593Smuzhiyun /* bits for PCICMD */
78*4882a593Smuzhiyun /* see PCI_COMMAND_XXX in linux/pci_regs.h */
79*4882a593Smuzhiyun 
80*4882a593Smuzhiyun /* bits for PCISTAT */
81*4882a593Smuzhiyun /* see PCI_STATUS_XXX in linux/pci_regs.h */
82*4882a593Smuzhiyun 
83*4882a593Smuzhiyun /* bits for IOBA/MBA */
84*4882a593Smuzhiyun /* see PCI_BASE_ADDRESS_XXX in linux/pci_regs.h */
85*4882a593Smuzhiyun 
86*4882a593Smuzhiyun /* bits for G2PSTATUS/G2PMASK */
87*4882a593Smuzhiyun #define TX4927_PCIC_G2PSTATUS_ALL	0x00000003
88*4882a593Smuzhiyun #define TX4927_PCIC_G2PSTATUS_TTOE	0x00000002
89*4882a593Smuzhiyun #define TX4927_PCIC_G2PSTATUS_RTOE	0x00000001
90*4882a593Smuzhiyun 
91*4882a593Smuzhiyun /* bits for PCIMASK (see also PCI_STATUS_XXX in linux/pci_regs.h */
92*4882a593Smuzhiyun #define TX4927_PCIC_PCISTATUS_ALL	0x0000f900
93*4882a593Smuzhiyun 
94*4882a593Smuzhiyun /* bits for PBACFG */
95*4882a593Smuzhiyun #define TX4927_PCIC_PBACFG_FIXPA	0x00000008
96*4882a593Smuzhiyun #define TX4927_PCIC_PBACFG_RPBA 0x00000004
97*4882a593Smuzhiyun #define TX4927_PCIC_PBACFG_PBAEN	0x00000002
98*4882a593Smuzhiyun #define TX4927_PCIC_PBACFG_BMCEN	0x00000001
99*4882a593Smuzhiyun 
100*4882a593Smuzhiyun /* bits for PBASTATUS/PBAMASK */
101*4882a593Smuzhiyun #define TX4927_PCIC_PBASTATUS_ALL	0x00000001
102*4882a593Smuzhiyun #define TX4927_PCIC_PBASTATUS_BM	0x00000001
103*4882a593Smuzhiyun 
104*4882a593Smuzhiyun /* bits for G2PMnGBASE */
105*4882a593Smuzhiyun #define TX4927_PCIC_G2PMnGBASE_BSDIS	0x0000002000000000ULL
106*4882a593Smuzhiyun #define TX4927_PCIC_G2PMnGBASE_ECHG	0x0000001000000000ULL
107*4882a593Smuzhiyun 
108*4882a593Smuzhiyun /* bits for G2PIOGBASE */
109*4882a593Smuzhiyun #define TX4927_PCIC_G2PIOGBASE_BSDIS	0x0000002000000000ULL
110*4882a593Smuzhiyun #define TX4927_PCIC_G2PIOGBASE_ECHG	0x0000001000000000ULL
111*4882a593Smuzhiyun 
112*4882a593Smuzhiyun /* bits for PCICSTATUS/PCICMASK */
113*4882a593Smuzhiyun #define TX4927_PCIC_PCICSTATUS_ALL	0x000007b8
114*4882a593Smuzhiyun #define TX4927_PCIC_PCICSTATUS_PME	0x00000400
115*4882a593Smuzhiyun #define TX4927_PCIC_PCICSTATUS_TLB	0x00000200
116*4882a593Smuzhiyun #define TX4927_PCIC_PCICSTATUS_NIB	0x00000100
117*4882a593Smuzhiyun #define TX4927_PCIC_PCICSTATUS_ZIB	0x00000080
118*4882a593Smuzhiyun #define TX4927_PCIC_PCICSTATUS_PERR	0x00000020
119*4882a593Smuzhiyun #define TX4927_PCIC_PCICSTATUS_SERR	0x00000010
120*4882a593Smuzhiyun #define TX4927_PCIC_PCICSTATUS_GBE	0x00000008
121*4882a593Smuzhiyun #define TX4927_PCIC_PCICSTATUS_IWB	0x00000002
122*4882a593Smuzhiyun #define TX4927_PCIC_PCICSTATUS_E2PDONE	0x00000001
123*4882a593Smuzhiyun 
124*4882a593Smuzhiyun /* bits for PCICCFG */
125*4882a593Smuzhiyun #define TX4927_PCIC_PCICCFG_GBWC_MASK	0x0fff0000
126*4882a593Smuzhiyun #define TX4927_PCIC_PCICCFG_HRST	0x00000800
127*4882a593Smuzhiyun #define TX4927_PCIC_PCICCFG_SRST	0x00000400
128*4882a593Smuzhiyun #define TX4927_PCIC_PCICCFG_IRBER	0x00000200
129*4882a593Smuzhiyun #define TX4927_PCIC_PCICCFG_G2PMEN(ch)	(0x00000100>>(ch))
130*4882a593Smuzhiyun #define TX4927_PCIC_PCICCFG_G2PM0EN	0x00000100
131*4882a593Smuzhiyun #define TX4927_PCIC_PCICCFG_G2PM1EN	0x00000080
132*4882a593Smuzhiyun #define TX4927_PCIC_PCICCFG_G2PM2EN	0x00000040
133*4882a593Smuzhiyun #define TX4927_PCIC_PCICCFG_G2PIOEN	0x00000020
134*4882a593Smuzhiyun #define TX4927_PCIC_PCICCFG_TCAR	0x00000010
135*4882a593Smuzhiyun #define TX4927_PCIC_PCICCFG_ICAEN	0x00000008
136*4882a593Smuzhiyun 
137*4882a593Smuzhiyun /* bits for P2GMnGBASE */
138*4882a593Smuzhiyun #define TX4927_PCIC_P2GMnGBASE_TMEMEN	0x0000004000000000ULL
139*4882a593Smuzhiyun #define TX4927_PCIC_P2GMnGBASE_TBSDIS	0x0000002000000000ULL
140*4882a593Smuzhiyun #define TX4927_PCIC_P2GMnGBASE_TECHG	0x0000001000000000ULL
141*4882a593Smuzhiyun 
142*4882a593Smuzhiyun /* bits for P2GIOGBASE */
143*4882a593Smuzhiyun #define TX4927_PCIC_P2GIOGBASE_TIOEN	0x0000004000000000ULL
144*4882a593Smuzhiyun #define TX4927_PCIC_P2GIOGBASE_TBSDIS	0x0000002000000000ULL
145*4882a593Smuzhiyun #define TX4927_PCIC_P2GIOGBASE_TECHG	0x0000001000000000ULL
146*4882a593Smuzhiyun 
147*4882a593Smuzhiyun #define TX4927_PCIC_IDSEL_AD_TO_SLOT(ad)	((ad) - 11)
148*4882a593Smuzhiyun #define TX4927_PCIC_MAX_DEVNU	TX4927_PCIC_IDSEL_AD_TO_SLOT(32)
149*4882a593Smuzhiyun 
150*4882a593Smuzhiyun /* bits for PDMCFG */
151*4882a593Smuzhiyun #define TX4927_PCIC_PDMCFG_RSTFIFO	0x00200000
152*4882a593Smuzhiyun #define TX4927_PCIC_PDMCFG_EXFER	0x00100000
153*4882a593Smuzhiyun #define TX4927_PCIC_PDMCFG_REQDLY_MASK	0x00003800
154*4882a593Smuzhiyun #define TX4927_PCIC_PDMCFG_REQDLY_NONE	(0 << 11)
155*4882a593Smuzhiyun #define TX4927_PCIC_PDMCFG_REQDLY_16	(1 << 11)
156*4882a593Smuzhiyun #define TX4927_PCIC_PDMCFG_REQDLY_32	(2 << 11)
157*4882a593Smuzhiyun #define TX4927_PCIC_PDMCFG_REQDLY_64	(3 << 11)
158*4882a593Smuzhiyun #define TX4927_PCIC_PDMCFG_REQDLY_128	(4 << 11)
159*4882a593Smuzhiyun #define TX4927_PCIC_PDMCFG_REQDLY_256	(5 << 11)
160*4882a593Smuzhiyun #define TX4927_PCIC_PDMCFG_REQDLY_512	(6 << 11)
161*4882a593Smuzhiyun #define TX4927_PCIC_PDMCFG_REQDLY_1024	(7 << 11)
162*4882a593Smuzhiyun #define TX4927_PCIC_PDMCFG_ERRIE	0x00000400
163*4882a593Smuzhiyun #define TX4927_PCIC_PDMCFG_NCCMPIE	0x00000200
164*4882a593Smuzhiyun #define TX4927_PCIC_PDMCFG_NTCMPIE	0x00000100
165*4882a593Smuzhiyun #define TX4927_PCIC_PDMCFG_CHNEN	0x00000080
166*4882a593Smuzhiyun #define TX4927_PCIC_PDMCFG_XFRACT	0x00000040
167*4882a593Smuzhiyun #define TX4927_PCIC_PDMCFG_BSWAP	0x00000020
168*4882a593Smuzhiyun #define TX4927_PCIC_PDMCFG_XFRSIZE_MASK 0x0000000c
169*4882a593Smuzhiyun #define TX4927_PCIC_PDMCFG_XFRSIZE_1DW	0x00000000
170*4882a593Smuzhiyun #define TX4927_PCIC_PDMCFG_XFRSIZE_1QW	0x00000004
171*4882a593Smuzhiyun #define TX4927_PCIC_PDMCFG_XFRSIZE_4QW	0x00000008
172*4882a593Smuzhiyun #define TX4927_PCIC_PDMCFG_XFRDIRC	0x00000002
173*4882a593Smuzhiyun #define TX4927_PCIC_PDMCFG_CHRST	0x00000001
174*4882a593Smuzhiyun 
175*4882a593Smuzhiyun /* bits for PDMSTS */
176*4882a593Smuzhiyun #define TX4927_PCIC_PDMSTS_REQCNT_MASK	0x3f000000
177*4882a593Smuzhiyun #define TX4927_PCIC_PDMSTS_FIFOCNT_MASK 0x00f00000
178*4882a593Smuzhiyun #define TX4927_PCIC_PDMSTS_FIFOWP_MASK	0x000c0000
179*4882a593Smuzhiyun #define TX4927_PCIC_PDMSTS_FIFORP_MASK	0x00030000
180*4882a593Smuzhiyun #define TX4927_PCIC_PDMSTS_ERRINT	0x00000800
181*4882a593Smuzhiyun #define TX4927_PCIC_PDMSTS_DONEINT	0x00000400
182*4882a593Smuzhiyun #define TX4927_PCIC_PDMSTS_CHNEN	0x00000200
183*4882a593Smuzhiyun #define TX4927_PCIC_PDMSTS_XFRACT	0x00000100
184*4882a593Smuzhiyun #define TX4927_PCIC_PDMSTS_ACCMP	0x00000080
185*4882a593Smuzhiyun #define TX4927_PCIC_PDMSTS_NCCMP	0x00000040
186*4882a593Smuzhiyun #define TX4927_PCIC_PDMSTS_NTCMP	0x00000020
187*4882a593Smuzhiyun #define TX4927_PCIC_PDMSTS_CFGERR	0x00000008
188*4882a593Smuzhiyun #define TX4927_PCIC_PDMSTS_PCIERR	0x00000004
189*4882a593Smuzhiyun #define TX4927_PCIC_PDMSTS_CHNERR	0x00000002
190*4882a593Smuzhiyun #define TX4927_PCIC_PDMSTS_DATAERR	0x00000001
191*4882a593Smuzhiyun #define TX4927_PCIC_PDMSTS_ALL_CMP	0x000000e0
192*4882a593Smuzhiyun #define TX4927_PCIC_PDMSTS_ALL_ERR	0x0000000f
193*4882a593Smuzhiyun 
194*4882a593Smuzhiyun struct tx4927_pcic_reg __iomem *get_tx4927_pcicptr(
195*4882a593Smuzhiyun 	struct pci_controller *channel);
196*4882a593Smuzhiyun void tx4927_pcic_setup(struct tx4927_pcic_reg __iomem *pcicptr,
197*4882a593Smuzhiyun 		       struct pci_controller *channel, int extarb);
198*4882a593Smuzhiyun void tx4927_report_pcic_status(void);
199*4882a593Smuzhiyun char *tx4927_pcibios_setup(char *str);
200*4882a593Smuzhiyun void tx4927_dump_pcic_settings(void);
201*4882a593Smuzhiyun irqreturn_t tx4927_pcierr_interrupt(int irq, void *dev_id);
202*4882a593Smuzhiyun 
203*4882a593Smuzhiyun #endif /* __ASM_TXX9_TX4927PCIC_H */
204