[Intel-gfx] [PATCH v11 4/6] drm/i915: Add HuC firmware size related restriction for Gen9 and CNL A0

Yaodong Li yaodong.li at intel.com
Thu Mar 1 18:32:34 UTC 2018


On 03/01/2018 05:14 AM, Michal Wajdeczko wrote:
> On Thu, 01 Mar 2018 02:01:38 +0100, Jackie Li <yaodong.li at intel.com> 
> wrote:
>
>> On CNL A0 and Gen9, there's a hardware restriction that requires the
>> available GuC WOPCM size to be larger than or equal to HuC firmware 
>> size.
>>
>> This patch adds new verification code to ensure the available GuC WOPCM
>> size to be larger than or equal to HuC firmware size on both Gen9 and 
>> CNL
>> A0.
>>
>> v6:
>>  - Extended HuC FW size check against GuC WOPCM size to all
>>    Gen9 and CNL A0 platforms
>>
>> v7:
>>  - Fixed patch format issues
>>
>> v8:
>>  - Renamed variables and functions to avoid ambiguity (Joonas)
>>  - Updated commit message and comments to be more comprehensive (Sagar)
>>
>> v9:
>>  - Moved code that is not related to restriction check into a separate
>>    patch and updated the commit message accordingly (Sagar/Michal)
>>  - Avoided to call uc_get_fw_size for better layer isolation (Michal)
>>
>> v10:
>>  - Shorten function names and reorganized size_check code to have clear
>>    isolation (Joonas)
>>  - Removed unnecessary comments (Joonas)
>>
>> v11:
>>  - Fixed logic error in size check (Michal)
>>
>> BSpec: 10875
>>
>> Cc: Michal Wajdeczko <michal.wajdeczko at intel.com>
>> Cc: Sagar Arun Kamble <sagar.a.kamble at intel.com>
>> Cc: John Spotswood <john.a.spotswood at intel.com>
>> Cc: Jeff McGee <jeff.mcgee at intel.com>
>> Cc: Chris Wilson <chris at chris-wilson.co.uk>
>> Cc: Joonas Lahtinen <joonas.lahtinen at linux.intel.com>
>> Reviewed-by: Sagar Arun Kamble <sagar.a.kamble at intel.com> (v8)
>> Signed-off-by: Jackie Li <yaodong.li at intel.com>
>> ---
>>  drivers/gpu/drm/i915/intel_wopcm.c | 28 +++++++++++++++++++++++++---
>>  1 file changed, 25 insertions(+), 3 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/i915/intel_wopcm.c 
>> b/drivers/gpu/drm/i915/intel_wopcm.c
>> index bb78043..b30d7ff 100644
>> --- a/drivers/gpu/drm/i915/intel_wopcm.c
>> +++ b/drivers/gpu/drm/i915/intel_wopcm.c
>> @@ -107,8 +107,26 @@ static inline int gen9_check_dword_gap(u32 
>> guc_wopcm_base, u32 guc_wopcm_size)
>>      return 0;
>>  }
>> +static inline int gen9_check_huc_fw_fits(u32 guc_wopcm_size, u32 
>> huc_fw_size)
>> +{
>> +    /*
>> +     * On Gen9 & CNL A0, hardware requires the total available GuC 
>> WOPCM
>> +     * size to be larger than or equal to HuC firmware size. Otherwise,
>> +     * firmware uploading would fail.
>> +     */
>> +    if (huc_fw_size > guc_wopcm_size - GUC_WOPCM_RESERVED) {
>> +        DRM_ERROR("HuC fw(%uKiB) won't fit in GuC WOPCM(%uKiB).\n",
>> +              huc_fw_size / 1024,
>> +              (guc_wopcm_size - GUC_WOPCM_RESERVED) / 1024);
>
> bikeshed: in earlier patches in similar error messages, you used
> "HuC FW (%KiB)" and didn't provide available space. Maybe simplest
> way to unify and minimize the code is to add one "failed" tag in
> wopcm_init function where you can print all values used for partitioning:
>
> failed:
>     DRM_ERROR("Failed to partition %uKiB WOPCM (%d)\n", 
> wopcm->size/1024, err);
>     DRM_ERROR("HuC FW size=%uKiB\n", ...);
>     DRM_ERROR("GuC FW size=%uKiB\n", ...);
>     return err;
>
I will keep it as it is now to save some time since I was told to keep 
these message
at the point where the error happened.:-)
>> +        return -E2BIG;
>> +    }
>> +
>> +    return 0;
>> +}
>> +
>>  static inline int check_hw_restriction(struct drm_i915_private *i915,
>> -                       u32 guc_wopcm_base, u32 guc_wopcm_size)
>> +                       u32 guc_wopcm_base, u32 guc_wopcm_size,
>> +                       u32 huc_fw_size)
>>  {
>>      int err = 0;
>> @@ -117,7 +135,10 @@ static inline int check_hw_restriction(struct 
>> drm_i915_private *i915,
>>      if (err)
>>          return err;
>> -    return 0;
>> +    if (IS_GEN9(i915) || IS_CNL_REVID(i915, CNL_REVID_A0, 
>> CNL_REVID_A0))
>> +        err = gen9_check_huc_fw_fits(guc_wopcm_size, huc_fw_size);
>> +
>> +    return err;
>>  }
>> /**
>> @@ -186,7 +207,8 @@ int intel_wopcm_init(struct intel_wopcm *wopcm)
>>          return -E2BIG;
>>      }
>> -    err = check_hw_restriction(i915, guc_wopcm_base, guc_wopcm_size);
>> +    err = check_hw_restriction(i915, guc_wopcm_base, guc_wopcm_size,
>> +                   huc_fw_size);
>>      if (err) {
>>          DRM_ERROR("Failed to meet HW restriction.\n");
>>          return err;
>
> but bikeshed is not critical, so
>
> Reviewed-by: Michal Wajdeczko <michal.wajdeczko at intel.com>
Thanks,
-Jackie



More information about the Intel-gfx mailing list