linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
To: Sudeep KarkadaNagesha <Sudeep.KarkadaNagesha@arm.com>
Cc: Jonas Bonn <jonas@southpole.se>,
	devicetree@vger.kernel.org, Michal Simek <monstr@monstr.eu>,
	linux-pm@vger.kernel.org, Viresh Kumar <viresh.kumar@linaro.org>,
	linux-kernel@vger.kernel.org,
	Rob Herring <rob.herring@calxeda.com>,
	"Rafael J. Wysocki" <rjw@sisk.pl>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Grant Likely <grant.likely@linaro.org>,
	linuxppc-dev@lists.ozlabs.org,
	linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH v4 03/19] powerpc: refactor of_get_cpu_node to support other architectures
Date: Thu, 22 Aug 2013 16:15:43 +1000	[thread overview]
Message-ID: <1377152143.25016.289.camel@pasglop> (raw)
In-Reply-To: <1376991021-12160-4-git-send-email-Sudeep.KarkadaNagesha@arm.com>

On Tue, 2013-08-20 at 10:30 +0100, Sudeep KarkadaNagesha wrote:
> 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.

So the patch unfortunately collides with other changes in powerpc -next,
though it's not a huge deal and not hard to fixup, but expect Linus
to tick unless we sort it out some other way.

Appart from that, it's fine, builds on all my test configs and doesn't
seem to negatively impact things as far as I can tell so far...

Acked-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>

> 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 | 76 ++++++++++++++++++++++++++++------------------
>  1 file changed, 47 insertions(+), 29 deletions(-)
> 
> diff --git a/arch/powerpc/kernel/prom.c b/arch/powerpc/kernel/prom.c
> index eb23ac9..f7b8c0b 100644
> --- a/arch/powerpc/kernel/prom.c
> +++ b/arch/powerpc/kernel/prom.c
> @@ -865,45 +865,63 @@ static int __init prom_reconfig_setup(void)
>  __initcall(prom_reconfig_setup);
>  #endif
>  
> +bool arch_match_cpu_phys_id(int cpu, u64 phys_id)
> +{
> +	return (int)phys_id == get_hard_smp_processor_id(cpu);
> +}
> +
> +static bool __of_find_n_match_cpu_property(struct device_node *cpun,
> +			const char *prop_name, int cpu, unsigned int *thread)
> +{
> +	const __be32 *cell;
> +	int ac, prop_len, tid;
> +	u64 hwid;
> +
> +	ac = of_n_addr_cells(cpun);
> +	cell = of_get_property(cpun, prop_name, &prop_len);
> +	if (!cell)
> +		return false;
> +	prop_len /= sizeof(*cell);
> +	for (tid = 0; tid < prop_len; tid++) {
> +		hwid = of_read_number(cell, ac);
> +		if (arch_match_cpu_phys_id(cpu, hwid)) {
> +			if (thread)
> +				*thread = tid;
> +			return true;
> +		}
> +		cell += ac;
> +	}
> +	return false;
> +}
> +
>  /* Find the device node for a given logical cpu number, also returns the cpu
>   * 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)
>  {
> -	int hardid;
> -	struct device_node *np;
> +	struct device_node *cpun, *cpus;
>  
> -	hardid = get_hard_smp_processor_id(cpu);
> +	cpus = of_find_node_by_path("/cpus");
> +	if (!cpus) {
> +		pr_warn("Missing cpus node, bailing out\n");
> +		return NULL;
> +	}
>  
> -	for_each_node_by_type(np, "cpu") {
> -		const u32 *intserv;
> -		unsigned int plen, t;
> +	for_each_child_of_node(cpus, cpun) {
> +		if (of_node_cmp(cpun->type, "cpu"))
> +			continue;
>  
> -		/* Check for ibm,ppc-interrupt-server#s. If it doesn't exist
> -		 * fallback to "reg" property and assume no threads
> +		/* Check for non-standard "ibm,ppc-interrupt-server#s" property
> +		 * for thread ids on PowerPC. If it doesn't exist fallback to
> +		 * standard "reg" property.
>  		 */
> -		intserv = of_get_property(np, "ibm,ppc-interrupt-server#s",
> -				&plen);
> -		if (intserv == NULL) {
> -			const u32 *reg = of_get_property(np, "reg", NULL);
> -			if (reg == NULL)
> -				continue;
> -			if (*reg == hardid) {
> -				if (thread)
> -					*thread = 0;
> -				return np;
> -			}
> -		} else {
> -			plen /= sizeof(u32);
> -			for (t = 0; t < plen; t++) {
> -				if (hardid == intserv[t]) {
> -					if (thread)
> -						*thread = t;
> -					return np;
> -				}
> -			}
> -		}
> +		if (__of_find_n_match_cpu_property(cpun,
> +				"ibm,ppc-interrupt-server#s", cpu, thread))
> +			return cpun;
> +
> +		if (__of_find_n_match_cpu_property(cpun, "reg", cpu, thread))
> +			return cpun;
>  	}
>  	return NULL;
>  }

  parent reply	other threads:[~2013-08-22  6:21 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   ` [RFC PATCH 3/4] powerpc: refactor of_get_cpu_node to support other architectures Sudeep KarkadaNagesha
2013-08-16  4:49     ` 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 [this message]
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=1377152143.25016.289.camel@pasglop \
    --to=benh@kernel.crashing.org \
    --cc=Sudeep.KarkadaNagesha@arm.com \
    --cc=devicetree@vger.kernel.org \
    --cc=grant.likely@linaro.org \
    --cc=gregkh@linuxfoundation.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=linuxppc-dev@lists.ozlabs.org \
    --cc=monstr@monstr.eu \
    --cc=rjw@sisk.pl \
    --cc=rob.herring@calxeda.com \
    --cc=viresh.kumar@linaro.org \
    /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).