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

Ruslan Bukin br at FreeBSD.org
Thu Jan 18 17:43:34 UTC 2018


Author: br
Date: Thu Jan 18 17:43:32 2018
New Revision: 328132
URL: https://svnweb.freebsd.org/changeset/base/328132

Log:
  Support for UART device found in Qualcomm Snapdragon 410E SoC.
  
  Tested on DragonBoard 410c.
  
  Reviewed by:	andrew
  Sponsored by:	DARPA, AFRL
  Differential Revision:	https://reviews.freebsd.org/D13972

Modified:
  head/sys/dev/uart/uart_dev_msm.c
  head/sys/dev/uart/uart_dev_msm.h

Modified: head/sys/dev/uart/uart_dev_msm.c
==============================================================================
--- head/sys/dev/uart/uart_dev_msm.c	Thu Jan 18 16:22:05 2018	(r328131)
+++ head/sys/dev/uart/uart_dev_msm.c	Thu Jan 18 17:43:32 2018	(r328132)
@@ -37,7 +37,6 @@ __FBSDID("$FreeBSD$");
 #include <sys/conf.h>
 #include <sys/kdb.h>
 #include <machine/bus.h>
-#include <machine/fdt.h>
 
 #include <dev/uart/uart.h>
 #include <dev/uart/uart_cpu.h>
@@ -122,9 +121,6 @@ msm_uart_param(struct uart_bas *bas, int baudrate, int
 		return (EINVAL);
 	}
 	uart_setreg(bas, UART_DM_MR2, ulcon);
-
-	/* Set 115200 for both TX and RX. */
-	uart_setreg(bas, UART_DM_CSR, UART_DM_CSR_115200);
 	uart_barrier(bas);
 
 	return (0);
@@ -143,6 +139,8 @@ static int
 msm_probe(struct uart_bas *bas)
 {
 
+	bas->regiowidth = 4;
+
 	return (0);
 }
 
@@ -202,8 +200,7 @@ msm_init(struct uart_bas *bas, int baudrate, int datab
 	SETREG(bas, UART_DM_CR, UART_DM_RESET_STALE_INT);
 
 	/* Enable/Disable Rx/Tx DM interfaces */
-	/* Disable Data Mover for now. */
-	uart_setreg(bas, UART_DM_DMEN, 0x0);
+	uart_setreg(bas, UART_DM_DMEN, UART_DM_DMEN_RX_SC_ENABLE);
 
 	/* Enable transmitter and receiver */
 	uart_setreg(bas, UART_DM_CR, UART_DM_CR_RX_ENABLE);
@@ -239,6 +236,7 @@ msm_putc(struct uart_bas *bas, int c)
 		while ((uart_getreg(bas, UART_DM_ISR) & UART_DM_TX_READY) == 0
 		    && --limit)
 			DELAY(4);
+		SETREG(bas, UART_DM_CR, UART_DM_CLEAR_TX_READY);
 	}
 	/* FIFO is ready, write number of characters to be written */
 	uart_setreg(bas, UART_DM_NO_CHARS_FOR_TX, 1);
@@ -324,7 +322,11 @@ static kobj_method_t msm_methods[] = {
 int
 msm_bus_probe(struct uart_softc *sc)
 {
+	struct uart_bas *bas;
 
+	bas = &sc->sc_bas;
+	bas->regiowidth = 4;
+
 	sc->sc_txfifosz = 64;
 	sc->sc_rxfifosz = 64;
 
@@ -570,7 +572,8 @@ static struct uart_class uart_msm_class = {
 };
 
 static struct ofw_compat_data compat_data[] = {
-	{"qcom,msm-uartdm",	(uintptr_t)&uart_msm_class},
-	{NULL,			(uintptr_t)NULL},
+	{"qcom,msm-uartdm-v1.4",	(uintptr_t)&uart_msm_class},
+	{"qcom,msm-uartdm",		(uintptr_t)&uart_msm_class},
+	{NULL,				(uintptr_t)NULL},
 };
 UART_FDT_CLASS_AND_DEVICE(compat_data);

Modified: head/sys/dev/uart/uart_dev_msm.h
==============================================================================
--- head/sys/dev/uart/uart_dev_msm.h	Thu Jan 18 16:22:05 2018	(r328131)
+++ head/sys/dev/uart/uart_dev_msm.h	Thu Jan 18 17:43:32 2018	(r328132)
@@ -177,6 +177,11 @@ enum UART_DM_BITS_PER_CHAR {
 
 /* UART Data Mover Enable Register */
 #define	UART_DM_DMEN				0x3c
+/*
+ * Single-Character mode for RX channel (every character received
+ * is zero-padded into a word).
+ */
+#define	 UART_DM_DMEN_RX_SC_ENABLE		(1 << 5)
 
 /* Number of characters for Transmission */
 #define	UART_DM_NO_CHARS_FOR_TX			0x40


More information about the svn-src-head mailing list