From 512bb2bd0555a8e78713dfdc109d87723a9da5c1 Mon Sep 17 00:00:00 2001 From: Camelia Groza Date: Fri, 13 Dec 2019 14:49:16 +0200 Subject: [PATCH] sdk_dpaa: sdk_fman: ls1034a errata: update number to A050385 The A050385 erratum extends the A010022 erratum by defining additional FMan lock-up conditions and suggests new w/a restrictions. Signed-off-by: Camelia Groza --- drivers/net/ethernet/freescale/sdk_dpaa/dpaa_eth.h | 14 +++---- .../net/ethernet/freescale/sdk_dpaa/dpaa_eth_sg.c | 44 +++++++++++----------- .../inc/integrations/LS1043/dpaa_integration_ext.h | 2 +- .../sdk_fman/src/inc/wrapper/lnxwrp_fsl_fman.h | 8 ++-- .../freescale/sdk_fman/src/wrapper/lnxwrp_fm.c | 16 ++++---- 5 files changed, 42 insertions(+), 42 deletions(-) --- a/drivers/net/ethernet/freescale/sdk_dpaa/dpaa_eth.h +++ b/drivers/net/ethernet/freescale/sdk_dpaa/dpaa_eth.h @@ -99,15 +99,15 @@ struct dpa_buffer_layout_s { * space to account for further alignments. */ #define DPA_MAX_FRM_SIZE 9600 -#ifndef FM_ERRATUM_A010022 +#ifndef FM_ERRATUM_A050385 #define DPA_BP_RAW_SIZE \ ((DPA_MAX_FRM_SIZE + DPA_MAX_FD_OFFSET + \ sizeof(struct skb_shared_info) + 128) & ~(SMP_CACHE_BYTES - 1)) -#else /* FM_ERRATUM_A010022 */ -#define DPA_BP_RAW_SIZE ((unlikely(fm_has_errata_a010022())) ? 2048 : \ +#else /* FM_ERRATUM_A050385 */ +#define DPA_BP_RAW_SIZE ((unlikely(fm_has_errata_a050385())) ? 2048 : \ ((DPA_MAX_FRM_SIZE + DPA_MAX_FD_OFFSET + \ sizeof(struct skb_shared_info) + 128) & ~(SMP_CACHE_BYTES - 1))) -#endif /* FM_ERRATUM_A010022 */ +#endif /* FM_ERRATUM_A050385 */ #endif /* CONFIG_FSL_DPAA_ETH_JUMBO_FRAME */ /* This is what FMan is ever allowed to use. @@ -660,14 +660,14 @@ static inline void _dpa_bp_free_pf(void * on egress. */ -#ifdef FM_ERRATUM_A010022 +#ifdef FM_ERRATUM_A050385 #define CROSS_4K(start, size) \ (((uintptr_t)(start) + (size)) > \ (((uintptr_t)(start) + 0x1000) & ~0xFFF)) /* The headroom needs to accommodate our private data (64 bytes) but * we reserve 256 bytes instead to guarantee 256 data alignment. */ -#define DPAA_A010022_HEADROOM 256 -#endif /* FM_ERRATUM_A010022 */ +#define DPAA_A050385_HEADROOM 256 +#endif /* FM_ERRATUM_A050385 */ #endif /* __DPA_H */ --- a/drivers/net/ethernet/freescale/sdk_dpaa/dpaa_eth_sg.c +++ b/drivers/net/ethernet/freescale/sdk_dpaa/dpaa_eth_sg.c @@ -101,8 +101,8 @@ static int _dpa_bp_add_8_bufs(const stru * We only need enough space to store a pointer, but allocate * an entire cacheline for performance reasons. */ -#ifdef FM_ERRATUM_A010022 - if (unlikely(fm_has_errata_a010022())) { +#ifdef FM_ERRATUM_A050385 + if (unlikely(fm_has_errata_a050385())) { struct page *new_page = alloc_page(GFP_ATOMIC); if (unlikely(!new_page)) goto netdev_alloc_failed; @@ -765,15 +765,15 @@ int __hot skb_to_contig_fd(struct dpa_pr } EXPORT_SYMBOL(skb_to_contig_fd); -#ifdef FM_ERRATUM_A010022 -/* Verify the conditions that trigger the A010022 errata: +#ifdef FM_ERRATUM_A050385 +/* Verify the conditions that trigger the A050385 errata: * - 4K memory address boundary crossings when the data/SG fragments aren't * aligned to 256 bytes * - data and SG fragments that aren't aligned to 16 bytes * - SG fragments that aren't mod 16 bytes in size (except for the last * fragment) */ -static bool a010022_check_skb(struct sk_buff *skb, struct dpa_priv_s *priv) +static bool a050385_check_skb(struct sk_buff *skb, struct dpa_priv_s *priv) { skb_frag_t *frag; int i, nr_frags; @@ -840,7 +840,7 @@ static bool a010022_check_skb(struct sk_ * page. Build a new skb around the new buffer and release the old one. * A performance drop should be expected. */ -static struct sk_buff *a010022_realign_skb(struct sk_buff *skb, +static struct sk_buff *a050385_realign_skb(struct sk_buff *skb, struct dpa_priv_s *priv) { int trans_offset = skb_transport_offset(skb); @@ -850,7 +850,7 @@ static struct sk_buff *a010022_realign_s struct page *npage; void *npage_addr; - headroom = DPAA_A010022_HEADROOM; + headroom = DPAA_A050385_HEADROOM; /* For the new skb we only need the old one's data (both non-paged and * paged). We can skip the old tailroom. @@ -941,8 +941,8 @@ int __hot skb_to_sg_fd(struct dpa_priv_s /* Get a page frag to store the SGTable, or a full page if the errata * is in place and we need to avoid crossing a 4k boundary. */ -#ifdef FM_ERRATUM_A010022 - if (unlikely(fm_has_errata_a010022())) { +#ifdef FM_ERRATUM_A050385 + if (unlikely(fm_has_errata_a050385())) { struct page *new_page = alloc_page(GFP_ATOMIC); if (unlikely(!new_page)) @@ -1099,9 +1099,9 @@ int __hot dpa_tx_extended(struct sk_buff int *countptr, offset = 0; struct sk_buff *nskb; - /* Flags to help optimize the A010022 errata restriction checks. + /* Flags to help optimize the A050385 errata restriction checks. * - * First flag marks if the skb changed between the first A010022 check + * First flag marks if the skb changed between the first A050385 check * and the moment it's converted to an FD. * * The second flag marks if the skb needs to be realigned in order to @@ -1121,8 +1121,8 @@ int __hot dpa_tx_extended(struct sk_buff clear_fd(&fd); -#ifdef FM_ERRATUM_A010022 - if (unlikely(fm_has_errata_a010022()) && a010022_check_skb(skb, priv)) +#ifdef FM_ERRATUM_A050385 + if (unlikely(fm_has_errata_a050385()) && a050385_check_skb(skb, priv)) skb_need_wa = true; #endif @@ -1176,7 +1176,7 @@ int __hot dpa_tx_extended(struct sk_buff /* We're going to store the skb backpointer at the beginning * of the data buffer, so we need a privately owned skb * - * Under the A010022 errata, we are going to have a privately + * Under the A050385 errata, we are going to have a privately * owned skb after realigning the current one, so no point in * copying it here in that case. */ @@ -1194,12 +1194,12 @@ int __hot dpa_tx_extended(struct sk_buff * more fragments than we support. In this case, * we have no choice but to linearize it ourselves. */ -#ifdef FM_ERRATUM_A010022 +#ifdef FM_ERRATUM_A050385 /* No point in linearizing the skb now if we are going * to realign and linearize it again further down due - * to the A010022 errata + * to the A050385 errata */ - if (unlikely(fm_has_errata_a010022())) + if (unlikely(fm_has_errata_a050385())) skb_need_wa = true; else #endif @@ -1209,16 +1209,16 @@ int __hot dpa_tx_extended(struct sk_buff /* Common out-of-memory error path */ goto enomem; -#ifdef FM_ERRATUM_A010022 +#ifdef FM_ERRATUM_A050385 /* Verify the skb a second time if it has been updated since * the previous check */ - if (unlikely(fm_has_errata_a010022()) && skb_changed && - a010022_check_skb(skb, priv)) + if (unlikely(fm_has_errata_a050385()) && skb_changed && + a050385_check_skb(skb, priv)) skb_need_wa = true; - if (unlikely(fm_has_errata_a010022()) && skb_need_wa) { - nskb = a010022_realign_skb(skb, priv); + if (unlikely(fm_has_errata_a050385()) && skb_need_wa) { + nskb = a050385_realign_skb(skb, priv); if (!nskb) goto skb_to_fd_failed; dev_kfree_skb(skb); --- a/drivers/net/ethernet/freescale/sdk_fman/inc/integrations/LS1043/dpaa_integration_ext.h +++ b/drivers/net/ethernet/freescale/sdk_fman/inc/integrations/LS1043/dpaa_integration_ext.h @@ -271,7 +271,7 @@ typedef enum #define FM_AID_MODE_NO_TNUM_SW005 /* refer to pdm TKT068794 - only support of port_id on aid */ #define FM_ERROR_VSP_NO_MATCH_SW006 /* refer to pdm TKT174304 - no match between errorQ and VSP */ -#define FM_ERRATUM_A010022 +#define FM_ERRATUM_A050385 /***************************************************************************** RMan INTEGRATION-SPECIFIC DEFINITIONS --- a/drivers/net/ethernet/freescale/sdk_fman/src/inc/wrapper/lnxwrp_fsl_fman.h +++ b/drivers/net/ethernet/freescale/sdk_fman/src/inc/wrapper/lnxwrp_fsl_fman.h @@ -490,12 +490,12 @@ int fm_get_max_frm(void); int fm_get_rx_extra_headroom(void); /**************************************************************************//** - @Function fm_has_errata_a010022 + @Function fm_has_errata_a050385 - @Description Detect if the SoC is vulnerable to the A010022 errata + @Description Detect if the SoC is vulnerable to the A050385 errata *//***************************************************************************/ -#ifdef FM_ERRATUM_A010022 -bool fm_has_errata_a010022(void); +#ifdef FM_ERRATUM_A050385 +bool fm_has_errata_a050385(void); #endif /**************************************************************************//** --- a/drivers/net/ethernet/freescale/sdk_fman/src/wrapper/lnxwrp_fm.c +++ b/drivers/net/ethernet/freescale/sdk_fman/src/wrapper/lnxwrp_fm.c @@ -156,8 +156,8 @@ static int fsl_fm_pfc_quanta[] = { static t_LnxWrpFm lnxWrpFm; -#ifdef FM_ERRATUM_A010022 -static bool fm_has_err_a010022; +#ifdef FM_ERRATUM_A050385 +static bool fm_has_err_a050385; #endif int fm_get_max_frm() @@ -172,12 +172,12 @@ int fm_get_rx_extra_headroom() } EXPORT_SYMBOL(fm_get_rx_extra_headroom); -#ifdef FM_ERRATUM_A010022 -bool fm_has_errata_a010022(void) +#ifdef FM_ERRATUM_A050385 +bool fm_has_errata_a050385(void) { - return fm_has_err_a010022; + return fm_has_err_a050385; } -EXPORT_SYMBOL(fm_has_errata_a010022); +EXPORT_SYMBOL(fm_has_errata_a050385); #endif static int __init fm_set_max_frm(char *str) @@ -762,8 +762,8 @@ static t_LnxWrpFmDev * ReadFmDevTreeNode p_LnxWrpFmDev->defPcd = e_NO_PCD; } -#ifdef FM_ERRATUM_A010022 - fm_has_err_a010022 = of_property_read_bool(fm_node, "fsl,erratum-a010022"); +#ifdef FM_ERRATUM_A050385 + fm_has_err_a050385 = of_property_read_bool(fm_node, "fsl,erratum-a050385"); #endif of_node_put(fm_node);