[Intel-gfx] [PATCH] drm/i915/gsc: define gsc fw

Ceraolo Spurio, Daniele daniele.ceraolospurio at intel.com
Fri Aug 25 18:44:09 UTC 2023



On 8/25/2023 10:20 AM, Rodrigo Vivi wrote:
> On Fri, Aug 25, 2023 at 09:27:53AM -0700, Daniele Ceraolo Spurio wrote:
>> Add FW definition and the matching override modparam.
>>
>> The GSC FW has both a release version, based on platform and a rolling
>> counter, and a compatibility version, which is the one tracking
>> interface changes. Since what we care about is the interface, we use
>> the compatibility version in the binary names.
>>
>> Same as with the GuC, a major version bump indicate a
>> backward-incompatible change, while a minor version bump indicates a
>> backward-compatible one, so we use only the former in the file name.
>>
>> Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio at intel.com>
>> Cc: Alan Previn <alan.previn.teres.alexis at intel.com>
>> Cc: John Harrison <John.C.Harrison at Intel.com>
>> Cc: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
>> Cc: Rodrigo Vivi <rodrigo.vivi at intel.com>
>> Reviewed-by: Alan Previn <alan.previn.teres.alexis at intel.com>
>> ---
>>
>> This patch is already merged in topic/core-for-CI. It was merged there
>> because we didn't have a GSC FW ready to ship to linux-firmware, but we
>> still wanted to start testing what we had in CI. We finally have a FW
>> in flight towards linux-firmware [1], so we can transition this patch
>> to drm-intel-gt-next. The patch is unchanged since it was first sent
>> and reviewed [2], so I kept the r-b and I'm looking for an ack on the
>> move.
>> Note that since this patch is already applied, pre-merge CI won't
>> correctly run on it (which is not a problem given that the patch is
>> already included in all current runs).
>>
>> References: https://gitlab.freedesktop.org/drm/intel/-/issues/8705
>> [1] https://lists.freedesktop.org/archives/intel-gfx/2023-August/333322.html
>> [2] https://patchwork.freedesktop.org/patch/544638/
> Thanks for all the info. I agree we are ready to make the move and have
> enough time until we get that in linux-firmware.git.
>
> Acked-by: Rodrigo Vivi <rodrigo.vivi at intel.com>

Thanks!

>
> Btw, one last question:
> Will we already include this in the new
> https://gitlab.freedesktop.org/drm/firmware ?

I wasn't sure if the CI scripts would already work out of the new repo, 
so I went with the old flow for now. I'll try to follow up on the side 
to get the new repo ready and start pushing from there.

Daniele

