Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 27 Apr 2010 21:29:30 +0000 (UTC)
From:      Juli Mallett <jmallett@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-user@freebsd.org
Subject:   svn commit: r207299 - user/jmallett/octeon/sys/mips/cavium
Message-ID:  <201004272129.o3RLTUGG027889@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: jmallett
Date: Tue Apr 27 21:29:30 2010
New Revision: 207299
URL: http://svn.freebsd.org/changeset/base/207299

Log:
  o) Get more things directly from octeon_bootinfo rather than global variables.
  o) Remove unknown descriptor version hacks that cannot possibly work.

Modified:
  user/jmallett/octeon/sys/mips/cavium/octeon_machdep.c
  user/jmallett/octeon/sys/mips/cavium/octeon_mp.c
  user/jmallett/octeon/sys/mips/cavium/octeon_pcmap_regs.h

Modified: user/jmallett/octeon/sys/mips/cavium/octeon_machdep.c
==============================================================================
--- user/jmallett/octeon/sys/mips/cavium/octeon_machdep.c	Tue Apr 27 21:10:43 2010	(r207298)
+++ user/jmallett/octeon/sys/mips/cavium/octeon_machdep.c	Tue Apr 27 21:29:30 2010	(r207299)
@@ -81,7 +81,6 @@ __FBSDID("$FreeBSD$");
 #endif
 
 #define OCTEON_CLOCK_DEFAULT (500 * 1000 * 1000)
-#define OCTEON_DRAM_DEFAULT  (256 * 1024 * 1024)
 
 struct octeon_feature_description {
 	octeon_feature_t ofd_feature;
@@ -408,10 +407,7 @@ typedef struct {
 	uint64_t cvmx_desc_vaddr;
 } octeon_boot_descriptor_t;
 
-uint64_t octeon_dram;
-static uint32_t octeon_bd_ver = 0, octeon_cvmx_bd_ver = 0;
-uint8_t octeon_mac_addr[6] = { 0 };
-int octeon_core_mask, octeon_mac_addr_count;
+int octeon_core_mask;
 cvmx_bootinfo_t *octeon_bootinfo;
 
 static octeon_boot_descriptor_t *app_desc_ptr;
@@ -443,57 +439,23 @@ octeon_is_simulation(void)
 }
 
 static void
-octeon_process_app_desc_ver_unknown(void)
-{
-    	printf(" Unknown Boot-Descriptor: Using Defaults\n");
-
-        octeon_dram = OCTEON_DRAM_DEFAULT;
-        octeon_core_mask = 1;
-        octeon_mac_addr[0] = 0x00; octeon_mac_addr[1] = 0x0f;
-        octeon_mac_addr[2] = 0xb7; octeon_mac_addr[3] = 0x10;
-        octeon_mac_addr[4] = 0x09; octeon_mac_addr[5] = 0x06;
-        octeon_mac_addr_count = 1;
-
-	cvmx_sysinfo_minimal_initialize(NULL, CVMX_BOARD_TYPE_NULL,
-					0, 0, OCTEON_CLOCK_DEFAULT);
-}
-
-static int
 octeon_process_app_desc_ver_6(void)
 {
 	void *phy_mem_desc_ptr;
 
 	/* XXX Why is 0x00000000ffffffffULL a bad value?  */
 	if (app_desc_ptr->cvmx_desc_vaddr == 0 ||
-	    app_desc_ptr->cvmx_desc_vaddr == 0xfffffffful) {
-            	printf ("Bad octeon_bootinfo %p\n", octeon_bootinfo);
-                return 1;
-	}
+	    app_desc_ptr->cvmx_desc_vaddr == 0xfffffffful)
+            	panic("Bad octeon_bootinfo %p", octeon_bootinfo);
+
     	octeon_bootinfo =
 	    (cvmx_bootinfo_t *)(intptr_t)app_desc_ptr->cvmx_desc_vaddr;
         octeon_bootinfo =
 	    (cvmx_bootinfo_t *) ((intptr_t)octeon_bootinfo | MIPS_KSEG0_START);
-        octeon_cvmx_bd_ver = (octeon_bootinfo->major_version * 100) +
-	    octeon_bootinfo->minor_version;
-        if (octeon_bootinfo->major_version != 1) {
-            	panic("Incompatible CVMX descriptor from bootloader: %d.%d %p\n",
+        if (octeon_bootinfo->major_version != 1)
+            	panic("Incompatible CVMX descriptor from bootloader: %d.%d %p",
                        (int) octeon_bootinfo->major_version,
                        (int) octeon_bootinfo->minor_version, octeon_bootinfo);
-        }
-
-        octeon_core_mask = octeon_bootinfo->core_mask;
-        octeon_mac_addr[0] = octeon_bootinfo->mac_addr_base[0];
-        octeon_mac_addr[1] = octeon_bootinfo->mac_addr_base[1];
-        octeon_mac_addr[2] = octeon_bootinfo->mac_addr_base[2];
-        octeon_mac_addr[3] = octeon_bootinfo->mac_addr_base[3];
-        octeon_mac_addr[4] = octeon_bootinfo->mac_addr_base[4];
-        octeon_mac_addr[5] = octeon_bootinfo->mac_addr_base[5];
-        octeon_mac_addr_count = octeon_bootinfo->mac_addr_count;
-
-        if (app_desc_ptr->dram_size > 16*1024*1024)
-            	octeon_dram = (uint64_t)app_desc_ptr->dram_size;
-	else
-            	octeon_dram = (uint64_t)app_desc_ptr->dram_size << 20;
 
 	phy_mem_desc_ptr =
 	    (void *)MIPS_PHYS_TO_KSEG0(octeon_bootinfo->phy_mem_desc_addr);
@@ -502,47 +464,43 @@ octeon_process_app_desc_ver_6(void)
 					octeon_bootinfo->board_rev_major,
 					octeon_bootinfo->board_rev_minor,
 					octeon_bootinfo->eclock_hz);
