diff options
-rw-r--r-- | src/drivers/infiniband/arbel.c | 6 | ||||
-rw-r--r-- | src/drivers/infiniband/arbel.h | 10 |
2 files changed, 14 insertions, 2 deletions
diff --git a/src/drivers/infiniband/arbel.c b/src/drivers/infiniband/arbel.c index d66ce12e3..2aced777e 100644 --- a/src/drivers/infiniband/arbel.c +++ b/src/drivers/infiniband/arbel.c @@ -1410,6 +1410,7 @@ static void arbel_poll_eq ( struct ib_device *ibdev ) { struct arbel *arbel = ib_get_drvdata ( ibdev ); struct arbel_event_queue *arbel_eq = &arbel->eq; union arbelprm_event_entry *eqe; + union arbelprm_eq_doorbell_register db_reg; unsigned int eqe_idx_mask; unsigned int event_type; @@ -1445,10 +1446,11 @@ static void arbel_poll_eq ( struct ib_device *ibdev ) { arbel_eq->next_idx++; /* Ring doorbell */ + MLX_FILL_1 ( &db_reg.ci, 0, ci, arbel_eq->next_idx ); DBGCP ( arbel, "Ringing doorbell %08lx with %08lx\n", virt_to_phys ( arbel_eq->doorbell ), - arbel_eq->next_idx ); - writel ( arbel_eq->next_idx, arbel_eq->doorbell ); + db_reg.dword[0] ); + writel ( db_reg.dword[0], arbel_eq->doorbell ); } } diff --git a/src/drivers/infiniband/arbel.h b/src/drivers/infiniband/arbel.h index 68be8248d..7d97b156c 100644 --- a/src/drivers/infiniband/arbel.h +++ b/src/drivers/infiniband/arbel.h @@ -122,6 +122,10 @@ struct arbelprm_event_mask_st { pseudo_bit_t reserved2[0x00016]; } __attribute__ (( packed )); +struct arbelprm_eq_set_ci_st { + pseudo_bit_t ci[0x00020]; +} __attribute__ (( packed )); + struct arbelprm_port_state_change_event_st { pseudo_bit_t reserved[0x00020]; struct arbelprm_port_state_change_st data; @@ -140,6 +144,7 @@ struct MLX_DECLARE_STRUCT ( arbelprm_cq_arm_db_record ); struct MLX_DECLARE_STRUCT ( arbelprm_cq_ci_db_record ); struct MLX_DECLARE_STRUCT ( arbelprm_event_mask ); struct MLX_DECLARE_STRUCT ( arbelprm_event_queue_entry ); +struct MLX_DECLARE_STRUCT ( arbelprm_eq_set_ci ); struct MLX_DECLARE_STRUCT ( arbelprm_eqc ); struct MLX_DECLARE_STRUCT ( arbelprm_hca_command_register ); struct MLX_DECLARE_STRUCT ( arbelprm_init_hca ); @@ -214,6 +219,11 @@ union arbelprm_doorbell_register { uint32_t dword[2]; } __attribute__ (( packed )); +union arbelprm_eq_doorbell_register { + struct arbelprm_eq_set_ci ci; + uint32_t dword[1]; +} __attribute__ (( packed )); + union arbelprm_mad { struct arbelprm_mad_ifc ifc; union ib_mad mad; |