--- Documentation/admin-guide/kernel-parameters.txt | 2 ++ arch/x86/include/asm/pci_x86.h | 1 + arch/x86/pci/common.c | 3 +++ drivers/pci/probe.c | 9 +++++++++ 4 files changed, 15 insertions(+) Index: linux-4.18.7-rt5-r3s5/Documentation/admin-guide/kernel-parameters.txt =================================================================== --- linux-4.18.7-rt5-r3s5.orig/Documentation/admin-guide/kernel-parameters.txt +++ linux-4.18.7-rt5-r3s5/Documentation/admin-guide/kernel-parameters.txt @@ -3169,6 +3169,8 @@ for broken drivers that don't call it. skip_isa_align [X86] do not align io start addr, so can handle more pci cards + skip_ide Skip probing IDE controller, may be required + to workaround a broken BIOS. noearly [X86] Don't do any early type 1 scanning. This might help on some broken boards which machine check when some devices' config space Index: linux-4.18.7-rt5-r3s5/arch/x86/include/asm/pci_x86.h =================================================================== --- linux-4.18.7-rt5-r3s5.orig/arch/x86/include/asm/pci_x86.h +++ linux-4.18.7-rt5-r3s5/arch/x86/include/asm/pci_x86.h @@ -39,6 +39,7 @@ do { \ #define PCI_ROOT_NO_CRS 0x100000 #define PCI_NOASSIGN_BARS 0x200000 #define PCI_BIG_ROOT_WINDOW 0x400000 +#define PCI_SKIP_IDE 0x800000 extern unsigned int pci_probe; extern unsigned long pirq_table_addr; Index: linux-4.18.7-rt5-r3s5/arch/x86/pci/common.c =================================================================== --- linux-4.18.7-rt5-r3s5.orig/arch/x86/pci/common.c +++ linux-4.18.7-rt5-r3s5/arch/x86/pci/common.c @@ -608,6 +608,9 @@ char *__init pcibios_setup(char *str) } else if (!strcmp(str, "skip_isa_align")) { pci_probe |= PCI_CAN_SKIP_ISA_ALIGN; return NULL; + } else if (!strcmp(str, "skip_ide")) { + pci_probe |= PCI_SKIP_IDE; + return NULL; } else if (!strcmp(str, "noioapicquirk")) { noioapicquirk = 1; return NULL; Index: linux-4.18.7-rt5-r3s5/drivers/pci/probe.c =================================================================== --- linux-4.18.7-rt5-r3s5.orig/drivers/pci/probe.c +++ linux-4.18.7-rt5-r3s5/drivers/pci/probe.c @@ -21,6 +21,11 @@ #include #include "pci.h" +#ifdef CONFIG_X86 +#include +extern unsigned int pci_probe; +#endif + #define CARDBUS_LATENCY_TIMER 176 /* secondary latency timer */ #define CARDBUS_RESERVE_BUSNR 3 @@ -1640,7 +1645,11 @@ int pci_setup_device(struct pci_dev *dev * addresses. These are not always echoed in BAR0-3, and * BAR0-3 in a few cases contain junk! */ +#ifdef CONFIG_X86 + if (class == PCI_CLASS_STORAGE_IDE && !(pci_probe & PCI_SKIP_IDE)) { +#else if (class == PCI_CLASS_STORAGE_IDE) { +#endif u8 progif; pci_read_config_byte(dev, PCI_CLASS_PROG, &progif); if ((progif & 1) == 0) {