mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-16 17:23:55 +08:00
net: hns3: add handler for NCSI error mailbox
When NCSI has HW error, the IMP will report this error to the driver by sending a mailbox. After received this message, the driver should assert a global reset to fix this kind of HW error. Signed-off-by: Huazhong Tan <tanhuazhong@huawei.com> Reviewed-by: Peng Li <lipeng321@huawei.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
ed8fb4b262
commit
b18bf305c4
@ -48,6 +48,7 @@ enum HCLGE_MBX_OPCODE {
|
||||
|
||||
HCLGE_MBX_GET_VF_FLR_STATUS = 200, /* (M7 -> PF) get vf reset status */
|
||||
HCLGE_MBX_PUSH_LINK_STATUS, /* (M7 -> PF) get port link status */
|
||||
HCLGE_MBX_NCSI_ERROR, /* (M7 -> PF) receive a NCSI error */
|
||||
};
|
||||
|
||||
/* below are per-VF mac-vlan subcodes */
|
||||
|
@ -394,6 +394,7 @@ static int hclge_firmware_compat_config(struct hclge_dev *hdev)
|
||||
req = (struct hclge_firmware_compat_cmd *)desc.data;
|
||||
|
||||
hnae3_set_bit(compat, HCLGE_LINK_EVENT_REPORT_EN_B, 1);
|
||||
hnae3_set_bit(compat, HCLGE_NCSI_ERROR_REPORT_EN_B, 1);
|
||||
req->compat = cpu_to_le32(compat);
|
||||
|
||||
return hclge_cmd_send(&hdev->hw, &desc, 1);
|
||||
|
@ -1011,6 +1011,7 @@ struct hclge_query_ppu_pf_other_int_dfx_cmd {
|
||||
};
|
||||
|
||||
#define HCLGE_LINK_EVENT_REPORT_EN_B 0
|
||||
#define HCLGE_NCSI_ERROR_REPORT_EN_B 1
|
||||
struct hclge_firmware_compat_cmd {
|
||||
__le32 compat;
|
||||
u8 rsv[20];
|
||||
|
@ -582,6 +582,15 @@ static bool hclge_cmd_crq_empty(struct hclge_hw *hw)
|
||||
return tail == hw->cmq.crq.next_to_use;
|
||||
}
|
||||
|
||||
static void hclge_handle_ncsi_error(struct hclge_dev *hdev)
|
||||
{
|
||||
struct hnae3_ae_dev *ae_dev = hdev->ae_dev;
|
||||
|
||||
ae_dev->ops->set_default_reset_request(ae_dev, HNAE3_GLOBAL_RESET);
|
||||
dev_warn(&hdev->pdev->dev, "requesting reset due to NCSI error\n");
|
||||
ae_dev->ops->reset_event(hdev->pdev, NULL);
|
||||
}
|
||||
|
||||
void hclge_mbx_handler(struct hclge_dev *hdev)
|
||||
{
|
||||
struct hclge_cmq_ring *crq = &hdev->hw.cmq.crq;
|
||||
@ -740,6 +749,9 @@ void hclge_mbx_handler(struct hclge_dev *hdev)
|
||||
case HCLGE_MBX_PUSH_LINK_STATUS:
|
||||
hclge_handle_link_change_event(hdev, req);
|
||||
break;
|
||||
case HCLGE_MBX_NCSI_ERROR:
|
||||
hclge_handle_ncsi_error(hdev);
|
||||
break;
|
||||
default:
|
||||
dev_err(&hdev->pdev->dev,
|
||||
"un-supported mailbox message, code = %d\n",
|
||||
|
Loading…
Reference in New Issue
Block a user