From: <pal...@us...> - 2004-10-22 19:42:14
|
Update of /cvsroot/gc-linux/linux/arch/ppc/platforms In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv30747/arch/ppc/platforms Modified Files: gamecube.c gamecube.h Log Message: GX driver checkin. Added better support for wavebirds. Faster interrupt handling. Index: gamecube.c =================================================================== RCS file: /cvsroot/gc-linux/linux/arch/ppc/platforms/gamecube.c,v retrieving revision 1.22 retrieving revision 1.23 diff -u -d -r1.22 -r1.23 --- gamecube.c 19 Oct 2004 23:07:13 -0000 1.22 +++ gamecube.c 22 Oct 2004 19:42:03 -0000 1.23 @@ -116,17 +116,15 @@ gcn_get_irq(struct pt_regs *regs) { int irq; - u_int irq_status, irq_test = 1; + u32 irq_status; irq_status = readl(FLIPPER_ICR) & readl(FLIPPER_IMR); if (irq_status == 0) return -1; /* no more IRQs pending */ - for (irq = 0; irq < FLIPPER_NR_IRQS; irq++, irq_test <<= 1) - if (irq_status & irq_test) - break; + __asm __volatile ("cntlzw %0,%1": "=r"(irq) : "r"(irq_status)); - return irq; + return (31 - irq); } static void @@ -173,7 +171,12 @@ { seq_printf(m, "vendor\t\t: IBM\n"); seq_printf(m, "machine\t\t: Nintendo GameCube\n"); - + seq_printf(m, "cpu MHz\t\t: 486\n"); + seq_printf(m, "clock\t\t: 486MHz\n"); + seq_printf(m, "cache size\t: 256 KB\n"); + seq_printf(m, "bus speed\t: 162 MHz\n"); + seq_printf(m, "mem bus speed\t: 200 MHz\n"); + seq_printf(m, "bus width\t: 64 bit\n"); return 0; } Index: gamecube.h =================================================================== RCS file: /cvsroot/gc-linux/linux/arch/ppc/platforms/gamecube.h,v retrieving revision 1.9 retrieving revision 1.10 diff -u -d -r1.9 -r1.10 --- gamecube.h 19 Oct 2004 23:07:28 -0000 1.9 +++ gamecube.h 22 Oct 2004 19:42:03 -0000 1.10 @@ -23,7 +23,13 @@ * | framebuffer 640x576x2 bytes | GCN_XFB_END * . . * . . + * | framebuffer 640x576x2 bytes | Second buffer + * . . + * . . * +------------------------------+ GCN_XFB_START + * | GX Fifo reserved 256k | GCN_GX_FIFO_END + * . . + * +------------------------------+ GCN_GX_FIFO_START * | kexec reserved 4x4096 bytes | GCN_KXC_END * . . * +------------------------------+ GCN_KXC_START @@ -43,8 +49,11 @@ /* * Some useful sizes */ +#define GCN_VIDEO_REG (*((volatile u16*)0xCC002002)) +#define GCN_VIDEO_LINES (((GCN_VIDEO_REG >> 8) & 3) ? 576 : 480) +#define GCN_GX_FIFO_SIZE (256*1024) #define GCN_RAM_SIZE (24*1024*1024) /* 24 MB */ -#define GCN_XFB_SIZE (640*576*2) /* pal framebuffer */ +#define GCN_XFB_SIZE (640*GCN_VIDEO_LINES*4) /* framebuffer */ #ifdef CONFIG_KEXEC #define GCN_KXC_SIZE (4*4096) /* PAGE_ALIGN(GCN_PRESERVE_SIZE) */ #else @@ -57,7 +66,9 @@ */ #define GCN_XFB_END (GCN_RAM_SIZE-1) #define GCN_XFB_START (GCN_XFB_END-GCN_XFB_SIZE+1) -#define GCN_KXC_END (GCN_XFB_START-1) +#define GCN_GX_FIFO_END (GCN_XFB_START-1) +#define GCN_GX_FIFO_START (GCN_GX_FIFO_END-GCN_GX_FIFO_SIZE+1) +#define GCN_KXC_END (GCN_GX_FIFO_START-1) #define GCN_KXC_START (GCN_KXC_END-GCN_KXC_SIZE+1) #define GCN_MEM_END (GCN_KXC_START-1) #define GCN_MEM_START (0x00000000) |