Commit d3569c14 authored by Rafael J. Wysocki's avatar Rafael J. Wysocki
Browse files
Pull devfreq updates for 5.11 from Chanwoo Choi:

 1. Update devfreq core

  - Add new devfreq_frequency tracepoint to show the frequency change
    information.

  - Add governor feature flag. The devfreq governor is able to set the
    specific flag in order to support a non-common feature. For
    example, if the governor supports the 'immutable' feature, don't
    allow user space to change the governor via sysfs.

  - Add governor sysfs attribute flag for each sysfs file. Prior to that
    the devfreq subsystem allowed all of the sysfs files to be accessed
    regardless of the governor type. But some sysfs fils are not
    supported by specific devfreq governors. In order to only allow the
    sysfs files supported by the governor to be accessed, clarify the
    access permissions of sysfs attributes according to the governor.
    When adding the devfreq governor, specify the available attribute
    information by using DEVFREQ_GOV_ATTR_* symbols. The user can read
    or write the sysfs attributes in accordance to the specified
    access permissions.

  - Clean-up the code to reduce duplication for the devfreq tracepoint
    and to remove redundant governor_name field from struct devfreq.

 2. Update exynos-bus.c devfreq driver

  - Add interconnect API support to the Samsung Exynos Bus Frequency
    driver, exynos-bus.c. Complementing the devfreq driver with
    interconnect functionality allows to ensure that the QoS
    requirements regarding devices accessing the system memory (e.g.
    video processing devices) will be met and allows to avoid issues
    like DMA underrun.

 3. Update tegra devfreq driver

  - Add interconnect support and OPP interface to tegra30-devfreq.c.
    Also, it is to guarantee the QoS requirement of some devices like
    the display controller.

  - Move tegra20-devfreq.c from drivers/devfreq/ into drivers/memory/tegra/
    in order to use the more proper monitoring feature such as EMC_STAT
    which is located in drivers/memory/tegra/.

  - Separate the configuration information for different SoCs in
    tegra30-devfrqe.c. The tegra30-devfreq.c had been supporting both
    tegra30-actmon and tegra124-actmon devices. In order to use the
    more correct configuration data, separate them.

  - Use dev_err_probe() to handle the deferred probe error in
    tegra30-devfreq.c.

 4. Pull the request of 'Tegra SoC and clock controller changes for
    v5.11' sent by Krzysztof Kozlowski <krzk@kernel.org> in order to
    avoid a build error."

* tag 'devfreq-next-for-5.11' of git://git.kernel.org/pub/scm/linux/kernel/git/chanwoo/linux:
  PM / devfreq: tegra30: Separate configurations per-SoC generation
  PM / devfreq: tegra30: Support interconnect and OPPs from device-tree
  PM / devfreq: tegra20: Deprecate in a favor of emc-stat based driver
  PM / devfreq: exynos-bus: Add registration of interconnect child device
  dt-bindings: devfreq: Add documentation for the interconnect properties
  soc/tegra: fuse: Add stub for tegra_sku_info
  soc/tegra: fuse: Export tegra_read_ram_code()
  clk: tegra: Export Tegra20 EMC kernel symbols
  PM / devfreq: tegra30: Silence deferred probe error
  PM / devfreq: tegra20: Relax Kconfig dependency
  PM / devfreq: tegra20: Silence deferred probe error
  PM / devfreq: Remove redundant governor_name from struct devfreq
  PM / devfreq: Add governor attribute flag for specifc sysfs nodes
  PM / devfreq: Add governor feature flag
  PM / devfreq: Add tracepoint for frequency changes
  PM / devfreq: Unify frequency change to devfreq_update_target func
  trace: events: devfreq: Use fixed indentation size to improve readability
parents 0477e928 6a575e84
Loading
Loading
Loading
Loading
+32 −22
Original line number Diff line number Diff line
@@ -37,20 +37,6 @@ Description:
		The /sys/class/devfreq/.../target_freq shows the next governor
		predicted target frequency of the corresponding devfreq object.

