[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

xserver-xorg-video-nouveau: Changes to 'upstream-experimental'



 configure.ac       |    2 
 src/nouveau_dri2.c |    5 -
 src/nv_driver.c    |  198 ++++++++++++++++++++++++++++++++---------------------
 src/nv_type.h      |    2 
 4 files changed, 126 insertions(+), 81 deletions(-)

New commits:
commit 018ab2d4634f3c8923038337ce9600973e2f0002
Author: Ben Skeggs <bskeggs@redhat.com>
Date:   Fri Nov 9 12:16:00 2012 +1000

    bump version to 1.0.4
    
    Signed-off-by: Ben Skeggs <bskeggs@redhat.com>

diff --git a/configure.ac b/configure.ac
index e2fdb20..ff9c337 100644
--- a/configure.ac
+++ b/configure.ac
@@ -22,7 +22,7 @@
 
 AC_PREREQ([2.60])
 AC_INIT([xf86-video-nouveau],
-        [1.0.3],
+        [1.0.4],
         [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg],
         [xf86-video-nouveau])
 

commit 0d32d964dbba3864af0946aa8894cef858eb1319
Author: Dave Airlie <airlied@redhat.com>
Date:   Wed Nov 7 14:49:03 2012 +1000

    nouveau: drop unused nv private members.
    
    these are no longer needed.
    
    Signed-off-by: Dave Airlie <airlied@redhat.com>

diff --git a/src/nv_type.h b/src/nv_type.h
index d882e7c..ed21c6d 100644
--- a/src/nv_type.h
+++ b/src/nv_type.h
@@ -69,9 +69,7 @@ typedef struct _NVRec {
 
     CARD32              currentRop;
 
-    DRIInfoPtr          pDRIInfo;
     drmVersionPtr       pLibDRMVersion;
-    drmVersionPtr       pKernelDRMVersion;
 
 	void *drmmode; /* for KMS */
 

commit b1a630b48210d6a3c44994fce1b73273000ace5c
Author: Dave Airlie <airlied@redhat.com>
Date:   Wed Nov 7 14:45:14 2012 +1000

    nouveau: drop DRI1 device open interface.
    
    this is a DRI1 left over, the driver is meant to open the device itself now.
    
    this old interface did crazy stuff like drmAddMap.
    
    Reviewed-by: Ben Skeggs <bskeggs@redhat.com>
    Signed-off-by: Dave Airlie <airlied@redhat.com>

diff --git a/src/nv_driver.c b/src/nv_driver.c
index ea4a018..de09f53 100644
--- a/src/nv_driver.c
+++ b/src/nv_driver.c
@@ -680,39 +680,69 @@ nouveau_setup_capabilities(ScrnInfoPtr pScrn)
 #endif
 }
 
+static Bool NVOpenDRMMaster(ScrnInfoPtr pScrn)
+{
+	NVPtr pNv = NVPTR(pScrn);
+	struct pci_device *dev = pNv->PciInfo;
+	char *busid;
+	drmSetVersion sv;
+	int err;
+	int ret;
+
+#if XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(1,9,99,901,0)
+	XNFasprintf(&busid, "pci:%04x:%02x:%02x.%d",
+		    dev->domain, dev->bus, dev->dev, dev->func);
+#else
+	busid = XNFprintf("pci:%04x:%02x:%02x.%d",
+			  dev->domain, dev->bus, dev->dev, dev->func);
+#endif
+
+	ret = nouveau_device_open(busid, &pNv->dev);
+	if (ret) {
+		xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
+			   "[drm] Failed to open DRM device for %s: %d\n",
+			   busid, ret);
+		free(busid);
+		return FALSE;
+	}
+	free(busid);
+
+	sv.drm_di_major = 1;
+	sv.drm_di_minor = 1;
+	sv.drm_dd_major = -1;
+	sv.drm_dd_minor = -1;
+	err = drmSetInterfaceVersion(pNv->dev->fd, &sv);
+	if (err != 0) {
+		xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
+			   "[drm] failed to set drm interface version.\n");
+		nouveau_device_del(&pNv->dev);
+		return FALSE;
+	}
+	return TRUE;
+}
+
 static Bool
 NVPreInitDRM(ScrnInfoPtr pScrn)
 {
 	NVPtr pNv = NVPTR(pScrn);
-	char *bus_id;
 	int ret;
 
 	if (!NVDRIGetVersion(pScrn))
 		return FALSE;
 
 	/* Load the kernel module, and open the DRM */
-	bus_id = DRICreatePCIBusID(pNv->PciInfo);
-	ret = DRIOpenDRMMaster(pScrn, SAREA_MAX, bus_id, "nouveau");
-	free(bus_id);
+	ret = NVOpenDRMMaster(pScrn);
 	if (!ret) {
 		xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
 			   "[drm] error opening the drm\n");
 		return FALSE;
 	}
 
