From: Paul M. <le...@us...> - 2002-03-07 03:16:56
|
Update of /cvsroot/linux-mips/linux/arch/mips/vr41xx/common In directory usw-pr-cvs1:/tmp/cvs-serv28915/arch/mips/vr41xx/common Modified Files: Makefile reset.c Added Files: int-handler.S time.c Removed Files: cmu.c Log Message: Imported Yoichi-san's Vr41xx patch, with some minor modifications. --- NEW FILE: int-handler.S --- /* * FILE NAME * arch/mips/vr41xx/common/int-handler.S * * BRIEF MODULE DESCRIPTION * Interrupt dispatcher for the NEC VR4100 series. * * Author: Yoichi Yuasa * yy...@mv... or so...@mv... * * Copyright 2001 MontaVista Software Inc. * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 2 of the License, or (at your * option) any later version. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 675 Mass Ave, Cambridge, MA 02139, USA. */ /* * Changes: * MontaVista Software Inc. <yy...@mv...> or <so...@mv...> * - New creation, NEC VR4100 series are supported. */ #include <asm/asm.h> #include <asm/regdef.h> #include <asm/mipsregs.h> #include <asm/stackframe.h> .text .set noreorder .align 5 NESTED(vr41xx_handle_interrupt, PT_SIZE, ra) .set noat SAVE_ALL CLI .set at .set noreorder /* * Get the pending interrupts */ mfc0 t0, CP0_CAUSE mfc0 t1, CP0_STATUS andi t0, 0xff00 and t0, t0, t1 andi t1, t0, CAUSEF_IP7 # timer interrupt beqz t1, 1f li a0, 7 jal ll_timer_interrupt move a1, sp j ret_from_irq 1: andi t1, t0, 0x7800 # check for IP3-6 beqz t1, 2f andi t1, t0, CAUSEF_IP3 # check for IP3 bnez t1, handle_it li a0, 3 andi t1, t0, CAUSEF_IP4 # check for IP4 bnez t1, handle_it li a0, 4 andi t1, t0, CAUSEF_IP5 # check for IP5 bnez t1, handle_it li a0, 5 andi t1, t0, CAUSEF_IP6 # check for IP6 bnez t1, handle_it li a0, 6 2: andi t1, t0, CAUSEF_IP2 # check for IP2 beqz t1, 3f move a0, sp jal icu_irqdispatch nop j ret_from_irq nop 3: andi t1, t0, CAUSEF_IP0 # check for IP0 bnez t1, handle_it li a0, 0 andi t1, t0, CAUSEF_IP1 # check for IP1 bnez t1, handle_it li a0, 1 j spurious_interrupt nop handle_it: jal do_IRQ move a1, sp j ret_from_irq END(vr41xx_handle_interrupt) Index: Makefile =================================================================== RCS file: /cvsroot/linux-mips/linux/arch/mips/vr41xx/common/Makefile,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- Makefile 27 Nov 2001 18:49:22 -0000 1.4 +++ Makefile 7 Mar 2002 03:16:53 -0000 1.5 @@ -1,13 +1,22 @@ # -# Makefile for common code for the NEC VR41xx family +# Makefile for common code of the NEC VR4100 series. # # Note! Dependencies are done automagically by 'make dep', which also # removes any old dependencies. DON'T put your own dependencies here # unless it's something special (ie not a .c file). # -O_TARGET:= vr41xx.o +.S.s: + $(CPP) $(CFLAGS) $< -o $*.s +.S.o: + $(CC) $(CFLAGS) -c $< -o $*.o -obj-y := reset.o cmu.o +all: vr41xx.o + +O_TARGET := vr41xx.o + +obj-y := int-handler.o reset.o + +obj-$(CONFIG_VR41XX_TIME_C) += time.o include $(TOPDIR)/Rules.make Index: reset.c =================================================================== RCS file: /cvsroot/linux-mips/linux/arch/mips/vr41xx/common/reset.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- reset.c 27 Nov 2001 01:16:41 -0000 1.3 +++ reset.c 7 Mar 2002 03:16:53 -0000 1.4 @@ -1,43 +1,37 @@ /* - * VR41xx reset - * - * Copyright (C) 2000 Michael Klar - * Copyright (C) 2000 SATO Kazumi - * Copyright (C) 2001 Jim Paris <ji...@jt...> - * - * This file is subject to the terms and conditions of the GNU General Public - * License. See the file "COPYING" in the main directory of this archive - * for more details. + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. * + * Copyright (C) 1997, 2001 Ralf Baechle + * Copyright 2001 MontaVista Software Inc. + * Author: js...@mv... or js...@ju... */ - -#include <linux/kernel.h> -#include <linux/init.h> -#include <linux/config.h> -#include <linux/delay.h> +#include <linux/sched.h> #include <linux/mm.h> -#include <linux/sysctl.h> -#include <linux/pm.h> -#include <linux/acpi.h> -#include <asm/vr41xx.h> -#include <asm/cacheops.h> -#include <asm/mipsregs.h> -#include <asm/pgalloc.h> +#include <asm/io.h> +#include <asm/pgtable.h> +#include <asm/processor.h> +#include <asm/reboot.h> +#include <asm/system.h> -void vr41xx_restart(char *c) +void vr41xx_restart(char *command) { - void *reset_addr = (void *)0xbfc00000; + change_cp0_status((ST0_BEV | ST0_ERL), (ST0_BEV | ST0_ERL)); + change_cp0_config(CONF_CM_CMASK, CONF_CM_UNCACHED); + flush_cache_all(); + write_32bit_cp0_register(CP0_WIRED, 0); + __asm__ __volatile__("jr\t%0"::"r"(0xbfc00000)); +} - /* - * Try deadman's reset: set it to 1 second and wait for 2 - */ - *(volatile int *)VR41XX_DSUCLRREG = 1; /* clear last one */ - *(volatile int *)VR41XX_DSUSETREG = 1; /* 1sec */ - *(volatile int *)VR41XX_DSUCNTREG = 1; /* enable deadman switch */ - mdelay(2000); /* wait 2 second */ +void vr41xx_halt(void) +{ + printk(KERN_NOTICE "\n** You can safely turn off the power\n"); + while (1); +} - /* - * That didn't work, so try jumping to the start address - */ - goto *reset_addr; +void vr41xx_power_off(void) +{ + vr41xx_halt(); } --- cmu.c DELETED --- |