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
This commit is contained in:
Ruslan Bukin 2018-01-18 17:43:32 +00:00
parent 9d00c86401
commit 9f7743f2c8
2 changed files with 16 additions and 8 deletions

View File

@ -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 databits,
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 databits, int stopbits,
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,6 +322,10 @@ 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);

View File

@ -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