shithub: riscv

Download patch

ref: 00542efd15c5ee37fa927fbe9ba85a2bb377d406
parent: 27fe8ee3569ff13ff0fa6cb8d3af6ce48fe1a876
author: cinap_lenrek <cinap_lenrek@felloff.net>
date: Sat Mar 19 11:53:40 EDT 2022

devuart: allow serial console on late detected uarts

pci uarts are detected late and usually do not contain
the console= parameter logic.

for these, we can just enable them when devuart is reset,
and replay the boot messages once enabled.

this is usefull as it allows us to use these uarts for
kernel debugging in interrupt context.

--- a/sys/src/9/port/devuart.c
+++ b/sys/src/9/port/devuart.c
@@ -240,9 +240,30 @@
 
 		uart[i] = p;
 		p->dev = i;
+
+		/*
+		 * enable serial console for uarts detected
+		 * late during boot (like pci card).
+		 */
+		if(consuart == nil){
+			char *s, *options;
+
+			if((s = getconf("console")) != nil
+			&& strtoul(s, &options, 0) == i
+			&& options > s){
+				p->console = 1;
+				if(*options != '\0')
+					uartctl(p, options);
+			}
+		}
+
 		if(p->console || p->special){
 			if(uartenable(p) != nil){
 				if(p->console){
+					if(consuart == nil){
+						consuart = p;
+						uartputs(kmesg.buf, kmesg.n);
+					}
 					serialoq = p->oq;
 				}
 				p->opens++;