ron minnich <[EMAIL PROTECTED]> writes:
> 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.
Huh? There is a fairly definitive association between resources and
non-coherent hypertransport chains. What do you need the device for?
> 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.
Right and we know that bus is the bus we set the VGA_EN bit for.
> You have to know where the device is.
Yes but you should not need to know which device it is.
> By far the easiest way to do this is to add a simple structure member to
> the bus structure:
> struct device *vgadev;
Huh?
> 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.
Yes the simple enough it just appears to be unnecessary.
> 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.
Yes, the vga routing at least needs a special case. It is a common
case so there is no problem with that. The idea is to have a model
that we progressively refine into what we need.
What I don't see is what you need vgadev for. The only case I can
think of is short cutting to the emulator. In that case one global
would be fine.
Looking at the code though there is a bug. When it finds a device
to give the legacy vga resources to it does not allocate any MMIO
resources. For bridges this is a normal resource so this looks
a real bug in the generic code. If that is why you need
the vgadev, let's fix the generic code to handle that part properly.
Eric
_______________________________________________
Linuxbios mailing list
[EMAIL PROTECTED]
http://www.clustermatic.org/mailman/listinfo/linuxbios