diff options
author | Leandro Lupori <luporl@FreeBSD.org> | 2021-03-09 15:11:58 +0000 |
---|---|---|
committer | Leandro Lupori <luporl@FreeBSD.org> | 2021-03-22 13:48:46 +0000 |
commit | 3aa6cc000f7472079a5174944e70f3bd412e6c37 (patch) | |
tree | 0c52aca7f260d6a4c4379655ecc1f20354dfdc2d | |
parent | 0cb06bcc54d9c05b72886b5729cf0593c2d703c5 (diff) | |
download | src-3aa6cc000f7472079a5174944e70f3bd412e6c37.tar.gz src-3aa6cc000f7472079a5174944e70f3bd412e6c37.zip |
ofwfb: fix boot on LE
Some framebuffer properties obtained from the device tree were not being
properly converted to host endian.
Replace OF_getprop calls by OF_getencprop where needed to fix this.
This fixes boot on PowerPC64 LE, when using ofwfb as the system console.
Reviewed by: bdragon
Sponsored by: Eldorado Research Institute (eldorado.org.br)
MFC after: 1 week
Differential Revision: https://reviews.freebsd.org/D27475
(cherry picked from commit 043577b721ec4e5c2ab7571e6c05cfd54e49473c)
-rw-r--r-- | sys/dev/vt/hw/ofwfb/ofwfb.c | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/sys/dev/vt/hw/ofwfb/ofwfb.c b/sys/dev/vt/hw/ofwfb/ofwfb.c index 8a1b7b3688a7..9dc674c0ebf9 100644 --- a/sys/dev/vt/hw/ofwfb/ofwfb.c +++ b/sys/dev/vt/hw/ofwfb/ofwfb.c @@ -108,7 +108,7 @@ ofwfb_probe(struct vt_device *vd) return (CN_DEAD); node = -1; - if (OF_getprop(chosen, "stdout", &stdout, sizeof(stdout)) == + if (OF_getencprop(chosen, "stdout", &stdout, sizeof(stdout)) == sizeof(stdout)) node = OF_instance_to_package(stdout); if (node == -1) @@ -386,7 +386,7 @@ ofwfb_init(struct vt_device *vd) char buf[64]; phandle_t chosen; phandle_t node; - uint32_t depth, height, width, stride; + pcell_t depth, height, width, stride; uint32_t vendor_id = 0; cell_t adr[2]; uint64_t user_phys; @@ -399,7 +399,7 @@ ofwfb_init(struct vt_device *vd) node = -1; chosen = OF_finddevice("/chosen"); - if (OF_getprop(chosen, "stdout", &sc->sc_handle, + if (OF_getencprop(chosen, "stdout", &sc->sc_handle, sizeof(ihandle_t)) == sizeof(ihandle_t)) node = OF_instance_to_package(sc->sc_handle); if (node == -1) @@ -448,14 +448,14 @@ ofwfb_init(struct vt_device *vd) return (CN_DEAD); /* Only support 8 and 32-bit framebuffers */ - OF_getprop(node, "depth", &depth, sizeof(depth)); + OF_getencprop(node, "depth", &depth, sizeof(depth)); if (depth != 8 && depth != 32) return (CN_DEAD); sc->fb.fb_bpp = sc->fb.fb_depth = depth; - OF_getprop(node, "height", &height, sizeof(height)); - OF_getprop(node, "width", &width, sizeof(width)); - if (OF_getprop(node, "linebytes", &stride, sizeof(stride)) != + OF_getencprop(node, "height", &height, sizeof(height)); + OF_getencprop(node, "width", &width, sizeof(width)); + if (OF_getencprop(node, "linebytes", &stride, sizeof(stride)) != sizeof(stride)) stride = width*depth/8; @@ -537,11 +537,11 @@ ofwfb_init(struct vt_device *vd) * may be the child of the PCI device: in that case, try the * parent for the assigned-addresses property. */ - len = OF_getprop(node, "assigned-addresses", pciaddrs, - sizeof(pciaddrs)); + len = OF_getencprop(node, "assigned-addresses", + (pcell_t *)pciaddrs, sizeof(pciaddrs)); if (len == -1) { - len = OF_getprop(OF_parent(node), "assigned-addresses", - pciaddrs, sizeof(pciaddrs)); + len = OF_getencprop(OF_parent(node), "assigned-addresses", + (pcell_t *)pciaddrs, sizeof(pciaddrs)); } if (len == -1) len = 0; |