Skip to content
  • Ard Biesheuvel's avatar
    efi/arm64: Treat regions with WT/WC set but WB cleared as memory · cb82cce7
    Ard Biesheuvel authored
    
    
    Currently, memory regions are only recorded in the memblock memory table
    if they have the EFI_MEMORY_WB memory type attribute set. In case the
    region is of a reserved type, it is also marked as MEMBLOCK_NOMAP, which
    will leave it out of the linear mapping.
    
    However, memory regions may legally have the EFI_MEMORY_WT or EFI_MEMORY_WC
    attributes set, and the EFI_MEMORY_WB cleared, in which case the region in
    question is obviously backed by normal memory, but is not recorded in the
    memblock memory table at all. Since it would be useful to be able to
    identify any UEFI reported memory region using memblock_is_memory(), it
    makes sense to add all memory to the memblock memory table, and simply mark
    it as MEMBLOCK_NOMAP if it lacks the EFI_MEMORY_WB attribute.
    
    While implementing this, let's refactor the code slightly to make it easier
    to understand: replace is_normal_ram() with is_memory(), and make it return
    true for each region that has any of the WB|WT|WC bits set. (This follows
    the AArch64 bindings in the UEFI spec, which state that those are the
    attributes that map to normal memory)
    
    Also, replace is_reserve_region() with is_usable_memory(), and only invoke
    it if the region in question was identified as memory by is_memory() in the
    first place. The net result is the same (only reserved regions that are
    backed by memory end up in the memblock memory table with the MEMBLOCK_NOMAP
    flag set) but carried out in a more straightforward way.
    
    Finally, we remove the trailing asterisk in the EFI debug output. Keeping it
    clutters the code, and it serves no real purpose now that we no longer
    temporarily reserve BootServices code and data regions like we did in the
    early days of EFI support on arm64 Linux (which it inherited from the x86
    implementation)
    
    Signed-off-by: default avatarArd Biesheuvel <ard.biesheuvel@linaro.org>
    Reviewed-by: default avatarLeif Lindholm <leif.lindholm@linaro.org>
    Tested-by: default avatarJames Morse <james.morse@arm.com>
    Reviewed-by: default avatarJames Morse <james.morse@arm.com>
    Signed-off-by: default avatarMatt Fleming <matt@codeblueprint.co.uk>
    cb82cce7