Dear DRI/DRM developers,

I'm trying to understand the DRM GART interaction with the linux DRM
core, because I'm trying to run the M300 Mobility (PCI Express) with
Xegl to help out with development. I fetched MESA and DRM, built them
(after applying some fixes), and built Xegl.

I'm now trying to run Xegl with a frame buffer, and when starting get

[17182196.816000] [drm:radeon_do_init_cp]
[17182196.816000] [drm:radeon_do_init_cp] dev_priv->cp_ring->handle
e1ca2000
[17182196.816000] [drm:radeon_do_init_cp] dev_priv->ring_rptr->handle
e1da3000
[17182196.816000] [drm:radeon_do_init_cp] dev->agp_buffer_map->handle
e1da4000
[17182196.816000] [drm] Setting GART location based on old memory map
[17182196.816000] [drm:radeon_do_init_cp] dev_priv->gart_size 8388608
[17182196.816000] [drm:radeon_do_init_cp] dev_priv->gart_vm_start
0x4000000
[17182196.816000] [drm:radeon_do_init_cp] dev_priv->gart_buffers_offset
0x4102000
[17182196.816000] [drm:radeon_do_init_cp] Setting phys_pci_gart to
00000000 07FF8000
[17182196.816000] [drm:drm_ati_pcigart_init] PCI: Gart Table: VRAM
07FF8000 mapped at 00000000
[17182196.816000] BUG: unable to handle kernel NULL pointer dereference
at virtual address 00000000
(...)

Because the driver is said to not work on PCI express cards, I already
expected something like this, but I wasn't able to fix it up to now.
My problem is that I read various GART interaction code having different
code paths depending on whether 

a) the built-in card is AGP, PCIE or PCI
b) the GART table is stored in FB or in MAIN memory

I'm specifically puzzled by code relating to b), there is a lot of
offset juggling, for instance in radeon_cp.c:radeon_do_init_cp, where
for PCI cards the (otherwised unused/0-initialized) mapping.handle is
under some circumstances assigned to dev_priv->gart_info.addr, which is
then passed to drm_ati_pcigart_init.

This code in turn will not malloc the PCIGART table for FB mapping
tables, and thus dereference a NULL pointer when trying to memset the 0
address.

My problem is now that while I found many articles describing the
general idea of DRI and DRM, I could not found papers on the interaction
with GART, and the concrete implementation design choices. I don't
understand the role of the various offsets, including the fb_offset,
radeon_fb_delta and gart_vm_start. An image containing some suggestive
base pointer addressing illustrations on what memory areas are used, and
where they are located would help me a lot.

Maybe I'm just to dumb to grasp more than the big picture, and the code
comments should be sufficient, or maybe I missed any docs?

-- 
Christian Neumair <[EMAIL PROTECTED]>


-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
--
_______________________________________________
Dri-devel mailing list
Dri-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/dri-devel

Reply via email to