20 Dec, 2014

1 commit

  • Pull x86 apic updates from Thomas Gleixner:
    "After stopping the full x86/apic branch, I took some time to go
    through the first block of patches again, which are mostly cleanups
    and preparatory work for the irqdomain conversion and ioapic hotplug
    support.

    Unfortunaly one of the real problematic commits was right at the
    beginning, so I rebased this portion of the pending patches without
    the offenders.

    It would be great to get this into 3.19. That makes reworking the
    problematic parts simpler. The usual tip testing did not unearth any
    issues and it is fully bisectible now.

    I'm pretty confident that this wont affect the calmness of the xmas
    season.

    Changes:
    - Split the convoluted io_apic.c code into domain specific parts
    (vector, ioapic, msi, htirq)
    - Introduce proper helper functions to retrieve irq specific data
    instead of open coded dereferencing of pointers
    - Preparatory work for ioapic hotplug and irqdomain conversion
    - Removal of the non functional pci-ioapic driver
    - Removal of unused irq entry stubs
    - Make native_smp_prepare_cpus() preemtible to avoid GFP_ATOMIC
    allocations for everything which is called from there.
    - Small cleanups and fixes"

    * 'x86-apic-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (36 commits)
    iommu/amd: Use helpers to access irq_cfg data structure associated with IRQ
    iommu/vt-d: Use helpers to access irq_cfg data structure associated with IRQ
    x86: irq_remapping: Use helpers to access irq_cfg data structure associated with IRQ
    x86, irq: Use helpers to access irq_cfg data structure associated with IRQ
    x86, irq: Make MSI and HT_IRQ indepenent of X86_IO_APIC
    x86, irq: Move IRQ initialization routines from io_apic.c into vector.c
    x86, irq: Move IOAPIC related declarations from hw_irq.h into io_apic.h
    x86, irq: Move HT IRQ related code from io_apic.c into htirq.c
    x86, irq: Move PCI MSI related code from io_apic.c into msi.c
    x86, irq: Replace printk(KERN_LVL) with pr_lvl() utilities
    x86, irq: Make UP version of irq_complete_move() an inline stub
    x86, irq: Move local APIC related code from io_apic.c into vector.c
    x86, irq: Introduce helpers to access struct irq_cfg
    x86, irq: Protect __clear_irq_vector() with vector_lock
    x86, irq: Rename local APIC related functions in io_apic.c as apic_xxx()
    x86, irq: Refine hw_irq.h to prepare for irqdomain support
    x86, irq: Convert irq_2_pin list to generic list
    x86, irq: Kill useless parameter 'irq_attr' of IO_APIC_get_PCI_irq_vector()
    x86, irq, acpi: Get rid of special handling of GSI for ACPI SCI
    x86, irq: Introduce helper to check whether an IOAPIC has been registered
    ...

    Linus Torvalds
     

16 Dec, 2014

4 commits

  • Now we have splitted functions to support MSI and HT_IRQ into vector.c,
    and they have no dependency on IOAPIC any more. So change Kconfig files
    to make MSI and HT_IRQ independent of X86_IO_APIC.

    Signed-off-by: Jiang Liu
    Cc: Konrad Rzeszutek Wilk
    Cc: Tony Luck
    Cc: Joerg Roedel
    Cc: Greg Kroah-Hartman
    Cc: Benjamin Herrenschmidt
    Cc: Rafael J. Wysocki
    Cc: Bjorn Helgaas
    Cc: Randy Dunlap
    Cc: Yinghai Lu
    Cc: Borislav Petkov
    Link: http://lkml.kernel.org/r/1414397531-28254-16-git-send-email-jiang.liu@linux.intel.com
    Signed-off-by: Thomas Gleixner

    Jiang Liu
     
  • Clean up code by moving IOAPIC related declarations from hw_irq.h into
    io_apic.h.

    Signed-off-by: Jiang Liu
    Cc: Konrad Rzeszutek Wilk
    Cc: Tony Luck
    Cc: Joerg Roedel
    Cc: Greg Kroah-Hartman
    Cc: H. Peter Anvin
    Cc: Benjamin Herrenschmidt
    Cc: Rafael J. Wysocki
    Cc: Bjorn Helgaas
    Cc: Randy Dunlap
    Cc: Yinghai Lu
    Cc: Borislav Petkov
    Cc: Prarit Bhargava
    Cc: Grant Likely
    Cc: Vivek Goyal
    Cc: Baoquan He
    Cc: Matt Fleming
    Cc: Fenghua Yu
    Cc: Christian Gmeiner
    Cc: Aubrey
    Cc: Ryan Desfosses
    Cc: Quentin Lambert
    Cc: Rafael J. Wysocki
    Link: http://lkml.kernel.org/r/1414397531-28254-14-git-send-email-jiang.liu@linux.intel.com
    Signed-off-by: Thomas Gleixner

    Jiang Liu
     
  • None of the callers requires irq_attr to be filled
    in. IO_APIC_get_PCI_irq_vector() does not do anything useful with it
    either.

    Remove the parameter and fixup the call sites.

    [ tglx: Massaged changelog ]

    Signed-off-by: Jiang Liu
    Cc: Konrad Rzeszutek Wilk
    Cc: Tony Luck
    Cc: Joerg Roedel
    Cc: Greg Kroah-Hartman
    Cc: Benjamin Herrenschmidt
    Cc: Rafael J. Wysocki
    Cc: Bjorn Helgaas
    Cc: Randy Dunlap
    Cc: Yinghai Lu
    Cc: Borislav Petkov
    Cc: Prarit Bhargava
    Cc: Grant Likely
    Cc: Ryan Desfosses
    Cc: Quentin Lambert
    Cc: Rafael J. Wysocki
    Link: http://lkml.kernel.org/r/1414397531-28254-4-git-send-email-jiang.liu@linux.intel.com
    Signed-off-by: Thomas Gleixner

    Jiang Liu
     
  • To support IOAPIC hotplug on x86 and IA64 platforms, OS needs to figure
    out global interrupt source number(GSI) and IOAPIC enumeration ID
    through ACPI interfaces. So BIOS must implement an ACPI IOAPIC device
    with _GSB/_UID or _MAT method to support IOAPIC hotplug. OS also needs
    to figure out base physical address to access IOAPIC registers. OS may
    get the base physical address through PCI BARs if IOAPIC device is
    visible in PCI domain, otherwise OS may get the address by ACPI _CRS
    method if IOAPIC device is hidden from PCI domain by BIOS.

    When adding a PCI subtree, we need to add IOAPIC devices before enabling
    all other PCI devices because other PCI devices may use the IOAPIC to
    allocate PCI interrupts.

    So we plan to reimplement IOAPIC driver as an ACPI instead of PCI driver
    due to:
    1) hot-pluggable IOAPIC devices are always visible in ACPI domain,
    but may or may not be visible in PCI domain.
    2) we could explicitly control the order between IOAPIC and other PCI
    devices.

    We also have another choice to use a PCI driver to manage IOAPIC device
    if it's visible in PCI domain and use an ACPI driver if it's only
    visible in ACPI domain. But this solution is a little complex.

    It shouldn't cause serious backward compatibility issues because:
    1) IOAPIC hotplug is never supported on x86 yet because it hasn't
    implemented the required acpi_register_ioapic() and
    acpi_unregister_ioapic().
    2) Currently only ACPI based IOAPIC hotplug is possible on x86 and
    IA64, we don't know other specifications and interfaces to support
    IOAPIC hotplug yet.
    3) We will reimplement an ACPI IOAPIC driver to support IOAPIC hotplug.

    This change also helps to get rid of the false alarm on all current
    Linux distributions:
    [ 6.952497] ioapic: probe of 0000:00:05.4 failed with error -22
    [ 6.959542] ioapic: probe of 0000:80:05.4 failed with error -22

    Signed-off-by: Jiang Liu
    Cc: Konrad Rzeszutek Wilk
    Cc: Tony Luck
    Cc: Joerg Roedel
    Cc: Greg Kroah-Hartman
    Cc: Benjamin Herrenschmidt
    Cc: Rafael J. Wysocki
    Cc: Bjorn Helgaas
    Cc: Randy Dunlap
    Cc: Yinghai Lu
    Cc: Borislav Petkov
    Link: http://lkml.kernel.org/r/1414387308-27148-9-git-send-email-jiang.liu@linux.intel.com
    Signed-off-by: Thomas Gleixner

    Jiang Liu
     

