SHA256
1
0
forked from pool/grub2

Accepting request 593042 from home:michael-chang:branches:Base:System

- Fix Nvidia GPU in legacy I/O slot 2 disappears during system
  startup (bsc#1082914)
  * 0001-Fix-PCIe-LER-when-GRUB2-accesses-non-enabled-MMIO-da.patch 

- Fix packed-not-aligned error on GCC 8 (bsc#1084632)
  * 0001-Fix-packed-not-aligned-error-on-GCC-8.patch

OBS-URL: https://build.opensuse.org/request/show/593042
OBS-URL: https://build.opensuse.org/package/show/Base:System/grub2?expand=0&rev=296
This commit is contained in:
Michael Chang 2018-04-03 07:42:58 +00:00 committed by Git OBS Bridge
parent bcd92bd3f1
commit a0de87febe
4 changed files with 130 additions and 0 deletions

View File

@ -0,0 +1,46 @@
From 2f06e09673e48f6a91486a8ad38f45c160d537fe Mon Sep 17 00:00:00 2001
From: "mike.travis@hpe.com" <mike.travis@hpe.com>
Date: Wed, 28 Mar 2018 11:42:18 -0500
Subject: Fix PCIe LER when GRUB2 accesses non-enabled MMIO data from VGA
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.travis@hpe.com>
---
grub-core/video/efi_uga.c | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/grub-core/video/efi_uga.c b/grub-core/video/efi_uga.c
index 464ede874..32ef7efbc 100644
--- a/grub-core/video/efi_uga.c
+++ b/grub-core/video/efi_uga.c
@@ -95,9 +95,18 @@ find_card (grub_pci_device_t dev, grub_pci_id_t pciid, void *data)
{
struct find_framebuf_ctx *ctx = data;
grub_pci_address_t addr;
+ grub_pci_address_t rcaddr;
+ grub_uint32_t subclass;
addr = grub_pci_make_address (dev, GRUB_PCI_REG_CLASS);
- if (grub_pci_read (addr) >> 24 == 0x3)
+ subclass = (grub_pci_read (addr) >> 16) & 0xffff;
+ if (subclass != GRUB_PCI_CLASS_SUBCLASS_VGA)
+ return 0;
+
+ /* Enable MEM address spaces */
+ 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);
+
{
int i;
--
2.13.6

View File

@ -0,0 +1,67 @@
From 721f75ff7de467717658d2de9c20bbb18145790a Mon Sep 17 00:00:00 2001
From: Michael Chang <mchang@suse.com>
Date: Mon, 26 Mar 2018 16:52:34 +0800
Subject: Fix packed-not-aligned error on GCC 8
When building with GCC 8, there are several errors regarding packed-not-aligned.
./include/grub/gpt_partition.h:79:1: error: alignment 1 of 'struct grub_gpt_partentry' is less than 8 [-Werror=packed-not-aligned]
This patch tries to fix the build error by cleaning up the ambiguity of placing
aligned structure in a packed one. In "struct grub_btrfs_time" and "struct
grub_gpt_part_type", the aligned attribute seems to be superfluous, and also
has to be packed, to ensure the structure is bit-to-bit mapped to the format
laid on disk. I think we could blame to copy and paste error here for the
mistake. In "struct efi_variable", we have to use grub_efi_packed_guid_t, as
the name suggests. :)
Signed-off-by: Michael Chang <mchang@suse.com>
Tested-by: Michael Chang <mchang@suse.com>
---
grub-core/fs/btrfs.c | 2 +-
include/grub/efiemu/runtime.h | 2 +-
include/grub/gpt_partition.h | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/grub-core/fs/btrfs.c b/grub-core/fs/btrfs.c
index 4849c1ceb..be195448d 100644
--- a/grub-core/fs/btrfs.c
+++ b/grub-core/fs/btrfs.c
@@ -175,7 +175,7 @@ struct grub_btrfs_time
{
grub_int64_t sec;
grub_uint32_t nanosec;
-} __attribute__ ((aligned (4)));
+} GRUB_PACKED;
struct grub_btrfs_inode
{
diff --git a/include/grub/efiemu/runtime.h b/include/grub/efiemu/runtime.h
index 9b6b729f4..36d2dedf4 100644
--- a/include/grub/efiemu/runtime.h
+++ b/include/grub/efiemu/runtime.h
@@ -29,7 +29,7 @@ struct grub_efiemu_ptv_rel
struct efi_variable
{
- grub_efi_guid_t guid;
+ grub_efi_packed_guid_t guid;
grub_uint32_t namelen;
grub_uint32_t size;
grub_efi_uint32_t attributes;
diff --git a/include/grub/gpt_partition.h b/include/grub/gpt_partition.h
index 1b32f6725..9668a68c3 100644
--- a/include/grub/gpt_partition.h
+++ b/include/grub/gpt_partition.h
@@ -28,7 +28,7 @@ struct grub_gpt_part_type
grub_uint16_t data2;
grub_uint16_t data3;
grub_uint8_t data4[8];
-} __attribute__ ((aligned(8)));
+} GRUB_PACKED;
typedef struct grub_gpt_part_type grub_gpt_part_type_t;
#define GRUB_GPT_PARTITION_TYPE_EMPTY \
--
2.13.6

View File

@ -1,3 +1,16 @@
-------------------------------------------------------------------
Mon Apr 2 08:30:05 UTC 2018 - mchang@suse.com
- Fix Nvidia GPU in legacy I/O slot 2 disappears during system
startup (bsc#1082914)
* 0001-Fix-PCIe-LER-when-GRUB2-accesses-non-enabled-MMIO-da.patch
-------------------------------------------------------------------
Fri Mar 30 09:16:06 UTC 2018 - mchang@suse.com
- Fix packed-not-aligned error on GCC 8 (bsc#1084632)
* 0001-Fix-packed-not-aligned-error-on-GCC-8.patch
-------------------------------------------------------------------
Mon Mar 26 11:37:13 UTC 2018 - msuchanek@suse.com

View File

@ -214,6 +214,8 @@ Patch82: grub2-diskfilter-support-pv-without-metadatacopies.patch
Patch83: grub2-efi-uga-64bit-fb.patch
Patch84: grub2-s390x-09-improve-zipl-setup.patch
Patch85: grub2-getroot-scan-disk-pv.patch
Patch86: 0001-Fix-packed-not-aligned-error-on-GCC-8.patch
Patch87: 0001-Fix-PCIe-LER-when-GRUB2-accesses-non-enabled-MMIO-da.patch
# Btrfs snapshot booting related patches
Patch101: grub2-btrfs-01-add-ability-to-boot-from-subvolumes.patch
Patch102: grub2-btrfs-02-export-subvolume-envvars.patch
@ -493,6 +495,8 @@ swap partition while in resuming
%patch83 -p1
%patch84 -p1
%patch85 -p1
%patch86 -p1
%patch87 -p1
%patch101 -p1
%patch102 -p1
%patch103 -p1