scsi: lpfc: Add SLI-4 if_type=6 support to the code base
New hardware supports a SLI-4 interface, but with a new if_type variant of 6. If_type=6 has a different PCI BAR map, separate EQ/CQ doorbells, and some changes in doorbell formats. Add the changes for the if_type into headers, adapter initialization and control flows. Add new eq and cq handlers. Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com> Signed-off-by: James Smart <james.smart@broadcom.com> Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:

committed by
Martin K. Petersen

parent
9dd35425a5
commit
27d6ac0a6e
@@ -84,6 +84,7 @@ struct lpfc_sli_intf {
|
||||
#define LPFC_SLI_INTF_IF_TYPE_0 0
|
||||
#define LPFC_SLI_INTF_IF_TYPE_1 1
|
||||
#define LPFC_SLI_INTF_IF_TYPE_2 2
|
||||
#define LPFC_SLI_INTF_IF_TYPE_6 6
|
||||
#define lpfc_sli_intf_sli_family_SHIFT 8
|
||||
#define lpfc_sli_intf_sli_family_MASK 0x0000000F
|
||||
#define lpfc_sli_intf_sli_family_WORD word0
|
||||
@@ -731,11 +732,13 @@ struct lpfc_register {
|
||||
* register sets depending on the UCNA Port's reported if_type
|
||||
* value. For UCNA ports running SLI4 and if_type 0, they reside in
|
||||
* BAR4. For UCNA ports running SLI4 and if_type 2, they reside in
|
||||
* BAR0. The offsets are the same so the driver must account for
|
||||
* any base address difference.
|
||||
* BAR0. For FC ports running SLI4 and if_type 6, they reside in
|
||||
* BAR2. The offsets and base address are different, so the driver
|
||||
* has to compute the register addresses accordingly
|
||||
*/
|
||||
#define LPFC_ULP0_RQ_DOORBELL 0x00A0
|
||||
#define LPFC_ULP1_RQ_DOORBELL 0x00C0
|
||||
#define LPFC_IF6_RQ_DOORBELL 0x0080
|
||||
#define lpfc_rq_db_list_fm_num_posted_SHIFT 24
|
||||
#define lpfc_rq_db_list_fm_num_posted_MASK 0x00FF
|
||||
#define lpfc_rq_db_list_fm_num_posted_WORD word0
|
||||
@@ -770,6 +773,20 @@ struct lpfc_register {
|
||||
#define lpfc_wq_db_ring_fm_id_MASK 0xFFFF
|
||||
#define lpfc_wq_db_ring_fm_id_WORD word0
|
||||
|
||||
#define LPFC_IF6_WQ_DOORBELL 0x0040
|
||||
#define lpfc_if6_wq_db_list_fm_num_posted_SHIFT 24
|
||||
#define lpfc_if6_wq_db_list_fm_num_posted_MASK 0x00FF
|
||||
#define lpfc_if6_wq_db_list_fm_num_posted_WORD word0
|
||||
#define lpfc_if6_wq_db_list_fm_dpp_SHIFT 23
|
||||
#define lpfc_if6_wq_db_list_fm_dpp_MASK 0x0001
|
||||
#define lpfc_if6_wq_db_list_fm_dpp_WORD word0
|
||||
#define lpfc_if6_wq_db_list_fm_dpp_id_SHIFT 16
|
||||
#define lpfc_if6_wq_db_list_fm_dpp_id_MASK 0x001F
|
||||
#define lpfc_if6_wq_db_list_fm_dpp_id_WORD word0
|
||||
#define lpfc_if6_wq_db_list_fm_id_SHIFT 0
|
||||
#define lpfc_if6_wq_db_list_fm_id_MASK 0xFFFF
|
||||
#define lpfc_if6_wq_db_list_fm_id_WORD word0
|
||||
|
||||
#define LPFC_EQCQ_DOORBELL 0x0120
|
||||
#define lpfc_eqcq_doorbell_se_SHIFT 31
|
||||
#define lpfc_eqcq_doorbell_se_MASK 0x0001
|
||||
@@ -805,6 +822,38 @@ struct lpfc_register {
|
||||
#define LPFC_CQID_HI_FIELD_SHIFT 10
|
||||
#define LPFC_EQID_HI_FIELD_SHIFT 9
|
||||
|
||||
#define LPFC_IF6_CQ_DOORBELL 0x00C0
|
||||
#define lpfc_if6_cq_doorbell_se_SHIFT 31
|
||||
#define lpfc_if6_cq_doorbell_se_MASK 0x0001
|
||||
#define lpfc_if6_cq_doorbell_se_WORD word0
|
||||
#define LPFC_IF6_CQ_SOLICIT_ENABLE_OFF 0
|
||||
#define LPFC_IF6_CQ_SOLICIT_ENABLE_ON 1
|
||||
#define lpfc_if6_cq_doorbell_arm_SHIFT 29
|
||||
#define lpfc_if6_cq_doorbell_arm_MASK 0x0001
|
||||
#define lpfc_if6_cq_doorbell_arm_WORD word0
|
||||
#define lpfc_if6_cq_doorbell_num_released_SHIFT 16
|
||||
#define lpfc_if6_cq_doorbell_num_released_MASK 0x1FFF
|
||||
#define lpfc_if6_cq_doorbell_num_released_WORD word0
|
||||
#define lpfc_if6_cq_doorbell_cqid_SHIFT 0
|
||||
#define lpfc_if6_cq_doorbell_cqid_MASK 0xFFFF
|
||||
#define lpfc_if6_cq_doorbell_cqid_WORD word0
|
||||
|
||||
#define LPFC_IF6_EQ_DOORBELL 0x0120
|
||||
#define lpfc_if6_eq_doorbell_io_SHIFT 31
|
||||
#define lpfc_if6_eq_doorbell_io_MASK 0x0001
|
||||
#define lpfc_if6_eq_doorbell_io_WORD word0
|
||||
#define LPFC_IF6_EQ_INTR_OVERRIDE_OFF 0
|
||||
#define LPFC_IF6_EQ_INTR_OVERRIDE_ON 1
|
||||
#define lpfc_if6_eq_doorbell_arm_SHIFT 29
|
||||
#define lpfc_if6_eq_doorbell_arm_MASK 0x0001
|
||||
#define lpfc_if6_eq_doorbell_arm_WORD word0
|
||||
#define lpfc_if6_eq_doorbell_num_released_SHIFT 16
|
||||
#define lpfc_if6_eq_doorbell_num_released_MASK 0x1FFF
|
||||
#define lpfc_if6_eq_doorbell_num_released_WORD word0
|
||||
#define lpfc_if6_eq_doorbell_eqid_SHIFT 0
|
||||
#define lpfc_if6_eq_doorbell_eqid_MASK 0x0FFF
|
||||
#define lpfc_if6_eq_doorbell_eqid_WORD word0
|
||||
|
||||
#define LPFC_BMBX 0x0160
|
||||
#define lpfc_bmbx_addr_SHIFT 2
|
||||
#define lpfc_bmbx_addr_MASK 0x3FFFFFFF
|
||||
@@ -817,6 +866,7 @@ struct lpfc_register {
|
||||
#define lpfc_bmbx_rdy_WORD word0
|
||||
|
||||
#define LPFC_MQ_DOORBELL 0x0140
|
||||
#define LPFC_IF6_MQ_DOORBELL 0x0160
|
||||
#define lpfc_mq_doorbell_num_posted_SHIFT 16
|
||||
#define lpfc_mq_doorbell_num_posted_MASK 0x3FFF
|
||||
#define lpfc_mq_doorbell_num_posted_WORD word0
|
||||
|
Reference in New Issue
Block a user