15 Dec, 2014

2 commits

  • Pull driver core update from Greg KH:
    "Here's the set of driver core patches for 3.19-rc1.

    They are dominated by the removal of the .owner field in platform
    drivers. They touch a lot of files, but they are "simple" changes,
    just removing a line in a structure.

    Other than that, a few minor driver core and debugfs changes. There
    are some ath9k patches coming in through this tree that have been
    acked by the wireless maintainers as they relied on the debugfs
    changes.

    Everything has been in linux-next for a while"

    * tag 'driver-core-3.19-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core: (324 commits)
    Revert "ath: ath9k: use debugfs_create_devm_seqfile() helper for seq_file entries"
    fs: debugfs: add forward declaration for struct device type
    firmware class: Deletion of an unnecessary check before the function call "vunmap"
    firmware loader: fix hung task warning dump
    devcoredump: provide a one-way disable function
    device: Add dev__once variants
    ath: ath9k: use debugfs_create_devm_seqfile() helper for seq_file entries
    ath: use seq_file api for ath9k debugfs files
    debugfs: add helper function to create device related seq_file
    drivers/base: cacheinfo: remove noisy error boot message
    Revert "core: platform: add warning if driver has no owner"
    drivers: base: support cpu cache information interface to userspace via sysfs
    drivers: base: add cpu_device_create to support per-cpu devices
    topology: replace custom attribute macros with standard DEVICE_ATTR*
    cpumask: factor out show_cpumap into separate helper function
    driver core: Fix unbalanced device reference in drivers_probe
    driver core: fix race with userland in device_add()
    sysfs/kernfs: make read requests on pre-alloc files use the buffer.
    sysfs/kernfs: allow attributes to request write buffer be pre-allocated.
    fs: sysfs: return EGBIG on write if offset is larger than file size
    ...

    Linus Torvalds
     
  • Pull USB updates from Greg KH:
    "Here's the big set of USB and PHY patches for 3.19-rc1.

    The normal churn in the USB gadget area is in here, as well as xhci
    and other individual USB driver updates. The PHY tree is also in
    here, as there were dependancies on the USB tree.

    All of these have been in linux-next"

    * tag 'usb-3.19-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb: (351 commits)
    arm: omap3: twl: remove usb phy init data
    usbip: fix error handling in stub_probe()
    usb: gadget: udc: missing curly braces
    USB: mos7720: delete some unneeded code
    wusb: replace memset by memzero_explicit
    usbip: remove unneeded structure
    usb: xhci: fix comment for PORT_DEV_REMOVE
    xhci: don't use the same variable for stopped and halted rings current TD
    xhci: clear extra bits from slot context when setting max exit latency
    xhci: cleanup finish_td function
    USB: adutux: NULL dereferences on disconnect
    usb: chipidea: fix platform_no_drv_owner.cocci warnings
    usb: chipidea: Fixed a few typos in comments
    Documentation: bindings: add doc for the USB2 ChipIdea USB driver
    usb: chipidea: add a usb2 driver for ci13xxx
    usb: chipidea: fix phy handling
    usb: chipidea: remove duplicate dev_set_drvdata for host_start
    usb: chipidea: parameter 'mode' isn't needed for hw_device_reset
    usb: chipidea: add controller reset API
    usb: chipidea: remove flag CI_HDRC_REQUIRE_TRANSCEIVER
    ...

    Linus Torvalds
     

12 Dec, 2014

