IB/hfi1: Rework the IRQ API to be more flexible
The current IRQ API is an all or nothing interface. This has two problems: 1. All IRQs are enabled regardless of use 2. Moving from general interrupt to MSIx handling is difficult Introduce a new API to enable/disable specific IRQs or a range of IRQs. Do not enable and disable all IRQs in one step. Rework various modules to enable/disable IRQs when needed. Reviewed-by: Mike Marciniszyn <mike.marciniszyn@intel.com> Reviewed-by: Sadanand Warrier <sadanand.warrier@intel.com> Signed-off-by: Michael J. Ruhl <michael.j.ruhl@intel.com> Signed-off-by: Dennis Dalessandro <dennis.dalessandro@intel.com> Signed-off-by: Doug Ledford <dledford@redhat.com>
This commit is contained in:

committed by
Doug Ledford

parent
e63bb50d19
commit
a2f7bbdc2d
@@ -52,9 +52,7 @@
|
||||
*/
|
||||
|
||||
/* sizes */
|
||||
#define CCE_NUM_MSIX_VECTORS 256
|
||||
#define CCE_NUM_INT_CSRS 12
|
||||
#define CCE_NUM_INT_MAP_CSRS 96
|
||||
#define BITS_PER_REGISTER (BITS_PER_BYTE * sizeof(u64))
|
||||
#define NUM_INTERRUPT_SOURCES 768
|
||||
#define RXE_NUM_CONTEXTS 160
|
||||
#define RXE_PER_CONTEXT_SIZE 0x1000 /* 4k */
|
||||
@@ -161,34 +159,49 @@
|
||||
(CR_CREDIT_RETURN_DUE_TO_FORCE_MASK << \
|
||||
CR_CREDIT_RETURN_DUE_TO_FORCE_SHIFT)
|
||||
|
||||
/* interrupt source numbers */
|
||||
#define IS_GENERAL_ERR_START 0
|
||||
#define IS_SDMAENG_ERR_START 16
|
||||
#define IS_SENDCTXT_ERR_START 32
|
||||
#define IS_SDMA_START 192 /* includes SDmaProgress,SDmaIdle */
|
||||
/* Specific IRQ sources */
|
||||
#define CCE_ERR_INT 0
|
||||
#define RXE_ERR_INT 1
|
||||
#define MISC_ERR_INT 2
|
||||
#define PIO_ERR_INT 4
|
||||
#define SDMA_ERR_INT 5
|
||||
#define EGRESS_ERR_INT 6
|
||||
#define TXE_ERR_INT 7
|
||||
#define PBC_INT 240
|
||||
#define GPIO_ASSERT_INT 241
|
||||
#define QSFP1_INT 242
|
||||
#define QSFP2_INT 243
|
||||
#define TCRIT_INT 244
|
||||
|
||||
/* interrupt source ranges */
|
||||
#define IS_FIRST_SOURCE CCE_ERR_INT
|
||||
#define IS_GENERAL_ERR_START 0
|
||||
#define IS_SDMAENG_ERR_START 16
|
||||
#define IS_SENDCTXT_ERR_START 32
|
||||
#define IS_SDMA_START 192
|
||||
#define IS_SDMA_PROGRESS_START 208
|
||||
#define IS_SDMA_IDLE_START 224
|
||||
#define IS_VARIOUS_START 240
|
||||
#define IS_DC_START 248
|
||||
#define IS_RCVAVAIL_START 256
|
||||
#define IS_RCVURGENT_START 416
|
||||
#define IS_SENDCREDIT_START 576
|
||||
#define IS_RESERVED_START 736
|
||||
#define IS_MAX_SOURCES 768
|
||||
#define IS_LAST_SOURCE 767
|
||||
|
||||
/* derived interrupt source values */
|
||||
#define IS_GENERAL_ERR_END IS_SDMAENG_ERR_START
|
||||
#define IS_SDMAENG_ERR_END IS_SENDCTXT_ERR_START
|
||||
#define IS_SENDCTXT_ERR_END IS_SDMA_START
|
||||
#define IS_SDMA_END IS_VARIOUS_START
|
||||
#define IS_VARIOUS_END IS_DC_START
|
||||
#define IS_DC_END IS_RCVAVAIL_START
|
||||
#define IS_RCVAVAIL_END IS_RCVURGENT_START
|
||||
#define IS_RCVURGENT_END IS_SENDCREDIT_START
|
||||
#define IS_SENDCREDIT_END IS_RESERVED_START
|
||||
#define IS_RESERVED_END IS_MAX_SOURCES
|
||||
|
||||
/* absolute interrupt numbers for QSFP1Int and QSFP2Int */
|
||||
#define QSFP1_INT 242
|
||||
#define QSFP2_INT 243
|
||||
#define IS_GENERAL_ERR_END 7
|
||||
#define IS_SDMAENG_ERR_END 31
|
||||
#define IS_SENDCTXT_ERR_END 191
|
||||
#define IS_SDMA_END 207
|
||||
#define IS_SDMA_PROGRESS_END 223
|
||||
#define IS_SDMA_IDLE_END 239
|
||||
#define IS_VARIOUS_END 244
|
||||
#define IS_DC_END 255
|
||||
#define IS_RCVAVAIL_END 415
|
||||
#define IS_RCVURGENT_END 575
|
||||
#define IS_SENDCREDIT_END 735
|
||||
#define IS_RESERVED_END IS_LAST_SOURCE
|
||||
|
||||
/* DCC_CFG_PORT_CONFIG logical link states */
|
||||
#define LSTATE_DOWN 0x1
|
||||
@@ -1421,6 +1434,8 @@ irqreturn_t sdma_interrupt(int irq, void *data);
|
||||
irqreturn_t receive_context_interrupt(int irq, void *data);
|
||||
irqreturn_t receive_context_thread(int irq, void *data);
|
||||
|
||||
int set_intr_bits(struct hfi1_devdata *dd, u16 first, u16 last, bool set);
|
||||
void init_qsfp_int(struct hfi1_devdata *dd);
|
||||
void clear_all_interrupts(struct hfi1_devdata *dd);
|
||||
void remap_intr(struct hfi1_devdata *dd, int isrc, int msix_intr);
|
||||
void remap_sdma_interrupts(struct hfi1_devdata *dd, int engine, int msix_intr);
|
||||
|
Reference in New Issue
Block a user