• Ard Biesheuvel's avatar
    fbdev/efifb: Ignore framebuffer memmap entries that lack any memory types · f8585539
    Ard Biesheuvel authored
    The following commit:
    
      38ac0287 ("fbdev/efifb: Honour UEFI memory map attributes when mapping the FB")
    
    updated the EFI framebuffer code to use memory mappings for the linear
    framebuffer that are permitted by the memory attributes described by the
    EFI memory map for the particular region, if the framebuffer happens to
    be covered by the EFI memory map (which is typically only the case for
    framebuffers in shared memory). This is required since non-x86 systems
    may require cacheable attributes for memory mappings that are shared
    with other masters (such as GPUs), and this information cannot be
    described by the Graphics Output Protocol (GOP) EFI protocol itself,
    and so we rely on the EFI memory map for this.
    
    As reported by James, this breaks some x86 systems:
    
      [ 1.173368] efifb: probing for efifb
      [ 1.173386] efifb: abort, cannot remap video memory 0x1d5000 @ 0xcf800000
      [ 1.173395] Trying to free nonexistent resource <00000000cf800000-00000000cf9d4bff>
      [ 1.173413] efi-framebuffer: probe of efi-framebuffer.0 failed with error -5
    
    The problem turns out to be that the memory map entry that describes the
    framebuffer has no memory attributes listed at all, and so we end up with
    a mem_flags value of 0x0.
    
    So work around this by ensuring that the memory map entry's attribute field
    has a sane value before using it to mask the set of usable attributes.
    Reported-by: default avatarJames Hilliard <james.hilliard1@gmail.com>
    Tested-by: default avatarJames Hilliard <james.hilliard1@gmail.com>
    Signed-off-by: default avatarArd Biesheuvel <ard.biesheuvel@linaro.org>
    Cc: <stable@vger.kernel.org> # v4.19+
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: James Morse <james.morse@arm.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Matt Fleming <matt@codeblueprint.co.uk>
    Cc: Peter Jones <pjones@redhat.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: linux-efi@vger.kernel.org
    Fixes: 38ac0287 ("fbdev/efifb: Honour UEFI memory map attributes when ...")
    Link: http://lkml.kernel.org/r/20190516213159.3530-2-ard.biesheuvel@linaro.orgSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    f8585539
efifb.c 18.7 KB