lkml.org 
[lkml]   [2012]   [Dec]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[ 77/89] ARM: Kirkwood: Update PCI-E fixup
    3.2-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Jason Gunthorpe <jgunthorpe@obsidianresearch.com>

    commit 1dc831bf53fddcc6443f74a39e72db5bcea4f15d upstream.

    - The code relies on rc_pci_fixup being called, which only happens
    when CONFIG_PCI_QUIRKS is enabled, so add that to Kconfig. Omitting
    this causes a booting failure with a non-obvious cause.
    - Update rc_pci_fixup to set the class properly, copying the
    more modern style from other places
    - Correct the rc_pci_fixup comment

    Signed-off-by: Jason Gunthorpe <jgunthorpe@obsidianresearch.com>
    Signed-off-by: Jason Cooper <jason@lakedaemon.net>
    [bwh: Backported to 3.2: adjust context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
    ---
    arch/arm/Kconfig | 1 +
    arch/arm/mach-kirkwood/pcie.c | 11 ++++++++---
    2 files changed, 9 insertions(+), 3 deletions(-)

    --- a/arch/arm/Kconfig
    +++ b/arch/arm/Kconfig
    @@ -542,6 +542,7 @@ config ARCH_KIRKWOOD
    bool "Marvell Kirkwood"
    select CPU_FEROCEON
    select PCI
    + select PCI_QUIRKS
    select ARCH_REQUIRE_GPIOLIB
    select GENERIC_CLOCKEVENTS
    select PLAT_ORION
    --- a/arch/arm/mach-kirkwood/pcie.c
    +++ b/arch/arm/mach-kirkwood/pcie.c
    @@ -213,14 +213,19 @@ static int __init kirkwood_pcie_setup(in
    return 1;
    }

    +/*
    + * The root complex has a hardwired class of PCI_CLASS_MEMORY_OTHER, when it
    + * is operating as a root complex this needs to be switched to
    + * PCI_CLASS_BRIDGE_HOST or Linux will errantly try to process the BAR's on
    + * the device. Decoding setup is handled by the orion code.
    + */
    static void __devinit rc_pci_fixup(struct pci_dev *dev)
    {
    - /*
    - * Prevent enumeration of root complex.
    - */
    if (dev->bus->parent == NULL && dev->devfn == 0) {
    int i;

    + dev->class &= 0xff;
    + dev->class |= PCI_CLASS_BRIDGE_HOST << 8;
    for (i = 0; i < DEVICE_COUNT_RESOURCE; i++) {
    dev->resource[i].start = 0;
    dev->resource[i].end = 0;



    \
     
     \ /
      Last update: 2012-12-03 19:01    [W:3.360 / U:0.380 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site