aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLeandro Lupori <luporl@FreeBSD.org>2021-03-09 15:11:58 +0000
committerLeandro Lupori <luporl@FreeBSD.org>2021-03-22 13:48:46 +0000
commit3aa6cc000f7472079a5174944e70f3bd412e6c37 (patch)
tree0c52aca7f260d6a4c4379655ecc1f20354dfdc2d
parent0cb06bcc54d9c05b72886b5729cf0593c2d703c5 (diff)
downloadsrc-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.c22
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;