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

Mitchell Horne mhorne at FreeBSD.org
Wed Dec 2 21:01:53 UTC 2020


Author: mhorne
Date: Wed Dec  2 21:01:52 2020
New Revision: 368284
URL: https://svnweb.freebsd.org/changeset/base/368284

Log:
  uart: allow UART_DEV_DBGPORT for fdt consoles
  
  Allow fdt devices to be used as debug ports for gdb(4).
  
  A debug console can be specified with the "freebsd,debug-path" property
  in the device tree's /chosen node, or using the environment variable
  hw.fdt.dbgport.
  
  The device should be specified by its name in the device tree, for
  example hw.fdt.dbgport="serial2".
  
  PR:		251053
  Submitted by:	Dmitry Salychev <dsl at mcusim.org>
  Submitted by:   stevek (original patch, D5986)
  Reviewed by:	andrew, mhorne
  Differential Revision:	https://reviews.freebsd.org/D27422

Modified:
  head/sys/dev/uart/uart_bus_fdt.c
  head/sys/dev/uart/uart_cpu_arm64.c
  head/sys/dev/uart/uart_cpu_fdt.c
  head/sys/dev/uart/uart_cpu_fdt.h

Modified: head/sys/dev/uart/uart_bus_fdt.c
==============================================================================
--- head/sys/dev/uart/uart_bus_fdt.c	Wed Dec  2 20:54:03 2020	(r368283)
+++ head/sys/dev/uart/uart_bus_fdt.c	Wed Dec  2 21:01:52 2020	(r368284)
@@ -175,26 +175,39 @@ uart_fdt_find_by_node(phandle_t node, int class_list)
 int
 uart_cpu_fdt_probe(struct uart_class **classp, bus_space_tag_t *bst,
     bus_space_handle_t *bsh, int *baud, u_int *rclk, u_int *shiftp,
-    u_int *iowidthp)
+    u_int *iowidthp, const int devtype)
 {
 	const char *propnames[] = {"stdout-path", "linux,stdout-path", "stdout",
 	    "stdin-path", "stdin", NULL};
+	const char *propnames_dbgport[] = {"freebsd,debug-path", NULL};
 	const char **name;
 	struct uart_class *class;
 	phandle_t node, chosen;
 	pcell_t br, clk, shift, iowidth;
-	char *cp;
+	char *cp = NULL;
 	int err;
 
 	/* Has the user forced a specific device node? */
-	cp = kern_getenv("hw.fdt.console");
+	switch (devtype) {
+	case UART_DEV_DBGPORT:
+		cp = kern_getenv("hw.fdt.dbgport");
+		name = propnames_dbgport;
+		break;
+	case UART_DEV_CONSOLE:
+		cp = kern_getenv("hw.fdt.console");
+		name = propnames;
+		break;
+	default:
+		return (ENXIO);
+	}
+
 	if (cp == NULL) {
 		/*
-		 * Retrieve /chosen/std{in,out}.
+		 * Retrieve a node from /chosen.
 		 */
 		node = -1;
 		if ((chosen = OF_finddevice("/chosen")) != -1) {
-			for (name = propnames; *name != NULL; name++) {
+			for (; *name != NULL; name++) {
 				if (phandle_chosen_propdev(chosen, *name,
 				    &node) == 0)
 					break;

Modified: head/sys/dev/uart/uart_cpu_arm64.c
==============================================================================
--- head/sys/dev/uart/uart_cpu_arm64.c	Wed Dec  2 20:54:03 2020	(r368283)
+++ head/sys/dev/uart/uart_cpu_arm64.c	Wed Dec  2 21:01:52 2020	(r368284)
@@ -100,15 +100,11 @@ uart_cpu_getdev(int devtype, struct uart_devinfo *di)
 	if (uart_cpu_acpi_spcr(devtype, di) == 0)
 		return (0);
 #endif
-
-	if (devtype != UART_DEV_CONSOLE)
-		return (ENXIO);
-
 	err = ENXIO;
 #ifdef FDT
 	if (err != 0) {
 		err = uart_cpu_fdt_probe(&class, &bst, &bsh, &br, &rclk,
-		    &shift, &iowidth);
+		    &shift, &iowidth, devtype);
 	}
 #endif
 	if (err != 0)

Modified: head/sys/dev/uart/uart_cpu_fdt.c
==============================================================================
--- head/sys/dev/uart/uart_cpu_fdt.c	Wed Dec  2 20:54:03 2020	(r368283)
+++ head/sys/dev/uart/uart_cpu_fdt.c	Wed Dec  2 21:01:52 2020	(r368284)
@@ -87,10 +87,8 @@ uart_cpu_getdev(int devtype, struct uart_devinfo *di)
 	if (!err)
 		return (0);
 
-	if (devtype != UART_DEV_CONSOLE)
-		return (ENXIO);
-
-	err = uart_cpu_fdt_probe(&class, &bst, &bsh, &br, &rclk, &shift, &iowidth);
+	err = uart_cpu_fdt_probe(&class, &bst, &bsh, &br, &rclk,
+	    &shift, &iowidth, devtype);
 	if (err != 0)
 		return (err);
 

Modified: head/sys/dev/uart/uart_cpu_fdt.h
==============================================================================
--- head/sys/dev/uart/uart_cpu_fdt.h	Wed Dec  2 20:54:03 2020	(r368283)
+++ head/sys/dev/uart/uart_cpu_fdt.h	Wed Dec  2 21:01:52 2020	(r368284)
@@ -51,7 +51,7 @@ SET_DECLARE(uart_fdt_class_set, struct ofw_compat_data
 	DATA_SET(uart_fdt_class_set, data)
 
 int uart_cpu_fdt_probe(struct uart_class **, bus_space_tag_t *,
-    bus_space_handle_t *, int *, u_int *, u_int *, u_int *);
+    bus_space_handle_t *, int *, u_int *, u_int *, u_int *, const int);
 int uart_fdt_get_clock(phandle_t node, pcell_t *cell);
 int uart_fdt_get_shift(phandle_t node, pcell_t *cell);
 int uart_fdt_get_io_width(phandle_t node, pcell_t *cell);


More information about the svn-src-all mailing list