mail archive of the barebox mailing list
 help / color / mirror / Atom feed
From: Sascha Hauer <s.hauer@pengutronix.de>
To: Ahmad Fatoum <a.fatoum@pengutronix.de>
Cc: Barebox List <barebox@lists.infradead.org>
Subject: Re: [PATCH v2 2/2] ARM: mmu_32: fix setting up zero page when it is in SDRAM
Date: Wed, 31 May 2023 13:21:14 +0200	[thread overview]
Message-ID: <20230531112114.GA18491@pengutronix.de> (raw)
In-Reply-To: <4dfbd23f-9dca-e2c6-2067-b9decbdc7977@pengutronix.de>

On Wed, May 31, 2023 at 12:45:17PM +0200, Ahmad Fatoum wrote:
> On 31.05.23 12:35, Sascha Hauer wrote:
> > We used to skip setting the zero page to faulting when SDRAM starts
> > at 0x0. As bootm code now explicitly sets the zero page accessible
> > before copying ATAGs there this should no longer be necessary, so
> > unconditionally set the zero page to faulting during MMU startup.
> > This also moves the zero page setup after the point the SDRAM has
> > been mapped cachable, because otherwise the zero page setup would
> > be overwritten.
> > 
> > Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
> > ---
> >  arch/arm/cpu/mmu_32.c | 26 +++++++-------------------
> >  1 file changed, 7 insertions(+), 19 deletions(-)
> > 
> > diff --git a/arch/arm/cpu/mmu_32.c b/arch/arm/cpu/mmu_32.c
> > index c4e5a3bb0a..fdbc0293a3 100644
> > --- a/arch/arm/cpu/mmu_32.c
> > +++ b/arch/arm/cpu/mmu_32.c
> > @@ -459,23 +459,6 @@ static int set_vector_table(unsigned long adr)
> >  	return -EINVAL;
> >  }
> >  
> > -static void create_zero_page(void)
> > -{
> > -	struct resource *zero_sdram;
> > -
> > -	zero_sdram = request_sdram_region("zero page", 0x0, PAGE_SIZE);
> > -	if (zero_sdram) {
> > -		/*
> > -		 * Here we would need to set the second level page table
> > -		 * entry to faulting. This is not yet implemented.
> > -		 */
> > -		pr_debug("zero page is in SDRAM area, currently not supported\n");
> > -	} else {
> > -		zero_page_faulting();
> > -		pr_debug("Created zero page\n");
> > -	}
> > -}
> > -
> >  /*
> >   * Map vectors and zero page
> >   */
> > @@ -487,7 +470,6 @@ static void vectors_init(void)
> >  	 */
> >  	if (!set_vector_table((unsigned long)__exceptions_start)) {
> >  		arm_fixup_vectors();
> > -		create_zero_page();
> >  		return;
> >  	}
> >  
> > @@ -495,7 +477,6 @@ static void vectors_init(void)
> >  	 * Next try high vectors at 0xffff0000.
> >  	 */
> >  	if (!set_vector_table(ARM_HIGH_VECTORS)) {
> > -		create_zero_page();
> >  		create_vector_table(ARM_HIGH_VECTORS);
> >  		return;
> >  	}
> > @@ -552,6 +533,13 @@ void __mmu_init(bool mmu_on)
> >  
> >  		remap_range((void *)pos, bank->start + bank->size - pos, MAP_CACHED);
> >  	}
> > +
> > +	/*
> > +	 * In case the zero page is in SDRAM request it to prevent others
> > +	 * from using it
> > +	 */
> > +	request_sdram_region("zero page", 0x0, PAGE_SIZE);
> > +	zero_page_faulting();
> 
> I think this would break the case of having low vectors (at address 0).
> We have vector_table requested if that's the case, so we need to check:
> 
>   if (!zero_page_in_sdram() || !zero_page_already_sdram_requested())
> 	zero_page_faulting();

