ath6kl: fix testmode when fw-2.bin or fw-3.bin is used
Testmode (TCMD and ART) was not enabled when fw-2.bin or fw-3.bin files were available, fix that by fetching testmode file just after the board file but before rest of the firmware files are fetched. I also added testmode field to struct ath6kl and moved the module parameter to core.c. Now all module parameters are grouped in one place. Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
This commit is contained in:
parent
1d2a4456de
commit
5f1127ffba
|
@ -28,11 +28,13 @@ unsigned int debug_mask;
|
||||||
static bool suspend_cutpower;
|
static bool suspend_cutpower;
|
||||||
static unsigned int uart_debug;
|
static unsigned int uart_debug;
|
||||||
static unsigned int ath6kl_p2p;
|
static unsigned int ath6kl_p2p;
|
||||||
|
static unsigned int testmode;
|
||||||
|
|
||||||
module_param(debug_mask, uint, 0644);
|
module_param(debug_mask, uint, 0644);
|
||||||
module_param(suspend_cutpower, bool, 0444);
|
module_param(suspend_cutpower, bool, 0444);
|
||||||
module_param(uart_debug, uint, 0644);
|
module_param(uart_debug, uint, 0644);
|
||||||
module_param(ath6kl_p2p, uint, 0644);
|
module_param(ath6kl_p2p, uint, 0644);
|
||||||
|
module_param(testmode, uint, 0644);
|
||||||
|
|
||||||
int ath6kl_core_init(struct ath6kl *ar)
|
int ath6kl_core_init(struct ath6kl *ar)
|
||||||
{
|
{
|
||||||
|
@ -76,6 +78,8 @@ int ath6kl_core_init(struct ath6kl *ar)
|
||||||
goto err_power_off;
|
goto err_power_off;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ar->testmode = testmode;
|
||||||
|
|
||||||
ret = ath6kl_init_fetch_firmwares(ar);
|
ret = ath6kl_init_fetch_firmwares(ar);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto err_htc_cleanup;
|
goto err_htc_cleanup;
|
||||||
|
|
|
@ -532,6 +532,7 @@ struct ath6kl {
|
||||||
struct wiphy *wiphy;
|
struct wiphy *wiphy;
|
||||||
|
|
||||||
enum ath6kl_state state;
|
enum ath6kl_state state;
|
||||||
|
unsigned int testmode;
|
||||||
|
|
||||||
struct ath6kl_bmi bmi;
|
struct ath6kl_bmi bmi;
|
||||||
const struct ath6kl_hif_ops *hif_ops;
|
const struct ath6kl_hif_ops *hif_ops;
|
||||||
|
|
|
@ -27,10 +27,6 @@
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "hif-ops.h"
|
#include "hif-ops.h"
|
||||||
|
|
||||||
static unsigned int testmode;
|
|
||||||
|
|
||||||
module_param(testmode, uint, 0644);
|
|
||||||
|
|
||||||
static const struct ath6kl_hw hw_list[] = {
|
static const struct ath6kl_hw hw_list[] = {
|
||||||
{
|
{
|
||||||
.id = AR6003_HW_2_0_VERSION,
|
.id = AR6003_HW_2_0_VERSION,
|
||||||
|
@ -731,6 +727,46 @@ static int ath6kl_fetch_otp_file(struct ath6kl *ar)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int ath6kl_fetch_testmode_file(struct ath6kl *ar)
|
||||||
|
{
|
||||||
|
char filename[100];
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if (ar->testmode == 0)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
ath6kl_dbg(ATH6KL_DBG_BOOT, "testmode %d\n", ar->testmode);
|
||||||
|
|
||||||
|
if (ar->testmode == 2) {
|
||||||
|
if (ar->hw.fw.utf == NULL) {
|
||||||
|
ath6kl_warn("testmode 2 not supported\n");
|
||||||
|
return -EOPNOTSUPP;
|
||||||
|
}
|
||||||
|
|
||||||
|
snprintf(filename, sizeof(filename), "%s/%s",
|
||||||
|
ar->hw.fw.dir, ar->hw.fw.utf);
|
||||||
|
} else {
|
||||||
|
if (ar->hw.fw.tcmd == NULL) {
|
||||||
|
ath6kl_warn("testmode 1 not supported\n");
|
||||||
|
return -EOPNOTSUPP;
|
||||||
|
}
|
||||||
|
|
||||||
|
snprintf(filename, sizeof(filename), "%s/%s",
|
||||||
|
ar->hw.fw.dir, ar->hw.fw.tcmd);
|
||||||
|
}
|
||||||
|
|
||||||
|
set_bit(TESTMODE, &ar->flag);
|
||||||
|
|
||||||
|
ret = ath6kl_get_fw(ar, filename, &ar->fw, &ar->fw_len);
|
||||||
|
if (ret) {
|
||||||
|
ath6kl_err("Failed to get testmode %d firmware file %s: %d\n",
|
||||||
|
ar->testmode, filename, ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int ath6kl_fetch_fw_file(struct ath6kl *ar)
|
static int ath6kl_fetch_fw_file(struct ath6kl *ar)
|
||||||
{
|
{
|
||||||
char filename[100];
|
char filename[100];
|
||||||
|
@ -739,31 +775,6 @@ static int ath6kl_fetch_fw_file(struct ath6kl *ar)
|
||||||
if (ar->fw != NULL)
|
if (ar->fw != NULL)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (testmode) {
|
|
||||||
ath6kl_dbg(ATH6KL_DBG_BOOT, "testmode %d\n",
|
|
||||||
testmode);
|
|
||||||
if (testmode == 2) {
|
|
||||||
if (ar->hw.fw.utf == NULL) {
|
|
||||||
ath6kl_warn("testmode 2 not supported\n");
|
|
||||||
return -EOPNOTSUPP;
|
|
||||||
}
|
|
||||||
|
|
||||||
snprintf(filename, sizeof(filename), "%s/%s",
|
|
||||||
ar->hw.fw.dir, ar->hw.fw.utf);
|
|
||||||
} else {
|
|
||||||
if (ar->hw.fw.tcmd == NULL) {
|
|
||||||
ath6kl_warn("testmode 1 not supported\n");
|
|
||||||
return -EOPNOTSUPP;
|
|
||||||
}
|
|
||||||
|
|
||||||
snprintf(filename, sizeof(filename), "%s/%s",
|
|
||||||
ar->hw.fw.dir, ar->hw.fw.tcmd);
|
|
||||||
}
|
|
||||||
set_bit(TESTMODE, &ar->flag);
|
|
||||||
|
|
||||||
goto get_fw;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* FIXME: remove WARN_ON() as we won't support FW API 1 for long */
|
/* FIXME: remove WARN_ON() as we won't support FW API 1 for long */
|
||||||
if (WARN_ON(ar->hw.fw.fw == NULL))
|
if (WARN_ON(ar->hw.fw.fw == NULL))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
@ -771,7 +782,6 @@ static int ath6kl_fetch_fw_file(struct ath6kl *ar)
|
||||||
snprintf(filename, sizeof(filename), "%s/%s",
|
snprintf(filename, sizeof(filename), "%s/%s",
|
||||||
ar->hw.fw.dir, ar->hw.fw.fw);
|
ar->hw.fw.dir, ar->hw.fw.fw);
|
||||||
|
|
||||||
get_fw:
|
|
||||||
ret = ath6kl_get_fw(ar, filename, &ar->fw, &ar->fw_len);
|
ret = ath6kl_get_fw(ar, filename, &ar->fw, &ar->fw_len);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
ath6kl_err("Failed to get firmware file %s: %d\n",
|
ath6kl_err("Failed to get firmware file %s: %d\n",
|
||||||
|
@ -812,7 +822,7 @@ static int ath6kl_fetch_testscript_file(struct ath6kl *ar)
|
||||||
char filename[100];
|
char filename[100];
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (testmode != 2)
|
if (ar->testmode != 2)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (ar->fw_testscript != NULL)
|
if (ar->fw_testscript != NULL)
|
||||||
|
@ -927,6 +937,10 @@ static int ath6kl_fetch_fw_apin(struct ath6kl *ar, const char *name)
|
||||||
ath6kl_dbg(ATH6KL_DBG_BOOT, "found fw image ie (%zd B)\n",
|
ath6kl_dbg(ATH6KL_DBG_BOOT, "found fw image ie (%zd B)\n",
|
||||||
ie_len);
|
ie_len);
|
||||||
|
|
||||||
|
/* in testmode we already might have a fw file */
|
||||||
|
if (ar->fw != NULL)
|
||||||
|
break;
|
||||||
|
|
||||||
ar->fw = kmemdup(data, ie_len, GFP_KERNEL);
|
ar->fw = kmemdup(data, ie_len, GFP_KERNEL);
|
||||||
|
|
||||||
if (ar->fw == NULL) {
|
if (ar->fw == NULL) {
|
||||||
|
@ -1038,6 +1052,10 @@ int ath6kl_init_fetch_firmwares(struct ath6kl *ar)
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
ret = ath6kl_fetch_testmode_file(ar);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
|
||||||
ret = ath6kl_fetch_fw_apin(ar, ATH6KL_FW_API3_FILE);
|
ret = ath6kl_fetch_fw_apin(ar, ATH6KL_FW_API3_FILE);
|
||||||
if (ret == 0) {
|
if (ret == 0) {
|
||||||
ar->fw_api = 3;
|
ar->fw_api = 3;
|
||||||
|
@ -1283,7 +1301,7 @@ static int ath6kl_upload_testscript(struct ath6kl *ar)
|
||||||
u32 address, param;
|
u32 address, param;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (testmode != 2)
|
if (ar->testmode != 2)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (ar->fw_testscript == NULL)
|
if (ar->fw_testscript == NULL)
|
||||||
|
|
Loading…
Reference in New Issue