summaryrefslogtreecommitdiffstats
path: root/sys/dev/ofw
diff options
context:
space:
mode:
authorian <ian@FreeBSD.org>2014-12-24 01:19:11 +0000
committerian <ian@FreeBSD.org>2014-12-24 01:19:11 +0000
commit50207a45166f8f0d90451dc970838a3641ee6372 (patch)
treef7c0e9f81cfcae6e9e39494e5d49399f6dc0c821 /sys/dev/ofw
parentf885269f67bf4caa7da341421c7f5d14630735ec (diff)
downloadFreeBSD-src-50207a45166f8f0d90451dc970838a3641ee6372.zip
FreeBSD-src-50207a45166f8f0d90451dc970838a3641ee6372.tar.gz
Don't assume required FDT properties are present.
Diffstat (limited to 'sys/dev/ofw')
-rw-r--r--sys/dev/ofw/ofw_cpu.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/sys/dev/ofw/ofw_cpu.c b/sys/dev/ofw/ofw_cpu.c
index 2265140..1d01b63 100644
--- a/sys/dev/ofw/ofw_cpu.c
+++ b/sys/dev/ofw/ofw_cpu.c
@@ -171,7 +171,7 @@ ofw_cpu_probe(device_t dev)
{
const char *type = ofw_bus_get_type(dev);
- if (strcmp(type, "cpu") != 0)
+ if (type == NULL || strcmp(type, "cpu") != 0)
return (ENXIO);
device_set_desc(dev, "Open Firmware CPU");
@@ -182,12 +182,20 @@ static int
ofw_cpu_attach(device_t dev)
{
struct ofw_cpu_softc *sc;
+ phandle_t node;
uint32_t cell;
sc = device_get_softc(dev);
- OF_getprop(ofw_bus_get_node(dev), "reg", &cell, sizeof(cell));
+ node = ofw_bus_get_node(dev);
+ if (OF_getencprop(node, "reg", &cell, sizeof(cell)) < 0) {
+ cell = device_get_unit(dev);
+ device_printf(dev, "missing 'reg' property, using %u\n", cell);
+ }
sc->sc_cpu_pcpu = pcpu_find(cell);
- OF_getprop(ofw_bus_get_node(dev), "clock-frequency", &cell, sizeof(cell));
+ if (OF_getencprop(node, "clock-frequency", &cell, sizeof(cell)) < 0) {
+ device_printf(dev, "missing 'clock-frequency' property\n");
+ return (ENXIO);
+ }
sc->sc_nominal_mhz = cell / 1000000; /* convert to MHz */
bus_generic_probe(dev);
OpenPOWER on IntegriCloud