xf86-video-amdgpu: Branch 'master' - 3 commits
Michel Dänzer
daenzer at kemper.freedesktop.org
Wed Jan 13 01:56:15 PST 2016
src/amdgpu_probe.c | 81 ++++++++++++++++++++++++++++-------------------------
1 file changed, 43 insertions(+), 38 deletions(-)
New commits:
commit bd5c65daceaf633c36fcec86ff061df10c364bc0
Author: Michel Dänzer <michel.daenzer at amd.com>
Date: Thu Jan 7 15:53:41 2016 +0900
Only call amdgpu_bus_id once in each probe path (v2)
Instead of up to twice as before.
v2: Remove free(busIdString) call from amdgpu_kernel_mode_enabled, the
bus ID string is now managed by its callers.
Reviewed-by: Alex Deucher <alexander.deucher at amd.com> (v1)
diff --git a/src/amdgpu_probe.c b/src/amdgpu_probe.c
index f74eb29..1c32742 100644
--- a/src/amdgpu_probe.c
+++ b/src/amdgpu_probe.c
@@ -99,23 +99,16 @@ static char *amdgpu_bus_id(ScrnInfoPtr pScrn, struct pci_device *dev)
return busid;
}
-static Bool amdgpu_kernel_mode_enabled(ScrnInfoPtr pScrn,
- struct pci_device *pci_dev)
+static Bool amdgpu_kernel_mode_enabled(ScrnInfoPtr pScrn, char *busIdString)
{
- char *busIdString = amdgpu_bus_id(pScrn, pci_dev);
- int ret;
+ int ret = drmCheckModesettingSupported(busIdString);
- if (!busIdString)
- return FALSE;
-
- ret = drmCheckModesettingSupported(busIdString);
#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
if (ret) {
if (xf86LoadKernelModule("amdgpukms"))
ret = drmCheckModesettingSupported(busIdString);
}
#endif
- free(busIdString);
if (ret) {
xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, 0,
"[KMS] drm report modesetting isn't supported.\n");
@@ -127,10 +120,9 @@ static Bool amdgpu_kernel_mode_enabled(ScrnInfoPtr pScrn,
return TRUE;
}
-static int amdgpu_kernel_open_fd(ScrnInfoPtr pScrn, struct pci_device *dev,
+static int amdgpu_kernel_open_fd(ScrnInfoPtr pScrn, char *busid,
struct xf86_platform_device *platform_dev)
{
- char *busid;
int fd;
#ifdef XF86_PDEV_SERVER_FD
@@ -142,29 +134,21 @@ static int amdgpu_kernel_open_fd(ScrnInfoPtr pScrn, struct pci_device *dev,
}
#endif
- busid = amdgpu_bus_id(pScrn, dev);
- if (!busid)
- return -1;
-
fd = drmOpen(NULL, busid);
- if (fd == -1) {
+ if (fd == -1)
xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
"[drm] Failed to open DRM device for %s: %s\n",
busid, strerror(errno));
- free(busid);
- return fd;
- }
- free(busid);
return fd;
}
static Bool amdgpu_open_drm_master(ScrnInfoPtr pScrn, AMDGPUEntPtr pAMDGPUEnt,
- struct pci_device *pci_dev)
+ char *busid)
{
drmSetVersion sv;
int err;
- pAMDGPUEnt->fd = amdgpu_kernel_open_fd(pScrn, pci_dev, NULL);
+ pAMDGPUEnt->fd = amdgpu_kernel_open_fd(pScrn, busid, NULL);
if (pAMDGPUEnt->fd == -1)
return FALSE;
@@ -190,6 +174,7 @@ static Bool amdgpu_open_drm_master(ScrnInfoPtr pScrn, AMDGPUEntPtr pAMDGPUEnt,
static Bool amdgpu_get_scrninfo(int entity_num, struct pci_device *pci_dev)
{
ScrnInfoPtr pScrn = NULL;
+ char *busid;
EntityInfoPtr pEnt;
DevUnion *pPriv;
AMDGPUEntPtr pAMDGPUEnt;
@@ -200,8 +185,9 @@ static Bool amdgpu_get_scrninfo(int entity_num, struct pci_device *pci_dev)
if (!pScrn)
return FALSE;
- if (!amdgpu_kernel_mode_enabled(pScrn, pci_dev))
- return FALSE;
+ busid = amdgpu_bus_id(pScrn, pci_dev);
+ if (!amdgpu_kernel_mode_enabled(pScrn, busid))
+ goto error;
pScrn->driverVersion = AMDGPU_VERSION_CURRENT;
pScrn->driverName = AMDGPU_DRIVER_NAME;
@@ -235,10 +221,10 @@ static Bool amdgpu_get_scrninfo(int entity_num, struct pci_device *pci_dev)
pPriv->ptr = xnfcalloc(sizeof(AMDGPUEntRec), 1);
if (!pPriv->ptr)
- return FALSE;
+ goto error;
pAMDGPUEnt = pPriv->ptr;
- if (!amdgpu_open_drm_master(pScrn, pAMDGPUEnt, pci_dev))
+ if (!amdgpu_open_drm_master(pScrn, pAMDGPUEnt, busid))
goto error_fd;
pAMDGPUEnt->fd_ref = 1;
@@ -261,6 +247,7 @@ static Bool amdgpu_get_scrninfo(int entity_num, struct pci_device *pci_dev)
index)
- 1);
free(pEnt);
+ free(busid);
return TRUE;
@@ -268,6 +255,8 @@ error_amdgpu:
drmClose(pAMDGPUEnt->fd);
error_fd:
free(pPriv->ptr);
+error:
+ free(busid);
return FALSE;
}
@@ -304,6 +293,7 @@ amdgpu_platform_probe(DriverPtr pDriver,
{
ScrnInfoPtr pScrn;
int scr_flags = 0;
+ char *busid;
EntityInfoPtr pEnt;
DevUnion *pPriv;
AMDGPUEntPtr pAMDGPUEnt;
@@ -319,9 +309,13 @@ amdgpu_platform_probe(DriverPtr pDriver,
xf86SetEntityShared(entity_num);
xf86AddEntityToScreen(pScrn, entity_num);
- if (!amdgpu_kernel_mode_enabled(pScrn, dev->pdev))
+ busid = amdgpu_bus_id(pScrn, dev->pdev);
+ if (!busid)
return FALSE;
+ if (!amdgpu_kernel_mode_enabled(pScrn, busid))
+ goto error;
+
pScrn->driverVersion = AMDGPU_VERSION_CURRENT;
pScrn->driverName = AMDGPU_DRIVER_NAME;
pScrn->name = AMDGPU_NAME;
@@ -353,7 +347,7 @@ amdgpu_platform_probe(DriverPtr pDriver,
pPriv->ptr = xnfcalloc(sizeof(AMDGPUEntRec), 1);
pAMDGPUEnt = pPriv->ptr;
- pAMDGPUEnt->fd = amdgpu_kernel_open_fd(pScrn, dev->pdev, dev);
+ pAMDGPUEnt->fd = amdgpu_kernel_open_fd(pScrn, busid, dev);
if (pAMDGPUEnt->fd < 0)
goto error_fd;
@@ -378,6 +372,7 @@ amdgpu_platform_probe(DriverPtr pDriver,
index)
- 1);
free(pEnt);
+ free(busid);
return TRUE;
@@ -385,6 +380,8 @@ error_amdgpu:
drmClose(pAMDGPUEnt->fd);
error_fd:
free(pPriv->ptr);
+error:
+ free(busid);
return FALSE;
}
#endif
commit 6e42c58375a4c3229da93c27bbd104af145c6163
Author: Michel Dänzer <michel.daenzer at amd.com>
Date: Thu Jan 7 15:57:38 2016 +0900
Remove pci_dev test from amdgpu_get_scrninfo
The pci_dev parameter can never be NULL since we only support KMS.
Reported-by: Tom St Denis <tom.stdenis at amd.com>
Reviewed-by: Alex Deucher <alexander.deucher at amd.com>
diff --git a/src/amdgpu_probe.c b/src/amdgpu_probe.c
index fa68008..f74eb29 100644
--- a/src/amdgpu_probe.c
+++ b/src/amdgpu_probe.c
@@ -200,11 +200,8 @@ static Bool amdgpu_get_scrninfo(int entity_num, struct pci_device *pci_dev)
if (!pScrn)
return FALSE;
- if (pci_dev) {
- if (!amdgpu_kernel_mode_enabled(pScrn, pci_dev)) {
- return FALSE;
- }
- }
+ if (!amdgpu_kernel_mode_enabled(pScrn, pci_dev))
+ return FALSE;
pScrn->driverVersion = AMDGPU_VERSION_CURRENT;
pScrn->driverName = AMDGPU_DRIVER_NAME;
commit 8e09180798a06af5afa030d754938e4ca06e272f
Author: Michel Dänzer <michel.daenzer at amd.com>
Date: Thu Jan 7 15:35:35 2016 +0900
Re-use PCI bus ID code from kernel_open_fd in kernel_mode_enabled
Reviewed-by: Alex Deucher <alexander.deucher at amd.com>
diff --git a/src/amdgpu_probe.c b/src/amdgpu_probe.c
index e4f5c75..fa68008 100644
--- a/src/amdgpu_probe.c
+++ b/src/amdgpu_probe.c
@@ -80,19 +80,34 @@ static void AMDGPUIdentify(int flags)
"Driver for AMD Radeon chipsets", AMDGPUChipsets);
}
+static char *amdgpu_bus_id(ScrnInfoPtr pScrn, struct pci_device *dev)
+{
+ char *busid;
+
+#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
+
+ if (!busid)
+ xf86DrvMsgVerb(pScrn->scrnIndex, X_ERROR, 0,
+ "AMDGPU: Failed to generate bus ID string\n");
+
+ return busid;
+}
+
static Bool amdgpu_kernel_mode_enabled(ScrnInfoPtr pScrn,
struct pci_device *pci_dev)
{
- char *busIdString;
+ char *busIdString = amdgpu_bus_id(pScrn, pci_dev);
int ret;
- if (!xf86LoaderCheckSymbol("DRICreatePCIBusID")) {
- xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, 0,
- "[KMS] No DRICreatePCIBusID symbol, no kernel modesetting.\n");
+ if (!busIdString)
return FALSE;
- }
- busIdString = DRICreatePCIBusID(pci_dev);
ret = drmCheckModesettingSupported(busIdString);
#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
if (ret) {
@@ -127,13 +142,9 @@ static int amdgpu_kernel_open_fd(ScrnInfoPtr pScrn, struct pci_device *dev,
}
#endif
-#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
+ busid = amdgpu_bus_id(pScrn, dev);
+ if (!busid)
+ return -1;
fd = drmOpen(NULL, busid);
if (fd == -1) {
More information about the xorg-commit
mailing list