29 Apr, 2020

1 commit

  • [ Upstream commit ad9001f2f41198784b0423646450ba2cb24793a3 ]

    Currently Linux does not follow PCIe spec regarding the required delays
    after reset. A concrete example is a Thunderbolt add-in-card that consists
    of a PCIe switch and two PCIe endpoints:

    +-1b.0-[01-6b]----00.0-[02-6b]--+-00.0-[03]----00.0 TBT controller
    +-01.0-[04-36]-- DS hotplug port
    +-02.0-[37]----00.0 xHCI controller
    \-04.0-[38-6b]-- DS hotplug port

    The root port (1b.0) and the PCIe switch downstream ports are all PCIe Gen3
    so they support 8GT/s link speeds.

    We wait for the PCIe hierarchy to enter D3cold (runtime):

    pcieport 0000:00:1b.0: power state changed by ACPI to D3cold

    When it wakes up from D3cold, according to the PCIe 5.0 section 5.8 the
    PCIe switch is put to reset and its power is re-applied. This means that we
    must follow the rules in PCIe 5.0 section 6.6.1.

    For the PCIe Gen3 ports we are dealing with here, the following applies:

    With a Downstream Port that supports Link speeds greater than 5.0 GT/s,
    software must wait a minimum of 100 ms after Link training completes
    before sending a Configuration Request to the device immediately below
    that Port. Software can determine when Link training completes by polling
    the Data Link Layer Link Active bit or by setting up an associated
    interrupt (see Section 6.7.3.3).

    Translating this into the above topology we would need to do this (DLLLA
    stands for Data Link Layer Link Active):

    0000:00:1b.0: wait for 100 ms after DLLLA is set before access to 0000:01:00.0
    0000:02:00.0: wait for 100 ms after DLLLA is set before access to 0000:03:00.0
    0000:02:02.0: wait for 100 ms after DLLLA is set before access to 0000:37:00.0

    I've instrumented the kernel with some additional logging so we can see the
    actual delays performed:

    pcieport 0000:00:1b.0: power state changed by ACPI to D0
    pcieport 0000:00:1b.0: waiting for D3cold delay of 100 ms
    pcieport 0000:00:1b.0: waiting for D3hot delay of 10 ms
    pcieport 0000:02:01.0: waiting for D3hot delay of 10 ms
    pcieport 0000:02:04.0: waiting for D3hot delay of 10 ms

    For the switch upstream port (01:00.0 reachable through 00:1b.0 root port)
    we wait for 100 ms but not taking into account the DLLLA requirement. We
    then wait 10 ms for D3hot -> D0 transition of the root port and the two
    downstream hotplug ports. This means that we deviate from what the spec
    requires.

    Performing the same check for system sleep (s2idle) transitions it turns
    out to be even worse. None of the mandatory delays are performed. If this
    would be S3 instead of s2idle then according to PCI FW spec 3.2 section
    4.6.8. there is a specific _DSM that allows the OS to skip the delays but
    this platform does not provide the _DSM and does not go to S3 anyway so no
    firmware is involved that could already handle these delays.

    On this particular platform these delays are not actually needed because
    there is an additional delay as part of the ACPI power resource that is
    used to turn on power to the hierarchy but since that additional delay is
    not required by any of standards (PCIe, ACPI) it is not present in the
    Intel Ice Lake, for example where missing the mandatory delays causes
    pciehp to start tearing down the stack too early (links are not yet
    trained). Below is an example how it looks like when this happens:

    pcieport 0000:83:04.0: pciehp: Slot(4): Card not present
    pcieport 0000:87:04.0: PME# disabled
    pcieport 0000:83:04.0: pciehp: pciehp_unconfigure_device: domain:bus:dev = 0000:86:00
    pcieport 0000:86:00.0: Refused to change power state, currently in D3
    pcieport 0000:86:00.0: restoring config space at offset 0x3c (was 0xffffffff, writing 0x201ff)
    pcieport 0000:86:00.0: restoring config space at offset 0x38 (was 0xffffffff, writing 0x0)
    ...

    There is also one reported case (see the bugzilla link below) where the
    missing delay causes xHCI on a Titan Ridge controller fail to runtime
    resume when USB-C dock is plugged. This does not involve pciehp but instead
    the PCI core fails to runtime resume the xHCI device:

    pcieport 0000:04:02.0: restoring config space at offset 0xc (was 0x10000, writing 0x10020)
    pcieport 0000:04:02.0: restoring config space at offset 0x4 (was 0x100000, writing 0x100406)
    xhci_hcd 0000:39:00.0: Refused to change power state, currently in D3
    xhci_hcd 0000:39:00.0: restoring config space at offset 0x3c (was 0xffffffff, writing 0x1ff)
    xhci_hcd 0000:39:00.0: restoring config space at offset 0x38 (was 0xffffffff, writing 0x0)
    ...

    Add a new function pci_bridge_wait_for_secondary_bus() that is called on
    PCI core resume and runtime resume paths accordingly if the bridge entered
    D3cold (and thus went through reset).

    This is second attempt to add the missing delays. The previous solution in
    c2bf1fc212f7 ("PCI: Add missing link delays required by the PCIe spec") was
    reverted because of two issues it caused:

    1. One system become unresponsive after S3 resume due to PME service
    spinning in pcie_pme_work_fn(). The root port in question reports that
    the xHCI sent PME but the xHCI device itself does not have PME status
    set. The PME status bit is never cleared in the root port resulting
    the indefinite loop in pcie_pme_work_fn().

    2. Slows down resume if the root/downstream port does not support Data
    Link Layer Active Reporting because pcie_wait_for_link_delay() waits
    1100 ms in that case.

    This version should avoid the above issues because we restrict the delay to
    happen only if the port went into D3cold.

    Link: https://lore.kernel.org/linux-pci/SL2P216MB01878BBCD75F21D882AEEA2880C60@SL2P216MB0187.KORP216.PROD.OUTLOOK.COM/
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=203885
    Link: https://lore.kernel.org/r/20191112091617.70282-3-mika.westerberg@linux.intel.com
    Reported-by: Kai-Heng Feng
    Tested-by: Kai-Heng Feng
    Signed-off-by: Mika Westerberg
    Signed-off-by: Bjorn Helgaas
    Signed-off-by: Sasha Levin

    Mika Westerberg
     

18 Jan, 2020

1 commit

  • commit ec6a75ef8e33fe33f963b916fd902c52a0be33ff upstream.

    Previously, pci_pm_resume_noirq() cleared the PME Status bit in the Root
    Status register only if the device had no driver or the driver did not
    implement legacy power management. It should clear PME Status regardless
    of what sort of power management the driver supports, so do this before
    checking for legacy power management.

    This affects Root Ports and Root Complex Event Collectors, for which the
    usual driver is the PCIe portdrv, which implements new power management, so
    this change is just on principle, not to fix any actual defects.

    Fixes: a39bd851dccf ("PCI/PM: Clear PCIe PME Status bit in core, not PCIe port driver")
    Link: https://lore.kernel.org/r/20191014230016.240912-4-helgaas@kernel.org
    Signed-off-by: Bjorn Helgaas
    Reviewed-by: Rafael J. Wysocki
    Signed-off-by: Greg Kroah-Hartman

    Bjorn Helgaas
     

21 Dec, 2019

1 commit

  • commit f2c33ccacb2d4bbeae2a255a7ca0cbfd03017b7c upstream.

    pci_pm_thaw_noirq() is supposed to return the device to D0 and restore its
    configuration registers, but previously it only did that for devices whose
    drivers implemented the new power management ops.

    Hibernation, e.g., via "echo disk > /sys/power/state", involves freezing
    devices, creating a hibernation image, thawing devices, writing the image,
    and powering off. The fact that thawing did not return devices with legacy
    power management to D0 caused errors, e.g., in this path:

    pci_pm_thaw_noirq
    if (pci_has_legacy_pm_support(pci_dev)) # true for Mellanox VF driver
    return pci_legacy_resume_early(dev) # ... legacy PM skips the rest
    pci_set_power_state(pci_dev, PCI_D0)
    pci_restore_state(pci_dev)
    pci_pm_thaw
    if (pci_has_legacy_pm_support(pci_dev))
    pci_legacy_resume
    drv->resume
    mlx4_resume
    ...
    pci_enable_msix_range
    ...
    if (dev->current_state != PCI_D0) #
    Signed-off-by: Bjorn Helgaas
    Reviewed-by: Rafael J. Wysocki
    Cc: stable@vger.kernel.org # v4.13+
    Signed-off-by: Greg Kroah-Hartman

    Dexuan Cui
     

16 Jul, 2019

