svn commit: r336555 - head/sys/dev/vt/hw/ofwfb
Justin Hibbits
jhibbits at FreeBSD.org
Fri Jul 20 16:18:25 UTC 2018
Author: jhibbits
Date: Fri Jul 20 16:18:24 2018
New Revision: 336555
URL: https://svnweb.freebsd.org/changeset/base/336555
Log:
vt/ofwfb: Fix brain-o from r336514, use the correct form of /chosen/stdout-path
/chosen/stdout-path is a string, not ihandle. Treat it as such.
With this, ofwfb now starts correctly on a POWER9 system when launched from
the local console (not serial).
Modified:
head/sys/dev/vt/hw/ofwfb/ofwfb.c
Modified: head/sys/dev/vt/hw/ofwfb/ofwfb.c
==============================================================================
--- head/sys/dev/vt/hw/ofwfb/ofwfb.c Fri Jul 20 16:08:14 2018 (r336554)
+++ head/sys/dev/vt/hw/ofwfb/ofwfb.c Fri Jul 20 16:18:24 2018 (r336555)
@@ -92,7 +92,7 @@ ofwfb_probe(struct vt_device *vd)
{
phandle_t chosen, node;
ihandle_t stdout;
- char type[64];
+ char buf[64];
chosen = OF_finddevice("/chosen");
if (chosen == -1)
@@ -103,9 +103,8 @@ ofwfb_probe(struct vt_device *vd)
sizeof(stdout))
node = OF_instance_to_package(stdout);
if (node == -1)
- if (OF_getprop(chosen, "stdout-path", &stdout, sizeof(stdout)) ==
- sizeof(stdout))
- node = OF_instance_to_package(stdout);
+ if (OF_getprop(chosen, "stdout-path", buf, sizeof(buf)) > 0)
+ node = OF_finddevice(buf);
if (node == -1) {
/*
* The "/chosen/stdout" does not exist try
@@ -113,8 +112,8 @@ ofwfb_probe(struct vt_device *vd)
*/
node = OF_finddevice("screen");
}
- OF_getprop(node, "device_type", type, sizeof(type));
- if (strcmp(type, "display") != 0)
+ OF_getprop(node, "device_type", buf, sizeof(buf));
+ if (strcmp(buf, "display") != 0)
return (CN_DEAD);
/* Looks OK... */
@@ -355,7 +354,7 @@ static int
ofwfb_init(struct vt_device *vd)
{
struct ofwfb_softc *sc;
- char type[64];
+ char buf[64];
phandle_t chosen;
phandle_t node;
uint32_t depth, height, width, stride;
@@ -375,6 +374,13 @@ ofwfb_init(struct vt_device *vd)
if (OF_getprop(chosen, "stdout", &sc->sc_handle,
sizeof(ihandle_t)) == sizeof(ihandle_t))
node = OF_instance_to_package(sc->sc_handle);
+ if (node == -1)
+ /* Try "/chosen/stdout-path" now */
+ if (OF_getprop(chosen, "stdout-path", buf, sizeof(buf)) > 0) {
+ node = OF_finddevice(buf);
+ if (node != -1)
+ sc->sc_handle = OF_open(buf);
+ }
if (node == -1) {
/*
* The "/chosen/stdout" does not exist try
@@ -383,8 +389,8 @@ ofwfb_init(struct vt_device *vd)
node = OF_finddevice("screen");
sc->sc_handle = OF_open("screen");
}
- OF_getprop(node, "device_type", type, sizeof(type));
- if (strcmp(type, "display") != 0)
+ OF_getprop(node, "device_type", buf, sizeof(buf));
+ if (strcmp(buf, "display") != 0)
return (CN_DEAD);
/* Keep track of the OF node */
More information about the svn-src-all
mailing list