Commit af7bb382 authored by Quinn Tran's avatar Quinn Tran Committed by Martin K. Petersen

scsi: qla2xxx: use shadow register for ISP27XX

For ISP27XX, use shadow register to read FW provided REQQ's consumer
index.  The shadow register is dma'ed by firmware.
Signed-off-by: default avatarQuinn Tran <quinn.tran@cavium.com>
Signed-off-by: default avatarHimanshu Madhani <himanshu.madhani@cavium.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent 7c3f8fd1
...@@ -3266,6 +3266,7 @@ struct qla_qpair { ...@@ -3266,6 +3266,7 @@ struct qla_qpair {
uint32_t fw_started:1; uint32_t fw_started:1;
uint32_t enable_class_2:1; uint32_t enable_class_2:1;
uint32_t enable_explicit_conf:1; uint32_t enable_explicit_conf:1;
uint32_t use_shadow_reg:1;
uint16_t id; /* qp number used with FW */ uint16_t id; /* qp number used with FW */
uint16_t vp_idx; /* vport ID */ uint16_t vp_idx; /* vport ID */
......
...@@ -7614,6 +7614,7 @@ struct qla_qpair *qla2xxx_create_qpair(struct scsi_qla_host *vha, int qos, ...@@ -7614,6 +7614,7 @@ struct qla_qpair *qla2xxx_create_qpair(struct scsi_qla_host *vha, int qos,
qpair->vha = vha; qpair->vha = vha;
qpair->qp_lock_ptr = &qpair->qp_lock; qpair->qp_lock_ptr = &qpair->qp_lock;
spin_lock_init(&qpair->qp_lock); spin_lock_init(&qpair->qp_lock);
qpair->use_shadow_reg = IS_SHADOW_REG_CAPABLE(ha) ? 1 : 0;
/* Assign available que pair id */ /* Assign available que pair id */
mutex_lock(&ha->mq_lock); mutex_lock(&ha->mq_lock);
......
...@@ -384,6 +384,7 @@ static int qla2x00_alloc_queues(struct qla_hw_data *ha, struct req_que *req, ...@@ -384,6 +384,7 @@ static int qla2x00_alloc_queues(struct qla_hw_data *ha, struct req_que *req,
ha->base_qpair->rsp = rsp; ha->base_qpair->rsp = rsp;
ha->base_qpair->vha = vha; ha->base_qpair->vha = vha;
ha->base_qpair->qp_lock_ptr = &ha->hardware_lock; ha->base_qpair->qp_lock_ptr = &ha->hardware_lock;
ha->base_qpair->use_shadow_reg = IS_SHADOW_REG_CAPABLE(ha) ? 1 : 0;
/* init qpair to this cpu. Will adjust at run time. */ /* init qpair to this cpu. Will adjust at run time. */
ha->base_qpair->msix = &ha->msix_entries[QLA_MSIX_RSP_Q]; ha->base_qpair->msix = &ha->msix_entries[QLA_MSIX_RSP_Q];
INIT_LIST_HEAD(&ha->base_qpair->hints_list); INIT_LIST_HEAD(&ha->base_qpair->hints_list);
......
...@@ -2288,7 +2288,8 @@ static int qlt_check_reserve_free_req(struct qla_qpair *qpair, ...@@ -2288,7 +2288,8 @@ static int qlt_check_reserve_free_req(struct qla_qpair *qpair,
struct req_que *req = qpair->req; struct req_que *req = qpair->req;
if (req->cnt < (req_cnt + 2)) { if (req->cnt < (req_cnt + 2)) {
cnt = (uint16_t)RD_REG_DWORD(req->req_q_out); cnt = (uint16_t)(qpair->use_shadow_reg ? *req->out_ptr :
RD_REG_DWORD_RELAXED(req->req_q_out));
if (req->ring_index < cnt) if (req->ring_index < cnt)
req->cnt = cnt - req->ring_index; req->cnt = cnt - req->ring_index;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment