もうすぐ12.0がリリースされますが、今回始めてリリースに入る自分が作った二つのSOCサポートの事を書きます。
RT1310(arm)
2015年のFreeBSD Advent Calendarに書いたサポートなのですが、その後レビューに入れてheadに入れてもらいました。当初から開発はZRouterでのビルドでおこなっていました。後から気がついたのですが、ZRouterはgcc強制のオプションで動いていて、自分が始めた当時、既にarmのビルドのデフォルトはclangに変更されていたのですが、gccで開発できた事が幸いしました。というのはその後はclangに変更したのですが、clangのフルビルドはgccの10倍近く時間がかかり、新規に開発はかなり厳しい物があるからです。
このサポートをやったのは、armってどんな物なのか知るためと、RT1310がアーキテクチャがシンプルだったからです。
RT1310は古いarmv5tと古いアーキテクチャでもう消されてしまったsys/arm/lpcをベースに作りました。armのサポートが入ってからevent timerやfdtやintrngが入って、古いSOCのコードにはこれらが入っていなかったりしたのですが、RT1310は全て入れて作ってあります。
armのfdtサポートはよくできててmachindepにほとんどコードが必要なくなっています。ただdevmapはdtsから拾ってるのではなくて直値でデバイスがある範囲のアドレスを指定していて、ちょっといけてないです。
12リリース直前になってimpさんがいろいろ古いコードを消し始めて、危うく消されそうになりましたが、ちゃんと動いていて消される筋合いはなく、どうにかリリースにたどり着けました。
コードのありかはsys/arm/ralinkです。
RalinkはMediatek買収されてなくなってしまいましたが、RT1310には後継チップがなくこれっきりだったのと、5VTechnologiesのOEMだったのですが、オリジナルは入手できなかったので、ralinkとしました。
メモリ16MのFlashが4MのBUFFALOのWZR2-G300Nがリファレンス機種です。WIFIのサポートはやってません。
ifが2つあるので自宅でbridgeにしてして使っていますが、結構安定して動いてます。
以下の二つのファイルはReleaseに入っていないので私のzrouterのブランチにあるファイルを使っています。これがないとrootfsがマウントできません。
modified: sys/dts/arm/wzr2-g300n.dts
modified: sys/geom/geom_flashmap.c
AR531x(mips)
このチップはFONの古いモジュールで使われてて、NetBSDではサポートされていたのですが、FreeBSDにはサポートがなかったので作りました。
作り込みは既存のAR7系のコードをNetBSDのAR5系のサポートとガッチャンコして、作りました。FreeBSDのソースを書く時はGPL汚染しないようにBSDなコードをベースにする事にしています。
ネットワークコードは既に消されているsys/mips/idtのkrというドライバーコードをベースにしています。krそのままでは動作がおかしく、いろいろ試した結果、キャッシュの処理を一カ所いじりました。また負荷をかけると落ちるのでいろいろリングバッファの処理を試行錯誤しました。このコードを元にRT1310のネットワークドライバコードは作りましが、DMAの挙動が微妙に違い、違う処理の部分があります。
この世代のチップは前半のCFIなFlashを使った物と後半のSPIのFlashを使った物があり両方のサポートが入っています。
AR7系同様にhintsベースの実装ですが、AR7系ではINTRNGになっていませんが、このサポートは対応してあります。
このチップのサポートを入れたかった一つの理由にこのSOCはEthernet Switchが外付けになっていて、いろいろなEthernet Switchが付いた物があったので、そのドライバーも書きたかったからです。sys/dev/etherswitchにもいくつかコードを入れてもらいました。
コードのありかはsys/mips/atheros/ar531xです。
メモリ16MのFlashが8MのFON2201がリファレンス機種です。WIFIのサポートはやってません。
二つのSOCのサポートで一番時間を使ったのはネットワークドライバーでした。DECのTulip由来のアーキテクチャなのですが、それぞれ微妙に動作が違っていて、トライ&エラーに時間を使いました。
二つとも安定していて、ネットワークも使えるので、十分有益なポートだと思っています。
この二つのポートが出来たのはZRouterがあったからだと思っています。ZRouterを始めたrayには感謝しています。
追記:12.0-Rが出たばかりなのに、AR531xはもうimpさんが消すレビューを出しています。おそらくRT1310も時期消されてしますでしょう。12Rに入ったのでstable12では使い続けられると思うのでそれで良しとします。