Add MTL's function for ARB session creation using PXP firmware version 4.3 ABI structure format. While relooking at the ARB session creation flow in intel_pxp_start, let's address missing UAPI documentation. Without actually changing backward compatible behavior, update i915's drm-uapi comments that describe the possible error values when creating a context with I915_CONTEXT_PARAM_PROTECTED_CONTENT: Since the first merge of PXP support on ADL, i915 returns -ENXIO if a dependency such as firmware or component driver was yet to be loaded or returns -EIO if the creation attempt failed when requested by the PXP firmware (specific firmware error responses are reported in dmesg). Add MTL's function for ARB session invalidation but this reuses PXP firmware version 4.2 ABI structure format. For both cases, in the back-end gsccs functions for sending messages to the firmware inspect the GSC-CS-Mem-Header's pending-bit which means the GSC firmware is busy and we should retry. Given the last hw requirement, lets also update functions in front-end layer that wait for session creation or teardown completion to use new worst case timeout periods. Signed-off-by: Alan Previn <alan.previn.teres.alexis@intel.com> Reviewed-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com> Signed-off-by: Radhakrishna Sripada <radhakrishna.sripada@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20230511231738.1077674-6-alan.previn.teres.alexis@intel.com
43 lines
1.1 KiB
C
43 lines
1.1 KiB
C
/* SPDX-License-Identifier: MIT */
|
|
/*
|
|
* Copyright(c) 2022, Intel Corporation. All rights reserved.
|
|
*/
|
|
|
|
#ifndef __INTEL_PXP_GSCCS_H__
|
|
#define __INTEL_PXP_GSCCS_H__
|
|
|
|
#include <linux/types.h>
|
|
|
|
struct intel_pxp;
|
|
|
|
#define GSC_REPLY_LATENCY_MS 210
|
|
/*
|
|
* Max FW response time is 200ms, to which we add 10ms to account for overhead
|
|
* such as request preparation, GuC submission to hw and pipeline completion times.
|
|
*/
|
|
#define GSC_PENDING_RETRY_MAXCOUNT 40
|
|
#define GSC_PENDING_RETRY_PAUSE_MS 50
|
|
#define GSCFW_MAX_ROUND_TRIP_LATENCY_MS (GSC_PENDING_RETRY_MAXCOUNT * GSC_PENDING_RETRY_PAUSE_MS)
|
|
|
|
#ifdef CONFIG_DRM_I915_PXP
|
|
void intel_pxp_gsccs_fini(struct intel_pxp *pxp);
|
|
int intel_pxp_gsccs_init(struct intel_pxp *pxp);
|
|
|
|
int intel_pxp_gsccs_create_session(struct intel_pxp *pxp, int arb_session_id);
|
|
void intel_pxp_gsccs_end_arb_fw_session(struct intel_pxp *pxp, u32 arb_session_id);
|
|
|
|
#else
|
|
static inline void intel_pxp_gsccs_fini(struct intel_pxp *pxp)
|
|
{
|
|
}
|
|
|
|
static inline int intel_pxp_gsccs_init(struct intel_pxp *pxp)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
#endif
|
|
|
|
bool intel_pxp_gsccs_is_ready_for_sessions(struct intel_pxp *pxp);
|
|
|
|
#endif /*__INTEL_PXP_GSCCS_H__ */
|