killed the ohci_init FM_INTERVAL fail
[ppcskel.git] / irq.c
diff --git a/irq.c b/irq.c
index 1c5902b6de6f34af6700e3254f4452e7188b94b9..449a85c34a1e43f861f82f7ab7c90ee03a07294c 100644 (file)
--- a/irq.c
+++ b/irq.c
@@ -14,24 +14,31 @@ Copyright (C) 2009                  Andre Heider "dhewg" <dhewg@wiibrew.org>
 #include "hollywood.h"
 #include "ipc.h"
 #include "bootmii_ppc.h"
-//debug only
-#include "printf.h"
+#include "ohci.h"
 
 void irq_initialize(void)
 {
-       // enable hollywood-pic for ppc
-       write32(HW_PPCIRQMASK, 0);
-       write32(HW_PPCIRQFLAG, 0xffffffff);
-
-       // enable RESET and PIC (#14) interrupts on processor interface
+       // clear flipper-pic (processor interface)
        write32(BW_PI_IRQMASK, 0);
        write32(BW_PI_IRQFLAG, 0xffffffff);
 
-       //??? -- needed?!
-       /*
-       write32(HW_PPCIRQMASK+0x04, 0);
-       write32(HW_PPCIRQMASK+0x20, 0);
-       */
+       // clear hollywood-pic
+       write32(HW_PPCIRQMASK, 0);
+       write32(HW_PPCIRQFLAG, 0xffffffff);
+
+       /* ??? -- needed?!
+        * in mini they do
+        *
+        * write32(HW_ARMIRQMASK+0x04, 0);
+        * write32(HW_ARMIRQMASK+0x20, 0);
+        *
+        *
+        * may it's here following; on the other 
+        * hand it's already done by mini...
+        *
+        * write32(HW_PPCIRQMASK+0x04+0x08, 0);
+        * write32(HW_PPCIRQMASK+0x20+0x08, 0);
+        */
 
        _CPU_ISR_Enable()
 }
@@ -47,15 +54,16 @@ void irq_handler(void)
 {
        u32 enabled = read32(BW_PI_IRQMASK);
        u32 flags = read32(BW_PI_IRQFLAG);
-       printf("flags1: 0x%08X\n", flags);
+       printf( "========================\n"
+                       "flags1: 0x%08X\n", flags);
 
        flags = flags & enabled;
 
-       if (flags & (1<<1)) { //RESET
+       if (flags & (1<<BW_PI_IRQ_RESET)) { 
                write32(BW_PI_IRQFLAG, 1<<BW_PI_IRQ_RESET);
-               printf("IRQ RESET\n");
+               printf("IRQ-BW RESET\n");
        }
-       if (flags & (1<<14)) { //HW-PIC IRQ
+       if (flags & (1<<BW_PI_IRQ_HW)) { //HW-PIC IRQ
                u32 hw_enabled = read32(HW_PPCIRQMASK);
                u32 hw_flags = read32(HW_PPCIRQFLAG);
 
@@ -64,14 +72,6 @@ void irq_handler(void)
                hw_flags = hw_flags & hw_enabled;
 
                if(hw_flags & IRQF_TIMER) {
-                       // done by mini already? 
-                       /*
-                          if (_alarm_frequency) {
-                       // currently we use the alarm timer only for lame usbgecko polling
-                       gecko_timer();
-                       write32(HW_ALARM, read32(HW_TIMER) + _alarm_frequency);
-                       }
-                       */
                        write32(HW_PPCIRQFLAG, IRQF_TIMER);
                }
                if(hw_flags & IRQF_NAND) {
@@ -113,9 +113,8 @@ void irq_handler(void)
                        //sdhc_irq();
                }
                if (hw_flags & IRQF_OHCI0) {
-                       printf("IRQ: OHCI0\n");
+                       ohci0_irq();
                        write32(HW_PPCIRQFLAG, IRQF_OHCI0);
-                       //TODO: ohci0_irq();
                }
                if (hw_flags & IRQF_OHCI1) {
                        printf("IRQ: OHCI1\n");
@@ -128,12 +127,13 @@ void irq_handler(void)
                        printf("IRQ: unknown 0x%08x\n", hw_flags);
                        write32(HW_PPCIRQFLAG, hw_flags);
                }
+
+               printf("hw_flags1: 0x%08x\n", read32(HW_PPCIRQFLAG));
+
+               // not necessary here, but "cleaner"?
                write32(BW_PI_IRQFLAG, 1<<BW_PI_IRQ_HW);
-               u32 flags2 = read32(BW_PI_IRQFLAG);
-               printf("flags2: 0x%08X\n", flags2);
        }
-
-//     flags &= 
+       printf("flags2: 0x%08X\n", read32(BW_PI_IRQFLAG));
 }
 
 void irq_bw_enable(u32 irq)