Commit c693723b authored by Chad Monroe's avatar Chad Monroe Committed by Felix Fietkau
Browse files

wifi: mt76: mt7915: exclude tx backoff time from airtime



This helps to make STA airtime counters more accurate.

Signed-off-by: default avatarChad Monroe <chad@monroe.io>
Suggested-by: default avatarRyder Lee <ryder.lee@mediatek.com>
Link: https://patch.msgid.link/026380cec180261956b983cbdb009605867bcd8d.1732596478.git.chad@monroe.io


Signed-off-by: default avatarFelix Fietkau <nbd@nbd.name>
parent 64d57174
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -512,6 +512,15 @@ mt7915_mac_init_band(struct mt7915_dev *dev, u8 band)
	mt76_clear(dev, MT_WF_RMAC_MIB_AIRTIME4(band),
		   MT_WF_RMAC_MIB_QOS23_BACKOFF);

	/* clear backoff time for Tx duration */
	mt76_clear(dev, MT_WTBLOFF_TOP_ACR(band),
		   MT_WTBLOFF_TOP_ADM_BACKOFFTIME);

	/* exclude estimated backoff time for Tx duration on MT7915 */
	if (is_mt7915(&dev->mt76))
		mt76_set(dev, MT_AGG_ATCR0(band),
			   MT_AGG_ATCR_MAC_BFF_TIME_EN);

	/* clear backoff time and set software compensation for OBSS time */
	mask = MT_WF_RMAC_MIB_OBSS_BACKOFF | MT_WF_RMAC_MIB_ED_OFFSET;
	set = FIELD_PREP(MT_WF_RMAC_MIB_OBSS_BACKOFF, 0) |
+7 −2
Original line number Diff line number Diff line
@@ -3150,8 +3150,13 @@ int mt7915_mcu_get_chan_mib_info(struct mt7915_phy *phy, bool chan_switch)
	res = (struct mt7915_mcu_mib *)(skb->data + offs_cc);

#define __res_u64(s) le64_to_cpu(res[s].data)
	/* subtract Tx backoff time from Tx duration */
	cc_tx = is_mt7915(&dev->mt76) ? __res_u64(1) - __res_u64(4) : __res_u64(1);
	/* subtract Tx backoff time from Tx duration for MT7915 */
	if (is_mt7915(&dev->mt76)) {
		u64 backoff = (__res_u64(4) & 0xffff) * 79;  /* 16us + 9us * 7 */
		cc_tx = __res_u64(1) - backoff;
	} else {
		cc_tx = __res_u64(1);
	}

	if (chan_switch)
		goto out;
+2 −0
Original line number Diff line number Diff line
@@ -138,6 +138,7 @@ static const u32 mt7915_offs[] = {
	[AGG_ACR0]		= 0x084,
	[AGG_ACR4]		= 0x08c,
	[AGG_MRCR]		= 0x098,
	[AGG_ATCR0]		= 0x0ec,
	[AGG_ATCR1]		= 0x0f0,
	[AGG_ATCR3]		= 0x0f4,
	[LPON_UTTR0]		= 0x080,
@@ -212,6 +213,7 @@ static const u32 mt7916_offs[] = {
	[AGG_ACR0]		= 0x054,
	[AGG_ACR4]		= 0x05c,
	[AGG_MRCR]		= 0x068,
	[AGG_ATCR0]		= 0x1a4,
	[AGG_ATCR1]		= 0x1a8,
	[AGG_ATCR3]		= 0x080,
	[LPON_UTTR0]		= 0x360,
+7 −0
Original line number Diff line number Diff line
@@ -66,6 +66,7 @@ enum offs_rev {
	AGG_ACR0,
	AGG_ACR4,
	AGG_MRCR,
	AGG_ATCR0,
	AGG_ATCR1,
	AGG_ATCR3,
	LPON_UTTR0,
@@ -254,6 +255,9 @@ enum offs_rev {
#define MT_WTBLOFF_TOP_RSCR_RCPI_MODE	GENMASK(31, 30)
#define MT_WTBLOFF_TOP_RSCR_RCPI_PARAM	GENMASK(25, 24)

#define MT_WTBLOFF_TOP_ACR(_band)	MT_WTBLOFF_TOP(_band, 0x010)
#define MT_WTBLOFF_TOP_ADM_BACKOFFTIME	BIT(29)

/* ETBF: band 0(0x820ea000), band 1(0x820fa000) */
#define MT_WF_ETBF_BASE(_band)		((_band) ? 0x820fa000 : 0x820ea000)
#define MT_WF_ETBF(_band, ofs)		(MT_WF_ETBF_BASE(_band) + (ofs))
@@ -505,6 +509,9 @@ enum offs_rev {
#define MT_AGG_MRCR_RTS_FAIL_LIMIT		GENMASK(11, 7)
#define MT_AGG_MRCR_TXCMD_RTS_FAIL_LIMIT	GENMASK(28, 24)

#define MT_AGG_ATCR0(_band)			MT_WF_AGG(_band, __OFFS(AGG_ATCR0))
#define MT_AGG_ATCR_MAC_BFF_TIME_EN	BIT(30)

#define MT_AGG_ATCR1(_band)		MT_WF_AGG(_band, __OFFS(AGG_ATCR1))
#define MT_AGG_ATCR3(_band)		MT_WF_AGG(_band, __OFFS(AGG_ATCR3))