stmmac: add the initial tx coalesce schema
This patch adds a new schema used for mitigating the number of transmit interrupts. It is based on a SW timer and a threshold value. The timer is used to periodically call the stmmac_tx_clean function; the threshold is used for setting the IC (Interrupt on Completion bit). The ISR will then invoke the poll method. Also the patch improves some ethtool stat fields. V2: review the logic to manage the IC bit in the TDESC that was bugged because it didn't take care about the fragments. Also fix the tx_count_frames that has not to be limited to TX DMA ring. Thanks to Ben Hutchings. V3: removed the spin_lock irqsave/restore as D. Miller suggested. Signed-off-by: Giuseppe Cavallaro <peppe.cavallaro@st.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
7284a3f1ad
commit
9125cdd1be
@@ -95,9 +95,12 @@ struct stmmac_extra_stats {
|
||||
unsigned long threshold;
|
||||
unsigned long tx_pkt_n;
|
||||
unsigned long rx_pkt_n;
|
||||
unsigned long poll_n;
|
||||
unsigned long sched_timer_n;
|
||||
unsigned long normal_irq_n;
|
||||
unsigned long rx_normal_irq_n;
|
||||
unsigned long napi_poll;
|
||||
unsigned long tx_normal_irq_n;
|
||||
unsigned long tx_clean;
|
||||
unsigned long tx_reset_ic_bit;
|
||||
unsigned long mmc_tx_irq_n;
|
||||
unsigned long mmc_rx_irq_n;
|
||||
unsigned long mmc_rx_csum_offload_irq_n;
|
||||
@@ -162,6 +165,12 @@ struct stmmac_extra_stats {
|
||||
#define DMA_HW_FEAT_ACTPHYIF 0x70000000 /* Active/selected PHY interface */
|
||||
#define DEFAULT_DMA_PBL 8
|
||||
|
||||
/* Tx coalesce parameters */
|
||||
#define STMMAC_COAL_TX_TIMER 40000
|
||||
#define STMMAC_MAX_COAL_TX_TICK 100000
|
||||
#define STMMAC_TX_MAX_FRAMES 256
|
||||
#define STMMAC_TX_FRAMES 64
|
||||
|
||||
enum rx_frame_status { /* IPC status */
|
||||
good_frame = 0,
|
||||
discard_frame = 1,
|
||||
@@ -169,10 +178,11 @@ enum rx_frame_status { /* IPC status */
|
||||
llc_snap = 4,
|
||||
};
|
||||
|
||||
enum tx_dma_irq_status {
|
||||
tx_hard_error = 1,
|
||||
tx_hard_error_bump_tc = 2,
|
||||
handle_tx_rx = 3,
|
||||
enum dma_irq_status {
|
||||
tx_hard_error = 0x1,
|
||||
tx_hard_error_bump_tc = 0x2,
|
||||
handle_rx = 0x4,
|
||||
handle_tx = 0x8,
|
||||
};
|
||||
|
||||
enum core_specific_irq_mask {
|
||||
|
Reference in New Issue
Block a user