Date: Mon, 3 Jul 2006 14:02:36 +0200 From: Christian Zander <czander@nvidia.com> To: "M. Warner Losh" <imp@bsdimp.com> Cc: freebsd-hackers@FreeBSD.ORG, czander@nvidia.com Subject: Re: NVIDIA FreeBSD kernel feature requests Message-ID: <20060703120236.GS692@wolf.nvidia.com> In-Reply-To: <20060702.220217.2073896080.imp@bsdimp.com> References: <20060629111231.GA692@wolf.nvidia.com> <20060702.220217.2073896080.imp@bsdimp.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On Sun, Jul 02, 2006 at 10:02:17PM -0600, M. Warner Losh wrote: > In message: <20060629111231.GA692@wolf.nvidia.com> > Christian Zander <czander@nvidia.com> writes: > : This summary makes an attempt to describe the kernel interfaces needed by > : the NVIDIA FreeBSD i386 graphics driver to achieve feature parity with > : the Linux/Solaris graphics drivers, and/or required to make support for > : the FreeBSD amd64 platform feasible. It also describes some of the > : technical difficulties encountered by NVIDIA during the FreeBSD i386 > : graphics driver's development, how these problems have been worked around > : and what could be done to solve them better. > > Thank you for taking the time to let us know how we might make the > system better. > > : The NVIDIA graphics driver needs to be able to create uncached kernel > : and user mappings of I/O memory, such as NVIDIA GPU registers. The > : FreeBSD kernel does not currently provide the interfaces necessary to > : specify the memory type when creating such mappings, which makes it > : difficult for the NVIDIA graphics driver to guarantee that the correct > : memory type is selected. > > Is this via the bus_alloc_resource interface? Is uncached kernel > memory different than non-prefetchable memory? If so, please specify > how it is different. If not, then we have an interface that will do > what you want, except it is only implemented for cardbus and would > need to be implemented for pci pci and pci host bridges. Would having > better functionality here help? I noticed it wasn't on the task list... > The I/O memory in question is non-prefetchable. The NVIDIA FreeBSD graphics driver currently uses the bus_alloc_resource() interface without the RF_ACTIVE flag and then uses pmap_mapdev() to obtain kernel mappings of the I/O memory, which it then updates with the PCD/PWT flags to force them to be uncached. User mappings are created via mmap(); they use the effective memory type derived from the MTRR configuration. If you're interested in taking a look, the FreeBSD kernel specific interface code is included with the NVIDIA graphics driver. John is working on pmap_mapdev_attr(), which is built on top of the PAT support he is adding, and this interface will allow the caller to request a specific memory type to use for the mapping, handling the details transparently (e.g. the direct mapping on FreeBSD amd64). It would probably be useful if the bus_alloc_resource() interface supported this functionality, but the NVIDIA graphics driver would still need to use the pmap_mapdev_attr() interface, e.g. for its AGP GART driver. The current plan is to replace pmap_mapdev() with pmap_mapdev_attr() in the driver when the latter interface becomes available. Thanks, > Warner -- christian zander ch?zander@nvidia.com
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20060703120236.GS692>