here it is. the only important change is of course in ip22-time.c the rest is for better look and feel only :-) Index: linux/arch/mips/sgi-ip22/ip22-reset.c =================================================================== RCS file: /cvs/linux/arch/mips/sgi-ip22/ip22-reset.c,v retrieving revision 1.1.2.1 diff -u -r1.1.2.1 ip22-reset.c --- linux/arch/mips/sgi-ip22/ip22-reset.c 2001/12/07 15:45:29 1.1.2.1 +++ linux/arch/mips/sgi-ip22/ip22-reset.c 2001/12/10 18:03:12 @@ -180,7 +180,7 @@ unsigned int buttons; buttons = hpc3mregs->panel; - hpc3mregs->panel = 3; /* power_interrupt | power_supply_on */ + hpc3mregs->panel = 0x03; /* power_interrupt | power_supply_on */ if (ioc_icontrol->istat1 & 2) { /* Wait until interrupt goes away */ disable_irq(SGI_PANEL_IRQ); @@ -190,7 +190,7 @@ add_timer(&debounce_timer); } - if (!(buttons & 2)) /* Power button was pressed */ + if (!(buttons & 0x02)) /* Power button was pressed */ power_button(); if (!(buttons & 0x40)) { /* Volume up button was pressed */ init_timer(&volume_timer); Index: linux/arch/mips/sgi-ip22/ip22-setup.c =================================================================== RCS file: /cvs/linux/arch/mips/sgi-ip22/ip22-setup.c,v retrieving revision 1.1.2.1 diff -u -r1.1.2.1 ip22-setup.c --- linux/arch/mips/sgi-ip22/ip22-setup.c 2001/12/07 15:45:29 1.1.2.1 +++ linux/arch/mips/sgi-ip22/ip22-setup.c 2001/12/10 18:03:13 @@ -61,7 +61,7 @@ indy_setup wouldn't work since kmalloc isn't initialized yet. */ indy_reboot_setup(); - return request_irq(SGI_KEYBOARD_IRQ, handler, 0, "keyboard", NULL); + return request_irq(SGI_KEYBD_IRQ, handler, 0, "keyboard", NULL); } static int sgi_aux_request_irq(void (*handler)(int, void *, struct pt_regs *)) Index: linux/arch/mips/sgi-ip22/ip22-time.c =================================================================== RCS file: /cvs/linux/arch/mips/sgi-ip22/ip22-time.c,v retrieving revision 1.1.2.1 diff -u -r1.1.2.1 ip22-time.c --- linux/arch/mips/sgi-ip22/ip22-time.c 2001/12/07 15:45:29 1.1.2.1 +++ linux/arch/mips/sgi-ip22/ip22-time.c 2001/12/10 18:03:13 @@ -127,12 +127,11 @@ return ((ct1 - ct0) / 5000) * 5000; } +/* + * Here we need to calibrate the cycle counter to at least be close. + */ void indy_time_init(void) { - /* Here we need to calibrate the cycle counter to at least be close. - * We don't need to actually register the irq handler because that's - * all done in indyIRQ.S. - */ struct sgi_ioc_timers *p; volatile unsigned char *tcwp, *tc2p; unsigned long r4k_ticks[3]; @@ -215,8 +214,16 @@ static void indy_timer_setup(struct irqaction *irq) { + unsigned long count; + /* over-write the handler, we use our own way */ irq->handler = no_action; + + /* set time for first interrupt */ + count = read_32bit_cp0_register(CP0_COUNT); + count += mips_counter_frequency / HZ; + write_32bit_cp0_register(CP0_COMPARE, count); + /* setup irqaction */ setup_irq(SGI_TIMER_IRQ, irq); } Index: linux/include/asm-mips/sgi/sgint23.h =================================================================== RCS file: /cvs/linux/include/asm-mips/sgi/sgint23.h,v retrieving revision 1.5 diff -u -r1.5 sgint23.h --- linux/include/asm-mips/sgi/sgint23.h 2001/11/23 01:06:57 1.5 +++ linux/include/asm-mips/sgi/sgint23.h 2001/12/10 18:04:59 @@ -64,7 +64,7 @@ * We map them to 0 */ #define SGI_VERT_IRQ SGINT_LOCAL2 + 0 /* INT3: newport vertical status */ #define SGI_EISA_IRQ SGINT_LOCAL2 + 3 /* EISA interrupts */ -#define SGI_KEYBOARD_IRQ SGINT_LOCAL2 + 4 /* keyboard */ +#define SGI_KEYBD_IRQ SGINT_LOCAL2 + 4 /* keyboard */ #define SGI_SERIAL_IRQ SGINT_LOCAL2 + 5 /* onboard serial */ /* INT2 occupies HPC PBUS slot 4, INT3 uses slot 6. */ @@ -227,8 +227,5 @@ extern struct sgi_ioc_ints *ioc_icontrol; extern struct sgi_ioc_timers *ioc_timers; extern volatile unsigned char *ioc_tclear; - -extern void sgint_init(void); -extern void indy_timer_init(void); #endif /* _ASM_SGI_SGINT23_H */