From owner-svn-src-projects@FreeBSD.ORG Sat Aug 15 21:42:05 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 42DF0106568B; Sat, 15 Aug 2009 21:42:05 +0000 (UTC) (envelope-from imp@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 326598FC41; Sat, 15 Aug 2009 21:42:05 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n7FLg5FT089738; Sat, 15 Aug 2009 21:42:05 GMT (envelope-from imp@svn.freebsd.org) Received: (from imp@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n7FLg5Ut089736; Sat, 15 Aug 2009 21:42:05 GMT (envelope-from imp@svn.freebsd.org) Message-Id: <200908152142.n7FLg5Ut089736@svn.freebsd.org> From: Warner Losh Date: Sat, 15 Aug 2009 21:42:05 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r196262 - projects/mips/sys/mips/octeon1 X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 15 Aug 2009 21:42:05 -0000 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 +#include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include +#include +#include +#include #include #include #include #include -#include +#include +#include +#include +#include #include +#include +#include +#include #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 +} /* ****************************************************************************************