Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f1b9fc59 authored by Rafael J. Wysocki's avatar Rafael J. Wysocki
Browse files

Merge branches 'powercap', 'pm-cpufreq' and 'pm-domains'

* powercap:
  powercap / RAPL: fix BIOS lock check

* pm-cpufreq:
  cpufreq: intel_pstate: Minor cleanup for FRAC_BITS
  cpufreq: tegra: add regulator dependency for T124

* pm-domains:
  PM / Domains: Allow runtime PM callbacks to be re-used during system PM
Loading
Loading
Loading
Loading
+22 −11
Original line number Diff line number Diff line
@@ -390,6 +390,7 @@ static int pm_genpd_runtime_suspend(struct device *dev)
	struct generic_pm_domain *genpd;
	bool (*stop_ok)(struct device *__dev);
	struct gpd_timing_data *td = &dev_gpd_data(dev)->td;
	bool runtime_pm = pm_runtime_enabled(dev);
	ktime_t time_start;
	s64 elapsed_ns;
	int ret;
@@ -400,11 +401,18 @@ static int pm_genpd_runtime_suspend(struct device *dev)
	if (IS_ERR(genpd))
		return -EINVAL;

	/*
	 * A runtime PM centric subsystem/driver may re-use the runtime PM
	 * callbacks for other purposes than runtime PM. In those scenarios
	 * runtime PM is disabled. Under these circumstances, we shall skip
	 * validating/measuring the PM QoS latency.
	 */
	stop_ok = genpd->gov ? genpd->gov->stop_ok : NULL;
	if (stop_ok && !stop_ok(dev))
	if (runtime_pm && stop_ok && !stop_ok(dev))
		return -EBUSY;

	/* Measure suspend latency. */
	if (runtime_pm)
		time_start = ktime_get();

	ret = genpd_save_dev(genpd, dev);
@@ -418,6 +426,7 @@ static int pm_genpd_runtime_suspend(struct device *dev)
	}

	/* Update suspend latency value if the measured time exceeds it. */
	if (runtime_pm) {
		elapsed_ns = ktime_to_ns(ktime_sub(ktime_get(), time_start));
		if (elapsed_ns > td->suspend_latency_ns) {
			td->suspend_latency_ns = elapsed_ns;
@@ -426,6 +435,7 @@ static int pm_genpd_runtime_suspend(struct device *dev)
			genpd->max_off_time_changed = true;
			td->constraint_changed = true;
		}
	}

	/*
	 * If power.irq_safe is set, this routine will be run with interrupts
@@ -453,6 +463,7 @@ static int pm_genpd_runtime_resume(struct device *dev)
{
	struct generic_pm_domain *genpd;
	struct gpd_timing_data *td = &dev_gpd_data(dev)->td;
	bool runtime_pm = pm_runtime_enabled(dev);
	ktime_t time_start;
	s64 elapsed_ns;
	int ret;
@@ -479,14 +490,14 @@ static int pm_genpd_runtime_resume(struct device *dev)

 out:
	/* Measure resume latency. */
	if (timed)
	if (timed && runtime_pm)
		time_start = ktime_get();

	genpd_start_dev(genpd, dev);
	genpd_restore_dev(genpd, dev);

	/* Update resume latency value if the measured time exceeds it. */
	if (timed) {
	if (timed && runtime_pm) {
		elapsed_ns = ktime_to_ns(ktime_sub(ktime_get(), time_start));
		if (elapsed_ns > td->resume_latency_ns) {
			td->resume_latency_ns = elapsed_ns;
+1 −1
Original line number Diff line number Diff line
@@ -226,7 +226,7 @@ config ARM_TEGRA20_CPUFREQ

config ARM_TEGRA124_CPUFREQ
	tristate "Tegra124 CPUFreq support"
	depends on ARCH_TEGRA && CPUFREQ_DT
	depends on ARCH_TEGRA && CPUFREQ_DT && REGULATOR
	default y
	help
	  This adds the CPUFreq driver support for Tegra124 SOCs.
+1 −1
Original line number Diff line number Diff line
@@ -1123,7 +1123,7 @@ static int intel_pstate_set_policy(struct cpufreq_policy *policy)
				   limits->max_sysfs_pct);
	limits->max_perf_pct = max(limits->min_policy_pct,
				   limits->max_perf_pct);
	limits->max_perf = round_up(limits->max_perf, 8);
	limits->max_perf = round_up(limits->max_perf, FRAC_BITS);

	/* Make sure min_perf_pct <= max_perf_pct */
	limits->min_perf_pct = min(limits->max_perf_pct, limits->min_perf_pct);
+5 −2
Original line number Diff line number Diff line
@@ -1341,7 +1341,10 @@ static int rapl_detect_domains(struct rapl_package *rp, int cpu)

	for (rd = rp->domains; rd < rp->domains + rp->nr_domains; rd++) {
		/* check if the domain is locked by BIOS */
		if (rapl_read_data_raw(rd, FW_LOCK, false, &locked)) {
		ret = rapl_read_data_raw(rd, FW_LOCK, false, &locked);
		if (ret)
			return ret;
		if (locked) {
			pr_info("RAPL package %d domain %s locked by BIOS\n",
				rp->id, rd->name);
			rd->state |= DOMAIN_STATE_BIOS_LOCKED;