[meta-freescale] [meta-fsl-arm-extra][PATCH 2/4] linux-variscite: Update revision from 3.14.28 to 4.1.15

Fabio Berton fabio.berton at ossystems.com.br
Mon Sep 12 10:02:44 PDT 2016


- Bump revision to 1e7785b

- Drop all 3.14.28 related patches

- Defconfig:
  - Sync defconfig with imx_v7_var_defconfig
  - Remove wl12xx and wl18xx support, we need to use these firmware
    from meta-ti layer.
  - Enable fhandle and Namespaces to add systemd support
  - Add patch to fix the compile issue under gcc6

Signed-off-by: Fabio Berton <fabio.berton at ossystems.com.br>
---
 ...LLVMLinux-use-static-inline-in-ARM-ftrace.patch |  49 --
 ...nux-Change-extern-inline-to-static-inline.patch |  58 --
 .../Set-dr_mode-to-otg.patch                       |  29 -
 ...flush-management-symbols-when-multi-cache.patch |  32 -
 ...initial-device-tree-support-to-the-sdio-m.patch | 132 ----
 .../0003-wlcore-add-mac-override-parameter.patch   |  92 ---
 ...et-wl-rx_filter_enabled-to-zero-after-rec.patch |  88 ---
 ...el-Tx-watchdog-on-suspend-and-rearm-on-fi.patch |  88 ---
 ...wlcore-block-read-writes-to-FW-during-ELP.patch |  46 --
 ...don-t-start-mac80211-PS-on-non-peer-HLIDs.patch |  38 -
 ...wl12xx-wl18xx-simplify-fw_status-handling.patch | 763 ---------------------
 ...-wl12xx-wl18xx-configure-num_links-per-hw.patch | 375 ----------
 ...12xx-wl18xx-configure-max_stations-per-hw.patch | 132 ----
 ...xx-wl18xx-configure-iface_combinations-pe.patch | 193 ------
 ...18xx-move-to-new-firmware-wl18xx-fw-3.bin.patch | 226 ------
 ...ore-send-EAPOL-frames-with-voice-priority.patch |  49 --
 ...on-t-stop-sched_scan-on-interface-removal.patch |  35 -
 ...wlcore-wl18xx-allow-CCK-rates-for-AP-mode.patch |  61 --
 ...don-t-handle-unsetting-of-default-wep-key.patch |  38 -
 ...ider-multiple-APs-when-checking-active_li.patch |  64 --
 ...ecrease-warning-verbosity-during-recovery.patch |  54 --
 ...016-wlcore-increase-timeout-to-5000-msecs.patch |  31 -
 ...le-beacon-filtering-only-after-receiving-.patch |  86 ---
 ...dd-support-for-STA-CSA-with-chan-contexts.patch |  32 -
 .../wifi/0019-wlcore-use-correct-LAA-bit.patch     |  30 -
 ...copy-paste-bug-assign-from-src-struct-not.patch |  28 -
 .../Fix-the-compile-issue-under-gcc6.patch         |  92 +++
 .../defconfig                                      | 190 ++---
 recipes-kernel/linux/linux-variscite_3.14.28.bb    |  46 --
 recipes-kernel/linux/linux-variscite_4.1.15.bb     |  24 +
 30 files changed, 212 insertions(+), 2989 deletions(-)
 delete mode 100644 recipes-kernel/linux/linux-variscite-3.14.28/0001-ARM-8158-LLVMLinux-use-static-inline-in-ARM-ftrace.patch
 delete mode 100644 recipes-kernel/linux/linux-variscite-3.14.28/0001-ARM-LLVMLinux-Change-extern-inline-to-static-inline.patch
 delete mode 100644 recipes-kernel/linux/linux-variscite-3.14.28/Set-dr_mode-to-otg.patch
 delete mode 100644 recipes-kernel/linux/linux-variscite-3.14.28/arm-Export-cache-flush-management-symbols-when-multi-cache.patch
 delete mode 100644 recipes-kernel/linux/linux-variscite-3.14.28/boundarydevices/0002-wlcore-add-initial-device-tree-support-to-the-sdio-m.patch
 delete mode 100644 recipes-kernel/linux/linux-variscite-3.14.28/boundarydevices/0003-wlcore-add-mac-override-parameter.patch
 delete mode 100644 recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0001-wlcore-memset-wl-rx_filter_enabled-to-zero-after-rec.patch
 delete mode 100644 recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0002-wlcore-cancel-Tx-watchdog-on-suspend-and-rearm-on-fi.patch
 delete mode 100644 recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0003-wlcore-block-read-writes-to-FW-during-ELP.patch
 delete mode 100644 recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0004-wlcore-AP-don-t-start-mac80211-PS-on-non-peer-HLIDs.patch
 delete mode 100644 recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0005-wlcore-wl12xx-wl18xx-simplify-fw_status-handling.patch
 delete mode 100644 recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0006-wlcore-wl12xx-wl18xx-configure-num_links-per-hw.patch
 delete mode 100644 recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0007-wlcore-wl12xx-wl18xx-configure-max_stations-per-hw.patch
 delete mode 100644 recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0008-wlcore-wl12xx-wl18xx-configure-iface_combinations-pe.patch
 delete mode 100644 recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0009-wl18xx-move-to-new-firmware-wl18xx-fw-3.bin.patch
 delete mode 100644 recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0010-wlcore-send-EAPOL-frames-with-voice-priority.patch
 delete mode 100644 recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0011-wlcore-don-t-stop-sched_scan-on-interface-removal.patch
 delete mode 100644 recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0012-wlcore-wl18xx-allow-CCK-rates-for-AP-mode.patch
 delete mode 100644 recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0013-wlcore-don-t-handle-unsetting-of-default-wep-key.patch
 delete mode 100644 recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0014-wlcore-consider-multiple-APs-when-checking-active_li.patch
 delete mode 100644 recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0015-wlcore-decrease-warning-verbosity-during-recovery.patch
 delete mode 100644 recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0016-wlcore-increase-timeout-to-5000-msecs.patch
 delete mode 100644 recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0017-wlcore-enable-beacon-filtering-only-after-receiving-.patch
 delete mode 100644 recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0018-wlcore-add-support-for-STA-CSA-with-chan-contexts.patch
 delete mode 100644 recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0019-wlcore-use-correct-LAA-bit.patch
 delete mode 100644 recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0020-wlcore-fix-copy-paste-bug-assign-from-src-struct-not.patch
 create mode 100644 recipes-kernel/linux/linux-variscite-4.1.15/Fix-the-compile-issue-under-gcc6.patch
 rename recipes-kernel/linux/{linux-variscite-3.14.28 => linux-variscite-4.1.15}/defconfig (78%)
 delete mode 100644 recipes-kernel/linux/linux-variscite_3.14.28.bb
 create mode 100644 recipes-kernel/linux/linux-variscite_4.1.15.bb

