OpenBSD/sgi on octane2 - セカンダリCPUが動いた!

4/30に書いた時にはうまく動作していなかったセカンダリCPUだが、Linuxのコードと良く比較した所MPCONFのアクセス方法が違っている事に気づき、これを修正した所CPU1が起動する事を確認出来た。

具体的にはprom_boot_secondary()にて

paddr_t mpconf = PHYS_TO_XKPHYS(MPCONF_BASE, CCA_NC);

としていた所を

paddr_t mpconf = PHYS_TO_XKPHYS(MPCONF_BASE, CCA_COHERENT_EXCLWRITE);

と直した(XKPHYSノンキャッシャブル領域をXKPHYSコヒーレントエクスクルーシブライト領域に切り替えた)。

CPU自体は動いたので、いよいよMachineDependentな部分のSMP対応に取りかかろうと思う。
ちょっと試した限りでは、なんだかキャッシュコヒーレンスが取れていないような雰囲気があるので一筋縄では行かないのかもしれない。