From 24294cb8badf7688383aa2a6b15428bddba7c1b1 Mon Sep 17 00:00:00 2001 From: "Zhao, Yu" Date: Thu, 23 Oct 2008 13:15:39 +0800 Subject: [PATCH] --- yaml --- r: 117803 b: refs/heads/master c: 8113587c2d14d3be2414190845b2e2617c0aa33b h: refs/heads/master i: 117801: 7f0753c9177dcc1f61bd4b8bf85080e34bc70fb0 117799: 09383332841eee99c139cc81c7998c6387be7b76 v: v3 --- [refs] | 2 +- trunk/drivers/pci/pci.c | 21 +++++++++++++-------- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/[refs] b/[refs] index 4b03341cc94a..5ae2c53fd57d 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: d2174c3c07adad88dd9ba37a731e0b00b746822a +refs/heads/master: 8113587c2d14d3be2414190845b2e2617c0aa33b diff --git a/trunk/drivers/pci/pci.c b/trunk/drivers/pci/pci.c index 533aeb5fcbe4..21f2ac639cab 100644 --- a/trunk/drivers/pci/pci.c +++ b/trunk/drivers/pci/pci.c @@ -1309,27 +1309,32 @@ void pci_enable_ari(struct pci_dev *dev) int pos; u32 cap; u16 ctrl; + struct pci_dev *bridge; - if (!dev->is_pcie) + if (!dev->is_pcie || dev->devfn) return; - if (dev->pcie_type != PCI_EXP_TYPE_ROOT_PORT && - dev->pcie_type != PCI_EXP_TYPE_DOWNSTREAM) + pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_ARI); + if (!pos) return; - pos = pci_find_capability(dev, PCI_CAP_ID_EXP); + bridge = dev->bus->self; + if (!bridge || !bridge->is_pcie) + return; + + pos = pci_find_capability(bridge, PCI_CAP_ID_EXP); if (!pos) return; - pci_read_config_dword(dev, pos + PCI_EXP_DEVCAP2, &cap); + pci_read_config_dword(bridge, pos + PCI_EXP_DEVCAP2, &cap); if (!(cap & PCI_EXP_DEVCAP2_ARI)) return; - pci_read_config_word(dev, pos + PCI_EXP_DEVCTL2, &ctrl); + pci_read_config_word(bridge, pos + PCI_EXP_DEVCTL2, &ctrl); ctrl |= PCI_EXP_DEVCTL2_ARI; - pci_write_config_word(dev, pos + PCI_EXP_DEVCTL2, ctrl); + pci_write_config_word(bridge, pos + PCI_EXP_DEVCTL2, ctrl); - dev->ari_enabled = 1; + bridge->ari_enabled = 1; } int