[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: CS12 and irq (Re: MGL2 update)



鈴木(康)です。
<200002100353.MAA11964@ninja.hpc.bs1.fc.nec.co.jp>の記事において
suz@hpc.bs1.fc.nec.co.jpさんは書きました。
  |   | 
  |   | こんなふうにして また使えるようになったのですが、
  |   | 今 polling しないといけないのはなぜなんでしょうか?
  | 
いろいろ やってみて、トンチンカンなことを
言っていたのがわかりました。

---

ISA 側の IRQ を 15 14 11 9 5 4 とやってみると

wd0: drive supports 1-sector pio transfers, lba addressing
wd0: 64512 KB, 1008 cyl, 4 head, 32 sec, 512 bytes/sect x 129024 sectors
boot device: wd0
root on wd0a dumps on wd0b
isa_intr_alloc:......................|.........
pcmcia0: card irq 9
wdc0:0:0: lost interrupt
        type: ata
        c_bcount: 512
        c_skip: 0

かならず、interrupt が lost すると出ます。
# ちなみに 2 と 0 は、isa 側ではねられて
# ISA IRQ 15 -> GPIO port 31 になってしまいますね。

wd0: drive supports 1-sector pio transfers, lba addressing
wd0: 64512 KB, 1008 cyl, 4 head, 32 sec, 512 bytes/sect x 129024 sectors

ところが、3 の場合は、ここでダンマリ。
boot device: が出ない!

ここで カードを抜いてみると ...
boot device: wd0
root on wd0a dumps on wd0b
isa_intr_alloc:............................|...
pcmcia0: card irq 3
wd0 detached
wdc0 detached
trap: TLB miss (load or instr. fetch) in kernel mode

こんなふうに先にすすみます。
すぐ TLB miss になっちゃいますが....

-----

いろいろやった末、次の仮説を立てました。

1) irq 0x00090003 は正しい。

2) 正常系で なにか処理が足りず 

kern/init_main.c での次のところがクリアできない。

        while (config_pending)
                (void) tsleep((void *)&config_pending, PWAIT, "cfpend", 0);

3) lost した場合は、エラー処理が正しいので、最終的に boot device: が出る。

どうでしょう。
# またトンチンカンだったらすいません。

--
					鈴木 康司 @NEC
					suz@hpc.bs1.fc.nec.co.jp
					TEL 0423-33-5381