Small Unichrome fixes:
authorThomas Hellström <thomas@tungstengraphics.com>
Thu, 6 Jan 2005 13:51:37 +0000 (13:51 +0000)
committerThomas Hellström <thomas@tungstengraphics.com>
Thu, 6 Jan 2005 13:51:37 +0000 (13:51 +0000)
1. Unlock hardware before aborting and dumping DMA buffers. Otherwise display system may deadlock.
2. Fix DMA init IOCTL call that got mixed up in one of the previous commits.
3. Fix AGP command alignment

src/mesa/drivers/dri/unichrome/via_fb.c
src/mesa/drivers/dri/unichrome/via_ioctl.c
src/mesa/drivers/dri/unichrome/via_tris.c

index 122d3b17cc7643761520b9af1fce3820a2be037c..241bf0b9a3bb8beadc32cb9aef04e7155c4a5f1e 100644 (file)
@@ -76,7 +76,7 @@ via_alloc_dma_buffer(viaContextPtr vmesa)
     */
    init.func = VIA_DMA_INITIALIZED;
    vmesa->useAgp = 
-      ( 0 == drmCommandWrite(vmesa->driFd, VIA_INIT_DMA
+     ( 0 == drmCommandWrite(vmesa->driFd, DRM_VIA_DMA_INIT
                             &init, sizeof(init)));
    if (vmesa->useAgp) 
       printf("unichrome_dri.so: Using AGP.\n");
index bbb6651deefc840867997eb346b23cfe33a99e85..1ea7b2fa806a55a8b37eabecc7c0c63eb7eacd98 100644 (file)
@@ -458,6 +458,7 @@ static int fire_buffer(viaContextPtr vmesa)
                                   &bSiz, sizeof(bSiz));
       } while (ret == -EAGAIN);
       if (ret) {
+        UNLOCK_HARDWARE(vmesa);
         fprintf(stderr, "%s: DRM_VIA_CMDBUF_SIZE returned %d\n", __FUNCTION__, ret);
         abort();
         return ret;
@@ -470,6 +471,7 @@ static int fire_buffer(viaContextPtr vmesa)
                               &bufI, sizeof(bufI));
       } while (ret == -EAGAIN);
       if (ret) {
+        UNLOCK_HARDWARE(vmesa);
         fprintf(stderr, "%s: DRM_VIA_CMDBUFFER returned %d\n", __FUNCTION__, ret);
         abort();
         /* If this fails, the original code fell back to the PCI path. 
@@ -485,6 +487,7 @@ static int fire_buffer(viaContextPtr vmesa)
            
    ret = drmCommandWrite(vmesa->driFd, DRM_VIA_PCICMD, &bufI, sizeof(bufI));
    if (ret) {
+      UNLOCK_HARDWARE(vmesa);
       dump_dma(vmesa);
       fprintf(stderr, "%s: DRM_VIA_PCICMD returned %d\n", __FUNCTION__, ret);      
       abort();
index 022399f69816d0b7d454e21d389cb86748f7776c..6fd5a2a64c4260322b8ea662249c83d2853db7c5 100644 (file)
@@ -987,7 +987,7 @@ void viaFinishPrimitive(viaContextPtr vmesa)
 
       /* KW: modified 0x1 to 0x4 below:
        */
-      if ((vmesa->dmaLow & 0x1) || !vmesa->useAgp) {
+      if ((vmesa->dmaLow & 0x4) || !vmesa->useAgp) {
         BEGIN_RING_NOCHECK( 1 );
         OUT_RING( cmdA );
         ADVANCE_RING();