qed: Don't over-do producer cleanup for Rx
authorYuval Mintz <Yuval.Mintz@qlogic.com>
Wed, 27 Jul 2016 11:45:21 +0000 (14:45 +0300)
committerDavid S. Miller <davem@davemloft.net>
Sun, 31 Jul 2016 03:34:03 +0000 (20:34 -0700)
Before requesting the firmware to start Rx queues,
driver goes and sets the queue producer in the device to 0.
But while the producer is 32-bit, the driver currently clears 64 bits,
effectively zeroing an additional CID's producer as well.

Signed-off-by: Yuval Mintz <Yuval.Mintz@qlogic.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/qlogic/qed/qed_l2.c
drivers/net/ethernet/qlogic/qed/qed_vf.c

index a12c6caa6c663cd1d30250e422eb780d63ec4a69..6ccf32795ea7badfa3aab942013e643e4d704228 100644 (file)
@@ -590,7 +590,7 @@ qed_sp_eth_rx_queue_start(struct qed_hwfn *p_hwfn,
                          u16 cqe_pbl_size, void __iomem **pp_prod)
 {
        struct qed_hw_cid_data *p_rx_cid;
-       u64 init_prod_val = 0;
+       u32 init_prod_val = 0;
        u16 abs_l2_queue = 0;
        u8 abs_stats_id = 0;
        int rc;
@@ -618,7 +618,7 @@ qed_sp_eth_rx_queue_start(struct qed_hwfn *p_hwfn,
                                 MSTORM_ETH_PF_PRODS_OFFSET(abs_l2_queue);
 
        /* Init the rcq, rx bd and rx sge (if valid) producers to 0 */
-       __internal_ram_wr(p_hwfn, *pp_prod, sizeof(u64),
+       __internal_ram_wr(p_hwfn, *pp_prod, sizeof(u32),
                          (u32 *)(&init_prod_val));
 
        /* Allocate a CID for the queue */
index 9819230947bfe9bdd602266b93ed6d4d91e17c13..9b780b31b15c84c92c754d58e9a7ebd7d6eead53 100644 (file)
@@ -388,7 +388,7 @@ int qed_vf_pf_rxq_start(struct qed_hwfn *p_hwfn,
 
        /* Learn the address of the producer from the response */
        if (pp_prod) {
-               u64 init_prod_val = 0;
+               u32 init_prod_val = 0;
 
                *pp_prod = (u8 __iomem *)p_hwfn->regview + resp->offset;
                DP_VERBOSE(p_hwfn, QED_MSG_IOV,
@@ -396,7 +396,7 @@ int qed_vf_pf_rxq_start(struct qed_hwfn *p_hwfn,
                           rx_qid, *pp_prod, resp->offset);
 
                /* Init the rcq, rx bd and rx sge (if valid) producers to 0 */
-               __internal_ram_wr(p_hwfn, *pp_prod, sizeof(u64),
+               __internal_ram_wr(p_hwfn, *pp_prod, sizeof(u32),
                                  (u32 *)&init_prod_val);
        }