ログの中に"macb"というものがあったが、これはネットワーク関係らしい。
ログに出ているくらいだからドライバとしてはビルドできているのだろう。
設定場所はかなり深い。。。
Cadence MACB/GEM supportまであればよさそうだ。
extendedはZynqMP専用か。
devicetreeの説明もあるが、値の意味がわからん。
えーい、そのまま使ってしまえ!
gem0: ethernet@e000b000 { compatible = "cdns,gem"; reg = <0xe000b000 0x1000>; status = "disabled"; interrupt-parent = <&gic>; interrupts = <0 22 4>; clocks = <&clkc 30>, <&clkc 30>, <&clkc 13>; clock-names = "pclk", "hclk", "tx_clk"; #address-cells = <1>; #size-cells = <0>; phy-handle = <ðernet_phy>; phy-mode = "rgmii-id"; ethernet_phy: ethernet-phy@7{ reg = <7>; }; };
コンパイルエラー・・・。
いや、落ち着くのだ。
この書き方は、dtsにそのまま書く場合のやりかただ。
dtsiに設定の上書きっぽく書くときは、&gem0、みたいな始まり方ではないか。
ん、ということは、どこかにオリジナルのgem0が既にあるということじゃないか。
調べると、components/plnx_workspace/device-tree-generation/zynq-7000.dtsiの中にあった。
gem0: ethernet@e000b000 { compatible = "cdns,zynq-gem", "cdns,gem"; reg = <0xe000b000 0x1000>; status = "disabled"; interrupts = <0 22 4>; clocks = <&clkc 30>, <&clkc 30>, <&clkc 13>; clock-names = "pclk", "hclk", "tx_clk"; #address-cells = <1>; #size-cells = <0>; };
他のところにも散らばっているので、そのなかで設定されていなさそうなものだけ追加してみよう。
&gem0 { ethernet_phy: ethernet-phy@7{ reg = <7>; }; };
libphy: MACB_mii_bus: probed
macb e000b000.ethernet eth0: Cadence GEM rev 0x00020118 at 0xe000b000 irq 145 (00:0a:35:00:1e:53)
Generic PHY e000b000.etherne:07: attached PHY driver [Generic PHY] (mii_bus:phy_addr=e000b000.etherne:07, irq=-1)
e1000e: Intel(R) PRO/1000 Network Driver - 3.2.6-k
e1000e: Copyright(c) 1999 - 2015 Intel Corporation.
前と比較。
macb e000b000.ethernet eth0: Cadence GEM rev 0x00020118 at 0xe000b000 irq 145 (ba:6a:97:4f:c3:6e)
Generic PHY e000b000.etherne:00: attached PHY driver [Generic PHY] (mii_bus:phy_addr=e000b000.etherne:00, irq=-1)
Generic PHYが00から07になったくらいか。
これは、regを<7>にしたのが効いたということだろう。
その次のirqが-1になっているのが、よくない気がする。
が、そもそも7でよいのかどうかも不明だ。
根拠をどうやって得るとよいのだろうか?
この人のログ(zedboard)でもirqは-1なのだが、最後でlink upしている。
ということは、irqは関係ないのか。
■QSPIからブート(PetaLinux編) - gogo fpga
Cadence GEMの行に出ているirqは、146になっている。
&gem0 { phy-handle = <ðernet_phy>; phy-mode = "rgmii-id"; ethernet_phy: ethernet-phy@1{ reg = <1>; }; };
変わらず。
読めないけど、真似する。
zynq-7000系列基于zynq-zed的vivado初步设计之linux下控制PL扩展的GPIO - luhao806的专栏 - CSDN博客
&gem0 { status = "okay"; phy-handle = <ðernet_phy>; phy-mode = "rgmii-id"; ethernet_phy: ethernet-phy@0{ reg = <0>; }; };
変わらん。
ZYBOの設定をちょっとアレンジ。
&gem0 { phy-handle = <ðernet_phy>; phy-mode = "rgmii-id"; ethernet_phy: ethernet-phy@1 { compatible = "realtek,RTL8211E"; device_type = "ethernet-phy"; reg = <1>; }; };
変わらん。
オリジナルのようにgem0_mdioの中に入れると全然ダメだった。
こちらはv2016.3での状況らしい。
Solved: why kernel updating doesn't find ethernet phy? - Community Forums
うまくいってるときと、いかなくなったときのkernelバージョンが同じになっているが、たぶん後者がv2016.3なんじゃなかろうか。
動いていたときのInterl Driverは2.3.2-kで、動かないときは3.2.6-kだ。
PHYを認識しないときのdevicetreeにはmdioが入っていて、解決した方では入っていない。
けど、この内容はさっき試したのとほぼ同じだ。
ethernet_phyという名前を付けていないくらいか(上記では文字化けしているが、"phy-handle"に代入しているのは<ðernet_phy>だ)。
こちらは質問内容とは関係ないのだが、ログにGeneric PHYではなくRTL8211Eが出ている。
unexpected crash of embedded-linux on Zynq-Device (Zybo) - Stack Overflow
libphy: MACB_mii_bus: probed macb e000b000.ethernet eth0: Cadence GEM rev 0x00020118 at 0xe000b000 irq 145 (00:0a:35:00:01:22) RTL8211E Gigabit Ethernet e000b000.etherne:00: attached PHY driver [RTL8211E Gigabit Ethernet] (mii_bus:phy_addr=e000b000.etherne:00, irq=-1) e1000e: Intel(R) PRO/1000 Network Driver - 3.2.6-k e1000e: Copyright(c) 1999 - 2015 Intel Corporation.
Generic PHYではダメなんだろうか?
こちらはkernel 4.8.1で、Generic PHYのログが出ているし、link upしていない。
Linux Kernel 4.8.0正式版をZYBOで動作させてみた。 - ひでみのアイデア帳
こちらはちょっと古いが、macbを使っていて、最初はGeneric PHYでつながってなさそうだが、あとでEthernetのドライバの変更を行い、RTL8211Eになってlink upしたようだ。
PetaLinuxプロジェクトの新規作成 - ぼくの技術日誌
ともかく、エラーっぽいログが出てないので、何が悪いのかがわからんのだ。
出ているものといえば、
IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
くらいだ。
さすがに力業では無理な感じがしてきたので、もっと理屈で考えていきたいのだが、さてどこからやるとよいのか。。。
最後の記事で参照してあるリンク先に載っているHardnetのリンクが切れているのだが、こちらかな?dropboxからファイルが落とせるようなので、次回はそれを試そう。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。