>
>
>>   drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c | 32 ++++++++++++++++++------
>>   1 file changed, 24 insertions(+), 8 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c b/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c
>> index 9e833f499ac7..fc0d05d2df59 100644
>> --- a/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c
>> +++ b/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c
>> @@ -131,6 +131,17 @@ void intel_uc_fw_change_status(struct intel_uc_fw *uc_fw,
>>   	fw_def(BROXTON,      0, huc_mmp(bxt,  2, 0, 0)) \
>>   	fw_def(SKYLAKE,      0, huc_mmp(skl,  2, 0, 0))
>>   
>> +/*
>> + * The GSC FW has multiple version (see intel_gsc_uc.h for details); since what
>> + * we care about is the interface, we use the compatibility version in the
>> + * binary names.
>> + * Same as with the GuC, a major version bump indicate a
>> + * backward-incompatible change, while a minor version bump indicates a
>> + * backward-compatible one, so we use only the former in the file name.
>> + */
>> +#define INTEL_GSC_FIRMWARE_DEFS(fw_def, gsc_def) \
>> +	fw_def(METEORLAKE,   0, gsc_def(mtl, 1, 0))
>> +
>>   /*
>>    * Set of macros for producing a list of filenames from the above table.
>>    */
>> @@ -166,6 +177,9 @@ void intel_uc_fw_change_status(struct intel_uc_fw *uc_fw,
>>   #define MAKE_HUC_FW_PATH_MMP(prefix_, major_, minor_, patch_) \
>>   	__MAKE_UC_FW_PATH_MMP(prefix_, "huc", major_, minor_, patch_)
>>   
>> +#define MAKE_GSC_FW_PATH(prefix_, major_, minor_) \
>> +	__MAKE_UC_FW_PATH_MAJOR(prefix_, "gsc", major_)
>> +
>>   /*
>>    * All blobs need to be declared via MODULE_FIRMWARE().
>>    * This first expansion of the table macros is solely to provide
>> @@ -176,6 +190,7 @@ void intel_uc_fw_change_status(struct intel_uc_fw *uc_fw,
>>   
>>   INTEL_GUC_FIRMWARE_DEFS(INTEL_UC_MODULE_FW, MAKE_GUC_FW_PATH_MAJOR, MAKE_GUC_FW_PATH_MMP)
>>   INTEL_HUC_FIRMWARE_DEFS(INTEL_UC_MODULE_FW, MAKE_HUC_FW_PATH_BLANK, MAKE_HUC_FW_PATH_MMP, MAKE_HUC_FW_PATH_GSC)
>> +INTEL_GSC_FIRMWARE_DEFS(INTEL_UC_MODULE_FW, MAKE_GSC_FW_PATH)
>>   
>>   /*
>>    * The next expansion of the table macros (in __uc_fw_auto_select below) provides
>> @@ -225,6 +240,10 @@ struct __packed uc_fw_blob {
>>   #define HUC_FW_BLOB_GSC(prefix_) \
>>   	UC_FW_BLOB_NEW(0, 0, 0, true, MAKE_HUC_FW_PATH_GSC(prefix_))
>>   
>> +#define GSC_FW_BLOB(prefix_, major_, minor_) \
>> +	UC_FW_BLOB_NEW(major_, minor_, 0, true, \
>> +		       MAKE_GSC_FW_PATH(prefix_, major_, minor_))
>> +
>>   struct __packed uc_fw_platform_requirement {
>>   	enum intel_platform p;
>>   	u8 rev; /* first platform rev using this FW */
>> @@ -251,9 +270,14 @@ static const struct uc_fw_platform_requirement blobs_huc[] = {
>>   	INTEL_HUC_FIRMWARE_DEFS(MAKE_FW_LIST, HUC_FW_BLOB, HUC_FW_BLOB_MMP, HUC_FW_BLOB_GSC)
>>   };
>>   
>> +static const struct uc_fw_platform_requirement blobs_gsc[] = {
>> +	INTEL_GSC_FIRMWARE_DEFS(MAKE_FW_LIST, GSC_FW_BLOB)
>> +};
>> +
>>   static const struct fw_blobs_by_type blobs_all[INTEL_UC_FW_NUM_TYPES] = {
>>   	[INTEL_UC_FW_TYPE_GUC] = { blobs_guc, ARRAY_SIZE(blobs_guc) },
>>   	[INTEL_UC_FW_TYPE_HUC] = { blobs_huc, ARRAY_SIZE(blobs_huc) },
>> +	[INTEL_UC_FW_TYPE_GSC] = { blobs_gsc, ARRAY_SIZE(blobs_gsc) },
>>   };
>>   
>>   static void
>> @@ -266,14 +290,6 @@ __uc_fw_auto_select(struct drm_i915_private *i915, struct intel_uc_fw *uc_fw)
>>   	int i;
>>   	bool found;
>>   
>> -	/*
>> -	 * GSC FW support is still not fully in place, so we're not defining
>> -	 * the FW blob yet because we don't want the driver to attempt to load
>> -	 * it until we're ready for it.
>> -	 */
>> -	if (uc_fw->type == INTEL_UC_FW_TYPE_GSC)
>> -		return;
>> -
>>   	/*
>>   	 * The only difference between the ADL GuC FWs is the HWConfig support.
>>   	 * ADL-N does not support HWConfig, so we should use the same binary as
>> -- 
>> 2.41.0
>>



More information about the Intel-gfx mailing list