[Dri-devel] Mach64: Questions about locking

2001-10-26 Thread Manuel Teira

Hello.

I was investigating on how to allow both 2D and 3D acceleration in the 
Mach64. So I'm a little confused:

First of all, I looked at the R128 and RADEON drivers and they are only doing 
a DRILock/DRIUnlock in the LeaveVT and EnterVT functions. Does this mean that 
those cards can do 3D and 2D operation at the same time? Then I looked a 
little in the mga 2D driver and a few more locking operations are showed. 
After this, I'm not sure about what we must interlock between 2D and 3D 
operation.

I would like to know what do you think about the following assumptions:
1.-The proper function to lock 3D operation from XFree is DRILock.

2.-We must lock all the operations in the 2D driver that tries:
Mach64WaitForIdle
Mach64WaitForFIFO
   to guarantee that the reached FIFO condition is true.

  This investigation shows me another funny thing:
When the 2D Xfree driver only has to make one register write, it doesn't try 
a Mach64WaitForFIFO. Is this correct? If the DRI driver was writing on the 
command FIFO, couldn't the 2D attempt to write on the FIFO fail ? On the 
other hand, when there are more than one register write, say N-register 
writes, the 2D driver makes a Mach64WaitForFIFO(N) before trying to write to 
the registers.


Is there any other 2D operation that we should need to lock? What criteria 
must I follow to make this the right way? I suppose that I don't need to lock 
any register write, but I'm not sure, because the FIFO could get full while 
I'm writing from the 2D driver. 

I will keep looking to the other drivers, but I would like to have others 
opinions.

On the MESA side, it looks that the hardware locking is already implemented 
through the functions LOCK_HARDWARE and UNLOCK_HARDWARE. 


Best regards.

--
Manuel Teira



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



Re: [Dri-devel] Mach64: Questions about locking

2001-10-26 Thread Leif Delgass

I haven't done an extensive look at this, but I've noticed a couple of
things.  The 2D driver seems to use a caching scheme for register writes.  
Also, at one point I had a nasty lockup trying to switch to a vt from
fullscreen quake, but I haven't tried it with my latest build yet.  I've
noticed other drivers have a fullscreen ioctl, but the mach64 currently
does not.  It seems that once we have the DMA interface defined, we'll
want the 2D acceleration to use that as well as the locking scheme, right?  
Frank, any progress there?

On another note, I'm attaching a small patch to fix a few things.

1.  The AGP register setup was using the wrong macro, since the 
registers are in Block 1, it should be using outm() instead of outr().

2.  I added some defines for the FIFO sizes in GUI_CNTL and moved the 
setup to do_dma_init instead of the busmaster test.

3.  I did some general cleanup to fix a couple typos and quiet compiler 
warnings.

4.  The DMA memory allocation used in the busmaster test uses the
interface described in the kernel docs (Documentation/DMA-mapping.txt).  
The 2.4.13 kernel adds 64-bit DMA support, so if you have CONFIG_HIGHMEM
defined, dma_addr_t is defined as u64.  The code was passing u32 handles
to the allocation/free functions instead of dma_addr_t handles.  This bit
me as I have CONFIG_HIGHMEM4G/CONFIG_HIGHMEM set for some reason (wishful
thinking?).  I changed this and cast the returned handles to u32 to get
addresses to pass to the card.  I think this is OK, since 32-bit DMA is
assumed unless you use pci_set_dma_mask to indicate that the device can do
64-bit.

5.  You can ignore the changes in host.def, my .cvsignore wasn't working 
for some reason.

Let me know if you see any problems with the patch and I'll try to take a 
look at the locking issues, but I think we need Frank's input there too.

--Leif

On Fri, 26 Oct 2001, Manuel Teira wrote:

 Hello.
 
 I was investigating on how to allow both 2D and 3D acceleration in the 
 Mach64. So I'm a little confused:
 
 First of all, I looked at the R128 and RADEON drivers and they are only doing 
 a DRILock/DRIUnlock in the LeaveVT and EnterVT functions. Does this mean that 
 those cards can do 3D and 2D operation at the same time? Then I looked a 
 little in the mga 2D driver and a few more locking operations are showed. 
 After this, I'm not sure about what we must interlock between 2D and 3D 
 operation.
 
 I would like to know what do you think about the following assumptions:
 1.-The proper function to lock 3D operation from XFree is DRILock.
 
 2.-We must lock all the operations in the 2D driver that tries:
   Mach64WaitForIdle
   Mach64WaitForFIFO
