svn commit: r277257 - head/sys/dev/ofw

Nathan Whitehorn nwhitehorn at FreeBSD.org
Fri Jan 16 18:47:21 UTC 2015


Author: nwhitehorn
Date: Fri Jan 16 18:47:20 2015
New Revision: 277257
URL: https://svnweb.freebsd.org/changeset/base/277257

Log:
  Add two fake properties ("fdtbootcpu" and "fdtmemreserv") to the device
  tree's /chosen node to provide out-of-band header fields of the FDT. This
  emulation is not perfect without corresponding changes to ofw_fdt_nextprop(),
  but is enough to enable lookup by memory-map-parsing code.
  
  MFC after:	1 week

Modified:
  head/sys/dev/ofw/ofw_fdt.c

Modified: head/sys/dev/ofw/ofw_fdt.c
==============================================================================
--- head/sys/dev/ofw/ofw_fdt.c	Fri Jan 16 18:42:49 2015	(r277256)
+++ head/sys/dev/ofw/ofw_fdt.c	Fri Jan 16 18:47:20 2015	(r277257)
@@ -231,6 +231,13 @@ ofw_fdt_getproplen(ofw_t ofw, phandle_t 
 		return (len + 1);
 	}
 
+	if (prop == NULL && offset == fdt_path_offset(fdtp, "/chosen")) {
+		if (strcmp(propname, "fdtbootcpu") == 0)
+			return (sizeof(cell_t));
+		if (strcmp(propname, "fdtmemreserv") == 0)
+			return (sizeof(uint64_t)*2*fdt_num_mem_rsv(fdtp));
+	}
+
 	return (len);
 }
 
@@ -242,6 +249,7 @@ ofw_fdt_getprop(ofw_t ofw, phandle_t pac
 	const void *prop;
 	const char *name;
 	int len, offset;
+	uint32_t cpuid;
 
 	offset = fdt_phandle_offset(package);
 	if (offset < 0)
@@ -258,6 +266,18 @@ ofw_fdt_getprop(ofw_t ofw, phandle_t pac
 		return (len + 1);
 	}
 
+	if (prop == NULL && offset == fdt_path_offset(fdtp, "/chosen")) {
+		if (strcmp(propname, "fdtbootcpu") == 0) {
+			cpuid = cpu_to_fdt32(fdt_boot_cpuid_phys(fdtp));
+			len = sizeof(cpuid);
+			prop = &cpuid;
+		}
+		if (strcmp(propname, "fdtmemreserv") == 0) {
+			prop = (char *)fdtp + fdt_off_mem_rsvmap(fdtp);
+			len = sizeof(uint64_t)*2*fdt_num_mem_rsv(fdtp);
+		}
+	}
+
 	if (prop == NULL)
 		return (-1);
 


More information about the svn-src-all mailing list