summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEmil Velikov <emil.velikov@collabora.com>2018-03-31 15:00:16 +0100
committerEmil Velikov <emil.l.velikov@gmail.com>2020-03-16 14:25:37 +0000
commiteeaaf370854b63966f0b5adbd00d2e6809b773c1 (patch)
tree676dd40f68dd5691b5524887135c18608ab927a2
parent1c9742e304f4d198628cdc9487049cde472c7285 (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.c60
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;