Skip to content

Commit

Permalink
serial: 8250_dw: support ACPI platforms with integrated DMA engine
Browse files Browse the repository at this point in the history
On many new Intel SoCs the UART has an integrated DMA engine
(iDMA). In order to use it a special filter function is needed.

Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
Heikki Krogerus authored and Greg Kroah-Hartman committed May 31, 2015
1 parent 6f0c309 commit 0788c39
Showing 1 changed file with 18 additions and 1 deletion.
19 changes: 18 additions & 1 deletion drivers/tty/serial/8250/8250_dw.c
Original file line number Diff line number Diff line change
Expand Up @@ -377,6 +377,16 @@ static int dw8250_probe_of(struct uart_port *p,
return 0;
}

static bool dw8250_idma_filter(struct dma_chan *chan, void *param)
{
struct device *dev = param;

if (dev != chan->device->dev->parent)
return false;

return true;
}

static int dw8250_probe_acpi(struct uart_8250_port *up,
struct dw8250_data *data)
{
Expand All @@ -389,8 +399,15 @@ static int dw8250_probe_acpi(struct uart_8250_port *up,
p->serial_out = dw8250_serial_out32;
p->regshift = 2;

up->dma = &data->dma;
/* Platforms with iDMA */
if (platform_get_resource_byname(to_platform_device(up->port.dev),
IORESOURCE_MEM, "lpss_priv")) {
data->dma.rx_param = up->port.dev->parent;
data->dma.tx_param = up->port.dev->parent;
data->dma.fn = dw8250_idma_filter;
}

up->dma = &data->dma;
up->dma->rxconf.src_maxburst = p->fifosize / 4;
up->dma->txconf.dst_maxburst = p->fifosize / 4;

Expand Down

0 comments on commit 0788c39

Please sign in to comment.