Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fad2fb7e authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "cnss2: Add QMI updates for Genoa PCIe"

parents 25ad3d9b b00eda85
Loading
Loading
Loading
Loading
+39 −1
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@
#define FW_READY_TIMEOUT		20000
#define FW_ASSERT_TIMEOUT		5000
#define CNSS_EVENT_PENDING		2989
#define CE_MSI_NAME			"CE"

static struct cnss_plat_data *plat_env;

@@ -249,7 +250,7 @@ int cnss_wlan_enable(struct device *dev,
{
	struct cnss_plat_data *plat_priv = cnss_bus_dev_to_plat_priv(dev);
	struct wlfw_wlan_cfg_req_msg_v01 req;
	u32 i;
	u32 i, ce_id, num_vectors, user_base_data, base_vector;
	int ret = 0;

	if (plat_priv->device_id == QCA6174_DEVICE_ID)
@@ -299,6 +300,19 @@ int cnss_wlan_enable(struct device *dev,
		req.svc_cfg[i].pipe_num = config->ce_svc_cfg[i].pipe_num;
	}

	if (config->num_shadow_reg_cfg) {
		req.shadow_reg_valid = 1;

		if (config->num_shadow_reg_cfg >
		    QMI_WLFW_MAX_NUM_SHADOW_REG_V01)
			req.shadow_reg_len = QMI_WLFW_MAX_NUM_SHADOW_REG_V01;
		else
			req.shadow_reg_len = config->num_shadow_reg_cfg;
		memcpy(req.shadow_reg, config->shadow_reg_cfg,
		       sizeof(struct wlfw_shadow_reg_cfg_s_v01)
		       * req.shadow_reg_len);
	}

	req.shadow_reg_v2_valid = 1;
	if (config->num_shadow_reg_v2_cfg >
	    QMI_WLFW_MAX_NUM_SHADOW_REG_V2_V01)
@@ -310,6 +324,30 @@ int cnss_wlan_enable(struct device *dev,
	       sizeof(struct wlfw_shadow_reg_v2_cfg_s_v01)
	       * req.shadow_reg_v2_len);

	if (config->rri_over_ddr_cfg_valid) {
		req.rri_over_ddr_cfg_valid = 1;
		req.rri_over_ddr_cfg.base_addr_low =
			config->rri_over_ddr_cfg.base_addr_low;
		req.rri_over_ddr_cfg.base_addr_high =
			config->rri_over_ddr_cfg.base_addr_high;
	}

	if (plat_priv->device_id == QCN7605_DEVICE_ID) {
		ret = cnss_get_user_msi_assignment(dev, CE_MSI_NAME,
						   &num_vectors,
						   &user_base_data,
						   &base_vector);
		if (!ret) {
			req.msi_cfg_valid = 1;
			req.msi_cfg_len = QMI_WLFW_MAX_NUM_CE_V01;
			for (ce_id = 0; ce_id < QMI_WLFW_MAX_NUM_CE_V01;
				ce_id++) {
				req.msi_cfg[ce_id].ce_id = ce_id;
				req.msi_cfg[ce_id].msi_vector =
					(ce_id % num_vectors) + base_vector;
			}
		}
	}
	ret = cnss_wlfw_wlan_cfg_send_sync(plat_priv, &req);
	if (ret)
		goto out;
+101 −0
Original line number Diff line number Diff line
@@ -144,6 +144,60 @@ static struct elem_info wlfw_shadow_reg_v2_cfg_s_v01_ei[] = {
	},
};

static struct elem_info wlfw_rri_over_ddr_cfg_s_v01_ei[] = {
	{
			.data_type      = QMI_UNSIGNED_4_BYTE,
			.elem_len       = 1,
			.elem_size      = sizeof(u32),
			.is_array       = NO_ARRAY,
			.tlv_type       = 0,
			.offset         = offsetof(struct
						   wlfw_rri_over_ddr_cfg_s_v01,
						   base_addr_low),
	},
	{
			.data_type      = QMI_UNSIGNED_4_BYTE,
			.elem_len       = 1,
			.elem_size      = sizeof(u32),
			.is_array       = NO_ARRAY,
			.tlv_type       = 0,
			.offset         = offsetof(struct
						   wlfw_rri_over_ddr_cfg_s_v01,
						   base_addr_high),
	},
	{
			.data_type      = QMI_EOTI,
			.is_array       = NO_ARRAY,
			.tlv_type       = QMI_COMMON_TLV_TYPE,
	},
};

static struct elem_info wlfw_msi_cfg_s_v01_ei[] = {
	{
			.data_type      = QMI_UNSIGNED_2_BYTE,
			.elem_len       = 1,
			.elem_size      = sizeof(u16),
			.is_array       = NO_ARRAY,
			.tlv_type       = 0,
			.offset         = offsetof(struct wlfw_msi_cfg_s_v01,
						   ce_id),
	},
	{
			.data_type      = QMI_UNSIGNED_2_BYTE,
			.elem_len       = 1,
			.elem_size      = sizeof(u16),
			.is_array       = NO_ARRAY,
			.tlv_type       = 0,
			.offset         = offsetof(struct wlfw_msi_cfg_s_v01,
						   msi_vector),
	},
	{
			.data_type      = QMI_EOTI,
			.is_array       = NO_ARRAY,
			.tlv_type       = QMI_COMMON_TLV_TYPE,
	},
};

static struct elem_info wlfw_memory_region_info_s_v01_ei[] = {
	{
		.data_type      = QMI_UNSIGNED_8_BYTE,
@@ -921,6 +975,53 @@ struct elem_info wlfw_wlan_cfg_req_msg_v01_ei[] = {
					   shadow_reg_v2),
		.ei_array      = wlfw_shadow_reg_v2_cfg_s_v01_ei,
	},
	{
		.data_type      = QMI_OPT_FLAG,
		.elem_len       = 1,
		.elem_size      = sizeof(u8),
		.is_array       = NO_ARRAY,
		.tlv_type       = 0x15,
		.offset         = offsetof(struct wlfw_wlan_cfg_req_msg_v01,
					   rri_over_ddr_cfg_valid),
	},
	{
		.data_type      = QMI_STRUCT,
		.elem_len       = 1,
		.elem_size      = sizeof(struct wlfw_rri_over_ddr_cfg_s_v01),
		.is_array       = NO_ARRAY,
		.tlv_type       = 0x15,
		.offset         = offsetof(struct wlfw_wlan_cfg_req_msg_v01,
					   rri_over_ddr_cfg),
		.ei_array      = wlfw_rri_over_ddr_cfg_s_v01_ei,
	},
	{
		.data_type      = QMI_OPT_FLAG,
		.elem_len       = 1,
		.elem_size      = sizeof(u8),
		.is_array       = NO_ARRAY,
		.tlv_type       = 0x16,
		.offset         = offsetof(struct wlfw_wlan_cfg_req_msg_v01,
					   msi_cfg_valid),
	},
	{
		.data_type      = QMI_DATA_LEN,
		.elem_len       = 1,
		.elem_size      = sizeof(u8),
		.is_array       = NO_ARRAY,
		.tlv_type       = 0x16,
		.offset         = offsetof(struct wlfw_wlan_cfg_req_msg_v01,
					   msi_cfg_len),
	},
	{
		.data_type      = QMI_STRUCT,
		.elem_len       = QMI_WLFW_MAX_NUM_CE_V01,
		.elem_size      = sizeof(struct wlfw_msi_cfg_s_v01),
		.is_array       = VAR_LEN_ARRAY,
		.tlv_type       = 0x16,
		.offset         = offsetof(struct wlfw_wlan_cfg_req_msg_v01,
					   msi_cfg),
		.ei_array      = wlfw_msi_cfg_s_v01_ei,
	},
	{
		.data_type      = QMI_EOTI,
		.is_array       = NO_ARRAY,
+15 −0
Original line number Diff line number Diff line
@@ -170,6 +170,16 @@ struct wlfw_shadow_reg_v2_cfg_s_v01 {
	u32 addr;
};

struct wlfw_rri_over_ddr_cfg_s_v01 {
	u32 base_addr_low;
	u32 base_addr_high;
};

struct wlfw_msi_cfg_s_v01 {
	u16 ce_id;
	u16 msi_vector;
};

struct wlfw_memory_region_info_s_v01 {
	u64 region_addr;
	u32 size;
@@ -312,6 +322,11 @@ struct wlfw_wlan_cfg_req_msg_v01 {
	u32 shadow_reg_v2_len;
	struct wlfw_shadow_reg_v2_cfg_s_v01
		shadow_reg_v2[QMI_WLFW_MAX_NUM_SHADOW_REG_V2_V01];
	u8 rri_over_ddr_cfg_valid;
	struct wlfw_rri_over_ddr_cfg_s_v01 rri_over_ddr_cfg;
	u8 msi_cfg_valid;
	u32 msi_cfg_len;
	struct wlfw_msi_cfg_s_v01 msi_cfg[QMI_WLFW_MAX_NUM_CE_V01];
};

#define WLFW_WLAN_CFG_REQ_MSG_V01_MAX_MSG_LEN 803