01 Oct, 2020

2 commits

  • [ Upstream commit 6544abc520f0fff701e9da382110dc29676c683a ]

    Currently, when using _of_add_opp_table_v2 parsed_static_opps is
    increased and this value is used in _opp_remove_all_static() to
    check if there are static opp entries that need to be freed.
    Unfortunately this does not happen when using _of_add_opp_table_v1(),
    which leads to warnings.

    This patch increases parsed_static_opps in _of_add_opp_table_v1() in a
    similar way as in _of_add_opp_table_v2().

    Fixes: 03758d60265c ("opp: Replace list_kref with a local counter")
    Cc: v5.6+ # v5.6+
    Signed-off-by: Walter Lozano
    [ Viresh: Do the operation with lock held and set the value to 1 instead
    of incrementing it ]
    Signed-off-by: Viresh Kumar
    Signed-off-by: Sasha Levin

    Walter Lozano
     
  • [ Upstream commit 03758d60265c773e1d06d436b99ee338f2ac55d6 ]

    A kref or refcount isn't the right tool to be used here for counting
    number of devices that are sharing the static OPPs created for the OPP
    table. For example, we are reinitializing the kref again, after it
    reaches a value of 0 and frees the resources, if the static OPPs get
    added for the same OPP table structure (as the OPP table structure was
    never freed). That is messy and very unclear.

    This patch makes parsed_static_opps an unsigned integer and uses it to
    count the number of users of the static OPPs. The increment and
    decrement to parsed_static_opps is done under opp_table->lock now to
    make sure no races are possible if the OPP table is getting added and
    removed in parallel (which doesn't happen in practice, but can in
    theory).

    Signed-off-by: Viresh Kumar
    Signed-off-by: Sasha Levin

    Viresh Kumar
     

26 Aug, 2020