to guarantee that the reached FIFO condition is true.
 
   This investigation shows me another funny thing:
   When the 2D Xfree driver only has to make one register write, it doesn't try 
 a Mach64WaitForFIFO. Is this correct? If the DRI driver was writing on the 
 command FIFO, couldn't the 2D attempt to write on the FIFO fail ? On the 
 other hand, when there are more than one register write, say N-register 
 writes, the 2D driver makes a Mach64WaitForFIFO(N) before trying to write to 
 the registers.
 
 
 Is there any other 2D operation that we should need to lock? What criteria 
 must I follow to make this the right way? I suppose that I don't need to lock 
 any register write, but I'm not sure, because the FIFO could get full while 
 I'm writing from the 2D driver. 
 
 I will keep looking to the other drivers, but I would like to have others 
 opinions.
 
 On the MESA side, it looks that the hardware locking is already implemented 
 through the functions LOCK_HARDWARE and UNLOCK_HARDWARE. 
 
 
 Best regards.
 
 --
 Manuel Teira
 
 
 
 ___
 Dri-devel mailing list
 [EMAIL PROTECTED]
 https://lists.sourceforge.net/lists/listinfo/dri-devel
 

-- 
Leif Delgass 


? exports
? mach64-patch
? config/cf/.cvsignore
Index: config/cf/host.def
===
RCS file: /cvsroot/dri/xc/xc/config/cf/host.def,v
retrieving revision 1.29
diff -u -r1.29 host.def
--- config/cf/host.def  2001/08/27 17:43:00 1.29
+++ config/cf/host.def  2001/10/26 18:16:56
@@ -28,7 +28,7 @@
 
 #define BuildXF86DRI YES
 
-#define HasGlide3 YES
+#define HasGlide3 NO
 
 /* To do profiling of the dynamically loaded 'xyz_dri.so' object, turn
  * this on.
@@ -50,10 +50,10 @@
 /* #define DoLoadableServer NO */
 
 /* Optionally turn this on to change the place where you install the build */
-/* #define ProjectRoot /usr/X11R6-DRI */
+#define ProjectRoot /usr/X11R6-DRI
 
 /* Optionally turn this on to force the kernel modules to build */
-/* #define BuildXF86DRM YES */
+#define BuildXF86DRM YES
 
 #define XF86AFB NO
 
Index: programs/Xserver/hw/xfree86/drivers/ati/atidri.c
===
RCS file: 

Re: [Dri-devel] Mach64: Questions about locking

2001-10-26 Thread Manuel Teira

El Vie 26 Oct 2001 20:21, Leif Delgass escribió:
 I haven't done an extensive look at this, but I've noticed a couple of
 things.  The 2D driver seems to use a caching scheme for register writes.
 Also, at one point I had a nasty lockup trying to switch to a vt from
 fullscreen quake, but I haven't tried it with my latest build yet.  I've
 noticed other drivers have a fullscreen ioctl, but the mach64 currently
 does not.  It seems that once we have the DMA interface defined, we'll
 want the 2D acceleration to use that as well as the locking scheme, right?
 Frank, any progress there?

