wil6210: add platform capabilities bitmap
Add get_capa callback to platform ops to allow reading the platform capabilities. Supported capabilities: - Keeping 11ad connection during suspend - T_POWER_ON 0 support - Usage of external clock Signed-off-by: Maya Erez <qca_merez@qca.qualcomm.com> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
This commit is contained in:
parent
3dc2c13b52
commit
38e4c25d60
|
@ -773,9 +773,8 @@ void wil_refresh_fw_capabilities(struct wil6210_priv *wil)
|
|||
struct wiphy *wiphy = wil_to_wiphy(wil);
|
||||
|
||||
wil->keep_radio_on_during_sleep =
|
||||
wil->platform_ops.keep_radio_on_during_sleep &&
|
||||
wil->platform_ops.keep_radio_on_during_sleep(
|
||||
wil->platform_handle) &&
|
||||
test_bit(WIL_PLATFORM_CAPA_RADIO_ON_IN_SUSPEND,
|
||||
wil->platform_capa) &&
|
||||
test_bit(WMI_FW_CAPABILITY_D3_SUSPEND, wil->fw_capabilities);
|
||||
|
||||
wil_info(wil, "keep_radio_on_during_sleep (%d)\n",
|
||||
|
@ -1008,6 +1007,16 @@ int wil_reset(struct wil6210_priv *wil, bool load_fw)
|
|||
if (wil->hw_version == HW_VER_UNKNOWN)
|
||||
return -ENODEV;
|
||||
|
||||
if (test_bit(WIL_PLATFORM_CAPA_T_PWR_ON_0, wil->platform_capa)) {
|
||||
wil_dbg_misc(wil, "Notify FW to set T_POWER_ON=0\n");
|
||||
wil_s(wil, RGF_USER_USAGE_8, BIT_USER_SUPPORT_T_POWER_ON_0);
|
||||
}
|
||||
|
||||
if (test_bit(WIL_PLATFORM_CAPA_EXT_CLK, wil->platform_capa)) {
|
||||
wil_dbg_misc(wil, "Notify FW on ext clock configuration\n");
|
||||
wil_s(wil, RGF_USER_USAGE_8, BIT_USER_EXT_CLK);
|
||||
}
|
||||
|
||||
if (wil->platform_ops.notify) {
|
||||
rc = wil->platform_ops.notify(wil->platform_handle,
|
||||
WIL_PLATFORM_EVT_PRE_RESET);
|
||||
|
|
|
@ -41,9 +41,11 @@ void wil_set_capabilities(struct wil6210_priv *wil)
|
|||
u32 jtag_id = wil_r(wil, RGF_USER_JTAG_DEV_ID);
|
||||
u8 chip_revision = (wil_r(wil, RGF_USER_REVISION_ID) &
|
||||
RGF_USER_REVISION_ID_MASK);
|
||||
int platform_capa;
|
||||
|
||||
bitmap_zero(wil->hw_capabilities, hw_capability_last);
|
||||
bitmap_zero(wil->fw_capabilities, WMI_FW_CAPABILITY_MAX);
|
||||
bitmap_zero(wil->platform_capa, WIL_PLATFORM_CAPA_MAX);
|
||||
wil->wil_fw_name = ftm_mode ? WIL_FW_NAME_FTM_DEFAULT :
|
||||
WIL_FW_NAME_DEFAULT;
|
||||
wil->chip_revision = chip_revision;
|
||||
|
@ -79,6 +81,14 @@ void wil_set_capabilities(struct wil6210_priv *wil)
|
|||
|
||||
wil_info(wil, "Board hardware is %s\n", wil->hw_name);
|
||||
|
||||
/* Get platform capabilities */
|
||||
if (wil->platform_ops.get_capa) {
|
||||
platform_capa =
|
||||
wil->platform_ops.get_capa(wil->platform_handle);
|
||||
memcpy(wil->platform_capa, &platform_capa,
|
||||
min(sizeof(wil->platform_capa), sizeof(platform_capa)));
|
||||
}
|
||||
|
||||
/* extract FW capabilities from file without loading the FW */
|
||||
wil_request_firmware(wil, wil->wil_fw_name, false);
|
||||
wil_refresh_fw_capabilities(wil);
|
||||
|
|
|
@ -161,6 +161,10 @@ struct RGF_ICR {
|
|||
#define RGF_USER_USAGE_6 (0x880018)
|
||||
#define BIT_USER_OOB_MODE BIT(31)
|
||||
#define BIT_USER_OOB_R2_MODE BIT(30)
|
||||
#define RGF_USER_USAGE_8 (0x880020)
|
||||
#define BIT_USER_PREVENT_DEEP_SLEEP BIT(0)
|
||||
#define BIT_USER_SUPPORT_T_POWER_ON_0 BIT(1)
|
||||
#define BIT_USER_EXT_CLK BIT(2)
|
||||
#define RGF_USER_HW_MACHINE_STATE (0x8801dc)
|
||||
#define HW_MACHINE_BOOT_DONE (0x3fffffd)
|
||||
#define RGF_USER_USER_CPU_0 (0x8801e0)
|
||||
|
@ -643,6 +647,7 @@ struct wil6210_priv {
|
|||
const char *wil_fw_name;
|
||||
DECLARE_BITMAP(hw_capabilities, hw_capability_last);
|
||||
DECLARE_BITMAP(fw_capabilities, WMI_FW_CAPABILITY_MAX);
|
||||
DECLARE_BITMAP(platform_capa, WIL_PLATFORM_CAPA_MAX);
|
||||
u8 n_mids; /* number of additional MIDs as reported by FW */
|
||||
u32 recovery_count; /* num of FW recovery attempts in a short time */
|
||||
u32 recovery_state; /* FW recovery state machine */
|
||||
|
|
|
@ -27,6 +27,13 @@ enum wil_platform_event {
|
|||
WIL_PLATFORM_EVT_POST_SUSPEND = 4,
|
||||
};
|
||||
|
||||
enum wil_platform_capa {
|
||||
WIL_PLATFORM_CAPA_RADIO_ON_IN_SUSPEND = 0,
|
||||
WIL_PLATFORM_CAPA_T_PWR_ON_0 = 1,
|
||||
WIL_PLATFORM_CAPA_EXT_CLK = 2,
|
||||
WIL_PLATFORM_CAPA_MAX,
|
||||
};
|
||||
|
||||
/**
|
||||
* struct wil_platform_ops - wil platform module calls from this
|
||||
* driver to platform driver
|
||||
|
@ -37,7 +44,7 @@ struct wil_platform_ops {
|
|||
int (*resume)(void *handle, bool device_powered_on);
|
||||
void (*uninit)(void *handle);
|
||||
int (*notify)(void *handle, enum wil_platform_event evt);
|
||||
bool (*keep_radio_on_during_sleep)(void *handle);
|
||||
int (*get_capa)(void *handle);
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue