drm/xe/vf: Setup memory based interrupts in GuC
authorMichal Wajdeczko <michal.wajdeczko@intel.com>
Mon, 18 Dec 2023 16:53:43 +0000 (17:53 +0100)
committerRodrigo Vivi <rodrigo.vivi@intel.com>
Thu, 21 Dec 2023 21:31:29 +0000 (16:31 -0500)
When Memory Based Interrupts are used, the VF driver must provide
to the GuC references to the Source and Status Report Pages.

Reviewed-by: Matt Roper <matthew.d.roper@intel.com>
Link: https://lore.kernel.org/r/20231214185955.1791-10-michal.wajdeczko@intel.com
Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
drivers/gpu/drm/xe/xe_guc.c

index 76b31d542e1ae546bb42190f07789ffbe30b56f4..811e8b20127055d4d7bee6fd8e31d72e6df030ed 100644 (file)
 #include "xe_guc_log.h"
 #include "xe_guc_pc.h"
 #include "xe_guc_submit.h"
+#include "xe_memirq.h"
 #include "xe_mmio.h"
 #include "xe_platform_types.h"
+#include "xe_sriov.h"
 #include "xe_uc.h"
 #include "xe_uc_fw.h"
 #include "xe_wa.h"
@@ -568,10 +570,20 @@ static void guc_enable_irq(struct xe_guc *guc)
 
 int xe_guc_enable_communication(struct xe_guc *guc)
 {
+       struct xe_device *xe = guc_to_xe(guc);
        int err;
 
        guc_enable_irq(guc);
 
+       if (IS_SRIOV_VF(xe) && xe_device_has_memirq(xe)) {
+               struct xe_gt *gt = guc_to_gt(guc);
+               struct xe_tile *tile = gt_to_tile(gt);
+
+               err = xe_memirq_init_guc(&tile->sriov.vf.memirq, guc);
+               if (err)
+                       return err;
+       }
+
        xe_mmio_rmw32(guc_to_gt(guc), PMINTRMSK,
                      ARAT_EXPIRED_INTRMSK, 0);