The HW will generate a teardown interrupt when session termination is required, which requires i915 to submit a terminating batch. Once the HW is done with the termination it will generate another interrupt, at which point it is safe to re-create the session. Since the termination and re-creation flow is something we want to trigger from the driver as well, use a common work function that can be called both from the irq handler and from the driver set-up flows, which has the addded benefit of allowing us to skip any extra locks because the work itself serializes the operations. v2: use struct completion instead of bool (Chris) v3: drop locks, clean up functions and improve comments (Chris), move to common work function. v4: improve comments, simplify wait logic (Rodrigo) v5: unconditionally set interrupts, rename state_attacked var (Rodrigo) v10: remove inclusion of intel_gt_types.h from intel_pxp.h (Jani) Signed-off-by: Alan Previn <alan.previn.teres.alexis@intel.com> Signed-off-by: Huang, Sean Z <sean.z.huang@intel.com> Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com> Cc: Chris Wilson <chris@chris-wilson.co.uk> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com> Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com> Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20210924191452.1539378-10-alan.previn.teres.alexis@intel.com
33 lines
892 B
C
33 lines
892 B
C
/* SPDX-License-Identifier: MIT */
|
|
/*
|
|
* Copyright(c) 2020, Intel Corporation. All rights reserved.
|
|
*/
|
|
|
|
#ifndef __INTEL_PXP_IRQ_H__
|
|
#define __INTEL_PXP_IRQ_H__
|
|
|
|
#include <linux/types.h>
|
|
|
|
struct intel_pxp;
|
|
|
|
#define GEN12_DISPLAY_PXP_STATE_TERMINATED_INTERRUPT BIT(1)
|
|
#define GEN12_DISPLAY_APP_TERMINATED_PER_FW_REQ_INTERRUPT BIT(2)
|
|
#define GEN12_DISPLAY_STATE_RESET_COMPLETE_INTERRUPT BIT(3)
|
|
|
|
#define GEN12_PXP_INTERRUPTS \
|
|
(GEN12_DISPLAY_PXP_STATE_TERMINATED_INTERRUPT | \
|
|
GEN12_DISPLAY_APP_TERMINATED_PER_FW_REQ_INTERRUPT | \
|
|
GEN12_DISPLAY_STATE_RESET_COMPLETE_INTERRUPT)
|
|
|
|
#ifdef CONFIG_DRM_I915_PXP
|
|
void intel_pxp_irq_enable(struct intel_pxp *pxp);
|
|
void intel_pxp_irq_disable(struct intel_pxp *pxp);
|
|
void intel_pxp_irq_handler(struct intel_pxp *pxp, u16 iir);
|
|
#else
|
|
static inline void intel_pxp_irq_handler(struct intel_pxp *pxp, u16 iir)
|
|
{
|
|
}
|
|
#endif
|
|
|
|
#endif /* __INTEL_PXP_IRQ_H__ */
|