1 commit

  • Pull xen features and fixes from David Vrabel:

    - Fully support non-coherent devices on ARM by introducing the
    mechanisms to request the hypervisor to perform the required cache
    maintainance operations.

    - A number of pciback bug fixes and cleanups. Notably a deadlock fix
    if a PCI device was manually uunbound and a fix for incorrectly
    restoring state after a function reset.

    - In x86 PVHVM guests, use the APIC for interrupts if this has been
    virtualized by the hardware. This reduces the number of interrupt-
    related VM exits on such hardware.

    * tag 'stable/for-linus-3.19-rc0-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/xen/tip: (26 commits)
    Revert "swiotlb-xen: pass dev_addr to swiotlb_tbl_unmap_single"
    xen/pci: Use APIC directly when APIC virtualization hardware is available
    xen/pci: Defer initialization of MSI ops on HVM guests
    xen-pciback: drop SR-IOV VFs when PF driver unloads
    xen/pciback: Restore configuration space when detaching from a guest.
    PCI: Expose pci_load_saved_state for public consumption.
    xen/pciback: Remove tons of dereferences
    xen/pciback: Print out the domain owning the device.
    xen/pciback: Include the domain id if removing the device whilst still in use
    driver core: Provide an wrapper around the mutex to do lockdep warnings
    xen/pciback: Don't deadlock when unbinding.
    swiotlb-xen: pass dev_addr to swiotlb_tbl_unmap_single
    swiotlb-xen: call xen_dma_sync_single_for_device when appropriate
    swiotlb-xen: remove BUG_ON in xen_bus_to_phys
    swiotlb-xen: pass dev_addr to xen_dma_unmap_page and xen_dma_sync_single_for_cpu
    xen/arm: introduce GNTTABOP_cache_flush
    xen/arm/arm64: introduce xen_arch_need_swiotlb
    xen/arm/arm64: merge xen/mm32.c into xen/mm.c
    xen/arm: use hypercall to flush caches in map_page
    xen: add a dma_addr_t dev_addr argument to xen_dma_map_page
    ...

    Linus Torvalds
     

11 Dec, 2014

