MIPS

OpenBSD/sgi on octane2 - cpu_info_primaryへの参照をcpu_info[]への参照に書き換え

mplockの問題が解決したので、SMP非対応な部分の書き換えに進もうと思う。 以前一息に実装してバグがとりきれなかった時のコードが残っているので、これをちょっとずつ適用しながら前に進める。まず、arch/mips64/include/cpu.hをSMP対応出来るように書き換…

OpenBSD/sgi on octane2 - mplock周りで落ちるバグについて#4

これでどや。 void sched_exit(struct proc *p) { struct schedstate_percpu *spc = &curcpu()->ci_schedstate; struct timeval tv; struct proc *idle; int s; microuptime(&tv); timersub(&tv, &spc->spc_runtime, &tv); timeradd(&p->p_rtime, &tv, &p->p…

OpenBSD/sgi on octane2 - mplock周りで落ちるバグについて#3

その後KERNEL_PROC_LOCK(p)/KERNEL_PROC_UNLOCK(p)を追ってみた所、kern/init_main.c:start_init()の以下の場所でlockされていないのにunlockしているからエラーが出るらしい事がわかった: if ((error = sys_execve(p, &args, retval)) == 0) { KERNEL_PRO…

OpenBSD/sgi on octane2 - mplock周りで落ちるバグについて#2

しかたがないので追っかけてみる事にした。 mplock.hを追っかけやすいようにデバッグprint追加: static __inline void __mp_lock_init(struct __mp_lock *lock) { asm volatile("nop;nop;nop;"); extern int printf(const char *, ...) __attribute__((__fo…

OpenBSD/sgi on octane2 - mplock周りで落ちるバグについて

__cpu_simple_lock後にきちんとロックされているか確かめるコードを念の為書いて走らせてみた。 が、そこは問題ないようである。こんなん: //#if defined(MP_LOCKDEBUG) #ifndef DDB #error "MP_LOCKDEBUG requires DDB" #endif extern void Debugger(void)…

OpenBSD/sgi on octane2 - kernel diagnostic assertion "__mp_lock_held(&sched_lock) == 0" failed

MP_LOCKDEBUGを外したら、今度はこんなんでましたけど。 >> bootp()192.168.3.1:bsd Setting $netaddr to 192.168.3.2 (from server ) Obtaining bsd from server 5889104+492712 entry: 0xa800000020020000 ARCS64 Firmware Version 64.0 Found SGI-IP30, s…

OpenBSD/sgi on octane2 - releasing not locked lock

__cpu_simple_lock_tryのバグを直したら、今度はこんなんでましたけど。 Command Monitor. Type "exit" to return to the menu. >> bootp()192.168.3.1:bsd Setting $netaddr to 192.168.3.2 (from server ) Obtaining bsd from server 5889472+492712 entry…

OpenBSD/sgi on octane2 - __cpu_simple_lock_tryのバグ

__cpu_simple_lock_try()でoldとnewが両方ともv0にコンパイルされちまってるよ、"=r"を"=&r"に書き換えると直るよ、とエラい人に教えてもらった。まじかよ。って事で早速ダンプを取ってみた。__cpu_simple_lock_try()はinline関数だから、展開先を作ってあげ…

OpenBSD/sgi on octane2 - option MULTIPROCESSORでの起動

一気にSMP実装を進めた所、どこにバグが有るのかさっぱり分からなくなって一度すべて元に戻した経緯が有る為、慎重に書き換えを行う事にしている。まずはコンフィグレーションファイルにて、 option MULTIPROCESSORを有効にし、cpuの定義は cpu0 at mainbus0…

OpenBSD/sgi on octane2 - timeout delayed

ユーザランドを起こす所でoption DEBUGを有効にしているとtimeout delayedというエラーが表示され、ユーザランドが動かない。 タイマ周りに何か問題があるように思うが、何が原因だろうか? System Maintenance Menu 1) Start System 2) Install System Soft…

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

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

OpenBSD/sgi on octane2 - セカンダリCPUの起動とMPCONFについて

Linux(+RACER対応パッチ)のソースコードを読むと、セカンダリプロセッサ起動のルーチンは以下のように実装されている: /* arch/mips/sgi-ip30/ip30-smp.c */ void prom_boot_secondary(int cpu, struct task_struct *idle) { int pcpu=cpu_logical_map(c…

OpenBSD/sgi on octane2 minirootからの起動#2

OpenBSD/sgi on octane2 - minirootからの起動 - かーねる・う゛いえむにっきの続き前回手計算で色々コマンド叩いてminirootをカーネルに埋め込んでたが、超めんどいのでシェルスクリプトにした。 #!/usr/local/bin/bash VADDR=0xa800000020020000 OFF=0x100…

Linux/mipsに於けるsmp_processor_id()の謎

Linuxのsmp_processor_id()がどう実装されているか調べてみた。 include/linux/smp.h # define smp_processor_id() raw_smp_processor_id() include/asm-mips/smp.h #define raw_smp_processor_id() (current_thread_info()->cpu) include/asm-mips/thread_i…

Android on octane2?

組み込みネット - 組み込みシステム開発にたずさわるエンジニアの方々や,ビジネス・パーソンの方々を支援するWebサイト / CQ出版株式会社 という訳だから、君はoctane2でDual MIPSなAndroidを作ったらどうかねwww と会社の人に言われた。 Android/sgiの需…

OpenBSD/sgi on octane2 - ダメだ・・・。

ひと思いにlocore書き換え過ぎたらデバッガも上がらんしprintfも動かん。 結局全部元に戻して一つづつやり直すしかあるまいな・・・。 octaneにもICEホシイヨ・・・・

OpenBSD/sgi on octane2 - TLBとARCBIOS

sys/arch/sgi/sgi/machdep.cより。 tlbをフラッシュしてしまうとARCBIOSにアクセス出来なくなるかもしれない、という事のようだ。 /* * Last chance to call the BIOS. Wiping the TLB means the BIOS' data * areas are demapped on most systems. O2s are …

OpenBSD/sgi on octane2 - SMP化についての考察

未だ未だまともに動いてくれてはいないのだが、一応ユーザランドが起動していてドライバさえ直ればマルチユーザモードで起動してきそうな雰囲気なので、OpenBSD/sgiのSMP化に取り掛かろうと思う。OpenBSD/sgiをSMP化するにあたってやらなければいけない事を…

OpenBSD/sgi on octane2 - ttreadで止まる

前回最後の方に書いた問題だが、結局VFS経由でスペシャルデバイスのreadがかかり、最終的にttreadへ達している事が分かった。 標準入力(=シリアルコンソールの入力)とみて間違いなさそう。 また、これも前回書いた通りだが、シリアルデバイスからの割り込…

OpenBSD/sgi on octane2 - minirootからの起動

HDDにルートファイルシステムをセットアップする方法が確保出来そうにないし、そもそもSCSIが動いているかどうかも分からないので、まずはminiroot(ramdisk)から起動させる事にした。 が、ramdiskの作り方が分からない。おまけにcurrentのユーザランドはク…

sillicon graphics octane2を触ってみたよ(OpenBSD起動編その2)

途中でコケてたのは、comドライバに渡すbaseアドレスがコンフィグファイル上で未指定だったから。 これでデバイスの初期化はできたぞい。書き忘れてたが、カーネルは当然currentだ。cvs upで更新して最新のものを使ってる。 奇特にも、Octane対応を進めてる…

sillicon graphics octane2を触ってみたよ(OpenBSD起動編)

やった、この子はやれば出来る子( ̄ー ̄)ニヤリッ Diagnostics failed. [Press any key to continue.] System Maintenance Menu 1) Start System 2) Install System Software 3) Run Diagnostics 4) Recover System 5) Enter Command Monitor Option? 5 Command …

MIPS ABI 再びまとめ

Support Home Page 重要な所だけ一部抜粋。 ----------------------------------------------------------------- Category O32 n64 n32 ----------------------------------------------------------------- Command Line Switch -32 -64 -n32 Supported IS…

sillicon graphics octane2を触ってみたよ(irix起動編)

SCSIなCD-ROMドライブを接続し、IRIXをCDインストール、起動してみた。 おまけ Linuxも起動してる。 arcloadも起動する。

sillicon graphics octane2の仕様(PROM編)

octane2のファームウェア(PROM)は、ARC firmware environmentを独自拡張したもの。 詳細はARC - LinuxMIPSに書いてある通りだが、オリジナルの規格に対し Big Endian化 64bit化 SCSI IDの違いとか、一部の環境変数の追加とか、APIナンバーの違いとか など…

sillicon graphics octane2を触ってみたよ(ディスプレイコネクタ、IRIXメディア、HDD入手)

13W3→RGB15変換コネクタとIRIXのインストールメディア、HDDを入手したので、ネットワークインストールでIRIXが動くか試してみた。ここら辺あたりを参考にしてFreeBSDマシンをサーバにしネットワークインストールをこころみた: http://www.nekochan.net/wiki…

sillicon graphics octane2を触ってみたよ。(PROM write error on cachelineの件)

あれは、ここでかかれているバグと同じ: http://bugs.gentoo.org/171500よーは、PROMのバージョンによって挙動が違うからカーネルが初期化に失敗してるんじゃないかなぁ。より新しいバージョンのカーネルではあのメッセージが出ない事を確認した。が、シリ…

昨日の続き。

本当はメモリ壊れてなかったんだが、勢いあまってメインボードを取り出し、メモリを取り外してしまった。 せっかくやったので、写真を撮ってみた。 裏側から、メインボードを引っ張り出せる仕組みになってるらしい。 しゃきーん。 抜いてるところ。 抜けた。…

sillicon graphics octane2を触ってみたよ。(起動編)

sillicon graphics octane2を触る機会を(≒機械を)得たので、早速いじくってみた。まず、電源をコンセントに刺す事は出来たのだが、ビデオの端子形状が違うのでディスプレイをつなぐ事が出来ない。orz 秋葉に行けば変換売ってるの知ってるけど、ここにはシ…

PSPのCPU

PSP - LinuxMIPS Some basic specs of the PSP: * two MIPS32R2 cores with no TLB * 128bit Bus * 1 - 333MHz @ 1.2V (currently capped at 222MHz (The 222MHZ cap is software based and lies in the executed files, it is not firmware based so is eas…