Add patches for linux-5.4. The patches are from NXP LSDK-20.04 release which was tagged LSDK-20.04-V5.4. https://source.codeaurora.org/external/qoriq/qoriq-components/linux/ For boards LS1021A-IOT, and Traverse-LS1043 which are not involved in LSDK, port the dts patches from 4.14. The patches are sorted into the following categories: 301-arch-xxxx 302-dts-xxxx 303-core-xxxx 701-net-xxxx 801-audio-xxxx 802-can-xxxx 803-clock-xxxx 804-crypto-xxxx 805-display-xxxx 806-dma-xxxx 807-gpio-xxxx 808-i2c-xxxx 809-jailhouse-xxxx 810-keys-xxxx 811-kvm-xxxx 812-pcie-xxxx 813-pm-xxxx 814-qe-xxxx 815-sata-xxxx 816-sdhc-xxxx 817-spi-xxxx 818-thermal-xxxx 819-uart-xxxx 820-usb-xxxx 821-vfio-xxxx Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com>
		
			
				
	
	
		
			298 lines
		
	
	
		
			9.9 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			298 lines
		
	
	
		
			9.9 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
From 6dbf409f09fd85d738652c7867a5822f682d5682 Mon Sep 17 00:00:00 2001
 | 
						|
From: Camelia Groza <camelia.groza@nxp.com>
 | 
						|
Date: Thu, 12 Dec 2019 14:15:05 +0200
 | 
						|
Subject: [PATCH] sdk_dpaa: sdk_fman: ls1043a errata: detect based on DTB
 | 
						|
 property
 | 
						|
 | 
						|
Detect if the platform is vulnerable to the A010022 erratum based on device
 | 
						|
tree properties instead of the SoC family.
 | 
						|
 | 
						|
Signed-off-by: Camelia Groza <camelia.groza@nxp.com>
 | 
						|
---
 | 
						|
 drivers/net/ethernet/freescale/sdk_dpaa/dpaa_eth.c | 31 +---------------------
 | 
						|
 drivers/net/ethernet/freescale/sdk_dpaa/dpaa_eth.h | 14 +++++-----
 | 
						|
 .../net/ethernet/freescale/sdk_dpaa/dpaa_eth_sg.c  | 25 ++++++++---------
 | 
						|
 .../inc/integrations/LS1043/dpaa_integration_ext.h |  3 +++
 | 
						|
 .../sdk_fman/src/inc/wrapper/lnxwrp_fsl_fman.h     | 10 +++++++
 | 
						|
 .../freescale/sdk_fman/src/wrapper/lnxwrp_fm.c     | 17 ++++++++++++
 | 
						|
 6 files changed, 51 insertions(+), 49 deletions(-)
 | 
						|
 | 
						|
--- a/drivers/net/ethernet/freescale/sdk_dpaa/dpaa_eth.c
 | 
						|
+++ b/drivers/net/ethernet/freescale/sdk_dpaa/dpaa_eth.c
 | 
						|
@@ -1,4 +1,5 @@
 | 
						|
 /* Copyright 2008-2013 Freescale Semiconductor Inc.
 | 
						|
+ * Copyright 2019 NXP
 | 
						|
  *
 | 
						|
  * Redistribution and use in source and binary forms, with or without
 | 
						|
  * modification, are permitted provided that the following conditions are met:
 | 
						|
@@ -105,11 +106,6 @@ static const char rtx[][3] = {
 | 
						|
 	[TX] = "TX"
 | 
						|
 };
 | 
						|
 
 | 
						|
-#ifndef CONFIG_PPC
 | 
						|
-bool dpaa_errata_a010022;
 | 
						|
-EXPORT_SYMBOL(dpaa_errata_a010022);
 | 
						|
-#endif
 | 
						|
-
 | 
						|
 /* BM */
 | 
						|
 
 | 
						|
 #define DPAA_ETH_MAX_PAD (L1_CACHE_BYTES * 8)
 | 
						|
@@ -1133,26 +1129,6 @@ static struct platform_driver dpa_driver
 | 
						|
 	.remove		= dpa_remove
 | 
						|
 };
 | 
						|
 
 | 
						|
-#ifndef CONFIG_PPC
 | 
						|
-static bool __init __cold soc_has_errata_a010022(void)
 | 
						|
-{
 | 
						|
-#ifdef CONFIG_SOC_BUS
 | 
						|
-	const struct soc_device_attribute soc_msi_matches[] = {
 | 
						|
-		{ .family = "QorIQ LS1043A",
 | 
						|
-		  .data = NULL },
 | 
						|
-		{ },
 | 
						|
-	};
 | 
						|
-
 | 
						|
-	if (soc_device_match(soc_msi_matches))
 | 
						|
-		return true;
 | 
						|
-
 | 
						|
-	return false;
 | 
						|
-#else
 | 
						|
-	return true; /* cannot identify SoC */
 | 
						|
-#endif
 | 
						|
-}
 | 
						|
-#endif
 | 
						|
-
 | 
						|
 static int __init __cold dpa_load(void)
 | 
						|
 {
 | 
						|
 	int	 _errno;
 | 
						|
@@ -1168,11 +1144,6 @@ static int __init __cold dpa_load(void)
 | 
						|
 	dpa_max_frm = fm_get_max_frm();
 | 
						|
 	dpa_num_cpus = num_possible_cpus();
 | 
						|
 
 | 
						|
-#ifndef CONFIG_PPC
 | 
						|
-	/* Detect if the current SoC requires the 4K alignment workaround */
 | 
						|
-	dpaa_errata_a010022 = soc_has_errata_a010022();
 | 
						|
-#endif
 | 
						|
-
 | 
						|
 #ifdef CONFIG_FSL_DPAA_DBG_LOOP
 | 
						|
 	memset(dpa_loop_netdevs, 0, sizeof(dpa_loop_netdevs));
 | 
						|
 #endif
 | 
						|
--- a/drivers/net/ethernet/freescale/sdk_dpaa/dpaa_eth.h
 | 
						|
+++ b/drivers/net/ethernet/freescale/sdk_dpaa/dpaa_eth.h
 | 
						|
@@ -1,4 +1,5 @@
 | 
						|
 /* Copyright 2008-2012 Freescale Semiconductor Inc.
 | 
						|
+ * Copyright 2019 NXP
 | 
						|
  *
 | 
						|
  * Redistribution and use in source and binary forms, with or without
 | 
						|
  * modification, are permitted provided that the following conditions are met:
 | 
						|
@@ -98,15 +99,15 @@ struct dpa_buffer_layout_s {
 | 
						|
  * space to account for further alignments.
 | 
						|
  */
 | 
						|
 #define DPA_MAX_FRM_SIZE	9600
 | 
						|
-#ifdef CONFIG_PPC
 | 
						|
+#ifndef FM_ERRATUM_A010022
 | 
						|
 #define DPA_BP_RAW_SIZE \
 | 
						|
 	((DPA_MAX_FRM_SIZE + DPA_MAX_FD_OFFSET + \
 | 
						|
 	  sizeof(struct skb_shared_info) + 128) & ~(SMP_CACHE_BYTES - 1))
 | 
						|
-#else /* CONFIG_PPC */
 | 
						|
-#define DPA_BP_RAW_SIZE ((unlikely(dpaa_errata_a010022)) ? 2048 : \
 | 
						|
+#else /* FM_ERRATUM_A010022 */
 | 
						|
+#define DPA_BP_RAW_SIZE ((unlikely(fm_has_errata_a010022())) ? 2048 : \
 | 
						|
 	((DPA_MAX_FRM_SIZE + DPA_MAX_FD_OFFSET + \
 | 
						|
 	  sizeof(struct skb_shared_info) + 128) & ~(SMP_CACHE_BYTES - 1)))
 | 
						|
-#endif /* CONFIG_PPC */
 | 
						|
+#endif /* FM_ERRATUM_A010022 */
 | 
						|
 #endif /* CONFIG_FSL_DPAA_ETH_JUMBO_FRAME */
 | 
						|
 
 | 
						|
 /* This is what FMan is ever allowed to use.
 | 
						|
@@ -659,8 +660,7 @@ static inline void _dpa_bp_free_pf(void
 | 
						|
  * on egress.
 | 
						|
  */
 | 
						|
 
 | 
						|
-#ifndef CONFIG_PPC
 | 
						|
-extern bool dpaa_errata_a010022; /* SoC affected by A010022 errata */
 | 
						|
+#ifdef FM_ERRATUM_A010022
 | 
						|
 #define CROSS_4K(start, size) \
 | 
						|
 	(((uintptr_t)(start) + (size)) > \
 | 
						|
 	 (((uintptr_t)(start) + 0x1000) & ~0xFFF))
 | 
						|
