一、难点
调试rtl8367s交换芯片主要面临三大挑战:
1、以前没有过关于调试switch芯片的案例,几乎从无到有,需要自行查阅资料。
2、网上关于rtl8367系列调试资料很少,而且大多数并没有实际的参考意义。
3、rtl8376s芯片调试没有官方技术支持,并且无官方资料,给出的芯片手册寄存器说明不全。
二、前期准备
1、从OpenWrt项目中找到rtl8367s相关源码并下载到本地。
2、查阅Atlas内核源码中与switch芯片相关的部分,发现只有rtl8366rb驱动。
3、初步计划将rtl8367s源码移植到内核中。
三、移植过程
第一步使用自带switch源码测试mdio通信,确保芯片与Atlas之间的通信没有问题,硬件上连接了MDIO专用接口和i2c0,直接考虑用专用通信接口,调试过程中发现网上找的rtl8367s大多数源码都是用gpio模拟mdio总线通信,于是将这两个专用口配置为普通gpio,设备树hi1910-asic-nic.dtsi
中增加
switch {
compatible = "realtek,rtl8366rb";
mdc-gpios = <&porta 8 1>; //
mdio-gpios = <&porta 9 1>; //
reset-gpios = <&portc 7 0>; //
realtek,disable-leds;
subctrl-vbase = <&peri_sub>;
switch_intc: interrupt-controller {
// GPIO 10 provides the interrupt
interrupt-parent = <&porta>;
interrupts = <10 8>;
interrupt-controller;
#address-cells = <0>;
#interrupt-cells = <1>;
};
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
label = "lan0";
phy-handle = <&phy0>;
};
port@1 {
reg = <1>;
label = "lan1";
phy-handle = <&phy1>;
};
port@2 {
reg = <2>;
label = "lan2";
phy-handle = <&phy2>;
};
port@3 {
reg = <3>;
label = "lan3";
phy-handle = <&phy3>;
};
port@4 {
reg = <4>;
label = "wan";
phy-handle = <&phy4>;
};
rtl8366rb_cpu_port: port@5 {
reg = <5>;
label = "cpu";
ethernet = <&higmac>;
phy-mode = "rgmii";
fixed-link {
speed