16 Sep, 2015

1 commit

  • Revert dff22d2054b5 ("PCI: Call pci_read_bridge_bases() from core instead
    of arch code").

    Reading PCI bridge windows is not arch-specific in itself, but there is PCI
    core code that doesn't work correctly if we read them too early. For
    example, Hannes found this case on an ARM Freescale i.mx6 board:

    pci_bus 0000:00: root bus resource [mem 0x01000000-0x01efffff]
    pci 0000:00:00.0: PCI bridge to [bus 01-ff]
    pci 0000:00:00.0: BAR 8: no space for [mem size 0x01000000] (mem window)
    pci 0000:01:00.0: BAR 2: failed to assign [mem size 0x00200000]
    pci 0000:01:00.0: BAR 1: failed to assign [mem size 0x00004000]
    pci 0000:01:00.0: BAR 0: failed to assign [mem size 0x00000100]

    The 00:00.0 mem window needs to be at least 3MB: the 01:00.0 device needs
    0x204100 of space, and mem windows are megabyte-aligned.

    Bus sizing can increase a bridge window size, but never *decrease* it (see
    d65245c3297a ("PCI: don't shrink bridge resources")). Prior to
    dff22d2054b5, ARM didn't read bridge windows at all, so the "original size"
    was zero, and we assigned a 3MB window.

    After dff22d2054b5, we read the bridge windows before sizing the bus. The
    firmware programmed a 16MB window (size 0x01000000) in 00:00.0, and since
    we never decrease the size, we kept 16MB even though we only needed 3MB.
    But 16MB doesn't fit in the host bridge aperture, so we failed to assign
    space for the window and the downstream devices.

    I think this is a defect in the PCI core: we shouldn't rely on the firmware
    to assign sensible windows.

    Ray reported a similar problem, also on ARM, with Broadcom iProc.

    Issues like this are too hard to fix right now, so revert dff22d2054b5.

    Reported-by: Hannes
    Reported-by: Ray Jui
    Link: http://lkml.kernel.org/r/CAAa04yFQEUJm7Jj1qMT57-LG7ZGtnhNDBe=PpSRa70Mj+XhW-A@mail.gmail.com
    Link: http://lkml.kernel.org/r/55F75BB8.4070405@broadcom.com
    Signed-off-by: Bjorn Helgaas
    Acked-by: Yinghai Lu
    Acked-by: Lorenzo Pieralisi

    Bjorn Helgaas
     

23 Jul, 2015

1 commit

  • When we scan a PCI bus, we read PCI-PCI bridge window registers with
    pci_read_bridge_bases() so we can validate the resource hierarchy. Most
    architectures call pci_read_bridge_bases() from pcibios_fixup_bus(), but
    PCI-PCI bridges are not arch-specific, so this doesn't need to be in
    arch-specific code.

    Call pci_read_bridge_bases() directly from the PCI core instead of from
    arch code.

    For alpha and mips, we now call pci_read_bridge_bases() always; previously
    we only called it if PCI_PROBE_ONLY was set.

    [bhelgaas: changelog]
    Signed-off-by: Lorenzo Pieralisi
    Signed-off-by: Bjorn Helgaas
    CC: Ralf Baechle
    CC: James E.J. Bottomley
    CC: Michael Ellerman
    CC: Bjorn Helgaas
    CC: Richard Henderson
    CC: Benjamin Herrenschmidt
    CC: David Howells
    CC: Russell King
    CC: Tony Luck
    CC: David S. Miller
    CC: Ingo Molnar
    CC: Guenter Roeck
    CC: Michal Simek
    CC: Chris Zankel

    Lorenzo Pieralisi
     

19 Mar, 2015

1 commit

  • Previously, pci_scan_root_bus() created a root PCI bus, enumerated the
    devices on it, and called pci_bus_add_devices(), which made the devices
    available for drivers to claim them.

    Most callers assigned resources to devices after pci_scan_root_bus()
    returns, which may be after drivers have claimed the devices. This is
    incorrect; the PCI core should not change device resources while a driver
    is managing the device.

    Remove pci_bus_add_devices() from pci_scan_root_bus() and do it after any
    resource assignment in the callers.

    Note that ARM's pci_common_init_dev() already called pci_bus_add_devices()
    after pci_scan_root_bus(), so we only need to remove the first call:

    pci_common_init_dev
    pcibios_init_hw
    pci_scan_root_bus
    pci_bus_add_devices # first call
    pci_bus_assign_resources
    pci_bus_add_devices # second call

    [bhelgaas: changelog, drop "root_bus" var in alpha common_init_pci(),
    return failure earlier in mn10300, add "return" in x86 pcibios_scan_root(),
    return early if xtensa platform_pcibios_fixup() fails]
    Signed-off-by: Yijing Wang
    Signed-off-by: Bjorn Helgaas
    CC: Richard Henderson
    CC: Ivan Kokshaysky
    CC: Matt Turner
    CC: David Howells
    CC: Tony Luck
    CC: Michal Simek
    CC: Ralf Baechle
    CC: Koichi Yasutake
    CC: Sebastian Ott
    CC: "David S. Miller"
    CC: Chris Metcalf
    CC: Chris Zankel
    CC: Max Filippov
    CC: Thomas Gleixner

    Yijing Wang
     

17 Jan, 2015

1 commit

  • Every PCI-PCI bridge window should fit inside an upstream bridge window
    because orphaned address space is unreachable from the primary side of the
    upstream bridge. If we inherit invalid bridge windows that overlap an
    upstream window from firmware, clip them to fit and update the bridge
    accordingly.

    [bhelgaas: changelog]
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=85491
    Reported-by: Marek Kordik
    Fixes: 5b28541552ef ("PCI: Restrict 64-bit prefetchable bridge windows to 64-bit resources")
    Signed-off-by: Yinghai Lu
    Signed-off-by: Bjorn Helgaas
    CC: Michal Simek
    CC: Benjamin Herrenschmidt
    CC: Sebastian Ott

    Yinghai Lu
     

27 Oct, 2014

1 commit


06 Jun, 2014

1 commit

  • Pull Microblaze updates from Michal Simek:
    - cleanup PCI and DMA handling
    - use generic device.h
    - some cleanups

    * tag 'microblaze-3.16-rc1' of git://git.monstr.eu/linux-2.6-microblaze:
    microblaze: Fix typo in head.S s/substract/subtract/
    microblaze: remove check for CONFIG_XILINX_CONSOLE
    microblaze: Use generic device.h
    microblaze: Do not setup empty unmap_sg function
    microblaze: Remove device_to_mask
    microblaze: Clean device dma_ops structure
    microblaze: Cleanup PCI_DRAM_OFFSET handling
    microblaze: Do not setup pci_dma_ops
    microblaze: Return default dma operations
    microblaze: Enable SERIAL_OF_PLATFORM

    Linus Torvalds
     

04 Jun, 2014

2 commits


01 May, 2014

1 commit

  • Move the devspec OF attribute to PCI common code's set of device attributes
    since it's not architecture dependent. As a side effect microblaze and
    powerpc no longer need to use pcibios_add_platform_entries().

    [bhelgaas: fold in #include for compile error]
    Link: https://lkml.kernel.org/r/alpine.LFD.2.11.1404141101500.1529@denkbrett
    Signed-off-by: Sebastian Ott
    Signed-off-by: Bjorn Helgaas
    Acked-by: Benjamin Herrenschmidt

    Sebastian Ott
     

20 Mar, 2014

1 commit


08 Nov, 2013

1 commit


24 Oct, 2013

4 commits

  • The Microblaze PCI code copied the PowerPC irq handling, but powerpc
    needs to handle broken device trees that are not present on Microblaze.
    This patch removes the powerpc special case and replaces it with a
    direct of_irq_parse_and_map_pci() call.

    Signed-off-by: Grant Likely
    Acked-by: Michal Simek

    Grant Likely
     
  • All the callers of irq_create_of_mapping() pass the contents of a struct
    of_phandle_args structure to the function. Since all the callers already
    have an of_phandle_args pointer, why not pass it directly to
    irq_create_of_mapping()?

    Signed-off-by: Grant Likely
    Acked-by: Michal Simek
    Acked-by: Tony Lindgren
    Cc: Thomas Gleixner
    Cc: Russell King
    Cc: Ralf Baechle
    Cc: Benjamin Herrenschmidt

    Grant Likely
     
  • struct of_irq and struct of_phandle_args are exactly the same structure.
    This patch makes the kernel use of_phandle_args everywhere. This in
    itself isn't a big deal, but it makes some follow-on patches simpler.

    Signed-off-by: Grant Likely
    Acked-by: Michal Simek
    Acked-by: Tony Lindgren
    Cc: Russell King
    Cc: Ralf Baechle
    Cc: Benjamin Herrenschmidt

    Grant Likely
     
  • The OF irq handling code has been overloading the term 'map' to refer to
    both parsing the data in the device tree and mapping it to the internal
    linux irq system. This is probably because the device tree does have the
    concept of an 'interrupt-map' function for translating interrupt
    references from one node to another, but 'map' is still confusing when
    the primary purpose of some of the functions are to parse the DT data.

    This patch renames all the of_irq_map_* functions to of_irq_parse_*
    which makes it clear that there is a difference between the parsing
    phase and the mapping phase. Kernel code can make use of just the
    parsing or just the mapping support as needed by the subsystem.

    The patch was generated mechanically with a handful of sed commands.

    Signed-off-by: Grant Likely
    Acked-by: Michal Simek
    Acked-by: Tony Lindgren
    Cc: Ralf Baechle
    Cc: Benjamin Herrenschmidt

    Grant Likely
     

10 Oct, 2013

1 commit

  • While powerpc is a mess of implicit includes by prom.h, microblaze just
    copied this and is easily fixed. Add the necessary explicit includes and
    remove unnecessary includes and other parts from prom.h

    Signed-off-by: Rob Herring
    Acked-by: Grant Likely
    Cc: Michal Simek
    Cc: microblaze-uclinux@itee.uq.edu.au
    Cc: netdev@vger.kernel.org

    Rob Herring
     

03 Sep, 2013

1 commit


09 May, 2013

1 commit


12 Feb, 2013

2 commits


07 Jan, 2013

1 commit

  • Pull microblaze update from Michal Simek:
    "This fixes noMMU kernel and I have also added defconfig updates which
    fix issue with one external dependency and enable all xilinx device
    drivers for 0-day testing system.

    Additionally wire up finit_module system call, and do highmem fixup
    and pci warnings reported by the 0-day testing system"

    * 'next' of git://git.monstr.eu/linux-2.6-microblaze:
    microblaze: Update microblaze defconfigs
    microblaze: Fix pci compilation and sparse warnings
    microblaze: Add finit_module syscall
    microblaze: Kill __kmap_atomic()
    microblaze: Change section flags for noMMU
    microblaze: Microblaze wants sys_fork for noMMU too

    Linus Torvalds
     

04 Jan, 2013

2 commits

  • Warning log:
    CHECK arch/microblaze/pci/pci-common.c
    arch/microblaze/pci/pci-common.c:290:14: warning: Using plain integer as NULL pointer
    arch/microblaze/pci/pci-common.c:1127:6: warning: symbol
    'pcibios_allocate_bus_resources' was not declared. Should it be static?
    arch/microblaze/pci/pci-common.c:1436:61: warning: incorrect type in argument 3 (different base types)
    arch/microblaze/pci/pci-common.c:1436:61: expected unsigned int [unsigned] [usertype] offset
    arch/microblaze/pci/pci-common.c:1436:61: got void [noderef] *
    CC arch/microblaze/pci/pci-common.o
    arch/microblaze/pci/pci-common.c: In function 'pci_proc_domain':
    arch/microblaze/pci/pci-common.c:825:25: warning: unused variable 'hose' [-Wunused-variable]
    arch/microblaze/pci/pci-common.c: In function 'pcibios_allocate_bus_resources':
    arch/microblaze/pci/pci-common.c:1182:1: warning: label 'clear_resource' defined but not used [-Wunused-label]
    arch/microblaze/pci/pci-common.c: In function 'pcibios_setup_phb_resources':
    arch/microblaze/pci/pci-common.c:1436:2: warning: passing argument 3 of
    'pci_add_resource_offset' makes integer from pointer without a cast [enabled by default]
    include/linux/pci.h:999:6: note: expected 'resource_size_t' but argument is of type 'void *'

    Signed-off-by: Michal Simek

    Michal Simek
     
  • This fixes up all of the smaller arches that had __dev* markings for
    their platform-specific drivers.

    CONFIG_HOTPLUG is going away as an option. As a result, the __dev*
    markings need to be removed.

    This change removes the use of __devinit, __devexit_p, __devinitdata,
    __devinitconst, and __devexit from these drivers.

    Based on patches originally written by Bill Pemberton, but redone by me
    in order to handle some of the coding style issues better, by hand.

    Cc: Bill Pemberton
    Cc: Peter Zijlstra
    Cc: Paul Mackerras
    Cc: Ingo Molnar
    Cc: Arnaldo Carvalho de Melo
    Cc: Catalin Marinas
    Cc: Will Deacon
    Cc: Haavard Skinnemoen
    Cc: Hans-Christian Egtvedt
    Cc: Mike Frysinger
    Cc: Mikael Starvik
    Cc: Jesper Nilsson
    Cc: David Howells
    Cc: Hirokazu Takata
    Cc: Geert Uytterhoeven
    Cc: Michal Simek
    Cc: Koichi Yasutake
    Cc: Jonas Bonn
    Cc: "James E.J. Bottomley"
    Cc: Helge Deller
    Cc: Martin Schwidefsky
    Cc: Heiko Carstens
    Cc: Chen Liqin
    Cc: Lennox Wu
    Cc: Paul Mundt
    Cc: Chris Metcalf
    Cc: Guan Xuetao
    Cc: Bob Liu
    Cc: Srinivas Kandagatla
    Cc: Bjorn Helgaas
    Cc: Myron Stowe
    Cc: Thomas Gleixner
    Cc: Andrew Morton
    Cc: Andi Kleen
    Cc: Jesse Barnes
    Cc: Sebastian Andrzej Siewior
    Cc: Yinghai Lu
    Cc: Thierry Reding
    Cc: Greg Ungerer
    Cc: Grant Likely
    Cc: "Srivatsa S. Bhat"
    Cc: Mark Salter
    Cc: Yong Zhang
    Cc: Michael Holzheu
    Cc: Cornelia Huck
    Cc: Jan Glauber
    Cc: Wei Yongjun
    Cc: Nobuhiro Iwamatsu
    Signed-off-by: Greg Kroah-Hartman

    Greg Kroah-Hartman
     

29 Nov, 2012

1 commit


25 Jul, 2012

1 commit

  • Pull PCI changes from Bjorn Helgaas:
    "Host bridge hotplug:
    - Add MMCONFIG support for hot-added host bridges (Jiang Liu)
    Device hotplug:
    - Move fixups from __init to __devinit (Sebastian Andrzej Siewior)
    - Call FINAL fixups for hot-added devices, too (Myron Stowe)
    - Factor out generic code for P2P bridge hot-add (Yinghai Lu)
    - Remove all functions in a slot, not just those with _EJx (Amos
    Kong)
    Dynamic resource management:
    - Track bus number allocation (struct resource tree per domain)
    (Yinghai Lu)
    - Make P2P bridge 1K I/O windows work with resource reassignment
    (Bjorn Helgaas, Yinghai Lu)
    - Disable decoding while updating 64-bit BARs (Bjorn Helgaas)
    Power management:
    - Add PCIe runtime D3cold support (Huang Ying)
    Virtualization:
    - Add VFIO infrastructure (ACS, DMA source ID quirks) (Alex
    Williamson)
    - Add quirks for devices with broken INTx masking (Jan Kiszka)
    Miscellaneous:
    - Fix some PCI Express capability version issues (Myron Stowe)
    - Factor out some arch code with a weak, generic, pcibios_setup()
    (Myron Stowe)"

    * tag 'for-3.6' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci: (122 commits)
    PCI: hotplug: ensure a consistent return value in error case
    PCI: fix undefined reference to 'pci_fixup_final_inited'
    PCI: build resource code for M68K architecture
    PCI: pciehp: remove unused pciehp_get_max_lnk_width(), pciehp_get_cur_lnk_width()
    PCI: reorder __pci_assign_resource() (no change)
    PCI: fix truncation of resource size to 32 bits
    PCI: acpiphp: merge acpiphp_debug and debug
    PCI: acpiphp: remove unused res_lock
    sparc/PCI: replace pci_cfg_fake_ranges() with pci_read_bridge_bases()
    PCI: call final fixups hot-added devices
    PCI: move final fixups from __init to __devinit
    x86/PCI: move final fixups from __init to __devinit
    MIPS/PCI: move final fixups from __init to __devinit
    PCI: support sizing P2P bridge I/O windows with 1K granularity
    PCI: reimplement P2P bridge 1K I/O windows (Intel P64H2)
    PCI: disable MEM decoding while updating 64-bit MEM BARs
    PCI: leave MEM and IO decoding disabled during 64-bit BAR sizing, too
    PCI: never discard enable/suspend/resume_early/resume fixups
    PCI: release temporary reference in __nv_msi_ht_cap_quirk()
    PCI: restructure 'pci_do_fixups()'
    ...

    Linus Torvalds
     

06 Jul, 2012

3 commits

  • The pattern (np ? np->full_name : "") is rather common in the
    kernel, but can also make for quite long lines. This patch adds a new
    inline function, of_node_full_name() so that the test for a valid node
    pointer doesn't need to be open coded at all call sites.

    Signed-off-by: Grant Likely
    Cc: Paul Mundt
    Cc: Benjamin Herrenschmidt
    Cc: Thomas Gleixner
    Signed-off-by: Rob Herring

    Grant Likely
     
  • * pci/myron-pcibios_setup:
    xtensa/PCI: factor out pcibios_setup()
    x86/PCI: adjust section annotations for pcibios_setup()
    unicore32/PCI: adjust section annotations for pcibios_setup()
    tile/PCI: factor out pcibios_setup()
    sparc/PCI: factor out pcibios_setup()
    sh/PCI: adjust section annotations for pcibios_setup()
    sh/PCI: factor out pcibios_setup()
    powerpc/PCI: factor out pcibios_setup()
    parisc/PCI: factor out pcibios_setup()
    MIPS/PCI: adjust section annotations for pcibios_setup()
    MIPS/PCI: factor out pcibios_setup()
    microblaze/PCI: factor out pcibios_setup()
    ia64/PCI: factor out pcibios_setup()
    cris/PCI: factor out pcibios_setup()
    alpha/PCI: factor out pcibios_setup()
    PCI: pull pcibios_setup() up into core

    Bjorn Helgaas
     
  • The PCI core provides a generic pcibios_setup() routine. Drop this
    architecture-specific version in favor of that.

    Acked-by: Michal Simek
    Signed-off-by: Myron Stowe
    Signed-off-by: Bjorn Helgaas

    Myron Stowe
     

14 Jun, 2012

1 commit


16 May, 2012

1 commit


24 Feb, 2012

2 commits


12 Jan, 2012

1 commit

  • * 'linux-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jbarnes/pci: (80 commits)
    x86/PCI: Expand the x86_msi_ops to have a restore MSIs.
    PCI: Increase resource array mask bit size in pcim_iomap_regions()
    PCI: DEVICE_COUNT_RESOURCE should be equal to PCI_NUM_RESOURCES
    PCI: pci_ids: add device ids for STA2X11 device (aka ConneXT)
    PNP: work around Dell 1536/1546 BIOS MMCONFIG bug that breaks USB
    x86/PCI: amd: factor out MMCONFIG discovery
    PCI: Enable ATS at the device state restore
    PCI: msi: fix imbalanced refcount of msi irq sysfs objects
    PCI: kconfig: English typo in pci/pcie/Kconfig
    PCI/PM/Runtime: make PCI traces quieter
    PCI: remove pci_create_bus()
    xtensa/PCI: convert to pci_scan_root_bus() for correct root bus resources
    x86/PCI: convert to pci_create_root_bus() and pci_scan_root_bus()
    x86/PCI: use pci_scan_bus() instead of pci_scan_bus_parented()
    x86/PCI: read Broadcom CNB20LE host bridge info before PCI scan
    sparc32, leon/PCI: convert to pci_scan_root_bus() for correct root bus resources
    sparc/PCI: convert to pci_create_root_bus()
    sh/PCI: convert to pci_scan_root_bus() for correct root bus resources
    powerpc/PCI: convert to pci_create_root_bus()
    powerpc/PCI: split PHB part out of pcibios_map_io_space()
    ...

    Fix up conflicts in drivers/pci/msi.c and include/linux/pci_regs.h due
    to the same patches being applied in other branches.

    Linus Torvalds
     

11 Jan, 2012

1 commit

  • lib: use generic pci_iomap on all architectures

    Many architectures don't want to pull in iomap.c,
    so they ended up duplicating pci_iomap from that file.
    That function isn't trivial, and we are going to modify it
    https://lkml.org/lkml/2011/11/14/183
    so the duplication hurts.

    This reduces the scope of the problem significantly,
    by moving pci_iomap to a separate file and
    referencing that from all architectures.

    * tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mst/vhost:
    alpha: drop pci_iomap/pci_iounmap from pci-noop.c
    mn10300: switch to GENERIC_PCI_IOMAP
    mn10300: add missing __iomap markers
    frv: switch to GENERIC_PCI_IOMAP
    tile: switch to GENERIC_PCI_IOMAP
    tile: don't panic on iomap
    sparc: switch to GENERIC_PCI_IOMAP
    sh: switch to GENERIC_PCI_IOMAP
    powerpc: switch to GENERIC_PCI_IOMAP
    parisc: switch to GENERIC_PCI_IOMAP
    mips: switch to GENERIC_PCI_IOMAP
    microblaze: switch to GENERIC_PCI_IOMAP
    arm: switch to GENERIC_PCI_IOMAP
    alpha: switch to GENERIC_PCI_IOMAP
    lib: add GENERIC_PCI_IOMAP
    lib: move GENERIC_IOMAP to lib/Kconfig

    Fix up trivial conflicts due to changes nearby in arch/{m68k,score}/Kconfig

    Linus Torvalds
     

07 Jan, 2012

5 commits

  • Microblaze doesn't need to replace pci_scan_child_bus() or do anything
    special before pci_bus_add_devices(), so we can use the more generic PCI
    path in pci_scan_root_bus().

    CC: Michal Simek
    Signed-off-by: Bjorn Helgaas
    Signed-off-by: Jesse Barnes

    Bjorn Helgaas
     
  • Convert from pci_create_bus() to pci_create_root_bus(). This way the root
    bus resources are correct immediately. This patch doesn't fix a problem
    because microblaze fixed the resources before scanning the bus, but it makes
    microblaze more consistent with other architectures. It also allows us to
    use the pci_scan_root_bus() path safely.

    CC: Michal Simek
    Signed-off-by: Bjorn Helgaas
    Signed-off-by: Jesse Barnes

    Bjorn Helgaas
     
  • CC: Michal Simek
    Signed-off-by: Bjorn Helgaas
    Signed-off-by: Jesse Barnes

    Bjorn Helgaas
     
  • The pci_bus_for_each_resource() iterator sets "res" itself, so there's
    no need to look it up in the bus->resource[] table.

    Logically part of 89a74ecccd and 8a66da71fa.

    CC: Michal Simek
    Signed-off-by: Bjorn Helgaas
    Signed-off-by: Jesse Barnes

    Bjorn Helgaas
     
  • This patch converts MicroBlaze's architecture-specific
    'pcibios_set_master()' routine to a non-inlined function. This will
    allow follow on patches to create a generic 'pcibios_set_master()'
    function using the '__weak' attribute which can be used by all
    architectures as a default which, if necessary, can then be over-
    ridden by architecture-specific code.

    Converting 'pci_bios_set_master()' to a non-inlined function will
    allow MicroBlaze's 'pcibios_set_master()' implementation to remain
    architecture-specific after the generic version is introduced and thus,
    not change current behavior.

    No functional change.

    Signed-off-by: Myron Stowe
    Signed-off-by: Jesse Barnes

    Myron Stowe
     

05 Jan, 2012

1 commit

  • NO_IRQ shouldn't be used by any driver. All Microblaze
    drivers are fixed that's why NO_IRQ can be removed.

    Also fix pci-common.c which has references to NO_IRQ removed.

    Signed-off-by: Michal Simek
    Reviewed-by: Ryan Mallon
    Acked-by: Grant Likely
    CC: Benjamin Herrenschmidt

    Michal Simek