linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
From: Sudeep KarkadaNagesha <Sudeep.KarkadaNagesha@arm.com>
To: linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org,
	devicetree@vger.kernel.org, microblaze-uclinux@itee.uq.edu.au,
	linux@lists.openrisc.net, linuxppc-dev@lists.ozlabs.org
Cc: Jonas Bonn <jonas@southpole.se>, Michal Simek <monstr@monstr.eu>,
	Sudeep KarkadaNagesha <sudeep.karkadanagesha@arm.com>,
	Rob Herring <rob.herring@calxeda.com>,
	"Rafael J. Wysocki" <rjw@sisk.pl>,
	Grant Likely <grant.likely@linaro.org>
Subject: [RFC PATCH 3/4] powerpc: refactor of_get_cpu_node to support other architectures
Date: Thu, 15 Aug 2013 18:09:39 +0100	[thread overview]
Message-ID: <1376586580-5409-4-git-send-email-Sudeep.KarkadaNagesha@arm.com> (raw)
In-Reply-To: <1376586580-5409-1-git-send-email-Sudeep.KarkadaNagesha@arm.com>

From: Sudeep KarkadaNagesha <sudeep.karkadanagesha@arm.com>

Currently different drivers requiring to access cpu device node are
parsing the device tree themselves. Since the ordering in the DT need
not match the logical cpu ordering, the parsing logic needs to consider
that. However, this has resulted in lots of code duplication and in some
cases even incorrect logic.

It's better to consolidate them by adding support for getting cpu
device node for a given logical cpu index in DT core library. However
logical to physical index mapping can be architecture specific.

PowerPC has it's own implementation to get the cpu node for a given
logical index.

This patch refactors the current implementation of of_get_cpu_node.
This in preparation to move the implementation to DT core library.
It separates out the logical to physical mapping so that a default
matching of the physical id to the logical cpu index can be added
when moved to common code. Architecture specific code can override it.

Cc: Rob Herring <rob.herring@calxeda.com>
Cc: Grant Likely <grant.likely@linaro.org>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Sudeep KarkadaNagesha <sudeep.karkadanagesha@arm.com>
---
 arch/powerpc/kernel/prom.c | 70 ++++++++++++++++++++++++++++--------------=
----
 1 file changed, 43 insertions(+), 27 deletions(-)

diff --git a/arch/powerpc/kernel/prom.c b/arch/powerpc/kernel/prom.c
index eb23ac9..594c9f9 100644
--- a/arch/powerpc/kernel/prom.c
+++ b/arch/powerpc/kernel/prom.c
@@ -865,45 +865,61 @@ static int __init prom_reconfig_setup(void)
 __initcall(prom_reconfig_setup);
 #endif
