mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-24 19:40:52 +07:00
scsi: lpfc: Fix missing check for CSF in Write Object Mbox Rsp
When the WriteObject mailbox response has change_status set to is 0x2 (Firmware Reset) or 0x04 (Port Migration Reset), the CSF field should also be checked to see if a fw reset is sufficient to enable all new features in the updated firmware image. If not, a fw reset would start the new firmware, but with a feature level equal to existing firmware. To enable the new features, a chip reset/pci slot reset would be required. Check the CSF bit when change_status is 0x2 or 0x4 to know whether to perform a pci bus reset or fw reset. Link: https://lore.kernel.org/r/20191218235808.31922-4-jsmart2021@gmail.com Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com> Signed-off-by: James Smart <jsmart2021@gmail.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
df9166bfa7
commit
f3d0a8acc5
@ -3925,6 +3925,9 @@ struct lpfc_mbx_wr_object {
|
||||
#define LPFC_CHANGE_STATUS_FW_RESET 0x02
|
||||
#define LPFC_CHANGE_STATUS_PORT_MIGRATION 0x04
|
||||
#define LPFC_CHANGE_STATUS_PCI_RESET 0x05
|
||||
#define lpfc_wr_object_csf_SHIFT 8
|
||||
#define lpfc_wr_object_csf_MASK 0x00000001
|
||||
#define lpfc_wr_object_csf_WORD word5
|
||||
} response;
|
||||
} u;
|
||||
};
|
||||
|
@ -19449,7 +19449,7 @@ lpfc_wr_object(struct lpfc_hba *phba, struct list_head *dmabuf_list,
|
||||
struct lpfc_mbx_wr_object *wr_object;
|
||||
LPFC_MBOXQ_t *mbox;
|
||||
int rc = 0, i = 0;
|
||||
uint32_t shdr_status, shdr_add_status, shdr_change_status;
|
||||
uint32_t shdr_status, shdr_add_status, shdr_change_status, shdr_csf;
|
||||
uint32_t mbox_tmo;
|
||||
struct lpfc_dmabuf *dmabuf;
|
||||
uint32_t written = 0;
|
||||
@ -19506,6 +19506,16 @@ lpfc_wr_object(struct lpfc_hba *phba, struct list_head *dmabuf_list,
|
||||
if (check_change_status) {
|
||||
shdr_change_status = bf_get(lpfc_wr_object_change_status,
|
||||
&wr_object->u.response);
|
||||
|
||||
if (shdr_change_status == LPFC_CHANGE_STATUS_FW_RESET ||
|
||||
shdr_change_status == LPFC_CHANGE_STATUS_PORT_MIGRATION) {
|
||||
shdr_csf = bf_get(lpfc_wr_object_csf,
|
||||
&wr_object->u.response);
|
||||
if (shdr_csf)
|
||||
shdr_change_status =
|
||||
LPFC_CHANGE_STATUS_PCI_RESET;
|
||||
}
|
||||
|
||||
switch (shdr_change_status) {
|
||||
case (LPFC_CHANGE_STATUS_PHYS_DEV_RESET):
|
||||
lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
|
||||
|
Loading…
Reference in New Issue
Block a user