Fix subvendor/subdevice programming on RS690

Some RS690 devices require subvendor/subdevice IDs to
be programmed at locations other than default 0x2c.


Signed-off-by: Josef Kellermann <seppk@arcor.de>
Acked-by: Patrick Georgi <patrick.georgi@secunet.com>


git-svn-id: svn://svn.coreboot.org/coreboot/trunk@6330 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
This commit is contained in:
Josef Kellermann 2011-02-03 09:29:57 +00:00 committed by Patrick Georgi
parent 87fcffac82
commit a96b218c9c
2 changed files with 12 additions and 2 deletions

View File

@ -193,8 +193,13 @@ static void rs690_internal_gfx_enable(device_t dev)
/* TODO: the optimization of voltage and frequency */ /* TODO: the optimization of voltage and frequency */
} }
static void gfx_dev_set_subsystem(struct device *dev, unsigned vendor, unsigned device)
{
pci_write_config32(dev, 0x4c, ((device & 0xffff) << 16) | (vendor & 0xffff));
}
static struct pci_operations lops_pci = { static struct pci_operations lops_pci = {
.set_subsystem = pci_dev_set_subsystem, .set_subsystem = gfx_dev_set_subsystem,
}; };
static struct device_operations pcie_ops = { static struct device_operations pcie_ops = {

View File

@ -70,8 +70,13 @@ static void pcie_init(struct device *dev)
pci_write_config32(dev, 0x4C, dword); pci_write_config32(dev, 0x4C, dword);
} }
static void ht_dev_set_subsystem(struct device *dev, unsigned vendor, unsigned device)
{
pci_write_config32(dev, 0x50, ((device & 0xffff) << 16) | (vendor & 0xffff));
}
static struct pci_operations lops_pci = { static struct pci_operations lops_pci = {
.set_subsystem = pci_dev_set_subsystem, .set_subsystem = ht_dev_set_subsystem,
}; };
static struct device_operations ht_ops = { static struct device_operations ht_ops = {