You are right. How about this one?

--------------------------8<------------------------------


>From b6e5c92682467496bd9c57918996f1feffda2dd6 Mon Sep 17 00:00:00 2001
From: Sascha Hauer <s.hauer@pengutronix.de>
Date: Wed, 31 May 2023 11:58:51 +0200
Subject: [PATCH] ARM: mmu_32: fix setting up zero page when it is in SDRAM

We used to skip setting the zero page to faulting when SDRAM starts at
0x0. As bootm code now explicitly sets the zero page accessible before
copying ATAGs there this should no longer be necessary, so
unconditionally set the zero page to faulting during MMU startup.  This
also moves the zero page and vector table setup after the point the
SDRAM has been mapped cachable, because otherwise the zero page and
possibly the vector table mapping would be overwritten.

Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
---
 arch/arm/cpu/mmu_32.c | 23 +++++++++--------------
 1 file changed, 9 insertions(+), 14 deletions(-)

diff --git a/arch/arm/cpu/mmu_32.c b/arch/arm/cpu/mmu_32.c
index c4e5a3bb0a..14775768a3 100644
--- a/arch/arm/cpu/mmu_32.c
+++ b/arch/arm/cpu/mmu_32.c
@@ -461,19 +461,14 @@ static int set_vector_table(unsigned long adr)
 
 static void create_zero_page(void)
 {
-	struct resource *zero_sdram;
+	/*
+	 * In case the zero page is in SDRAM request it to prevent others
+	 * from using it
+	 */
+	request_sdram_region("zero page", 0x0, PAGE_SIZE);
 
-	zero_sdram = request_sdram_region("zero page", 0x0, PAGE_SIZE);
-	if (zero_sdram) {
-		/*
-		 * Here we would need to set the second level page table
-		 * entry to faulting. This is not yet implemented.
-		 */
-		pr_debug("zero page is in SDRAM area, currently not supported\n");
-	} else {
-		zero_page_faulting();
-		pr_debug("Created zero page\n");
-	}
+	zero_page_faulting();
+	pr_debug("Created zero page\n");
 }
 
 /*
@@ -530,8 +525,6 @@ void __mmu_init(bool mmu_on)
 
 	pr_debug("ttb: 0x%p\n", ttb);
 
-	vectors_init();
-
 	/*
 	 * Early mmu init will have mapped everything but the initial memory area
 	 * (excluding final OPTEE_SIZE bytes) uncached. We have now discovered
@@ -552,6 +545,8 @@ void __mmu_init(bool mmu_on)
 
 		remap_range((void *)pos, bank->start + bank->size - pos, MAP_CACHED);
 	}
+
+	vectors_init();
 }
 
 /*
-- 
2.39.2

-- 
Pengutronix e.K.                           |                             |
Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |



  reply	other threads:[~2023-05-31 11:22 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-05-31 10:35 [PATCH v2 1/2] ARM: set zero page accessible before copying ATAGs there Sascha Hauer
2023-05-31 10:35 ` [PATCH v2 2/2] ARM: mmu_32: fix setting up zero page when it is in SDRAM Sascha Hauer
2023-05-31 10:45   ` Ahmad Fatoum
2023-05-31 11:21     ` Sascha Hauer [this message]
2023-05-31 11:58       ` Ahmad Fatoum
2023-05-31 12:38         ` Sascha Hauer
2023-05-31 12:40           ` Ahmad Fatoum
2023-06-01  6:46             ` Sascha Hauer
2023-06-01  7:00               ` Ahmad Fatoum
2023-05-31 10:40 ` [PATCH v2 1/2] ARM: set zero page accessible before copying ATAGs there Ahmad Fatoum

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=20230531112114.GA18491@pengutronix.de \
    --to=s.hauer@pengutronix.de \
    --cc=a.fatoum@pengutronix.de \
    --cc=barebox@lists.infradead.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