[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