I have been looking to the register caching. I don't know if this caching has
sense once the DRI is also writing directly to some of the registers. I saw
seldom times this in my XFree log file:
.. $REGISTER_NAME write cache disabled!
this is written by the Mach64Sync function, that compares all the cached
register values with the actual values ( and shows that error when values
differ). I commented out the register caching when trying to find the DMA
problem (it's still commented out in the branch code). I've also noticed that
the other drivers (RADEON , R128) don't use the caching 'feature'.

I've also seen the outm/inm outf macros (atimach64io.h). These are the ones
that provides the cache features. I wonder if we should block the hardware
for any of these macros (to guarantee that the FIFO entries are true).
Anyway, I think that there are still race conditions, because this kind of
code:
...
ATIMach64WaitForFIFO(pATI, 6);
outf(SRC_OFF_PITCH, pATIHW-src_off_pitch);
outf(SRC_Y_X, SetWord(pATIHW-src_x, 1) | SetWord(pATIHW-src_y, 0));
outf(SRC_HEIGHT1_WIDTH1,
 SetWord(pATIHW-src_width1, 1) | SetWord(pATIHW-src_height1, 0));
outf(SRC_Y_X_START,
 SetWord(pATIHW-src_x_start, 1) | SetWord(pATIHW-src_y_start, 0));
outf(SRC_HEIGHT2_WIDTH2,
 SetWord(pATIHW-src_width2, 1) | SetWord(pATIHW-src_height2, 0));
outf(SRC_CNTL, pATIHW-src_cntl);
...

If we only block the ouf macros and the WaitForFIFO macro separately, we
cannot guarantee that there will be 6 free slots once the WaitForFIFO has
finished (because of the DRM).

So, what I think  we should do is:

1.- Block all the code that matches the previous template (mainly in
atimach64.c) , in this way:
DRILock( pScreenInfo-pScreen );
ATIMach64WaitForFIFO( pATI, n );
/*
 * Here the outf stuff
 */
DRIUnlock( pScreenInfo-pScreen );

2.-Disable the Register Caching for all the registers. Perhaps we could later
enable the caching for the registers that are not used by the drm driver.


Talking about the Q3 hang when switching vts:
I don't know if this is the problem, but the other drivers (RADEON, R128) has
a DRILock (DRIUnlock) calls when doing enterVT (leaveVT), that mach64 hasn't.
I will try to test this behaviour today (once I have  Q3  installed ;-) ).



 On another note, I'm attaching a small patch to fix a few things.

 1.  The AGP register setup was using the wrong macro, since the
 registers are in Block 1, it should be using outm() instead of outr().

 2.  I added some defines for the FIFO sizes in GUI_CNTL and moved the
 setup to do_dma_init instead of the busmaster test.

 3.  I did some general cleanup to fix a couple typos and quiet compiler
 warnings.

 4.  The DMA memory allocation used in the busmaster test uses the
 interface described in the kernel docs (Documentation/DMA-mapping.txt).
 The 2.4.13 kernel adds 64-bit DMA support, so if you have CONFIG_HIGHMEM
 defined, dma_addr_t is defined as u64.  The code was passing u32 handles
 to the allocation/free functions instead of dma_addr_t handles.  This bit
 me as I have CONFIG_HIGHMEM4G/CONFIG_HIGHMEM set for some reason (wishful
 thinking?).  I changed this and cast the returned handles to u32 to get
 addresses to pass to the card.  I think this is OK, since 32-bit DMA is
 assumed unless you use pci_set_dma_mask to indicate that the device can do
 64-bit.

 5.  You can ignore the changes in host.def, my .cvsignore wasn't working
 for some reason.

 Let me know if you see any problems with the patch and I'll try to take a
 look at the locking issues, but I think we need Frank's input there too.

At a first glance, it looks fine. I will apply it to the branch once that I
see that works fine on my machine.

--
Manuel Teira

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



Re: [Dri-devel] Mach64: Questions about locking

2001-10-26 Thread Leif Delgass

On Fri, 26 Oct 2001, Manuel Teira wrote:

 I have been looking to the register caching. I don't know if this caching has 
 sense once the DRI is also writing directly to some of the registers. I saw 
 seldom times this in my XFree log file:
 .. $REGISTER_NAME write cache disabled!

