From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 5B576C5321D for ; Thu, 22 Aug 2024 13:08:38 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 062A110E9D0; Thu, 22 Aug 2024 13:08:38 +0000 (UTC) Received: from mail02.habana.ai (habanamailrelay.habana.ai [213.57.90.13]) by gabe.freedesktop.org (Postfix) with ESMTPS id 0551610E99D for ; Thu, 22 Aug 2024 13:08:35 +0000 (UTC) Received: internal info suppressed Received: from illevi-vm-u22.habana-labs.com (localhost [127.0.0.1]) by illevi-vm-u22.habana-labs.com (8.15.2/8.15.2/Debian-22ubuntu3) with ESMTP id 47MD8FbK1355458; Thu, 22 Aug 2024 16:08:16 +0300 From: Ilia Levi To: intel-xe@lists.freedesktop.org Cc: ilia.levi@intel.com, michal.wajdeczko@intel.com, niranjana.vishwanathapura@intel.com, koby.elbaz@intel.com, yaron.avizrat@intel.com Subject: [PATCH 5/5] drm/xe: separate memirq reset/postinstall from vf Date: Thu, 22 Aug 2024 16:08:15 +0300 Message-ID: <20240822130815.1355437-6-ilia.levi@intel.com> X-Mailer: git-send-email 2.43.2 In-Reply-To: <20240822130815.1355437-1-ilia.levi@intel.com> References: <20240822130815.1355437-1-ilia.levi@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: intel-xe@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel Xe graphics driver List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-xe-bounces@lists.freedesktop.org Sender: "Intel-xe" Up until now only VF used Memory Based Interrupts (memirq). Moving reset/postinstall flows out of VF to cater for other usages. Signed-off-by: Ilia Levi --- drivers/gpu/drm/xe/xe_device.c | 2 +- drivers/gpu/drm/xe/xe_device.h | 6 ++++++ drivers/gpu/drm/xe/xe_irq.c | 36 +++++++++++++++++++--------------- 3 files changed, 27 insertions(+), 17 deletions(-) diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/xe_device.c index c4f8bfd08b09..a23fb0c81ca6 100644 --- a/drivers/gpu/drm/xe/xe_device.c +++ b/drivers/gpu/drm/xe/xe_device.c @@ -660,7 +660,7 @@ int xe_device_probe(struct xe_device *xe) err = xe_ggtt_init_early(tile->mem.ggtt); if (err) return err; - if (IS_SRIOV_VF(xe)) { + if (xe_device_needs_memirq(xe)) { err = xe_memirq_init(&tile->memirq, false); if (err) return err; diff --git a/drivers/gpu/drm/xe/xe_device.h b/drivers/gpu/drm/xe/xe_device.h index f052c06a2d2f..4ba07617084c 100644 --- a/drivers/gpu/drm/xe/xe_device.h +++ b/drivers/gpu/drm/xe/xe_device.h @@ -9,6 +9,7 @@ #include #include "xe_device_types.h" +#include "xe_sriov.h" static inline struct xe_device *to_xe_device(const struct drm_device *dev) { @@ -154,6 +155,11 @@ static inline bool xe_device_has_memirq(struct xe_device *xe) return GRAPHICS_VERx100(xe) >= 1250; } +static inline bool xe_device_needs_memirq(struct xe_device *xe) +{ + return IS_SRIOV_VF(xe) && xe_device_has_memirq(xe); +} + u32 xe_device_ccs_bytes(struct xe_device *xe, u64 size); void xe_device_snapshot_print(struct xe_device *xe, struct drm_printer *p); diff --git a/drivers/gpu/drm/xe/xe_irq.c b/drivers/gpu/drm/xe/xe_irq.c index 18a5272d9bb0..a080d4869b16 100644 --- a/drivers/gpu/drm/xe/xe_irq.c +++ b/drivers/gpu/drm/xe/xe_irq.c @@ -559,17 +559,15 @@ static void vf_irq_reset(struct xe_device *xe) xe_assert(xe, IS_SRIOV_VF(xe)); - if (GRAPHICS_VERx100(xe) < 1210) - xelp_intr_disable(xe); - else + if (GRAPHICS_VERx100(xe) >= 1210) { xe_assert(xe, xe_device_has_memirq(xe)); - - for_each_tile(tile, xe, id) { - if (xe_device_has_memirq(xe)) - xe_memirq_reset(&tile->memirq); - else - gt_irq_reset(tile); + return; } + + xelp_intr_disable(xe); + + for_each_tile(tile, xe, id) + gt_irq_reset(tile); } static void xe_irq_reset(struct xe_device *xe) @@ -577,6 +575,11 @@ static void xe_irq_reset(struct xe_device *xe) struct xe_tile *tile; u8 id; + if (xe_device_needs_memirq(xe)) { + for_each_tile(tile, xe, id) + xe_memirq_reset(&tile->memirq); + } + if (IS_SRIOV_VF(xe)) return vf_irq_reset(xe); @@ -604,13 +607,6 @@ static void xe_irq_reset(struct xe_device *xe) static void vf_irq_postinstall(struct xe_device *xe) { - struct xe_tile *tile; - unsigned int id; - - for_each_tile(tile, xe, id) - if (xe_device_has_memirq(xe)) - xe_memirq_postinstall(&tile->memirq); - if (GRAPHICS_VERx100(xe) < 1210) xelp_intr_enable(xe, true); else @@ -619,6 +615,14 @@ static void vf_irq_postinstall(struct xe_device *xe) static void xe_irq_postinstall(struct xe_device *xe) { + struct xe_tile *tile; + unsigned int id; + + if (xe_device_needs_memirq(xe)) { + for_each_tile(tile, xe, id) + xe_memirq_postinstall(&tile->memirq); + } + if (IS_SRIOV_VF(xe)) return vf_irq_postinstall(xe); -- 2.43.2