The issue is that at the amdk8 northbridge, we need to know bus/dev/fn for
the hardware so we can set up the VGA_EN bit in the right PCIIO pair as
well as an MMIO entry for it. It's not enough to just set a bit in the 
bridge on the K8 -- you have to set up routing to the right Hypertransport 
bus. You have to know where the device is.

By far the easiest way to do this is to add a simple structure member to
the bus structure:
        struct device *vgadev;

so we have:
struct bus {
        device_t        dev;            /* This bridge device */
        device_t        children;       /* devices behind this bridge */
        unsigned        bridge_ctrl;    /* Bridge control register */
        /* NEW */
        struct device   *vgadev;        /* if bridge_ctl has 
                                         * PCI_CB_BRIDGE_CTL_VGA set, 
                                         * this contains pointer to 
                                         * the device.
                                         */
        /* END NEW */
        unsigned char   link;           /* The index of this link */
        unsigned char   secondary;      /* secondary bus number */
        unsigned char   subordinate;    /* max subordinate bus number */
        unsigned char   cap;            /* PCi capability offset */
};

Setting vgadev is then trivial in the allocate_vga_resource since in that
function you already have a pointer to the vga device; or just set the
pointer. Either way, when you are at a bridge and know that the bridge has
vga on the bus somewhere, you can easily get the info you need to set up
the bridge if it is a complex bridge like the K8.

        while(bus) {
                bus->bridge_ctrl |= PCI_BRIDGE_CTL_VGA;
                /* NEW */
                bus->vgadev = vga;
                /* END NEW */
                bus = (bus == bus->dev->bus)? 0 : bus->dev->bus;
        }


Unless there is a huge problem with this I will try to get it done 
tomorrow. It's a new structure member and one line of code and we're on 
the air.

It is not totally general but ... VGA is "special". As in, really ugly.

ron




_______________________________________________
Linuxbios mailing list
[EMAIL PROTECTED]
http://www.clustermatic.org/mailman/listinfo/linuxbios

Reply via email to