diff options
-rw-r--r-- | drivers/scsi/qla4xxx/ql4_mbx.c | 7 | ||||
-rw-r--r-- | drivers/scsi/qla4xxx/ql4_nx.h | 3 | ||||
-rw-r--r-- | drivers/scsi/qla4xxx/ql4_os.c | 10 |
3 files changed, 20 insertions, 0 deletions
diff --git a/drivers/scsi/qla4xxx/ql4_mbx.c b/drivers/scsi/qla4xxx/ql4_mbx.c index c2593782fbbe..e1e66a45e4d0 100644 --- a/drivers/scsi/qla4xxx/ql4_mbx.c +++ b/drivers/scsi/qla4xxx/ql4_mbx.c | |||
@@ -219,6 +219,13 @@ int qla4xxx_mailbox_command(struct scsi_qla_host *ha, uint8_t inCount, | |||
219 | ha->mailbox_timeout_count++; | 219 | ha->mailbox_timeout_count++; |
220 | mbx_sts[0] = (-1); | 220 | mbx_sts[0] = (-1); |
221 | set_bit(DPC_RESET_HA, &ha->dpc_flags); | 221 | set_bit(DPC_RESET_HA, &ha->dpc_flags); |
222 | if (is_qla8022(ha)) { | ||
223 | ql4_printk(KERN_INFO, ha, | ||
224 | "disabling pause transmit on port 0 & 1.\n"); | ||
225 | qla4_8xxx_wr_32(ha, QLA82XX_CRB_NIU + 0x98, | ||
226 | CRB_NIU_XG_PAUSE_CTL_P0 | | ||
227 | CRB_NIU_XG_PAUSE_CTL_P1); | ||
228 | } | ||
222 | goto mbox_exit; | 229 | goto mbox_exit; |
223 | } | 230 | } |
224 | 231 | ||
diff --git a/drivers/scsi/qla4xxx/ql4_nx.h b/drivers/scsi/qla4xxx/ql4_nx.h index cfb2f2edac3a..dc45ac923691 100644 --- a/drivers/scsi/qla4xxx/ql4_nx.h +++ b/drivers/scsi/qla4xxx/ql4_nx.h | |||
@@ -39,6 +39,9 @@ enum { | |||
39 | QLA82XX_TEMP_PANIC /* Fatal error, hardware has shut down. */ | 39 | QLA82XX_TEMP_PANIC /* Fatal error, hardware has shut down. */ |
40 | }; | 40 | }; |
41 | 41 | ||
42 | #define CRB_NIU_XG_PAUSE_CTL_P0 0x1 | ||
43 | #define CRB_NIU_XG_PAUSE_CTL_P1 0x8 | ||
44 | |||
42 | #define QLA82XX_HW_H0_CH_HUB_ADR 0x05 | 45 | #define QLA82XX_HW_H0_CH_HUB_ADR 0x05 |
43 | #define QLA82XX_HW_H1_CH_HUB_ADR 0x0E | 46 | #define QLA82XX_HW_H1_CH_HUB_ADR 0x0E |
44 | #define QLA82XX_HW_H2_CH_HUB_ADR 0x03 | 47 | #define QLA82XX_HW_H2_CH_HUB_ADR 0x03 |
diff --git a/drivers/scsi/qla4xxx/ql4_os.c b/drivers/scsi/qla4xxx/ql4_os.c index 9d3eab513935..e2ef7762dc24 100644 --- a/drivers/scsi/qla4xxx/ql4_os.c +++ b/drivers/scsi/qla4xxx/ql4_os.c | |||
@@ -2080,6 +2080,11 @@ void qla4_8xxx_watchdog(struct scsi_qla_host *ha) | |||
2080 | dev_state = qla4_8xxx_rd_32(ha, QLA82XX_CRB_DEV_STATE); | 2080 | dev_state = qla4_8xxx_rd_32(ha, QLA82XX_CRB_DEV_STATE); |
2081 | 2081 | ||
2082 | if (qla4_8xxx_check_temp(ha)) { | 2082 | if (qla4_8xxx_check_temp(ha)) { |
2083 | ql4_printk(KERN_INFO, ha, "disabling pause" | ||
2084 | " transmit on port 0 & 1.\n"); | ||
2085 | qla4_8xxx_wr_32(ha, QLA82XX_CRB_NIU + 0x98, | ||
2086 | CRB_NIU_XG_PAUSE_CTL_P0 | | ||
2087 | CRB_NIU_XG_PAUSE_CTL_P1); | ||
2083 | set_bit(DPC_HA_UNRECOVERABLE, &ha->dpc_flags); | 2088 | set_bit(DPC_HA_UNRECOVERABLE, &ha->dpc_flags); |
2084 | qla4xxx_wake_dpc(ha); | 2089 | qla4xxx_wake_dpc(ha); |
2085 | } else if (dev_state == QLA82XX_DEV_NEED_RESET && | 2090 | } else if (dev_state == QLA82XX_DEV_NEED_RESET && |
@@ -2099,6 +2104,11 @@ void qla4_8xxx_watchdog(struct scsi_qla_host *ha) | |||
2099 | } else { | 2104 | } else { |
2100 | /* Check firmware health */ | 2105 | /* Check firmware health */ |
2101 | if (qla4_8xxx_check_fw_alive(ha)) { | 2106 | if (qla4_8xxx_check_fw_alive(ha)) { |
2107 | ql4_printk(KERN_INFO, ha, "disabling pause" | ||
2108 | " transmit on port 0 & 1.\n"); | ||
2109 | qla4_8xxx_wr_32(ha, QLA82XX_CRB_NIU + 0x98, | ||
2110 | CRB_NIU_XG_PAUSE_CTL_P0 | | ||
2111 | CRB_NIU_XG_PAUSE_CTL_P1); | ||
2102 | halt_status = qla4_8xxx_rd_32(ha, | 2112 | halt_status = qla4_8xxx_rd_32(ha, |
2103 | QLA82XX_PEG_HALT_STATUS1); | 2113 | QLA82XX_PEG_HALT_STATUS1); |
2104 | 2114 | ||