3 commits

  • Pull ACPI and power management updates from Rafael Wysocki:
    "This time we have some more new material than we used to have during
    the last couple of development cycles.

    The most important part of it to me is the introduction of a unified
    interface for accessing device properties provided by platform
    firmware. It works with Device Trees and ACPI in a uniform way and
    drivers using it need not worry about where the properties come from
    as long as the platform firmware (either DT or ACPI) makes them
    available. It covers both devices and "bare" device node objects
    without struct device representation as that turns out to be necessary
    in some cases. This has been in the works for quite a few months (and
    development cycles) and has been approved by all of the relevant
    maintainers.

    On top of that, some drivers are switched over to the new interface
    (at25, leds-gpio, gpio_keys_polled) and some additional changes are
    made to the core GPIO subsystem to allow device drivers to manipulate
    GPIOs in the "canonical" way on platforms that provide GPIO
    information in their ACPI tables, but don't assign names to GPIO lines
    (in which case the driver needs to do that on the basis of what it
    knows about the device in question). That also has been approved by
    the GPIO core maintainers and the rfkill driver is now going to use
    it.

    Second is support for hardware P-states in the intel_pstate driver.
    It uses CPUID to detect whether or not the feature is supported by the
    processor in which case it will be enabled by default. However, it
    can be disabled entirely from the kernel command line if necessary.

    Next is support for a platform firmware interface based on ACPI
    operation regions used by the PMIC (Power Management Integrated
    Circuit) chips on the Intel Baytrail-T and Baytrail-T-CR platforms.
    That interface is used for manipulating power resources and for
    thermal management: sensor temperature reporting, trip point setting
    and so on.

    Also the ACPI core is now going to support the _DEP configuration
    information in a limited way. Basically, _DEP it supposed to reflect
    off-the-hierarchy dependencies between devices which may be very
    indirect, like when AML for one device accesses locations in an
    operation region handled by another device's driver (usually, the
    device depended on this way is a serial bus or GPIO controller). The
    support added this time is sufficient to make the ACPI battery driver
    work on Asus T100A, but it is general enough to be able to cover some
    other use cases in the future.

    Finally, we have a new cpufreq driver for the Loongson1B processor.

    In addition to the above, there are fixes and cleanups all over the
    place as usual and a traditional ACPICA update to a recent upstream
    release.

    As far as the fixes go, the ACPI LPSS (Low-power Subsystem) driver for
    Intel platforms should be able to handle power management of the DMA
    engine correctly, the cpufreq-dt driver should interact with the
    thermal subsystem in a better way and the ACPI backlight driver should
    handle some more corner cases, among other things.

    On top of the ACPICA update there are fixes for race conditions in the
    ACPICA's interrupt handling code which might lead to some random and
    strange looking failures on some systems.

    In the cleanups department the most visible part is the series of
    commits targeted at getting rid of the CONFIG_PM_RUNTIME configuration
    option. That was triggered by a discussion regarding the generic
    power domains code during which we realized that trying to support
    certain combinations of PM config options was painful and not really
    worth it, because nobody would use them in production anyway. For
    this reason, we decided to make CONFIG_PM_SLEEP select
    CONFIG_PM_RUNTIME and that lead to the conclusion that the latter
    became redundant and CONFIG_PM could be used instead of it. The
    material here makes that replacement in a major part of the tree, but
    there will be at least one more batch of that in the second part of
    the merge window.

    Specifics:

    - Support for retrieving device properties information from ACPI _DSD
    device configuration objects and a unified device properties
    interface for device drivers (and subsystems) on top of that. As
    stated above, this works with Device Trees and ACPI and allows
    device drivers to be written in a platform firmware (DT or ACPI)
    agnostic way. The at25, leds-gpio and gpio_keys_polled drivers are
    now going to use this new interface and the GPIO subsystem is
    additionally modified to allow device drivers to assign names to
    GPIO resources returned by ACPI _CRS objects (in case _DSD is not
    present or does not provide the expected data). The changes in
    this set are mostly from Mika Westerberg, Rafael J Wysocki, Aaron
    Lu, and Darren Hart with some fixes from others (Fabio Estevam,
    Geert Uytterhoeven).

    - Support for Hardware Managed Performance States (HWP) as described
    in Volume 3, section 14.4, of the Intel SDM in the intel_pstate
    driver. CPUID is used to detect whether or not the feature is
    supported by the processor. If supported, it will be enabled
    automatically unless the intel_pstate=no_hwp switch is present in
    the kernel command line. From Dirk Brandewie.

    - New Intel Broadwell-H ID for intel_pstate (Dirk Brandewie).

    - Support for firmware interface based on ACPI operation regions used
    by the PMIC chips on the Intel Baytrail-T and Baytrail-T-CR
    platforms for power resource control and thermal management (Aaron
    Lu).

    - Limited support for retrieving off-the-hierarchy dependencies
    between devices from ACPI _DEP device configuration objects and
    deferred probing support for the ACPI battery driver based on the
    _DEP information to make that driver work on Asus T100A (Lan
    Tianyu).

    - New cpufreq driver for the Loongson1B processor (Kelvin Cheung).

    - ACPICA update to upstream revision 20141107 which only affects
    tools (Bob Moore).

    - Fixes for race conditions in the ACPICA's interrupt handling code
    and in the ACPI code related to system suspend and resume (Lv Zheng
    and Rafael J Wysocki).

    - ACPI core fix for an RCU-related issue in the ioremap() regions
    management code that slowed down significantly after CPUs had been
    allowed to enter idle states even if they'd had RCU callbakcs
    queued and triggered some problems in certain proprietary graphics
    driver (and elsewhere). The fix replaces synchronize_rcu() in that
    code with synchronize_rcu_expedited() which makes the issue go
    away. From Konstantin Khlebnikov.

    - ACPI LPSS (Low-Power Subsystem) driver fix to handle power
    management of the DMA engine included into the LPSS correctly. The
    problem is that the DMA engine doesn't have ACPI PM support of its
    own and it simply is turned off when the last LPSS device having
    ACPI PM support goes into D3cold. To work around that, the PM
    domain used by the ACPI LPSS driver is redesigned so at least one
    device with ACPI PM support will be on as long as the DMA engine is
    in use. From Andy Shevchenko.

    - ACPI backlight driver fix to avoid using it on "Win8-compatible"
    systems where it doesn't work and where it was used by default by
    mistake (Aaron Lu).

    - Assorted minor ACPI core fixes and cleanups from Tomasz Nowicki,
    Sudeep Holla, Huang Rui, Hanjun Guo, Fabian Frederick, and Ashwin
    Chaugule (mostly related to the upcoming ARM64 support).

    - Intel RAPL (Running Average Power Limit) power capping driver fixes
    and improvements including new processor IDs (Jacob Pan).

    - Generic power domains modification to power up domains after
    attaching devices to them to meet the expectations of device
    drivers and bus types assuming devices to be accessible at probe
    time (Ulf Hansson).

    - Preliminary support for controlling device clocks from the generic
    power domains core code and modifications of the ARM/shmobile
    platform to use that feature (Ulf Hansson).

    - Assorted minor fixes and cleanups of the generic power domains core
    code (Ulf Hansson, Geert Uytterhoeven).

    - Assorted minor fixes and cleanups of the device clocks control code
    in the PM core (Geert Uytterhoeven, Grygorii Strashko).

    - Consolidation of device power management Kconfig options by making
    CONFIG_PM_SLEEP select CONFIG_PM_RUNTIME and removing the latter
    which is now redundant (Rafael J Wysocki and Kevin Hilman). That
    is the first batch of the changes needed for this purpose.

    - Core device runtime power management support code cleanup related
    to the execution of callbacks (Andrzej Hajda).

    - cpuidle ARM support improvements (Lorenzo Pieralisi).

    - cpuidle cleanup related to the CPUIDLE_FLAG_TIME_VALID flag and a
    new MAINTAINERS entry for ARM Exynos cpuidle (Daniel Lezcano and
    Bartlomiej Zolnierkiewicz).

    - New cpufreq driver callback (->ready) to be executed when the
    cpufreq core is ready to use a given policy object and cpufreq-dt
    driver modification to use that callback for cooling device
    registration (Viresh Kumar).

    - cpufreq core fixes and cleanups (Viresh Kumar, Vince Hsu, James
    Geboski, Tomeu Vizoso).

    - Assorted fixes and cleanups in the cpufreq-pcc, intel_pstate,
    cpufreq-dt, pxa2xx cpufreq drivers (Lenny Szubowicz, Ethan Zhao,
    Stefan Wahren, Petr Cvek).

    - OPP (Operating Performance Points) framework modification to allow
    OPPs to be removed too and update of a few cpufreq drivers
    (cpufreq-dt, exynos5440, imx6q, cpufreq) to remove OPPs (added
    during initialization) on driver removal (Viresh Kumar).

    - Hibernation core fixes and cleanups (Tina Ruchandani and Markus
    Elfring).

    - PM Kconfig fix related to CPU power management (Pankaj Dubey).

    - cpupower tool fix (Prarit Bhargava)"

    * tag 'pm+acpi-3.19-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm: (120 commits)
    i2c-omap / PM: Drop CONFIG_PM_RUNTIME from i2c-omap.c
    dmaengine / PM: Replace CONFIG_PM_RUNTIME with CONFIG_PM
    tools: cpupower: fix return checks for sysfs_get_idlestate_count()
    drivers: sh / PM: Replace CONFIG_PM_RUNTIME with CONFIG_PM
    e1000e / igb / PM: Eliminate CONFIG_PM_RUNTIME
    MMC / PM: Replace CONFIG_PM_RUNTIME with CONFIG_PM
    MFD / PM: Replace CONFIG_PM_RUNTIME with CONFIG_PM
    misc / PM: Replace CONFIG_PM_RUNTIME with CONFIG_PM
    media / PM: Replace CONFIG_PM_RUNTIME with CONFIG_PM
    input / PM: Replace CONFIG_PM_RUNTIME with CONFIG_PM
    leds: leds-gpio: Fix multiple instances registration without 'label' property
    iio / PM: Replace CONFIG_PM_RUNTIME with CONFIG_PM
    hsi / OMAP / PM: Replace CONFIG_PM_RUNTIME with CONFIG_PM
    i2c-hid / PM: Replace CONFIG_PM_RUNTIME with CONFIG_PM
    drm / exynos / PM: Replace CONFIG_PM_RUNTIME with CONFIG_PM
    gpio / PM: Replace CONFIG_PM_RUNTIME with CONFIG_PM
    hwrandom / exynos / PM: Use CONFIG_PM in #ifdef
    block / PM: Replace CONFIG_PM_RUNTIME with CONFIG_PM
    USB / PM: Drop CONFIG_PM_RUNTIME from the USB core
    PM: Merge the SET*_RUNTIME_PM_OPS() macros
    ...

    Linus Torvalds
     
  • Pull PCI changes from Bjorn Helgaas:
    "Here are the PCI changes intended for v3.19. I don't think there's
    anything very exciting here, but there was a lot of MSI-related stuff
    coming via Thomas.

    Details:

    NUMA
    - Allow numa_node override via sysfs (Prarit Bhargava)

    Resource management
    - Restore detection of read-only BARs (Myron Stowe)
    - Shrink decoding-disabled window while sizing BARs (Myron Stowe)
    - Add informational printk for invalid BARs (Myron Stowe)
    - Remove fixed parameter in pci_iov_resource_bar() (Myron Stowe)

    MSI
    - Add pci_msi_ignore_mask to prevent writes to MSI/MSI-X Mask Bits (Yijing Wang)
    - Revert "PCI: Add x86_msi.msi_mask_irq() and msix_mask_irq()" (Yijing Wang)
    - s390/MSI: Use __msi_mask_irq() instead of default_msi_mask_irq() (Yijing Wang)

    Virtualization
    - xen: Process failure for pcifront_(re)scan_root() (Chen Gang)
    - Make FLR and AF FLR reset warning messages different (Gavin Shan)

    Generic host bridge driver
    - Allocate config space windows after limiting bus number range (Lorenzo Pieralisi)
    - Convert to DT resource parsing API (Lorenzo Pieralisi)

    Freescale Layerscape
    - Add Freescale Layerscape PCIe driver (Minghuan Lian)

    NVIDIA Tegra
    - Do not build on 64-bit ARM (Thierry Reding)
    - Add Kconfig help text (Thierry Reding)

    Renesas R-Car
    - Make rcar_pci static (Jingoo Han)

    Samsung Exynos
    - Add exynos prefix to add_pcie_port(), pcie_init() (Jingoo Han)

    ST Microelectronics SPEAr13xx
    - Add spear prefix to add_pcie_port(), pcie_init() (Jingoo Han)
    - Make spear13xx_add_pcie_port() __init (Jingoo Han)
    - Remove unnecessary OOM message (Jingoo Han)

    TI DRA7xx
    - Add dra7xx prefix to add_pcie_port() (Jingoo Han)
    - Make dra7xx_add_pcie_port() __init (Jingoo Han)

    TI Keystone
    - Make ks_dw_pcie_msi_domain_ops static (Jingoo Han)
    - Remove unnecessary OOM message (Jingoo Han)

    Miscellaneous
    - Delete unnecessary NULL pointer checks (Markus Elfring)
    - Remove unused to_hotplug_slot() (Gavin Shan)
    - Whitespace cleanup (Jingoo Han)
    - Simplify if-return sequences (Quentin Lambert)"

    * tag 'pci-v3.19-changes' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci: (28 commits)
    PCI: Remove fixed parameter in pci_iov_resource_bar()
    PCI: Add informational printk for invalid BARs
    PCI: tegra: Add Kconfig help text
    PCI: tegra: Do not build on 64-bit ARM
    PCI: spear: Remove unnecessary OOM message
    PCI: mvebu: Add a blank line after declarations
    PCI: designware: Add a blank line after declarations
    PCI: exynos: Remove unnecessary return statement
    PCI: imx6: Use tabs for indentation
    PCI: keystone: Remove unnecessary OOM message
    PCI: Remove unused and broken to_hotplug_slot()
    PCI: Make FLR and AF FLR reset warning messages different
    PCI: dra7xx: Add __init annotation to dra7xx_add_pcie_port()
    PCI: spear: Add __init annotation to spear13xx_add_pcie_port()
    PCI: spear: Rename add_pcie_port(), pcie_init() to spear13xx_add_pcie_port(), etc.
    PCI: dra7xx: Rename add_pcie_port() to dra7xx_add_pcie_port()
    PCI: layerscape: Add Freescale Layerscape PCIe driver
    PCI: Simplify if-return sequences
    PCI: Delete unnecessary NULL pointer checks
    PCI: Shrink decoding-disabled window while sizing BARs
    ...

    Linus Torvalds
     
  • Pull irq domain updates from Thomas Gleixner:
    "The real interesting irq updates:

    - Support for hierarchical irq domains:

    For complex interrupt routing scenarios where more than one
    interrupt related chip is involved we had no proper representation
    in the generic interrupt infrastructure so far. That made people
    implement rather ugly constructs in their nested irq chip
    implementations. The main offenders are x86 and arm/gic.

    To distangle that mess we have now hierarchical irqdomains which
    seperate the various interrupt chips and connect them via the
    hierarchical domains. That keeps the domain specific details
    internal to the particular hierarchy level and removes the
    criss/cross referencing of chip internals. The resulting hierarchy
    for a complex x86 system will look like this:

    vector mapped: 74
    msi-0 mapped: 2
    dmar-ir-1 mapped: 69
    ioapic-1 mapped: 4
    ioapic-0 mapped: 20
    pci-msi-2 mapped: 45
    dmar-ir-0 mapped: 3
    ioapic-2 mapped: 1
    pci-msi-1 mapped: 2
    htirq mapped: 0

    Neither ioapic nor pci-msi know about the dmar interrupt remapping
    between themself and the vector domain. If interrupt remapping is
    disabled ioapic and pci-msi become direct childs of the vector
    domain.

    In hindsight we should have done that years ago, but in hindsight
    we always know better :)

    - Support for generic MSI interrupt domain handling

    We have more and more non PCI related MSI interrupts, so providing
    a generic infrastructure for this is better than having all
    affected architectures implementing their own private hacks.

    - Support for PCI-MSI interrupt domain handling, based on the generic
    MSI support.

    This part carries the pci/msi branch from Bjorn Helgaas pci tree to
    avoid a massive conflict. The PCI/MSI parts are acked by Bjorn.

    I have two more branches on top of this. The full conversion of x86
    to hierarchical domains and a partial conversion of arm/gic"

    * 'irq-irqdomain-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (41 commits)
    genirq: Move irq_chip_write_msi_msg() helper to core
    PCI/MSI: Allow an msi_controller to be associated to an irq domain
    PCI/MSI: Provide mechanism to alloc/free MSI/MSIX interrupt from irqdomain
    PCI/MSI: Enhance core to support hierarchy irqdomain
    PCI/MSI: Move cached entry functions to irq core
    genirq: Provide default callbacks for msi_domain_ops
    genirq: Introduce msi_domain_alloc/free_irqs()
    asm-generic: Add msi.h
    genirq: Add generic msi irq domain support
    genirq: Introduce callback irq_chip.irq_write_msi_msg
    genirq: Work around __irq_set_handler vs stacked domains ordering issues
    irqdomain: Introduce helper function irq_domain_add_hierarchy()
    irqdomain: Implement a method to automatically call parent domains alloc/free
    genirq: Introduce helper irq_domain_set_info() to reduce duplicated code
    genirq: Split out flow handler typedefs into seperate header file
    genirq: Add IRQ_SET_MASK_OK_DONE to support stacked irqchip
    genirq: Introduce irq_chip.irq_compose_msi_msg() to support stacked irqchip
    genirq: Add more helper functions to support stacked irq_chip
    genirq: Introduce helper functions to support stacked irq_chip
    irqdomain: Do irq_find_mapping and set_type for hierarchy irqdomain in case OF
    ...

    Linus Torvalds
     

