about_radeon_dma

llittle了了 sizhiying at hotmail.com
Wed Jun 13 21:04:26 PDT 2012


Yes, I transplant the radeon_driver from 64bit_kernel to a mini 32bit_os. The purpose is to open radeon_benchmark  or Xorg in the mini_32bit_os.
So, I think ring_test success means GPU  work correctly and smmothly. 

But ,my ring_test in the mini_32bit_os does not success. When I read scratch register, it`s not the value wrote into the memory location.So, I think the address space does not map correct. 
>> |--系统内存--|--显存--|--GTT内存--|
>> 0           256M     384M        896MSuch memory alloction in my mini32bit_os has been build up. There are  differences between linux-kernel and my mini32bit_os :
first,  mymini32bit_os does not have TTM;
second, the mini32bit_os use 0x8000,0000-----0x9000,0000 virtual address which map to 0x0----0x1000,0000 physical address . While linux-kernel use 0x9800,0000,fc24,0000――0x9800,0000,ff00,0000 CPU vritual address which map to 0x0000,0000,fc24,0000――0x0000,0000,ff00,0000 physical address.I have 2g memory.

I also use gart_table to tell GPU my mini32bit_os address. set_gart_pages. But ring_test still does not work. If we can use gart_table to tell GPU the ring_buffer memory location, I alloc the ring_buffer from the low 16M memory, then fill the gart_table, GPU would konw that address and ring_test would sucess. But, when I use the low 16M memory for ring_buffer, ring_test failed. I have reserved the low 16M memory  at the boot time.

That is the exactly confused me. Why? I move ring_buffer any other palace, ring_test will not work?


> Date: Wed, 13 Jun 2012 22:35:45 -0400
> Subject: Re: about_radeon_dma
> From: alexdeucher at gmail.com
> To: sizhiying at hotmail.com
> CC: konrad.wilk at oracle.com; dri-devel at lists.freedesktop.org
> 
> On Wed, Jun 13, 2012 at 9:55 PM, llittle了了 <sizhiying at hotmail.com> wrote:
> > Thanks for you reply!
> >
> > I use PCI----MMIO to access VRAM and GTT areas. And for ring_buffer, it
> > alloced from the vmalloc--area and vmap to the physical address using page
> > table.
> >
> >  If  enable the radeon_benchmark, it first to prepare the dma channel.
> > "set_tex_resource(), set_render_target(), cp_set_surface_sync()" ,such
> > functions only write ring_buffer. The ring_buffer is vma-area, even it map
> > to physical area. But for radeon_card, how it know the physical-area??
> >
> >  The question is same to the SCRACH test, ring_test. Why I write into
> > ring_buffer,then the card register will know the value "deadbeef" ??
> >
> > Do I not understand the real card work?  ring_test??
> 
> What exactly are you trying to accomplish?  The GPU has it's own
> internal address space that is used by on chip clients. Within that
> address space you map can map vram, AGP, and on-chip gart apertures.
> The on chip gart aperture lets you map system pages into a contiguous
> linear aperture within the GPU's address space.  Once you have these
> apertures set up, internal GPU clients need only point to the
> appropriate internal address to access a buffer in either system ram
> (via on-chip gart or AGP) or vram.  For example, you can store
> textures in system memory pages and point the texture hardware at them
> and the chip will read from those pages and use the textures on a quad
> rendered to vram, or vice versa.
> 
> Command are sent to the GPU via a command processor (CP) that fetches
> commands from a ring buffer.  You write the commands into the ring
> buffer and update the write pointer.  The CP then executes the
> commands in the ring buffer until the read pointer and write pointer
> both point to the same index.  At that point the CP stops and waits
> until the write pointer is updated again.  In the ring test, we put
> command packets on the ring to write to a scatch register or memory
> location.  When the CP is done, we check the register or memory
> location to make sure it was properly updated.  That way we know the
> ring buffer is working.
> 
> Alex
> 
> >
> >
> >> Date: Wed, 13 Jun 2012 09:57:28 -0400
> >> From: konrad.wilk at oracle.com
> >> To: sizhiying at hotmail.com
> >> CC: dri-devel at lists.freedesktop.org
> >> Subject: Re: about_radeon_dma
> >>
> >> On Wed, Jun 1 3, 2012 at 09:44:19AM +0800, llittle了了 wrote:
> >> >
> >> > HI,all
> >> > Now, my lab is using radeon_ati card。And, I need ati_card dma
> >> > function。But, I do not clear that how the ati card know the dma address
> >> > which alloced by kernel??
> >>
> >> By using the PCI API.
> >>
> >> >
> >>
> >> > Can any kernel drivers for radeon card give me some advise or explain
> >> > the answer?
> >> >
> >> > I have read the radeon driver in kernel (/driver/gpu/drm/randeon/xxx
> >> > )and the TTM manager. So, as I know, If I use GFP_KERNEL sign to alloc
> >> > memory, the radeon_card work right, but any other palce ,it failed. Why and
> >> > how this happened?
> >> > Is there any way to tell the dma address and ring buffer address in
> >> > kernel to the radeon_card ?
> >> >
> >> > It`s so confused! Hope for your answer!
> >> >
> >> >
> >> > Thanks so much!
> >> > zhiyig Si
> >> >
> >>
> >> > _______________________________________________
> >> > dri-devel mailing list
> >> > dri-devel at lists.freedesktop.org
> >> > http://lists.freedesktop.org/mailman/listinfo/dri-devel
> >>
> >
> > _______________________________________________
> > dri-devel mailing list
> > dri-devel at lists.freedesktop.org
> > http://lists.freedesktop.org/mailman/listinfo/dri-devel
> >
 		 	   		  
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/dri-devel/attachments/20120614/468c7df3/attachment.html>


More information about the dri-devel mailing list