[PATCH v11 0/8] drm/i915/pxp: Add MTL PXP Support

Sripada, Radhakrishna radhakrishna.sripada at intel.com
Fri May 12 00:32:04 UTC 2023


Thank you for the patches and the reviews. Pushed.

- Radhakrishna(RK) Sripada

> -----Original Message-----
> From: dri-devel <dri-devel-bounces at lists.freedesktop.org> On Behalf Of Alan
> Previn
> Sent: Thursday, May 11, 2023 4:18 PM
> To: intel-gfx at lists.freedesktop.org
> Cc: Teres Alexis, Alan Previn <alan.previn.teres.alexis at intel.com>; Ursulin,
> Tvrtko <tvrtko.ursulin at intel.com>; Juston Li <justonli at chromium.org>; dri-
> devel at lists.freedesktop.org; Ceraolo Spurio, Daniele
> <daniele.ceraolospurio at intel.com>; Landwerlin, Lionel G
> <lionel.g.landwerlin at intel.com>; Vivi, Rodrigo <rodrigo.vivi at intel.com>;
> Justen, Jordan L <jordan.l.justen at intel.com>
> Subject: [PATCH v11 0/8] drm/i915/pxp: Add MTL PXP Support
> 
> This series enables PXP on MTL. On ADL/TGL platforms, we rely on
> the mei driver via the i915-mei PXP component interface to establish
> a connection to the security firmware via the HECI device interface.
> That interface is used to create and teardown the PXP ARB session.
> PXP ARB session is created when protected contexts are created.
> 
> In this series, the front end behaviors and interfaces (uapi) remain
> the same. We add backend support for MTL but with MTL we directly use
> the GSC-CS engine on the MTL GPU device to send messages to the PXP
> (a.k.a. GSC a.k.a graphics-security) firmware. With MTL, the format
> of the message is slightly different with a 2-layer packetization
> that is explained in detail in Patch #3. Also, the second layer
> which is the actual PXP firmware packet is now rev'd to version 4.3
> for MTL that is defined in Patch #5.
> 
> Take note that Patch #4 adds the buffer allocation and gsccs-send-
> message without actually being called by the arb-creation code
> which gets added in Patch #5. Additionally, a seperate series being
> reviewed is introducing a change for session teardown (in pxp front-
> end layer that will need backend support by both legacy and gsccs).
> If we squash all of these together (buffer-alloc, send-message,
> arb-creation and, in future, session-termination), the single patch
> will be rather large. That said, we are keeping Patch #4 and #5
> separate for now, but at merge time, we can squash them together
> if maintainer requires it.
> 
> Changes from prior revs:
>    v1 : - fixed when building with CONFIG_PXP disabled.
>         - more alignment with gsc_mtl_header structure from the HDCP
>    v2 : - (all following changes as per reviews from Daniele)
>         - squashed Patch #1 from v1 into the next one.
>         - replaced unnecessary "uses_gsccs" boolean in the pxp
>           with "HAS_ENGINE(pxp->ctrl_gt, GSC0)".
>         - moved the stashing of gsccs resources from a dynamically
>           allocated opaque handle to an explicit sub-struct in
>           'struct intel_pxp'.
>         - moved the buffer object allocations from Patch #1 of this
>           series to Patch #5 (but keep the context allocation in
>           Patch #1).
>         - used the kernel default ppgtt for the gsccs context.
>         - optimized the buffer allocation and deallocation code
>           and drop the need to stash the drm_i915_gem_object.
>         - use a macro with the right mmio reg base (depending
>           on root-tile vs media-tile) along with common relative
>           offset to access all KCR registers thus minimizing
>           changes to the KCR register access codes.
>         - fixed bugs in the heci packet request submission code
>           in Patch #3 (of this series)
>         - add comments in the mtl-gsc-heci-header regarding the
>           host-session-handle.
>         - re-use tee-mutex instead of introducing a gsccs specific
>           cmd mutex.
>         - minor cosmetic improvements in Patch #5.
> 	- before creating arb session, ensure intel_pxp_start
>           first ensures the GSC FW is up and running.
>         - use 2 second timeout for the pending-bit scenario when
>           sending command to GSC-FW as per specs.
>         - simplify intel_pxp_get_irq_gt with addition comments
>         - redo Patch #7 to minimize the changes without introducing
>           a common  abstraction helper for suspend/resume/init/fini
>           codes that have to change the kcr power state.
>    v3 : - rebase onto latest drm-tip with the updated firmware
>           session invalidation flow
>         - on Patch#1: move 'mutex_init(&pxp->tee_mutex)' to a common
>           init place in intel_pxp_init since its needed everywhere
>           (Daniele)
>         - on Patch#1: remove unneccasary "ce->vm = i915_vm_get(vm);"
>           (Daniele)
>         - on Patch#2: move the introduction of host_session_handle to
>           Patch#4 where it starts getting used.
>         - on Patch#4: move host-session-handle initialization to the
>           allocate-resources during gsccs-init (away from Patch#5)
>           and add the required call to PXP-firmware to cleanup the
>           host-session-handle in destroy-resources during gsccs-fini
>         - on Patch#5: add dispatching of arb session termination
>           firmware cmd during session teardown (as per latest
>           upstream flows)
>    v4 : - Added proper initialization and cleanup of host-session-handle
>           that the gsc firmware expects.
>         - Fix the stream-session-key invalidation instruction for MTL.
>    v5 : - In Patch #4, move the tee_mutex locking to after we check for
>           valid vma allocations.
>         - In Patch #5, wait for intel_huc_is_authenticated instead of
>           intel_uc_fw_is_running(gsc-fw) before starting ARB session.
>         - In Patch #5, increase the necessary timeouts at the top-level
>           (PXP arb session creation / termination) to accomodate SLA of
>           GSC firmware when busy with pending-bit responses.
>         - In Patch #5, remove redundant host_session_handle init as
>           we need a single handle that is already initialized during
>           execution_resource init in Patch #4.
>         - In Patch #8, increase the wait timeout for termination to
>           align with the same SLA.
>    v6 : - (multiple patches) always name variables of type struct
>           gsccs_session_resources * as 'exec_res'. (Daniele).
>         - In gsccs_allocate_execution_resource, always put and take the
>           contexts vm to enforce its the default pxp->ctrl_gt->vm.
>           (Daniele)
>         - In Patch #3: Rebase with the upstream-merged version of the
>           intel_gsc_uc_heci_cmd_submit.* files that was part of the hdcp
>           merge (adding only the difference of the non-priv submision).
>           Fix the non-priv submission helper to use the ww-aware versions
>           of request creation + submission (some re-ordeing and calling
>           i915_gem_ww_ctx_init and intel_context_pin_ww). (Alan)
>         - In Patch #4: Misc coding styling improvements (Daniele).
>           Replace PXP43_MAX_HECI_IN_SIZE and PXP43_MAX_HECI_OUT_SIZE
>           with PXP43_MAX_HECI_INOUT_SIZE to simplify the size checking.
>           Clear the MTL-GSC-HECI header's validity marker of the output
>           packet before submission to avoid stale values (Daniele).
>           Fix a bug with the gsccs_allocate_execution_resource error
>           condition bailing out when out of mem (Daniele).
>         - In Patch #5: Add intel_gsc_uc_fw_proxy_init_done when starting
>           arb session (in front-end code) when called on platforms with GSC
>           engine (Daniele). Update the fw-response-error reporting to
>           match what is being merged upstream for the ADL case (Daniele).
>         - Old Patch #6: Remove this patch completely. We don't need to
>           use the root-gt's uncore to handle KCR irq / power registers.
>           (Daniele).
>         - New Patch #6: Update the documentation in i915 UAPI for PXP
>           context creation to include additional error meanings that was
>           always there in upstream code but just never documented. (Alan).
>           Add a GET_PARAM for PXP support so that UMDs won't have to create
>           a PXP context to know if it's available since that method would
>           suffer a longer delay if called too early in kernel startup
>           because of the additional dependencies on devices with GSC engine.
>           (Tvrtko, Alan, Rodrigo, Lionel).
>         - Patch #7: Move intel_pxp_init_hw into backend code to be
>           consistent with legacy mei-pxp based tee transport. (Daniele).
>         - Patch #8: With 3 places now being aware of mei-pxp vs gsccs-pxp
>           difference in timeouts for round trip delays when communicating
>           with pxp firmware (getting fw commands sent and receiving the
>           reply), add a helper for this. (Daniele)
>    v7 : - In Patch #3: Minor cosmetics and remove unnecessary
>           EXEC_OBJECT_WRITE when moving bb to active. (Daniele)
>         - In Patch #4: Minor cosmetic fixes. (Daniele)
>         - In Patch #5: Pull in the fixups for missing documentation of
>           legacy UAPI behavior of PXP context creation errors values
>           from Patch #6 to Patch #5. Also, add a comment to explain
>           why GSC_REPLY_LATENCY_MS is 210 milisec. (Daniele)
>         - In Patch #6: See first change of Patch #5.
>    v8 : - Tweaked the GET_PARAM for PXP so that positive values returned
>           user-space can differentiate "PXP is supported and ready" vs
>           "PXP is supported but will be ready soon" (Jorden)
>    v9 : - Rebased to the latest drm-tip to resolve rebase conflicts.
>           All patches reviewed, waiting on Ack from UMD side.
>    v10: - Rebased to latest. Fixed spelling mistake in Patch6 commit msg.
> 
> Alan Previn (8):
>   drm/i915/pxp: Add GSC-CS back-end resource init and cleanup
>   drm/i915/pxp: Add MTL hw-plumbing enabling for KCR operation
>   drm/i915/pxp: Add MTL helpers to submit Heci-Cmd-Packet to GSC
>   drm/i915/pxp: Add GSC-CS backend to send GSC fw messages
>   drm/i915/pxp: Add ARB session creation and cleanup
>   drm/i915/uapi/pxp: Add a GET_PARAM for PXP
>   drm/i915/pxp: On MTL, KCR enabling doesn't wait on tee component
>   drm/i915/pxp: Enable PXP with MTL-GSC-CS
> 
>  drivers/gpu/drm/i915/Makefile                 |   1 +
>  drivers/gpu/drm/i915/gt/intel_gt_irq.c        |   3 +-
>  .../i915/gt/uc/intel_gsc_uc_heci_cmd_submit.c | 102 ++++
>  .../i915/gt/uc/intel_gsc_uc_heci_cmd_submit.h |  26 +-
>  drivers/gpu/drm/i915/i915_getparam.c          |   7 +
>  drivers/gpu/drm/i915/i915_pci.c               |   1 +
>  drivers/gpu/drm/i915/pxp/intel_pxp.c          | 102 +++-
>  drivers/gpu/drm/i915/pxp/intel_pxp.h          |   2 +
>  .../drm/i915/pxp/intel_pxp_cmd_interface_43.h |  24 +
>  drivers/gpu/drm/i915/pxp/intel_pxp_debugfs.c  |   6 +-
>  drivers/gpu/drm/i915/pxp/intel_pxp_gsccs.c    | 444 ++++++++++++++++++
>  drivers/gpu/drm/i915/pxp/intel_pxp_gsccs.h    |  43 ++
>  drivers/gpu/drm/i915/pxp/intel_pxp_pm.c       |   3 +-
>  drivers/gpu/drm/i915/pxp/intel_pxp_regs.h     |  27 ++
>  drivers/gpu/drm/i915/pxp/intel_pxp_session.c  |  25 +-
>  drivers/gpu/drm/i915/pxp/intel_pxp_tee.c      |   2 -
>  drivers/gpu/drm/i915/pxp/intel_pxp_types.h    |  20 +
>  include/uapi/drm/i915_drm.h                   |  34 ++
>  18 files changed, 831 insertions(+), 41 deletions(-)
>  create mode 100644 drivers/gpu/drm/i915/pxp/intel_pxp_gsccs.c
>  create mode 100644 drivers/gpu/drm/i915/pxp/intel_pxp_gsccs.h
>  create mode 100644 drivers/gpu/drm/i915/pxp/intel_pxp_regs.h
> 
> 
> base-commit: 978798460589f59097961875e0ffdbec6a11c9b5
> --
> 2.39.0



More information about the dri-devel mailing list