svn commit: r336623 - head/sys/dev/uart

Matt Macy mmacy at FreeBSD.org
Sun Jul 22 23:32:23 UTC 2018


Author: mmacy
Date: Sun Jul 22 23:32:21 2018
New Revision: 336623
URL: https://svnweb.freebsd.org/changeset/base/336623

Log:
  Add busy detect quirk to list of console options
  
  This change allows one to set the busy_detect flag
  required by the synopsys UART at the loader prompt.
  This is needed by the EPYC 3000 SoC.
  
  This will give users a working console up to the point where getty is required:
  hw.uart.console="mm:0xfedc9000,rs:2,bd:1"
  
  Reviewed by:	imp
  MFC after:	4 weeks
  Differential Revision:	https://reviews.freebsd.org/D16399

Modified:
  head/sys/dev/uart/uart.h
  head/sys/dev/uart/uart_dev_ns8250.c
  head/sys/dev/uart/uart_subr.c

Modified: head/sys/dev/uart/uart.h
==============================================================================
--- head/sys/dev/uart/uart.h	Sun Jul 22 23:20:24 2018	(r336622)
+++ head/sys/dev/uart/uart.h	Sun Jul 22 23:32:21 2018	(r336623)
@@ -44,6 +44,7 @@ struct uart_bas {
 	u_int	rclk;
 	u_int	regshft;
 	u_int	regiowidth;
+	u_int	busy_detect;
 };
 
 #define	uart_regofs(bas, reg)		((reg) << (bas)->regshft)

Modified: head/sys/dev/uart/uart_dev_ns8250.c
==============================================================================
--- head/sys/dev/uart/uart_dev_ns8250.c	Sun Jul 22 23:20:24 2018	(r336622)
+++ head/sys/dev/uart/uart_dev_ns8250.c	Sun Jul 22 23:32:21 2018	(r336623)
@@ -469,6 +469,7 @@ ns8250_bus_attach(struct uart_softc *sc)
 
 	bas = &sc->sc_bas;
 
+	ns8250->busy_detect = bas->busy_detect;
 	ns8250->mcr = uart_getreg(bas, REG_MCR);
 	ns8250->fcr = FCR_ENABLE;
 #ifdef CPU_XBURST

Modified: head/sys/dev/uart/uart_subr.c
==============================================================================
--- head/sys/dev/uart/uart_subr.c	Sun Jul 22 23:20:24 2018	(r336622)
+++ head/sys/dev/uart/uart_subr.c	Sun Jul 22 23:32:21 2018	(r336623)
@@ -49,6 +49,7 @@ __FBSDID("$FreeBSD$");
 #define	UART_TAG_RS	7
 #define	UART_TAG_SB	8
 #define	UART_TAG_XO	9
+#define	UART_TAG_BD	10
 
 static struct uart_class *uart_classes[] = {
 	&uart_ns8250_class,
@@ -124,6 +125,10 @@ uart_parse_tag(const char **p)
 {
 	int tag;
 
+	if ((*p)[0] == 'b' && (*p)[1] == 'd') {
+		tag = UART_TAG_BD;
+		goto out;
+	}
 	if ((*p)[0] == 'b' && (*p)[1] == 'r') {
 		tag = UART_TAG_BR;
 		goto out;
@@ -179,6 +184,7 @@ out:
  * separated by commas. Each attribute is a tag-value pair with the tag and
  * value separated by a colon. Supported tags are:
  *
+ *	bd = Busy Detect
  *	br = Baudrate
  *	ch = Channel
  *	db = Data bits
@@ -242,6 +248,9 @@ uart_getenv(int devtype, struct uart_devinfo *di, stru
 	spec = cp;
 	for (;;) {
 		switch (uart_parse_tag(&spec)) {
+		case UART_TAG_BD:
+			di->bas.busy_detect = uart_parse_long(&spec);
+			break;
 		case UART_TAG_BR:
 			di->baudrate = uart_parse_long(&spec);
 			break;


More information about the svn-src-head mailing list