o あう、間違ってブレーカ断。Lib100 を 4ヶ月ぶりに再起動(普段電池をつけてない)。
o SCSI いじり。 ACK 幅の設定を忘れていて、一番短い設定の 25ns になっていた。 これは FAST SCSI (5〜10MB/s) のタイミング条件(30ns 以上)を満たさない…。 修正。10MB/s では 50ns 幅に設定。
sd0 からの読み出しを見てみると、ACK 幅は 48ns くらいになった。
これで Sun の HDD で固まらなくなった。ふう。 読み出し速度は最高 3.3MB/s、平均 2.7MB/s くらい。 DMA が 132MB/s て書いてある所をみると、速くする方法がある?
つうわけで汚いけど現状。 DualEdge なデバイスだとたぶんあぶない(仕様が分からん)ので、 データをフッ飛ばさないよう注意。
o うーん、なんかエラーに弱いな。
sd0(nsp0:0:4:0): reselection timeout cd0(nsp0:0:6:0): command timeout nsp0: ninja32_intr: unexpected bus phase: Bus Free sd0(nsp0:0:4:0): command timeout cd0(nsp0:0:6:0): command timeout sd0(nsp0:0:4:0): command timeout cd0(nsp0:0:6:0): command timeout sd0(nsp0:0:4:0): command timeout cd0(nsp0:0:6:0): command timeout sd0(nsp0:0:4:0): command timeout
つか、command timeout→バスリセット→SDTRネゴしなおし って書いたつもりなんだが動いてないな…(汗)。
o あ、不意に bus free になったときに変なことになるのかな?
o ターミネータ抜いたりしてテスト(ちょっと危険)。 うーん、エラーになった後の処理がうまくいかず固まっちゃうなあ…。
なんか構造的に問題があるような気がしてきた。 arbitration 中の cmd を別扱いにするか…。
o なんかちょっと安定したような気分。タイミングかな?
とりあえず変なことがあったらなんでも bus reset してみるテスト(おい)。 でもなんか固まっちゃうことがあるんだよなあ…。
o mycroft の人が com(4) のバグを直してくれたようなのでテスト。
つか feedback になってから1日経ってないのに reminder 送ってくるのはどうかと(苦笑)。
o SCSI いじり。ちょっとだけ整理。 ターゲットから SDTR 交換を始めた場合が怪しかったので修正。
0430 暑くて起きたらヒグラシが鳴いていた。
o イニシエータの転送速度が遅いのを調べる。 怪しいレジスタがあるが使い方分からないなあ…。
o む、近くの床屋が値上りしてるな…。
o 0457 キジバトがベランダに飛来して鳴く。ちょっとはええよ。
o CARDBUS_BASE0_REG は I/O でサイズは 128; CARDBUS_BASE1_REG はメモリでサイズは 4096。
I/O はレジスタ; メモリは後半(オフセット 2048)にレジスタが見える (←てけとーに漁って見付けた(笑))。 というわけでメモリの方を先に試して、次に I/O の方を使うようにしてみた(つもり)。
o bus_space(9) で空間内のオフセット部分は handle だけで完結しているようで、 bus_space_subregion() で作った handle は後で解放したりする必要はない(しちゃだめ)らしい。
o 2.0G な sparc64 でテストしようと思って、未使用だった(開封はしていた) PCI-CardBus ブリッジのボードを装着。
cbb0 at pci0 dev 4 function 0pccbb_attach_hook: OF_mapintr failed : Ricoh 5C475 PCI-CardBus bridge (rev. 0x80) cbb0: NOT USED because of unconfigured interrupt
動かないやん(泣)。
ずいぶんしのぎやすくなった。30℃超えてるが。
o petrov の人が NOT USED あたりをコメントアウトして無視してみそ と言うので試す。
cbb0 at pci0 dev 4 function 0pccbb_attach_hook: OF_mapintr failed : Ricoh 5C475 PCI-CardBus bridge (rev. 0x80) OF_mapintr failed cbb0: interrupting at ivec 7d8 cardslot0 at cbb0 slot 0 flags 0 cardbus0 at cardslot0: bus 1 device 0 pcmcia0 at cardslot0 : nsp0 at cardbus0 dev 0 function 0: Workbit NinjaSCSI-32UDE DualEdge SCSI adapter nsp0: memory space mapped nsp0: interrupting at 0 nsp0: revision 0x54, master clock: 40MHz scsibus1 at nsp0: 8 targets, 8 luns per target scsibus1: waiting 2 seconds for devices to settle... sd2 at scsibus1 target 4 lun 0: <SEAGATE, ST11200N SUN1.05, 9500> disk fixed sd2: 1005 MB, 1872 cyl, 15 head, 73 sec, 512 bytes/sect x 2059140 sectors sd2: sync (100.00ns offset 15), 8-bit (10.000MB/s) transfers, tagged queueing cd1 at scsibus1 target 6 lun 0: <PIONEER, CD-ROM DR-U24X, 1.01> cdrom removable cd1: sync (100.00ns offset 8), 8-bit (10.000MB/s) transfers
sparc64 でもあっさり動いちゃった。つまらん(ぉぃ)。
o で、やかましいから shutdown しようと思ったら panic していた…。
panic: lockmgr: no context kdb breakpoint at 134b58c Stopped at netbsd:cpu_Debugger+0x4: nop db> t lockmgr(1847f88, 0, 0, 0, 0, 0) at netbsd:lockmgr+0x1d4 uvmfault_lookup(e0017a30, 0, 0, 0, 0, 0) at netbsd:uvmfault_lookup+0x1a0 uvm_fault(1847f80, 0, 2, 2, 0, 0) at netbsd:uvm_fault+0x70 data_access_fault(e0017c30, 30, 121dd10, 0, 8, 80080d) at netbsd:data_access_fault+0x3e0 ?(1813060, 66901, 3ebb300, 2, 0, 1) at 0x100871c softclock(e0017ed0, 0, e0017ed0, 4, 121dcac, 4) at netbsd:softclock+0x240 sparc64_ipi_flush_all(0, 0, 139f81c, 0, ffffffffffffffff, 0) at netbsd:sparc64_ipi_flush_all+0x238 db>
o 0520 ベランダでキジバト鳴きまくり。
o 0645 発。0659 着。でも某投票所じゃ2番だった(苦笑)。 投票箱が空であることの確認(1番の人が確認&署名)・封印イベントを見物しつつ、 用紙をよく確認して(ぉぃ)投票。
スーパーに寄り道して帰る。0745。
o イニシエータが ATN を立てて Message Out のメッセージをいくつか送っている途中に、 ターゲットが Message In にして返事をすることはアリらしいのでちょっとだけ実装。 中身無いけど(おい)。
つか、AutoSCSI で自動で Message Out を実行させるときは、どこまで送ったのかどうやって調べるんだ…。
というわけで(?)、今の所こんな感じ。
o そして猫もいなくなった。 合掌。
o detach まわりとデバッグコードいじり。
KNF ではキャストの後にスペース入れないらしいので取ったり。
o 昨日すげえ眠かったので早く寝たら早く目が覚めたので寝直し。
o Indexed register の怪しげな所に 0xff を書いて読んでみたら、 0x17=0x7 0x18=0x7 0x19=0x8f 0x1a=0x8f 0x1b=0x8f 0x20=0x8f 0x21=0x8f 0x22=0x8f 0x23=0x8f 0x24=0x8f 0x25=0x8f 0x26=0x8f 0x27=0x8f てな感じだった(デフォルトは全部 0)。 よく分からんが転送が遅いのはこのへんでは直らなさそうな気分。
o prom console から sab(4) に切り替えるとき、prom 側に残ったまま切り替わってしまうんかな。
OpenPROM の stdout を flush する方法は無いのか?
ニセが忙しかった。
o IPA フォント。GRASS にくっつけるというややこしい条件。
アーカイブを拾ってみたが、ソースも GPL の文書も付いていないな…(笑)。
o
SCSI いじり。
試しに同期転送の周期を 250ns 設定(sc->sc_sync_max = 9
)してみると
375ns くらいになる。むむ?
というわけで心当たりを見直したらバグ発見(汗)。 100ns 周期になった。
ついでに Ultra SCSI なデバイスでも試してみた。これは Barracuda ATA に ATA-SCSI 変換をかませたもの。
sd0 at scsibus0 target 5 lun 0: <SEAGATE, ST340810A, 1.06> disk fixed sd0: 38166 MB, 77545 cyl, 16 head, 63 sec, 512 bytes/sect x 78165360 sectors sd0: sync (50.00ns offset 15), 8-bit (20.000MB/s) transfers
あんまりきれいじゃないけど最短 50ns 周期くらい?
o 夕方に曇が出てきたのでちょっとお出掛け。
o Windows のドライバの .inf ファイルを見たりして NinjaSCSI らしいデバイスの ID を調べる。 DualEdge が使えるインタフェースのリストに載ってるのは 32UDE に違いない (LHA-6000UL, LHA-6000S てのは見当たらないが…)。
# if product name vendor product chip speed CardBus IODATA CBSCII 0x10FC 0x0005 32Bi 20MB/s Duo (CBSCII, CBSCIIA, CBSCIIF) PCI IODATA SC-NBD 0x1145 0xF010 32UDE 20MB/s DE (SC-NBD, SC-NBDA) CardBus BUFFALO IFC-USCB2 0x1145 0x8009 32UDE 20MB/s DE PCI BUFFALO IFC-USLP 0x1145 0xF015 32UDE 20MB/s DE PCI LOGITEC LHA-600U 0x1145 0xF012? 32UDE 20MB/s DE PCI LOGITEC LHA-600S 0x1145 0xF013? 32UDE 20MB/s DE CardBus LOGITEC LPM-SCSI3D 0x1145 0x8007 32Bi 20MB/s Duo CardBus LOGITEC LPM-SCSI3EH 0x1145 0x8009 32UDE 20MB/s DE CardBus KME KXL-820AN 0x1145 0x8007 32Bi ??MB/s Duo CardBus KME KXL-RW10AN 0x1145 0xF007 32Bi ??MB/s Duo CardBus HP CD-Writer Plus M820e 0x1145 0xF007 32Bi ??MB/s Duo CardBus RICOH MP8040SE 0x1145 0xF007 32Bi ??MB/s Duo
なんか vendor/product がいっぱいあっていやん。
LHA-600U と LHA-600S は同じドライバに 2つ書いてあったので、どっちがどっちか分からん。
LOGITEC LPM-SCSI3EH の .inf ファイルには DuoSCSI なんて文字列があるので Bi かと思ったが、実は BUFFALO IFC-USCB2 (手許にあるもの)と同じで 32UDE らしい。
九州松下(当時)のやつは FAST SCSI (10MB/s) としか書いてないけど、 わざわざオシレータ変えるとは思えないから CardBus モードでは 20MB/s なんかなあ…。
o Ultra SCSI なデバイスでも、テストに使っている PC では 4MB/s くらいしか出ない。 試しに SPARC Ultra につないでみたら 12MB/s くらい出た。本体側の性能か…。
o なんとなく product ID の 0x8xxx は Workbit が自分で使って、0xFxxx は OEM な気がしてきた。
o 健康診断でひっかかった(汗)。
o 久しぶりの雨だ。
o 私も最近まで知らなかったので1番を狙ってみたのですが、負けました(笑)。
o DuoSCSI (NinjaSCSI-32Bi) のテストのために I-O DATA の CBSCII を借りてきた。とりあえずデバドラ無しで挿してみる。
PCMCIA モード:
pcmcia1: CIS version PCMCIA 2.0 or 2.1 pcmcia1: CIS info: IO DATA, CBSC16 , 1 pcmcia1: Manufacturer code 0xffffffff, product 0xffffffff pcmcia1: function 0: unspecified, ccr addr 200 mask 1 pcmcia1: function 0, config table entry 1: I/O card; irq mask efff; iomask 4, iospace 0-f; memspace 0-fff; io8 io16 irqlevel IO DATA, CBSC16 , 1 (manufacturer 0xffffffff, product 0xffffffff) at pcmcia1, function 0 not configured
CardBus モード(変な文字があるので messages を vis で変換):
IO DATA, CBSC32 , 1, \M^? (manufacturer 0x0, product 0x0) I-O Data Device product 0x0005 (SCSI mass storage, revision 0x01) at cardbus1 dev 0 function 0 not configured
o んでデバドラを試す。艦長、割込みが全く来ません!
o
Bi だと auto param を開始したあと、
NINJA32_REG_ARBITRATION_STAT
が
0x08 のまま変わらない。Arbitration が始まらない?
o ふと思う所があって、auto param を使わない方法を試してみる。 ……なんとなく動いたっ。またかよ。
ということで auto param ってほとんど使えなさそう…。 実は、データシートが置いてないのは、errata 多す(検閲削除)?
o auto param を使わないようにして、CBSCII も動くようになった。 ロジアナで転送速度を見てみると、これもクロック 40MHz でいいようだ。
nsp0 at cardbus0 dev 0 function 0: Workbit NinjaSCSI-32 SCSI adapter nsp0: memory space mapped nsp0: interrupting at 10 nsp0: NJSC-32Bi, G/A rev 0x51, clk 40MHz scsibus0 at nsp0: 8 targets, 8 luns per target scsibus0: waiting 2 seconds for devices to settle... sd0 at scsibus0 target 4 lun 0: <SEAGATE, ST11200N SUN1.05, 9500> disk fixed sd0: 1005 MB, 1872 cyl, 15 head, 73 sec, 512 bytes/sect x 2059140 sectors sd0: sync (100.00ns offset 15), 8-bit (10.000MB/s) transfers, tagged queueing cd0 at scsibus0 target 6 lun 0: <PIONEER, CD-ROM DR-U24X, 1.01> cdrom removable cd0: sync (100.00ns offset 8), 8-bit (10.000MB/s) transfers
というわけでこんな感じに。
o I-O DATA CBSCII のケーブル。CardBus カード側がヒロセの 25pin; デバイス側がピン型の 50pin 高密度コネクタ。形が同じなのに IFC-IBCS2 や REX9530 の結線と全く違う…。
card dev 信号 1 38 TERMPWR 2 44 -ACK 3 17 GND 4 49 -REQ 5 25 GND 6 50 -I/O 7 48 -C/D 8 47 -SEL 9 46 -MSG 10 45 -RST 11 43 -BSY 12 41 -ATN 13 21 GND 14 34 -DBP 15 33 -DB7 16 32 -DB6 17 9 GND 18 31 -DB5 19 30 -DB4 20 29 -DB3 21 5 GND 22 28 -DB2 23 27 -DB1 24 26 -DB0 25 1 GND
o tlp at cardbus で resume 時に panic てのを直したよとゆーてきたのでテストのために Lib100 を再起動。これで直るね。
o 32Bi を sparc64 で使っていると、時々 Message Out (?)で落ちる。 デバイスが反応しないタイミングか何かかなあ(i386だとデバイスが反応しないとオール 1 なビットパタンが見えるだけ)。
scsibus1: waiting 2 seconds for devices to settle... sd2 at scsibus1 target 4 lun 0: <SEAGATE, ST11200N SUN1.05, 9500> disk fixed sd2: 1005 MB, 1872 cyl, 15 head, 73 sec, 512 bytes/sect x 2059140 sectors data error type 32 sfsr=11081d sfva=ffffffffffffbf70 afsr=80200000 afva=1ff80201810 tf=0xe0017910 data fault: pc=10f831c addr=ffffffffffffbf70 sfsr=11081d<ASI=11,ASI,PRIV,W,OW> kernel trap 32: data access error Stopped at netbsd:ninja32_wait_req_negate+0x24: and %g1, 0x20, %g1 db>
trace を見ると、
ninja32_msgout ninja32_intr+0x400 pccbbintr_function+0x64 pccbbintr+0x58 sparc64_ipi_flush_all+0x238 ninja32_start+0xf0
って、なんで splbio() 中のはずの ninja32_start() で割込み食らうんだ? ninja32_start()→callout_reset() で splsched()/splx() の splx() あたりで割込みを食らっているような気が。謎。
o よく分からんが、Message Out を Message In と同じように 1バイトずつ処理するようにしたら、 変なタイミングで割込みが来なくなったのか、落ちなくなった気がする。 なんか気難しいデバイスやなあ…。
o というわけで日刊 NinjaSCSI-32。 32Bi のカードはもう返すつもりなのでテストよろしく(ぉぃ)。
o DuoSCSI は返してきた。
o NinjaSCSI-32 のドライバは NinjaSCSI の PCI/CardBus のやつだから nsp て名前にしたけど、FreeBSD の ISA/PCMCIA なやつが nsp らしいから別の名前にした方がいいかな…。
o nsp→njs にしてみた。man ページをちょっと書いてみた。
o というわけでテストよろしく〜。
o ニセ。なんか謎な仕事が降ってきそうな悪寒。
o 1227 ベランダに小鳥が飛来して澄んだ声でさえずり。 網戸ごしなので色はよく分からない。のどをふくらませては鳴いていた。 撮影しようとしたらもういなかった。
鳴き声からアオジっぽいのだが、この辺りではアオジは冬鳥だからホオジロかなあ (←結局よく分からない)。
o target の電源を OFF/ON したときに initiator 側からネゴし直すの忘れていた。 いちおう timeout → bus reset 経由で復活はするけど。 scsipi が Request Sense を発行するときにもネゴするように修正。
arbitration 中の state を追加してちょいと簡単に。