Hi Matthias! One small comment, I'll test everything later on. On Fri, 2019-10-11 at 20:48 +0200, matthias.bgg@kernel.org wrote: > From: Matthias Brugger > > Depending on the HW, the maximal usable DMA burst size can vary. > If not set accordingly a timeout in the transmit queue happens and no > package can be sent. Read to optional max-burst-sz property, if not > present, fallback to the standard value. > > Signed-off-by: Matthias Brugger > --- > > drivers/net/ethernet/broadcom/genet/bcmgenet.c | 13 +++++++++++-- > drivers/net/ethernet/broadcom/genet/bcmgenet.h | 1 + > 2 files changed, 12 insertions(+), 2 deletions(-) > > diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.c > b/drivers/net/ethernet/broadcom/genet/bcmgenet.c > index 12cb77ef1081..a7bb822a6d83 100644 > --- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c > +++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c > @@ -2576,7 +2576,8 @@ static int bcmgenet_init_dma(struct bcmgenet_priv *priv) > } > > /* Init rDma */ > - bcmgenet_rdma_writel(priv, DMA_MAX_BURST_LENGTH, DMA_SCB_BURST_SIZE); > + bcmgenet_rdma_writel(priv, priv->dma_max_burst_length, > + DMA_SCB_BURST_SIZE); > > /* Initialize Rx queues */ > ret = bcmgenet_init_rx_queues(priv->dev); > @@ -2589,7 +2590,8 @@ static int bcmgenet_init_dma(struct bcmgenet_priv *priv) > } > > /* Init tDma */ > - bcmgenet_tdma_writel(priv, DMA_MAX_BURST_LENGTH, DMA_SCB_BURST_SIZE); > + bcmgenet_tdma_writel(priv, priv->dma_max_burst_length, > + DMA_SCB_BURST_SIZE); > > /* Initialize Tx queues */ > bcmgenet_init_tx_queues(priv->dev); > @@ -3522,6 +3524,13 @@ static int bcmgenet_probe(struct platform_device *pdev) > > clk_prepare_enable(priv->clk); > > + if (dn) { > + of_property_read_u32(dn, "dma-burst-sz", > + &priv->dma_max_burst_length); You set the 'dma-burst-sz' binding as optional, though this assumes that if a device node is available dma_max_burst_length comes from the device tree. I think you should check of_property_read_u32's return value and on failure default to DMA_MAX_BURST_LENGTH. > + } else { > + priv->dma_max_burst_length = DMA_MAX_BURST_LENGTH; > + } > + > bcmgenet_set_hw_params(priv); > > /* Mii wait queue */ > diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.h > b/drivers/net/ethernet/broadcom/genet/bcmgenet.h > index 4a8fc03d82fd..897f356eb376 100644 > --- a/drivers/net/ethernet/broadcom/genet/bcmgenet.h > +++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.h > @@ -663,6 +663,7 @@ struct bcmgenet_priv { > bool crc_fwd_en; > > unsigned int dma_rx_chk_bit; > + unsigned int dma_max_burst_length; > > u32 msg_enable; > Regards, Nicolas