Skip to content

Commit

Permalink
dpaa_eth: fix the RX headroom size alignment
Browse files Browse the repository at this point in the history
The headroom reserved for received frames needs to be aligned to an
RX specific value. There is currently a discrepancy between the values
used in the Ethernet driver and the values passed to the FMan.
Coincidentally, the resulting aligned values are identical.

Fixes: 3c68b8f ("dpaa_eth: FMan erratum A050385 workaround")
Acked-by: Willem de Bruijn <willemb@google.com>
Signed-off-by: Camelia Groza <camelia.groza@nxp.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
  • Loading branch information
Camelia Groza authored and Jakub Kicinski committed Nov 2, 2020
1 parent acef159 commit 7834e49
Showing 1 changed file with 9 additions and 5 deletions.
14 changes: 9 additions & 5 deletions drivers/net/ethernet/freescale/dpaa/dpaa_eth.c
Original file line number Diff line number Diff line change
Expand Up @@ -2845,7 +2845,8 @@ static int dpaa_ingress_cgr_init(struct dpaa_priv *priv)
return err;
}

static inline u16 dpaa_get_headroom(struct dpaa_buffer_layout *bl)
static u16 dpaa_get_headroom(struct dpaa_buffer_layout *bl,
enum port_type port)
{
u16 headroom;

Expand All @@ -2859,9 +2860,12 @@ static inline u16 dpaa_get_headroom(struct dpaa_buffer_layout *bl)
*
* Also make sure the headroom is a multiple of data_align bytes
*/
headroom = (u16)(bl->priv_data_size + DPAA_HWA_SIZE);
headroom = (u16)(bl[port].priv_data_size + DPAA_HWA_SIZE);

return ALIGN(headroom, DPAA_FD_DATA_ALIGNMENT);
if (port == RX)
return ALIGN(headroom, DPAA_FD_RX_DATA_ALIGNMENT);
else
return ALIGN(headroom, DPAA_FD_DATA_ALIGNMENT);
}

static int dpaa_eth_probe(struct platform_device *pdev)
Expand Down Expand Up @@ -3029,8 +3033,8 @@ static int dpaa_eth_probe(struct platform_device *pdev)
goto free_dpaa_fqs;
}

priv->tx_headroom = dpaa_get_headroom(&priv->buf_layout[TX]);
priv->rx_headroom = dpaa_get_headroom(&priv->buf_layout[RX]);
priv->tx_headroom = dpaa_get_headroom(priv->buf_layout, TX);
priv->rx_headroom = dpaa_get_headroom(priv->buf_layout, RX);

/* All real interfaces need their ports initialized */
err = dpaa_eth_init_ports(mac_dev, dpaa_bp, &port_fqs,
Expand Down

0 comments on commit 7834e49

Please sign in to comment.