[RFC 00/16] drm/nouveau: initial support for GK20A (Tegra K1) (original) (raw)

Alexandre Courbot acourbot at nvidia.com
Mon Feb 3 18:47:13 PST 2014


On 02/03/2014 08:25 PM, David Herrmann wrote:

Hi

[..snip..] Finally, support for probing GK20A is added in the last 2 patches. It should be noted that contrary to what Nouveau currently expects, GK20A does not embed any display hardware (that part being handled by tegradrm). So this driver should really be only used through DRM render-nodes and collaborate with the display driver using PRIME. I have not yet figured out how to turn GK20A's instantiation of Nouveau into a render-node only driver without breaking support for existing desktop GPUs, and consequently the driver spawns a /dev/dri/cardX node which we should try to get rid of. You cannot get rid of cardX currently. It is implied by DRIVERMODESET and that flag should actually be called NOTALEGACYDRIVER. So you cannot remove it. I did try to replace DRIVERMODESET by an inverted DRIVERLEGACY flag some time ago, but I thought it's not worth it. Anyhow, you can easily add a new flag to make drmdevregister()/drmdevalloc() not create the drmminor for DRMMINORLEGACY, which would prevent the card0 node from showing up. But people started using the cardX interface as base interface so mesa might not be able to open render-nodes if the related card-node is not available (which is a bug in their code, so no reason to support that by not adding stand-alone render-nodes).

Actually my mention of /dev/dri/cardX was misleading. I was rather thinking about getting rid of the DRIVER_MODESET flag to correctly expose what the card provides, not only to user-space, but to DRM itself. The legacy node is ok as long as DRM itself correctly knows what the driver can and cannot do and fails gracefully if the user tries to set a mode.

DRIVER_MODESET is statically set in nouveau_drm.c, and the reason why I cannot get rid of it is because the driver (and its features) is registered with drm_pci_init() before the card is probed and its actual features known.

For platform devices, you could check the card features before registering it with drm_platform_init(), but then you have the issue that the driver instance is referenced by every probed card, and thus you cannot have cards with different capabilities.

So it seems like handling this would require the driver_features to move from drm_driver to drm_device, but that's quite a core change. As pointed out by you and Daniel, we can certainly live with the control and legacy nodes. Nonetheless I'd be curious to know how (and if) this case can be correctly handled.

Alex.



More information about the dri-devel mailing list