drm/i915: Support for GuC interrupts
There are certain types of interrupts which Host can receive from GuC. GuC ukernel sends an interrupt to Host for certain events, like for example retrieve/consume the logs generated by ukernel. This patch adds support to receive interrupts from GuC but currently enables & partially handles only the interrupt sent by GuC ukernel. Future patches will add support for handling other interrupt types. v2: - Use common low level routines for PM IER/IIR programming (Chris) - Rename interrupt functions to gen9_xxx from gen8_xxx (Chris) - Replace disabling of wake ref asserts with rpm get/put (Chris) v3: - Update comments for more clarity. (Tvrtko) - Remove the masking of GuC interrupt, which was kept masked till the start of bottom half, its not really needed as there is only a single instance of work item & wq is ordered. (Tvrtko) v4: - Rebase. - Rename guc_events to pm_guc_events so as to be indicative of the register/control block it is associated with. (Chris) - Add handling for back to back log buffer flush interrupts. v5: - Move the read & clearing of register, containing Guc2Host message bits, outside the irq spinlock. (Tvrtko) v6: - Move the log buffer flush interrupt related stuff to the following patch so as to do only generic bits in this patch. (Tvrtko) - Rebase. v7: - Remove the interrupts_enabled check from gen9_guc_irq_handler, want to process that last interrupt also before disabling the interrupt, sync against the work queued by irq handler will be done by caller disabling the interrupt. Signed-off-by: Sagar Arun Kamble <sagar.a.kamble@intel.com> Signed-off-by: Akash Goel <akash.goel@intel.com> Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Esse commit está contido em:

commit de
Tvrtko Ursulin

pai
f4e9af4f5a
commit
26705e2075
@@ -6016,6 +6016,7 @@ enum {
|
||||
#define GEN8_DE_PIPE_A_IRQ (1<<16)
|
||||
#define GEN8_DE_PIPE_IRQ(pipe) (1<<(16+(pipe)))
|
||||
#define GEN8_GT_VECS_IRQ (1<<6)
|
||||
#define GEN8_GT_GUC_IRQ (1<<5)
|
||||
#define GEN8_GT_PM_IRQ (1<<4)
|
||||
#define GEN8_GT_VCS2_IRQ (1<<3)
|
||||
#define GEN8_GT_VCS1_IRQ (1<<2)
|
||||
@@ -6027,6 +6028,16 @@ enum {
|
||||
#define GEN8_GT_IIR(which) _MMIO(0x44308 + (0x10 * (which)))
|
||||
#define GEN8_GT_IER(which) _MMIO(0x4430c + (0x10 * (which)))
|
||||
|
||||
#define GEN9_GUC_TO_HOST_INT_EVENT (1<<31)
|
||||
#define GEN9_GUC_EXEC_ERROR_EVENT (1<<30)
|
||||
#define GEN9_GUC_DISPLAY_EVENT (1<<29)
|
||||
#define GEN9_GUC_SEMA_SIGNAL_EVENT (1<<28)
|
||||
#define GEN9_GUC_IOMMU_MSG_EVENT (1<<27)
|
||||
#define GEN9_GUC_DB_RING_EVENT (1<<26)
|
||||
#define GEN9_GUC_DMA_DONE_EVENT (1<<25)
|
||||
#define GEN9_GUC_FATAL_ERROR_EVENT (1<<24)
|
||||
#define GEN9_GUC_NOTIFICATION_EVENT (1<<23)
|
||||
|
||||
#define GEN8_RCS_IRQ_SHIFT 0
|
||||
#define GEN8_BCS_IRQ_SHIFT 16
|
||||
#define GEN8_VCS1_IRQ_SHIFT 0
|
||||
|
Referência em uma nova issue
Block a user