openwrt/target/linux/layerscape/patches-5.4/701-net-0361-sdk_dpaa-sdk_f...

260 lines
9.6 KiB
Diff

From 512bb2bd0555a8e78713dfdc109d87723a9da5c1 Mon Sep 17 00:00:00 2001
From: Camelia Groza <camelia.groza@nxp.com>
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 <camelia.groza@nxp.com>
---
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);