Right now agp_generic_enable() is wrong. It has been since 2006. It
authoroga <oga@openbsd.org>
Sat, 12 Jul 2008 17:31:06 +0000 (17:31 +0000)
committeroga <oga@openbsd.org>
Sat, 12 Jul 2008 17:31:06 +0000 (17:31 +0000)
commit60d13d3b0769e981b0f88fb719e9bec519d39148
tree43e9b9176a8d0b8f9bf8b4cf1aa4f0c44b87bf7b
parent209d887e82e43a6fbad6157bda11940895259c41
Right now agp_generic_enable() is wrong. It has been since 2006. It
assumes that the display device and the agp bridge are the same device.
In almost all cases this is incorrect.

In order to correctly enable the agp device with the correct mode, we
need to set the AGP_COMMAND register on both the display and the bridge
with the right bits. Since agp is currently attaching at vga(4), due to
the problems with the intel integrated graphics (a problem that I still
need to solve, to be honest), for now just provide both pci_attach_args
to the agp init, and get what we need from there to do the enable.

This fixes the "agp bug" which i have been known to rant about, a lot.
So agp radeons now work with dri without needing to be forced to pci
mode.

This wasn't detected before, since the only non-drm consumer of agp is
the intel X driver, the i810 agp driver has its own enable function.

tested by many. ok kettenis@.
sys/dev/pci/agp.c
sys/dev/pci/agp_i810.c
sys/dev/pci/agpvar.h
sys/dev/pci/vga_pci.c