[PATCH v2 27/34] ARM: mmu32: Fix pmd_flags_to_pte() for ARMv4/5/6

Ahmad Fatoum a.fatoum at pengutronix.de
Wed May 17 06:39:54 PDT 2023


On 17.05.23 11:03, Sascha Hauer wrote:
> pmd_flags_to_pte() assumed ARMv7 page table format. This has the effect
> that random bit values end up in the access permission bits. This works

                                                              ^ for older CPUs.

> because the domain is configured as manager in the DACR and thus the

                                                          ^ for non-ARMv7

> access permissions are ignored by the MMU.
> Nevertheless fix this and take the cpu architecture into account when
> translating the bits. Don't bother to translate the access permission
> bits though, just hardcode them as PTE_SMALL_AP_UNO_SRW.
> 
> Signed-off-by: Sascha Hauer <s.hauer at pengutronix.de>

Apart from that:

Acked-by: Ahmad Fatoum <a.fatoum at pengutronix.de>

> ---
>  arch/arm/cpu/mmu_32.c | 27 ++++++++++++++++-----------
>  1 file changed, 16 insertions(+), 11 deletions(-)
> 
> diff --git a/arch/arm/cpu/mmu_32.c b/arch/arm/cpu/mmu_32.c
> index 7cd732580e..4abaab7d87 100644
> --- a/arch/arm/cpu/mmu_32.c
> +++ b/arch/arm/cpu/mmu_32.c
> @@ -167,17 +167,22 @@ static u32 pmd_flags_to_pte(u32 pmd)
>  		pte |= PTE_BUFFERABLE;
>  	if (pmd & PMD_SECT_CACHEABLE)
>  		pte |= PTE_CACHEABLE;
> -	if (pmd & PMD_SECT_nG)
> -		pte |= PTE_EXT_NG;
> -	if (pmd & PMD_SECT_XN)
> -		pte |= PTE_EXT_XN;
> -
> -	/* TEX[2:0] */
> -	pte |= PTE_EXT_TEX((pmd >> 12) & 7);
> -	/* AP[1:0] */
> -	pte |= ((pmd >> 10) & 0x3) << 4;
> -	/* AP[2] */
> -	pte |= ((pmd >> 15) & 0x1) << 9;
> +
> +	if (cpu_architecture() >= CPU_ARCH_ARMv7) {
> +		if (pmd & PMD_SECT_nG)
> +			pte |= PTE_EXT_NG;
> +		if (pmd & PMD_SECT_XN)
> +			pte |= PTE_EXT_XN;
> +
> +		/* TEX[2:0] */
> +		pte |= PTE_EXT_TEX((pmd >> 12) & 7);
> +		/* AP[1:0] */
> +		pte |= ((pmd >> 10) & 0x3) << 4;
> +		/* AP[2] */
> +		pte |= ((pmd >> 15) & 0x1) << 9;
> +	} else {
> +		pte |= PTE_SMALL_AP_UNO_SRW;
> +	}
>  
>  	return pte;
>  }

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




More information about the barebox mailing list