Starting from MTL, the GSC FW is runtime loaded by the driver, instead of being stored in flash memory. Loading the GSC FW is required to allow the media GT to go into its C6 state and for content protection features (PXP, HDCP). The loading happens via a submission to the GSC engine. All subsequent communication with the FW will also happen via the engine, although no further messages are implemented as part of this series. The loading is currently done serially as part of driver init/resume, but the plan is to move it to a worker thread in the future to allow non-CP submission to go through while we wait for GSC FW load to complete. This will be done once all the pieces required for GSC to fully function are in place (see further below). This series also adds the GSC engine flag to the MTL platform, with the engine being runtime disabled if the FW is not selected, which makes the FW definition (not included in the series) the ultimate enabler for the whole GSC block. Note that just loading the FW is not enough for it to be fully functional. We'll also need to establish and handle a communication channel between GSC and CSME (a.k.a. SW proxy). This will require a new mei component to handle the CSME side of things, so it will be pushed as a separate series. Cc: Alan Previn <alan.previn.teres.alexis@xxxxxxxxx> Cc: John Harrison <John.C.Harrison@xxxxxxxxx> Cc: Rodrigo Vivi <rodrigo.vivi@xxxxxxxxx> Daniele Ceraolo Spurio (5): drm/i915/uc: Introduce GSC FW drm/i915/gsc: Skip the version check when fetching the GSC FW drm/i915/gsc: GSC firmware loading drm/i915/gsc: Do a driver-FLR on unload if GSC was loaded drm/i915/mtl: MTL has one GSC CS on the media GT Jonathan Cavitt (1): drm/i915/gsc: Disable GSC engine and power well if FW is not selected drivers/gpu/drm/i915/Makefile | 4 +- drivers/gpu/drm/i915/gem/i915_gem_pm.c | 14 +- drivers/gpu/drm/i915/gt/intel_engine.h | 2 + drivers/gpu/drm/i915/gt/intel_engine_cs.c | 18 ++ drivers/gpu/drm/i915/gt/intel_gpu_commands.h | 7 + drivers/gpu/drm/i915/gt/intel_gt.c | 11 ++ drivers/gpu/drm/i915/gt/intel_gt.h | 5 + drivers/gpu/drm/i915/gt/uc/intel_gsc_fw.c | 195 +++++++++++++++++++ drivers/gpu/drm/i915/gt/uc/intel_gsc_fw.h | 13 ++ drivers/gpu/drm/i915/gt/uc/intel_gsc_uc.c | 103 ++++++++++ drivers/gpu/drm/i915/gt/uc/intel_gsc_uc.h | 43 ++++ drivers/gpu/drm/i915/gt/uc/intel_uc.c | 32 +++ drivers/gpu/drm/i915/gt/uc/intel_uc.h | 5 + drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c | 74 +++++-- drivers/gpu/drm/i915/gt/uc/intel_uc_fw.h | 8 +- drivers/gpu/drm/i915/i915_params.c | 3 + drivers/gpu/drm/i915/i915_params.h | 1 + drivers/gpu/drm/i915/i915_pci.c | 2 +- drivers/gpu/drm/i915/i915_reg.h | 3 + drivers/gpu/drm/i915/intel_uncore.c | 48 +++++ drivers/gpu/drm/i915/intel_uncore.h | 13 ++ 21 files changed, 585 insertions(+), 19 deletions(-) create mode 100644 drivers/gpu/drm/i915/gt/uc/intel_gsc_fw.c create mode 100644 drivers/gpu/drm/i915/gt/uc/intel_gsc_fw.h create mode 100644 drivers/gpu/drm/i915/gt/uc/intel_gsc_uc.c create mode 100644 drivers/gpu/drm/i915/gt/uc/intel_gsc_uc.h -- 2.37.3