hpcmips support of kloader.

This commit is contained in:
uch 2002-01-29 18:47:25 +00:00
parent 1edc58c08c
commit f39553cc10
6 changed files with 410 additions and 19 deletions

View File

@ -1,4 +1,4 @@
# $NetBSD: files.hpcmips,v 1.68 2002/01/27 14:18:11 takemura Exp $
# $NetBSD: files.hpcmips,v 1.69 2002/01/29 18:47:29 uch Exp $
# maxpartitions must be first item in files.${ARCH}.
maxpartitions 8
@ -59,9 +59,15 @@ file arch/hpcmips/hpcmips/conf.c
file arch/hpcmips/hpcmips/interrupt.c
file arch/hpcmips/hpcmips/machdep.c
file arch/hpcmips/hpcmips/mainbus.c
file arch/hpcmips/hpcmips/bitdisp.c
file arch/hpcmips/hpcmips/procfs_machdep.c procfs
file arch/hpc/hpc/kloader.c
file arch/hpcmips/hpcmips/kloader_machdep.c
file arch/hpcmips/hpcmips/kloader_vr41.S vr41xx
file arch/hpcmips/hpcmips/kloader_tx39.S tx39xx
defflag debug_kloader.h KLOADER_DEBUG
defparam opt_kloader_kernel_path.h KLOADER_KERNEL_PATH
#
# H/PC Platform common files.
#
@ -72,6 +78,11 @@ include "dev/hpc/files.hpcfb"
include "dev/hpc/files.hpckbd"
include "dev/hpc/files.hpctp"
#
# Debug utility
#
file arch/hpc/hpc/debug_subr.c
# Console autoconfiguration code: selects between a framebuffers
file dev/cons.c
@ -202,13 +213,12 @@ file arch/hpcmips/vr/vrc4173kiu.c vrc4173kiu
#
# TOSHIBA TX3912/3922
#
defflag TX39_DEBUG
defflag TX39_WATCHDOGTIMER
defflag TX39ICUDEBUG
defflag TX39CLKDEBUG
defflag TX39BIUDEBUG
defflag TX39POWERDEBUG
defflag TX39UARTDEBUG
defflag TX39ICU_DEBUG
defflag TX39CLOCK_DEBUG
defflag TX39BIU_DEBUG
defflag TX39POWER_DEBUG
defflag TX39UART_DEBUG
defflag USE_POLL
device txsim { }

View File

@ -0,0 +1,70 @@
/* $NetBSD: kloader_machdep.c,v 1.1 2002/01/29 18:47:26 uch Exp $ */
/*-
* Copyright (c) 2001, 2002 The NetBSD Foundation, Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the NetBSD
* Foundation, Inc. and its contributors.
* 4. Neither the name of The NetBSD Foundation nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
* ``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 FOUNDATION OR CONTRIBUTORS
* 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.
*/
#include <sys/param.h>
#include <sys/systm.h>
#include <mips/cache.h>
#include <machine/kloader.h>
void kloader_mips_jump(kloader_bootfunc_t *, vaddr_t,
struct kloader_bootinfo *, struct kloader_page_tag *);
extern kloader_bootfunc_t kloader_vr_boot;
extern kloader_bootfunc_t kloader_tx_boot;
struct kloader_ops kloader_mips_ops = {
.jump = kloader_mips_jump,
.boot = 0
};
void
kloader_reboot_setup(const char *filename)
{
kloader_mips_ops.boot = CPUISMIPS3 ? kloader_vr_boot : kloader_tx_boot;
__kloader_reboot_setup(&kloader_mips_ops, filename);
}
void
kloader_mips_jump(kloader_bootfunc_t func, vaddr_t sp,
struct kloader_bootinfo *info, struct kloader_page_tag *tag)
{
mips_icache_sync_all();
(*func)(info, tag); /* 2nd-bootloader don't use stack */
/* NOTREACHED */
}

View File

