aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/drivers/infiniband/arbel.c6
-rw-r--r--src/drivers/infiniband/arbel.h10
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;