summaryrefslogtreecommitdiffstats
path: root/sys/dev/uart
diff options
context:
space:
mode:
authorian <ian@FreeBSD.org>2014-05-14 01:16:05 +0000
committerian <ian@FreeBSD.org>2014-05-14 01:16:05 +0000
commit147aa314a7ea59fab69a92349cee312e49cae2bb (patch)
treeb553b4077fe2c8c6098e20d3d69729a8bc8e9c11 /sys/dev/uart
parent2963fd0dfbdafac049cadecf0774e0c027b28c88 (diff)
downloadFreeBSD-src-147aa314a7ea59fab69a92349cee312e49cae2bb.zip
FreeBSD-src-147aa314a7ea59fab69a92349cee312e49cae2bb.tar.gz
MFC r257180, r257195, r257196, r257198, r257209, r257295
Add some extra sanity checking and checks to printf format specifiers. Try even harder to find a console before giving up. Make devices with registers into the KVA region work reliably. Turn on VM_KMEM_SIZE_SCALE on 32-bit as well as 64-bit PowerPC. Return NOKEY instead of 0 if there are no more key presses queued.
Diffstat (limited to 'sys/dev/uart')
-rw-r--r--sys/dev/uart/uart_cpu_fdt.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/sys/dev/uart/uart_cpu_fdt.c b/sys/dev/uart/uart_cpu_fdt.c
index b063cb4..9bf3549 100644
--- a/sys/dev/uart/uart_cpu_fdt.c
+++ b/sys/dev/uart/uart_cpu_fdt.c
@@ -142,14 +142,19 @@ uart_cpu_getdev(int devtype, struct uart_devinfo *di)
/*
* Retrieve /chosen/std{in,out}.
*/
- if ((chosen = OF_finddevice("/chosen")) == -1)
- return (ENXIO);
- for (name = propnames; *name != NULL; name++) {
- if (phandle_chosen_propdev(chosen, *name, &node) == 0)
- break;
+ node = -1;
+ if ((chosen = OF_finddevice("/chosen")) != -1) {
+ for (name = propnames; *name != NULL; name++) {
+ if (phandle_chosen_propdev(chosen, *name, &node) == 0)
+ break;
+ }
}
- if (*name == NULL)
+ if (chosen == -1 || *name == NULL)
+ node = OF_finddevice("serial0"); /* Last ditch */
+
+ if (node == -1) /* Can't find anything */
return (ENXIO);
+
/*
* Retrieve serial attributes.
*/
OpenPOWER on IntegriCloud