mail archive of the barebox mailing list
 help / color / mirror / Atom feed
* [PATCH v2 1/2] ARM: set zero page accessible before copying ATAGs there
@ 2023-05-31 10:35 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:40 ` [PATCH v2 1/2] ARM: set zero page accessible before copying ATAGs there Ahmad Fatoum
  0 siblings, 2 replies; 10+ messages in thread
From: Sascha Hauer @ 2023-05-31 10:35 UTC (permalink / raw)
  To: Barebox List

We used skip setting up the zero page as faulting when the SDRAM
starts at 0x0. One reason for doing that was that ATAGs will be copied
there in that case. Call zero_page_access() if necessary to be able
to set the zero page to faulting during barebox startup in the next
step.

Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
---
 arch/arm/lib32/armlinux.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/arch/arm/lib32/armlinux.c b/arch/arm/lib32/armlinux.c
index 6cb7d4b5f3..eb30f4a952 100644
--- a/arch/arm/lib32/armlinux.c
+++ b/arch/arm/lib32/armlinux.c
@@ -18,6 +18,7 @@
 #include <memory.h>
 #include <of.h>
 #include <magicvar.h>
+#include <zero_page.h>
 
 #include <asm/byteorder.h>
 #include <asm/setup.h>
@@ -265,8 +266,12 @@ void start_linux(void *adr, int swap, unsigned long initrd_address,
 		pr_debug("booting kernel with devicetree\n");
 		params = oftree;
 	} else {
-		setup_tags(initrd_address, initrd_size, swap);
 		params = armlinux_get_bootparams();
+
+		if ((unsigned long)params < PAGE_SIZE)
+			zero_page_access();
+
+		setup_tags(initrd_address, initrd_size, swap);
 	}
 	architecture = armlinux_get_architecture();
 
-- 
2.39.2




^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH v2 2/2] ARM: mmu_32: fix setting up zero page when it is in SDRAM
  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 ` Sascha Hauer
  2023-05-31 10:45   ` Ahmad Fatoum
  2023-05-31 10:40 ` [PATCH v2 1/2] ARM: set zero page accessible before copying ATAGs there Ahmad Fatoum
  1 sibling, 1 reply; 10+ messages in thread
