• Hou Zhiqiang's avatar
    PCI: dwc: Add link up check in dw_child_pcie_ops.map_bus() · 15b23906
    Hou Zhiqiang authored
    NXP Layerscape (ls1028a, ls2088a), dra7xxx and imx6 platforms are either
    programmed or statically configured to forward the error triggered by a
    link-down state (eg no connected endpoint device) on the system bus for
    PCI configuration transactions; these errors are reported as an SError
    at system level, which is fatal.
    
    Enumerating a PCI tree when the PCIe link is down is not sensible
    either, so even if the link-up check is racy (link can go down after
    map_bus() is called) add a link-up check in map_bus() to prevent issuing
    configuration transactions when the link is down.
    
    SError report:
    
     SError Interrupt on CPU2, code 0xbf000002 -- SError
     CPU: 2 PID: 1 Comm: swapper/0 Not tainted 5.9.0-rc5-next-20200914-00001-gf965d3ec86fa #67
     Hardware name: LS1046A RDB Board (DT)
     pstate: 20000085 (nzCv daIf -PAN -UAO BTYPE=--)
     pc : pci_generic_config_read+0x3c/0xe0
     lr : pci_generic_config_read+0x24/0xe0
     sp : ffff80001003b7b0
     x29: ffff80001003b7b0 x28: ffff80001003ba74
     x27: ffff000971d96800 x26: ffff00096e77e0a8
     x25: ffff80001003b874 x24: ffff80001003b924
     x23: 0000000000000004 x22: 0000000000000000
     x21: 0000000000000000 x20: ffff80001003b874
     x19: 0000000000000004 x18: ffffffffffffffff
     x17: 00000000000000c0 x16: fffffe0025981840
     x15: ffffb94c75b69948 x14: 62203a383634203a
     x13: 666e6f635f726568 x12: 202c31203d207265
     x11: 626d756e3e2d7375 x10: 656877202c307830
     x9 : 203d206e66766564 x8 : 0000000000000908
     x7 : 0000000000000908 x6 : ffff800010900000
     x5 : ffff00096e77e080 x4 : 0000000000000000
     x3 : 0000000000000003 x2 : 84fa3440ff7e7000
     x1 : 0000000000000000 x0 : ffff800010034000
     Kernel panic - not syncing: Asynchronous SError Interrupt
     CPU: 2 PID: 1 Comm: swapper/0 Not tainted 5.9.0-rc5-next-20200914-00001-gf965d3ec86fa #67
     Hardware name: LS1046A RDB Board (DT)
     Call trace:
      dump_backtrace+0x0/0x1c0
      show_stack+0x18/0x28
      dump_stack+0xd8/0x134
      panic+0x180/0x398
      add_taint+0x0/0xb0
      arm64_serror_panic+0x78/0x88
      do_serror+0x68/0x180
      el1_error+0x84/0x100
      pci_generic_config_read+0x3c/0xe0
      dw_pcie_rd_other_conf+0x78/0x110
      pci_bus_read_config_dword+0x88/0xe8
      pci_bus_generic_read_dev_vendor_id+0x30/0x1b0
      pci_bus_read_dev_vendor_id+0x4c/0x78
      pci_scan_single_device+0x80/0x100
    
    Link: https://lore.kernel.org/r/20200916054130.8685-1-Zhiqiang.Hou@nxp.comSigned-off-by: default avatarHou Zhiqiang <Zhiqiang.Hou@nxp.com>
    [lorenzo.pieralisi@arm.com: rewrote the commit log, remove Fixes tag]
    Signed-off-by: default avatarLorenzo Pieralisi <lorenzo.pieralisi@arm.com>
    15b23906
pcie-designware-host.c 15.6 KB