[Emile-devel] Re: [linux-mac68k] EMILE and Quadra 840AV
Status: Beta
Brought to you by:
lvivier
From: Finn T. <ft...@te...> - 2005-10-11 01:18:45
|
On Tue, 11 Oct 2005, Laurent Vivier wrote: > Hi, > > I found a Q840AV to test EMILE with it. > > The result is here: > > http://emile.sourceforge.net/SNAPSHOT/ > > There is a problem with the video driver (any suggestions ?), but it can > waits. I think that it is necessary to have the right bit depth set in macos. I guess that doesn't help with Emile? (I generally use 8 bit color, but I've only used linux 2.6 on my AV quadra.) I wish I could be more helpful, but at the moment all my macs are in storage until I find a place to stay :-( > I made some modifications in EMILE to disable drivers interrupts and some in > the kernel to block nubus interrupts (see attachment) > > Index: linux-mac68k-2.2/arch/m68k/mac/macints.c > =================================================================== > --- linux-mac68k-2.2.orig/arch/m68k/mac/macints.c 2005-09-05 21:03:25.000000000 +0200 > +++ linux-mac68k-2.2/arch/m68k/mac/macints.c 2005-10-09 20:00:23.000000000 +0200 > @@ -193,6 +193,7 @@ > void mac_nmi_handler(int, void *, struct pt_regs *); > void mac_debug_handler(int, void *, struct pt_regs *); > void mac_SCC_handler(int, void *, struct pt_regs *); > +void mac_clear_irq( unsigned int irq ); > > /* #define DEBUG_MACINTS */ > /* #define DEBUG_SPURIOUS */ > @@ -207,6 +208,8 @@ > /* Initialize the IRQ handler lists. Initially each list is empty, */ > > for (i = 0; i < NUM_MAC_SOURCES; i++) { > + mac_disable_irq(i); > + mac_clear_irq(i); > mac_irq_list[i] = NULL; > } > I think this is the wrong place for this. The fact that you need it just means there is a bug in iop_init(), via_init(), oss_init(), psc_init() and/or baboon_init(). Fixing the early bug will eliminate suprious interrupts before mac_init_IRQ() is called. > Index: linux-mac68k-2.2/arch/m68k/mac/psc.c > =================================================================== > --- linux-mac68k-2.2.orig/arch/m68k/mac/psc.c 2005-09-05 21:03:25.000000000 +0200 > +++ linux-mac68k-2.2/arch/m68k/mac/psc.c 2005-10-09 19:05:00.000000000 +0200 > @@ -26,7 +26,7 @@ > #include <asm/macints.h> > #include <asm/mac_psc.h> > > -#define DEBUG_PSC > +//#define DEBUG_PSC > > int psc_present; > volatile __u8 *psc; > @@ -185,7 +185,7 @@ > void psc_irq_clear(int irq) { > int irq_src = IRQ_SRC(irq); > int irq_idx = IRQ_IDX(irq); > - int pIFR = pIERbase + (irq_src << 4); > + int pIFR = pIFRbase + (irq_src << 4); > > psc_write_byte(pIFR, 1 << irq_idx); > } > @@ -194,7 +194,7 @@ > { > int irq_src = IRQ_SRC(irq); > int irq_idx = IRQ_IDX(irq); > - int pIFR = pIERbase + (irq_src << 4); > + int pIFR = pIFRbase + (irq_src << 4); > > return psc_read_byte(pIFR) & (1 << irq_idx); > } Good find! > Index: linux-mac68k-2.2/arch/m68k/mac/via.c > =================================================================== > --- linux-mac68k-2.2.orig/arch/m68k/mac/via.c 2005-10-10 22:06:04.000000000 +0200 > +++ linux-mac68k-2.2/arch/m68k/mac/via.c 2005-10-10 23:13:44.661673198 +0200 > @@ -232,6 +232,12 @@ > via_write(via2, vT2CH, 0); > via_write(via2, vACR, via_read(via2, vACR) & 0x3F); > } > + /* lock nubus */ > + if (!rbv_present) { > + /* set the line to be an output on non-RBV machines */ > + via_write(via2, vDirB, via_read(via2, vDirB) | 0x02); > + } > + via_write(via2, gBufB, via_read(via2, gBufB) & ~0x02); > } If you do this vDirB assignment in via_init(), then the one in via_nubus_init() is redundant. > > /* > @@ -497,7 +503,7 @@ > events = ~via_read(via2, gBufA) & nubus_active; > if (events == 0) return; > > - for (i = 0, irq_bit = 1 ; i < 7 ; i++, irq_bit <<= 1) { > + for (i = 0, irq_bit = 1 ; i < 8 ; i++, irq_bit <<= 1) { > if (events & irq_bit) { > via_irq_disable(NUBUS_SOURCE_BASE + i); > /* FIXME: this does nothing. Should we clear I don't think this last chunk is correct. Disabling NUBUS_SOURCE_BASE + 7 _should_ do nothing. Cheers, Finn |