09 Dec, 2014

1 commit

  • * pm-runtime: (25 commits)
    i2c-omap / PM: Drop CONFIG_PM_RUNTIME from i2c-omap.c
    dmaengine / PM: Replace CONFIG_PM_RUNTIME with CONFIG_PM
    drivers: sh / PM: Replace CONFIG_PM_RUNTIME with CONFIG_PM
    e1000e / igb / PM: Eliminate CONFIG_PM_RUNTIME
    MMC / PM: Replace CONFIG_PM_RUNTIME with CONFIG_PM
    MFD / PM: Replace CONFIG_PM_RUNTIME with CONFIG_PM
    misc / PM: Replace CONFIG_PM_RUNTIME with CONFIG_PM
    media / PM: Replace CONFIG_PM_RUNTIME with CONFIG_PM
    input / PM: Replace CONFIG_PM_RUNTIME with CONFIG_PM
    iio / PM: Replace CONFIG_PM_RUNTIME with CONFIG_PM
    hsi / OMAP / PM: Replace CONFIG_PM_RUNTIME with CONFIG_PM
    i2c-hid / PM: Replace CONFIG_PM_RUNTIME with CONFIG_PM
    drm / exynos / PM: Replace CONFIG_PM_RUNTIME with CONFIG_PM
    gpio / PM: Replace CONFIG_PM_RUNTIME with CONFIG_PM
    hwrandom / exynos / PM: Use CONFIG_PM in #ifdef
    block / PM: Replace CONFIG_PM_RUNTIME with CONFIG_PM
    USB / PM: Drop CONFIG_PM_RUNTIME from the USB core
    PM: Merge the SET*_RUNTIME_PM_OPS() macros
    PM / Kconfig: Do not select PM directly from Kconfig files
    PCI / PM: Drop CONFIG_PM_RUNTIME from the PCI core
    ...

    Rafael J. Wysocki
     

