diff options
Diffstat (limited to 'arch/mips/dec/boot.S')
-rw-r--r-- | arch/mips/dec/boot.S | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/arch/mips/dec/boot.S b/arch/mips/dec/boot.S new file mode 100644 index 000000000..587c43623 --- /dev/null +++ b/arch/mips/dec/boot.S @@ -0,0 +1,92 @@ +/* + * arch/mips/dec/boot.S + * + * Copyright (C) 1995, 1996 Paul M. Antoine + * + * Written by Ralf Baechle and Andreas Busse, modified for DECStation + * support by Paul Antoine. + * + * NOTE: There are references to R4X00 code in here, because there is an + * upgrade module for Personal DECStations with such a CPU! + */ +#include <asm/asm.h> +#include <asm/regdef.h> +#include <asm/fpregdef.h> +#include <asm/mipsconfig.h> +#include <asm/mipsregs.h> +#include <asm/stackframe.h> +#include <asm/bootinfo.h> + +/* + * dec_entry: Called by the boot PROM loader to do DECStation setup, prior + * to calling dec_setup() to fill in the boot_info structure. + * + * This code should also go in the boot loader for loading off + * floppy and HD... in addition to the tags code in dec_setup(). + * + * FIXME: arrange for this code only to be linked in when building a + * kernel image to be booted via tftp from the boot prom?? + */ + .text + .globl dec_entry +dec_entry: + /* Save the address of the REX call vector for later + * use in printing debug messages. + */ + sw a3,pmax_rex_base + sw a2,rex_prom_magic + la a0,dec_signon + jal pmax_printf + nop + + /* Now set up the bootinfo with things that + * should be loaded by the boot loader, except that + * for the moment we're booting using tftp. + */ + jal dec_setup + nop +/* + * Now we need to move exception vector handler routines that appear + * in head.S down to the right addresses, 'cos the DECStation loads + * kernels at 0x80030000... <sigh> + */ + +/* + * First move the TLB refill code down to offset 0x000, at addr 0x80000000 + */ + la t0,except_vec0 # begining of exception code + la t1,except_vec1 # end of exception code + la t2,0x80000000 # where the code should live + lw t3,(t0) # get first word +1: sw t3,(t2) # put it where it should go + addiu t0,4 # increment both pointers + addiu t2,4 + lw t3,(t0) # will be in the delay slot + bne t0,t1,1b +/* + * Now move the General Exception code down to offset 0x080 at 0x80000000 + */ + la t0,except_vec3 # begining of general exception code + la t1,end_except # end of general exception code + la t2,0x80000080 # where the code should live + lw t3,(t0) # get first word +1: sw t3,(t2) + addiu t0,4 + addiu t2,4 + lw t3,(t0) + bne t0,t1,1b + + la a0,dec_launch # say where we are going + jal pmax_printf + nop + + la t0,mach_mem_upper # get upper memory bound + lw a0,(t0) + j kernel_entry + nop + + .data + .align 2 +dec_signon: .ascii "\n\nLinux/MIPS DECStation Boot\n"; + .asciiz "Copyright (C) Paul M. Antoine 1995, 1996 and others, 1994, 1995, 1996\n\n"; +dec_launch: .asciiz "Setup complete, launching kernel...\n"; |