What:		/sys/class/devfreq/.../polling_interval
Date:		September 2011
Contact:	MyungJoo Ham <myungjoo.ham@samsung.com>
Description:
		The /sys/class/devfreq/.../polling_interval shows and sets
		the requested polling interval of the corresponding devfreq
		object. The values are represented in ms. If the value is
		less than 1 jiffy, it is considered to be 0, which means
		no polling. This value is meaningless if the governor is
		not polling; thus. If the governor is not using
		devfreq-provided central polling
		(/sys/class/devfreq/.../central_polling is 0), this value
		may be useless.

What:		/sys/class/devfreq/.../trans_stat
Date:		October 2012
Contact:	MyungJoo Ham <myungjoo.ham@samsung.com>
@@ -66,14 +52,6 @@ Description:

			echo 0 > /sys/class/devfreq/.../trans_stat

What:		/sys/class/devfreq/.../userspace/set_freq
Date:		September 2011
Contact:	MyungJoo Ham <myungjoo.ham@samsung.com>
Description:
		The /sys/class/devfreq/.../userspace/set_freq shows and
		sets the requested frequency for the devfreq object if
		userspace governor is in effect.

What:		/sys/class/devfreq/.../available_frequencies
Date:		October 2012
Contact:	Nishanth Menon <nm@ti.com>
@@ -110,6 +88,35 @@ Description:
		The max_freq overrides min_freq because max_freq may be
		used to throttle devices to avoid overheating.

What:		/sys/class/devfreq/.../polling_interval
Date:		September 2011
Contact:	MyungJoo Ham <myungjoo.ham@samsung.com>
Description:
		The /sys/class/devfreq/.../polling_interval shows and sets
		the requested polling interval of the corresponding devfreq
		object. The values are represented in ms. If the value is
		less than 1 jiffy, it is considered to be 0, which means
		no polling. This value is meaningless if the governor is
		not polling; thus. If the governor is not using
		devfreq-provided central polling
		(/sys/class/devfreq/.../central_polling is 0), this value
		may be useless.

		A list of governors that support the node:
		- simple_ondmenad
		- tegra_actmon

What:		/sys/class/devfreq/.../userspace/set_freq
Date:		September 2011
Contact:	MyungJoo Ham <myungjoo.ham@samsung.com>
Description:
		The /sys/class/devfreq/.../userspace/set_freq shows and
		sets the requested frequency for the devfreq object if
		userspace governor is in effect.

		A list of governors that support the node:
		- userspace

What:		/sys/class/devfreq/.../timer
Date:		July 2020
Contact:	Chanwoo Choi <cw00.choi@samsung.com>
@@ -122,3 +129,6 @@ Description:

			echo deferrable > /sys/class/devfreq/.../timer
			echo delayed > /sys/class/devfreq/.../timer

		A list of governors that support the node:
		- simple_ondemand
+69 −2
Original line number Diff line number Diff line
@@ -51,6 +51,19 @@ Optional properties only for parent bus device:
- exynos,saturation-ratio: the percentage value which is used to calibrate
			the performance count against total cycle count.

Optional properties for the interconnect functionality (QoS frequency
constraints):
- #interconnect-cells: should be 0.
- interconnects: as documented in ../interconnect.txt, describes a path at the
  higher level interconnects used by this interconnect provider.
  If this interconnect provider is directly linked to a top level interconnect
  provider the property contains only one phandle. The provider extends
  the interconnect graph by linking its node to a node registered by provider
  pointed to by first phandle in the 'interconnects' property.

- samsung,data-clock-ratio: ratio of the data throughput in B/s to minimum data
   clock frequency in Hz, default value is 8 when this property is missing.

Detailed correlation between sub-blocks and power line according to Exynos SoC:
- In case of Exynos3250, there are two power line as following:
	VDD_MIF |--- DMC
@@ -419,3 +432,57 @@ Example2 :
		devfreq = <&bus_leftbus>;
		status = "okay";
	};

