时钟
MAC 和 PHY 的协同工作共牵涉到以下时钟:
- MAC 工作时钟
- 配置代码MAC 的内部工作时钟通过 PLL_INT1 分频获得,为 50M, 工作时钟不会因为方案的不同而不同,为一固定值。
plat->aicmac_clk = devm_clk_get(&pdev->dev, AICMAC_RESOURCE_NAME); clk_set_rate(plat->aicmac_clk, CSR_F_50M); clk_prepare_enable(plat->aicmac_clk);
- 寄存器查验
reg-dump -a 0x18020440 -c 4 0x18020440: 00003117 00003117 00000000 00000000
- 配置代码
- PHY 工作时钟
一般 PHY 的工作时钟是 25M, 一般的设计是外挂一个晶振提供时钟给 PHY 模组,d211 对外提供几组时钟,也可以使用该时钟供给 PHY 模块工作。
该时钟 (clk-out) 使能在 CMU 中配置,IO 在 MAC 中配置&cmu { clk-out0 = <25000000>; clk-out1 = <25000000>; clk-out2 = <25000000>; clk-out3 = <25000000>; // clk-out0-enable; // clk-out1-enable; /* Enable clock out2 */ clk-out2-enable; // clk-out3-enable; }; &gmac0 { pinctrl-names = "default"; pinctrl-0 = <&gmac0_1000m_pins>, <&clk_out2_pins_b>; }
- MDC 时钟
- 配置代码
define AICMAC_CSR_DEFAULT AICMAC_CSR_150_250M value |= (priv->plat->clk_csr << mdio_data->mii_reg.clk_csr_shift) & mdio_data->mii_reg.clk_csr_mask;
- 寄存器查验
BIT(2,5) 为 0100,150-250MHz reg-dump -a 0x10280090 -c 4 0x10280090: 00000a90 00000000 00000000 00000000
- 配置代码
- MDATA 时钟MDATA 时钟 (TXC) 为 MAC 和 PHY 进行数据传输的时钟,对于百兆和千兆有不同的使用方式
-
百兆网络:可以是 MAC 供给 PHY, 也可以是 PHY 供给 MAC
-
千兆网络:只能是 MAC 供给 PHY,RGMII0-TXCK 端口
- PHY 提供给 MAC
-
dts 中设置 aic,use_extclk;
-
寄存器:0x18000410 值为 00000002
-
- MAC 提供给 PHY
-
dts 中不设置 aic,use_extclk;
-
寄存器:0x18000410 值为 00000000
-
-