13 Oct, 2007

4 commits

  • Modify PCI Bridge Control ISA flag for clarity

    This patch changes PCI_BRIDGE_CTL_NO_ISA to PCI_BRIDGE_CTL_ISA
    and modifies it's clarifying comment and locations where used.
    The change reduces the chance of future confusion since it makes
    the set/unset meaning of the bit the same in both the bridge
    control register and bridge_ctl field of the pci_bus struct.

    Signed-off-by: Gary Hade
    Acked-by: Linas Vepstas
    Cc: Ivan Kokshaysky
    Signed-off-by: Greg Kroah-Hartman

    Gary Hade
     
  • Avoid creating P2P prefetch window for expansion ROMs

    Because of the future possibility that P2P prefetch windows will contain
    address ranges above 4GB some BIOSes are providing space in the P2P
    non-prefetch windows for expansion ROMs. This is due to expansion ROM
    BAR 32-bit limitation. When expansion ROM BARs without BIOS assigned
    address(es) are currently found behind a P2P bridge, the kernel attempts
    to create a P2P prefetch window for them even though space for them has
    already been provided in the non-prefetch window. _CRS on some systems
    with certain resource conservation conscious BIOSes may not provide the
    extra 1MB or more memory resource needed for the expansion ROM motivated
    prefetch window causing resource allocation errors.

    This change corrects the problem by removing IORESOURCE_PREFETCH from
    the expansion ROM flags initialization. It also removes
    IORESOURCE_CACHEABLE which seems inappropriate if only non-cacheable
    memory is available.

    Signed-off-by: Gary Hade
    Signed-off-by: Greg Kroah-Hartman

    Gary Hade
     
  • Skip ISA ioresource alignment on some systems

    To conserve limited PCI i/o resource on some IBM multi-node systems, the
    BIOS allocates (via _CRS) and expects the kernel to use addresses in
    ranges currently excluded by pcibios_align_resource() [i386/pci/i386.c].
    This change allows the kernel to use the currently excluded address
    ranges on the IBM x3800, x3850, and x3950.

    Signed-off-by: Gary Hade
    Signed-off-by: Greg Kroah-Hartman

    Gary Hade
     
  • I got the following error on MIPS Cobalt.

    PCI: Unable to reserve I/O region #1:8@f00001f0 for device 0000:00:09.1
    pata_via 0000:00:09.1: failed to request/iomap BARs for port 0 (errno=-16)
    PCI: Unable to reserve I/O region #3:8@f0000170 for device 0000:00:09.1
    pata_via 0000:00:09.1: failed to request/iomap BARs for port 1 (errno=-16)
    pata_via 0000:00:09.1: no available native port

    The legacy mode IDE resources set the following order.

    pci_setup_device()
    Legacy mode ATA controllers have fixed addresses.
    IDE resources: 0x1F0-0x1F7, 0x3F6, 0x170-0x177, 0x376
    |
    V
    pcibios_fixup_bus()
    MIPS Cobalt PCI bus regions have the -0x10000000 offset from PCI resources.
    pcibios_fixup_bus() fix PCI bus regions.
    0x1F0 - 0x10000000 = 0xF00001F0
    |
    V
    ata_pci_init_one()
    PCI: Unable to reserve I/O region #1:8@f00001f0 for device 0000:00:09.1

    In some architectures, PCI bus regions have the offset from PCI resources.
    For this reason, pci_setup_device() should set PCI bus regions to
    dev->resource[].

    [akpm@linux-foundation.org: use struct initialiser]
    Signed-off-by: Yoichi Yuasa
    Cc: Alan Cox
    Cc: Greg KH
    Cc: Bartlomiej Zolnierkiewicz
    Cc: Ralf Baechle
    Signed-off-by: Andrew Morton
    Signed-off-by: Greg Kroah-Hartman

    Yoichi Yuasa
     

11 Sep, 2007

1 commit

  • On MIPS with PCI && !HOTPLUG, I'm currently getting the following modpost
    warning:

    MODPOST vmlinux.o
    WARNING: vmlinux.o(.text+0x1ce128): Section mismatch: reference to .init.text:pci_read_bridge_bases (between 'pcibios_fixup_bus' and 'pcibios_enable_device')

    On MIPS I have the call chains pci_scan_child_bus -> pcibios_fixup_bus ->
    pci_read_bridge_bases. pci_scan_child_bus can't be __devinit because it
    it is an exported symbol, thus pcibios_fixup_bus and pci_read_bridge_bases
    can't be either.

    For some reason I don't see this issue on x86; I blame compiler differences.

    Signed-off-by: Ralf Baechle
    Signed-off-by: Greg Kroah-Hartman

    Ralf Baechle
     