=20
+bool arch_match_cpu_phys_id(int cpu, u64 phys_id)
+{
+=09return (int)phys_id =3D=3D get_hard_smp_processor_id(cpu);
+}
+
+static bool __of_find_n_match_cpu_property(struct device_node *cpun,
+=09=09=09const char *prop_name, int cpu, unsigned int *thread)
+{
+=09const __be32 *cell;
+=09int ac, prop_len, tid;
+=09u64 hwid;
+
+=09ac =3D of_n_addr_cells(cpun);
+=09cell =3D of_get_property(cpun, prop_name, &prop_len);
+=09if (!cell)
+=09=09return false;
+=09prop_len /=3D sizeof(*cell);
+=09for (tid =3D 0; tid < prop_len; tid++) {
+=09=09hwid =3D of_read_number(cell, ac);
+=09=09if (arch_match_cpu_phys_id(cpu, hwid)) {
+=09=09=09if (thread)
+=09=09=09=09*thread =3D tid;
+=09=09=09return true;
+=09=09}
+=09}
+=09return false;
+}
+
 /* Find the device node for a given logical cpu number, also returns the c=
pu
  * local thread number (index in ibm,interrupt-server#s) if relevant and
  * asked for (non NULL)
  */
 struct device_node *of_get_cpu_node(int cpu, unsigned int *thread)
 {
-=09int hardid;
-=09struct device_node *np;
+=09struct device_node *cpun, *cpus;
=20
-=09hardid =3D get_hard_smp_processor_id(cpu);
+=09cpus =3D of_find_node_by_path("/cpus");
+=09if (!cpus) {
+=09=09pr_warn("Missing cpus node, bailing out\n");
+=09=09return NULL;
+=09}
=20
-=09for_each_node_by_type(np, "cpu") {
-=09=09const u32 *intserv;
-=09=09unsigned int plen, t;
+=09for_each_child_of_node(cpus, cpun) {
+=09=09if (of_node_cmp(cpun->type, "cpu"))
+=09=09=09continue;
=20
 =09=09/* Check for ibm,ppc-interrupt-server#s. If it doesn't exist
 =09=09 * fallback to "reg" property and assume no threads
 =09=09 */
-=09=09intserv =3D of_get_property(np, "ibm,ppc-interrupt-server#s",
-=09=09=09=09&plen);
-=09=09if (intserv =3D=3D NULL) {
-=09=09=09const u32 *reg =3D of_get_property(np, "reg", NULL);
-=09=09=09if (reg =3D=3D NULL)
-=09=09=09=09continue;
-=09=09=09if (*reg =3D=3D hardid) {
-=09=09=09=09if (thread)
-=09=09=09=09=09*thread =3D 0;
-=09=09=09=09return np;
-=09=09=09}
-=09=09} else {
-=09=09=09plen /=3D sizeof(u32);
-=09=09=09for (t =3D 0; t < plen; t++) {
-=09=09=09=09if (hardid =3D=3D intserv[t]) {
-=09=09=09=09=09if (thread)
-=09=09=09=09=09=09*thread =3D t;
-=09=09=09=09=09return np;
-=09=09=09=09}
-=09=09=09}
-=09=09}
+=09=09if (__of_find_n_match_cpu_property(cpun,
+=09=09=09=09"ibm,ppc-interrupt-server#s", cpu, thread))
+=09=09=09return cpun;
+
+=09=09if (__of_find_n_match_cpu_property(cpun, "reg", cpu, thread))
+=09=09=09return cpun;
 =09}
 =09return NULL;
 }
--=20
1.8.1.2

  parent reply	other threads:[~2013-08-15 17:10 UTC|newest]

Thread overview: 66+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <1374492747-13879-1-git-send-email-Sudeep.KarkadaNagesha@arm.com>
2013-08-15 17:09 ` [RFC PATCH 0/4] DT: move of_get_cpu_node from PPC to DT core Sudeep KarkadaNagesha
2013-08-15 17:09   ` [RFC PATCH 1/4] microblaze: remove undefined of_get_cpu_node declaration Sudeep KarkadaNagesha
2013-08-15 17:09   ` [RFC PATCH 2/4] openrisc: " Sudeep KarkadaNagesha
2013-08-16  9:41     ` Sudeep KarkadaNagesha
2013-08-21  5:10       ` Jonas Bonn
2013-08-15 17:09   ` Sudeep KarkadaNagesha [this message]
2013-08-16  4:49     ` [RFC PATCH 3/4] powerpc: refactor of_get_cpu_node to support other architectures Benjamin Herrenschmidt
2013-08-16  8:48       ` Sudeep KarkadaNagesha
2013-08-16 12:32         ` Benjamin Herrenschmidt
2013-08-16 12:44           ` Sudeep KarkadaNagesha
2013-08-16  4:50     ` Benjamin Herrenschmidt
2013-08-16  8:43       ` Sudeep KarkadaNagesha
2013-08-15 17:09   ` [RFC PATCH 4/4] of: move of_get_cpu_node implementation to DT core library Sudeep KarkadaNagesha
2013-08-16 17:39   ` [RFC PATCH v2 0/4] DT: move of_get_cpu_node from PPC to DT core Sudeep KarkadaNagesha
2013-08-16 17:39     ` [RFC PATCH v2 3/4] powerpc: refactor of_get_cpu_node to support other architectures Sudeep KarkadaNagesha
2013-08-16 22:13       ` Benjamin Herrenschmidt
2013-08-19 10:13         ` Sudeep KarkadaNagesha
2013-08-17 10:50       ` Tomasz Figa
2013-08-17 22:09         ` Benjamin Herrenschmidt
2013-08-17 22:22           ` Tomasz Figa
2013-08-19 10:19           ` Mark Rutland
2013-08-19 13:02             ` Rob Herring
2013-08-19 13:56               ` Sudeep KarkadaNagesha
2013-08-22 13:59                 ` Mark Rutland
2013-08-22 16:51                   ` Sudeep KarkadaNagesha
2013-08-28 19:46                   ` Grant Likely
2013-08-29  9:50                     ` Lorenzo Pieralisi
2013-08-16 17:39     ` [RFC PATCH v2 4/4] of: move of_get_cpu_node implementation to DT core library Sudeep KarkadaNagesha
2013-08-16 22:14       ` Benjamin Herrenschmidt
2013-08-19 10:21         ` Sudeep KarkadaNagesha
2013-08-19 13:11       ` Rob Herring
2013-08-19 13:24         ` Sudeep KarkadaNagesha
2013-08-20  9:30 ` [PATCH v4 00/19] DT/core: update cpu device of_node Sudeep KarkadaNagesha
2013-08-20  9:30   ` [PATCH v4 01/19] microblaze: remove undefined of_get_cpu_node declaration Sudeep KarkadaNagesha
2013-08-20  9:30   ` [PATCH v4 02/19] openrisc: " Sudeep KarkadaNagesha
2013-08-20  9:30   ` [PATCH v4 03/19] powerpc: refactor of_get_cpu_node to support other architectures Sudeep KarkadaNagesha
2013-08-20 12:27     ` Rafael J. Wysocki
2013-08-20 12:22       ` Sudeep KarkadaNagesha
2013-08-20 21:48         ` Benjamin Herrenschmidt
2013-08-22  6:15     ` Benjamin Herrenschmidt
2013-08-22 13:29       ` Sudeep KarkadaNagesha
2013-08-20  9:30   ` [PATCH v4 04/19] of: move of_get_cpu_node implementation to DT core library Sudeep KarkadaNagesha
2013-08-20  9:30   ` [PATCH v4 05/19] ARM: DT/kernel: define ARM specific arch_match_cpu_phys_id Sudeep KarkadaNagesha
2013-08-20  9:30   ` [PATCH v4 06/19] driver/core: cpu: initialize of_node in cpu's device struture Sudeep KarkadaNagesha
2013-08-20 12:28     ` Rafael J. Wysocki
2013-08-20 15:18     ` Greg Kroah-Hartman
2013-08-20  9:30   ` [PATCH v4 07/19] of/device: add helper to get cpu device node from logical cpu index Sudeep KarkadaNagesha
2013-08-20  9:30   ` [PATCH v4 08/19] ARM: topology: remove hwid/MPIDR dependency from cpu_capacity Sudeep KarkadaNagesha
2013-08-20  9:30   ` [PATCH v4 09/19] ARM: mvebu: remove device tree parsing for cpu nodes Sudeep KarkadaNagesha
2013-08-20  9:30   ` [PATCH v4 10/19] drivers/bus: arm-cci: avoid parsing DT for cpu device nodes Sudeep KarkadaNagesha
2013-08-20  9:30   ` [PATCH v4 11/19] cpufreq: imx6q-cpufreq: remove device tree parsing for cpu nodes Sudeep KarkadaNagesha
2013-08-20  9:30   ` [PATCH v4 12/19] cpufreq: cpufreq-cpu0: " Sudeep KarkadaNagesha
2013-09-06 13:44     ` Guennadi Liakhovetski
2013-09-09  9:24       ` Sudeep KarkadaNagesha
2013-09-09 14:32         ` Shawn Guo
2013-09-09 15:24           ` Sudeep KarkadaNagesha
2013-09-10  2:44             ` Shawn Guo
2013-09-10 10:56               ` Sudeep KarkadaNagesha
2013-09-10 11:19                 ` Shawn Guo
2013-08-20  9:30   ` [PATCH v4 13/19] cpufreq: highbank-cpufreq: " Sudeep KarkadaNagesha
2013-08-20  9:30   ` [PATCH v4 14/19] cpufreq: spear-cpufreq: " Sudeep KarkadaNagesha
2013-08-20  9:30   ` [PATCH v4 15/19] cpufreq: kirkwood-cpufreq: " Sudeep KarkadaNagesha
2013-08-20  9:30   ` [PATCH v4 16/19] cpufreq: arm_big_little: " Sudeep KarkadaNagesha
2013-08-20  9:30   ` [PATCH v4 17/19] cpufreq: maple-cpufreq: " Sudeep KarkadaNagesha
2013-08-20  9:30   ` [PATCH v4 18/19] cpufreq: pmac64-cpufreq: " Sudeep KarkadaNagesha
2013-08-20  9:30   ` [PATCH v4 19/19] cpufreq: pmac32-cpufreq: " Sudeep KarkadaNagesha

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1376586580-5409-4-git-send-email-Sudeep.KarkadaNagesha@arm.com \
    --to=sudeep.karkadanagesha@arm.com \
    --cc=devicetree@vger.kernel.org \
    --cc=grant.likely@linaro.org \
    --cc=jonas@southpole.se \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=linux@lists.openrisc.net \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=microblaze-uclinux@itee.uq.edu.au \
    --cc=monstr@monstr.eu \
    --cc=rjw@sisk.pl \
    --cc=rob.herring@calxeda.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).