xref: /freebsd/sys/contrib/ncsw/Peripherals/FM/fm.h (revision d6b92ffa)
1 /* Copyright (c) 2008-2011 Freescale Semiconductor, Inc.
2  * All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions are met:
6  *     * Redistributions of source code must retain the above copyright
7  *       notice, this list of conditions and the following disclaimer.
8  *     * Redistributions in binary form must reproduce the above copyright
9  *       notice, this list of conditions and the following disclaimer in the
10  *       documentation and/or other materials provided with the distribution.
11  *     * Neither the name of Freescale Semiconductor nor the
12  *       names of its contributors may be used to endorse or promote products
13  *       derived from this software without specific prior written permission.
14  *
15  *
16  * ALTERNATIVELY, this software may be distributed under the terms of the
17  * GNU General Public License ("GPL") as published by the Free Software
18  * Foundation, either version 2 of that License or (at your option) any
19  * later version.
20  *
21  * THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor ``AS IS'' AND ANY
22  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
23  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
24  * DISCLAIMED. IN NO EVENT SHALL Freescale Semiconductor BE LIABLE FOR ANY
25  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
26  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
27  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
28  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
30  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  */
32 
33 /******************************************************************************
34  @File          fm.h
35 
36  @Description   FM internal structures and definitions.
37 *//***************************************************************************/
38 #ifndef __FM_H
39 #define __FM_H
40 
41 #include "error_ext.h"
42 #include "std_ext.h"
43 #include "fm_ext.h"
44 #include "fm_ipc.h"
45 
46 
47 #define __ERR_MODULE__  MODULE_FM
48 
49 #define FM_MAX_NUM_OF_HW_PORT_IDS           64
50 #define FM_MAX_NUM_OF_GUESTS                100
51 
52 /**************************************************************************//**
53  @Description       Exceptions
54 *//***************************************************************************/
55 #define FM_EX_DMA_BUS_ERROR                 0x80000000      /**< DMA bus error. */
56 #define FM_EX_DMA_READ_ECC                  0x40000000
57 #define FM_EX_DMA_SYSTEM_WRITE_ECC          0x20000000
58 #define FM_EX_DMA_FM_WRITE_ECC              0x10000000
59 #define FM_EX_FPM_STALL_ON_TASKS            0x08000000      /**< Stall of tasks on FPM */
60 #define FM_EX_FPM_SINGLE_ECC                0x04000000      /**< Single ECC on FPM */
61 #define FM_EX_FPM_DOUBLE_ECC                0x02000000
62 #define FM_EX_QMI_SINGLE_ECC                0x01000000      /**< Single ECC on FPM */
63 #define FM_EX_QMI_DEQ_FROM_UNKNOWN_PORTID   0x00800000      /**< Dequeu from default queue id */
64 #define FM_EX_QMI_DOUBLE_ECC                0x00400000
65 #define FM_EX_BMI_LIST_RAM_ECC              0x00200000
66 #define FM_EX_BMI_PIPELINE_ECC              0x00100000
67 #define FM_EX_BMI_STATISTICS_RAM_ECC        0x00080000
68 #define FM_EX_IRAM_ECC                      0x00040000
69 #define FM_EX_NURAM_ECC                     0x00020000
70 #define FM_EX_BMI_DISPATCH_RAM_ECC          0x00010000
71 
72 #define GET_EXCEPTION_FLAG(bitMask, exception)       switch(exception){ \
73     case e_FM_EX_DMA_BUS_ERROR:                                         \
74         bitMask = FM_EX_DMA_BUS_ERROR; break;                           \
75     case e_FM_EX_DMA_READ_ECC:                                          \
76         bitMask = FM_EX_DMA_READ_ECC; break;                            \
77     case e_FM_EX_DMA_SYSTEM_WRITE_ECC:                                  \
78         bitMask = FM_EX_DMA_SYSTEM_WRITE_ECC; break;                    \
79     case e_FM_EX_DMA_FM_WRITE_ECC:                                      \
80         bitMask = FM_EX_DMA_FM_WRITE_ECC; break;                        \
81     case e_FM_EX_FPM_STALL_ON_TASKS:                                    \
82         bitMask = FM_EX_FPM_STALL_ON_TASKS; break;                      \
83     case e_FM_EX_FPM_SINGLE_ECC:                                        \
84         bitMask = FM_EX_FPM_SINGLE_ECC; break;                          \
85     case e_FM_EX_FPM_DOUBLE_ECC:                                        \
86         bitMask = FM_EX_FPM_DOUBLE_ECC; break;                          \
87     case e_FM_EX_QMI_SINGLE_ECC:                                        \
88         bitMask = FM_EX_QMI_SINGLE_ECC; break;                          \
89     case e_FM_EX_QMI_DOUBLE_ECC:                                        \
90         bitMask = FM_EX_QMI_DOUBLE_ECC; break;                          \
91     case e_FM_EX_QMI_DEQ_FROM_UNKNOWN_PORTID:                           \
92         bitMask = FM_EX_QMI_DEQ_FROM_UNKNOWN_PORTID; break;             \
93     case e_FM_EX_BMI_LIST_RAM_ECC:                                      \
94         bitMask = FM_EX_BMI_LIST_RAM_ECC; break;                        \
95     case e_FM_EX_BMI_PIPELINE_ECC:                                      \
96         bitMask = FM_EX_BMI_PIPELINE_ECC; break;                        \
97     case e_FM_EX_BMI_STATISTICS_RAM_ECC:                                \
98         bitMask = FM_EX_BMI_STATISTICS_RAM_ECC; break;                  \
99     case e_FM_EX_BMI_DISPATCH_RAM_ECC:                                  \
100         bitMask = FM_EX_BMI_DISPATCH_RAM_ECC; break;                    \
101     case e_FM_EX_IRAM_ECC:                                              \
102         bitMask = FM_EX_IRAM_ECC; break;                                \
103     case e_FM_EX_MURAM_ECC:                                             \
104         bitMask = FM_EX_NURAM_ECC; break;                               \
105     default: bitMask = 0;break;}
106 
107 /**************************************************************************//**
108  @Description       defaults
109 *//***************************************************************************/
110 #define DEFAULT_exceptions                  (FM_EX_DMA_BUS_ERROR            |\
111                                             FM_EX_DMA_READ_ECC              |\
112                                             FM_EX_DMA_SYSTEM_WRITE_ECC      |\
113                                             FM_EX_DMA_FM_WRITE_ECC          |\
114                                             FM_EX_FPM_STALL_ON_TASKS        |\
115                                             FM_EX_FPM_SINGLE_ECC            |\
116                                             FM_EX_FPM_DOUBLE_ECC            |\
117                                             FM_EX_QMI_SINGLE_ECC            |\
118                                             FM_EX_QMI_DEQ_FROM_UNKNOWN_PORTID|\
119                                             FM_EX_QMI_DOUBLE_ECC            |\
120                                             FM_EX_BMI_LIST_RAM_ECC          |\
121                                             FM_EX_BMI_PIPELINE_ECC          |\
122                                             FM_EX_BMI_STATISTICS_RAM_ECC    |\
123                                             FM_EX_BMI_DISPATCH_RAM_ECC      |\
124                                             FM_EX_IRAM_ECC                  |\
125                                             FM_EX_NURAM_ECC                 )
126 #define DEFAULT_totalNumOfTasks             (BMI_MAX_NUM_OF_TASKS*3/4)
127 #define DEFAULT_totalFifoSize               (BMI_MAX_FIFO_SIZE*3/4)
128 #define DEFAULT_maxNumOfOpenDmas            (BMI_MAX_NUM_OF_DMAS*3/4)
129 #define DEFAULT_eccEnable                   FALSE
130 #define DEFAULT_dispLimit                   0
131 #define DEFAULT_prsDispTh                   16
132 #define DEFAULT_plcrDispTh                  16
133 #define DEFAULT_kgDispTh                    16
134 #define DEFAULT_bmiDispTh                   16
135 #define DEFAULT_qmiEnqDispTh                16
136 #define DEFAULT_qmiDeqDispTh                16
137 #define DEFAULT_fmCtl1DispTh                16
138 #define DEFAULT_fmCtl2DispTh                16
139 #define DEFAULT_cacheOverride               e_FM_DMA_NO_CACHE_OR
140 #ifdef FM_PEDANTIC_DMA
141 #define DEFAULT_aidOverride                 TRUE
142 #else
143 #define DEFAULT_aidOverride                 FALSE
144 #endif /* FM_PEDANTIC_DMA */
145 #define DEFAULT_aidMode                     e_FM_DMA_AID_OUT_TNUM
146 #define DEFAULT_dmaStopOnBusError           FALSE
147 #define DEFAULT_stopAtBusError              FALSE
148 #define DEFAULT_axiDbgNumOfBeats            1
149 #define DEFAULT_dmaCamNumOfEntries          32
150 #define DEFAULT_dmaCommQLow                 ((DMA_THRESH_MAX_COMMQ+1)/2)
151 #define DEFAULT_dmaCommQHigh                ((DMA_THRESH_MAX_COMMQ+1)*3/4)
152 #define DEFAULT_dmaReadIntBufLow            ((DMA_THRESH_MAX_BUF+1)/2)
153 #define DEFAULT_dmaReadIntBufHigh           ((DMA_THRESH_MAX_BUF+1)*3/4)
154 #define DEFAULT_dmaWriteIntBufLow           ((DMA_THRESH_MAX_BUF+1)/2)
155 #define DEFAULT_dmaWriteIntBufHigh          ((DMA_THRESH_MAX_BUF+1)*3/4)
156 #define DEFAULT_dmaSosEmergency             0
157 #define DEFAULT_dmaDbgCntMode               e_FM_DMA_DBG_NO_CNT
158 #define DEFAULT_catastrophicErr             e_FM_CATASTROPHIC_ERR_STALL_PORT
159 #define DEFAULT_dmaErr                      e_FM_DMA_ERR_CATASTROPHIC
160 #define DEFAULT_resetOnInit                 FALSE
161 #define DEFAULT_haltOnExternalActivation    FALSE   /* do not change! if changed, must be disabled for rev1 ! */
162 #define DEFAULT_haltOnUnrecoverableEccError FALSE   /* do not change! if changed, must be disabled for rev1 ! */
163 #define DEFAULT_externalEccRamsEnable       FALSE
164 #define DEFAULT_VerifyUcode                 FALSE
165 #define DEFAULT_tnumAgingPeriod             0
166 #define DEFAULT_dmaWatchdog                 0 /* disabled */
167 #define DEFAULT_mtu                         9600
168 
169 /**************************************************************************//**
170  @Description       Modules registers offsets
171 *//***************************************************************************/
172 #define FM_MM_MURAM             0x00000000
173 #define FM_MM_BMI               0x00080000
174 #define FM_MM_QMI               0x00080400
175 #define FM_MM_PRS               0x000c7000
176 #define FM_MM_KG                0x000C1000
177 #define FM_MM_DMA               0x000C2000
178 #define FM_MM_FPM               0x000C3000
179 #define FM_MM_PLCR              0x000C0000
180 #define FM_MM_IMEM              0x000C4000
181 
182 /**************************************************************************//**
183  @Description       Interrupt Enable/Mask
184 *//***************************************************************************/
185 
186 /**************************************************************************//**
187  @Description       Memory Mapped Registers
188 *//***************************************************************************/
189 
190 #if defined(__MWERKS__) && !defined(__GNUC__)
191 #pragma pack(push,1)
192 #endif /* defined(__MWERKS__) && ... */
193 #define MEM_MAP_START
194 
195 typedef _Packed struct
196 {
197     volatile uint32_t   fpmtnc;         /**< FPM TNUM Control */
198     volatile uint32_t   fpmpr;          /**< FPM Port_ID FmCtl Association */
199     volatile uint32_t   brkc;           /**< FPM Breakpoint Control */
200     volatile uint32_t   fpmflc;         /**< FPM Flush Control */
201     volatile uint32_t   fpmdis1;        /**< FPM Dispatch Thresholds1 */
202     volatile uint32_t   fpmdis2;        /**< FPM Dispatch Thresholds2  */
203     volatile uint32_t   fmepi;          /**< FM Error Pending Interrupts */
204     volatile uint32_t   fmrie;          /**< FM Error Interrupt Enable */
205     volatile uint32_t   fmfpfcev[4];    /**< FPM FMan-Controller Event 1-4 */
206     volatile uint8_t    res1[16];       /**< reserved */
207     volatile uint32_t   fmfpfcee[4];    /**< PM FMan-Controller Event 1-4 */
208     volatile uint8_t    res2[16];       /**< reserved */
209     volatile uint32_t   fpmtsc1;        /**< FPM TimeStamp Control1 */
210     volatile uint32_t   fpmtsc2;        /**< FPM TimeStamp Control2 */
211     volatile uint32_t   fpmtsp;         /**< FPM Time Stamp */
212     volatile uint32_t   fpmtsf;         /**< FPM Time Stamp Fraction */
213     volatile uint32_t   fmrcr;          /**< FM Rams Control */
214     volatile uint32_t   fpmextc;        /**< FPM External Requests Control */
215     volatile uint32_t   fpmext1;        /**< FPM External Requests Config1 */
216     volatile uint32_t   fpmext2;        /**< FPM External Requests Config2 */
217     volatile uint32_t   fpmdrd[16];     /**< FPM Data_Ram Data 0-15 */
218     volatile uint32_t   fpmdra;         /**< FPM Data Ram Access */
219     volatile uint32_t   fm_ip_rev_1;    /**< FM IP Block Revision 1 */
220     volatile uint32_t   fm_ip_rev_2;    /**< FM IP Block Revision 2 */
221     volatile uint32_t   fmrstc;         /**< FM Reset Command */
222     volatile uint32_t   fmcld;          /**< FM Classifier Debug */
223     volatile uint32_t   fmnpi;          /**< FM Normal Pending Interrupts  */
224     volatile uint32_t   fmfp_exte;      /**< FPM External Requests Enable */
225     volatile uint32_t   fpmem;          /**< FPM Event & Mask */
226     volatile uint32_t   fpmcev[4];      /**< FPM CPU Event 1-4 */
227     volatile uint8_t    res4[16];       /**< reserved */
228     volatile uint32_t   fmfp_ps[0x40];  /**< FPM Port Status */
229     volatile uint8_t    reserved1[0x260];
230     volatile uint32_t   fpmts[128];     /**< 0x400: FPM Task Status */
231 } _PackedType t_FmFpmRegs;
232 
233 #define NUM_OF_DBG_TRAPS    3
234 
235 typedef _Packed struct
236 {
237    volatile uint32_t   fmbm_init;       /**< BMI Initialization */
238    volatile uint32_t   fmbm_cfg1;       /**< BMI Configuration 1 */
239    volatile uint32_t   fmbm_cfg2;       /**< BMI Configuration 2 */
240    volatile uint32_t   reserved[5];
241    volatile uint32_t   fmbm_ievr;       /**< Interrupt Event Register */
242    volatile uint32_t   fmbm_ier;        /**< Interrupt Enable Register */
243    volatile uint32_t   fmbm_ifr;        /**< Interrupt Force Register */
244    volatile uint32_t   reserved1[5];
245    volatile uint32_t   fmbm_arb[8];     /**< BMI Arbitration */
246    volatile uint32_t   reserved2[12];
247    volatile uint32_t   fmbm_dtc[NUM_OF_DBG_TRAPS];      /**< BMI Debug Trap Counter */
248    volatile uint32_t   reserved3;
249    volatile uint32_t   fmbm_dcv[NUM_OF_DBG_TRAPS][4];   /**< BMI Debug Compare Value */
250    volatile uint32_t   fmbm_dcm[NUM_OF_DBG_TRAPS][4];   /**< BMI Debug Compare Mask */
251    volatile uint32_t   fmbm_gde;        /**< BMI Global Debug Enable */
252    volatile uint32_t   fmbm_pp[63];     /**< BMI Port Parameters */
253    volatile uint32_t   reserved4;
254    volatile uint32_t   fmbm_pfs[63];    /**< BMI Port FIFO Size */
255    volatile uint32_t   reserved5;
256    volatile uint32_t   fmbm_ppid[63];   /**< Port Partition ID */
257 } _PackedType t_FmBmiRegs;
258 
259 typedef _Packed struct
260 {
261     volatile uint32_t   fmqm_gc;        /**<  General Configuration Register */
262     volatile uint32_t   Reserved0;
263     volatile uint32_t   fmqm_eie;       /**<  Error Interrupt Event Register */
264     volatile uint32_t   fmqm_eien;      /**<  Error Interrupt Enable Register */
265     volatile uint32_t   fmqm_eif;       /**<  Error Interrupt Force Register */
266     volatile uint32_t   fmqm_ie;        /**<  Interrupt Event Register */
267     volatile uint32_t   fmqm_ien;       /**<  Interrupt Enable Register */
268     volatile uint32_t   fmqm_if;        /**<  Interrupt Force Register */
269     volatile uint32_t   fmqm_gs;        /**<  Global Status Register */
270     volatile uint32_t   fmqm_ts;        /**<  Task Status Register */
271     volatile uint32_t   fmqm_etfc;      /**<  Enqueue Total Frame Counter */
272     volatile uint32_t   fmqm_dtfc;      /**<  Dequeue Total Frame Counter */
273     volatile uint32_t   fmqm_dc0;       /**<  Dequeue Counter 0 */
274     volatile uint32_t   fmqm_dc1;       /**<  Dequeue Counter 1 */
275     volatile uint32_t   fmqm_dc2;       /**<  Dequeue Counter 2 */
276     volatile uint32_t   fmqm_dc3;       /**<  Dequeue Counter 3 */
277     volatile uint32_t   fmqm_dfdc;      /**<  Dequeue FQID from Default Counter */
278     volatile uint32_t   fmqm_dfcc;      /**<  Dequeue FQID from Context Counter */
279     volatile uint32_t   fmqm_dffc;      /**<  Dequeue FQID from FD Counter */
280     volatile uint32_t   fmqm_dcc;       /**<  Dequeue Confirm Counter */
281     volatile uint32_t   Reserved1a[7];
282     volatile uint32_t   fmqm_tapc;      /**<  Tnum Aging Period Control */
283     volatile uint32_t   fmqm_dmcvc;     /**<  Dequeue MAC Command Valid Counter */
284     volatile uint32_t   fmqm_difdcc;    /**<  Dequeue Invalid FD Command Counter */
285     volatile uint32_t   fmqm_da1v;      /**<  Dequeue A1 Valid Counter */
286     volatile uint32_t   Reserved1b;
287     volatile uint32_t   fmqm_dtc;       /**<  0x0080 Debug Trap Counter */
288     volatile uint32_t   fmqm_efddd;     /**<  0x0084 Enqueue Frame Descriptor Dynamic Debug */
289     volatile uint32_t   Reserved3[2];
290     _Packed struct {
291         volatile uint32_t   fmqm_dtcfg1;    /**<  0x0090 Debug Trap Configuration 1 Register */
292         volatile uint32_t   fmqm_dtval1;    /**<  Debug Trap Value 1 Register */
293         volatile uint32_t   fmqm_dtm1;      /**<  Debug Trap Mask 1 Register */
294         volatile uint32_t   fmqm_dtc1;      /**<  Debug Trap Counter 1 Register */
295         volatile uint32_t   fmqm_dtcfg2;    /**<  Debug Trap Configuration 2 Register */
296         volatile uint32_t   fmqm_dtval2;    /**<  Debug Trap Value 2 Register */
297         volatile uint32_t   fmqm_dtm2;      /**<  Debug Trap Mask 2 Register */
298         volatile uint32_t   Reserved1;
299     } _PackedType dbgTraps[NUM_OF_DBG_TRAPS];
300 } _PackedType t_FmQmiRegs;
301 
302 typedef _Packed struct
303 {
304     volatile uint32_t   fmdmsr;         /**<    FM DMA status register 0x04 */
305     volatile uint32_t   fmdmmr;         /**<    FM DMA mode register 0x08 */
306     volatile uint32_t   fmdmtr;         /**<    FM DMA bus threshold register 0x0c */
307     volatile uint32_t   fmdmhy;         /**<    FM DMA bus hysteresis register 0x10 */
308     volatile uint32_t   fmdmsetr;       /**<    FM DMA SOS emergency Threshold Register 0x14 */
309     volatile uint32_t   fmdmtah;        /**<    FM DMA transfer bus address high register 0x18  */
310     volatile uint32_t   fmdmtal;        /**<    FM DMA transfer bus address low register 0x1C  */
311     volatile uint32_t   fmdmtcid;       /**<    FM DMA transfer bus communication ID register 0x20  */
312     volatile uint32_t   fmdmra;         /**<    FM DMA bus internal ram address register 0x24  */
313     volatile uint32_t   fmdmrd;         /**<    FM DMA bus internal ram data register 0x28  */
314     volatile uint32_t   fmdmwcr;        /**<    FM DMA CAM watchdog counter value 0x2C  */
315     volatile uint32_t   fmdmebcr;       /**<    FM DMA CAM base in MURAM register 0x30  */
316     volatile uint32_t   fmdmccqdr;      /**<    FM DMA CAM and CMD Queue Debug register 0x34  */
317     volatile uint32_t   fmdmccqvr1;     /**<    FM DMA CAM and CMD Queue Value register #1 0x38  */
318     volatile uint32_t   fmdmccqvr2;     /**<    FM DMA CAM and CMD Queue Value register #2 0x3C  */
319     volatile uint32_t   fmdmcqvr3;      /**<    FM DMA CMD Queue Value register #3 0x40  */
320     volatile uint32_t   fmdmcqvr4;      /**<    FM DMA CMD Queue Value register #4 0x44  */
321     volatile uint32_t   fmdmcqvr5;      /**<    FM DMA CMD Queue Value register #5 0x48  */
322     volatile uint32_t   fmdmsefrc;      /**<    FM DMA Semaphore Entry Full Reject Counter 0x50  */
323     volatile uint32_t   fmdmsqfrc;      /**<    FM DMA Semaphore Queue Full Reject Counter 0x54  */
324     volatile uint32_t   fmdmssrc;       /**<    FM DMA Semaphore SYNC Reject Counter 0x54  */
325     volatile uint32_t   fmdmdcr;        /**<    FM DMA Debug Counter */
326     volatile uint32_t   fmdmemsr;       /**<    FM DMA Emrgency Smoother Register */
327     volatile uint32_t   reserved;
328     volatile uint32_t   fmdmplr[FM_SIZE_OF_LIODN_TABLE/2];
329                                         /**<    FM DMA PID-LIODN # register  */
330 } _PackedType t_FmDmaRegs;
331 
332 typedef _Packed struct
333 {
334     volatile uint32_t   iadd;           /**<    FM IRAM instruction address register */
335     volatile uint32_t   idata;          /**<    FM IRAM instruction data register */
336     volatile uint32_t   itcfg;          /**<    FM IRAM timing config register */
337     volatile uint32_t   iready;         /**<    FM IRAM ready register */
338     volatile uint8_t    res[0x80000-0x10];
339 } _PackedType t_FMIramRegs;
340 
341 #define MEM_MAP_END
342 #if defined(__MWERKS__) && !defined(__GNUC__)
343 #pragma pack(pop)
344 #endif /* defined(__MWERKS__) && ... */
345 
346 
347 /**************************************************************************//**
348  @Description       General defines
349 *//***************************************************************************/
350 
351 #define FM_DEBUG_STATUS_REGISTER_OFFSET     0x000d1084UL
352 #define FM_UCODE_DEBUG_INSTRUCTION          0x6ffff805UL
353 
354 
355 /**************************************************************************//**
356  @Description       DMA definitions
357 *//***************************************************************************/
358 
359 /* masks */
360 #define DMA_MODE_AID_OR                     0x20000000
361 #define DMA_MODE_SBER                       0x10000000
362 #define DMA_MODE_BER                        0x00200000
363 #define DMA_MODE_ECC                        0x00000020
364 #define DMA_MODE_PRIVILEGE_PROT             0x00001000
365 #define DMA_MODE_SECURE_PROT                0x00000800
366 #define DMA_MODE_EMERGENCY_READ             0x00080000
367 #define DMA_MODE_EMERGENCY_WRITE            0x00040000
368 
369 #define DMA_TRANSFER_PORTID_MASK            0xFF000000
370 #define DMA_TRANSFER_TNUM_MASK              0x00FF0000
371 #define DMA_TRANSFER_LIODN_MASK             0x00000FFF
372 
373 #define DMA_HIGH_LIODN_MASK                 0x0FFF0000
374 #define DMA_LOW_LIODN_MASK                  0x00000FFF
375 
376 #define DMA_STATUS_CMD_QUEUE_NOT_EMPTY      0x10000000
377 #define DMA_STATUS_BUS_ERR                  0x08000000
378 #define DMA_STATUS_READ_ECC                 0x04000000
379 #define DMA_STATUS_SYSTEM_WRITE_ECC         0x02000000
380 #define DMA_STATUS_FM_WRITE_ECC             0x01000000
381 #define DMA_STATUS_SYSTEM_DPEXT_ECC         0x00800000
382 #define DMA_STATUS_FM_DPEXT_ECC             0x00400000
383 #define DMA_STATUS_SYSTEM_DPDAT_ECC         0x00200000
384 #define DMA_STATUS_FM_DPDAT_ECC             0x00100000
385 #define DMA_STATUS_FM_SPDAT_ECC             0x00080000
386 
387 #define FM_LIODN_BASE_MASK                  0x00000FFF
388 
389 /* shifts */
390 #define DMA_MODE_CACHE_OR_SHIFT             30
391 #define DMA_MODE_BUS_PRI_SHIFT              16
392 #define DMA_MODE_AXI_DBG_SHIFT              24
393 #define DMA_MODE_CEN_SHIFT                  13
394 #define DMA_MODE_BUS_PROT_SHIFT             10
395 #define DMA_MODE_DBG_SHIFT                  7
396 #define DMA_MODE_EMERGENCY_LEVEL_SHIFT      6
397 #define DMA_MODE_AID_MODE_SHIFT             4
398 #define DMA_MODE_MAX_AXI_DBG_NUM_OF_BEATS   16
399 #define DMA_MODE_MAX_CAM_NUM_OF_ENTRIES     32
400 
401 #define DMA_THRESH_COMMQ_SHIFT              24
402 #define DMA_THRESH_READ_INT_BUF_SHIFT       16
403 
404 #define DMA_LIODN_SHIFT                     16
405 
406 #define DMA_TRANSFER_PORTID_SHIFT           24
407 #define DMA_TRANSFER_TNUM_SHIFT             16
408 
409 /* sizes */
410 #define DMA_MAX_WATCHDOG                    0xffffffff
411 
412 /* others */
413 #define DMA_CAM_SIZEOF_ENTRY                0x40
414 #define DMA_CAM_ALIGN                       0x1000
415 #define DMA_CAM_UNITS                       8
416 
417 
418 /**************************************************************************//**
419  @Description       FPM defines
420 *//***************************************************************************/
421 
422 /* masks */
423 #define FPM_EV_MASK_DOUBLE_ECC          0x80000000
424 #define FPM_EV_MASK_STALL               0x40000000
425 #define FPM_EV_MASK_SINGLE_ECC          0x20000000
426 #define FPM_EV_MASK_RELEASE_FM          0x00010000
427 #define FPM_EV_MASK_DOUBLE_ECC_EN       0x00008000
428 #define FPM_EV_MASK_STALL_EN            0x00004000
429 #define FPM_EV_MASK_SINGLE_ECC_EN       0x00002000
430 #define FPM_EV_MASK_EXTERNAL_HALT       0x00000008
431 #define FPM_EV_MASK_ECC_ERR_HALT        0x00000004
432 
433 #define FPM_RAM_CTL_RAMS_ECC_EN         0x80000000
434 #define FPM_RAM_CTL_IRAM_ECC_EN         0x40000000
435 #define FPM_RAM_CTL_MURAM_ECC           0x00008000
436 #define FPM_RAM_CTL_IRAM_ECC            0x00004000
437 #define FPM_RAM_CTL_MURAM_TEST_ECC      0x20000000
438 #define FPM_RAM_CTL_IRAM_TEST_ECC       0x10000000
439 #define FPM_RAM_CTL_RAMS_ECC_EN_SRC_SEL 0x08000000
440 
441 #define FPM_IRAM_ECC_ERR_EX_EN          0x00020000
442 #define FPM_MURAM_ECC_ERR_EX_EN         0x00040000
443 
444 #define FPM_REV1_MAJOR_MASK             0x0000FF00
445 #define FPM_REV1_MINOR_MASK             0x000000FF
446 
447 #define FPM_REV2_INTEG_MASK             0x00FF0000
448 #define FPM_REV2_ERR_MASK               0x0000FF00
449 #define FPM_REV2_CFG_MASK               0x000000FF
450 
451 #define FPM_TS_FRACTION_MASK            0x0000FFFF
452 #define FPM_TS_CTL_EN                   0x80000000
453 
454 #define FPM_PORT_FM_CTL1                0x00000001
455 #define FPM_PORT_FM_CTL2                0x00000002
456 #define FPM_PRC_REALSE_STALLED          0x00800000
457 
458 #define FPM_PS_STALLED                  0x00800000
459 #define FPM_PS_FM_CTL1_SEL              0x80000000
460 #define FPM_PS_FM_CTL2_SEL              0x40000000
461 #define FPM_PS_FM_CTL_SEL_MASK          (FPM_PS_FM_CTL1_SEL | FPM_PS_FM_CTL2_SEL)
462 
463 #define FPM_RSTC_FM_RESET               0x80000000
464 #define FPM_RSTC_10G0_RESET             0x04000000
465 #define FPM_RSTC_1G0_RESET              0x40000000
466 #define FPM_RSTC_1G1_RESET              0x20000000
467 #define FPM_RSTC_1G2_RESET              0x10000000
468 #define FPM_RSTC_1G3_RESET              0x08000000
469 #define FPM_RSTC_1G4_RESET              0x02000000
470 
471 
472 /* shifts */
473 #define FPM_DISP_LIMIT_SHIFT            24
474 
475 #define FPM_THR1_PRS_SHIFT              24
476 #define FPM_THR1_KG_SHIFT               16
477 #define FPM_THR1_PLCR_SHIFT             8
478 #define FPM_THR1_BMI_SHIFT              0
479 
480 #define FPM_THR2_QMI_ENQ_SHIFT          24
481 #define FPM_THR2_QMI_DEQ_SHIFT          0
482 #define FPM_THR2_FM_CTL1_SHIFT          16
483 #define FPM_THR2_FM_CTL2_SHIFT          8
484 
485 #define FPM_EV_MASK_CAT_ERR_SHIFT       1
486 #define FPM_EV_MASK_DMA_ERR_SHIFT       0
487 
488 #define FPM_REV1_MAJOR_SHIFT            8
489 #define FPM_REV1_MINOR_SHIFT            0
490 
491 #define FPM_REV2_INTEG_SHIFT            16
492 #define FPM_REV2_ERR_SHIFT              8
493 #define FPM_REV2_CFG_SHIFT              0
494 
495 #define FPM_TS_INT_SHIFT                16
496 
497 #define FPM_PORT_FM_CTL_PORTID_SHIFT      24
498 
499 #define FPM_PS_FM_CTL_SEL_SHIFT           30
500 #define FPM_PRC_ORA_FM_CTL_SEL_SHIFT      16
501 
502 /* Interrupts defines */
503 #define FPM_EVENT_FM_CTL_0                0x00008000
504 #define FPM_EVENT_FM_CTL                  0x0000FF00
505 #define FPM_EVENT_FM_CTL_BRK              0x00000080
506 
507 /* others */
508 #define FPM_MAX_DISP_LIMIT              31
509 
510 /**************************************************************************//**
511  @Description       BMI defines
512 *//***************************************************************************/
513 /* masks */
514 #define BMI_INIT_START                      0x80000000
515 #define BMI_ERR_INTR_EN_PIPELINE_ECC        0x80000000
516 #define BMI_ERR_INTR_EN_LIST_RAM_ECC        0x40000000
517 #define BMI_ERR_INTR_EN_STATISTICS_RAM_ECC  0x20000000
518 #define BMI_ERR_INTR_EN_DISPATCH_RAM_ECC    0x10000000
519 #define BMI_NUM_OF_TASKS_MASK               0x3F000000
520 #define BMI_NUM_OF_EXTRA_TASKS_MASK         0x000F0000
521 #define BMI_NUM_OF_DMAS_MASK                0x00000F00
522 #define BMI_NUM_OF_EXTRA_DMAS_MASK          0x0000000F
523 #define BMI_FIFO_SIZE_MASK                  0x000003FF
524 #define BMI_EXTRA_FIFO_SIZE_MASK            0x03FF0000
525 #define BMI_CFG2_DMAS_MASK                  0x0000003F
526 
527 /* shifts */
528 #define BMI_CFG2_TASKS_SHIFT            16
529 #define BMI_CFG2_DMAS_SHIFT             0
530 #define BMI_CFG1_FIFO_SIZE_SHIFT        16
531 #define BMI_FIFO_SIZE_SHIFT             0
532 #define BMI_EXTRA_FIFO_SIZE_SHIFT       16
533 #define BMI_NUM_OF_TASKS_SHIFT          24
534 #define BMI_EXTRA_NUM_OF_TASKS_SHIFT    16
535 #define BMI_NUM_OF_DMAS_SHIFT           8
536 #define BMI_EXTRA_NUM_OF_DMAS_SHIFT     0
537 
538 /* others */
539 #define BMI_FIFO_ALIGN                  0x100
540 
541 
542 /**************************************************************************//**
543  @Description       QMI defines
544 *//***************************************************************************/
545 /* masks */
546 #define QMI_CFG_ENQ_EN                  0x80000000
547 #define QMI_CFG_DEQ_EN                  0x40000000
548 #define QMI_CFG_EN_COUNTERS             0x10000000
549 #define QMI_CFG_SOFT_RESET              0x01000000
550 #define QMI_CFG_DEQ_MASK                0x0000003F
551 #define QMI_CFG_ENQ_MASK                0x00003F00
552 
553 #define QMI_ERR_INTR_EN_DOUBLE_ECC      0x80000000
554 #define QMI_ERR_INTR_EN_DEQ_FROM_DEF    0x40000000
555 #define QMI_INTR_EN_SINGLE_ECC          0x80000000
556 
557 /* shifts */
558 #define QMI_CFG_ENQ_SHIFT               8
559 #define QMI_TAPC_TAP                    22
560 
561 
562 /**************************************************************************//**
563  @Description       IRAM defines
564 *//***************************************************************************/
565 /* masks */
566 #define IRAM_IADD_AIE                   0x80000000
567 #define IRAM_READY                      0x80000000
568 
569 typedef struct {
570     void        (*f_Isr) (t_Handle h_Arg, uint32_t event);
571     t_Handle    h_SrcHandle;
572 } t_FmanCtrlIntrSrc;
573 
574 
575 typedef struct
576 {
577  /*   uint8_t                     numOfPartitions; */
578     bool                        resetOnInit;
579 #ifdef FM_PARTITION_ARRAY
580     uint16_t                    liodnBasePerPort[FM_SIZE_OF_LIODN_TABLE];
581 #endif
582     bool                        enCounters;
583     t_FmThresholds              thresholds;
584     e_FmDmaCacheOverride        dmaCacheOverride;
585     e_FmDmaAidMode              dmaAidMode;
586     bool                        dmaAidOverride;
587     uint8_t                     dmaAxiDbgNumOfBeats;
588     uint8_t                     dmaCamNumOfEntries;
589     uint32_t                    dmaWatchdog;
590     t_FmDmaThresholds           dmaCommQThresholds;
591     t_FmDmaThresholds           dmaWriteBufThresholds;
592     t_FmDmaThresholds           dmaReadBufThresholds;
593     uint32_t                    dmaSosEmergency;
594     e_FmDmaDbgCntMode           dmaDbgCntMode;
595     bool                        dmaStopOnBusError;
596     bool                        dmaEnEmergency;
597     t_FmDmaEmergency            dmaEmergency;
598     bool                        dmaEnEmergencySmoother;
599     uint32_t                    dmaEmergencySwitchCounter;
600     bool                        haltOnExternalActivation;
601     bool                        haltOnUnrecoverableEccError;
602     e_FmCatastrophicErr         catastrophicErr;
603     e_FmDmaErr                  dmaErr;
604     bool                        enMuramTestMode;
605     bool                        enIramTestMode;
606     bool                        externalEccRamsEnable;
607     uint16_t                    tnumAgingPeriod;
608     t_FmPcdFirmwareParams       firmware;
609     bool                        fwVerify;
610 } t_FmDriverParam;
611 
612 typedef void (t_FmanCtrlIsr)( t_Handle h_Fm, uint32_t event);
613 
614 typedef struct
615 {
616 /***************************/
617 /* Master/Guest parameters */
618 /***************************/
619     uint8_t                     fmId;
620     e_FmPortType                portsTypes[FM_MAX_NUM_OF_HW_PORT_IDS];
621     uint16_t                    fmClkFreq;
622 /**************************/
623 /* Master Only parameters */
624 /**************************/
625     bool                        enabledTimeStamp;
626     uint8_t                     count1MicroBit;
627     uint8_t                     totalNumOfTasks;
628     uint32_t                    totalFifoSize;
629     uint8_t                     maxNumOfOpenDmas;
630     uint8_t                     accumulatedNumOfTasks;
631     uint32_t                    accumulatedFifoSize;
632     uint8_t                     accumulatedNumOfOpenDmas;
633 #ifdef FM_QMI_DEQ_OPTIONS_SUPPORT
634     uint8_t                     accumulatedNumOfDeqTnums;
635 #endif /* FM_QMI_DEQ_OPTIONS_SUPPORT */
636 #ifdef FM_LOW_END_RESTRICTION
637     bool                        lowEndRestriction;
638 #endif /* FM_LOW_END_RESTRICTION */
639     uint32_t                    exceptions;
640     int                         irq;
641     int                         errIrq;
642     bool                        ramsEccEnable;
643     bool                        explicitEnable;
644     bool                        internalCall;
645     uint8_t                     ramsEccOwners;
646     uint32_t                    extraFifoPoolSize;
647     uint8_t                     extraTasksPoolSize;
648     uint8_t                     extraOpenDmasPoolSize;
649 #if defined(FM_MAX_NUM_OF_10G_MACS) && (FM_MAX_NUM_OF_10G_MACS)
650     uint16_t                    macMaxFrameLengths10G[FM_MAX_NUM_OF_10G_MACS];
651 #endif /* defined(FM_MAX_NUM_OF_10G_MACS) && (FM_MAX_NUM_OF_10G_MACS) */
652     uint16_t                    macMaxFrameLengths1G[FM_MAX_NUM_OF_1G_MACS];
653 } t_FmStateStruct;
654 
655 typedef struct
656 {
657 /***************************/
658 /* Master/Guest parameters */
659 /***************************/
660 /* locals for recovery */
661     uintptr_t                   baseAddr;
662 
663 /* un-needed for recovery */
664     t_Handle                    h_Pcd;
665     char                        fmModuleName[MODULE_NAME_SIZE];
666     char                        fmIpcHandlerModuleName[FM_MAX_NUM_OF_GUESTS][MODULE_NAME_SIZE];
667     t_Handle                    h_IpcSessions[FM_MAX_NUM_OF_GUESTS];
668     t_FmIntrSrc                 intrMng[e_FM_EV_DUMMY_LAST];    /* FM exceptions user callback */
669     uint8_t                     guestId;
670 /**************************/
671 /* Master Only parameters */
672 /**************************/
673 /* locals for recovery */
674     t_FmFpmRegs                 *p_FmFpmRegs;
675     t_FmBmiRegs                 *p_FmBmiRegs;
676     t_FmQmiRegs                 *p_FmQmiRegs;
677     t_FmDmaRegs                 *p_FmDmaRegs;
678     t_FmExceptionsCallback      *f_Exception;
679     t_FmBusErrorCallback        *f_BusError;
680     t_Handle                    h_App;                          /* Application handle */
681     t_Handle                    h_Spinlock;
682     bool                        recoveryMode;
683     t_FmStateStruct             *p_FmStateStruct;
684 
685 /* un-needed for recovery */
686     t_FmDriverParam             *p_FmDriverParam;
687     t_Handle                    h_FmMuram;
688     uint64_t                    fmMuramPhysBaseAddr;
689     bool                        independentMode;
690     bool                        hcPortInitialized;
691     uintptr_t                   camBaseAddr;                    /* save for freeing */
692     uintptr_t                   resAddr;
693     uintptr_t                   fifoBaseAddr;                   /* save for freeing */
694     t_FmanCtrlIntrSrc           fmanCtrlIntr[FM_NUM_OF_FMAN_CTRL_EVENT_REGS];    /* FM exceptions user callback */
695     bool                        usedEventRegs[FM_NUM_OF_FMAN_CTRL_EVENT_REGS];
696 } t_Fm;
697 
698 
699 #endif /* __FM_H */
700