[coreboot-gerrit] Change in coreboot[master]: [WIP]nb/intel/*/gma.c: Skip NGI when VGA decode is not enabled
Arthur Heymans (Code Review)
gerrit at coreboot.org
Thu Aug 9 11:33:39 CEST 2018
Arthur Heymans has uploaded this change for review. ( https://review.coreboot.org/27984
Change subject: [WIP]nb/intel/*/gma.c: Skip NGI when VGA decode is not enabled
......................................................................
[WIP]nb/intel/*/gma.c: Skip NGI when VGA decode is not enabled
writes to VGA MEM and IO by NGI are invalid if the IGD is not decoding them.
Change-Id: I4b9329d14105eb563a0d4aea6ef75ff11febf6df
Signed-off-by: Arthur Heymans <arthur at aheymans.xyz>
---
M src/northbridge/intel/gm45/gma.c
M src/northbridge/intel/haswell/gma.c
M src/northbridge/intel/i945/gma.c
M src/northbridge/intel/pineview/gma.c
M src/northbridge/intel/sandybridge/gma.c
M src/northbridge/intel/x4x/gma.c
6 files changed, 81 insertions(+), 37 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/84/27984/1
diff --git a/src/northbridge/intel/gm45/gma.c b/src/northbridge/intel/gm45/gma.c
index 606170c..1316fad 100644
--- a/src/northbridge/intel/gm45/gma.c
+++ b/src/northbridge/intel/gm45/gma.c
@@ -771,11 +771,18 @@
/* Post VBIOS init */
gma_pm_init_post_vbios(dev, edid_lvds.ascii_string);
- if (IS_ENABLED(CONFIG_MAINBOARD_DO_NATIVE_VGA_INIT)) {
- gma_ngi(dev, &edid_lvds);
- } else if (IS_ENABLED(CONFIG_MAINBOARD_USE_LIBGFXINIT)) {
- int lightup_ok;
- gma_gfxinit(&lightup_ok);
+ int vga_disable = (pci_read_config16(dev, GGC) & 2) >> 1;
+
+ if (vga_disable) {
+ printk(BIOS_INFO,
+ "IGD is not decoding legacy VGA MEM and IO: skipping NATIVE graphic init\n");
+ } else {
+ if (IS_ENABLED(CONFIG_MAINBOARD_DO_NATIVE_VGA_INIT)) {
+ gma_ngi(dev, &edid_lvds);
+ } else if (IS_ENABLED(CONFIG_MAINBOARD_USE_LIBGFXINIT)) {
+ int lightup_ok;
+ gma_gfxinit(&lightup_ok);
+ }
}
intel_gma_restore_opregion();
diff --git a/src/northbridge/intel/haswell/gma.c b/src/northbridge/intel/haswell/gma.c
index 8ffdce8..8f60da4 100644
--- a/src/northbridge/intel/haswell/gma.c
+++ b/src/northbridge/intel/haswell/gma.c
@@ -468,10 +468,17 @@
/* Pre panel init */
gma_setup_panel(dev);
+ int vga_disable = (pci_read_config16(dev, GGC) & 2) >> 1;
+
if (IS_ENABLED(CONFIG_MAINBOARD_USE_LIBGFXINIT)) {
- printk(BIOS_SPEW, "NATIVE graphics, run native enable\n");
- gma_gfxinit(&lightup_ok);
- gfx_set_init_done(1);
+ if (vga_disable) {
+ printk(BIOS_INFO,
+ "IGD is not decoding legacy VGA MEM and IO: skipping NATIVE graphic init\n");
+ } else {
+ printk(BIOS_SPEW, "NATIVE graphics, run native enable\n");
+ gma_gfxinit(&lightup_ok);
+ gfx_set_init_done(1);
+ }
}
if (! lightup_ok) {
diff --git a/src/northbridge/intel/i945/gma.c b/src/northbridge/intel/i945/gma.c
index 6c3d6ae..83dc42e 100644
--- a/src/northbridge/intel/i945/gma.c
+++ b/src/northbridge/intel/i945/gma.c
@@ -700,12 +700,20 @@
pci_write_config32(dev, PCI_COMMAND, reg32 | PCI_COMMAND_MASTER
| PCI_COMMAND_IO | PCI_COMMAND_MEMORY);
+ int vga_disable = (pci_read_config16(dev, GGC) & 2) >> 1;
+
if (IS_ENABLED(CONFIG_MAINBOARD_DO_NATIVE_VGA_INIT)) {
- if (acpi_is_wakeup_s3())
+ if (acpi_is_wakeup_s3()) {
printk(BIOS_INFO,
"Skipping native VGA initialization when resuming from ACPI S3.\n");
- else
- gma_ngi(dev);
+ } else {
+ if (vga_disable) {
+ printk(BIOS_INFO,
+ "IGD is not decoding legacy VGA MEM and IO: skipping NATIVE graphic init\n");
+ } else {
+ gma_ngi(dev);
+ }
+ }
} else {
/* PCI Init, will run VBIOS */
pci_dev_init(dev);
diff --git a/src/northbridge/intel/pineview/gma.c b/src/northbridge/intel/pineview/gma.c
index 8cf4d22..02100e9 100644
--- a/src/northbridge/intel/pineview/gma.c
+++ b/src/northbridge/intel/pineview/gma.c
@@ -275,6 +275,8 @@
struct resource *pio_res;
struct northbridge_intel_pineview_config *conf = dev->chip_info;
+ int vga_disable = (pci_read_config16(dev, GGC) & 2) >> 1;
+
/* Find base addresses */
mmio_res = find_resource(dev, 0x10);
gtt_res = find_resource(dev, 0x1c);
@@ -282,11 +284,17 @@
physbase = pci_read_config32(dev, 0x5c) & ~0xf;
if (gtt_res && gtt_res->base && physbase && pio_res && pio_res->base) {
- printk(BIOS_SPEW, "Initializing VGA. MMIO 0x%llx\n",
- mmio_res->base);
- intel_gma_init(conf, dev, res2mmio(mmio_res, 0, 0),
- res2mmio(gtt_res, 0, 0),
- physbase, pio_res->base);
+ if (vga_disable) {
+ printk(BIOS_INFO,
+ "IGD is not decoding legacy VGA MEM and IO: skipping NATIVE graphic init\n");
+ } else {
+ printk(BIOS_SPEW, "Initializing VGA. MMIO 0x%llx\n",
+ mmio_res->base);
+ intel_gma_init(conf, dev,
+ res2mmio(mmio_res, 0, 0),
+ res2mmio(gtt_res, 0, 0),
+ physbase, pio_res->base);
+ }
}
/* Linux relies on VBT for panel info. */
diff --git a/src/northbridge/intel/sandybridge/gma.c b/src/northbridge/intel/sandybridge/gma.c
index 73546ce..042c2a9 100644
--- a/src/northbridge/intel/sandybridge/gma.c
+++ b/src/northbridge/intel/sandybridge/gma.c
@@ -631,29 +631,38 @@
/* Post VBIOS init */
gma_pm_init_post_vbios(dev);
+ int vga_disable = (pci_read_config16(dev, GGC) & 2) >> 1;
+
/* Running graphics init on S3 breaks Linux drm driver. */
if (!acpi_is_wakeup_s3() &&
(IS_ENABLED(CONFIG_MAINBOARD_DO_NATIVE_VGA_INIT) ||
IS_ENABLED(CONFIG_MAINBOARD_USE_LIBGFXINIT))) {
- /* This should probably run before post VBIOS init. */
- printk(BIOS_SPEW, "Initializing VGA without OPROM.\n");
- u8 *mmiobase;
- u32 iobase, physbase, graphics_base;
- struct northbridge_intel_sandybridge_config *conf = dev->chip_info;
- iobase = dev->resource_list[2].base;
- mmiobase = res2mmio(&dev->resource_list[0], 0, 0);
- physbase = pci_read_config32(dev, 0x5c) & ~0xf;
- graphics_base = dev->resource_list[1].base;
-
- int lightup_ok;
- if (IS_ENABLED(CONFIG_MAINBOARD_USE_LIBGFXINIT)) {
- gma_gfxinit(&lightup_ok);
+ if (vga_disable) {
+ printk(BIOS_INFO,
+ "IGD is not decoding legacy VGA MEM and IO: skipping NATIVE graphic init\n");
} else {
- lightup_ok = i915lightup_sandy(&conf->gfx, physbase,
- iobase, mmiobase, graphics_base);
+ /* This should probably run before post VBIOS init. */
+ printk(BIOS_SPEW, "Initializing VGA without OPROM.\n");
+ u8 *mmiobase;
+ u32 iobase, physbase, graphics_base;
+ struct northbridge_intel_sandybridge_config *conf = dev->chip_info;
+ iobase = dev->resource_list[2].base;
+ mmiobase = res2mmio(&dev->resource_list[0], 0, 0);
+ physbase = pci_read_config32(dev, 0x5c) & ~0xf;
+ graphics_base = dev->resource_list[1].base;
+
+ int lightup_ok;
+ if (IS_ENABLED(CONFIG_MAINBOARD_USE_LIBGFXINIT)) {
+ gma_gfxinit(&lightup_ok);
+ } else {
+ lightup_ok = i915lightup_sandy(&conf->gfx,
+ physbase,
+ iobase, mmiobase,
+ graphics_base);
+ }
+ if (lightup_ok)
+ gfx_set_init_done(1);
}
- if (lightup_ok)
- gfx_set_init_done(1);
}
gma_enable_swsci();
diff --git a/src/northbridge/intel/x4x/gma.c b/src/northbridge/intel/x4x/gma.c
index 2d2feee..d0c40b1 100644
--- a/src/northbridge/intel/x4x/gma.c
+++ b/src/northbridge/intel/x4x/gma.c
@@ -60,7 +60,7 @@
static void gma_func0_init(struct device *dev)
{
- u16 reg16, ggc;
+ u16 reg16;
u32 reg32;
/* IGD needs to be Bus Master */
@@ -74,11 +74,16 @@
reg16 |= 0xbc;
pci_write_config16(dev_find_slot(0, PCI_DEVFN(0x2, 0)), 0xcc, reg16);
- ggc = pci_read_config16(dev_find_slot(0, PCI_DEVFN(0, 0)), D0F0_GGC);
+ int vga_disable = pci_read_config16(dev, D0F0_GGC);
if (IS_ENABLED(CONFIG_MAINBOARD_USE_LIBGFXINIT)) {
- int lightup_ok;
- gma_gfxinit(&lightup_ok);
+ if (vga_disable) {
+ printk(BIOS_INFO,
+ "IGD is not decoding legacy VGA MEM and IO: skipping NATIVE graphic init\n");
+ } else {
+ int lightup_ok;
+ gma_gfxinit(&lightup_ok);
+ }
} else {
pci_dev_init(dev);
}
--
To view, visit https://review.coreboot.org/27984
To unsubscribe, or for help writing mail filters, visit https://review.coreboot.org/settings
Gerrit-Project: coreboot
Gerrit-Branch: master
Gerrit-MessageType: newchange
Gerrit-Change-Id: I4b9329d14105eb563a0d4aea6ef75ff11febf6df
Gerrit-Change-Number: 27984
Gerrit-PatchSet: 1
Gerrit-Owner: Arthur Heymans <arthur at aheymans.xyz>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.coreboot.org/pipermail/coreboot-gerrit/attachments/20180809/f46584c5/attachment-0001.html>
More information about the coreboot-gerrit
mailing list