From 67134debfe2833bc2cfb4c42f754560c795baa71 Mon Sep 17 00:00:00 2001 From: Harald Koerfgen Date: Sun, 11 Apr 1999 17:06:16 +0000 Subject: DECstation updates --- arch/mips/dec/irq.c | 3 +- arch/mips/dec/prom/memory.c | 9 +++++ arch/mips/dec/reset.c | 11 ++++-- arch/mips/dec/setup.c | 89 +++++++++++++++++++++++++++------------------ arch/mips/dec/time.c | 2 +- arch/mips/dec/wbflush.c | 7 ---- 6 files changed, 72 insertions(+), 49 deletions(-) (limited to 'arch/mips/dec') diff --git a/arch/mips/dec/irq.c b/arch/mips/dec/irq.c index 1090470a0..d5d6303ed 100644 --- a/arch/mips/dec/irq.c +++ b/arch/mips/dec/irq.c @@ -4,7 +4,7 @@ * Copyright (C) 1992 Linus Torvalds * Copyright (C) 1994, 1995, 1996, 1997 Ralf Baechle * - * $Id: irq.c,v 1.1.2.1 1998/03/18 20:51:19 harald Exp $ + * $Id: irq.c,v 1.2 1999/01/17 03:49:41 ralf Exp $ */ #include #include @@ -24,7 +24,6 @@ #include #include #include -#include #include diff --git a/arch/mips/dec/prom/memory.c b/arch/mips/dec/prom/memory.c index 5fa828384..de80c34e8 100644 --- a/arch/mips/dec/prom/memory.c +++ b/arch/mips/dec/prom/memory.c @@ -93,3 +93,12 @@ __initfunc(void prom_meminit(unsigned int magic)) prom_printf("mips_memory_upper: 0x%08x\n", mips_memory_upper); #endif } + +/* Called from mem_init() to fixup the mem_map page settings. */ +__initfunc(void prom_fixup_mem_map(unsigned long start, unsigned long end)) +{ +} + +void prom_free_prom_memory (void) +{ +} diff --git a/arch/mips/dec/reset.c b/arch/mips/dec/reset.c index 644935747..e4d07608f 100644 --- a/arch/mips/dec/reset.c +++ b/arch/mips/dec/reset.c @@ -1,22 +1,25 @@ - - /* - * linux/arch/mips/dec/reset.c + * $Id: $ * * Reset a DECstation machine. * - * $Id: reset.c,v 1.3 1998/03/04 08:29:10 ralf Exp $ */ +void (*back_to_prom)(void) = (void (*)(void))0xBFC00000; + void dec_machine_restart(char *command) { + back_to_prom(); } void dec_machine_halt(void) { + back_to_prom(); } void dec_machine_power_off(void) { /* DECstations don't have a software power switch */ + back_to_prom(); } + diff --git a/arch/mips/dec/setup.c b/arch/mips/dec/setup.c index 9999de881..d7fbc4a13 100644 --- a/arch/mips/dec/setup.c +++ b/arch/mips/dec/setup.c @@ -101,9 +101,13 @@ __initfunc(static void dec_time_init(struct irqaction *irq)) { /* * Here we go, enable periodic rtc interrupts. - * Frequency is 128 Hz. */ - CMOS_WRITE(RTC_REF_CLCK_32KHZ | 0x9, RTC_REG_A); + +#ifndef LOG_2_HZ +# define LOG_2_HZ 7 +#endif + + CMOS_WRITE(RTC_REF_CLCK_32KHZ | (16 - LOG_2_HZ), RTC_REG_A); CMOS_WRITE(CMOS_READ(RTC_REG_B) | RTC_PIE, RTC_REG_B); setup_dec_irq(CLOCK, irq); } @@ -291,25 +295,30 @@ __initfunc(void dec_init_kn02ba(void)) asic_mask_tbl[0] = KMIN_CLOCK; asic_irq_nr[0] = CLOCK; + dec_interrupt[SCSI_DMA_INT].cpu_mask = IE_IRQ3; + dec_interrupt[SCSI_DMA_INT].iemask = SCSI_DMA_INTS; + asic_mask_tbl[1] = SCSI_DMA_INTS; + asic_irq_nr[1] = SCSI_DMA_INT; + dec_interrupt[SCSI_INT].cpu_mask = IE_IRQ3; - dec_interrupt[SCSI_INT].iemask = KMIN_SCSI_INTS; - asic_mask_tbl[1] = KMIN_SCSI_INTS; - asic_irq_nr[1] = SCSI_INT; + dec_interrupt[SCSI_INT].iemask = SCSI_CHIP; + asic_mask_tbl[2] = SCSI_CHIP; + asic_irq_nr[2] = SCSI_INT; dec_interrupt[ETHER].cpu_mask = IE_IRQ3; dec_interrupt[ETHER].iemask = LANCE_INTS; - asic_mask_tbl[2] = LANCE_INTS; - asic_irq_nr[2] = ETHER; + asic_mask_tbl[3] = LANCE_INTS; + asic_irq_nr[3] = ETHER; dec_interrupt[SERIAL].cpu_mask = IE_IRQ3; dec_interrupt[SERIAL].iemask = SERIAL_INTS; - asic_mask_tbl[3] = SERIAL_INTS; - asic_irq_nr[3] = SERIAL; + asic_mask_tbl[4] = SERIAL_INTS; + asic_irq_nr[4] = SERIAL; dec_interrupt[MEMORY].cpu_mask = IE_IRQ3; dec_interrupt[MEMORY].iemask = KMIN_TIMEOUT; - asic_mask_tbl[4] = KMIN_TIMEOUT; - asic_irq_nr[4] = MEMORY; + asic_mask_tbl[5] = KMIN_TIMEOUT; + asic_irq_nr[5] = MEMORY; dec_interrupt[TC0].cpu_mask = IE_IRQ0; dec_interrupt[TC0].iemask = 0; @@ -366,30 +375,35 @@ __initfunc(void dec_init_kn02ca(void)) cpu_mask_tbl[0] = IE_IRQ1; cpu_irq_nr[0] = CLOCK; + dec_interrupt[SCSI_DMA_INT].cpu_mask = IE_IRQ3; + dec_interrupt[SCSI_DMA_INT].iemask = SCSI_DMA_INTS; + asic_mask_tbl[0] = SCSI_DMA_INTS; + asic_irq_nr[0] = SCSI_DMA_INT; + dec_interrupt[SCSI_INT].cpu_mask = IE_IRQ3; - dec_interrupt[SCSI_INT].iemask = SCSI_INTS; - asic_mask_tbl[0] = SCSI_INTS; - asic_irq_nr[0] = SCSI_INT; + dec_interrupt[SCSI_INT].iemask = SCSI_CHIP; + asic_mask_tbl[1] = SCSI_CHIP; + asic_irq_nr[1] = SCSI_INT; dec_interrupt[ETHER].cpu_mask = IE_IRQ3; dec_interrupt[ETHER].iemask = LANCE_INTS; - asic_mask_tbl[1] = LANCE_INTS; - asic_irq_nr[1] = ETHER; + asic_mask_tbl[2] = LANCE_INTS; + asic_irq_nr[2] = ETHER; dec_interrupt[SERIAL].cpu_mask = IE_IRQ3; dec_interrupt[SERIAL].iemask = XINE_SERIAL_INTS; - asic_mask_tbl[2] = XINE_SERIAL_INTS; - asic_irq_nr[2] = SERIAL; + asic_mask_tbl[3] = XINE_SERIAL_INTS; + asic_irq_nr[3] = SERIAL; dec_interrupt[TC0].cpu_mask = IE_IRQ3; dec_interrupt[TC0].iemask = MAXINE_TC0; - asic_mask_tbl[3] = MAXINE_TC0; - asic_irq_nr[3] = TC0; + asic_mask_tbl[4] = MAXINE_TC0; + asic_irq_nr[4] = TC0; dec_interrupt[TC1].cpu_mask = IE_IRQ3; dec_interrupt[TC1].iemask = MAXINE_TC1; - asic_mask_tbl[4] = MAXINE_TC1; - asic_irq_nr[4] = TC1; + asic_mask_tbl[5] = MAXINE_TC1; + asic_irq_nr[5] = TC1; dec_interrupt[MEMORY].cpu_mask = IE_IRQ2; dec_interrupt[MEMORY].iemask = 0; @@ -436,35 +450,40 @@ __initfunc(void dec_init_kn03(void)) cpu_mask_tbl[0] = IE_IRQ1; cpu_irq_nr[0] = CLOCK; + dec_interrupt[SCSI_DMA_INT].cpu_mask = IE_IRQ0; + dec_interrupt[SCSI_DMA_INT].iemask = SCSI_DMA_INTS; + asic_mask_tbl[0] = SCSI_DMA_INTS; + asic_irq_nr[0] = SCSI_DMA_INT; + dec_interrupt[SCSI_INT].cpu_mask = IE_IRQ0; - dec_interrupt[SCSI_INT].iemask = SCSI_INTS; - asic_mask_tbl[0] = SCSI_INTS; - asic_irq_nr[0] = SCSI_INT; + dec_interrupt[SCSI_INT].iemask = SCSI_CHIP; + asic_mask_tbl[1] = SCSI_CHIP; + asic_irq_nr[1] = SCSI_INT; dec_interrupt[ETHER].cpu_mask = IE_IRQ0; dec_interrupt[ETHER].iemask = LANCE_INTS; - asic_mask_tbl[1] = LANCE_INTS; - asic_irq_nr[1] = ETHER; + asic_mask_tbl[2] = LANCE_INTS; + asic_irq_nr[2] = ETHER; dec_interrupt[SERIAL].cpu_mask = IE_IRQ0; dec_interrupt[SERIAL].iemask = SERIAL_INTS; - asic_mask_tbl[2] = SERIAL_INTS; - asic_irq_nr[2] = SERIAL; + asic_mask_tbl[3] = SERIAL_INTS; + asic_irq_nr[3] = SERIAL; dec_interrupt[TC0].cpu_mask = IE_IRQ0; dec_interrupt[TC0].iemask = KN03_TC0; - asic_mask_tbl[3] = KN03_TC0; - asic_irq_nr[3] = TC0; + asic_mask_tbl[4] = KN03_TC0; + asic_irq_nr[4] = TC0; dec_interrupt[TC1].cpu_mask = IE_IRQ0; dec_interrupt[TC1].iemask = KN03_TC1; - asic_mask_tbl[4] = KN03_TC1; - asic_irq_nr[4] = TC1; + asic_mask_tbl[5] = KN03_TC1; + asic_irq_nr[5] = TC1; dec_interrupt[TC2].cpu_mask = IE_IRQ0; dec_interrupt[TC2].iemask = KN03_TC2; - asic_mask_tbl[5] = KN03_TC2; - asic_irq_nr[5] = TC2; + asic_mask_tbl[6] = KN03_TC2; + asic_irq_nr[6] = TC2; dec_interrupt[MEMORY].cpu_mask = IE_IRQ3; dec_interrupt[MEMORY].iemask = 0; diff --git a/arch/mips/dec/time.c b/arch/mips/dec/time.c index 649df1b9c..dd4951691 100644 --- a/arch/mips/dec/time.c +++ b/arch/mips/dec/time.c @@ -423,7 +423,7 @@ __initfunc(void time_init(void)) * The PROM will reset the year to either '70, '71 or '72. * This hack will only work until Dec 31 2001. */ - year += 1925; + year += 1927; xtime.tv_sec = mktime(year, mon, day, hour, min, sec); xtime.tv_usec = 0; diff --git a/arch/mips/dec/wbflush.c b/arch/mips/dec/wbflush.c index 3c7338c92..6b183634b 100644 --- a/arch/mips/dec/wbflush.c +++ b/arch/mips/dec/wbflush.c @@ -101,11 +101,4 @@ static void wbflush_kn02ba(void) */ static void wbflush_kn03(void) { - asm(".set\tpush\n\t" - ".set\tnoreorder\n\t" - "lui\t$2,0xbf84\n\t" - "lw\t$3,0x120($2)\n\t" - "lw\t$3,0x120($2)\n\t" - ".set\tpop" - : : :"$2", "$3"); } -- cgit v1.2.3