[Intel-xe] [PATCH 1/4] drm/xe: Refactor early device init
Stuart Summers
stuart.summers at intel.com
Wed Apr 19 17:54:58 UTC 2023
Split the early device initialization sequence into
an early device_info definition and an integration
with the rest of drm (ttm, etc) a little later. This
Allows the device info to be used early from the
hard coded structures in xe_pci.c.
Signed-off-by: Stuart Summers <stuart.summers at intel.com>
---
drivers/gpu/drm/xe/xe_device.c | 19 +++++++++++++------
drivers/gpu/drm/xe/xe_device.h | 4 ++--
drivers/gpu/drm/xe/xe_pci.c | 6 +++++-
3 files changed, 20 insertions(+), 9 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/xe_device.c
index a79f934e3d2d..867051d74eea 100644
--- a/drivers/gpu/drm/xe/xe_device.c
+++ b/drivers/gpu/drm/xe/xe_device.c
@@ -162,8 +162,7 @@ static void xe_device_destroy(struct drm_device *dev, void *dummy)
ttm_device_fini(&xe->ttm);
}
-struct xe_device *xe_device_create(struct pci_dev *pdev,
- const struct pci_device_id *ent)
+struct xe_device *xe_device_create(struct pci_dev *pdev)
{
struct xe_device *xe;
int err;
@@ -180,14 +179,22 @@ struct xe_device *xe_device_create(struct pci_dev *pdev,
if (IS_ERR(xe))
return xe;
+ xe->info.devid = pdev->device;
+ xe->info.revid = pdev->revision;
+
+ return xe;
+}
+
+int xe_device_init(struct xe_device *xe)
+{
+ int err;
+
err = ttm_device_init(&xe->ttm, &xe_ttm_funcs, xe->drm.dev,
xe->drm.anon_inode->i_mapping,
xe->drm.vma_offset_manager, false, false);
if (WARN_ON(err))
goto err_put;
- xe->info.devid = pdev->device;
- xe->info.revid = pdev->revision;
xe->info.enable_guc = enable_guc;
xe->info.enable_display = enable_display;
@@ -216,12 +223,12 @@ struct xe_device *xe_device_create(struct pci_dev *pdev,
if (err)
goto err_put;
- return xe;
+ return 0;
err_put:
drm_dev_put(&xe->drm);
- return ERR_PTR(err);
+ return err;
}
static void xe_device_sanitize(struct drm_device *drm, void *arg)
diff --git a/drivers/gpu/drm/xe/xe_device.h b/drivers/gpu/drm/xe/xe_device.h
index d277f8985f7b..c9ad7d20dc22 100644
--- a/drivers/gpu/drm/xe/xe_device.h
+++ b/drivers/gpu/drm/xe/xe_device.h
@@ -31,8 +31,8 @@ static inline struct xe_device *ttm_to_xe_device(struct ttm_device *ttm)
return container_of(ttm, struct xe_device, ttm);
}
-struct xe_device *xe_device_create(struct pci_dev *pdev,
- const struct pci_device_id *ent);
+struct xe_device *xe_device_create(struct pci_dev *pdev);
+int xe_device_init(struct xe_device *xe);
int xe_device_probe(struct xe_device *xe);
void xe_device_remove(struct xe_device *xe);
void xe_device_shutdown(struct xe_device *xe);
diff --git a/drivers/gpu/drm/xe/xe_pci.c b/drivers/gpu/drm/xe/xe_pci.c
index 91fed9d3105e..c968c9a19de3 100644
--- a/drivers/gpu/drm/xe/xe_pci.c
+++ b/drivers/gpu/drm/xe/xe_pci.c
@@ -402,7 +402,7 @@ static int xe_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
return -ENODEV;
}
- xe = xe_device_create(pdev, ent);
+ xe = xe_device_create(pdev);
if (IS_ERR(xe))
return PTR_ERR(xe);
@@ -452,6 +452,10 @@ static int xe_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
xe_display_info_init(xe);
+ err = xe_device_init(xe);
+ if (err)
+ return err;
+
drm_dbg(&xe->drm, "%s %s %04x:%04x dgfx:%d gfx100:%d media100:%d dma_m_s:%d tc:%d",
desc->platform_name, spd ? spd->name : "",
xe->info.devid, xe->info.revid,
--
2.38.1.143.g1fc3c0ad40
More information about the Intel-xe
mailing list