23 Aug, 2007

1 commit

  • Adrian Bunk wrote:
    > Alois Nešpor wrote
    >> PCI: Bus #0b (-#0e) is hidden behind transparent bridge #0a (-#0b) (try 'pci=assign-busses')
    >> Please report the result to linux-kernel to fix this permanently"
    >>
    >> dmesg:
    >> "Yenta: Raising subordinate bus# of parent bus (#0a) from #0b to #0e"
    >> without pci=assign-busses and nothing with pci=assign-busses.
    >
    > Bernhard?

    Ok, lets kill the message. As Alois Nešpor also saw, that's fixed up by Yenta,
    so PCI does not have to warn about it. PCI could still warn about it if
    is_cardbus is 0 in that instance of pci_scan_bridge(), but so far I have
    not seen a report where this would have been the case so I think we can
    spare the kernel of that check (removes ~300 lines of asm) unless debugging
    is done.

    History: The whole check was added in the days before we had the fixup
    for this in Yenta and pci=assign-busses was the only way to get CardBus
    cards detected on many (not all) of the machines which give this warning.

    In theory, there could be cases when this warning would be triggered and
    it's not cardbus, then the warning should still apply, but I think this
    should only be the case when working on a completely broken PCI setup,
    but one may have already enabled the debug code in drivers/pci and the
    patched check would then trigger.

    I do not sign this off yet because it's completely untested so far, but
    everyone is free to test it (with the #ifdef DEBUG replaced by #if 1 and
    pr_debug( changed to printk(.

    We may also dump the whole check (remove everything within the #ifdef from
    the source) if that's perferred.

    On Alois Nešpor's machine this would then (only when debugging) this message:

    "PCI: Bus #0b (-#0e) is partially hidden behind transparent bridge #0a (-#0b)"

    "partially" should be in the message on his machine because #0b of #0b-#0e
    is reachable behind #0a-#0b, but not #0c-#0e.

    But that differentiation is now moot anyway because the fixup in Yenta takes
    care of it as far as I could see so far, which means that unless somebody
    is debugging a totally broken PCI setup, this message is not needed anymore,
    not even for debugging PCI.

    Ok, here the patch with the following changes:

    * Refined to say that the bus is only partially hidden when the parent
    bus numbers are not totally way off (outside of) the child bus range
    * remove the reference to pci=assign-busses and the plea to report it

    We could add a pure source code-only comment to keep a reference to
    pci=assign-busses the in case when this is triggered by someone who
    is debugging the cause of this message and looking the way to solve it.

    From: Bernhard Kaindl
    Cc: stable
    Signed-off-by: Greg Kroah-Hartman

    Bernhard Kaindl
     

17 Jul, 2007

1 commit

  • Before calling init_hwif_default, ide_unregister gets lock ide_lock and
    disables irq. init_hwif_default calls ide_default_io_base which calls
    pci_get_device and later pci_get_subsys tries to apply for semaphore
    pci_bus_sem and goes to sleep.

    Mostly, pci_get_device should be called when irq is turned on.

    ide_default_io_base just needs find if list pci_devices is empty.

    Signed-off-by: Zhang Yanmin
    Cc: Greg KH
    Cc: Bartlomiej Zolnierkiewicz
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Zhang, Yanmin
     

13 Jul, 2007

1 commit

  • * master.kernel.org:/pub/scm/linux/kernel/git/gregkh/pci-2.6: (34 commits)
    PCI: Only build PCI syscalls on architectures that want them
    PCI: limit pci_get_bus_and_slot to domain 0
    PCI: hotplug: acpiphp: avoid acpiphp "cannot get bridge info" PCI hotplug failure
    PCI: hotplug: acpiphp: remove hot plug parameter write to PCI host bridge
    PCI: hotplug: acpiphp: fix slot poweroff problem on systems without _PS3
    PCI: hotplug: pciehp: wait for 1 second after power off slot
    PCI: pci_set_power_state(): check for PM capabilities earlier
    PCI: cpci_hotplug: Convert to use the kthread API
    PCI: add pci_try_set_mwi
    PCI: pcie: remove SPIN_LOCK_UNLOCKED
    PCI: ROUND_UP macro cleanup in drivers/pci
    PCI: remove pci_dac_dma_... APIs
    PCI: pci-x-pci-express-read-control-interfaces cleanups
    PCI: Fix typo in include/linux/pci.h
    PCI: pci_ids, remove double or more empty lines
    PCI: pci_ids, add atheros and 3com_2 vendors
    PCI: pci_ids, reorder some entries
    PCI: i386: traps, change VENDOR to DEVICE
    PCI: ATM: lanai, change VENDOR to DEVICE
    PCI: Change all drivers to use pci_device->revision
    ...

    Linus Torvalds
     

12 Jul, 2007

3 commits

  • sysfs is now completely out of driver/module lifetime game. After
    deletion, a sysfs node doesn't access anything outside sysfs proper,
    so there's no reason to hold onto the attribute owners. Note that
    often the wrong modules were accounted for as owners leading to
    accessing removed modules.

    This patch kills now unnecessary attribute->owner. Note that with
    this change, userland holding a sysfs node does not prevent the
    backing module from being unloaded.

    For more info regarding lifetime rule cleanup, please read the
    following message.

    http://article.gmane.org/gmane.linux.kernel/510293

    (tweaked by Greg to not delete the field just yet, to make it easier to
    merge things properly.)

    Signed-off-by: Tejun Heo
    Cc: Cornelia Huck
    Cc: Andrew Morton
    Signed-off-by: Greg Kroah-Hartman

    Tejun Heo
     
  • Currently there are 97 occurrences where drivers need the pci
    revision ID. We can do this once for all devices. Even the pci
    subsystem needs the revision several times for quirks. The extra
    u8 member pads out nicely in the pci_dev struct.

    Signed-off-by: Auke Kok
    Signed-off-by: Greg Kroah-Hartman

    Auke Kok
     
  • Back in commit 8c4b2cf9af9b4ecc29d4f0ec4ecc8e94dc4432d7, Bernhard said
    that he would fix up all instances of when this message happens. So
    point people at him instead of the linux-kernel list which can not fix
    things up.

    Cc: Bernhard Kaindl
    Cc: Dave Jones
    Cc: Andrew Morton
    Cc: Miles Lane
    Signed-off-by: Greg Kroah-Hartman

    Greg Kroah-Hartman
     

03 May, 2007

4 commits

  • The msi descriptors are linked together with what looks a lot like
    a linked list, but isn't a struct list_head list. Make it one.

    The only complication is that previously we walked a list of irqs, and
    got the descriptor for each with get_irq_msi(). Now we have a list of
    descriptors and need to get the irq out of it, so it needs to be in the
    actual struct msi_desc. We use 0 to indicate no irq is setup.

    Signed-off-by: Michael Ellerman
    Signed-off-by: Greg Kroah-Hartman

    Michael Ellerman
     
  • Convert code that allocs a struct pci_dev to use alloc_pci_dev().

    Signed-off-by: Michael Ellerman
    Signed-off-by: Greg Kroah-Hartman

    Michael Ellerman
     
  • There are currently several places in the kernel where we kmalloc()
    a struct pci_dev and start initialising it. It'd be preferable to
    have an allocator so we can ensure the pci_dev is correctly initialised
    in one place.

    Signed-off-by: Michael Ellerman
    Signed-off-by: Greg Kroah-Hartman

    Michael Ellerman
     
  • Functions marked __devinit will be removed after kernel init. But being
    exported they are potentially called by a module much later.

    So the safer choice seems to be to keep the function even in the non
    CONFIG_HOTPLUG case.

    This silence the follwoing section mismatch warnings:
    WARNING: drivers/built-in.o - Section mismatch: reference to .init.text:pci_bus_add_device from __ksymtab_gpl between '__ksymtab_pci_bus_add_device' (at offset 0x20) and '__ksymtab_pci_walk_bus'
    WARNING: drivers/built-in.o - Section mismatch: reference to .init.text:pci_create_bus from __ksymtab_gpl between '__ksymtab_pci_create_bus' (at offset 0x40) and '__ksymtab_pci_stop_bus_device'
    WARNING: drivers/built-in.o - Section mismatch: reference to .init.text:pci_bus_max_busnr from __ksymtab_gpl between '__ksymtab_pci_bus_max_busnr' (at offset 0xc0) and '__ksymtab_pci_assign_resource_fixed'
    WARNING: drivers/built-in.o - Section mismatch: reference to .init.text:pci_claim_resource from __ksymtab_gpl between '__ksymtab_pci_claim_resource' (at offset 0xe0) and '__ksymtab_pcie_port_bus_type'
    WARNING: drivers/built-in.o - Section mismatch: reference to .init.text:pci_bus_add_devices from __ksymtab between '__ksymtab_pci_bus_add_devices' (at offset 0x70) and '__ksymtab_pci_bus_alloc_resource'
    WARNING: drivers/built-in.o - Section mismatch: reference to .init.text:pci_scan_bus_parented from __ksymtab between '__ksymtab_pci_scan_bus_parented' (at offset 0x90) and '__ksymtab_pci_root_buses'
    WARNING: drivers/built-in.o - Section mismatch: reference to .init.text:pci_bus_assign_resources from __ksymtab between '__ksymtab_pci_bus_assign_resources' (at offset 0x4d0) and '__ksymtab_pci_bus_size_bridges'
    WARNING: drivers/built-in.o - Section mismatch: reference to .init.text:pci_bus_size_bridges from __ksymtab between '__ksymtab_pci_bus_size_bridges' (at offset 0x4e0) and '__ksymtab_pci_setup_cardbus'

    Signed-off-by: Sam Ravnborg
    Signed-off-by: Andrew Morton
    Signed-off-by: Greg Kroah-Hartman

    Sam Ravnborg
     

24 Apr, 2007

1 commit

  • This reverts commit ed8ccee0918ad063a4741c0656fda783e02df627.

    It causes hang on boot for some users and we don't yet know why:

    http://bugzilla.kernel.org/show_bug.cgi?id=7562

    http://lkml.org/lkml/2007/4/20/404
    http://lkml.org/lkml/2007/3/25/113

    Just reverse it for 2.6.21-final, having broken X server is somehow
    better than unbootable system.

    Signed-off-by: Bartlomiej Zolnierkiewicz

    Bartlomiej Zolnierkiewicz
     

04 Mar, 2007

1 commit

  • The change to force legacy mode IDE channels' resources to fixed non-zero
    values confuses (at least some versions of) X, because the values reported
    by the kernel and those readable from PCI config space aren't consistent
    anymore. Therefore, this patch arranges for the respective BARs to also
    get updated if possible.

    Signed-off-by: Jan Beulich
    Acked-by: Alan Cox
    Signed-off-by: Andrew Morton
    Signed-off-by: Bartlomiej Zolnierkiewicz

    Jan Beulich
     

08 Feb, 2007

2 commits

  • pci_scan_msi_device() doesn't do anything anymore, so remove it.

    Signed-off-by: Michael Ellerman
    Signed-off-by: Greg Kroah-Hartman

    Michael Ellerman
     
  • For pci mem resource that size is bigger than 4G, the sz returned by
    pc_size will be 0.
    So that resource is skipped, and register contained hi address will be
    treated as another 32bit resource. We need to use sz64 and pci_sz64 for
    64 bit resource for clear logical. Typical usages for this: Opteron
    system with co-processor and the co-processor could take more than 4G
    RAM as pre-fetchable mem resource.

    Signed-off-by: Yinghai Lu
    Cc: Andi Kleen
    Cc: Andrew Morton
    Signed-off-by: Greg Kroah-Hartman

    Yinghai Lu
     

31 Dec, 2006

1 commit

  • Don't have macros between a function's kernel-doc block and the function
    definition. This is not valid for kernel-doc.

    Warning(/var/linsrc/linux-2.6.20-rc1-git8//drivers/pci/probe.c:653): No description found for parameter 'IORESOURCE_PCI_FIXED'

    Signed-off-by: Randy Dunlap
    Cc: Greg KH
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Randy Dunlap
     

21 Dec, 2006

1 commit

  • Since commit 368c73d4f689dae0807d0a2aa74c61fd2b9b075f the kernel will try
    to update the non-writeable BAR registers 0..3 of PIIX4 IDE adapters if
    pci_assign_unassigned_resources() is used to do full resource assignment of
    the bus. This fails because in the PIIX4 these BAR registers have
    implicitly assumed values and read back as zero; it used to work because
    the kernel used to just write zero to that register the read back value did
    match what was written.

    The fix is a new resource flag IORESOURCE_PCI_FIXED used to mark a resource
    as non-movable. This will also be useful to keep other import system
    resources from being moved around - for example system consoles on PCI
    busses.

    [akpm@osdl.org: cleanup]
    Signed-off-by: Ralf Baechle
    Acked-by: Alan Cox
    Signed-off-by: Andrew Morton
    Signed-off-by: Greg Kroah-Hartman

    Ralf Baechle
     

08 Dec, 2006

1 commit

  • For node-aware skb allocations we need information about the node in struct
    net_device or struct device. Davem suggested to put it into struct device
    which this patch does.

    In particular:

    - struct device gets a new int numa_node member if CONFIG_NUMA is set
    - there are two new helpers, dev_to_node and set_dev_node to
    transparently deal with the non-numa case
    - for pci devices the node-info is set to the value we get from
    pcibus_to_node.

    Note that for some architectures pcibus_to_node doesn't work yet at the time
    we call it currently. This is harmless and will just mean skb allocations
    aren't node-local on this architectures until the implementation of
    pcibus_to_node on these architectures have been updated (There are patches for
    x86 and x86_64 floating around)

    [akpm@osdl.org: cleanup]
    Signed-off-by: Christoph Hellwig
    Cc: Christoph Lameter
    Cc: Greg KH
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Christoph Hellwig
     

02 Dec, 2006

1 commit

  • The number of permutations of crap we do is amazing and almost all of it
    has the wrong effect in 2.6.

    At the heart of this is the PCI SFF magic which says that compatibility
    mode PCI IDE controllers use ISA IRQ routing and hard coded addresses
    not the BAR values. The old quirks variously clears them, sets them,
    adjusts them and then IDE ignores the result.

    In order to drive all this garbage out and to do it portably we need to
    handle the SFF rules directly and properly. Because we know the device
    BAR 0-3 are not used in compatibility mode we load them with the values
    that are implied (and indeed which many controllers actually
    thoughtfully put there in this mode anyway).

    This removes special cases in the IDE layer and libata which now knows
    that bar 0/1/2/3 always contain the correct address. It means our
    resource allocation map is accurate from boot, not "mostly accurate"
    after ide is loaded, and it shoots lots of code. There is also lots more
    code and magic constant knowledge to shoot once this is in and settled.

    Been in my test tree for a while both with drivers/ide and with libata.
    Wants some -mm shakedown in case I've missed something dumb or there are
    corner cases lurking.

    Signed-off-by: Alan Cox
    Signed-off-by: Greg Kroah-Hartman

    Alan Cox
     

19 Oct, 2006

1 commit

  • Problem:
    New Dell PowerEdge servers have 2 embedded ethernet ports, which are
    labeled NIC1 and NIC2 on the chassis, in the BIOS setup screens, and
    in the printed documentation. Assuming no other add-in ethernet ports
    in the system, Linux 2.4 kernels name these eth0 and eth1
    respectively. Many people have come to expect this naming. Linux 2.6
    kernels name these eth1 and eth0 respectively (backwards from
    expectations). I also have reports that various Sun and HP servers
    have similar behavior.

    Root cause:
    Linux 2.4 kernels walk the pci_devices list, which happens to be
    sorted in breadth-first order (or pcbios_find_device order on i386,
    which most often is breadth-first also). 2.6 kernels have both the
    pci_devices list and the pci_bus_type.klist_devices list, the latter
    is what is walked at driver load time to match the pci_id tables; this
    klist happens to be in depth-first order.

    On systems where, for physical routing reasons, NIC1 appears on a
    lower bus number than NIC2, but NIC2's bridge is discovered first in
    the depth-first ordering, NIC2 will be discovered before NIC1. If the
    list were sorted breadth-first, NIC1 would be discovered before NIC2.

    A PowerEdge 1955 system has the following topology which easily
    exhibits the difference between depth-first and breadth-first device
    lists.

    -[0000:00]-+-00.0 Intel Corporation 5000P Chipset Memory Controller Hub
    +-02.0-[0000:03-08]--+-00.0-[0000:04-07]--+-00.0-[0000:05-06]----00.0-[0000:06]----00.0 Broadcom Corporation NetXtreme II BCM5708S Gigabit Ethernet (labeled NIC2, 2.4 kernel name eth1, 2.6 kernel name eth0)
    +-1c.0-[0000:01-02]----00.0-[0000:02]----00.0 Broadcom Corporation NetXtreme II BCM5708S Gigabit Ethernet (labeled NIC1, 2.4 kernel name eth0, 2.6 kernel name eth1)

    Other factors, such as device driver load order and the presence of
    PCI slots at various points in the bus hierarchy further complicate
    this problem; I'm not trying to solve those here, just restore the
    device order, and thus basic behavior, that 2.4 kernels had.

    Solution:

    The solution can come in multiple steps.

    Suggested fix #1: kernel
    Patch below optionally sorts the two device lists into breadth-first
    ordering to maintain compatibility with 2.4 kernels. It adds two new
    command line options:
    pci=bfsort
    pci=nobfsort
    to force the sort order, or not, as you wish. It also adds DMI checks
    for the specific Dell systems which exhibit "backwards" ordering, to
    make them "right".

    Suggested fix #2: udev rules from userland
    Many people also have the expectation that embedded NICs are always
    discovered before add-in NICs (which this patch does not try to do).
    Using the PCI IRQ Routing Table provided by system BIOS, it's easy to
    determine which PCI devices are embedded, or if add-in, which PCI slot
    they're in. I'm working on a tool that would allow udev to name
    ethernet devices in ascending embedded, slot 1 .. slot N order,
    subsort by PCI bus/dev/fn breadth-first. It'll be possible to use it
    independent of udev as well for those distributions that don't use
    udev in their installers.

    Suggested fix #3: system board routing rules
    One can constrain the system board layout to put NIC1 ahead of NIC2
    regardless of breadth-first or depth-first discovery order. This adds
    a significant level of complexity to board routing, and may not be
    possible in all instances (witness the above systems from several
    major manufacturers). I don't want to encourage this particular train
    of thought too far, at the expense of not doing #1 or #2 above.

    Feedback appreciated. Patch tested on a Dell PowerEdge 1955 blade
    with 2.6.18.

    You'll also note I took some liberty and temporarily break the klist
    abstraction to simplify and speed up the sort algorithm. I think
    that's both safe and appropriate in this instance.

    Signed-off-by: Matt Domsch
    Signed-off-by: Greg Kroah-Hartman

    Matt Domsch
     

27 Sep, 2006

1 commit


11 Jul, 2006

1 commit

  • The pci channel state is currently uninitialized, thus there are two ways
    of indicating that "everything's OK": 0 and 1. This is a bit of a burden.

    If a devce driver wants to check if the pci channel is in a working or a
    disconnected state, the driver writer must perform checks similar to

    if((pdev->error_state != 0) &&
    (pdev->error_state != pci_channel_io_normal)) {
    whatever();
    }

    which is rather akward. The first check is needed because stuct pci_dev is
    inited to all-zeros. The scond is needed because the error recovery will
    set the state to pci_channel_io_normal (which is not zero).

    This patch fixes this awkwardness.

    Signed-off-by: Linas Vepstas
    Cc: Greg KH
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Linas Vepstas
     

22 Jun, 2006

3 commits

  • pci_walk_bus has a race with pci_destroy_dev. When cb is called
    in pci_walk_bus, pci_destroy_dev might unlink the dev pointed by next.
    Later on in the next loop, pointer next becomes NULL and cause
    kernel panic.

    Below patch against 2.6.17-rc4 fixes it by changing pci_bus_lock (spin_lock)
    to pci_bus_sem (rw_semaphore).

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

    Zhang Yanmin
     
  • When we detect a 64-bit pre-set address in a BAR on a 32-bit platform,
    we disable it and treat it as if it had been unset, thus allowing the
    general address assignment code to assign a new address to it when the
    device is enabled. This can happen either if the firmware assigns
    64-bit addresses; additionally, some cards have been found "in the
    wild" which do not come out of reset with all the BAR registers set to
    zero.

    Unfortunately, the patch that implemented this tested the low part of
    the address instead of the high part of the address. This patch fixes
    that.

    Signed-off-by: Bjorn Helgaas
    Signed-off-by: H. Peter Anvin
    Signed-off-by: Greg Kroah-Hartman

    Bjorn Helgaas
     
  • [pci] Ignore pre-set 64-bit BARs on 32-bit platforms

    Currently, Linux always rejects a device which has a pre-set 64-bit
    address on a 32-bit platform. On systems which do not do PCI
    initialization in firmware, this causes some devices which don't
    correctly power up with all BARs zero to fail.

    This patch makes the kernel automatically zero out such an address
    (thus treating it as if it had not been set at all, meaning it will
    assign an address if necessary).

    I have done this only for devices, not bridges. It seems potentially
    hazardous to do for bridges.

    Signed-off-by: H. Peter Anvin
    Signed-off-by: Greg Kroah-Hartman

    H. Peter Anvin
     

24 Mar, 2006

5 commits

  • this patch converts drivers/pci to kzalloc usage.
    Compile tested with allyes config.

    Signed-off-by: Eric Sesterhenn
    Signed-off-by: Greg Kroah-Hartman

    Eric Sesterhenn
     
  • "In some cases, especially on modern laptops with a lot of PCI and cardbus
    bridges, we're unable to assign correct secondary/subordinate bus numbers
    to all cardbus bridges due to BIOS limitations unless we are using
    "pci=assign-busses" boot option." -- Ivan Kokshaysky (from a patch comment)

    Without it, Cardbus cards inserted are never seen by PCI because the parent
    PCI-PCI Bridge of the Cardbus bridge will not pass and translate Type 1 PCI
    configuration cycles correctly and the system will fail to find and
    initialise the PCI devices in the system.

    Reference: PCI-PCI Bridges: PCI Configuration Cycles and PCI Bus Numbering:
    http://www.science.unitn.it/~fiorella/guidelinux/tlk/node72.html

    The reason for this is that:
    ``All PCI busses located behind a PCI-PCI bridge must reside between the
    secondary bus number and the subordinate bus number (inclusive).''

    "pci=assign-busses" makes pcibios_assign_all_busses return 1 and this
    turns on PCI renumbering during PCI probing.

    Alan suggested to use DMI automatically set assign-busses on problem systems.

    The only question for me was where to put it. I put it directly before
    scanning PCI bus into pcibios_scan_root() because it's called from legacy,
    acpi and numa and so it can be one place for all systems and configurations
    which may need it.

    AMD64 Laptops are also affected and fixed by assign-busses, and the code is
    also incuded from arch/x86_64/pci/ that place will also work for x86_64
    kernels, I only ifdef'-ed the x86-only Laptop in this example.

    Affected and known or assumed to be fixed with it are (found by googling):

    * ASUS Z71V and L3s
    * Samsung X20
    * Compaq R3140us and all Compaq R3000 series laptops with TI1620 Controller,
    also Compaq R4000 series (from a kernel.org bugreport)
    * HP zv5000z (AMD64 3700+, known that fixup_parent_subordinate_busnr fixes it)
    * HP zv5200z
    * IBM ThinkPad 240
    * An IBM ThinkPad (1.8 GHz Pentium M) debugged by Pavel Machek
    gives the correspondig message which detects the possible problem.
    * MSI S260 / Medion SIM 2100 MD 95600

    The patch also expands the "try pci=assign-busses" warning so testers will
    help us to update the DMI table.

    Cc: Ivan Kokshaysky
    Cc: Alan Cox
    Cc: Dominik Brodowski
    Cc: Russell King
    Signed-off-by: Andrew Morton
    Signed-off-by: Greg Kroah-Hartman

    Bernhard Kaindl
     
  • It turns out AMD 8131 quirk only affects MSI for devices behind the 8131 bridge.
    Handle this by adding a flags field in pci_bus, inherited from parent to child.

    Signed-off-by: Michael S. Tsirkin
    Signed-off-by: Greg Kroah-Hartman

    Michael S. Tsirkin
     
  • > On Mon, Feb 13, 2006 at 05:13:21PM -0800, David S. Miller wrote:
    > >
    > > In drivers/pci/probe.c:pci_scan_bridge(), if this is not the first
    > > pass (pass != 0) we don't restore the PCI_BRIDGE_CONTROL_REGISTER and
    > > thus leave PCI_BRIDGE_CTL_MASTER_ABORT off:
    > >
    > > int __devinit pci_scan_bridge(struct pci_bus *bus, struct pci_dev * dev, int max, int pass)
    > > {
    > > ...
    > > /* Disable MasterAbortMode during probing to avoid reporting
    > > of bus errors (in some architectures) */
    > > pci_read_config_word(dev, PCI_BRIDGE_CONTROL, &bctl);
    > > pci_write_config_word(dev, PCI_BRIDGE_CONTROL,
    > > bctl & ~PCI_BRIDGE_CTL_MASTER_ABORT);
    > > ...
    > > if ((buses & 0xffff00) && !pcibios_assign_all_busses() && !is_cardbus) {
    > > unsigned int cmax, busnr;
    > > /*
    > > * Bus already configured by firmware, process it in the first
    > > * pass and just note the configuration.
    > > */
    > > if (pass)
    > > return max;
    > > ...
    > > }
    > >
    > > pci_write_config_word(dev, PCI_BRIDGE_CONTROL, bctl);
    > > ...
    > >
    > > This doesn't seem intentional.

    Agreed, looks like an accident. The patch [1] originally came from Kip
    Walker (Broadcom back then) between 2.6.0-test3 and 2.6.0-test4. As I
    recall it was supposed to fix an issue with with PCI aborts being
    signalled by the PCI bridge of the Broadcom BCM1250 family of SOCs when
    probing behind pci_scan_bridge. It is undeseriable to disable
    PCI_BRIDGE_CTL_MASTER_ABORT in pci_{read,write)_config_* and the
    behaviour wasn't considered a bug in need of a workaround, so this was
    put in probe.c.

    I don't have an affected system at hand, so can't really test but I
    propose something like the below patch.

    [1] http://www.linux-mips.org/git?p=linux.git;a=commit;h=599457e0cb702a31a3247ea6a5d9c6c99c4cf195

    [PCI] Avoid leaving MASTER_ABORT disabled permanently when returning from pci_scan_bridge.

    Signed-off-by: Ralf Baechle
    Signed-off-by: Greg Kroah-Hartman

    Ralf Baechle
     
  • After you find the maximum value of the subordinate buses below the child
    bus, you must fix the parent's subordinate bus number again, otherwise
    it may be too small.

    Signed-off-by: Kristen Carlson Accardi
    Signed-off-by: Greg Kroah-Hartman

    Kristen Accardi
     

10 Jan, 2006

5 commits

  • The powerpc PCI code sets up the PCI tree without doing config space
    accesses in most cases, from the firmware tree. However, it still wants
    to call pci_cfg_space_size() under some conditions, thus it needs to
    be made non-static (though I don't see a point to export it to modules).

    Signed-off-by: Benjamin Herrenschmidt
    Signed-off-by: Greg Kroah-Hartman

    Benjamin Herrenschmidt
     
  • Add a warning if a child bus may be inaccessible because the
    parent bridge has wrong secondary or subordinate bus numbers.
    Note that this may or may not happen on "transparent" bridges,
    as can be seen in bug #5557.

    Also, if we do not fix up the assignment of bus numbers, try to
    make use of the bus number space available.

    Signed-off-by: Dominik Brodowski
    Signed-off-by: Greg Kroah-Hartman

    Dominik Brodowski
     
  • I've implemented a quirk to take advantage of the 1KB I/O space
    granularity option on the Intel P64H2 PCI Bridge. I had to change
    probe.c because it sets the resource start and end to be aligned on 4k
    boundaries (after the quirk sets them to 1k boundaries). I've tested
    this patch on a Unisys ES7000-600 both with and without the 1KB option
    enabled. I also tested this on a 2 processor Dell box that doesn't have
    a P64H2 to make sure there were no negative affects there.

    Signed-off-by: Dan Yeisley
    Signed-off-by: Greg Kroah-Hartman

    Daniel Yeisley
     
  • Call pci_read_irq() for bridges too, so that the pin value
    is stored for bridges that require interrupts.

    Signed-off-by: Kristen Carlson Accardi
    Signed-off-by: Greg Kroah-Hartman

    Kristen Accardi
     
  • Store the value of the INTERRUPT_PIN in the pci_dev structure
    so that it can be retrieved later.

    Signed-off-by: Kristen Carlson Accardi
    Signed-off-by: Greg Kroah-Hartman

    Kristen Accardi
     

29 Oct, 2005

1 commit