Skip to content
  • Bjorn Helgaas's avatar
    PCI: pciehp: Remove assumptions about which commands cause completion events · 2cc56f30
    Bjorn Helgaas authored
    We use incorrect logic to decide whether a PCIe hotplug controller
    generates command completion events.
    
    5808639b ("pciehp: fix slow probing") assumed that the Slot Status
    "Command Completed" bit was set only for commands affecting slot power,
    indicators, or electromechanical interlock.  That assumption is false: per
    sec. 6.7.3.2 of PCIe spec r3.0, a write targeting any portion of the Slot
    Control register is a command, and (if command completed events are
    supported) software must wait for a command to complete before issuing the
    next command.
    
    5808639b was to fix boot-time timeouts (see bugzilla below) on a Lenovo
    Thinkpad R61 with an Intel hotplug controller.  The controller probably has
    the Intel CF118 erratum, which means it doesn't report Command Completed
    unless the Slot Control power, indicator, or interlock bits are changed.
    This causes a timeout because pciehp always waits for Command Complete (if
    supported), regardless of which bits are changed.
    
    Remove the incorrect logic because the timeouts have been addressed
    differently by these changes:
    
      PCI: pciehp: Wait for hotplug command completion lazily
      PCI: pciehp: Compute timeout from hotplug command start time
    
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=10751
    
    
    Tested-by: Rajat Jain <rajatxjain@gmail.com>	(IDT 807a controller)
    Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
    Acked-by: default avatarYinghai Lu <yinghai@kernel.org>
    2cc56f30