From: Kevin Hilman <khilman@linaro.org>
To: Dave Gerlach <d-gerlach@ti.com>
Cc: linux-arm-kernel@lists.infradead.org, linux-omap@vger.kernel.org,
Paul Walmsley <paul@pwsan.com>, Tony Lindgren <tony@atomide.com>,
Tero Kristo <t-kristo@ti.com>, Nishanth Menon <nm@ti.com>,
Russ Dill <russ.dill@ti.com>,
Santosh Shilimkar <santosh.shilimkar@ti.com>,
Daniel Mack <daniel@zonque.org>, Suman Anna <s-anna@ti.com>,
Benoit Cousson <bcousson@baylibre.com>,
Ohad Ben-Cohen <ohad@wizery.com>
Subject: Re: [PATCH v4 10/11] ARM: OMAP2+: AM33XX: Basic suspend resume support
Date: Mon, 08 Sep 2014 15:30:28 -0700 [thread overview]
Message-ID: <7h7g1dlp8b.fsf@linaro.org> (raw)
In-Reply-To: <1405047349-15101-11-git-send-email-d-gerlach@ti.com> (Dave Gerlach's message of "Thu, 10 Jul 2014 21:55:48 -0500")
+Ohad
Dave Gerlach <d-gerlach@ti.com> writes:
> AM335x supports various low power modes as documented
> in section 8.1.4.3 of the AM335x Technical Reference Manual.
>
> DeepSleep0 mode offers the lowest power mode with limited
> wakeup sources without a system reboot and is mapped as
> the suspend state in the kernel. In this state, MPU and
> PER domains are turned off with the internal RAM held in
> retention to facilitate the resume process. As part of
> the boot process, the assembly code is copied over to OCMCRAM
> using the OMAP SRAM code so it can be executed to turn of the
> EMIF.
>
> AM335x has a Cortex-M3 (WKUP_M3) which assists the MPU
> in DeepSleep0 and Standby entry and exit. WKUP_M3 takes care
> of the clockdomain and powerdomain transitions based on the
> intended low power state. MPU needs to load the appropriate
> WKUP_M3 binary onto the WKUP_M3 memory space before it can
> leverage any of the PM features like DeepSleep.
>
> The WKUP_M3 is managed by a remoteproc driver. The PM code hooks
> into the remoteproc driver through an rproc_ready callback to
> allow PM features to become available once the firmware for the
> wkup_m3 has been loaded. This code maintains its own state machine
> for the wkup_m3 so that it can be used in the manner intended for
> low power modes.
>
> In the current implementation when the suspend process
> is initiated, MPU interrupts the WKUP_M3 to let it know about
> the intent of entering DeepSleep0 and waits for an ACK. When
> the ACK is received MPU continues with its suspend process
> to suspend all the drivers and then jumps to assembly in
> OCMC RAM. The assembly code puts the external RAM in self-refresh
> mode, gates the MPU clock, and then finally executes the WFI
> instruction. Execution of the WFI instruction with MPU clock gated
> triggers another interrupt to the WKUP_M3 which then continues
> with the power down sequence wherein the clockdomain and
> powerdomain transition takes place. As part of the sleep sequence,
> WKUP_M3 unmasks the interrupt lines for the wakeup sources. WFI
> execution on WKUP_M3 causes the hardware to disable the main
> oscillator of the SoC and from here system remains in sleep state
> until a wake source brings the system into resume path.
>
> When a wakeup event occurs, WKUP_M3 starts the power-up
> sequence by switching on the power domains and finally
> enabling the clock to MPU. Since the MPU gets powered down
> as part of the sleep sequence in the resume path ROM code
> starts executing. The ROM code detects a wakeup from sleep
> and then jumps to the resume location in OCMC which was
> populated in one of the IPC registers as part of the suspend
> sequence.
>
> Code is based on work by Vaibhav Bedia.
>
> Signed-off-by: Dave Gerlach <d-gerlach@ti.com>
> ---
> v3->v4:
> Remove all direct wkup_m3 usage and moved to rproc driver introduced
> in previous patch.
This statement is rather confusing as there's still quite a bit of
direct wkup_m3 usage, including the guts of the protocal for message
passing. I thought you had agreed based on earilier reviews to split
out the wkup_m3 into it's on little driver with a clear/clean API which
could be called from here?
To me, it's not terribly clear how you made the split between this PM
core code an the remoteproc code. In the changelog for the remoteproc
patch, it states it's to "load the firmware for and boot the wkup_m3".
But, while parts of the IPC are here in pm33xx.c, parts of the IPC are
also inside the remoteproc driver, so I'm quite curious if that's OK
with the remoteproc maintainers. Either way, please make it clearer how
and why you made the split, and please isolate the wkup_m3 IPC/protocol
from this code. Think of people wanting to rework/extend the wkup_m3
firmware. They shouldn't be messing around in here, but rather inside a
driver specificaly for the wkup_m3.
Also, I'll beat this drum again even though nobody is listening: it's
still very fuzzy to me how this approach is going to be used to manage
low-power idle? Is low-power idle just being completely ignored for
this SoC?
Kevin
WARNING: multiple messages have this Message-ID (diff)
From: khilman@linaro.org (Kevin Hilman)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v4 10/11] ARM: OMAP2+: AM33XX: Basic suspend resume support
Date: Mon, 08 Sep 2014 15:30:28 -0700 [thread overview]
Message-ID: <7h7g1dlp8b.fsf@linaro.org> (raw)
In-Reply-To: <1405047349-15101-11-git-send-email-d-gerlach@ti.com> (Dave Gerlach's message of "Thu, 10 Jul 2014 21:55:48 -0500")
+Ohad
Dave Gerlach <d-gerlach@ti.com> writes:
> AM335x supports various low power modes as documented
> in section 8.1.4.3 of the AM335x Technical Reference Manual.
>
> DeepSleep0 mode offers the lowest power mode with limited
> wakeup sources without a system reboot and is mapped as
> the suspend state in the kernel. In this state, MPU and
> PER domains are turned off with the internal RAM held in
> retention to facilitate the resume process. As part of
> the boot process, the assembly code is copied over to OCMCRAM
> using the OMAP SRAM code so it can be executed to turn of the
> EMIF.
>
> AM335x has a Cortex-M3 (WKUP_M3) which assists the MPU
> in DeepSleep0 and Standby entry and exit. WKUP_M3 takes care
> of the clockdomain and powerdomain transitions based on the
> intended low power state. MPU needs to load the appropriate
> WKUP_M3 binary onto the WKUP_M3 memory space before it can
> leverage any of the PM features like DeepSleep.
>
> The WKUP_M3 is managed by a remoteproc driver. The PM code hooks
> into the remoteproc driver through an rproc_ready callback to
> allow PM features to become available once the firmware for the
> wkup_m3 has been loaded. This code maintains its own state machine
> for the wkup_m3 so that it can be used in the manner intended for
> low power modes.
>
> In the current implementation when the suspend process
> is initiated, MPU interrupts the WKUP_M3 to let it know about
> the intent of entering DeepSleep0 and waits for an ACK. When
> the ACK is received MPU continues with its suspend process
> to suspend all the drivers and then jumps to assembly in
> OCMC RAM. The assembly code puts the external RAM in self-refresh
> mode, gates the MPU clock, and then finally executes the WFI
> instruction. Execution of the WFI instruction with MPU clock gated
> triggers another interrupt to the WKUP_M3 which then continues
> with the power down sequence wherein the clockdomain and
> powerdomain transition takes place. As part of the sleep sequence,
> WKUP_M3 unmasks the interrupt lines for the wakeup sources. WFI
> execution on WKUP_M3 causes the hardware to disable the main
> oscillator of the SoC and from here system remains in sleep state
> until a wake source brings the system into resume path.
>
> When a wakeup event occurs, WKUP_M3 starts the power-up
> sequence by switching on the power domains and finally
> enabling the clock to MPU. Since the MPU gets powered down
> as part of the sleep sequence in the resume path ROM code
> starts executing. The ROM code detects a wakeup from sleep
> and then jumps to the resume location in OCMC which was
> populated in one of the IPC registers as part of the suspend
> sequence.
>
> Code is based on work by Vaibhav Bedia.
>
> Signed-off-by: Dave Gerlach <d-gerlach@ti.com>
> ---
> v3->v4:
> Remove all direct wkup_m3 usage and moved to rproc driver introduced
> in previous patch.
This statement is rather confusing as there's still quite a bit of
direct wkup_m3 usage, including the guts of the protocal for message
passing. I thought you had agreed based on earilier reviews to split
out the wkup_m3 into it's on little driver with a clear/clean API which
could be called from here?
To me, it's not terribly clear how you made the split between this PM
core code an the remoteproc code. In the changelog for the remoteproc
patch, it states it's to "load the firmware for and boot the wkup_m3".
But, while parts of the IPC are here in pm33xx.c, parts of the IPC are
also inside the remoteproc driver, so I'm quite curious if that's OK
with the remoteproc maintainers. Either way, please make it clearer how
and why you made the split, and please isolate the wkup_m3 IPC/protocol
from this code. Think of people wanting to rework/extend the wkup_m3
firmware. They shouldn't be messing around in here, but rather inside a
driver specificaly for the wkup_m3.
Also, I'll beat this drum again even though nobody is listening: it's
still very fuzzy to me how this approach is going to be used to manage
low-power idle? Is low-power idle just being completely ignored for
this SoC?
Kevin
next prev parent reply other threads:[~2014-09-08 22:30 UTC|newest]
Thread overview: 106+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-07-11 2:55 [PATCH v4 00/11] ARM: OMAP2+: AM33XX: Add suspend-resume support Dave Gerlach
2014-07-11 2:55 ` Dave Gerlach
2014-07-11 2:55 ` [PATCH v4 01/11] ARM: omap: edma: add suspend suspend/resume hooks Dave Gerlach
2014-07-11 2:55 ` Dave Gerlach
2014-07-14 11:05 ` Tony Lindgren
2014-07-14 11:05 ` Tony Lindgren
2014-07-14 17:47 ` Dave Gerlach
2014-07-14 17:47 ` Dave Gerlach
2014-07-11 2:55 ` [PATCH v4 02/11] memory: emif: Move EMIF register defines to include/linux/ Dave Gerlach
2014-07-11 2:55 ` Dave Gerlach
2014-07-14 11:12 ` Tony Lindgren
2014-07-14 11:12 ` Tony Lindgren
2014-07-14 17:42 ` Dave Gerlach
2014-07-14 17:42 ` Dave Gerlach
2014-07-15 6:38 ` Tony Lindgren
2014-07-15 6:38 ` Tony Lindgren
2014-07-16 2:44 ` Dave Gerlach
2014-07-16 2:44 ` Dave Gerlach
2014-07-16 8:33 ` Tony Lindgren
2014-07-16 8:33 ` Tony Lindgren
2014-07-11 2:55 ` [PATCH v4 03/11] ARM: OMAP2+: timer: Add suspend-resume callbacks for clkevent device Dave Gerlach
2014-07-11 2:55 ` Dave Gerlach
2014-07-14 11:15 ` Tony Lindgren
2014-07-14 11:15 ` Tony Lindgren
2014-07-14 14:37 ` Santosh Shilimkar
2014-07-14 14:37 ` Santosh Shilimkar
2014-07-14 17:42 ` Dave Gerlach
2014-07-14 17:42 ` Dave Gerlach
2014-07-15 6:48 ` Tony Lindgren
2014-07-15 6:48 ` Tony Lindgren
2014-07-15 19:10 ` Dave Gerlach
2014-07-15 19:10 ` Dave Gerlach
2014-07-16 20:17 ` Dave Gerlach
2014-07-16 20:17 ` Dave Gerlach
2014-07-17 8:16 ` Tony Lindgren
2014-07-17 8:16 ` Tony Lindgren
2014-07-11 2:55 ` [PATCH v4 04/11] ARM: OMAP2+: Use pdata-quirks for wkup_m3 deassert_hardreset Dave Gerlach
2014-07-11 2:55 ` Dave Gerlach
2014-07-14 18:48 ` Suman Anna
2014-07-14 18:48 ` Suman Anna
2014-07-11 2:55 ` [PATCH v4 05/11] Documentation: dt: add ti,am3353_wkup_m3 bindings Dave Gerlach
2014-07-11 2:55 ` Dave Gerlach
2014-07-14 14:41 ` Santosh Shilimkar
2014-07-14 14:41 ` [PATCH v4 05/11] Documentation: dt: add ti, am3353_wkup_m3 bindings Santosh Shilimkar
2014-07-14 16:33 ` [PATCH v4 05/11] Documentation: dt: add ti,am3353_wkup_m3 bindings Suman Anna
2014-07-14 16:33 ` [PATCH v4 05/11] Documentation: dt: add ti, am3353_wkup_m3 bindings Suman Anna
2014-07-14 17:45 ` [PATCH v4 05/11] Documentation: dt: add ti,am3353_wkup_m3 bindings Dave Gerlach
2014-07-14 17:45 ` [PATCH v4 05/11] Documentation: dt: add ti, am3353_wkup_m3 bindings Dave Gerlach
2014-07-11 2:55 ` [PATCH v4 06/11] remoteproc: wkup_m3: Add wkup_m3 remote proc driver Dave Gerlach
2014-07-11 2:55 ` Dave Gerlach
2014-07-14 14:54 ` Santosh Shilimkar
2014-07-14 14:54 ` Santosh Shilimkar
2014-07-14 17:43 ` Dave Gerlach
2014-07-14 17:43 ` Dave Gerlach
2014-07-14 19:07 ` Suman Anna
2014-07-14 19:07 ` Suman Anna
2014-07-14 21:09 ` Dave Gerlach
2014-07-14 21:09 ` Dave Gerlach
2014-07-11 2:55 ` [PATCH v4 07/11] ARM: dts: am33xx: Update wkup_m3 node Dave Gerlach
2014-07-11 2:55 ` Dave Gerlach
2014-07-11 2:55 ` [PATCH v4 08/11] ARM: OMAP2+: AM33XX: Reserve memory to comply with EMIF spec Dave Gerlach
2014-07-11 2:55 ` Dave Gerlach
2014-07-11 2:55 ` [PATCH v4 09/11] ARM: OMAP2+: AM33XX: Add assembly code for PM operations Dave Gerlach
2014-07-11 2:55 ` Dave Gerlach
2014-07-11 2:55 ` [PATCH v4 10/11] ARM: OMAP2+: AM33XX: Basic suspend resume support Dave Gerlach
2014-07-11 2:55 ` Dave Gerlach
2014-09-08 22:30 ` Kevin Hilman [this message]
2014-09-08 22:30 ` Kevin Hilman
2014-09-09 10:31 ` Ohad Ben-Cohen
2014-09-09 10:31 ` Ohad Ben-Cohen
2014-09-09 19:59 ` Suman Anna
2014-09-09 19:59 ` Suman Anna
2014-09-09 20:28 ` Dave Gerlach
2014-09-09 20:28 ` Dave Gerlach
2014-09-09 21:10 ` Kevin Hilman
2014-09-09 21:10 ` Kevin Hilman
2014-09-10 21:19 ` Dave Gerlach
2014-09-10 21:19 ` Dave Gerlach
2014-09-16 15:08 ` Ohad Ben-Cohen
2014-09-16 15:08 ` Ohad Ben-Cohen
2014-09-16 16:14 ` Suman Anna
2014-09-16 16:14 ` Suman Anna
2014-09-17 13:37 ` Ohad Ben-Cohen
2014-09-17 13:37 ` Ohad Ben-Cohen
2014-09-25 19:42 ` Dave Gerlach
2014-09-25 19:42 ` Dave Gerlach
2014-07-11 2:55 ` [PATCH v4 11/11] ARM: OMAP2+: AM33XX: Hookup AM33XX PM code into OMAP builds Dave Gerlach
2014-07-11 2:55 ` Dave Gerlach
2014-07-14 11:21 ` Tony Lindgren
2014-07-14 11:21 ` Tony Lindgren
2014-07-14 17:46 ` Dave Gerlach
2014-07-14 17:46 ` Dave Gerlach
2014-07-11 7:59 ` [PATCH v4 00/11] ARM: OMAP2+: AM33XX: Add suspend-resume support Daniel Mack
2014-07-11 7:59 ` Daniel Mack
2014-07-11 17:24 ` Dave Gerlach
2014-07-11 17:24 ` Dave Gerlach
2014-07-11 15:30 ` Andre Heider
2014-07-11 15:30 ` Andre Heider
2014-07-11 17:31 ` Dave Gerlach
2014-07-11 17:31 ` Dave Gerlach
2014-07-14 9:37 ` Andre Heider
2014-07-14 9:37 ` Andre Heider
2014-07-14 11:24 ` Tony Lindgren
2014-07-14 11:24 ` Tony Lindgren
2014-07-14 17:47 ` Dave Gerlach
2014-07-14 17:47 ` Dave Gerlach
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=7h7g1dlp8b.fsf@linaro.org \
--to=khilman@linaro.org \
--cc=bcousson@baylibre.com \
--cc=d-gerlach@ti.com \
--cc=daniel@zonque.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-omap@vger.kernel.org \
--cc=nm@ti.com \
--cc=ohad@wizery.com \
--cc=paul@pwsan.com \
--cc=russ.dill@ti.com \
--cc=s-anna@ti.com \
--cc=santosh.shilimkar@ti.com \
--cc=t-kristo@ti.com \
--cc=tony@atomide.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.