This patch series enables command submission via the GuC. In this mode, instead of the host CPU driving the execlist port directly, it hands over work items to the GuC, using a doorbell mechanism to tell the GuC that new items have been added to its work queue. The GuC then dispatches contexts to the various GPU engines, and manages the resulting context- switch interrupts. Completion of a batch is however still signalled to the CPU; the GuC is not involved in handling user interrupts. There are three subsequences within the patch series: drm/i915: Add i915_gem_object_write() to i915_gem.c drm/i915: Embedded microcontroller (uC) firmware loading support These first two patches provide a generic framework for fetching the firmware that may be required by any embedded microcontroller from a file, using an asynchronous thread so that driver initialisation can continue while the firmware is being fetched. It is hoped that this framework is sufficiently general that it can be used for all curent and future microcontrollers. drm/i915: Add GuC-related module parameters drm/i915: Add GuC-related header files drm/i915: GuC-specific firmware loader drm/i915: Debugfs interface to read GuC load status These four patches complete the GuC loader. At this point in the sequence we can load and activate the GuC firmware, but not submit any batches through it. (This is nonetheless a potentially useful state, as the GuC can do other useful work even when not handling batch submissions). drm/i915: Defer default hardware context initialisation until first drm/i915: Move execlists defines from .c to .h drm/i915: GuC submission setup, phase 1 drm/i915: Enable GuC firmware log drm/i915: Implementation of GuC client drm/i915: Interrupt routing for GuC submission drm/i915: Integrate GuC-based command submission drm/i915: Debugfs interface for GuC submission statistics Documentation/drm: kerneldoc for GuC drm/i915: Enable GuC submission, where supported In the final section, we implement the GuC submission mechanism, link it into the (execlist-based) submission path, and finally enable it (on supported platforms). On platforms where there is no GuC, or if the GuC firmware cannot be found or is invalid, batch submission will revert to using the execlist mechanism directly. The GuC firmware itself is not included in this patchset; it is or will be available for download from https://01.org/linuxgraphics/downloads/ This driver works with and requires GuC firmware revision 3.x. It will not work with any firmware version 1.x, as the GuC protocol in those revisions was incompatible and is no longer supported. Prerequisites: GuC submission will expose existing inadequacies in some of the existing codepaths unless certain other patches are applied. In particular we will require some version of Michel Thierry's patch drm/i915/lrc: Update PDPx registers with lri commands (because the GuC support light-restore, which execlist mode doesn't), and my own drm/i915: Allocate OLR more safely (workaround until OLR goes away) because otherwise the changed timing means that there is an increased risk of writing to a ringbuffer that is not currently pinned & mapped, causing a kernel OOPS. Alex Dai (10): drm/i915: Add i915_gem_object_write() to i915_gem.c drm/i915: Add GuC-related module parameters drm/i915: Add GuC-related header files drm/i915: GuC-specific firmware loader drm/i915: Debugfs interface to read GuC load status drm/i915: GuC submission setup, phase 1 drm/i915: Enable GuC firmware log drm/i915: Implementation of GuC client drm/i915: Integrate GuC-based command submission Documentation/drm: kerneldoc for GuC Dave Gordon (5): drm/i915: Embedded microcontroller (uC) firmware loading support drm/i915: Defer default hardware context initialisation until first drm/i915: Interrupt routing for GuC submission drm/i915: Debugfs interface for GuC submission statistics drm/i915: Enable GuC submission, where supported Michael H. Nguyen (1): drm/i915: Move execlists defines from .c to .h Ben Widawsky Vinit Azad created the original versions on which some of these patches are based. Documentation/DocBook/drm.tmpl | 19 + drivers/gpu/drm/i915/Makefile | 7 + drivers/gpu/drm/i915/i915_debugfs.c | 109 +++- drivers/gpu/drm/i915/i915_dma.c | 4 + drivers/gpu/drm/i915/i915_drv.h | 17 + drivers/gpu/drm/i915/i915_gem.c | 39 +- drivers/gpu/drm/i915/i915_gem_context.c | 52 +- drivers/gpu/drm/i915/i915_guc_submission.c | 873 ++++++++++++++++++++++++++++ drivers/gpu/drm/i915/i915_irq.c | 48 ++ drivers/gpu/drm/i915/i915_params.c | 9 + drivers/gpu/drm/i915/i915_reg.h | 92 ++- drivers/gpu/drm/i915/intel_guc.h | 184 ++++++ drivers/gpu/drm/i915/intel_guc_api.h | 227 ++++++++ drivers/gpu/drm/i915/intel_guc_loader.c | 498 ++++++++++++++++ drivers/gpu/drm/i915/intel_lrc.c | 128 ++-- drivers/gpu/drm/i915/intel_lrc.h | 8 + drivers/gpu/drm/i915/intel_uc_loader.c | 312 ++++++++++ drivers/gpu/drm/i915/intel_uc_loader.h | 82 +++ 18 files changed, 2607 insertions(+), 101 deletions(-) create mode 100644 drivers/gpu/drm/i915/i915_guc_submission.c create mode 100644 drivers/gpu/drm/i915/intel_guc.h create mode 100644 drivers/gpu/drm/i915/intel_guc_api.h create mode 100644 drivers/gpu/drm/i915/intel_guc_loader.c create mode 100644 drivers/gpu/drm/i915/intel_uc_loader.c create mode 100644 drivers/gpu/drm/i915/intel_uc_loader.h -- 1.7.9.5 _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/intel-gfx