UPSTREAM: nb/x4x: Add ramstage IGD disable function

This disables VGA cycles on IGD when an external VGA device is
found. This allows PCI or PCIe devices to be the 'main' VGA device if
found, while the IGD is still available.

TESTED on ga-g41m-es2l: SeaBIOS shows payload on external GPU while
linux (4.10) can use both as a framebuffer simultaneously without any
extra configuration.

BUG=none
BRANCH=none
TEST=none

Change-Id: I31fa03ca83a31ec741bd0dff3c4cffe57021581d
Signed-off-by: Patrick Georgi <pgeorgi@chromium.org>
Original-Commit-Id: c80748c2d0
Original-Change-Id: I74890918feb0f1ff6b971c4aaa96f1f7b75266ac
Original-Signed-off-by: Arthur Heymans <arthur@aheymans.xyz>
Original-Reviewed-on: https://review.coreboot.org/18504
Original-Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Original-Reviewed-by: Nico Huber <nico.h@gmx.de>
Original-Reviewed-by: Patrick Rudolph <siro@das-labor.org>
Reviewed-on: https://chromium-review.googlesource.com/501155
This commit is contained in:
Arthur Heymans 2017-02-26 23:04:51 +01:00 committed by chrome-bot
commit fa0d58ff68

View file

@ -376,6 +376,16 @@ static void gma_func0_init(struct device *dev)
pci_dev_init(dev);
}
static void gma_func0_disable(struct device *dev)
{
struct device *dev_host = dev_find_slot(0, PCI_DEVFN(0, 0));
u16 ggc;
ggc = pci_read_config16(dev_host, D0F0_GGC);
ggc |= (1 << 1); /* VGA cycles to discrete GPU */
pci_write_config16(dev_host, D0F0_GGC, ggc);
}
static void gma_set_subsystem(device_t dev, unsigned int vendor,
unsigned int device)
{
@ -419,6 +429,7 @@ static struct device_operations gma_func0_ops = {
.acpi_fill_ssdt_generator = gma_ssdt,
.init = gma_func0_init,
.ops_pci = &gma_pci_ops,
.disable = gma_func0_disable,
};
static const unsigned short pci_device_ids[] = {