2009-10-16 STR9105その6 - PCI config register
PCI config base address register に write しても書けなかったのは、PCI tag の作り方が間違ってたからというアホなミスだった。
データシートに
31 | RW | Enable |
30:24 | RW | Reserved |
23:16 | RW | Bus number |
15:11 | RW | Device number |
10:8 | RW | Function number |
7:2 | RW | Register number |
1:0 | RW | Reserved |
と書いてあったので、思わず
bus_space_write_4(sc->sc_iot, sc->sc_ioh_addr, 0, 0x80000000 | tag | (reg << 2));
としてしまったのですよ。
本当はレジスタは4の倍数しか受けつけないというだけなので
bus_space_write_4(sc->sc_iot, sc->sc_ioh_addr, 0, 0x80000000 | tag | reg);
が正解。今は後悔している。
上のバグコードでも register 0 の PCI vendor/PCI product は正常に読めてしまうので気づくのに時間がかかった…
よく見たら以前の PCI_CONFIG_DUMP の値がめちゃくちゃだな。ここで気づけよ>俺
というわけで修正するとpci deviceのattachまで来た。
: starpci0 at star0 addr 0xa0000000-0xa0000003 irq 8: PCI Host Bridge pci0 at starpci0 unknown vendor 0xeeee product 0x0000 (undefined subclass 0x00) at pci0 dev 0 function 0: PCI configuration registers: Common header: 0x00: 0x0000eeee 0x04000147 0xff000000 0x0000ff04 Vendor ID: 0xeeee Device ID: 0x0000 Command register: 0x0147 I/O space accesses: on Memory space accesses: on Bus mastering: on Special cycles: off MWI transactions: off Palette snooping: off Parity error checking: on Address/data stepping: off System error (SERR): on Fast back-to-back transactions: off Interrupt disable: off Status register: 0x0400 Capability List support: off 66 MHz capable: off User Definable Features (UDF) support: off Fast back-to-back capable: off Data parity error detected: off DEVSEL timing: slow (0x2) Slave signaled Target Abort: off Master received Target Abort: off Master received Master Abort: off Asserted System Error (SERR): off Parity error detected: off Class Name: undefined (0xff) Subclass ID: 0x00 Interface: 0x00 Revision ID: 0x00 BIST: 0x00 Header Type: 0x00 (0x00) Latency Timer: 0xff Cache Line Size: 0x04 Type 0 ("normal" device) header: 0x10: 0x00000000 0xa8000001 0x00000000 0x00000000 0x20: 0x00000000 0x00000000 0x00000000 0x0000eeee 0x30: 0x00000000 0x00000000 0x00000000 0x00000000 Base address register at 0x10 not implemented(?) Base address register at 0x14 type: 32-bit i/o base: 0xa8000000, size: 0x01000000 Base address register at 0x18 not implemented(?) Base address register at 0x1c not implemented(?) Base address register at 0x20 not implemented(?) Base address register at 0x24 not implemented(?) Cardbus CIS Pointer: 0x00000000 Subsystem vendor ID: 0xeeee Subsystem ID: 0x0000 Expansion ROM Base Address: 0x00000000 Reserved @ 0x34: 0x00000000 Reserved @ 0x38: 0x00000000 Maximum Latency: 0x00 Minimum Grant: 0x00 Interrupt pin: 0x00 (none) Interrupt line: 0x00 Device-dependent header: 0x40: 0x00000000 0x00000000 0x00000000 0x00000000 0x50: 0x00000000 0x00000000 0x00000000 0x00000000 0x60: 0x00000000 0x00000000 0x00000000 0x00000000 0x70: 0x00000000 0x00000000 0x00000000 0x00000000 0x80: 0x00000000 0x00000000 0x00000000 0x00000000 0x90: 0x00000000 0x00000000 0x00000000 0x00000000 0xa0: 0x00000000 0x00000000 0x00000000 0x00000000 0xb0: 0x00000000 0x00000000 0x00000000 0x00000000 0xc0: 0x00000000 0x00000000 0x00000000 0x00000000 0xd0: 0x00000000 0x00000000 0x00000000 0x00000000 0xe0: 0x00000000 0x00000000 0x00000000 0x00000000 0xf0: 0x00000000 0x00000000 0x00000000 0x00000000 Don't know how to pretty-print device-dependent header. unknown vendor 0xeeee product 0x0000 (undefined subclass 0x00) at pci0 dev 0 function 0 (intrswiz 0, intrpin 0, i/o on, mem on, no quirks) not configured ral0 at pci0 dev 2 function 0: PCI configuration registers: Common header: 0x00: 0x03021814 0x04100147 0x02800000 0x0000ff04 Vendor Name: Ralink Technologies (0x1814) Device Name: RT2561 802.11b/g (0x0302) Command register: 0x0147 I/O space accesses: on Memory space accesses: on Bus mastering: on Special cycles: off MWI transactions: off Palette snooping: off Parity error checking: on Address/data stepping: off System error (SERR): on Fast back-to-back transactions: off Interrupt disable: off Status register: 0x0410 Capability List support: on 66 MHz capable: off User Definable Features (UDF) support: off Fast back-to-back capable: off Data parity error detected: off DEVSEL timing: slow (0x2) Slave signaled Target Abort: off Master received Target Abort: off Master received Master Abort: off Asserted System Error (SERR): off Parity error detected: off Class Name: network (0x02) Subclass Name: miscellaneous (0x80) Interface: 0x00 Revision ID: 0x00 BIST: 0x00 Header Type: 0x00 (0x00) Latency Timer: 0xff Cache Line Size: 0x04 Type 0 ("normal" device) header: 0x10: 0xb0000000 0x00000000 0x00000000 0x00000000 0x20: 0x00000000 0x00000000 0x00000601 0x922116ef 0x30: 0x00000000 0x00000040 0x00000000 0x00000100 Base address register at 0x10 type: 32-bit nonprefetchable memory base: 0xb0000000, size: 0x00008000 Base address register at 0x14 not implemented(?) Base address register at 0x18 not implemented(?) Base address register at 0x1c not implemented(?) Base address register at 0x20 not implemented(?) Base address register at 0x24 not implemented(?) Cardbus CIS Pointer: 0x00000601 Subsystem vendor ID: 0x16ef Subsystem ID: 0x9221 Expansion ROM Base Address: 0x00000000 Capability list pointer: 0x40 Reserved @ 0x38: 0x00000000 Maximum Latency: 0x00 Minimum Grant: 0x00 Interrupt pin: 0x01 (pin A) Interrupt line: 0x00 Capability register at 0x40 type: 0x01 (Power Management, rev. 1.0) PCI Power Management Capabilities Register Capabilities register: 0x0002 Version: 1.1 PME# clock: off Device specific initialization: off 3.3V auxiliary current: self-powered D1 power management state support: off D2 power management state support: off PME# support: 0x00 Control/status register: 0x0000 Power state: D0 PCI Express reserved: off No soft reset: off PME# assertion disabled PME# status: off Device-dependent header: 0x40: 0x00020001 0x00000000 0x00000000 0x00000000 0x50: 0x00000000 0x00000000 0x00000000 0x00000000 0x60: 0x00000000 0x00000000 0x00000000 0x00000000 0x70: 0x00000000 0x00000000 0x00000000 0x00000000 0x80: 0x00000000 0x00000000 0x00000000 0x00000000 0x90: 0x00000000 0x00000000 0x00000000 0x00000000 0xa0: 0x00000000 0x00000000 0x00000000 0x00000000 0xb0: 0x00000000 0x00000000 0x00000000 0x00000000 0xc0: 0x00000000 0x00000000 0x00000000 0x00000000 0xd0: 0x00000000 0x00000000 0x00000000 0x00000000 0xe0: 0x00000000 0x00000000 0x00000000 0x00000000 0xf0: 0x00000000 0x00000000 0x00000000 0x00000000 Don't know how to pretty-print device-dependent header. Ralink Technologies RT2561 802.11b/g (miscellaneous network) at ? dev 2 function 0 (intrswiz 0, intrpin 0x1, i/o on, mem on, no quirks): Ralink Technologies RT2561 802.11b/g (rev. 0x00) ral0: interrupting at pin 1 ral0: 802.11 address 00:d0:41:b0:ff:32 ral0: MAC/BBP RT2561C, RF RT2527 ral0: 11b rates: 1Mbps 2Mbps 5.5Mbps 11Mbps ral0: 11g rates: 1Mbps 2Mbps 5.5Mbps 11Mbps 6Mbps 9Mbps 12Mbps 18Mbps 24Mbps 36Mbps 48Mbps 54Mbps ~#Stopped in pid 0.1 (system) at netbsd:cpu_Debugger+0x4: mov r15, r14 db> bt netbsd:comintr+0x10 scp=0xc001bb94 rlv=0xc019f2dc (netbsd:star_intr_dispatch+0x134) rsp=0xc03d8f08 rfp=0xc03d8f34 r10=0xfffffbff r9=0xc03015e8 r8=0x00000400 r7=0x00000100 r6=0xc1114fe0 r5=0xc03d8f38 r4=0xa00000d3 netbsd:star_intr_dispatch+0x10 scp=0xc019f1b8 rlv=0xc00c6770 (netbsd:irq_entry+0x70) rsp=0xc03d8f38 rfp=0xc03d8f9c r10=0xc03015e8 r9=0x000368b8 r8=0x00000000 r7=0x000368b8 r6=0x00000000 r5=0x00000002 r4=0xc03015e8 netbsd:cpu_configure+0x10 scp=0xc000c3fc rlv=0xc00a9b9c (netbsd:main+0x180) rsp=0xc03d8fa0 rfp=0xc03d8fec r4=0x20008134 netbsd:main+0x10 scp=0xc00a9a2c rlv=0xc0008220 (netbsd:kernel_text+0x3c) rsp=0xc03d8ff0 rfp=0xc03d8ffc r10=0x00000000 r9=0x000368b8 r8=0x00000000 r7=0x000368b8 r6=0x0003661c r5=0x00000002 r4=0x20008134 netbsd:kernel_text+0x3c scp=0xc0008220 rlv=0xc019fc14 (netbsd:initarm+0x794) rsp=0xc03d9000 rfp=0x00000000 db>
ral0 を attach した直後で止まった。PCIの割り込みまわりっぽいな。
EOF