linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: marc.zyngier@arm.com (Marc Zyngier)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 3/9] ARM: tegra: # of CPU cores detection w/ & w/o HAVE_ARM_SCU
Date: Thu, 20 Dec 2012 11:32:54 +0000	[thread overview]
Message-ID: <50D2F766.2000709@arm.com> (raw)
In-Reply-To: <20121220.132633.1909466776701611516.hdoyu@nvidia.com>

On 20/12/12 11:26, Hiroshi Doyu wrote:
> Marc Zyngier <marc.zyngier@arm.com> wrote @ Thu, 20 Dec 2012 12:17:08 +0100:
> 
>> On 20/12/12 09:44, Hiroshi Doyu wrote:
>>> The method to detect the number of CPU cores on Cortex-A9 MPCore and
>>> Cortex-A15 MPCore is different. On Cortex-A9 MPCore we can get this
>>> information from the Snoop Control Unit(SCU). On Cortex-A15 MPCore we
>>> have to read it from the system coprocessor(CP15), because the SCU on
>>> Cortex-A15 MPCore does not have software readable registers. This
>>> patch selects the correct method at runtime based on the CPU ID.
>>>
>>> Signed-off-by: Hiroshi Doyu <hdoyu@nvidia.com>
>>> ---
>>>  arch/arm/mach-tegra/platsmp.c |   31 ++++++++++++++++++++++++++++---
>>>  1 file changed, 28 insertions(+), 3 deletions(-)
>>>
>>> diff --git a/arch/arm/mach-tegra/platsmp.c b/arch/arm/mach-tegra/platsmp.c
>>> index 1b926df..68e76ef 100644
>>> --- a/arch/arm/mach-tegra/platsmp.c
>>> +++ b/arch/arm/mach-tegra/platsmp.c
>>> @@ -23,6 +23,7 @@
>>>  #include <asm/hardware/gic.h>
>>>  #include <asm/mach-types.h>
>>>  #include <asm/smp_scu.h>
>>> +#include <asm/cputype.h>
>>>  
>>>  #include <mach/powergate.h>
>>>  
>>> @@ -34,9 +35,13 @@
>>>  #include "common.h"
>>>  #include "iomap.h"
>>>  
>>> +#define CPU_MASK		0xff0ffff0
>>> +#define CPU_CORTEX_A9		0x410fc090
>>> +#define CPU_CORTEX_A15		0x410fc0f0
>>> +
>>>  extern void tegra_secondary_startup(void);
>>>  
>>> -static void __iomem *scu_base = IO_ADDRESS(TEGRA_ARM_PERIF_BASE);
>>> +static void __iomem *scu_base;
>>>  
>>>  #define EVP_CPU_RESET_VECTOR \
>>>  	(IO_ADDRESS(TEGRA_EXCEPTION_VECTORS_BASE) + 0x100)
>>> @@ -149,7 +154,26 @@ done:
>>>   */
>>>  static void __init tegra_smp_init_cpus(void)
>>>  {
>>> -	unsigned int i, ncores = scu_get_core_count(scu_base);
>>> +	unsigned int i, cpu_id, ncores;
>>> +	u32 l2ctlr;
>>> +	phys_addr_t pa;
>>> +
>>> +	cpu_id = read_cpuid(CPUID_ID) & CPU_MASK;
>>> +	switch (cpu_id) {
>>> +	case CPU_CORTEX_A15:
>>> +		asm("mrc p15, 1, %0, c9, c0, 2\n" : "=r" (l2ctlr));
>>> +		ncores = ((l2ctlr >> 24) & 3) + 1;
>>
>> Please, do not do that. It doesn't scale to multiple clusters. Instead,
>> you can now rely on arm_dt_init_cpu_maps() to do the right thing as long
>> as your device tree exposes all the cpu nodes.
> 
> Ok, this could be the answer why DT for cpu is necessary even when
> it's got from CP15?
> 
> http://lists.infradead.org/pipermail/linux-arm-kernel/2012-December/137989.html
> 

Indeed, there is no unified way to find out how many CPUs are present in
a system. The A15 trick is neat (we used it in the past), but doesn't
scale to multiple clusters, not to mention heterogeneous clusters.

Hence the DT bindings for cpus, which neatly solves this problem and is
future proof.

	M.
-- 
Jazz is not dead. It just smells funny...

  reply	other threads:[~2012-12-20 11:32 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-12-20  9:43 [PATCH 0/9] ARM: Initial support for Tegra 114 SoC Hiroshi Doyu
2012-12-20  9:43 ` [PATCH 1/9] ARM: tegra: fuse: Add chipid TEGRA114 0x35 Hiroshi Doyu
2012-12-20  9:44 ` [PATCH 2/9] HACK: ARM: tegra: Use CLK_IGNORE_UNUSED for Tegra 114 SoC Hiroshi Doyu
2012-12-20  9:44 ` [PATCH 3/9] ARM: tegra: # of CPU cores detection w/ & w/o HAVE_ARM_SCU Hiroshi Doyu
2012-12-20 10:06   ` Felipe Balbi
2012-12-20 11:21     ` Hiroshi Doyu
2012-12-20 18:18       ` Felipe Balbi
2012-12-20 11:17   ` Marc Zyngier
2012-12-20 11:26     ` Hiroshi Doyu
2012-12-20 11:32       ` Marc Zyngier [this message]
2012-12-20  9:44 ` [PATCH 4/9] clocksource: tegra: Reorganize funcs by clock functionarities Hiroshi Doyu
2012-12-20  9:44 ` [PATCH 5/9] clocksource: tegra: Enable ARM arch_timer with TSC Hiroshi Doyu
2012-12-20 11:01   ` Marc Zyngier
2012-12-20 11:57     ` Hiroshi Doyu
2012-12-20 12:05       ` Marc Zyngier
2012-12-20 12:22         ` Peter De Schrijver
2012-12-20 12:33           ` Marc Zyngier
2012-12-20 12:55             ` Peter De Schrijver
2012-12-20 13:32               ` Marc Zyngier
2012-12-20 14:42                 ` Hiroshi Doyu
2012-12-20 17:09                   ` Marc Zyngier
2012-12-20 22:13                     ` Peter De Schrijver
2012-12-20 13:25         ` Hiroshi Doyu
2012-12-20 13:33           ` Marc Zyngier
2012-12-20  9:44 ` [PATCH 6/9] ARM: dt: tegra114: Add new SoC base, Tegra 114 SoC Hiroshi Doyu
2012-12-20 11:27   ` Marc Zyngier
2012-12-29  6:39   ` Olof Johansson
2012-12-31  7:12     ` Hiroshi Doyu
2012-12-20  9:44 ` [PATCH 7/9] ARM: dt: tegra114: Add new board, Dalmore Hiroshi Doyu
2012-12-20  9:44 ` [PATCH 8/9] ARM: dt: tegra114: Add new board, Pluto Hiroshi Doyu
2012-12-20  9:44 ` [PATCH 9/9] ARM: tegra: Add initial support for Tegra 114 SoC Hiroshi Doyu
2013-01-03 16:28   ` Arnd Bergmann
2013-01-04  7:16     ` Hiroshi Doyu
2012-12-24  9:58 ` [PATCH 0/9] ARM: Initial " Mark Zhang
2013-01-03 14:06 ` Hiroshi Doyu
2013-01-03 21:00 ` Thierry Reding
2013-01-03 21:16   ` Stephen Warren

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=50D2F766.2000709@arm.com \
    --to=marc.zyngier@arm.com \
    --cc=linux-arm-kernel@lists.infradead.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).