-	/* Initialise libdrm_nouveau */
-	ret = nouveau_device_wrap(DRIMasterFD(pScrn), 1, &pNv->dev);
-	if (ret) {
-		xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
-			   "[drm] error creating device\n");
-		return FALSE;
-	}
-
 	ret = nouveau_client_new(pNv->dev, &pNv->client);
 	if (ret)
 		return FALSE;
 
-	pNv->drm_device_name = drmGetDeviceNameFromFd(DRIMasterFD(pScrn));
+	pNv->drm_device_name = drmGetDeviceNameFromFd(pNv->dev->fd);
 
 	return TRUE;
 }

commit 27a1a0616304e9b9f0ae842899b7d614f1026578
Author: Emil Velikov <emil.l.velikov@gmail.com>
Date:   Fri Nov 2 03:57:42 2012 +0000

    nouveau: NVPlatformProbe, handle shareable entities
    
    During NVPciProbe, xf86ConfigPciEntity() implicitly calls checks and sets
    the entity as shared
    Here we are only allocating the screen, thus need to explicitly call the
    functions
    
    ZaphodHead and Xinerama should finally work
    
    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=56347
    
    Reported-By: Vladimir Chebotarev <exc@rbcmail.ru>
    Reported-By: Damian Nowak <nowaker@geozone.pl>
    Tested-By: Damian Nowak <nowaker@geozone.pl>
    Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
    Signed-off-by: Ben Skeggs <bskeggs@redhat.com>

diff --git a/src/nv_driver.c b/src/nv_driver.c
index f184cd4..ea4a018 100644
--- a/src/nv_driver.c
+++ b/src/nv_driver.c
@@ -353,6 +353,11 @@ NVPlatformProbe(DriverPtr driver,
 		scr_flags = XF86_ALLOCATE_GPU_SCREEN;
 
 	scrn = xf86AllocateScreen(driver, scr_flags);
+	if (!scrn)
+		return FALSE;
+
+	if (xf86IsEntitySharable(entity_num))
+		xf86SetEntityShared(entity_num);
 	xf86AddEntityToScreen(scrn, entity_num);
 
 	NVInitScrn(scrn, entity_num);

commit e34cfbd5bd23f7f15372af52d8a39a5715ce7310
Author: Emil Velikov <emil.l.velikov@gmail.com>
Date:   Fri Nov 2 03:57:41 2012 +0000

    nouveau: Factor out common code to NVHasKMS()
    
    As the name suggests checks if it has kernel mode setting,
    prints out the interface version and checkes if the chipset
    is supported
    
    Function is used in NVPciProbe and NVPlatformProbe
    
    Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
    Signed-off-by: Ben Skeggs <bskeggs@redhat.com>

diff --git a/src/nv_driver.c b/src/nv_driver.c
index dc4f3b2..f184cd4 100644
--- a/src/nv_driver.c
+++ b/src/nv_driver.c
@@ -247,19 +247,12 @@ NVInitScrn(ScrnInfoPtr pScrn, int entity_num)
 }
 
 static Bool
