X-Git-Url: http://wien.tomnetworks.com/gitweb/?p=ppcskel.git;a=blobdiff_plain;f=ohci.c;h=699f4029c1dfdd8466389487cc3e245d235cd125;hp=899d474e24d989b3e558ef4431f3bd52cda410ce;hb=35579f80179a8d3b09c5edb074a1ef67aa6e327d;hpb=364f2c37f1b3a971f60bf67a7030c56b550b1407 diff --git a/ohci.c b/ohci.c index 899d474..699f402 100644 --- a/ohci.c +++ b/ohci.c @@ -48,6 +48,17 @@ void ohci_init() { * see output in ohci.default */ + /* disable hc interrupts */ + set32(OHCI0_HC_INT_DISABLE, OHCI_INTR_MIE); + + /* save fmInterval and calculate FSMPS */ +#define FSMP(fi) (0x7fff & ((6 * ((fi) - 210)) / 7)) +#define FI 0x2edf /* 12000 bits per frame (-1) */ + u32 fmint = read32(OHCI0_HC_FM_INTERVAL) & 0x3fff; + if(fmint != FI) + gecko_printf("ohci-- fminterval delta: %d\n", fmint - FI); + fmint |= FSMP (fmint) << 16; + /* enable interrupts of both usb host controllers */ set32(EHCI_CTL, EHCI_CTL_OH0INTE | EHCI_CTL_OH1INTE | 0xe0000); @@ -82,9 +93,10 @@ void ohci_init() { /* set periodicstart */ #define FIT (1<<31) u32 fmInterval = read32(OHCI0_HC_FM_INTERVAL) &0x3fff; + printf("OHCI0_HC_FMINTERVAL: %08X OCHI0_HC_FMINTERVAL&0x3fff: %08X\n", read32(OHCI0_HC_FM_INTERVAL), fmInterval); u32 fit = read32(OHCI0_HC_FM_INTERVAL) & FIT; - write32(OHCI0_HC_FM_INTERVAL, read32(OHCI0_HC_FM_INTERVAL) | (fit ^ FIT)); + write32(OHCI0_HC_FM_INTERVAL, fmint | (fit ^ FIT)); write32(OHCI0_HC_PERIODIC_START, ((9*fmInterval)/10)&0x3fff); /* testing bla */