V2 Epia report
Eric W. Biederman
ebiederman at lnxi.com
Fri Oct 10 18:47:01 CEST 2003
ron minnich <rminnich at lanl.gov> writes:
> On 10 Oct 2003, Eric W. Biederman wrote:
>
> >
> > southbridge amd/amd8111 "amd8111"
> > pci 0:0.0 on
> > pci 0:1.0 on
> > pci 0:1.1 on
> > pci 0:1.2 on
> > pci 0:1.3 on
> > pci 0:1.5 on
> > pci 0:1.6 off
> >
> > end
>
> BEAUTIFUL.
And baring bugs the enable function looks like:
void amd8111_enable(device_t dev)
{
device_t lpc_dev;
unsigned index;
uint16_t reg;
/* See if we are on the behind the amd8111 pci bridge */
if ((dev->bus->dev->vendor == PCI_VENDOR_ID_AMD) &&
(dev->bus->dev->device == PCI_DEVICE_ID_AMD_8111_PCI)) {
lpc_dev = dev_find_slot(dev->bus->dev->bus, dev->bus->path.pci.devfn + (1 << 3));
index = ((dev->path.pci.devfn & ~7) >> 3) + 8;
} else {
lpc_dev = dev_find_slot(dev->bus, dev->path.pci.devfn & ~7);
index = dev->path.pci.devfn & 7;
}
if (index >= 16) {
return;
}
reg = pci_read_config16(lpc_dev, 0x48);
reg &= ~(1 << index);
if (dev->enable) {
reg |= (1 << index);
}
pci_write_config16(lpc_dev, 0x48, reg);
}
The one piece of this that I have not resolved yet is how to specify a device
in the static device tree which has it's own internal pci bridge on it
and devices behind that bridge.
The fun part here is that I can have multiple amd8111 with different
pieces enabled.
I have a small theoretical problem if for some reason the device that
controls the enables is does not precede the rest of the devices. But
I will cross that bridge when I come to it.
Eric
More information about the coreboot
mailing list