@ -0,0 +1,131 @@
/* $NetBSD: kloader_tx39.S,v 1.1 2002/01/29 18:47:26 uch Exp $ */
/*-
* Copyright (c) 2002 The NetBSD Foundation, Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the NetBSD
* Foundation, Inc. and its contributors.
* 4. Neither the name of The NetBSD Foundation nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
* ``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 FOUNDATION OR CONTRIBUTORS
* 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.
*/
#include <mips/asm.h>
#include <mips/cpuregs.h>
.set noreorder
.text
/*
* void kloader_tx_boot(struct kloader_bootinfo *kbi, kloader_page_tag *p)
* must be PIC.
*/
EXPORT(kloader_tx_boot)
LEAF_NOPROFILE(kloader_tx_boot)
/*
* 1. load kernel image.
*/
move t6, a1 # p
1:
beqz t6, 3f
move t7, t6
lw t6, 0(t7) # p = next
lw t0, 4(t7) # src
lw t4, 8(t7) # dst
lw t2, 12(t7) # sz
addu t5, t4, t2 # dst + sz
2:
lw t3, 0(t0) # copy
sw t3, 0(t4)
addiu t4, t4, 4
addiu t0, t0, 4
bltu t4, t5, 2b
nop
b 1b
nop
3:
nop
/*
* 2. Cache flush
*/
li t1, 16384
li t2, 8192
/* Disable I-cache */
li t5, ~0x00000020
mfc0 t6, $3
and t5, t5, t6
nop
mtc0 t5, $3
/* Stop streaming */
beq zero, zero, 1f
nop
1:
/* Flush I-cache */
li t0, 0x80000000
addu t1, t0, t1
subu t1, t1, 128
2:
.set push
.set mips3
cache 0x0, 0($0)
cache 0x0, 16(t0)
cache 0x0, 32(t0)
cache 0x0, 48(t0)
cache 0x0, 64(t0)
cache 0x0, 80(t0)
cache 0x0, 96(t0)
cache 0x0, 112(t0)
.set pop
bne t0, t1, 2b
addu t0, t0, 128
/* Flush D-cache */
li t0, 0x80000000
addu t1, t0, t2
3:
lw t2, 0(t0)
bne t1, t0, 3b
addiu t0, t0, 4
/* Enable I-cache */
nop
mtc0 t6, $3
nop
/*
* 3. jump to kernel entry
*/
move t0, a0
lw t1, 0(a0) # kbi->entry
lw a0, 4(t0) # kbi->argc
lw a1, 8(t0) # kbi->argv
j t1
addiu a2, t0, 12 # &kbi->bootinfo
/* NOTREACHED */
END(kloader_tx_boot)

View File

@ -0,0 +1,122 @@
/* $NetBSD: kloader_vr41.S,v 1.1 2002/01/29 18:47:25 uch Exp $ */
/*-
* Copyright (c) 2002 The NetBSD Foundation, Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the NetBSD
* Foundation, Inc. and its contributors.
* 4. Neither the name of The NetBSD Foundation nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
* ``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 FOUNDATION OR CONTRIBUTORS
* 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.
*/
#include <mips/asm.h>
#include <mips/cpuregs.h>
.set noreorder
.text
/*
* void kloader_vr_boot(struct kloader_bootinfo *kbi, kloader_page_tag *p)
* must be PIC.
*/
EXPORT(kloader_vr_boot)
LEAF_NOPROFILE(kloader_vr_boot)
/*
* 1. load kernel image.
*/
move t6, a1 # p
1:
beqz t6, 3f
move t7, t6
lw t6, 0(t7) # p = next
lw t0, 4(t7) # src
lw t4, 8(t7) # dst
lw t2, 12(t7) # sz
addu t5, t4, t2 # dst + sz
2:
lw t3, 0(t0) # copy
sw t3, 0(t4)
addiu t4, t4, 4
addiu t0, t0, 4
bltu t4, t5, 2b
nop
b 1b
nop
3:
nop
/*
* 2. Cache flush
*/
/* Flush I-cache */
li t0, 0x80000000
addu t1, t0, 1024 * 128
subu t1, t1, 128
1:
.set push
.set mips3
cache 0, 0(t0)
cache 0, 16(t0)
cache 0, 32(t0)
cache 0, 48(t0)
cache 0, 64(t0)
cache 0, 80(t0)
cache 0, 96(t0)
cache 0, 112(t0)
.set pop
bne t0, t1, 1b
addu t0, t0, 128
/* Flush D-cache */
li t0, 0x80000000
addu t1, t0, 1024 * 128
subu t1, t1, 128
2:
.set push
.set mips3
cache 1, 0(t0)
cache 1, 16(t0)
cache 1, 32(t0)
cache 1, 48(t0)
cache 1, 64(t0)
cache 1, 80(t0)
cache 1, 96(t0)
cache 1, 112(t0)
.set pop
bne t0, t1, 2b
addu t0, t0, 128
/*
* 3. jump to kernel entry
*/
move t0, a0
lw t1, 0(a0) # kbi->entry
lw a0, 4(t0) # kbi->argc
lw a1, 8(t0) # kbi->argv
j t1
addiu a2, t0, 12 # &kbi->bootinfo
/* NOTREACHED */
END(kloader_vr_boot)

