summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorViresh Kumar <viresh.kumar@linaro.org>2018-12-11 13:00:39 +0530
committerViresh Kumar <viresh.kumar@linaro.org>2018-12-11 13:00:39 +0530
commitb84721b27241167c6551e1be38f47a13947b7e6c (patch)
treef5870d571c24eb0abfebeea2bb60cf700ab33bd8
parent22408482c40255a12bea773677fc7f8ed35d0063 (diff)
updates
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
-rw-r--r--cron/history.txt50
-rw-r--r--mutt/incoming/.procmaillog3
-rw-r--r--mutt/incoming/PATCH_v11_2-2_cpufreq_qcom-hw_Add_support_for_QCOM_cpufreq_HW_driver.mbox429
-rw-r--r--mutt/incoming/RFC_PATCH_PM_OPP_Always_expose_one_supply_in_debugfs.mbox92
4 files changed, 145 insertions, 429 deletions
diff --git a/cron/history.txt b/cron/history.txt
index af93ed1..ef05325 100644
--- a/cron/history.txt
+++ b/cron/history.txt
@@ -23955,3 +23955,53 @@ Updating local grokmirror with changes on master
Everything up-to-date
Entering /home/vireshk/scripts
+[master 22408482c402] updates
+ 1 file changed, 58 insertions(+)
+post-git trigger: updating grokmirror
+Updating local grokmirror with changes on master
+To ssh://git.linaro.org/people/viresh.kumar/backup/scripts
+ 191f28b758fa..22408482c402 master -> master
+ d0c15c891215..191f28b758fa bkp/master -> bkp/master
+
+Entering /home/vireshk/work/repos/tools/module
+On branch master
+nothing to commit, working tree clean
+post-git trigger: updating grokmirror
+Updating local grokmirror with changes on master
+Everything up-to-date
+
+Entering /home/vireshk/work/repos/tools/vireshk-linux
+On branch master
+nothing to commit, working tree clean
+post-git trigger: updating grokmirror
+Updating local grokmirror with changes on master
+Everything up-to-date
+
+Entering /home/vireshk/work/repos/tools/lwn
+On branch master
+nothing to commit, working tree clean
+post-git trigger: updating grokmirror
+Updating local grokmirror with changes on master
+Everything up-to-date
+
+
+
+
+Tue Dec 11 13:00:01 IST 2018
+
+Entering /home/vireshk/work/repos/devel/linux
+post-git trigger: updating grokmirror
+Updating local grokmirror with changes on master
+To ssh://git.linaro.org/people/viresh.kumar/backup/linux.git
+ 23bdc93bc0c5..7ed4348fb272 bkp/cpufreq/constraints -> bkp/cpufreq/constraints
+ + 0b71efed2eda...528ea42245de pm/bleeding-edge -> pm/bleeding-edge (forced update)
+ + 0b71efed2eda...c332f1e0d962 pm/linux-next -> pm/linux-next (forced update)
+ 2595646791c3..40e020c129cf pm/master -> pm/master
+ + 0b71efed2eda...c332f1e0d962 pm/testing -> pm/testing (forced update)
+
+Entering /home/vireshk/work/repos/tools/cpufreq-tests
+post-git trigger: updating grokmirror
+Updating local grokmirror with changes on master
+Everything up-to-date
+
+Entering /home/vireshk/scripts
diff --git a/mutt/incoming/.procmaillog b/mutt/incoming/.procmaillog
index aee9ffd..047070a 100644
--- a/mutt/incoming/.procmaillog
+++ b/mutt/incoming/.procmaillog
@@ -652,3 +652,6 @@ From vireshk Thu Nov 29 09:34:38 2018
From vireshk Mon Dec 3 09:09:32 2018
Subject: [PATCH v11 2/2] cpufreq: qcom-hw: Add support for QCOM cpufreq HW dri
Folder: PATCH_v11_2-2_cpufreq_qcom-hw_Add_support_for_QCOM_cpufreq_H 16145
+From vireshk Tue Dec 11 09:34:22 2018
+ Subject: [RFC PATCH] PM / OPP: Always expose one supply in debugfs
+ Folder: RFC_PATCH_PM_OPP_Always_expose_one_supply_in_debugfs.mbox 5789
diff --git a/mutt/incoming/PATCH_v11_2-2_cpufreq_qcom-hw_Add_support_for_QCOM_cpufreq_HW_driver.mbox b/mutt/incoming/PATCH_v11_2-2_cpufreq_qcom-hw_Add_support_for_QCOM_cpufreq_HW_driver.mbox
deleted file mode 100644
index 48ad7e6..0000000
--- a/mutt/incoming/PATCH_v11_2-2_cpufreq_qcom-hw_Add_support_for_QCOM_cpufreq_HW_driver.mbox
+++ /dev/null
@@ -1,429 +0,0 @@
-From vireshk Mon Dec 3 09:09:32 2018
-Delivered-To: viresh.kumar@linaro.org
-Received: from gmail-pop.l.google.com [74.125.130.108] by vireshk-i7 with POP3 (fetchmail-6.3.26) for <vireshk@localhost> (single-drop); Mon, 03 Dec 2018 09:09:32 +0530 (IST)
-Received: by 2002:a02:b5bb:0:0:0:0:0 with SMTP id m56csp5494241jaj; Sat, 1 Dec 2018 19:55:29 -0800 (PST)
-X-Google-Smtp-Source: AFSGD/U4KZeR4cenliCTQKKjJgqCYNTaU/0WUtHnjh1PBIMcbbj5/uPiuajd87zeAX8oYz62fkpK
-X-Received: by 2002:a17:902:a411:: with SMTP id p17mr11111841plq.292.1543722929622; Sat, 01 Dec 2018 19:55:29 -0800 (PST)
-ARC-Seal: i=1; a=rsa-sha256; t=1543722929; cv=none; d=google.com; s=arc-20160816; b=cSvi27tqRo42ALICCtpB0qj92zun8RezehSS9emuXfQjNw23Pd4AuvFXXDJNEXgkU3 AY6Xtei8y4hAq0P1WNboT0PwnbNMk9YdMiVTu5rI1MVhCF1MNYpe3av7BEnwH27GscP5 47wsJOt9vcgZ5UMTVWAvcreuGwsZ0+Zmwjwg0xIfPnDdUX9we6XP9aozoQh61tCVuKAL vwgnYOAZdt8OBNRJeobVYVK9QCh0730ya/vgwhjmvsBXUOz2pjlx1qWO4C4dJNmBpqqx H3rnOd/Y2Z8nueuTIko0N2od+VdADCsZgjxH2988PxMJSCnuRC+/DVi/c4yM8guQuWp8 hqDQ==
-ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=references:in-reply-to:message-id:date:subject:cc:to:from :dmarc-filter:dkim-signature:dkim-signature; bh=3smYmBqF8Bgaa+AwCcjdYIqnmCLOFvwiO/qMo9u+AMc=; b=eqtusj2D8axFG0Bm8xsB47GBlgwqAcxbVy9otOjQszeu3ANHY/ApPV9+Rk6Wjl0FZU WOSJfuFcL5bFrYpJik4RK444EeKR+cbA9EGW8RgI6WeyaJHDJKoyEpGpDs4/kcZkVQ0d yB5Gf0r+suz7glrnVjWFTC2WyYIStb9hluYlnvvaAOId3FzNrblN5qtDQR7cEm95BoEZ q2izZ/bkCw5y1tjraAxGf36HqvQVLus2zJaxv9WU3Y0r7rf68vPHkH7p62eIojw79VTW tUCrqIdfilsVHcBm033vRemVxVq2kk5ZJcUyTusjm/uzoYJZkNJIJhWp0rQyMPWuDaLj ng9w==
-ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@codeaurora.org header.s=default header.b=CZK8Mhs7; dkim=pass header.i=@codeaurora.org header.s=default header.b=l0y44bQb; spf=pass (google.com: domain of tdas@codeaurora.org designates 198.145.29.96 as permitted sender) smtp.mailfrom=tdas@codeaurora.org
-Return-Path: <tdas@codeaurora.org>
-Received: from smtp.codeaurora.org (smtp.codeaurora.org. [198.145.29.96]) by mx.google.com with ESMTPS id o127si11225277pfo.251.2018.12.01.19.55.29 for <viresh.kumar@linaro.org> (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 01 Dec 2018 19:55:29 -0800 (PST)
-Received-SPF: pass (google.com: domain of tdas@codeaurora.org designates 198.145.29.96 as permitted sender) client-ip=198.145.29.96;
-Authentication-Results: mx.google.com; dkim=pass header.i=@codeaurora.org header.s=default header.b=CZK8Mhs7; dkim=pass header.i=@codeaurora.org header.s=default header.b=l0y44bQb; spf=pass (google.com: domain of tdas@codeaurora.org designates 198.145.29.96 as permitted sender) smtp.mailfrom=tdas@codeaurora.org
-Received: by smtp.codeaurora.org (Postfix, from userid 1000) id 51E5C60C54; Sun, 2 Dec 2018 03:55:29 +0000 (UTC)
-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1543722929; bh=ZK0ogZ3iAgxn33xRyYiQCCzTISCWcXwmjxmYLE/fKd0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=CZK8Mhs7M/onKIJvgksKg2Bhu1jSjMW+IQtcfM11CFVpAS8HoAg8GLA1ifDXHQv6U HVZxfJ9Ug+ZvmtotJlaMESHvBBE22bUg9sACg0Sa4EZRbRN3W3D6oOpazkAgubsQ+S 7vnZA9m45l8e6mX2ZFrk4d417xkr4MaGxjd9EAT0=
-X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on pdx-caf-mail.web.codeaurora.org
-X-Spam-Level:
-X-Spam-Status: No, score=-2.7 required=2.0 tests=ALL_TRUSTED,BAYES_00, DKIM_INVALID,DKIM_SIGNED autolearn=no autolearn_force=no version=3.4.0
-Received: from tdas-linux.qualcomm.com (blr-c-bdr-fw-01_globalnat_allzones-outside.qualcomm.com [103.229.19.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: tdas@smtp.codeaurora.org) by smtp.codeaurora.org (Postfix) with ESMTPSA id 9469560B7F; Sun, 2 Dec 2018 03:55:23 +0000 (UTC)
-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1543722927; bh=ZK0ogZ3iAgxn33xRyYiQCCzTISCWcXwmjxmYLE/fKd0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=l0y44bQb1XKAUBzU1Pt5NgUdvcA9YJcDDYQRHMGZRqY2z/QfrQV+ganCdesVilb+Z SHWvj0mthS70X63D+qkGjSUTI29kqdmYS9VvPy2ClOAJd0wyAU88FtEnpaMsl3MQIF KQnFXyCQnJ33ZDtm4L5veku7IZC9lVB1Vl+iaWrI=
-DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org 9469560B7F
-Authentication-Results: pdx-caf-mail.web.codeaurora.org; dmarc=none (p=none dis=none) header.from=codeaurora.org
-Authentication-Results: pdx-caf-mail.web.codeaurora.org; spf=none smtp.mailfrom=tdas@codeaurora.org
-From: Taniya Das <tdas@codeaurora.org>
-To: "Rafael J. Wysocki" <rjw@rjwysocki.net>, Viresh Kumar <viresh.kumar@linaro.org>, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org, Stephen Boyd <sboyd@kernel.org>
-Cc: Rajendra Nayak <rnayak@codeaurora.org>, devicetree@vger.kernel.org, robh@kernel.org, skannan@codeaurora.org, linux-arm-msm@vger.kernel.org, evgreen@google.com, Taniya Das <tdas@codeaurora.org>, Stephen Boyd <swboyd@chromium.org>
-Subject: [PATCH v11 2/2] cpufreq: qcom-hw: Add support for QCOM cpufreq HW driver
-Date: Sun, 2 Dec 2018 09:25:03 +0530
-Message-Id: <1543722903-10989-3-git-send-email-tdas@codeaurora.org>
-X-Mailer: git-send-email 1.9.1
-In-Reply-To: <1543722903-10989-1-git-send-email-tdas@codeaurora.org>
-References: <1543722903-10989-1-git-send-email-tdas@codeaurora.org>
-Status: RO
-X-Status: A
-Content-Length: 10566
-Lines: 391
-
-The CPUfreq HW present in some QCOM chipsets offloads the steps necessary
-for changing the frequency of CPUs. The driver implements the cpufreq
-driver interface for this hardware engine.
-
-Signed-off-by: Saravana Kannan <skannan@codeaurora.org>
-Signed-off-by: Stephen Boyd <swboyd@chromium.org>
-Signed-off-by: Taniya Das <tdas@codeaurora.org>
----
- drivers/cpufreq/Kconfig.arm | 11 ++
- drivers/cpufreq/Makefile | 1 +
- drivers/cpufreq/qcom-cpufreq-hw.c | 334 ++++++++++++++++++++++++++++++++++++++
- 3 files changed, 346 insertions(+)
- create mode 100644 drivers/cpufreq/qcom-cpufreq-hw.c
-
-diff --git a/drivers/cpufreq/Kconfig.arm b/drivers/cpufreq/Kconfig.arm
-index 4e1131e..688f102 100644
---- a/drivers/cpufreq/Kconfig.arm
-+++ b/drivers/cpufreq/Kconfig.arm
-@@ -114,6 +114,17 @@ config ARM_QCOM_CPUFREQ_KRYO
-
- If in doubt, say N.
-
-+config ARM_QCOM_CPUFREQ_HW
-+ tristate "QCOM CPUFreq HW driver"
-+ depends on ARCH_QCOM || COMPILE_TEST
-+ help
-+ Support for the CPUFreq HW driver.
-+ Some QCOM chipsets have a HW engine to offload the steps
-+ necessary for changing the frequency of the CPUs. Firmware loaded
-+ in this engine exposes a programming interface to the OS.
-+ The driver implements the cpufreq interface for this HW engine.
-+ Say Y if you want to support CPUFreq HW.
-+
- config ARM_S3C_CPUFREQ
- bool
- help
-diff --git a/drivers/cpufreq/Makefile b/drivers/cpufreq/Makefile
-index d5ee456..08c071b 100644
---- a/drivers/cpufreq/Makefile
-+++ b/drivers/cpufreq/Makefile
-@@ -61,6 +61,7 @@ obj-$(CONFIG_MACH_MVEBU_V7) += mvebu-cpufreq.o
- obj-$(CONFIG_ARM_OMAP2PLUS_CPUFREQ) += omap-cpufreq.o
- obj-$(CONFIG_ARM_PXA2xx_CPUFREQ) += pxa2xx-cpufreq.o
- obj-$(CONFIG_PXA3xx) += pxa3xx-cpufreq.o
-+obj-$(CONFIG_ARM_QCOM_CPUFREQ_HW) += qcom-cpufreq-hw.o
- obj-$(CONFIG_ARM_QCOM_CPUFREQ_KRYO) += qcom-cpufreq-kryo.o
- obj-$(CONFIG_ARM_S3C2410_CPUFREQ) += s3c2410-cpufreq.o
- obj-$(CONFIG_ARM_S3C2412_CPUFREQ) += s3c2412-cpufreq.o
-diff --git a/drivers/cpufreq/qcom-cpufreq-hw.c b/drivers/cpufreq/qcom-cpufreq-hw.c
-new file mode 100644
-index 0000000..8dc6b73
---- /dev/null
-+++ b/drivers/cpufreq/qcom-cpufreq-hw.c
-@@ -0,0 +1,334 @@
-+// SPDX-License-Identifier: GPL-2.0
-+/*
-+ * Copyright (c) 2018, The Linux Foundation. All rights reserved.
-+ */
-+
-+#include <linux/bitfield.h>
-+#include <linux/cpufreq.h>
-+#include <linux/init.h>
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+#include <linux/of_address.h>
-+#include <linux/of_platform.h>
-+
-+#define LUT_MAX_ENTRIES 40U
-+#define LUT_SRC GENMASK(31, 30)
-+#define LUT_L_VAL GENMASK(7, 0)
-+#define LUT_CORE_COUNT GENMASK(18, 16)
-+#define LUT_ROW_SIZE 32
-+#define CLK_HW_DIV 2
-+
-+/* Register offsets */
-+#define REG_ENABLE 0x0
-+#define REG_LUT_TABLE 0x110
-+#define REG_PERF_STATE 0x920
-+
-+struct cpufreq_qcom {
-+ struct cpufreq_frequency_table *table;
-+ void __iomem *perf_state_reg;
-+ cpumask_t related_cpus;
-+};
-+
-+static struct cpufreq_qcom *qcom_freq_domain_map[NR_CPUS];
-+
-+static int qcom_cpufreq_hw_target_index(struct cpufreq_policy *policy,
-+ unsigned int index)
-+{
-+ void __iomem *perf_state_reg = policy->driver_data;
-+
-+ writel_relaxed(index, perf_state_reg);
-+
-+ return 0;
-+}
-+
-+static unsigned int qcom_cpufreq_hw_get(unsigned int cpu)
-+{
-+ void __iomem *perf_state_reg;
-+ struct cpufreq_policy *policy;
-+ unsigned int index;
-+
-+ policy = cpufreq_cpu_get_raw(cpu);
-+ if (!policy)
-+ return 0;
-+
-+ perf_state_reg = policy->driver_data;
-+
-+ index = readl_relaxed(perf_state_reg);
-+ index = min(index, LUT_MAX_ENTRIES - 1);
-+
-+ return policy->freq_table[index].frequency;
-+}
-+
-+static unsigned int qcom_cpufreq_hw_fast_switch(struct cpufreq_policy *policy,
-+ unsigned int target_freq)
-+{
-+ void __iomem *perf_state_reg = policy->driver_data;
-+ int index;
-+
-+ index = policy->cached_resolved_idx;
-+ if (index < 0)
-+ return 0;
-+
-+ writel_relaxed(index, perf_state_reg);
-+
-+ return policy->freq_table[index].frequency;
-+}
-+
-+static int qcom_cpufreq_hw_cpu_init(struct cpufreq_policy *policy)
-+{
-+ struct cpufreq_qcom *c;
-+
-+ c = qcom_freq_domain_map[policy->cpu];
-+ if (!c) {
-+ pr_err("No scaling support for CPU%d\n", policy->cpu);
-+ return -ENODEV;
-+ }
-+
-+ cpumask_copy(policy->cpus, &c->related_cpus);
-+
-+ policy->fast_switch_possible = true;
-+ policy->freq_table = c->table;
-+ policy->driver_data = c->perf_state_reg;
-+
-+ return 0;
-+}
-+
-+static struct freq_attr *qcom_cpufreq_hw_attr[] = {
-+ &cpufreq_freq_attr_scaling_available_freqs,
-+ &cpufreq_freq_attr_scaling_boost_freqs,
-+ NULL
-+};
-+
-+static struct cpufreq_driver cpufreq_qcom_hw_driver = {
-+ .flags = CPUFREQ_STICKY | CPUFREQ_NEED_INITIAL_FREQ_CHECK |
-+ CPUFREQ_HAVE_GOVERNOR_PER_POLICY,
-+ .verify = cpufreq_generic_frequency_table_verify,
-+ .target_index = qcom_cpufreq_hw_target_index,
-+ .get = qcom_cpufreq_hw_get,
-+ .init = qcom_cpufreq_hw_cpu_init,
-+ .fast_switch = qcom_cpufreq_hw_fast_switch,
-+ .name = "qcom-cpufreq-hw",
-+ .attr = qcom_cpufreq_hw_attr,
-+};
-+
-+static int qcom_cpufreq_hw_read_lut(struct device *dev, struct cpufreq_qcom *c,
-+ void __iomem *base, unsigned long xo_rate,
-+ unsigned long cpu_hw_rate)
-+{
-+ u32 data, src, lval, i, core_count, prev_cc = 0, prev_freq = 0, freq;
-+ unsigned int max_cores = cpumask_weight(&c->related_cpus);
-+
-+ c->table = devm_kcalloc(dev, LUT_MAX_ENTRIES + 1,
-+ sizeof(*c->table), GFP_KERNEL);
-+ if (!c->table)
-+ return -ENOMEM;
-+
-+ for (i = 0; i < LUT_MAX_ENTRIES; i++) {
-+ data = readl_relaxed(base + REG_LUT_TABLE + i * LUT_ROW_SIZE);
-+ src = FIELD_GET(LUT_SRC, data);
-+ lval = FIELD_GET(LUT_L_VAL, data);
-+ core_count = FIELD_GET(LUT_CORE_COUNT, data);
-+
-+ if (src)
-+ freq = xo_rate * lval / 1000;
-+ else
-+ freq = cpu_hw_rate / 1000;
-+
-+ /* Ignore boosts in the middle of the table */
-+ if (core_count != max_cores) {
-+ c->table[i].frequency = CPUFREQ_ENTRY_INVALID;
-+ } else {
-+ c->table[i].frequency = freq;
-+ dev_dbg(dev, "index=%d freq=%d, core_count %d\n", i,
-+ freq, core_count);
-+ }
-+
-+ /*
-+ * Two of the same frequencies with the same core counts means
-+ * end of table
-+ */
-+ if (i > 0 && prev_freq == freq && prev_cc == core_count) {
-+ struct cpufreq_frequency_table *prev = &c->table[i - 1];
-+
-+ /*
-+ * Only treat the last frequency that might be a boost
-+ * as the boost frequency
-+ */
-+ if (prev_cc != max_cores) {
-+ prev->frequency = prev_freq;
-+ prev->flags = CPUFREQ_BOOST_FREQ;
-+ }
-+
-+ break;
-+ }
-+
-+ prev_cc = core_count;
-+ prev_freq = freq;
-+ }
-+
-+ c->table[i].frequency = CPUFREQ_TABLE_END;
-+
-+ return 0;
-+}
-+
-+static void qcom_get_related_cpus(int index, struct cpumask *m)
-+{
-+ struct device_node *cpu_np;
-+ struct of_phandle_args args;
-+ int cpu, ret;
-+
-+ for_each_possible_cpu(cpu) {
-+ cpu_np = of_cpu_device_node_get(cpu);
-+ if (!cpu_np)
-+ continue;
-+
-+ ret = of_parse_phandle_with_args(cpu_np, "qcom,freq-domain",
-+ "#freq-domain-cells", 0,
-+ &args);
-+ of_node_put(cpu_np);
-+ if (ret < 0)
-+ continue;
-+
-+ if (index == args.args[0])
-+ cpumask_set_cpu(cpu, m);
-+ }
-+}
-+
-+static int qcom_cpu_resources_init(struct platform_device *pdev,
-+ unsigned int cpu, int index,
-+ unsigned long xo_rate,
-+ unsigned long cpu_hw_rate)
-+{
-+ struct cpufreq_qcom *c;
-+ struct resource *res;
-+ struct device *dev = &pdev->dev;
-+ void __iomem *base;
-+ int ret, cpu_r;
-+
-+ c = devm_kzalloc(dev, sizeof(*c), GFP_KERNEL);
-+ if (!c)
-+ return -ENOMEM;
-+
-+ res = platform_get_resource(pdev, IORESOURCE_MEM, index);
-+ base = devm_ioremap_resource(dev, res);
-+ if (IS_ERR(base))
-+ return PTR_ERR(base);
-+
-+ /* HW should be in enabled state to proceed */
-+ if (!(readl_relaxed(base + REG_ENABLE) & 0x1)) {
-+ dev_err(dev, "Domain-%d cpufreq hardware not enabled\n", index);
-+ return -ENODEV;
-+ }
-+
-+ qcom_get_related_cpus(index, &c->related_cpus);
-+ if (!cpumask_weight(&c->related_cpus)) {
-+ dev_err(dev, "Domain-%d failed to get related CPUs\n", index);
-+ return -ENOENT;
-+ }
-+
-+ c->perf_state_reg = base + REG_PERF_STATE;
-+
-+ ret = qcom_cpufreq_hw_read_lut(dev, c, base, xo_rate, cpu_hw_rate);
-+ if (ret) {
-+ dev_err(dev, "Domain-%d failed to read LUT\n", index);
-+ return ret;
-+ }
-+
-+ for_each_cpu(cpu_r, &c->related_cpus)
-+ qcom_freq_domain_map[cpu_r] = c;
-+
-+ return 0;
-+}
-+
-+static int qcom_cpufreq_hw_driver_probe(struct platform_device *pdev)
-+{
-+ struct device_node *cpu_np;
-+ struct of_phandle_args args;
-+ struct clk *clk;
-+ unsigned int cpu;
-+ unsigned long xo_rate, cpu_hw_rate;
-+ int ret;
-+
-+ clk = clk_get(&pdev->dev, "xo");
-+ if (IS_ERR(clk))
-+ return PTR_ERR(clk);
-+
-+ xo_rate = clk_get_rate(clk);
-+ clk_put(clk);
-+
-+ clk = clk_get(&pdev->dev, "alternate");
-+ if (IS_ERR(clk))
-+ return PTR_ERR(clk);
-+
-+ cpu_hw_rate = clk_get_rate(clk) / CLK_HW_DIV;
-+ clk_put(clk);
-+
-+ for_each_possible_cpu(cpu) {
-+ cpu_np = of_cpu_device_node_get(cpu);
-+ if (!cpu_np) {
-+ dev_dbg(&pdev->dev, "Failed to get cpu %d device\n",
-+ cpu);
-+ continue;
-+ }
-+
-+ ret = of_parse_phandle_with_args(cpu_np, "qcom,freq-domain",
-+ "#freq-domain-cells", 0,
-+ &args);
-+ of_node_put(cpu_np);
-+ if (ret)
-+ return ret;
-+
-+ if (qcom_freq_domain_map[cpu])
-+ continue;
-+
-+ ret = qcom_cpu_resources_init(pdev, cpu, args.args[0],
-+ xo_rate, cpu_hw_rate);
-+ if (ret)
-+ return ret;
-+ }
-+
-+ ret = cpufreq_register_driver(&cpufreq_qcom_hw_driver);
-+ if (ret) {
-+ dev_err(&pdev->dev, "CPUFreq HW driver failed to register\n");
-+ return ret;
-+ }
-+
-+ dev_dbg(&pdev->dev, "QCOM CPUFreq HW driver initialized\n");
-+
-+ return 0;
-+}
-+
-+static int qcom_cpufreq_hw_driver_remove(struct platform_device *pdev)
-+{
-+ return cpufreq_unregister_driver(&cpufreq_qcom_hw_driver);
-+}
-+
-+static const struct of_device_id qcom_cpufreq_hw_match[] = {
-+ { .compatible = "qcom,cpufreq-hw" },
-+ {}
-+};
-+MODULE_DEVICE_TABLE(of, qcom_cpufreq_hw_match);
-+
-+static struct platform_driver qcom_cpufreq_hw_driver = {
-+ .probe = qcom_cpufreq_hw_driver_probe,
-+ .remove = qcom_cpufreq_hw_driver_remove,
-+ .driver = {
-+ .name = "qcom-cpufreq-hw",
-+ .of_match_table = qcom_cpufreq_hw_match,
-+ },
-+};
-+
-+static int __init qcom_cpufreq_hw_init(void)
-+{
-+ return platform_driver_register(&qcom_cpufreq_hw_driver);
-+}
-+subsys_initcall(qcom_cpufreq_hw_init);
-+
-+static void __exit qcom_cpufreq_hw_exit(void)
-+{
-+ platform_driver_unregister(&qcom_cpufreq_hw_driver);
-+}
-+module_exit(qcom_cpufreq_hw_exit);
-+
-+MODULE_DESCRIPTION("QCOM CPUFREQ HW Driver");
-+MODULE_LICENSE("GPL v2");
---
-Qualcomm INDIA, on behalf of Qualcomm Innovation Center, Inc.is a member
-of the Code Aurora Forum, hosted by the Linux Foundation.
-
diff --git a/mutt/incoming/RFC_PATCH_PM_OPP_Always_expose_one_supply_in_debugfs.mbox b/mutt/incoming/RFC_PATCH_PM_OPP_Always_expose_one_supply_in_debugfs.mbox
new file mode 100644
index 0000000..71d1204
--- /dev/null
+++ b/mutt/incoming/RFC_PATCH_PM_OPP_Always_expose_one_supply_in_debugfs.mbox
@@ -0,0 +1,92 @@
+From vireshk Tue Dec 11 09:34:22 2018
+Delivered-To: viresh.kumar@linaro.org
+Received: from gmail-pop.l.google.com [74.125.130.108] by vireshk-i7 with POP3 (fetchmail-6.3.26) for <vireshk@localhost> (single-drop); Tue, 11 Dec 2018 09:34:22 +0530 (IST)
+Received: by 2002:a02:b5bb:0:0:0:0:0 with SMTP id m56csp3417685jaj; Mon, 10 Dec 2018 03:32:54 -0800 (PST)
+X-Google-Smtp-Source: AFSGD/UcKQfLp6L/Gd/jTeVY0EkdcY88tNFZjV+He4URz9cfnQ5NDxclxbu6J1Z76zcP903fHOXp
+X-Received: by 2002:a62:46d0:: with SMTP id o77mr12128358pfi.172.1544441574304; Mon, 10 Dec 2018 03:32:54 -0800 (PST)
+ARC-Seal: i=1; a=rsa-sha256; t=1544441574; cv=none; d=google.com; s=arc-20160816; b=IDwziVPt2vTEoWAGEmez1+DGB3V/4vvrLKVnHFG23jko+86Rbbi6Ov2m5kRT82caQg bGkBL6D+nVqfTaH3JvLqDR6T7Tx0s5LOkkNOHyDrXmW7Ol1J/hpSCN0ViiCRg/fga4xx sDL+2041PDuQH+xlrWplVE9fn7z9s8SzkNh5p8UiHjIboNlPOCfMgo6X6yuQL30VtfEn bkVHHb3cmM225HonNYAOPTMP3AoyK7Ux4isBQjhqB6qtLej3AnkIb2gLzaEzdXjJf7xy cO4R9wrOlfWzjWGhkGM8qjF3YThLqvEW8l18KZtuXd1DvS94aZvnuQyHmg61T9K8cgDl 69dg==
+ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:dmarc-filter:delivered-to; bh=p37lke7mvZLyOzBDmyEQj5wAqLSlwjUpT4wSip6QlAI=; b=UJsh6TDQ2E7tiDNok2qRdq7rdrMDEoxH1kZfrDyGIJI0TX1QMadISGr1e92Cbcg6rH KcX46FGt7SAX/BUJqNtA4+M0Q1aXnNobAbhpeE0LvRFng0Z0kUNrK+fs9/qBmkX6SRXA oulOADE0PxZ2UdVfaOMjtp1lI24XlUdJvM6DbogkwR8K9tLbaYWl/MSNjkn4s3dYhywc h9BHYonH8pTpFQ7DwfxCHqqdaFbEYntBbdbxkYmaBGflblM6SZSwYdd1mtIW4z+5cHYY xf/p9hZcGATrUpyjfMoTduAUYNb3ndGxKrtb82w76KjB6xb1XMf22clC5kNPnIIDyE4c gjJQ==
+ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of srs0=bqey=ot=arm.com=quentin.perret@kernel.org designates 198.145.29.99 as permitted sender) smtp.mailfrom="SRS0=Bqey=OT=arm.com=quentin.perret@kernel.org"
+Return-Path: <SRS0=Bqey=OT=arm.com=quentin.perret@kernel.org>
+Received: from mail.kernel.org (mail.kernel.org. [198.145.29.99]) by mx.google.com with ESMTPS id c22si8859806pgb.254.2018.12.10.03.32.54 for <viresh.kumar@linaro.org> (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 10 Dec 2018 03:32:54 -0800 (PST)
+Received-SPF: pass (google.com: domain of srs0=bqey=ot=arm.com=quentin.perret@kernel.org designates 198.145.29.99 as permitted sender) client-ip=198.145.29.99;
+Authentication-Results: mx.google.com; spf=pass (google.com: domain of srs0=bqey=ot=arm.com=quentin.perret@kernel.org designates 198.145.29.99 as permitted sender) smtp.mailfrom="SRS0=Bqey=OT=arm.com=quentin.perret@kernel.org"
+Received: by mail.kernel.org (Postfix) id 168EE20880; Mon, 10 Dec 2018 11:32:54 +0000 (UTC)
+Delivered-To: vireshk@kernel.org
+Received: from foss.arm.com (usa-sjc-mx-foss1.foss.arm.com [217.140.101.70]) by mail.kernel.org (Postfix) with ESMTP id C23042084E; Mon, 10 Dec 2018 11:32:53 +0000 (UTC)
+DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org C23042084E
+Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=arm.com
+Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=quentin.perret@arm.com
+Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 7279F15AB; Mon, 10 Dec 2018 03:32:53 -0800 (PST)
+Received: from queper01-lin.cambridge.arm.com (queper01-lin.cambridge.arm.com [10.1.195.48]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 3D9923F6A8; Mon, 10 Dec 2018 03:32:52 -0800 (PST)
+From: Quentin Perret <quentin.perret@arm.com>
+To: vireshk@kernel.org, nm@ti.com, sboyd@kernel.org
+Cc: linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org
+Subject: [RFC PATCH] PM / OPP: Always expose one supply in debugfs
+Date: Mon, 10 Dec 2018 11:32:47 +0000
+Message-Id: <20181210113247.11412-1-quentin.perret@arm.com>
+X-Mailer: git-send-email 2.19.2
+MIME-Version: 1.0
+Content-Transfer-Encoding: 8bit
+Content-Length: 1658
+Lines: 58
+
+On some platforms, the opp_table->regulator_count field is kept at zero
+even though opp->supplies is always allocated. However, the loop used to
+display the supplies in the debugfs doesn't deal correctly with this,
+which results in the supplies not being displayed in debugfs on those
+platforms.
+
+Fix this by making sure to always display at least once supply in
+debugfs.
+
+Signed-off-by: Quentin Perret <quentin.perret@arm.com>
+
+---
+
+This has been observed on Juno r2 which uses SCPI and Hikey960 which
+uses DT. I am not particularly familiar with that part of the code, so
+I'm not sure if this is even remotely correct (hence the RFC tag).
+
+I first thought setting opp_table->regulator_count to 1 would be the
+right fix but that causes other issues. This fix seems to work OK on
+Juno and Hikey960, at least.
+
+Feedback is welcome :-)
+
+Thanks,
+Quentin
+---
+ drivers/opp/debugfs.c | 8 +++++---
+ 1 file changed, 5 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/opp/debugfs.c b/drivers/opp/debugfs.c
+index e6828e5f81b0..2c14564575cb 100644
+--- a/drivers/opp/debugfs.c
++++ b/drivers/opp/debugfs.c
+@@ -40,9 +40,9 @@ static bool opp_debug_create_supplies(struct dev_pm_opp *opp,
+ struct dentry *pdentry)
+ {
+ struct dentry *d;
+- int i;
++ int i = 0;
+
+- for (i = 0; i < opp_table->regulator_count; i++) {
++ do {
+ char name[15];
+
+ snprintf(name, sizeof(name), "supply-%d", i);
+@@ -68,7 +68,9 @@ static bool opp_debug_create_supplies(struct dev_pm_opp *opp,
+ if (!debugfs_create_ulong("u_amp", S_IRUGO, d,
+ &opp->supplies[i].u_amp))
+ return false;
+- }
++
++ i++;
++ } while (i < opp_table->regulator_count);
+
+ return true;
+ }
+--
+2.19.2
+