On 12 November 2015 at 12:35, Leif Lindholm <leif.lindh...@linaro.org> wrote:
> Hi Ard,
>
> On Mon, Nov 09, 2015 at 02:18:58PM +0100, Ard Biesheuvel wrote:
>> Mark all cached memory mappings as shareable (or inner shareable on
>> AArch64) so that our view of memory is kept coherent by the hardware.
>>
>> This is primarily relevant under virtualization (where a guest may migrate
>> to another core) but in general, since UEFI on ARM is mostly used in a
>> context where the secure firmware and possibly a secure OS are already up
>> and running, it is best to refrain from using any non-shareable mappings.
>
> Thanks, this is both an important correctness fix and nice code
> cleanup.
>
> I ran into an issue while testing this, which is why I haven't
> responded to this, but I've bisected it down to r18503/3a05b13, and am
> looking into what causes an issue with Linux booting.
>
> Regardless - this patch wasn't the cause of my issue, and it looks
> fine.
>
> Reviewed-by: Leif Lindholm <leif.lindh...@linaro.org>
>

Thanks. Committed as SVN r18778

-- 
Ard.


>> Contributed-under: TianoCore Contribution Agreement 1.0
>> Signed-off-by: Ard Biesheuvel <ard.biesheu...@linaro.org>
>> ---
>>  ArmPkg/Include/Chipset/AArch64Mmu.h        |  5 +++++
>>  ArmPkg/Include/Chipset/ArmV7Mmu.h          |  8 ++++----
>>  ArmPkg/Library/ArmLib/AArch64/AArch64Mmu.c | 21 ++++++++++----------
>>  3 files changed, 19 insertions(+), 15 deletions(-)
>>
>> diff --git a/ArmPkg/Include/Chipset/AArch64Mmu.h 
>> b/ArmPkg/Include/Chipset/AArch64Mmu.h
>> index 22e492d61dc0..3c3df6d9835c 100644
>> --- a/ArmPkg/Include/Chipset/AArch64Mmu.h
>> +++ b/ArmPkg/Include/Chipset/AArch64Mmu.h
>> @@ -74,6 +74,11 @@
>>  #define TT_NS                                   BIT5
>>  #define TT_AF                                   BIT10
>>
>> +#define TT_SH_NON_SHAREABLE                     (0x0 << 8)
>> +#define TT_SH_OUTER_SHAREABLE                   (0x2 << 8)
>> +#define TT_SH_INNER_SHAREABLE                   (0x3 << 8)
>> +#define TT_SH_MASK                              (0x3 << 8)
>> +
>>  #define TT_PXN_MASK                             BIT53
>>  #define TT_UXN_MASK                             BIT54   // EL1&0
>>  #define TT_XN_MASK                              BIT54   // EL2 / EL3
>> diff --git a/ArmPkg/Include/Chipset/ArmV7Mmu.h 
>> b/ArmPkg/Include/Chipset/ArmV7Mmu.h
>> index 24ab1755faa7..aaa0977205fa 100644
>> --- a/ArmPkg/Include/Chipset/ArmV7Mmu.h
>> +++ b/ArmPkg/Include/Chipset/ArmV7Mmu.h
>> @@ -175,14 +175,14 @@
>>  #define TT_DESCRIPTOR_SECTION_WRITE_BACK(NonSecure)         
>> (TT_DESCRIPTOR_SECTION_TYPE_SECTION                                          
>>                  | \
>>                                                              ((NonSecure) ?  
>> TT_DESCRIPTOR_SECTION_NS : 0)    | \
>>                                                              
>> TT_DESCRIPTOR_SECTION_NG_GLOBAL                         | \
>> -                                                            
>> TT_DESCRIPTOR_SECTION_S_NOT_SHARED                      | \
>> +                                                            
>> TT_DESCRIPTOR_SECTION_S_SHARED                          | \
>>                                                              
>> TT_DESCRIPTOR_SECTION_DOMAIN(0)                         | \
>>                                                              
>> TT_DESCRIPTOR_SECTION_AP_RW_RW                          | \
>>                                                              
>> TT_DESCRIPTOR_SECTION_CACHE_POLICY_WRITE_BACK_ALLOC)
>>  #define TT_DESCRIPTOR_SECTION_WRITE_THROUGH(NonSecure)      
>> (TT_DESCRIPTOR_SECTION_TYPE_SECTION                                          
>>                  | \
>>                                                              ((NonSecure) ?  
>> TT_DESCRIPTOR_SECTION_NS : 0)    | \
>>                                                              
>> TT_DESCRIPTOR_SECTION_NG_GLOBAL                         | \
>> -                                                            
>> TT_DESCRIPTOR_SECTION_S_NOT_SHARED                      | \
>> +                                                            
>> TT_DESCRIPTOR_SECTION_S_SHARED                          | \
>>                                                              
>> TT_DESCRIPTOR_SECTION_DOMAIN(0)                         | \
>>                                                              
>> TT_DESCRIPTOR_SECTION_AP_RW_RW                          | \
>>                                                              
>> TT_DESCRIPTOR_SECTION_CACHE_POLICY_WRITE_THROUGH_NO_ALLOC)
>> @@ -203,12 +203,12 @@
>>
>>  #define TT_DESCRIPTOR_PAGE_WRITE_BACK              
>> (TT_DESCRIPTOR_PAGE_TYPE_PAGE                                                
>>            | \
>>                                                          
>> TT_DESCRIPTOR_PAGE_NG_GLOBAL                                                 
>>      | \
>> -                                                        
>> TT_DESCRIPTOR_PAGE_S_NOT_SHARED                                              
>>      | \
>> +                                                        
>> TT_DESCRIPTOR_PAGE_S_SHARED                                                  
>>      | \
>>                                                          
>> TT_DESCRIPTOR_PAGE_AP_RW_RW                                                  
>>      | \
>>                                                          
>> TT_DESCRIPTOR_PAGE_CACHE_POLICY_WRITE_BACK_ALLOC)
>>  #define TT_DESCRIPTOR_PAGE_WRITE_THROUGH           
>> (TT_DESCRIPTOR_PAGE_TYPE_PAGE                                                
>>            | \
>>                                                          
>> TT_DESCRIPTOR_PAGE_NG_GLOBAL                                                 
>>      | \
>> -                                                        
>> TT_DESCRIPTOR_PAGE_S_NOT_SHARED                                              
>>      | \
>> +                                                        
>> TT_DESCRIPTOR_PAGE_S_SHARED                                                  
>>      | \
>>                                                          
>> TT_DESCRIPTOR_PAGE_AP_RW_RW                                                  
>>      | \
>>                                                          
>> TT_DESCRIPTOR_PAGE_CACHE_POLICY_WRITE_THROUGH_NO_ALLOC)
>>  #define TT_DESCRIPTOR_PAGE_DEVICE                  
>> (TT_DESCRIPTOR_PAGE_TYPE_PAGE                                                
>>            | \
>> diff --git a/ArmPkg/Library/ArmLib/AArch64/AArch64Mmu.c 
>> b/ArmPkg/Library/ArmLib/AArch64/AArch64Mmu.c
>> index e40c09ae9685..8829c6286b36 100644
>> --- a/ArmPkg/Library/ArmLib/AArch64/AArch64Mmu.c
>> +++ b/ArmPkg/Library/ArmLib/AArch64/AArch64Mmu.c
>> @@ -34,23 +34,22 @@ ArmMemoryAttributeToPageAttribute (
>>  {
>>    switch (Attributes) {
>>    case ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK:
>> -    return TT_ATTR_INDX_MEMORY_WRITE_BACK;
>> -  case ARM_MEMORY_REGION_ATTRIBUTE_WRITE_THROUGH:
>> -    return TT_ATTR_INDX_MEMORY_WRITE_THROUGH;
>> -  case ARM_MEMORY_REGION_ATTRIBUTE_DEVICE:
>> -    return TT_ATTR_INDX_DEVICE_MEMORY;
>> -  case ARM_MEMORY_REGION_ATTRIBUTE_UNCACHED_UNBUFFERED:
>> -    return TT_ATTR_INDX_MEMORY_NON_CACHEABLE;
>>    case ARM_MEMORY_REGION_ATTRIBUTE_NONSECURE_WRITE_BACK:
>> -    return TT_ATTR_INDX_MEMORY_WRITE_BACK;
>> +    return TT_ATTR_INDX_MEMORY_WRITE_BACK | TT_SH_INNER_SHAREABLE;
>> +
>> +  case ARM_MEMORY_REGION_ATTRIBUTE_WRITE_THROUGH:
>>    case ARM_MEMORY_REGION_ATTRIBUTE_NONSECURE_WRITE_THROUGH:
>> -    return TT_ATTR_INDX_MEMORY_WRITE_THROUGH;
>> -  case ARM_MEMORY_REGION_ATTRIBUTE_NONSECURE_DEVICE:
>> -    return TT_ATTR_INDX_DEVICE_MEMORY;
>> +    return TT_ATTR_INDX_MEMORY_WRITE_THROUGH | TT_SH_INNER_SHAREABLE;
>> +
>> +  // Uncached and device mappings are treated as outer shareable by default,
>> +  case ARM_MEMORY_REGION_ATTRIBUTE_UNCACHED_UNBUFFERED:
>>    case ARM_MEMORY_REGION_ATTRIBUTE_NONSECURE_UNCACHED_UNBUFFERED:
>>      return TT_ATTR_INDX_MEMORY_NON_CACHEABLE;
>> +
>>    default:
>>      ASSERT(0);
>> +  case ARM_MEMORY_REGION_ATTRIBUTE_DEVICE:
>> +  case ARM_MEMORY_REGION_ATTRIBUTE_NONSECURE_DEVICE:
>>      return TT_ATTR_INDX_DEVICE_MEMORY;
>>    }
>>  }
>> --
>> 1.9.1
>>
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to