0x1F以上のPHY MIIレジスタの読み出し

0x1F以上のPHY MIIレジスタの読み出し

DP83826 PHYに問題があるため、いくつかの構成レジスタを読みたいです。私はmdio-toolとmii-diagを使用しましたが、最初の32個のレジスタしか読み取ることができないことに気づきました。

mii-diag -v(verbose)は最初の32個のレジスタを表示し(おそらく偶然ではない)、0x1F以上のアドレスでmdio-toolを使用すると、アドレスが0..1Fの範囲にとどまるように移動されます。 mdio-toolのコードを見た結果、レジスタアドレスはまったく制限されませんでした。また、mii-diag -vaビットをハッキングして32個以上のレジスタを取得し、最初の32個のレジスタを引き続き返しました。それで、限界が他の場所にあるようですが、まだどこにあるのか見つかりませんでした。今、この問題を引き起こすことがAPIであるかデバイスドライバであるかを調べようとしています。

ethtool -d eth0も試しましたが、GMACとDMAレジスタのみをダンプしました。

Linuxで0x1F以外のPHY MIIレジスタを読み書きする方法は?

ベストアンサー1

私はそれがどのように機能するかを見つけました。

デフォルトの標準MDIOアドレスは5ビットで構成されているため、[0..32]の範囲のみが直接アクセスできます。基本標準以上の追加レジスタを提供するデバイスの場合、MDIO管理デバイス(MMD)間接方式(IEEE 802.3ahドラフトのセクション22で定義)を使用して拡張レジスタセットにアクセスできます。

結局、これは基本アドレス範囲内のいくつかのレジスタを介した間接アクセスに過ぎない。私の特別なケースでは(指摘したようにツイート)、REGCR(0x0D)、およびADDAR(0x0E)がこの目的に使用されます。レジスタ内のアドレスとビットフィールドはチップごとに異なる場合がありますが、メカニズムはかなり似ています。

おすすめ記事