View File

@ -1,4 +1,4 @@
/* $NetBSD: machdep.c,v 1.65 2002/01/02 13:13:20 uch Exp $ */
/* $NetBSD: machdep.c,v 1.66 2002/01/29 18:47:27 uch Exp $ */
/*-
* Copyright (c) 1999 Shin Takemura, All rights reserved.
@ -73,7 +73,7 @@
*/
#include <sys/cdefs.h> /* RCS ID & Copyright macro defns */
__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.65 2002/01/02 13:13:20 uch Exp $");
__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.66 2002/01/29 18:47:27 uch Exp $");
#include "opt_vr41xx.h"
#include "opt_tx39xx.h"
@ -85,6 +85,7 @@ __KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.65 2002/01/02 13:13:20 uch Exp $");
#include "opt_kgdb.h"
#include "opt_rtc_offset.h"
#include "fs_nfs.h"
#include "opt_kloader_kernel_path.h"
#include <sys/param.h>
#include <sys/systm.h>
@ -104,6 +105,7 @@ __KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.65 2002/01/02 13:13:20 uch Exp $");
#include <machine/bootinfo.h>
#include <machine/platid.h>
#include <machine/platid_mask.h>
#include <machine/kloader.h>
#include <hpcmips/hpcmips/machdep.h>
@ -202,6 +204,12 @@ extern void stacktrace(void); /*XXX*/
void
mach_init(int argc, char *argv[], struct bootinfo *bi)
{
/*
* this routines stack is never polluted since stack pointer
* is lower than kernel text segment, and at exiting, stack pointer
* is changed to proc0.
*/
struct kloader_bootinfo kbi;
extern struct user *proc0paddr;
extern char edata[], end[];
#ifdef DDB
@ -262,6 +270,8 @@ mach_init(int argc, char *argv[], struct bootinfo *bi)
platid.dw.dw1 = bootinfo->platid_machine;
}
}
/* copy boot parameter for kloader */
kloader_bootinfo_set(&kbi, argc, argv, bi, FALSE);
/*
* CPU core Specific Function Hooks
@ -646,8 +656,13 @@ cpu_reboot(int howto, char *bootstr)
}
/* If "always halt" was specified as a boot flag, obey. */
if ((boothowto & RB_HALT) != 0)
if ((boothowto & RB_HALT) != 0) {
howto |= RB_HALT;
} else {
#ifdef KLOADER_KERNEL_PATH
kloader_reboot_setup(KLOADER_KERNEL_PATH);
#endif
}
boothowto = howto;
if ((howto & RB_NOSYNC) == 0) {
@ -667,12 +682,8 @@ cpu_reboot(int howto, char *bootstr)
splhigh();
/* If rebooting and a dump is requested do it. */
#if 0
if ((howto & (RB_DUMP | RB_HALT)) == RB_DUMP)
#else
if (howto & RB_DUMP)
#endif
dumpsys();
if (howto & RB_DUMP)
dumpsys();
haltsys:
@ -680,9 +691,16 @@ cpu_reboot(int howto, char *bootstr)
doshutdownhooks();
/* Finally, halt/reboot the system. */
printf("%s\n\n", howto & RB_HALT ? "halted." : "rebooting...");
(*platform.reboot)(howto, bootstr);
if (howto & RB_HALT) {
printf("halted.\n");
} else {
#ifdef KLOADER_KERNEL_PATH
kloader_reboot();
/* NOTREACHED */
#endif
}
(*platform.reboot)(howto, bootstr);
while(1)
;
/*NOTREACHED*/

View File

@ -0,0 +1,40 @@
/* $NetBSD: kloader.h,v 1.1 2002/01/29 18:47:28 uch Exp $ */
/*-
* Copyright (c) 2001, 2002 The NetBSD Foundation, Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the NetBSD
* Foundation, Inc. and its contributors.
* 4. Neither the name of The NetBSD Foundation nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
* ``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 FOUNDATION OR CONTRIBUTORS
* 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.
*/
#include <hpc/include/kloader.h>
#define PG_VADDR(pg) MIPS_PHYS_TO_KSEG0(VM_PAGE_TO_PHYS(pg))
void kloader_reboot_setup(const char *);