Patch "igb: Make DMA faster when CPU is active on the PCIe link" has been added to the 5.15-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    igb: Make DMA faster when CPU is active on the PCIe link

to the 5.15-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     igb-make-dma-faster-when-cpu-is-active-on-the-pcie-l.patch
and it can be found in the queue-5.15 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 44a69353a2940563c8c663910b5b9d368650c17e
Author: Kai-Heng Feng <kai.heng.feng@xxxxxxxxxxxxx>
Date:   Tue Jun 21 15:10:56 2022 -0700

    igb: Make DMA faster when CPU is active on the PCIe link
    
    [ Upstream commit 4e0effd9007ea0be31f7488611eb3824b4541554 ]
    
    Intel I210 on some Intel Alder Lake platforms can only achieve ~750Mbps
    Tx speed via iperf. The RR2DCDELAY shows around 0x2xxx DMA delay, which
    will be significantly lower when 1) ASPM is disabled or 2) SoC package
    c-state stays above PC3. When the RR2DCDELAY is around 0x1xxx the Tx
    speed can reach to ~950Mbps.
    
    According to the I210 datasheet "8.26.1 PCIe Misc. Register - PCIEMISC",
    "DMA Idle Indication" doesn't seem to tie to DMA coalesce anymore, so
    set it to 1b for "DMA is considered idle when there is no Rx or Tx AND
    when there are no TLPs indicating that CPU is active detected on the
    PCIe link (such as the host executes CSR or Configuration register read
    or write operation)" and performing Tx should also fall under "active
    CPU on PCIe link" case.
    
    In addition to that, commit b6e0c419f040 ("igb: Move DMA Coalescing init
    code to separate function.") seems to wrongly changed from enabling
    E1000_PCIEMISC_LX_DECISION to disabling it, also fix that.
    
    Fixes: b6e0c419f040 ("igb: Move DMA Coalescing init code to separate function.")
    Signed-off-by: Kai-Heng Feng <kai.heng.feng@xxxxxxxxxxxxx>
    Tested-by: Gurucharan <gurucharanx.g@xxxxxxxxx> (A Contingent worker at Intel)
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@xxxxxxxxx>
    Link: https://lore.kernel.org/r/20220621221056.604304-1-anthony.l.nguyen@xxxxxxxxx
    Signed-off-by: Jakub Kicinski <kuba@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c
index 5ee5ee8e6848..db11a1c278f6 100644
--- a/drivers/net/ethernet/intel/igb/igb_main.c
+++ b/drivers/net/ethernet/intel/igb/igb_main.c
@@ -9823,11 +9823,10 @@ static void igb_init_dmac(struct igb_adapter *adapter, u32 pba)
 	struct e1000_hw *hw = &adapter->hw;
 	u32 dmac_thr;
 	u16 hwm;
+	u32 reg;
 
 	if (hw->mac.type > e1000_82580) {
 		if (adapter->flags & IGB_FLAG_DMAC) {
-			u32 reg;
-
 			/* force threshold to 0. */
 			wr32(E1000_DMCTXTH, 0);
 
@@ -9860,7 +9859,6 @@ static void igb_init_dmac(struct igb_adapter *adapter, u32 pba)
 			/* Disable BMC-to-OS Watchdog Enable */
 			if (hw->mac.type != e1000_i354)
 				reg &= ~E1000_DMACR_DC_BMC2OSW_EN;
-
 			wr32(E1000_DMACR, reg);
 
 			/* no lower threshold to disable
@@ -9877,12 +9875,12 @@ static void igb_init_dmac(struct igb_adapter *adapter, u32 pba)
 			 */
 			wr32(E1000_DMCTXTH, (IGB_MIN_TXPBSIZE -
 			     (IGB_TX_BUF_4096 + adapter->max_frame_size)) >> 6);
+		}
 
-			/* make low power state decision controlled
-			 * by DMA coal
-			 */
+		if (hw->mac.type >= e1000_i210 ||
+		    (adapter->flags & IGB_FLAG_DMAC)) {
 			reg = rd32(E1000_PCIEMISC);
-			reg &= ~E1000_PCIEMISC_LX_DECISION;
+			reg |= E1000_PCIEMISC_LX_DECISION;
 			wr32(E1000_PCIEMISC, reg);
 		} /* endif adapter->dmac is not disabled */
 	} else if (hw->mac.type == e1000_82580) {



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux