On Sun, Jun 11, 2023 at 01:38:23AM +0100, Daniel Golle wrote: > @@ -1333,8 +1354,13 @@ static int mtk_tx_map(struct sk_buff *skb, struct net_device *dev, > mtk_tx_set_dma_desc(dev, itxd, &txd_info); > > itx_buf->flags |= MTK_TX_FLAGS_SINGLE0; > - itx_buf->flags |= (!mac->id) ? MTK_TX_FLAGS_FPORT0 : > - MTK_TX_FLAGS_FPORT1; > + if (mac->id == MTK_GMAC1_ID) > + itx_buf->flags |= MTK_TX_FLAGS_FPORT0; > + else if (mac->id == MTK_GMAC2_ID) > + itx_buf->flags |= MTK_TX_FLAGS_FPORT1; > + else > + itx_buf->flags |= MTK_TX_FLAGS_FPORT2; There appears to be two places that this code structure appears, and this is in the path for packet transmission. I wonder if it would be more efficient to instead do: itx_buf->flags |= MTK_TX_FLAGS_SINGLE0 | mac->tx_flags; with mac->tx_flags appropriately initialised? > @@ -2170,7 +2214,9 @@ static int mtk_poll_tx_qdma(struct mtk_eth *eth, int budget, > tx_buf = mtk_desc_to_tx_buf(ring, desc, > eth->soc->txrx.txd_size); > if (tx_buf->flags & MTK_TX_FLAGS_FPORT1) > - mac = 1; > + mac = MTK_GMAC2_ID; > + else if (tx_buf->flags & MTK_TX_FLAGS_FPORT2) > + mac = MTK_GMAC3_ID; This has me wondering whether the flags are used for hardware or just for the driver's purposes. If it's the latter, can we instead store the MAC index in tx_buf, rather than having to decode a bitfield? I suspect these are just for the driver given that the addition of MTK_TX_FLAGS_FPORT2 changes all subsequent bit numbers in this struct member. > > if (!tx_buf->data) > break; > @@ -3783,7 +3829,26 @@ static int mtk_hw_init(struct mtk_eth *eth, bool reset) > mtk_w32(eth, eth->soc->txrx.rx_irq_done_mask, reg_map->qdma.int_grp + 4); > mtk_w32(eth, 0x21021000, MTK_FE_INT_GRP); > > - if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2)) { > + if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V3)) { > + /* PSE should not drop port1, port8 and port9 packets */ > + mtk_w32(eth, 0x00000302, PSE_DROP_CFG); > + > + /* GDM and CDM Threshold */ > + mtk_w32(eth, 0x00000707, MTK_CDMW0_THRES); > + mtk_w32(eth, 0x00000077, MTK_CDMW1_THRES); > + > + /* Disable GDM1 RX CRC stripping */ > + val = mtk_r32(eth, MTK_GDMA_FWD_CFG(0)); > + val &= ~MTK_GDMA_STRP_CRC; > + mtk_w32(eth, val, MTK_GDMA_FWD_CFG(0)); mtk_m32() ? Thanks! -- RMK's Patch system: https://www.armlinux.org.uk/developer/patches/ FTTP is here! 80Mbps down 10Mbps up. Decent connectivity at last!