From: Sascha Hauer @ 2023-05-31 10:35 UTC (permalink / raw)
  To: Barebox List

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();
 }
 
 /*
-- 
2.39.2




^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v2 1/2] ARM: set zero page accessible before copying ATAGs there
  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:40 ` Ahmad Fatoum
  1 sibling, 0 replies; 10+ messages in thread
From: Ahmad Fatoum @ 2023-05-31 10:40 UTC (permalink / raw)
  To: Sascha Hauer, Barebox List

On 31.05.23 12:35, Sascha Hauer wrote:
> We used skip setting up the zero page as faulting when the SDRAM
> starts at 0x0. One reason for doing that was that ATAGs will be copied
> there in that case. Call zero_page_access() if necessary to be able
> to set the zero page to faulting during barebox startup in the next
> step.
> 
> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>

Reviewed-by: Ahmad Fatoum <a.fatoum@pengutronix.de>

> ---
>  arch/arm/lib32/armlinux.c | 7 ++++++-
>  1 file changed, 6 insertions(+), 1 deletion(-)
> 
> diff --git a/arch/arm/lib32/armlinux.c b/arch/arm/lib32/armlinux.c
> index 6cb7d4b5f3..eb30f4a952 100644
> --- a/arch/arm/lib32/armlinux.c
> +++ b/arch/arm/lib32/armlinux.c
> @@ -18,6 +18,7 @@
>  #include <memory.h>
>  #include <of.h>
>  #include <magicvar.h>
> +#include <zero_page.h>
>  
>  #include <asm/byteorder.h>
>  #include <asm/setup.h>
> @@ -265,8 +266,12 @@ void start_linux(void *adr, int swap, unsigned long initrd_address,
>  		pr_debug("booting kernel with devicetree\n");
>  		params = oftree;
>  	} else {
> -		setup_tags(initrd_address, initrd_size, swap);
>  		params = armlinux_get_bootparams();
> +
> +		if ((unsigned long)params < PAGE_SIZE)
> +			zero_page_access();
> +
> +		setup_tags(initrd_address, initrd_size, swap);
>  	}
>  	architecture = armlinux_get_architecture();
>  

-- 
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 |




^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v2 2/2] ARM: mmu_32: fix setting up zero page when it is in SDRAM
  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
  0 siblings, 1 reply; 10+ messages in thread
From: Ahmad Fatoum @ 2023-05-31 10:45 UTC (permalink / raw)
  To: Sascha Hauer, Barebox List

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();

Cheers,
Ahmad
	

>  }
>  
>  /*

-- 
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 |




^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v2 2/2] ARM: mmu_32: fix setting up zero page when it is in SDRAM
  2023-05-31 10:45   ` Ahmad Fatoum
@ 2023-05-31 11:21     ` Sascha Hauer
  2023-05-31 11:58       ` Ahmad Fatoum
  0 siblings, 1 reply; 10+ messages in thread
From: Sascha Hauer @ 2023-05-31 11:21 UTC (permalink / raw)
  To: Ahmad Fatoum; +Cc: Barebox List

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 |



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v2 2/2] ARM: mmu_32: fix setting up zero page when it is in SDRAM
  2023-05-31 11:21     ` Sascha Hauer
@ 2023-05-31 11:58       ` Ahmad Fatoum
  2023-05-31 12:38         ` Sascha Hauer
  0 siblings, 1 reply; 10+ messages in thread
From: Ahmad Fatoum @ 2023-05-31 11:58 UTC (permalink / raw)
  To: Sascha Hauer; +Cc: Barebox List

Hello Sascha,

On 31.05.23 13:21, Sascha Hauer wrote:
> 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)

Is this commit incomplete? Vectors should be set up unconditionally and
create_zero_page should be called after it.

>  {
> -	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();
>  }
>  
>  /*

-- 
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 |




^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v2 2/2] ARM: mmu_32: fix setting up zero page when it is in SDRAM
  2023-05-31 11:58       ` Ahmad Fatoum
@ 2023-05-31 12:38         ` Sascha Hauer
  2023-05-31 12:40           ` Ahmad Fatoum
  0 siblings, 1 reply; 10+ messages in thread
From: Sascha Hauer @ 2023-05-31 12:38 UTC (permalink / raw)
  To: Ahmad Fatoum; +Cc: Barebox List

On Wed, May 31, 2023 at 01:58:33PM +0200, Ahmad Fatoum wrote:
> > 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)
> 
> Is this commit incomplete? Vectors should be set up unconditionally and
> create_zero_page should be called after it.

Vectors are set up unconditionally and create_zero_page() is called the
same way as before.

Sascha

> 
> >  {
> > -	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();
> >  }
> >  
> >  /*
> 
> -- 
> 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 |
> 
> 

-- 
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 |



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v2 2/2] ARM: mmu_32: fix setting up zero page when it is in SDRAM
  2023-05-31 12:38         ` Sascha Hauer
@ 2023-05-31 12:40           ` Ahmad Fatoum
  2023-06-01  6:46             ` Sascha Hauer
  0 siblings, 1 reply; 10+ messages in thread
From: Ahmad Fatoum @ 2023-05-31 12:40 UTC (permalink / raw)
  To: Sascha Hauer; +Cc: Barebox List

On 31.05.23 14:38, Sascha Hauer wrote:
> On Wed, May 31, 2023 at 01:58:33PM +0200, Ahmad Fatoum wrote:
>>> 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)
>>
>> Is this commit incomplete? Vectors should be set up unconditionally and
>> create_zero_page should be called after it.
> 
> Vectors are set up unconditionally and create_zero_page() is called the
> same way as before.

So zero page is requested first and then on platforms with vector at
address 0 requesting fails and we are left without configured IVT?

> 
> Sascha
> 
>>
>>>  {
>>> -	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();
>>>  }
>>>  
>>>  /*
>>
>> -- 
>> 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 |
>>
>>
> 

-- 
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 |




^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v2 2/2] ARM: mmu_32: fix setting up zero page when it is in SDRAM
  2023-05-31 12:40           ` Ahmad Fatoum
@ 2023-06-01  6:46             ` Sascha Hauer
  2023-06-01  7:00               ` Ahmad Fatoum
  0 siblings, 1 reply; 10+ messages in thread
From: Sascha Hauer @ 2023-06-01  6:46 UTC (permalink / raw)
  To: Ahmad Fatoum; +Cc: Barebox List

On Wed, May 31, 2023 at 02:40:13PM +0200, Ahmad Fatoum wrote:
> On 31.05.23 14:38, Sascha Hauer wrote:
> > On Wed, May 31, 2023 at 01:58:33PM +0200, Ahmad Fatoum wrote:
> >>> 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)
> >>
> >> Is this commit incomplete? Vectors should be set up unconditionally and
> >> create_zero_page should be called after it.
> > 
> > Vectors are set up unconditionally and create_zero_page() is called the
> > same way as before.
> 
> So zero page is requested first and then on platforms with vector at
> address 0 requesting fails and we are left without configured IVT?

I think you are misreading the patch. Please look at it again.
create_zero_page() is called only when the vector table is not at 0x0.
It has been like that without this patch, the patch doesn't change
anything here.

Sascha

-- 
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 |



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v2 2/2] ARM: mmu_32: fix setting up zero page when it is in SDRAM
  2023-06-01  6:46             ` Sascha Hauer
@ 2023-06-01  7:00               ` Ahmad Fatoum
  0 siblings, 0 replies; 10+ messages in thread
From: Ahmad Fatoum @ 2023-06-01  7:00 UTC (permalink / raw)
  To: Sascha Hauer; +Cc: Barebox List

On 01.06.23 08:46, Sascha Hauer wrote:
> On Wed, May 31, 2023 at 02:40:13PM +0200, Ahmad Fatoum wrote:
>> On 31.05.23 14:38, Sascha Hauer wrote:
>>> On Wed, May 31, 2023 at 01:58:33PM +0200, Ahmad Fatoum wrote:
>>>>> 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)
>>>>
>>>> Is this commit incomplete? Vectors should be set up unconditionally and
>>>> create_zero_page should be called after it.
>>>
>>> Vectors are set up unconditionally and create_zero_page() is called the
>>> same way as before.
>>
>> So zero page is requested first and then on platforms with vector at
>> address 0 requesting fails and we are left without configured IVT?
> 
> I think you are misreading the patch. Please look at it again.
> create_zero_page() is called only when the vector table is not at 0x0.
> It has been like that without this patch, the patch doesn't change
> anything here.

No I get it.

Reviewed-by: Ahmad Fatoum <a.fatoum@pengutronix.de>

Thanks for bearing with me,
Ahmad

> 
> Sascha
> 

-- 
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 |




^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2023-06-01  7:01 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
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
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

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox