【BRCM】博通ESDK6.5中添加50210S光口驱动及配置光电自适应的实例


ENV

H/W

  1. SOC:bcm47623L
  2. PHY:bcm50210S (RGMII)

S/W

  1. SDK:ESDK6.5ga
  2. kernel:linux-4.19

需求

1. SOC - RGMII - 50210

2. 50210 auto detect :Copper/Fiber


需求分析

需求分析:1. SOC - RGMII - 50210

需要SOC提供一个RGMII的port给这个PHY

需求分析:2. 50210 auto detect :Copper/Fiber

配置switch的寄存器就可以实现切换
在phy init阶段配置修改初始化寄存器可以实现auto功能


解决方案

  1. 添加PHY信息到DTS,开放RGMII接口给PHY
# 添加 RGMII pinctrl
+    pinctrl-names = "default", "rgmii";
+    pinctrl-0 = <&a_rgmii_mdc_pin_68 &a_rgmii_mdio_pin_69 &rgmii_pins>;
+    pinctrl-1 = <&rgmii_pins>;

# 添加 RGMII PORT1
+            port1@1 {
+            	phy-handle = <&phy_rgmii>;
+            	mii-pinctrl-state = "rgmii";
+            	phy-mode = "rgmii";
+            	rgmii-3p3v;
+            	status = "okay";
+			};
# 修改 PHYAD
                phy_rgmii:rgmii {
+                       reg = <0>;

  1. 初始化中添加修改寄存器的程序段:实现AUTO功能
 static int phy_init (phy_dev_t *phy_dev)
 {
...
+    if (0x0 == phy_dev->addr) // PHYAD
+    {
+        int ret = 0;
+        ret = rgmii_to_copper_fiber_auto_detect(phy_dev);
+        if (ret)
+            printk("rgmii_to_copper_fiber_auto_detect have error\n");
+    }

# 配置寄存器函数rgmii_to_copper_fiber_auto_detect():
phy_dev_write(phy_dev, RDB_ACCESS | 0x..... 0x....); // EXT REG
...
phy_dev_write(phy_dev, MII_BMCR, 0x....); // MII
....

PS: 上述配置寄存器时,具体寄存器参数需要更具bcm50210S寄存器文档说明来修改。

  1. 驱动中添加1000Base-X支持
# 添加1000Base-X宏
+#define ESTATUS_1000_XFULL      0x8000  /* Can do 1000BX Full                   */
+#define ESTATUS_1000_XHALF      0x4000  /* Can do 1000BX Half                   */
# 驱动
# 1. mii驱动中添加phy_drv_brcm.h的头文件,
# 2. mii_caps_get()中添加Fiber判断程序,并初始化1000BX标志信息
# 2.1 判断EXT REG | 0x21 的标志位,判断是否为Fiber。
# 2.2 判断Fiber后修改adv标志 & 1000BX = xxxxxx
# 2.3 修改链接状态位,添加判断程序。(1000 0100与电口标志位不重合)
# 3. mii_cpas_set()与上述方式类似,添加对Fiber的判断与标志位修改。(注意不要移除非光口程序段)

小结

  1. 添加PHY信息到DTS,开放RGMII接口给PHY
  2. 初始化中添加修改寄存器的程序段
  3. 驱动中添加1000Base-X支持
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

过得精彩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值