mail archive of the barebox mailing list
 help / color / mirror / Atom feed
* [PATCH 1/2] ARM: set zero page accessible before copying ATAGs there
@ 2023-05-31 10:01 Sascha Hauer
  2023-05-31 10:01 ` [PATCH 2/2] ARM: mmu_32: fix setting up zero page when it is in SDRAM Sascha Hauer
  2023-05-31 10:08 ` [PATCH 1/2] ARM: set zero page accessible before copying ATAGs there Ahmad Fatoum
  0 siblings, 2 replies; 4+ messages in thread
From: Sascha Hauer @ 2023-05-31 10:01 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..9b2f1f4544 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] 4+ messages in thread

* [PATCH 2/2] ARM: mmu_32: fix setting up zero page when it is in SDRAM
  2023-05-31 10:01 [PATCH 1/2] ARM: set zero page accessible before copying ATAGs there Sascha Hauer
@ 2023-05-31 10:01 ` Sascha Hauer
  2023-05-31 10:10   ` Ahmad Fatoum
  2023-05-31 10:08 ` [PATCH 1/2] ARM: set zero page accessible before copying ATAGs there Ahmad Fatoum
  1 sibling, 1 reply; 4+ messages in thread
From: Sascha Hauer @ 2023-05-31 10:01 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 | 21 ++-------------------
 1 file changed, 2 insertions(+), 19 deletions(-)

diff --git a/arch/arm/cpu/mmu_32.c b/arch/arm/cpu/mmu_32.c
index c4e5a3bb0a..faebba42d0 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,8 @@ void __mmu_init(bool mmu_on)
 
 		remap_range((void *)pos, bank->start + bank->size - pos, MAP_CACHED);
 	}
+
+	zero_page_faulting();
 }
 
 /*
-- 
2.39.2




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

* Re: [PATCH 1/2] ARM: set zero page accessible before copying ATAGs there
  2023-05-31 10:01 [PATCH 1/2] ARM: set zero page accessible before copying ATAGs there Sascha Hauer
  2023-05-31 10:01 ` [PATCH 2/2] ARM: mmu_32: fix setting up zero page when it is in SDRAM Sascha Hauer
@ 2023-05-31 10:08 ` Ahmad Fatoum
  1 sibling, 0 replies; 4+ messages in thread
From: Ahmad Fatoum @ 2023-05-31 10:08 UTC (permalink / raw)
  To: Sascha Hauer, Barebox List

On 31.05.23 12:01, 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>
> ---
>  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..9b2f1f4544 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();

Just < should be enough, no?

> +
> +		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] 4+ messages in thread

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

Hello Sascha,

On 31.05.23 12:01, 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 | 21 ++-------------------
>  1 file changed, 2 insertions(+), 19 deletions(-)
> 
> diff --git a/arch/arm/cpu/mmu_32.c b/arch/arm/cpu/mmu_32.c
> index c4e5a3bb0a..faebba42d0 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);

I think this should remain to avoid some $platform overwriting ATAGS
or w/e with the kernel image. I know this is a discrepancy to ARM64,
but let's play it safe?

> -	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,8 @@ void __mmu_init(bool mmu_on)
>  
>  		remap_range((void *)pos, bank->start + bank->size - pos, MAP_CACHED);
>  	}
> +
> +	zero_page_faulting();
>  }
>  
>  /*

-- 
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] 4+ messages in thread

end of thread, other threads:[~2023-05-31 10:11 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-05-31 10:01 [PATCH 1/2] ARM: set zero page accessible before copying ATAGs there Sascha Hauer
2023-05-31 10:01 ` [PATCH 2/2] ARM: mmu_32: fix setting up zero page when it is in SDRAM Sascha Hauer
2023-05-31 10:10   ` Ahmad Fatoum
2023-05-31 10:08 ` [PATCH 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