Example 3:
	An interconnect path "bus_display -- bus_leftbus -- bus_dmc" on
	Exynos4412 SoC with video mixer as an interconnect consumer device.

	soc {
		bus_dmc: bus_dmc {
			compatible = "samsung,exynos-bus";
			clocks = <&clock CLK_DIV_DMC>;
			clock-names = "bus";
			operating-points-v2 = <&bus_dmc_opp_table>;
			samsung,data-clock-ratio = <4>;
			#interconnect-cells = <0>;
		};

		bus_leftbus: bus_leftbus {
			compatible = "samsung,exynos-bus";
			clocks = <&clock CLK_DIV_GDL>;
			clock-names = "bus";
			operating-points-v2 = <&bus_leftbus_opp_table>;
			#interconnect-cells = <0>;
			interconnects = <&bus_dmc>;
		};

		bus_display: bus_display {
			compatible = "samsung,exynos-bus";
			clocks = <&clock CLK_ACLK160>;
			clock-names = "bus";
			operating-points-v2 = <&bus_display_opp_table>;
			#interconnect-cells = <0>;
			interconnects = <&bus_leftbus &bus_dmc>;
		};

		bus_dmc_opp_table: opp_table1 {
			compatible = "operating-points-v2";
			/* ... */
		}

		bus_leftbus_opp_table: opp_table3 {
			compatible = "operating-points-v2";
			/* ... */
		};

		bus_display_opp_table: opp_table4 {
			compatible = "operating-points-v2";
			/* .. */
		};

		&mixer {
			compatible = "samsung,exynos4212-mixer";
			interconnects = <&bus_display &bus_dmc>;
			/* ... */
		};
	};
+0 −1
Original line number Diff line number Diff line
@@ -11313,7 +11313,6 @@ L: linux-pm@vger.kernel.org
L:	linux-tegra@vger.kernel.org
T:	git git://git.kernel.org/pub/scm/linux/kernel/git/chanwoo/linux.git
S:	Maintained
F:	drivers/devfreq/tegra20-devfreq.c
F:	drivers/devfreq/tegra30-devfreq.c
MEMORY MANAGEMENT
+3 −0
Original line number Diff line number Diff line
@@ -13,6 +13,7 @@
#include <linux/clk-provider.h>
#include <linux/clk/tegra.h>
#include <linux/err.h>
#include <linux/export.h>
#include <linux/io.h>
#include <linux/kernel.h>
#include <linux/slab.h>
@@ -235,6 +236,7 @@ void tegra20_clk_set_emc_round_callback(tegra20_clk_emc_round_cb *round_cb,
		emc->cb_arg = cb_arg;
	}
}
EXPORT_SYMBOL_GPL(tegra20_clk_set_emc_round_callback);

bool tegra20_clk_emc_driver_available(struct clk_hw *emc_hw)
{
@@ -291,3 +293,4 @@ int tegra20_clk_prepare_emc_mc_same_freq(struct clk *emc_clk, bool same)

	return 0;
}
EXPORT_SYMBOL_GPL(tegra20_clk_prepare_emc_mc_same_freq);
+0 −10
Original line number Diff line number Diff line
@@ -121,16 +121,6 @@ config ARM_TEGRA_DEVFREQ
	  It reads ACTMON counters of memory controllers and adjusts the
	  operating frequencies and voltages with OPP support.

config ARM_TEGRA20_DEVFREQ
	tristate "NVIDIA Tegra20 DEVFREQ Driver"
	depends on (TEGRA_MC && TEGRA20_EMC) || COMPILE_TEST
	depends on COMMON_CLK
	select DEVFREQ_GOV_SIMPLE_ONDEMAND
	help
	  This adds the DEVFREQ driver for the Tegra20 family of SoCs.
	  It reads Memory Controller counters and adjusts the operating
	  frequencies and voltages with OPP support.

config ARM_RK3399_DMC_DEVFREQ
	tristate "ARM RK3399 DMC DEVFREQ Driver"
	depends on (ARCH_ROCKCHIP && HAVE_ARM_SMCCC) || \
Loading