04 Dec, 2014

3 commits


02 Dec, 2014

1 commit

  • Commit 0b0b0893d49b ("of/pci: Fix the conversion of IO ranges into IO
    resources") changed how I/O resources are parsed from DT. Rather than
    containing the physical address of the I/O region, the addresses will now
    be in I/O address space.

    On Tegra the union of all ranges is used to expose a top-level memory-
    mapped resource for the PCI host bridge. This helps to make /proc/iomem
    more readable.

    Combining both of the above, the union would now include the I/O space
    region. This causes a regression on Tegra20, where the physical base
    address of the PCIe controller (and therefore of the union) is located at
    physical address 0x80000000. Since I/O space starts at 0, the union will
    now include all of system RAM which starts at 0x00000000.

    This commit fixes this by keeping two copies of the I/O range: one that
    represents the range in the CPU's physical address space, the other for the
    range in the I/O address space. This allows the translation setup within
    the driver to reuse the physical addresses. The code registering the I/O
    region with the PCI core uses both ranges to establish the mapping.

    Fixes: 0b0b0893d49b ("of/pci: Fix the conversion of IO ranges into IO resources")
    Reported-by: Marc Zyngier
    Tested-by: Marc Zyngier
    Suggested-by: Arnd Bergmann
    Signed-off-by: Thierry Reding
    Signed-off-by: Bjorn Helgaas
    Reviewed-by: Arnd Bergmann

    Thierry Reding
     

01 Dec, 2014

1 commit


24 Nov, 2014

2 commits

  • This can be set by quirks/drivers to be used by the architecture code
    that assigns the MSI addresses.

    We additionally add verification in the core MSI code that the values
    assigned by the architecture do satisfy the limitation in order to fail
    gracefully if they don't (ie. the arch hasn't been updated to deal with
    that quirk yet).

    Signed-off-by: Benjamin Herrenschmidt
    CC:
    Acked-by: Bjorn Helgaas

    Benjamin Herrenschmidt
     
  • With the new stacked irq domains, it becomes pretty tempting to
    allocate an MSI domain per PCI bus, which would remove the requirement
    of either relying on arch-specific code, or a default PCI MSI domain.

    By allowing the msi_controller structure to carry a pointer to an
    irq_domain, we can easily use this in pci_msi_setup_msi_irqs. The
    existing code can still be used as a fallback if the MSI driver does
    not populate the domain field.

    Tested on arm64 with the GICv3 ITS driver.

    Signed-off-by: Marc Zyngier
    Cc: Yingjoe Chen
    Cc: Bjorn Helgaas
    Cc: linux-arm-kernel@lists.infradead.org
    Cc: Jiang Liu
    Link: http://lkml.kernel.org/r/1416048553-29289-2-git-send-email-marc.zyngier@arm.com
    Signed-off-by: Thomas Gleixner

    Marc Zyngier
     

23 Nov, 2014

