2016-03-21 8 views
-1

私たちはバス(AHB2)クロックとここclk_get_rateを取得しているネットワークドライバのソースを経由してプローブ関数の中で最初の文のdevm_clk_get(& pdev-> DEV、 "ahb2_gmac")ではなぜlinuxのネットワークドライバでシステムバスのクロック情報を取得する必要がありますか?

priv->busclk = devm_clk_get(&pdev->dev, "ahb2_gmac"); 
    if (IS_ERR(priv->busclk)) { 
      ret = PTR_ERR(priv->busclk); 
      dev_err(&pdev->dev, "Cannot get AHB clock err=%d\n", ret); 
      return ret; 
    } 
    ret = clk_prepare_enable(priv->busclk); 
    if (ret != 0) { 
      dev_err(&pdev->dev, "Cannot prepare_enable busclk\n"); 
      return ret; 
    } 

    cr = clk_get_rate(priv->miiclk); 
    dev_info(&pdev->dev, "Current MII clkrate %lu\n", cr); 

    ret = clk_set_rate(priv->miiclk, cr/4); 

これを見つけ、 ています(priv-> miiclk)、私たちはmiiインターフェイスクロックを取得しています

それは何の役目を果たしていますか(バスとmiiクロックを得ること)、それは適切なemac操作でどのように役立ちますか?

+0

伝送速度の計算に使用する内部クロックを較正するには、ハードウェアがクロックの周波数を知る必要がありますか? –

+0

これはおそらく、関連するハードウェアの1つのデータシートで指定されています。 – immibis

+0

デバイスにアクセスしようとしているシステムにデッドロックをかけないように、デバイスが有効になっていることを確認するだけで簡単にできます。 'busclk'変数自体が何かのために実際に使われているかどうかわからなければ、それはちょっと言い難いです。 – Notlikethat

答えて

0

DTBで指定されたデバイスクロック設定を取得しており、デバイスクロックレートを有効にして設定しています。クロックを有効にしないと、ペリフェラルは機能しません。最終クロックレート設定の詳細については、データシートを参照する必要があります。

関連する問題