[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
alignment on EOWRITE4(sc, EHCI_USBCMD, 0);
> 千葉市中央区長洲
> 藤原 誠
実は前回の PS3 は base.diff が当っていないものでした。
それと、日付は -D 2007-05-26-UTC のものでした。それで、
-D 2007-06-16 に base.diff を当てたものを作ったのですが、ど
うも同じところで止ります。次の中の ○ を付けた行です。
161bd0: 48 18 a4 51 bl 2ec020 <.usb_setup_reserve>
161bd4: 60 00 00 00 nop
161bd8: e9 7f 04 d8 ld r11,1240(r31)
161bdc: 81 3f 04 e8 lwz r9,1256(r31)
161be0: 38 00 00 00 li r0,0
○161be4: 7c 0b 49 2e stwx r0,r11,r9
161be8: 7c 00 06 ac eieio
161bec: 7c 00 04 ac sync
161bf0: 38 80 00 01 li r4,1
161bf4: 7f e3 fb 78 mr r3,r31
161bf8: 48 18 ae 39 bl 2eca30 <.usb_delay_ms>
それでこれは、おそらく sys/dev/usb/ehci.c の中の、381 行目
ではないかと思います。
376 usb_setup_reserve(sc, &sc->sc_dma_reserve, sc->sc_bus.dmatag,
377 USB_MEM_RESERVE);
378
379 /* Reset the controller */
380 DPRINTF(("%s: resetting\n", USBDEVNAME(sc->sc_bus.bdev)));
○ 381 EOWRITE4(sc, EHCI_USBCMD, 0); /* Halt controller */
382 usb_delay_ms(&sc->sc_bus, 1);
383 EOWRITE4(sc, EHCI_USBCMD, EHCI_CMD_HCRESET);
384 for (i = 0; i < 100; i++) {
385 usb_delay_ms(&sc->sc_bus, 1);
386 hcr = EOREAD4(sc, EHCI_USBCMD) & EHCI_CMD_HCRESET;
387 if (!hcr)
388 break;
389 }
ここで
#define EXC_ALI 0x0600 /* Alignment Interrupt */
が起きているようです。
また、ふかうみさんに教えてもらって
options DDB_COMMANDONENTER="trace;show registers"
も付けて見たのですが、画面から溢れてしまって r9, r11 は読めませ
んでした。
http://www.ki.nu/hardware/.ps3/image/IMG_7894.JPG
EOWRITE4(sc, EHCI_USBCMD, 0);
は、
#define EOWRITE4(sc, a, x) bus_space_write_4((sc)->iot, (sc)->ioh, (sc)->sc_offs+(a), (x))
とな成っていますが、
bus_space_write_4 って 64 bit 境界とは限らないのですよね ?
とりあえず、現状報告ということで。
---
(藤原)
────────────────
NetBSD 解説
http://www.ki.nu/software/NetBSD2/index.html