From: Mason <slash.tmp@free.fr>
To: Russell King - ARM Linux <linux@armlinux.org.uk>,
"Rafael J. Wysocki" <rjw@rjwysocki.net>
Cc: linux-pm <linux-pm@vger.kernel.org>,
Linux ARM <linux-arm-kernel@lists.infradead.org>,
Stephen Boyd <sboyd@codeaurora.org>,
Sebastian Frias <sf84@laposte.net>,
Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>,
Will Deacon <will.deacon@arm.com>,
Mark Rutland <mark.rutland@arm.com>,
Arnd Bergmann <arnd@arndb.de>,
Thibaud Cornic <thibaud_cornic@sigmadesigns.com>
Subject: Rebooting Cortex A9 MPCore (was: Linux panics when suspend cannot offline the secondary cores)
Date: Wed, 15 Jun 2016 13:48:27 +0200 [thread overview]
Message-ID: <5761408B.7080906@free.fr> (raw)
In-Reply-To: <575FFBAC.3000507@free.fr>
On 14/06/2016 14:42, Mason wrote:
> On 13/06/2016 23:02, Russell King - ARM Linux wrote:
>
>> On Mon, Jun 13, 2016 at 10:49:32PM +0200, Rafael J. Wysocki wrote:
>>
>>> I guess all of the existing implementations of smp_ops.cpu_die() don't return
>>> to the caller no matter what, so the caller did not have to consider anything
>>> else.
>>
>> Existing implementations for hardware which implements CPU hotplug
>> takes the requested CPU down in such a way that smp_ops.cpu_die()
>> *never* returns.
>>
>> We have a number of evaluation boards where its desirable to emulate
>> CPU hotplug. These boards have no power management abilities, and
>> have no way to power down or reset a CPU from software. For these,
>> we implement CPU hotplug by taking the CPU down gracefully, taking
>> it out of coherency, and then placing it in a loop waiting for the
>> CPU up event to arrive. At that point (and this is the only legal
>> time) smp_ops.cpu_die() returns - at which point you get the
>> resuscitating kernel message, and the CPU re-enters the kernel.
>>
>> This path is _only_ for these evaluation platforms which have no
>> hardware support for CPU hotplug, and therefore no PM and no kexec.
>>
>> The *only* solution to having working PM support Mason's platform is
>> a properly implemented CPU hotplug correctly - which means ensuring
>> that the CPU is either powered down or placed in reset during the
>> smp_ops.cpu_die() call. Everything else (even the simulation of it)
>> is not good enough.
>>
>> That can be done either by the dying CPU when it calls into
>> smp_ops.cpu_die(), or the CPU requesting the death of the CPU via
>> smp_ops.cpu_kill().
>>
>> Either way, it's up to the platform code to implement these, and as
>> I say, a correct and proper implementation of this is a fundamental
>> requirement for system power management (like suspend) and kexec in
>> a SMP system.
>
> Hello Russell,
>
> The current plan is to have cpu_die() jump into the firmware, and have
> the firmware "park" the calling core into a WFI loop until someone wants
> to online the parked core, via the smp_boot_secondary() callback.
Link to the whole discussion:
http://thread.gmane.org/gmane.linux.power-management.general/77268
Change of plans, because of MMU issues.
cpu_die:
secondary core jumps from Linux into the firmware
firmware prepares the core to be reset(*)
core spins in a busy loop => never returns
cpu_kill:
main core jumps from Linux into the firmware
firmware resets secondary core, and puts it in a WFE/WFI loop
(until smp_boot_secondary() is called from Linux)
Our preliminary implementation passes basic stress tests.
The starred step is a bit unclear to me...
What steps are required to prepare a Cortex A9 MPCore to safely reboot?
I briefly discussed the topic with mrutland on IRC:
> Typically the sequence is:
> 1) prevent allocation (i.e. disable translation and caching in all modes)
> 2) clean+invalidate local caches
> 3) exit coherency somehow
Point 1 was clarified thus
> Typically, you need to prevent allocation into data or unified caches,
> and that may involve disabling data and instruction cacheability
> (since instruction lookups may allocate in unified cache)
Does someone know if step 1 is required on Cortex A9 MPCore,
and how to achieve it?
Is point 3 achieved by clearing bit 6 in ACTLR? (ACTLR.SMP)
The MPCore TRM mentions "SCU CPU Power Status Register"
which speaks of modes (normal, dormant, powered-off).
Are these relevant for taking the core offline?
Regards.
prev parent reply other threads:[~2016-06-15 11:48 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-06-10 15:41 Linux panics when suspend cannot offline the secondary cores Mason
2016-06-10 15:41 ` Mason
2016-06-10 21:35 ` Rafael J. Wysocki
2016-06-10 21:35 ` Rafael J. Wysocki
2016-06-10 21:37 ` Mason
2016-06-10 21:37 ` Mason
2016-06-13 12:06 ` Mason
2016-06-13 12:06 ` Mason
2016-06-13 13:30 ` Rafael J. Wysocki
2016-06-13 13:30 ` Rafael J. Wysocki
2016-06-13 13:50 ` Mason
2016-06-13 13:50 ` Mason
2016-06-13 20:49 ` Rafael J. Wysocki
2016-06-13 20:49 ` Rafael J. Wysocki
2016-06-13 21:02 ` Russell King - ARM Linux
2016-06-13 21:02 ` Russell King - ARM Linux
2016-06-14 12:42 ` Mason
2016-06-14 12:42 ` Mason
2016-06-15 11:48 ` Mason [this message]
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=5761408B.7080906@free.fr \
--to=slash.tmp@free.fr \
--cc=arnd@arndb.de \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-pm@vger.kernel.org \
--cc=linux@armlinux.org.uk \
--cc=lorenzo.pieralisi@arm.com \
--cc=mark.rutland@arm.com \
--cc=rjw@rjwysocki.net \
--cc=sboyd@codeaurora.org \
--cc=sf84@laposte.net \
--cc=thibaud_cornic@sigmadesigns.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.