参考手册:T1040 QorIQ Data Path Acceleration Architecture (DPAA) Reference Manual
MAC/BMI/QMI寄存器组成都是由下面3个部分组成的
The full register address of any DPAA register consists of all of the following:
• CCSR window base address, specified in CCSRBAR (default address 0_FE00_0000h)
• Block base address
• The specific register’s offset within that block
MAC/BMI/QMI寄存器都是FMan memory map的一部分。
针对MAC而言,每个网口,对应不同的 基地址 ,下面第一个红框,是访问MAC寄存器要用哪个到的,第二个红框的port id 在访问 QMI/BMI 寄存器的时候会用到。
从下面的Map 可以看出来,QMI 和 BMI 的基地址是一样的,就是offset 不一样
1、MAC 寄存器
MAC1 , 0xffe000000 + 0x4e0000 + offset = 0xffe4e0000 + offset
MAC2 , 0xffe000000 + 0x4e0000 + offset = 0xffe4e2000 + offset
MAC3 , 0xffe000000 + 0x4e0000 + offset = 0xffe4e4000 + offset
MAC4 , 0xffe000000 + 0x4e0000 + offset = 0xffe4e6000 + offset
MAC5 , 0xffe000000 + 0x4e0000 + offset = 0xffe4e8000 + offset
然后参考手册中 6.4.2 mEMAC Detailed Memory Map ,
offset 0x100开始是Rx Statistics Counter Registers;
offset 0x200开始是Tx Statistics Counter Registers。
比如我想看下 RX ERR 相关的统计
如果符合下面的情况,都会在这个寄存器中累积,0x13c 是高32位,0x138是 低32位
6.4.3.2.8 Receive Frame Error Counter Register (RERRn)
Incremented for each frame received with an error (except for undersized/fragment frame) :
• FIFO overflow error
• CRC error
• Payload length error
• Jabber and oversized error
• Alignment error (if supported)
• Reception of PHY/PCS error indication (0xFE, not a code error)
MAC1:
# devmem 0XFFE4E0138 32
0x00000000
# devmem 0XFFE4E013c 32
0x00000000
MAC2:
11个包
# devmem 0XFFE4E213c 32
0x00000000
# devmem 0XFFE4E2138 32
0x0000000B
同样的 TX 也有一个相关的统计
6.4.3.2.34 Transmit Frame Error Counter Register (TERRn)
Incremented for each frame transmitted with an error:
• FIFO overflow error
• FIFO underflow error
• memory double ECC errors
• late-collision or excessive collisions (half-duplex only)
MAC1:
# devmem 0XFFE4E023C 32
0x00000000
# devmem 0XFFE4E0238 32
0x00000000
MAC2:
# devmem 0XFFE4E2238 32
0x00000000
# devmem 0XFFE4E223c 32
0x00000000
2、BMI/QMI 寄存器
BMI/QMI rx port寄存器, 不同的MAC 对应rx_port_id 不一样,见上面的图。
0xffe000000 + 0x400000 + 0x80000 + 0x01000* rx_port_id + offset
BMI/QMI tx port寄存器, 不同的MAC 对应tx_port_id 不一样,见上面的图。
0xffe000000 + 0x400000 + 0x80000 + 0x01000* tx_port_id + offset
BMI Rx port寄存器请参考手册章节BMI Rx Port Registers部分,0x200开始是一些统计。
BMI Tx port寄存器请参考手册章节 BMI Tx Port Registers部分,0x200开始是一些统计。
QMI Rx port寄存器请参考手册章节 QMI Rx Port Registers部分,0x41c和0x420是一些统计。
QMI Tx port寄存器请参考手册章节 QMI Tx Port Registers部分,0x41c开始是一些统计。
3、检测脚本
echo "T1042 DPAA Frame Error Check from register"
echo ""
echo "Receive Frame Error Counter Check!"
echo ""
echo "[SGMII][MAC1] High 32bit: `devmem 0XFFE4E013c 32`"
echo "[SGMII][MAC1] Low 32bit: `devmem 0XFFE4E0138 32`"
echo "[SGMII][MAC2] High 32bit: `devmem 0XFFE4E213c 32`"
echo "[SGMII][MAC2] Low 32bit: `devmem 0XFFE4E2138 32`"
echo "[RGMII][MAC4] High 32bit: `devmem 0XFFE4E613c 32`"
echo "[RGMII][MAC4] Low 32bit: `devmem 0XFFE4E6138 32`"
echo "[RGMII][MAC5] High 32bit: `devmem 0XFFE4E813c 32`"
echo "[RGMII][MAC5] Low 32bit: `devmem 0XFFE4E8138 32`"
echo ""
echo "Transmit Frame Error Counter Check!"
echo ""
echo "[SGMII][MAC1] High 32bit: `devmem 0XFFE4E023c 32`"
echo "[SGMII][MAC1] Low 32bit: `devmem 0XFFE4E0238 32`"
echo "[SGMII][MAC2] High 32bit: `devmem 0XFFE4E223c 32`"
echo "[SGMII][MAC2] Low 32bit: `devmem 0XFFE4E2238 32`"
echo "[RGMII][MAC4] High 32bit: `devmem 0XFFE4E623c 32`"
echo "[RGMII][MAC4] Low 32bit: `devmem 0XFFE4E6238 32`"
echo "[RGMII][MAC5] High 32bit: `devmem 0XFFE4E823c 32`"
echo "[RGMII][MAC5] Low 32bit: `devmem 0XFFE4E8238 32`"