Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 22 Oct 2009 02:51:31 +0000 (UTC)
From:      Neel Natu <neel@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r198354 - in projects/mips/sys/mips: include mips
Message-ID:  <200910220251.n9M2pVin017155@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: neel
Date: Thu Oct 22 02:51:31 2009
New Revision: 198354
URL: http://svn.freebsd.org/changeset/base/198354

Log:
  Get rid of the hardcoded constants to define cacheable memory:
  SDRAM_ADDR_START, SDRAM_ADDR_END and SDRAM_MEM_SIZE
  
  Instead we now keep a copy of the memory regions enumerated by
  platform-specific code and use that to determine whether an address
  is cacheable or not.
  
  Approved by: imp (mentor)

Deleted:
  projects/mips/sys/mips/include/pltfm.h
Modified:
  projects/mips/sys/mips/include/md_var.h
  projects/mips/sys/mips/include/pmap.h
  projects/mips/sys/mips/mips/machdep.c
  projects/mips/sys/mips/mips/mem.c
  projects/mips/sys/mips/mips/pmap.c
  projects/mips/sys/mips/mips/vm_machdep.c

Modified: projects/mips/sys/mips/include/md_var.h
==============================================================================
--- projects/mips/sys/mips/include/md_var.h	Thu Oct 22 00:32:01 2009	(r198353)
+++ projects/mips/sys/mips/include/md_var.h	Thu Oct 22 02:51:31 2009	(r198354)
@@ -52,8 +52,8 @@ uintptr_t MipsEmulateBranch(struct trapf
 void MipsSwitchFPState(struct thread *, struct trapframe *);
 u_long	kvtop(void *addr);
 int	is_physical_memory(vm_offset_t addr);
-int	is_cacheable_mem(vm_offset_t pa);
-int	is_coherent_mem(vm_offset_t pa);
+
+#define	is_cacheable_mem(pa)	is_physical_memory((pa))
 
 #define	MIPS_DEBUG   0
 

Modified: projects/mips/sys/mips/include/pmap.h
==============================================================================
--- projects/mips/sys/mips/include/pmap.h	Thu Oct 22 00:32:01 2009	(r198353)
+++ projects/mips/sys/mips/include/pmap.h	Thu Oct 22 02:51:31 2009	(r198354)
@@ -145,7 +145,21 @@ typedef struct pv_entry {
 #define	PMAP_DIAGNOSTIC
 #endif
 
-extern vm_offset_t phys_avail[];
+/*
+ * physmem_desc[] is a superset of phys_avail[] and describes all the
+ * memory present in the system.
+ *
+ * phys_avail[] is similar but does not include the memory stolen by
+ * pmap_steal_memory().
+ *
+ * Each memory region is described by a pair of elements in the array
+ * so we can describe up to (PHYS_AVAIL_ENTRIES / 2) distinct memory
+ * regions.
+ */
+#define	PHYS_AVAIL_ENTRIES	10
+extern vm_offset_t phys_avail[PHYS_AVAIL_ENTRIES + 2];
+extern vm_offset_t physmem_desc[PHYS_AVAIL_ENTRIES + 2];
+
 extern char *ptvmmap;		/* poor name! */
 extern vm_offset_t virtual_avail;
 extern vm_offset_t virtual_end;

Modified: projects/mips/sys/mips/mips/machdep.c
==============================================================================
--- projects/mips/sys/mips/mips/machdep.c	Thu Oct 22 00:32:01 2009	(r198353)
+++ projects/mips/sys/mips/mips/machdep.c	Thu Oct 22 02:51:31 2009	(r198354)
@@ -79,7 +79,6 @@ __FBSDID("$FreeBSD$");
 #include <sys/syslog.h>
 #include <machine/cache.h>
 #include <machine/cpu.h>
-#include <machine/pltfm.h>
 #include <net/netisr.h>
 #include <machine/md_var.h>
 #include <machine/clock.h>
@@ -120,7 +119,9 @@ struct pcpu pcpu;
 struct pcpu *pcpup = &pcpu;
 #endif
 
-vm_offset_t phys_avail[10];
+vm_offset_t phys_avail[PHYS_AVAIL_ENTRIES + 2];
+vm_offset_t physmem_desc[PHYS_AVAIL_ENTRIES + 2];
+
 #ifdef UNIMPLEMENTED
 struct platform platform;
 #endif
@@ -426,3 +427,16 @@ cpu_idle_wakeup(int cpu)
 
 	return (0);
 }
+
+int
+is_physical_memory(vm_offset_t addr)
+{
+	int i;
+
+	for (i = 0; physmem_desc[i + 1] != 0; i += 2) {
+		if (addr >= physmem_desc[i] && addr < physmem_desc[i + 1])
+			return (1);
+	}
+
+	return (0);
+}

Modified: projects/mips/sys/mips/mips/mem.c
==============================================================================
--- projects/mips/sys/mips/mips/mem.c	Thu Oct 22 00:32:01 2009	(r198353)
+++ projects/mips/sys/mips/mips/mem.c	Thu Oct 22 02:51:31 2009	(r198354)
@@ -65,7 +65,6 @@ __FBSDID("$FreeBSD$");
 #include <machine/cpu.h>
 #include <machine/md_var.h>
 #include <machine/atomic.h>
-#include <machine/pltfm.h>
 #include <machine/memdev.h>
 
 
@@ -101,17 +100,8 @@ memrw(dev, uio, flags)
 			vm_paddr_t pa;
 			register int o;
 
-#ifdef CPU_SB1
-			if (!is_physical_memory(v) ||
-			    !is_physical_memory(roundup2(v, PAGE_SIZE) - 1)) {
-				return (EFAULT);
-			}
-#else
-			if (v + c > (SDRAM_ADDR_START + ctob(physmem)))
-				return (EFAULT);
-#endif
-
-			if (is_cacheable_mem(v) && is_cacheable_mem(v + c)) {
+			if (is_cacheable_mem(v) &&
+			    is_cacheable_mem(v + c - 1)) {
 				struct fpage *fp;
 				struct sysmaps *sysmaps;
 

Modified: projects/mips/sys/mips/mips/pmap.c
==============================================================================
--- projects/mips/sys/mips/mips/pmap.c	Thu Oct 22 00:32:01 2009	(r198353)
+++ projects/mips/sys/mips/mips/pmap.c	Thu Oct 22 02:51:31 2009	(r198354)
@@ -96,7 +96,6 @@ __FBSDID("$FreeBSD$");
 #endif
 
 #include <machine/cache.h>
-#include <machine/pltfm.h>
 #include <machine/md_var.h>
 
 #if defined(DIAGNOSTIC)
@@ -313,6 +312,14 @@ again:
 		}
 	}
 
+	/*
+	 * Copy the phys_avail[] array before we start stealing memory from it.
+	 */
+	for (i = 0; phys_avail[i + 1] != 0; i += 2) {
+		physmem_desc[i] = phys_avail[i];
+		physmem_desc[i + 1] = phys_avail[i + 1];
+	}
+
 	Maxmem = atop(phys_avail[i - 1]);
 
 	if (bootverbose) {

Modified: projects/mips/sys/mips/mips/vm_machdep.c
==============================================================================
--- projects/mips/sys/mips/mips/vm_machdep.c	Thu Oct 22 00:32:01 2009	(r198353)
+++ projects/mips/sys/mips/mips/vm_machdep.c	Thu Oct 22 02:51:31 2009	(r198354)
@@ -57,7 +57,6 @@ __FBSDID("$FreeBSD$");
 #include <machine/cpu.h>
 #include <machine/md_var.h>
 #include <machine/pcb.h>
-#include <machine/pltfm.h>
 
 #include <vm/vm.h>
 #include <vm/vm_param.h>
@@ -400,34 +399,6 @@ kvtop(void *addr)
 #define	ZIDLE_HI(v)	((v) * 4 / 5)
 
 /*
- * Tell whether this address is in some physical memory region.
- * Currently used by the kernel coredump code in order to avoid
- * dumping non-memory physical address space.
- */
-int
-is_physical_memory(vm_offset_t addr)
-{
-	if (addr >= SDRAM_ADDR_START && addr <= SDRAM_ADDR_END)
-		return 1;
-	else
-		return 0;
-}
-
-int
-is_cacheable_mem(vm_offset_t pa)
-{
-	if ((pa >= SDRAM_ADDR_START && pa <= SDRAM_ADDR_END) ||
-#ifdef FLASH_ADDR_START
-	    (pa >= FLASH_ADDR_START && pa <= FLASH_ADDR_END))
-#else
-	    0)
-#endif
-		return 1;
-	else
-		return 0;
-}
-
-/*
  * Allocate a pool of sf_bufs (sendfile(2) or "super-fast" if you prefer. :-))
  */
 static void



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