Edit online

时钟

MAC 和 PHY 的协同工作共牵涉到以下时钟:
  • MAC 工作时钟
    1. 配置代码
      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);
    2. 寄存器查验
      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 时钟
    1. 配置代码
      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;
    2. 寄存器查验
      BIT(2,5) 为 0100150-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 端口

    1. PHY 提供给 MAC
      • dts 中设置 aic,use_extclk;

      • 寄存器:0x18000410 值为 00000002

    2. MAC 提供给 PHY
      • dts 中不设置 aic,use_extclk;

      • 寄存器:0x18000410 值为 00000000