The only difference between the ADL S and P GuC FWs is the HWConfig support. ADL-N does not support HWConfig, so we should use the same binary as ADL-S, otherwise the GuC might attempt to fetch a config table that does not exist. ADL-N is internally identified as an ADL-P, so we need to special-case it in the FW selection code.
Unified · Split
| @@ -162,6 +162,15 @@ __uc_fw_auto_select(struct drm_i915_private *i915, struct intel_uc_fw *uc_fw) · 161 unmodified lines | ||
| 162 | 162 | u8 rev = INTEL_REVID(i915); |
| 163 | 163 | int i; |
| 164 | 164 | |
| 165 | + /* | |
| 166 | + * The only difference between the ADL GuC FWs is the HWConfig support. | |
| 167 | + * ADL-N does not support HWConfig, so we should use the same binary as | |
| 168 | + * ADL-S, otherwise the GuC might attempt to fetch a config table that | |
| 169 | + * does not exist. | |
| 170 | + */ | |
| 171 | + if (IS_ADLP_N(i915)) | |
| 172 | + p = INTEL_ALDERLAKE_S; | |
| 173 | + | |
| 165 | 174 | GEM_BUG_ON(uc_fw->type >= ARRAY_SIZE(blobs_all)); |
| 166 | 175 | fw_blobs = blobs_all[uc_fw->type].blobs; |
| 167 | 176 | fw_count = blobs_all[uc_fw->type].count; |