1 commit

  • Pull PCI updates from Bjorn Helgaas:
    "Enumeration changes:

    - Evaluate PCI Boot Configuration _DSM to learn if firmware wants us
    to preserve its resource assignments (Benjamin Herrenschmidt)

    - Simplify resource distribution (Nicholas Johnson)

    - Decode 32 GT/s link speed (Gustavo Pimentel)

    Virtualization:

    - Fix incorrect caching of VF config space size (Alex Williamson)

    - Fix VF driver probing sysfs knobs (Alex Williamson)

    Peer-to-peer DMA:

    - Fix dma_virt_ops check (Logan Gunthorpe)

    Altera host bridge driver:

    - Allow building as module (Ley Foon Tan)

    Armada 8K host bridge driver:

    - add PHYs support (Miquel Raynal)

    DesignWare host bridge driver:

    - Export APIs to support removable loadable module (Vidya Sagar)

    - Enable Relaxed Ordering erratum workaround only on Tegra20 &
    Tegra30 (Vidya Sagar)

    Hyper-V host bridge driver:

    - Fix use-after-free in eject (Dexuan Cui)

    Mobiveil host bridge driver:

    - Clean up and fix many issues, including non-identify mapped
    windows, 64-bit windows, multi-MSI, class code, INTx clearing (Hou
    Zhiqiang)

    Qualcomm host bridge driver:

    - Use clk bulk API for 2.4.0 controllers (Bjorn Andersson)

    - Add QCS404 support (Bjorn Andersson)

    - Assert PERST for at least 100ms (Niklas Cassel)

    R-Car host bridge driver:

    - Add r8a774a1 DT support (Biju Das)

    Tegra host bridge driver:

    - Add support for Gen2, opportunistic UpdateFC and ACK (PCIe protocol
    details) AER, GPIO-based PERST# (Manikanta Maddireddy)

    - Fix many issues, including power-on failure cases, interrupt
    masking in suspend, UPHY settings, AFI dynamic clock gating,
    pending DLL transactions (Manikanta Maddireddy)

    Xilinx host bridge driver:

    - Fix NWL Multi-MSI programming (Bharat Kumar Gogada)

    Endpoint support:

    - Fix 64bit BAR support (Alan Mikhak)

    - Fix pcitest build issues (Alan Mikhak, Andy Shevchenko)

    Bug fixes:

    - Fix NVIDIA GPU multi-function power dependencies (Abhishek Sahu)

    - Fix NVIDIA GPU HDA enablement issue (Lukas Wunner)

    - Ignore lockdep for sysfs "remove" (Marek Vasut)

    Misc:

    - Convert docs to reST (Changbin Du, Mauro Carvalho Chehab)"

    * tag 'pci-v5.3-changes' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci: (107 commits)
    PCI: Enable NVIDIA HDA controllers
    tools: PCI: Fix installation when `make tools/pci_install`
    PCI: dwc: pci-dra7xx: Fix compilation when !CONFIG_GPIOLIB
    PCI: Fix typos and whitespace errors
    PCI: mobiveil: Fix INTx interrupt clearing in mobiveil_pcie_isr()
    PCI: mobiveil: Fix infinite-loop in the INTx handling function
    PCI: mobiveil: Move PCIe PIO enablement out of inbound window routine
    PCI: mobiveil: Add upper 32-bit PCI base address setup in inbound window
    PCI: mobiveil: Add upper 32-bit CPU base address setup in outbound window
    PCI: mobiveil: Mask out hardcoded bits in inbound/outbound windows setup
    PCI: mobiveil: Clear the control fields before updating it
    PCI: mobiveil: Add configured inbound windows counter
    PCI: mobiveil: Fix the valid check for inbound and outbound windows
    PCI: mobiveil: Clean-up program_{ib/ob}_windows()
    PCI: mobiveil: Remove an unnecessary return value check
    PCI: mobiveil: Fix error return values
    PCI: mobiveil: Refactor the MEM/IO outbound window initialization
    PCI: mobiveil: Make some register updates more readable
    PCI: mobiveil: Reformat the code for readability
    dt-bindings: PCI: mobiveil: Change gpio_slave and apb_csr to optional
    ...

    Linus Torvalds
     

08 Jul, 2019

1 commit

  • * pm-sleep:
    PM: sleep: Drop dev_pm_skip_next_resume_phases()
    ACPI: PM: Drop unused function and function header
    ACPI: PM: Introduce "poweroff" callbacks for ACPI PM domain and LPSS
    ACPI: PM: Simplify and fix PM domain hibernation callbacks
    PCI: PM: Simplify bus-level hibernation callbacks
    PM: ACPI/PCI: Resume all devices during hibernation
    kernel: power: swap: use kzalloc() instead of kmalloc() followed by memset()
    PM: sleep: Update struct wakeup_source documentation
    drivers: base: power: remove wakeup_sources_stats_dentry variable
    PM: suspend: Rename pm_suspend_via_s2idle()
    PM: sleep: Show how long dpm_suspend_start() and dpm_suspend_end() take
    PM: hibernate: powerpc: Expose pfn_is_nosave() prototype

    Rafael J. Wysocki
     

03 Jul, 2019

2 commits

  • After a previous change causing all runtime-suspended PCI devices
    to be resumed before creating a snapshot image of memory during
    hibernation, it is not necessary to worry about the case in which
    them might be left in runtime-suspend any more, so get rid of the
    code related to that from bus-level PCI hibernation callbacks.

    Signed-off-by: Rafael J. Wysocki
    Reviewed-by: Mika Westerberg
    Reviewed-by: Hans de Goede

    Rafael J. Wysocki
     
  • Both the PCI bus type and the ACPI PM domain avoid resuming
    runtime-suspended devices with DPM_FLAG_SMART_SUSPEND set during
    hibernation (before creating the snapshot image of system memory),
    but that turns out to be a mistake. It leads to functional issues
    and adds complexity that's hard to justify.

    For this reason, resume all runtime-suspended PCI devices and all
    devices in the ACPI PM domains before creating a snapshot image of
    system memory during hibernation.

    Fixes: 05087360fd7a (ACPI / PM: Take SMART_SUSPEND driver flag into account)
    Fixes: c4b65157aeef (PCI / PM: Take SMART_SUSPEND driver flag into account)
    Link: https://lore.kernel.org/linux-acpi/917d4399-2e22-67b1-9d54-808561f9083f@uwyo.edu/T/#maf065fe6e4974f2a9d79f332ab99dfaba635f64c
    Reported-by: Robert R. Howell
    Tested-by: Robert R. Howell
    Signed-off-by: Rafael J. Wysocki
    Reviewed-by: Mika Westerberg
    Reviewed-by: Hans de Goede

    Rafael J. Wysocki
     

30 Jun, 2019

1 commit


27 Jun, 2019

