lkml.org 
[lkml]   [2021]   [Jul]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.13 506/800] mt76: mt7915: fix rx fcs error count in testmode
    Date
    From: Shayne Chen <shayne.chen@mediatek.com>

    [ Upstream commit 89043529c8b833d87391f1844e9d1cc1643393eb ]

    FCS error packets are filtered by default and won't be reported to
    driver, so that RX fcs error and PER in testmode always show zero.
    Fix this issue by reading fcs error count from hw counter.

    We did't fix this issue by disabling fcs error rx filter since it may
    let HW suffer some SER errors.

    Fixes: 5d8a83f09941 ("mt76: mt7915: implement testmode rx support")
    Signed-off-by: Shayne Chen <shayne.chen@mediatek.com>
    Signed-off-by: Felix Fietkau <nbd@nbd.name>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    .../wireless/mediatek/mt76/mt7915/testmode.c | 21 +++++++++++++++++--
    1 file changed, 19 insertions(+), 2 deletions(-)

    diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/testmode.c b/drivers/net/wireless/mediatek/mt76/mt7915/testmode.c
    index f9d81e36ef09..b220b334906b 100644
    --- a/drivers/net/wireless/mediatek/mt76/mt7915/testmode.c
    +++ b/drivers/net/wireless/mediatek/mt76/mt7915/testmode.c
    @@ -464,10 +464,17 @@ mt7915_tm_set_tx_frames(struct mt7915_phy *phy, bool en)
    static void
    mt7915_tm_set_rx_frames(struct mt7915_phy *phy, bool en)
    {
    - if (en)
    + mt7915_tm_set_trx(phy, TM_MAC_RX_RXV, false);
    +
    + if (en) {
    + struct mt7915_dev *dev = phy->dev;
    +
    mt7915_tm_update_channel(phy);

    - mt7915_tm_set_trx(phy, TM_MAC_RX_RXV, en);
    + /* read-clear */
    + mt76_rr(dev, MT_MIB_SDR3(phy != &dev->phy));
    + mt7915_tm_set_trx(phy, TM_MAC_RX_RXV, en);
    + }
    }

    static int
    @@ -690,7 +697,11 @@ static int
    mt7915_tm_dump_stats(struct mt76_phy *mphy, struct sk_buff *msg)
    {
    struct mt7915_phy *phy = mphy->priv;
    + struct mt7915_dev *dev = phy->dev;
    + bool ext_phy = phy != &dev->phy;
    + enum mt76_rxq_id q;
    void *rx, *rssi;
    + u16 fcs_err;
    int i;

    rx = nla_nest_start(msg, MT76_TM_STATS_ATTR_LAST_RX);
    @@ -735,6 +746,12 @@ mt7915_tm_dump_stats(struct mt76_phy *mphy, struct sk_buff *msg)

    nla_nest_end(msg, rx);

    + fcs_err = mt76_get_field(dev, MT_MIB_SDR3(ext_phy),
    + MT_MIB_SDR3_FCS_ERR_MASK);
    + q = ext_phy ? MT_RXQ_EXT : MT_RXQ_MAIN;
    + mphy->test.rx_stats.packets[q] += fcs_err;
    + mphy->test.rx_stats.fcs_error[q] += fcs_err;
    +
    return 0;
    }

    --
    2.30.2


    \
     
     \ /
      Last update: 2021-07-12 10:41    [W:4.149 / U:0.436 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site