I've noticed that too.

 this is written by the Mach64Sync function, that compares all the cached 
 register values with the actual values ( and shows that error when values 
 differ). I commented out the register caching when trying to find the DMA 
 problem (it's still commented out in the branch code). I've also noticed that 
 the other drivers (RADEON , R128) don't use the caching 'feature'. 
 
 I've also seen the outm/inm outf macros (atimach64io.h). These are the ones 
 that provides the cache features. I wonder if we should block the hardware 
 for any of these macros (to guarantee that the FIFO entries are true). 
 Anyway, I think that there are still race conditions, because this kind of 
 code:
 ...
 ATIMach64WaitForFIFO(pATI, 6);
 outf(SRC_OFF_PITCH, pATIHW-src_off_pitch);
 outf(SRC_Y_X, SetWord(pATIHW-src_x, 1) | SetWord(pATIHW-src_y, 0));
 outf(SRC_HEIGHT1_WIDTH1,
  SetWord(pATIHW-src_width1, 1) | SetWord(pATIHW-src_height1, 0));
 outf(SRC_Y_X_START,
  SetWord(pATIHW-src_x_start, 1) | SetWord(pATIHW-src_y_start, 0));
 outf(SRC_HEIGHT2_WIDTH2,
  SetWord(pATIHW-src_width2, 1) | SetWord(pATIHW-src_height2, 0));
 outf(SRC_CNTL, pATIHW-src_cntl);
 ...
 
 If we only block the ouf macros and the WaitForFIFO macro separately, we 
 cannot guarantee that there will be 6 free slots once the WaitForFIFO has 
 finished (because of the DRM).
 
 So, what I think  we should do is:
 
 1.- Block all the code that matches the previous template (mainly in 
 atimach64.c) , in this way:
 DRILock( pScreenInfo-pScreen );
 ATIMach64WaitForFIFO( pATI, n );
 /* 
  * Here the outf stuff
  */
 DRIUnlock( pScreenInfo-pScreen );
 
 2.-Disable the Register Caching for all the registers. Perhaps we could later 
 enable the caching for the registers that are not used by the drm driver.

Sounds reasonable.  I guess this is the function of the CCE stuff in the 
r128 driver (although that seems to be a hardware feature, it loads 
microcode at initialization)? 

 Talking about the Q3 hang when switching vts:
 I don't know if this is the problem, but the other drivers (RADEON, R128) has 
 a DRILock (DRIUnlock) calls when doing enterVT (leaveVT), that mach64 hasn't. 
 I will try to test this behaviour today (once I have  Q3  installed ;-) ).
 
 
 
  On another note, I'm attaching a small patch to fix a few things.
 

[snip]

 At a first glance, it looks fine. I will apply it to the branch once that I 
 see that works fine on my machine.

