On Wed, 24 Oct 2001, Frank C. Earl wrote:

> On Wednesday 24 October 2001 01:54 am, [EMAIL PROTECTED] wrote:
> 
> >
> >       a=readl(kms->reg_aperture+MACH64_BUS_CNTL);
> >       writel((a | (3<<1) )&(~(1<<6)), kms->reg_aperture+MACH64_BUS_CNTL);
> >       ....
> >       same other code
> >
> > works fine. Now why would this be ?
> 
> This could be caused by the same thing that was giving us fits up until 
> recently.  The 4.X XFree86 driver does some things in its init function that 
> override the chip's default settings (ostensibly to improve performance...) 
> that cause at least busmastering for gui operations to not work at all.  Do 
> you have to set bits 1 and 2 every time you want a DMA pass or is it just 
> with the first time you do it?

It is actually more tricky:

 in my driver after the application opens it it turns the capture complete
interrupts on. Once an interrupt is received it initiates DMA trasfer
which issues the interrupt when it complete so that the driver can mark
the buffer as ready. 

Now, the code above is run during the opening of the device. So it looks
like this: open the driver, run the code, make a dma transfer on each
interrupt, close the device. After the device is closed we need to run the
code above again to get DMA transfers working.. Weird, isn't it ?

                            Vladimir Dergachev

> 
> 
> -- 
> Frank Earl
> 


_______________________________________________
Dri-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/dri-devel

Reply via email to