From patchwork Thu Dec 21 17:08:22 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Andi Shyti X-Patchwork-Id: 13502410 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 1DFB4C35274 for ; Thu, 21 Dec 2023 17:08:55 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 9B6F710E361; Thu, 21 Dec 2023 17:08:52 +0000 (UTC) Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.10]) by gabe.freedesktop.org (Postfix) with ESMTPS id 7FD8210E361; Thu, 21 Dec 2023 17:08:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1703178532; x=1734714532; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=AkxWMgw+yDJcpjwi6ib/cCtRhejLGQ2UQuetkG7rgdo=; b=RNc8y1e8xNZwSBQYjK3p1zoRjw94rnX88e7/YthUReu9sCe7/VMnVuQN mcJUW+uhsQSFwOARXKDmVuot8EAJ2xiSzW83o+88hO5NnC9n4fZZox979 ExOKWnOvb2182Pi4DXzDLbHthGo3bFsu6RbJjQDpJf1idZROSx73iwX+e MoyhAa/PEP35oBVZpfH6HPvr8I52UAmQo7usbnQ455b/Hf0kZ/OJ3qj3e T/6KDAwFtbzX1SddWr+jpU00jg8KfOSjsP61wtKXjtTIk1LOUpAZ0GVUv fAyb4LFoUazQ0DscjHRHR+6cGedC9N+R5vok7BGwtgqdaxr191WCH5LtD g==; X-IronPort-AV: E=McAfee;i="6600,9927,10931"; a="9382742" X-IronPort-AV: E=Sophos;i="6.04,293,1695711600"; d="scan'208";a="9382742" Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by orvoesa102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Dec 2023 09:08:51 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10931"; a="867377218" X-IronPort-AV: E=Sophos;i="6.04,293,1695711600"; d="scan'208";a="867377218" Received: from dgiardin-mobl.ger.corp.intel.com (HELO intel.com) ([10.249.35.73]) by fmsmga003-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Dec 2023 09:08:47 -0800 From: Andi Shyti To: intel-gfx , dri-devel Subject: [PATCH 1/3] drm/i915/gt: Support fixed CCS mode Date: Thu, 21 Dec 2023 18:08:22 +0100 Message-ID: <20231221170825.356970-2-andi.shyti@linux.intel.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20231221170825.356970-1-andi.shyti@linux.intel.com> References: <20231221170825.356970-1-andi.shyti@linux.intel.com> MIME-Version: 1.0 X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Chris Wilson Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" The CCS mode involves assigning CCS engines to slices depending on the number of slices and the number of engines the user wishes to set. In this patch, the default CCS setting is established during the initial GT settings. It involves assigning only one CCS to all the slices. Based on a patch by Chris Wilson and Tejas Upadhyay . Signed-off-by: Andi Shyti Cc: Chris Wilson Cc: Joonas Lahtinen Cc: Niranjana Vishwanathapura Cc: Tejas Upadhyay --- drivers/gpu/drm/i915/Makefile | 1 + drivers/gpu/drm/i915/gt/intel_gt.c | 6 ++ drivers/gpu/drm/i915/gt/intel_gt_ccs_mode.c | 81 +++++++++++++++++++++ drivers/gpu/drm/i915/gt/intel_gt_ccs_mode.h | 16 ++++ drivers/gpu/drm/i915/gt/intel_gt_regs.h | 13 ++++ drivers/gpu/drm/i915/gt/intel_gt_types.h | 20 +++++ drivers/gpu/drm/i915/i915_drv.h | 2 + 7 files changed, 139 insertions(+) create mode 100644 drivers/gpu/drm/i915/gt/intel_gt_ccs_mode.c create mode 100644 drivers/gpu/drm/i915/gt/intel_gt_ccs_mode.h diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile index e777686190ca..1dce15d6306b 100644 --- a/drivers/gpu/drm/i915/Makefile +++ b/drivers/gpu/drm/i915/Makefile @@ -119,6 +119,7 @@ gt-y += \ gt/intel_ggtt_fencing.o \ gt/intel_gt.o \ gt/intel_gt_buffer_pool.o \ + gt/intel_gt_ccs_mode.o \ gt/intel_gt_clock_utils.o \ gt/intel_gt_debugfs.o \ gt/intel_gt_engines_debugfs.o \ diff --git a/drivers/gpu/drm/i915/gt/intel_gt.c b/drivers/gpu/drm/i915/gt/intel_gt.c index a425db5ed3a2..e83c7b80c07a 100644 --- a/drivers/gpu/drm/i915/gt/intel_gt.c +++ b/drivers/gpu/drm/i915/gt/intel_gt.c @@ -17,6 +17,7 @@ #include "intel_engine_regs.h" #include "intel_ggtt_gmch.h" #include "intel_gt.h" +#include "intel_gt_ccs_mode.h" #include "intel_gt_buffer_pool.h" #include "intel_gt_clock_utils.h" #include "intel_gt_debugfs.h" @@ -47,6 +48,7 @@ void intel_gt_common_init_early(struct intel_gt *gt) init_llist_head(>->watchdog.list); INIT_WORK(>->watchdog.work, intel_gt_watchdog_work); + intel_gt_init_ccs_mode(gt); intel_gt_init_buffer_pool(gt); intel_gt_init_reset(gt); intel_gt_init_requests(gt); @@ -195,6 +197,9 @@ int intel_gt_init_hw(struct intel_gt *gt) intel_gt_init_swizzling(gt); + /* Configure CCS mode */ + intel_gt_apply_ccs_mode(gt); + /* * At least 830 can leave some of the unused rings * "active" (ie. head != tail) after resume which @@ -860,6 +865,7 @@ void intel_gt_driver_late_release_all(struct drm_i915_private *i915) for_each_gt(gt, i915, id) { intel_uc_driver_late_release(>->uc); + intel_gt_fini_ccs_mode(gt); intel_gt_fini_requests(gt); intel_gt_fini_reset(gt); intel_gt_fini_timelines(gt); diff --git a/drivers/gpu/drm/i915/gt/intel_gt_ccs_mode.c b/drivers/gpu/drm/i915/gt/intel_gt_ccs_mode.c new file mode 100644 index 000000000000..fab8a77bded2 --- /dev/null +++ b/drivers/gpu/drm/i915/gt/intel_gt_ccs_mode.c @@ -0,0 +1,81 @@ +//SPDX-License-Identifier: MIT +/* + * Copyright © 2023 Intel Corporation + */ + +#include "i915_drv.h" + +#include "intel_gt.h" +#include "intel_gt_ccs_mode.h" +#include "intel_gt_regs.h" +#include "intel_gt_types.h" + +static void __intel_gt_apply_ccs_mode(struct intel_gt *gt) +{ + u32 mode = XEHP_CCS_MODE_CSLICE_0_3_MASK; /* disable all by default */ + int num_slices = hweight32(CCS_MASK(gt)); + int num_engines = gt->ccs.mode; + int slice = 0; + int i; + + if (!num_engines) + return; + + /* + * Loop over all available slices and assign each a user engine. + * + * With 1 engine (ccs0): + * slice 0, 1, 2, 3: ccs0 + * + * With 2 engines (ccs0, ccs1): + * slice 0, 2: ccs0 + * slice 1, 3: ccs1 + * + * With 4 engines (ccs0, ccs1, ccs2, ccs3): + * slice 0: ccs0 + * slice 1: ccs1 + * slice 2: ccs2 + * slice 3: ccs3 + * + * Since the number of slices and the number of engines is + * known, and we ensure that there is an exact multiple of + * engines for slices, the double loop becomes a loop over each + * slice. + */ + for (i = num_slices / num_engines; i < num_slices; i++) { + struct intel_engine_cs *engine; + intel_engine_mask_t tmp; + + for_each_engine_masked(engine, gt, ALL_CCS(gt), tmp) { + /* If a slice is fused off, leave disabled */ + while (!(CCS_MASK(gt) & BIT(slice))) + slice++; + + mode &= ~XEHP_CCS_MODE_CSLICE(slice, XEHP_CCS_MODE_CSLICE_MASK); + mode |= XEHP_CCS_MODE_CSLICE(slice, engine->instance); + + /* assign the next slice */ + slice++; + } + } + + intel_uncore_write(gt->uncore, XEHP_CCS_MODE, mode); +} + +void intel_gt_apply_ccs_mode(struct intel_gt *gt) +{ + mutex_lock(>->ccs.mutex); + __intel_gt_apply_ccs_mode(gt); + mutex_unlock(>->ccs.mutex); +} + +void intel_gt_init_ccs_mode(struct intel_gt *gt) +{ + mutex_init(>->ccs.mutex); + gt->ccs.mode = 1; +} + +void intel_gt_fini_ccs_mode(struct intel_gt *gt) +{ + mutex_destroy(>->ccs.mutex); +} diff --git a/drivers/gpu/drm/i915/gt/intel_gt_ccs_mode.h b/drivers/gpu/drm/i915/gt/intel_gt_ccs_mode.h new file mode 100644 index 000000000000..751c5700944b --- /dev/null +++ b/drivers/gpu/drm/i915/gt/intel_gt_ccs_mode.h @@ -0,0 +1,16 @@ +/* SPDX-License-Identifier: MIT */ +/* + * Copyright © 2023 Intel Corporation + */ + +#ifndef INTEL_GT_CCS_MODE_H +#define INTEL_GT_CCS_MODE_H + +struct intel_gt; + +void intel_gt_init_ccs_mode(struct intel_gt *gt); +void intel_gt_fini_ccs_mode(struct intel_gt *gt); + +void intel_gt_apply_ccs_mode(struct intel_gt *gt); + +#endif /* INTEL_GT_CCS_MODE_H */ diff --git a/drivers/gpu/drm/i915/gt/intel_gt_regs.h b/drivers/gpu/drm/i915/gt/intel_gt_regs.h index 50962cfd1353..3e558d6d5e89 100644 --- a/drivers/gpu/drm/i915/gt/intel_gt_regs.h +++ b/drivers/gpu/drm/i915/gt/intel_gt_regs.h @@ -1604,6 +1604,19 @@ #define GEN12_VOLTAGE_MASK REG_GENMASK(10, 0) #define GEN12_CAGF_MASK REG_GENMASK(19, 11) +/* + * Total of 4 cslices, where each cslice is in the form: + * [0-3] CCS ID + * [4-6] RSVD + * [7] Disabled + */ +#define XEHP_CCS_MODE _MMIO(0x14804) +#define XEHP_CCS_MODE_CSLICE_0_3_MASK REG_GENMASK(11, 0) +#define XEHP_CCS_MODE_CSLICE_MASK 0x7 /* CCS0-3 + rsvd */ +#define XEHP_CCS_MODE_CSLICE_WIDTH ilog2(XEHP_CCS_MODE_CSLICE_MASK + 1) +#define XEHP_CCS_MODE_CSLICE(cslice, ccs) \ + (ccs << (cslice * XEHP_CCS_MODE_CSLICE_WIDTH)) + #define GEN11_GT_INTR_DW(x) _MMIO(0x190018 + ((x) * 4)) #define GEN11_CSME (31) #define GEN12_HECI_2 (30) diff --git a/drivers/gpu/drm/i915/gt/intel_gt_types.h b/drivers/gpu/drm/i915/gt/intel_gt_types.h index def7dd0eb6f1..6abd93c299c4 100644 --- a/drivers/gpu/drm/i915/gt/intel_gt_types.h +++ b/drivers/gpu/drm/i915/gt/intel_gt_types.h @@ -207,6 +207,26 @@ struct intel_gt { [MAX_ENGINE_INSTANCE + 1]; enum intel_submission_method submission_method; + /* + * Track fixed mapping between CCS engines and compute slices. + * + * In order to w/a HW that has the inability to dynamically load + * balance between CCS engines and EU in the compute slices, we have to + * reconfigure a static mapping on the fly. We track the current CCS + * configuration (determined by inspection of the user's engine + * selection during execbuf) and compare it against the current + * CCS_MODE (which maps CCS engines to compute slices). If there is + * only a single engine selected, we can map it to all available + * compute slices for maximal single task performance (fast/narrow). If + * there are more then one engine selected, we have to reduce the + * number of slices allocated to each engine (wide/slow), fairly + * distributing the EU between the equivalent engines. + */ + struct { + struct mutex mutex; + u32 mode; + } ccs; + /* * Default address space (either GGTT or ppGTT depending on arch). * diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h index e81b3b2858ac..cd85889ecfe4 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h @@ -659,6 +659,8 @@ IS_SUBPLATFORM(const struct drm_i915_private *i915, #define CCS_MASK(gt) \ ENGINE_INSTANCES_MASK(gt, CCS0, I915_MAX_CCS) +#define ALL_CCS(gt) (CCS_MASK(gt) << CCS0) + #define HAS_MEDIA_RATIO_MODE(i915) (INTEL_INFO(i915)->has_media_ratio_mode) /* From patchwork Thu Dec 21 17:08:23 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andi Shyti X-Patchwork-Id: 13502411 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 B8224C35274 for ; Thu, 21 Dec 2023 17:08:58 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 1AD9F10E376; Thu, 21 Dec 2023 17:08:56 +0000 (UTC) Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.10]) by gabe.freedesktop.org (Postfix) with ESMTPS id EF3B610E375; Thu, 21 Dec 2023 17:08:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1703178535; x=1734714535; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=c501XbbTAXstC29zB4+v+B7E+LETyaMn8iPatwaRnYo=; b=dxbcs/lhQdu0o8rjz/Cb6gYuMDEskIs2e3lMQxpzL9XcGyL/qsJkNUSG m0NwQdc4b3eAiiEDG+yYdDEJ8zffOrZ7UONUCmmDLBxzXPLC/46BxFErS MYDlGCQelecYKvxm+Nn47Tv9f8soyLUQN4pwPjXSxPXl9oNF1+Thxki7/ Zr+hp1dF5btrmkszbk+ZkZ9z6xzrYAYPZ/RhjhO8WLAK2wD/3I2iYQpTK Njx48Gq3Tqm02qyMt39K05FJqZgZKM1OrOl883uQCKQL+rsMHuU1uuEB+ kRxV8kjRm93IPhmXWhQ6D5seM3wUdMMVKaWg4BSPxEM8NUAHehNuSOBOS Q==; X-IronPort-AV: E=McAfee;i="6600,9927,10931"; a="9382775" X-IronPort-AV: E=Sophos;i="6.04,293,1695711600"; d="scan'208";a="9382775" Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by orvoesa102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Dec 2023 09:08:55 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10931"; a="867377227" X-IronPort-AV: E=Sophos;i="6.04,293,1695711600"; d="scan'208";a="867377227" Received: from dgiardin-mobl.ger.corp.intel.com (HELO intel.com) ([10.249.35.73]) by fmsmga003-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Dec 2023 09:08:51 -0800 From: Andi Shyti To: intel-gfx , dri-devel Subject: [PATCH 2/3] drm/i915/gt: Allow user to set up the CSS mode Date: Thu, 21 Dec 2023 18:08:23 +0100 Message-ID: <20231221170825.356970-3-andi.shyti@linux.intel.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20231221170825.356970-1-andi.shyti@linux.intel.com> References: <20231221170825.356970-1-andi.shyti@linux.intel.com> MIME-Version: 1.0 X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Chris Wilson Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" Now that the CCS mode is configurable, an interface has been exposed in the GT's sysfs set of files, allowing users to set the mode. Additionally, another interface has been added to display the number of available slices, named 'num_slices.' Signed-off-by: Andi Shyti Cc: Chris Wilson Cc: Joonas Lahtinen Cc: Niranjana Vishwanathapura Cc: Tejas Upadhyay --- drivers/gpu/drm/i915/gt/intel_gt_ccs_mode.c | 68 +++++++++++++++++++++ drivers/gpu/drm/i915/gt/intel_gt_ccs_mode.h | 1 + drivers/gpu/drm/i915/gt/intel_gt_sysfs.c | 2 + 3 files changed, 71 insertions(+) diff --git a/drivers/gpu/drm/i915/gt/intel_gt_ccs_mode.c b/drivers/gpu/drm/i915/gt/intel_gt_ccs_mode.c index fab8a77bded2..88663698eb1f 100644 --- a/drivers/gpu/drm/i915/gt/intel_gt_ccs_mode.c +++ b/drivers/gpu/drm/i915/gt/intel_gt_ccs_mode.c @@ -7,6 +7,7 @@ #include "intel_gt.h" #include "intel_gt_ccs_mode.h" +#include "intel_gt_print.h" #include "intel_gt_regs.h" #include "intel_gt_types.h" @@ -79,3 +80,70 @@ void intel_gt_fini_ccs_mode(struct intel_gt *gt) { mutex_destroy(>->ccs.mutex); } + +static ssize_t +ccs_mode_show(struct kobject *kobj, struct kobj_attribute *attr, char *buff) +{ + struct intel_gt *gt = container_of(kobj, struct intel_gt, sysfs_gt); + + return sysfs_emit(buff, "%u\n", gt->ccs.mode); +} + +static ssize_t +ccs_mode_store(struct kobject *kobj, struct kobj_attribute *attr, + const char *buff, size_t count) +{ + struct intel_gt *gt = container_of(kobj, struct intel_gt, sysfs_gt); + int num_slices = hweight32(CCS_MASK(gt)); + int err; + u32 val; + + err = kstrtou32(buff, 0, &val); + if (err) + return err; + + if ((!val) || (val > num_slices) || (val % num_slices)) + return -EINVAL; + + mutex_lock(>->ccs.mutex); + + if (val == gt->ccs.mode) + goto out; + + gt->ccs.mode = val; + intel_gt_apply_ccs_mode(gt); + +out: + mutex_unlock(>->ccs.mutex); + + return count; +} + +static ssize_t +num_slices_show(struct kobject *kobj, struct kobj_attribute *attr, char *buff) +{ + struct intel_gt *gt = container_of(kobj, struct intel_gt, sysfs_gt); + u32 num_slices; + + num_slices = hweight32(CCS_MASK(gt)); + + return sysfs_emit(buff, "%u\n", num_slices); +} + +static struct kobj_attribute ccs_mode = __ATTR_RW(ccs_mode); +static struct kobj_attribute num_slices = __ATTR_RO(num_slices); + +static const struct attribute * const ccs_mode_attrs[] = { + &ccs_mode.attr, + &num_slices.attr, + NULL +}; + +void intel_gt_sysfs_ccs_mode(struct intel_gt *gt) +{ + int ret; + + ret = sysfs_create_files(>->sysfs_gt, ccs_mode_attrs); + if (ret) + gt_warn(gt, "Failed to create ccs mode sysfs files"); +} diff --git a/drivers/gpu/drm/i915/gt/intel_gt_ccs_mode.h b/drivers/gpu/drm/i915/gt/intel_gt_ccs_mode.h index 751c5700944b..ae96de1b36c5 100644 --- a/drivers/gpu/drm/i915/gt/intel_gt_ccs_mode.h +++ b/drivers/gpu/drm/i915/gt/intel_gt_ccs_mode.h @@ -12,5 +12,6 @@ void intel_gt_init_ccs_mode(struct intel_gt *gt); void intel_gt_fini_ccs_mode(struct intel_gt *gt); void intel_gt_apply_ccs_mode(struct intel_gt *gt); +void intel_gt_sysfs_ccs_mode(struct intel_gt *gt); #endif /* INTEL_GT_CCS_MODE_H */ diff --git a/drivers/gpu/drm/i915/gt/intel_gt_sysfs.c b/drivers/gpu/drm/i915/gt/intel_gt_sysfs.c index 33cba406b569..a0290347938d 100644 --- a/drivers/gpu/drm/i915/gt/intel_gt_sysfs.c +++ b/drivers/gpu/drm/i915/gt/intel_gt_sysfs.c @@ -12,6 +12,7 @@ #include "i915_drv.h" #include "i915_sysfs.h" #include "intel_gt.h" +#include "intel_gt_ccs_mode.h" #include "intel_gt_print.h" #include "intel_gt_sysfs.h" #include "intel_gt_sysfs_pm.h" @@ -101,6 +102,7 @@ void intel_gt_sysfs_register(struct intel_gt *gt) goto exit_fail; intel_gt_sysfs_pm_init(gt, >->sysfs_gt); + intel_gt_sysfs_ccs_mode(gt); return; From patchwork Thu Dec 21 17:08:24 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andi Shyti X-Patchwork-Id: 13502412 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 56E9DC46CCD for ; Thu, 21 Dec 2023 17:09:59 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id B220910E6DE; Thu, 21 Dec 2023 17:09:58 +0000 (UTC) Received: from mgamail.intel.com (mgamail.intel.com [192.55.52.43]) by gabe.freedesktop.org (Postfix) with ESMTPS id 555AB10E375; Thu, 21 Dec 2023 17:09:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1703178597; x=1734714597; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=DC5wUxyUZuDXqHwb6BLbsrDJRiz4sPLtJ5GVpqfvxUU=; b=IfzJJcI8XBlTYDP6+8l0EbhR0uXApWiqpgT2UeoxYs/jnAAqpRyml3KQ iCK6O9G6q7IN0HSw38ScpU0b5siB9KLhN6DOKVZOhmBI2rHnivxHmCIUn QqOOxLLJcCdwtXp4w40JB7H+pVAk3U3GKcd8lxcqY2sf98NCwpIcl4hWY +iw9YysG3kDqJhXeZTqzxsCnBk1Rk20ufYkwkEy/5fvudGB9woegNFgF9 pn8HH6X4h8VllJhSlRabZKhRanOTdkHYVAMmFQzSkssG2WpaetcLhB0MC KSXVi6RXxWSAfGE6rt+UyHSV9rv1T1YlO/wpv4sIu1SMeZbOHP7o4DKwK w==; X-IronPort-AV: E=McAfee;i="6600,9927,10931"; a="482188830" X-IronPort-AV: E=Sophos;i="6.04,293,1695711600"; d="scan'208";a="482188830" Received: from orsmga007.jf.intel.com ([10.7.209.58]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Dec 2023 09:08:58 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10931"; a="770008528" X-IronPort-AV: E=Sophos;i="6.04,293,1695711600"; d="scan'208";a="770008528" Received: from dgiardin-mobl.ger.corp.intel.com (HELO intel.com) ([10.249.35.73]) by orsmga007-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Dec 2023 09:08:56 -0800 From: Andi Shyti To: intel-gfx , dri-devel Subject: [PATCH 3/3] drm/i915/gt: Disable HW load balancing for CCS Date: Thu, 21 Dec 2023 18:08:24 +0100 Message-ID: <20231221170825.356970-4-andi.shyti@linux.intel.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20231221170825.356970-1-andi.shyti@linux.intel.com> References: <20231221170825.356970-1-andi.shyti@linux.intel.com> MIME-Version: 1.0 X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Chris Wilson Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" The hardware is not able to dynamically balance the load between CCS engines. Wa_16016805146 suggests disabling it for all platforms. Signed-off-by: Andi Shyti Cc: Chris Wilson Cc: Joonas Lahtinen Cc: Niranjana Vishwanathapura Cc: Tejas Upadhyay --- drivers/gpu/drm/i915/gt/intel_gt_regs.h | 1 + drivers/gpu/drm/i915/gt/intel_workarounds.c | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/drivers/gpu/drm/i915/gt/intel_gt_regs.h b/drivers/gpu/drm/i915/gt/intel_gt_regs.h index 3e558d6d5e89..edaa446abd91 100644 --- a/drivers/gpu/drm/i915/gt/intel_gt_regs.h +++ b/drivers/gpu/drm/i915/gt/intel_gt_regs.h @@ -1478,6 +1478,7 @@ #define GEN12_RCU_MODE _MMIO(0x14800) #define GEN12_RCU_MODE_CCS_ENABLE REG_BIT(0) +#define XEHP_RCU_MODE_FIXED_SLICE_CCS_MODE REG_BIT(1) #define CHV_FUSE_GT _MMIO(VLV_GUNIT_BASE + 0x2168) #define CHV_FGT_DISABLE_SS0 (1 << 10) diff --git a/drivers/gpu/drm/i915/gt/intel_workarounds.c b/drivers/gpu/drm/i915/gt/intel_workarounds.c index 3eacbc50caf8..a7718f7d2925 100644 --- a/drivers/gpu/drm/i915/gt/intel_workarounds.c +++ b/drivers/gpu/drm/i915/gt/intel_workarounds.c @@ -2978,6 +2978,12 @@ general_render_compute_wa_init(struct intel_engine_cs *engine, struct i915_wa_li wa_mcr_masked_en(wal, GEN8_HALF_SLICE_CHICKEN1, GEN7_PSD_SINGLE_PORT_DISPATCH_ENABLE); } + + /* + * Wa_16016805146: disable the CCS load balancing + * indiscriminately for all the platforms + */ + wa_masked_en(wal, GEN12_RCU_MODE, XEHP_RCU_MODE_FIXED_SLICE_CCS_MODE); } static void