mirror of https://gitee.com/openkylin/linux.git
wl12xx: Check for FW quirks as soon as the FW boots
The FW initialization might depend on the FW revision, so check for any FW quirks right after booting it. Signed-off-by: Ido Yariv <ido@wizery.com> Signed-off-by: Luciano Coelho <coelho@ti.com>
This commit is contained in:
parent
92ef8960ae
commit
842f1a6c71
|
@ -102,6 +102,24 @@ static void wl1271_boot_set_ecpu_ctrl(struct wl1271 *wl, u32 flag)
|
||||||
wl1271_write32(wl, ACX_REG_ECPU_CONTROL, cpu_ctrl);
|
wl1271_write32(wl, ACX_REG_ECPU_CONTROL, cpu_ctrl);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static unsigned int wl12xx_get_fw_ver_quirks(struct wl1271 *wl)
|
||||||
|
{
|
||||||
|
unsigned int quirks = 0;
|
||||||
|
unsigned int *fw_ver = wl->chip.fw_ver;
|
||||||
|
|
||||||
|
/* Only for wl127x */
|
||||||
|
if ((fw_ver[FW_VER_CHIP] == FW_VER_CHIP_WL127X) &&
|
||||||
|
/* Check STA version */
|
||||||
|
(((fw_ver[FW_VER_IF_TYPE] == FW_VER_IF_TYPE_STA) &&
|
||||||
|
(fw_ver[FW_VER_MINOR] < FW_VER_MINOR_1_SPARE_STA_MIN)) ||
|
||||||
|
/* Check AP version */
|
||||||
|
((fw_ver[FW_VER_IF_TYPE] == FW_VER_IF_TYPE_AP) &&
|
||||||
|
(fw_ver[FW_VER_MINOR] < FW_VER_MINOR_1_SPARE_AP_MIN))))
|
||||||
|
quirks |= WL12XX_QUIRK_USE_2_SPARE_BLOCKS;
|
||||||
|
|
||||||
|
return quirks;
|
||||||
|
}
|
||||||
|
|
||||||
static void wl1271_parse_fw_ver(struct wl1271 *wl)
|
static void wl1271_parse_fw_ver(struct wl1271 *wl)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
@ -116,6 +134,9 @@ static void wl1271_parse_fw_ver(struct wl1271 *wl)
|
||||||
memset(wl->chip.fw_ver, 0, sizeof(wl->chip.fw_ver));
|
memset(wl->chip.fw_ver, 0, sizeof(wl->chip.fw_ver));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Check if any quirks are needed with older fw versions */
|
||||||
|
wl->quirks |= wl12xx_get_fw_ver_quirks(wl);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void wl1271_boot_fw_version(struct wl1271 *wl)
|
static void wl1271_boot_fw_version(struct wl1271 *wl)
|
||||||
|
|
|
@ -1251,24 +1251,6 @@ static int wl1271_chip_wakeup(struct wl1271 *wl)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned int wl1271_get_fw_ver_quirks(struct wl1271 *wl)
|
|
||||||
{
|
|
||||||
unsigned int quirks = 0;
|
|
||||||
unsigned int *fw_ver = wl->chip.fw_ver;
|
|
||||||
|
|
||||||
/* Only for wl127x */
|
|
||||||
if ((fw_ver[FW_VER_CHIP] == FW_VER_CHIP_WL127X) &&
|
|
||||||
/* Check STA version */
|
|
||||||
(((fw_ver[FW_VER_IF_TYPE] == FW_VER_IF_TYPE_STA) &&
|
|
||||||
(fw_ver[FW_VER_MINOR] < FW_VER_MINOR_1_SPARE_STA_MIN)) ||
|
|
||||||
/* Check AP version */
|
|
||||||
((fw_ver[FW_VER_IF_TYPE] == FW_VER_IF_TYPE_AP) &&
|
|
||||||
(fw_ver[FW_VER_MINOR] < FW_VER_MINOR_1_SPARE_AP_MIN))))
|
|
||||||
quirks |= WL12XX_QUIRK_USE_2_SPARE_BLOCKS;
|
|
||||||
|
|
||||||
return quirks;
|
|
||||||
}
|
|
||||||
|
|
||||||
int wl1271_plt_start(struct wl1271 *wl)
|
int wl1271_plt_start(struct wl1271 *wl)
|
||||||
{
|
{
|
||||||
int retries = WL1271_BOOT_RETRIES;
|
int retries = WL1271_BOOT_RETRIES;
|
||||||
|
@ -1305,8 +1287,6 @@ int wl1271_plt_start(struct wl1271 *wl)
|
||||||
wl1271_notice("firmware booted in PLT mode (%s)",
|
wl1271_notice("firmware booted in PLT mode (%s)",
|
||||||
wl->chip.fw_ver_str);
|
wl->chip.fw_ver_str);
|
||||||
|
|
||||||
/* Check if any quirks are needed with older fw versions */
|
|
||||||
wl->quirks |= wl1271_get_fw_ver_quirks(wl);
|
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
irq_disable:
|
irq_disable:
|
||||||
|
@ -1794,9 +1774,6 @@ static int wl1271_op_add_interface(struct ieee80211_hw *hw,
|
||||||
strncpy(wiphy->fw_version, wl->chip.fw_ver_str,
|
strncpy(wiphy->fw_version, wl->chip.fw_ver_str,
|
||||||
sizeof(wiphy->fw_version));
|
sizeof(wiphy->fw_version));
|
||||||
|
|
||||||
/* Check if any quirks are needed with older fw versions */
|
|
||||||
wl->quirks |= wl1271_get_fw_ver_quirks(wl);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Now we know if 11a is supported (info from the NVS), so disable
|
* Now we know if 11a is supported (info from the NVS), so disable
|
||||||
* 11a channels if not supported
|
* 11a channels if not supported
|
||||||
|
|
Loading…
Reference in New Issue