From b357a8474074d911d1c03572d4d9db3ee420633a Mon Sep 17 00:00:00 2001 From: Emil Velikov Date: Wed, 17 Jul 2019 00:01:51 +0100 Subject: Store the busid string in AMDGPUEnt MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This way we can reuse it, instead of redoing it later on. v2: Pass the AMDGPUEnt as argument. v3: free() the string at AMDGPUFreeRec (Michel) v4: Inline amdgpu_bus_id, move at top of mdgpu_kernel_open_fd (Michel) Signed-off-by: Emil Velikov Reviewed-by: Michel Dänzer (v3) Acked-by: Alex Deucher --- src/amdgpu_kms.c | 1 + src/amdgpu_probe.c | 46 ++++++++++++++++++---------------------------- src/amdgpu_probe.h | 1 + 3 files changed, 20 insertions(+), 28 deletions(-) diff --git a/src/amdgpu_kms.c b/src/amdgpu_kms.c index 94d1c0b..15b8327 100644 --- a/src/amdgpu_kms.c +++ b/src/amdgpu_kms.c @@ -283,6 +283,7 @@ static void AMDGPUFreeRec(ScrnInfoPtr pScrn) amdgpu_unwrap_property_requests(pScrn); amdgpu_device_deinitialize(pAMDGPUEnt->pDev); amdgpu_kernel_close_fd(pAMDGPUEnt); + free(pAMDGPUEnt->busid); free(pPriv->ptr); pPriv->ptr = NULL; } diff --git a/src/amdgpu_probe.c b/src/amdgpu_probe.c index 8250156..ebd2aa7 100644 --- a/src/amdgpu_probe.c +++ b/src/amdgpu_probe.c @@ -77,19 +77,11 @@ static void AMDGPUIdentify(int flags) xf86PrintChipsets(AMDGPU_NAME, "Driver for AMD Radeon", AMDGPUAny); } -static char *amdgpu_bus_id(ScrnInfoPtr pScrn, struct pci_device *dev) -{ - char *busid; - - XNFasprintf(&busid, "pci:%04x:%02x:%02x.%u", - dev->domain, dev->bus, dev->dev, dev->func); - - return busid; -} - -static Bool amdgpu_kernel_mode_enabled(ScrnInfoPtr pScrn, char *busIdString) +static Bool amdgpu_kernel_mode_enabled(ScrnInfoPtr pScrn) { #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) + AMDGPUEntPtr pAMDGPUEnt = AMDGPUEntPriv(pScrn); + const char *busIdString = pAMDGPUEnt->busid; int ret = drmCheckModesettingSupported(busIdString); if (ret) { @@ -110,13 +102,21 @@ static Bool amdgpu_kernel_mode_enabled(ScrnInfoPtr pScrn, char *busIdString) static int amdgpu_kernel_open_fd(ScrnInfoPtr pScrn, struct pci_device *pci_dev, - struct xf86_platform_device *platform_dev) + struct xf86_platform_device *platform_dev, + AMDGPUEntPtr pAMDGPUEnt) { struct pci_device *dev; const char *path; - char *busid; int fd; + if (platform_dev) + dev = platform_dev->pdev; + else + dev = pci_dev; + + XNFasprintf(&pAMDGPUEnt->busid, "pci:%04x:%02x:%02x.%u", + dev->domain, dev->bus, dev->dev, dev->func); + if (platform_dev) { #ifdef ODEV_ATTRIB_FD fd = xf86_get_platform_device_int_attrib(platform_dev, @@ -135,24 +135,14 @@ static int amdgpu_kernel_open_fd(ScrnInfoPtr pScrn, #endif } - if (platform_dev) - dev = platform_dev->pdev; - else - dev = pci_dev; - - busid = amdgpu_bus_id(pScrn, dev); - - if (!amdgpu_kernel_mode_enabled(pScrn, busid)) { - free(busid); + if (!amdgpu_kernel_mode_enabled(pScrn)) return -1; - } - fd = drmOpen(NULL, busid); + fd = drmOpen(NULL, pAMDGPUEnt->busid); if (fd == -1) xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "[drm] Failed to open DRM device for %s: %s\n", - busid, strerror(errno)); - free(busid); + pAMDGPUEnt->busid, strerror(errno)); return fd; } @@ -172,7 +162,7 @@ static Bool amdgpu_open_drm_master(ScrnInfoPtr pScrn, AMDGPUEntPtr pAMDGPUEnt, drmSetVersion sv; int err; - pAMDGPUEnt->fd = amdgpu_kernel_open_fd(pScrn, pci_dev, NULL); + pAMDGPUEnt->fd = amdgpu_kernel_open_fd(pScrn, pci_dev, NULL, pAMDGPUEnt); if (pAMDGPUEnt->fd == -1) return FALSE; @@ -364,7 +354,7 @@ amdgpu_platform_probe(DriverPtr pDriver, pPriv->ptr = xnfcalloc(sizeof(AMDGPUEntRec), 1); pAMDGPUEnt = pPriv->ptr; pAMDGPUEnt->platform_dev = dev; - pAMDGPUEnt->fd = amdgpu_kernel_open_fd(pScrn, NULL, dev); + pAMDGPUEnt->fd = amdgpu_kernel_open_fd(pScrn, NULL, dev, pAMDGPUEnt); if (pAMDGPUEnt->fd < 0) goto error; diff --git a/src/amdgpu_probe.h b/src/amdgpu_probe.h index 306c9a5..fea4d39 100644 --- a/src/amdgpu_probe.h +++ b/src/amdgpu_probe.h @@ -69,6 +69,7 @@ typedef struct { ScrnInfoPtr scrn[6]; struct xf86_platform_device *platform_dev; char *render_node; + char *busid; } AMDGPUEntRec, *AMDGPUEntPtr; extern void amdgpu_kernel_close_fd(AMDGPUEntPtr pAMDGPUEnt); -- cgit v1.2.3