lkml.org 
[lkml]   [2018]   [Apr]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL for 3.18 054/101] PCI: Enable ECRC only if device supports it
    Date
    From: Bjorn Helgaas <bhelgaas@google.com>

    [ Upstream commit 675734baa361cf044033bb60594dea33d8d8da36 ]

    John reported that an Intel QuickAssist crypto accelerator didn't work in a
    Dell PowerEdge R730. The problem seems to be that we enabled ECRC when the
    device doesn't support it:

    85:00.0 Co-processor [0b40]: Intel Corporation DH895XCC Series QAT [8086:0435]
    Capabilities: [100 v1] Advanced Error Reporting
    AERCap: First Error Pointer: 00, GenCap- CGenEn+ ChkCap- ChkEn+

    1302fcf0d03e ("PCI: Configure *all* devices, not just hot-added ones")
    exposed the problem because it applies settings from the _HPX method to all
    devices, not just hot-added ones. The R730 supplies an _HPX method that
    allows the kernel to enable ECRC.

    Only enable ECRC if the device advertises support for it.

    Link: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1571798
    Fixes: 1302fcf0d03e ("PCI: Configure *all* devices, not just hot-added ones")
    Reported-by: John Mazzie <john_mazzie@dell.com>
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
    ---
    drivers/pci/probe.c | 5 +++++
    1 file changed, 5 insertions(+)

    diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
    index c43300ced57d..b9e843a30692 100644
    --- a/drivers/pci/probe.c
    +++ b/drivers/pci/probe.c
    @@ -1400,6 +1400,11 @@ static void program_hpp_type2(struct pci_dev *dev, struct hpp_type2 *hpp)
    /* Initialize Advanced Error Capabilities and Control Register */
    pci_read_config_dword(dev, pos + PCI_ERR_CAP, &reg32);
    reg32 = (reg32 & hpp->adv_err_cap_and) | hpp->adv_err_cap_or;
    + /* Don't enable ECRC generation or checking if unsupported */
    + if (!(reg32 & PCI_ERR_CAP_ECRC_GENC))
    + reg32 &= ~PCI_ERR_CAP_ECRC_GENE;
    + if (!(reg32 & PCI_ERR_CAP_ECRC_CHKC))
    + reg32 &= ~PCI_ERR_CAP_ECRC_CHKE;
    pci_write_config_dword(dev, pos + PCI_ERR_CAP, reg32);

    /*
    --
    2.15.1
    \
     
     \ /
      Last update: 2018-04-09 02:52    [W:4.672 / U:0.220 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site