1. 08 Aug, 2003 1 commit
    • Ivan Kokshaysky's avatar
      [PATCH] PCI: pci_enable_device vs bridges bugs · a5a278a6
      Ivan Kokshaysky authored
      Bug #1 (found by Jay Estabrook).
      On Alpha, under certain circumstances the firmware may close the IO
      window of PCI-to-PCI bridge even if there is IO behind.
      This wouldn't be a problem - linux PCI setup code does set up this
      window properly, but in addition the firmware clears the IO-enable
      bit in the PCI_COMMAND register of the bridge.
      Since we don't call pci_enable_* routines for bridges in non-hotplug
      path, we end up with disabled IO. Fixed by adding pci_enable_bridges()
      to pci_assign_unassigned_resources().
      Architectures which don't use the latter, but do use other setup-bus
      code (parisc?) also should call pci_enable_bridges() for each root bus.
      
      Bug #2 (closely related to #1).
      As it turns out, pci_enable_device() doesn't work for bridges at all,
      only for regular devices (header type 0) due to 0x3f mask passed to
      pci_enable_device_bars(). The mask should be (1 << PCI_NUM_RESOURCES) - 1.
      
      Bug #3 (quite a few archs, including i386).
      pcibios_enable_device() does only check first 6 resources (regardless
      of the mask) to decide whether or not to enable IO and MEM.
      Bridge resources start at 7.
      
      #2 and #3 affect hotplug. I wonder, has anybody ever tried *bridged*
      PCI card behind a hot-plug controller?
      a5a278a6
  2. 06 Aug, 2003 3 commits
  3. 05 Aug, 2003 36 commits