From facb4eca13e6a7ea69a598b1812436b8691c2db3 Mon Sep 17 00:00:00 2001 From: Manikandan Mohan Date: Thu, 14 May 2020 17:27:23 -0700 Subject: [PATCH] cnss2: Add build type info to wlfw_cap_req_msg Provide Host build type to fw using wlfw_cap_req QMI message for QDSS feature handling. Change-Id: I7657f909999c33a6d32176d9082c408360853350 Signed-off-by: Manikandan Mohan --- drivers/net/wireless/cnss2/qmi.c | 15 ++++++++ .../cnss2/wlan_firmware_service_v01.c | 38 +++++++++++++++++++ .../cnss2/wlan_firmware_service_v01.h | 24 +++++++++++- 3 files changed, 75 insertions(+), 2 deletions(-) diff --git a/drivers/net/wireless/cnss2/qmi.c b/drivers/net/wireless/cnss2/qmi.c index 872290abb118..65db8d33c357 100644 --- a/drivers/net/wireless/cnss2/qmi.c +++ b/drivers/net/wireless/cnss2/qmi.c @@ -154,6 +154,18 @@ qmi_registered: return ret; } +#ifdef CONFIG_CNSS2_DEBUG +static inline u32 cnss_get_host_build_type(void) +{ + return QMI_HOST_BUILD_TYPE_PRIMARY_V01; +} +#else +static inline u32 cnss_get_host_build_type(void) +{ + return QMI_HOST_BUILD_TYPE_SECONDARY_V01; +} +#endif + static int cnss_wlfw_host_cap_send_sync(struct cnss_plat_data *plat_priv) { struct wlfw_host_cap_req_msg_v01 *req; @@ -213,6 +225,9 @@ static int cnss_wlfw_host_cap_send_sync(struct cnss_plat_data *plat_priv) req->ddr_range[0].start, req->ddr_range[0].size); } + req->host_build_type_valid = 1; + req->host_build_type = cnss_get_host_build_type(); + ret = qmi_txn_init(&plat_priv->qmi_wlfw, &txn, wlfw_host_cap_resp_msg_v01_ei, resp); if (ret < 0) { diff --git a/drivers/net/wireless/cnss2/wlan_firmware_service_v01.c b/drivers/net/wireless/cnss2/wlan_firmware_service_v01.c index 6c768eda9120..09c7e8d0babc 100644 --- a/drivers/net/wireless/cnss2/wlan_firmware_service_v01.c +++ b/drivers/net/wireless/cnss2/wlan_firmware_service_v01.c @@ -2729,6 +2729,24 @@ struct qmi_elem_info wlfw_host_cap_req_msg_v01_ei[] = { ddr_range), .ei_array = wlfw_host_ddr_range_s_v01_ei, }, + { + .data_type = QMI_OPT_FLAG, + .elem_len = 1, + .elem_size = sizeof(u8), + .array_type = NO_ARRAY, + .tlv_type = 0x20, + .offset = offsetof(struct wlfw_host_cap_req_msg_v01, + host_build_type_valid), + }, + { + .data_type = QMI_SIGNED_4_BYTE_ENUM, + .elem_len = 1, + .elem_size = sizeof(enum wlfw_host_build_type_v01), + .array_type = NO_ARRAY, + .tlv_type = 0x20, + .offset = offsetof(struct wlfw_host_cap_req_msg_v01, + host_build_type), + }, { .data_type = QMI_EOTI, .array_type = NO_ARRAY, @@ -3546,6 +3564,26 @@ struct qmi_elem_info wlfw_qdss_trace_mode_req_msg_v01_ei[] = { wlfw_qdss_trace_mode_req_msg_v01, option), }, + { + .data_type = QMI_OPT_FLAG, + .elem_len = 1, + .elem_size = sizeof(u8), + .array_type = NO_ARRAY, + .tlv_type = 0x12, + .offset = offsetof(struct + wlfw_qdss_trace_mode_req_msg_v01, + hw_trc_disable_override_valid), + }, + { + .data_type = QMI_SIGNED_4_BYTE_ENUM, + .elem_len = 1, + .elem_size = sizeof(enum wlfw_qmi_param_value_v01), + .array_type = NO_ARRAY, + .tlv_type = 0x12, + .offset = offsetof(struct + wlfw_qdss_trace_mode_req_msg_v01, + hw_trc_disable_override), + }, { .data_type = QMI_EOTI, .array_type = NO_ARRAY, diff --git a/drivers/net/wireless/cnss2/wlan_firmware_service_v01.h b/drivers/net/wireless/cnss2/wlan_firmware_service_v01.h index c42038911142..4c2e5d8530b3 100644 --- a/drivers/net/wireless/cnss2/wlan_firmware_service_v01.h +++ b/drivers/net/wireless/cnss2/wlan_firmware_service_v01.h @@ -181,6 +181,22 @@ enum wlfw_soc_wake_enum_v01 { WLFW_SOC_WAKE_ENUM_MAX_VAL_V01 = INT_MAX, }; +enum wlfw_host_build_type_v01 { + WLFW_HOST_BUILD_TYPE_MIN_VAL_V01 = INT_MIN, + QMI_HOST_BUILD_TYPE_UNSPECIFIED_V01 = 0, + QMI_HOST_BUILD_TYPE_PRIMARY_V01 = 1, + QMI_HOST_BUILD_TYPE_SECONDARY_V01 = 2, + WLFW_HOST_BUILD_TYPE_MAX_VAL_V01 = INT_MAX, +}; + +enum wlfw_qmi_param_value_v01 { + WLFW_QMI_PARAM_VALUE_MIN_VAL_V01 = INT_MIN, + QMI_PARAM_INVALID_V01 = 0, + QMI_PARAM_ENABLE_V01 = 1, + QMI_PARAM_DISABLE_V01 = 2, + WLFW_QMI_PARAM_VALUE_MAX_VAL_V01 = INT_MAX, +}; + #define QMI_WLFW_CE_ATTR_FLAGS_V01 ((u32)0x00) #define QMI_WLFW_CE_ATTR_NO_SNOOP_V01 ((u32)0x01) #define QMI_WLFW_CE_ATTR_BYTE_SWAP_DATA_V01 ((u32)0x02) @@ -711,9 +727,11 @@ struct wlfw_host_cap_req_msg_v01 { u8 ddr_range_valid; struct wlfw_host_ddr_range_s_v01 ddr_range[QMI_WLFW_MAX_HOST_DDR_RANGE_SIZE_V01]; + u8 host_build_type_valid; + enum wlfw_host_build_type_v01 host_build_type; }; -#define WLFW_HOST_CAP_REQ_MSG_V01_MAX_MSG_LEN 312 +#define WLFW_HOST_CAP_REQ_MSG_V01_MAX_MSG_LEN 319 extern struct qmi_elem_info wlfw_host_cap_req_msg_v01_ei[]; struct wlfw_host_cap_resp_msg_v01 { @@ -922,9 +940,11 @@ struct wlfw_qdss_trace_mode_req_msg_v01 { enum wlfw_qdss_trace_mode_enum_v01 mode; u8 option_valid; u64 option; + u8 hw_trc_disable_override_valid; + enum wlfw_qmi_param_value_v01 hw_trc_disable_override; }; -#define WLFW_QDSS_TRACE_MODE_REQ_MSG_V01_MAX_MSG_LEN 18 +#define WLFW_QDSS_TRACE_MODE_REQ_MSG_V01_MAX_MSG_LEN 25 extern struct qmi_elem_info wlfw_qdss_trace_mode_req_msg_v01_ei[]; struct wlfw_qdss_trace_mode_resp_msg_v01 {