summaryrefslogtreecommitdiffstats
path: root/arch/mips/dec
diff options
context:
space:
mode:
authorHarald Koerfgen <hkoerfg@web.de>1999-04-11 17:06:16 +0000
committerHarald Koerfgen <hkoerfg@web.de>1999-04-11 17:06:16 +0000
commit67134debfe2833bc2cfb4c42f754560c795baa71 (patch)
tree6e1aec3ac67d13f11dd4faded5471d2e2a2d36b6 /arch/mips/dec
parentcf32452ae9bc67a48c2f0fb3719b31a78512ed82 (diff)
DECstation updates
Diffstat (limited to 'arch/mips/dec')
-rw-r--r--arch/mips/dec/irq.c3
-rw-r--r--arch/mips/dec/prom/memory.c9
-rw-r--r--arch/mips/dec/reset.c11
-rw-r--r--arch/mips/dec/setup.c89
-rw-r--r--arch/mips/dec/time.c2
-rw-r--r--arch/mips/dec/wbflush.c7
6 files changed, 72 insertions, 49 deletions
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 <linux/errno.h>
#include <linux/init.h>
@@ -24,7 +24,6 @@
#include <asm/irq.h>
#include <asm/mipsregs.h>
#include <asm/system.h>
-#include <asm/wbflush.h>
#include <asm/dec/interrupts.h>
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");
}