All of lore.kernel.org
 help / color / mirror / Atom feed
From: Joseph Lo <josephl@nvidia.com>
To: Jon Hunter <jonathanh@nvidia.com>,
	Russell King <linux@arm.linux.org.uk>,
	Stephen Warren <swarren@wwwdotorg.org>,
	Thierry Reding <thierry.reding@gmail.com>,
	Alexandre Courbot <gnurou@gmail.com>,
	linux-arm-kernel@lists.infradead.org
Cc: linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] ARM: tegra: Ensure entire dcache is flushed on entering LP0/1
Date: Sat, 21 Nov 2015 19:56:47 +0800	[thread overview]
Message-ID: <56505BFF.2010904@nvidia.com> (raw)
In-Reply-To: <1447942787-31137-1-git-send-email-jonathanh@nvidia.com>

Hi Jon,

On 11/19/2015 10:19 PM, Jon Hunter wrote:
> Tegra support several low-power (LPx) states, which are:
> - LP0: CPU + Core voltage off and DRAM in self-refresh
> - LP1: CPU voltage off and DRAM in self-refresh
> - LP2: CPU voltage off
>
> When entering any of the above states the tegra_disable_clean_inv_dcache()
> function is called to flush the dcache. The function
> tegra_disable_clean_inv_dcache() will either flush the entire data cache or
> up to the Level of Unification Inner Shareable (LoUIS) depending on the
> value in r0. When tegra_disable_clean_inv_dcache() is called by
> tegra20_sleep_core_finish() or tegra30_sleep_core_finish(), to enter LP0
> and LP1 power state, the r0 register contains a physical memory address
> which will not be equal to TEGRA_FLUSH_CACHE_ALL (1) and so the data cache
> will be only flushed to the LoUIS. However, when
> tegra_disable_clean_inv_dcache() called by tegra_sleep_cpu_finish() to
> enter to LP2 power state, r0 is set to TEGRA_FLUSH_CACHE_ALL to flush the
> entire dcache.
>
> Please note that tegra20_sleep_core_finish(), tegra30_sleep_core_finish()
> and tegra_sleep_cpu_finish() are called by the boot CPU once all other CPUs
> have been disabled and so it seems appropriate to flush the entire cache at
> this stage.
>
> Therefore, ensure that r0 is set to TEGRA_FLUSH_CACHE_ALL when calling
> tegra_disable_clean_inv_dcache() from tegra20_sleep_core_finish() and
> tegra30_sleep_core_finish().
>
> Signed-off-by: Jon Hunter <jonathanh@nvidia.com>
> ---

Thanks for the fix.

Reviewed-by: Joseph Lo <josephl@nvidia.com>

