GMAC Bring Up Work Flow

1. 从原理图判断是哪一个GMAC

  • 从sdk提供的默认dts里就能够发现, gmac有两个, gmac0和gmac1.

1.1 此刻去找硬件工程师给的原理图,搜索一下gmac, 看看他用的是gmac1还是gmac0

具体如何确定,还得看原理图里使用的引脚, 跟dts里的哪一个gmac node的配置比较相似.

具体文件是在kernel/arch/arm64/boot/dts/rockchip/rk3568-pinctrl.dtsi.

在制作bsp(上一流程)的时候,就有分层了,这份dtsi属于最底下的chip-level. 这份文件里定义了gmac1的具体子节点, 每一个子节点对应的pins是哪些,例如

具体到gmac1的时候,又分成m0和m1,我所截取的图片就是m1的部分.为何知道要用m1呢? 可以参考原理图的cpu部分:

我特别截取的就是这次使用到的gmac模块, 硬件同事在每一个引脚名字的后面都加了M1, 也在提醒我们,这次用到的就是GMAC1的M1.

1.2 其实,为什么硬件这边能够和dts对应上呢?

应该是硬件同事在画图的时候,就是直接参考了Chip Manufacture给的用法. 分成GMAC1和GMAC0, GMAC1又分成M0和M1. 我盲猜, 如果我们硬是要修改, 用一个hybrid version的GMAC2, 也不是完全不可能, 但是dts这边就得完全重新做.一个一个引脚自己写好,就像kernel/arch/arm64/boot/dts/rockchip/rk3568-pinctrl.dtsi所作的那样.

1.3 总结一下:

看原理图的symbols, 只是一个tips, 并不能最终确定. 确定的方式是对比dts中chip-level的dts include中的pins configs. 它们必须是对应的才行.

2. 从原理图判断是时钟模式, 25M和125M分别是谁给的,如何给的

2.1 先看原理图的PHY部分

这里能看见它是XTAL_I接地了, XTAL_O和CLKOUT还不知道接到哪里去

2.2 看PHY的DataSheet

2.2.1 先看No.44

这里特别写, CLKOUT是output类型的, 而且如果不需要输出时钟给MAC的话,这个pin需要float.

而此处并没有float, 因此刚才原理图上一定是输出到MAC提供125MHZ时钟了.

2.2.2 再看No.45

这里介绍, 如果XTAL_O有外部时钟提供25MHZ, 那XTAL_I就要保持接地. 所以从原理图里XTAL_I接地来看, 应该是外部有25MHZ提供给PHY了.

因此,更进一步去跟进到底接入了什么引脚, 就可以了.

3. 进入dts目录, 找到入口的那个dts, 屏蔽多余的设备, enable目标设备

因为在我的这个板子上, 是用了GMAC1M1的,所以GMAC0就可以关闭了.


/*
* 2nd: Configure the active GMAC0 interface.
*
* NOTE:   The properties below are overrides for the &gmac0 node,
*         which inherits its base configuration from "rk3568-evb1-ddr4-v10.dtsi".
*
* ACTION: Review these settings against your schematic.
*/
&gmac0 {
	// there is more ...

	//status = "okay";
	status = "disabled";
};

&mdio0 {
	status = "disabled";
	// there is more ...
};

我一开始的判断并不是用gmac0, 所以我做了很多调试, 直到最后才都改写成status = “disabled”;

4. 打开Rockchip_Developer_Guide_Linux_GMAC_Mode_Configuration_CN.pdf

按照判断的时钟模式,直接抄节点配置.其他dtsi都不要修改(它们只是做库)

打开这份rk给的手册:

这里有这么多种模式,SGMII,全称是Serial Gigabit Media Independent Interface.这个是作为桥接使用的,因此SGMII 和 QSGMII都不属于我关心的范围.

RMII Clock Input和Output,似乎也不属于当前板子的情况, 因为我有25MHZ和125MHZ两种时钟, 因此先看其他4种.

在这里,我参考了一位叫Baron的工程师的文章:

参考链接: 很好的一篇文章

按着这里的归纳总结, 我们此刻正应该选择RGMII PLL output 25M for PHY, RGMII_CLK input 125M for TX_CLK.

5. 总结

  • 以上只是正常的移植流程,在bring up的过程中, 很可能硬件是不ok的. 所以确认了正确的移植流程, 就可以有确据去往硬件去找bug了.

  • 关于调试的思路, 我的个人笔记整理在这里, 提供一个思考的起点:GMAC Bring-Up Debug Strategies