Chengwen Feng c4ae39b2cf net/hns3: fix Rx interrupt after reset
Currently, Rx interrupt cannot work normally after reset (such as FLR,
global reset and IMP reset), when running l3fwd-power application based
on hns3 network engine.

The root cause is that the hardware configuration about Rx interrupt
does not recover after reset.

This patch fixes it with the following modification.
1. The internal static function named hns3(vf)_init_ring_with_vector is
   moved from hns3_init_pf to hns3(vf)_init_hardware because
   hns3(vf)_init_hardware is called both in the initialization and the
   RESET_STAGE_DEV_INIT stage of the reset process.
2. The internal static function named hns3(vf)_restore_rx_interrupt is
   added in hns3(vf)_restore_conf, it is used to recover hardware
   configuration about interrupt vectors of rx queues in the
   RESET_STAGE_DEV_INIT stage of the reset process.
3. The internal static function named hns3_dev_all_rx_queue_intr_enable
   and hns3_enable_all_queues are added in hns3(vf)_dev_start(which
   called in the initialization, so after calling the rte_eth_dev_start
   API successfully, the driver is ready to work.
4. The function named hns3_dev_all_rx_queue_intr_enable and
   hns3_enable_all_queues are also added in hns3(vf)_start_service(which
   called in the RESET_STAGE_DEV_INIT stage of the reset process), so
   after start_service, the driver is ready to work.

Note:
1. Because FLR will clear queue's interrupt enable bit hardware
   configuration, so we add calling hns3_dev_all_rx_queue_intr_enable to
   enable interrupt before enabling queues.
2. After finished the initialization, we can enable queues to work by
   calling the internal function named hns3_enable_all_queues.

Fixes: 02a7b55657b2 ("net/hns3: support Rx interrupt")
Cc: stable@dpdk.org

Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
Signed-off-by: Wei Hu (Xavier) <xavier.huwei@huawei.com>
Signed-off-by: Hongbo Zheng <zhenghongbo3@huawei.com>
2020-04-21 13:57:07 +02:00
..
2020-02-14 12:42:12 +01:00
2020-04-16 18:16:46 +02:00
2020-04-16 18:16:46 +02:00
2020-04-16 18:16:46 +02:00
2020-04-21 13:57:05 +02:00
2020-04-16 18:30:58 +02:00
2020-04-21 13:57:05 +02:00
2020-04-16 18:30:58 +02:00
2020-04-16 18:30:58 +02:00
2020-04-16 18:30:58 +02:00
2020-04-16 18:30:58 +02:00
2020-04-21 13:57:07 +02:00
2020-04-21 13:57:07 +02:00
2020-04-16 18:30:58 +02:00
2020-04-21 13:57:05 +02:00
2020-04-21 13:57:06 +02:00
2020-04-21 13:57:07 +02:00
2020-04-16 18:30:58 +02:00
2020-04-21 13:57:06 +02:00
2020-04-16 18:16:46 +02:00
2020-04-21 13:57:06 +02:00
2020-04-21 13:57:07 +02:00
2020-04-21 13:57:06 +02:00
2020-01-20 18:02:17 +01:00