X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=arch%2Fmips%2Fsgi-ip32%2Fcrime.c;h=eb3a16a04fee2c75beec145a62d725f478cd3412;hb=6a77f38946aaee1cd85eeec6cf4229b204c15071;hp=a8c7a776a271ebcccb217c6e5852cce33414c890;hpb=87fc8d1bb10cd459024a742c6a10961fefcef18f;p=linux-2.6.git diff --git a/arch/mips/sgi-ip32/crime.c b/arch/mips/sgi-ip32/crime.c index a8c7a776a..eb3a16a04 100644 --- a/arch/mips/sgi-ip32/crime.c +++ b/arch/mips/sgi-ip32/crime.c @@ -4,33 +4,35 @@ * for more details. * * Copyright (C) 2001, 2003 Keith M Wesolowski + * Copyright (C) 2005 Ilya A. Volynets */ #include #include #include #include #include +#include #include #include #include #include #include -void *sgi_crime; +struct sgi_crime *crime; struct sgi_mace *mace; void __init crime_init(void) { unsigned int id, rev; const int field = 2 * sizeof(unsigned long); - - sgi_crime = ioremap(CRIME_BASE, 1); + + set_io_port_base((unsigned long) ioremap(MACEPCI_LOW_IO, 0x2000000)); + crime = ioremap(CRIME_BASE, sizeof(struct sgi_crime)); mace = ioremap(MACE_BASE, sizeof(struct sgi_mace)); - id = crime_read(CRIME_ID); + id = crime->id; rev = id & CRIME_ID_REV; id = (id & CRIME_ID_IDBITS) >> 4; - printk (KERN_INFO "CRIME id %1x rev %d at 0x%0*lx\n", id, rev, field, (unsigned long) CRIME_BASE); } @@ -41,19 +43,18 @@ crime_memerr_intr (unsigned int irq, void *dev_id, struct pt_regs *regs) unsigned long stat, addr; int fatal = 0; - stat = crime_read(CRIME_MEM_ERROR_STAT) & CRIME_MEM_ERROR_STAT_MASK; - addr = crime_read(CRIME_MEM_ERROR_ADDR) & CRIME_MEM_ERROR_ADDR_MASK; + stat = crime->mem_error_stat & CRIME_MEM_ERROR_STAT_MASK; + addr = crime->mem_error_addr & CRIME_MEM_ERROR_ADDR_MASK; printk("CRIME memory error at 0x%08lx ST 0x%08lx<", addr, stat); if (stat & CRIME_MEM_ERROR_INV) printk("INV,"); if (stat & CRIME_MEM_ERROR_ECC) { - unsigned long ecc_syn = crime_read(CRIME_MEM_ERROR_ECC_SYN) & - CRIME_MEM_ERROR_ECC_SYN_MASK; - unsigned long ecc_gen = crime_read(CRIME_MEM_ERROR_ECC_CHK) & - CRIME_MEM_ERROR_ECC_CHK_MASK; - + unsigned long ecc_syn = + crime->mem_ecc_syn & CRIME_MEM_ERROR_ECC_SYN_MASK; + unsigned long ecc_gen = + crime->mem_ecc_chk & CRIME_MEM_ERROR_ECC_CHK_MASK; printk("ECC,SYN=0x%08lx,GEN=0x%08lx,", ecc_syn, ecc_gen); } if (stat & CRIME_MEM_ERROR_MULTIPLE) { @@ -77,7 +78,7 @@ crime_memerr_intr (unsigned int irq, void *dev_id, struct pt_regs *regs) if (stat & CRIME_MEM_ERROR_MACE_ACCESS) printk("MACE,MACEID=0x%02lx,", stat & CRIME_MEM_ERROR_MACE_ID); - crime_write(0, CRIME_MEM_ERROR_STAT); + crime->mem_error_stat = 0; if (fatal) { printk("FATAL>\n"); @@ -91,15 +92,12 @@ crime_memerr_intr (unsigned int irq, void *dev_id, struct pt_regs *regs) irqreturn_t crime_cpuerr_intr (unsigned int irq, void *dev_id, struct pt_regs *regs) { - unsigned long stat = crime_read(CRIME_CPU_ERROR_STAT) & - CRIME_CPU_ERROR_MASK; - uint64_t addr = crime_read(CRIME_CPU_ERROR_ADDR) & - CRIME_CPU_ERROR_ADDR_MASK; - addr <<= 2; + unsigned long stat = crime->cpu_error_stat & CRIME_CPU_ERROR_MASK; + unsigned long addr = crime->cpu_error_addr & CRIME_CPU_ERROR_ADDR_MASK; + addr <<= 2; printk ("CRIME CPU error at 0x%09lx status 0x%08lx\n", addr, stat); - - crime_write(0, CRIME_CPU_ERROR_STAT); + crime->cpu_error_stat = 0; return IRQ_HANDLED; }