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