xref: /rk3399_rockchip-uboot/include/fsl_fman.h (revision 8225b2fd877f148a7663b93db55b235062ad4667)
1*8225b2fdSShaohui Xie /*
2*8225b2fdSShaohui Xie  * MPC85xx Internal Memory Map
3*8225b2fdSShaohui Xie  *
4*8225b2fdSShaohui Xie  * Copyright 2010-2011 Freescale Semiconductor, Inc.
5*8225b2fdSShaohui Xie  *
6*8225b2fdSShaohui Xie  * SPDX-License-Identifier:	GPL-2.0+
7*8225b2fdSShaohui Xie  */
8*8225b2fdSShaohui Xie 
9*8225b2fdSShaohui Xie #ifndef __FSL_FMAN_H__
10*8225b2fdSShaohui Xie #define __FSL_FMAN_H__
11*8225b2fdSShaohui Xie 
12*8225b2fdSShaohui Xie #include <asm/types.h>
13*8225b2fdSShaohui Xie 
14*8225b2fdSShaohui Xie typedef struct fm_bmi_common {
15*8225b2fdSShaohui Xie 	u32	fmbm_init;	/* BMI initialization */
16*8225b2fdSShaohui Xie 	u32	fmbm_cfg1;	/* BMI configuration1 */
17*8225b2fdSShaohui Xie 	u32	fmbm_cfg2;	/* BMI configuration2 */
18*8225b2fdSShaohui Xie 	u32	res0[0x5];
19*8225b2fdSShaohui Xie 	u32	fmbm_ievr;	/* interrupt event register */
20*8225b2fdSShaohui Xie 	u32	fmbm_ier;	/* interrupt enable register */
21*8225b2fdSShaohui Xie 	u32	fmbm_ifr;	/* interrupt force register */
22*8225b2fdSShaohui Xie 	u32	res1[0x5];
23*8225b2fdSShaohui Xie 	u32	fmbm_arb[0x8];	/* BMI arbitration */
24*8225b2fdSShaohui Xie 	u32	res2[0x28];
25*8225b2fdSShaohui Xie 	u32	fmbm_gde;	/* global debug enable */
26*8225b2fdSShaohui Xie 	u32	fmbm_pp[0x3f];	/* BMI port parameters */
27*8225b2fdSShaohui Xie 	u32	res3;
28*8225b2fdSShaohui Xie 	u32	fmbm_pfs[0x3f];	/* BMI port FIFO size */
29*8225b2fdSShaohui Xie 	u32	res4;
30*8225b2fdSShaohui Xie 	u32	fmbm_ppid[0x3f];/* port partition ID */
31*8225b2fdSShaohui Xie } fm_bmi_common_t;
32*8225b2fdSShaohui Xie 
33*8225b2fdSShaohui Xie typedef struct fm_qmi_common {
34*8225b2fdSShaohui Xie 	u32	fmqm_gc;	/* general configuration register */
35*8225b2fdSShaohui Xie 	u32	res0;
36*8225b2fdSShaohui Xie 	u32	fmqm_eie;	/* error interrupt event register */
37*8225b2fdSShaohui Xie 	u32	fmqm_eien;	/* error interrupt enable register */
38*8225b2fdSShaohui Xie 	u32	fmqm_eif;	/* error interrupt force register */
39*8225b2fdSShaohui Xie 	u32	fmqm_ie;	/* interrupt event register */
40*8225b2fdSShaohui Xie 	u32	fmqm_ien;	/* interrupt enable register */
41*8225b2fdSShaohui Xie 	u32	fmqm_if;	/* interrupt force register */
42*8225b2fdSShaohui Xie 	u32	fmqm_gs;	/* global status register */
43*8225b2fdSShaohui Xie 	u32	fmqm_ts;	/* task status register */
44*8225b2fdSShaohui Xie 	u32	fmqm_etfc;	/* enqueue total frame counter */
45*8225b2fdSShaohui Xie 	u32	fmqm_dtfc;	/* dequeue total frame counter */
46*8225b2fdSShaohui Xie 	u32	fmqm_dc0;	/* dequeue counter 0 */
47*8225b2fdSShaohui Xie 	u32	fmqm_dc1;	/* dequeue counter 1 */
48*8225b2fdSShaohui Xie 	u32	fmqm_dc2;	/* dequeue counter 2 */
49*8225b2fdSShaohui Xie 	u32	fmqm_dc3;	/* dequeue counter 3 */
50*8225b2fdSShaohui Xie 	u32	fmqm_dfnoc;	/* dequeue FQID not override counter */
51*8225b2fdSShaohui Xie 	u32	fmqm_dfcc;	/* dequeue FQID from context counter */
52*8225b2fdSShaohui Xie 	u32	fmqm_dffc;	/* dequeue FQID from FD counter */
53*8225b2fdSShaohui Xie 	u32	fmqm_dcc;	/* dequeue confirm counter */
54*8225b2fdSShaohui Xie 	u32	res1[0xc];
55*8225b2fdSShaohui Xie 	u32	fmqm_dtrc;	/* debug trap configuration register */
56*8225b2fdSShaohui Xie 	u32	fmqm_efddd;	/* enqueue frame descriptor dynamic debug */
57*8225b2fdSShaohui Xie 	u32	res3[0x2];
58*8225b2fdSShaohui Xie 	u32	res4[0xdc];	/* missing debug regs */
59*8225b2fdSShaohui Xie } fm_qmi_common_t;
60*8225b2fdSShaohui Xie 
61*8225b2fdSShaohui Xie typedef struct fm_bmi {
62*8225b2fdSShaohui Xie 	u8	res[1024];
63*8225b2fdSShaohui Xie } fm_bmi_t;
64*8225b2fdSShaohui Xie 
65*8225b2fdSShaohui Xie typedef struct fm_qmi {
66*8225b2fdSShaohui Xie 	u8	res[1024];
67*8225b2fdSShaohui Xie } fm_qmi_t;
68*8225b2fdSShaohui Xie 
69*8225b2fdSShaohui Xie struct fm_bmi_rx_port {
70*8225b2fdSShaohui Xie 	u32 fmbm_rcfg;	/* Rx configuration */
71*8225b2fdSShaohui Xie 	u32 fmbm_rst;	/* Rx status */
72*8225b2fdSShaohui Xie 	u32 fmbm_rda;	/* Rx DMA attributes */
73*8225b2fdSShaohui Xie 	u32 fmbm_rfp;	/* Rx FIFO parameters */
74*8225b2fdSShaohui Xie 	u32 fmbm_rfed;	/* Rx frame end data */
75*8225b2fdSShaohui Xie 	u32 fmbm_ricp;	/* Rx internal context parameters */
76*8225b2fdSShaohui Xie 	u32 fmbm_rim;	/* Rx internal margins */
77*8225b2fdSShaohui Xie 	u32 fmbm_rebm;	/* Rx external buffer margins */
78*8225b2fdSShaohui Xie 	u32 fmbm_rfne;	/* Rx frame next engine */
79*8225b2fdSShaohui Xie 	u32 fmbm_rfca;	/* Rx frame command attributes */
80*8225b2fdSShaohui Xie 	u32 fmbm_rfpne;	/* Rx frame parser next engine */
81*8225b2fdSShaohui Xie 	u32 fmbm_rpso;	/* Rx parse start offset */
82*8225b2fdSShaohui Xie 	u32 fmbm_rpp;	/* Rx policer profile */
83*8225b2fdSShaohui Xie 	u32 fmbm_rccb;	/* Rx coarse classification base */
84*8225b2fdSShaohui Xie 	u32 res1[0x2];
85*8225b2fdSShaohui Xie 	u32 fmbm_rprai[0x8];	/* Rx parse results array Initialization */
86*8225b2fdSShaohui Xie 	u32 fmbm_rfqid;		/* Rx frame queue ID */
87*8225b2fdSShaohui Xie 	u32 fmbm_refqid;	/* Rx error frame queue ID */
88*8225b2fdSShaohui Xie 	u32 fmbm_rfsdm;		/* Rx frame status discard mask */
89*8225b2fdSShaohui Xie 	u32 fmbm_rfsem;		/* Rx frame status error mask */
90*8225b2fdSShaohui Xie 	u32 fmbm_rfene;		/* Rx frame enqueue next engine */
91*8225b2fdSShaohui Xie 	u32 res2[0x23];
92*8225b2fdSShaohui Xie 	u32 fmbm_ebmpi[0x8];	/* buffer manager pool information */
93*8225b2fdSShaohui Xie 	u32 fmbm_acnt[0x8];	/* allocate counter */
94*8225b2fdSShaohui Xie 	u32 res3[0x8];
95*8225b2fdSShaohui Xie 	u32 fmbm_cgm[0x8];	/* congestion group map */
96*8225b2fdSShaohui Xie 	u32 fmbm_mpd;		/* BMan pool depletion */
97*8225b2fdSShaohui Xie 	u32 res4[0x1F];
98*8225b2fdSShaohui Xie 	u32 fmbm_rstc;		/* Rx statistics counters */
99*8225b2fdSShaohui Xie 	u32 fmbm_rfrc;		/* Rx frame counters */
100*8225b2fdSShaohui Xie 	u32 fmbm_rfbc;		/* Rx bad frames counter */
101*8225b2fdSShaohui Xie 	u32 fmbm_rlfc;		/* Rx large frames counter */
102*8225b2fdSShaohui Xie 	u32 fmbm_rffc;		/* Rx filter frames counter */
103*8225b2fdSShaohui Xie 	u32 fmbm_rfdc;		/* Rx frame discard counter */
104*8225b2fdSShaohui Xie 	u32 fmbm_rfldec;	/* Rx frames list DMA error counter */
105*8225b2fdSShaohui Xie 	u32 fmbm_rodc;		/* Rx out of buffers discard counter */
106*8225b2fdSShaohui Xie 	u32 fmbm_rbdc;		/* Rx buffers deallocate counter */
107*8225b2fdSShaohui Xie 	u32 res5[0x17];
108*8225b2fdSShaohui Xie 	u32 fmbm_rpc;		/* Rx performance counters */
109*8225b2fdSShaohui Xie 	u32 fmbm_rpcp;		/* Rx performance count parameters */
110*8225b2fdSShaohui Xie 	u32 fmbm_rccn;		/* Rx cycle counter */
111*8225b2fdSShaohui Xie 	u32 fmbm_rtuc;		/* Rx tasks utilization counter */
112*8225b2fdSShaohui Xie 	u32 fmbm_rrquc;		/* Rx receive queue utilization counter */
113*8225b2fdSShaohui Xie 	u32 fmbm_rduc;		/* Rx DMA utilization counter */
114*8225b2fdSShaohui Xie 	u32 fmbm_rfuc;		/* Rx FIFO utilization counter */
115*8225b2fdSShaohui Xie 	u32 fmbm_rpac;		/* Rx pause activation counter */
116*8225b2fdSShaohui Xie 	u32 res6[0x18];
117*8225b2fdSShaohui Xie 	u32 fmbm_rdbg;		/* Rx debug configuration */
118*8225b2fdSShaohui Xie };
119*8225b2fdSShaohui Xie 
120*8225b2fdSShaohui Xie /* FMBM_RCFG - Rx configuration */
121*8225b2fdSShaohui Xie #define FMBM_RCFG_EN		0x80000000 /* port is enabled to receive data */
122*8225b2fdSShaohui Xie #define FMBM_RCFG_FDOVR		0x02000000 /* frame discard override */
123*8225b2fdSShaohui Xie #define FMBM_RCFG_IM		0x01000000 /* independent mode */
124*8225b2fdSShaohui Xie 
125*8225b2fdSShaohui Xie /* FMBM_RST - Rx status */
126*8225b2fdSShaohui Xie #define FMBM_RST_BSY		0x80000000 /* Rx port is busy */
127*8225b2fdSShaohui Xie 
128*8225b2fdSShaohui Xie /* FMBM_RFCA - Rx frame command attributes */
129*8225b2fdSShaohui Xie #define FMBM_RFCA_ORDER		0x80000000
130*8225b2fdSShaohui Xie #define FMBM_RFCA_MR_MASK	0x003f0000
131*8225b2fdSShaohui Xie #define FMBM_RFCA_MR(x)		((x << 16) & FMBM_RFCA_MR_MASK)
132*8225b2fdSShaohui Xie 
133*8225b2fdSShaohui Xie /* FMBM_RSTC - Rx statistics */
134*8225b2fdSShaohui Xie #define FMBM_RSTC_EN		0x80000000 /* statistics counters enable */
135*8225b2fdSShaohui Xie 
136*8225b2fdSShaohui Xie struct fm_bmi_tx_port {
137*8225b2fdSShaohui Xie 	u32 fmbm_tcfg;	/* Tx configuration */
138*8225b2fdSShaohui Xie 	u32 fmbm_tst;	/* Tx status */
139*8225b2fdSShaohui Xie 	u32 fmbm_tda;	/* Tx DMA attributes */
140*8225b2fdSShaohui Xie 	u32 fmbm_tfp;	/* Tx FIFO parameters */
141*8225b2fdSShaohui Xie 	u32 fmbm_tfed;	/* Tx frame end data */
142*8225b2fdSShaohui Xie 	u32 fmbm_ticp;	/* Tx internal context parameters */
143*8225b2fdSShaohui Xie 	u32 fmbm_tfne;	/* Tx frame next engine */
144*8225b2fdSShaohui Xie 	u32 fmbm_tfca;	/* Tx frame command attributes */
145*8225b2fdSShaohui Xie 	u32 fmbm_tcfqid;/* Tx confirmation frame queue ID */
146*8225b2fdSShaohui Xie 	u32 fmbm_tfeqid;/* Tx error frame queue ID */
147*8225b2fdSShaohui Xie 	u32 fmbm_tfene;	/* Tx frame enqueue next engine */
148*8225b2fdSShaohui Xie 	u32 fmbm_trlmts;/* Tx rate limiter scale */
149*8225b2fdSShaohui Xie 	u32 fmbm_trlmt;	/* Tx rate limiter */
150*8225b2fdSShaohui Xie 	u32 res0[0x73];
151*8225b2fdSShaohui Xie 	u32 fmbm_tstc;	/* Tx statistics counters */
152*8225b2fdSShaohui Xie 	u32 fmbm_tfrc;	/* Tx frame counter */
153*8225b2fdSShaohui Xie 	u32 fmbm_tfdc;	/* Tx frames discard counter */
154*8225b2fdSShaohui Xie 	u32 fmbm_tfledc;/* Tx frame length error discard counter */
155*8225b2fdSShaohui Xie 	u32 fmbm_tfufdc;/* Tx frame unsupported format discard counter */
156*8225b2fdSShaohui Xie 	u32 fmbm_tbdc;	/* Tx buffers deallocate counter */
157*8225b2fdSShaohui Xie 	u32 res1[0x1a];
158*8225b2fdSShaohui Xie 	u32 fmbm_tpc;	/* Tx performance counters */
159*8225b2fdSShaohui Xie 	u32 fmbm_tpcp;	/* Tx performance count parameters */
160*8225b2fdSShaohui Xie 	u32 fmbm_tccn;	/* Tx cycle counter */
161*8225b2fdSShaohui Xie 	u32 fmbm_ttuc;	/* Tx tasks utilization counter */
162*8225b2fdSShaohui Xie 	u32 fmbm_ttcquc;/* Tx transmit confirm queue utilization counter */
163*8225b2fdSShaohui Xie 	u32 fmbm_tduc;	/* Tx DMA utilization counter */
164*8225b2fdSShaohui Xie 	u32 fmbm_tfuc;	/* Tx FIFO utilization counter */
165*8225b2fdSShaohui Xie 	u32 res2[0x19];
166*8225b2fdSShaohui Xie 	u32 fmbm_tdcfg;	/* Tx debug configuration */
167*8225b2fdSShaohui Xie };
168*8225b2fdSShaohui Xie 
169*8225b2fdSShaohui Xie /* FMBM_TCFG - Tx configuration */
170*8225b2fdSShaohui Xie #define FMBM_TCFG_EN	0x80000000 /* port is enabled to transmit data */
171*8225b2fdSShaohui Xie #define FMBM_TCFG_IM	0x01000000 /* independent mode enable */
172*8225b2fdSShaohui Xie 
173*8225b2fdSShaohui Xie /* FMBM_TST - Tx status */
174*8225b2fdSShaohui Xie #define FMBM_TST_BSY		0x80000000 /* Tx port is busy */
175*8225b2fdSShaohui Xie 
176*8225b2fdSShaohui Xie /* FMBM_TFCA - Tx frame command attributes */
177*8225b2fdSShaohui Xie #define FMBM_TFCA_ORDER		0x80000000
178*8225b2fdSShaohui Xie #define FMBM_TFCA_MR_MASK	0x003f0000
179*8225b2fdSShaohui Xie #define FMBM_TFCA_MR(x)		((x << 16) & FMBM_TFCA_MR_MASK)
180*8225b2fdSShaohui Xie 
181*8225b2fdSShaohui Xie /* FMBM_TSTC - Tx statistics counters */
182*8225b2fdSShaohui Xie #define FMBM_TSTC_EN		0x80000000
183*8225b2fdSShaohui Xie 
184*8225b2fdSShaohui Xie /* FMBM_INIT - BMI initialization register */
185*8225b2fdSShaohui Xie #define FMBM_INIT_START		0x80000000 /* init internal buffers */
186*8225b2fdSShaohui Xie 
187*8225b2fdSShaohui Xie /* FMBM_CFG1 - BMI configuration 1 */
188*8225b2fdSShaohui Xie #define FMBM_CFG1_FBPS_MASK	0x03ff0000 /* Free buffer pool size */
189*8225b2fdSShaohui Xie #define FMBM_CFG1_FBPS_SHIFT	16
190*8225b2fdSShaohui Xie #define FMBM_CFG1_FBPO_MASK	0x000003ff /* Free buffer pool offset */
191*8225b2fdSShaohui Xie 
192*8225b2fdSShaohui Xie /* FMBM_IEVR - interrupt event */
193*8225b2fdSShaohui Xie #define FMBM_IEVR_PEC		0x80000000 /* pipeline table ECC err detected */
194*8225b2fdSShaohui Xie #define FMBM_IEVR_LEC		0x40000000 /* linked list RAM ECC error */
195*8225b2fdSShaohui Xie #define FMBM_IEVR_SEC		0x20000000 /* statistics count RAM ECC error */
196*8225b2fdSShaohui Xie #define FMBM_IEVR_CLEAR_ALL	(FMBM_IEVR_PEC | FMBM_IEVR_LEC | FMBM_IEVR_SEC)
197*8225b2fdSShaohui Xie 
198*8225b2fdSShaohui Xie /* FMBM_IER - interrupt enable */
199*8225b2fdSShaohui Xie #define FMBM_IER_PECE		0x80000000 /* PEC interrupt enable */
200*8225b2fdSShaohui Xie #define FMBM_IER_LECE		0x40000000 /* LEC interrupt enable */
201*8225b2fdSShaohui Xie #define FMBM_IER_SECE		0x20000000 /* SEC interrupt enable */
202*8225b2fdSShaohui Xie 
203*8225b2fdSShaohui Xie #define FMBM_IER_DISABLE_ALL	0x00000000
204*8225b2fdSShaohui Xie 
205*8225b2fdSShaohui Xie /* FMBM_PP - BMI Port Parameters */
206*8225b2fdSShaohui Xie #define FMBM_PP_MXT_MASK	0x3f000000 /* Max # tasks */
207*8225b2fdSShaohui Xie #define FMBM_PP_MXT(x)		(((x-1) << 24) & FMBM_PP_MXT_MASK)
208*8225b2fdSShaohui Xie #define FMBM_PP_MXD_MASK	0x00000f00 /* Max DMA */
209*8225b2fdSShaohui Xie #define FMBM_PP_MXD(x)		(((x-1) << 8) & FMBM_PP_MXD_MASK)
210*8225b2fdSShaohui Xie 
211*8225b2fdSShaohui Xie /* FMBM_PFS - BMI Port FIFO Size */
212*8225b2fdSShaohui Xie #define FMBM_PFS_IFSZ_MASK	0x000003ff /* Internal Fifo Size */
213*8225b2fdSShaohui Xie #define FMBM_PFS_IFSZ(x)	(x & FMBM_PFS_IFSZ_MASK)
214*8225b2fdSShaohui Xie 
215*8225b2fdSShaohui Xie /* FMQM_GC - global configuration */
216*8225b2fdSShaohui Xie #define FMQM_GC_ENQ_EN		0x80000000 /* enqueue enable */
217*8225b2fdSShaohui Xie #define FMQM_GC_DEQ_EN		0x40000000 /* dequeue enable */
218*8225b2fdSShaohui Xie #define FMQM_GC_STEN		0x10000000 /* enable global stat counters */
219*8225b2fdSShaohui Xie #define FMQM_GC_ENQ_THR_MASK	0x00003f00 /* max number of enqueue Tnum */
220*8225b2fdSShaohui Xie #define FMQM_GC_ENQ(x)		((x << 8) &  FMQM_GC_ENQ_THR_MAS)
221*8225b2fdSShaohui Xie #define FMQM_GC_DEQ_THR_MASK	0x0000003f /* max number of dequeue Tnum */
222*8225b2fdSShaohui Xie #define FMQM_GC_DEQ(x)		(x & FMQM_GC_DEQ_THR_MASK)
223*8225b2fdSShaohui Xie 
224*8225b2fdSShaohui Xie /* FMQM_EIE - error interrupt event register */
225*8225b2fdSShaohui Xie #define FMQM_EIE_DEE		0x80000000 /* double-bit ECC error */
226*8225b2fdSShaohui Xie #define FMQM_EIE_DFUPE		0x40000000 /* dequeue from unknown PortID */
227*8225b2fdSShaohui Xie #define FMQM_EIE_CLEAR_ALL	(FMQM_EIE_DEE | FMQM_EIE_DFUPE)
228*8225b2fdSShaohui Xie 
229*8225b2fdSShaohui Xie /* FMQM_EIEN - error interrupt enable register */
230*8225b2fdSShaohui Xie #define FMQM_EIEN_DEEN		0x80000000 /* double-bit ECC error */
231*8225b2fdSShaohui Xie #define FMQM_EIEN_DFUPEN	0x40000000 /* dequeue from unknown PortID */
232*8225b2fdSShaohui Xie #define FMQM_EIEN_DISABLE_ALL	0x00000000
233*8225b2fdSShaohui Xie 
234*8225b2fdSShaohui Xie /* FMQM_IE - interrupt event register */
235*8225b2fdSShaohui Xie #define FMQM_IE_SEE		0x80000000 /* single-bit ECC error detected */
236*8225b2fdSShaohui Xie #define FMQM_IE_CLEAR_ALL	FMQM_IE_SEE
237*8225b2fdSShaohui Xie 
238*8225b2fdSShaohui Xie /* FMQM_IEN - interrupt enable register */
239*8225b2fdSShaohui Xie #define FMQM_IEN_SEE		0x80000000 /* single-bit ECC err IRQ enable */
240*8225b2fdSShaohui Xie #define FMQM_IEN_DISABLE_ALL	0x00000000
241*8225b2fdSShaohui Xie 
242*8225b2fdSShaohui Xie /* NIA - next invoked action */
243*8225b2fdSShaohui Xie #define NIA_ENG_RISC		0x00000000
244*8225b2fdSShaohui Xie #define NIA_ENG_MASK		0x007c0000
245*8225b2fdSShaohui Xie 
246*8225b2fdSShaohui Xie /* action code */
247*8225b2fdSShaohui Xie #define NIA_RISC_AC_CC		0x00000006
248*8225b2fdSShaohui Xie #define NIA_RISC_AC_IM_TX	0x00000008 /* independent mode Tx */
249*8225b2fdSShaohui Xie #define NIA_RISC_AC_IM_RX	0x0000000a /* independent mode Rx */
250*8225b2fdSShaohui Xie #define NIA_RISC_AC_HC		0x0000000c
251*8225b2fdSShaohui Xie 
252*8225b2fdSShaohui Xie typedef struct fm_parser {
253*8225b2fdSShaohui Xie 	u8	res[1024];
254*8225b2fdSShaohui Xie } fm_parser_t;
255*8225b2fdSShaohui Xie 
256*8225b2fdSShaohui Xie typedef struct fm_policer {
257*8225b2fdSShaohui Xie 	u8	res[4*1024];
258*8225b2fdSShaohui Xie } fm_policer_t;
259*8225b2fdSShaohui Xie 
260*8225b2fdSShaohui Xie typedef struct fm_keygen {
261*8225b2fdSShaohui Xie 	u8	res[4*1024];
262*8225b2fdSShaohui Xie } fm_keygen_t;
263*8225b2fdSShaohui Xie 
264*8225b2fdSShaohui Xie typedef struct fm_dma {
265*8225b2fdSShaohui Xie 	u32	fmdmsr;		/* status register */
266*8225b2fdSShaohui Xie 	u32	fmdmmr;		/* mode register */
267*8225b2fdSShaohui Xie 	u32	fmdmtr;		/* bus threshold register */
268*8225b2fdSShaohui Xie 	u32	fmdmhy;		/* bus hysteresis register */
269*8225b2fdSShaohui Xie 	u32	fmdmsetr;	/* SOS emergency threshold register */
270*8225b2fdSShaohui Xie 	u32	fmdmtah;	/* transfer bus address high register */
271*8225b2fdSShaohui Xie 	u32	fmdmtal;	/* transfer bus address low register */
272*8225b2fdSShaohui Xie 	u32	fmdmtcid;	/* transfer bus communication ID register */
273*8225b2fdSShaohui Xie 	u32	fmdmra;		/* DMA bus internal ram address register */
274*8225b2fdSShaohui Xie 	u32	fmdmrd;		/* DMA bus internal ram data register */
275*8225b2fdSShaohui Xie 	u32	res0[0xb];
276*8225b2fdSShaohui Xie 	u32	fmdmdcr;	/* debug counter */
277*8225b2fdSShaohui Xie 	u32	fmdmemsr;	/* emrgency smoother register */
278*8225b2fdSShaohui Xie 	u32	res1;
279*8225b2fdSShaohui Xie 	u32	fmdmplr[32];	/* FM DMA PID-LIODN # register */
280*8225b2fdSShaohui Xie 	u32	res[0x3c8];
281*8225b2fdSShaohui Xie } fm_dma_t;
282*8225b2fdSShaohui Xie 
283*8225b2fdSShaohui Xie /* FMDMSR - Fman DMA status register */
284*8225b2fdSShaohui Xie #define FMDMSR_CMDQNE		0x10000000 /* command queue not empty */
285*8225b2fdSShaohui Xie #define FMDMSR_BER		0x08000000 /* bus err event occurred on bus */
286*8225b2fdSShaohui Xie #define FMDMSR_RDB_ECC		0x04000000 /* read buffer ECC error */
287*8225b2fdSShaohui Xie #define FMDMSR_WRB_SECC		0x02000000 /* write buf ECC err sys side */
288*8225b2fdSShaohui Xie #define FMDMSR_WRB_FECC		0x01000000 /* write buf ECC err Fman side */
289*8225b2fdSShaohui Xie #define FMDMSR_DPEXT_SECC	0x00800000 /* DP external ECC err sys side */
290*8225b2fdSShaohui Xie #define FMDMSR_DPEXT_FECC	0x00400000 /* DP external ECC err Fman side */
291*8225b2fdSShaohui Xie #define FMDMSR_DPDAT_SECC	0x00200000 /* DP data ECC err on sys side */
292*8225b2fdSShaohui Xie #define FMDMSR_DPDAT_FECC	0x00100000 /* DP data ECC err on Fman side */
293*8225b2fdSShaohui Xie #define FMDMSR_SPDAT_FECC	0x00080000 /* SP data ECC error Fman side */
294*8225b2fdSShaohui Xie 
295*8225b2fdSShaohui Xie #define FMDMSR_CLEAR_ALL	(FMDMSR_BER | FMDMSR_RDB_ECC \
296*8225b2fdSShaohui Xie 				| FMDMSR_WRB_SECC | FMDMSR_WRB_FECC \
297*8225b2fdSShaohui Xie 				| FMDMSR_DPEXT_SECC | FMDMSR_DPEXT_FECC \
298*8225b2fdSShaohui Xie 				| FMDMSR_DPDAT_SECC | FMDMSR_DPDAT_FECC \
299*8225b2fdSShaohui Xie 				| FMDMSR_SPDAT_FECC)
300*8225b2fdSShaohui Xie 
301*8225b2fdSShaohui Xie /* FMDMMR - FMan DMA mode register */
302*8225b2fdSShaohui Xie #define FMDMMR_SBER		0x10000000 /* stop the DMA if a bus error */
303*8225b2fdSShaohui Xie 
304*8225b2fdSShaohui Xie typedef struct fm_fpm {
305*8225b2fdSShaohui Xie 	u32	fpmtnc;		/* TNUM control */
306*8225b2fdSShaohui Xie 	u32	fpmprc;		/* Port_ID control */
307*8225b2fdSShaohui Xie 	u32	res0;
308*8225b2fdSShaohui Xie 	u32	fpmflc;		/* flush control */
309*8225b2fdSShaohui Xie 	u32	fpmdis1;	/* dispatch thresholds1 */
310*8225b2fdSShaohui Xie 	u32	fpmdis2;	/* dispatch thresholds2 */
311*8225b2fdSShaohui Xie 	u32	fmepi;		/* error pending interrupts */
312*8225b2fdSShaohui Xie 	u32	fmrie;		/* rams interrupt enable */
313*8225b2fdSShaohui Xie 	u32	fpmfcevent[0x4];/* FMan controller event 0-3 */
314*8225b2fdSShaohui Xie 	u32	res1[0x4];
315*8225b2fdSShaohui Xie 	u32	fpmfcmask[0x4];	/* FMan controller mask 0-3 */
316*8225b2fdSShaohui Xie 	u32	res2[0x4];
317*8225b2fdSShaohui Xie 	u32	fpmtsc1;	/* timestamp control1 */
318*8225b2fdSShaohui Xie 	u32	fpmtsc2;	/* timestamp control2 */
319*8225b2fdSShaohui Xie 	u32	fpmtsp;		/* time stamp */
320*8225b2fdSShaohui Xie 	u32	fpmtsf;		/* time stamp fraction */
321*8225b2fdSShaohui Xie 	u32	fpmrcr;		/* rams control and event */
322*8225b2fdSShaohui Xie 	u32	res3[0x3];
323*8225b2fdSShaohui Xie 	u32	fpmdrd[0x4];	/* data_ram data 0-3 */
324*8225b2fdSShaohui Xie 	u32	res4[0xc];
325*8225b2fdSShaohui Xie 	u32	fpmdra;		/* data ram access */
326*8225b2fdSShaohui Xie 	u32	fm_ip_rev_1;	/* IP block revision 1 */
327*8225b2fdSShaohui Xie 	u32	fm_ip_rev_2;	/* IP block revision 2 */
328*8225b2fdSShaohui Xie 	u32	fmrstc;		/* reset command */
329*8225b2fdSShaohui Xie 	u32	fmcld;		/* classifier debug control */
330*8225b2fdSShaohui Xie 	u32	fmnpi;		/* normal pending interrupts */
331*8225b2fdSShaohui Xie 	u32	res5;
332*8225b2fdSShaohui Xie 	u32	fmfpee;		/* event and enable */
333*8225b2fdSShaohui Xie 	u32	fpmcev[0x4];	/* CPU event 0-3 */
334*8225b2fdSShaohui Xie 	u32	res6[0x4];
335*8225b2fdSShaohui Xie 	u32	fmfp_ps[0x40];	/* port status */
336*8225b2fdSShaohui Xie 	u32	res7[0x260];
337*8225b2fdSShaohui Xie 	u32	fpmts[0x80];	/* task status */
338*8225b2fdSShaohui Xie 	u32	res8[0xa0];
339*8225b2fdSShaohui Xie } fm_fpm_t;
340*8225b2fdSShaohui Xie 
341*8225b2fdSShaohui Xie /* FMFP_PRC - FPM Port_ID Control Register */
342*8225b2fdSShaohui Xie #define FMFPPRC_PORTID_MASK	0x3f000000
343*8225b2fdSShaohui Xie #define FMFPPRC_PORTID_SHIFT	24
344*8225b2fdSShaohui Xie #define FMFPPRC_ORA_SHIFT	16
345*8225b2fdSShaohui Xie #define FMFPPRC_RISC1		0x00000001
346*8225b2fdSShaohui Xie #define FMFPPRC_RISC2		0x00000002
347*8225b2fdSShaohui Xie #define FMFPPRC_RISC_ALL	(FMFPPRC_RISC1 | FMFPPRC_RSIC2)
348*8225b2fdSShaohui Xie 
349*8225b2fdSShaohui Xie /* FPM Flush Control Register */
350*8225b2fdSShaohui Xie #define FMFP_FLC_DISP_LIM_NONE	0x00000000 /* no dispatch limitation */
351*8225b2fdSShaohui Xie 
352*8225b2fdSShaohui Xie /* FMFP_EE - FPM event and enable register */
353*8225b2fdSShaohui Xie #define FMFPEE_DECC		0x80000000 /* double ECC err on FPM ram */
354*8225b2fdSShaohui Xie #define FMFPEE_STL		0x40000000 /* stall of task ... */
355*8225b2fdSShaohui Xie #define FMFPEE_SECC		0x20000000 /* single ECC error */
356*8225b2fdSShaohui Xie #define FMFPEE_RFM		0x00010000 /* release FMan */
357*8225b2fdSShaohui Xie #define FMFPEE_DECC_EN		0x00008000 /* double ECC interrupt enable */
358*8225b2fdSShaohui Xie #define FMFPEE_STL_EN		0x00004000 /* stall of task interrupt enable */
359*8225b2fdSShaohui Xie #define FMFPEE_SECC_EN		0x00002000 /* single ECC err interrupt enable */
360*8225b2fdSShaohui Xie #define FMFPEE_EHM		0x00000008 /* external halt enable */
361*8225b2fdSShaohui Xie #define FMFPEE_UEC		0x00000004 /* FMan is not halted */
362*8225b2fdSShaohui Xie #define FMFPEE_CER		0x00000002 /* only errornous task stalled */
363*8225b2fdSShaohui Xie #define FMFPEE_DER		0x00000001 /* DMA error is just reported */
364*8225b2fdSShaohui Xie 
365*8225b2fdSShaohui Xie #define FMFPEE_CLEAR_EVENT	(FMFPEE_DECC | FMFPEE_STL | FMFPEE_SECC | \
366*8225b2fdSShaohui Xie 				 FMFPEE_EHM | FMFPEE_UEC | FMFPEE_CER | \
367*8225b2fdSShaohui Xie 				 FMFPEE_DER | FMFPEE_RFM)
368*8225b2fdSShaohui Xie 
369*8225b2fdSShaohui Xie /* FMFP_RCR - FMan Rams Control and Event */
370*8225b2fdSShaohui Xie #define FMFP_RCR_MDEC		0x00008000 /* double ECC error in muram */
371*8225b2fdSShaohui Xie #define FMFP_RCR_IDEC		0x00004000 /* double ECC error in iram */
372*8225b2fdSShaohui Xie 
373*8225b2fdSShaohui Xie typedef struct fm_imem {
374*8225b2fdSShaohui Xie 	u32	iadd;		/* instruction address register */
375*8225b2fdSShaohui Xie 	u32	idata;		/* instruction data register */
376*8225b2fdSShaohui Xie 	u32	itcfg;		/* timing config register */
377*8225b2fdSShaohui Xie 	u32	iready;		/* ready register */
378*8225b2fdSShaohui Xie 	u8	res[0xff0];
379*8225b2fdSShaohui Xie } fm_imem_t;
380*8225b2fdSShaohui Xie #define IRAM_IADD_AIE		0x80000000 /* address auto increase enable */
381*8225b2fdSShaohui Xie #define IRAM_READY		0x80000000 /* ready to use */
382*8225b2fdSShaohui Xie 
383*8225b2fdSShaohui Xie typedef struct fm_soft_parser {
384*8225b2fdSShaohui Xie 	u8	res[4*1024];
385*8225b2fdSShaohui Xie } fm_soft_parser_t;
386*8225b2fdSShaohui Xie 
387*8225b2fdSShaohui Xie typedef struct fm_dtesc {
388*8225b2fdSShaohui Xie 	u8	res[4*1024];
389*8225b2fdSShaohui Xie } fm_dtsec_t;
390*8225b2fdSShaohui Xie 
391*8225b2fdSShaohui Xie typedef struct fm_mdio {
392*8225b2fdSShaohui Xie 	u8	res0[0x120];
393*8225b2fdSShaohui Xie 	u32	miimcfg;	/* MII management configuration reg */
394*8225b2fdSShaohui Xie 	u32	miimcom;	/* MII management command reg */
395*8225b2fdSShaohui Xie 	u32	miimadd;	/* MII management address reg */
396*8225b2fdSShaohui Xie 	u32	miimcon;	/* MII management control reg */
397*8225b2fdSShaohui Xie 	u32	miimstat;	/* MII management status reg  */
398*8225b2fdSShaohui Xie 	u32	miimind;	/* MII management indication reg */
399*8225b2fdSShaohui Xie 	u8	res1[0x1000 - 0x138];
400*8225b2fdSShaohui Xie } fm_mdio_t;
401*8225b2fdSShaohui Xie 
402*8225b2fdSShaohui Xie typedef struct fm_10gec {
403*8225b2fdSShaohui Xie 	u8	res[4*1024];
404*8225b2fdSShaohui Xie } fm_10gec_t;
405*8225b2fdSShaohui Xie 
406*8225b2fdSShaohui Xie typedef struct fm_10gec_mdio {
407*8225b2fdSShaohui Xie 	u8	res[4*1024];
408*8225b2fdSShaohui Xie } fm_10gec_mdio_t;
409*8225b2fdSShaohui Xie 
410*8225b2fdSShaohui Xie typedef struct fm_memac {
411*8225b2fdSShaohui Xie 	u8	res[4*1024];
412*8225b2fdSShaohui Xie } fm_memac_t;
413*8225b2fdSShaohui Xie 
414*8225b2fdSShaohui Xie typedef struct fm_memac_mdio {
415*8225b2fdSShaohui Xie 	u8	res[4*1024];
416*8225b2fdSShaohui Xie } fm_memac_mdio_t;
417*8225b2fdSShaohui Xie 
418*8225b2fdSShaohui Xie typedef struct fm_1588 {
419*8225b2fdSShaohui Xie 	u8	res[4*1024];
420*8225b2fdSShaohui Xie } fm_1588_t;
421*8225b2fdSShaohui Xie 
422*8225b2fdSShaohui Xie typedef struct ccsr_fman {
423*8225b2fdSShaohui Xie 	u8			muram[0x80000];
424*8225b2fdSShaohui Xie 	fm_bmi_common_t		fm_bmi_common;
425*8225b2fdSShaohui Xie 	fm_qmi_common_t		fm_qmi_common;
426*8225b2fdSShaohui Xie 	u8			res0[2048];
427*8225b2fdSShaohui Xie 	struct {
428*8225b2fdSShaohui Xie 		fm_bmi_t	fm_bmi;
429*8225b2fdSShaohui Xie 		fm_qmi_t	fm_qmi;
430*8225b2fdSShaohui Xie 		fm_parser_t	fm_parser;
431*8225b2fdSShaohui Xie 		u8		res[1024];
432*8225b2fdSShaohui Xie 	} port[63];
433*8225b2fdSShaohui Xie 	fm_policer_t		fm_policer;
434*8225b2fdSShaohui Xie 	fm_keygen_t		fm_keygen;
435*8225b2fdSShaohui Xie 	fm_dma_t		fm_dma;
436*8225b2fdSShaohui Xie 	fm_fpm_t		fm_fpm;
437*8225b2fdSShaohui Xie 	fm_imem_t		fm_imem;
438*8225b2fdSShaohui Xie 	u8			res1[8*1024];
439*8225b2fdSShaohui Xie 	fm_soft_parser_t	fm_soft_parser;
440*8225b2fdSShaohui Xie 	u8			res2[96*1024];
441*8225b2fdSShaohui Xie #ifdef CONFIG_SYS_FMAN_V3
442*8225b2fdSShaohui Xie 	struct {
443*8225b2fdSShaohui Xie 		fm_memac_t		fm_memac;
444*8225b2fdSShaohui Xie 		fm_memac_mdio_t		fm_memac_mdio;
445*8225b2fdSShaohui Xie 	} memac[10];
446*8225b2fdSShaohui Xie 	u8			res4[32*1024];
447*8225b2fdSShaohui Xie 	fm_memac_mdio_t		fm_dedicated_mdio[2];
448*8225b2fdSShaohui Xie #else
449*8225b2fdSShaohui Xie 	struct {
450*8225b2fdSShaohui Xie 		fm_dtsec_t	fm_dtesc;
451*8225b2fdSShaohui Xie 		fm_mdio_t	fm_mdio;
452*8225b2fdSShaohui Xie 	} mac_1g[8];		/* support up to 8 1g controllers */
453*8225b2fdSShaohui Xie 	struct {
454*8225b2fdSShaohui Xie 		fm_10gec_t		fm_10gec;
455*8225b2fdSShaohui Xie 		fm_10gec_mdio_t		fm_10gec_mdio;
456*8225b2fdSShaohui Xie 	} mac_10g[1];
457*8225b2fdSShaohui Xie 	u8			res4[48*1024];
458*8225b2fdSShaohui Xie #endif
459*8225b2fdSShaohui Xie 	fm_1588_t		fm_1588;
460*8225b2fdSShaohui Xie 	u8			res5[4*1024];
461*8225b2fdSShaohui Xie } ccsr_fman_t;
462*8225b2fdSShaohui Xie 
463*8225b2fdSShaohui Xie #endif /*__FSL_FMAN_H__*/
464