2016-03-21 7 views
-1

Ich werde durch Quellnetzwerktreiber und dieseWarum ist es erforderlich, Uhr Informationen des System-Bus in Linux Netzwerktreiber zu bekommen?

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); 

In ersten Anweisung devm_clk_get (& pdev-> dev "ahb2_gmac") in Probe-Funktion finden, wir Bus (AHB2) Uhr bekommen und hier clk_get_rate (priv-> miiclk), wir bekommen die mii interterface uhr

Was purpore es dient (die bus und mii uhr bekommen), wie es hilft in richtigen emac operationen?

+0

Die Hardware muss möglicherweise die Frequenz der Uhren kennen, um ihre interne Uhr zu kalibrieren, die zur Berechnung der Übertragungsgeschwindigkeiten verwendet wird. –

+0

Dies ist wahrscheinlich im Datenblatt für eines der beteiligten Hardwareteile angegeben. – immibis

+0

Es kann so einfach sein, nur sicherzustellen, dass das Gerät getaktet ist (über den Aktivierungsaufruf), damit das System nicht blockiert wird, indem versucht wird, darauf zuzugreifen. Ohne zu wissen, ob und wo die 'busclk'-Variable selbst für irgendetwas verwendet wird, ist es schwer zu sagen. – Notlikethat

Antwort

0

Es werden die im DTB angegebenen Geräteuhreinstellungen aktiviert und die Gerätetaktrate auf denselben Wert gesetzt. Ohne die Uhren zu aktivieren, funktioniert das Peripheriegerät nicht. Einzelheiten zur endgültigen Einstellung der Taktrate finden Sie im Datenblatt