diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index 44e0ff3..5bb5609 100644 --- a/drivers/pci/quirks.c +++ b/drivers/pci/quirks.c @@ -4318,6 +4318,26 @@ static int pci_quirk_enable_intel_spt_pch_acs(struct pci_dev *dev) return 0; } +static int pci_quirk_enable_norr_acs(struct pci_dev *dev) +{ + int pos; + u16 cap,ctrl; + + pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_ACS); + if (!pos) + return; + + pci_read_config_word(dev, pos + PCI_ACS_CAP, &cap); + pci_read_config_word(dev, pos + PCI_ACS_CTRL, &ctrl); + + /* Same as pci_std_enable_acs() minus PCI_ACS_RR */ + ctrl |= (cap & PCI_ACS_SV); + ctrl |= (cap & PCI_ACS_CR); + ctrl |= (cap & PCI_ACS_UF); + + pci_write_config_word(dev, pos + PCI_ACS_CTRL, ctrl); +} + static const struct pci_dev_enable_acs { u16 vendor; u16 device; @@ -4325,6 +4345,7 @@ static int pci_quirk_enable_intel_spt_pch_acs(struct pci_dev *dev) } pci_dev_enable_acs[] = { { PCI_VENDOR_ID_INTEL, PCI_ANY_ID, pci_quirk_enable_intel_pch_acs }, { PCI_VENDOR_ID_INTEL, PCI_ANY_ID, pci_quirk_enable_intel_spt_pch_acs }, + { 0x12d8, 0x2404, pci_quirk_enable_norr_acs }, { 0 } };