とりあえずカーネルをビルドして実行できるようにしたので、実装方針を考えて見ます。
- hintsベースで最小限を実装する
- bhndベースで実装してみる
- FDTで実装してみる
FreeBSD/mipsのBroadcomサポートは古めのチップのsibaと新目のチップのbcmaをサポートするbhndを作ったんだけど、中途半端で終っています。
Broadcomはsibaという仕組みからbcmaという仕様に変更したのだが、それらを透過に扱える事を目指したものがbhndだった。
現実的には1かな。。。
atheros/ar531xを雛形にしようと思う。
BCM3383(BMIPS4350)とBCM3380(BMIPS4350)で動かす事をめざし、BCM3300などの古いものは対象外。
既存コードを最大限利用する。
BCM3380やBCM3383はBCM6368に近いようだ。
GPLのソースを見てみると、BroadcomのmipsはBCM4(5),BCM6(3),BCM7の3本柱だったみたいだ。BCM33はBCM6系の亜流なので、情報が極めて少ない。
GPLで公開されているソースなどを参考にする。githubに上がってないものもあるので、ダウンロードしてローカルで展開して調べる。
BCM3380とBCM3383はUARTのアドレスが違い、BCM3380,3383はUARTは2個なのだがBCM3384は3個とちょこちょこいじられている。UARTはソフトさんの命綱なので、あまりいじるべきではない。
BCM3380-3383は1Core/2ThreadですがBCM3384(BMIP5000?)は2Core/4Threadかもしれません。
THOMSONのTCW770(BCM3380)はなんらかの理由でブートのuartとecosのuartが違っているような気がします。ブートは見えないのですが、ecosの出力のuartはここで0xb4e00200だと思います。
謎なのがJ305とJ306が両方ともここにつながっています。
おそらくbootは0xb4e00220に出しているような気がします。
spi flashの前半64Kとビルドしたpsimageをつなげて焼くとブートします。
Technicolor TC7200.U(BCM3383)の情報
THOMSONのTCW770(BCM3380)と形状が同じなので、製造元がいっしょと思われます。このモデルはPCIeが一本と二本の基板があるようです。
BCM3383のLinux
おそらくGPLで公開されているソースを元にLinux本家のツリーにパッチを当てたのではないかと思われます。もともとある程度は本家に入っていて、追加したような感じです。
Broadcomが頭がおかしいと思うのはBCM3380とBCM3383でいろいろいじられていることです。ちょこちょこいじるとソフト屋さんが大変だし、バグも多くなる可能性があります。またBCM3383といったりBCM93383といったりBMIP4350といったりなんだかよくわかりません。またBCM3384の後にBCM33843という製品もあったようです。なんでそうなるかな。。。