nv, autodetection fails because of missing PCI-IDs, in nv.ids, for a large number of supported cards in Jaunty
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
xserver-xorg-video-nv (Ubuntu) |
Won't Fix
|
High
|
Unassigned |
Bug Description
Binary package hint: xserver-
In my case, "/usr/share/
I took some time to figure out what was realy going on here. It seems that a large number of supported cards are affected by this bug. The problem is the way "nv.ids" is generated. As far as I could tell, it's generated from "nv_driver.c" (NVKnownChipsets[] to be exact) by a simple awk+sed script. The problem is that not all PCI-IDs of supported cards are listed there and therefore, "nv.ids" is missing PCI-IDs that are not explicitely found in "nv_driver.c". Some supported cards, for example, AGP versions of the cards where both AGP and PCI-E versions exist, are handled diferently by the code.
Here is the code snippet from nv_driver.c:
const CARD32 id = ((dev->device_id & 0xfff0) == 0x00F0 ||
const char *name = xf86TokenToStri
So, cards with PCI-IDs 02Ex and 00Fx (AGP) are handled by translating their PCI-IDs in PCI-E equivalent PCI-IDs and then looked up in NVKnownChipsets[]. For example, PCI-IDs of my card, 02E1 is translated to 0392, looked up in NVKnownChipsets[] and then handled properly. NVGetPCIXpressC
All in all, "nv.ids" is incomplete because of the way it's generated at the moment.
Solutions:
1) Add supported PCI-IDs, 02Ex and 00Fx, to "nv.ids" manualy, after "nv.ids" is generated with awk+sed script. Consult "pci.ids" if needed.
2) Add supported PCI-IDs in NVKnownChipsets[] and then generate "nv.ids". Those entries in NVKnownChipsets[] would never be used by the code so the question is should they even be there.
3) Change how X server handle .ids files upstream, by adding support for whildcards/
References used:
xserver-
xserver-
/usr/share/
http://
http://
Wildcards/bitmasks aren't necessarily a solution. There is hardware that is made by NVIDIA that doesn't work with NV, so if you just match on NVIDIA as a vendor, you are shooting yourself in the foot.
The best solution is:
* Submit your IDs upstream, and then we can pull a patch..