]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/xe/huc: Realloc HuC FW in vram for post-hwconfig
authorMichał Winiarski <michal.winiarski@intel.com>
Mon, 19 Feb 2024 13:05:28 +0000 (14:05 +0100)
committerRodrigo Vivi <rodrigo.vivi@intel.com>
Tue, 20 Feb 2024 19:13:45 +0000 (14:13 -0500)
Similar to GuC, we're using system memory for the initial stage, and
move the image to vram when it's available for subsequent loads (e.g.
after reset).

Signed-off-by: Michał Winiarski <michal.winiarski@intel.com>
Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20240219130530.1406044-2-michal.winiarski@intel.com
drivers/gpu/drm/xe/xe_huc.c
drivers/gpu/drm/xe/xe_huc.h
drivers/gpu/drm/xe/xe_uc.c

index eca109791c6ae649456ca68be14777225e2bef6a..b545f850087cd8b9a7ae0031a2feb1fadba9458b 100644 (file)
@@ -112,6 +112,25 @@ out:
        return ret;
 }
 
+int xe_huc_init_post_hwconfig(struct xe_huc *huc)
+{
+       struct xe_tile *tile = gt_to_tile(huc_to_gt(huc));
+       struct xe_device *xe = huc_to_xe(huc);
+       int ret;
+
+       if (!IS_DGFX(huc_to_xe(huc)))
+               return 0;
+
+       if (!xe_uc_fw_is_loadable(&huc->fw))
+               return 0;
+
+       ret = xe_managed_bo_reinit_in_vram(xe, tile, &huc->fw.bo);
+       if (ret)
+               return ret;
+
+       return 0;
+}
+
 int xe_huc_upload(struct xe_huc *huc)
 {
        if (!xe_uc_fw_is_loadable(&huc->fw))
index 532017230287ff1f5c938af804c445002934da3f..3ab56cc14b00a7d9cbe3f33597614b4321b28d7e 100644 (file)
@@ -17,6 +17,7 @@ enum xe_huc_auth_types {
 };
 
 int xe_huc_init(struct xe_huc *huc);
+int xe_huc_init_post_hwconfig(struct xe_huc *huc);
 int xe_huc_upload(struct xe_huc *huc);
 int xe_huc_auth(struct xe_huc *huc, enum xe_huc_auth_types type);
 bool xe_huc_is_authenticated(struct xe_huc *huc, enum xe_huc_auth_types type);
index 8f37a809525fb39935de28570d41b301ea728244..d62137306d280880394e5d95d5c3bbe5599f44ba 100644 (file)
@@ -94,6 +94,10 @@ int xe_uc_init_post_hwconfig(struct xe_uc *uc)
        if (err)
                return err;
 
+       err = xe_huc_init_post_hwconfig(&uc->huc);
+       if (err)
+               return err;
+
        return xe_gsc_init_post_hwconfig(&uc->gsc);
 }