2016-03-21 25 views
-1

我会通过网络驱动程序的源,找到这个探头功能为什么需要在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); 

在第一条语句devm_clk_get(& pdev->开发,“ahb2_gmac”), 我们越来越总线(AHB2)时钟和这里clk_get_rate (priv-> miiclk),我们正在获取mii interterface时钟

它提供什么purpore(获取总线和mii时钟),它如何帮助正确的emac操作?

+0

硬件可能需要知道时钟频率以校准其用于计算传输速度的内部时钟? –

+0

这可能在数据表中针对涉及的硬件之一进行了规定。 – immibis

+0

这可能非常简单,只需确保设备的时钟(通过启用调用),这样您就不会使试图访问它的系统死锁。不知道'busclk'变量本身是否被实际用于任何事情,在哪里都很难说。 – Notlikethat

回答

0

它正在获取DTB中指定的设备时钟设置,并启用和设置设备时钟速率相同。在不启用时钟的情况下,外设将不起作用。有关最终时钟频率设置的详细信息,您可能需要查看数据手册

相关问题