福州瑞芯微电子有限公司clock_in_out=\tx_delay=<0x30>;rx_delay=<0x10>;};--->修改成output,也就是由RK主控提供注意:如果是RK3288芯片,50M主时建议由外部PHY提供,因为RK主控分出的50Mclock可能不精准,会造成GMAC丢包或无法工作。1000MPHY配置
&gmac_clkin{clock-frequency=<125000000>;};&gmac{//power-gpio=<&gpio0GPIO_A6GPIO_ACTIVE_HIGH>;reset-gpio=<&gpio4GPIO_B0GPIO_ACTIVE_LOW>;phy-mode=\clock_in_out=\tx_delay=<0x30>;rx_delay=<0x10>;};注意:125M主时间需要由外部PHY提供,这是因为RK主控分出的125Mclock不精准,会造成GMAC丢包或无法工作。--->修改成rgmii--->修改成input,也就是125M由PHY提供-->修改成125M3.10版本kernel的phy驱动代码位于drivers/net/phy/menuconfig的配置如下:DeviceDrivers--->
Networkingsupport--->
PHYDevicesupportandinfrastructure
内部资料,不得扩散Page11of28福州瑞芯微电子有限公司2.2.3.2时钟配置
(1)RGMII
RGMII上分别有TX_CLK和RX_CLK两个时钟,这两个时钟分别由MAC和PHY产生,这两个时钟频率的大小和网速的大小相关,千兆网速的时候,时钟频率为125MHz,百兆为25MHz,十兆为2.5MHz。
TX_CLK可以由3288内部的PLL分频产生,也可以由外部的时钟输入经过分频后产生。目前我们使用的是由外部输入的时钟,这样的时钟相对于内部PLL产生的时钟更加独立,不受3288内部分频策略的影响,因此更加稳定。而对于PHY来说,本身就需要一个25M的晶振作为时钟源,因此RX_CLK正是由这个时钟源倍频或分频得到的。绝大多数PHY还有这样的一个输出管脚,可以输出一个时钟给MAC,也就是上面描述的相对于MAC来说的外部时钟,这个时钟大小为125MHz,作为MAC端TX_CLK的时钟源。2.2.3.1中描述的时钟方向正是指的是用内部时钟output或是外部时钟input。(2)RMII
对于RMII接口来说,需要的只是一个50MHz的参考时钟,这个概念可以参考2.2.1.2。
内部资料,不得扩散Page12of28福州瑞芯微电子有限公司需要注意的是,若时钟方向设为output,也就是从3288的GMAC向PHY提供参考时钟,就需要额外修改arch/arm/boot/dts/rk3288.dtsi,把npll初始值设为1200000000,也就是1.2G,如下:
diff--gita/arch/arm/boot/dts/rk3288.dtsib/arch/arm/boot/dts/rk3288.dtsiindex75392fd..503f6b6100755---a/arch/arm/boot/dts/rk3288.dtsi+++b/arch/arm/boot/dts/rk3288.dtsi@@-496,7+496,7@@
<&usbphy_480m&otgphy2_480m>;rockchip,clocks-init-rate=
<&clk_core792000000>,
-+
<&clk_cpll29700000>,<&clk_cpll29700000>,
<&clk_gpll600000000>,//boxchanged<&clk_npll1250000000>,<&clk_npll1200000000>,
<&aclk_bus300000000>,
<&aclk_bus_src300000000>,<&hclk_bus150000000>,<&clk_crypto150000000>,
<&pclk_bus75000000>,
<&aclk_peri300000000>,
2.2.3.3时序配置
时序配置是千兆网卡上才开始有的概念,具体到3288上,也就是RGMII接口才需要去特别配置时序。这是因为时钟频率更高了以后更容易受到PCBlayout走线,电磁干扰等因素的影响,因此需要更加精确的调整。比如TX或RX出现走线太长的情况,就有可能需要配置不同的延时值来调整时序。2.2.3.1中列出的两个值是SDK板上用的,目前在多数客户板上也是使用这两个值,如果有出现测试吞吐率不足的情况,可以适当调整这两个值,范围是0x0—0x7F.在实际的调整过程中,可以在上述这两个值的基础上适当加减,正常不应该会有太大的偏差。
内部资料,不得扩散Page13of28福州瑞芯微电子有限公司2.2.3.4MAC地址
目前32上对MAC地址的读取策略是,优先使用烧写在IDB中的MAC地址,若该地址符合规范,则使用,若不符合,则使用随机生成的地址。烧写工具在SDK中会附带。
2.2.4RK3036RK3036使用3.10kernel,配置如下
DeviceDrivers--->
Networkingsupport--->
[*]Ethernet(10or100Mbit)--->
RockChipdevices--->
RockChip10/100Ethernetdriver
由于3.10kernel的驱动架构与3.0.36相比有较大改动,引入了devicetree的概念,许多配置改为在dts文件中进行修改。所以,相应地,对以太网相关的一些配置的修改也需要在dts文件中进行。SDK上的相应3036的dts文件为arch/arm/boot/dts/rk3036-sdk.dts
&vmac{//pmu_regulator=\//pmu_enable_level=<1>;//1->HIGH,0->LOW//power-gpio=<&gpio0GPIO_A6GPIO_ACTIVE_HIGH>;
reset-gpio=<&gpio2GPIO_C6GPIO_ACTIVE_LOW>;
};
上述dts文件中各个字段的含义可参考2.2.3.1
MAC驱动代码位于drivers/net/ethernet/rockchip/vmac/rk29_vmac.c
2.2.5RK3128同RK3288,见2.2.3
注:2.2.3.2时钟配置(2)RMII这个章节中描述的对npll的配置在3128上不需要进行
内部资料,不得扩散Page14of28福州瑞芯微电子有限公司3USB以太网卡芯片USB以太网芯片内部集成了以太网MAC和PHY,因此并不需要RK芯片内部的MAC,驱动和第2章所述的也完全不同。所以如果产品中使用的是内置的USB以太网芯片,可以考虑把2.2中提到的配置关闭。
3.1Kernel配置
和PHY情况类似,Linuxkernel中有USB以太网卡的通用驱动,只需要打开如下配置即可
DeviceDrivers--->
Networkingsupport--->
USBNetworkAdapters--->
Multi-purposeUSBNetworkingFramework
通常各款USB以太网卡还会有自己的驱动,可以根据实际情况打开上述配置下一级相应的配置即可。另外有些厂家还会额外提供驱动的更新,按厂家指导进行即可。
3.2MAC地址烧写
此处MAC地址烧写的概念和2.4所述不同,由于USB以太网芯片是一个独立的网卡,所以必须事先固化MAC地址到芯片的OTP中。不同厂家会有不同的实现方式,有些是事先内置好的,有些则需要使用相应的工具进行烧写,可以联系供应商提供相应支持。
注意:没有烧写MAC地址的USB以太网芯片无法正常工作!
3.3字节对齐问题
注意:此部分只针对kernel3.0的平台内部资料,不得扩散Page15of28