From: Alexandre Belloni <alexandre.belloni@bootlin.com>
To: Claudiu Beznea <claudiu.beznea@microchip.com>
Cc: nicolas.ferre@microchip.com, ludovic.desroches@microchip.com,
linux@armlinux.org.uk, robh+dt@kernel.org,
linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org, devicetree@vger.kernel.org
Subject: Re: [PATCH 3/3] ARM: at91: pm: preload base address of controllers in tlb
Date: Tue, 28 Sep 2021 12:01:45 +0200 [thread overview]
Message-ID: <YVLoCWkmet31syKU@piout.net> (raw)
In-Reply-To: <20210928084257.2188017-4-claudiu.beznea@microchip.com>
On 28/09/2021 11:42:57+0300, Claudiu Beznea wrote:
> In suspend/resume procedure for AT91 architecture different controllers
> (PMC, SHDWC, RAM, RAM PHY, SFRBU) are accessed to do the proper settings
> for power saving. Commit f0bbf17958e8 ("ARM: at91: pm: add self-refresh
> support for sama7g5") introduced the access to RAMC PHY controller for
> SAMA7G5. The access to this controller is done after RAMC ports are
> closed, thus any TLB walk necessary for RAMC PHY virtual address will
> fail. In the development branch this was not encountered. However, on
> current kernel the issue is reproducible.
>
> To solve the issue the previous mechanism of pre-loading the TLB with
> the RAMC PHY virtual address has been used. However, only the addition
> of this new pre-load breaks the functionality for ARMv5 based
> devices (SAM9X60). This behavior has been encountered previously
> while debugging this code and using the same mechanism for pre-loading
> address for different controllers (e.g. pin controller, the assumption
> being that other requested translations are replaced from TLB).
>
> To solve this new issue the TBL flush + the extension of pre-loading
> the rest of controllers to TBL (e.g. PMC, RAMC) has been added. The
s/TBL/TLB
> rest of the controllers should have been pre-loaded previously, anyway.
>
> Fixes: f0bbf17958e8 ("ARM: at91: pm: add self-refresh support for sama7g5")
> Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com>
> ---
> arch/arm/mach-at91/pm_suspend.S | 25 ++++++++++++++++++++++++-
> 1 file changed, 24 insertions(+), 1 deletion(-)
>
> diff --git a/arch/arm/mach-at91/pm_suspend.S b/arch/arm/mach-at91/pm_suspend.S
> index 34f251fdb743..fdb4f63ecde4 100644
> --- a/arch/arm/mach-at91/pm_suspend.S
> +++ b/arch/arm/mach-at91/pm_suspend.S
> @@ -1014,6 +1014,10 @@ ENTRY(at91_pm_suspend_in_sram)
> mov tmp1, #0
> mcr p15, 0, tmp1, c7, c10, 4
>
> + /* Flush tlb. */
> + mov r4, #0
> + mcr p15, 0, r4, c8, c7, 0
> +
> ldr tmp1, [r0, #PM_DATA_PMC_MCKR_OFFSET]
> str tmp1, .mckr_offset
> ldr tmp1, [r0, #PM_DATA_PMC_VERSION]
> @@ -1023,23 +1027,42 @@ ENTRY(at91_pm_suspend_in_sram)
> ldr tmp1, [r0, #PM_DATA_MODE]
> str tmp1, .pm_mode
>
> + /*
> + * ldrne below are here to preload their address in the TLB as access
> + * to RAM may be limited while in self-refresh.
> + */
> ldr tmp1, [r0, #PM_DATA_PMC]
> str tmp1, .pmc_base
> + cmp tmp1, #0
> + ldrne tmp2, [tmp1, #0]
> +
> ldr tmp1, [r0, #PM_DATA_RAMC0]
> str tmp1, .sramc_base
> + cmp tmp1, #0
> + ldrne tmp2, [tmp1, #0]
> +
> ldr tmp1, [r0, #PM_DATA_RAMC1]
> str tmp1, .sramc1_base
> + cmp tmp1, #0
> + ldrne tmp2, [tmp1, #0]
> +
> +#ifndef CONFIG_SOC_SAM_V4_V5
> + /* ldrne below are here to preload their address in the TLB */
> ldr tmp1, [r0, #PM_DATA_RAMC_PHY]
> str tmp1, .sramc_phy_base
> - /* Both ldrne below are here to preload their address in the TLB */
> + cmp tmp1, #0
> + ldrne tmp2, [tmp1, #0]
> +
> ldr tmp1, [r0, #PM_DATA_SHDWC]
> str tmp1, .shdwc
> cmp tmp1, #0
> ldrne tmp2, [tmp1, #0]
> +
> ldr tmp1, [r0, #PM_DATA_SFRBU]
> str tmp1, .sfrbu
> cmp tmp1, #0
> ldrne tmp2, [tmp1, #0x10]
> +#endif
>
> /* Active the self-refresh mode */
> at91_sramc_self_refresh_ena
> --
> 2.25.1
>
--
Alexandre Belloni, co-owner and COO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
prev parent reply other threads:[~2021-09-28 10:01 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-09-28 8:42 [PATCH 0/3] ARM: at91: pm: fixes Claudiu Beznea
2021-09-28 8:42 ` [PATCH 1/3] ARM: dts: at91: sama7g5ek: add suspend voltage for ddr3l rail Claudiu Beznea
2021-09-28 8:42 ` [PATCH 2/3] ARM: at91: pm: group constants and addresses loading Claudiu Beznea
2021-09-28 10:01 ` Alexandre Belloni
2021-09-30 10:16 ` Claudiu.Beznea
2021-10-04 10:11 ` Nicolas Ferre
2021-09-28 8:42 ` [PATCH 3/3] ARM: at91: pm: preload base address of controllers in tlb Claudiu Beznea
2021-09-28 10:01 ` Alexandre Belloni [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=YVLoCWkmet31syKU@piout.net \
--to=alexandre.belloni@bootlin.com \
--cc=claudiu.beznea@microchip.com \
--cc=devicetree@vger.kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@armlinux.org.uk \
--cc=ludovic.desroches@microchip.com \
--cc=nicolas.ferre@microchip.com \
--cc=robh+dt@kernel.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