Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d2b292c3 authored by Quinn Tran's avatar Quinn Tran Committed by Martin K. Petersen
Browse files

scsi: qla2xxx: Enable ATIO interrupt handshake for ISP27XX



Enable ATIO Q interrupt handshake for ISP27XX. This patch
coalesce ATIO's interrupts for Quad port ISP27XX adapter.
Interrupt coalesce allows performance to scale for this
specific case.

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 9b3e0f4d
Loading
Loading
Loading
Loading
+25 −14
Original line number Diff line number Diff line
@@ -6574,7 +6574,9 @@ void
qlt_24xx_config_rings(struct scsi_qla_host *vha)
{
	struct qla_hw_data *ha = vha->hw;
	struct init_cb_24xx *icb;
	struct qla_msix_entry *msix = &ha->msix_entries[2];
	struct init_cb_24xx *icb = (struct init_cb_24xx *)ha->init_cb;

	if (!QLA_TGT_MODE_ENABLED())
		return;

@@ -6582,19 +6584,28 @@ qlt_24xx_config_rings(struct scsi_qla_host *vha)
	WRT_REG_DWORD(ISP_ATIO_Q_OUT(vha), 0);
	RD_REG_DWORD(ISP_ATIO_Q_OUT(vha));

	icb = (struct init_cb_24xx *)ha->init_cb;

	if ((ql2xenablemsix != 0) && IS_ATIO_MSIX_CAPABLE(ha)) {
		struct qla_msix_entry *msix = &ha->msix_entries[2];

	if (ha->flags.msix_enabled) {
		if (IS_QLA83XX(ha) || IS_QLA27XX(ha)) {
			if (IS_QLA2071(ha)) {
				/* 4 ports Baker: Enable Interrupt Handshake */
				icb->msix_atio = 0;
				icb->firmware_options_2 |= BIT_26;
			} else {
				icb->msix_atio = cpu_to_le16(msix->entry);
				icb->firmware_options_2 &= ~BIT_26;
			}
			ql_dbg(ql_dbg_init, vha, 0xf072,
			    "Registering ICB vector 0x%x for atio que.\n",
			    msix->entry);
	} else if (ql2xenablemsix == 0) {
		icb->firmware_options_2 |= cpu_to_le32(BIT_26);
		ql_dbg(ql_dbg_init, vha, 0xf07f,
		    "Registering INTx vector for ATIO.\n");
		}
	} else {
		/* INTx|MSI */
		if (IS_QLA83XX(ha) || IS_QLA27XX(ha)) {
			icb->msix_atio = 0;
			icb->firmware_options_2 |= BIT_26;
			ql_dbg(ql_dbg_init, vha, 0xf072,
			    "%s: Use INTx for ATIOQ.\n", __func__);
		}
	}
}