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)
|