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

Commit 48d32a45 authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "icnss2: Add physical to virtual address conversion"

parents cb9569aa d65b3d50
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -507,6 +507,18 @@ static int icnss_driver_event_server_arrive(struct icnss_priv *priv,
			goto err_power_on;
		}

		priv->mem_base_va = devm_ioremap(&priv->pdev->dev,
							 priv->mem_base_pa,
							 priv->mem_base_size);
		if (!priv->mem_base_va) {
			icnss_pr_err("Ioremap failed for bar address\n");
			goto err_power_on;
		}

		icnss_pr_dbg("MEM_BASE pa: %pa, va: 0x%pK\n",
			     &priv->mem_base_pa,
			     priv->mem_base_va);

		icnss_wlfw_bdf_dnld_send_sync(priv, ICNSS_BDF_REGDB);

		ret = icnss_wlfw_bdf_dnld_send_sync(priv,
+18 −3
Original line number Diff line number Diff line
@@ -40,6 +40,8 @@
#define REGDB_FILE_NAME			"regdb.bin"
#define DUMMY_BDF_FILE_NAME		"bdwlan.dmy"

#define DEVICE_BAR_SIZE			0x200000

#ifdef CONFIG_ICNSS2_DEBUG
bool ignore_fw_timeout;
#define ICNSS_QMI_ASSERT() ICNSS_ASSERT(ignore_fw_timeout)
@@ -312,6 +314,19 @@ int wlfw_device_info_send_msg(struct icnss_priv *priv)
	if (resp->bar_size_valid)
		priv->mem_base_size = resp->bar_size;

	if (!priv->mem_base_pa) {
		ret = -EINVAL;
		icnss_qmi_fatal_err("Fail to get bar address\n");
		goto out;
	}

	if (priv->mem_base_size <  DEVICE_BAR_SIZE) {
		ret = -EINVAL;
		icnss_qmi_fatal_err("Bar size is not proper 0x%x\n",
				    priv->mem_base_size);
		goto out;
	}

	kfree(resp);
	kfree(req);
	return 0;
@@ -1644,14 +1659,14 @@ int icnss_send_wlan_enable_to_fw(struct icnss_priv *priv,

	if (priv->device_id == WCN6750_DEVICE_ID) {
		req.shadow_reg_v2_valid = 1;
		if (config->num_shadow_reg_cfg >
		if (config->num_shadow_reg_v2_cfg >
			QMI_WLFW_MAX_NUM_SHADOW_REG_V2_V01)
			req.shadow_reg_v2_len =
				QMI_WLFW_MAX_NUM_SHADOW_REG_V2_V01;
		else
			req.shadow_reg_v2_len = config->num_shadow_reg_cfg;
			req.shadow_reg_v2_len = config->num_shadow_reg_v2_cfg;

		memcpy(req.shadow_reg_v2, config->shadow_reg_cfg,
		memcpy(req.shadow_reg_v2, config->shadow_reg_v2_cfg,
			 sizeof(struct wlfw_shadow_reg_v2_cfg_s_v01) *
			 req.shadow_reg_v2_len);
	} else if (priv->device_id == ADRASTEA_DEVICE_ID) {
+12 −0
Original line number Diff line number Diff line
@@ -69,6 +69,14 @@ struct icnss_shadow_reg_cfg {
	u16 reg_offset;
};

struct icnss_shadow_reg_v2_cfg {
	u32 addr;
};

struct icnss_rri_over_ddr_cfg {
	u32 base_addr_low;
	u32 base_addr_high;
};
/* CE configuration to target */
struct icnss_wlan_enable_cfg {
	u32 num_ce_tgt_cfg;
@@ -77,6 +85,10 @@ struct icnss_wlan_enable_cfg {
	struct ce_svc_pipe_cfg *ce_svc_cfg;
	u32 num_shadow_reg_cfg;
	struct icnss_shadow_reg_cfg *shadow_reg_cfg;
	u32 num_shadow_reg_v2_cfg;
	struct icnss_shadow_reg_v2_cfg *shadow_reg_v2_cfg;
	bool rri_over_ddr_cfg_valid;
	struct icnss_rri_over_ddr_cfg rri_over_ddr_cfg;
};

/* driver modes */