Linux网卡驱动--BCM53101

P1020 是powerpc的一款cpu

关于BCM53101和P1020
连接示意图如下

硬件上使用eTSEC3通过RGMII与BCM53101的GMAC port相连,这个连接方式的重点主要是mac到mac的连接
P1020 eTSEC简图

                                                                                BCM53101简图

一、管理通道

    像图?中的基本的mac-phy连接方式,通常需要知道对方phy的地址,(这个地址可通过设置phy芯片的,一般存储在PHY芯片的寄存器里)

我认为的mac-mac的连接方式只是在mac与phy中间多加了一个mac而已,

管理通道硬件上是通过eTSEC上的MDC MDIO连接的

P1020 dts的设置如下

系统上使用eth2作为上层的虚拟网卡
clk-handle = &etsec3_clk
此处并没有指定使用的哪个phy,因为采用的是mac 到 mac的链路方式
连接方式为RGMII,指定为fixed-link(感觉这个地方指定伪phy也可以)

采用的是eTSEC3,其对应的MDIO地址为0x26000

二、数据通道
数据部分分为两侧,一侧是从eth2到eTSEC3—>RGMII

1.默认配置

设置8口为带内管理端口,不设置时,环回的报文不会进入这个端口
//set IMP port enable
memset(mdio_val, 0, sizeof(mdio_val));
mdio_val[0] = 0x80;
bcm53101_write(2, 0x0, mdio_val);

    //set IMP port receive uni/multi/broad cast enable 
    memset(mdio_val, 0, sizeof(mdio_val));
    mdio_val[0] = 0x1c;
    bcm53101_write(0, 0x08, mdio_val);

    //disable broad header for IMP port
    memset(mdio_val, 0, sizeof(mdio_val));
    mdio_val[0] = 0x0;
    bcm53101_write(2, 0x03, mdio_val);

不然IMP口会根据转发规则丢弃
//set Switch Mode forwarding enable and managed mode
memset(mdio_val, 0, sizeof(mdio_val));
mdio_val[0] = 0x3;
bcm53101_write(0, 0x0b, mdio_val);

不然IMP口不会up
//set IMP Port State 1000M duplex and Link pass
memset(mdio_val, 0, sizeof(mdio_val));
mdio_val[0] = 0x8b;
bcm53101_write(0, 0x0e, mdio_val);

使CPU和53101 RGMII delay一致,不然导致报文fcs校验错误
//set IMP RGMII RX/TX clock delay enable
memset(mdio_val, 0, sizeof(mdio_val));
mdio_val[0] = 0x3;
bcm53101_write(0, 0x60, mdio_val);

你可能感兴趣的:(Linux网卡驱动--BCM53101)