There is known issue on GT interrupt delivery with DC6 and firmwares <1.21. There is a suspicion that this causes spurious gpu hangs on driver init and with some workloads, as upgrading the firmware to 1.21 makes these problems disappear. As of now the current version included in distribution firmware packages is very like to be 1.19. Play it safe and refuse to load a firmware version that may affect gpu side stability. v2: Refuse to load fw instead of notifying the user Cc: Animesh Manna <animesh.manna@xxxxxxxxx> Cc: Jani Nikula <jani.nikula@xxxxxxxxxxxxxxx> Cc: Dave Gordon <david.s.gordon@xxxxxxxxx> Cc: Arun Siluvery <arun.siluvery@xxxxxxxxxxxxxxx> References: https://01.org/linuxgraphics/downloads/skldmcver121 Testcase: igt/gem_exec_nop Signed-off-by: Mika Kuoppala <mika.kuoppala@xxxxxxxxx> --- drivers/gpu/drm/i915/intel_csr.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/drivers/gpu/drm/i915/intel_csr.c b/drivers/gpu/drm/i915/intel_csr.c index 308330b..edd1017 100644 --- a/drivers/gpu/drm/i915/intel_csr.c +++ b/drivers/gpu/drm/i915/intel_csr.c @@ -47,6 +47,9 @@ MODULE_FIRMWARE(I915_CSR_SKL); MODULE_FIRMWARE(I915_CSR_BXT); +#define SKL_REQUIRED_FW_MAJOR 1 +#define SKL_REQUIRED_FW_MINOR 21 + /* * SKL CSR registers for DC5 and DC6 */ @@ -394,6 +397,13 @@ static void finish_csr_load(const struct firmware *fw, void *context) csr->dmc_ver_minor = ((dmc_header->fw_version & 0xffff0000) >> 16) * 10 + (dmc_header->fw_version & 0x0000ffff); + if (IS_SKYLAKE(dev) && (csr->dmc_ver_major < SKL_REQUIRED_FW_MAJOR || + csr->dmc_ver_minor < SKL_REQUIRED_FW_MINOR)) { + DRM_INFO("Outdated dmc firmware found, please upgrade to %u.%u or newer\n", + SKL_REQUIRED_FW_MAJOR, SKL_REQUIRED_FW_MINOR); + goto out; + } + /* load csr program during system boot, as needed for DC states */ intel_csr_load_program(dev); fw_loaded = true; -- 2.1.4 _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/intel-gfx