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;
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to