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. Change-Id: I74890918feb0f1ff6b971c4aaa96f1f7b75266ac Signed-off-by: Arthur Heymans <arthur@aheymans.xyz> Reviewed-on: https://review.coreboot.org/18504 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Nico Huber <nico.h@gmx.de> Reviewed-by: Patrick Rudolph <siro@das-labor.org>
This commit is contained in:
parent
4c4f56a6ba
commit
c80748c2d0
|
@ -376,6 +376,16 @@ static void gma_func0_init(struct device *dev)
|
||||||
pci_dev_init(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,
|
static void gma_set_subsystem(device_t dev, unsigned int vendor,
|
||||||
unsigned int device)
|
unsigned int device)
|
||||||
{
|
{
|
||||||
|
@ -419,6 +429,7 @@ static struct device_operations gma_func0_ops = {
|
||||||
.acpi_fill_ssdt_generator = gma_ssdt,
|
.acpi_fill_ssdt_generator = gma_ssdt,
|
||||||
.init = gma_func0_init,
|
.init = gma_func0_init,
|
||||||
.ops_pci = &gma_pci_ops,
|
.ops_pci = &gma_pci_ops,
|
||||||
|
.disable = gma_func0_disable,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const unsigned short pci_device_ids[] = {
|
static const unsigned short pci_device_ids[] = {
|
||||||
|
|
Loading…
Reference in New Issue