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