On Mon, Aug 17, 2009 at 9:51 AM, ron minnich <rminnich@gmail.com> wrote:
On Mon, Aug 17, 2009 at 8:28 AM, Myles Watson<mylesgw@gmail.com> wrote:

> The correct way to do this is to add the functionality to the chipset init
> function.  It should check the bit that was set in the device structure and
> write the correct thing to the PCI configuration space.

How about we go through this step by step, and then Arnaud gets stuck
with writing up what we figure out.
Yes.  I'm frequently guilty of skipping steps.
 
So, Arnaud, tell me more. I'm utterly ignorant of the chipset here.

As I learn more, we can fill this out and, hopefully, have something
others can use later to know what to do.

(calling from auto.c is bad form :-)

What chipset needs to have a config register setting done?
(assuming you don't know what to do from IRC already :-)

Setting up VGA for PCI: 07:00.0
Setting PCI_BRIDGE_CTL_VGA for bridge PCI: 03:04.0
Setting PCI_BRIDGE_CTL_VGA for bridge PCI: 02:00.0
Setting PCI_BRIDGE_CTL_VGA for bridge PCI: 00:03.0
Setting PCI_BRIDGE_CTL_VGA for bridge PCI_DOMAIN: 0000
Setting PCI_BRIDGE_CTL_VGA for bridge Root Device
Allocating resources...

For me the steps would be:
1. Make sure that the device that needs the config writes is in the above list.

2. Add code like this:
     if (dev->link[link].bridge_ctrl & PCI_BRIDGE_CTL_VGA) {
          /* Add your code from auto.c here */
     }
to the .init function of the bridge.

For example, assuming that the i3100 PCIe port needs the configuration, I would add the code in:

src/northbridge/intel/i3100/pciexp_porta.c

In the existing pcie_init function.

Thanks,
Myles