-        return 0;
 }
 
 static void
 octeon_boot_params_init(register_t ptr)
 {
-	int bad_desc = 1;
-	
-    	if (ptr != 0 && ptr < MAX_APP_DESC_ADDR) {
-	        app_desc_ptr = (octeon_boot_descriptor_t *)(intptr_t)ptr;
-		octeon_bd_ver = app_desc_ptr->desc_version;
-		if (app_desc_ptr->desc_version < 6)
-			panic("Your boot code is too old to be supported.\n");
-		if (app_desc_ptr->desc_version >= 6)
-			bad_desc = octeon_process_app_desc_ver_6();
-        }
-        if (bad_desc)
-        	octeon_process_app_desc_ver_unknown();
+	if (ptr == 0 || ptr >= MAX_APP_DESC_ADDR)
+		panic("app descriptor passed at invalid address %#jx", (uintmax_t)ptr);
+
+	app_desc_ptr = (octeon_boot_descriptor_t *)(intptr_t)ptr;
+	if (app_desc_ptr->desc_version < 6)
+		panic("Your boot code is too old to be supported.");
+	octeon_process_app_desc_ver_6();
+
+	KASSERT(octeon_bootinfo != NULL, ("octeon_bootinfo should be set"));
 
 	if (cvmx_sysinfo_get()->phy_mem_desc_ptr == NULL)
-		panic("Your boot loader did not supply a memory descriptor.\n");
+		panic("Your boot loader did not supply a memory descriptor.");
 	cvmx_bootmem_init(cvmx_sysinfo_get()->phy_mem_desc_ptr);
 
         printf("Boot Descriptor Ver: %u -> %u/%u",
-               octeon_bd_ver, octeon_cvmx_bd_ver / 100,
-	       octeon_cvmx_bd_ver % 100);
+               app_desc_ptr->desc_version, octeon_bootinfo->major_version,
+	       octeon_bootinfo->minor_version);
         printf("  CPU clock: %uMHz  Core Mask: %#x\n",
-	       cvmx_sysinfo_get()->cpu_clock_hz / 1000000, octeon_core_mask);
-        printf("  Dram: %u MB", (uint32_t)(octeon_dram >> 20));
+	       cvmx_sysinfo_get()->cpu_clock_hz / 1000000,
+	       cvmx_sysinfo_get()->core_mask);
         printf("  Board Type: %u  Revision: %u/%u\n",
                cvmx_sysinfo_get()->board_type,
 	       cvmx_sysinfo_get()->board_rev_major,
 	       cvmx_sysinfo_get()->board_rev_minor);
-#if 0
-        printf("  Octeon Chip: %u  Rev %u/%u",
-               octeon_chip_type, octeon_chip_rev_major, octeon_chip_rev_minor);
-#endif
 
         printf("  Mac Address %02X.%02X.%02X.%02X.%02X.%02X (%d)\n",
-	    octeon_mac_addr[0], octeon_mac_addr[1], octeon_mac_addr[2],
-	    octeon_mac_addr[3], octeon_mac_addr[4], octeon_mac_addr[5],
-	    octeon_mac_addr_count);
+	    octeon_bootinfo->mac_addr_base[0],
+	    octeon_bootinfo->mac_addr_base[1],
+	    octeon_bootinfo->mac_addr_base[2],
+	    octeon_bootinfo->mac_addr_base[3],
+	    octeon_bootinfo->mac_addr_base[4],
+	    octeon_bootinfo->mac_addr_base[5],
+	    octeon_bootinfo->mac_addr_count);
 }
 /* impEND: This stuff should move back into the Cavium SDK */

Modified: user/jmallett/octeon/sys/mips/cavium/octeon_mp.c
==============================================================================
--- user/jmallett/octeon/sys/mips/cavium/octeon_mp.c	Tue Apr 27 21:10:43 2010	(r207298)
+++ user/jmallett/octeon/sys/mips/cavium/octeon_mp.c	Tue Apr 27 21:29:30 2010	(r207299)
@@ -41,6 +41,9 @@ __FBSDID("$FreeBSD$");
 #include <contrib/octeon-sdk/cvmx.h>
 #include <contrib/octeon-sdk/cvmx-interrupt.h>
 
+/* XXX */
+extern cvmx_bootinfo_t *octeon_bootinfo;
+
 unsigned octeon_ap_boot = ~0;
 
 void
@@ -90,7 +93,7 @@ platform_init_ap(int cpuid)
 int
 platform_num_processors(void)
 {
-	return (fls(octeon_core_mask));
+	return (fls(octeon_bootinfo->core_mask));
 }
 
 int

Modified: user/jmallett/octeon/sys/mips/cavium/octeon_pcmap_regs.h
==============================================================================
--- user/jmallett/octeon/sys/mips/cavium/octeon_pcmap_regs.h	Tue Apr 27 21:10:43 2010	(r207298)
+++ user/jmallett/octeon/sys/mips/cavium/octeon_pcmap_regs.h	Tue Apr 27 21:29:30 2010	(r207299)
@@ -288,9 +288,6 @@ extern void octeon_reset(void);
 extern void octeon_led_write_char0(char val);
 extern void octeon_led_run_wheel(int *pos, int led_position);
 extern void octeon_debug_symbol(void);
-extern uint64_t octeon_dram;
-extern uint8_t octeon_mac_addr[6];
-extern int octeon_core_mask, octeon_mac_addr_count;
 extern void octeon_ciu_reset(void);
 extern int octeon_is_simulation(void);
 #endif	/* LOCORE */



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