Sun Blade 150 + SiI3114 (NetBSD/sparc64)

PCIバスのSPARC機にPC用のATAカードを挿す話は(昔)ありましたが……

SATAカードを挿したのは見かけなかったので残しておく。

PCI(Expressではない)のSATAカードを探すと、2023年3月現在、ふつーに買えそうなのはSiI3114のものだけです。(SILと書かれている商品もありますが、正しくはSIIの2文字目だけ小文字。)

こいつをPCIスロットに挿してOpenBoot PROM (OBP) の show-devs で見ると /pci@1f,0/pci@5/raid@1 というデバイスが生えてます(最後の @1 はPCIカードを挿した場所による)。

ide じゃなくて raid と認識されるのでbootはできませんが、他のデバイスからNetBSD/sparc64をbootすれば、普通にsatalinkとして認識されて、普通に読み書きできます。

上記のリンク先の記事では、bootも含めてSolarisで普通に使うために(SolarisでドライバのあるCMD649の)RAID機能を殺すためにジャンパを切ったりROMを抜いたりしていますが、私の場合は(特にSolarisで使う予定はないので)NetBSDで認識できるカードであれば良くて、bootしたいとしてもOBPをうまく騙せれば良い(?)ということになります。

というか、使っているSiI3114カードのRAID機能を殺す方法が良くわからないし、たとえ殺したとしても多分Serial ATA controllerになるだろうから、結局IDE Controllerであるかのように騙してやらないといけないのは変わらない。

騙す方法は、NetBSD/sparc64 FAQ を真似して nvedit

dev /packages/SUNW,builtin-drivers
: class010400
f 9 my-space + " config-b!" $call-parent class010100
;
device-end

というのを書いて、nvstoresetenv use-nvramrc? true してやればOK。

FAQのと違うのは class018000class010400 にしただけです。つまりRAID controller (010400) を普通のIDE controller (0101xx) であるかのように騙しています。(元の018000はOther mass storage controllerとのこと。)

あとOBPのforthに不慣れな人(自分)向けの注意点としては " config-b!" の最初の " の後のスペースを忘れないようにすることでしょうか。

これで、reset-all した後に show-devs で見ると /pci@1f,0/pci@5/ide@1 と騙されてくれて、boot もできるようになりました。

nvalias disk10 /pci@1f,0/pci@5/ide@1/disk@0,0
boot disk10

Solarisの場合はOBPを騙すとOS側にも影響が出るようですが、NetBSDの場合は最初から無関係に(RAID controllerではなく)ただのSerial ATA controllerとして扱うようなので問題ない(?)です。

なお、速度に関しては標準のATA66と変わらないので期待しない方が良いです。(PCIバスなのでしょうがない。)

どちらかというと、HDD故障などでいまさらATAのHDDを調達しなくても、どこの御家庭でも余っている(?)SATAのHDDを使いまわせるのが良いところでしょうか。

関係ないですが、ATA-SATA変換器(いくつか試した)経由でSATA SSDをオンボードIDEに繋いでもbootできなかったです。NetBSDから普通に読み書きはできるのですが。原因不明。