10 commits

  • Provide mechanism to directly alloc/free MSI/MSIX interrupt from
    irqdomain, which will be used to replace arch_setup_msi_irq()/
    arch_setup_msi_irqs()/arch_teardown_msi_irq()/arch_teardown_msi_irqs().

    To kill weak functions, this patch introduce a new weak function
    arch_get_pci_msi_domain(), which is to retrieve the MSI irqdomain
    for a PCI device. This weak function could be killed once we get
    a common way to associate MSI domain with PCI device.

    Signed-off-by: Jiang Liu
    Cc: Tony Luck
    Cc: linux-arm-kernel@lists.infradead.org
    Cc: Bjorn Helgaas
    Cc: Grant Likely
    Cc: Marc Zyngier
    Cc: Yijing Wang
    Cc: Yingjoe Chen
    Cc: Borislav Petkov
    Cc: Matthias Brugger
    Cc: Alexander Gordeev
    Link: http://lkml.kernel.org/r/1416061447-9472-10-git-send-email-jiang.liu@linux.intel.com
    Signed-off-by: Thomas Gleixner

    Jiang Liu
     
  • Enhance PCI MSI core to support hierarchy irqdomain, so the common
    code can be shared across architectures.

    [ tglx: Extracted and combined from several patches ]

    Signed-off-by: Jiang Liu
    Cc: Bjorn Helgaas
    Cc: Grant Likely
    Cc: Marc Zyngier
    Cc: Yingjoe Chen
    Cc: Yijing Wang
    Signed-off-by: Thomas Gleixner

    Jiang Liu
     
  • Required to support non PCI based MSI.

    [ tglx: Extracted from Jiangs patch series ]

    Signed-off-by: Jiang Liu
    Signed-off-by: Thomas Gleixner

    Jiang Liu
     
  • The PCI/MSI irq chip callbacks mask/unmask_msi_irq have been renamed
    to pci_msi_mask/unmask_irq to mark them PCI specific. Rename all usage
    sites. The conversion helper functions are kept around to avoid
    conflicts in next and will be removed after merging into mainline.

    Coccinelle assisted conversion. No functional change.

    Signed-off-by: Thomas Gleixner
    Cc: Bjorn Helgaas
    Cc: Russell King
    Cc: Ralf Baechle
    Cc: Benjamin Herrenschmidt
    Cc: Heiko Carstens
    Cc: "David S. Miller"
    Cc: Chris Metcalf
    Cc: x86@kernel.org
    Cc: Jiang Liu
    Cc: Jason Cooper
    Cc: Murali Karicheri
    Cc: Thierry Reding
    Cc: Mohit Kumar
    Cc: Simon Horman
    Cc: Michal Simek
    Cc: Yijing Wang

    Thomas Gleixner
     
  • mask/unmask_msi_irq and __mask_msi/msix_irq are PCI/MSI specific
    functions and should be named accordingly. This is a preparatory patch
    to support MSI on non PCI devices.

    Rename mask/unmask_msi_irq to pci_msi_mask/unmask_irq and document the
    functions. Provide conversion helpers.

    Rename __mask_msi/msix_irq to __pci_msi/msix_desc_mask so its clear
    that they operated on msi_desc. Fixup the only user outside of
    pci/msi.

    Signed-off-by: Thomas Gleixner
    Cc: Bjorn Helgaas
    Cc: Jiang Liu
    Cc: Grant Likely
    Cc: Marc Zyngier
    Cc: Yijing Wang
    Cc: Heiko Carstens

    Thomas Gleixner
     
  • Rename write_msi_msg() to pci_write_msi_msg() to mark it as PCI
    specific.

    Signed-off-by: Jiang Liu
    Cc: Bjorn Helgaas
    Cc: Grant Likely
    Cc: Marc Zyngier
    Cc: Yingjoe Chen
    Cc: Yijing Wang
    Signed-off-by: Thomas Gleixner

    Jiang Liu
     
  • Rename __read_msi_msg() to __pci_read_msi_msg() and kill unused
    read_msi_msg(). It's a preparation to separate generic MSI code from
    PCI core.

    Signed-off-by: Jiang Liu
    Cc: Bjorn Helgaas
    Cc: Grant Likely
    Cc: Marc Zyngier
    Cc: Yingjoe Chen
    Cc: Yijing Wang
    Signed-off-by: Thomas Gleixner

    Jiang Liu
     
  • It is the repsonsibility of arch_setup_msi_irq()/arch_setup_msi_irqs()
    to call irq_set_msi_desc() to associate IRQ descriptors and MSI
    descriptors. Kill the redundant call of irq_set_msi_desc() for MSI-X
    interrupts in the PCI MSI core.

    Signed-off-by: Jiang Liu
    Cc: Bjorn Helgaas
    Cc: Grant Likely
    Cc: Marc Zyngier
    Cc: Yingjoe Chen
    Cc: Yijing Wang
    Signed-off-by: Thomas Gleixner

    Jiang Liu
     
  • Simplify PCI MSI code by initializing msi_desc.nvec_used and
    msi_desc.msi_attrib.multiple when creating MSI descriptors.

    Also remove redundant checks in IRQ remapping drivers, PCI MSI core
    already guarantees these.

    Signed-off-by: Jiang Liu
    Acked-by: Bjorn Helgaas
    Cc: Bjorn Helgaas
    Cc: Grant Likely
    Cc: Marc Zyngier
    Cc: Yingjoe Chen
    Cc: Yijing Wang
    Signed-off-by: Thomas Gleixner

    Jiang Liu
     
  • Per Documentation/CodingStyle, don't use braces around single statements.

    Signed-off-by: Jiang Liu
    Acked-by: Bjorn Helgaas
    Cc: Bjorn Helgaas
    Cc: Grant Likely
    Cc: Marc Zyngier
    Cc: Yingjoe Chen
    Cc: Yijing Wang
    Signed-off-by: Thomas Gleixner

    Jiang Liu
     

22 Nov, 2014