diff --git a/recipes-kernel/linux/linux-variscite-3.14.28/0001-ARM-8158-LLVMLinux-use-static-inline-in-ARM-ftrace.patch b/recipes-kernel/linux/linux-variscite-3.14.28/0001-ARM-8158-LLVMLinux-use-static-inline-in-ARM-ftrace.patch
deleted file mode 100644
index 348490a..0000000
--- a/recipes-kernel/linux/linux-variscite-3.14.28/0001-ARM-8158-LLVMLinux-use-static-inline-in-ARM-ftrace.patch
+++ /dev/null
@@ -1,49 +0,0 @@
-From aeea3592a13bf12861943e44fc48f1f270941f8d Mon Sep 17 00:00:00 2001
-From: Behan Webster <behanw at converseincode.com>
-Date: Wed, 24 Sep 2014 01:06:46 +0100
-Subject: ARM: 8158/1: LLVMLinux: use static inline in ARM ftrace.h
-
-With compilers which follow the C99 standard (like modern versions of gcc and
-clang), "extern inline" does the wrong thing (emits code for an externally
-linkable version of the inline function). In this case using static inline
-and removing the NULL version of return_address in return_address.c does
-the right thing.
-
-Signed-off-by: Behan Webster <behanw at converseincode.com>
-Reviewed-by: Mark Charlebois <charlebm at gmail.com>
-Acked-by: Steven Rostedt <rostedt at goodmis.org>
-Signed-off-by: Russell King <rmk+kernel at arm.linux.org.uk>
-
-diff --git a/arch/arm/include/asm/ftrace.h b/arch/arm/include/asm/ftrace.h
-index 39eb16b..bfe2a2f 100644
---- a/arch/arm/include/asm/ftrace.h
-+++ b/arch/arm/include/asm/ftrace.h
-@@ -45,7 +45,7 @@ void *return_address(unsigned int);
- 
- #else
- 
--extern inline void *return_address(unsigned int level)
-+static inline void *return_address(unsigned int level)
- {
- 	return NULL;
- }
-diff --git a/arch/arm/kernel/return_address.c b/arch/arm/kernel/return_address.c
-index fafedd8..f6aa84d 100644
---- a/arch/arm/kernel/return_address.c
-+++ b/arch/arm/kernel/return_address.c
-@@ -63,11 +63,6 @@ void *return_address(unsigned int level)
- #warning "TODO: return_address should use unwind tables"
- #endif
- 
--void *return_address(unsigned int level)
--{
--	return NULL;
--}
--
- #endif /* if defined(CONFIG_FRAME_POINTER) && !defined(CONFIG_ARM_UNWIND) / else */
- 
- EXPORT_SYMBOL_GPL(return_address);
--- 
-cgit v0.10.2
-
-
diff --git a/recipes-kernel/linux/linux-variscite-3.14.28/0001-ARM-LLVMLinux-Change-extern-inline-to-static-inline.patch b/recipes-kernel/linux/linux-variscite-3.14.28/0001-ARM-LLVMLinux-Change-extern-inline-to-static-inline.patch
deleted file mode 100644
index 0247313..0000000
--- a/recipes-kernel/linux/linux-variscite-3.14.28/0001-ARM-LLVMLinux-Change-extern-inline-to-static-inline.patch
+++ /dev/null
@@ -1,58 +0,0 @@
-From a2561791169351cbf1ac5ca0c4299a0eef7eca65 Mon Sep 17 00:00:00 2001
-From: Behan Webster <behanw at converseincode.com>
-Date: Tue, 3 Sep 2013 22:27:26 -0400
-Subject: [PATCH] ARM: LLVMLinux: Change "extern inline" to "static inline" in
- glue-cache.h
-
-With compilers which follow the C99 standard (like modern versions of gcc and
-clang), "extern inline" does the wrong thing (emits code for an externally
-linkable version of the inline function). "static inline" is the correct choice
-instead.
-
-Author: Behan Webster <behanw at converseincode.com>
-Signed-off-by: Behan Webster <behanw at converseincode.com>
-Reviewed-by: Mark Charlebois <charlebm at gmail.com>
----
- arch/arm/include/asm/glue-cache.h | 22 +++++++++++-----------
- 1 file changed, 11 insertions(+), 11 deletions(-)
-
-diff --git a/arch/arm/include/asm/glue-cache.h b/arch/arm/include/asm/glue-cache.h
-index c81adc0..a3c24cd 100644
---- a/arch/arm/include/asm/glue-cache.h
-+++ b/arch/arm/include/asm/glue-cache.h
-@@ -130,22 +130,22 @@
- #endif
- 
- #ifndef __ASSEMBLER__
--extern inline void nop_flush_icache_all(void) { }
--extern inline void nop_flush_kern_cache_all(void) { }
--extern inline void nop_flush_kern_cache_louis(void) { }
--extern inline void nop_flush_user_cache_all(void) { }
--extern inline void nop_flush_user_cache_range(unsigned long a,
-+static inline void nop_flush_icache_all(void) { }
-+static inline void nop_flush_kern_cache_all(void) { }
-+static inline void nop_flush_kern_cache_louis(void) { }
-+static inline void nop_flush_user_cache_all(void) { }
-+static inline void nop_flush_user_cache_range(unsigned long a,
- 		unsigned long b, unsigned int c) { }
- 
--extern inline void nop_coherent_kern_range(unsigned long a, unsigned long b) { }
--extern inline int nop_coherent_user_range(unsigned long a,
-+static inline void nop_coherent_kern_range(unsigned long a, unsigned long b) { }
-+static inline int nop_coherent_user_range(unsigned long a,
- 		unsigned long b) { return 0; }
--extern inline void nop_flush_kern_dcache_area(void *a, size_t s) { }
-+static inline void nop_flush_kern_dcache_area(void *a, size_t s) { }
- 
--extern inline void nop_dma_flush_range(const void *a, const void *b) { }
-+static inline void nop_dma_flush_range(const void *a, const void *b) { }
- 
--extern inline void nop_dma_map_area(const void *s, size_t l, int f) { }
--extern inline void nop_dma_unmap_area(const void *s, size_t l, int f) { }
-+static inline void nop_dma_map_area(const void *s, size_t l, int f) { }
-+static inline void nop_dma_unmap_area(const void *s, size_t l, int f) { }
- #endif
- 
- #ifndef MULTI_CACHE
--- 
-2.1.4
diff --git a/recipes-kernel/linux/linux-variscite-3.14.28/Set-dr_mode-to-otg.patch b/recipes-kernel/linux/linux-variscite-3.14.28/Set-dr_mode-to-otg.patch
deleted file mode 100644
index 222cb64..0000000
--- a/recipes-kernel/linux/linux-variscite-3.14.28/Set-dr_mode-to-otg.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-From 94daa3c228195488521c06e9df0ccb6c0399aa4e Mon Sep 17 00:00:00 2001
-From: Fabio Berton <fabio.berton at ossystems.com.br>
-Date: Mon, 15 Feb 2016 11:31:39 -0200
-Subject: [PATCH] Set dr_mode to otg
-
-By default the OTG is configured to be "host". We need to switch dr_mode to
-"otg", so OTG will work as device.
-
-
-Signed-off-by: Fabio Berton <fabio.berton at ossystems.com.br>
----
- arch/arm/boot/dts/imx6qdl-var-som.dtsi | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/arch/arm/boot/dts/imx6qdl-var-som.dtsi b/arch/arm/boot/dts/imx6qdl-var-som.dtsi
-index 6ad3773..8fb1d7e 100755
---- a/arch/arm/boot/dts/imx6qdl-var-som.dtsi
-+++ b/arch/arm/boot/dts/imx6qdl-var-som.dtsi
-@@ -971,7 +971,7 @@
- #ifdef VAR_SOM_SOLO_VSC
- 	dr_mode = "otg" ;	/* Use "host" if you would like to use the USB0 type A connector (host mode only on VAR-SOM-SOLO) */
- #else
--	dr_mode = "host" ;
-+	dr_mode = "otg" ;
- #endif
- 	status = "okay";
- };
--- 
-2.1.4
diff --git a/recipes-kernel/linux/linux-variscite-3.14.28/arm-Export-cache-flush-management-symbols-when-multi-cache.patch b/recipes-kernel/linux/linux-variscite-3.14.28/arm-Export-cache-flush-management-symbols-when-multi-cache.patch
deleted file mode 100644
index 41be41a..0000000
--- a/recipes-kernel/linux/linux-variscite-3.14.28/arm-Export-cache-flush-management-symbols-when-multi-cache.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From 07c2f624be197c5e1ee0d62f13327fea44446b90 Mon Sep 17 00:00:00 2001
-From: Pantelis Antoniou <panto at antoniou-consulting.com>
-Date: Fri, 4 Jan 2013 00:32:33 +0200
-Subject: [PATCH] arm: Export cache flush management symbols when !MULTI_CACHE
-
-When compiling a kernel without CONFIG_MULTI_CACHE enabled the
-dma access functions end up not being exported. Fix it.
-
-Signed-off-by: Pantelis Antoniou <panto at antoniou-consulting.com>
-Signed-off-by: Otavio Salvador <otavio at ossystems.com.br>
----
- arch/arm/kernel/setup.c | 9 +++++++++
- 1 file changed, 9 insertions(+)
-
-diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c
-index aab70f6..63b310c 100644
---- a/arch/arm/kernel/setup.c
-+++ b/arch/arm/kernel/setup.c
-@@ -1089,3 +1089,12 @@ const struct seq_operations cpuinfo_op = {
-    .stop   = c_stop,
-    .show   = c_show
- };
-+
-+/* export the cache management functions */
-+#ifndef MULTI_CACHE
-+
-+EXPORT_SYMBOL(__glue(_CACHE,_dma_map_area));
-+EXPORT_SYMBOL(__glue(_CACHE,_dma_unmap_area));
-+EXPORT_SYMBOL(__glue(_CACHE,_dma_flush_range));
-+
-+#endif
-
diff --git a/recipes-kernel/linux/linux-variscite-3.14.28/boundarydevices/0002-wlcore-add-initial-device-tree-support-to-the-sdio-m.patch b/recipes-kernel/linux/linux-variscite-3.14.28/boundarydevices/0002-wlcore-add-initial-device-tree-support-to-the-sdio-m.patch
deleted file mode 100644
index 4733c67..0000000
--- a/recipes-kernel/linux/linux-variscite-3.14.28/boundarydevices/0002-wlcore-add-initial-device-tree-support-to-the-sdio-m.patch
+++ /dev/null
@@ -1,132 +0,0 @@
-From f82ba890ddfaeaca058c0d6f868ea40a1bb6ae24 Mon Sep 17 00:00:00 2001
-From: Luciano Coelho <coelho at ti.com>
-Date: Tue, 25 Jun 2013 13:51:53 +0300
-Subject: [PATCH 1/2] wlcore: add initial device tree support to the sdio
- module
-
-If platform data is not available, try to get the required information
-from the device tree.  Register an OF match table and parse the
-appropriate device tree nodes.
-
-Parse interrupt property only, for now.
-
-Signed-off-by: Luciano Coelho <coelho at ti.com>
----
- drivers/net/wireless/ti/wlcore/sdio.c | 70 ++++++++++++++++++++++++++++++++---
- 1 file changed, 64 insertions(+), 6 deletions(-)
-
-diff --git a/drivers/net/wireless/ti/wlcore/sdio.c b/drivers/net/wireless/ti/wlcore/sdio.c
-index 29ef249..53bbb28 100644
---- a/drivers/net/wireless/ti/wlcore/sdio.c
-+++ b/drivers/net/wireless/ti/wlcore/sdio.c
-@@ -30,7 +30,7 @@
- #include <linux/mmc/sdio_ids.h>
- #include <linux/mmc/card.h>
- #include <linux/mmc/host.h>
--#include <linux/gpio.h>
-+#include <linux/of_irq.h>
- #include <linux/wl12xx.h>
- #include <linux/pm_runtime.h>
- #include <linux/printk.h>
-@@ -214,6 +214,43 @@ static struct wl1271_if_operations sdio_ops = {
- 	.set_block_size = wl1271_sdio_set_block_size,
- };
- 
-+static struct wl12xx_platform_data *wlcore_get_pdata_from_of(struct device *dev)
-+{
-+	struct wl12xx_platform_data *pdata;
-+	struct device_node *np = dev->of_node;
-+
-+	if (!np) {
-+		np = of_find_matching_node(NULL, dev->driver->of_match_table);
-+		if (!np) {
-+			dev_notice(dev, "device tree node not available\n");
-+			pdata = ERR_PTR(-ENODEV);
-+			goto out;
-+		}
-+	}
-+
-+	pdata = kzalloc(sizeof(*pdata), GFP_KERNEL);
-+	if (!pdata) {
-+		dev_err(dev, "can't allocate platform data\n");
-+		pdata = ERR_PTR(-ENODEV);
-+		goto out;
-+	}
-+
-+	pdata->irq = irq_of_parse_and_map(np, 0);
-+	if (pdata->irq < 0) {
-+		dev_err(dev, "can't get interrupt gpio from the device tree\n");
-+		goto out_free;
-+	}
-+	pdata->board_ref_clock = WL12XX_REFCLOCK_38; /* 38.4 MHz */
-+	goto out;
-+
-+out_free:
-+	kfree(pdata);
-+	pdata = ERR_PTR(-ENODEV);
-+
-+out:
-+	return pdata;
-+}
-+
- static int wl1271_probe(struct sdio_func *func,
- 				  const struct sdio_device_id *id)
- {
-@@ -248,11 +285,23 @@ static int wl1271_probe(struct sdio_func *func,
- 	/* Use block mode for transferring over one block size of data */
- 	func->card->quirks |= MMC_QUIRK_BLKSZ_FOR_BYTE_MODE;
- 
-+	/* The pdata allocated here is freed when the device is freed,
-+	 * so we don't need an additional out label to free it in case
-+	 * of error further on.
-+	 */
-+
-+	/* Try to get legacy platform data from the board file */
- 	pdev_data->pdata = wl12xx_get_platform_data();
- 	if (IS_ERR(pdev_data->pdata)) {
--		ret = PTR_ERR(pdev_data->pdata);
--		dev_err(glue->dev, "missing wlan platform data: %d\n", ret);
--		goto out_free_glue;
-+		dev_info(&func->dev,
-+			 "legacy platform data not found, trying device tree\n");
-+
-+		pdev_data->pdata = wlcore_get_pdata_from_of(&func->dev);
-+		if (IS_ERR(pdev_data->pdata)) {
-+			ret = PTR_ERR(pdev_data->pdata);
-+			dev_err(&func->dev, "can't get platform data\n");
-+			goto out_free_glue;
-+		}
- 	}
- 
- 	/* if sdio can keep power while host is suspended, enable wow */
-@@ -386,16 +435,25 @@ static const struct dev_pm_ops wl1271_sdio_pm_ops = {
- };
- #endif
- 
-+static const struct of_device_id wlcore_sdio_of_match_table[] = {
-+	{ .compatible = "ti,wilink6" },
-+	{ .compatible = "ti,wilink7" },
-+	{ .compatible = "ti,wilink8" },
-+	{ }
-+};
-+MODULE_DEVICE_TABLE(of, wlcore_sdio_of_match_table);
-+
- static struct sdio_driver wl1271_sdio_driver = {
- 	.name		= "wl1271_sdio",
- 	.id_table	= wl1271_devices,
- 	.probe		= wl1271_probe,
- 	.remove		= wl1271_remove,
--#ifdef CONFIG_PM
- 	.drv = {
-+#ifdef CONFIG_PM
- 		.pm = &wl1271_sdio_pm_ops,
--	},
- #endif
-+		.of_match_table = of_match_ptr(wlcore_sdio_of_match_table),
-+	},
- };
- 
- static int __init wl1271_init(void)
--- 
-1.9.3
-
diff --git a/recipes-kernel/linux/linux-variscite-3.14.28/boundarydevices/0003-wlcore-add-mac-override-parameter.patch b/recipes-kernel/linux/linux-variscite-3.14.28/boundarydevices/0003-wlcore-add-mac-override-parameter.patch
deleted file mode 100644
index 65c4512..0000000
--- a/recipes-kernel/linux/linux-variscite-3.14.28/boundarydevices/0003-wlcore-add-mac-override-parameter.patch
+++ /dev/null
@@ -1,92 +0,0 @@
-From 4dca78d4c66c8bf6440e2fa86c155a1d969f39a6 Mon Sep 17 00:00:00 2001
-From: Troy Kisky <troy.kisky at boundarydevices.com>
-Date: Wed, 23 May 2012 18:38:54 -0700
-Subject: [PATCH 2/2] wlcore: add mac override parameter
-
-Note the cmdline parameter would be wlcore.mac=nn:nn:nn:nn:nn:nn
-
-This moved since the 3.0.x kernels because of WL12xx restructuring.
-
-Signed-off-by: Troy Kisky <troy.kisky at boundarydevices.com>
-
-Conflicts:
-	drivers/net/wireless/wl12xx/main.c
----
- drivers/net/wireless/ti/wlcore/main.c | 40 ++++++++++++++++++++++++++++++++++-
- 1 file changed, 39 insertions(+), 1 deletion(-)
-
-diff --git a/drivers/net/wireless/ti/wlcore/main.c b/drivers/net/wireless/ti/wlcore/main.c
-index b46b311..b1f5740 100644
---- a/drivers/net/wireless/ti/wlcore/main.c
-+++ b/drivers/net/wireless/ti/wlcore/main.c
-@@ -47,6 +47,7 @@ static char *fwlog_param;
- static int fwlog_mem_blocks = -1;
- static int bug_on_recovery = -1;
- static int no_recovery     = -1;
-+static char *mac_param;
- 
- static void __wl1271_op_remove_interface(struct wl1271 *wl,
- 					 struct ieee80211_vif *vif,
-@@ -5623,6 +5624,26 @@ out:
- 	return ret;
- }
- 
-+static int parse_mac(unsigned char *mac, unsigned char const *str_mac)
-+{
-+	int i = 0;
-+	char *end;
-+	int ret = -EINVAL;
-+
-+	for (;;) {
-+		mac[i++] = simple_strtoul(str_mac, &end, 16);
-+		if (i == 6) {
-+			if (!*end || (*end == ' '))
-+				ret = 0;
-+			break;
-+		}
-+		str_mac = end + 1;
-+		if ((*end != '-') && (*end != ':'))
-+			break;
-+	}
-+	return ret;
-+}
-+
- static int wl1271_register_hw(struct wl1271 *wl)
- {
- 	int ret;
-@@ -5631,7 +5652,21 @@ static int wl1271_register_hw(struct wl1271 *wl)
- 	if (wl->mac80211_registered)
- 		return 0;
- 
--	if (wl->nvs_len >= 12) {
-+	if (mac_param){
-+		u8 override_mac[ETH_ALEN];
-+		memset(override_mac, 0, ETH_ALEN);
-+
-+		if (0 == parse_mac(override_mac, mac_param)) {
-+			oui_addr = override_mac[0] << 16
-+				  | override_mac[1] << 8
-+				  | override_mac[2];
-+                        nic_addr = override_mac[3] << 16
-+				  | override_mac[4] << 8
-+				  | override_mac[5];
-+		} else
-+			pr_err("%s: error parsing mac %s\n",
-+			       __func__, mac_param);
-+	} else if (wl->nvs_len >= 12) {
- 		/* NOTE: The wl->nvs->nvs element must be first, in
- 		 * order to simplify the casting, we assume it is at
- 		 * the beginning of the wl->nvs structure.
-@@ -6198,6 +6233,9 @@ MODULE_PARM_DESC(bug_on_recovery, "BUG() on fw recovery");
- module_param(no_recovery, int, S_IRUSR | S_IWUSR);
- MODULE_PARM_DESC(no_recovery, "Prevent HW recovery. FW will remain stuck.");
- 
-+module_param_named(mac, mac_param, charp, S_IRUGO);
-+MODULE_PARM_DESC(mac, "mac address override");
-+
- MODULE_LICENSE("GPL");
- MODULE_AUTHOR("Luciano Coelho <coelho at ti.com>");
- MODULE_AUTHOR("Juuso Oikarinen <juuso.oikarinen at nokia.com>");
--- 
-1.9.3
-
diff --git a/recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0001-wlcore-memset-wl-rx_filter_enabled-to-zero-after-rec.patch b/recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0001-wlcore-memset-wl-rx_filter_enabled-to-zero-after-rec.patch
deleted file mode 100644
index 0d46cdb..0000000
--- a/recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0001-wlcore-memset-wl-rx_filter_enabled-to-zero-after-rec.patch
+++ /dev/null
@@ -1,88 +0,0 @@
-From 02d0727ca3b0bc8194bd69cd52ddf9e4e2910890 Mon Sep 17 00:00:00 2001
-From: Nadim Zubidat <nadimz at ti.com>
-Date: Mon, 10 Feb 2014 13:47:17 +0200
-Subject: [PATCH 01/18] wlcore: memset wl->rx_filter_enabled to zero after
- recovery
-
-zero rx_filter_enabled array after recovery to avoid
-cases were the driver will keep trying to clear a
-filter which is not configured in FW.
-
-Such case will cause consecutive recoveries due to
-command execution failures.
-
-While on it, convert rx_filter_enabled to bitmap,
-to save some memory and make sparse happy (it
-doesn't like sizeof(bool array)).
-
-Signed-off-by: Nadim Zubidat <nadimz at ti.com>
-Signed-off-by: Eliad Peller <eliad at wizery.com>
-Signed-off-by: John W. Linville <linville at tuxdriver.com>
----
- drivers/net/wireless/ti/wlcore/main.c   | 1 +
- drivers/net/wireless/ti/wlcore/rx.c     | 9 ++++++---
- drivers/net/wireless/ti/wlcore/wlcore.h | 2 +-
- 3 files changed, 8 insertions(+), 4 deletions(-)
-
-diff --git a/drivers/net/wireless/ti/wlcore/main.c b/drivers/net/wireless/ti/wlcore/main.c
-index b46b311..da268e8 100644
---- a/drivers/net/wireless/ti/wlcore/main.c
-+++ b/drivers/net/wireless/ti/wlcore/main.c
-@@ -1914,6 +1914,7 @@ static void wlcore_op_stop_locked(struct wl1271 *wl)
- 	memset(wl->links_map, 0, sizeof(wl->links_map));
- 	memset(wl->roc_map, 0, sizeof(wl->roc_map));
- 	memset(wl->session_ids, 0, sizeof(wl->session_ids));
-+	memset(wl->rx_filter_enabled, 0, sizeof(wl->rx_filter_enabled));
- 	wl->active_sta_count = 0;
- 	wl->active_link_count = 0;
- 
-diff --git a/drivers/net/wireless/ti/wlcore/rx.c b/drivers/net/wireless/ti/wlcore/rx.c
-index 6791a1a..94ab445 100644
---- a/drivers/net/wireless/ti/wlcore/rx.c
-+++ b/drivers/net/wireless/ti/wlcore/rx.c
-@@ -302,7 +302,7 @@ int wl1271_rx_filter_enable(struct wl1271 *wl,
- {
- 	int ret;
- 
--	if (wl->rx_filter_enabled[index] == enable) {
-+	if (!!test_bit(index, wl->rx_filter_enabled) == enable) {
- 		wl1271_warning("Request to enable an already "
- 			     "enabled rx filter %d", index);
- 		return 0;
-@@ -316,7 +316,10 @@ int wl1271_rx_filter_enable(struct wl1271 *wl,
- 		return ret;
- 	}
- 
--	wl->rx_filter_enabled[index] = enable;
-+	if (enable)
-+		__set_bit(index, wl->rx_filter_enabled);
-+	else
-+		__clear_bit(index, wl->rx_filter_enabled);
- 
- 	return 0;
- }
-@@ -326,7 +329,7 @@ int wl1271_rx_filter_clear_all(struct wl1271 *wl)
- 	int i, ret = 0;
- 
- 	for (i = 0; i < WL1271_MAX_RX_FILTERS; i++) {
--		if (!wl->rx_filter_enabled[i])
-+		if (!test_bit(i, wl->rx_filter_enabled))
- 			continue;
- 		ret = wl1271_rx_filter_enable(wl, i, 0, NULL);
- 		if (ret)
-diff --git a/drivers/net/wireless/ti/wlcore/wlcore.h b/drivers/net/wireless/ti/wlcore/wlcore.h
-index 06efc12..a3cc117 100644
---- a/drivers/net/wireless/ti/wlcore/wlcore.h
-+++ b/drivers/net/wireless/ti/wlcore/wlcore.h
-@@ -451,7 +451,7 @@ struct wl1271 {
- 	size_t fw_status_priv_len;
- 
- 	/* RX Data filter rule state - enabled/disabled */
--	bool rx_filter_enabled[WL1271_MAX_RX_FILTERS];
-+	unsigned long rx_filter_enabled[BITS_TO_LONGS(WL1271_MAX_RX_FILTERS)];
- 
- 	/* size of the private static data */
- 	size_t static_data_priv_len;
--- 
-1.9.3
-
diff --git a/recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0002-wlcore-cancel-Tx-watchdog-on-suspend-and-rearm-on-fi.patch b/recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0002-wlcore-cancel-Tx-watchdog-on-suspend-and-rearm-on-fi.patch
deleted file mode 100644
index ed6a00a..0000000
--- a/recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0002-wlcore-cancel-Tx-watchdog-on-suspend-and-rearm-on-fi.patch
+++ /dev/null
@@ -1,88 +0,0 @@
-From 9be86cf067f43c3a43a538189d773afc812e4017 Mon Sep 17 00:00:00 2001
-From: Arik Nemtsov <arik at wizery.com>
-Date: Mon, 10 Feb 2014 13:47:18 +0200
-Subject: [PATCH 02/18] wlcore: cancel Tx watchdog on suspend and rearm on
- first Tx after
-
-Sometimes a tx_flush during suspend fails, but the FW manages to flush
-out the packets during the time when the host is supsended. Cancel
-the Tx-watchdog on suspend to not cause a spurious recovery on resume
-for that case. Set a flag to reinit the watchdog on the first Tx after
-resume, so we'll still recover if the FW is not empty and there's
-indeed a problem.
-
-Signed-off-by: Arik Nemtsov <arik at wizery.com>
-Signed-off-by: Eliad Peller <eliad at wizery.com>
-Signed-off-by: John W. Linville <linville at tuxdriver.com>
----
- drivers/net/wireless/ti/wlcore/main.c     | 13 +++++++++++++
- drivers/net/wireless/ti/wlcore/tx.c       |  9 +++++++--
- drivers/net/wireless/ti/wlcore/wlcore_i.h |  1 +
- 3 files changed, 21 insertions(+), 2 deletions(-)
-
-diff --git a/drivers/net/wireless/ti/wlcore/main.c b/drivers/net/wireless/ti/wlcore/main.c
-index da268e8..1e19196 100644
---- a/drivers/net/wireless/ti/wlcore/main.c
-+++ b/drivers/net/wireless/ti/wlcore/main.c
-@@ -1767,6 +1767,12 @@ static int wl1271_op_suspend(struct ieee80211_hw *hw,
- 	flush_work(&wl->tx_work);
- 	flush_delayed_work(&wl->elp_work);
- 
-+	/*
-+	 * Cancel the watchdog even if above tx_flush failed. We will detect
-+	 * it on resume anyway.
-+	 */
-+	cancel_delayed_work(&wl->tx_watchdog_work);
-+
- 	return 0;
- }
- 
-@@ -1824,6 +1830,13 @@ static int wl1271_op_resume(struct ieee80211_hw *hw)
- 
- out:
- 	wl->wow_enabled = false;
-+
-+	/*
-+	 * Set a flag to re-init the watchdog on the first Tx after resume.
-+	 * That way we avoid possible conditions where Tx-complete interrupts
-+	 * fail to arrive and we perform a spurious recovery.
-+	 */
-+	set_bit(WL1271_FLAG_REINIT_TX_WDOG, &wl->flags);
- 	mutex_unlock(&wl->mutex);
- 
- 	return 0;
-diff --git a/drivers/net/wireless/ti/wlcore/tx.c b/drivers/net/wireless/ti/wlcore/tx.c
-index 87cd707..ca886ef 100644
---- a/drivers/net/wireless/ti/wlcore/tx.c
-+++ b/drivers/net/wireless/ti/wlcore/tx.c
-@@ -234,8 +234,13 @@ static int wl1271_tx_allocate(struct wl1271 *wl, struct wl12xx_vif *wlvif,
- 		wl->tx_blocks_available -= total_blocks;
- 		wl->tx_allocated_blocks += total_blocks;
- 
--		/* If the FW was empty before, arm the Tx watchdog */
--		if (wl->tx_allocated_blocks == total_blocks)
-+		/*
-+		 * If the FW was empty before, arm the Tx watchdog. Also do
-+		 * this on the first Tx after resume, as we always cancel the
-+		 * watchdog on suspend.
-+		 */
-+		if (wl->tx_allocated_blocks == total_blocks ||
-+		    test_and_clear_bit(WL1271_FLAG_REINIT_TX_WDOG, &wl->flags))
- 			wl12xx_rearm_tx_watchdog_locked(wl);
- 
- 		ac = wl1271_tx_get_queue(skb_get_queue_mapping(skb));
-diff --git a/drivers/net/wireless/ti/wlcore/wlcore_i.h b/drivers/net/wireless/ti/wlcore/wlcore_i.h
-index ce7261c..3815332 100644
---- a/drivers/net/wireless/ti/wlcore/wlcore_i.h
-+++ b/drivers/net/wireless/ti/wlcore/wlcore_i.h
-@@ -240,6 +240,7 @@ enum wl12xx_flags {
- 	WL1271_FLAG_VIF_CHANGE_IN_PROGRESS,
- 	WL1271_FLAG_INTENDED_FW_RECOVERY,
- 	WL1271_FLAG_IO_FAILED,
-+	WL1271_FLAG_REINIT_TX_WDOG,
- };
- 
- enum wl12xx_vif_flags {
--- 
-1.9.3
-
diff --git a/recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0003-wlcore-block-read-writes-to-FW-during-ELP.patch b/recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0003-wlcore-block-read-writes-to-FW-during-ELP.patch
deleted file mode 100644
index d9d4545..0000000
--- a/recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0003-wlcore-block-read-writes-to-FW-during-ELP.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-From 51ae14d0eae31a7d678c201c9664efbb373f97fa Mon Sep 17 00:00:00 2001
-From: Barak Bercovitz <barak at wizery.com>
-Date: Mon, 10 Feb 2014 13:47:19 +0200
-Subject: [PATCH 03/18] wlcore: block read/writes to FW during ELP
-
-When the chip is in ELP mode read/write to FW is invalid and may cause
-the lower layers to get stuck. The reads/writes concerning ELP wakeup
-are the exception here and are checked for. In addition to blocking the
-IO, produce a warning.
-
-Signed-off-by: Barak Bercovitz <barak at wizery.com>
-Signed-off-by: Eliad Peller <eliad at wizery.com>
-Signed-off-by: John W. Linville <linville at tuxdriver.com>
----
- drivers/net/wireless/ti/wlcore/io.h | 8 ++++++--
- 1 file changed, 6 insertions(+), 2 deletions(-)
-
-diff --git a/drivers/net/wireless/ti/wlcore/io.h b/drivers/net/wireless/ti/wlcore/io.h
-index 07e3d6a..0305729 100644
---- a/drivers/net/wireless/ti/wlcore/io.h
-+++ b/drivers/net/wireless/ti/wlcore/io.h
-@@ -60,7 +60,9 @@ static inline int __must_check wlcore_raw_write(struct wl1271 *wl, int addr,
- {
- 	int ret;
- 
--	if (test_bit(WL1271_FLAG_IO_FAILED, &wl->flags))
-+	if (test_bit(WL1271_FLAG_IO_FAILED, &wl->flags) ||
-+	    WARN_ON((test_bit(WL1271_FLAG_IN_ELP, &wl->flags) &&
-+		     addr != HW_ACCESS_ELP_CTRL_REG)))
- 		return -EIO;
- 
- 	ret = wl->if_ops->write(wl->dev, addr, buf, len, fixed);
-@@ -76,7 +78,9 @@ static inline int __must_check wlcore_raw_read(struct wl1271 *wl, int addr,
- {
- 	int ret;
- 
--	if (test_bit(WL1271_FLAG_IO_FAILED, &wl->flags))
-+	if (test_bit(WL1271_FLAG_IO_FAILED, &wl->flags) ||
-+	    WARN_ON((test_bit(WL1271_FLAG_IN_ELP, &wl->flags) &&
-+		     addr != HW_ACCESS_ELP_CTRL_REG)))
- 		return -EIO;
- 
- 	ret = wl->if_ops->read(wl->dev, addr, buf, len, fixed);
--- 
-1.9.3
-
diff --git a/recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0004-wlcore-AP-don-t-start-mac80211-PS-on-non-peer-HLIDs.patch b/recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0004-wlcore-AP-don-t-start-mac80211-PS-on-non-peer-HLIDs.patch
deleted file mode 100644
index 4684662..0000000
--- a/recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0004-wlcore-AP-don-t-start-mac80211-PS-on-non-peer-HLIDs.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-From 7a536265b0b470893c13dc0f094e3078521818e2 Mon Sep 17 00:00:00 2001
-From: Arik Nemtsov <arik at wizery.com>
-Date: Mon, 10 Feb 2014 13:47:20 +0200
-Subject: [PATCH 04/18] wlcore: AP: don't start mac80211 PS on non-peer HLIDs
-
-It seems the wl18xx FW sometimes sends spurious changes on the PSM state
-of the broadcast HLID. This causes us to search for a station on a
-non-peer link and fail, causing warnings in our log.
-
-Prevent the driver from considering PSM changes for any non-peer HLIDs.
-
-Signed-off-by: Arik Nemtsov <arik at wizery.com>
-Signed-off-by: Eliad Peller <eliad at wizery.com>
-Signed-off-by: John W. Linville <linville at tuxdriver.com>
----
- drivers/net/wireless/ti/wlcore/ps.c | 6 +++++-
- 1 file changed, 5 insertions(+), 1 deletion(-)
-
-diff --git a/drivers/net/wireless/ti/wlcore/ps.c b/drivers/net/wireless/ti/wlcore/ps.c
-index 26bfc36..b52516e 100644
---- a/drivers/net/wireless/ti/wlcore/ps.c
-+++ b/drivers/net/wireless/ti/wlcore/ps.c
-@@ -280,7 +280,11 @@ void wl12xx_ps_link_start(struct wl1271 *wl, struct wl12xx_vif *wlvif,
- 	struct ieee80211_sta *sta;
- 	struct ieee80211_vif *vif = wl12xx_wlvif_to_vif(wlvif);
- 
--	if (test_bit(hlid, &wl->ap_ps_map))
-+	if (WARN_ON_ONCE(wlvif->bss_type != BSS_TYPE_AP_BSS))
-+		return;
-+
-+	if (!test_bit(hlid, wlvif->ap.sta_hlid_map) ||
-+	    test_bit(hlid, &wl->ap_ps_map))
- 		return;
- 
- 	wl1271_debug(DEBUG_PSM, "start mac80211 PSM on hlid %d pkts %d "
--- 
-1.9.3
-
diff --git a/recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0005-wlcore-wl12xx-wl18xx-simplify-fw_status-handling.patch b/recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0005-wlcore-wl12xx-wl18xx-simplify-fw_status-handling.patch
deleted file mode 100644
index 3045788..0000000
--- a/recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0005-wlcore-wl12xx-wl18xx-simplify-fw_status-handling.patch
+++ /dev/null
@@ -1,763 +0,0 @@
-From 75fb4df7f804229372e073977615a149a4a28dc0 Mon Sep 17 00:00:00 2001
-From: Eliad Peller <eliad at wizery.com>
-Date: Mon, 10 Feb 2014 13:47:21 +0200
-Subject: [PATCH 05/18] wlcore/wl12xx/wl18xx: simplify fw_status handling
-
-Instead of splitting the fw_status into 2 and using some
-complex calculations, read the fw status and let each low-level
-driver (wl12xx/wl18xx) convert it into a common struct.
-
-This is required for the upcoming fw api changes, which
-break the current logic anyway.
-
-Signed-off-by: Eliad Peller <eliad at wizery.com>
-Signed-off-by: John W. Linville <linville at tuxdriver.com>
----
- drivers/net/wireless/ti/wl12xx/main.c     | 35 ++++++++++-
- drivers/net/wireless/ti/wl12xx/wl12xx.h   | 50 ++++++++++++++++
- drivers/net/wireless/ti/wl18xx/main.c     | 39 ++++++++++++-
- drivers/net/wireless/ti/wl18xx/tx.c       |  4 +-
- drivers/net/wireless/ti/wl18xx/wl18xx.h   | 53 +++++++++++++++++
- drivers/net/wireless/ti/wlcore/cmd.c      | 11 +++-
- drivers/net/wireless/ti/wlcore/hw_ops.h   |  9 +++
- drivers/net/wireless/ti/wlcore/main.c     | 96 +++++++++++++++----------------
- drivers/net/wireless/ti/wlcore/rx.c       |  2 +-
- drivers/net/wireless/ti/wlcore/rx.h       |  2 +-
- drivers/net/wireless/ti/wlcore/wlcore.h   |  7 ++-
- drivers/net/wireless/ti/wlcore/wlcore_i.h | 72 ++++++++++-------------
- 12 files changed, 277 insertions(+), 103 deletions(-)
-
-diff --git a/drivers/net/wireless/ti/wl12xx/main.c b/drivers/net/wireless/ti/wl12xx/main.c
-index be7129b..3ad8767 100644
---- a/drivers/net/wireless/ti/wl12xx/main.c
-+++ b/drivers/net/wireless/ti/wl12xx/main.c
-@@ -1378,7 +1378,7 @@ static u32 wl12xx_get_rx_packet_len(struct wl1271 *wl, void *rx_data,
- 
- static int wl12xx_tx_delayed_compl(struct wl1271 *wl)
- {
--	if (wl->fw_status_1->tx_results_counter ==
-+	if (wl->fw_status->tx_results_counter ==
- 	    (wl->tx_results_count & 0xff))
- 		return 0;
- 
-@@ -1438,6 +1438,37 @@ out:
- 	return ret;
- }
- 
-+static void wl12xx_convert_fw_status(struct wl1271 *wl, void *raw_fw_status,
-+				     struct wl_fw_status *fw_status)
-+{
-+	struct wl12xx_fw_status *int_fw_status = raw_fw_status;
-+
-+	fw_status->intr = le32_to_cpu(int_fw_status->intr);
-+	fw_status->fw_rx_counter = int_fw_status->fw_rx_counter;
-+	fw_status->drv_rx_counter = int_fw_status->drv_rx_counter;
-+	fw_status->tx_results_counter = int_fw_status->tx_results_counter;
-+	fw_status->rx_pkt_descs = int_fw_status->rx_pkt_descs;
-+
-+	fw_status->fw_localtime = le32_to_cpu(int_fw_status->fw_localtime);
-+	fw_status->link_ps_bitmap = le32_to_cpu(int_fw_status->link_ps_bitmap);
-+	fw_status->link_fast_bitmap =
-+			le32_to_cpu(int_fw_status->link_fast_bitmap);
-+	fw_status->total_released_blks =
-+			le32_to_cpu(int_fw_status->total_released_blks);
-+	fw_status->tx_total = le32_to_cpu(int_fw_status->tx_total);
-+
-+	fw_status->counters.tx_released_pkts =
-+			int_fw_status->counters.tx_released_pkts;
-+	fw_status->counters.tx_lnk_free_pkts =
-+			int_fw_status->counters.tx_lnk_free_pkts;
-+	fw_status->counters.tx_voice_released_blks =
-+			int_fw_status->counters.tx_voice_released_blks;
-+	fw_status->counters.tx_last_rate =
-+			int_fw_status->counters.tx_last_rate;
-+
-+	fw_status->log_start_addr = le32_to_cpu(int_fw_status->log_start_addr);
-+}
-+
- static u32 wl12xx_sta_get_ap_rate_mask(struct wl1271 *wl,
- 				       struct wl12xx_vif *wlvif)
- {
-@@ -1677,6 +1708,7 @@ static struct wlcore_ops wl12xx_ops = {
- 	.tx_delayed_compl	= wl12xx_tx_delayed_compl,
- 	.hw_init		= wl12xx_hw_init,
- 	.init_vif		= NULL,
-+	.convert_fw_status	= wl12xx_convert_fw_status,
- 	.sta_get_ap_rate_mask	= wl12xx_sta_get_ap_rate_mask,
- 	.get_pg_ver		= wl12xx_get_pg_ver,
- 	.get_mac		= wl12xx_get_mac,
-@@ -1725,6 +1757,7 @@ static int wl12xx_setup(struct wl1271 *wl)
- 	wl->band_rate_to_idx = wl12xx_band_rate_to_idx;
- 	wl->hw_tx_rate_tbl_size = WL12XX_CONF_HW_RXTX_RATE_MAX;
- 	wl->hw_min_ht_rate = WL12XX_CONF_HW_RXTX_RATE_MCS0;
-+	wl->fw_status_len = sizeof(struct wl12xx_fw_status);
- 	wl->fw_status_priv_len = 0;
- 	wl->stats.fw_stats_len = sizeof(struct wl12xx_acx_statistics);
- 	wlcore_set_ht_cap(wl, IEEE80211_BAND_2GHZ, &wl12xx_ht_cap);
-diff --git a/drivers/net/wireless/ti/wl12xx/wl12xx.h b/drivers/net/wireless/ti/wl12xx/wl12xx.h
-index 9e5484a..b9950f8 100644
---- a/drivers/net/wireless/ti/wl12xx/wl12xx.h
-+++ b/drivers/net/wireless/ti/wl12xx/wl12xx.h
-@@ -79,4 +79,54 @@ struct wl12xx_priv {
- 	struct wl127x_rx_mem_pool_addr *rx_mem_addr;
- };
- 
-+struct wl12xx_fw_packet_counters {
-+	/* Cumulative counter of released packets per AC */
-+	u8 tx_released_pkts[NUM_TX_QUEUES];
-+
-+	/* Cumulative counter of freed packets per HLID */
-+	u8 tx_lnk_free_pkts[WL12XX_MAX_LINKS];
-+
-+	/* Cumulative counter of released Voice memory blocks */
-+	u8 tx_voice_released_blks;
-+
-+	/* Tx rate of the last transmitted packet */
-+	u8 tx_last_rate;
-+
-+	u8 padding[2];
-+} __packed;
-+
-+/* FW status registers */
-+struct wl12xx_fw_status {
-+	__le32 intr;
-+	u8  fw_rx_counter;
-+	u8  drv_rx_counter;
-+	u8  reserved;
-+	u8  tx_results_counter;
-+	__le32 rx_pkt_descs[WL12XX_NUM_RX_DESCRIPTORS];
-+
-+	__le32 fw_localtime;
-+
-+	/*
-+	 * A bitmap (where each bit represents a single HLID)
-+	 * to indicate if the station is in PS mode.
-+	 */
-+	__le32 link_ps_bitmap;
-+
-+	/*
-+	 * A bitmap (where each bit represents a single HLID) to indicate
-+	 * if the station is in Fast mode
-+	 */
-+	__le32 link_fast_bitmap;
-+
-+	/* Cumulative counter of total released mem blocks since FW-reset */
-+	__le32 total_released_blks;
-+
-+	/* Size (in Memory Blocks) of TX pool */
-+	__le32 tx_total;
-+
-+	struct wl12xx_fw_packet_counters counters;
-+
-+	__le32 log_start_addr;
-+} __packed;
-+
- #endif /* __WL12XX_PRIV_H__ */
-diff --git a/drivers/net/wireless/ti/wl18xx/main.c b/drivers/net/wireless/ti/wl18xx/main.c
-index ec37b16..cbf9bf3 100644
---- a/drivers/net/wireless/ti/wl18xx/main.c
-+++ b/drivers/net/wireless/ti/wl18xx/main.c
-@@ -1133,6 +1133,39 @@ static int wl18xx_hw_init(struct wl1271 *wl)
- 	return ret;
- }
- 
-+static void wl18xx_convert_fw_status(struct wl1271 *wl, void *raw_fw_status,
-+				     struct wl_fw_status *fw_status)
-+{
-+	struct wl18xx_fw_status *int_fw_status = raw_fw_status;
-+
-+	fw_status->intr = le32_to_cpu(int_fw_status->intr);
-+	fw_status->fw_rx_counter = int_fw_status->fw_rx_counter;
-+	fw_status->drv_rx_counter = int_fw_status->drv_rx_counter;
-+	fw_status->tx_results_counter = int_fw_status->tx_results_counter;
-+	fw_status->rx_pkt_descs = int_fw_status->rx_pkt_descs;
-+
-+	fw_status->fw_localtime = le32_to_cpu(int_fw_status->fw_localtime);
-+	fw_status->link_ps_bitmap = le32_to_cpu(int_fw_status->link_ps_bitmap);
-+	fw_status->link_fast_bitmap =
-+			le32_to_cpu(int_fw_status->link_fast_bitmap);
-+	fw_status->total_released_blks =
-+			le32_to_cpu(int_fw_status->total_released_blks);
-+	fw_status->tx_total = le32_to_cpu(int_fw_status->tx_total);
-+
-+	fw_status->counters.tx_released_pkts =
-+			int_fw_status->counters.tx_released_pkts;
-+	fw_status->counters.tx_lnk_free_pkts =
-+			int_fw_status->counters.tx_lnk_free_pkts;
-+	fw_status->counters.tx_voice_released_blks =
-+			int_fw_status->counters.tx_voice_released_blks;
-+	fw_status->counters.tx_last_rate =
-+			int_fw_status->counters.tx_last_rate;
-+
-+	fw_status->log_start_addr = le32_to_cpu(int_fw_status->log_start_addr);
-+
-+	fw_status->priv = &int_fw_status->priv;
-+}
-+
- static void wl18xx_set_tx_desc_csum(struct wl1271 *wl,
- 				    struct wl1271_tx_hw_descr *desc,
- 				    struct sk_buff *skb)
-@@ -1572,7 +1605,7 @@ static bool wl18xx_lnk_high_prio(struct wl1271 *wl, u8 hlid,
- {
- 	u8 thold;
- 	struct wl18xx_fw_status_priv *status_priv =
--		(struct wl18xx_fw_status_priv *)wl->fw_status_2->priv;
-+		(struct wl18xx_fw_status_priv *)wl->fw_status->priv;
- 	u32 suspend_bitmap = le32_to_cpu(status_priv->link_suspend_bitmap);
- 
- 	/* suspended links are never high priority */
-@@ -1594,7 +1627,7 @@ static bool wl18xx_lnk_low_prio(struct wl1271 *wl, u8 hlid,
- {
- 	u8 thold;
- 	struct wl18xx_fw_status_priv *status_priv =
--		(struct wl18xx_fw_status_priv *)wl->fw_status_2->priv;
-+		(struct wl18xx_fw_status_priv *)wl->fw_status->priv;
- 	u32 suspend_bitmap = le32_to_cpu(status_priv->link_suspend_bitmap);
- 
- 	if (test_bit(hlid, (unsigned long *)&suspend_bitmap))
-@@ -1632,6 +1665,7 @@ static struct wlcore_ops wl18xx_ops = {
- 	.tx_immediate_compl = wl18xx_tx_immediate_completion,
- 	.tx_delayed_compl = NULL,
- 	.hw_init	= wl18xx_hw_init,
-+	.convert_fw_status = wl18xx_convert_fw_status,
- 	.set_tx_desc_csum = wl18xx_set_tx_desc_csum,
- 	.get_pg_ver	= wl18xx_get_pg_ver,
- 	.set_rx_csum = wl18xx_set_rx_csum,
-@@ -1726,6 +1760,7 @@ static int wl18xx_setup(struct wl1271 *wl)
- 	wl->band_rate_to_idx = wl18xx_band_rate_to_idx;
- 	wl->hw_tx_rate_tbl_size = WL18XX_CONF_HW_RXTX_RATE_MAX;
- 	wl->hw_min_ht_rate = WL18XX_CONF_HW_RXTX_RATE_MCS0;
-+	wl->fw_status_len = sizeof(struct wl18xx_fw_status);
- 	wl->fw_status_priv_len = sizeof(struct wl18xx_fw_status_priv);
- 	wl->stats.fw_stats_len = sizeof(struct wl18xx_acx_statistics);
- 	wl->static_data_priv_len = sizeof(struct wl18xx_static_data_priv);
-diff --git a/drivers/net/wireless/ti/wl18xx/tx.c b/drivers/net/wireless/ti/wl18xx/tx.c
-index 57c6943..be1ebd5 100644
---- a/drivers/net/wireless/ti/wl18xx/tx.c
-+++ b/drivers/net/wireless/ti/wl18xx/tx.c
-@@ -32,7 +32,7 @@ static
- void wl18xx_get_last_tx_rate(struct wl1271 *wl, struct ieee80211_vif *vif,
- 			     struct ieee80211_tx_rate *rate)
- {
--	u8 fw_rate = wl->fw_status_2->counters.tx_last_rate;
-+	u8 fw_rate = wl->fw_status->counters.tx_last_rate;
- 
- 	if (fw_rate > CONF_HW_RATE_INDEX_MAX) {
- 		wl1271_error("last Tx rate invalid: %d", fw_rate);
-@@ -139,7 +139,7 @@ static void wl18xx_tx_complete_packet(struct wl1271 *wl, u8 tx_stat_byte)
- void wl18xx_tx_immediate_complete(struct wl1271 *wl)
- {
- 	struct wl18xx_fw_status_priv *status_priv =
--		(struct wl18xx_fw_status_priv *)wl->fw_status_2->priv;
-+		(struct wl18xx_fw_status_priv *)wl->fw_status->priv;
- 	struct wl18xx_priv *priv = wl->priv;
- 	u8 i;
- 
-diff --git a/drivers/net/wireless/ti/wl18xx/wl18xx.h b/drivers/net/wireless/ti/wl18xx/wl18xx.h
-index 9204e07..d32a6af 100644
---- a/drivers/net/wireless/ti/wl18xx/wl18xx.h
-+++ b/drivers/net/wireless/ti/wl18xx/wl18xx.h
-@@ -109,6 +109,59 @@ struct wl18xx_fw_status_priv {
- 	u8 padding[3];
- };
- 
-+struct wl18xx_fw_packet_counters {
-+	/* Cumulative counter of released packets per AC */
-+	u8 tx_released_pkts[NUM_TX_QUEUES];
-+
-+	/* Cumulative counter of freed packets per HLID */
-+	u8 tx_lnk_free_pkts[WL12XX_MAX_LINKS];
-+
-+	/* Cumulative counter of released Voice memory blocks */
-+	u8 tx_voice_released_blks;
-+
-+	/* Tx rate of the last transmitted packet */
-+	u8 tx_last_rate;
-+
-+	u8 padding[2];
-+} __packed;
-+
-+/* FW status registers */
-+struct wl18xx_fw_status {
-+	__le32 intr;
-+	u8  fw_rx_counter;
-+	u8  drv_rx_counter;
-+	u8  reserved;
-+	u8  tx_results_counter;
-+	__le32 rx_pkt_descs[WL18XX_NUM_RX_DESCRIPTORS];
-+
-+	__le32 fw_localtime;
-+
-+	/*
-+	 * A bitmap (where each bit represents a single HLID)
-+	 * to indicate if the station is in PS mode.
-+	 */
-+	__le32 link_ps_bitmap;
-+
-+	/*
-+	 * A bitmap (where each bit represents a single HLID) to indicate
-+	 * if the station is in Fast mode
-+	 */
-+	__le32 link_fast_bitmap;
-+
-+	/* Cumulative counter of total released mem blocks since FW-reset */
-+	__le32 total_released_blks;
-+
-+	/* Size (in Memory Blocks) of TX pool */
-+	__le32 tx_total;
-+
-+	struct wl18xx_fw_packet_counters counters;
-+
-+	__le32 log_start_addr;
-+
-+	/* Private status to be used by the lower drivers */
-+	struct wl18xx_fw_status_priv priv;
-+} __packed;
-+
- #define WL18XX_PHY_VERSION_MAX_LEN 20
- 
- struct wl18xx_static_data_priv {
-diff --git a/drivers/net/wireless/ti/wlcore/cmd.c b/drivers/net/wireless/ti/wlcore/cmd.c
-index 9b2ecf5..4d19fd2 100644
---- a/drivers/net/wireless/ti/wlcore/cmd.c
-+++ b/drivers/net/wireless/ti/wlcore/cmd.c
-@@ -324,9 +324,14 @@ int wl12xx_allocate_link(struct wl1271 *wl, struct wl12xx_vif *wlvif, u8 *hlid)
- 	__set_bit(link, wlvif->links_map);
- 	spin_unlock_irqrestore(&wl->wl_lock, flags);
- 
--	/* take the last "freed packets" value from the current FW status */
--	wl->links[link].prev_freed_pkts =
--			wl->fw_status_2->counters.tx_lnk_free_pkts[link];
-+	/*
-+	 * take the last "freed packets" value from the current FW status.
-+	 * on recovery, we might not have fw_status yet, and
-+	 * tx_lnk_free_pkts will be NULL. check for it.
-+	 */
-+	if (wl->fw_status->counters.tx_lnk_free_pkts)
-+		wl->links[link].prev_freed_pkts =
-+			wl->fw_status->counters.tx_lnk_free_pkts[link];
- 	wl->links[link].wlvif = wlvif;
- 
- 	/*
-diff --git a/drivers/net/wireless/ti/wlcore/hw_ops.h b/drivers/net/wireless/ti/wlcore/hw_ops.h
-index 51f8d63..1555ff9 100644
---- a/drivers/net/wireless/ti/wlcore/hw_ops.h
-+++ b/drivers/net/wireless/ti/wlcore/hw_ops.h
-@@ -106,6 +106,15 @@ wlcore_hw_init_vif(struct wl1271 *wl, struct wl12xx_vif *wlvif)
- 	return 0;
- }
- 
-+static inline void
-+wlcore_hw_convert_fw_status(struct wl1271 *wl, void *raw_fw_status,
-+			    struct wl_fw_status *fw_status)
-+{
-+	BUG_ON(!wl->ops->convert_fw_status);
-+
-+	wl->ops->convert_fw_status(wl, raw_fw_status, fw_status);
-+}
-+
- static inline u32
- wlcore_hw_sta_get_ap_rate_mask(struct wl1271 *wl, struct wl12xx_vif *wlvif)
- {
-diff --git a/drivers/net/wireless/ti/wlcore/main.c b/drivers/net/wireless/ti/wlcore/main.c
-index 1e19196..70a3e57 100644
---- a/drivers/net/wireless/ti/wlcore/main.c
-+++ b/drivers/net/wireless/ti/wlcore/main.c
-@@ -357,12 +357,12 @@ static void wl12xx_irq_ps_regulate_link(struct wl1271 *wl,
- 
- static void wl12xx_irq_update_links_status(struct wl1271 *wl,
- 					   struct wl12xx_vif *wlvif,
--					   struct wl_fw_status_2 *status)
-+					   struct wl_fw_status *status)
- {
- 	u32 cur_fw_ps_map;
- 	u8 hlid;
- 
--	cur_fw_ps_map = le32_to_cpu(status->link_ps_bitmap);
-+	cur_fw_ps_map = status->link_ps_bitmap;
- 	if (wl->ap_fw_ps_map != cur_fw_ps_map) {
- 		wl1271_debug(DEBUG_PSM,
- 			     "link ps prev 0x%x cur 0x%x changed 0x%x",
-@@ -377,41 +377,38 @@ static void wl12xx_irq_update_links_status(struct wl1271 *wl,
- 					    wl->links[hlid].allocated_pkts);
- }
- 
--static int wlcore_fw_status(struct wl1271 *wl,
--			    struct wl_fw_status_1 *status_1,
--			    struct wl_fw_status_2 *status_2)
-+static int wlcore_fw_status(struct wl1271 *wl, struct wl_fw_status *status)
- {
- 	struct wl12xx_vif *wlvif;
- 	struct timespec ts;
- 	u32 old_tx_blk_count = wl->tx_blocks_available;
- 	int avail, freed_blocks;
- 	int i;
--	size_t status_len;
- 	int ret;
- 	struct wl1271_link *lnk;
- 
--	status_len = WLCORE_FW_STATUS_1_LEN(wl->num_rx_desc) +
--		sizeof(*status_2) + wl->fw_status_priv_len;
--
--	ret = wlcore_raw_read_data(wl, REG_RAW_FW_STATUS_ADDR, status_1,
--				   status_len, false);
-+	ret = wlcore_raw_read_data(wl, REG_RAW_FW_STATUS_ADDR,
-+				   wl->raw_fw_status,
-+				   wl->fw_status_len, false);
- 	if (ret < 0)
- 		return ret;
- 
-+	wlcore_hw_convert_fw_status(wl, wl->raw_fw_status, wl->fw_status);
-+
- 	wl1271_debug(DEBUG_IRQ, "intr: 0x%x (fw_rx_counter = %d, "
- 		     "drv_rx_counter = %d, tx_results_counter = %d)",
--		     status_1->intr,
--		     status_1->fw_rx_counter,
--		     status_1->drv_rx_counter,
--		     status_1->tx_results_counter);
-+		     status->intr,
-+		     status->fw_rx_counter,
-+		     status->drv_rx_counter,
-+		     status->tx_results_counter);
- 
- 	for (i = 0; i < NUM_TX_QUEUES; i++) {
- 		/* prevent wrap-around in freed-packets counter */
- 		wl->tx_allocated_pkts[i] -=
--				(status_2->counters.tx_released_pkts[i] -
-+				(status->counters.tx_released_pkts[i] -
- 				wl->tx_pkts_freed[i]) & 0xff;
- 
--		wl->tx_pkts_freed[i] = status_2->counters.tx_released_pkts[i];
-+		wl->tx_pkts_freed[i] = status->counters.tx_released_pkts[i];
- 	}
- 
- 
-@@ -420,29 +417,28 @@ static int wlcore_fw_status(struct wl1271 *wl,
- 		lnk = &wl->links[i];
- 
- 		/* prevent wrap-around in freed-packets counter */
--		diff = (status_2->counters.tx_lnk_free_pkts[i] -
-+		diff = (status->counters.tx_lnk_free_pkts[i] -
- 		       lnk->prev_freed_pkts) & 0xff;
- 
- 		if (diff == 0)
- 			continue;
- 
- 		lnk->allocated_pkts -= diff;
--		lnk->prev_freed_pkts = status_2->counters.tx_lnk_free_pkts[i];
-+		lnk->prev_freed_pkts = status->counters.tx_lnk_free_pkts[i];
- 
- 		/* accumulate the prev_freed_pkts counter */
- 		lnk->total_freed_pkts += diff;
- 	}
- 
- 	/* prevent wrap-around in total blocks counter */
--	if (likely(wl->tx_blocks_freed <=
--		   le32_to_cpu(status_2->total_released_blks)))
--		freed_blocks = le32_to_cpu(status_2->total_released_blks) -
-+	if (likely(wl->tx_blocks_freed <= status->total_released_blks))
-+		freed_blocks = status->total_released_blks -
- 			       wl->tx_blocks_freed;
- 	else
- 		freed_blocks = 0x100000000LL - wl->tx_blocks_freed +
--			       le32_to_cpu(status_2->total_released_blks);
-+			       status->total_released_blks;
- 
--	wl->tx_blocks_freed = le32_to_cpu(status_2->total_released_blks);
-+	wl->tx_blocks_freed = status->total_released_blks;
- 
- 	wl->tx_allocated_blocks -= freed_blocks;
- 
-@@ -458,7 +454,7 @@ static int wlcore_fw_status(struct wl1271 *wl,
- 			cancel_delayed_work(&wl->tx_watchdog_work);
- 	}
- 
--	avail = le32_to_cpu(status_2->tx_total) - wl->tx_allocated_blocks;
-+	avail = status->tx_total - wl->tx_allocated_blocks;
- 
- 	/*
- 	 * The FW might change the total number of TX memblocks before
-@@ -477,15 +473,15 @@ static int wlcore_fw_status(struct wl1271 *wl,
- 
- 	/* for AP update num of allocated TX blocks per link and ps status */
- 	wl12xx_for_each_wlvif_ap(wl, wlvif) {
--		wl12xx_irq_update_links_status(wl, wlvif, status_2);
-+		wl12xx_irq_update_links_status(wl, wlvif, status);
- 	}
- 
- 	/* update the host-chipset time offset */
- 	getnstimeofday(&ts);
- 	wl->time_offset = (timespec_to_ns(&ts) >> 10) -
--		(s64)le32_to_cpu(status_2->fw_localtime);
-+		(s64)(status->fw_localtime);
- 
--	wl->fw_fast_lnk_map = le32_to_cpu(status_2->link_fast_bitmap);
-+	wl->fw_fast_lnk_map = status->link_fast_bitmap;
- 
- 	return 0;
- }
-@@ -549,13 +545,13 @@ static int wlcore_irq_locked(struct wl1271 *wl)
- 		clear_bit(WL1271_FLAG_IRQ_RUNNING, &wl->flags);
- 		smp_mb__after_clear_bit();
- 
--		ret = wlcore_fw_status(wl, wl->fw_status_1, wl->fw_status_2);
-+		ret = wlcore_fw_status(wl, wl->fw_status);
- 		if (ret < 0)
- 			goto out;
- 
- 		wlcore_hw_tx_immediate_compl(wl);
- 
--		intr = le32_to_cpu(wl->fw_status_1->intr);
-+		intr = wl->fw_status->intr;
- 		intr &= WLCORE_ALL_INTR_MASK;
- 		if (!intr) {
- 			done = true;
-@@ -584,7 +580,7 @@ static int wlcore_irq_locked(struct wl1271 *wl)
- 		if (likely(intr & WL1271_ACX_INTR_DATA)) {
- 			wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_DATA");
- 
--			ret = wlcore_rx(wl, wl->fw_status_1);
-+			ret = wlcore_rx(wl, wl->fw_status);
- 			if (ret < 0)
- 				goto out;
- 
-@@ -843,11 +839,11 @@ static void wl12xx_read_fwlog_panic(struct wl1271 *wl)
- 		wl12xx_cmd_stop_fwlog(wl);
- 
- 	/* Read the first memory block address */
--	ret = wlcore_fw_status(wl, wl->fw_status_1, wl->fw_status_2);
-+	ret = wlcore_fw_status(wl, wl->fw_status);
- 	if (ret < 0)
- 		goto out;
- 
--	addr = le32_to_cpu(wl->fw_status_2->log_start_addr);
-+	addr = wl->fw_status->log_start_addr;
- 	if (!addr)
- 		goto out;
- 
-@@ -990,23 +986,23 @@ static int wlcore_fw_wakeup(struct wl1271 *wl)
- 
- static int wl1271_setup(struct wl1271 *wl)
- {
--	wl->fw_status_1 = kzalloc(WLCORE_FW_STATUS_1_LEN(wl->num_rx_desc) +
--				  sizeof(*wl->fw_status_2) +
--				  wl->fw_status_priv_len, GFP_KERNEL);
--	if (!wl->fw_status_1)
--		return -ENOMEM;
-+	wl->raw_fw_status = kzalloc(wl->fw_status_len, GFP_KERNEL);
-+	if (!wl->raw_fw_status)
-+		goto err;
- 
--	wl->fw_status_2 = (struct wl_fw_status_2 *)
--				(((u8 *) wl->fw_status_1) +
--				WLCORE_FW_STATUS_1_LEN(wl->num_rx_desc));
-+	wl->fw_status = kzalloc(sizeof(*wl->fw_status), GFP_KERNEL);
-+	if (!wl->fw_status)
-+		goto err;
- 
- 	wl->tx_res_if = kzalloc(sizeof(*wl->tx_res_if), GFP_KERNEL);
--	if (!wl->tx_res_if) {
--		kfree(wl->fw_status_1);
--		return -ENOMEM;
--	}
-+	if (!wl->tx_res_if)
-+		goto err;
- 
- 	return 0;
-+err:
-+	kfree(wl->fw_status);
-+	kfree(wl->raw_fw_status);
-+	return -ENOMEM;
- }
- 
- static int wl12xx_set_power_on(struct wl1271 *wl)
-@@ -1952,9 +1948,10 @@ static void wlcore_op_stop_locked(struct wl1271 *wl)
- 
- 	wl1271_debugfs_reset(wl);
- 
--	kfree(wl->fw_status_1);
--	wl->fw_status_1 = NULL;
--	wl->fw_status_2 = NULL;
-+	kfree(wl->raw_fw_status);
-+	wl->raw_fw_status = NULL;
-+	kfree(wl->fw_status);
-+	wl->fw_status = NULL;
- 	kfree(wl->tx_res_if);
- 	wl->tx_res_if = NULL;
- 	kfree(wl->target_mem_map);
-@@ -6025,7 +6022,8 @@ int wlcore_free_hw(struct wl1271 *wl)
- 	kfree(wl->nvs);
- 	wl->nvs = NULL;
- 
--	kfree(wl->fw_status_1);
-+	kfree(wl->raw_fw_status);
-+	kfree(wl->fw_status);
- 	kfree(wl->tx_res_if);
- 	destroy_workqueue(wl->freezable_wq);
- 
-diff --git a/drivers/net/wireless/ti/wlcore/rx.c b/drivers/net/wireless/ti/wlcore/rx.c
-index 94ab445..a047e87 100644
---- a/drivers/net/wireless/ti/wlcore/rx.c
-+++ b/drivers/net/wireless/ti/wlcore/rx.c
-@@ -203,7 +203,7 @@ static int wl1271_rx_handle_data(struct wl1271 *wl, u8 *data, u32 length,
- 	return is_data;
- }
- 
--int wlcore_rx(struct wl1271 *wl, struct wl_fw_status_1 *status)
-+int wlcore_rx(struct wl1271 *wl, struct wl_fw_status *status)
- {
- 	unsigned long active_hlids[BITS_TO_LONGS(WL12XX_MAX_LINKS)] = {0};
- 	u32 buf_size;
-diff --git a/drivers/net/wireless/ti/wlcore/rx.h b/drivers/net/wireless/ti/wlcore/rx.h
-index 3363f60..a3b1618 100644
---- a/drivers/net/wireless/ti/wlcore/rx.h
-+++ b/drivers/net/wireless/ti/wlcore/rx.h
-@@ -142,7 +142,7 @@ struct wl1271_rx_descriptor {
- 	u8  reserved;
- } __packed;
- 
--int wlcore_rx(struct wl1271 *wl, struct wl_fw_status_1 *status);
-+int wlcore_rx(struct wl1271 *wl, struct wl_fw_status *status);
- u8 wl1271_rate_to_idx(int rate, enum ieee80211_band band);
- int wl1271_rx_filter_enable(struct wl1271 *wl,
- 			    int index, bool enable,
-diff --git a/drivers/net/wireless/ti/wlcore/wlcore.h b/drivers/net/wireless/ti/wlcore/wlcore.h
-index a3cc117..cec5265 100644
---- a/drivers/net/wireless/ti/wlcore/wlcore.h
-+++ b/drivers/net/wireless/ti/wlcore/wlcore.h
-@@ -73,6 +73,8 @@ struct wlcore_ops {
- 	void (*tx_immediate_compl)(struct wl1271 *wl);
- 	int (*hw_init)(struct wl1271 *wl);
- 	int (*init_vif)(struct wl1271 *wl, struct wl12xx_vif *wlvif);
-+	void (*convert_fw_status)(struct wl1271 *wl, void *raw_fw_status,
-+				  struct wl_fw_status *fw_status);
- 	u32 (*sta_get_ap_rate_mask)(struct wl1271 *wl,
- 				    struct wl12xx_vif *wlvif);
- 	int (*get_pg_ver)(struct wl1271 *wl, s8 *ver);
-@@ -346,8 +348,8 @@ struct wl1271 {
- 	u32 buffer_cmd;
- 	u32 buffer_busyword[WL1271_BUSY_WORD_CNT];
- 
--	struct wl_fw_status_1 *fw_status_1;
--	struct wl_fw_status_2 *fw_status_2;
-+	void *raw_fw_status;
-+	struct wl_fw_status *fw_status;
- 	struct wl1271_tx_hw_res_if *tx_res_if;
- 
- 	/* Current chipset configuration */
-@@ -448,6 +450,7 @@ struct wl1271 {
- 	struct ieee80211_sta_ht_cap ht_cap[WLCORE_NUM_BANDS];
- 
- 	/* size of the private FW status data */
-+	size_t fw_status_len;
- 	size_t fw_status_priv_len;
- 
- 	/* RX Data filter rule state - enabled/disabled */
-diff --git a/drivers/net/wireless/ti/wlcore/wlcore_i.h b/drivers/net/wireless/ti/wlcore/wlcore_i.h
-index 3815332..32e1e8b 100644
---- a/drivers/net/wireless/ti/wlcore/wlcore_i.h
-+++ b/drivers/net/wireless/ti/wlcore/wlcore_i.h
-@@ -120,70 +120,58 @@ struct wl1271_chip {
- 
- #define AP_MAX_STATIONS            8
- 
--struct wl_fw_packet_counters {
--	/* Cumulative counter of released packets per AC */
--	u8 tx_released_pkts[NUM_TX_QUEUES];
--
--	/* Cumulative counter of freed packets per HLID */
--	u8 tx_lnk_free_pkts[WL12XX_MAX_LINKS];
--
--	/* Cumulative counter of released Voice memory blocks */
--	u8 tx_voice_released_blks;
--
--	/* Tx rate of the last transmitted packet */
--	u8 tx_last_rate;
--
--	u8 padding[2];
--} __packed;
--
--/* FW status registers */
--struct wl_fw_status_1 {
--	__le32 intr;
-+struct wl_fw_status {
-+	u32 intr;
- 	u8  fw_rx_counter;
- 	u8  drv_rx_counter;
--	u8  reserved;
- 	u8  tx_results_counter;
--	__le32 rx_pkt_descs[0];
--} __packed;
--
--/*
-- * Each HW arch has a different number of Rx descriptors.
-- * The length of the status depends on it, since it holds an array
-- * of descriptors.
-- */
--#define WLCORE_FW_STATUS_1_LEN(num_rx_desc) \
--		(sizeof(struct wl_fw_status_1) + \
--		(sizeof(((struct wl_fw_status_1 *)0)->rx_pkt_descs[0])) * \
--		num_rx_desc)
-+	__le32 *rx_pkt_descs;
- 
--struct wl_fw_status_2 {
--	__le32 fw_localtime;
-+	u32 fw_localtime;
- 
- 	/*
- 	 * A bitmap (where each bit represents a single HLID)
- 	 * to indicate if the station is in PS mode.
- 	 */
--	__le32 link_ps_bitmap;
-+	u32 link_ps_bitmap;
- 
- 	/*
- 	 * A bitmap (where each bit represents a single HLID) to indicate
- 	 * if the station is in Fast mode
- 	 */
--	__le32 link_fast_bitmap;
-+	u32 link_fast_bitmap;
- 
- 	/* Cumulative counter of total released mem blocks since FW-reset */
--	__le32 total_released_blks;
-+	u32 total_released_blks;
- 
- 	/* Size (in Memory Blocks) of TX pool */
--	__le32 tx_total;
-+	u32 tx_total;
- 
--	struct wl_fw_packet_counters counters;
-+	struct {
-+		/*
-+		 * Cumulative counter of released packets per AC
-+		 * (length of the array is NUM_TX_QUEUES)
-+		 */
-+		u8 *tx_released_pkts;
-+
-+		/*
-+		 * Cumulative counter of freed packets per HLID
-+		 * (length of the array is WL12XX_MAX_LINKS)
-+		 */
-+		u8 *tx_lnk_free_pkts;
-+
-+		/* Cumulative counter of released Voice memory blocks */
-+		u8 tx_voice_released_blks;
-+
-+		/* Tx rate of the last transmitted packet */
-+		u8 tx_last_rate;
-+	} counters;
- 
--	__le32 log_start_addr;
-+	u32 log_start_addr;
- 
- 	/* Private status to be used by the lower drivers */
--	u8 priv[0];
--} __packed;
-+	void *priv;
-+};
- 
- #define WL1271_MAX_CHANNELS 64
- struct wl1271_scan {
--- 
-1.9.3
-
diff --git a/recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0006-wlcore-wl12xx-wl18xx-configure-num_links-per-hw.patch b/recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0006-wlcore-wl12xx-wl18xx-configure-num_links-per-hw.patch
deleted file mode 100644
index 878e872..0000000
--- a/recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0006-wlcore-wl12xx-wl18xx-configure-num_links-per-hw.patch
+++ /dev/null
@@ -1,375 +0,0 @@
-From da08fdfaf09f161c923c9d2b7db2fba8cc9c457c Mon Sep 17 00:00:00 2001
-From: Eliad Peller <eliad at wizery.com>
-Date: Mon, 10 Feb 2014 13:47:22 +0200
-Subject: [PATCH 06/18] wlcore/wl12xx/wl18xx: configure num_links per-hw
-
-Upcoming fw versions will have different max links support
-(according to the hw). Get ready for it by configuring
-wl->num_links per-hw, instead of using the const WL12XX_MAX_LINKS.
-
-However, continue using WLCORE_MAX_LINKS in order to simplify
-structs declarations (we use it in multiple bitmaps, and converting
-them to dynamic arrays is just cumbersome).
-
-Signed-off-by: Eliad Peller <eliad at wizery.com>
-Signed-off-by: John W. Linville <linville at tuxdriver.com>
----
- drivers/net/wireless/ti/wl12xx/main.c     |  3 +++
- drivers/net/wireless/ti/wl12xx/wl12xx.h   |  2 ++
- drivers/net/wireless/ti/wl18xx/main.c     |  3 +++
- drivers/net/wireless/ti/wl18xx/wl18xx.h   |  4 +++-
- drivers/net/wireless/ti/wlcore/cmd.c      |  4 ++--
- drivers/net/wireless/ti/wlcore/event.c    |  4 ++--
- drivers/net/wireless/ti/wlcore/main.c     | 12 ++++++++----
- drivers/net/wireless/ti/wlcore/rx.c       |  8 ++++----
- drivers/net/wireless/ti/wlcore/tx.c       | 20 ++++++++++----------
- drivers/net/wireless/ti/wlcore/wlcore.h   |  8 +++++---
- drivers/net/wireless/ti/wlcore/wlcore_i.h | 13 +++++++++----
- 11 files changed, 51 insertions(+), 30 deletions(-)
-
-diff --git a/drivers/net/wireless/ti/wl12xx/main.c b/drivers/net/wireless/ti/wl12xx/main.c
-index 3ad8767..69df5bc 100644
---- a/drivers/net/wireless/ti/wl12xx/main.c
-+++ b/drivers/net/wireless/ti/wl12xx/main.c
-@@ -1749,9 +1749,12 @@ static int wl12xx_setup(struct wl1271 *wl)
- 	struct wlcore_platdev_data *pdev_data = dev_get_platdata(&wl->pdev->dev);
- 	struct wl12xx_platform_data *pdata = pdev_data->pdata;
- 
-+	BUILD_BUG_ON(WL12XX_MAX_LINKS > WLCORE_MAX_LINKS);
-+
- 	wl->rtable = wl12xx_rtable;
- 	wl->num_tx_desc = WL12XX_NUM_TX_DESCRIPTORS;
- 	wl->num_rx_desc = WL12XX_NUM_RX_DESCRIPTORS;
-+	wl->num_links = WL12XX_MAX_LINKS;
- 	wl->num_channels = 1;
- 	wl->num_mac_addr = WL12XX_NUM_MAC_ADDRESSES;
- 	wl->band_rate_to_idx = wl12xx_band_rate_to_idx;
-diff --git a/drivers/net/wireless/ti/wl12xx/wl12xx.h b/drivers/net/wireless/ti/wl12xx/wl12xx.h
-index b9950f8..26b1a3f 100644
---- a/drivers/net/wireless/ti/wl12xx/wl12xx.h
-+++ b/drivers/net/wireless/ti/wl12xx/wl12xx.h
-@@ -65,6 +65,8 @@
- 
- #define WL12XX_RX_BA_MAX_SESSIONS 3
- 
-+#define WL12XX_MAX_LINKS 12
-+
- struct wl127x_rx_mem_pool_addr {
- 	u32 addr;
- 	u32 addr_extra;
-diff --git a/drivers/net/wireless/ti/wl18xx/main.c b/drivers/net/wireless/ti/wl18xx/main.c
-index cbf9bf3..6011b22 100644
---- a/drivers/net/wireless/ti/wl18xx/main.c
-+++ b/drivers/net/wireless/ti/wl18xx/main.c
-@@ -1752,9 +1752,12 @@ static int wl18xx_setup(struct wl1271 *wl)
- 	struct wl18xx_priv *priv = wl->priv;
- 	int ret;
- 
-+	BUILD_BUG_ON(WL18XX_MAX_LINKS > WLCORE_MAX_LINKS);
-+
- 	wl->rtable = wl18xx_rtable;
- 	wl->num_tx_desc = WL18XX_NUM_TX_DESCRIPTORS;
- 	wl->num_rx_desc = WL18XX_NUM_RX_DESCRIPTORS;
-+	wl->num_links = WL18XX_MAX_LINKS;
- 	wl->num_channels = 2;
- 	wl->num_mac_addr = WL18XX_NUM_MAC_ADDRESSES;
- 	wl->band_rate_to_idx = wl18xx_band_rate_to_idx;
-diff --git a/drivers/net/wireless/ti/wl18xx/wl18xx.h b/drivers/net/wireless/ti/wl18xx/wl18xx.h
-index d32a6af..38174e9 100644
---- a/drivers/net/wireless/ti/wl18xx/wl18xx.h
-+++ b/drivers/net/wireless/ti/wl18xx/wl18xx.h
-@@ -42,6 +42,8 @@
- 
- #define WL18XX_RX_BA_MAX_SESSIONS 5
- 
-+#define WL18XX_MAX_LINKS 12
-+
- struct wl18xx_priv {
- 	/* buffer for sending commands to FW */
- 	u8 cmd_buf[WL18XX_CMD_MAX_SIZE];
-@@ -114,7 +116,7 @@ struct wl18xx_fw_packet_counters {
- 	u8 tx_released_pkts[NUM_TX_QUEUES];
- 
- 	/* Cumulative counter of freed packets per HLID */
--	u8 tx_lnk_free_pkts[WL12XX_MAX_LINKS];
-+	u8 tx_lnk_free_pkts[WL18XX_MAX_LINKS];
- 
- 	/* Cumulative counter of released Voice memory blocks */
- 	u8 tx_voice_released_blks;
-diff --git a/drivers/net/wireless/ti/wlcore/cmd.c b/drivers/net/wireless/ti/wlcore/cmd.c
-index 4d19fd2..ab5ca32 100644
---- a/drivers/net/wireless/ti/wlcore/cmd.c
-+++ b/drivers/net/wireless/ti/wlcore/cmd.c
-@@ -312,8 +312,8 @@ static int wlcore_get_new_session_id(struct wl1271 *wl, u8 hlid)
- int wl12xx_allocate_link(struct wl1271 *wl, struct wl12xx_vif *wlvif, u8 *hlid)
- {
- 	unsigned long flags;
--	u8 link = find_first_zero_bit(wl->links_map, WL12XX_MAX_LINKS);
--	if (link >= WL12XX_MAX_LINKS)
-+	u8 link = find_first_zero_bit(wl->links_map, wl->num_links);
-+	if (link >= wl->num_links)
- 		return -EBUSY;
- 
- 	wl->session_ids[link] = wlcore_get_new_session_id(wl, link);
-diff --git a/drivers/net/wireless/ti/wlcore/event.c b/drivers/net/wireless/ti/wlcore/event.c
-index 8d3b349..1f9a360 100644
---- a/drivers/net/wireless/ti/wlcore/event.c
-+++ b/drivers/net/wireless/ti/wlcore/event.c
-@@ -67,7 +67,7 @@ static void wl1271_stop_ba_event(struct wl1271 *wl, struct wl12xx_vif *wlvif)
- 		u8 hlid;
- 		struct wl1271_link *lnk;
- 		for_each_set_bit(hlid, wlvif->ap.sta_hlid_map,
--				 WL12XX_MAX_LINKS) {
-+				 wl->num_links) {
- 			lnk = &wl->links[hlid];
- 			if (!lnk->ba_bitmap)
- 				continue;
-@@ -172,7 +172,7 @@ static void wlcore_disconnect_sta(struct wl1271 *wl, unsigned long sta_bitmap)
- 	const u8 *addr;
- 	int h;
- 
--	for_each_set_bit(h, &sta_bitmap, WL12XX_MAX_LINKS) {
-+	for_each_set_bit(h, &sta_bitmap, wl->num_links) {
- 		bool found = false;
- 		/* find the ap vif connected to this sta */
- 		wl12xx_for_each_wlvif_ap(wl, wlvif) {
-diff --git a/drivers/net/wireless/ti/wlcore/main.c b/drivers/net/wireless/ti/wlcore/main.c
-index 70a3e57..c35d1dc 100644
---- a/drivers/net/wireless/ti/wlcore/main.c
-+++ b/drivers/net/wireless/ti/wlcore/main.c
-@@ -372,7 +372,7 @@ static void wl12xx_irq_update_links_status(struct wl1271 *wl,
- 		wl->ap_fw_ps_map = cur_fw_ps_map;
- 	}
- 
--	for_each_set_bit(hlid, wlvif->ap.sta_hlid_map, WL12XX_MAX_LINKS)
-+	for_each_set_bit(hlid, wlvif->ap.sta_hlid_map, wl->num_links)
- 		wl12xx_irq_ps_regulate_link(wl, wlvif, hlid,
- 					    wl->links[hlid].allocated_pkts);
- }
-@@ -412,7 +412,7 @@ static int wlcore_fw_status(struct wl1271 *wl, struct wl_fw_status *status)
- 	}
- 
- 
--	for_each_set_bit(i, wl->links_map, WL12XX_MAX_LINKS) {
-+	for_each_set_bit(i, wl->links_map, wl->num_links) {
- 		u8 diff;
- 		lnk = &wl->links[i];
- 
-@@ -5855,7 +5855,7 @@ struct ieee80211_hw *wlcore_alloc_hw(size_t priv_size, u32 aggr_buf_size,
- 	int i, j, ret;
- 	unsigned int order;
- 
--	BUILD_BUG_ON(AP_MAX_STATIONS > WL12XX_MAX_LINKS);
-+	BUILD_BUG_ON(AP_MAX_STATIONS > WLCORE_MAX_LINKS);
- 
- 	hw = ieee80211_alloc_hw(sizeof(*wl), &wl1271_ops);
- 	if (!hw) {
-@@ -5878,8 +5878,12 @@ struct ieee80211_hw *wlcore_alloc_hw(size_t priv_size, u32 aggr_buf_size,
- 
- 	wl->hw = hw;
- 
-+	/*
-+	 * wl->num_links is not configured yet, so just use WLCORE_MAX_LINKS.
-+	 * we don't allocate any additional resource here, so that's fine.
-+	 */
- 	for (i = 0; i < NUM_TX_QUEUES; i++)
--		for (j = 0; j < WL12XX_MAX_LINKS; j++)
-+		for (j = 0; j < WLCORE_MAX_LINKS; j++)
- 			skb_queue_head_init(&wl->links[j].tx_queue[i]);
- 
- 	skb_queue_head_init(&wl->deferred_rx_queue);
-diff --git a/drivers/net/wireless/ti/wlcore/rx.c b/drivers/net/wireless/ti/wlcore/rx.c
-index a047e87..e125974 100644
---- a/drivers/net/wireless/ti/wlcore/rx.c
-+++ b/drivers/net/wireless/ti/wlcore/rx.c
-@@ -205,7 +205,7 @@ static int wl1271_rx_handle_data(struct wl1271 *wl, u8 *data, u32 length,
- 
- int wlcore_rx(struct wl1271 *wl, struct wl_fw_status *status)
- {
--	unsigned long active_hlids[BITS_TO_LONGS(WL12XX_MAX_LINKS)] = {0};
-+	unsigned long active_hlids[BITS_TO_LONGS(WLCORE_MAX_LINKS)] = {0};
- 	u32 buf_size;
- 	u32 fw_rx_counter = status->fw_rx_counter % wl->num_rx_desc;
- 	u32 drv_rx_counter = wl->rx_counter % wl->num_rx_desc;
-@@ -263,12 +263,12 @@ int wlcore_rx(struct wl1271 *wl, struct wl_fw_status *status)
- 						  wl->aggr_buf + pkt_offset,
- 						  pkt_len, rx_align,
- 						  &hlid) == 1) {
--				if (hlid < WL12XX_MAX_LINKS)
-+				if (hlid < wl->num_links)
- 					__set_bit(hlid, active_hlids);
- 				else
- 					WARN(1,
--					     "hlid exceeded WL12XX_MAX_LINKS "
--					     "(%d)\n", hlid);
-+					     "hlid (%d) exceeded MAX_LINKS\n",
-+					     hlid);
- 			}
- 
- 			wl->rx_counter++;
-diff --git a/drivers/net/wireless/ti/wlcore/tx.c b/drivers/net/wireless/ti/wlcore/tx.c
-index ca886ef..06ab5c6 100644
---- a/drivers/net/wireless/ti/wlcore/tx.c
-+++ b/drivers/net/wireless/ti/wlcore/tx.c
-@@ -565,11 +565,11 @@ static struct sk_buff *wlcore_vif_dequeue_high_prio(struct wl1271 *wl,
- 	int i, h, start_hlid;
- 
- 	/* start from the link after the last one */
--	start_hlid = (wlvif->last_tx_hlid + 1) % WL12XX_MAX_LINKS;
-+	start_hlid = (wlvif->last_tx_hlid + 1) % wl->num_links;
- 
- 	/* dequeue according to AC, round robin on each link */
--	for (i = 0; i < WL12XX_MAX_LINKS; i++) {
--		h = (start_hlid + i) % WL12XX_MAX_LINKS;
-+	for (i = 0; i < wl->num_links; i++) {
-+		h = (start_hlid + i) % wl->num_links;
- 
- 		/* only consider connected stations */
- 		if (!test_bit(h, wlvif->links_map))
-@@ -693,8 +693,8 @@ static void wl1271_skb_queue_head(struct wl1271 *wl, struct wl12xx_vif *wlvif,
- 		skb_queue_head(&wl->links[hlid].tx_queue[q], skb);
- 
- 		/* make sure we dequeue the same packet next time */
--		wlvif->last_tx_hlid = (hlid + WL12XX_MAX_LINKS - 1) %
--				      WL12XX_MAX_LINKS;
-+		wlvif->last_tx_hlid = (hlid + wl->num_links - 1) %
-+				      wl->num_links;
- 	}
- 
- 	spin_lock_irqsave(&wl->wl_lock, flags);
-@@ -727,7 +727,7 @@ void wl12xx_rearm_rx_streaming(struct wl1271 *wl, unsigned long *active_hlids)
- 	timeout = wl->conf.rx_streaming.duration;
- 	wl12xx_for_each_wlvif_sta(wl, wlvif) {
- 		bool found = false;
--		for_each_set_bit(hlid, active_hlids, WL12XX_MAX_LINKS) {
-+		for_each_set_bit(hlid, active_hlids, wl->num_links) {
- 			if (test_bit(hlid, wlvif->links_map)) {
- 				found  = true;
- 				break;
-@@ -764,7 +764,7 @@ int wlcore_tx_work_locked(struct wl1271 *wl)
- 	struct wl1271_tx_hw_descr *desc;
- 	u32 buf_offset = 0, last_len = 0;
- 	bool sent_packets = false;
--	unsigned long active_hlids[BITS_TO_LONGS(WL12XX_MAX_LINKS)] = {0};
-+	unsigned long active_hlids[BITS_TO_LONGS(WLCORE_MAX_LINKS)] = {0};
- 	int ret = 0;
- 	int bus_ret = 0;
- 	u8 hlid;
-@@ -1066,7 +1066,7 @@ void wl12xx_tx_reset_wlvif(struct wl1271 *wl, struct wl12xx_vif *wlvif)
- 	int i;
- 
- 	/* TX failure */
--	for_each_set_bit(i, wlvif->links_map, WL12XX_MAX_LINKS) {
-+	for_each_set_bit(i, wlvif->links_map, wl->num_links) {
- 		if (wlvif->bss_type == BSS_TYPE_AP_BSS &&
- 		    i != wlvif->ap.bcast_hlid && i != wlvif->ap.global_hlid) {
- 			/* this calls wl12xx_free_link */
-@@ -1090,7 +1090,7 @@ void wl12xx_tx_reset(struct wl1271 *wl)
- 
- 	/* only reset the queues if something bad happened */
- 	if (wl1271_tx_total_queue_count(wl) != 0) {
--		for (i = 0; i < WL12XX_MAX_LINKS; i++)
-+		for (i = 0; i < wl->num_links; i++)
- 			wl1271_tx_reset_link_queues(wl, i);
- 
- 		for (i = 0; i < NUM_TX_QUEUES; i++)
-@@ -1183,7 +1183,7 @@ void wl1271_tx_flush(struct wl1271 *wl)
- 		       WL1271_TX_FLUSH_TIMEOUT / 1000);
- 
- 	/* forcibly flush all Tx buffers on our queues */
--	for (i = 0; i < WL12XX_MAX_LINKS; i++)
-+	for (i = 0; i < wl->num_links; i++)
- 		wl1271_tx_reset_link_queues(wl, i);
- 
- out_wake:
-diff --git a/drivers/net/wireless/ti/wlcore/wlcore.h b/drivers/net/wireless/ti/wlcore/wlcore.h
-index cec5265..98b1875 100644
---- a/drivers/net/wireless/ti/wlcore/wlcore.h
-+++ b/drivers/net/wireless/ti/wlcore/wlcore.h
-@@ -222,7 +222,7 @@ struct wl1271 {
- 	int channel;
- 	u8 system_hlid;
- 
--	unsigned long links_map[BITS_TO_LONGS(WL12XX_MAX_LINKS)];
-+	unsigned long links_map[BITS_TO_LONGS(WLCORE_MAX_LINKS)];
- 	unsigned long roles_map[BITS_TO_LONGS(WL12XX_MAX_ROLES)];
- 	unsigned long roc_map[BITS_TO_LONGS(WL12XX_MAX_ROLES)];
- 	unsigned long rate_policies_map[
-@@ -230,7 +230,7 @@ struct wl1271 {
- 	unsigned long klv_templates_map[
- 			BITS_TO_LONGS(WLCORE_MAX_KLV_TEMPLATES)];
- 
--	u8 session_ids[WL12XX_MAX_LINKS];
-+	u8 session_ids[WLCORE_MAX_LINKS];
- 
- 	struct list_head wlvif_list;
- 
-@@ -378,7 +378,7 @@ struct wl1271 {
- 	 * AP-mode - links indexed by HLID. The global and broadcast links
- 	 * are always active.
- 	 */
--	struct wl1271_link links[WL12XX_MAX_LINKS];
-+	struct wl1271_link links[WLCORE_MAX_LINKS];
- 
- 	/* number of currently active links */
- 	int active_link_count;
-@@ -436,6 +436,8 @@ struct wl1271 {
- 	u32 num_tx_desc;
- 	/* number of RX descriptors the HW supports. */
- 	u32 num_rx_desc;
-+	/* number of links the HW supports */
-+	u8 num_links;
- 
- 	/* translate HW Tx rates to standard rate-indices */
- 	const u8 **band_rate_to_idx;
-diff --git a/drivers/net/wireless/ti/wlcore/wlcore_i.h b/drivers/net/wireless/ti/wlcore/wlcore_i.h
-index 32e1e8b..256d09b 100644
---- a/drivers/net/wireless/ti/wlcore/wlcore_i.h
-+++ b/drivers/net/wireless/ti/wlcore/wlcore_i.h
-@@ -58,10 +58,15 @@
- #define WL1271_DEFAULT_DTIM_PERIOD 1
- 
- #define WL12XX_MAX_ROLES           4
--#define WL12XX_MAX_LINKS           12
- #define WL12XX_INVALID_ROLE_ID     0xff
- #define WL12XX_INVALID_LINK_ID     0xff
- 
-+/*
-+ * max number of links allowed by all HWs.
-+ * this is NOT the actual max links supported by the current hw.
-+ */
-+#define WLCORE_MAX_LINKS 12
-+
- /* the driver supports the 2.4Ghz and 5Ghz bands */
- #define WLCORE_NUM_BANDS           2
- 
-@@ -156,7 +161,7 @@ struct wl_fw_status {
- 
- 		/*
- 		 * Cumulative counter of freed packets per HLID
--		 * (length of the array is WL12XX_MAX_LINKS)
-+		 * (length of the array is wl->num_links)
- 		 */
- 		u8 *tx_lnk_free_pkts;
- 
-@@ -357,7 +362,7 @@ struct wl12xx_vif {
- 
- 			/* HLIDs bitmap of associated stations */
- 			unsigned long sta_hlid_map[BITS_TO_LONGS(
--							WL12XX_MAX_LINKS)];
-+							WLCORE_MAX_LINKS)];
- 
- 			/* recoreded keys - set here before AP startup */
- 			struct wl1271_ap_key *recorded_keys[MAX_NUM_KEYS];
-@@ -374,7 +379,7 @@ struct wl12xx_vif {
- 	/* counters of packets per AC, across all links in the vif */
- 	int tx_queue_count[NUM_TX_QUEUES];
- 
--	unsigned long links_map[BITS_TO_LONGS(WL12XX_MAX_LINKS)];
-+	unsigned long links_map[BITS_TO_LONGS(WLCORE_MAX_LINKS)];
- 
- 	u8 ssid[IEEE80211_MAX_SSID_LEN + 1];
- 	u8 ssid_len;
--- 
-1.9.3
-
diff --git a/recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0007-wlcore-wl12xx-wl18xx-configure-max_stations-per-hw.patch b/recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0007-wlcore-wl12xx-wl18xx-configure-max_stations-per-hw.patch
deleted file mode 100644
index 03b1e11..0000000
--- a/recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0007-wlcore-wl12xx-wl18xx-configure-max_stations-per-hw.patch
+++ /dev/null
@@ -1,132 +0,0 @@
-From 32f0fd5b700064f821105be041d0075decc4ec64 Mon Sep 17 00:00:00 2001
-From: Eliad Peller <eliad at wizery.com>
-Date: Mon, 10 Feb 2014 13:47:23 +0200
-Subject: [PATCH 07/18] wlcore/wl12xx/wl18xx: configure max_stations per-hw
-
-Each hw supports a different max stations (connected to the
-same ap). add a new wl->max_ap_stations and use it instead
-of the current common AP_MAX_STATIONS.
-
-Signed-off-by: Eliad Peller <eliad at wizery.com>
-Signed-off-by: John W. Linville <linville at tuxdriver.com>
----
- drivers/net/wireless/ti/wl12xx/main.c     | 2 ++
- drivers/net/wireless/ti/wl12xx/wl12xx.h   | 1 +
- drivers/net/wireless/ti/wl18xx/main.c     | 2 ++
- drivers/net/wireless/ti/wl18xx/wl18xx.h   | 1 +
- drivers/net/wireless/ti/wlcore/main.c     | 4 +---
- drivers/net/wireless/ti/wlcore/wlcore.h   | 2 ++
- drivers/net/wireless/ti/wlcore/wlcore_i.h | 2 --
- 7 files changed, 9 insertions(+), 5 deletions(-)
-
-diff --git a/drivers/net/wireless/ti/wl12xx/main.c b/drivers/net/wireless/ti/wl12xx/main.c
-index 69df5bc..f486f0f 100644
---- a/drivers/net/wireless/ti/wl12xx/main.c
-+++ b/drivers/net/wireless/ti/wl12xx/main.c
-@@ -1750,11 +1750,13 @@ static int wl12xx_setup(struct wl1271 *wl)
- 	struct wl12xx_platform_data *pdata = pdev_data->pdata;
- 
- 	BUILD_BUG_ON(WL12XX_MAX_LINKS > WLCORE_MAX_LINKS);
-+	BUILD_BUG_ON(WL12XX_MAX_AP_STATIONS > WL12XX_MAX_LINKS);
- 
- 	wl->rtable = wl12xx_rtable;
- 	wl->num_tx_desc = WL12XX_NUM_TX_DESCRIPTORS;
- 	wl->num_rx_desc = WL12XX_NUM_RX_DESCRIPTORS;
- 	wl->num_links = WL12XX_MAX_LINKS;
-+	wl->max_ap_stations = WL12XX_MAX_AP_STATIONS;
- 	wl->num_channels = 1;
- 	wl->num_mac_addr = WL12XX_NUM_MAC_ADDRESSES;
- 	wl->band_rate_to_idx = wl12xx_band_rate_to_idx;
-diff --git a/drivers/net/wireless/ti/wl12xx/wl12xx.h b/drivers/net/wireless/ti/wl12xx/wl12xx.h
-index 26b1a3f..75c9265 100644
---- a/drivers/net/wireless/ti/wl12xx/wl12xx.h
-+++ b/drivers/net/wireless/ti/wl12xx/wl12xx.h
-@@ -65,6 +65,7 @@
- 
- #define WL12XX_RX_BA_MAX_SESSIONS 3
- 
-+#define WL12XX_MAX_AP_STATIONS 8
- #define WL12XX_MAX_LINKS 12
- 
- struct wl127x_rx_mem_pool_addr {
-diff --git a/drivers/net/wireless/ti/wl18xx/main.c b/drivers/net/wireless/ti/wl18xx/main.c
-index 6011b22..f19e9b5 100644
---- a/drivers/net/wireless/ti/wl18xx/main.c
-+++ b/drivers/net/wireless/ti/wl18xx/main.c
-@@ -1753,11 +1753,13 @@ static int wl18xx_setup(struct wl1271 *wl)
- 	int ret;
- 
- 	BUILD_BUG_ON(WL18XX_MAX_LINKS > WLCORE_MAX_LINKS);
-+	BUILD_BUG_ON(WL18XX_MAX_AP_STATIONS > WL18XX_MAX_LINKS);
- 
- 	wl->rtable = wl18xx_rtable;
- 	wl->num_tx_desc = WL18XX_NUM_TX_DESCRIPTORS;
- 	wl->num_rx_desc = WL18XX_NUM_RX_DESCRIPTORS;
- 	wl->num_links = WL18XX_MAX_LINKS;
-+	wl->max_ap_stations = WL18XX_MAX_AP_STATIONS;
- 	wl->num_channels = 2;
- 	wl->num_mac_addr = WL18XX_NUM_MAC_ADDRESSES;
- 	wl->band_rate_to_idx = wl18xx_band_rate_to_idx;
-diff --git a/drivers/net/wireless/ti/wl18xx/wl18xx.h b/drivers/net/wireless/ti/wl18xx/wl18xx.h
-index 38174e9..9785bf8 100644
---- a/drivers/net/wireless/ti/wl18xx/wl18xx.h
-+++ b/drivers/net/wireless/ti/wl18xx/wl18xx.h
-@@ -42,6 +42,7 @@
- 
- #define WL18XX_RX_BA_MAX_SESSIONS 5
- 
-+#define WL18XX_MAX_AP_STATIONS 8
- #define WL18XX_MAX_LINKS 12
- 
- struct wl18xx_priv {
-diff --git a/drivers/net/wireless/ti/wlcore/main.c b/drivers/net/wireless/ti/wlcore/main.c
-index c35d1dc..b649726 100644
---- a/drivers/net/wireless/ti/wlcore/main.c
-+++ b/drivers/net/wireless/ti/wlcore/main.c
-@@ -4662,7 +4662,7 @@ static int wl1271_allocate_sta(struct wl1271 *wl,
- 	int ret;
- 
- 
--	if (wl->active_sta_count >= AP_MAX_STATIONS) {
-+	if (wl->active_sta_count >= wl->max_ap_stations) {
- 		wl1271_warning("could not allocate HLID - too much stations");
- 		return -EBUSY;
- 	}
-@@ -5855,8 +5855,6 @@ struct ieee80211_hw *wlcore_alloc_hw(size_t priv_size, u32 aggr_buf_size,
- 	int i, j, ret;
- 	unsigned int order;
- 
--	BUILD_BUG_ON(AP_MAX_STATIONS > WLCORE_MAX_LINKS);
--
- 	hw = ieee80211_alloc_hw(sizeof(*wl), &wl1271_ops);
- 	if (!hw) {
- 		wl1271_error("could not alloc ieee80211_hw");
-diff --git a/drivers/net/wireless/ti/wlcore/wlcore.h b/drivers/net/wireless/ti/wlcore/wlcore.h
-index 98b1875..2356bdd 100644
---- a/drivers/net/wireless/ti/wlcore/wlcore.h
-+++ b/drivers/net/wireless/ti/wlcore/wlcore.h
-@@ -438,6 +438,8 @@ struct wl1271 {
- 	u32 num_rx_desc;
- 	/* number of links the HW supports */
- 	u8 num_links;
-+	/* max stations a single AP can support */
-+	u8 max_ap_stations;
- 
- 	/* translate HW Tx rates to standard rate-indices */
- 	const u8 **band_rate_to_idx;
-diff --git a/drivers/net/wireless/ti/wlcore/wlcore_i.h b/drivers/net/wireless/ti/wlcore/wlcore_i.h
-index 256d09b..a53a37f 100644
---- a/drivers/net/wireless/ti/wlcore/wlcore_i.h
-+++ b/drivers/net/wireless/ti/wlcore/wlcore_i.h
-@@ -123,8 +123,6 @@ struct wl1271_chip {
- 
- #define NUM_TX_QUEUES              4
- 
--#define AP_MAX_STATIONS            8
--
- struct wl_fw_status {
- 	u32 intr;
- 	u8  fw_rx_counter;
--- 
-1.9.3
-
diff --git a/recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0008-wlcore-wl12xx-wl18xx-configure-iface_combinations-pe.patch b/recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0008-wlcore-wl12xx-wl18xx-configure-iface_combinations-pe.patch
deleted file mode 100644
index 8cb6289..0000000
--- a/recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0008-wlcore-wl12xx-wl18xx-configure-iface_combinations-pe.patch
+++ /dev/null
@@ -1,193 +0,0 @@
-From abf0b24912640c4fa94b0a2f22ee9d51c8521b16 Mon Sep 17 00:00:00 2001
-From: Eliad Peller <eliad at wizery.com>
-Date: Mon, 10 Feb 2014 13:47:24 +0200
-Subject: [PATCH 08/18] wlcore/wl12xx/wl18xx: configure iface_combinations
- per-hw
-
-Each hw supports a different iface combinations.
-Define the supported combinations in each driver,
-and save it in wl->iface_combinations.
-
-Since each driver defines its own combinations now,
-it can also define its max supported channels, so
-we no longer need to save and set it explicitly
-in wlcore.
-
-Update wl18xx interface combinations to allow
-multiple APs.
-
-Signed-off-by: Eliad Peller <eliad at wizery.com>
-Signed-off-by: John W. Linville <linville at tuxdriver.com>
----
- drivers/net/wireless/ti/wl12xx/main.c   | 26 +++++++++++++++++++++-
- drivers/net/wireless/ti/wl18xx/main.c   | 39 ++++++++++++++++++++++++++++++++-
- drivers/net/wireless/ti/wlcore/main.c   | 28 ++---------------------
- drivers/net/wireless/ti/wlcore/wlcore.h |  5 +++--
- 4 files changed, 68 insertions(+), 30 deletions(-)
-
-diff --git a/drivers/net/wireless/ti/wl12xx/main.c b/drivers/net/wireless/ti/wl12xx/main.c
-index f486f0f..33071a7 100644
---- a/drivers/net/wireless/ti/wl12xx/main.c
-+++ b/drivers/net/wireless/ti/wl12xx/main.c
-@@ -1743,6 +1743,29 @@ static struct ieee80211_sta_ht_cap wl12xx_ht_cap = {
- 		},
- };
- 
-+static const struct ieee80211_iface_limit wl12xx_iface_limits[] = {
-+	{
-+		.max = 3,
-+		.types = BIT(NL80211_IFTYPE_STATION),
-+	},
-+	{
-+		.max = 1,
-+		.types = BIT(NL80211_IFTYPE_AP) |
-+			 BIT(NL80211_IFTYPE_P2P_GO) |
-+			 BIT(NL80211_IFTYPE_P2P_CLIENT),
-+	},
-+};
-+
-+static const struct ieee80211_iface_combination
-+wl12xx_iface_combinations[] = {
-+	{
-+		.max_interfaces = 3,
-+		.limits = wl12xx_iface_limits,
-+		.n_limits = ARRAY_SIZE(wl12xx_iface_limits),
-+		.num_different_channels = 1,
-+	},
-+};
-+
- static int wl12xx_setup(struct wl1271 *wl)
- {
- 	struct wl12xx_priv *priv = wl->priv;
-@@ -1757,7 +1780,8 @@ static int wl12xx_setup(struct wl1271 *wl)
- 	wl->num_rx_desc = WL12XX_NUM_RX_DESCRIPTORS;
- 	wl->num_links = WL12XX_MAX_LINKS;
- 	wl->max_ap_stations = WL12XX_MAX_AP_STATIONS;
--	wl->num_channels = 1;
-+	wl->iface_combinations = wl12xx_iface_combinations;
-+	wl->n_iface_combinations = ARRAY_SIZE(wl12xx_iface_combinations);
- 	wl->num_mac_addr = WL12XX_NUM_MAC_ADDRESSES;
- 	wl->band_rate_to_idx = wl12xx_band_rate_to_idx;
- 	wl->hw_tx_rate_tbl_size = WL12XX_CONF_HW_RXTX_RATE_MAX;
-diff --git a/drivers/net/wireless/ti/wl18xx/main.c b/drivers/net/wireless/ti/wl18xx/main.c
-index f19e9b5..966a866 100644
---- a/drivers/net/wireless/ti/wl18xx/main.c
-+++ b/drivers/net/wireless/ti/wl18xx/main.c
-@@ -1747,6 +1747,42 @@ static struct ieee80211_sta_ht_cap wl18xx_mimo_ht_cap_2ghz = {
- 		},
- };
- 
-+static const struct ieee80211_iface_limit wl18xx_iface_limits[] = {
-+	{
-+		.max = 3,
-+		.types = BIT(NL80211_IFTYPE_STATION),
-+	},
-+	{
-+		.max = 1,
-+		.types = BIT(NL80211_IFTYPE_AP) |
-+			 BIT(NL80211_IFTYPE_P2P_GO) |
-+			 BIT(NL80211_IFTYPE_P2P_CLIENT),
-+	},
-+};
-+
-+static const struct ieee80211_iface_limit wl18xx_iface_ap_limits[] = {
-+	{
-+		.max = 2,
-+		.types = BIT(NL80211_IFTYPE_AP),
-+	},
-+};
-+
-+static const struct ieee80211_iface_combination
-+wl18xx_iface_combinations[] = {
-+	{
-+		.max_interfaces = 3,
-+		.limits = wl18xx_iface_limits,
-+		.n_limits = ARRAY_SIZE(wl18xx_iface_limits),
-+		.num_different_channels = 2,
-+	},
-+	{
-+		.max_interfaces = 2,
-+		.limits = wl18xx_iface_ap_limits,
-+		.n_limits = ARRAY_SIZE(wl18xx_iface_ap_limits),
-+		.num_different_channels = 1,
-+	}
-+};
-+
- static int wl18xx_setup(struct wl1271 *wl)
- {
- 	struct wl18xx_priv *priv = wl->priv;
-@@ -1760,7 +1796,8 @@ static int wl18xx_setup(struct wl1271 *wl)
- 	wl->num_rx_desc = WL18XX_NUM_RX_DESCRIPTORS;
- 	wl->num_links = WL18XX_MAX_LINKS;
- 	wl->max_ap_stations = WL18XX_MAX_AP_STATIONS;
--	wl->num_channels = 2;
-+	wl->iface_combinations = wl18xx_iface_combinations;
-+	wl->n_iface_combinations = ARRAY_SIZE(wl18xx_iface_combinations);
- 	wl->num_mac_addr = WL18XX_NUM_MAC_ADDRESSES;
- 	wl->band_rate_to_idx = wl18xx_band_rate_to_idx;
- 	wl->hw_tx_rate_tbl_size = WL18XX_CONF_HW_RXTX_RATE_MAX;
-diff --git a/drivers/net/wireless/ti/wlcore/main.c b/drivers/net/wireless/ti/wlcore/main.c
-index b649726..d16fb7e 100644
---- a/drivers/net/wireless/ti/wlcore/main.c
-+++ b/drivers/net/wireless/ti/wlcore/main.c
-@@ -5690,28 +5690,6 @@ static void wl1271_unregister_hw(struct wl1271 *wl)
- 
- }
- 
--static const struct ieee80211_iface_limit wlcore_iface_limits[] = {
--	{
--		.max = 3,
--		.types = BIT(NL80211_IFTYPE_STATION),
--	},
--	{
--		.max = 1,
--		.types = BIT(NL80211_IFTYPE_AP) |
--			 BIT(NL80211_IFTYPE_P2P_GO) |
--			 BIT(NL80211_IFTYPE_P2P_CLIENT),
--	},
--};
--
--static struct ieee80211_iface_combination
--wlcore_iface_combinations[] = {
--	{
--	  .max_interfaces = 3,
--	  .limits = wlcore_iface_limits,
--	  .n_limits = ARRAY_SIZE(wlcore_iface_limits),
--	},
--};
--
- static int wl1271_init_ieee80211(struct wl1271 *wl)
- {
- 	int i;
-@@ -5832,10 +5810,8 @@ static int wl1271_init_ieee80211(struct wl1271 *wl)
- 		NL80211_PROBE_RESP_OFFLOAD_SUPPORT_P2P;
- 
- 	/* allowed interface combinations */
--	wlcore_iface_combinations[0].num_different_channels = wl->num_channels;
--	wl->hw->wiphy->iface_combinations = wlcore_iface_combinations;
--	wl->hw->wiphy->n_iface_combinations =
--		ARRAY_SIZE(wlcore_iface_combinations);
-+	wl->hw->wiphy->iface_combinations = wl->iface_combinations;
-+	wl->hw->wiphy->n_iface_combinations = wl->n_iface_combinations;
- 
- 	SET_IEEE80211_DEV(wl->hw, wl->dev);
- 
-diff --git a/drivers/net/wireless/ti/wlcore/wlcore.h b/drivers/net/wireless/ti/wlcore/wlcore.h
-index 2356bdd..a1cc1c6 100644
---- a/drivers/net/wireless/ti/wlcore/wlcore.h
-+++ b/drivers/net/wireless/ti/wlcore/wlcore.h
-@@ -483,8 +483,9 @@ struct wl1271 {
- 
- 	struct completion nvs_loading_complete;
- 
--	/* number of concurrent channels the HW supports */
--	u32 num_channels;
-+	/* interface combinations supported by the hw */
-+	const struct ieee80211_iface_combination *iface_combinations;
-+	u8 n_iface_combinations;
- };
- 
- int wlcore_probe(struct wl1271 *wl, struct platform_device *pdev);
--- 
-1.9.3
-
diff --git a/recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0009-wl18xx-move-to-new-firmware-wl18xx-fw-3.bin.patch b/recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0009-wl18xx-move-to-new-firmware-wl18xx-fw-3.bin.patch
deleted file mode 100644
index 59f40b4..0000000
--- a/recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0009-wl18xx-move-to-new-firmware-wl18xx-fw-3.bin.patch
+++ /dev/null
@@ -1,226 +0,0 @@
-From 028e7243ac411c3aba7a754bcc775c2fbb0b3e5c Mon Sep 17 00:00:00 2001
-From: Eliad Peller <eliad at wizery.com>
-Date: Mon, 10 Feb 2014 13:47:25 +0200
-Subject: [PATCH 09/18] wl18xx: move to new firmware (wl18xx-fw-3.bin)
-
-Bump the min wl18xx fw version to 8.8.0.0.13
-
-This fw is not backward compatible with older
-firmware (due to api changes), so use bump
-the firmware name as well.
-
-Some modifications were done to the driver-fw api
-in order to support multiple APs.
-
-Additionally, some of the consts (such as max stations,
-max links and max RX BA sessions) were changed.
-
-Signed-off-by: Arik Nemtsov <arik at wizery.com>
-Signed-off-by: Eliad Peller <eliad at wizery.com>
-Signed-off-by: John W. Linville <linville at tuxdriver.com>
----
- drivers/net/wireless/ti/wl18xx/main.c     |  2 +-
- drivers/net/wireless/ti/wl18xx/wl18xx.h   | 10 +++++-----
- drivers/net/wireless/ti/wlcore/acx.c      |  4 +++-
- drivers/net/wireless/ti/wlcore/acx.h      |  6 ++++--
- drivers/net/wireless/ti/wlcore/cmd.c      |  5 ++++-
- drivers/net/wireless/ti/wlcore/cmd.h      |  7 +++++--
- drivers/net/wireless/ti/wlcore/main.c     |  2 +-
- drivers/net/wireless/ti/wlcore/tx.c       |  2 +-
- drivers/net/wireless/ti/wlcore/wlcore_i.h |  2 +-
- 9 files changed, 25 insertions(+), 15 deletions(-)
-
-diff --git a/drivers/net/wireless/ti/wl18xx/main.c b/drivers/net/wireless/ti/wl18xx/main.c
-index 966a866..de5b4fa 100644
---- a/drivers/net/wireless/ti/wl18xx/main.c
-+++ b/drivers/net/wireless/ti/wl18xx/main.c
-@@ -648,7 +648,7 @@ static const struct wl18xx_clk_cfg wl18xx_clk_table[NUM_CLOCK_CONFIGS] = {
- };
- 
- /* TODO: maybe move to a new header file? */
--#define WL18XX_FW_NAME "ti-connectivity/wl18xx-fw-2.bin"
-+#define WL18XX_FW_NAME "ti-connectivity/wl18xx-fw-3.bin"
- 
- static int wl18xx_identify_chip(struct wl1271 *wl)
- {
-diff --git a/drivers/net/wireless/ti/wl18xx/wl18xx.h b/drivers/net/wireless/ti/wl18xx/wl18xx.h
-index 9785bf8..eb7cfe8 100644
---- a/drivers/net/wireless/ti/wl18xx/wl18xx.h
-+++ b/drivers/net/wireless/ti/wl18xx/wl18xx.h
-@@ -26,10 +26,10 @@
- 
- /* minimum FW required for driver */
- #define WL18XX_CHIP_VER		8
--#define WL18XX_IFTYPE_VER	5
-+#define WL18XX_IFTYPE_VER	8
- #define WL18XX_MAJOR_VER	WLCORE_FW_VER_IGNORE
- #define WL18XX_SUBTYPE_VER	WLCORE_FW_VER_IGNORE
--#define WL18XX_MINOR_VER	39
-+#define WL18XX_MINOR_VER	13
- 
- #define WL18XX_CMD_MAX_SIZE          740
- 
-@@ -40,10 +40,10 @@
- 
- #define WL18XX_NUM_MAC_ADDRESSES 3
- 
--#define WL18XX_RX_BA_MAX_SESSIONS 5
-+#define WL18XX_RX_BA_MAX_SESSIONS 13
- 
--#define WL18XX_MAX_AP_STATIONS 8
--#define WL18XX_MAX_LINKS 12
-+#define WL18XX_MAX_AP_STATIONS 10
-+#define WL18XX_MAX_LINKS 16
- 
- struct wl18xx_priv {
- 	/* buffer for sending commands to FW */
-diff --git a/drivers/net/wireless/ti/wlcore/acx.c b/drivers/net/wireless/ti/wlcore/acx.c
-index ec83675..71b244b 100644
---- a/drivers/net/wireless/ti/wlcore/acx.c
-+++ b/drivers/net/wireless/ti/wlcore/acx.c
-@@ -1591,7 +1591,8 @@ out:
- 	return ret;
- }
- 
--int wl1271_acx_set_inconnection_sta(struct wl1271 *wl, u8 *addr)
-+int wl1271_acx_set_inconnection_sta(struct wl1271 *wl,
-+				    struct wl12xx_vif *wlvif, u8 *addr)
- {
- 	struct wl1271_acx_inconnection_sta *acx = NULL;
- 	int ret;
-@@ -1603,6 +1604,7 @@ int wl1271_acx_set_inconnection_sta(struct wl1271 *wl, u8 *addr)
- 		return -ENOMEM;
- 
- 	memcpy(acx->addr, addr, ETH_ALEN);
-+	acx->role_id = wlvif->role_id;
- 
- 	ret = wl1271_cmd_configure(wl, ACX_UPDATE_INCONNECTION_STA_LIST,
- 				   acx, sizeof(*acx));
-diff --git a/drivers/net/wireless/ti/wlcore/acx.h b/drivers/net/wireless/ti/wlcore/acx.h
-index 6dcfad9..954d57e 100644
---- a/drivers/net/wireless/ti/wlcore/acx.h
-+++ b/drivers/net/wireless/ti/wlcore/acx.h
-@@ -824,7 +824,8 @@ struct wl1271_acx_inconnection_sta {
- 	struct acx_header header;
- 
- 	u8 addr[ETH_ALEN];
--	u8 padding1[2];
-+	u8 role_id;
-+	u8 padding;
- } __packed;
- 
- /*
-@@ -1118,7 +1119,8 @@ int wl1271_acx_ps_rx_streaming(struct wl1271 *wl, struct wl12xx_vif *wlvif,
- 			       bool enable);
- int wl1271_acx_ap_max_tx_retry(struct wl1271 *wl, struct wl12xx_vif *wlvif);
- int wl12xx_acx_config_ps(struct wl1271 *wl, struct wl12xx_vif *wlvif);
--int wl1271_acx_set_inconnection_sta(struct wl1271 *wl, u8 *addr);
-+int wl1271_acx_set_inconnection_sta(struct wl1271 *wl,
-+				    struct wl12xx_vif *wlvif, u8 *addr);
- int wl1271_acx_fm_coex(struct wl1271 *wl);
- int wl12xx_acx_set_rate_mgmt_params(struct wl1271 *wl);
- int wl12xx_acx_config_hangover(struct wl1271 *wl);
-diff --git a/drivers/net/wireless/ti/wlcore/cmd.c b/drivers/net/wireless/ti/wlcore/cmd.c
-index ab5ca32..3463a67 100644
---- a/drivers/net/wireless/ti/wlcore/cmd.c
-+++ b/drivers/net/wireless/ti/wlcore/cmd.c
-@@ -1532,6 +1532,7 @@ int wl12xx_cmd_add_peer(struct wl1271 *wl, struct wl12xx_vif *wlvif,
- 	cmd->sp_len = sta->max_sp;
- 	cmd->wmm = sta->wme ? 1 : 0;
- 	cmd->session_id = wl->session_ids[hlid];
-+	cmd->role_id = wlvif->role_id;
- 
- 	for (i = 0; i < NUM_ACCESS_CATEGORIES_COPY; i++)
- 		if (sta->wme && (sta->uapsd_queues & BIT(i)))
-@@ -1568,7 +1569,8 @@ out:
- 	return ret;
- }
- 
--int wl12xx_cmd_remove_peer(struct wl1271 *wl, u8 hlid)
-+int wl12xx_cmd_remove_peer(struct wl1271 *wl, struct wl12xx_vif *wlvif,
-+			   u8 hlid)
- {
- 	struct wl12xx_cmd_remove_peer *cmd;
- 	int ret;
-@@ -1586,6 +1588,7 @@ int wl12xx_cmd_remove_peer(struct wl1271 *wl, u8 hlid)
- 	/* We never send a deauth, mac80211 is in charge of this */
- 	cmd->reason_opcode = 0;
- 	cmd->send_deauth_flag = 0;
-+	cmd->role_id = wlvif->role_id;
- 
- 	ret = wl1271_cmd_send(wl, CMD_REMOVE_PEER, cmd, sizeof(*cmd), 0);
- 	if (ret < 0) {
-diff --git a/drivers/net/wireless/ti/wlcore/cmd.h b/drivers/net/wireless/ti/wlcore/cmd.h
-index 323d4a8..9cb3f44 100644
---- a/drivers/net/wireless/ti/wlcore/cmd.h
-+++ b/drivers/net/wireless/ti/wlcore/cmd.h
-@@ -88,7 +88,8 @@ int wl12xx_roc(struct wl1271 *wl, struct wl12xx_vif *wlvif, u8 role_id,
- int wl12xx_croc(struct wl1271 *wl, u8 role_id);
- int wl12xx_cmd_add_peer(struct wl1271 *wl, struct wl12xx_vif *wlvif,
- 			struct ieee80211_sta *sta, u8 hlid);
--int wl12xx_cmd_remove_peer(struct wl1271 *wl, u8 hlid);
-+int wl12xx_cmd_remove_peer(struct wl1271 *wl, struct wl12xx_vif *wlvif,
-+			   u8 hlid);
- void wlcore_set_pending_regdomain_ch(struct wl1271 *wl, u16 channel,
- 				     enum ieee80211_band band);
- int wlcore_cmd_regdomain_config_locked(struct wl1271 *wl);
-@@ -594,6 +595,8 @@ struct wl12xx_cmd_add_peer {
- 	u8 sp_len;
- 	u8 wmm;
- 	u8 session_id;
-+	u8 role_id;
-+	u8 padding[3];
- } __packed;
- 
- struct wl12xx_cmd_remove_peer {
-@@ -602,7 +605,7 @@ struct wl12xx_cmd_remove_peer {
- 	u8 hlid;
- 	u8 reason_opcode;
- 	u8 send_deauth_flag;
--	u8 padding1;
-+	u8 role_id;
- } __packed;
- 
- /*
-diff --git a/drivers/net/wireless/ti/wlcore/main.c b/drivers/net/wireless/ti/wlcore/main.c
-index d16fb7e..73bf251 100644
---- a/drivers/net/wireless/ti/wlcore/main.c
-+++ b/drivers/net/wireless/ti/wlcore/main.c
-@@ -4765,7 +4765,7 @@ static int wl12xx_sta_remove(struct wl1271 *wl,
- 	if (WARN_ON(!test_bit(id, wlvif->ap.sta_hlid_map)))
- 		return -EINVAL;
- 
--	ret = wl12xx_cmd_remove_peer(wl, wl_sta->hlid);
-+	ret = wl12xx_cmd_remove_peer(wl, wlvif, wl_sta->hlid);
- 	if (ret < 0)
- 		return ret;
- 
-diff --git a/drivers/net/wireless/ti/wlcore/tx.c b/drivers/net/wireless/ti/wlcore/tx.c
-index 06ab5c6..9f7921d 100644
---- a/drivers/net/wireless/ti/wlcore/tx.c
-+++ b/drivers/net/wireless/ti/wlcore/tx.c
-@@ -101,7 +101,7 @@ static void wl1271_tx_ap_update_inconnection_sta(struct wl1271 *wl,
- 	 * authentication response. this way it won't get de-authed by FW
- 	 * when transmitting too soon.
- 	 */
--	wl1271_acx_set_inconnection_sta(wl, hdr->addr1);
-+	wl1271_acx_set_inconnection_sta(wl, wlvif, hdr->addr1);
- 
- 	/*
- 	 * ROC for 1 second on the AP channel for completing the connection.
-diff --git a/drivers/net/wireless/ti/wlcore/wlcore_i.h b/drivers/net/wireless/ti/wlcore/wlcore_i.h
-index a53a37f..756e890 100644
---- a/drivers/net/wireless/ti/wlcore/wlcore_i.h
-+++ b/drivers/net/wireless/ti/wlcore/wlcore_i.h
-@@ -65,7 +65,7 @@
-  * max number of links allowed by all HWs.
-  * this is NOT the actual max links supported by the current hw.
-  */
--#define WLCORE_MAX_LINKS 12
-+#define WLCORE_MAX_LINKS 16
- 
- /* the driver supports the 2.4Ghz and 5Ghz bands */
- #define WLCORE_NUM_BANDS           2
--- 
-1.9.3
-
diff --git a/recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0010-wlcore-send-EAPOL-frames-with-voice-priority.patch b/recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0010-wlcore-send-EAPOL-frames-with-voice-priority.patch
deleted file mode 100644
index 790a859..0000000
--- a/recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0010-wlcore-send-EAPOL-frames-with-voice-priority.patch
+++ /dev/null
@@ -1,49 +0,0 @@
-From 2a5ad92e271e518281504eeeab1dd311351ff7b7 Mon Sep 17 00:00:00 2001
-From: Igal Chernobelsky <igalc at ti.com>
-Date: Mon, 10 Feb 2014 13:47:26 +0200
-Subject: [PATCH 10/18] wlcore: send EAPOL frames with voice priority
-
-Send EAPOL frames with voice priority by setting (the new)
-TX_HW_ATTR_EAPOL_FRAME bit in tx attribute.
-
-Sending EAPOL with voice priority fixes re-key
-timeout issues during heavy traffic.
-
-Signed-off-by: Igal Chernobelsky <igalc at ti.com>
-Signed-off-by: Eliad Peller <eliad at wizery.com>
-Signed-off-by: John W. Linville <linville at tuxdriver.com>
----
- drivers/net/wireless/ti/wlcore/tx.c | 4 ++++
- drivers/net/wireless/ti/wlcore/tx.h | 1 +
- 2 files changed, 5 insertions(+)
-
-diff --git a/drivers/net/wireless/ti/wlcore/tx.c b/drivers/net/wireless/ti/wlcore/tx.c
-index 9f7921d..38b31a0 100644
---- a/drivers/net/wireless/ti/wlcore/tx.c
-+++ b/drivers/net/wireless/ti/wlcore/tx.c
-@@ -362,6 +362,10 @@ static void wl1271_tx_fill_hdr(struct wl1271 *wl, struct wl12xx_vif *wlvif,
- 	    ieee80211_has_protected(frame_control))
- 		tx_attr |= TX_HW_ATTR_HOST_ENCRYPT;
- 
-+	/* send EAPOL frames as voice */
-+	if (control->control.flags & IEEE80211_TX_CTRL_PORT_CTRL_PROTO)
-+		tx_attr |= TX_HW_ATTR_EAPOL_FRAME;
-+
- 	desc->tx_attr = cpu_to_le16(tx_attr);
- 
- 	wlcore_hw_set_tx_desc_csum(wl, desc, skb);
-diff --git a/drivers/net/wireless/ti/wlcore/tx.h b/drivers/net/wireless/ti/wlcore/tx.h
-index 35489c3..79cb3ff 100644
---- a/drivers/net/wireless/ti/wlcore/tx.h
-+++ b/drivers/net/wireless/ti/wlcore/tx.h
-@@ -37,6 +37,7 @@
- #define TX_HW_ATTR_TX_CMPLT_REQ          BIT(12)
- #define TX_HW_ATTR_TX_DUMMY_REQ          BIT(13)
- #define TX_HW_ATTR_HOST_ENCRYPT          BIT(14)
-+#define TX_HW_ATTR_EAPOL_FRAME           BIT(15)
- 
- #define TX_HW_ATTR_OFST_SAVE_RETRIES     0
- #define TX_HW_ATTR_OFST_HEADER_PAD       1
--- 
-1.9.3
-
diff --git a/recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0011-wlcore-don-t-stop-sched_scan-on-interface-removal.patch b/recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0011-wlcore-don-t-stop-sched_scan-on-interface-removal.patch
deleted file mode 100644
index ff26330..0000000
--- a/recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0011-wlcore-don-t-stop-sched_scan-on-interface-removal.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-From 5a441f5ff75daf9c3c6657a66e2806a1255f5b84 Mon Sep 17 00:00:00 2001
-From: Barak Bercovitz <barak at wizery.com>
-Date: Mon, 10 Feb 2014 13:47:27 +0200
-Subject: [PATCH 11/18] wlcore: don't stop sched_scan on interface removal
-
-Stopping sched scan on interface removal (during recovery)
-is no longer needed, as sched scanning is automatically
-restarted by mac80211.
-
-Signed-off-by: Barak Bercovitz <barak at wizery.com>
-Signed-off-by: Eliad Peller <eliad at wizery.com>
-Signed-off-by: John W. Linville <linville at tuxdriver.com>
----
- drivers/net/wireless/ti/wlcore/main.c | 4 +---
- 1 file changed, 1 insertion(+), 3 deletions(-)
-
-diff --git a/drivers/net/wireless/ti/wlcore/main.c b/drivers/net/wireless/ti/wlcore/main.c
-index 73bf251..bea2938 100644
---- a/drivers/net/wireless/ti/wlcore/main.c
-+++ b/drivers/net/wireless/ti/wlcore/main.c
-@@ -2582,10 +2582,8 @@ static void __wl1271_op_remove_interface(struct wl1271 *wl,
- 		ieee80211_scan_completed(wl->hw, true);
- 	}
- 
--	if (wl->sched_vif == wlvif) {
--		ieee80211_sched_scan_stopped(wl->hw);
-+	if (wl->sched_vif == wlvif)
- 		wl->sched_vif = NULL;
--	}
- 
- 	if (wl->roc_vif == vif) {
- 		wl->roc_vif = NULL;
--- 
-1.9.3
-
diff --git a/recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0012-wlcore-wl18xx-allow-CCK-rates-for-AP-mode.patch b/recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0012-wlcore-wl18xx-allow-CCK-rates-for-AP-mode.patch
deleted file mode 100644
index fb89d6b..0000000
--- a/recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0012-wlcore-wl18xx-allow-CCK-rates-for-AP-mode.patch
+++ /dev/null
@@ -1,61 +0,0 @@
-From bc566f9203c2813a2e083677eb99c62b1cb14d03 Mon Sep 17 00:00:00 2001
-From: Arik Nemtsov <arik at wizery.com>
-Date: Mon, 10 Feb 2014 13:47:28 +0200
-Subject: [PATCH 12/18] wlcore: wl18xx: allow CCK rates for AP mode
-
-12xx chips allow only OFDM rates in AP mode for BT-Coex purposes. This
-is no longer required in 18xx chips, starting with FW 8.6.0.0.8.
-
-Update the min allowed FW version in 18xx to support this functionality.
-
-Signed-off-by: Arik Nemtsov <arik at wizery.com>
-Signed-off-by: Eliad Peller <eliad at wizery.com>
-Signed-off-by: John W. Linville <linville at tuxdriver.com>
----
- drivers/net/wireless/ti/wl12xx/main.c   | 1 +
- drivers/net/wireless/ti/wlcore/init.c   | 2 +-
- drivers/net/wireless/ti/wlcore/wlcore.h | 3 +++
- 3 files changed, 5 insertions(+), 1 deletion(-)
-
-diff --git a/drivers/net/wireless/ti/wl12xx/main.c b/drivers/net/wireless/ti/wl12xx/main.c
-index 33071a7..d50dfac 100644
---- a/drivers/net/wireless/ti/wl12xx/main.c
-+++ b/drivers/net/wireless/ti/wl12xx/main.c
-@@ -1789,6 +1789,7 @@ static int wl12xx_setup(struct wl1271 *wl)
- 	wl->fw_status_len = sizeof(struct wl12xx_fw_status);
- 	wl->fw_status_priv_len = 0;
- 	wl->stats.fw_stats_len = sizeof(struct wl12xx_acx_statistics);
-+	wl->ofdm_only_ap = true;
- 	wlcore_set_ht_cap(wl, IEEE80211_BAND_2GHZ, &wl12xx_ht_cap);
- 	wlcore_set_ht_cap(wl, IEEE80211_BAND_5GHZ, &wl12xx_ht_cap);
- 	wl12xx_conf_init(wl);
-diff --git a/drivers/net/wireless/ti/wlcore/init.c b/drivers/net/wireless/ti/wlcore/init.c
-index 7699f9d..b376c99 100644
---- a/drivers/net/wireless/ti/wlcore/init.c
-+++ b/drivers/net/wireless/ti/wlcore/init.c
-@@ -462,7 +462,7 @@ int wl1271_init_ap_rates(struct wl1271 *wl, struct wl12xx_vif *wlvif)
- 	 * If the basic rates contain OFDM rates, use OFDM only
- 	 * rates for unicast TX as well. Else use all supported rates.
- 	 */
--	if ((wlvif->basic_rate_set & CONF_TX_OFDM_RATES))
-+	if (wl->ofdm_only_ap && (wlvif->basic_rate_set & CONF_TX_OFDM_RATES))
- 		supported_rates = CONF_TX_OFDM_RATES;
- 	else
- 		supported_rates = CONF_TX_ENABLED_RATES;
-diff --git a/drivers/net/wireless/ti/wlcore/wlcore.h b/drivers/net/wireless/ti/wlcore/wlcore.h
-index a1cc1c6..95a5450 100644
---- a/drivers/net/wireless/ti/wlcore/wlcore.h
-+++ b/drivers/net/wireless/ti/wlcore/wlcore.h
-@@ -407,6 +407,9 @@ struct wl1271 {
- 	/* AP-mode - number of currently connected stations */
- 	int active_sta_count;
- 
-+	/* Flag determining whether AP should broadcast OFDM-only rates */
-+	bool ofdm_only_ap;
-+
- 	/* last wlvif we transmitted from */
- 	struct wl12xx_vif *last_wlvif;
- 
--- 
-1.9.3
-
diff --git a/recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0013-wlcore-don-t-handle-unsetting-of-default-wep-key.patch b/recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0013-wlcore-don-t-handle-unsetting-of-default-wep-key.patch
deleted file mode 100644
index b523d7d..0000000
--- a/recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0013-wlcore-don-t-handle-unsetting-of-default-wep-key.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-From bf4e5f1ac0e2b277424ec0d035b1fbab46dd66bb Mon Sep 17 00:00:00 2001
-From: Eliad Peller <eliad at wizery.com>
-Date: Mon, 10 Feb 2014 13:47:29 +0200
-Subject: [PATCH 13/18] wlcore: don't handle unsetting of default wep key
-
-mac80211 unsets the default wep key on disassoc.
-The fw doesn't support this notification, so simply
-ignore it.
-
-The actual flow actually triggers fw recovery in some
-cases, as mac80211 unsets the default key only after
-disassoc, when wlvif->sta.hlid, resulting in invalid
-hlid being passed to the fw.
-
-Signed-off-by: Eliad Peller <eliad at wizery.com>
-Signed-off-by: John W. Linville <linville at tuxdriver.com>
----
- drivers/net/wireless/ti/wlcore/main.c | 4 ++++
- 1 file changed, 4 insertions(+)
-
-diff --git a/drivers/net/wireless/ti/wlcore/main.c b/drivers/net/wireless/ti/wlcore/main.c
-index bea2938..d80d40c 100644
---- a/drivers/net/wireless/ti/wlcore/main.c
-+++ b/drivers/net/wireless/ti/wlcore/main.c
-@@ -3472,6 +3472,10 @@ static void wl1271_op_set_default_key_idx(struct ieee80211_hw *hw,
- 	wl1271_debug(DEBUG_MAC80211, "mac80211 set default key idx %d",
- 		     key_idx);
- 
-+	/* we don't handle unsetting of default key */
-+	if (key_idx == -1)
-+		return;
-+
- 	mutex_lock(&wl->mutex);
- 
- 	if (unlikely(wl->state != WLCORE_STATE_ON)) {
--- 
-1.9.3
-
diff --git a/recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0014-wlcore-consider-multiple-APs-when-checking-active_li.patch b/recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0014-wlcore-consider-multiple-APs-when-checking-active_li.patch
deleted file mode 100644
index 0558648..0000000
--- a/recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0014-wlcore-consider-multiple-APs-when-checking-active_li.patch
+++ /dev/null
@@ -1,64 +0,0 @@
-From 41ed1a787c4940d58d5870c633ab6291dd4679dd Mon Sep 17 00:00:00 2001
-From: Eliad Peller <eliad at wizery.com>
-Date: Mon, 10 Feb 2014 13:47:30 +0200
-Subject: [PATCH 14/18] wlcore: consider multiple APs when checking
- active_link_count
-
-Each AP has its own global and broadcast links, so when
-checking for active sta count (according to the active_link_count)
-we must take them all into account.
-
-Signed-off-by: Eliad Peller <eliad at wizery.com>
-Signed-off-by: John W. Linville <linville at tuxdriver.com>
----
- drivers/net/wireless/ti/wlcore/main.c | 10 +++++-----
- drivers/net/wireless/ti/wlcore/tx.c   | 10 +++++-----
- 2 files changed, 10 insertions(+), 10 deletions(-)
-
-diff --git a/drivers/net/wireless/ti/wlcore/main.c b/drivers/net/wireless/ti/wlcore/main.c
-index d80d40c..8106c96 100644
---- a/drivers/net/wireless/ti/wlcore/main.c
-+++ b/drivers/net/wireless/ti/wlcore/main.c
-@@ -345,12 +345,12 @@ static void wl12xx_irq_ps_regulate_link(struct wl1271 *wl,
- 	 * Start high-level PS if the STA is asleep with enough blocks in FW.
- 	 * Make an exception if this is the only connected link. In this
- 	 * case FW-memory congestion is less of a problem.
--	 * Note that a single connected STA means 3 active links, since we must
--	 * account for the global and broadcast AP links. The "fw_ps" check
--	 * assures us the third link is a STA connected to the AP. Otherwise
--	 * the FW would not set the PSM bit.
-+	 * Note that a single connected STA means 2*ap_count + 1 active links,
-+	 * since we must account for the global and broadcast AP links
-+	 * for each AP. The "fw_ps" check assures us the other link is a STA
-+	 * connected to the AP. Otherwise the FW would not set the PSM bit.
- 	 */
--	else if (wl->active_link_count > 3 && fw_ps &&
-+	else if (wl->active_link_count > (wl->ap_count*2 + 1) && fw_ps &&
- 		 tx_pkts >= WL1271_PS_STA_MAX_PACKETS)
- 		wl12xx_ps_link_start(wl, wlvif, hlid, true);
- }
-diff --git a/drivers/net/wireless/ti/wlcore/tx.c b/drivers/net/wireless/ti/wlcore/tx.c
-index 38b31a0..40b4311 100644
---- a/drivers/net/wireless/ti/wlcore/tx.c
-+++ b/drivers/net/wireless/ti/wlcore/tx.c
-@@ -134,12 +134,12 @@ static void wl1271_tx_regulate_link(struct wl1271 *wl,
- 	 * into high-level PS and clean out its TX queues.
- 	 * Make an exception if this is the only connected link. In this
- 	 * case FW-memory congestion is less of a problem.
--	 * Note that a single connected STA means 3 active links, since we must
--	 * account for the global and broadcast AP links. The "fw_ps" check
--	 * assures us the third link is a STA connected to the AP. Otherwise
--	 * the FW would not set the PSM bit.
-+	 * Note that a single connected STA means 2*ap_count + 1 active links,
-+	 * since we must account for the global and broadcast AP links
-+	 * for each AP. The "fw_ps" check assures us the other link is a STA
-+	 * connected to the AP. Otherwise the FW would not set the PSM bit.
- 	 */
--	if (wl->active_link_count > 3 && fw_ps &&
-+	if (wl->active_link_count > (wl->ap_count*2 + 1) && fw_ps &&
- 	    tx_pkts >= WL1271_PS_STA_MAX_PACKETS)
- 		wl12xx_ps_link_start(wl, wlvif, hlid, true);
- }
--- 
-1.9.3
-
diff --git a/recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0015-wlcore-decrease-warning-verbosity-during-recovery.patch b/recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0015-wlcore-decrease-warning-verbosity-during-recovery.patch
deleted file mode 100644
index 781bea5..0000000
--- a/recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0015-wlcore-decrease-warning-verbosity-during-recovery.patch
+++ /dev/null
@@ -1,54 +0,0 @@
-From 1ede95007371c27729383c8977e04abf63874ea8 Mon Sep 17 00:00:00 2001
-From: Arik Nemtsov <arik at wizery.com>
-Date: Mon, 10 Feb 2014 13:47:31 +0200
-Subject: [PATCH 15/18] wlcore: decrease warning verbosity during recovery
-
-Silently ignore repetitive scheduling of recovery work and commands
-being passed to the bus when the HW is not available. This can happen
-many times during recovery and slow it down. It also spams the kernel
-logs.
-
-Signed-off-by: Arik Nemtsov <arik at wizery.com>
-Signed-off-by: Eliad Peller <eliad at wizery.com>
-Signed-off-by: John W. Linville <linville at tuxdriver.com>
----
- drivers/net/wireless/ti/wlcore/cmd.c  | 4 ++--
- drivers/net/wireless/ti/wlcore/main.c | 5 +++--
- 2 files changed, 5 insertions(+), 4 deletions(-)
-
-diff --git a/drivers/net/wireless/ti/wlcore/cmd.c b/drivers/net/wireless/ti/wlcore/cmd.c
-index 3463a67..40dc30f 100644
---- a/drivers/net/wireless/ti/wlcore/cmd.c
-+++ b/drivers/net/wireless/ti/wlcore/cmd.c
-@@ -60,8 +60,8 @@ static int __wlcore_cmd_send(struct wl1271 *wl, u16 id, void *buf,
- 	u16 status;
- 	u16 poll_count = 0;
- 
--	if (WARN_ON(wl->state == WLCORE_STATE_RESTARTING &&
--		    id != CMD_STOP_FWLOGGER))
-+	if (unlikely(wl->state == WLCORE_STATE_RESTARTING &&
-+		     id != CMD_STOP_FWLOGGER))
- 		return -EIO;
- 
- 	cmd = buf;
-diff --git a/drivers/net/wireless/ti/wlcore/main.c b/drivers/net/wireless/ti/wlcore/main.c
-index 8106c96..a2348b9 100644
---- a/drivers/net/wireless/ti/wlcore/main.c
-+++ b/drivers/net/wireless/ti/wlcore/main.c
-@@ -782,10 +782,11 @@ out:
- 
- void wl12xx_queue_recovery_work(struct wl1271 *wl)
- {
--	WARN_ON(!test_bit(WL1271_FLAG_INTENDED_FW_RECOVERY, &wl->flags));
--
- 	/* Avoid a recursive recovery */
- 	if (wl->state == WLCORE_STATE_ON) {
-+		WARN_ON(!test_bit(WL1271_FLAG_INTENDED_FW_RECOVERY,
-+				  &wl->flags));
-+
- 		wl->state = WLCORE_STATE_RESTARTING;
- 		set_bit(WL1271_FLAG_RECOVERY_IN_PROGRESS, &wl->flags);
- 		wl1271_ps_elp_wakeup(wl);
--- 
-1.9.3
-
diff --git a/recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0016-wlcore-increase-timeout-to-5000-msecs.patch b/recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0016-wlcore-increase-timeout-to-5000-msecs.patch
deleted file mode 100644
index 5eca1d7..0000000
--- a/recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0016-wlcore-increase-timeout-to-5000-msecs.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From 5b07d97a381508dfc79bda72778ac27c1bdba320 Mon Sep 17 00:00:00 2001
-From: Yaniv Machani <yanivma at ti.com>
-Date: Mon, 10 Feb 2014 13:47:32 +0200
-Subject: [PATCH 16/18] wlcore: increase timeout to 5000 msecs
-
-dfs configuration command might take longer than
-the current timeout. increase it to 5 seconds.
-
-Signed-off-by: Yaniv Machani <yanivma at ti.com>
-Signed-off-by: Eliad Peller <eliad at wizery.com>
-Signed-off-by: John W. Linville <linville at tuxdriver.com>
----
- drivers/net/wireless/ti/wlcore/cmd.h | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/drivers/net/wireless/ti/wlcore/cmd.h b/drivers/net/wireless/ti/wlcore/cmd.h
-index 9cb3f44..b084830 100644
---- a/drivers/net/wireless/ti/wlcore/cmd.h
-+++ b/drivers/net/wireless/ti/wlcore/cmd.h
-@@ -207,7 +207,7 @@ enum cmd_templ {
- #define WL1271_COMMAND_TIMEOUT     2000
- #define WL1271_CMD_TEMPL_DFLT_SIZE 252
- #define WL1271_CMD_TEMPL_MAX_SIZE  512
--#define WL1271_EVENT_TIMEOUT       1500
-+#define WL1271_EVENT_TIMEOUT       5000
- 
- struct wl1271_cmd_header {
- 	__le16 id;
--- 
-1.9.3
-
diff --git a/recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0017-wlcore-enable-beacon-filtering-only-after-receiving-.patch b/recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0017-wlcore-enable-beacon-filtering-only-after-receiving-.patch
deleted file mode 100644
index 4ca93ff..0000000
--- a/recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0017-wlcore-enable-beacon-filtering-only-after-receiving-.patch
+++ /dev/null
@@ -1,86 +0,0 @@
-From d881fa2c5032918e2b03ce6e12a5886f08acb459 Mon Sep 17 00:00:00 2001
-From: Eliad Peller <eliad at wizery.com>
-Date: Mon, 10 Feb 2014 13:47:33 +0200
-Subject: [PATCH 17/18] wlcore: enable beacon filtering only after receiving a
- beacon
-
-Enabling beacon filtering before receving a beacon
-might result in not having a beacon at all for the
-current connected AP, which prevents the station
-from entering power-save.
-
-Replace the current approach (of starting beacon
-filtering on init) and configure beacon filering
-only after bss_conf->dtimper is set (which means
-mac80211 already parsed a beacon).
-
-Signed-off-by: Eliad Peller <eliad at wizery.com>
-Signed-off-by: John W. Linville <linville at tuxdriver.com>
----
- drivers/net/wireless/ti/wlcore/acx.c  |  3 ++-
- drivers/net/wireless/ti/wlcore/init.c |  4 ++--
- drivers/net/wireless/ti/wlcore/main.c | 12 ++++++++++++
- 3 files changed, 16 insertions(+), 3 deletions(-)
-
-diff --git a/drivers/net/wireless/ti/wlcore/acx.c b/drivers/net/wireless/ti/wlcore/acx.c
-index 71b244b..b924cea 100644
---- a/drivers/net/wireless/ti/wlcore/acx.c
-+++ b/drivers/net/wireless/ti/wlcore/acx.c
-@@ -358,7 +358,8 @@ int wl1271_acx_beacon_filter_opt(struct wl1271 *wl, struct wl12xx_vif *wlvif,
- 	struct acx_beacon_filter_option *beacon_filter = NULL;
- 	int ret = 0;
- 
--	wl1271_debug(DEBUG_ACX, "acx beacon filter opt");
-+	wl1271_debug(DEBUG_ACX, "acx beacon filter opt enable=%d",
-+		     enable_filter);
- 
- 	if (enable_filter &&
- 	    wl->conf.conn.bcn_filt_mode == CONF_BCN_FILT_MODE_DISABLED)
-diff --git a/drivers/net/wireless/ti/wlcore/init.c b/drivers/net/wireless/ti/wlcore/init.c
-index b376c99..199e941 100644
---- a/drivers/net/wireless/ti/wlcore/init.c
-+++ b/drivers/net/wireless/ti/wlcore/init.c
-@@ -287,8 +287,8 @@ static int wl1271_init_sta_beacon_filter(struct wl1271 *wl,
- 	if (ret < 0)
- 		return ret;
- 
--	/* enable beacon filtering */
--	ret = wl1271_acx_beacon_filter_opt(wl, wlvif, true);
-+	/* disable beacon filtering until we get the first beacon */
-+	ret = wl1271_acx_beacon_filter_opt(wl, wlvif, false);
- 	if (ret < 0)
- 		return ret;
- 
-diff --git a/drivers/net/wireless/ti/wlcore/main.c b/drivers/net/wireless/ti/wlcore/main.c
-index a2348b9..82d5461 100644
---- a/drivers/net/wireless/ti/wlcore/main.c
-+++ b/drivers/net/wireless/ti/wlcore/main.c
-@@ -2941,6 +2941,11 @@ static int wlcore_unset_assoc(struct wl1271 *wl, struct wl12xx_vif *wlvif)
- 		ret = wl1271_acx_keep_alive_mode(wl, wlvif, false);
- 		if (ret < 0)
- 			return ret;
-+
-+		/* disable beacon filtering */
-+		ret = wl1271_acx_beacon_filter_opt(wl, wlvif, false);
-+		if (ret < 0)
-+			return ret;
- 	}
- 
- 	if (test_and_clear_bit(WLVIF_FLAG_CS_PROGRESS, &wlvif->flags)) {
-@@ -4312,6 +4317,13 @@ static void wl1271_bss_info_changed_sta(struct wl1271 *wl,
- 		}
- 	}
- 
-+	if ((changed & BSS_CHANGED_BEACON_INFO) && bss_conf->dtim_period) {
-+		/* enable beacon filtering */
-+		ret = wl1271_acx_beacon_filter_opt(wl, wlvif, true);
-+		if (ret < 0)
-+			goto out;
-+	}
-+
- 	ret = wl1271_bss_erp_info_changed(wl, vif, bss_conf, changed);
- 	if (ret < 0)
- 		goto out;
--- 
-1.9.3
-
diff --git a/recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0018-wlcore-add-support-for-STA-CSA-with-chan-contexts.patch b/recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0018-wlcore-add-support-for-STA-CSA-with-chan-contexts.patch
deleted file mode 100644
index b92ceed..0000000
--- a/recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0018-wlcore-add-support-for-STA-CSA-with-chan-contexts.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From 6b27fe51675fd462967b824f63c5c009e9616363 Mon Sep 17 00:00:00 2001
-From: Arik Nemtsov <arik at wizery.com>
-Date: Mon, 10 Feb 2014 13:47:34 +0200
-Subject: [PATCH 18/18] wlcore: add support for STA CSA with chan contexts
-
-TI wl12xx/wl18xx cards support channel switch via a driver specific
-switch_channel op while operating with channel contexts.
-
-Signed-off-by: Arik Nemtsov <arik at wizery.com>
-Signed-off-by: Eliad Peller <eliad at wizery.com>
-Signed-off-by: John W. Linville <linville at tuxdriver.com>
----
- drivers/net/wireless/ti/wlcore/main.c | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
-diff --git a/drivers/net/wireless/ti/wlcore/main.c b/drivers/net/wireless/ti/wlcore/main.c
-index 82d5461..7aae5b3 100644
---- a/drivers/net/wireless/ti/wlcore/main.c
-+++ b/drivers/net/wireless/ti/wlcore/main.c
-@@ -5737,7 +5737,8 @@ static int wl1271_init_ieee80211(struct wl1271 *wl)
- 		IEEE80211_HW_AP_LINK_PS |
- 		IEEE80211_HW_AMPDU_AGGREGATION |
- 		IEEE80211_HW_TX_AMPDU_SETUP_IN_HW |
--		IEEE80211_HW_QUEUE_CONTROL;
-+		IEEE80211_HW_QUEUE_CONTROL |
-+		IEEE80211_HW_CHANCTX_STA_CSA;
- 
- 	wl->hw->wiphy->cipher_suites = cipher_suites;
- 	wl->hw->wiphy->n_cipher_suites = ARRAY_SIZE(cipher_suites);
--- 
-1.9.3
-
diff --git a/recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0019-wlcore-use-correct-LAA-bit.patch b/recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0019-wlcore-use-correct-LAA-bit.patch
deleted file mode 100644
index bb11801..0000000
--- a/recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0019-wlcore-use-correct-LAA-bit.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-From 71a301bb461da1e42e6d2764d99c683289c96f33 Mon Sep 17 00:00:00 2001
-From: Eliad Peller <eliad at wizery.com>
-Date: Fri, 11 Jul 2014 03:01:29 +0300
-Subject: [PATCH] wlcore: use correct LAA bit
-
-The LAA bit is second bit of the MSB, not of the
-third byte.
-
-Signed-off-by: Eliad Peller <eliad at wizery.com>
-Signed-off-by: John W. Linville <linville at tuxdriver.com>
----
- drivers/net/wireless/ti/wlcore/main.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/drivers/net/wireless/ti/wlcore/main.c b/drivers/net/wireless/ti/wlcore/main.c
-index 1ab6dbd..4c16262 100644
---- a/drivers/net/wireless/ti/wlcore/main.c
-+++ b/drivers/net/wireless/ti/wlcore/main.c
-@@ -5661,7 +5661,7 @@ static void wl12xx_derive_mac_addresses(struct wl1271 *wl, u32 oui, u32 nic)
- 		memcpy(&wl->addresses[idx], &wl->addresses[0],
- 		       sizeof(wl->addresses[0]));
- 		/* LAA bit */
--		wl->addresses[idx].addr[2] |= BIT(1);
-+		wl->addresses[idx].addr[0] |= BIT(1);
- 	}
- 
- 	wl->hw->wiphy->n_addresses = WLCORE_NUM_MAC_ADDRESSES;
--- 
-1.9.3
-
diff --git a/recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0020-wlcore-fix-copy-paste-bug-assign-from-src-struct-not.patch b/recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0020-wlcore-fix-copy-paste-bug-assign-from-src-struct-not.patch
deleted file mode 100644
index 71f0e1f..0000000
--- a/recipes-kernel/linux/linux-variscite-3.14.28/upstream-backport/wifi/0020-wlcore-fix-copy-paste-bug-assign-from-src-struct-not.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From 96dae59155eb98dd0ba10e8fe5d130f425e406df Mon Sep 17 00:00:00 2001
-From: Giel van Schijndel <me at mortis.eu>
-Date: Wed, 7 Jan 2015 20:38:37 +0100
-Subject: [PATCH] wlcore: fix copy-paste bug: assign from src struct not dest
-
-Signed-off-by: Giel van Schijndel <me at mortis.eu>
-Reported-at: http://www.viva64.com/en/b/0299/
-Signed-off-by: Kalle Valo <kvalo at codeaurora.org>
----
- drivers/net/wireless/ti/wlcore/acx.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/drivers/net/wireless/ti/wlcore/acx.c b/drivers/net/wireless/ti/wlcore/acx.c
-index b924cea..f28fa3b 100644
---- a/drivers/net/wireless/ti/wlcore/acx.c
-+++ b/drivers/net/wireless/ti/wlcore/acx.c
-@@ -1725,7 +1725,7 @@ int wl12xx_acx_config_hangover(struct wl1271 *wl)
- 	acx->decrease_delta = conf->decrease_delta;
- 	acx->quiet_time = conf->quiet_time;
- 	acx->increase_time = conf->increase_time;
--	acx->window_size = acx->window_size;
-+	acx->window_size = conf->window_size;
- 
- 	ret = wl1271_cmd_configure(wl, ACX_CONFIG_HANGOVER, acx,
- 				   sizeof(*acx));
--- 
-1.9.3
-
diff --git a/recipes-kernel/linux/linux-variscite-4.1.15/Fix-the-compile-issue-under-gcc6.patch b/recipes-kernel/linux/linux-variscite-4.1.15/Fix-the-compile-issue-under-gcc6.patch
new file mode 100644
index 0000000..3d080b6
--- /dev/null
+++ b/recipes-kernel/linux/linux-variscite-4.1.15/Fix-the-compile-issue-under-gcc6.patch
@@ -0,0 +1,92 @@
+From 5d39bd421fc093e2c852316080538cef85a9e1a0 Mon Sep 17 00:00:00 2001
+From: yocto <yocto at yocto.org>
+Date: Thu, 2 Jun 2016 00:18:33 -0500
+Subject: [PATCH] Fix the compile issue under gcc6
+
+Fix the following build error:
+| .../include/linux/compiler-gcc.h:106:30: fatal error: linux/compiler-gcc6.h: No such file or directory
+| #include gcc_header(__GNUC__)
+
+Signed-off-by: Zhenhua Luo <zhenhua.luo at nxp.com>
+
+Upstream-Status: Pending
+---
+ include/linux/compiler-gcc6.h | 66 +++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 66 insertions(+)
+ create mode 100644 include/linux/compiler-gcc6.h
+
+diff --git a/include/linux/compiler-gcc6.h b/include/linux/compiler-gcc6.h
+new file mode 100644
+index 0000000..cdd1cc2
+--- /dev/null
++++ b/include/linux/compiler-gcc6.h
+@@ -0,0 +1,66 @@
++#ifndef __LINUX_COMPILER_H
++#error "Please don't include <linux/compiler-gcc5.h> directly, include <linux/compiler.h> instead."
++#endif
++
++#define __used				__attribute__((__used__))
++#define __must_check			__attribute__((warn_unused_result))
++#define __compiler_offsetof(a, b)	__builtin_offsetof(a, b)
++
++/* Mark functions as cold. gcc will assume any path leading to a call
++   to them will be unlikely.  This means a lot of manual unlikely()s
++   are unnecessary now for any paths leading to the usual suspects
++   like BUG(), printk(), panic() etc. [but let's keep them for now for
++   older compilers]
++
++   Early snapshots of gcc 4.3 don't support this and we can't detect this
++   in the preprocessor, but we can live with this because they're unreleased.
++   Maketime probing would be overkill here.
++
++   gcc also has a __attribute__((__hot__)) to move hot functions into
++   a special section, but I don't see any sense in this right now in
++   the kernel context */
++#define __cold			__attribute__((__cold__))
++
++#define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__)
++
++#ifndef __CHECKER__
++# define __compiletime_warning(message) __attribute__((warning(message)))
++# define __compiletime_error(message) __attribute__((error(message)))
++#endif /* __CHECKER__ */
++
++/*
++ * Mark a position in code as unreachable.  This can be used to
++ * suppress control flow warnings after asm blocks that transfer
++ * control elsewhere.
++ *
++ * Early snapshots of gcc 4.5 don't support this and we can't detect
++ * this in the preprocessor, but we can live with this because they're
++ * unreleased.  Really, we need to have autoconf for the kernel.
++ */
++#define unreachable() __builtin_unreachable()
++
++/* Mark a function definition as prohibited from being cloned. */
++#define __noclone	__attribute__((__noclone__))
++
++/*
++ * Tell the optimizer that something else uses this function or variable.
++ */
++#define __visible __attribute__((externally_visible))
++
++/*
++ * GCC 'asm goto' miscompiles certain code sequences:
++ *
++ *   http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58670
++ *
++ * Work it around via a compiler barrier quirk suggested by Jakub Jelinek.
++ * Fixed in GCC 4.8.2 and later versions.
++ *
++ * (asm goto is automatically volatile - the naming reflects this.)
++ */
++#define asm_volatile_goto(x...)	do { asm goto(x); asm (""); } while (0)
++
++#ifdef CONFIG_ARCH_USE_BUILTIN_BSWAP
++#define __HAVE_BUILTIN_BSWAP32__
++#define __HAVE_BUILTIN_BSWAP64__
++#define __HAVE_BUILTIN_BSWAP16__
++#endif /* CONFIG_ARCH_USE_BUILTIN_BSWAP */
+-- 
+2.5.0
+
diff --git a/recipes-kernel/linux/linux-variscite-3.14.28/defconfig b/recipes-kernel/linux/linux-variscite-4.1.15/defconfig
similarity index 78%
rename from recipes-kernel/linux/linux-variscite-3.14.28/defconfig
rename to recipes-kernel/linux/linux-variscite-4.1.15/defconfig
index e345bf8..e651bbe 100644
--- a/recipes-kernel/linux/linux-variscite-3.14.28/defconfig
+++ b/recipes-kernel/linux/linux-variscite-4.1.15/defconfig
@@ -1,10 +1,13 @@
-CONFIG_LOCALVERSION="-1.1.0"
 CONFIG_KERNEL_LZO=y
 CONFIG_SYSVIPC=y
+CONFIG_FHANDLE=y
 CONFIG_NO_HZ=y
 CONFIG_HIGH_RES_TIMERS=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
 CONFIG_LOG_BUF_SHIFT=18
 CONFIG_CGROUPS=y
+CONFIG_NAMESPACES=y
 CONFIG_RELAY=y
 CONFIG_BLK_DEV_INITRD=y
 CONFIG_EXPERT=y
@@ -17,21 +20,21 @@ CONFIG_MODULE_UNLOAD=y
 CONFIG_MODVERSIONS=y
 CONFIG_MODULE_SRCVERSION_ALL=y
 # CONFIG_BLK_DEV_BSG is not set
-CONFIG_GPIO_PCA953X=y
 CONFIG_ARCH_MXC=y
-CONFIG_MACH_IMX51_DT=y
-CONFIG_MACH_EUKREA_CPUIMX51SD=y
 CONFIG_SOC_IMX50=y
 CONFIG_SOC_IMX53=y
 CONFIG_SOC_IMX6Q=y
 CONFIG_SOC_IMX6SL=y
 CONFIG_SOC_IMX6SX=y
+CONFIG_SOC_IMX6UL=y
+CONFIG_SOC_IMX7D=y
 CONFIG_SOC_VF610=y
 # CONFIG_SWP_EMULATE is not set
 CONFIG_PCI=y
 CONFIG_PCI_MSI=y
 CONFIG_PCI_IMX6=y
 CONFIG_SMP=y
+CONFIG_HAVE_ARM_ARCH_TIMER=y
 CONFIG_VMSPLIT_2G=y
 CONFIG_PREEMPT=y
 CONFIG_AEABI=y
@@ -39,62 +42,67 @@ CONFIG_HIGHMEM=y
 CONFIG_CMA=y
 CONFIG_CMDLINE="noinitrd console=ttymxc0,115200"
 CONFIG_CPU_FREQ=y
-CONFIG_CPU_FREQ_DEFAULT_GOV_INTERACTIVE=y
-CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y
 CONFIG_CPU_FREQ_GOV_POWERSAVE=y
 CONFIG_CPU_FREQ_GOV_USERSPACE=y
-CONFIG_CPU_FREQ_GOV_ONDEMAND=y
+CONFIG_CPU_FREQ_GOV_INTERACTIVE=y
 CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
 CONFIG_ARM_IMX6Q_CPUFREQ=y
+CONFIG_ARM_IMX7D_CPUFREQ=y
 CONFIG_CPU_IDLE=y
 CONFIG_VFP=y
 CONFIG_NEON=y
 CONFIG_BINFMT_MISC=m
-CONFIG_PM_RUNTIME=y
 CONFIG_PM_DEBUG=y
 CONFIG_PM_TEST_SUSPEND=y
 CONFIG_NET=y
 CONFIG_PACKET=y
 CONFIG_UNIX=y
 CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-CONFIG_IP_ADVANCED_ROUTER=y
 CONFIG_IP_PNP=y
 CONFIG_IP_PNP_DHCP=y
-CONFIG_SYN_COOKIES=y
-CONFIG_INET_AH=m
-CONFIG_INET_ESP=m
-CONFIG_INET_IPCOMP=m
-CONFIG_INET_XFRM_MODE_TRANSPORT=m
-CONFIG_INET_XFRM_MODE_TUNNEL=m
-CONFIG_INET_XFRM_MODE_BEET=m
-CONFIG_INET_UDP_DIAG=m
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_LRO is not set
 CONFIG_IPV6=y
 CONFIG_NETFILTER=y
-CONFIG_NETFILTER_NETLINK_LOG=m
+CONFIG_NETFILTER_DEBUG=y
+CONFIG_NETFILTER_NETLINK_ACCT=y
+CONFIG_NETFILTER_NETLINK_QUEUE=y
+CONFIG_NETFILTER_NETLINK_LOG=y
 CONFIG_NF_CONNTRACK=y
-CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m
-CONFIG_NETFILTER_XT_MATCH_COMMENT=m
-CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y
-CONFIG_NETFILTER_XT_MATCH_HL=m
-CONFIG_NETFILTER_XT_MATCH_LIMIT=m
-CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
-CONFIG_NETFILTER_XT_MATCH_RECENT=m
-CONFIG_IP_SET=m
-CONFIG_IP_VS=m
-CONFIG_NF_CONNTRACK_IPV4=y
-CONFIG_IP_NF_IPTABLES=y
-CONFIG_IP_NF_FILTER=y
-CONFIG_IP_NF_TARGET_REJECT=y
-CONFIG_NF_NAT_IPV4=m
-CONFIG_IP_NF_TARGET_MASQUERADE=m
-CONFIG_IP_NF_TARGET_NETMAP=m
-CONFIG_IP_NF_TARGET_REDIRECT=m
-CONFIG_IP_NF_ARPTABLES=m
-CONFIG_NF_CONNTRACK_IPV6=y
-CONFIG_IP6_NF_IPTABLES=y
-CONFIG_IP6_NF_FILTER=y
-CONFIG_IP6_NF_TARGET_REJECT=y
+CONFIG_NF_CONNTRACK_MARK=y
+CONFIG_NF_CONNTRACK_EVENTS=y
+CONFIG_NF_CONNTRACK_TIMEOUT=y
+CONFIG_NF_CONNTRACK_TIMESTAMP=y
+CONFIG_NF_CT_PROTO_DCCP=y
+CONFIG_NF_CT_PROTO_SCTP=y
+CONFIG_NF_CT_PROTO_UDPLITE=y
+CONFIG_NF_CONNTRACK_AMANDA=y
+CONFIG_NF_CONNTRACK_FTP=y
+CONFIG_NF_CONNTRACK_H323=y
+CONFIG_NF_CONNTRACK_IRC=y
+CONFIG_NF_CONNTRACK_NETBIOS_NS=y
+CONFIG_NF_CONNTRACK_SNMP=y
+CONFIG_NF_CONNTRACK_PPTP=y
+CONFIG_NF_CONNTRACK_SANE=y
+CONFIG_NF_CONNTRACK_SIP=y
+CONFIG_NF_CONNTRACK_TFTP=y
+CONFIG_NF_CT_NETLINK=y
+CONFIG_NF_CT_NETLINK_TIMEOUT=y
+CONFIG_NETFILTER_NETLINK_QUEUE_CT=y
+CONFIG_NF_TABLES=y
+CONFIG_NF_TABLES_INET=y
+CONFIG_NFT_EXTHDR=y
+CONFIG_NFT_META=y
+CONFIG_NFT_CT=y
+CONFIG_NFT_RBTREE=y
+CONFIG_NFT_HASH=y
+CONFIG_NFT_COUNTER=y
+CONFIG_NFT_LOG=y
+CONFIG_NFT_LIMIT=y
+CONFIG_NFT_NAT=y
 CONFIG_VLAN_8021Q=y
 CONFIG_LLC2=y
 CONFIG_CAN=y
@@ -107,26 +115,18 @@ CONFIG_BT_BNEP=y
 CONFIG_BT_BNEP_MC_FILTER=y
 CONFIG_BT_BNEP_PROTO_FILTER=y
 CONFIG_BT_HIDP=y
+CONFIG_BT_HCIBTUSB=y
+# CONFIG_BT_HCIBTUSB_BCM is not set
 CONFIG_BT_HCIUART=y
-CONFIG_BT_HCIUART_H4=y
 CONFIG_BT_HCIUART_BCSP=y
+CONFIG_BT_HCIUART_ATH3K=y
 CONFIG_BT_HCIUART_LL=y
 CONFIG_BT_HCIUART_3WIRE=y
-CONFIG_BT_WILINK=y
-CONFIG_CFG80211=m
-CONFIG_NL80211_TESTMODE=y
-CONFIG_CFG80211_DEVELOPER_WARNINGS=y
-CONFIG_CFG80211_REG_DEBUG=y
-CONFIG_CFG80211_DEBUGFS=y
-CONFIG_CFG80211_WEXT=y
-CONFIG_MAC80211=m
-CONFIG_MAC80211_MESH=y
-CONFIG_MAC80211_LEDS=y
 CONFIG_DEVTMPFS=y
 CONFIG_DEVTMPFS_MOUNT=y
 # CONFIG_STANDALONE is not set
 CONFIG_DMA_CMA=y
-CONFIG_CMA_SIZE_MBYTES=320
+CONFIG_CMA_SIZE_MBYTES=0
 CONFIG_IMX_WEIM=y
 CONFIG_CONNECTOR=y
 CONFIG_MTD=y
@@ -150,12 +150,10 @@ CONFIG_MTD_UBI=y
 CONFIG_BLK_DEV_LOOP=y
 CONFIG_BLK_DEV_RAM=y
 CONFIG_BLK_DEV_RAM_SIZE=65536
-CONFIG_TIFM_CORE=m
 CONFIG_EEPROM_AT24=y
 CONFIG_EEPROM_AT25=y
 # CONFIG_SCSI_PROC_FS is not set
 CONFIG_BLK_DEV_SD=y
-CONFIG_SCSI_MULTI_LUN=y
 CONFIG_SCSI_CONSTANTS=y
 CONFIG_SCSI_LOGGING=y
 CONFIG_SCSI_SCAN_ASYNC=y
@@ -185,29 +183,21 @@ CONFIG_USB_RTL8150=m
 CONFIG_USB_RTL8152=m
 CONFIG_USB_USBNET=m
 CONFIG_USB_NET_CDC_EEM=m
-CONFIG_HOSTAP=y
-CONFIG_WL_TI=y
-CONFIG_WL12XX=m
-CONFIG_WL18XX=m
-CONFIG_WLCORE_SDIO=m
+CONFIG_INPUT_POLLDEV=y
 # CONFIG_INPUT_MOUSEDEV_PSAUX is not set
 CONFIG_INPUT_EVDEV=y
+CONFIG_INPUT_EVBUG=m
 CONFIG_KEYBOARD_GPIO=y
-CONFIG_KEYBOARD_SNVS_PWRKEY=y
 CONFIG_KEYBOARD_IMX=y
 CONFIG_MOUSE_PS2=m
 CONFIG_MOUSE_PS2_ELANTECH=y
+# CONFIG_MOUSE_PS2_FOCALTECH is not set
 CONFIG_INPUT_TOUCHSCREEN=y
-CONFIG_TOUCHSCREEN_FT5X06=y
 CONFIG_TOUCHSCREEN_ADS7846=y
-CONFIG_TOUCHSCREEN_CTW6120=y
-CONFIG_TOUCHSCREEN_EGALAX=y
-CONFIG_TOUCHSCREEN_ELAN=y
-CONFIG_TOUCHSCREEN_MC13783=y
-CONFIG_TOUCHSCREEN_STMPE=y
+CONFIG_TOUCHSCREEN_FT5X06=y
+CONFIG_TOUCHSCREEN_IMX6UL_TSC=y
+CONFIG_TOUCHSCREEN_EDT_FT5X06=y
 CONFIG_INPUT_MISC=y
-CONFIG_INPUT_MMA8450=y
-CONFIG_INPUT_ISL29023=y
 CONFIG_SERIO_SERPORT=m
 # CONFIG_LEGACY_PTYS is not set
 # CONFIG_DEVKMEM is not set
@@ -216,7 +206,6 @@ CONFIG_SERIAL_IMX_CONSOLE=y
 CONFIG_SERIAL_FSL_LPUART=y
 CONFIG_SERIAL_FSL_LPUART_CONSOLE=y
 CONFIG_FSL_OTP=y
-CONFIG_HW_RANDOM=y
 # CONFIG_I2C_COMPAT is not set
 CONFIG_I2C_CHARDEV=y
 # CONFIG_I2C_HELPER_AUTO is not set
@@ -224,10 +213,15 @@ CONFIG_I2C_ALGOPCF=m
 CONFIG_I2C_ALGOPCA=m
 CONFIG_I2C_IMX=y
 CONFIG_SPI=y
+CONFIG_SPI_GPIO=y
 CONFIG_SPI_IMX=y
-CONFIG_SPI_SPIDEV=y
 CONFIG_GPIO_SYSFS=y
+CONFIG_GPIO_MAX732X=y
+CONFIG_GPIO_PCA953X=y
+CONFIG_GPIO_74X164=y
 CONFIG_POWER_SUPPLY=y
+CONFIG_POWER_RESET=y
+CONFIG_POWER_RESET_SYSCON_POWEROFF=y
 CONFIG_SENSORS_MAX17135=y
 CONFIG_SENSORS_MAG3110=y
 CONFIG_THERMAL=y
@@ -246,6 +240,7 @@ CONFIG_REGULATOR=y
 CONFIG_REGULATOR_FIXED_VOLTAGE=y
 CONFIG_REGULATOR_ANATOP=y
 CONFIG_REGULATOR_DA9052=y
+CONFIG_REGULATOR_GPIO=y
 CONFIG_REGULATOR_MAX17135=y
 CONFIG_REGULATOR_MC13783=y
 CONFIG_REGULATOR_MC13892=y
@@ -254,6 +249,7 @@ CONFIG_MEDIA_SUPPORT=y
 CONFIG_MEDIA_CAMERA_SUPPORT=y
 CONFIG_MEDIA_RADIO_SUPPORT=y
 CONFIG_MEDIA_RC_SUPPORT=y
+# CONFIG_RC_DECODERS is not set
 CONFIG_RC_DEVICES=y
 CONFIG_IR_GPIO_CIR=y
 CONFIG_MEDIA_USB_SUPPORT=y
@@ -270,6 +266,8 @@ CONFIG_VIDEO_MXC_IPU_OUTPUT=y
 CONFIG_VIDEO_MXC_PXP_V4L2=y
 CONFIG_VIDEO_MXC_CSI_CAMERA=m
 CONFIG_MXC_VADC=m
+CONFIG_MXC_MIPI_CSI=m
+CONFIG_MXC_CAMERA_OV5647_MIPI=m
 CONFIG_SOC_CAMERA=y
 CONFIG_VIDEO_MX3=y
 CONFIG_V4L_MEM2MEM_DRIVERS=y
@@ -280,21 +278,19 @@ CONFIG_DRM=y
 CONFIG_DRM_VIVANTE=y
 CONFIG_FB=y
 CONFIG_FB_MXS=y
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_LCD_CLASS_DEVICE=y
-CONFIG_LCD_L4F00242T03=y
-CONFIG_LCD_PLATFORM=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_PWM=y
 CONFIG_FB_MXC_SYNC_PANEL=y
-CONFIG_FB_MXC_LDB=y
 CONFIG_FB_MXC_MIPI_DSI=y
+CONFIG_FB_MXC_MIPI_DSI_SAMSUNG=y
 CONFIG_FB_MXC_TRULY_WVGA_SYNC_PANEL=y
+CONFIG_FB_MXC_LDB=y
 CONFIG_FB_MXC_HDMI=y
-CONFIG_FB_MXC_EINK_PANEL=y
 CONFIG_FB_MXS_SII902X=y
 CONFIG_FB_MXC_DCIC=m
 CONFIG_HANNSTAR_CABC=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_LCD_L4F00242T03=y
+CONFIG_LCD_PLATFORM=y
+CONFIG_BACKLIGHT_PWM=y
 CONFIG_FRAMEBUFFER_CONSOLE=y
 CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
 CONFIG_LOGO=y
@@ -304,6 +300,9 @@ CONFIG_SND_USB_AUDIO=m
 CONFIG_SND_SOC=y
 CONFIG_SND_IMX_SOC=y
 CONFIG_SND_SOC_EUKREA_TLV320=y
+CONFIG_SND_SOC_IMX_WM8960=y
+CONFIG_SND_SOC_IMX_SII902X=y
+CONFIG_SND_SOC_IMX_WM8958=y
 CONFIG_SND_SOC_IMX_CS42888=y
 CONFIG_SND_SOC_IMX_WM8962=y
 CONFIG_SND_SOC_IMX_TLV320AIC3X=y
@@ -311,16 +310,16 @@ CONFIG_SND_SOC_IMX_SGTL5000=y
 CONFIG_SND_SOC_IMX_MQS=y
 CONFIG_SND_SOC_IMX_SPDIF=y
 CONFIG_SND_SOC_IMX_MC13783=y
-CONFIG_SND_SOC_IMX_HDMI=y
 CONFIG_SND_SOC_IMX_SI476X=y
+CONFIG_SND_SOC_IMX_HDMI=y
+CONFIG_SND_SOC_TLV320AIC31XX=y
 CONFIG_USB=y
-CONFIG_USB_OTG_FSM=m
-CONFIG_USB_XHCI_HCD=y
+CONFIG_USB_OTG_WHITELIST=y
+CONFIG_USB_OTG_FSM=y
 CONFIG_USB_EHCI_HCD=y
 CONFIG_USB_EHCI_MXC=y
-CONFIG_USB_EHCI_HCD_PLATFORM=m
+CONFIG_USB_HCD_TEST_MODE=y
 CONFIG_USB_ACM=m
-CONFIG_USB_WDM=m
 CONFIG_USB_STORAGE=y
 CONFIG_USB_CHIPIDEA=y
 CONFIG_USB_CHIPIDEA_UDC=y
@@ -329,8 +328,7 @@ CONFIG_USB_SERIAL=m
 CONFIG_USB_SERIAL_GENERIC=y
 CONFIG_USB_SERIAL_FTDI_SIO=m
 CONFIG_USB_SERIAL_OPTION=m
-CONFIG_USB_SISUSBVGA=m
-CONFIG_USB_EHSET_TEST_FIXTURE=m
+CONFIG_USB_EHSET_TEST_FIXTURE=y
 CONFIG_NOP_USB_XCEIV=y
 CONFIG_USB_MXS_PHY=y
 CONFIG_USB_GADGET=y
@@ -347,25 +345,24 @@ CONFIG_USB_CONFIGFS_MASS_STORAGE=y
 CONFIG_USB_CONFIGFS_F_LB_SS=y
 CONFIG_USB_CONFIGFS_F_FS=y
 CONFIG_USB_ZERO=m
-CONFIG_USB_AUDIO=m
 CONFIG_USB_ETH=m
 CONFIG_USB_G_NCM=m
 CONFIG_USB_GADGETFS=m
-CONFIG_USB_FUNCTIONFS=m
 CONFIG_USB_MASS_STORAGE=m
 CONFIG_USB_G_SERIAL=m
-CONFIG_USB_G_WEBCAM=m
 CONFIG_MMC=y
-CONFIG_MMC_UNSAFE_RESUME=y
 CONFIG_MMC_SDHCI=y
 CONFIG_MMC_SDHCI_PLTFM=y
 CONFIG_MMC_SDHCI_ESDHC_IMX=y
 CONFIG_MXC_IPU=y
+CONFIG_MXC_IPU_V3_PRE=y
+CONFIG_MXC_SIM=y
 CONFIG_MXC_MIPI_CSI2=y
-CONFIG_MXC_MLB150=m
+CONFIG_MXC_HDMI_CEC=y
 CONFIG_NEW_LEDS=y
 CONFIG_LEDS_CLASS=y
 CONFIG_LEDS_GPIO=y
+CONFIG_LEDS_TRIGGERS=y
 CONFIG_LEDS_TRIGGER_TIMER=y
 CONFIG_LEDS_TRIGGER_ONESHOT=y
 CONFIG_LEDS_TRIGGER_HEARTBEAT=y
@@ -379,12 +376,15 @@ CONFIG_RTC_DRV_MXC=y
 CONFIG_RTC_DRV_SNVS=y
 CONFIG_DMADEVICES=y
 CONFIG_MXC_PXP_V2=y
+CONFIG_MXC_PXP_V3=y
 CONFIG_IMX_SDMA=y
 CONFIG_MXS_DMA=y
+CONFIG_DMATEST=m
 CONFIG_STAGING=y
 CONFIG_STAGING_MEDIA=y
 # CONFIG_IOMMU_SUPPORT is not set
 CONFIG_IIO=y
+CONFIG_IMX7D_ADC=y
 CONFIG_VF610_ADC=y
 CONFIG_PWM=y
 CONFIG_PWM_IMX=y
@@ -429,7 +429,6 @@ CONFIG_MAGIC_SYSRQ=y
 # CONFIG_FTRACE is not set
 CONFIG_SECURITYFS=y
 CONFIG_CRYPTO_USER=y
-CONFIG_CRYPTO_AUTHENC=y
 CONFIG_CRYPTO_TEST=m
 CONFIG_CRYPTO_CCM=y
 CONFIG_CRYPTO_GCM=y
@@ -439,6 +438,7 @@ CONFIG_CRYPTO_LRW=y
 CONFIG_CRYPTO_XTS=y
 CONFIG_CRYPTO_MD4=y
 CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_MICHAEL_MIC=y
 CONFIG_CRYPTO_RMD128=y
 CONFIG_CRYPTO_RMD160=y
 CONFIG_CRYPTO_RMD256=y
@@ -447,16 +447,18 @@ CONFIG_CRYPTO_SHA1=y
 CONFIG_CRYPTO_SHA512=y
 CONFIG_CRYPTO_TGR192=y
 CONFIG_CRYPTO_WP512=y
+CONFIG_CRYPTO_ARC4=y
 CONFIG_CRYPTO_BLOWFISH=y
 CONFIG_CRYPTO_CAMELLIA=y
 CONFIG_CRYPTO_DES=y
 CONFIG_CRYPTO_TWOFISH=y
 # CONFIG_CRYPTO_ANSI_CPRNG is not set
-# CONFIG_CRYPTO_HW is not set
+CONFIG_CRYPTO_DEV_FSL_CAAM=y
+CONFIG_CRYPTO_DEV_FSL_CAAM_SM=y
 CONFIG_CRC_CCITT=m
 CONFIG_CRC_T10DIF=y
 CONFIG_CRC7=m
-CONFIG_LIBCRC32C=m
+CONFIG_AVERAGE=y
 CONFIG_FONTS=y
 CONFIG_FONT_8x8=y
 CONFIG_FONT_8x16=y
diff --git a/recipes-kernel/linux/linux-variscite_3.14.28.bb b/recipes-kernel/linux/linux-variscite_3.14.28.bb
deleted file mode 100644
index 3ccb36f..0000000
--- a/recipes-kernel/linux/linux-variscite_3.14.28.bb
+++ /dev/null
@@ -1,46 +0,0 @@
-# Copyright (C) 2013-14 Freescale Semiconductor
-# Released under the MIT license (see COPYING.MIT for the terms)
-
-require recipes-kernel/linux/linux-imx.inc
-require recipes-kernel/linux/linux-dtb.inc
-
-DEPENDS += "lzop-native bc-native"
-
-COMPATIBLE_MACHINE = "(mx6)"
-
-SRC_URI = "\
-    git://github.com/varigit/linux-2.6-imx.git;protocol=git;branch=imx_3.14.28-r0_var3 \
-    file://0001-ARM-LLVMLinux-Change-extern-inline-to-static-inline.patch \
-    file://0001-ARM-8158-LLVMLinux-use-static-inline-in-ARM-ftrace.patch \
-    \
-    file://upstream-backport/wifi/0001-wlcore-memset-wl-rx_filter_enabled-to-zero-after-rec.patch \
-    file://upstream-backport/wifi/0002-wlcore-cancel-Tx-watchdog-on-suspend-and-rearm-on-fi.patch \
-    file://upstream-backport/wifi/0003-wlcore-block-read-writes-to-FW-during-ELP.patch \
-    file://upstream-backport/wifi/0004-wlcore-AP-don-t-start-mac80211-PS-on-non-peer-HLIDs.patch \
-    file://upstream-backport/wifi/0005-wlcore-wl12xx-wl18xx-simplify-fw_status-handling.patch \
-    file://upstream-backport/wifi/0006-wlcore-wl12xx-wl18xx-configure-num_links-per-hw.patch \
-    file://upstream-backport/wifi/0007-wlcore-wl12xx-wl18xx-configure-max_stations-per-hw.patch \
-    file://upstream-backport/wifi/0008-wlcore-wl12xx-wl18xx-configure-iface_combinations-pe.patch \
-    file://upstream-backport/wifi/0009-wl18xx-move-to-new-firmware-wl18xx-fw-3.bin.patch \
-    file://upstream-backport/wifi/0010-wlcore-send-EAPOL-frames-with-voice-priority.patch \
-    file://upstream-backport/wifi/0011-wlcore-don-t-stop-sched_scan-on-interface-removal.patch \
-    file://upstream-backport/wifi/0012-wlcore-wl18xx-allow-CCK-rates-for-AP-mode.patch \
-    file://upstream-backport/wifi/0013-wlcore-don-t-handle-unsetting-of-default-wep-key.patch \
-    file://upstream-backport/wifi/0014-wlcore-consider-multiple-APs-when-checking-active_li.patch \
-    file://upstream-backport/wifi/0015-wlcore-decrease-warning-verbosity-during-recovery.patch \
-    file://upstream-backport/wifi/0016-wlcore-increase-timeout-to-5000-msecs.patch \
-    file://upstream-backport/wifi/0017-wlcore-enable-beacon-filtering-only-after-receiving-.patch \
-    file://upstream-backport/wifi/0018-wlcore-add-support-for-STA-CSA-with-chan-contexts.patch \
-    file://upstream-backport/wifi/0019-wlcore-use-correct-LAA-bit.patch \
-    file://upstream-backport/wifi/0020-wlcore-fix-copy-paste-bug-assign-from-src-struct-not.patch \
-    file://boundarydevices/0002-wlcore-add-initial-device-tree-support-to-the-sdio-m.patch \
-    file://boundarydevices/0003-wlcore-add-mac-override-parameter.patch \
-    \
-    file://arm-Export-cache-flush-management-symbols-when-multi-cache.patch \
-    file://Set-dr_mode-to-otg.patch \
-    \
-    file://defconfig \
-"
-
-SRCREV = "52373bf29aac80cacc519f4cb8aed22af2a2370d"
-LOCALVERSION = "-1.1.0"
diff --git a/recipes-kernel/linux/linux-variscite_4.1.15.bb b/recipes-kernel/linux/linux-variscite_4.1.15.bb
new file mode 100644
index 0000000..194ddfc
--- /dev/null
+++ b/recipes-kernel/linux/linux-variscite_4.1.15.bb
@@ -0,0 +1,24 @@
+# Copyright (C) 2013-16 Freescale Semiconductor
+# Released under the MIT license (see COPYING.MIT for the terms)
+
+require recipes-kernel/linux/linux-imx.inc
+require recipes-kernel/linux/linux-dtb.inc
+
+DEPENDS += "lzop-native bc-native"
+
+COMPATIBLE_MACHINE = "(mx6)"
+
+SRCBRANCH = "imx-rel_imx_4.1.15_1.1.0_ga-var02"
+SRCREV = "1e7785b94784f23703dabeff3072a0a89e2bc90d"
+SRC_URI = " \
+    git://github.com/varigit/linux-2.6-imx.git;protocol=git;branch=${SRCBRANCH} \
+    file://Fix-the-compile-issue-under-gcc6.patch \
+    file://defconfig \
+"
+
+LOCALVERSION = "-1.1.0"
+
+KERNEL_IMAGETYPE = "uImage"
+
+KERNEL_EXTRA_ARGS += "LOADADDR=${UBOOT_ENTRYPOINT}"
+
-- 
2.1.4



More information about the meta-freescale mailing list