-NVPciProbe(DriverPtr drv, int entity_num, struct pci_device *pci_dev,
-	   intptr_t match_data)
+NVHasKMS(struct pci_device *pci_dev)
 {
-	PciChipsets NVChipsets[] = {
-		{ pci_dev->device_id,
-		  (pci_dev->vendor_id << 16) | pci_dev->device_id, NULL },
-		{ -1, -1, NULL }
-	};
 	struct nouveau_device *dev = NULL;
-	ScrnInfoPtr pScrn = NULL;
 	drmVersion *version;
-	int chipset, ret;
 	char *busid;
+	int chipset, ret;
 
 	if (!xf86LoaderCheckSymbol("DRICreatePCIBusID")) {
 		xf86DrvMsg(-1, X_ERROR, "[drm] No DRICreatePCIBusID symbol\n");
@@ -267,10 +260,17 @@ NVPciProbe(DriverPtr drv, int entity_num, struct pci_device *pci_dev,
 	}
 	busid = DRICreatePCIBusID(pci_dev);
 
+	ret = drmCheckModesettingSupported(busid);
+	if (ret) {
+		xf86DrvMsg(-1, X_ERROR, "[drm] KMS not enabled\n");
+		free(busid);
+		return FALSE;
+	}
+
 	ret = nouveau_device_open(busid, &dev);
+	free(busid);
 	if (ret) {
 		xf86DrvMsg(-1, X_ERROR, "[drm] failed to open device\n");
-		free(busid);
 		return FALSE;
 	}
 
@@ -288,12 +288,6 @@ NVPciProbe(DriverPtr drv, int entity_num, struct pci_device *pci_dev,
 	chipset = dev->chipset;
 	nouveau_device_del(&dev);
 
-	ret = drmCheckModesettingSupported(busid);
-	free(busid);
-	if (ret) {
-		xf86DrvMsg(-1, X_ERROR, "[drm] KMS not enabled\n");
-		return FALSE;
-	}
 
 	switch (chipset & 0xf0) {
 	case 0x00:
@@ -314,6 +308,22 @@ NVPciProbe(DriverPtr drv, int entity_num, struct pci_device *pci_dev,
 		xf86DrvMsg(-1, X_ERROR, "Unknown chipset: NV%02x\n", chipset);
 		return FALSE;
 	}
+	return TRUE;
+}
+
+static Bool
+NVPciProbe(DriverPtr drv, int entity_num, struct pci_device *pci_dev,
+	   intptr_t match_data)
+{
+	PciChipsets NVChipsets[] = {
+		{ pci_dev->device_id,
+		  (pci_dev->vendor_id << 16) | pci_dev->device_id, NULL },
+		{ -1, -1, NULL }
+	};
+	ScrnInfoPtr pScrn = NULL;
+
+	if (!NVHasKMS(pci_dev))
+		return FALSE;
 
 	pScrn = xf86ConfigPciEntity(pScrn, 0, entity_num, NVChipsets,
 				    NULL, NULL, NULL, NULL, NULL);
@@ -336,6 +346,9 @@ NVPlatformProbe(DriverPtr driver,
 	if (!dev->pdev)
 		return FALSE;
 
+	if (!NVHasKMS(dev->pdev))
+		return FALSE;
+
 	if (flags & PLATFORM_PROBE_GPU_SCREEN)
 		scr_flags = XF86_ALLOCATE_GPU_SCREEN;
 

commit 78f24dc3798d635fca2e20856a09012c28bbbb8b
Author: Emil Velikov <emil.l.velikov@gmail.com>
Date:   Fri Nov 2 03:57:40 2012 +0000

    nouveau: introduce NVInitScrn()
    
    Common/helper function for NV{Pci,Platform}Probe()
    
    This introduces some the following functions to the
    NVPlatformProbe codepath
    * xf86SetEntitySharable()
    * xf86SetEntityInstanceForScreen()
    
    Necessary for dualhead, xinerama and/or zaphodhead
    
    v2: Rename nouveau_init_scrn() to NVInitScrn()
    Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
    Signed-off-by: Ben Skeggs <bskeggs@redhat.com>

diff --git a/src/nv_driver.c b/src/nv_driver.c
index c885e73..dc4f3b2 100644
--- a/src/nv_driver.c
+++ b/src/nv_driver.c
@@ -74,36 +74,10 @@ static Bool NVPciProbe (	DriverPtr 		drv,
 				intptr_t		match_data	);
 
 #ifdef XSERVER_PLATFORM_BUS
-static Bool
-NVPlatformProbe(DriverPtr driver,
-            int entity_num, int flags, struct xf86_platform_device *dev, intptr_t dev_match_data)
-{
-	ScrnInfoPtr scrn = NULL;
-	uint32_t scr_flags = 0;
-
-	if (!dev->pdev)
-		return FALSE;
-
-        if (flags & PLATFORM_PROBE_GPU_SCREEN)
-               scr_flags = XF86_ALLOCATE_GPU_SCREEN;
-
-	scrn = xf86AllocateScreen(driver, scr_flags);
-	xf86AddEntityToScreen(scrn, entity_num);
-
-	scrn->driverVersion    = NV_VERSION;
-	scrn->driverName       = NV_DRIVER_NAME;
-	scrn->name             = NV_NAME;
-
-	scrn->Probe            = NULL;
-	scrn->PreInit          = NVPreInit;
-	scrn->ScreenInit       = NVScreenInit;
-	scrn->SwitchMode       = NVSwitchMode;
-	scrn->AdjustFrame      = NVAdjustFrame;
-	scrn->EnterVT          = NVEnterVT;
-	scrn->LeaveVT          = NVLeaveVT;
-	scrn->FreeScreen       = NVFreeScreen;
-	return scrn != NULL;
-}
+static Bool NVPlatformProbe(DriverPtr driver,
+				int entity_num, int flags,
+				struct xf86_platform_device *dev,
+				intptr_t dev_match_data);
 #endif
 
 /*
@@ -251,6 +225,27 @@ NVDriverFunc(ScrnInfoPtr scrn, xorgDriverFuncOp op, void *data)
     }
 }
 
+static void
+NVInitScrn(ScrnInfoPtr pScrn, int entity_num)
+{
+	pScrn->driverVersion    = NV_VERSION;
+	pScrn->driverName       = NV_DRIVER_NAME;
+	pScrn->name             = NV_NAME;
+
+	pScrn->Probe            = NULL;
+	pScrn->PreInit          = NVPreInit;
+	pScrn->ScreenInit       = NVScreenInit;
+	pScrn->SwitchMode       = NVSwitchMode;
+	pScrn->AdjustFrame      = NVAdjustFrame;
+	pScrn->EnterVT          = NVEnterVT;
+	pScrn->LeaveVT          = NVLeaveVT;
+	pScrn->FreeScreen       = NVFreeScreen;
+
+	xf86SetEntitySharable(entity_num);
+	xf86SetEntityInstanceForScreen(pScrn, entity_num,
+					xf86GetNumEntityInstances(entity_num) - 1);
+}
+
 static Bool
 NVPciProbe(DriverPtr drv, int entity_num, struct pci_device *pci_dev,
 	   intptr_t match_data)
@@ -325,25 +320,33 @@ NVPciProbe(DriverPtr drv, int entity_num, struct pci_device *pci_dev,
 	if (!pScrn)
 		return FALSE;
 
-	pScrn->driverVersion    = NV_VERSION;
-	pScrn->driverName       = NV_DRIVER_NAME;
-	pScrn->name             = NV_NAME;
+	NVInitScrn(pScrn, entity_num);
 
-	pScrn->Probe            = NULL;
-	pScrn->PreInit          = NVPreInit;
-	pScrn->ScreenInit       = NVScreenInit;
-	pScrn->SwitchMode       = NVSwitchMode;
-	pScrn->AdjustFrame      = NVAdjustFrame;
-	pScrn->EnterVT          = NVEnterVT;
-	pScrn->LeaveVT          = NVLeaveVT;
-	pScrn->FreeScreen       = NVFreeScreen;
+	return TRUE;
+}
 
-	xf86SetEntitySharable(entity_num);
-	xf86SetEntityInstanceForScreen(pScrn, entity_num,
-					xf86GetNumEntityInstances(entity_num) - 1);
+#ifdef XSERVER_PLATFORM_BUS
+static Bool
+NVPlatformProbe(DriverPtr driver,
+            int entity_num, int flags, struct xf86_platform_device *dev, intptr_t dev_match_data)
+{
+	ScrnInfoPtr scrn = NULL;
+	uint32_t scr_flags = 0;
+
+	if (!dev->pdev)
+		return FALSE;
+
+	if (flags & PLATFORM_PROBE_GPU_SCREEN)
+		scr_flags = XF86_ALLOCATE_GPU_SCREEN;
+
+	scrn = xf86AllocateScreen(driver, scr_flags);
+	xf86AddEntityToScreen(scrn, entity_num);
+
+	NVInitScrn(scrn, entity_num);
 
 	return TRUE;
 }
+#endif
 
 #define MAX_CHIPS MAXSCREENS
 

commit 47457fbd5006070ea9a06238a5a69ca8167dac77
Author: Emil Velikov <emil.l.velikov@gmail.com>
Date:   Fri Nov 2 03:57:39 2012 +0000

    nouveau: Remove unneeded xf86GetEntityInfo()
    
    Retrieving the whole entity information is not needed as we only
    use the index - stored already in entity_num
    
    Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
    Signed-off-by: Ben Skeggs <bskeggs@redhat.com>

diff --git a/src/nv_driver.c b/src/nv_driver.c
index 9b5b9d6..c885e73 100644
--- a/src/nv_driver.c
+++ b/src/nv_driver.c
@@ -261,7 +261,6 @@ NVPciProbe(DriverPtr drv, int entity_num, struct pci_device *pci_dev,
 		{ -1, -1, NULL }
 	};
 	struct nouveau_device *dev = NULL;
-	EntityInfoPtr pEnt = NULL;
 	ScrnInfoPtr pScrn = NULL;
 	drmVersion *version;
 	int chipset, ret;
@@ -340,10 +339,8 @@ NVPciProbe(DriverPtr drv, int entity_num, struct pci_device *pci_dev,
 	pScrn->FreeScreen       = NVFreeScreen;
 
 	xf86SetEntitySharable(entity_num);
-
-	pEnt = xf86GetEntityInfo(entity_num);
-	xf86SetEntityInstanceForScreen(pScrn, pEnt->index, xf86GetNumEntityInstances(pEnt->index) - 1);
-	free(pEnt);
+	xf86SetEntityInstanceForScreen(pScrn, entity_num,
+					xf86GetNumEntityInstances(entity_num) - 1);
 
 	return TRUE;
 }

commit 20995bb5920021668b8b607f886201c643ee0e9a
Author: Dave Airlie <airlied@redhat.com>
Date:   Fri Nov 2 09:04:43 2012 +1000

    nouveau: fix regression in virtualbox drawing hopefully.
    
    Signed-off-by: Dave Airlie <airlied@redhat.com>

diff --git a/src/nouveau_dri2.c b/src/nouveau_dri2.c
index 8d21dca..036bcff 100644
--- a/src/nouveau_dri2.c
+++ b/src/nouveau_dri2.c
@@ -159,11 +159,10 @@ nouveau_dri2_copy_region2(ScreenPtr pScreen, DrawablePtr pDraw, RegionPtr pRegio
 		else
 #endif
 			dst_draw = pDraw;
+		if (dst_draw != pDraw)
+			translate = TRUE;
 	}
 
-	if (dst_draw != pDraw)
-		translate = TRUE;
-
 	if (translate && pDraw->type == DRAWABLE_WINDOW) {
 		PixmapPtr pPix = get_drawable_pixmap(pDraw);
 		off_x = pDraw->x - pPix->screen_x;


Reply to: