grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 1/1] Fix PCIe LER when GRUB2 accesses non-enabled MMIO data f


From: Daniel Kiper
Subject: Re: [PATCH 1/1] Fix PCIe LER when GRUB2 accesses non-enabled MMIO data from VGA
Date: Mon, 26 Mar 2018 17:11:43 +0200
User-agent: Mutt/1.3.28i

On Fri, Mar 23, 2018 at 02:11:33PM -0500, Mike Travis wrote:
> A GPU inserted into a PCIe I/O slot disappears during system startup.
> The problem centers around GRUB and a specific VGA init function in
> efi_uga.c.  This causes an LER (link error recorvery) because the MMIO
> memory has not been enabled before attempting access.
>
> The fix is to add the same coding used in other VGA drivers, specifically
> to add a check to insure that it is indeed a VGA controller.  And then
> enable the MMIO address space with the specific bits.
>
> Signed-off-by: Mike Travis <address@hidden>
> Reviewed-by: Michael Chang <address@hidden>
> ---
>  grub-2.02/grub-core/video/efi_uga.c |   15 ++++++++++++---
>  1 file changed, 12 insertions(+), 3 deletions(-)
>
> Index: grub-2.02/grub-core/video/efi_uga.c
> ===================================================================
> --- grub-2.02/grub-core/video/efi_uga.c.orig
> +++ grub-2.02/grub-core/video/efi_uga.c
> @@ -95,9 +95,19 @@ find_card (grub_pci_device_t dev, grub_p
>  {
>    struct find_framebuf_ctx *ctx = data;
>    grub_pci_address_t addr;
> +  grub_uint32_t class;

s/class/subclass/

>    addr = grub_pci_make_address (dev, GRUB_PCI_REG_CLASS);
> -  if (grub_pci_read (addr) >> 24 == 0x3)
> +  class = grub_pci_read (addr);

subclass = (grub_pci_read (addr) >> 16) & 0xffff;

> +  if (((class >> 16) & 0xffff) != GRUB_PCI_CLASS_SUBCLASS_VGA)

if (subclass != GRUB_PCI_CLASS_SUBCLASS_VGA)

> +    return 0;
> +
> +  /* Enable MEM address spaces */
> +  {
> +    grub_pci_address_t rcaddr = grub_pci_make_address (dev, 
> GRUB_PCI_REG_COMMAND);
> +    grub_pci_write_word (rcaddr, grub_pci_read_word (rcaddr) | 
> GRUB_PCI_COMMAND_MEM_ENABLED);
> +  }

Please drop these curly brackets.

Daniel



reply via email to

[Prev in Thread] Current Thread [Next in Thread]