天启RK3399平台GMAC移植

天启RK3399平台GMAC移植

准备工作

1. firefly官网下载RK3399相关资料

2. 通过原理图查看GMAC外挂PHY芯片型号 ---- rtl82111e

3. 拆机将串口引出,并再次确认PHY芯片型号 ---- u-boot默认波特率1.5M TTL电平

4. 通过芯片手册查看GMAC架构,DMA描述符类型 ---- 普通DMA描述符

配置GMAC相关时钟和引脚功能

参考u-boot中rk3399设备树

dts不做详述。

配置gmac相关引脚复用功能

PHY芯片rtl82111e只支持rgmii接口,按照u-boot设备树中rgmii_pins进行相印映射配置。参考寄存器手册《Rockchip RK3399TRM V1.3 Part2》中GRF单元中GRF_GPIO3C_IOMUX、GRF_GPIO3B_IOMUX和GRF_GPIO3A_IOMUX中引脚复用功能说明。

rgmii只使用了3A、3B和3C中部分引脚,rmii基本是rgmii的子集,但mac_rxer(3B2)是rmii独自使用的。因为rtl82111e不支持rmii,所以不用配置3B2。

注:u-boot中有完整的rk3399设备树、时钟树和引脚管理相关代码。

RK3399平台在u-boot设备树中对于GMAC设备引脚配置:

gmac {

    rgmii_pins: rgmii-pins {

        rockchip,pins =

            /* mac_txclk */

            <3 RK_PC1 RK_FUNC_1 &pcfg_pull_none_13ma>,

            /* mac_rxclk */

            <3 RK_PB6 RK_FUNC_1 &pcfg_pull_none>,

            /* mac_mdio */

            <3 RK_PB5 RK_FUNC_1 &pcfg_pull_none>,

            /* mac_txen */

            <3 RK_PB4 RK_FUNC_1 &pcfg_pull_none_13ma>,

            /* mac_clk */

            <3 RK_PB3 RK_FUNC_1 &pcfg_pull_none>,

            /* mac_rxdv */

            <3 RK_PB1 RK_FUNC_1 &pcfg_pull_none>,

            /* mac_mdc */

            <3 RK_PB0 RK_FUNC_1 &pcfg_pull_none>,

            /* mac_rxd1 */

            <3 RK_PA7 RK_FUNC_1 &pcfg_pull_none>,

            /* mac_rxd0 */

            <3 RK_PA6 RK_FUNC_1 &pcfg_pull_none>,

            /* mac_txd1 */

            <3 RK_PA5 RK_FUNC_1 &pcfg_pull_none_13ma>,

            /* mac_txd0 */

            <3 RK_PA4 RK_FUNC_1 &pcfg_pull_none_13ma>,

            /* mac_rxd3 */

            <3 RK_PA3 RK_FUNC_1 &pcfg_pull_none>,

            /* mac_rxd2 */

            <3 RK_PA2 RK_FUNC_1 &pcfg_pull_none>,

            /* mac_txd3 */

            <3 RK_PA1 RK_FUNC_1 &pcfg_pull_none_13ma>,

            /* mac_txd2 */

            <3 RK_PA0 RK_FUNC_1 &pcfg_pull_none_13ma>;

    };

    rmii_pins: rmii-pins {

        rockchip,pins =

            /* mac_mdio */

            <3 RK_PB5 RK_FUNC_1 &pcfg_pull_none>,

            /* mac_txen */

            <3 RK_PB4 RK_FUNC_1 &pcfg_pull_none_13ma>,

            /* mac_clk */

            <3 RK_PB3 RK_FUNC_1 &pcfg_pull_none>,

            /* mac_rxer */

            <3 RK_PB2 RK_FUNC_1 &pcfg_pull_none>,

            /* mac_rxdv */

            <3 RK_PB1 RK_FUNC_1 &pcfg_pull_none>,

            /* mac_mdc */

            <3 RK_PB0 RK_FUNC_1 &pcfg_pull_none>,

            /* mac_rxd1 */

            <3 RK_PA7 RK_FUNC_1 &pcfg_pull_none>,

            /* mac_rxd0 */

            <3 RK_PA6 RK_FUNC_1 &pcfg_pull_none>,

            /* mac_txd1 */

            <3 RK_PA5 RK_FUNC_1 &pcfg_pull_none_13ma>,

            /* mac_txd0 */

            <3 RK_PA4 RK_FUNC_1 &pcfg_pull_none_13ma>;

    };

};

配置gmac电源管理

