05 Dec, 2009

2 commits

  • Remove 'port_type' field in struct pcie_port_data(), because we can
    get port type information from struct pci_dev. With this change, this
    patch also does followings:

    - Remove struct pcie_port_data because it no longer has any field.
    - Remove portdrv private definitions about port type (PCIE_RC_PORT,
    PCIE_SW_UPSTREAM_PORT and PCIE_SW_DOWNSTREAM_PORT), and use generic
    definitions instead.

    Signed-off-by: Kenji Kaneshige
    Signed-off-by: Jesse Barnes

    Kenji Kaneshige
     
  • This patch cleans up the service irqs initialization as follows:

    - Remove 'irq_mode' field in pcie_port_data and related definitions,
    which is not needed because we can get the same information from
    'is_msix', 'is_msi' and 'pin' fields in struct pci_dev.

    - Change the name of 'vectors' argument of assign_interrupt_mode() to
    'irqs' because it holds irq numbers actually. People might confuse
    it with CPU vector or MSI/MSI-X vector.

    - Change function name assign_interrupt_mode() to init_service_irqs()
    becasuse we no longer have 'irq_mode' data structure, and new name
    is more straightforward (IMO).

    Signed-off-by: Kenji Kaneshige
    Signed-off-by: Jesse Barnes

    Kenji Kaneshige
     

21 Mar, 2009

1 commit


20 Mar, 2009

5 commits

  • If MSI-X interrupt mode is used by the PCI Express port driver, too
    many vectors are allocated and it is not ensured that the right
    vectors will be used for the right services. Namely, the PCI Express
    specification states that both PCI Express native PME and PCI Express
    hotplug will always use the same MSI or MSI-X message for signalling
    interrupts, which implies that the same vector will be used by both
    of them. Also, the VC service does not use interrupts at all.
    Moreover, is not clear which of the vectors allocated by
    pci_enable_msix() in the current code will be used for PME and
    hotplug and which of them will be used for AER if all of these
    services are configured.

    For these reasons, rework the allocation of interrupts for PCI
    Express ports so that if MSI-X are enabled, the right vectors will be
    used for the right purposes.

    Signed-off-by: Rafael J. Wysocki
    Reviewed-by: Hidetoshi Seto
    Signed-off-by: Jesse Barnes

    Rafael J. Wysocki
     
  • The PCI Express port driver uses 'struct pcie_port_service_id' for
    matching port service devices and drivers, but this structure
    contains fields that duplicate information from the port device
    itself (vendor, device, subvendor, subdevice) and fields that are not
    used by any existing port service driver (class, class_mask,
    drvier_data). Also, both existing port service drivers (AER and
    PCIe HP) don't even use the vendor and device fields for device
    matching. Therefore 'struct pcie_port_service_id' can be removed
    altogether and the only useful members of it (port_type, service) can
    be introduced directly into the port service device and port service
    driver structures. That simplifies the code quite a bit and reduces
    its size.

    Signed-off-by: Rafael J. Wysocki
    Signed-off-by: Jesse Barnes

    Rafael J. Wysocki
     
  • The second argument of the ->probe() callback in
    struct pcie_port_service_driver is unnecessary and never used.
    Remove it.

    Signed-off-by: Rafael J. Wysocki
    Signed-off-by: Jesse Barnes

    Rafael J. Wysocki
     
  • The PCI Express port driver should not attempt to register service
    devices that require the ability to generate interrupts if generating
    interrupts is not possible. Namely, if the port has no interrupt pin
    configured and we cannot set up MSI or MSI-X for it, there is no way
    it can generate interrupts and in such a case the port services that
    rely on interrupts (PME, PCIe HP, AER) should not be enabled for it.

    Signed-off-by: Rafael J. Wysocki
    Signed-off-by: Jesse Barnes

    Rafael J. Wysocki
     
  • PCI Express port driver extension, as defined by struct
    pcie_port_device_ext in portdrv.h, is allocated and initialized, but
    never used (it also is never freed). Extend it to hold the PCI Express
    port type as well as the port interrupt mode, change its name and use it
    to simplify the code in portdrv_core.c .

    Additionally, remove the redundant interrupt_mode member of struct
    pcie_device defined in include/linux/pcieport_if.h .

    Signed-off-by: Rafael J. Wysocki
    Signed-off-by: Jesse Barnes

    Rafael J. Wysocki
     

27 Sep, 2006

1 commit

  • Patch 3 implements the core part of PCI-Express AER and aerdrv
    port service driver.

    When a root port service device is probed, the aerdrv will call
    request_irq to register irq handler for AER error interrupt.

    When a device sends an PCI-Express error message to the root port,
    the root port will trigger an interrupt, by either MSI or IO-APIC,
    then kernel would run the irq handler. The handler collects root
    error status register and schedules a work. The work will call
    the core part to process the error based on its type
    (Correctable/non-fatal/fatal).

    As for Correctable errors, the patch chooses to just clear the correctable
    error status register of the device.

    As for the non-fatal error, the patch follows generic PCI error handler
    rules to call the error callback functions of the endpoint's driver. If
    the device is a bridge, the patch chooses to broadcast the error to
    downstream devices.

    As for the fatal error, the patch resets the pci-express link and
    follows generic PCI error handler rules to call the error callback
    functions of the endpoint's driver. If the device is a bridge, the patch
    chooses to broadcast the error to downstream devices.

    Signed-off-by: Zhang Yanmin
    Signed-off-by: Greg Kroah-Hartman

    Zhang, Yanmin
     

17 Apr, 2005

2 commits

  • This fixes drivers/pci (mostly pcie stuff).

    Signed-off-by: Pavel Machek
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Pavel Machek
     
  • Initial git repository build. I'm not bothering with the full history,
    even though we have it. We can create a separate "historical" git
    archive of that later if we want to, and in the meantime it's about
    3.2GB when imported into git - space that would just make the early
    git days unnecessarily complicated, when we don't have a lot of good
    infrastructure for it.

    Let it rip!

    Linus Torvalds