2 commits

  • In pci_pm_complete() there are checks to decide whether or not to
    resume devices that were left in runtime-suspend during the preceding
    system-wide transition into a sleep state. They involve checking the
    current power state of the device and comparing it with the power
    state of it set before the preceding system-wide transition, but the
    platform component of the device's power state is not handled
    correctly in there.

    Namely, on platforms with ACPI, the device power state information
    needs to be updated with care, so that the reference counters of
    power resources used by the device (if any) are set to ensure that
    the refreshed power state of it will be maintained going forward.

    To that end, introduce a new ->refresh_state() platform PM callback
    for PCI devices, for asking the platform to refresh the device power
    state data and ensure that the corresponding power state will be
    maintained going forward, make it invoke acpi_device_update_power()
    (for devices with ACPI PM) on platforms with ACPI and make
    pci_pm_complete() use it, through a new pci_refresh_power_state()
    wrapper function.

    Fixes: a0d2a959d3da (PCI: Avoid unnecessary resume after direct-complete)
    Signed-off-by: Rafael J. Wysocki
    Reviewed-by: Mika Westerberg

    Rafael J. Wysocki
     
  • There are platforms that do not call pm_set_suspend_via_firmware(),
    so pm_suspend_via_firmware() returns 'false' on them, but the power
    states of PCI devices (PCIe ports in particular) are changed as a
    result of powering down core platform components during system-wide
    suspend. Thus the pm_suspend_via_firmware() checks in
    pci_pm_suspend_noirq() and pci_pm_resume_noirq() introduced by
    commit 3e26c5feed2a ("PCI: PM: Skip devices in D0 for suspend-to-
    idle") are not sufficient to determine that devices left in D0
    during suspend will remain in D0 during resume and so the bus-level
    power management can be skipped for them.

    For this reason, introduce a new global suspend flag,
    PM_SUSPEND_FLAG_NO_PLATFORM, set it for suspend-to-idle only
    and replace the pm_suspend_via_firmware() checks mentioned above
    with checks against this flag.

    Fixes: 3e26c5feed2a ("PCI: PM: Skip devices in D0 for suspend-to-idle")
    Reported-by: Jon Hunter
    Tested-by: Jon Hunter
    Signed-off-by: Rafael J. Wysocki
    Tested-by: Mika Westerberg
    Reviewed-by: Mika Westerberg

    Rafael J. Wysocki
     

24 Jun, 2019

1 commit


17 Jun, 2019

1 commit

  • The code in pci_dev_keep_suspended() is relatively hard to follow due
    to the negative checks in it and in its callers and the function has
    a possible side-effect (disabling the PME) which doesn't really match
    its role.

    For this reason, move the PME disabling from pci_dev_keep_suspended()
    to a separate function and change the semantics (and name) of the
    rest of it, so that 'true' is returned when the device needs to be
    resumed (and not the other way around). Change the callers of
    pci_dev_keep_suspended() accordingly.

    While at it, make the code flow in pci_pm_poweroff() reflect the
    pci_pm_suspend() more closely to avoid arbitrary differences between
    them.

    This is a cosmetic change with no intention to alter behavior.

    Signed-off-by: Rafael J. Wysocki
    Reviewed-by: Mika Westerberg

    Rafael J. Wysocki
     

14 Jun, 2019

2 commits

  • Commit d491f2b75237 ("PCI: PM: Avoid possible suspend-to-idle issue")
    attempted to avoid a problem with devices whose drivers want them to
    stay in D0 over suspend-to-idle and resume, but it did not go as far
    as it should with that.

    Namely, first of all, the power state of a PCI bridge with a
    downstream device in D0 must be D0 (based on the PCI PM spec r1.2,
    sec 6, table 6-1, if the bridge is not in D0, there can be no PCI
    transactions on its secondary bus), but that is not actively enforced
    during system-wide PM transitions, so use the skip_bus_pm flag
    introduced by commit d491f2b75237 for that.

    Second, the configuration of devices left in D0 (whatever the reason)
    during suspend-to-idle need not be changed and attempting to put them
    into D0 again by force is pointless, so explicitly avoid doing that.

    Fixes: d491f2b75237 ("PCI: PM: Avoid possible suspend-to-idle issue")
    Reported-by: Kai-Heng Feng
    Signed-off-by: Rafael J. Wysocki
    Reviewed-by: Mika Westerberg
    Tested-by: Kai-Heng Feng

    Rafael J. Wysocki
     
  • Commit 0e7df22401a3 ("PCI: Add sysfs sriov_drivers_autoprobe to control
    VF driver binding") introduced the sriov_drivers_autoprobe attribute
    which allows users to prevent the kernel from automatically probing a
    driver for new VFs as they are created. This allows VFs to be spawned
    without automatically binding the new device to a host driver, such as
    in cases where the user intends to use the device only with a meta
    driver like vfio-pci. However, the current implementation prevents any
    use of drivers_probe with the VF while sriov_drivers_autoprobe=0. This
    blocks the now current general practice of setting driver_override
    followed by using drivers_probe to bind a device to a specified driver.

    The kernel never automatically sets a driver_override therefore it seems
    we can assume a driver_override reflects the intent of the user. Also,
    probing a device using a driver_override match seems outside the scope
    of the 'auto' part of sriov_drivers_autoprobe. Therefore, let's allow
    driver_override matches regardless of sriov_drivers_autoprobe, which we
    can do by simply testing if a driver_override is set for a device as a
    'can probe' condition.

    Fixes: 0e7df22401a3 ("PCI: Add sysfs sriov_drivers_autoprobe to control VF driver binding")
    Link: https://lore.kernel.org/lkml/155742996741.21878.569845487290798703.stgit@gimli.home
    Link: https://lore.kernel.org/linux-pci/155672991496.20698.4279330795743262888.stgit@gimli.home/T/#u
    Signed-off-by: Alex Williamson
    Signed-off-by: Bjorn Helgaas

    Alex Williamson
     

30 May, 2019

1 commit

  • Commit 0e7df22401a3 ("PCI: Add sysfs sriov_drivers_autoprobe to control
    VF driver binding") allows the user to specify that drivers for VFs of
    a PF should not be probed, but it actually causes pci_device_probe() to
    return success back to the driver core in this case. Therefore by all
    sysfs appearances the device is bound to a driver, the driver link from
    the device exists as does the device link back from the driver, yet the
    driver's probe function is never called on the device. We also fail to
    do any sort of cleanup when we're prohibited from probing the device,
    the IRQ setup remains in place and we even hold a device reference.

    Instead, abort with errno before any setup or references are taken when
    pci_device_can_probe() prevents us from trying to probe the device.

    Link: https://lore.kernel.org/lkml/155672991496.20698.4279330795743262888.stgit@gimli.home
    Fixes: 0e7df22401a3 ("PCI: Add sysfs sriov_drivers_autoprobe to control VF driver binding")
    Signed-off-by: Alex Williamson
    Signed-off-by: Bjorn Helgaas

    Alex Williamson
     

27 May, 2019

1 commit

  • If a PCI driver leaves the device handled by it in D0 and calls
    pci_save_state() on the device in its ->suspend() or ->suspend_late()
    callback, it can expect the device to stay in D0 over the whole
    s2idle cycle. However, that may not be the case if there is a
    spurious wakeup while the system is suspended, because in that case
    pci_pm_suspend_noirq() will run again after pci_pm_resume_noirq()
    which calls pci_restore_state(), via pci_pm_default_resume_early(),
    so state_saved is cleared and the second iteration of
    pci_pm_suspend_noirq() will invoke pci_prepare_to_sleep() which
    may change the power state of the device.

    To avoid that, add a new internal flag, skip_bus_pm, that will be set
    by pci_pm_suspend_noirq() when it runs for the first time during the
    given system suspend-resume cycle if the state of the device has
    been saved already and the device is still in D0. Setting that flag
    will cause the next iterations of pci_pm_suspend_noirq() to set
    state_saved for pci_pm_resume_noirq(), so that it always restores the
    device state from the originally saved data, and avoid calling
    pci_prepare_to_sleep() for the device.

    Fixes: 33e4f80ee69b ("ACPI / PM: Ignore spurious SCI wakeups from suspend-to-idle")
    Signed-off-by: Rafael J. Wysocki
    Reviewed-by: Keith Busch
    Reviewed-by: Mika Westerberg

    Rafael J. Wysocki
     

08 May, 2019

1 commit

  • Pull printk updates from Petr Mladek:

    - Allow state reset of printk_once() calls.

    - Prevent crashes when dereferencing invalid pointers in vsprintf().
    Only the first byte is checked for simplicity.

    - Make vsprintf warnings consistent and inlined.

    - Treewide conversion of obsolete %pf, %pF to %ps, %pF printf
    modifiers.

    - Some clean up of vsprintf and test_printf code.

    * tag 'printk-for-5.2' of git://git.kernel.org/pub/scm/linux/kernel/git/pmladek/printk:
    lib/vsprintf: Make function pointer_string static
    vsprintf: Limit the length of inlined error messages
    vsprintf: Avoid confusion between invalid address and value
    vsprintf: Prevent crash when dereferencing invalid pointers
    vsprintf: Consolidate handling of unknown pointer specifiers
    vsprintf: Factor out %pO handler as kobject_string()
    vsprintf: Factor out %pV handler as va_format()
    vsprintf: Factor out %p[iI] handler as ip_addr_string()
    vsprintf: Do not check address of well-known strings
    vsprintf: Consistent %pK handling for kptr_restrict == 0
    vsprintf: Shuffle restricted_pointer()
    printk: Tie printk_once / printk_deferred_once into .data.once for reset
    treewide: Switch printk users from %pf and %pF to %ps and %pS, respectively
    lib/test_printf: Switch to bitmap_zalloc()

    Linus Torvalds
     

09 Apr, 2019

1 commit

  • %pF and %pf are functionally equivalent to %pS and %ps conversion
    specifiers. The former are deprecated, therefore switch the current users
    to use the preferred variant.

    The changes have been produced by the following command:

    git grep -l '%p[fF]' | grep -v '^\(tools\|Documentation\)/' | \
    while read i; do perl -i -pe 's/%pf/%ps/g; s/%pF/%pS/g;' $i; done

    And verifying the result.

    Link: http://lkml.kernel.org/r/20190325193229.23390-1-sakari.ailus@linux.intel.com
    Cc: Andy Shevchenko
    Cc: linux-arm-kernel@lists.infradead.org
    Cc: sparclinux@vger.kernel.org
    Cc: linux-um@lists.infradead.org
    Cc: xen-devel@lists.xenproject.org
    Cc: linux-acpi@vger.kernel.org
    Cc: linux-pm@vger.kernel.org
    Cc: drbd-dev@lists.linbit.com
    Cc: linux-block@vger.kernel.org
    Cc: linux-mmc@vger.kernel.org
    Cc: linux-nvdimm@lists.01.org
    Cc: linux-pci@vger.kernel.org
    Cc: linux-scsi@vger.kernel.org
    Cc: linux-btrfs@vger.kernel.org
    Cc: linux-f2fs-devel@lists.sourceforge.net
    Cc: linux-mm@kvack.org
    Cc: ceph-devel@vger.kernel.org
    Cc: netdev@vger.kernel.org
    Signed-off-by: Sakari Ailus
    Acked-by: David Sterba (for btrfs)
    Acked-by: Mike Rapoport (for mm/memblock.c)
    Acked-by: Bjorn Helgaas (for drivers/pci)
    Acked-by: Rafael J. Wysocki
    Signed-off-by: Petr Mladek

    Sakari Ailus
     

09 Feb, 2019

1 commit

  • The double underscore types are meant for compatibility in userspace
    headers which does not apply here. Therefore, change to use the standard
    no-underscore types.

    The origin of the double underscore types dates back to before the git era
    so I was not able to find a commit to see the original justification.

    Signed-off-by: Logan Gunthorpe
    Signed-off-by: Bjorn Helgaas

    Logan Gunthorpe
     

06 Jan, 2019

1 commit

  • Pull PCI updates from Bjorn Helgaas:

    - Remove unused lists from ASPM pcie_link_state (Frederick Lawler)

    - Fix Broadcom CNB20LE host bridge unintended sign extension (Colin Ian
    King)

    - Expand Kconfig "PF" acronyms (Randy Dunlap)

    - Update MAINTAINERS for arch/x86/kernel/early-quirks.c (Bjorn Helgaas)

    - Add missing include to drivers/pci.h (Alexandru Gagniuc)

    - Override Synopsys USB 3.x HAPS device class so dwc3-haps can claim it
    instead of xhci (Thinh Nguyen)

    - Clean up P2PDMA documentation (Randy Dunlap)

    - Allow runtime PM even if driver doesn't supply callbacks (Jarkko
    Nikula)

    - Remove status check after submitting Switchtec MRPC Firmware Download
    commands to avoid Completion Timeouts (Kelvin Cao)

    - Set Switchtec coherent DMA mask to allow 64-bit DMA (Boris Glimcher)

    - Fix Switchtec SWITCHTEC_IOCTL_EVENT_IDX_ALL flag overwrite issue
    (Joey Zhang)

    - Enable write combining for Switchtec MRPC Input buffers (Kelvin Cao)

    - Add Switchtec MRPC DMA mode support (Wesley Sheng)

    - Skip VF scanning on powerpc, which does this in firmware (Sebastian
    Ott)

    - Add Amlogic Meson PCIe controller driver and DT bindings (Yue Wang)

    - Constify histb dw_pcie_host_ops structure (Julia Lawall)

    - Support multiple power domains for imx6 (Leonard Crestez)

    - Constify layerscape driver data (Stefan Agner)

    - Update imx6 Kconfig to allow imx6 PCIe in imx7 kernel (Trent Piepho)

    - Support armada8k GPIO reset (Baruch Siach)

    - Support suspend/resume support on imx6 (Leonard Crestez)

    - Don't hard-code DesignWare DBI/ATU offst (Stephen Warren)

    - Skip i.MX6 PHY setup on i.MX7D (Andrey Smirnov)

    - Remove Jianguo Sun from HiSilicon STB maintainers (Lorenzo Pieralisi)

    - Mask DesignWare interrupts instead of disabling them to avoid lost
    interrupts (Marc Zyngier)

    - Add locking when acking DesignWare interrupts (Marc Zyngier)

    - Ack DesignWare interrupts in the proper callbacks (Marc Zyngier)

    - Use devm resource parser in mediatek (Honghui Zhang)

    - Remove unused mediatek "num-lanes" DT property (Honghui Zhang)

    - Add UniPhier PCIe controller driver and DT bindings (Kunihiko
    Hayashi)

    - Enable MSI for imx6 downstream components (Richard Zhu)

    * tag 'pci-v4.21-changes' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci: (40 commits)
    PCI: imx: Enable MSI from downstream components
    s390/pci: skip VF scanning
    PCI/IOV: Add flag so platforms can skip VF scanning
    PCI/IOV: Factor out sriov_add_vfs()
    PCI: uniphier: Add UniPhier PCIe host controller support
    dt-bindings: PCI: Add UniPhier PCIe host controller description
    PCI: amlogic: Add the Amlogic Meson PCIe controller driver
    dt-bindings: PCI: meson: add DT bindings for Amlogic Meson PCIe controller
    arm64: dts: mt7622: Remove un-used property for PCIe
    arm: dts: mt7623: Remove un-used property for PCIe
    dt-bindings: PCI: MediaTek: Remove un-used property
    PCI: mediatek: Remove un-used variant in struct mtk_pcie_port
    MAINTAINERS: Remove Jianguo Sun from HiSilicon STB DWC entry
    PCI: dwc: Don't hard-code DBI/ATU offset
    PCI: imx: Add imx6sx suspend/resume support
    PCI: armada8k: Add support for gpio controlled reset signal
    PCI: dwc: Adjust Kconfig to allow IMX6 PCIe host on IMX7
    PCI: dwc: layerscape: Constify driver data
    PCI: imx: Add multi-pd support
    PCI: Override Synopsys USB 3.x HAPS device class
    ...

    Linus Torvalds
     

15 Dec, 2018

1 commit

  • Clang warns:

    drivers/pci/pci-driver.c:1603:21: error: unused variable 'attr'
    [-Werror,-Wunused-variable]

    Commit e5361ca29f2f ("ACPI / scan: Refactor _CCA enforcement") removed
    attr's use and replaced it with its assigned value so it is no longer
    needed.

    Signed-off-by: Nathan Chancellor
    Signed-off-by: Christoph Hellwig

    Nathan Chancellor
     

14 Dec, 2018

1 commit

  • Rather than checking the DMA attribute at each callsite, just pass it
    through for acpi_dma_configure() to handle directly. That can then deal
    with the relatively exceptional DEV_DMA_NOT_SUPPORTED case by explicitly
    installing dummy DMA ops instead of just skipping setup entirely. This
    will then free up the dev->dma_ops == NULL case for some valuable
    fastpath optimisations.

    Signed-off-by: Robin Murphy
    Reviewed-by: Rafael J. Wysocki
    Acked-by: Jesper Dangaard Brouer
    Tested-by: Jesper Dangaard Brouer
    Signed-off-by: Christoph Hellwig
    Tested-by: Tony Luck

    Robin Murphy
     

13 Dec, 2018

1 commit

  • a9c8088c7988 ("i2c: i801: Don't restore config registers on runtime PM")
    nullified the runtime PM suspend/resume callback pointers while keeping the
    runtime PM enabled.

    This caused the SMBus PCI device to stay in D0 with
    /sys/devices/.../power/runtime_status showing "error" when the runtime PM
    framework attempted to autosuspend the device. This is due to PCI bus
    runtime PM, which checks for driver runtime PM callbacks and returns
    -ENOSYS if they are not set.

    Since i2c-i801.c doesn't need to do anything device-specific for runtime
    PM, Jean Delvare proposed this be fixed in the PCI core rather than adding
    dummy runtime PM callback functions in the PCI drivers.

    Change pci_pm_runtime_suspend()/pci_pm_runtime_resume() so they allow
    changing the PCI device power state during runtime PM transitions even if
    the driver supplies no runtime PM callbacks.

    This fixes the runtime PM regression on i2c-i801.c.

    It is not obvious why the code previously required the runtime PM
    callbacks. The test has been there since the code was introduced by
    6cbf82148ff2 ("PCI PM: Run-time callbacks for PCI bus type").

    On the other hand, a similar change was done to generic runtime PM
    callbacks in 05aa55dddb9e ("PM / Runtime: Lenient generic runtime pm
    callbacks").

    Fixes: a9c8088c7988 ("i2c: i801: Don't restore config registers on runtime PM")
    Reported-by: Mika Westerberg
    Signed-off-by: Jarkko Nikula
    Signed-off-by: Bjorn Helgaas
    Reviewed-by: Jean Delvare
    Reviewed-by: Rafael J. Wysocki
    Cc: stable@vger.kernel.org # v4.18+

    Jarkko Nikula
     

16 Aug, 2018

1 commit

  • - Mark fall-through switch cases before enabling -Wimplicit-fallthrough
    (Gustavo A. R. Silva)

    - Move DMA-debug PCI init from arch code to PCI core (Christoph Hellwig)

    - Fix pci_request_irq() usage of IRQF_ONESHOT when no handler is supplied
    (Heiner Kallweit)

    - Unify PCI and DMA direction #defines (Shunyong Yang)

    - Add PCI_DEVICE_DATA() macro (Andy Shevchenko)

    - Check for VPD completion before checking for timeout (Bert Kenward)

    - Limit Netronome NFP5000 config space size to work around erratum (Jakub
    Kicinski)

    * pci/misc:
    PCI: Limit config space size for Netronome NFP5000
    PCI/VPD: Check for VPD access completion before checking for timeout
    PCI: Add PCI_DEVICE_DATA() macro to fully describe device ID entry
    PCI: Unify PCI and normal DMA direction definitions
    PCI: Use IRQF_ONESHOT if pci_request_irq() called with no handler
    PCI: Call dma_debug_add_bus() for pci_bus_type from PCI core
    PCI: Mark fall-through switch cases before enabling -Wimplicit-fallthrough

    # Conflicts:
    # drivers/pci/hotplug/pciehp_ctrl.c

    Bjorn Helgaas
     

31 Jul, 2018

1 commit

  • There is nothing arch-specific about PCI or dma-debug, so call
    dma_debug_add_bus() from the PCI core just after registering the bus type.

    Most of dma-debug is already generic; this just adds reporting of pending
    dma-allocations on driver unload for arches other than powerpc, sh, and
    x86.

    Signed-off-by: Christoph Hellwig
    Signed-off-by: Bjorn Helgaas
    Acked-by: Thomas Gleixner
    Acked-by: Michael Ellerman (powerpc)

    Christoph Hellwig
     

30 Jun, 2018

1 commit

  • The TotalVFs register in the SR-IOV capability is the hardware limit on the
    number of VFs. A PF driver can limit the number of VFs further with
    pci_sriov_set_totalvfs(). When the PF driver is removed, reset any VF
    limit that was imposed by the driver because that limit may not apply to
    other drivers.

    Before 8d85a7a4f2c9 ("PCI/IOV: Allow PF drivers to limit total_VFs to 0"),
    pci_sriov_set_totalvfs(pdev, 0) meant "we can enable TotalVFs virtual
    functions", and the nfp driver used that to remove the VF limit when the
    driver unloads.

    8d85a7a4f2c9 broke that because instead of removing the VF limit,
    pci_sriov_set_totalvfs(pdev, 0) actually sets the limit to zero, and that
    limit persists even if another driver is loaded.

    We could fix that by making the nfp driver reset the limit when it unloads,
    but it seems more robust to do it in the PCI core instead of relying on the
    driver.

    The regression scenario is:

    nfp_pci_probe (driver 1)
    ...
    nfp_pci_remove
    pci_sriov_set_totalvfs(pf->pdev, 0) # limits VFs to 0

    ...
    nfp_pci_probe (driver 2)
    nfp_rtsym_read_le("nfd_vf_cfg_max_vfs")
    # no VF limit from firmware

    Now driver 2 is broken because the VF limit is still 0 from driver 1.

    Fixes: 8d85a7a4f2c9 ("PCI/IOV: Allow PF drivers to limit total_VFs to 0")
    Signed-off-by: Jakub Kicinski
    [bhelgaas: changelog, rename functions]
    Signed-off-by: Bjorn Helgaas

    Jakub Kicinski
     

08 Jun, 2018

1 commit

  • Pull PCI updates from Bjorn Helgaas:

    - unify AER decoding for native and ACPI CPER sources (Alexandru
    Gagniuc)

    - add TLP header info to AER tracepoint (Thomas Tai)

    - add generic pcie_wait_for_link() interface (Oza Pawandeep)

    - handle AER ERR_FATAL by removing and re-enumerating devices, as
    Downstream Port Containment does (Oza Pawandeep)

    - factor out common code between AER and DPC recovery (Oza Pawandeep)

    - stop triggering DPC for ERR_NONFATAL errors (Oza Pawandeep)

    - share ERR_FATAL recovery path between AER and DPC (Oza Pawandeep)

    - disable ASPM L1.2 substate if we don't have LTR (Bjorn Helgaas)

    - respect platform ownership of LTR (Bjorn Helgaas)

    - clear interrupt status in top half to avoid interrupt storm (Oza
    Pawandeep)

    - neaten pci=earlydump output (Andy Shevchenko)

    - avoid errors when extended config space inaccessible (Gilles Buloz)

    - prevent sysfs disable of device while driver attached (Christoph
    Hellwig)

    - use core interface to report PCIe link properties in bnx2x, bnxt_en,
    cxgb4, ixgbe (Bjorn Helgaas)

    - remove unused pcie_get_minimum_link() (Bjorn Helgaas)

    - fix use-before-set error in ibmphp (Dan Carpenter)

    - fix pciehp timeouts caused by Command Completed errata (Bjorn
    Helgaas)

    - fix refcounting in pnv_php hotplug (Julia Lawall)

    - clear pciehp Presence Detect and Data Link Layer Status Changed on
    resume so we don't miss hotplug events (Mika Westerberg)

    - only request pciehp control if we support it, so platform can use
    ACPI hotplug otherwise (Mika Westerberg)

    - convert SHPC to be builtin only (Mika Westerberg)

    - request SHPC control via _OSC if we support it (Mika Westerberg)

    - simplify SHPC handoff from firmware (Mika Westerberg)

    - fix an SHPC quirk that mistakenly included *all* AMD bridges as well
    as devices from any vendor with device ID 0x7458 (Bjorn Helgaas)

    - assign a bus number even to non-native hotplug bridges to leave
    space for acpiphp additions, to fix a common Thunderbolt xHCI
    hot-add failure (Mika Westerberg)

    - keep acpiphp from scanning native hotplug bridges, to fix common
    Thunderbolt hot-add failures (Mika Westerberg)

    - improve "partially hidden behind bridge" messages from core (Mika
    Westerberg)

    - add macros for PCIe Link Control 2 register (Frederick Lawler)

    - replace IB/hfi1 custom macros with PCI core versions (Frederick
    Lawler)

    - remove dead microblaze and xtensa code (Bjorn Helgaas)

    - use dev_printk() when possible in xtensa and mips (Bjorn Helgaas)

    - remove unused pcie_port_acpi_setup() and portdrv_acpi.c (Bjorn
    Helgaas)

    - add managed interface to get PCI host bridge resources from OF (Jan
    Kiszka)

    - add support for unbinding generic PCI host controller (Jan Kiszka)

    - fix memory leaks when unbinding generic PCI host controller (Jan
    Kiszka)

    - request legacy VGA framebuffer only for VGA devices to avoid false
    device conflicts (Bjorn Helgaas)

    - turn on PCI_COMMAND_IO & PCI_COMMAND_MEMORY in pci_enable_device()
    like everybody else, not in pcibios_fixup_bus() (Bjorn Helgaas)

    - add generic enable function for simple SR-IOV hardware (Alexander
    Duyck)

    - use generic SR-IOV enable for ena, nvme (Alexander Duyck)

    - add ACS quirk for Intel 7th & 8th Gen mobile (Alex Williamson)

    - add ACS quirk for Intel 300 series (Mika Westerberg)

    - enable register clock for Armada 7K/8K (Gregory CLEMENT)

    - reduce Keystone "link already up" log level (Fabio Estevam)

    - move private DT functions to drivers/pci/ (Rob Herring)

    - factor out dwc CONFIG_PCI Kconfig dependencies (Rob Herring)

    - add DesignWare support to the endpoint test driver (Gustavo
    Pimentel)

    - add DesignWare support for endpoint mode (Gustavo Pimentel)

    - use devm_ioremap_resource() instead of devm_ioremap() in dra7xx and
    artpec6 (Gustavo Pimentel)

    - fix Qualcomm bitwise NOT issue (Dan Carpenter)

    - add Qualcomm runtime PM support (Srinivas Kandagatla)

    - fix DesignWare enumeration below bridges (Koen Vandeputte)

    - use usleep() instead of mdelay() in endpoint test (Jia-Ju Bai)

    - add configfs entries for pci_epf_driver device IDs (Kishon Vijay
    Abraham I)

    - clean up pci_endpoint_test driver (Gustavo Pimentel)

    - update Layerscape maintainer email addresses (Minghuan Lian)

    - add COMPILE_TEST to improve build test coverage (Rob Herring)

    - fix Hyper-V bus registration failure caused by domain/serial number
    confusion (Sridhar Pitchai)

    - improve Hyper-V refcounting and coding style (Stephen Hemminger)

    - avoid potential Hyper-V hang waiting for a response that will never
    come (Dexuan Cui)

    - implement Mediatek chained IRQ handling (Honghui Zhang)

    - fix vendor ID & class type for Mediatek MT7622 (Honghui Zhang)

    - add Mobiveil PCIe host controller driver (Subrahmanya Lingappa)

    - add Mobiveil MSI support (Subrahmanya Lingappa)

    - clean up clocks, MSI, IRQ mappings in R-Car probe failure paths
    (Marek Vasut)

    - poll more frequently (5us vs 5ms) while waiting for R-Car data link
    active (Marek Vasut)

    - use generic OF parsing interface in R-Car (Vladimir Zapolskiy)

    - add R-Car V3H (R8A77980) "compatible" string (Sergei Shtylyov)

    - add R-Car gen3 PHY support (Sergei Shtylyov)

    - improve R-Car PHYRDY polling (Sergei Shtylyov)

    - clean up R-Car macros (Marek Vasut)

    - use runtime PM for R-Car controller clock (Dien Pham)

    - update arm64 defconfig for Rockchip (Shawn Lin)

    - refactor Rockchip code to facilitate both root port and endpoint
    mode (Shawn Lin)

    - add Rockchip endpoint mode driver (Shawn Lin)

    - support VMD "membar shadow" feature (Jon Derrick)

    - support VMD bus number offsets (Jon Derrick)

    - add VMD "no AER source ID" quirk for more device IDs (Jon Derrick)

    - remove unnecessary host controller CONFIG_PCIEPORTBUS Kconfig
    selections (Bjorn Helgaas)

    - clean up quirks.c organization and whitespace (Bjorn Helgaas)

    * tag 'pci-v4.18-changes' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci: (144 commits)
    PCI/AER: Replace struct pcie_device with pci_dev
    PCI/AER: Remove unused parameters
    PCI: qcom: Include gpio/consumer.h
    PCI: Improve "partially hidden behind bridge" log message
    PCI: Improve pci_scan_bridge() and pci_scan_bridge_extend() doc
    PCI: Move resource distribution for single bridge outside loop
    PCI: Account for all bridges on bus when distributing bus numbers
    ACPI / hotplug / PCI: Drop unnecessary parentheses
    ACPI / hotplug / PCI: Mark stale PCI devices disconnected
    ACPI / hotplug / PCI: Don't scan bridges managed by native hotplug
    PCI: hotplug: Add hotplug_is_native()
    PCI: shpchp: Add shpchp_is_native()
    PCI: shpchp: Fix AMD POGO identification
    PCI: mobiveil: Add MSI support
    PCI: mobiveil: Add Mobiveil PCIe Host Bridge IP driver
    PCI/AER: Decode Error Source Requester ID
    PCI/AER: Remove aer_recover_work_func() forward declaration
    PCI/DPC: Use the generic pcie_do_fatal_recovery() path
    PCI/AER: Pass service type to pcie_do_fatal_recovery()
    PCI/DPC: Disable ERR_NONFATAL handling by DPC
    ...

    Linus Torvalds
     

06 Jun, 2018

1 commit

  • Pull power management updates from Rafael Wysocki:
    "These include a significant update of the generic power domains
    (genpd) and Operating Performance Points (OPP) frameworks, mostly
    related to the introduction of power domain performance levels,
    cpufreq updates (new driver for Qualcomm Kryo processors, updates of
    the existing drivers, some core fixes, schedutil governor
    improvements), PCI power management fixes, ACPI workaround for
    EC-based wakeup events handling on resume from suspend-to-idle, and
    major updates of the turbostat and pm-graph utilities.

    Specifics:

    - Introduce power domain performance levels into the the generic
    power domains (genpd) and Operating Performance Points (OPP)
    frameworks (Viresh Kumar, Rajendra Nayak, Dan Carpenter).

    - Fix two issues in the runtime PM framework related to the
    initialization and removal of devices using device links (Ulf
    Hansson).

    - Clean up the initialization of drivers for devices in PM domains
    (Ulf Hansson, Geert Uytterhoeven).

    - Fix a cpufreq core issue related to the policy sysfs interface
    causing CPU online to fail for CPUs sharing one cpufreq policy in
    some situations (Tao Wang).

    - Make it possible to use platform-specific suspend/resume hooks in
    the cpufreq-dt driver and make the Armada 37xx DVFS use that
    feature (Viresh Kumar, Miquel Raynal).

    - Optimize policy transition notifications in cpufreq (Viresh Kumar).

    - Improve the iowait boost mechanism in the schedutil cpufreq
    governor (Patrick Bellasi).

    - Improve the handling of deferred frequency updates in the schedutil
    cpufreq governor (Joel Fernandes, Dietmar Eggemann, Rafael Wysocki,
    Viresh Kumar).

    - Add a new cpufreq driver for Qualcomm Kryo (Ilia Lin).

    - Fix and clean up some cpufreq drivers (Colin Ian King, Dmitry
    Osipenko, Doug Smythies, Luc Van Oostenryck, Simon Horman, Viresh
    Kumar).

    - Fix the handling of PCI devices with the DPM_SMART_SUSPEND flag set
    and update stale comments in the PCI core PM code (Rafael Wysocki).

    - Work around an issue related to the handling of EC-based wakeup
    events in the ACPI PM core during resume from suspend-to-idle if
    the EC has been put into the low-power mode (Rafael Wysocki).

    - Improve the handling of wakeup source objects in the PM core (Doug
    Berger, Mahendran Ganesh, Rafael Wysocki).

    - Update the driver core to prevent deferred probe from breaking
    suspend/resume ordering (Feng Kan).

    - Clean up the PM core somewhat (Bjorn Helgaas, Ulf Hansson, Rafael
    Wysocki).

    - Make the core suspend/resume code and cpufreq support the RT patch
    (Sebastian Andrzej Siewior, Thomas Gleixner).

    - Consolidate the PM QoS handling in cpuidle governors (Rafael
    Wysocki).

    - Fix a possible crash in the hibernation core (Tetsuo Handa).

    - Update the rockchip-io Adaptive Voltage Scaling (AVS) driver (David
    Wu).

    - Update the turbostat utility (fixes, cleanups, new CPU IDs, new
    command line options, built-in "Low Power Idle" counters support,
    new POLL and POLL% columns) and add an entry for it to MAINTAINERS
    (Len Brown, Artem Bityutskiy, Chen Yu, Laura Abbott, Matt Turner,
    Prarit Bhargava, Srinivas Pandruvada).

    - Update the pm-graph to version 5.1 (Todd Brandt).

    - Update the intel_pstate_tracer utility (Doug Smythies)"

    * tag 'pm-4.18-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm: (128 commits)
    tools/power turbostat: update version number
    tools/power turbostat: Add Node in output
    tools/power turbostat: add node information into turbostat calculations
    tools/power turbostat: remove num_ from cpu_topology struct
    tools/power turbostat: rename num_cores_per_pkg to num_cores_per_node
    tools/power turbostat: track thread ID in cpu_topology
    tools/power turbostat: Calculate additional node information for a package
    tools/power turbostat: Fix node and siblings lookup data
    tools/power turbostat: set max_num_cpus equal to the cpumask length
    tools/power turbostat: if --num_iterations, print for specific number of iterations
    tools/power turbostat: Add Cannon Lake support
    tools/power turbostat: delete duplicate #defines
    x86: msr-index.h: Correct SNB_C1/C3_AUTO_UNDEMOTE defines
    tools/power turbostat: Correct SNB_C1/C3_AUTO_UNDEMOTE defines
    tools/power turbostat: add POLL and POLL% column
    tools/power turbostat: Fix --hide Pk%pc10
    tools/power turbostat: Build-in "Low Power Idle" counters support
    tools/power turbostat: Don't make man pages executable
    tools/power turbostat: remove blank lines
    tools/power turbostat: a small C-states dump readability immprovement
    ...

    Linus Torvalds
     

24 May, 2018

1 commit

  • The state_saved flag should not be cleared in pci_pm_suspend() if the
    given device is going to remain suspended, or the device's config
    space will not be restored properly during the subsequent resume.

    Namely, if the device is going to stay in suspend, both the late
    and noirq callbacks return early for it, so if its state_saved flag
    is cleared in pci_pm_suspend(), it will remain unset throughout the
    remaining part of suspend and resume and pci_restore_state() called
    for the device going forward will return without doing anything.

    For this reason, change pci_pm_suspend() to only clear state_saved
    if the given device is not going to remain suspended. [This is
    analogous to what commit ae860a19f37c (PCI / PM: Do not clear
    state_saved in pci_pm_freeze() when smart suspend is set) did for
    hibernation.]

    Fixes: c4b65157aeef (PCI / PM: Take SMART_SUSPEND driver flag into account)
    Cc: 4.15+ # 4.15+
    Signed-off-by: Rafael J. Wysocki
    Reviewed-by: Mika Westerberg
    Acked-by: Bjorn Helgaas

    Rafael J. Wysocki
     

18 May, 2018

1 commit

  • Move the error reporting callbacks from aerdrv_core.c to err.c, where they
    can be used by DPC in addition to AER.

    As part of aerdrv_core.c, these callbacks were built under CONFIG_PCIEAER.
    Moving them to the new err.c means they will now be built under
    CONFIG_PCIEPORTBUS, so adjust the definition of pci_uevent_ers() to match.

    Signed-off-by: Oza Pawandeep
    [bhelgaas: in reset_link(), initialize "driver" even if CONFIG_PCIEAER is
    unset, update pci_uevent_ers() #ifdef wrapper]
    Signed-off-by: Bjorn Helgaas

    Oza Pawandeep
     

03 May, 2018

2 commits

  • With each bus implementing its own DMA configuration callback, there is no
    need for bus to explicitly set the force_dma flag. Modify the
    of_dma_configure function to accept an input parameter which specifies if
    implicit DMA configuration is required when it is not described by the
    firmware.

    Signed-off-by: Nipun Gupta
    Acked-by: Bjorn Helgaas # PCI parts
    Reviewed-by: Rob Herring
    [hch: tweaked the changelog a bit]
    Signed-off-by: Christoph Hellwig

    Christoph Hellwig
     
  • ACPI/OF support for configuration of DMA is a bus specific aspect, and
    thus should be configured by the bus. Introduces a 'dma_configure' bus
    method so that busses can control their DMA capabilities.

    Also update the PCI, Platform, ACPI and host1x buses to use the new
    method.

    Suggested-by: Christoph Hellwig
    Signed-off-by: Nipun Gupta
    Acked-by: Bjorn Helgaas # PCI parts
    Acked-by: Thierry Reding
    Reviewed-by: Greg Kroah-Hartman
    [hch: simplified host1x_dma_configure based on a comment from Thierry,
    rewrote changelog]
    Signed-off-by: Christoph Hellwig

    Nipun Gupta
     

23 Apr, 2018

1 commit

  • If a driver uses DPM_FLAG_SMART_SUSPEND and the device is already
    runtime suspended when hibernate is started PCI core skips runtime
    resuming the device but still clears pci_dev->state_saved. After the
    hibernation image is written pci_pm_thaw_noirq() makes sure subsequent
    thaw phases for the device are also skipped leaving it runtime suspended
    with pci_dev->state_saved == false.

    When the device is eventually runtime resumed pci_pm_runtime_resume()
    restores config space by calling pci_restore_standard_config(), however
    because pci_dev->state_saved == false pci_restore_state() never actually
    restores the config space leaving the device in a state that is not what
    the driver might expect.

    For example here is what happens for intel-lpss I2C devices once the
    hibernation snapshot is taken:

    intel-lpss 0000:00:15.0: power state changed by ACPI to D0
    intel-lpss 0000:00:1e.0: power state changed by ACPI to D3cold
    video LNXVIDEO:00: Restoring backlight state
    PM: hibernation exit
    i2c_designware i2c_designware.1: Unknown Synopsys component type: 0xffffffff
    i2c_designware i2c_designware.0: Unknown Synopsys component type: 0xffffffff
    i2c_designware i2c_designware.1: timeout in disabling adapter
    i2c_designware i2c_designware.0: timeout in disabling adapter

    Since PCI config space is not restored the device is still in D3hot
    making MMIO register reads return 0xffffffff.

    Fix this by clearing pci_dev->state_saved only if we actually end up
    runtime resuming the device.

    Fixes: c4b65157aeef (PCI / PM: Take SMART_SUSPEND driver flag into account)
    Signed-off-by: Mika Westerberg
    Cc: 4.15+ # 4.15+
    Signed-off-by: Rafael J. Wysocki

    Mika Westerberg
     

07 Apr, 2018

1 commit

  • Pull PCI updates from Bjorn Helgaas:

    - move pci_uevent_ers() out of pci.h (Michael Ellerman)

    - skip ASPM common clock warning if BIOS already configured it (Sinan
    Kaya)

    - fix ASPM Coverity warning about threshold_ns (Gustavo A. R. Silva)

    - remove last user of pci_get_bus_and_slot() and the function itself
    (Sinan Kaya)

    - add decoding for 16 GT/s link speed (Jay Fang)

    - add interfaces to get max link speed and width (Tal Gilboa)

    - add pcie_bandwidth_capable() to compute max supported link bandwidth
    (Tal Gilboa)

    - add pcie_bandwidth_available() to compute bandwidth available to
    device (Tal Gilboa)

    - add pcie_print_link_status() to log link speed and whether it's
    limited (Tal Gilboa)

    - use PCI core interfaces to report when device performance may be
    limited by its slot instead of doing it in each driver (Tal Gilboa)

    - fix possible cpqphp NULL pointer dereference (Shawn Lin)

    - rescan more of the hierarchy on ACPI hotplug to fix Thunderbolt/xHCI
    hotplug (Mika Westerberg)

    - add support for PCI I/O port space that's neither directly accessible
    via CPU in/out instructions nor directly mapped into CPU physical
    memory space. This is fairly intrusive and includes minor changes to
    interfaces used for I/O space on most platforms (Zhichang Yuan, John
    Garry)

    - add support for HiSilicon Hip06/Hip07 LPC I/O space (Zhichang Yuan,
    John Garry)

    - use PCI_EXP_DEVCTL2_COMP_TIMEOUT in rapidio/tsi721 (Bjorn Helgaas)

    - remove possible NULL pointer dereference in of_pci_bus_find_domain_nr()
    (Shawn Lin)

    - report quirk timings with dev_info (Bjorn Helgaas)

    - report quirks that take longer than 10ms (Bjorn Helgaas)

    - add and use Altera Vendor ID (Johannes Thumshirn)

    - tidy Makefiles and comments (Bjorn Helgaas)

    - don't set up INTx if MSI or MSI-X is enabled to align cris, frv,
    ia64, and mn10300 with x86 (Bjorn Helgaas)

    - move pcieport_if.h to drivers/pci/pcie/ to encapsulate it (Frederick
    Lawler)

    - merge pcieport_if.h into portdrv.h (Bjorn Helgaas)

    - move workaround for BIOS PME issue from portdrv to PCI core (Bjorn
    Helgaas)

    - completely disable portdrv with "pcie_ports=compat" (Bjorn Helgaas)

    - remove portdrv link order dependency (Bjorn Helgaas)

    - remove support for unused VC portdrv service (Bjorn Helgaas)

    - simplify portdrv feature permission checking (Bjorn Helgaas)

    - remove "pcie_hp=nomsi" parameter (use "pci=nomsi" instead) (Bjorn
    Helgaas)

    - remove unnecessary "pcie_ports=auto" parameter (Bjorn Helgaas)

    - use cached AER capability offset (Frederick Lawler)

    - don't enable DPC if BIOS hasn't granted AER control (Mika Westerberg)

    - rename pcie-dpc.c to dpc.c (Bjorn Helgaas)

    - use generic pci_mmap_resource_range() instead of powerpc and xtensa
    arch-specific versions (David Woodhouse)

    - support arbitrary PCI host bridge offsets on sparc (Yinghai Lu)

    - remove System and Video ROM reservations on sparc (Bjorn Helgaas)

    - probe for device reset support during enumeration instead of runtime
    (Bjorn Helgaas)

    - add ACS quirk for Ampere (née APM) root ports (Feng Kan)

    - add function 1 DMA alias quirk for Marvell 88SE9220 (Thomas
    Vincent-Cross)

    - protect device restore with device lock (Sinan Kaya)

    - handle failure of FLR gracefully (Sinan Kaya)

    - handle CRS (config retry status) after device resets (Sinan Kaya)

    - skip various config reads for SR-IOV VFs as an optimization
    (KarimAllah Ahmed)

    - consolidate VPD code in vpd.c (Bjorn Helgaas)

    - add Tegra dependency on PCI_MSI_IRQ_DOMAIN (Arnd Bergmann)

    - add DT support for R-Car r8a7743 (Biju Das)

    - fix a PCI_EJECT vs PCI_BUS_RELATIONS race condition in Hyper-V host
    bridge driver that causes a general protection fault (Dexuan Cui)

    - fix Hyper-V host bridge hang in MSI setup on 1-vCPU VMs with SR-IOV
    (Dexuan Cui)

    - fix Hyper-V host bridge hang when ejecting a VF before setting up MSI
    (Dexuan Cui)

    - make several structures static (Fengguang Wu)

    - increase number of MSI IRQs supported by Synopsys DesignWare bridges
    from 32 to 256 (Gustavo Pimentel)

    - implemented multiplexed IRQ domain API and remove obsolete MSI IRQ
    API from DesignWare drivers (Gustavo Pimentel)

    - add Tegra power management support (Manikanta Maddireddy)

    - add Tegra loadable module support (Manikanta Maddireddy)

    - handle 64-bit BARs correctly in endpoint support (Niklas Cassel)

    - support optional regulator for HiSilicon STB (Shawn Guo)

    - use regulator bulk API for Qualcomm apq8064 (Srinivas Kandagatla)

    - support power supplies for Qualcomm msm8996 (Srinivas Kandagatla)

    * tag 'pci-v4.17-changes' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci: (123 commits)
    MAINTAINERS: Add John Garry as maintainer for HiSilicon LPC driver
    HISI LPC: Add ACPI support
    ACPI / scan: Do not enumerate Indirect IO host children
    ACPI / scan: Rename acpi_is_serial_bus_slave() for more general use
    HISI LPC: Support the LPC host on Hip06/Hip07 with DT bindings
    of: Add missing I/O range exception for indirect-IO devices
    PCI: Apply the new generic I/O management on PCI IO hosts
    PCI: Add fwnode handler as input param of pci_register_io_range()
    PCI: Remove __weak tag from pci_register_io_range()
    MAINTAINERS: Add missing /drivers/pci/cadence directory entry
    fm10k: Report PCIe link properties with pcie_print_link_status()
    net/mlx5e: Use pcie_bandwidth_available() to compute bandwidth
    net/mlx5: Report PCIe link properties with pcie_print_link_status()
    net/mlx4_core: Report PCIe link properties with pcie_print_link_status()
    PCI: Add pcie_print_link_status() to log link speed and whether it's limited
    PCI: Add pcie_bandwidth_available() to compute bandwidth available to device
    misc: pci_endpoint_test: Handle 64-bit BARs properly
    PCI: designware-ep: Make dw_pcie_ep_reset_bar() handle 64-bit BARs properly
    PCI: endpoint: Make sure that BAR_5 does not have 64-bit flag set when clearing
    PCI: endpoint: Make epc->ops->clear_bar()/pci_epc_clear_bar() take struct *epf_bar
    ...

    Linus Torvalds
     

05 Apr, 2018

2 commits

  • - move pcieport_if.h to drivers/pci/pcie/ to encapsulate it (Frederick
    Lawler)

    - merge pcieport_if.h into portdrv.h (Bjorn Helgaas)

    - move workaround for BIOS PME issue from portdrv to PCI core (Bjorn
    Helgaas)

    - completely disable portdrv with "pcie_ports=compat" (Bjorn Helgaas)

    - remove portdrv link order dependency (Bjorn Helgaas)

    - remove support for unused VC portdrv service (Bjorn Helgaas)

    - simplify portdrv feature permission checking (Bjorn Helgaas)

    - remove "pcie_hp=nomsi" parameter (use "pci=nomsi" instead) (Bjorn
    Helgaas)

    - remove unnecessary "pcie_ports=auto" parameter (Bjorn Helgaas)

    - use cached AER capability offset (Frederick Lawler)

    - don't enable DPC if BIOS hasn't granted AER control (Mika Westerberg)

    - rename pcie-dpc.c to dpc.c (Bjorn Helgaas)

    * pci/portdrv:
    PCI/DPC: Rename from pcie-dpc.c to dpc.c
    PCI/DPC: Do not enable DPC if AER control is not allowed by the BIOS
    PCI/AER: Use cached AER Capability offset
    PCI/portdrv: Rename and reverse sense of pcie_ports_auto
    PCI/portdrv: Encapsulate pcie_ports_auto inside the port driver
    PCI/portdrv: Remove unnecessary "pcie_ports=auto" parameter
    PCI/portdrv: Remove "pcie_hp=nomsi" kernel parameter
    PCI/portdrv: Remove unnecessary include of
    PCI/portdrv: Simplify PCIe feature permission checking
    PCI/portdrv: Remove unused PCIE_PORT_SERVICE_VC
    PCI/portdrv: Remove pcie_port_bus_type link order dependency
    PCI/portdrv: Disable port driver in compat mode
    PCI/PM: Clear PCIe PME Status bit for Root Complex Event Collectors
    PCI/PM: Clear PCIe PME Status bit in core, not PCIe port driver
    PCI/PM: Move pcie_clear_root_pme_status() to core
    PCI/portdrv: Merge pcieport_if.h into portdrv.h
    PCI/portdrv: Move pcieport_if.h to drivers/pci/pcie/

    Conflicts:
    drivers/pci/pcie/Makefile
    drivers/pci/pcie/portdrv.h

    Bjorn Helgaas
     
  • - use PCI_EXP_DEVCTL2_COMP_TIMEOUT in rapidio/tsi721 (Bjorn Helgaas)

    - remove possible NULL pointer dereference in of_pci_bus_find_domain_nr()
    (Shawn Lin)

    - report quirk timings with dev_info (Bjorn Helgaas)

    - report quirks that take longer than 10ms (Bjorn Helgaas)

    - add and use Altera Vendor ID (Johannes Thumshirn)

    - tidy Makefiles and comments (Bjorn Helgaas)

    * pci/misc:
    PCI: Always define the of_node helpers
    PCI: Tidy comments
    PCI: Tidy Makefiles
    mcb: Add Altera PCI ID to mcb-pci
    PCI: Add Altera vendor ID
    PCI: Report quirks that take more than 10ms
    PCI: Report quirk timings with pci_info() instead of pr_debug()
    PCI: Fix NULL pointer dereference in of_pci_bus_find_domain_nr()
    rapidio/tsi721: use PCI_EXP_DEVCTL2_COMP_TIMEOUT macro

    Bjorn Helgaas
     

31 Mar, 2018

2 commits

  • The pcie_port_bus_type must be registered before drivers that depend on it
    can be registered. Those drivers include:

    pcied_init() # PCIe native hotplug driver
    aer_service_init() # AER driver
    dpc_service_init() # DPC driver
    pcie_pme_service_init() # PME driver

    Previously we registered pcie_port_bus_type from pcie_portdrv_init(), a
    device_initcall. The callers of pcie_port_service_register() (above) are
    also device_initcalls. This is fragile because the device_initcall
    ordering depends on link order, which is not explicit.

    Register pcie_port_bus_type from pci_driver_init() along with pci_bus_type.
    This removes the link order dependency between portdrv and the pciehp, AER,
    DPC, and PCIe PME drivers.

    Signed-off-by: Bjorn Helgaas
    Reviewed-by: Rafael J. Wysocki
    Reviewed-by: Christoph Hellwig

    Bjorn Helgaas
     
  • Per PCIe r4.0, sec 6.1.6, Root Complex Event Collectors can generate PME
    interrupts on behalf of Root Complex Integrated Endpoints.

    Linux does not currently enable PME interrupts from RC Event Collectors,
    but fe31e69740ed ("PCI/PCIe: Clear Root PME Status bits early during system
    resume") suggests PME interrupts may be enabled by the platform for ACPI-
    based runtime wakeup.

    Clear the PCIe PME Status bit for Root Complex Event Collectors during
    resume, just like we already do for Root Ports.

    If the BIOS enables PME interrupts for an event collector and neglects to
    clear the status bit on resume, this change should fix the same bug as
    fe31e69740ed (PMEs not working after waking from a sleep state), but for
    Root Complex Integrated Endpoints.

    Signed-off-by: Bjorn Helgaas
    Reviewed-by: Rafael J. Wysocki

    Bjorn Helgaas
     

20 Mar, 2018

1 commit

  • Remove pointless comments that tell us the file name, remove blank line
    comments, follow multi-line comment conventions. No functional change
    intended.

    Signed-off-by: Bjorn Helgaas

    Bjorn Helgaas
     

14 Mar, 2018

1 commit

  • We leave PCI devices not bound to a driver in D0 during runtime suspend.
    But they may have a parent which is bound and can be transitioned to
    D3cold at runtime. Once the parent goes to D3cold, the unbound child
    may go to D3cold as well. When the child goes to D3cold, its internal
    state, including configuration of BARs, MSI, ASPM, MPS, etc., is lost.

    One example are recent hybrid graphics laptops which cut power to the
    discrete GPU when the root port above it goes to ACPI power state D3.
    Users may provoke this by unbinding the GPU driver and allowing runtime
    PM on the GPU via sysfs: The PM core will then treat the GPU as
    "suspended", which in turn allows the root port to runtime suspend,
    causing the power resources listed in its _PR3 object to be powered off.
    The GPU's BARs will be uninitialized when a driver later probes it.

    Another example are hybrid graphics laptops where the GPU itself (rather
    than the root port) is capable of runtime suspending to D3cold. If the
    GPU's integrated HDA controller is not bound and the GPU's driver
    decides to runtime suspend to D3cold, the HDA controller's BARs will be
    uninitialized when a driver later probes it.

    Fix by saving and restoring config space over a runtime suspend cycle
    even if the device is not bound.

    Acked-by: Bjorn Helgaas
    Tested-by: Peter Wu # Nvidia Optimus
    Tested-by: Lukas Wunner # MacBook Pro
    Signed-off-by: Rafael J. Wysocki
    [lukas: add commit message, bikeshed code comments for clarity]
    Signed-off-by: Lukas Wunner
    Link: https://patchwork.freedesktop.org/patch/msgid/92fb6e6ae2730915eb733c08e2f76c6a313e3860.1520068884.git.lukas@wunner.de

    Rafael J. Wysocki