atu dumpの機能をRT3050などのMediatek(Ralink)のSOCでもサポートしてみました。
RalinkはRT3050でSwitchが入ってRT5350などは同じ仕様のようですが、Mediatekに買収されてからのMT7620以降は大きく仕様が変わっています。
ただ両方ともMDIOなどではなくBUS上にSwitchのレジスタが見えてます。
MT7620のデーターシートはMT7620 PROGRAMMING GUIDEというタイトルになっています。
SwitchのAddress Tableは一昔前は企業秘密みたいなところがあったのですが、上のドキュメントにはなんだか内部仕様みたいな情報まで載っています。買収されてやけくそになったのかな?
とりあえずデーターシートで仕様を確認してユーザーランドのetherswitccfgコマンドのregで書き込みして読み込みを試して、なんらかの値が帰ってくることを確認して、カーネルに実装しました。
Mediatekのetherswitchcfgのregは16bitで返すようになっていました。おそらくMDIOの仕様にあわせたと思われますが、etherswitch自体は32bitも扱えるので、SOCの仕様が32bitなので、32bitの方が良いように思われます。
RT3050ではportは数値なのですが、MT7620ではビットで表されています。
こういう追加機能のカーネルへの実装はその機能を使うまでは処理が行われないので、万が一があっても気が楽です。カーネルが上がんなくなると、upgradeがリモートで出来なくなるので厄介です。
RT3050の方はゴミが入っていたりします。また何故かすぐに消えます。MT7620の方は二重にエントリーが入っていたりします。
flushの機能はあまり必要性を感じないので実装してません。
MT7620の4ポートにはNTP ST1をそれぞれつないでいて、どのポートにどのサーバが接続されているか確認できます。
上のレポジトリには本家に無い機能がいろいろ入っているのでZRouter.org Forked FreeBSD(ZFF)と呼ぼうかと思っています。