Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 8 Apr 2014 07:32:32 +0000 (UTC)
From:      Marius Strobl <marius@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r264257 - in head/sys/dev: puc uart
Message-ID:  <201404080732.s387WWDo080350@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: marius
Date: Tue Apr  8 07:32:32 2014
New Revision: 264257
URL: http://svnweb.freebsd.org/changeset/base/264257

Log:
  Distinguish between the different variants and configurations of Sunix
  {MIO,SER}5xxxx chips instead of treating all of them as PUC_PORT_2S.
  Among others, this fixes the hang seen when trying to probe the none-
  existent second UART on an actually 1-port chip.
  
  Obtained from:	NetBSD (BAR layouts)
  MFC after:	3 days
  Sponsored by:	Bally Wulff Games & Entertainment GmbH

Modified:
  head/sys/dev/puc/pucdata.c
  head/sys/dev/uart/uart_bus_pci.c

Modified: head/sys/dev/puc/pucdata.c
==============================================================================
--- head/sys/dev/puc/pucdata.c	Tue Apr  8 07:14:14 2014	(r264256)
+++ head/sys/dev/puc/pucdata.c	Tue Apr  8 07:32:32 2014	(r264257)
@@ -59,6 +59,7 @@ static puc_config_f puc_config_oxford_pc
 static puc_config_f puc_config_quatech;
 static puc_config_f puc_config_syba;
 static puc_config_f puc_config_siig;
+static puc_config_f puc_config_sunix;
 static puc_config_f puc_config_timedia;
 static puc_config_f puc_config_titan;
 
@@ -987,12 +988,53 @@ const struct puc_cfg puc_pci_devices[] =
 	    .config_function = puc_config_syba
 	},
 
-	{   0x1fd4, 0x1999, 0xffff, 0,
-	    "Sunix SER5437A",
+	/* Prevent puc(4) from attaching, directly use uart(4) instead. */
+	{   0x1fd4, 0x1999, 0x1fd4, 0x0001,
+	    "Sunix SER5xxxx 1-port serial",
+	    DEFAULT_RCLK * 8,
+	    PUC_PORT_1S, 0x10, 0, 8,
+	},
+
+	{   0x1fd4, 0x1999, 0x1fd4, 0x0002,
+	    "Sunix SER5xxxx 2-port serial",
 	    DEFAULT_RCLK * 8,
 	    PUC_PORT_2S, 0x10, 0, 8,
 	},
 
+	{   0x1fd4, 0x1999, 0x1fd4, 0x0004,
+	    "Sunix SER5xxxx 4-port serial",
+	    DEFAULT_RCLK * 8,
+	    PUC_PORT_4S, 0x10, 0, 8,
+	},
+
+	{   0x1fd4, 0x1999, 0x1fd4, 0x0008,
+	    "Sunix SER5xxxx 8-port serial",
+	    DEFAULT_RCLK * 8,
+	    PUC_PORT_8S, -1, -1, -1,
+	    .config_function = puc_config_sunix
+	},
+
+	{   0x1fd4, 0x1999, 0x1fd4, 0x0101,
+	    "Sunix MIO5xxxx 1-port serial and 1284 Printer port",
+	    DEFAULT_RCLK * 8,
+	    PUC_PORT_1S1P, -1, -1, -1,
+	    .config_function = puc_config_sunix
+	},
+
+	{   0x1fd4, 0x1999, 0x1fd4, 0x0102,
+	    "Sunix MIOxxxx 2-port serial and 1284 Printer port",
+	    DEFAULT_RCLK * 8,
+	    PUC_PORT_2S1P, -1, -1, -1,
+	    .config_function = puc_config_sunix
+	},
+
+	{   0x1fd4, 0x1999, 0x1fd4, 0x0104,
+	    "Sunix MIO5xxxx 4-port serial and 1284 Printer port",
+	    DEFAULT_RCLK * 8,
+	    PUC_PORT_4S1P, -1, -1, -1,
+	    .config_function = puc_config_sunix
+	},
+
 	{   0x5372, 0x6873, 0xffff, 0,
 	    "Sun 1040 PCI Quad Serial",
 	    DEFAULT_RCLK,
@@ -1024,8 +1066,8 @@ const struct puc_cfg puc_pci_devices[] =
 	},
 
 	/*
-	 * This is more specific than the generic NM9835 entry that follows, and
-	 * is placed here to _prevent_ puc from claiming this single port card.
+	 * This is more specific than the generic NM9835 entry, and is placed
+	 * here to _prevent_ puc(4) from claiming this single port card.
 	 *
 	 * uart(4) will claim this device.
 	 */
@@ -1614,6 +1656,31 @@ puc_config_oxford_pcie(struct puc_softc 
 }
 
 static int
+puc_config_sunix(struct puc_softc *sc, enum puc_cfg_cmd cmd, int port,
+    intptr_t *res)
+{
+	int error;
+
+	switch (cmd) {
+	case PUC_CFG_GET_OFS:
+		error = puc_config(sc, PUC_CFG_GET_TYPE, port, res);
+		if (error != 0)
+			return (error);
+		*res = (*res == PUC_TYPE_SERIAL) ? (port & 3) * 8 : 0;
+		return (0);
+	case PUC_CFG_GET_RID:
+		error = puc_config(sc, PUC_CFG_GET_TYPE, port, res);
+		if (error != 0)
+			return (error);
+		*res = (*res == PUC_TYPE_SERIAL && port <= 3) ? 0x10 : 0x14;
+		return (0);
+	default:
+		break;
+	}
+	return (ENXIO);
+}
+
+static int
 puc_config_titan(struct puc_softc *sc, enum puc_cfg_cmd cmd, int port,
     intptr_t *res)
 {

Modified: head/sys/dev/uart/uart_bus_pci.c
==============================================================================
--- head/sys/dev/uart/uart_bus_pci.c	Tue Apr  8 07:14:14 2014	(r264256)
+++ head/sys/dev/uart/uart_bus_pci.c	Tue Apr  8 07:32:32 2014	(r264257)
@@ -114,6 +114,8 @@ static const struct pci_id pci_ns8250_id
 	0x10, 16384000 },
 { 0x14e4, 0x4344, 0xffff, 0, "Sony Ericsson GC89 PC Card", 0x10},
 { 0x151f, 0x0000, 0xffff, 0, "TOPIC Semiconductor TP560 56k modem", 0x10 },
+{ 0x1fd4, 0x1999, 0x1fd4, 0x0001, "Sunix SER5xxxx Serial Port", 0x10,
+	8 * DEFAULT_RCLK },
 { 0x8086, 0x1c3d, 0xffff, 0, "Intel AMT - KT Controller", 0x10 },
 { 0x8086, 0x1d3d, 0xffff, 0, "Intel C600/X79 Series Chipset KT Controller", 0x10 },
 { 0x8086, 0x2e17, 0xffff, 0, "4 Series Chipset Serial KT Controller", 0x10 },



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