On 2 March 2016 at 11:27, Leif Lindholm <[email protected]> wrote:
> On Wed, Mar 02, 2016 at 10:12:37AM +0100, Ard Biesheuvel wrote:
>> On 1 March 2016 at 16:11, Leif Lindholm <[email protected]> wrote:
>> > Hi Evan,
>> >
>> > On Tue, Mar 01, 2016 at 02:14:35PM +0000, [email protected] wrote:
>> >> From: Evan Lloyd <[email protected]>
>> >>
>> >> Architecturally, the TTBCR register value is undefined at reset for
>> >> Non-Secure.
>> >> On some platforms the reset value for TTBCR is not zero and
>> >> this causes a data abort exception once the MMU is enabled.
>> >>
>> >> This patch configures the TTBCR register to enable translation table
>> >> walk using TTBR0.
>> >>
>> >> Contributed-under: Tianocore Contribution Agreement 1.0
>> >
>> > Upper-case C in TianoCore:
>> > Contributed-under: TianoCore Contribution Agreement 1.0
>> >
>> > I can fix that one on commit, but scanning through history I notice
>> > your previous patch did the same.
>> >
>> > BaseTools/Scripts/PatchCheck.py will pick this up for you.
>> >
>> >> Signed-off-by: Evan Lloyd <[email protected]>
>> >> ---
>> >>  ArmPkg/Include/Library/ArmLib.h                    |  8 +++++++-
>> >>  ArmPkg/Library/ArmLib/ArmV7/ArmV7Mmu.c             | 14 +++++++++++++-
>> >>  ArmPkg/Library/ArmLib/Common/Arm/ArmLibSupport.S   |  8 +++++++-
>> >>  ArmPkg/Library/ArmLib/Common/Arm/ArmLibSupport.asm |  7 ++++++-
>> >>  4 files changed, 33 insertions(+), 4 deletions(-)
>> >>
>> >> diff --git a/ArmPkg/Include/Library/ArmLib.h 
>> >> b/ArmPkg/Include/Library/ArmLib.h
>> >> index 85fa1f6..15f610d 100644
>> >> --- a/ArmPkg/Include/Library/ArmLib.h
>> >> +++ b/ArmPkg/Include/Library/ArmLib.h
>> >> @@ -1,7 +1,7 @@
>> >>  /** @file
>> >>
>> >>    Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
>> >> -  Copyright (c) 2011 - 2015, ARM Ltd. All rights reserved.<BR>
>> >> +  Copyright (c) 2011 - 2016, ARM Ltd. All rights reserved.<BR>
>> >>
>> >>    This program and the accompanying materials
>> >>    are licensed and made available under the terms and conditions of the 
>> >> BSD License
>> >> @@ -353,6 +353,12 @@ ArmSetTTBR0 (
>> >>    IN  VOID  *TranslationTableBase
>> >>    );
>> >>
>> >> +VOID
>> >> +EFIAPI
>> >> +ArmSetTTBCR (
>> >> +  IN  UINT32 Bits
>> >> +  );
>> >> +
>> >>  VOID *
>> >>  EFIAPI
>> >>  ArmGetTTBR0BaseAddress (
>> >> diff --git a/ArmPkg/Library/ArmLib/ArmV7/ArmV7Mmu.c 
>> >> b/ArmPkg/Library/ArmLib/ArmV7/ArmV7Mmu.c
>> >> index fc8ea42..8cc33e3 100644
>> >> --- a/ArmPkg/Library/ArmLib/ArmV7/ArmV7Mmu.c
>> >> +++ b/ArmPkg/Library/ArmLib/ArmV7/ArmV7Mmu.c
>> >> @@ -1,7 +1,7 @@
>> >>  /** @file
>> >>  *  File managing the MMU for ARMv7 architecture
>> >>  *
>> >> -*  Copyright (c) 2011-2013, ARM Limited. All rights reserved.
>> >> +*  Copyright (c) 2011-2016, ARM Limited. All rights reserved.
>> >>  *
>> >>  *  This program and the accompanying materials
>> >>  *  are licensed and made available under the terms and conditions of the 
>> >> BSD License
>> >> @@ -347,6 +347,18 @@ ArmConfigureMmu (
>> >>
>> >>    ArmSetTTBR0 ((VOID *)(UINTN)(((UINTN)TranslationTable & 
>> >> ~TRANSLATION_TABLE_SECTION_ALIGNMENT_MASK) | (TTBRAttributes & 0x7F)));
>> >>
>> >> +  //
>> >> +  // The TTBCR register value is undefined at reset in the Non-Secure 
>> >> world.
>> >> +  // Writing 0 has the effect of:
>> >> +  //   Clearing EAE: Important because current page table set up code 
>> >> does not
>> >> +  //                 support Extended Addressing, so only uses short 
>> >> descriptors.
>> >
>> > ... but it won't pick up on that line being >80 characters (because
>> > that isn't (yet) a hard TianoCore rule). I'll fix that one up as well,
>> > for my own future comfort.
>> >
>> > As for the functionality, yes - the translation table code for AArch32
>> > will always have to be short descriptors, since the specification
>> > mandates that virtual address equals physical address.
>>
>> I don't follow. The spec mandates that virtual address equals physical
>> address, but that by itself could easily be implemented using long
>> descriptors. The only reason we cannot support long descriptors is
>> because they imply TRE=1, while the spec mandates TRE=0.
>
> OK, I guess if we're not talking RAM, and have plenty of virtual space
> left for i/o. We really just update the spec to mention EAE
> explicitly.
>
>> > It is the specification that matters more than the code, so how about
>> > "Use short descriptors, as mandated by specification."?
>
> Any issue with the actual suggested comment?
>

Nope

>> >> +  //   Clearing PD0 and PD1: Prevents translation faults from non-secure 
>> >> page
>> >> +  //                        lookups.
>> >
>> > I would prefer to put this as "Translation Table Walk Disable is off".
>> >
>>
>> Ack
>>
>> >
>> >> +  //   Clearing N: 0 is the default reset value, and is again compatible 
>> >> with
>> >> +  //               current page table set up.
>> >
>> > As the specification says "TTBR0 must be used solely", how about
>> > "Perform all translation table walks through TTBR0."?
>> >
>>
>> Ack
>>
>> >> +  //
>> >> +  ArmSetTTBCR (0);
>> >> +
>> >>    ArmSetDomainAccessControl (DOMAIN_ACCESS_CONTROL_NONE(15) |
>> >>                               DOMAIN_ACCESS_CONTROL_NONE(14) |
>> >>                               DOMAIN_ACCESS_CONTROL_NONE(13) |
>> >> diff --git a/ArmPkg/Library/ArmLib/Common/Arm/ArmLibSupport.S 
>> >> b/ArmPkg/Library/ArmLib/Common/Arm/ArmLibSupport.S
>> >> index 085f08b..5d1194e 100644
>> >> --- a/ArmPkg/Library/ArmLib/Common/Arm/ArmLibSupport.S
>> >> +++ b/ArmPkg/Library/ArmLib/Common/Arm/ArmLibSupport.S
>> >> @@ -1,7 +1,7 @@
>> >>  
>> >> #------------------------------------------------------------------------------
>> >>  #
>> >>  # Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
>> >> -# Copyright (c) 2011 - 2014, ARM Limited. All rights reserved.
>> >> +# Copyright (c) 2011 - 2016, ARM Limited. All rights reserved.
>> >>  #
>> >>  # This program and the accompanying materials
>> >>  # are licensed and made available under the terms and conditions of the 
>> >> BSD License
>> >> @@ -23,6 +23,7 @@ GCC_ASM_EXPORT(ArmGetInterruptState)
>> >>  GCC_ASM_EXPORT(ArmGetFiqState)
>> >>  GCC_ASM_EXPORT(ArmGetTTBR0BaseAddress)
>> >>  GCC_ASM_EXPORT(ArmSetTTBR0)
>> >> +GCC_ASM_EXPORT(ArmSetTTBCR)
>> >>  GCC_ASM_EXPORT(ArmSetDomainAccessControl)
>> >>  GCC_ASM_EXPORT(CPSRMaskInsert)
>> >>  GCC_ASM_EXPORT(CPSRRead)
>> >> @@ -111,6 +112,11 @@ ASM_PFX(ArmSetTTBR0):
>> >>    isb
>> >>    bx      lr
>> >>
>> >> +ASM_PFX(ArmSetTTBCR):
>> >> +  mcr     p15, 0, r0, c2, c0, 2
>> >> +  isb
>> >> +  bx      lr
>> >> +
>> >>  ASM_PFX(ArmGetTTBR0BaseAddress):
>> >>    mrc     p15,0,r0,c2,c0,0
>> >>    LoadConstantToReg(0xFFFFC000, r1)
>> >> diff --git a/ArmPkg/Library/ArmLib/Common/Arm/ArmLibSupport.asm 
>> >> b/ArmPkg/Library/ArmLib/Common/Arm/ArmLibSupport.asm
>> >> index 228d7c8..9b87b7f 100644
>> >> --- a/ArmPkg/Library/ArmLib/Common/Arm/ArmLibSupport.asm
>> >> +++ b/ArmPkg/Library/ArmLib/Common/Arm/ArmLibSupport.asm
>> >> @@ -1,7 +1,7 @@
>> >>  
>> >> //------------------------------------------------------------------------------
>> >>  //
>> >>  // Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
>> >> -// Copyright (c) 2011 - 2014, ARM Limited. All rights reserved.
>> >> +// Copyright (c) 2011 - 2016, ARM Limited. All rights reserved.
>> >>  //
>> >>  // This program and the accompanying materials
>> >>  // are licensed and made available under the terms and conditions of the 
>> >> BSD License
>> >> @@ -85,6 +85,11 @@
>> >>    isb
>> >>    bx      lr
>> >>
>> >> + RVCT_ASM_EXPORT ArmSetTTBCR
>> >> +  mcr     p15, 0, r0, c2, c0, 2
>> >> +  isb
>> >> +  bx      lr
>> >> +
>> >>   RVCT_ASM_EXPORT ArmGetTTBR0BaseAddress
>> >>    mrc     p15,0,r0,c2,c0,0
>> >>    LoadConstantToReg(0xFFFFC000, r1)
>> >> --
>> >> 2.7.0
>> >
>> > No comments on code, and it's a clear bugfix, but I would like some
>> > feedback on my suggestions for changes in the comments before pushing.
>> >
>> > Regards,
>> >
>> > Leif
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to