Actually, the stuff in AGPInit should probably be disabled (just move the
#endif back to the end before the return) for now since it seems to cause
texture corruption.  Once we get the driver actually using AGP then we can
enable it.

--
Leif Delgass


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



Re: [Dri-devel] Mach64 questions

2001-10-18 Thread Manuel Teira

El Mié 17 Oct 2001 11:44, R C escribió:
 On Sat, Oct 13, 2001 at 10:08:50PM +0200, Manuel Teira wrote:

 Regarding theories on DMA and Mach64 and XFree 4.10:

 I just finished a module that uses the System DMA unit for video capture
 transfers, and it works fine under a (highly hacked) XFree 4.1.0 server.

 System: Dual 550 Celeron, All-in-Wonder (original) PCI, 3D Rage II+.
 XServer is 4.1.0 with Gatos devel branch. Module is for 2.4 kernel. To use
 this on another card, you would have to enter the proper PCI id in the
 code. Oh yes, it uses the secondary register aperture, not the linear
 mapped aperture, but I don't think it makes a difference.

 Have not tried GUI dma, but it is quite similar.

 R C

I'm sorry, but have no luck trying to install your module. It always bugs me
with errors:
These ones:
#insmod ati_dma.o
Oct 18 22:23:49 localhost kernel: PCI: Sharing IRQ 11 with 00:02.0
Oct 18 22:23:49 localhost kernel: PCI: Sharing IRQ 11 with 00:05.0
Oct 18 22:23:49 localhost kernel: Found ATI card at 0xf500.
Oct 18 22:23:49 localhost kernel: PCI: Unable to reserve mem region
#1:100@f500 for device 01:00.0
Oct 18 22:23:49 localhost kernel: Could not request IO regions!
#

Or these other ones:
#insmod ati_dma.o
Oct 18 22:23:51 localhost kernel: PCI: Found IRQ 11 for device 01:00.0
Oct 18 22:23:51 localhost kernel: PCI: Sharing IRQ 11 with 00:02.0
Oct 18 22:23:51 localhost kernel: PCI: Sharing IRQ 11 with 00:05.0
Oct 18 22:23:51 localhost kernel: Found ATI card at 0xf500.
Oct 18 22:23:51 localhost kernel: Cannot reserve interrupt: 11 for ATI card!
#


I don't know what is happening (and many other things). Any idea?


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



Re: [Dri-devel] Mach64 questions

2001-10-17 Thread R C

On Sat, Oct 13, 2001 at 10:08:50PM +0200, Manuel Teira wrote:

Regarding theories on DMA and Mach64 and XFree 4.10:

I just finished a module that uses the System DMA unit for video capture
transfers, and it works fine under a (highly hacked) XFree 4.1.0 server.

System: Dual 550 Celeron, All-in-Wonder (original) PCI, 3D Rage II+.
XServer is 4.1.0 with Gatos devel branch. Module is for 2.4 kernel. To use
this on another card, you would have to enter the proper PCI id in the
code. Oh yes, it uses the secondary register aperture, not the linear
mapped aperture, but I don't think it makes a difference.

Have not tried GUI dma, but it is quite similar.

R C

-- 
They said it was *daft* to build a space station in a swamp, but I showed them!
It sank unto the swamp.  So I built a second space station.  That sank into 
the swamp too. My third space station sank into the swamp. So I built a fourth 
one.  That fell into a time warp and _then_ sank into the swamp.  But the fifth
one...  stayed up! --Monty Python/Babylon 5


#include linux/module.h
#include linux/pci.h
#include linux/init.h
#include linux/pci_ids.h
#include linux/compatmac.h
#include linux/devfs_fs_kernel.h
#include linux/interrupt.h
#include linux/delay.h
#include linux/mm.h
#include linux/slab.h
#include asm/processor.h
#include asm-i386/io.h
/*#include linux/version.h
#include linux/kernel.h
#include linux/module.h
#include linux/fs.h
#include linux/kernel.h
#include linux/major.h
#include linux/malloc.h
#include linux/mm.h
#include linux/poll.h
#include linux/pci.h
#include linux/signal.h
#include linux/ioport.h
#include asm/pgtable.h
#include asm/page.h
#include linux/sched.h
#include asm/segment.h
#include linux/types.h
#include linux/wrapper.h
#include linux/kmod.h
#include linux/vmalloc.h
#include linux/init.h*/

/*

1. Find the device. call pci_register_driver()

2. Enable devices: pci_enable_device()
   Call pci_set_master() to enable bus master.

A field, by default, is 640x240x2 (307200).  This corresponds
to exactly 75 pages when they are 4K sized (AFAIK the minimum page size).
The main restriction is that they must be 4K aligned.

*/
#define SUCCESS 0
#define MAJOR_NUM	240
#define DEVICE_NAME	atidma	
//#define DEBUG		1

#define CAP_INT_CNTL0x908
#define CAP_INT_STATUS  0x90C
#define RADEON_CAP0_VBI0_OFFSET   0x093C
#define RADEON_CAP0_VBI1_OFFSET   0x0940
#define RADEON_CAP0_VBI_V_WINDOW  0x0944
#define RADEON_CAP0_VBI_H_WINDOW  0x0948
#define RADEON_CAP0_CONFIG0x0958

#define regw(a,b)   *(MMR+a)=b
#define regr(a) *(MMR+a)
#define MEM_BASE	0x0248
#define BUS_CNTL	0x28+(256)
#define CRTC_INT_CNTL   	0x06+(256)
#define BM_SYSTEM_TABLE 	0x6F
#define CAPTURE_BUF0_OFFSET	0x20
#define CAPTURE_BUF1_OFFSET	0x21
#define CAPTURE_DEBUG		0x19
#define SYSTEM_TO_FRAME_BUFFER  0x0
#define FRAME_BUFFER_TO_SYSTEM 	0x1
#define LAST_DESCRIPTOR 	1  31


#define NUM_BUFS		5

/* Should be multiple of 2. */
#define CHAR_BUF_SIZE		128

/* Should be a multiple of 4 */
#define H_SIZE			1560

#define FIELD_SIZE		307200
/*#define BUF_SIZE		H_SIZE*2*/


static unsigned int volatile * MMR = NULL, *BUFF0, *BUFF1, IRQ;
static unsigned const char volatile * ATIFB = NULL;
static unsigned int saved_bus_cntl, saved_crtc_cntl;

static volatile unsigned int * full_page = NULL;

static volatile int Device_Open = 0;

int ati_module_init();
void ati_module_remove();
void ati_bh(unsigned long);

static int ati_probe_pci(struct pci_dev *, const struct pci_device_id *);
static void ati_remove_pci(struct pci_dev *);


static DECLARE_WAIT_QUEUE_HEAD(read_wait);
static DECLARE_TASKLET_DISABLED(ati_tasklet, ati_bh, 0);


static void __devexit ati_remove_pci(struct pci_dev *pdev)
{
	int i;

	/* Disable interrupts, then wait for a while
	 * to be sure.
	 */
	tasklet_disable(ati_tasklet);
  	//writel(0, (MMR + CAP_INT_CNTL / 4 ));
	mdelay(20);
	
	pci_release_regions(pdev);
	/* Cast to shut up the compiler. */
	iounmap((void *) ATIFB);
	iounmap((void *) MMR);
	devfs_unregister_chrdev(MAJOR_NUM, DEVICE_NAME);
	pci_disable_device(pdev);
   	free_irq(IRQ, NULL); 
	
  	if (full_page != NULL)
  	  free_pages((unsigned long) full_page, 7);
	printk(Removed ATI card at irq %d\n, pdev-irq);
}

/* Interrupt handler */
void ati_int (int irq, void * dev_id, struct pt_regs *regs)
{
	unsigned int flags;

	flags = regr (CRTC_INT_CNTL);
	if (flags  0x0200)
	{
		regw(CRTC_INT_CNTL, flags | 0x0200);
		tasklet_schedule(ati_tasklet);
	}
	return;
}

void ati_bh (unsigned long param)
{
	wake_up_interruptible(read_wait);
	return;
}

static int device_open(struct inode *inode, 
   struct file *file)
{
  unsigned int temp;
  int a;

  // This is not race proof.
  if (Device_Open)
return -EBUSY;

  Device_Open++;
  // Set VBI Window size

  temp = regr (BUS_CNTL);
  saved_bus_cntl = temp;
  temp = (temp | 0x0800)  ~(1  6); // enable mm regs and bus mastering.
  regw (BUS_CNTL, temp);

  temp 

Re: [Dri-devel] Mach64 questions

2001-10-17 Thread manuel . teira


R C writes:

 On Sat, Oct 13, 2001 at 10:08:50PM +0200, Manuel Teira wrote:
 
 Regarding theories on DMA and Mach64 and XFree 4.10:
 
 I just finished a module that uses the System DMA unit for video capture
 transfers, and it works fine under a (highly hacked) XFree 4.1.0 server.
 
 System: Dual 550 Celeron, All-in-Wonder (original) PCI, 3D Rage II+.
 XServer is 4.1.0 with Gatos devel branch. Module is for 2.4 kernel. To use
 this on another card, you would have to enter the proper PCI id in the
 code. Oh yes, it uses the secondary register aperture, not the linear
 mapped aperture, but I don't think it makes a difference.

Thank you  very much. I'll try to see what is missing in the GUI DMA test
in the DRI code. 
At a first glance, I don't remember to have seen  a pci_set_master call
anywhere in the DRI code. It seems important, doesn't it?


 
 Have not tried GUI dma, but it is quite similar.
Easier indeed. The directives in the Mach64 Programmer's manual are simpler
than for the case you're working on.

I'm now at work but impacient to get home and have access to the Mach64 DRI
code. 

Thanks again.
 
 
 R C
 
 -- 
 They said it was *daft* to build a space station in a swamp, but I showed them!
 It sank unto the swamp.  So I built a second space station.  That sank into 
 the swamp too. My third space station sank into the swamp. So I built a fourth 
 one.  That fell into a time warp and _then_ sank into the swamp.  But the fifth
 one...  stayed up! --Monty Python/Babylon 5




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



Re: [Dri-devel] Mach64 questions

2001-10-17 Thread Mike Westall

I spent an incredibly frustrating 4 weeks trying to
get the DRI to work with r128 and g400 cards on Dell
precision workstation only to find that my problem
was precisely because bus mastering was NOT enabled
on boot!  As soon as I fixed that everything worked
fine.  Apparently different BIOSes WILL leave the
card in different states after boot.

Mike

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



Re: [Dri-devel] Mach64 questions

2001-10-17 Thread R C

On Wed, Oct 17, 2001 at 11:45:39AM +, [EMAIL PROTECTED] wrote:
 Thank you  very much. I'll try to see what is missing in the GUI DMA test
 in the DRI code. 
 At a first glance, I don't remember to have seen  a pci_set_master call
 anywhere in the DRI code. It seems important, doesn't it?

That enables bus master in the pci config registers, IIRC.
Simplest test case, one descriptor:

Set Frame buffer offset to 0.
Set System buffer offset to 0.
Set BM_COMMAND to 4096 | 1  31 (End of descriptor list).
Set BM_Reserved to 0.

Write bus address of buffer to BM_SYSTEM_TABLE | SYSTEM_TO_FRAME_BUFFER
(which happens to be 0.)

If the top line or two of your display (depends on res/depth) are corrupted, 
then it works.

Don't forget to change the PCI_ID or the module most likely won't load.
The module was written for 2.4; It shouldn't need much to backport.  It
does assume x86-sized ints and probably other no-nos. There are several
constants I should replace with #defines, as well. I was just happy to
get it working reliably on my machine.

Triggering module is simple; run a dd if=/dev/atidma of=test.raw bs=307200 
count=1. atidma is character device major 240 minor 0.

 
 
  
  Have not tried GUI dma, but it is quite similar.
 Easier indeed. The directives in the Mach64 Programmer's manual are simpler
 than for the case you're working on.
 
 I'm now at work but impacient to get home and have access to the Mach64 DRI
 code. 
 
 Thanks again.

No problem :) Been itching to get this working for a long time.

R C

-- 
They said it was *daft* to build a space station in a swamp, but I showed them!
It sank unto the swamp.  So I built a second space station.  That sank into 
the swamp too. My third space station sank into the swamp. So I built a fourth 
one.  That fell into a time warp and _then_ sank into the swamp.  But the fifth
one...  stayed up! --Monty Python/Babylon 5

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



Re: [Dri-devel] Mach64 questions

2001-10-17 Thread manuel . teira


Mike Westall writes:

 I spent an incredibly frustrating 4 weeks trying to
 get the DRI to work with r128 and g400 cards on Dell
 precision workstation only to find that my problem
 was precisely because bus mastering was NOT enabled
 on boot!  As soon as I fixed that everything worked
 fine.  Apparently different BIOSes WILL leave the
 card in different states after boot.
 
 Mike

Thanks for your comments, guys. In three or four hours (if no new 'browns')
we'll have the answer. It would be nice if this were the only problem. ;-)
Anyway, I think it won't be the problem, because nobody have had success
with the Mach64 Bus Mastering with the DRI ( while having success with
Utah-GLX ). Perhaps XFree 3.x setup for the card is different.



Best regards

--
M. Teira 




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



Re: [Dri-devel] Mach64 questions

2001-10-17 Thread Leif Delgass

On Wed, 17 Oct 2001 [EMAIL PROTECTED] wrote:

 Thanks for your comments, guys. In three or four hours (if no new 'browns')
 we'll have the answer. It would be nice if this were the only problem. ;-)
 Anyway, I think it won't be the problem, because nobody have had success
 with the Mach64 Bus Mastering with the DRI ( while having success with
 Utah-GLX ). Perhaps XFree 3.x setup for the card is different.

Unfortunately, I don't think this is the problem.  The bus master test for
mach64 is not working for me and the PCI config register shows bus
mastering enabled on my card:

% setpci -s 01:00.0 4.w
0087

Which is 1111, bit 2 (Bus Master Enable) is set.


-- 
Leif Delgass



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



[Dri-devel] Mach64: Questions about drm implemetation

2001-06-19 Thread Manuel Teira

Hello. I'm working in adapting the mach64 drm driver to the new template 
structure. I have a pair of questions:

What is the meaning of the __HAVE_SG define? I've set it to zero in the 
mach64 driver, but I'm not sure about this supposition.

In the mach64_dma.c , the following line:

dev_priv-sarea = dev-maplist[0];

is now wrong, because the drm_device_t member maplist is now a 
drm_map_list_t* and in the mach64 trunk, it was a drm_map_t**. I'm trying to 
figure how to write it now, with the new type, but I'm not sure about it. Do 
we have to make dev_priv-sarea point to the head of the maplist? What is 
this supposed to be for? 

I've almost finished all the porting to the 4.1.0 trunk, but it have been a 
blind porting. I hope not to burn my laptop, because I'm still paying it. :( 
(If I dare to test this trunk).

And finally, where is the evil register programming of the driver? Do I 
need to comment it? What should we need to do instead of this register 
programming. Could you please point me to some document of resource to know 
how to do it? Is the utah-glx driver implemented in this way, or could I use 
it as a reference?



Excuse for my bad english and thanks for your time.

Best regards.


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