8250_pci: Fix kernel panic when pch_uart is disabled
authorTomoya MORINAGA <tomoya-linux@dsn.lapis-semi.com>
Fri, 7 Oct 2011 04:39:49 +0000 (13:39 +0900)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 22 Apr 2012 23:21:44 +0000 (16:21 -0700)
commit 64d91cfaade2155ad048fe3b65238a052e29dde4 upstream.

Currently, ".setup" function is not set.
As a result, when detecting our IOH's uart device without pch_uart, kernel panic
occurs at the following of pciserial_init_ports().

for (i = 0; i < nr_ports; i++) {
if (quirk->setup(priv, board, &serial_port, i))
break;

So, this patch adds the ".setup" function.
We can use pci_default_setup because our IOH's uart is compatible with 16550.

Signed-off-by: Tomoya MORINAGA <tomoya-linux@dsn.lapis-semi.com>
Acked-by: Alan Cox <alan@linux.intel.com>
Signed-off-by: Tomoya MORINAGA <tomoya.rohm@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/serial/8250_pci.c

index ff48fdb5c0bf3b9cc9dd1ff4ef32f3fc125bac6c..21098ed996352af78510a77062b33a577aeb85cf 100644 (file)
@@ -1459,51 +1459,61 @@ static struct pci_serial_quirk pci_serial_quirks[] __refdata = {
                .vendor         = PCI_VENDOR_ID_INTEL,
                .device         = 0x8811,
                .init           = pci_eg20t_init,
+               .setup          = pci_default_setup,
        },
        {
                .vendor         = PCI_VENDOR_ID_INTEL,
                .device         = 0x8812,
                .init           = pci_eg20t_init,
+               .setup          = pci_default_setup,
        },
        {
                .vendor         = PCI_VENDOR_ID_INTEL,
                .device         = 0x8813,
                .init           = pci_eg20t_init,
+               .setup          = pci_default_setup,
        },
        {
                .vendor         = PCI_VENDOR_ID_INTEL,
                .device         = 0x8814,
                .init           = pci_eg20t_init,
+               .setup          = pci_default_setup,
        },
        {
                .vendor         = 0x10DB,
                .device         = 0x8027,
                .init           = pci_eg20t_init,
+               .setup          = pci_default_setup,
        },
        {
                .vendor         = 0x10DB,
                .device         = 0x8028,
                .init           = pci_eg20t_init,
+               .setup          = pci_default_setup,
        },
        {
                .vendor         = 0x10DB,
                .device         = 0x8029,
                .init           = pci_eg20t_init,
+               .setup          = pci_default_setup,
        },
        {
                .vendor         = 0x10DB,
                .device         = 0x800C,
                .init           = pci_eg20t_init,
+               .setup          = pci_default_setup,
        },
        {
                .vendor         = 0x10DB,
                .device         = 0x800D,
                .init           = pci_eg20t_init,
+               .setup          = pci_default_setup,
        },
        {
                .vendor         = 0x10DB,
                .device         = 0x800D,
                .init           = pci_eg20t_init,
+               .setup          = pci_default_setup,
        },
        /*
         * Cronyx Omega PCI (PLX-chip based)