Commit 64e22ebe authored by Elen Song's avatar Elen Song Committed by Greg Kroah-Hartman

serial: at91: correct definition from DMA to PDC

The DMA is available since at91sam9x5 socs, before that, we use PDC.
Signed-off-by: default avatarElen Song <elen.song@atmel.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 0a09ae98
...@@ -139,11 +139,11 @@ struct atmel_uart_port { ...@@ -139,11 +139,11 @@ struct atmel_uart_port {
u32 backup_imr; /* IMR saved during suspend */ u32 backup_imr; /* IMR saved during suspend */
int break_active; /* break being received */ int break_active; /* break being received */
short use_dma_rx; /* enable PDC receiver */ bool use_pdc_rx; /* enable PDC receiver */
short pdc_rx_idx; /* current PDC RX buffer */ short pdc_rx_idx; /* current PDC RX buffer */
struct atmel_dma_buffer pdc_rx[2]; /* PDC receier */ struct atmel_dma_buffer pdc_rx[2]; /* PDC receier */
short use_dma_tx; /* enable PDC transmitter */ bool use_pdc_tx; /* enable PDC transmitter */
struct atmel_dma_buffer pdc_tx; /* PDC transmitter */ struct atmel_dma_buffer pdc_tx; /* PDC transmitter */
struct tasklet_struct tasklet; struct tasklet_struct tasklet;
...@@ -180,26 +180,26 @@ to_atmel_uart_port(struct uart_port *uart) ...@@ -180,26 +180,26 @@ to_atmel_uart_port(struct uart_port *uart)
} }
#ifdef CONFIG_SERIAL_ATMEL_PDC #ifdef CONFIG_SERIAL_ATMEL_PDC
static bool atmel_use_dma_rx(struct uart_port *port) static bool atmel_use_pdc_rx(struct uart_port *port)
{ {
struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); struct atmel_uart_port *atmel_port = to_atmel_uart_port(port);
return atmel_port->use_dma_rx; return atmel_port->use_pdc_rx;
} }
static bool atmel_use_dma_tx(struct uart_port *port) static bool atmel_use_pdc_tx(struct uart_port *port)
{ {
struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); struct atmel_uart_port *atmel_port = to_atmel_uart_port(port);
return atmel_port->use_dma_tx; return atmel_port->use_pdc_tx;
} }
#else #else
static bool atmel_use_dma_rx(struct uart_port *port) static bool atmel_use_pdc_rx(struct uart_port *port)
{ {
return false; return false;
} }
static bool atmel_use_dma_tx(struct uart_port *port) static bool atmel_use_pdc_tx(struct uart_port *port)
{ {
return false; return false;
} }
...@@ -232,7 +232,7 @@ void atmel_config_rs485(struct uart_port *port, struct serial_rs485 *rs485conf) ...@@ -232,7 +232,7 @@ void atmel_config_rs485(struct uart_port *port, struct serial_rs485 *rs485conf)
mode |= ATMEL_US_USMODE_RS485; mode |= ATMEL_US_USMODE_RS485;
} else { } else {
dev_dbg(port->dev, "Setting UART to RS232\n"); dev_dbg(port->dev, "Setting UART to RS232\n");
if (atmel_use_dma_tx(port)) if (atmel_use_pdc_tx(port))
atmel_port->tx_done_mask = ATMEL_US_ENDTX | atmel_port->tx_done_mask = ATMEL_US_ENDTX |
ATMEL_US_TXBUFE; ATMEL_US_TXBUFE;
else else
...@@ -344,7 +344,7 @@ static void atmel_stop_tx(struct uart_port *port) ...@@ -344,7 +344,7 @@ static void atmel_stop_tx(struct uart_port *port)
{ {
struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); struct atmel_uart_port *atmel_port = to_atmel_uart_port(port);
if (atmel_use_dma_tx(port)) { if (atmel_use_pdc_tx(port)) {
/* disable PDC transmit */ /* disable PDC transmit */
UART_PUT_PTCR(port, ATMEL_PDC_TXTDIS); UART_PUT_PTCR(port, ATMEL_PDC_TXTDIS);
} }
...@@ -363,7 +363,7 @@ static void atmel_start_tx(struct uart_port *port) ...@@ -363,7 +363,7 @@ static void atmel_start_tx(struct uart_port *port)
{ {
struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); struct atmel_uart_port *atmel_port = to_atmel_uart_port(port);
if (atmel_use_dma_tx(port)) { if (atmel_use_pdc_tx(port)) {
if (UART_GET_PTSR(port) & ATMEL_PDC_TXTEN) if (UART_GET_PTSR(port) & ATMEL_PDC_TXTEN)
/* The transmitter is already running. Yes, we /* The transmitter is already running. Yes, we
really need this.*/ really need this.*/
...@@ -389,7 +389,7 @@ static void atmel_start_rx(struct uart_port *port) ...@@ -389,7 +389,7 @@ static void atmel_start_rx(struct uart_port *port)
UART_PUT_CR(port, ATMEL_US_RXEN); UART_PUT_CR(port, ATMEL_US_RXEN);
if (atmel_use_dma_rx(port)) { if (atmel_use_pdc_rx(port)) {
/* enable PDC controller */ /* enable PDC controller */
UART_PUT_IER(port, ATMEL_US_ENDRX | ATMEL_US_TIMEOUT | UART_PUT_IER(port, ATMEL_US_ENDRX | ATMEL_US_TIMEOUT |
port->read_status_mask); port->read_status_mask);
...@@ -406,7 +406,7 @@ static void atmel_stop_rx(struct uart_port *port) ...@@ -406,7 +406,7 @@ static void atmel_stop_rx(struct uart_port *port)
{ {
UART_PUT_CR(port, ATMEL_US_RXDIS); UART_PUT_CR(port, ATMEL_US_RXDIS);
if (atmel_use_dma_rx(port)) { if (atmel_use_pdc_rx(port)) {
/* disable PDC receive */ /* disable PDC receive */
UART_PUT_PTCR(port, ATMEL_PDC_RXTDIS); UART_PUT_PTCR(port, ATMEL_PDC_RXTDIS);
UART_PUT_IDR(port, ATMEL_US_ENDRX | ATMEL_US_TIMEOUT | UART_PUT_IDR(port, ATMEL_US_ENDRX | ATMEL_US_TIMEOUT |
...@@ -571,7 +571,7 @@ atmel_handle_receive(struct uart_port *port, unsigned int pending) ...@@ -571,7 +571,7 @@ atmel_handle_receive(struct uart_port *port, unsigned int pending)
{ {
struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); struct atmel_uart_port *atmel_port = to_atmel_uart_port(port);
if (atmel_use_dma_rx(port)) { if (atmel_use_pdc_rx(port)) {
/* /*
* PDC receive. Just schedule the tasklet and let it * PDC receive. Just schedule the tasklet and let it
* figure out the details. * figure out the details.
...@@ -660,7 +660,7 @@ static irqreturn_t atmel_interrupt(int irq, void *dev_id) ...@@ -660,7 +660,7 @@ static irqreturn_t atmel_interrupt(int irq, void *dev_id)
/* /*
* Called from tasklet with ENDTX and TXBUFE interrupts disabled. * Called from tasklet with ENDTX and TXBUFE interrupts disabled.
*/ */
static void atmel_tx_dma(struct uart_port *port) static void atmel_tx_pdc(struct uart_port *port)
{ {
struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); struct atmel_uart_port *atmel_port = to_atmel_uart_port(port);
struct circ_buf *xmit = &port->state->xmit; struct circ_buf *xmit = &port->state->xmit;
...@@ -777,7 +777,7 @@ static void atmel_rx_from_ring(struct uart_port *port) ...@@ -777,7 +777,7 @@ static void atmel_rx_from_ring(struct uart_port *port)
spin_lock(&port->lock); spin_lock(&port->lock);
} }
static void atmel_rx_from_dma(struct uart_port *port) static void atmel_rx_from_pdc(struct uart_port *port)
{ {
struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); struct atmel_uart_port *atmel_port = to_atmel_uart_port(port);
struct tty_port *tport = &port->state->port; struct tty_port *tport = &port->state->port;
...@@ -867,8 +867,8 @@ static void atmel_tasklet_func(unsigned long data) ...@@ -867,8 +867,8 @@ static void atmel_tasklet_func(unsigned long data)
/* The interrupt handler does not take the lock */ /* The interrupt handler does not take the lock */
spin_lock(&port->lock); spin_lock(&port->lock);
if (atmel_use_dma_tx(port)) if (atmel_use_pdc_tx(port))
atmel_tx_dma(port); atmel_tx_pdc(port);
else else
atmel_tx_chars(port); atmel_tx_chars(port);
...@@ -892,8 +892,8 @@ static void atmel_tasklet_func(unsigned long data) ...@@ -892,8 +892,8 @@ static void atmel_tasklet_func(unsigned long data)
atmel_port->irq_status_prev = status; atmel_port->irq_status_prev = status;
} }
if (atmel_use_dma_rx(port)) if (atmel_use_pdc_rx(port))
atmel_rx_from_dma(port); atmel_rx_from_pdc(port);
else else
atmel_rx_from_ring(port); atmel_rx_from_ring(port);
...@@ -929,7 +929,7 @@ static int atmel_startup(struct uart_port *port) ...@@ -929,7 +929,7 @@ static int atmel_startup(struct uart_port *port)
/* /*
* Initialize DMA (if necessary) * Initialize DMA (if necessary)
*/ */
if (atmel_use_dma_rx(port)) { if (atmel_use_pdc_rx(port)) {
int i; int i;
for (i = 0; i < 2; i++) { for (i = 0; i < 2; i++) {
...@@ -963,7 +963,7 @@ static int atmel_startup(struct uart_port *port) ...@@ -963,7 +963,7 @@ static int atmel_startup(struct uart_port *port)
UART_PUT_RNPR(port, atmel_port->pdc_rx[1].dma_addr); UART_PUT_RNPR(port, atmel_port->pdc_rx[1].dma_addr);
UART_PUT_RNCR(port, PDC_BUFFER_SIZE); UART_PUT_RNCR(port, PDC_BUFFER_SIZE);
} }
if (atmel_use_dma_tx(port)) { if (atmel_use_pdc_tx(port)) {
struct atmel_dma_buffer *pdc = &atmel_port->pdc_tx; struct atmel_dma_buffer *pdc = &atmel_port->pdc_tx;
struct circ_buf *xmit = &port->state->xmit; struct circ_buf *xmit = &port->state->xmit;
...@@ -999,7 +999,7 @@ static int atmel_startup(struct uart_port *port) ...@@ -999,7 +999,7 @@ static int atmel_startup(struct uart_port *port)
/* enable xmit & rcvr */ /* enable xmit & rcvr */
UART_PUT_CR(port, ATMEL_US_TXEN | ATMEL_US_RXEN); UART_PUT_CR(port, ATMEL_US_TXEN | ATMEL_US_RXEN);
if (atmel_use_dma_rx(port)) { if (atmel_use_pdc_rx(port)) {
/* set UART timeout */ /* set UART timeout */
UART_PUT_RTOR(port, PDC_RX_TIMEOUT); UART_PUT_RTOR(port, PDC_RX_TIMEOUT);
UART_PUT_CR(port, ATMEL_US_STTTO); UART_PUT_CR(port, ATMEL_US_STTTO);
...@@ -1030,7 +1030,7 @@ static void atmel_shutdown(struct uart_port *port) ...@@ -1030,7 +1030,7 @@ static void atmel_shutdown(struct uart_port *port)
/* /*
* Shut-down the DMA. * Shut-down the DMA.
*/ */
if (atmel_use_dma_rx(port)) { if (atmel_use_pdc_rx(port)) {
int i; int i;
for (i = 0; i < 2; i++) { for (i = 0; i < 2; i++) {
...@@ -1043,7 +1043,7 @@ static void atmel_shutdown(struct uart_port *port) ...@@ -1043,7 +1043,7 @@ static void atmel_shutdown(struct uart_port *port)
kfree(pdc->buf); kfree(pdc->buf);
} }
} }
if (atmel_use_dma_tx(port)) { if (atmel_use_pdc_tx(port)) {
struct atmel_dma_buffer *pdc = &atmel_port->pdc_tx; struct atmel_dma_buffer *pdc = &atmel_port->pdc_tx;
dma_unmap_single(port->dev, dma_unmap_single(port->dev,
...@@ -1079,7 +1079,7 @@ static void atmel_flush_buffer(struct uart_port *port) ...@@ -1079,7 +1079,7 @@ static void atmel_flush_buffer(struct uart_port *port)
{ {
struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); struct atmel_uart_port *atmel_port = to_atmel_uart_port(port);
if (atmel_use_dma_tx(port)) { if (atmel_use_pdc_tx(port)) {
UART_PUT_TCR(port, 0); UART_PUT_TCR(port, 0);
atmel_port->pdc_tx.ofs = 0; atmel_port->pdc_tx.ofs = 0;
} }
...@@ -1192,7 +1192,7 @@ static void atmel_set_termios(struct uart_port *port, struct ktermios *termios, ...@@ -1192,7 +1192,7 @@ static void atmel_set_termios(struct uart_port *port, struct ktermios *termios,
if (termios->c_iflag & (BRKINT | PARMRK)) if (termios->c_iflag & (BRKINT | PARMRK))
port->read_status_mask |= ATMEL_US_RXBRK; port->read_status_mask |= ATMEL_US_RXBRK;
if (atmel_use_dma_rx(port)) if (atmel_use_pdc_rx(port))
/* need to enable error interrupts */ /* need to enable error interrupts */
UART_PUT_IER(port, port->read_status_mask); UART_PUT_IER(port, port->read_status_mask);
...@@ -1429,13 +1429,14 @@ static void atmel_of_init_port(struct atmel_uart_port *atmel_port, ...@@ -1429,13 +1429,14 @@ static void atmel_of_init_port(struct atmel_uart_port *atmel_port,
/* DMA/PDC usage specification */ /* DMA/PDC usage specification */
if (of_get_property(np, "atmel,use-dma-rx", NULL)) if (of_get_property(np, "atmel,use-dma-rx", NULL))
atmel_port->use_dma_rx = 1; atmel_port->use_pdc_rx = true;
else else
atmel_port->use_dma_rx = 0; atmel_port->use_pdc_rx = false;
if (of_get_property(np, "atmel,use-dma-tx", NULL)) if (of_get_property(np, "atmel,use-dma-tx", NULL))
atmel_port->use_dma_tx = 1; atmel_port->use_pdc_tx = true;
else else
atmel_port->use_dma_tx = 0; atmel_port->use_pdc_tx = false;
/* rs485 properties */ /* rs485 properties */
if (of_property_read_u32_array(np, "rs485-rts-delay", if (of_property_read_u32_array(np, "rs485-rts-delay",
...@@ -1467,8 +1468,8 @@ static int atmel_init_port(struct atmel_uart_port *atmel_port, ...@@ -1467,8 +1468,8 @@ static int atmel_init_port(struct atmel_uart_port *atmel_port,
if (pdev->dev.of_node) { if (pdev->dev.of_node) {
atmel_of_init_port(atmel_port, pdev->dev.of_node); atmel_of_init_port(atmel_port, pdev->dev.of_node);
} else { } else {
atmel_port->use_dma_rx = pdata->use_dma_rx; atmel_port->use_pdc_rx = pdata->use_dma_rx;
atmel_port->use_dma_tx = pdata->use_dma_tx; atmel_port->use_pdc_tx = pdata->use_dma_tx;
atmel_port->rs485 = pdata->rs485; atmel_port->rs485 = pdata->rs485;
} }
...@@ -1515,7 +1516,7 @@ static int atmel_init_port(struct atmel_uart_port *atmel_port, ...@@ -1515,7 +1516,7 @@ static int atmel_init_port(struct atmel_uart_port *atmel_port,
/* Use TXEMPTY for interrupt when rs485 else TXRDY or ENDTX|TXBUFE */ /* Use TXEMPTY for interrupt when rs485 else TXRDY or ENDTX|TXBUFE */
if (atmel_port->rs485.flags & SER_RS485_ENABLED) if (atmel_port->rs485.flags & SER_RS485_ENABLED)
atmel_port->tx_done_mask = ATMEL_US_TXEMPTY; atmel_port->tx_done_mask = ATMEL_US_TXEMPTY;
else if (atmel_use_dma_tx(port)) { else if (atmel_use_pdc_tx(port)) {
port->fifosize = PDC_BUFFER_SIZE; port->fifosize = PDC_BUFFER_SIZE;
atmel_port->tx_done_mask = ATMEL_US_ENDTX | ATMEL_US_TXBUFE; atmel_port->tx_done_mask = ATMEL_US_ENDTX | ATMEL_US_TXBUFE;
} else { } else {
...@@ -1807,7 +1808,7 @@ static int atmel_serial_probe(struct platform_device *pdev) ...@@ -1807,7 +1808,7 @@ static int atmel_serial_probe(struct platform_device *pdev)
if (ret) if (ret)
goto err; goto err;
if (!atmel_use_dma_rx(&port->uart)) { if (!atmel_use_pdc_rx(&port->uart)) {
ret = -ENOMEM; ret = -ENOMEM;
data = kmalloc(sizeof(struct atmel_uart_char) data = kmalloc(sizeof(struct atmel_uart_char)
* ATMEL_SERIAL_RINGSIZE, GFP_KERNEL); * ATMEL_SERIAL_RINGSIZE, GFP_KERNEL);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment