All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrey Skvortsov <andrej.skvortzov@gmail.com>
To: Andre Przywara <andre.przywara@arm.com>
Cc: u-boot@lists.denx.de, Samuel Holland <samuel@sholland.org>,
	Jagan Teki <jagan@amarulasolutions.com>
Subject: Re: [PATCH] sunxi: restore modified memory
Date: Wed, 6 Dec 2023 21:46:51 +0300	[thread overview]
Message-ID: <ZXDBmxmj6bBoepVR@skv.local> (raw)
In-Reply-To: <20231101095034.44d14187@donnerap.manchester.arm.com>

Hi Andre,

On 23-11-01 09:50, Andre Przywara wrote:
> On Fri, 21 Jul 2023 17:57:21 +0300
> Andrey Skvortsov <andrej.skvortzov@gmail.com> wrote:
> 
> Hi Andrey,
> 
> sorry for the late reply!
> 
> > On A64 with 2G of RAM words at following addresses were modified with
> > 'aa55aa55' value:
> >  - 50000000
> >  - 60000000
> >  - 84000000
> >  - 88000000
> >  - 90000000
> >  - A0000000
> >  - A0000200
> > 
> > That made harder to pick memory range for persistent storage in RAM.
> 
> In general I now think this patch is fine, since DRAM content can indeed
> be preserved across some reboot types.
> Some things below:
> 
> > Signed-off-by: Andrey Skvortsov <andrej.skvortzov@gmail.com>
> > ---
> >  arch/arm/mach-sunxi/dram_helpers.c  | 16 ++++++++++++++--
> >  arch/arm/mach-sunxi/dram_sunxi_dw.c | 16 ++++++++++++++--
> >  2 files changed, 28 insertions(+), 4 deletions(-)
> > 
> > diff --git a/arch/arm/mach-sunxi/dram_helpers.c b/arch/arm/mach-sunxi/dram_helpers.c
> > index 2c873192e6..e3d236a4b3 100644
> > --- a/arch/arm/mach-sunxi/dram_helpers.c
> > +++ b/arch/arm/mach-sunxi/dram_helpers.c
> > @@ -32,12 +32,24 @@ void mctl_await_completion(u32 *reg, u32 mask, u32 val)
> >  #ifndef CONFIG_MACH_SUNIV
> >  bool mctl_mem_matches(u32 offset)
> >  {
> > +	unsigned long tmp_base;
> > +	unsigned long tmp_offset;
> 
> The type doesn't match the return type of readl.
> Please use uint32_t here.
> And the names are somewhat misleading, at least to my mind, since they are
> not a base address and an offset, but rather just values at a base
> address and at an offset from that.
> So I think val_base and val_offset would be better.

Thanks for the review.

> > +	bool ret;
> > +
> > +        /* Save original values */
> > +	tmp_base = readl(CFG_SYS_SDRAM_BASE);
> > +	tmp_offset = readl((ulong)CFG_SYS_SDRAM_BASE + offset);
> > +
> >  	/* Try to write different values to RAM at two addresses */
> >  	writel(0, CFG_SYS_SDRAM_BASE);
> >  	writel(0xaa55aa55, (ulong)CFG_SYS_SDRAM_BASE + offset);
> >  	dsb();
> >  	/* Check if the same value is actually observed when reading back */
> > -	return readl(CFG_SYS_SDRAM_BASE) ==
> > -	       readl((ulong)CFG_SYS_SDRAM_BASE + offset);
> > +	ret = readl(CFG_SYS_SDRAM_BASE) == readl((ulong)CFG_SYS_SDRAM_BASE + offset);
> > +
> > +	/* Restore original values */
> > +	writel(tmp_base, CFG_SYS_SDRAM_BASE);
> > +	writel(tmp_offset, (ulong)CFG_SYS_SDRAM_BASE + offset);
> > +	return ret;
> >  }
> >  #endif
> > diff --git a/arch/arm/mach-sunxi/dram_sunxi_dw.c b/arch/arm/mach-sunxi/dram_sunxi_dw.c
> > index 9107b114df..6245815fa2 100644
> > --- a/arch/arm/mach-sunxi/dram_sunxi_dw.c
> > +++ b/arch/arm/mach-sunxi/dram_sunxi_dw.c
> > @@ -657,13 +657,25 @@ static int mctl_channel_init(uint16_t socid, struct dram_para *para)
> >   */
> >  static bool mctl_mem_matches_base(u32 offset, ulong base)
> 
> Mmh, somehow I dimly remember commenting on this before (some other
> patch?), but this function is essentially the same as above, isn't it?
> If someone has some spare cycles, they could be merged, implementing
> mctl_mem_matches() as a tiny wrapper around mctl_mem_matches_base(), to
> preserve all callers.
> 
> Shouldn't block this patch, though.
Good point. I'll do this as part of v2 as a separate patch.

-- 
Best regards,
Andrey Skvortsov

      reply	other threads:[~2023-12-06 18:46 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-07-21 14:57 [PATCH] sunxi: restore modified memory Andrey Skvortsov
2023-11-01  9:50 ` Andre Przywara
2023-12-06 18:46   ` Andrey Skvortsov [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=ZXDBmxmj6bBoepVR@skv.local \
    --to=andrej.skvortzov@gmail.com \
    --cc=andre.przywara@arm.com \
    --cc=jagan@amarulasolutions.com \
    --cc=samuel@sholland.org \
    --cc=u-boot@lists.denx.de \
    /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.