mirror of
https://github.com/archlinuxarm/PKGBUILDs.git
synced 2025-02-16 23:57:11 +00:00
core/linux-omap: moar patching (#500)
This commit is contained in:
parent
b941f89414
commit
8265a49770
10 changed files with 478 additions and 95 deletions
|
@ -1,29 +0,0 @@
|
|||
From 8675f9abdf5b67a3f621fa99e1f0e0c8d8ae2531 Mon Sep 17 00:00:00 2001
|
||||
From: Luciano Coelho <coelho@ti.com>
|
||||
Date: Tue, 27 Nov 2012 13:52:00 +0000
|
||||
Subject: wlcore/wl12xx/wl18xx: verify multi-role and single-role fw versions
|
||||
|
||||
Previously we were only checking the single-role firmware version.
|
||||
Now add code to check for the firmware versions separately for each
|
||||
firmware type.
|
||||
|
||||
Signed-off-by: Luciano Coelho <coelho@ti.com>
|
||||
---
|
||||
(limited to 'drivers/net/wireless/ti/wlcore/boot.c')
|
||||
|
||||
diff --git a/drivers/net/wireless/ti/wlcore/boot.c b/drivers/net/wireless/ti/wlcore/boot.c
|
||||
index 2c57246..b58ae5f 100644
|
||||
--- a/drivers/net/wireless/ti/wlcore/boot.c
|
||||
+++ b/drivers/net/wireless/ti/wlcore/boot.c
|
||||
@@ -84,7 +84,8 @@ out:
|
||||
static int wlcore_validate_fw_ver(struct wl1271 *wl)
|
||||
{
|
||||
unsigned int *fw_ver = wl->chip.fw_ver;
|
||||
- unsigned int *min_ver = wl->min_fw_ver;
|
||||
+ unsigned int *min_ver = (wl->fw_type == WL12XX_FW_TYPE_NORMAL) ?
|
||||
+ wl->min_sr_fw_ver : wl->min_mr_fw_ver;
|
||||
char min_fw_str[32] = "";
|
||||
int i;
|
||||
|
||||
--
|
||||
cgit v0.9.2
|
|
@ -1,33 +0,0 @@
|
|||
From 9646b1346760a0af1035f0c59ba727fca1f5824d Mon Sep 17 00:00:00 2001
|
||||
From: Luciano Coelho <coelho@ti.com>
|
||||
Date: Wed, 12 Dec 2012 08:14:22 +0000
|
||||
Subject: wlcore: use single-role version when verifying the PLT firmware
|
||||
|
||||
The PLT firmware used by wl12xx for calibration always has the same
|
||||
version number as the single-role firmware.
|
||||
|
||||
Currntly the driver rejects the PLT firmware since anything that is
|
||||
not single-role uses the multi-role version. Fix this by using the
|
||||
single-role version for everything except multi-role.
|
||||
|
||||
Signed-off-by: Luciano Coelho <coelho@ti.com>
|
||||
---
|
||||
(limited to 'drivers/net/wireless/ti/wlcore/boot.c')
|
||||
|
||||
diff --git a/drivers/net/wireless/ti/wlcore/boot.c b/drivers/net/wireless/ti/wlcore/boot.c
|
||||
index b58ae5f..77752b0 100644
|
||||
--- a/drivers/net/wireless/ti/wlcore/boot.c
|
||||
+++ b/drivers/net/wireless/ti/wlcore/boot.c
|
||||
@@ -84,8 +84,8 @@ out:
|
||||
static int wlcore_validate_fw_ver(struct wl1271 *wl)
|
||||
{
|
||||
unsigned int *fw_ver = wl->chip.fw_ver;
|
||||
- unsigned int *min_ver = (wl->fw_type == WL12XX_FW_TYPE_NORMAL) ?
|
||||
- wl->min_sr_fw_ver : wl->min_mr_fw_ver;
|
||||
+ unsigned int *min_ver = (wl->fw_type == WL12XX_FW_TYPE_MULTI) ?
|
||||
+ wl->min_mr_fw_ver : wl->min_sr_fw_ver;
|
||||
char min_fw_str[32] = "";
|
||||
int i;
|
||||
|
||||
--
|
||||
cgit v0.9.2
|
|
@ -0,0 +1,155 @@
|
|||
diff --git a/drivers/net/wireless/ti/wl12xx/main.c b/drivers/net/wireless/ti/wl12xx/main.c
|
||||
index dadf1db..0b11029 100644
|
||||
--- a/drivers/net/wireless/ti/wl12xx/main.c
|
||||
+++ b/drivers/net/wireless/ti/wl12xx/main.c
|
||||
@@ -601,7 +601,7 @@ static int wl127x_prepare_read(struct wl1271 *wl, u32 rx_desc, u32 len)
|
||||
{
|
||||
int ret;
|
||||
|
||||
- if (wl->chip.id != CHIP_ID_1283_PG20) {
|
||||
+ if (wl->chip.id != CHIP_ID_128X_PG20) {
|
||||
struct wl1271_acx_mem_map *wl_mem_map = wl->target_mem_map;
|
||||
struct wl127x_rx_mem_pool_addr rx_mem_addr;
|
||||
|
||||
@@ -631,7 +631,7 @@ static int wl12xx_identify_chip(struct wl1271 *wl)
|
||||
int ret = 0;
|
||||
|
||||
switch (wl->chip.id) {
|
||||
- case CHIP_ID_1271_PG10:
|
||||
+ case CHIP_ID_127X_PG10:
|
||||
wl1271_warning("chip id 0x%x (1271 PG10) support is obsolete",
|
||||
wl->chip.id);
|
||||
|
||||
@@ -651,7 +651,7 @@ static int wl12xx_identify_chip(struct wl1271 *wl)
|
||||
WL127X_MINOR_VER);
|
||||
break;
|
||||
|
||||
- case CHIP_ID_1271_PG20:
|
||||
+ case CHIP_ID_127X_PG20:
|
||||
wl1271_debug(DEBUG_BOOT, "chip id 0x%x (1271 PG20)",
|
||||
wl->chip.id);
|
||||
|
||||
@@ -672,7 +672,7 @@ static int wl12xx_identify_chip(struct wl1271 *wl)
|
||||
WL127X_MINOR_VER);
|
||||
break;
|
||||
|
||||
- case CHIP_ID_1283_PG20:
|
||||
+ case CHIP_ID_128X_PG20:
|
||||
wl1271_debug(DEBUG_BOOT, "chip id 0x%x (1283 PG20)",
|
||||
wl->chip.id);
|
||||
wl->plt_fw_name = WL128X_PLT_FW_NAME;
|
||||
@@ -688,7 +688,7 @@ static int wl12xx_identify_chip(struct wl1271 *wl)
|
||||
WL128X_MAJOR_VER, WL128X_SUBTYPE_VER,
|
||||
WL128X_MINOR_VER);
|
||||
break;
|
||||
- case CHIP_ID_1283_PG10:
|
||||
+ case CHIP_ID_128X_PG10:
|
||||
default:
|
||||
wl1271_warning("unsupported chip id: 0x%x", wl->chip.id);
|
||||
ret = -ENODEV;
|
||||
@@ -1067,7 +1067,7 @@ static int wl12xx_pre_boot(struct wl1271 *wl)
|
||||
u32 clk;
|
||||
int selected_clock = -1;
|
||||
|
||||
- if (wl->chip.id == CHIP_ID_1283_PG20) {
|
||||
+ if (wl->chip.id == CHIP_ID_128X_PG20) {
|
||||
ret = wl128x_boot_clk(wl, &selected_clock);
|
||||
if (ret < 0)
|
||||
goto out;
|
||||
@@ -1098,7 +1098,7 @@ static int wl12xx_pre_boot(struct wl1271 *wl)
|
||||
|
||||
wl1271_debug(DEBUG_BOOT, "clk2 0x%x", clk);
|
||||
|
||||
- if (wl->chip.id == CHIP_ID_1283_PG20)
|
||||
+ if (wl->chip.id == CHIP_ID_128X_PG20)
|
||||
clk |= ((selected_clock & 0x3) << 1) << 4;
|
||||
else
|
||||
clk |= (priv->ref_clock << 1) << 4;
|
||||
@@ -1152,7 +1152,7 @@ static int wl12xx_pre_upload(struct wl1271 *wl)
|
||||
/* WL1271: The reference driver skips steps 7 to 10 (jumps directly
|
||||
* to upload_fw) */
|
||||
|
||||
- if (wl->chip.id == CHIP_ID_1283_PG20) {
|
||||
+ if (wl->chip.id == CHIP_ID_128X_PG20) {
|
||||
ret = wl12xx_top_reg_write(wl, SDIO_IO_DS, HCI_IO_DS_6MA);
|
||||
if (ret < 0)
|
||||
goto out;
|
||||
@@ -1261,7 +1261,7 @@ static void
|
||||
wl12xx_set_tx_desc_blocks(struct wl1271 *wl, struct wl1271_tx_hw_descr *desc,
|
||||
u32 blks, u32 spare_blks)
|
||||
{
|
||||
- if (wl->chip.id == CHIP_ID_1283_PG20) {
|
||||
+ if (wl->chip.id == CHIP_ID_128X_PG20) {
|
||||
desc->wl128x_mem.total_mem_blocks = blks;
|
||||
} else {
|
||||
desc->wl127x_mem.extra_blocks = spare_blks;
|
||||
@@ -1275,7 +1275,7 @@ wl12xx_set_tx_desc_data_len(struct wl1271 *wl, struct wl1271_tx_hw_descr *desc,
|
||||
{
|
||||
u32 aligned_len = wlcore_calc_packet_alignment(wl, skb->len);
|
||||
|
||||
- if (wl->chip.id == CHIP_ID_1283_PG20) {
|
||||
+ if (wl->chip.id == CHIP_ID_128X_PG20) {
|
||||
desc->wl128x_mem.extra_bytes = aligned_len - skb->len;
|
||||
desc->length = cpu_to_le16(aligned_len >> 2);
|
||||
|
||||
@@ -1339,7 +1339,7 @@ static int wl12xx_hw_init(struct wl1271 *wl)
|
||||
{
|
||||
int ret;
|
||||
|
||||
- if (wl->chip.id == CHIP_ID_1283_PG20) {
|
||||
+ if (wl->chip.id == CHIP_ID_128X_PG20) {
|
||||
u32 host_cfg_bitmap = HOST_IF_CFG_RX_FIFO_ENABLE;
|
||||
|
||||
ret = wl128x_cmd_general_parms(wl);
|
||||
@@ -1426,7 +1426,7 @@ static bool wl12xx_mac_in_fuse(struct wl1271 *wl)
|
||||
bool supported = false;
|
||||
u8 major, minor;
|
||||
|
||||
- if (wl->chip.id == CHIP_ID_1283_PG20) {
|
||||
+ if (wl->chip.id == CHIP_ID_128X_PG20) {
|
||||
major = WL128X_PG_GET_MAJOR(wl->hw_pg_ver);
|
||||
minor = WL128X_PG_GET_MINOR(wl->hw_pg_ver);
|
||||
|
||||
@@ -1482,7 +1482,7 @@ static int wl12xx_get_pg_ver(struct wl1271 *wl, s8 *ver)
|
||||
u16 die_info;
|
||||
int ret;
|
||||
|
||||
- if (wl->chip.id == CHIP_ID_1283_PG20)
|
||||
+ if (wl->chip.id == CHIP_ID_128X_PG20)
|
||||
ret = wl12xx_top_reg_read(wl, WL128X_REG_FUSE_DATA_2_1,
|
||||
&die_info);
|
||||
else
|
||||
diff --git a/drivers/net/wireless/ti/wl12xx/wl12xx.h b/drivers/net/wireless/ti/wl12xx/wl12xx.h
|
||||
index 7182bbf..634ad00 100644
|
||||
--- a/drivers/net/wireless/ti/wl12xx/wl12xx.h
|
||||
+++ b/drivers/net/wireless/ti/wl12xx/wl12xx.h
|
||||
@@ -24,6 +24,12 @@
|
||||
|
||||
#include "conf.h"
|
||||
|
||||
+/* WiLink 6/7 chip IDs */
|
||||
+#define CHIP_ID_127X_PG10 (0x04030101)
|
||||
+#define CHIP_ID_127X_PG20 (0x04030111)
|
||||
+#define CHIP_ID_128X_PG10 (0x05030101)
|
||||
+#define CHIP_ID_128X_PG20 (0x05030111)
|
||||
+
|
||||
/* minimum FW required for driver for wl127x */
|
||||
#define WL127X_CHIP_VER 6
|
||||
#define WL127X_IFTYPE_VER 3
|
||||
diff --git a/drivers/net/wireless/ti/wlcore/wlcore.h b/drivers/net/wireless/ti/wlcore/wlcore.h
|
||||
index 68584aa..96af4a1 100644
|
||||
--- a/drivers/net/wireless/ti/wlcore/wlcore.h
|
||||
+++ b/drivers/net/wireless/ti/wlcore/wlcore.h
|
||||
@@ -477,12 +477,6 @@ wlcore_set_min_fw_ver(struct wl1271 *wl, unsigned int chip,
|
||||
/* separate probe response templates for one-shot and sched scans */
|
||||
#define WLCORE_QUIRK_DUAL_PROBE_TMPL BIT(10)
|
||||
|
||||
-/* TODO: move to the lower drivers when all usages are abstracted */
|
||||
-#define CHIP_ID_1271_PG10 (0x4030101)
|
||||
-#define CHIP_ID_1271_PG20 (0x4030111)
|
||||
-#define CHIP_ID_1283_PG10 (0x05030101)
|
||||
-#define CHIP_ID_1283_PG20 (0x05030111)
|
||||
-
|
||||
/* TODO: move all these common registers and values elsewhere */
|
||||
#define HW_ACCESS_ELP_CTRL_REG 0x1FFFC
|
||||
|
|
@ -0,0 +1,57 @@
|
|||
diff --git a/drivers/net/wireless/ti/wl12xx/main.c b/drivers/net/wireless/ti/wl12xx/main.c
|
||||
index 0b11029..cadd7f3 100644
|
||||
--- a/drivers/net/wireless/ti/wl12xx/main.c
|
||||
+++ b/drivers/net/wireless/ti/wl12xx/main.c
|
||||
@@ -1394,22 +1394,6 @@ static u32 wl12xx_sta_get_ap_rate_mask(struct wl1271 *wl,
|
||||
return wlvif->rate_set;
|
||||
}
|
||||
|
||||
-static int wl12xx_identify_fw(struct wl1271 *wl)
|
||||
-{
|
||||
- unsigned int *fw_ver = wl->chip.fw_ver;
|
||||
-
|
||||
- /* Only new station firmwares support routing fw logs to the host */
|
||||
- if ((fw_ver[FW_VER_IF_TYPE] == FW_VER_IF_TYPE_STA) &&
|
||||
- (fw_ver[FW_VER_MINOR] < FW_VER_MINOR_FWLOG_STA_MIN))
|
||||
- wl->quirks |= WLCORE_QUIRK_FWLOG_NOT_IMPLEMENTED;
|
||||
-
|
||||
- /* This feature is not yet supported for AP mode */
|
||||
- if (fw_ver[FW_VER_IF_TYPE] == FW_VER_IF_TYPE_AP)
|
||||
- wl->quirks |= WLCORE_QUIRK_FWLOG_NOT_IMPLEMENTED;
|
||||
-
|
||||
- return 0;
|
||||
-}
|
||||
-
|
||||
static void wl12xx_conf_init(struct wl1271 *wl)
|
||||
{
|
||||
struct wl12xx_priv *priv = wl->priv;
|
||||
@@ -1594,7 +1578,6 @@ static int wl12xx_setup(struct wl1271 *wl);
|
||||
static struct wlcore_ops wl12xx_ops = {
|
||||
.setup = wl12xx_setup,
|
||||
.identify_chip = wl12xx_identify_chip,
|
||||
- .identify_fw = wl12xx_identify_fw,
|
||||
.boot = wl12xx_boot,
|
||||
.plt_init = wl12xx_plt_init,
|
||||
.trigger_cmd = wl12xx_trigger_cmd,
|
||||
diff --git a/drivers/net/wireless/ti/wlcore/wlcore_i.h b/drivers/net/wireless/ti/wlcore/wlcore_i.h
|
||||
index 6678d4b..dbbfca1 100644
|
||||
--- a/drivers/net/wireless/ti/wlcore/wlcore_i.h
|
||||
+++ b/drivers/net/wireless/ti/wlcore/wlcore_i.h
|
||||
@@ -109,17 +109,6 @@ enum {
|
||||
NUM_FW_VER
|
||||
};
|
||||
|
||||
-#define FW_VER_CHIP_WL127X 6
|
||||
-#define FW_VER_CHIP_WL128X 7
|
||||
-
|
||||
-#define FW_VER_IF_TYPE_STA 1
|
||||
-#define FW_VER_IF_TYPE_AP 2
|
||||
-
|
||||
-#define FW_VER_MINOR_1_SPARE_STA_MIN 58
|
||||
-#define FW_VER_MINOR_1_SPARE_AP_MIN 47
|
||||
-
|
||||
-#define FW_VER_MINOR_FWLOG_STA_MIN 70
|
||||
-
|
||||
struct wl1271_chip {
|
||||
u32 id;
|
||||
char fw_ver_str[ETHTOOL_BUSINFO_LEN];
|
|
@ -1,26 +1,5 @@
|
|||
From af4e94c56581b446b2010854a983ef722ad9ed1f Mon Sep 17 00:00:00 2001
|
||||
From: Luciano Coelho <coelho@ti.com>
|
||||
Date: Tue, 27 Nov 2012 13:51:58 +0000
|
||||
Subject: wlcore: change way of checking the firmware version
|
||||
|
||||
The firmwares version string contain 5 integers. We used to consider
|
||||
all the digits (except for the first one, which indicates the chip) as
|
||||
linearly increasing version numbers. This is not correct, because
|
||||
some of the integers indicate type of firmware (eg. single-role
|
||||
vs. multi-role) or the internal project it was created for.
|
||||
|
||||
Besides, this varies a bit from chip to chip, so we need to make the
|
||||
firmware version checks more flexible (eg. allow the lower driver to
|
||||
ignore some of the integers). Additionally, we need to change the
|
||||
code so that we only check for a linearly increasing number on the
|
||||
fields where this actually makes sense.
|
||||
|
||||
Signed-off-by: Luciano Coelho <coelho@ti.com>
|
||||
---
|
||||
(limited to 'drivers/net/wireless/ti/wlcore/boot.c')
|
||||
|
||||
diff --git a/drivers/net/wireless/ti/wlcore/boot.c b/drivers/net/wireless/ti/wlcore/boot.c
|
||||
index 230c765..2c57246 100644
|
||||
index 375ea57..be216b8 100644
|
||||
--- a/drivers/net/wireless/ti/wlcore/boot.c
|
||||
+++ b/drivers/net/wireless/ti/wlcore/boot.c
|
||||
@@ -85,46 +85,55 @@ static int wlcore_validate_fw_ver(struct wl1271 *wl)
|
||||
|
@ -102,5 +81,17 @@ index 230c765..2c57246 100644
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
--
|
||||
cgit v0.9.2
|
||||
diff --git a/drivers/net/wireless/ti/wlcore/wlcore.h b/drivers/net/wireless/ti/wlcore/wlcore.h
|
||||
index 96af4a1..6184f53 100644
|
||||
--- a/drivers/net/wireless/ti/wlcore/wlcore.h
|
||||
+++ b/drivers/net/wireless/ti/wlcore/wlcore.h
|
||||
@@ -430,6 +430,9 @@ wlcore_set_ht_cap(struct wl1271 *wl, enum ieee80211_band band,
|
||||
memcpy(&wl->ht_cap[band], ht_cap, sizeof(*ht_cap));
|
||||
}
|
||||
|
||||
+/* Tell wlcore not to care about this element when checking the version */
|
||||
+#define WLCORE_FW_VER_IGNORE -1
|
||||
+
|
||||
static inline void
|
||||
wlcore_set_min_fw_ver(struct wl1271 *wl, unsigned int chip,
|
||||
unsigned int iftype, unsigned int major,
|
|
@ -0,0 +1,25 @@
|
|||
diff --git a/drivers/net/wireless/ti/wl12xx/wl12xx.h b/drivers/net/wireless/ti/wl12xx/wl12xx.h
|
||||
index 634ad00..310df52 100644
|
||||
--- a/drivers/net/wireless/ti/wl12xx/wl12xx.h
|
||||
+++ b/drivers/net/wireless/ti/wl12xx/wl12xx.h
|
||||
@@ -32,16 +32,16 @@
|
||||
|
||||
/* minimum FW required for driver for wl127x */
|
||||
#define WL127X_CHIP_VER 6
|
||||
-#define WL127X_IFTYPE_VER 3
|
||||
+#define WL127X_IFTYPE_VER WLCORE_FW_VER_IGNORE
|
||||
#define WL127X_MAJOR_VER 10
|
||||
-#define WL127X_SUBTYPE_VER 2
|
||||
+#define WL127X_SUBTYPE_VER WLCORE_FW_VER_IGNORE
|
||||
#define WL127X_MINOR_VER 115
|
||||
|
||||
/* minimum FW required for driver for wl128x */
|
||||
#define WL128X_CHIP_VER 7
|
||||
-#define WL128X_IFTYPE_VER 3
|
||||
+#define WL128X_IFTYPE_VER WLCORE_FW_VER_IGNORE
|
||||
#define WL128X_MAJOR_VER 10
|
||||
-#define WL128X_SUBTYPE_VER 2
|
||||
+#define WL128X_SUBTYPE_VER WLCORE_FW_VER_IGNORE
|
||||
#define WL128X_MINOR_VER 115
|
||||
|
||||
#define WL12XX_AGGR_BUFFER_SIZE (4 * PAGE_SIZE)
|
|
@ -0,0 +1,176 @@
|
|||
diff --git a/drivers/net/wireless/ti/wl12xx/main.c b/drivers/net/wireless/ti/wl12xx/main.c
|
||||
index cadd7f3..31f8367 100644
|
||||
--- a/drivers/net/wireless/ti/wl12xx/main.c
|
||||
+++ b/drivers/net/wireless/ti/wl12xx/main.c
|
||||
@@ -646,9 +646,11 @@ static int wl12xx_identify_chip(struct wl1271 *wl)
|
||||
/* read data preparation is only needed by wl127x */
|
||||
wl->ops->prepare_read = wl127x_prepare_read;
|
||||
|
||||
- wlcore_set_min_fw_ver(wl, WL127X_CHIP_VER, WL127X_IFTYPE_VER,
|
||||
- WL127X_MAJOR_VER, WL127X_SUBTYPE_VER,
|
||||
- WL127X_MINOR_VER);
|
||||
+ wlcore_set_min_fw_ver(wl, WL127X_CHIP_VER,
|
||||
+ WL127X_IFTYPE_SR_VER, WL127X_MAJOR_SR_VER,
|
||||
+ WL127X_SUBTYPE_SR_VER, WL127X_MINOR_SR_VER,
|
||||
+ WL127X_IFTYPE_MR_VER, WL127X_MAJOR_MR_VER,
|
||||
+ WL127X_SUBTYPE_MR_VER, WL127X_MINOR_MR_VER);
|
||||
break;
|
||||
|
||||
case CHIP_ID_127X_PG20:
|
||||
@@ -667,9 +669,11 @@ static int wl12xx_identify_chip(struct wl1271 *wl)
|
||||
/* read data preparation is only needed by wl127x */
|
||||
wl->ops->prepare_read = wl127x_prepare_read;
|
||||
|
||||
- wlcore_set_min_fw_ver(wl, WL127X_CHIP_VER, WL127X_IFTYPE_VER,
|
||||
- WL127X_MAJOR_VER, WL127X_SUBTYPE_VER,
|
||||
- WL127X_MINOR_VER);
|
||||
+ wlcore_set_min_fw_ver(wl, WL127X_CHIP_VER,
|
||||
+ WL127X_IFTYPE_SR_VER, WL127X_MAJOR_SR_VER,
|
||||
+ WL127X_SUBTYPE_SR_VER, WL127X_MINOR_SR_VER,
|
||||
+ WL127X_IFTYPE_MR_VER, WL127X_MAJOR_MR_VER,
|
||||
+ WL127X_SUBTYPE_MR_VER, WL127X_MINOR_MR_VER);
|
||||
break;
|
||||
|
||||
case CHIP_ID_128X_PG20:
|
||||
@@ -684,9 +688,11 @@ static int wl12xx_identify_chip(struct wl1271 *wl)
|
||||
WLCORE_QUIRK_DUAL_PROBE_TMPL |
|
||||
WLCORE_QUIRK_TKIP_HEADER_SPACE;
|
||||
|
||||
- wlcore_set_min_fw_ver(wl, WL128X_CHIP_VER, WL128X_IFTYPE_VER,
|
||||
- WL128X_MAJOR_VER, WL128X_SUBTYPE_VER,
|
||||
- WL128X_MINOR_VER);
|
||||
+ wlcore_set_min_fw_ver(wl, WL128X_CHIP_VER,
|
||||
+ WL128X_IFTYPE_SR_VER, WL128X_MAJOR_SR_VER,
|
||||
+ WL128X_SUBTYPE_SR_VER, WL128X_MINOR_SR_VER,
|
||||
+ WL128X_IFTYPE_MR_VER, WL128X_MAJOR_MR_VER,
|
||||
+ WL128X_SUBTYPE_MR_VER, WL128X_MINOR_MR_VER);
|
||||
break;
|
||||
case CHIP_ID_128X_PG10:
|
||||
default:
|
||||
diff --git a/drivers/net/wireless/ti/wl12xx/wl12xx.h b/drivers/net/wireless/ti/wl12xx/wl12xx.h
|
||||
index 310df52..a07be5e 100644
|
||||
--- a/drivers/net/wireless/ti/wl12xx/wl12xx.h
|
||||
+++ b/drivers/net/wireless/ti/wl12xx/wl12xx.h
|
||||
@@ -30,19 +30,31 @@
|
||||
#define CHIP_ID_128X_PG10 (0x05030101)
|
||||
#define CHIP_ID_128X_PG20 (0x05030111)
|
||||
|
||||
-/* minimum FW required for driver for wl127x */
|
||||
+/* FW chip version for wl127x */
|
||||
#define WL127X_CHIP_VER 6
|
||||
-#define WL127X_IFTYPE_VER WLCORE_FW_VER_IGNORE
|
||||
-#define WL127X_MAJOR_VER 10
|
||||
-#define WL127X_SUBTYPE_VER WLCORE_FW_VER_IGNORE
|
||||
-#define WL127X_MINOR_VER 115
|
||||
+/* minimum single-role FW version for wl127x */
|
||||
+#define WL127X_IFTYPE_SR_VER 3
|
||||
+#define WL127X_MAJOR_SR_VER 10
|
||||
+#define WL127X_SUBTYPE_SR_VER WLCORE_FW_VER_IGNORE
|
||||
+#define WL127X_MINOR_SR_VER 115
|
||||
+/* minimum multi-role FW version for wl127x */
|
||||
+#define WL127X_IFTYPE_MR_VER 5
|
||||
+#define WL127X_MAJOR_MR_VER 7
|
||||
+#define WL127X_SUBTYPE_MR_VER WLCORE_FW_VER_IGNORE
|
||||
+#define WL127X_MINOR_MR_VER 115
|
||||
|
||||
-/* minimum FW required for driver for wl128x */
|
||||
+/* FW chip version for wl128x */
|
||||
#define WL128X_CHIP_VER 7
|
||||
-#define WL128X_IFTYPE_VER WLCORE_FW_VER_IGNORE
|
||||
-#define WL128X_MAJOR_VER 10
|
||||
-#define WL128X_SUBTYPE_VER WLCORE_FW_VER_IGNORE
|
||||
-#define WL128X_MINOR_VER 115
|
||||
+/* minimum single-role FW version for wl128x */
|
||||
+#define WL128X_IFTYPE_SR_VER 3
|
||||
+#define WL128X_MAJOR_SR_VER 10
|
||||
+#define WL128X_SUBTYPE_SR_VER WLCORE_FW_VER_IGNORE
|
||||
+#define WL128X_MINOR_SR_VER 115
|
||||
+/* minimum multi-role FW version for wl128x */
|
||||
+#define WL128X_IFTYPE_MR_VER 5
|
||||
+#define WL128X_MAJOR_MR_VER 7
|
||||
+#define WL128X_SUBTYPE_MR_VER WLCORE_FW_VER_IGNORE
|
||||
+#define WL128X_MINOR_MR_VER 42
|
||||
|
||||
#define WL12XX_AGGR_BUFFER_SIZE (4 * PAGE_SIZE)
|
||||
|
||||
diff --git a/drivers/net/wireless/ti/wl18xx/main.c b/drivers/net/wireless/ti/wl18xx/main.c
|
||||
index a39682a..5864ef0 100644
|
||||
--- a/drivers/net/wireless/ti/wl18xx/main.c
|
||||
+++ b/drivers/net/wireless/ti/wl18xx/main.c
|
||||
@@ -614,9 +614,11 @@ static int wl18xx_identify_chip(struct wl1271 *wl)
|
||||
WLCORE_QUIRK_NO_SCHED_SCAN_WHILE_CONN |
|
||||
WLCORE_QUIRK_TX_PAD_LAST_FRAME;
|
||||
|
||||
- wlcore_set_min_fw_ver(wl, WL18XX_CHIP_VER, WL18XX_IFTYPE_VER,
|
||||
- WL18XX_MAJOR_VER, WL18XX_SUBTYPE_VER,
|
||||
- WL18XX_MINOR_VER);
|
||||
+ wlcore_set_min_fw_ver(wl, WL18XX_CHIP_VER,
|
||||
+ WL18XX_IFTYPE_VER, WL18XX_MAJOR_VER,
|
||||
+ WL18XX_SUBTYPE_VER, WL18XX_MINOR_VER,
|
||||
+ /* there's no separate multi-role FW */
|
||||
+ 0, 0, 0, 0);
|
||||
break;
|
||||
case CHIP_ID_185x_PG10:
|
||||
wl1271_warning("chip id 0x%x (185x PG10) is deprecated",
|
||||
diff --git a/drivers/net/wireless/ti/wlcore/boot.c b/drivers/net/wireless/ti/wlcore/boot.c
|
||||
index be216b8..b92e572 100644
|
||||
--- a/drivers/net/wireless/ti/wlcore/boot.c
|
||||
+++ b/drivers/net/wireless/ti/wlcore/boot.c
|
||||
@@ -84,7 +84,8 @@ out:
|
||||
static int wlcore_validate_fw_ver(struct wl1271 *wl)
|
||||
{
|
||||
unsigned int *fw_ver = wl->chip.fw_ver;
|
||||
- unsigned int *min_ver = wl->min_fw_ver;
|
||||
+ unsigned int *min_ver = (wl->fw_type == WL12XX_FW_TYPE_NORMAL) ?
|
||||
+ wl->min_sr_fw_ver : wl->min_mr_fw_ver;
|
||||
char min_fw_str[32] = "";
|
||||
int i;
|
||||
|
||||
diff --git a/drivers/net/wireless/ti/wlcore/wlcore.h b/drivers/net/wireless/ti/wlcore/wlcore.h
|
||||
index 6184f53..fc6ba49 100644
|
||||
--- a/drivers/net/wireless/ti/wlcore/wlcore.h
|
||||
+++ b/drivers/net/wireless/ti/wlcore/wlcore.h
|
||||
@@ -408,8 +408,11 @@ struct wl1271 {
|
||||
/* the number of allocated MAC addresses in this chip */
|
||||
int num_mac_addr;
|
||||
|
||||
- /* the minimum FW version required for the driver to work */
|
||||
- unsigned int min_fw_ver[NUM_FW_VER];
|
||||
+ /* minimum FW version required for the driver to work in single-role */
|
||||
+ unsigned int min_sr_fw_ver[NUM_FW_VER];
|
||||
+
|
||||
+ /* minimum FW version required for the driver to work in multi-role */
|
||||
+ unsigned int min_mr_fw_ver[NUM_FW_VER];
|
||||
|
||||
struct completion nvs_loading_complete;
|
||||
};
|
||||
@@ -435,14 +438,22 @@ wlcore_set_ht_cap(struct wl1271 *wl, enum ieee80211_band band,
|
||||
|
||||
static inline void
|
||||
wlcore_set_min_fw_ver(struct wl1271 *wl, unsigned int chip,
|
||||
- unsigned int iftype, unsigned int major,
|
||||
- unsigned int subtype, unsigned int minor)
|
||||
+ unsigned int iftype_sr, unsigned int major_sr,
|
||||
+ unsigned int subtype_sr, unsigned int minor_sr,
|
||||
+ unsigned int iftype_mr, unsigned int major_mr,
|
||||
+ unsigned int subtype_mr, unsigned int minor_mr)
|
||||
{
|
||||
- wl->min_fw_ver[FW_VER_CHIP] = chip;
|
||||
- wl->min_fw_ver[FW_VER_IF_TYPE] = iftype;
|
||||
- wl->min_fw_ver[FW_VER_MAJOR] = major;
|
||||
- wl->min_fw_ver[FW_VER_SUBTYPE] = subtype;
|
||||
- wl->min_fw_ver[FW_VER_MINOR] = minor;
|
||||
+ wl->min_sr_fw_ver[FW_VER_CHIP] = chip;
|
||||
+ wl->min_sr_fw_ver[FW_VER_IF_TYPE] = iftype_sr;
|
||||
+ wl->min_sr_fw_ver[FW_VER_MAJOR] = major_sr;
|
||||
+ wl->min_sr_fw_ver[FW_VER_SUBTYPE] = subtype_sr;
|
||||
+ wl->min_sr_fw_ver[FW_VER_MINOR] = minor_sr;
|
||||
+
|
||||
+ wl->min_mr_fw_ver[FW_VER_CHIP] = chip;
|
||||
+ wl->min_mr_fw_ver[FW_VER_IF_TYPE] = iftype_mr;
|
||||
+ wl->min_mr_fw_ver[FW_VER_MAJOR] = major_mr;
|
||||
+ wl->min_mr_fw_ver[FW_VER_SUBTYPE] = subtype_mr;
|
||||
+ wl->min_mr_fw_ver[FW_VER_MINOR] = minor_mr;
|
||||
}
|
||||
|
||||
/* Firmware image load chunk size */
|
|
@ -0,0 +1,13 @@
|
|||
--- drivers/net/wireless/ti/wl18xx/wl18xx.h.orig 2013-06-08 00:09:45.979268733 -0600
|
||||
+++ drivers/net/wireless/ti/wl18xx/wl18xx.h 2013-06-08 00:10:03.334181254 -0600
|
||||
@@ -27,8 +27,8 @@
|
||||
/* minimum FW required for driver */
|
||||
#define WL18XX_CHIP_VER 8
|
||||
#define WL18XX_IFTYPE_VER 5
|
||||
-#define WL18XX_MAJOR_VER 0
|
||||
-#define WL18XX_SUBTYPE_VER 0
|
||||
+#define WL18XX_MAJOR_VER WLCORE_FW_VER_IGNORE
|
||||
+#define WL18XX_SUBTYPE_VER WLCORE_FW_VER_IGNORE
|
||||
#define WL18XX_MINOR_VER 28
|
||||
|
||||
#define WL18XX_CMD_MAX_SIZE 740
|
|
@ -25,18 +25,26 @@ source=("http://www.kernel.org/pub/linux/kernel/v3.0/linux-${_basekernel}.tar.xz
|
|||
'config'
|
||||
'change-default-console-loglevel.patch'
|
||||
'aufs3-3.7.patch.xz'
|
||||
'01-wifi.patch'
|
||||
'02-wifi.patch'
|
||||
'03-wifi.patch')
|
||||
'1-6-wlcore-wl12xx-move-wl12xx-chip-ID-defines-to-the-lower-driver.patch'
|
||||
'2-6-wlcore-wl12xx-remove-deprecated-FW-version-check.patch'
|
||||
'3-6-wlcore-change-way-of-checking-the-firmware-version.patch'
|
||||
'4-6-wl12xx-ignore-some-of-the-firmware-version-fields.patch'
|
||||
'5-6-wlcore-wl12xx-wl18xx-verify-multi-role-and-single-role-fw-versions.patch'
|
||||
'6-6-wl18xx-ignore-irrelevant-firmware-version-fields.patch'
|
||||
'wl18xx.diff')
|
||||
md5sums=('21223369d682bcf44bcdfe1521095983'
|
||||
'5545033e0ce84a7f343f79530ebe94ab'
|
||||
'd4b5402d8398f2a39d893a00e6678d20'
|
||||
'a024158aa219adabf1c03e0587529c28'
|
||||
'9d3c56a4b999c8bfbd4018089a62f662'
|
||||
'961e19a119443158f104a68ea4d0d9f1'
|
||||
'6fec5a517a4a583d36dc39d5615750d3'
|
||||
'df0fd551867cd8b3735bc0c52048135c'
|
||||
'31f0326982d9f2af42f58e980c56af5e')
|
||||
'58475df6313a9a26b024b2aa808ad000'
|
||||
'87a7a995733f337d0e481547068dda28'
|
||||
'130c8f9f2e6577080c445f091588a08d'
|
||||
'bfc2c5beb7f920cd39a1a54c3f1fa5a4'
|
||||
'aa9076eac94335c8f3490eb6a54c67f6'
|
||||
'0889fb9192f8471028688aec66bb47b9'
|
||||
'687cb8f3469e7397715e4c174dd23868')
|
||||
|
||||
build() {
|
||||
cd "${srcdir}/linux-${_basekernel}"
|
||||
|
@ -54,9 +62,13 @@ build() {
|
|||
# ALARM patches
|
||||
git apply "${srcdir}/patch-${pkgver}-${rcnrel}.diff"
|
||||
patch -Np1 -F10 -i "${srcdir}/aufs3-3.7.patch"
|
||||
patch -Np1 -i "${srcdir}/01-wifi.patch"
|
||||
patch -Np1 -i "${srcdir}/02-wifi.patch"
|
||||
patch -Np1 -i "${srcdir}/03-wifi.patch"
|
||||
patch -Np1 -i "${srcdir}/1-6-wlcore-wl12xx-move-wl12xx-chip-ID-defines-to-the-lower-driver.patch"
|
||||
patch -Np1 -i "${srcdir}/2-6-wlcore-wl12xx-remove-deprecated-FW-version-check.patch"
|
||||
patch -Np1 -i "${srcdir}/3-6-wlcore-change-way-of-checking-the-firmware-version.patch"
|
||||
patch -Np1 -i "${srcdir}/4-6-wl12xx-ignore-some-of-the-firmware-version-fields.patch"
|
||||
patch -Np1 -i "${srcdir}/5-6-wlcore-wl12xx-wl18xx-verify-multi-role-and-single-role-fw-versions.patch"
|
||||
patch -Np1 -i "${srcdir}/wl18xx.diff"
|
||||
patch -Np0 -i "${srcdir}/6-6-wl18xx-ignore-irrelevant-firmware-version-fields.patch"
|
||||
|
||||
cat "${srcdir}/config" > ./.config
|
||||
|
||||
|
|
16
core/linux-omap/wl18xx.diff
Normal file
16
core/linux-omap/wl18xx.diff
Normal file
|
@ -0,0 +1,16 @@
|
|||
diff --git a/drivers/net/wireless/ti/wl18xx/wl18xx.h b/drivers/net/wireless/ti/wl18xx/wl18xx.h
|
||||
index 96a1e43..4d295a5 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 2
|
||||
+#define WL18XX_IFTYPE_VER 5
|
||||
#define WL18XX_MAJOR_VER 0
|
||||
#define WL18XX_SUBTYPE_VER 0
|
||||
-#define WL18XX_MINOR_VER 100
|
||||
+#define WL18XX_MINOR_VER 28
|
||||
|
||||
#define WL18XX_CMD_MAX_SIZE 740
|
Loading…
Reference in a new issue