mirror of
https://github.com/ipxe/ipxe
synced 2025-12-20 12:00:19 +03:00
[Infiniband] Fix event queue doorbell ringing on Arbel
This commit is contained in:
@@ -1410,6 +1410,7 @@ static void arbel_poll_eq ( struct ib_device *ibdev ) {
|
|||||||
struct arbel *arbel = ib_get_drvdata ( ibdev );
|
struct arbel *arbel = ib_get_drvdata ( ibdev );
|
||||||
struct arbel_event_queue *arbel_eq = &arbel->eq;
|
struct arbel_event_queue *arbel_eq = &arbel->eq;
|
||||||
union arbelprm_event_entry *eqe;
|
union arbelprm_event_entry *eqe;
|
||||||
|
union arbelprm_eq_doorbell_register db_reg;
|
||||||
unsigned int eqe_idx_mask;
|
unsigned int eqe_idx_mask;
|
||||||
unsigned int event_type;
|
unsigned int event_type;
|
||||||
|
|
||||||
@@ -1445,10 +1446,11 @@ static void arbel_poll_eq ( struct ib_device *ibdev ) {
|
|||||||
arbel_eq->next_idx++;
|
arbel_eq->next_idx++;
|
||||||
|
|
||||||
/* Ring doorbell */
|
/* Ring doorbell */
|
||||||
|
MLX_FILL_1 ( &db_reg.ci, 0, ci, arbel_eq->next_idx );
|
||||||
DBGCP ( arbel, "Ringing doorbell %08lx with %08lx\n",
|
DBGCP ( arbel, "Ringing doorbell %08lx with %08lx\n",
|
||||||
virt_to_phys ( arbel_eq->doorbell ),
|
virt_to_phys ( arbel_eq->doorbell ),
|
||||||
arbel_eq->next_idx );
|
db_reg.dword[0] );
|
||||||
writel ( arbel_eq->next_idx, arbel_eq->doorbell );
|
writel ( db_reg.dword[0], arbel_eq->doorbell );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -122,6 +122,10 @@ struct arbelprm_event_mask_st {
|
|||||||
pseudo_bit_t reserved2[0x00016];
|
pseudo_bit_t reserved2[0x00016];
|
||||||
} __attribute__ (( packed ));
|
} __attribute__ (( packed ));
|
||||||
|
|
||||||
|
struct arbelprm_eq_set_ci_st {
|
||||||
|
pseudo_bit_t ci[0x00020];
|
||||||
|
} __attribute__ (( packed ));
|
||||||
|
|
||||||
struct arbelprm_port_state_change_event_st {
|
struct arbelprm_port_state_change_event_st {
|
||||||
pseudo_bit_t reserved[0x00020];
|
pseudo_bit_t reserved[0x00020];
|
||||||
struct arbelprm_port_state_change_st data;
|
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_cq_ci_db_record );
|
||||||
struct MLX_DECLARE_STRUCT ( arbelprm_event_mask );
|
struct MLX_DECLARE_STRUCT ( arbelprm_event_mask );
|
||||||
struct MLX_DECLARE_STRUCT ( arbelprm_event_queue_entry );
|
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_eqc );
|
||||||
struct MLX_DECLARE_STRUCT ( arbelprm_hca_command_register );
|
struct MLX_DECLARE_STRUCT ( arbelprm_hca_command_register );
|
||||||
struct MLX_DECLARE_STRUCT ( arbelprm_init_hca );
|
struct MLX_DECLARE_STRUCT ( arbelprm_init_hca );
|
||||||
@@ -214,6 +219,11 @@ union arbelprm_doorbell_register {
|
|||||||
uint32_t dword[2];
|
uint32_t dword[2];
|
||||||
} __attribute__ (( packed ));
|
} __attribute__ (( packed ));
|
||||||
|
|
||||||
|
union arbelprm_eq_doorbell_register {
|
||||||
|
struct arbelprm_eq_set_ci ci;
|
||||||
|
uint32_t dword[1];
|
||||||
|
} __attribute__ (( packed ));
|
||||||
|
|
||||||
union arbelprm_mad {
|
union arbelprm_mad {
|
||||||
struct arbelprm_mad_ifc ifc;
|
struct arbelprm_mad_ifc ifc;
|
||||||
union ib_mad mad;
|
union ib_mad mad;
|
||||||
|
|||||||
Reference in New Issue
Block a user