1 commit

  • [ Upstream commit a4501bac0e553bed117b7e1b166d49731caf7260 ]

    dev_pm_opp_set_rate() can now be called with freq = 0 in order
    to either drop performance or bandwidth votes or to disable
    regulators on platforms which support them.

    In such cases, a subsequent call to dev_pm_opp_set_rate() with
    the same frequency ends up returning early because 'old_freq == freq'

    Instead make it fall through and put back the dropped performance
    and bandwidth votes and/or enable back the regulators.

    Cc: v5.3+ # v5.3+
    Fixes: cd7ea582866f ("opp: Make dev_pm_opp_set_rate() handle freq = 0 to drop performance votes")
    Reported-by: Sajida Bhanu
    Reviewed-by: Sibi Sankar
    Reported-by: Matthias Kaehlcke
    Tested-by: Matthias Kaehlcke
    Reviewed-by: Stephen Boyd
    Signed-off-by: Rajendra Nayak
    [ Viresh: Don't skip clk_set_rate() and massaged changelog ]
    Signed-off-by: Viresh Kumar
    Signed-off-by: Sasha Levin

    Rajendra Nayak
     

24 Feb, 2020

1 commit

  • [ Upstream commit ba0033192145cbd4e70ef64552958b13d597eb9e ]

    The static OPPs aren't getting freed properly, if errors occur while
    adding them. Fix that by calling _put_opp_list_kref() and putting their
    reference on failures.

    Fixes: 11e1a1648298 ("opp: Don't decrement uninitialized list_kref")
    Signed-off-by: Viresh Kumar
    Signed-off-by: Sasha Levin

    Viresh Kumar
     

23 Oct, 2019

1 commit

  • The list_kref reaches a count of 0 when all the static OPPs are removed,
    for example when dev_pm_opp_of_cpumask_remove_table() is called, though
    the actual OPP table may not get freed as it may still be referenced by
    other parts of the kernel, like from a call to
    dev_pm_opp_set_supported_hw(). And if we call
    dev_pm_opp_of_cpumask_add_table() again at this point, we must
    reinitialize the list_kref otherwise the kernel will hit a WARN() in
    kref infrastructure for incrementing a kref with value 0.

    Fixes: 11e1a1648298 ("opp: Don't decrement uninitialized list_kref")
    Reported-by: Dmitry Osipenko
    Tested-by: Dmitry Osipenko
    Signed-off-by: Viresh Kumar

    Viresh Kumar
     

21 Oct, 2019

1 commit

  • All the drivers, which use the OPP framework control regulators, which
    are already enabled. Typically those regulators are also system critical,
    due to providing power to CPU core or system buses. It turned out that
    there are cases, where calling regulator_enable() on such boot-enabled
    regulator has side-effects and might change its initial voltage due to
    performing initial voltage balancing without all restrictions from the
    consumers. Until this issue becomes finally solved in regulator core,
    avoid calling regulator_enable()/disable() from the OPP framework.

    This reverts commit 7f93ff73f7c8c8bfa6be33bcc16470b0b44682aa.

    Signed-off-by: Marek Szyprowski
    Reviewed-by: Mark Brown
    Signed-off-by: Viresh Kumar

    Marek Szyprowski
     

10 Oct, 2019

1 commit

  • _find_opp_of_np() doesn't traverse the list of OPP tables but instead
    just the entries within an OPP table and so only requires to lock the
    OPP table itself.

    The lockdep_assert_held() was added there by mistake and isn't really
    required.

    Fixes: 5d6d106fa455 ("OPP: Populate required opp tables from "required-opps" property")
    Cc: v5.0+ # v5.0+
    Reported-by: Niklas Cassel
    Signed-off-by: Viresh Kumar

    Viresh Kumar
     

26 Jul, 2019

6 commits

  • With property "opp-supported-hw" introduced, the OPP table
    in DT could be a large OPP table and ONLY a subset of OPPs
    are available, based on the version of the hardware running
    on. That introduces restriction of using "opp-suspend"
    property to define the suspend OPP, as we are NOT sure if the
    OPP containing "opp-suspend" property is available for the
    hardware running on, and the of opp core does NOT allow multiple
    suspend OPPs defined in DT OPP table.

    To eliminate this restrition, make of opp core allow multiple
    suspend OPPs defined in DT, and pick the OPP with highest rate
    and with "opp-suspend" property present to be suspend OPP, it
    can speed up the suspend/resume process.

    Signed-off-by: Anson Huang
    Signed-off-by: Viresh Kumar

    Anson Huang
     
  • Add enable regulators to dev_pm_opp_set_regulators() and disable
    regulators to dev_pm_opp_put_regulators(). Even if bootloader
    leaves regulators enabled, they should be enabled in kernel in
    order to increase the reference count.

    Signed-off-by: Kamil Konieczny
    Signed-off-by: Viresh Kumar

    k.konieczny@partner.samsung.com
     
  • The list_kref was added for static OPPs and to track their users. The
    kref is initialized while the static OPPs are added, but removed
    unconditionally even if the static OPPs were never added. This causes
    refcount mismatch warnings currently.

    Fix that by always initializing the kref when the OPP table is first
    initialized. The refcount is later incremented only for the second user
    onwards.

    Fixes: d0e8ae6c26da ("OPP: Create separate kref for static OPPs list")
    Reported-by: Rajendra Nayak
    Signed-off-by: Viresh Kumar

    Viresh Kumar
     
  • Since the performance states in the OPP table are unique, implement a
    dev_pm_opp_find_level_exact() in order to be able to fetch a specific OPP.

    Signed-off-by: Niklas Cassel
    [ Viresh: Updated commit log ]
    Signed-off-by: Viresh Kumar

    Niklas Cassel
     
  • The cpufreq drivers don't need to do runtime PM operations on the
    virtual devices returned by dev_pm_domain_attach_by_name() and so the
    virtual devices weren't shared with the callers of
    dev_pm_opp_attach_genpd() earlier.

    But the IO device drivers would want to do that. This patch updates the
    prototype of dev_pm_opp_attach_genpd() to accept another argument to
    return the pointer to the array of genpd virtual devices.

    Reported-by: Rajendra Nayak
    Tested-by: Rajendra Nayak
    Signed-off-by: Viresh Kumar

    Viresh Kumar
     
  • A device may have multiple power-domains and not all of them may be
    scalable (i.e. support performance states). But
    dev_pm_opp_attach_genpd() doesn't take that into account currently.

    Fix that by not verifying the names argument with "power-domain-names"
    DT property and finding the index into the required-opps array. The
    names argument will anyway get verified later on when we call
    dev_pm_domain_attach_by_name().

    Fixes: 6319aee10e53 ("opp: Attach genpds to devices from within OPP core")
    Reported-by: Rajendra Nayak
    Tested-by: Rajendra Nayak
    Signed-off-by: Viresh Kumar

    Viresh Kumar
     

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
     

26 Jun, 2019

1 commit

  • Pull operating performance points (OPP) framework changes for v5.3
    from Viresh Kumar:

    "This pull request contains:

    - OPP core changes to support a wider range of devices, like IO
    devices (Rajendra Nayak and Stehpen Boyd).
    - Fixes around genpd_virt_devs (Viresh Kumar).
    - Fix for platform with set_opp() callback (Dmitry Osipenko)."

    * 'opp/linux-next' of git://git.kernel.org/pub/scm/linux/kernel/git/vireshk/pm:
    opp: Don't use IS_ERR on invalid supplies
    opp: Make dev_pm_opp_set_rate() handle freq = 0 to drop performance votes
    opp: Don't overwrite rounded clk rate
    opp: Allocate genpd_virt_devs from dev_pm_opp_attach_genpd()
    opp: Attach genpds to devices from within OPP core

    Rafael J. Wysocki
     

24 Jun, 2019

1 commit

  • _set_opp_custom() receives a set of OPP supplies as its arguments and
    the caller of it passes NULL when the supplies are not valid. But
    _set_opp_custom(), by mistake, checks for error by performing
    IS_ERR(old_supply) on it which will always evaluate to false.

    The problem was spotted during of testing of upcoming update for the
    NVIDIA Tegra CPUFreq driver.

    Cc: stable
    Fixes: 7e535993fa4f ("OPP: Separate out custom OPP handler specific code")
    Reported-by: Marc Dietrich
    Signed-off-by: Dmitry Osipenko
    [ Viresh: Massaged changelog ]
    Signed-off-by: Viresh Kumar

    Dmitry Osipenko
     

19 Jun, 2019

1 commit

  • Based on 2 normalized pattern(s):

    this program is free software you can redistribute it and or modify
    it under the terms of the gnu general public license version 2 as
    published by the free software foundation

    this program is free software you can redistribute it and or modify
    it under the terms of the gnu general public license version 2 as
    published by the free software foundation #

    extracted by the scancode license scanner the SPDX license identifier

    GPL-2.0-only

    has been chosen to replace the boilerplate/reference in 4122 file(s).

    Signed-off-by: Thomas Gleixner
    Reviewed-by: Enrico Weigelt
    Reviewed-by: Kate Stewart
    Reviewed-by: Allison Randal
    Cc: linux-spdx@vger.kernel.org
    Link: https://lkml.kernel.org/r/20190604081206.933168790@linutronix.de
    Signed-off-by: Greg Kroah-Hartman

    Thomas Gleixner
     

17 Jun, 2019

2 commits

  • For devices with performance state, we use dev_pm_opp_set_rate() to set
    the appropriate clk rate and the performance state.

    We do need a way to remove the performance state vote when we idle the
    device and turn the clocks off. Use dev_pm_opp_set_rate() with freq = 0
    to achieve this.

    Signed-off-by: Rajendra Nayak
    Signed-off-by: Stephen Boyd
    [ Viresh: Updated _set_required_opps() to handle the !opp case ]
    Signed-off-by: Viresh Kumar

    Rajendra Nayak
     
  • The OPP table normally contains 'fmax' values corresponding to the
    voltage or performance levels of each OPP, but we don't necessarily want
    all the devices to run at fmax all the time. Running at fmax makes sense
    for devices like CPU/GPU, which have a finite amount of work to do and
    since a specific amount of energy is consumed at an OPP, its better to
    run at the highest possible frequency for that voltage value.

    On the other hand, we have IO devices which need to run at specific
    frequencies only for their proper functioning, instead of maximum
    possible frequency.

    The OPP core currently roundup to the next possible OPP for a frequency
    and select the fmax value. To support the IO devices by the OPP core,
    lets do the roundup to fetch the voltage or performance state values,
    but not use the OPP frequency value. Rather use the value returned by
    clk_round_rate().

    The current user, cpufreq, of dev_pm_opp_set_rate() already does the
    rounding to the next OPP before calling this routine and it won't
    have any side affects because of this change.

    Signed-off-by: Stephen Boyd
    Signed-off-by: Rajendra Nayak
    [ Viresh: Massaged changelog, added comment and use temp_opp variable
    instead ]
    Signed-off-by: Viresh Kumar

    Stephen Boyd
     

15 Jun, 2019

1 commit

  • Convert the PM documents to ReST, in order to allow them to
    build with Sphinx.

    The conversion is actually:
    - add blank lines and indentation in order to identify paragraphs;
    - fix tables markups;
    - add some lists markups;
    - mark literal blocks;
    - adjust title markups.

    At its new index.rst, let's add a :orphan: while this is not linked to
    the main index.rst file, in order to avoid build warnings.

    Signed-off-by: Mauro Carvalho Chehab
    Signed-off-by: Bjorn Helgaas
    Acked-by: Mark Brown
    Acked-by: Srivatsa S. Bhat (VMware)

    Mauro Carvalho Chehab
     

21 May, 2019

1 commit


20 May, 2019

2 commits

  • Currently the space for the array of virtual devices is allocated along
    with the OPP table, but that isn't going to work well from now onwards.
    For single power domain case, a driver can either use the original
    device structure for setting the performance state (if genpd attached
    with dev_pm_domain_attach()) or use the virtual device structure (if
    genpd attached with dev_pm_domain_attach_by_name(), which returns the
    virtual device) and so we can't know in advance if we are going to need
    genpd_virt_devs array or not.

    Lets delay the allocation a bit and do it along with
    dev_pm_opp_attach_genpd() rather. The deallocation is done from
    dev_pm_opp_detach_genpd().

    Tested-by: Niklas Cassel
    Signed-off-by: Viresh Kumar

    Viresh Kumar
     
  • The OPP core requires the virtual device pointers to set performance
    state on behalf of the device, for the multiple power domain case. The
    genpd API (dev_pm_domain_attach_by_name()) has evolved now to support
    even the single power domain case and that lets us add common code for
    handling both the cases more efficiently.

    The virtual device structure returned by dev_pm_domain_attach_by_name()
    isn't normally used by the cpufreq drivers as they don't manage power
    on/off of the domains and so is only useful for the OPP core.

    This patch moves all the complexity into the OPP core to make the end
    drivers simple. The earlier APIs dev_pm_opp_{set|put}_genpd_virt_dev()
    are reworked into dev_pm_opp_{attach|detach}_genpd(). The new helper
    dev_pm_opp_attach_genpd() accepts a NULL terminated array of strings
    which contains names of all the genpd's to attach. It then attaches all
    the domains and saves the pointers to the virtual devices. The other
    helper undo the work done by this helper.

    Tested-by: Niklas Cassel
    Signed-off-by: Viresh Kumar

    Viresh Kumar
     

10 Apr, 2019

1 commit

  • This patch introduces a new helper routine in the OPP core, which
    returns the OPP with the highest frequency which has voltage less than
    or equal to the target voltage passed to the helper.

    Signed-off-by: Andrew-sh.Cheng
    [ Viresh: Massaged the commit log and renamed the helper with some
    cleanups. ]
    Signed-off-by: Viresh Kumar

    Andrew-sh.Cheng
     

12 Mar, 2019

1 commit

  • At boot up, CPUFreq core performs a sanity check to see if the system is
    running at a frequency defined in the frequency table of the CPU. If so,
    we try to find a valid frequency (lowest frequency greater than the
    currently programmed frequency) from the table and set it. When the call
    reaches dev_pm_opp_set_rate(), it calls _find_freq_ceil(opp_table,
    &old_freq) to find the previously configured OPP and this call also
    updates the old_freq. This eventually sets the old_freq == freq (new
    target requested by cpufreq core) and we skip updating the performance
    state in this case.

    Fix this by also updating the performance state when the old_freq ==
    freq.

    Fixes: ca1b5d77b1c6 ("OPP: Configure all required OPPs")
    Cc: v5.0 # v5.0
    Reported-by: Niklas Cassel
    Tested-by: Jorge Ramirez-Ortiz
    Signed-off-by: Viresh Kumar
    Signed-off-by: Rafael J. Wysocki

    Viresh Kumar
     

11 Mar, 2019

1 commit

  • We seem to rely on the number of phandles specified in the
    'required-opps' property to identify cases where a device is
    associated with multiple power domains and hence would have
    multiple virtual devices that have to be dealt with.

    In cases where we do have devices with multiple power domains
    but with only one of them being scalable, this logic seems to
    fail.

    Instead read the number of power domains from DT to identify
    such cases.

    Signed-off-by: Rajendra Nayak
    Reviewed-by: Stephen Boyd
    Acked-by: Viresh Kumar
    Signed-off-by: Rafael J. Wysocki

    Rajendra Nayak
     

07 Mar, 2019

1 commit

  • Pull power management updates from Rafael Wysocki:
    "These are PM-runtime framework changes to use ktime instead of jiffies
    for accounting, new PM core flag to mark devices that don't need any
    form of power management, cpuidle updates including driver API
    documentation and a new governor, cpufreq updates including a new
    driver for Armada 8K, thermal cleanups and more, some energy-aware
    scheduling (EAS) enabling changes, new chips support in the intel_idle
    and RAPL drivers and assorted cleanups in some other places.

    Specifics:

    - Update the PM-runtime framework to use ktime instead of jiffies for
    accounting (Thara Gopinath, Vincent Guittot)

    - Optimize the autosuspend code in the PM-runtime framework somewhat
    (Ladislav Michl)

    - Add a PM core flag to mark devices that don't need any form of
    power management (Sudeep Holla)

    - Introduce driver API documentation for cpuidle and add a new
    cpuidle governor for tickless systems (Rafael Wysocki)

    - Add Jacobsville support to the intel_idle driver (Zhang Rui)

    - Clean up a cpuidle core header file and the cpuidle-dt and ACPI
    processor-idle drivers (Yangtao Li, Joseph Lo, Yazen Ghannam)

    - Add new cpufreq driver for Armada 8K (Gregory Clement)

    - Fix and clean up cpufreq core (Rafael Wysocki, Viresh Kumar, Amit
    Kucheria)

    - Add support for light-weight tear-down and bring-up of CPUs to the
    cpufreq core and use it in the cpufreq-dt driver (Viresh Kumar)

    - Fix cpu_cooling Kconfig dependencies, add support for CPU cooling
    auto-registration to the cpufreq core and use it in multiple
    cpufreq drivers (Amit Kucheria)

    - Fix some minor issues and do some cleanups in the davinci,
    e_powersaver, ap806, s5pv210, qcom and kryo cpufreq drivers
    (Bartosz Golaszewski, Gustavo Silva, Julia Lawall, Paweł Chmiel,
    Taniya Das, Viresh Kumar)

    - Add a Hisilicon CPPC quirk to the cppc_cpufreq driver (Xiongfeng
    Wang)

    - Clean up the intel_pstate and acpi-cpufreq drivers (Erwan Velu,
    Rafael Wysocki)

    - Clean up multiple cpufreq drivers (Yangtao Li)

    - Update cpufreq-related MAINTAINERS entries (Baruch Siach, Lukas
    Bulwahn)

    - Add support for exposing the Energy Model via debugfs and make
    multiple cpufreq drivers register an Energy Model to support
    energy-aware scheduling (Quentin Perret, Dietmar Eggemann, Matthias
    Kaehlcke)

    - Add Ice Lake mobile and Jacobsville support to the Intel RAPL
    power-capping driver (Gayatri Kammela, Zhang Rui)

    - Add a power estimation helper to the operating performance points
    (OPP) framework and clean up a core function in it (Quentin Perret,
    Viresh Kumar)

    - Make minor improvements in the generic power domains (genpd), OPP
    and system suspend frameworks and in the PM core (Aditya Pakki,
    Douglas Anderson, Greg Kroah-Hartman, Rafael Wysocki, Yangtao Li)"

    * tag 'pm-5.1-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm: (80 commits)
    cpufreq: kryo: Release OPP tables on module removal
    cpufreq: ap806: add missing of_node_put after of_device_is_available
    cpufreq: acpi-cpufreq: Report if CPU doesn't support boost technologies
    cpufreq: Pass updated policy to driver ->setpolicy() callback
    cpufreq: Fix two debug messages in cpufreq_set_policy()
    cpufreq: Reorder and simplify cpufreq_update_policy()
    cpufreq: Add kerneldoc comments for two core functions
    PM / core: Add support to skip power management in device/driver model
    cpufreq: intel_pstate: Rework iowait boosting to be less aggressive
    cpufreq: intel_pstate: Eliminate intel_pstate_get_base_pstate()
    cpufreq: intel_pstate: Avoid redundant initialization of local vars
    powercap/intel_rapl: add Ice Lake mobile
    ACPI / processor: Set P_LVL{2,3} idle state descriptions
    cpufreq / cppc: Work around for Hisilicon CPPC cpufreq
    ACPI / CPPC: Add a helper to get desired performance
    cpufreq: davinci: move configuration to include/linux/platform_data
    cpufreq: speedstep: convert BUG() to BUG_ON()
    cpufreq: powernv: fix missing check of return value in init_powernv_pstates()
    cpufreq: longhaul: remove unneeded semicolon
    cpufreq: pcc-cpufreq: remove unneeded semicolon
    ..

    Linus Torvalds
     

16 Feb, 2019

1 commit

  • …t/agross/linux into arm/drivers

    Qualcomm ARM Based Driver Updates for v5.1

    * Add Qualcomm RPMh power domain driver and related changes
    * Fix issues with sleep/wake sets and batch API in RPMh
    * Update MAINTAINERS Qualcomm entry
    * Fixup RMTFS-mem sysfs and uevents
    * Fix error handling in GSBI
    * Add SMD-RPM compatible entry for SDM660

    * tag 'qcom-drivers-for-5.1' of git://git.kernel.org/pub/scm/linux/kernel/git/agross/linux:
    soc: qcom: smd-rpm: Add sdm660 compatible
    soc: qcom: gsbi: Fix error handling in gsbi_probe()
    soc: qcom: rpmh: Avoid accessing freed memory from batch API
    drivers: qcom: rpmh: avoid sending sleep/wake sets immediately
    soc: qcom: rmtfs-mem: Make sysfs attributes world-readable
    soc: qcom: rmtfs-mem: Add class to enable uevents
    soc: qcom: update config dependencies for QCOM_RPMPD
    soc: qcom: rpmpd: Drop family A RPM dependency
    MAINTAINERS: update list of qcom drivers
    soc: qcom: rpmhpd: Mark mx as a parent for cx
    soc: qcom: rpmhpd: Add RPMh power domain driver
    soc: qcom: rpmpd: Add support for get/set performance state
    soc: qcom: rpmpd: Add a Power domain driver to model corners
    dt-bindings: power: Add qcom rpm power domain driver bindings
    OPP: Add support for parsing the 'opp-level' property
    dt-bindings: opp: Introduce opp-level bindings

    Signed-off-by: Arnd Bergmann <arnd@arndb.de>

    Arnd Bergmann
     

12 Feb, 2019

1 commit

  • …ireshk/pm into pm-opp

    Pull operating performance points (OPP) framework updates for v5.1
    from Viresh Kumar:

    "This pull request contains following changes:

    - Introduced new OPP helper for power-estimation and used it in
    several cpufreq drivers (Quentin Perret, Matthias Kaehlcke, Dietmar
    Eggemann, and Yangtao Li).

    - OPP Debugfs cleanup (Greg KH).

    - OPP core cleanup (Viresh Kumar)."

    * 'opp/linux-next' of git://git.kernel.org/pub/scm/linux/kernel/git/vireshk/pm:
    cpufreq: OMAP: Register an Energy Model
    cpufreq: imx6q: Register an Energy Model
    opp: no need to check return value of debugfs_create functions
    cpufreq: mediatek: Register an Energy Model
    cpufreq: scmi: Register an Energy Model
    cpufreq: arm_big_little: Register an Energy Model
    cpufreq: scpi: Register an Energy Model
    cpufreq: dt: Register an Energy Model
    PM / OPP: Introduce a power estimation helper
    PM / OPP: Remove unused parameter of _generic_set_opp_clk_only()

    Rafael J. Wysocki
     

07 Feb, 2019

3 commits

  • When calling debugfs functions, there is no need to ever check the
    return value. The function can work or not, but the code logic should
    never do something different based on this.

    Cc: Viresh Kumar
    Cc: Nishanth Menon
    Cc: Stephen Boyd
    Cc: linux-pm@vger.kernel.org
    Reviewed-by: Stephen Boyd
    Signed-off-by: Greg Kroah-Hartman
    Signed-off-by: Viresh Kumar

    Greg Kroah-Hartman
     
  • The Energy Model (EM) framework provides an API to let drivers register
    the active power of CPUs. The drivers are expected to provide a callback
    method which estimates the power consumed by a CPU at each available
    performance levels. How exactly this should be implemented, however,
    depends on the platform.

    On some systems, PM_OPP knows the voltage and frequency at which CPUs
    can run. When coupled with the CPU 'capacitance' (as provided by the
    'dynamic-power-coefficient' devicetree binding), it is possible to
    estimate the dynamic power consumption of a CPU as P = C * V^2 * f, with
    C its capacitance and V and f respectively the voltage and frequency of
    the OPP. The Intelligent Power Allocator (IPA) thermal governor already
    implements that estimation method, in the thermal framework.

    However, this power estimation method can be applied to any platform
    where all the parameters are known (C, V and f), and not only those
    suffering thermal issues. As such, the code implementing this feature
    can be re-used to also populate the EM framework now used by EAS.

    As a first step, introduce in PM_OPP a helper function which CPUFreq
    drivers can use to register into the EM framework. This duplicates the
    power estimation done in IPA until it can be migrated to using the EM
    framework. This will be done later, once the EM framework has support
    for at least all platforms currently supported by IPA.

    Signed-off-by: Quentin Perret
    Tested-by: Matthias Kaehlcke
    Reviewed-by: Matthias Kaehlcke
    Signed-off-by: Viresh Kumar

    Quentin Perret
     
  • The previous frequency value isn't getting used in the routine
    _generic_set_opp_clk_only(), drop it.

    Reviewed-by: Stephen Boyd
    Signed-off-by: Viresh Kumar

    Viresh Kumar
     

23 Jan, 2019

1 commit

  • Now that the OPP bindings are updated to include an optional
    'opp-level' property, add support to parse it from device tree
    and store it as part of dev_pm_opp structure.
    Also add and export an helper 'dev_pm_opp_get_level()' that can be
    used to get the level value read from device tree when present.

    Reviewed-by: Stephen Boyd
    Acked-by: Viresh Kumar
    Signed-off-by: Rajendra Nayak
    Signed-off-by: Bjorn Andersson
    Signed-off-by: Andy Gross

    Rajendra Nayak
     

04 Jan, 2019

1 commit

  • Since the commit 2a4eb7358aba "OPP: Don't remove dynamic OPPs from
    _dev_pm_opp_remove_table()", dynamically created OPP aren't
    automatically removed anymore by dev_pm_opp_cpumask_remove_table(). This
    affects the scpi and scmi cpufreq drivers which no longer free OPPs on
    failures or on invocations of the policy->exit() callback.

    Create a generic OPP helper dev_pm_opp_remove_all_dynamic() which can be
    called from these drivers instead of dev_pm_opp_cpumask_remove_table().

    In dev_pm_opp_remove_all_dynamic(), we need to make sure that the
    opp_list isn't getting accessed simultaneously from other parts of the
    OPP core while the helper is freeing dynamic OPPs, i.e. we can't drop
    the opp_table->lock while traversing through the OPP list. And to
    accomplish that, this patch also creates _opp_kref_release_unlocked()
    which can be called from this new helper with the opp_table lock already
    held.

    Cc: 4.20 # v4.20
    Reported-by: Valentin Schneider
    Fixes: 2a4eb7358aba "OPP: Don't remove dynamic OPPs from _dev_pm_opp_remove_table()"
    Signed-off-by: Viresh Kumar
    Tested-by: Valentin Schneider
    Reviewed-by: Sudeep Holla
    Signed-off-by: Rafael J. Wysocki

    Viresh Kumar
     

14 Dec, 2018

4 commits

  • Viresh Kumar
     
  • of_get_required_opp_performance_state() returns 0 on errors currently
    and a positive performance state otherwise. Since 0 is a valid
    performance state (representing off), it would be better if this routine
    returns negative values on error.

    That will also make it behave similar to
    dev_pm_opp_xlate_performance_state(), which also returns performance
    states and returns negative values on error. Change the return type of
    the function to "int" in order to return negative values.

    This doesn't have any users for now and so no other part of the kernel
    will be impacted with this change.

    Reviewed-by: Ulf Hansson
    Signed-off-by: Viresh Kumar

    Viresh Kumar
     
  • dev_pm_genpd_set_performance_state() needs to handle performance state
    propagation going forward. Currently this routine only gets the required
    performance state of the device's genpd as an argument, but it doesn't
    know how to translate that to master genpd(s) of the device's genpd.

    Introduce a new helper dev_pm_opp_xlate_performance_state() which will
    be used to translate from performance state of a device (or genpd
    sub-domain) to another device (or master genpd).

    Normally the src_table (of genpd sub-domain) will have the
    "required_opps" property set to point to one of the OPPs in the
    dst_table (of master genpd), but in some cases the genpd and its master
    have one to one mapping of performance states and so none of them have
    the "required-opps" property set. Return the performance state of the
    src_table as it is in such cases.

    Tested-by: Rajendra Nayak
    Reviewed-by: Ulf Hansson
    Signed-off-by: Viresh Kumar

    Viresh Kumar
     
  • Make _find_table_of_opp_np() more efficient by using of_get_parent() to
    find the parent OPP table node.

    Tested-by: Rajendra Nayak
    Reviewed-by: Ulf Hansson
    Signed-off-by: Viresh Kumar

    Viresh Kumar
     

11 Dec, 2018

2 commits

  • There is one case where we may end up with no "supply" directory for the
    OPPs in debugfs. That happens when the OPP core isn't managing the
    regulators for the device and the device's OPP do have microvolt
    property. It happens because the opp_table->regulator_count remains set
    to 0 and the debugfs routines don't add any supply directory in such a
    case.

    This commit fixes that by setting opp_table->regulator_count to 1 in
    that particular case. But to make everything work nicely and not break
    other parts of the core, regulator_count is defined as "int" now instead
    of "unsigned int" and it can have different special values now. It is
    set to -1 initially to mark it "uninitialized" and later only we set it
    to 0 or positive values after checking how many supplies are there.

    This also helps in finding the bugs where only few of the OPPs have the
    "opp-microvolt" property set and not all.

    Fixes: 1fae788ed640 ("PM / OPP: Don't create debugfs "supply-0" directory unnecessarily")
    Reported-by: Quentin Perret
    Signed-off-by: Viresh Kumar

    Viresh Kumar
     
  • The value of opp_table->regulator_count is not very consistent right now
    and it may end up being 0 while we do have a "opp-microvolt" property in
    the OPP table. It was kept that way as we used to check if any
    regulators are set with the OPP core for a device or not using value of
    regulator_count.

    Lets use opp_table->regulators for that purpose as the meaning of
    regulator_count is going to change in the later patches.

    Reported-by: Quentin Perret
    Signed-off-by: Viresh Kumar

    Viresh Kumar