GMAC属于高速设备,具有相对独立的电源管理模块,参考rk3399中PMU单元中相关寄存器功能对GMAC电源进行管理。参考《Rockchip RK3399TRM V1.3 Part1》中PMU相关GMAC电源寄存器单元,配置寄存器PMU_PWRDN_CON、PMU_NOC_AUTO_ENA中相关电源、时钟使能位。

在PMU_PWRDN_CON中配置GMAC电源使能后,通过读取PMU_PWRDN_ST可检测GMAC电源状态。

在PMU_BUS_CLR、PMU_BUS_IDLE_REQ中禁止发送请求到GMAC低功耗接口。电源管理在后期可以逐步优化。

配置gmac时钟

GMAC的时钟配置分布在CRU和PMUCRU单元中,主要包含时钟使能开关和时钟分频系数配置,先将所有GMAC相关时钟使能位都使能,时钟分频系数参考系统上电默认值配置。

时钟配置可参考u-boot设备树中GMAC相关时钟进行配置:

gmac: ethernet@fe300000 {

    compatible = "rockchip,rk3399-gmac";

    reg = <0x0 0xfe300000 0x0 0x10000>;

    interrupts = <GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH 0>;

    interrupt-names = "macirq";

    clocks = <&cru SCLK_MAC>, <&cru SCLK_MAC_RX>,

         <&cru SCLK_MAC_TX>, <&cru SCLK_MACREF>,

         <&cru SCLK_MACREF_OUT>, <&cru ACLK_GMAC>,

         <&cru PCLK_GMAC>;

    clock-names = "stmmaceth", "mac_clk_rx",

              "mac_clk_tx", "clk_mac_ref",

              "clk_mac_refout", "aclk_mac",

              "pclk_mac";

    power-domains = <&power RK3399_PD_GMAC>;

    resets = <&cru SRST_A_GMAC>;

    reset-names = "stmmaceth";

    rockchip,grf = <&grf>;

    status = "disabled";

};

GMAC时钟使能位集中在寄存器PMUCRU_GATEDIS_CON0、CRU_CLKGATE_CON5、CRU_CLKGATE_CON6和CRU_CLKGATE_CON32中,参考手册进行配置。

GMAC时钟分配系数寄存器集中在CRU_CLKSEL_CON19和CRU_CLKSEL_CON20,参考手册进行配置。分频系数不影响GMAC正常功能,影响GMAC通信速率,在GMAC能正常进行网络通信时再调教。相反时钟使能位是一定要配置的,否则访问PHY、MAC层寄存器将卡住。

适配PHY层

参考PHY芯片rtl82111e芯片手册,对PHY进行掉电并重启,在PHY完成重启后使能PHY芯片的自协商功能。相关PHY操作集中在PHY层寄存器BMCR中,具rtl82111e芯片手册进行配置。

电源控制位bit11:

重启PHY位bit15:

自协商使能位bit12:

重启自协商位bit9:

具体代码参考u-boot或VxWorks中寄存器操作流程:

GMAC驱动移植

1. 修改DMA描述符使用链表模式

2. 优化调试打印

3. PHY层就绪状态缓慢,修正PHY层链路状态扫描策略

4. 收发时钟延迟线值调整

为了调试rk3399的gmac驱动记录,首先需要确认设备的连接情况。检查网线是否正常连接到gmac接口,确保与外部网络连接的网线正常。然后,需要查看系统日志,以确定是否有与gmac驱动相关的错误或提示信息。可以使用dmesg命令来查看系统日志,寻找与gmac驱动相关的错误信息。 在确认设备连接和系统日志后,可以尝试重新加载或卸载再加载gmac驱动。可以使用modprobe命令加载或卸载再加载gmac驱动。加载驱动时,可以通过设置modprobe的参数来调试驱动。常用的参数包括verbose、debug以及err_mask等,这些参数可以输出更详细的驱动信息,帮助定位问题。 如果以上方法没有解决问题,可以查阅rk3399和gmac驱动的官方文档,了解更多相关信息。在官方文档中,可以找到驱动的配置选项和参数,以及一些常见问题的解决方法。可以尝试按照官方文档中的建议进行调试。 此外,还可以尝试使用一些网络诊断工具来测试gmac驱动的性能和稳定性。例如,可以使用ping命令来测试网络连通性,iperf命令测试网络带宽,以及wireshark命令来抓取网络数据包进行分析。 在调试过程中,要注意保护设备的安全性,避免对系统或网络造成不必要的损坏。同时,建议备份系统数据,以防止误操作导致数据丢失。 总之,对于rk3399的gmac驱动调试,需要确认设备连接情况,查看系统日志,重新加载驱动并设置调试参数,参考官方文档解决问题,并利用网络诊断工具进行测试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值