>
> Please note that I have not encountered any problems without this change
> so far, but I noticed this from reviewing the suspend sequence. I have
> tested this on tegra20, tegra30, tegra114 and tegra124 and verified that
> suspend/resume to LP1 is working fine.
>
>   arch/arm/mach-tegra/sleep-tegra20.S | 3 +++
>   arch/arm/mach-tegra/sleep-tegra30.S | 3 +++
>   2 files changed, 6 insertions(+)
>
> diff --git a/arch/arm/mach-tegra/sleep-tegra20.S b/arch/arm/mach-tegra/sleep-tegra20.S
> index e6b684e14322..f5d19667484e 100644
> --- a/arch/arm/mach-tegra/sleep-tegra20.S
> +++ b/arch/arm/mach-tegra/sleep-tegra20.S
> @@ -231,8 +231,11 @@ ENDPROC(tegra20_cpu_is_resettable_soon)
>    * tegra20_tear_down_core in IRAM
>    */
>   ENTRY(tegra20_sleep_core_finish)
> +	mov     r4, r0
>   	/* Flush, disable the L1 data cache and exit SMP */
> +	mov     r0, #TEGRA_FLUSH_CACHE_ALL
>   	bl	tegra_disable_clean_inv_dcache
> +	mov     r0, r4
>
>   	mov32	r3, tegra_shut_off_mmu
>   	add	r3, r3, r0
> diff --git a/arch/arm/mach-tegra/sleep-tegra30.S b/arch/arm/mach-tegra/sleep-tegra30.S
> index 9a2f0b051e10..16e5ff03383c 100644
> --- a/arch/arm/mach-tegra/sleep-tegra30.S
> +++ b/arch/arm/mach-tegra/sleep-tegra30.S
> @@ -242,8 +242,11 @@ ENDPROC(tegra30_cpu_shutdown)
>    * tegra30_tear_down_core in IRAM
>    */
>   ENTRY(tegra30_sleep_core_finish)
> +	mov	r4, r0
>   	/* Flush, disable the L1 data cache and exit SMP */
> +	mov	r0, #TEGRA_FLUSH_CACHE_ALL
>   	bl	tegra_disable_clean_inv_dcache
> +	mov	r0, r4
>
>   	/*
>   	 * Preload all the address literals that are needed for the
>

WARNING: multiple messages have this Message-ID (diff)
From: josephl@nvidia.com (Joseph Lo)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH] ARM: tegra: Ensure entire dcache is flushed on entering LP0/1
Date: Sat, 21 Nov 2015 19:56:47 +0800	[thread overview]
Message-ID: <56505BFF.2010904@nvidia.com> (raw)
In-Reply-To: <1447942787-31137-1-git-send-email-jonathanh@nvidia.com>

Hi Jon,

On 11/19/2015 10:19 PM, Jon Hunter wrote:
> Tegra support several low-power (LPx) states, which are:
> - LP0: CPU + Core voltage off and DRAM in self-refresh
> - LP1: CPU voltage off and DRAM in self-refresh
> - LP2: CPU voltage off
>
> When entering any of the above states the tegra_disable_clean_inv_dcache()
> function is called to flush the dcache. The function
> tegra_disable_clean_inv_dcache() will either flush the entire data cache or
> up to the Level of Unification Inner Shareable (LoUIS) depending on the
> value in r0. When tegra_disable_clean_inv_dcache() is called by
> tegra20_sleep_core_finish() or tegra30_sleep_core_finish(), to enter LP0
> and LP1 power state, the r0 register contains a physical memory address
> which will not be equal to TEGRA_FLUSH_CACHE_ALL (1) and so the data cache
> will be only flushed to the LoUIS. However, when
> tegra_disable_clean_inv_dcache() called by tegra_sleep_cpu_finish() to
> enter to LP2 power state, r0 is set to TEGRA_FLUSH_CACHE_ALL to flush the
> entire dcache.
>
> Please note that tegra20_sleep_core_finish(), tegra30_sleep_core_finish()
> and tegra_sleep_cpu_finish() are called by the boot CPU once all other CPUs
> have been disabled and so it seems appropriate to flush the entire cache at
> this stage.
>
> Therefore, ensure that r0 is set to TEGRA_FLUSH_CACHE_ALL when calling
> tegra_disable_clean_inv_dcache() from tegra20_sleep_core_finish() and
> tegra30_sleep_core_finish().
>
> Signed-off-by: Jon Hunter <jonathanh@nvidia.com>
> ---

Thanks for the fix.

Reviewed-by: Joseph Lo <josephl@nvidia.com>

>
> Please note that I have not encountered any problems without this change
> so far, but I noticed this from reviewing the suspend sequence. I have
> tested this on tegra20, tegra30, tegra114 and tegra124 and verified that
> suspend/resume to LP1 is working fine.
>
>   arch/arm/mach-tegra/sleep-tegra20.S | 3 +++
>   arch/arm/mach-tegra/sleep-tegra30.S | 3 +++
>   2 files changed, 6 insertions(+)
>
> diff --git a/arch/arm/mach-tegra/sleep-tegra20.S b/arch/arm/mach-tegra/sleep-tegra20.S
> index e6b684e14322..f5d19667484e 100644
> --- a/arch/arm/mach-tegra/sleep-tegra20.S
> +++ b/arch/arm/mach-tegra/sleep-tegra20.S
> @@ -231,8 +231,11 @@ ENDPROC(tegra20_cpu_is_resettable_soon)
>    * tegra20_tear_down_core in IRAM
>    */
>   ENTRY(tegra20_sleep_core_finish)
> +	mov     r4, r0
>   	/* Flush, disable the L1 data cache and exit SMP */
> +	mov     r0, #TEGRA_FLUSH_CACHE_ALL
>   	bl	tegra_disable_clean_inv_dcache
> +	mov     r0, r4
>
>   	mov32	r3, tegra_shut_off_mmu
>   	add	r3, r3, r0
> diff --git a/arch/arm/mach-tegra/sleep-tegra30.S b/arch/arm/mach-tegra/sleep-tegra30.S
> index 9a2f0b051e10..16e5ff03383c 100644
> --- a/arch/arm/mach-tegra/sleep-tegra30.S
> +++ b/arch/arm/mach-tegra/sleep-tegra30.S
> @@ -242,8 +242,11 @@ ENDPROC(tegra30_cpu_shutdown)
>    * tegra30_tear_down_core in IRAM
>    */
>   ENTRY(tegra30_sleep_core_finish)
> +	mov	r4, r0
>   	/* Flush, disable the L1 data cache and exit SMP */
> +	mov	r0, #TEGRA_FLUSH_CACHE_ALL
>   	bl	tegra_disable_clean_inv_dcache
> +	mov	r0, r4
>
>   	/*
>   	 * Preload all the address literals that are needed for the
>

WARNING: multiple messages have this Message-ID (diff)
From: Joseph Lo <josephl@nvidia.com>
To: Jon Hunter <jonathanh@nvidia.com>,
	Russell King <linux@arm.linux.org.uk>,
	Stephen Warren <swarren@wwwdotorg.org>,
	Thierry Reding <thierry.reding@gmail.com>,
	Alexandre Courbot <gnurou@gmail.com>,
	<linux-arm-kernel@lists.infradead.org>
Cc: <linux-tegra@vger.kernel.org>, <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] ARM: tegra: Ensure entire dcache is flushed on entering LP0/1
Date: Sat, 21 Nov 2015 19:56:47 +0800	[thread overview]
Message-ID: <56505BFF.2010904@nvidia.com> (raw)
In-Reply-To: <1447942787-31137-1-git-send-email-jonathanh@nvidia.com>

Hi Jon,

On 11/19/2015 10:19 PM, Jon Hunter wrote:
> Tegra support several low-power (LPx) states, which are:
> - LP0: CPU + Core voltage off and DRAM in self-refresh
> - LP1: CPU voltage off and DRAM in self-refresh
> - LP2: CPU voltage off
>
> When entering any of the above states the tegra_disable_clean_inv_dcache()
> function is called to flush the dcache. The function
> tegra_disable_clean_inv_dcache() will either flush the entire data cache or
> up to the Level of Unification Inner Shareable (LoUIS) depending on the
> value in r0. When tegra_disable_clean_inv_dcache() is called by
> tegra20_sleep_core_finish() or tegra30_sleep_core_finish(), to enter LP0
> and LP1 power state, the r0 register contains a physical memory address
> which will not be equal to TEGRA_FLUSH_CACHE_ALL (1) and so the data cache
> will be only flushed to the LoUIS. However, when
> tegra_disable_clean_inv_dcache() called by tegra_sleep_cpu_finish() to
> enter to LP2 power state, r0 is set to TEGRA_FLUSH_CACHE_ALL to flush the
> entire dcache.
>
> Please note that tegra20_sleep_core_finish(), tegra30_sleep_core_finish()
> and tegra_sleep_cpu_finish() are called by the boot CPU once all other CPUs
> have been disabled and so it seems appropriate to flush the entire cache at
> this stage.
>
> Therefore, ensure that r0 is set to TEGRA_FLUSH_CACHE_ALL when calling
> tegra_disable_clean_inv_dcache() from tegra20_sleep_core_finish() and
> tegra30_sleep_core_finish().
>
> Signed-off-by: Jon Hunter <jonathanh@nvidia.com>
> ---

Thanks for the fix.

Reviewed-by: Joseph Lo <josephl@nvidia.com>

>
> Please note that I have not encountered any problems without this change
> so far, but I noticed this from reviewing the suspend sequence. I have
> tested this on tegra20, tegra30, tegra114 and tegra124 and verified that
> suspend/resume to LP1 is working fine.
>
>   arch/arm/mach-tegra/sleep-tegra20.S | 3 +++
>   arch/arm/mach-tegra/sleep-tegra30.S | 3 +++
>   2 files changed, 6 insertions(+)
>
> diff --git a/arch/arm/mach-tegra/sleep-tegra20.S b/arch/arm/mach-tegra/sleep-tegra20.S
> index e6b684e14322..f5d19667484e 100644
> --- a/arch/arm/mach-tegra/sleep-tegra20.S
> +++ b/arch/arm/mach-tegra/sleep-tegra20.S
> @@ -231,8 +231,11 @@ ENDPROC(tegra20_cpu_is_resettable_soon)
>    * tegra20_tear_down_core in IRAM
>    */
>   ENTRY(tegra20_sleep_core_finish)
> +	mov     r4, r0
>   	/* Flush, disable the L1 data cache and exit SMP */
> +	mov     r0, #TEGRA_FLUSH_CACHE_ALL
>   	bl	tegra_disable_clean_inv_dcache
> +	mov     r0, r4
>
>   	mov32	r3, tegra_shut_off_mmu
>   	add	r3, r3, r0
> diff --git a/arch/arm/mach-tegra/sleep-tegra30.S b/arch/arm/mach-tegra/sleep-tegra30.S
> index 9a2f0b051e10..16e5ff03383c 100644
> --- a/arch/arm/mach-tegra/sleep-tegra30.S
> +++ b/arch/arm/mach-tegra/sleep-tegra30.S
> @@ -242,8 +242,11 @@ ENDPROC(tegra30_cpu_shutdown)
>    * tegra30_tear_down_core in IRAM
>    */
>   ENTRY(tegra30_sleep_core_finish)
> +	mov	r4, r0
>   	/* Flush, disable the L1 data cache and exit SMP */
> +	mov	r0, #TEGRA_FLUSH_CACHE_ALL
>   	bl	tegra_disable_clean_inv_dcache
> +	mov	r0, r4
>
>   	/*
>   	 * Preload all the address literals that are needed for the
>

  reply	other threads:[~2015-11-21 11:56 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-11-19 14:19 [PATCH] ARM: tegra: Ensure entire dcache is flushed on entering LP0/1 Jon Hunter
2015-11-19 14:19 ` Jon Hunter
2015-11-19 14:19 ` Jon Hunter
2015-11-21 11:56 ` Joseph Lo [this message]
2015-11-21 11:56   ` Joseph Lo
2015-11-21 11:56   ` Joseph Lo
2015-11-23 11:14 ` Thierry Reding
2015-11-23 11:14   ` Thierry Reding

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=56505BFF.2010904@nvidia.com \
    --to=josephl@nvidia.com \
    --cc=gnurou@gmail.com \
    --cc=jonathanh@nvidia.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-tegra@vger.kernel.org \
    --cc=linux@arm.linux.org.uk \
    --cc=swarren@wwwdotorg.org \
    --cc=thierry.reding@gmail.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.