/* PXP-Opcode for Init Session */
 #define PXP42_CMDID_INIT_SESSION 0x1e
 
+/* PXP-Opcode for Invalidate Stream Key */
+#define PXP42_CMDID_INVALIDATE_STREAM_KEY 0x00000007
+
 /* PXP-Input-Packet: Init Session (Arb-Session) */
 struct pxp42_create_arb_in {
        struct pxp_cmd_header header;
        struct pxp_cmd_header header;
 } __packed;
 
+/* PXP-Input-Packet: Invalidate Stream Key */
+struct pxp42_inv_stream_key_in {
+       struct pxp_cmd_header header;
+       u32 rsvd[3];
+} __packed;
+
+/* PXP-Output-Packet: Invalidate Stream Key */
+struct pxp42_inv_stream_key_out {
+       struct pxp_cmd_header header;
+       u32 rsvd;
+} __packed;
+
 #endif /* __INTEL_PXP_FW_INTERFACE_42_H__ */
 
 
        return ret;
 }
+
+void intel_pxp_tee_end_arb_fw_session(struct intel_pxp *pxp, u32 session_id)
+{
+       struct drm_i915_private *i915 = pxp->ctrl_gt->i915;
+       struct pxp42_inv_stream_key_in msg_in = {0};
+       struct pxp42_inv_stream_key_out msg_out = {0};
+       int ret, trials = 0;
+
+try_again:
+       memset(&msg_in, 0, sizeof(msg_in));
+       memset(&msg_out, 0, sizeof(msg_out));
+       msg_in.header.api_version = PXP_APIVER(4, 2);
+       msg_in.header.command_id = PXP42_CMDID_INVALIDATE_STREAM_KEY;
+       msg_in.header.buffer_len = sizeof(msg_in) - sizeof(msg_in.header);
+
+       msg_in.header.stream_id = FIELD_PREP(PXP_CMDHDR_EXTDATA_SESSION_VALID, 1);
+       msg_in.header.stream_id |= FIELD_PREP(PXP_CMDHDR_EXTDATA_APP_TYPE, 0);
+       msg_in.header.stream_id |= FIELD_PREP(PXP_CMDHDR_EXTDATA_SESSION_ID, session_id);
+
+       ret = intel_pxp_tee_io_message(pxp,
+                                      &msg_in, sizeof(msg_in),
+                                      &msg_out, sizeof(msg_out),
+                                      NULL);
+
+       /* Cleanup coherency between GT and Firmware is critical, so try again if it fails */
+       if ((ret || msg_out.header.status != 0x0) && ++trials < 3)
+               goto try_again;
+
+       if (ret)
+               drm_err(&i915->drm, "Failed to send tee msg for inv-stream-key-%d, ret=[%d]\n",
+                       session_id, ret);
+       else if (msg_out.header.status != 0x0)
+               drm_warn(&i915->drm, "PXP firmware failed inv-stream-key-%d with status 0x%08x\n",
+                        session_id, msg_out.header.status);
+}