Merge branch 'hns3-next'
Salil Mehta says: ==================== Bug fixes & optimization for HNS3 Driver This patch-set presents miscellaneous bug fixes and an optimization for HNS3 driver V1->V2: * Fixes the compilation break reported by David Miller & Kbuild ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
96a3c9a489
|
@ -2557,6 +2557,15 @@ static void hclge_clear_event_cause(struct hclge_dev *hdev, u32 event_type,
|
|||
}
|
||||
}
|
||||
|
||||
static void hclge_clear_all_event_cause(struct hclge_dev *hdev)
|
||||
{
|
||||
hclge_clear_event_cause(hdev, HCLGE_VECTOR0_EVENT_RST,
|
||||
BIT(HCLGE_VECTOR0_GLOBALRESET_INT_B) |
|
||||
BIT(HCLGE_VECTOR0_CORERESET_INT_B) |
|
||||
BIT(HCLGE_VECTOR0_IMPRESET_INT_B));
|
||||
hclge_clear_event_cause(hdev, HCLGE_VECTOR0_EVENT_MBX, 0);
|
||||
}
|
||||
|
||||
static void hclge_enable_vector(struct hclge_misc_vector *vector, bool enable)
|
||||
{
|
||||
writel(enable ? 1 : 0, vector->addr);
|
||||
|
@ -5688,6 +5697,8 @@ static int hclge_init_ae_dev(struct hnae3_ae_dev *ae_dev)
|
|||
INIT_WORK(&hdev->rst_service_task, hclge_reset_service_task);
|
||||
INIT_WORK(&hdev->mbx_service_task, hclge_mailbox_service_task);
|
||||
|
||||
hclge_clear_all_event_cause(hdev);
|
||||
|
||||
/* Enable MISC vector(vector0) */
|
||||
hclge_enable_vector(&hdev->misc_vector, true);
|
||||
|
||||
|
@ -5817,6 +5828,8 @@ static void hclge_uninit_ae_dev(struct hnae3_ae_dev *ae_dev)
|
|||
|
||||
/* Disable MISC vector(vector0) */
|
||||
hclge_enable_vector(&hdev->misc_vector, false);
|
||||
synchronize_irq(hdev->misc_vector.vector_irq);
|
||||
|
||||
hclge_destroy_cmd_queue(&hdev->hw);
|
||||
hclge_misc_irq_uninit(hdev);
|
||||
hclge_pci_uninit(hdev);
|
||||
|
|
|
@ -1565,6 +1565,8 @@ static int hclgevf_misc_irq_init(struct hclgevf_dev *hdev)
|
|||
return ret;
|
||||
}
|
||||
|
||||
hclgevf_clear_event_cause(hdev, 0);
|
||||
|
||||
/* enable misc. vector(vector 0) */
|
||||
hclgevf_enable_vector(&hdev->misc_vector, true);
|
||||
|
||||
|
@ -1575,6 +1577,7 @@ static void hclgevf_misc_irq_uninit(struct hclgevf_dev *hdev)
|
|||
{
|
||||
/* disable misc vector(vector 0) */
|
||||
hclgevf_enable_vector(&hdev->misc_vector, false);
|
||||
synchronize_irq(hdev->misc_vector.vector_irq);
|
||||
free_irq(hdev->misc_vector.vector_irq, hdev);
|
||||
hclgevf_free_vector(hdev, 0);
|
||||
}
|
||||
|
|
|
@ -126,6 +126,13 @@ int hclgevf_send_mbx_msg(struct hclgevf_dev *hdev, u16 code, u16 subcode,
|
|||
return status;
|
||||
}
|
||||
|
||||
static bool hclgevf_cmd_crq_empty(struct hclgevf_hw *hw)
|
||||
{
|
||||
u32 tail = hclgevf_read_dev(hw, HCLGEVF_NIC_CRQ_TAIL_REG);
|
||||
|
||||
return tail == hw->cmq.crq.next_to_use;
|
||||
}
|
||||
|
||||
void hclgevf_mbx_handler(struct hclgevf_dev *hdev)
|
||||
{
|
||||
struct hclgevf_mbx_resp_status *resp;
|
||||
|
@ -140,11 +147,22 @@ void hclgevf_mbx_handler(struct hclgevf_dev *hdev)
|
|||
resp = &hdev->mbx_resp;
|
||||
crq = &hdev->hw.cmq.crq;
|
||||
|
||||
flag = le16_to_cpu(crq->desc[crq->next_to_use].flag);
|
||||
while (hnae_get_bit(flag, HCLGEVF_CMDQ_RX_OUTVLD_B)) {
|
||||
while (!hclgevf_cmd_crq_empty(&hdev->hw)) {
|
||||
desc = &crq->desc[crq->next_to_use];
|
||||
req = (struct hclge_mbx_pf_to_vf_cmd *)desc->data;
|
||||
|
||||
flag = le16_to_cpu(crq->desc[crq->next_to_use].flag);
|
||||
if (unlikely(!hnae_get_bit(flag, HCLGEVF_CMDQ_RX_OUTVLD_B))) {
|
||||
dev_warn(&hdev->pdev->dev,
|
||||
"dropped invalid mailbox message, code = %d\n",
|
||||
req->msg[0]);
|
||||
|
||||
/* dropping/not processing this invalid message */
|
||||
crq->desc[crq->next_to_use].flag = 0;
|
||||
hclge_mbx_ring_ptr_move_crq(crq);
|
||||
continue;
|
||||
}
|
||||
|
||||
/* synchronous messages are time critical and need preferential
|
||||
* treatment. Therefore, we need to acknowledge all the sync
|
||||
* responses as quickly as possible so that waiting tasks do not
|
||||
|
@ -205,7 +223,6 @@ void hclgevf_mbx_handler(struct hclgevf_dev *hdev)
|
|||
}
|
||||
crq->desc[crq->next_to_use].flag = 0;
|
||||
hclge_mbx_ring_ptr_move_crq(crq);
|
||||
flag = le16_to_cpu(crq->desc[crq->next_to_use].flag);
|
||||
}
|
||||
|
||||
/* Write back CMDQ_RQ header pointer, M7 need this pointer */
|
||||
|
|
Loading…
Reference in New Issue