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 <mike.tra...@hpe.com>
> Reviewed-by: Michael Chang <mch...@suse.com>
> ---
>  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

_______________________________________________
Grub-devel mailing list
Grub-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/grub-devel

Reply via email to