Paul Menzel (paulepanter@users.sourceforge.net) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/2065
-gerrit
commit f5d7954799070621aabf9c18ec249fae5fcab68d Author: Denis 'GNUtoo' Carikli GNUtoo@no-log.org Date: Thu Dec 20 18:42:00 2012 +0100
rs780: Implement `rs780_internal_gfx_disable` and add .disable pcie_ops
That code will be used to disable the internal GFX card and enable the external PCIe card.
The bits from function `rs780_internal_gfx_enable()` are taken and reversed.
/* Disable external GFX and enable internal GFX. */ l_dword = pci_read_config32(nb_dev, 0x8c); l_dword &= ~(1<<0); l_dword |= 1<<1; pci_write_config32(nb_dev, 0x8c, l_dword);
It has been tested on the M4A785T-M with the following card inside the PCIe 16x slot:
02:00.0 VGA compatible controller: nVidia Corporation GT218 [GeForce 210] (rev a2)
Change-Id: I7bd412b987fde98c97464175e2c7a384a8f0fb84 Signed-off-by: Denis 'GNUtoo' Carikli GNUtoo@no-log.org Signed-off-by: Paul Menzel paulepanter@users.sourceforge.net --- src/southbridge/amd/rs780/gfx.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+)
diff --git a/src/southbridge/amd/rs780/gfx.c b/src/southbridge/amd/rs780/gfx.c index f70cd9b..f4a5120 100644 --- a/src/southbridge/amd/rs780/gfx.c +++ b/src/southbridge/amd/rs780/gfx.c @@ -760,6 +760,24 @@ static void internal_gfx_pci_dev_init(struct device *dev) clkind_write(dev, 0x5C, 0x0); }
+/* + * Set registers in RS780 and CPU to disable the internal GFX. + * Please refer to `rs780_internal_gfx_enable()`. + * +*/ +static void rs780_internal_gfx_disable(device_t dev) +{ + u32 l_dword; + device_t nb_dev = dev_find_slot(0, 0); + + /* Disable internal GFX and enable external GFX. */ + l_dword = pci_read_config32(nb_dev, 0x8c); + l_dword |= 1<<0; + l_dword &= ~(1<<1); + pci_write_config32(nb_dev, 0x8c, l_dword); + + dev->enabled = 0; +}
/* * Set registers in RS780 and CPU to enable the internal GFX. @@ -999,6 +1017,7 @@ static struct device_operations pcie_ops = { .init = internal_gfx_pci_dev_init, /* The option ROM initializes the device. rs780_gfx_init, */ .scan_bus = 0, .enable = rs780_internal_gfx_enable, + .disable = rs780_internal_gfx_disable, .ops_pci = &lops_pci, };