summaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorJasper Lievisse Adriaanse <jasper@cvs.openbsd.org>2014-07-12 20:36:53 +0000
committerJasper Lievisse Adriaanse <jasper@cvs.openbsd.org>2014-07-12 20:36:53 +0000
commit316e344d8e3be1363c4761c72c382a8cb0343072 (patch)
treec1e665e8e881dad20e33c68739e9f3878bc3c8d5 /sys
parent3dd428fff20728fb26f32433a9e3ffefe3b45d2e (diff)
- replace main() with mips_init() so we can save the arguments from uboot to
pass it to the kernel later on. also use it to get the clock frequency. - implement getsecs() so the bootprompt timeout works input/ok miod@ pirofti@
Diffstat (limited to 'sys')
-rw-r--r--sys/arch/octeon/stand/boot/libsa.h5
-rw-r--r--sys/arch/octeon/stand/boot/machdep.c30
-rw-r--r--sys/arch/octeon/stand/boot/start.S12
3 files changed, 35 insertions, 12 deletions
diff --git a/sys/arch/octeon/stand/boot/libsa.h b/sys/arch/octeon/stand/boot/libsa.h
index 90c6061b384..28b282cc7a1 100644
--- a/sys/arch/octeon/stand/boot/libsa.h
+++ b/sys/arch/octeon/stand/boot/libsa.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: libsa.h,v 1.1 2013/06/05 01:02:29 jasper Exp $ */
+/* $OpenBSD: libsa.h,v 1.2 2014/07/12 20:36:52 jasper Exp $ */
/*
* Copyright (c) 2013 Jasper Lievisse Adriaanse <jasper@openbsd.org>
@@ -34,7 +34,6 @@ void run_loadfile(u_long *, int);
/*
* CN30XX UART
*/
-
void cn30xxuartcnprobe(struct consdev *);
void cn30xxuartcninit(struct consdev *);
void cn30xxuartcnputc(dev_t, int);
@@ -44,3 +43,5 @@ int cn30xxuartcngetc(dev_t);
* clock
*/
void delay(int);
+u_int cp0_get_count(void);
+
diff --git a/sys/arch/octeon/stand/boot/machdep.c b/sys/arch/octeon/stand/boot/machdep.c
index 15c7482e908..78d6ae877a2 100644
--- a/sys/arch/octeon/stand/boot/machdep.c
+++ b/sys/arch/octeon/stand/boot/machdep.c
@@ -1,8 +1,8 @@
-/* $OpenBSD: machdep.c,v 1.2 2013/06/13 20:01:01 jasper Exp $ */
+/* $OpenBSD: machdep.c,v 1.3 2014/07/12 20:36:52 jasper Exp $ */
/*
* Copyright (c) 2009, 2010 Miodrag Vallat.
- * Copyright (c) 2013 Jasper Lievisse Adriaanse <jasper@openbsd.org>
+ * Copyright (c) 2013,2014 Jasper Lievisse Adriaanse <jasper@openbsd.org>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -45,16 +45,28 @@
#include <sys/param.h>
#include <lib/libkern/libkern.h>
#include "libsa.h"
+#include <stand/boot/cmd.h>
#include <machine/cpu.h>
#include <machine/octeonreg.h>
#include <machine/octeonvar.h>
-#include <stand/boot/cmd.h>
+struct boot_desc *boot_desc;
+struct boot_info *boot_info;
+
+/*
+ * We need to save the arguments u-boot setup for us, so we can pass them
+ * onwards to the kernel later on.
+ */
int
-main()
+mips_init(__register_t a0, __register_t a1, __register_t a2 __unused,
+ __register_t a3)
{
+ boot_desc = (struct boot_desc *)a3;
+ boot_info =
+ (struct boot_info *)PHYS_TO_CKSEG0(boot_desc->boot_info_addr);
+
boot(0);
- return (0);
+ return 0;
}
/*
@@ -141,9 +153,12 @@ devboot(dev_t dev, char *path)
}
time_t
-getsecs()
+getsecs(void)
{
- return (0);
+ u_int ticks = cp0_get_count();
+ uint32_t freq = boot_desc->eclock;
+
+ return (time_t)((0xffffffff - ticks) / freq);
}
void
@@ -158,4 +173,3 @@ _rtt()
octeon_xkphys_write_8(OCTEON_CIU_BASE + CIU_SOFT_RST, 1);
for (;;) ;
}
-
diff --git a/sys/arch/octeon/stand/boot/start.S b/sys/arch/octeon/stand/boot/start.S
index 136ab44f0b1..926c28588e7 100644
--- a/sys/arch/octeon/stand/boot/start.S
+++ b/sys/arch/octeon/stand/boot/start.S
@@ -1,4 +1,4 @@
-/* $OpenBSD: start.S,v 1.2 2013/06/05 01:09:09 jasper Exp $ */
+/* $OpenBSD: start.S,v 1.3 2014/07/12 20:36:52 jasper Exp $ */
/*
* Copyright (c) 2001-2004 Opsycon AB (www.opsycon.se / www.opsycon.com)
@@ -38,6 +38,13 @@
.globl __start
.globl kernel_text
kernel_text = __start
+LEAF(cp0_get_count, 0)
+ MFC0 v0, COP_0_COUNT
+ MFC0_HAZARD
+ j ra
+ NOP
+END(cp0_get_count)
+
__start:
/* initialize ebase */
dla t0, 0xffffffff80000000
@@ -71,7 +78,8 @@ __start:
PTR_S ra, CF_RA_OFFS(t0) # save uboot return address
PTR_S sp, 0(t0) # and stack
move sp, t0
- jal main # main(argc, argv, envp, callvec, esym)
+ jal mips_init # mips_init(argc, argv, envp,
+ nop # callvec, esym)
beqz v0, 1f # upon failure, return to uboot
nop