mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-10 12:34:07 +08:00
serial: 8250: Report which option to enable for blacklisted PCI devices
Provide information in the kernel log as to what configuration option to enable for PCI UART devices that have been blacklisted in the generic PCI 8250 UART driver and which have a dedicated driver available to handle that has been disabled. The rationale is there is no easy way for the user to map a specific PCI vendor:device pair to an individual dedicated driver while the generic driver has this information readily available and it will likely be confusing that the generic driver does not register such a port. This is unlike usual drivers, such as drivers/net/ethernet/3com/3c59x.c which handles all the hardware family members regardless of differences between them, and following an existing example where a serio driver provides suggestions as to the correct configuration options to use: psmouse serio1: synaptics: The touchpad can support a better bus than the too old PS/2 protocol. Make sure MOUSE_PS2_SYNAPTICS_SMBUS and RMI4_SMB are enabled to get a better touchpad experience. A message is then printed like: serial 0000:04:00.3: ignoring port, enable SERIAL_8250_PERICOM to handle when an affected device is encountered and the generic driver rejects it. Signed-off-by: Maciej W. Rozycki <macro@orcam.me.uk> Link: https://lore.kernel.org/r/alpine.DEB.2.21.2203310054120.44113@angie.orcam.me.uk Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
65a8b28702
commit
e0239ba3ff
@ -3518,6 +3518,12 @@ static struct pciserial_board pci_boards[] = {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define REPORT_CONFIG(option) \
|
||||||
|
(IS_ENABLED(CONFIG_##option) ? 0 : (kernel_ulong_t)&#option)
|
||||||
|
#define REPORT_8250_CONFIG(option) \
|
||||||
|
(IS_ENABLED(CONFIG_SERIAL_8250_##option) ? \
|
||||||
|
0 : (kernel_ulong_t)&"SERIAL_8250_"#option)
|
||||||
|
|
||||||
static const struct pci_device_id blacklist[] = {
|
static const struct pci_device_id blacklist[] = {
|
||||||
/* softmodems */
|
/* softmodems */
|
||||||
{ PCI_VDEVICE(AL, 0x5457), }, /* ALi Corporation M5457 AC'97 Modem */
|
{ PCI_VDEVICE(AL, 0x5457), }, /* ALi Corporation M5457 AC'97 Modem */
|
||||||
@ -3525,40 +3531,43 @@ static const struct pci_device_id blacklist[] = {
|
|||||||
{ PCI_DEVICE(0x1543, 0x3052), }, /* Si3052-based modem, default IDs */
|
{ PCI_DEVICE(0x1543, 0x3052), }, /* Si3052-based modem, default IDs */
|
||||||
|
|
||||||
/* multi-io cards handled by parport_serial */
|
/* multi-io cards handled by parport_serial */
|
||||||
{ PCI_DEVICE(0x4348, 0x7053), }, /* WCH CH353 2S1P */
|
/* WCH CH353 2S1P */
|
||||||
{ PCI_DEVICE(0x4348, 0x5053), }, /* WCH CH353 1S1P */
|
{ PCI_DEVICE(0x4348, 0x7053), 0, 0, REPORT_CONFIG(PARPORT_SERIAL), },
|
||||||
{ PCI_DEVICE(0x1c00, 0x3250), }, /* WCH CH382 2S1P */
|
/* WCH CH353 1S1P */
|
||||||
|
{ PCI_DEVICE(0x4348, 0x5053), 0, 0, REPORT_CONFIG(PARPORT_SERIAL), },
|
||||||
|
/* WCH CH382 2S1P */
|
||||||
|
{ PCI_DEVICE(0x1c00, 0x3250), 0, 0, REPORT_CONFIG(PARPORT_SERIAL), },
|
||||||
|
|
||||||
/* Intel platforms with MID UART */
|
/* Intel platforms with MID UART */
|
||||||
{ PCI_VDEVICE(INTEL, 0x081b), },
|
{ PCI_VDEVICE(INTEL, 0x081b), REPORT_8250_CONFIG(MID), },
|
||||||
{ PCI_VDEVICE(INTEL, 0x081c), },
|
{ PCI_VDEVICE(INTEL, 0x081c), REPORT_8250_CONFIG(MID), },
|
||||||
{ PCI_VDEVICE(INTEL, 0x081d), },
|
{ PCI_VDEVICE(INTEL, 0x081d), REPORT_8250_CONFIG(MID), },
|
||||||
{ PCI_VDEVICE(INTEL, 0x1191), },
|
{ PCI_VDEVICE(INTEL, 0x1191), REPORT_8250_CONFIG(MID), },
|
||||||
{ PCI_VDEVICE(INTEL, 0x18d8), },
|
{ PCI_VDEVICE(INTEL, 0x18d8), REPORT_8250_CONFIG(MID), },
|
||||||
{ PCI_VDEVICE(INTEL, 0x19d8), },
|
{ PCI_VDEVICE(INTEL, 0x19d8), REPORT_8250_CONFIG(MID), },
|
||||||
|
|
||||||
/* Intel platforms with DesignWare UART */
|
/* Intel platforms with DesignWare UART */
|
||||||
{ PCI_VDEVICE(INTEL, 0x0936), },
|
{ PCI_VDEVICE(INTEL, 0x0936), REPORT_8250_CONFIG(LPSS), },
|
||||||
{ PCI_VDEVICE(INTEL, 0x0f0a), },
|
{ PCI_VDEVICE(INTEL, 0x0f0a), REPORT_8250_CONFIG(LPSS), },
|
||||||
{ PCI_VDEVICE(INTEL, 0x0f0c), },
|
{ PCI_VDEVICE(INTEL, 0x0f0c), REPORT_8250_CONFIG(LPSS), },
|
||||||
{ PCI_VDEVICE(INTEL, 0x228a), },
|
{ PCI_VDEVICE(INTEL, 0x228a), REPORT_8250_CONFIG(LPSS), },
|
||||||
{ PCI_VDEVICE(INTEL, 0x228c), },
|
{ PCI_VDEVICE(INTEL, 0x228c), REPORT_8250_CONFIG(LPSS), },
|
||||||
{ PCI_VDEVICE(INTEL, 0x4b96), },
|
{ PCI_VDEVICE(INTEL, 0x4b96), REPORT_8250_CONFIG(LPSS), },
|
||||||
{ PCI_VDEVICE(INTEL, 0x4b97), },
|
{ PCI_VDEVICE(INTEL, 0x4b97), REPORT_8250_CONFIG(LPSS), },
|
||||||
{ PCI_VDEVICE(INTEL, 0x4b98), },
|
{ PCI_VDEVICE(INTEL, 0x4b98), REPORT_8250_CONFIG(LPSS), },
|
||||||
{ PCI_VDEVICE(INTEL, 0x4b99), },
|
{ PCI_VDEVICE(INTEL, 0x4b99), REPORT_8250_CONFIG(LPSS), },
|
||||||
{ PCI_VDEVICE(INTEL, 0x4b9a), },
|
{ PCI_VDEVICE(INTEL, 0x4b9a), REPORT_8250_CONFIG(LPSS), },
|
||||||
{ PCI_VDEVICE(INTEL, 0x4b9b), },
|
{ PCI_VDEVICE(INTEL, 0x4b9b), REPORT_8250_CONFIG(LPSS), },
|
||||||
{ PCI_VDEVICE(INTEL, 0x9ce3), },
|
{ PCI_VDEVICE(INTEL, 0x9ce3), REPORT_8250_CONFIG(LPSS), },
|
||||||
{ PCI_VDEVICE(INTEL, 0x9ce4), },
|
{ PCI_VDEVICE(INTEL, 0x9ce4), REPORT_8250_CONFIG(LPSS), },
|
||||||
|
|
||||||
/* Exar devices */
|
/* Exar devices */
|
||||||
{ PCI_VDEVICE(EXAR, PCI_ANY_ID), },
|
{ PCI_VDEVICE(EXAR, PCI_ANY_ID), REPORT_8250_CONFIG(EXAR), },
|
||||||
{ PCI_VDEVICE(COMMTECH, PCI_ANY_ID), },
|
{ PCI_VDEVICE(COMMTECH, PCI_ANY_ID), REPORT_8250_CONFIG(EXAR), },
|
||||||
|
|
||||||
/* Pericom devices */
|
/* Pericom devices */
|
||||||
{ PCI_VDEVICE(PERICOM, PCI_ANY_ID), },
|
{ PCI_VDEVICE(PERICOM, PCI_ANY_ID), REPORT_8250_CONFIG(PERICOM), },
|
||||||
{ PCI_VDEVICE(ACCESSIO, PCI_ANY_ID), },
|
{ PCI_VDEVICE(ACCESSIO, PCI_ANY_ID), REPORT_8250_CONFIG(PERICOM), },
|
||||||
|
|
||||||
/* End of the black list */
|
/* End of the black list */
|
||||||
{ }
|
{ }
|
||||||
@ -3840,8 +3849,12 @@ pciserial_init_one(struct pci_dev *dev, const struct pci_device_id *ent)
|
|||||||
board = &pci_boards[ent->driver_data];
|
board = &pci_boards[ent->driver_data];
|
||||||
|
|
||||||
exclude = pci_match_id(blacklist, dev);
|
exclude = pci_match_id(blacklist, dev);
|
||||||
if (exclude)
|
if (exclude) {
|
||||||
|
if (exclude->driver_data)
|
||||||
|
pci_warn(dev, "ignoring port, enable %s to handle\n",
|
||||||
|
(const char *)exclude->driver_data);
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
}
|
||||||
|
|
||||||
rc = pcim_enable_device(dev);
|
rc = pcim_enable_device(dev);
|
||||||
pci_save_state(dev);
|
pci_save_state(dev);
|
||||||
|
Loading…
Reference in New Issue
Block a user