diff options
author | Emil Velikov <emil.velikov@collabora.com> | 2019-07-17 00:01:51 +0100 |
---|---|---|
committer | Emil Velikov <emil.l.velikov@gmail.com> | 2020-03-16 14:25:16 +0000 |
commit | b357a8474074d911d1c03572d4d9db3ee420633a (patch) | |
tree | 1638bae4a72308f8cd8d39ff7cbed5296c286a07 | |
parent | 2c0c154a838060eb683599faf9cbfa3e66dd42c8 (diff) |
Store the busid string in AMDGPUEnt
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 <emil.velikov@collabora.com>
Reviewed-by: Michel Dänzer <michel.daenzer@amd.com> (v3)
Acked-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r-- | src/amdgpu_kms.c | 1 | ||||
-rw-r--r-- | src/amdgpu_probe.c | 46 | ||||
-rw-r--r-- | 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); |