From: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
To: Will Deacon <will.deacon@arm.com>
Cc: Mark Rutland <Mark.Rutland@arm.com>,
Nicolas Pitre <nicolas.pitre@linaro.org>,
Dave Martin <dave.martin@linaro.org>,
Kukjin Kim <kgene.kim@samsung.com>,
Russell King <linux@arm.linux.org.uk>,
Pawel Moll <Pawel.Moll@arm.com>,
Stephen Warren <swarren@wwwdotorg.org>,
Tony Lindgren <tony@atomide.com>,
Catalin Marinas <Catalin.Marinas@arm.com>,
"devicetree-discuss@lists.ozlabs.org"
<devicetree-discuss@lists.ozlabs.org>,
Amit Kucheria <amit.kucheria@linaro.org>,
Grant Likely <grant.likely@secretlab.ca>,
"rob.herring@calxeda.com" <rob.herring@calxeda.com>,
Benjamin Herrenschmidt <benh@kernel.crashing.org>,
David Brown <davidb@codeaurora.org>,
"linux-arm-kernel@lists.infradead.org"
<linux-arm-kernel@lists.infradead.org>
Subject: Re: [RFC PATCH 1/4] ARM: kernel: add device tree init map function
Date: Wed, 7 Nov 2012 12:00:52 +0000 [thread overview]
Message-ID: <20121107120052.GD17831@e102568-lin.cambridge.arm.com> (raw)
In-Reply-To: <20121107110542.GH23305@mudshark.cambridge.arm.com>
On Wed, Nov 07, 2012 at 11:05:42AM +0000, Will Deacon wrote:
> On Wed, Nov 07, 2012 at 10:23:49AM +0000, Lorenzo Pieralisi wrote:
> > On Tue, Nov 06, 2012 at 09:50:44PM +0000, Will Deacon wrote:
> > > > + while ((dn = of_find_node_by_type(dn, "cpu")) && cpu <= nr_cpu_ids) {
> > > > + const u32 *hwid;
> > > > + int len;
> > > > +
> > > > + pr_debug(" * %s...\n", dn->full_name);
> > > > +
> > > > + hwid = of_get_property(dn, "reg", &len);
> > > > +
> > > > + if (!hwid || len != 4) {
> > > > + pr_err(" * %s missing reg property\n", dn->full_name);
> > > > + continue;
> > > > + }
> > > > + /*
> > > > + * We want to assign the boot CPU logical id 0.
> > > > + * Boot CPU checks its own MPIDR and if matches the current
> > > > + * cpu node "reg" value it sets the logical cpu index to 0
> > > > + * and stores the physical id accordingly.
> > > > + * If MPIDR does not match, assign sequential cpu logical
> > > > + * id (starting from 1) and increments it.
> > > > + */
> > > > + i = (be32_to_cpup(hwid) == (read_cpuid_mpidr() & 0xffffff))
> > > > + ? 0 : cpu++;
> > > > +
> > > > + if (!i)
> > > > + printk(KERN_INFO "Booting Linux on CPU HWID 0x%x\n",
> > > > + be32_to_cpup(hwid));
> > >
> > > I don't think we should bother with this print -- we already print something
> > > in smp_setup_processor_id, which cannot differ for the boot CPU, If you want
> > > the full mpidr, we could change that code to include it as well.
> >
> > Yes, it is duplicate code, I will remove it. Extending the printk in
> > smp_setup_processor_id() to include the entire MPIDR should be done
> > though, otherwise we might have printk aliases on system with multiple
> > clusters.
>
> Feel free to make that change. You could also replace NR_CPUS in
> smp_setup_processor_id with nr_cpu_ids for consistency (they'll be the same
> this early on).
Ok.
> > > We might also want some sanity checking that we do indeed end up with
> > > logical id 0 for the boot CPU. If not, I think we should scream and fall
> > > back on the simple mapping created earlier.
> >
> > Well, this basically means that we have to make sure this function is
> > executed on the boot CPU (and it is as the code stands now), right ?
>
> Yes, smp is not up yet which is why we're allowed to play with the logical
> map.
>
> > Since we are reading the MPIDR of the CPU parsing the tree and assign logical
> > cpu 0 accordingly I think we have this check carried out automatically,
> > unless for any given reason someone calls this function on a CPU that is
> > not the boot one (Why ?).
> >
> > Basically I could add a check like:
> >
> > if (WARN_ON(smp_processor_id())
> > return;
> >
> > to fall back to the previous mapping, but that's overkill IMHO.
>
> No, I was thinking about what happens if the devicetree doesn't contain an
> mpidr property that matches the boot cpu. In this case, we will fail to
> assign logical ID 0, right? If this happens, we should complain about an
> invalid devicetree and try to fall back on the logical_map that was
> generated earlier on.
Good point. What I could do, I can assign the MPIDR of the boot CPU to
the logical index 0 before even starting to parse the DT (that's what it
is done in smp_setup_processor_id(), with a couple of twists). Then, if I
find a node that matches the boot CPU mpidr I just skip over it. This
way the boot CPU MPIDR will always be correct the only difference with
the current approach will be that instead of generating the secondaries
MPIDRs we will read them from DT.
The problem with this approach is that if we need a pointer (phandle) to the
boot CPU DT node through the MPIDR and the boot CPU node is botched or missing
we still behave as if the DT CPU nodes were ok.
I think I'd better stick a warning condition in there if the boot CPU
node is not present or botched (from a MPIDR perspective at least).
Thoughts ?
Lorenzo
next prev parent reply other threads:[~2012-11-07 12:00 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-10-16 13:21 [RFC PATCH 0/4] ARM: multi-cluster aware boot protocol Lorenzo Pieralisi
2012-10-16 13:21 ` [RFC PATCH 1/4] ARM: kernel: add device tree init map function Lorenzo Pieralisi
[not found] ` <1350393709-23546-2-git-send-email-lorenzo.pieralisi-5wv7dgnIgG8@public.gmane.org>
2012-10-16 20:42 ` Rob Herring
2012-10-17 10:48 ` Lorenzo Pieralisi
2012-11-06 21:50 ` Will Deacon
2012-11-07 10:23 ` Lorenzo Pieralisi
[not found] ` <20121107102349.GC17831-7AyDDHkRsp3ZROr8t4l/smS4ubULX0JqMm0uRHvK7Nw@public.gmane.org>
2012-11-07 11:05 ` Will Deacon
2012-11-07 12:00 ` Lorenzo Pieralisi [this message]
[not found] ` <20121107120052.GD17831-7AyDDHkRsp3ZROr8t4l/smS4ubULX0JqMm0uRHvK7Nw@public.gmane.org>
2012-11-07 15:35 ` Will Deacon
2012-11-07 17:43 ` Lorenzo Pieralisi
2012-10-16 13:21 ` [RFC PATCH 2/4] ARM: kernel: add cpu logical map DT init in setup_arch Lorenzo Pieralisi
[not found] ` <1350393709-23546-3-git-send-email-lorenzo.pieralisi-5wv7dgnIgG8@public.gmane.org>
2012-11-06 21:52 ` Will Deacon
2012-10-16 13:21 ` [RFC PATCH 3/4] ARM: kernel: add logical mappings look-up Lorenzo Pieralisi
[not found] ` <1350393709-23546-4-git-send-email-lorenzo.pieralisi-5wv7dgnIgG8@public.gmane.org>
2012-11-06 22:00 ` Will Deacon
2012-10-16 13:21 ` [RFC PATCH 4/4] ARM: gic: use a private mapping for CPU target interfaces Lorenzo Pieralisi
[not found] ` <1350393709-23546-5-git-send-email-lorenzo.pieralisi-5wv7dgnIgG8@public.gmane.org>
2012-11-06 22:16 ` Will Deacon
[not found] ` <20121106221651.GE21764-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org>
2012-11-06 22:59 ` Nicolas Pitre
[not found] ` <alpine.LFD.2.02.1211061755260.21033-QuJgVwGFrdf/9pzu0YdTqQ@public.gmane.org>
2012-11-07 10:23 ` Will Deacon
[not found] ` <20121107102357.GD23305-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org>
2012-11-07 15:11 ` Nicolas Pitre
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=20121107120052.GD17831@e102568-lin.cambridge.arm.com \
--to=lorenzo.pieralisi@arm.com \
--cc=Catalin.Marinas@arm.com \
--cc=Mark.Rutland@arm.com \
--cc=Pawel.Moll@arm.com \
--cc=amit.kucheria@linaro.org \
--cc=benh@kernel.crashing.org \
--cc=dave.martin@linaro.org \
--cc=davidb@codeaurora.org \
--cc=devicetree-discuss@lists.ozlabs.org \
--cc=grant.likely@secretlab.ca \
--cc=kgene.kim@samsung.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux@arm.linux.org.uk \
--cc=nicolas.pitre@linaro.org \
--cc=rob.herring@calxeda.com \
--cc=swarren@wwwdotorg.org \
--cc=tony@atomide.com \
--cc=will.deacon@arm.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).