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-all
mailing list