diff options
author | Emil Velikov <emil.velikov@collabora.com> | 2018-03-31 15:00:16 +0100 |
---|---|---|
committer | Emil Velikov <emil.l.velikov@gmail.com> | 2020-03-16 14:25:37 +0000 |
commit | eeaaf370854b63966f0b5adbd00d2e6809b773c1 (patch) | |
tree | 676dd40f68dd5691b5524887135c18608ab927a2 | |
parent | 1c9742e304f4d198628cdc9487049cde472c7285 (diff) |
Introduce amdgpu_device_setup helper
It folds the device specifics (open fd, device init) into a single
place.
v2:
- Rebase
- Pass pAMDGPUEnt to amdgpu_device_setup (Michel)
Signed-off-by: Emil Velikov <emil.velikov@collabora.com>
Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
Acked-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r-- | src/amdgpu_probe.c | 60 |
1 files changed, 32 insertions, 28 deletions
diff --git a/src/amdgpu_probe.c b/src/amdgpu_probe.c index a59b4ff..30e2d67 100644 --- a/src/amdgpu_probe.c +++ b/src/amdgpu_probe.c @@ -212,6 +212,35 @@ static Bool amdgpu_open_drm_master(ScrnInfoPtr pScrn, return TRUE; } +static Bool amdgpu_device_setup(ScrnInfoPtr pScrn, + struct pci_device *pci_dev, + struct xf86_platform_device *platform_dev, + AMDGPUEntPtr pAMDGPUEnt) +{ + uint32_t major_version; + uint32_t minor_version; + + pAMDGPUEnt->platform_dev = platform_dev; + if (!amdgpu_open_drm_master(pScrn, pci_dev, platform_dev, + pAMDGPUEnt)) + return FALSE; + + if (amdgpu_device_initialize(pAMDGPUEnt->fd, + &major_version, + &minor_version, + &pAMDGPUEnt->pDev)) { + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, + "amdgpu_device_initialize failed\n"); + goto error_amdgpu; + } + + return TRUE; + +error_amdgpu: + amdgpu_kernel_close_fd(pAMDGPUEnt); + return FALSE; +} + static Bool amdgpu_get_scrninfo(int entity_num, struct pci_device *pci_dev) { ScrnInfoPtr pScrn = NULL; @@ -252,27 +281,16 @@ static Bool amdgpu_get_scrninfo(int entity_num, struct pci_device *pci_dev) pPriv = xf86GetEntityPrivate(pEnt->index, gAMDGPUEntityIndex); if (!pPriv->ptr) { - uint32_t major_version; - uint32_t minor_version; - pPriv->ptr = xnfcalloc(sizeof(AMDGPUEntRec), 1); if (!pPriv->ptr) goto error; pAMDGPUEnt = pPriv->ptr; - if (!amdgpu_open_drm_master(pScrn, pci_dev, NULL, pAMDGPUEnt)) + if (!amdgpu_device_setup(pScrn, pci_dev, NULL, pAMDGPUEnt)) goto error; pAMDGPUEnt->fd_ref = 1; - if (amdgpu_device_initialize(pAMDGPUEnt->fd, - &major_version, - &minor_version, - &pAMDGPUEnt->pDev)) { - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, - "amdgpu_device_initialize failed\n"); - goto error_amdgpu; - } } else { pAMDGPUEnt = pPriv->ptr; @@ -294,8 +312,6 @@ static Bool amdgpu_get_scrninfo(int entity_num, struct pci_device *pci_dev) return TRUE; -error_amdgpu: - amdgpu_kernel_close_fd(pAMDGPUEnt); error: free(pEnt); return FALSE; @@ -375,25 +391,15 @@ amdgpu_platform_probe(DriverPtr pDriver, pPriv = xf86GetEntityPrivate(pEnt->index, gAMDGPUEntityIndex); if (!pPriv->ptr) { - uint32_t major_version; - uint32_t minor_version; pPriv->ptr = xnfcalloc(sizeof(AMDGPUEntRec), 1); + pAMDGPUEnt = pPriv->ptr; - pAMDGPUEnt->platform_dev = dev; - if (!amdgpu_open_drm_master(pScrn, NULL, dev, pAMDGPUEnt)) + if (!amdgpu_device_setup(pScrn, NULL, dev, pAMDGPUEnt)) goto error; pAMDGPUEnt->fd_ref = 1; - if (amdgpu_device_initialize(pAMDGPUEnt->fd, - &major_version, - &minor_version, - &pAMDGPUEnt->pDev)) { - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, - "amdgpu_device_initialize failed\n"); - goto error_amdgpu; - } } else { pAMDGPUEnt = pPriv->ptr; @@ -415,8 +421,6 @@ amdgpu_platform_probe(DriverPtr pDriver, return TRUE; -error_amdgpu: - amdgpu_kernel_close_fd(pAMDGPUEnt); error: free(pEnt); return FALSE; |