ethernet
前言
S100芯片提供多个标准千兆/万兆以太网控制器, 支持传统的以太网报文收发, PTP/TSN 时间敏感性网络, 以及 EtherCAT 主站等特性。
S600芯片提供多个标准千兆/万兆以太网控制器, 支持传统的以太网报文收发, PTP/TSN 时间敏感性网络, 以及 EtherCAT 主站等特性。
控制器内置硬件多队列, MTL 二层传输层, DMA 引擎等。以实现上述各种场景的报文收发。
本文主要包括网卡使用指南, 开发板 Bringup, 关键特性描述等。
名词解释
| 缩略语 | 英文全名 | 中文解释 |
|---|---|---|
| PTP | Precision Time Protocol | 精确时钟协议 |
| PHC | PTP Hardware Clock | PTP 时钟 |
| TSN | Time-Sensitive Networking | 时间敏感网络 |
| CBS | Credit-Based Shaper | 基于信用的整形器机制 |
| EST | Enhancements to Scheduled Traffic | 增强型整形机制 |
| FPE | Frame Preemption | 帧抢占 |
| tc | traffic control | 流量控制 |
网卡特性介绍
| 特性 | 解释 | S100 |
|---|---|---|
| 配置 | 网口数量配置 | 双网口 |
| 接口 | mac--phy 接口 | 支持 SGMII |
| PPS | 秒脉冲, pps out/in | ✅ |
| TSO | TCP 分段卸载 | ✅ |
| 多队列 | 网卡多队列功能 | ✅ |
| AVB/TSN | 时间敏感性网络 | ✅ |
| C22/C45 | MDIO PHY 数据协议 | ✅ |
| 特性 | 解释 | S600 |
|---|---|---|
| 配置 | 网口数量配置 | 3x gmac + 3x xgmac 其中前2个 gmac 和 pcie 复用 phy |
| 接口 | mac--phy 接口 | 支持 SGMII/USXGMII |
| PPS | 秒脉冲, pps out/in | ✅ |
| TSO | TCP 分段卸载 | ✅ |
| 多队列 | 网卡多队列功能 | ✅ |
| AVB/TSN | 时间敏感性网络 | ✅ |
| C22/C45 | MDIO PHY 数据协议 | ✅ |
网络配置
U-Boot
- 配置 IP
setenv ipaddr x.x.x.x
setenv gatewayip x.x.x.x
setenv netmask x.x.x.x
- 配置 VLAN
setenv vlan xx
- 配置 MAC 地址
setenv ethaddr xx:xx:xx:xx:xx:xx //设置eth mac地址
env del -f ethaddr //删除mac地址
- 切换当前使用的 eth
setenv ethact eth0
setenv ethact eth1
# 如果U-Boot支持双网卡可以切换成功。单网卡切换无效。
Linux/Ubuntu
注意
- 建议使用 Network Management, 即 Ubuntu 桌面进行网卡配置。
- 下述手动通过 ip, ethtool 等命令配置为次选方案。可自行结合 Ubuntu 版本以及网络资料判断是否生效。
- 配置 IP
ip addr add 192.168.1.10/24 dev eth0.10 //推荐
或者
ifconfig eth0.10 192.168.1.10 netmask 255.255.255.0
- 配置 VLAN
ip link add link eth0 name eth0.10 type vlan id 10 //添加vlan id 10
ip link set eth0.10 type vlan egress 0:5 1:5 2:5 3:5 4:5 5:5 6:5 7:5 //配置vlan priority 5
软件介绍
代码位置
- U-Boot ETH 代码位置
drivers/net/hobot_super_gmac.c
drivers/net/hobot_super_xpcs.c
drivers/net/hobot_super_xgmac.c
drivers/net/hobot_s600_xpcs.c
- Kernel ETH 代码位置
hobot-drivers/ethernet/hobot/hobot_eth_super_main.c
hobot-drivers/ethernet/hobot/hobot_eth_super_mdio.c
hobot-drivers/ethernet/hobot/hobot_eth_super_ptp.c
hobot-drivers/ethernet/hobot/hobot_eth_super_tc.c
hobot-drivers/ethernet/hobot/core/...
hobot-drivers/ethernet/hobot/dma/...
网络驱动开发
U-Boot ETH 开发
硬件连接
- 参考 S100设计原理图
- 参考 S600设计原理图
设备树配置
// 配置hsis mode以及参考时钟选择, 如combo phy的复用情况, 参考时钟的来源等。
hsis0: hsis0 {
status = "okay";
compatible = "hobot,super-hsis";
hsi-mode = <4>; /* 4:pcie x2 + gmac0/1; 8:pcie0 x1 + pcie1 x1 + GMAC0/1; */
refclk-mode = <0>; /* 0:internal ref clock; 1:external ref clock; */
#address-cells = <2>;
#size-cells = <2>;
ranges;
/*hsis reg, XPCS0, XPCS1, ETH phy, PCIE phy*/
reg = <0x0 0x33000000 0x0 0x10000>,
<0x0 0x33200000 0x0 0x80000>,
<0x0 0x33280000 0x0 0x80000>,
<0x0 0x330e0000 0x0 0x10000>,
<0x0 0x330d0000 0x0 0x10000>;
};
// 配置hsis mode以及参考时钟选择, 如combo phy的复用情况, 参考时钟的来源, 以及phy眼图信号相关参数。
hsis0: hsis0 {
status = "okay";
compatible = "hobot,super-hsis";
hsi-mode = <4>;
refclk-mode = <0>;/* 0:internal; 1:external; */
xpcs-speed = <0 0 0 5000 10000 10000>; /*gmac0, gmac1, gmac2, xgmac0, xgmac1, xgmac2*/
hobot-txeq = <0 0 0 1 2 4>; /* gmac0/1/2 xgmac0/1/2 tx equalization control*/
hobot-vboost = <5 5 5 5 5 5>; /*gmac0/1/2 xgmac0/1/2*/
#address-cells = <2>;
#size-cells = <2>;
ranges;
/*hsis reg, XPCS0, XPCS1, ETH phy, PCIE phy, XPCS2, XPCS3,XPCS4, XPCS5*/
reg = <0x0 0x33000000 0x0 0x10000>,
<0x0 0x33200000 0x0 0x80000>,
<0x0 0x33280000 0x0 0x80000>,
<0x0 0x330e0000 0x0 0x10000>,
<0x0 0x330d0000 0x0 0x10000>,
<0x0 0x33300000 0x0 0x80000>,
<0x0 0x33380000 0x0 0x80000>,
<0x0 0x33400000 0x0 0x80000>,
<0x0 0x33480000 0x0 0x80000>;
};
- xpcs-speed: 根据不同的 speed 设置 xpcs。
- hobot-txeq: 设置不同档位的眼图参数,取值范围[0, 10],默认是4档,sgmii 不需要调整。
- hobot-vboost: 眼图幅值系数,0不使能。