From: Paul M. <le...@us...> - 2002-06-14 13:56:02
|
Update of /cvsroot/linux-mips/linux/arch/mips/vr41xx/vr4181/osprey In directory usw-pr-cvs1:/tmp/cvs-serv28603 Added Files: Makefile dbg_io.c prom.c reset.c setup.c Log Message: Re-add Osprey specific bits. --- NEW FILE: Makefile --- # # Makefile for common code of NEC Osprey board # # 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). # .S.s: $(CPP) $(CFLAGS) $< -o $*.s .S.o: $(CC) $(CFLAGS) -c $< -o $*.o O_TARGET := osprey.o obj-y := setup.o prom.o reset.o obj-$(CONFIG_REMOTE_DEBUG) += dbg_io.o include $(TOPDIR)/Rules.make --- NEW FILE: dbg_io.c --- /* * kgdb io functions for osprey. We use the serial port on debug board. * * Copyright (C) 2001 MontaVista Software Inc. * Author: js...@mv... or js...@ju... * * 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. * */ /* ======================= CONFIG ======================== */ /* [jsun] we use the second serial port for kdb */ #define BASE 0xb7fffff0 #define MAX_BAUD 115200 /* distance in bytes between two serial registers */ #define REG_OFFSET 1 /* * 0 - kgdb does serial init * 1 - kgdb skip serial init */ static int remoteDebugInitialized = 1; /* * the default baud rate *if* kgdb does serial init */ #define BAUD_DEFAULT UART16550_BAUD_38400 /* ======================= END OF CONFIG ======================== */ typedef unsigned char uint8; typedef unsigned int uint32; #define UART16550_BAUD_2400 2400 #define UART16550_BAUD_4800 4800 #define UART16550_BAUD_9600 9600 #define UART16550_BAUD_19200 19200 #define UART16550_BAUD_38400 38400 #define UART16550_BAUD_57600 57600 #define UART16550_BAUD_115200 115200 #define UART16550_PARITY_NONE 0 #define UART16550_PARITY_ODD 0x08 #define UART16550_PARITY_EVEN 0x18 #define UART16550_PARITY_MARK 0x28 #define UART16550_PARITY_SPACE 0x38 #define UART16550_DATA_5BIT 0x0 #define UART16550_DATA_6BIT 0x1 #define UART16550_DATA_7BIT 0x2 #define UART16550_DATA_8BIT 0x3 #define UART16550_STOP_1BIT 0x0 #define UART16550_STOP_2BIT 0x4 /* register offset */ #define OFS_RCV_BUFFER 0 #define OFS_TRANS_HOLD 0 #define OFS_SEND_BUFFER 0 #define OFS_INTR_ENABLE (1*REG_OFFSET) #define OFS_INTR_ID (2*REG_OFFSET) #define OFS_DATA_FORMAT (3*REG_OFFSET) #define OFS_LINE_CONTROL (3*REG_OFFSET) #define OFS_MODEM_CONTROL (4*REG_OFFSET) #define OFS_RS232_OUTPUT (4*REG_OFFSET) #define OFS_LINE_STATUS (5*REG_OFFSET) #define OFS_MODEM_STATUS (6*REG_OFFSET) #define OFS_RS232_INPUT (6*REG_OFFSET) #define OFS_SCRATCH_PAD (7*REG_OFFSET) #define OFS_DIVISOR_LSB (0*REG_OFFSET) #define OFS_DIVISOR_MSB (1*REG_OFFSET) /* memory-mapped read/write of the port */ #define UART16550_READ(y) (*((volatile uint8*)(BASE + y))) #define UART16550_WRITE(y, z) ((*((volatile uint8*)(BASE + y))) = z) void debugInit(uint32 baud, uint8 data, uint8 parity, uint8 stop) { /* disable interrupts */ UART16550_WRITE(OFS_INTR_ENABLE, 0); /* set up buad rate */ { uint32 divisor; /* set DIAB bit */ UART16550_WRITE(OFS_LINE_CONTROL, 0x80); /* set divisor */ divisor = MAX_BAUD / baud; UART16550_WRITE(OFS_DIVISOR_LSB, divisor & 0xff); UART16550_WRITE(OFS_DIVISOR_MSB, (divisor & 0xff00) >> 8); /* clear DIAB bit */ UART16550_WRITE(OFS_LINE_CONTROL, 0x0); } /* set data format */ UART16550_WRITE(OFS_DATA_FORMAT, data | parity | stop); } uint8 getDebugChar(void) { if (!remoteDebugInitialized) { remoteDebugInitialized = 1; debugInit(BAUD_DEFAULT, UART16550_DATA_8BIT, UART16550_PARITY_NONE, UART16550_STOP_1BIT); } while ((UART16550_READ(OFS_LINE_STATUS) & 0x1) == 0); return UART16550_READ(OFS_RCV_BUFFER); } int putDebugChar(uint8 byte) { if (!remoteDebugInitialized) { remoteDebugInitialized = 1; debugInit(BAUD_DEFAULT, UART16550_DATA_8BIT, UART16550_PARITY_NONE, UART16550_STOP_1BIT); } while ((UART16550_READ(OFS_LINE_STATUS) & 0x20) == 0); UART16550_WRITE(OFS_SEND_BUFFER, byte); return 1; } --- NEW FILE: prom.c --- /* * Copyright 2001 MontaVista Software Inc. * Author: js...@mv... or js...@ju... * * arch/mips/vr4181/osprey/prom.c * prom code for osprey. * * 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. * */ #include <linux/init.h> #include <linux/config.h> #include <linux/kernel.h> #include <linux/string.h> #include <linux/mm.h> #include <linux/bootmem.h> #include <asm/bootinfo.h> #include <asm/addrspace.h> char arcs_cmdline[CL_SIZE]; const char *get_system_type(void) { return "NEC_Vr41xx Osprey"; } /* * [jsun] right now we assume it is the nec debug monitor, which does * not pass any arguments. */ void __init prom_init() { strcat(arcs_cmdline, "ether=46,0x03fe0300,eth0 "); // strcpy(arcs_cmdline, "ether=0,0x0300,eth0 " // strcat(arcs_cmdline, "video=vr4181fb:xres:240,yres:320,bpp:8 "); mips_machgroup = MACH_GROUP_NEC_VR41XX; mips_machtype = MACH_NEC_OSPREY; /* 16MB fixed */ add_memory_region(0, 16 << 20, BOOT_MEM_RAM); } void __init prom_free_prom_memory(void) { } void __init prom_fixup_mem_map(unsigned long start, unsigned long end) { } --- NEW FILE: reset.c --- /* * 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/sched.h> #include <linux/mm.h> #include <asm/io.h> #include <asm/pgtable.h> #include <asm/processor.h> #include <asm/reboot.h> #include <asm/system.h> void nec_osprey_restart(char *command) { set_cp0_status(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)); } void nec_osprey_halt(void) { printk(KERN_NOTICE "\n** You can safely turn off the power\n"); while (1) __asm__(".set\tmips3\n\t" "wait\n\t" ".set\tmips0"); } void nec_osprey_power_off(void) { nec_osprey_halt(); } --- NEW FILE: setup.c --- /* * linux/arch/mips/vr4181/setup.c * * VR41xx setup routines * * Copyright (C) 1999 Bradley D. LaRonde * Copyright (C) 1999, 2000 Michael Klar * * Copyright 2001 MontaVista Software Inc. * Author: js...@mv... or js...@ju... * * 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. * */ #include <linux/config.h> #include <linux/console.h> #include <linux/ide.h> #include <linux/init.h> #include <linux/delay.h> #include <asm/reboot.h> #include <asm/vr4181/vr4181.h> #include <asm/io.h> extern void nec_osprey_restart(char* c); extern void nec_osprey_halt(void); extern void nec_osprey_power_off(void); extern void vr4181_init_serial(void); extern void vr4181_init_time(void); void __init bus_error_init(void) { } void __init nec_osprey_setup(void) { set_io_port_base(VR4181_PORT_BASE); isa_slot_offset = VR4181_ISAMEM_BASE; vr4181_init_serial(); vr4181_init_time(); #ifdef CONFIG_FB conswitchp = &dummy_con; #endif _machine_restart = nec_osprey_restart; _machine_halt = nec_osprey_halt; _machine_power_off = nec_osprey_power_off; /* setup resource limit */ ioport_resource.end = 0xffffffff; iomem_resource.end = 0xffffffff; /* [jsun] hack */ /* printk("[jsun] hack to change external ISA control register, %x -> %x\n", (*VR4181_XISACTL), (*VR4181_XISACTL) | 0x2); *VR4181_XISACTL |= 0x2; */ // *VR4181_GPHIBSTH = 0x2000; // *VR4181_GPMD0REG = 0x00c0; // *VR4181_GPINTEN = 1<<6; /* [jsun] I believe this will get the interrupt type right * for the ether port. */ *VR4181_GPINTTYPL = 0x3000; } |