[Intel-xe] [CI 09/10] drm/xe/gsc: Define GSCCS for MTL

Daniele Ceraolo Spurio daniele.ceraolospurio at intel.com
Mon Nov 20 21:22:27 UTC 2023



On 11/20/2023 3:49 AM, Kandpal, Suraj wrote:
>
>> -----Original Message-----
>> From: Intel-xe <intel-xe-bounces at lists.freedesktop.org> On Behalf Of Daniele
>> Ceraolo Spurio
>> Sent: Saturday, November 18, 2023 4:22 AM
>> To: intel-xe at lists.freedesktop.org
>> Subject: [Intel-xe] [CI 09/10] drm/xe/gsc: Define GSCCS for MTL
>>
>> Add the GSCCS to the media_xelpmp engine list. Note that since the GSCCS is
>> only used with the GSC FW, we can consider it disabled if we don't have the
>> FW available.
>>
>> v2: mark GSCCS as allowed on the media IP in kunit tests
>>
>> Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio at intel.com>
>> Cc: Alan Previn <alan.previn.teres.alexis at intel.com>
>> Reviewed-by: John Harrison <John.C.Harrison at Intel.com>
>> ---
>>   drivers/gpu/drm/xe/tests/xe_pci_test.c |  9 +++------
>>   drivers/gpu/drm/xe/xe_hw_engine.c      | 20 ++++++++++++++++++++
>>   drivers/gpu/drm/xe/xe_pci.c            |  2 +-
>>   3 files changed, 24 insertions(+), 7 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/xe/tests/xe_pci_test.c
>> b/drivers/gpu/drm/xe/tests/xe_pci_test.c
>> index 9c6f6c2c6c6e..98ecab51154e 100644
>> --- a/drivers/gpu/drm/xe/tests/xe_pci_test.c
>> +++ b/drivers/gpu/drm/xe/tests/xe_pci_test.c
>> @@ -33,13 +33,10 @@ static void check_media_ip(const struct
>> xe_media_desc *media)
>>   	struct kunit *test = xe_cur_kunit();
>>   	u64 mask = media->hw_engine_mask;
>>
>> -	/*
>> -	 * VCS and VECS engines are allowed on the media IP
>> -	 *
>> -	 * TODO:  Add GSCCS once support is added to the driver.
>> -	 */
>> +	/* VCS, VECS and GSCCS engines are allowed on the media IP */
>>   	mask &= ~(XE_HW_ENGINE_VCS_MASK |
>> -		  XE_HW_ENGINE_VECS_MASK);
>> +		  XE_HW_ENGINE_VECS_MASK |
>> +		  XE_HW_ENGINE_GSCCS_MASK);
>>
>>   	/* Any remaining engines are an error */
>>   	KUNIT_ASSERT_EQ(test, mask, 0);
>> diff --git a/drivers/gpu/drm/xe/xe_hw_engine.c
>> b/drivers/gpu/drm/xe/xe_hw_engine.c
>> index e831e63c5e48..c52c26c395a7 100644
>> --- a/drivers/gpu/drm/xe/xe_hw_engine.c
>> +++ b/drivers/gpu/drm/xe/xe_hw_engine.c
>> @@ -26,6 +26,7 @@
>>   #include "xe_rtp.h"
>>   #include "xe_sched_job.h"
>>   #include "xe_tuning.h"
>> +#include "xe_uc_fw.h"
>>   #include "xe_wa.h"
>>
>>   #define MAX_MMIO_BASES 3
>> @@ -610,6 +611,24 @@ static void read_compute_fuses(struct xe_gt *gt)
>>   		read_compute_fuses_from_dss(gt);
>>   }
>>
>> +static void check_gsc_availability(struct xe_gt *gt) {
>> +	struct xe_device *xe = gt_to_xe(gt);
>> +
>> +	if (!(gt->info.engine_mask & BIT(XE_HW_ENGINE_GSCCS0)))
>> +		return;
>> +
>> +	/*
>> +	 * The GSCCS is only used to communicate with the GSC FW, so if we
>> don't
>> +	 * have the FW there is nothing we need the engine for and can
>> therefore
>> +	 * skip its initialization.
>> +	 */
>> +	if (!xe_uc_fw_is_available(&gt->uc.gsc.fw)) {
>> +		gt->info.engine_mask &= ~BIT(XE_HW_ENGINE_GSCCS0);
>> +		drm_info(&xe->drm, "gsccs disabled due to lack of FW\n");
>> +	}
>> +}
>> +
>>   int xe_hw_engines_init_early(struct xe_gt *gt)  {
>>   	int i;
>> @@ -617,6 +636,7 @@ int xe_hw_engines_init_early(struct xe_gt *gt)
>>   	read_media_fuses(gt);
>>   	read_copy_fuses(gt);
>>   	read_compute_fuses(gt);
>> +	check_gsc_availability(gt);
>>
>>   	BUILD_BUG_ON(XE_HW_ENGINE_PREEMPT_TIMEOUT <
>> XE_HW_ENGINE_PREEMPT_TIMEOUT_MIN);
>>   	BUILD_BUG_ON(XE_HW_ENGINE_PREEMPT_TIMEOUT >
>> XE_HW_ENGINE_PREEMPT_TIMEOUT_MAX);
>> diff --git a/drivers/gpu/drm/xe/xe_pci.c b/drivers/gpu/drm/xe/xe_pci.c index
>> 682ba188e456..406b4cd4c88a 100644
>> --- a/drivers/gpu/drm/xe/xe_pci.c
>> +++ b/drivers/gpu/drm/xe/xe_pci.c
>> @@ -197,7 +197,7 @@ static const struct xe_media_desc media_xelpmp = {
>>   	.name = "Xe_LPM+",
>>   	.hw_engine_mask =
>>   		BIT(XE_HW_ENGINE_VCS0) | BIT(XE_HW_ENGINE_VCS2) |
>> -		BIT(XE_HW_ENGINE_VECS0),	/* TODO: add GSC0 */
>> +		BIT(XE_HW_ENGINE_VECS0) | BIT(XE_HW_ENGINE_GSCCS0)
>>   };
>>
> Do we have a function which checks if GSC CS is running or not for clients like HDCP to use

For that you need to check that SW proxy is initialized. That function 
will come with the SW proxy support.

Daniele

>
> Regards,
> Suraj Kandpal
>>   static const struct xe_media_desc media_xe2 = {
>> --
>> 2.41.0



More information about the Intel-xe mailing list