Commit 0788c39b authored by Heikki Krogerus's avatar Heikki Krogerus Committed by Greg Kroah-Hartman

serial: 8250_dw: support ACPI platforms with integrated DMA engine

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: default avatarHeikki Krogerus <heikki.krogerus@linux.intel.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 6f0c3091
...@@ -377,6 +377,16 @@ static int dw8250_probe_of(struct uart_port *p, ...@@ -377,6 +377,16 @@ static int dw8250_probe_of(struct uart_port *p,
return 0; 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, static int dw8250_probe_acpi(struct uart_8250_port *up,
struct dw8250_data *data) struct dw8250_data *data)
{ {
...@@ -389,8 +399,15 @@ static int dw8250_probe_acpi(struct uart_8250_port *up, ...@@ -389,8 +399,15 @@ static int dw8250_probe_acpi(struct uart_8250_port *up,
p->serial_out = dw8250_serial_out32; p->serial_out = dw8250_serial_out32;
p->regshift = 2; 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->rxconf.src_maxburst = p->fifosize / 4;
up->dma->txconf.dst_maxburst = p->fifosize / 4; up->dma->txconf.dst_maxburst = p->fifosize / 4;
......
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