7 commits

  • Pull PCI fixes from Bjorn Helgaas:
    "These are fixes for an issue with 64-bit PCI bus addresses on 32-bit
    PAE kernels, an APM X-Gene problem (it depended on a generic change we
    removed before merging), a fix for my hotplug device configuration
    changes, and a devicetree documentation update.

    Resource management:
    - Support 64-bit bridge windows if we have 64-bit dma_addr_t (Yinghai Lu)

    PCI device hotplug:
    - Apply _HPX Link Control settings to all devices with a link (Yinghai Lu)

    Generic host bridge driver:
    - Add DT binding for "linux,pci-domain" property (Lucas Stach)

    APM X-Gene:
    - Assign resources to bus before adding new devices (Duc Dang)"

    * tag 'pci-v3.18-fixes-3' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci:
    PCI: Support 64-bit bridge windows if we have 64-bit dma_addr_t
    PCI: Apply _HPX Link Control settings to all devices with a link
    PCI: Add missing DT binding for "linux,pci-domain" property
    PCI: xgene: Assign resources to bus before adding new devices

    Linus Torvalds
     
  • * pci/msi:
    s390/MSI: Use __msi_mask_irq() instead of default_msi_mask_irq()
    Revert "PCI: Add x86_msi.msi_mask_irq() and msix_mask_irq()"
    PCI/MSI: Add pci_msi_ignore_mask to prevent writes to MSI/MSI-X Mask Bits

    Bjorn Helgaas
     
  • Save MSI controller in pci_sys_data instead of assigning MSI controller
    pointer to every PCI bus in .add_bus().

    [bhelgaas: use xilinx_pcie_msi_chip, not xilinx_pcie_msi_controller]
    Signed-off-by: Yijing Wang
    Signed-off-by: Bjorn Helgaas

    Yijing Wang
     
  • Save MSI controller in pci_sys_data instead of assigning MSI controller
    pointer to every PCI bus in .add_bus().

    Signed-off-by: Yijing Wang
    Signed-off-by: Bjorn Helgaas

    Yijing Wang
     
  • Save MSI controller in pci_sys_data instead of assigning MSI controller
    pointer to every PCI bus in .add_bus().

    [bhelgaas: use struct rcar_msi.chip, not ctrl]
    Signed-off-by: Yijing Wang
    Signed-off-by: Bjorn Helgaas

    Yijing Wang
     
  • Save MSI controller in pci_sys_data instead of assigning MSI controller
    pointer to every PCI bus in .add_bus().

    [bhelgaas: use dw_pcie_msi_chip, not dw_pcie_msi_controller]
    Signed-off-by: Yijing Wang
    Signed-off-by: Bjorn Helgaas

    Yijing Wang
     
  • Save MSI controller in pci_sys_data instead of assigning MSI controller
    pointer to every PCI bus in .add_bus().

    [bhelgaas: use struct tegra_msi.chip, not ctrl]
    Signed-off-by: Yijing Wang
    Signed-off-by: Bjorn Helgaas

    Yijing Wang
     

20 Nov, 2014

4 commits

  • …/virtualization' into next

    * pci/enumeration:
    PCI: Remove fixed parameter in pci_iov_resource_bar()
    PCI: Add informational printk for invalid BARs
    PCI: Shrink decoding-disabled window while sizing BARs
    PCI: Restore detection of read-only BARs

    * pci/hotplug:
    PCI: Remove unused and broken to_hotplug_slot()

    * pci/misc:
    PCI: Make FLR and AF FLR reset warning messages different
    PCI: Simplify if-return sequences
    PCI: Delete unnecessary NULL pointer checks

    * pci/numa:
    PCI: Allow numa_node override via sysfs

    * pci/virtualization:
    xen/pcifront: Process failure for pcifront_(re)scan_root()

    Bjorn Helgaas
     
  • pci_iov_resource_bar() always sets its 'pci_bar_type' parameter to
    'pci_bar_unknown'. Drop the parameter and just use 'pci_bar_unknown'
    directly in the callers.

    No functional change intended.

    Signed-off-by: Myron Stowe
    Signed-off-by: Bjorn Helgaas
    CC: Chris Wright
    CC: Yu Zhao

    Myron Stowe
     
  • As a consequence of restoring the detection of invalid BARs, add a new
    informational printk like the following when such occurrences are
    encountered.

    pci ssss:bb:dd.f: [Firmware Bug]: reg 0xXX: invalid BAR (can't size)

    Reported-by: William Unruh
    Reported-by: Martin Lucina
    Signed-off-by: Myron Stowe
    Signed-off-by: Bjorn Helgaas
    CC: Matthew Wilcox

    Myron Stowe
     
  • Aaron reported that a 32-bit x86 kernel with Physical Address Extension
    (PAE) support complains about bridge prefetchable memory windows above 4GB:

    pci_bus 0000:00: root bus resource [mem 0x380000000000-0x383fffffffff]
    ...
    pci 0000:03:00.0: reg 0x10: [mem 0x383fffc00000-0x383fffdfffff 64bit pref]
    pci 0000:03:00.0: reg 0x20: [mem 0x383fffe04000-0x383fffe07fff 64bit pref]
    pci 0000:03:00.1: reg 0x10: [mem 0x383fffa00000-0x383fffbfffff 64bit pref]
    pci 0000:03:00.1: reg 0x20: [mem 0x383fffe00000-0x383fffe03fff 64bit pref]
    pci 0000:00:02.2: PCI bridge to [bus 03-04]
    pci 0000:00:02.2: bridge window [io 0x1000-0x1fff]
    pci 0000:00:02.2: bridge window [mem 0x91900000-0x91cfffff]
    pci 0000:00:02.2: can't handle 64-bit address space for bridge

    In this kernel, unsigned long is 32 bits and dma_addr_t is 64 bits.
    Previously we used "unsigned long" to hold the bridge window address. But
    this is a bus address, so we should use dma_addr_t instead.

    Use dma_addr_t to hold the bridge window base and limit.

    The question of whether the CPU can actually *address* the window is
    separate and depends on what the physical address space of the CPU is and
    whether the host bridge does any address translation.

    [bhelgaas: fix "shift count > width of type", changelog, stable tag]
    Fixes: d56dbf5bab8c ("PCI: Allocate 64-bit BARs above 4G when possible")
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=88131
    Reported-by: Aaron Ma
    Tested-by: Aaron Ma
    Signed-off-by: Yinghai Lu
    Signed-off-by: Bjorn Helgaas
    CC: stable@vger.kernel.org # v3.14+

    Yinghai Lu