Skip to content

Commit c689eff

Browse files
jacob-kellerJeff Kirsher
authored andcommitted
fm10k: don't clear the RXQCTL register when enabling or disabling queues
Ensure that other bits in the RXQCTL register do not get cleared. This ensures that bits related to queue ownership are maintained. Signed-off-by: Jacob Keller <[email protected]> Tested-by: Krishneil Singh <[email protected]> Signed-off-by: Jeff Kirsher <[email protected]>
1 parent 9717c77 commit c689eff

File tree

1 file changed

+5
-3
lines changed

1 file changed

+5
-3
lines changed

drivers/net/ethernet/intel/fm10k/fm10k_pci.c

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -734,15 +734,15 @@ static void fm10k_configure_rx_ring(struct fm10k_intfc *interface,
734734
u64 rdba = ring->dma;
735735
struct fm10k_hw *hw = &interface->hw;
736736
u32 size = ring->count * sizeof(union fm10k_rx_desc);
737-
u32 rxqctl = FM10K_RXQCTL_ENABLE | FM10K_RXQCTL_PF;
738-
u32 rxdctl = FM10K_RXDCTL_WRITE_BACK_MIN_DELAY;
737+
u32 rxqctl, rxdctl = FM10K_RXDCTL_WRITE_BACK_MIN_DELAY;
739738
u32 srrctl = FM10K_SRRCTL_BUFFER_CHAINING_EN;
740739
u32 rxint = FM10K_INT_MAP_DISABLE;
741740
u8 rx_pause = interface->rx_pause;
742741
u8 reg_idx = ring->reg_idx;
743742

744743
/* disable queue to avoid issues while updating state */
745-
fm10k_write_reg(hw, FM10K_RXQCTL(reg_idx), 0);
744+
rxqctl = fm10k_read_reg(hw, FM10K_RXQCTL(reg_idx));
745+
rxqctl &= ~FM10K_RXQCTL_ENABLE;
746746
fm10k_write_flush(hw);
747747

748748
/* possible poll here to verify ring resources have been cleaned */
@@ -797,6 +797,8 @@ static void fm10k_configure_rx_ring(struct fm10k_intfc *interface,
797797
fm10k_write_reg(hw, FM10K_RXINT(reg_idx), rxint);
798798

799799
/* enable queue */
800+
rxqctl = fm10k_read_reg(hw, FM10K_RXQCTL(reg_idx));
801+
rxqctl |= FM10K_RXQCTL_ENABLE;
800802
fm10k_write_reg(hw, FM10K_RXQCTL(reg_idx), rxqctl);
801803

802804
/* place buffers on ring for receive data */

0 commit comments

Comments
 (0)