[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20200412032123.3896114-4-jiaxun.yang@flygoat.com>
Date: Sun, 12 Apr 2020 11:20:33 +0800
From: Jiaxun Yang <jiaxun.yang@...goat.com>
To: linux-mips@...r.kernel.org
Cc: dietmar.eggemann@....com, Jiaxun Yang <jiaxun.yang@...goat.com>,
Thomas Bogendoerfer <tsbogend@...ha.franken.de>,
Huacai Chen <chenhc@...ote.com>,
Peter Zijlstra <peterz@...radead.org>,
Ingo Molnar <mingo@...hat.com>,
Arnaldo Carvalho de Melo <acme@...nel.org>,
Mark Rutland <mark.rutland@....com>,
Alexander Shishkin <alexander.shishkin@...ux.intel.com>,
Jiri Olsa <jolsa@...hat.com>,
Namhyung Kim <namhyung@...nel.org>,
Florian Fainelli <f.fainelli@...il.com>,
Robert Richter <rric@...nel.org>,
Sudeep Holla <sudeep.holla@....com>,
Greg Kroah-Hartman <gregkh@...uxfoundation.org>,
"Rafael J. Wysocki" <rafael@...nel.org>,
Daniel Lezcano <daniel.lezcano@...aro.org>,
Thomas Gleixner <tglx@...utronix.de>,
Jason Cooper <jason@...edaemon.net>,
Marc Zyngier <maz@...nel.org>,
Paul Burton <paulburton@...nel.org>,
Allison Randal <allison@...utok.net>,
Enrico Weigelt <info@...ux.net>,
Kate Stewart <kstewart@...uxfoundation.org>,
Vladimir Kondratiev <vladimir.kondratiev@...el.com>,
Alexios Zavras <alexios.zavras@...el.com>,
Paul Cercueil <paul@...pouillou.net>,
Zhou Yanjie <zhouyanjie@...o.com>,
周琰杰 (Zhou Yanjie)
<zhouyanjie@...yeetech.com>, YunQiang Su <syq@...ian.org>,
Arnd Bergmann <arnd@...db.de>,
Serge Semin <fancer.lancer@...il.com>,
Matt Redfearn <matt.redfearn@...s.com>,
Richard Fontana <rfontana@...hat.com>,
Steve Winslow <swinslow@...il.com>,
afzal mohammed <afzal.mohd.ma@...il.com>,
Peter Xu <peterx@...hat.com>,
Kamal Dasu <kdasu.kdev@...il.com>,
Oleksij Rempel <linux@...pel-privat.de>,
Mike Rapoport <rppt@...ux.ibm.com>,
linux-kernel@...r.kernel.org,
bcm-kernel-feedback-list@...adcom.com, oprofile-list@...ts.sf.net,
linux-pm@...r.kernel.org
Subject: [PATCH v2 03/11] arch_topology: Make it avilable for MIPS
Simply drop unnecessary archtecture limitions and add dummy
function for platforms without OF support.
As some of the functions are conflicting with Arm's platform
implementations, we mark them as weak.
Signed-off-by: Jiaxun Yang <jiaxun.yang@...goat.com>
--
v2: Use weak instead of ifdef to exclude functions for Arm.
---
drivers/base/arch_topology.c | 116 ++++++++++++++++++-----------------
1 file changed, 60 insertions(+), 56 deletions(-)
diff --git a/drivers/base/arch_topology.c b/drivers/base/arch_topology.c
index 4d0a0038b476..13dc4fbf043f 100644
--- a/drivers/base/arch_topology.c
+++ b/drivers/base/arch_topology.c
@@ -143,57 +143,6 @@ void topology_normalize_cpu_scale(void)
}
}
-bool __init topology_parse_cpu_capacity(struct device_node *cpu_node, int cpu)
-{
- struct clk *cpu_clk;
- static bool cap_parsing_failed;
- int ret;
- u32 cpu_capacity;
-
- if (cap_parsing_failed)
- return false;
-
- ret = of_property_read_u32(cpu_node, "capacity-dmips-mhz",
- &cpu_capacity);
- if (!ret) {
- if (!raw_capacity) {
- raw_capacity = kcalloc(num_possible_cpus(),
- sizeof(*raw_capacity),
- GFP_KERNEL);
- if (!raw_capacity) {
- cap_parsing_failed = true;
- return false;
- }
- }
- raw_capacity[cpu] = cpu_capacity;
- pr_debug("cpu_capacity: %pOF cpu_capacity=%u (raw)\n",
- cpu_node, raw_capacity[cpu]);
-
- /*
- * Update freq_factor for calculating early boot cpu capacities.
- * For non-clk CPU DVFS mechanism, there's no way to get the
- * frequency value now, assuming they are running at the same
- * frequency (by keeping the initial freq_factor value).
- */
- cpu_clk = of_clk_get(cpu_node, 0);
- if (!PTR_ERR_OR_ZERO(cpu_clk)) {
- per_cpu(freq_factor, cpu) =
- clk_get_rate(cpu_clk) / 1000;
- clk_put(cpu_clk);
- }
- } else {
- if (raw_capacity) {
- pr_err("cpu_capacity: missing %pOF raw capacity\n",
- cpu_node);
- pr_err("cpu_capacity: partial information: fallback to 1024 for all CPUs\n");
- }
- cap_parsing_failed = true;
- free_raw_capacity();
- }
-
- return !ret;
-}
-
#ifdef CONFIG_CPU_FREQ
static cpumask_var_t cpus_to_visit;
static void parsing_done_workfn(struct work_struct *work);
@@ -275,7 +224,58 @@ static void parsing_done_workfn(struct work_struct *work)
core_initcall(free_raw_capacity);
#endif
-#if defined(CONFIG_ARM64) || defined(CONFIG_RISCV)
+#if defined(CONFIG_OF)
+bool __init topology_parse_cpu_capacity(struct device_node *cpu_node, int cpu)
+{
+ struct clk *cpu_clk;
+ static bool cap_parsing_failed;
+ int ret;
+ u32 cpu_capacity;
+
+ if (cap_parsing_failed)
+ return false;
+
+ ret = of_property_read_u32(cpu_node, "capacity-dmips-mhz",
+ &cpu_capacity);
+ if (!ret) {
+ if (!raw_capacity) {
+ raw_capacity = kcalloc(num_possible_cpus(),
+ sizeof(*raw_capacity),
+ GFP_KERNEL);
+ if (!raw_capacity) {
+ cap_parsing_failed = true;
+ return false;
+ }
+ }
+ raw_capacity[cpu] = cpu_capacity;
+ pr_debug("cpu_capacity: %pOF cpu_capacity=%u (raw)\n",
+ cpu_node, raw_capacity[cpu]);
+
+ /*
+ * Update freq_factor for calculating early boot cpu capacities.
+ * For non-clk CPU DVFS mechanism, there's no way to get the
+ * frequency value now, assuming they are running at the same
+ * frequency (by keeping the initial freq_factor value).
+ */
+ cpu_clk = of_clk_get(cpu_node, 0);
+ if (!PTR_ERR_OR_ZERO(cpu_clk)) {
+ per_cpu(freq_factor, cpu) =
+ clk_get_rate(cpu_clk) / 1000;
+ clk_put(cpu_clk);
+ }
+ } else {
+ if (raw_capacity) {
+ pr_err("cpu_capacity: missing %pOF raw capacity\n",
+ cpu_node);
+ pr_err("cpu_capacity: partial information: fallback to 1024 for all CPUs\n");
+ }
+ cap_parsing_failed = true;
+ free_raw_capacity();
+ }
+
+ return !ret;
+}
+
/*
* This function returns the logic cpu number of the node.
* There are basically three kinds of return values:
@@ -461,7 +461,12 @@ static int __init parse_dt_topology(void)
of_node_put(cn);
return ret;
}
-#endif
+#else
+static int __init parse_dt_topology(void)
+{
+ return 0;
+}
+#endif /* CONFIG_OF */
/*
* cpu topology table
@@ -562,8 +567,8 @@ __weak int __init parse_acpi_topology(void)
return 0;
}
-#if defined(CONFIG_ARM64) || defined(CONFIG_RISCV)
-void __init init_cpu_topology(void)
+
+__weak void __init init_cpu_topology(void)
{
reset_cpu_topology();
@@ -576,4 +581,3 @@ void __init init_cpu_topology(void)
else if (of_have_populated_dt() && parse_dt_topology())
reset_cpu_topology();
}
-#endif
--
2.26.0.rc2
Powered by blists - more mailing lists