debian/changelog | 8 debian/patches/02_tentatively_unbreak_dual_head.diff | 175 +++++++++++++++++++ debian/patches/series | 1 3 files changed, 184 insertions(+)
New commits: commit 0d291278a7c4cb645d915b8e44112c76625f95c7 Author: Cyril Brulebois <[email protected]> Date: Mon Nov 22 18:06:09 2010 +0100 Upload to unstable. diff --git a/debian/changelog b/debian/changelog index 1718585..47672ec 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,10 +1,10 @@ -xserver-xorg-video-mga (1:1.4.11.dfsg-4+squeeze1) UNRELEASED; urgency=low +xserver-xorg-video-mga (1:1.4.11.dfsg-4+squeeze1) unstable; urgency=low * Add patch: 02_tentatively_unbreak_dual_head.diff, tested by Ferenc Wágner (thanks!). Patch by Andy MacLean, stolen from LP's #292214 (hopefully closes: #562209). - -- Cyril Brulebois <[email protected]> Mon, 22 Nov 2010 16:37:47 +0100 + -- Cyril Brulebois <[email protected]> Mon, 22 Nov 2010 18:05:24 +0100 xserver-xorg-video-mga (1:1.4.11.dfsg-4) unstable; urgency=low commit e276d587f460c0b23ba4e5c72a68b698ce43ac5b Author: Cyril Brulebois <[email protected]> Date: Mon Nov 22 17:54:22 2010 +0100 Tentatively unbreak dual head setups (Closes: #562209). Apply mga-driver-3.patch from Ubuntu's LP #292214 by Andy MacLean. First hunk dropped, tiny whitespace cleanup for the other hunks. diff --git a/debian/changelog b/debian/changelog index 4b78c44..1718585 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,11 @@ +xserver-xorg-video-mga (1:1.4.11.dfsg-4+squeeze1) UNRELEASED; urgency=low + + * Add patch: 02_tentatively_unbreak_dual_head.diff, tested by Ferenc + Wágner (thanks!). Patch by Andy MacLean, stolen from LP's #292214 + (hopefully closes: #562209). + + -- Cyril Brulebois <[email protected]> Mon, 22 Nov 2010 16:37:47 +0100 + xserver-xorg-video-mga (1:1.4.11.dfsg-4) unstable; urgency=low * Add support for G200EH, cherry-picked from upstream git (closes: #575271). diff --git a/debian/patches/02_tentatively_unbreak_dual_head.diff b/debian/patches/02_tentatively_unbreak_dual_head.diff new file mode 100644 index 0000000..0253448 --- /dev/null +++ b/debian/patches/02_tentatively_unbreak_dual_head.diff @@ -0,0 +1,175 @@ +From: Cyril Brulebois <[email protected]> +Patch-By: Andy MacLean +Patch-Name: mga-driver-3.patch +Patch-URL: https://bugs.launchpad.net/ubuntu/+source/xserver-xorg-video-mga/+bug/292214 +--- a/src/mga.h ++++ b/src/mga.h +@@ -337,6 +337,13 @@ typedef struct { + int mastervideoRam; + int slavevideoRam; + Bool directRenderingEnabled; ++ ++ void * mappedIOBase; ++ int mappedIOUsage; ++ ++ void * mappedILOADBase; ++ int mappedILOADUsage; ++ + ScrnInfoPtr pScrn_1; + ScrnInfoPtr pScrn_2; + } MGAEntRec, *MGAEntPtr; +--- a/src/mga_driver.c ++++ b/src/mga_driver.c +@@ -2820,30 +2820,55 @@ MGAMapMem(ScrnInfoPtr pScrn) + #ifdef XSERVER_LIBPCIACCESS + struct pci_device *const dev = pMga->PciInfo; + struct pci_mem_region *region; +- void **memory[2]; + int i, err; + #endif + + + if (!pMga->FBDev) { + #ifdef XSERVER_LIBPCIACCESS +- memory[pMga->io_bar] = &pMga->IOBase; +- memory[pMga->framebuffer_bar] = &pMga->FbBase; ++ pciaddr_t fbaddr = pMga->FbAddress; ++ pciaddr_t fbsize = pMga->FbMapSize; ++ err = pci_device_map_range(dev, ++ fbaddr, fbsize, ++ PCI_DEV_MAP_FLAG_WRITABLE, ++ (void **)&pMga->FbBase); + +- for (i = 0; i < 2; i++) { +- region = &dev->regions[i]; +- err = pci_device_map_range(dev, +- region->base_addr, region->size, +- PCI_DEV_MAP_FLAG_WRITABLE, +- memory[i]); ++ if (err) { ++ xf86DrvMsg(pScrn->scrnIndex, X_ERROR, ++ "Unable to map Framebuffer %08llX %llx. %s (%d)\n", ++ (long long)fbaddr, (long long)fbsize, ++ strerror(err), err); ++ return FALSE; ++ } ++ else ++ xf86DrvMsg(pScrn->scrnIndex, X_INFO, ++ "MAPPED Framebuffer %08llX %llx to %08llX.\n", ++ (long long)fbaddr, (long long)fbsize, ++ (long long)pMga->FbBase); ++ ++ if(pMga->entityPrivate == NULL || pMga->entityPrivate->mappedIOUsage == 0) { ++ region = &dev->regions[pMga->io_bar]; ++ err = pci_device_map_range(dev, ++ region->base_addr, region->size, ++ PCI_DEV_MAP_FLAG_WRITABLE, ++ &pMga->IOBase); ++ ++ if (err) { ++ xf86DrvMsg(pScrn->scrnIndex, X_ERROR, ++ "Unable to map IO Region %i. %s (%d)\n", ++ pMga->io_bar, strerror(err), err); ++ return FALSE; ++ } ++ ++ if(pMga->entityPrivate != NULL) ++ pMga->entityPrivate->mappedIOBase = pMga->IOBase; ++ } ++ else ++ pMga->IOBase = pMga->entityPrivate->mappedIOBase; ++ ++ if(pMga->entityPrivate != NULL) ++ pMga->entityPrivate->mappedIOUsage ++; + +- if (err) { +- xf86DrvMsg(pScrn->scrnIndex, X_ERROR, +- "Unable to map BAR %i. %s (%d)\n", +- i, strerror(err), err); +- return FALSE; +- } +- } + #else + /* + * For Alpha, we need to map SPARSE memory, since we need +@@ -2885,16 +2910,27 @@ MGAMapMem(ScrnInfoPtr pScrn) + if (pMga->iload_bar != -1) { + #ifdef XSERVER_LIBPCIACCESS + region = &dev->regions[pMga->iload_bar]; +- err = pci_device_map_range(dev, +- region->base_addr, region->size, +- PCI_DEV_MAP_FLAG_WRITABLE, +- (void *) &pMga->ILOADBase); +- if (err) { +- xf86DrvMsg(pScrn->scrnIndex, X_ERROR, +- "Unable to map BAR 2 (ILOAD region). %s (%d)\n", +- strerror(err), err); +- return FALSE; ++ ++ if(pMga->entityPrivate == NULL || pMga->entityPrivate->mappedILOADUsage == 0) { ++ err = pci_device_map_range(dev, ++ region->base_addr, region->size, ++ PCI_DEV_MAP_FLAG_WRITABLE, ++ (void *) &pMga->ILOADBase); ++ if (err) { ++ xf86DrvMsg(pScrn->scrnIndex, X_ERROR, ++ "Unable to map BAR 2 (ILOAD region). %s (%d)\n", ++ strerror(err), err); ++ return FALSE; ++ } ++ ++ if(pMga->entityPrivate != NULL) ++ pMga->entityPrivate->mappedILOADBase = pMga->ILOADBase; + } ++ else ++ pMga->ILOADBase = pMga->entityPrivate->mappedILOADBase; ++ ++ if(pMga->entityPrivate != NULL) ++ pMga->entityPrivate->mappedILOADUsage ++; + #else + pMga->ILOADBase = xf86MapPciMem(pScrn->scrnIndex, + VIDMEM_MMIO | VIDMEM_MMIO_32BIT | +@@ -2924,10 +2960,20 @@ MGAUnmapMem(ScrnInfoPtr pScrn) + + if (!pMga->FBDev) { + #ifdef XSERVER_LIBPCIACCESS +- pci_device_unmap_range(dev, pMga->IOBase, +- dev->regions[pMga->io_bar].size); ++ if(pMga->entityPrivate != NULL) ++ pMga->entityPrivate->mappedIOUsage--; ++ ++ if(pMga->entityPrivate == NULL || pMga->entityPrivate->mappedIOUsage == 0) { ++ pci_device_unmap_range(dev, pMga->IOBase, ++ dev->regions[pMga->io_bar].size); ++ ++ if(pMga->entityPrivate != NULL) ++ pMga->entityPrivate->mappedIOBase = NULL; ++ } ++ ++ xf86DrvMsg(pScrn->scrnIndex, X_INFO, "UNMAPPING framebuffer 0x%08llX, 0x%llX.\n", (long long)pMga->FbBase, (long long)pMga->FbMapSize); + pci_device_unmap_range(dev, pMga->FbBase, +- dev->regions[pMga->framebuffer_bar].size); ++ pMga->FbMapSize); + #else + xf86UnMapVidMem(pScrn->scrnIndex, (pointer)pMga->IOBase, 0x4000); + xf86UnMapVidMem(pScrn->scrnIndex, (pointer)pMga->FbBase, pMga->FbMapSize); +@@ -2940,8 +2986,17 @@ MGAUnmapMem(ScrnInfoPtr pScrn) + + if ((pMga->iload_bar != -1) && (pMga->ILOADBase != NULL)) { + #ifdef XSERVER_LIBPCIACCESS +- pci_device_unmap_range(dev, pMga->ILOADBase, +- dev->regions[pMga->iload_bar].size); ++ if(pMga->entityPrivate != NULL) ++ pMga->entityPrivate->mappedILOADUsage--; ++ ++ if(pMga->entityPrivate == NULL || pMga->entityPrivate->mappedILOADUsage == 0) { ++ pci_device_unmap_range(dev, pMga->ILOADBase, ++ dev->regions[pMga->iload_bar].size); ++ ++ if(pMga->entityPrivate != NULL) ++ pMga->entityPrivate->mappedILOADBase = NULL; ++ } ++ + #else + xf86UnMapVidMem(pScrn->scrnIndex, (pointer)pMga->ILOADBase, 0x800000); + #endif diff --git a/debian/patches/series b/debian/patches/series index b7e34e9..7b69d6a 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -1 +1,2 @@ 01_no_nonfree.diff +02_tentatively_unbreak_dual_head.diff -- To UNSUBSCRIBE, email to [email protected] with a subject of "unsubscribe". Trouble? Contact [email protected] Archive: http://lists.debian.org/[email protected]