@@ -668,6 +668,6 @@ extern bool dpaa_errata_a010022; /* SoC
 | 
						|
  * we reserve 256 bytes instead to guarantee 256 data alignment.
 | 
						|
  */
 | 
						|
 #define DPAA_A010022_HEADROOM	256
 | 
						|
-#endif  /* !CONFIG_PPC */
 | 
						|
+#endif  /* FM_ERRATUM_A010022 */
 | 
						|
 
 | 
						|
 #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
 | 
						|
@@ -1,4 +1,5 @@
 | 
						|
 /* Copyright 2012 Freescale Semiconductor Inc.
 | 
						|
+ * Copyright 2019 NXP
 | 
						|
  *
 | 
						|
  * Redistribution and use in source and binary forms, with or without
 | 
						|
  * modification, are permitted provided that the following conditions are met:
 | 
						|
@@ -100,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.
 | 
						|
 		 */
 | 
						|
-#ifndef CONFIG_PPC
 | 
						|
-		if (unlikely(dpaa_errata_a010022)) {
 | 
						|
+#ifdef FM_ERRATUM_A010022
 | 
						|
+		if (unlikely(fm_has_errata_a010022())) {
 | 
						|
 			struct page *new_page = alloc_page(GFP_ATOMIC);
 | 
						|
 			if (unlikely(!new_page))
 | 
						|
 				goto netdev_alloc_failed;
 | 
						|
@@ -764,7 +765,7 @@ int __hot skb_to_contig_fd(struct dpa_pr
 | 
						|
 }
 | 
						|
 EXPORT_SYMBOL(skb_to_contig_fd);
 | 
						|
 
 | 
						|
-#ifndef CONFIG_PPC
 | 
						|
+#ifdef FM_ERRATUM_A010022
 | 
						|
 /* Verify the conditions that trigger the A010022 errata:
 | 
						|
  * - 4K memory address boundary crossings when the data/SG fragments aren't
 | 
						|
  *   aligned to 256 bytes
 | 
						|
@@ -940,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.
 | 
						|
 	 */
 | 
						|
-#ifndef CONFIG_PPC
 | 
						|
-	if (unlikely(dpaa_errata_a010022)) {
 | 
						|
+#ifdef FM_ERRATUM_A010022
 | 
						|
+	if (unlikely(fm_has_errata_a010022())) {
 | 
						|
 		struct page *new_page = alloc_page(GFP_ATOMIC);
 | 
						|
 
 | 
						|
 		if (unlikely(!new_page))
 | 
						|
@@ -1120,8 +1121,8 @@ int __hot dpa_tx_extended(struct sk_buff
 | 
						|
 
 | 
						|
 	clear_fd(&fd);
 | 
						|
 
 | 
						|
-#ifndef CONFIG_PPC
 | 
						|
-	if (unlikely(dpaa_errata_a010022) && a010022_check_skb(skb, priv))
 | 
						|
+#ifdef FM_ERRATUM_A010022
 | 
						|
+	if (unlikely(fm_has_errata_a010022()) && a010022_check_skb(skb, priv))
 | 
						|
 		skb_need_wa = true;
 | 
						|
 #endif
 | 
						|
 
 | 
						|
@@ -1193,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.
 | 
						|
 			 */
 | 
						|
-#ifndef CONFIG_PPC
 | 
						|
+#ifdef FM_ERRATUM_A010022
 | 
						|
 			/* No point in linearizing the skb now if we are going
 | 
						|
 			 * to realign and linearize it again further down due
 | 
						|
 			 * to the A010022 errata
 | 
						|
 			 */
 | 
						|
-			if (unlikely(dpaa_errata_a010022))
 | 
						|
+			if (unlikely(fm_has_errata_a010022()))
 | 
						|
 				skb_need_wa = true;
 | 
						|
 			else
 | 
						|
 #endif
 | 
						|
@@ -1208,15 +1209,15 @@ int __hot dpa_tx_extended(struct sk_buff
 | 
						|
 			/* Common out-of-memory error path */
 | 
						|
 			goto enomem;
 | 
						|
 
 | 
						|
-#ifndef CONFIG_PPC
 | 
						|
+#ifdef FM_ERRATUM_A010022
 | 
						|
 		/* Verify the skb a second time if it has been updated since
 | 
						|
 		 * the previous check
 | 
						|
 		 */
 | 
						|
-		if (unlikely(dpaa_errata_a010022) && skb_changed &&
 | 
						|
+		if (unlikely(fm_has_errata_a010022()) && skb_changed &&
 | 
						|
 		    a010022_check_skb(skb, priv))
 | 
						|
 			skb_need_wa = true;
 | 
						|
 
 | 
						|
-		if (unlikely(dpaa_errata_a010022) && skb_need_wa) {
 | 
						|
+		if (unlikely(fm_has_errata_a010022()) && skb_need_wa) {
 | 
						|
 			nskb = a010022_realign_skb(skb, priv);
 | 
						|
 			if (!nskb)
 | 
						|
 				goto skb_to_fd_failed;
 | 
						|
--- 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
 | 
						|
@@ -1,5 +1,6 @@
 | 
						|
 /*
 | 
						|
  * Copyright 2012 Freescale Semiconductor Inc.
 | 
						|
+ * Copyright 2019 NXP
 | 
						|
  *
 | 
						|
  * Redistribution and use in source and binary forms, with or without
 | 
						|
  * modification, are permitted provided that the following conditions are met:
 | 
						|
@@ -270,6 +271,8 @@ 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
 | 
						|
+
 | 
						|
 /*****************************************************************************
 | 
						|
  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
 | 
						|
@@ -1,5 +1,6 @@
 | 
						|
 /*
 | 
						|
  * Copyright 2008-2012 Freescale Semiconductor Inc.
 | 
						|
+ * Copyright 2019 NXP
 | 
						|
  *
 | 
						|
  * Redistribution and use in source and binary forms, with or without
 | 
						|
  * modification, are permitted provided that the following conditions are met:
 | 
						|
@@ -489,6 +490,15 @@ int fm_get_max_frm(void);
 | 
						|
 int fm_get_rx_extra_headroom(void);
 | 
						|
 
 | 
						|
 /**************************************************************************//**
 | 
						|
+ @Function	fm_has_errata_a010022
 | 
						|
+
 | 
						|
+ @Description   Detect if the SoC is vulnerable to the A010022 errata
 | 
						|
+*//***************************************************************************/
 | 
						|
+#ifdef FM_ERRATUM_A010022
 | 
						|
+bool fm_has_errata_a010022(void);
 | 
						|
+#endif
 | 
						|
+
 | 
						|
+/**************************************************************************//**
 | 
						|
 @Function     fm_port_set_rate_limit
 | 
						|
 
 | 
						|
 @Description  Configure Shaper parameter on FM-port device (Tx port).
 | 
						|
--- a/drivers/net/ethernet/freescale/sdk_fman/src/wrapper/lnxwrp_fm.c
 | 
						|
+++ b/drivers/net/ethernet/freescale/sdk_fman/src/wrapper/lnxwrp_fm.c
 | 
						|
@@ -1,5 +1,6 @@
 | 
						|
 /*
 | 
						|
  * Copyright 2008-2012 Freescale Semiconductor Inc.
 | 
						|
+ * Copyright 2019 NXP
 | 
						|
  *
 | 
						|
  * Redistribution and use in source and binary forms, with or without
 | 
						|
  * modification, are permitted provided that the following conditions are met:
 | 
						|
@@ -155,6 +156,10 @@ static int fsl_fm_pfc_quanta[] = {
 | 
						|
 
 | 
						|
 static t_LnxWrpFm   lnxWrpFm;
 | 
						|
 
 | 
						|
+#ifdef FM_ERRATUM_A010022
 | 
						|
+static bool fm_has_err_a010022;
 | 
						|
+#endif
 | 
						|
+
 | 
						|
 int fm_get_max_frm()
 | 
						|
 {
 | 
						|
 	return fsl_fm_max_frm;
 | 
						|
@@ -167,6 +172,14 @@ int fm_get_rx_extra_headroom()
 | 
						|
 }
 | 
						|
 EXPORT_SYMBOL(fm_get_rx_extra_headroom);
 | 
						|
 
 | 
						|
+#ifdef FM_ERRATUM_A010022
 | 
						|
+bool fm_has_errata_a010022(void)
 | 
						|
+{
 | 
						|
+	return fm_has_err_a010022;
 | 
						|
+}
 | 
						|
+EXPORT_SYMBOL(fm_has_errata_a010022);
 | 
						|
+#endif
 | 
						|
+
 | 
						|
 static int __init fm_set_max_frm(char *str)
 | 
						|
 {
 | 
						|
 	int ret = 0;
 | 
						|
@@ -749,6 +762,10 @@ 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");
 | 
						|
+#endif
 | 
						|
+
 | 
						|
     of_node_put(fm_node);
 | 
						|
 
 | 
						|
     p_LnxWrpFmDev->hcCh =
 |