|
Takashi Iwai |
d54bec |
From 254cc7743e847780655025c1d81a9c15854bf236 Mon Sep 17 00:00:00 2001
|
|
Takashi Iwai |
d54bec |
From: Felipe Balbi <felipe.balbi@linux.intel.com>
|
|
Takashi Iwai |
d54bec |
Date: Tue, 1 Oct 2019 14:58:25 +0300
|
|
Takashi Iwai |
d54bec |
Subject: [PATCH] serial: 8250_lpss: Switch over to MSI interrupts
|
|
Takashi Iwai |
d54bec |
Git-commit: 254cc7743e847780655025c1d81a9c15854bf236
|
|
Takashi Iwai |
d54bec |
Patch-mainline: v5.5-rc1
|
|
Takashi Iwai |
d54bec |
References: jsc#SLE-13436
|
|
Takashi Iwai |
d54bec |
|
|
Takashi Iwai |
d54bec |
Some devices support MSI interrupts. Let's at least try to use them in
|
|
Takashi Iwai |
d54bec |
platforms that provide MSI capability.
|
|
Takashi Iwai |
d54bec |
|
|
Takashi Iwai |
d54bec |
While at that, remove the now duplicated code from qrp_serial_setup().
|
|
Takashi Iwai |
d54bec |
|
|
Takashi Iwai |
d54bec |
Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
|
|
Takashi Iwai |
d54bec |
Link: https://lore.kernel.org/r/20191001115825.795700-1-felipe.balbi@linux.intel.com
|
|
Takashi Iwai |
d54bec |
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
|
Takashi Iwai |
d54bec |
Acked-by: Takashi Iwai <tiwai@suse.de>
|
|
Takashi Iwai |
d54bec |
|
|
Takashi Iwai |
d54bec |
---
|
|
Takashi Iwai |
d54bec |
drivers/tty/serial/8250/8250_lpss.c | 21 +++++++++------------
|
|
Takashi Iwai |
d54bec |
1 file changed, 9 insertions(+), 12 deletions(-)
|
|
Takashi Iwai |
d54bec |
|
|
Takashi Iwai |
d54bec |
diff --git a/drivers/tty/serial/8250/8250_lpss.c b/drivers/tty/serial/8250/8250_lpss.c
|
|
Takashi Iwai |
d54bec |
index 5f72ef3ea574..60eff3240c8a 100644
|
|
Takashi Iwai |
d54bec |
--- a/drivers/tty/serial/8250/8250_lpss.c
|
|
Takashi Iwai |
d54bec |
+++ b/drivers/tty/serial/8250/8250_lpss.c
|
|
Takashi Iwai |
d54bec |
@@ -221,17 +221,6 @@ static void qrk_serial_exit_dma(struct lpss8250 *lpss) {}
|
|
Takashi Iwai |
d54bec |
|
|
Takashi Iwai |
d54bec |
static int qrk_serial_setup(struct lpss8250 *lpss, struct uart_port *port)
|
|
Takashi Iwai |
d54bec |
{
|
|
Takashi Iwai |
d54bec |
- struct pci_dev *pdev = to_pci_dev(port->dev);
|
|
Takashi Iwai |
d54bec |
- int ret;
|
|
Takashi Iwai |
d54bec |
-
|
|
Takashi Iwai |
d54bec |
- pci_set_master(pdev);
|
|
Takashi Iwai |
d54bec |
-
|
|
Takashi Iwai |
d54bec |
- ret = pci_alloc_irq_vectors(pdev, 1, 1, PCI_IRQ_ALL_TYPES);
|
|
Takashi Iwai |
d54bec |
- if (ret < 0)
|
|
Takashi Iwai |
d54bec |
- return ret;
|
|
Takashi Iwai |
d54bec |
-
|
|
Takashi Iwai |
d54bec |
- port->irq = pci_irq_vector(pdev, 0);
|
|
Takashi Iwai |
d54bec |
-
|
|
Takashi Iwai |
d54bec |
qrk_serial_setup_dma(lpss, port);
|
|
Takashi Iwai |
d54bec |
return 0;
|
|
Takashi Iwai |
d54bec |
}
|
|
Takashi Iwai |
d54bec |
@@ -293,16 +282,22 @@ static int lpss8250_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
|
Takashi Iwai |
d54bec |
if (ret)
|
|
Takashi Iwai |
d54bec |
return ret;
|
|
Takashi Iwai |
d54bec |
|
|
Takashi Iwai |
d54bec |
+ pci_set_master(pdev);
|
|
Takashi Iwai |
d54bec |
+
|
|
Takashi Iwai |
d54bec |
lpss = devm_kzalloc(&pdev->dev, sizeof(*lpss), GFP_KERNEL);
|
|
Takashi Iwai |
d54bec |
if (!lpss)
|
|
Takashi Iwai |
d54bec |
return -ENOMEM;
|
|
Takashi Iwai |
d54bec |
|
|
Takashi Iwai |
d54bec |
+ ret = pci_alloc_irq_vectors(pdev, 1, 1, PCI_IRQ_ALL_TYPES);
|
|
Takashi Iwai |
d54bec |
+ if (ret < 0)
|
|
Takashi Iwai |
d54bec |
+ return ret;
|
|
Takashi Iwai |
d54bec |
+
|
|
Takashi Iwai |
d54bec |
lpss->board = (struct lpss8250_board *)id->driver_data;
|
|
Takashi Iwai |
d54bec |
|
|
Takashi Iwai |
d54bec |
memset(&uart, 0, sizeof(struct uart_8250_port));
|
|
Takashi Iwai |
d54bec |
|
|
Takashi Iwai |
d54bec |
uart.port.dev = &pdev->dev;
|
|
Takashi Iwai |
d54bec |
- uart.port.irq = pdev->irq;
|
|
Takashi Iwai |
d54bec |
+ uart.port.irq = pci_irq_vector(pdev, 0);
|
|
Takashi Iwai |
d54bec |
uart.port.private_data = &lpss->data;
|
|
Takashi Iwai |
d54bec |
uart.port.type = PORT_16550A;
|
|
Takashi Iwai |
d54bec |
uart.port.iotype = UPIO_MEM;
|
|
Takashi Iwai |
d54bec |
@@ -337,6 +332,7 @@ static int lpss8250_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
|
Takashi Iwai |
d54bec |
err_exit:
|
|
Takashi Iwai |
d54bec |
if (lpss->board->exit)
|
|
Takashi Iwai |
d54bec |
lpss->board->exit(lpss);
|
|
Takashi Iwai |
d54bec |
+ pci_free_irq_vectors(pdev);
|
|
Takashi Iwai |
d54bec |
return ret;
|
|
Takashi Iwai |
d54bec |
}
|
|
Takashi Iwai |
d54bec |
|
|
Takashi Iwai |
d54bec |
@@ -348,6 +344,7 @@ static void lpss8250_remove(struct pci_dev *pdev)
|
|
Takashi Iwai |
d54bec |
|
|
Takashi Iwai |
d54bec |
if (lpss->board->exit)
|
|
Takashi Iwai |
d54bec |
lpss->board->exit(lpss);
|
|
Takashi Iwai |
d54bec |
+ pci_free_irq_vectors(pdev);
|
|
Takashi Iwai |
d54bec |
}
|
|
Takashi Iwai |
d54bec |
|
|
Takashi Iwai |
d54bec |
static const struct lpss8250_board byt_board = {
|
|
Takashi Iwai |
d54bec |
--
|
|
Takashi Iwai |
d54bec |
2.16.4
|
|
Takashi Iwai |
d54bec |
|