Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 15 Aug 2009 21:42:05 +0000 (UTC)
From:      Warner Losh <imp@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r196262 - projects/mips/sys/mips/octeon1
Message-ID:  <200908152142.n7FLg5Ut089736@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: imp
Date: Sat Aug 15 21:42:04 2009
New Revision: 196262
URL: http://svn.freebsd.org/changeset/base/196262

Log:
  First cut at a platform_start.  It is likely wrong, but it is better
  than nothing :)

Modified:
  projects/mips/sys/mips/octeon1/octeon_machdep.c

Modified: projects/mips/sys/mips/octeon1/octeon_machdep.c
==============================================================================
--- projects/mips/sys/mips/octeon1/octeon_machdep.c	Sat Aug 15 21:37:16 2009	(r196261)
+++ projects/mips/sys/mips/octeon1/octeon_machdep.c	Sat Aug 15 21:42:04 2009	(r196262)
@@ -29,20 +29,57 @@
 __FBSDID("$FreeBSD$");
 
 #include <sys/param.h>
+#include <sys/conf.h>
+#include <sys/kernel.h>
 #include <sys/systm.h>
+#include <sys/imgact.h>
+#include <sys/bio.h>
+#include <sys/buf.h>
+#include <sys/bus.h>
+#include <sys/cpu.h>
+#include <sys/cons.h>
+#include <sys/exec.h>
+#include <sys/ucontext.h>
+#include <sys/proc.h>
+#include <sys/kdb.h>
+#include <sys/ptrace.h>
+#include <sys/reboot.h>
+#include <sys/signalvar.h>
+#include <sys/sysent.h>
+#include <sys/sysproto.h>
+#include <sys/user.h>
+
+#include <vm/vm.h>
+#include <vm/vm_object.h>
+#include <vm/vm_page.h>
+#include <vm/vm_pager.h>
+
+#include <machine/atomic.h>
+#include <machine/cache.h>
+#include <machine/clock.h>
+#include <machine/cpu.h>
 #include <machine/cpuregs.h>
 #include <machine/cpufunc.h>
 #include <mips/octeon1/octeon_pcmap_regs.h>
 #include <mips/octeon1/octeonreg.h>
-#include <machine/atomic.h>
+#include <machine/hwfunc.h>
+#include <machine/intr_machdep.h>
+#include <machine/locore.h>
+#include <machine/md_var.h>
 #include <machine/pcpu.h>
+#include <machine/pte.h>
+#include <machine/trap.h>
+#include <machine/vmparam.h>
 
 #if defined(__mips_n64) 
-      #define MAX_APP_DESC_ADDR     0xffffffffafffffff
+#define MAX_APP_DESC_ADDR     0xffffffffafffffff
 #else
-      #define MAX_APP_DESC_ADDR     0xafffffff
+#define MAX_APP_DESC_ADDR     0xafffffff
 #endif
 
+extern int	*edata;
+extern int	*end;
+
 
 /*
  * Perform a board-level soft-reset.
@@ -625,16 +662,79 @@ void ciu_enable_interrupts (int core_num
 	octeon_set_interrupts(cpu_status_bits);
 }
 
+void
+platform_start(__register_t a0, __register_t a1,
+    __register_t a2 __unused, __register_t a3 __unused)
+{
+	uint64_t platform_counter_freq;
+	vm_offset_t kernend;
+	int argc = a0;
+	char **argv = (char **)a1;
+	int i, mem;
+
+	/* clear the BSS and SBSS segments */
+	kernend = round_page((vm_offset_t)&end);
+	memset(&edata, 0, kernend - (vm_offset_t)(&edata));
 
-extern void mips_platform_init(void);
-
-void mips_platform_init (void)
-{
         octeon_ciu_reset();
     	octeon_uart_write_string(0, "\nPlatform Starting");
-}
-
 
+/* From here on down likely is bogus */
+	/*
+	 * Looking for mem=XXM argument
+	 */
+	mem = 0; /* Just something to start with */
+	for (i=0; i < argc; i++) {
+		if (strncmp(argv[i], "mem=", 4) == 0) {
+			mem = strtol(argv[i] + 4, NULL, 0);
+			break;
+		}
+	}
+
+	bootverbose = 1;
+	if (mem > 0)
+		realmem = btoc(mem << 20);
+	else
+		realmem = btoc(32 << 20);
+
+	for (i = 0; i < 10; i++) {
+		phys_avail[i] = 0;
+	}
+
+	/* phys_avail regions are in bytes */
+	phys_avail[0] = MIPS_KSEG0_TO_PHYS((vm_offset_t)&end);
+	phys_avail[1] = ctob(realmem);
+
+	physmem = realmem;
+
+	/* 
+	 * ns8250 uart code uses DELAY so ticker should be inititalized 
+	 * before cninit. And tick_init_params refers to hz, so * init_param1 
+	 * should be called first.
+	 */
+	init_param1();
+	/* TODO: parse argc,argv */
+	platform_counter_freq = 330000000UL; /* XXX: from idt */
+	mips_timer_init_params(platform_counter_freq, 1);
+	cninit();
+	/* Panic here, after cninit */ 
+	if (mem == 0)
+		panic("No mem=XX parameter in arguments");
+
+	printf("cmd line: ");
+	for (i=0; i < argc; i++)
+		printf("%s ", argv[i]);
+	printf("\n");
+
+	init_param2(physmem);
+	mips_cpu_init();
+	pmap_bootstrap();
+	mips_proc0_init();
+	mutex_init();
+#ifdef DDB
+	kdb_init();
+#endif
+}
 
 /*
  ****************************************************************************************



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200908152142.n7FLg5Ut089736>