Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 13 Dec 2013 22:48:01 +0000 (UTC)
From:      Ian Lepore <ian@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org
Subject:   svn commit: r259357 - stable/10/sys/dev/uart
Message-ID:  <201312132248.rBDMm1Mw059438@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: ian
Date: Fri Dec 13 22:48:01 2013
New Revision: 259357
URL: http://svnweb.freebsd.org/changeset/base/259357

Log:
  MFC r257556:
  
    Arrange for uart_cpu_fdt's probe() routine to use the same table of compat
    strings as uart_bus_fdt's probe().

Modified:
  stable/10/sys/dev/uart/uart.h
  stable/10/sys/dev/uart/uart_bus_fdt.c
  stable/10/sys/dev/uart/uart_cpu_fdt.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/sys/dev/uart/uart.h
==============================================================================
--- stable/10/sys/dev/uart/uart.h	Fri Dec 13 22:46:10 2013	(r259356)
+++ stable/10/sys/dev/uart/uart.h	Fri Dec 13 22:48:01 2013	(r259357)
@@ -76,6 +76,11 @@ extern struct uart_class uart_pl011_clas
 extern struct uart_class uart_cdnc_class __attribute__((weak));
 extern struct uart_class uart_ti8250_class __attribute__((weak));
 
+#ifdef FDT
+struct ofw_compat_data;
+extern const struct ofw_compat_data *uart_fdt_compat_data;
+#endif
+
 #ifdef PC98
 struct uart_class *uart_pc98_getdev(u_long port);
 #endif

Modified: stable/10/sys/dev/uart/uart_bus_fdt.c
==============================================================================
--- stable/10/sys/dev/uart/uart_bus_fdt.c	Fri Dec 13 22:46:10 2013	(r259356)
+++ stable/10/sys/dev/uart/uart_bus_fdt.c	Fri Dec 13 22:48:01 2013	(r259357)
@@ -30,6 +30,8 @@
 #include <sys/cdefs.h>
 __FBSDID("$FreeBSD$");
 
+#include "opt_platform.h"
+
 #include <sys/param.h>
 #include <sys/bus.h>
 #include <sys/kernel.h>
@@ -85,6 +87,9 @@ static struct ofw_compat_data compat_dat
 	{NULL,			(uintptr_t)NULL},
 };
 
+/* Export the compat_data table for use by the uart_cpu_fdt.c probe routine. */
+const struct ofw_compat_data *uart_fdt_compat_data = compat_data;
+
 static int
 uart_fdt_get_clock(phandle_t node, pcell_t *cell)
 {

Modified: stable/10/sys/dev/uart/uart_cpu_fdt.c
==============================================================================
--- stable/10/sys/dev/uart/uart_cpu_fdt.c	Fri Dec 13 22:46:10 2013	(r259356)
+++ stable/10/sys/dev/uart/uart_cpu_fdt.c	Fri Dec 13 22:48:01 2013	(r259357)
@@ -30,6 +30,8 @@
 #include <sys/cdefs.h>
 __FBSDID("$FreeBSD$");
 
+#include "opt_platform.h"
+
 #include <sys/param.h>
 #include <sys/bus.h>
 #include <sys/kernel.h>
@@ -93,6 +95,7 @@ int
 uart_cpu_getdev(int devtype, struct uart_devinfo *di)
 {
 	char buf[64];
+	const struct ofw_compat_data *cd;
 	struct uart_class *class;
 	phandle_t node, chosen;
 	pcell_t shift, br, rclk;
@@ -139,22 +142,13 @@ uart_cpu_getdev(int devtype, struct uart
 	/*
 	 * Finalize configuration.
 	 */
-	if (fdt_is_compatible(node, "fsl,imx-uart"))
-		class = &uart_imx_class;
-	else if (fdt_is_compatible(node, "quicc"))
-		class = &uart_quicc_class;
-	else if (fdt_is_compatible(node, "lpc"))
-		class = &uart_lpc_class;
-	else if (fdt_is_compatible(node, "arm,pl011"))
-		class = &uart_pl011_class;
-	else if (fdt_is_compatible(node, "exynos"))
-		class = &uart_s3c2410_class;
-	else if (fdt_is_compatible(node, "cadence,uart"))
-		class = &uart_cdnc_class;
-	else if (fdt_is_compatible(node, "ti,ns16550"))
-		class = &uart_ti8250_class;
-	else if (fdt_is_compatible(node, "ns16550"))
-		class = &uart_ns8250_class;
+	for (cd = uart_fdt_compat_data; cd->ocd_str != NULL; ++cd) {
+		if (fdt_is_compatible(node, cd->ocd_str))
+			break;
+	}
+	if (cd->ocd_str == NULL)
+		return (ENXIO);
+	class = (struct uart_class *)cd->ocd_data;
 
 	di->bas.chan = 0;
 	di->bas.regshft = (u_int)shift;



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201312132248.rBDMm1Mw059438>