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

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

Merge "CNSS2: Add Genoa support for CNSS2"

parents 331487c2 559cceed
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -52,6 +52,7 @@ enum cnss_dev_bus_type cnss_get_bus_type(struct cnss_plat_data *plat_priv)
	case QCA6174_DEVICE_ID:
	case QCA6290_DEVICE_ID:
	case QCA6390_DEVICE_ID:
	case QCN7605_DEVICE_ID:
		bus_type = CNSS_BUS_PCI;
		break;
	case QCN7605_COMPOSITE_DEVICE_ID:
@@ -430,3 +431,18 @@ int cnss_bus_update_status(struct cnss_plat_data *plat_priv,
		return -EINVAL;
	}
}

int cnss_get_msi_assignment(struct cnss_plat_data *plat_priv,
			    char *msi_name,
			    int *num_vectors, u32 *user_base_data,
			    u32 *base_vector)
{
	struct cnss_pci_data *pci_priv;

	pci_priv = plat_priv->bus_priv;
	return cnss_get_user_msi_assignment(&pci_priv->pci_dev->dev,
					    msi_name,
					    num_vectors,
					    user_base_data,
					    base_vector);
}
+5 −0
Original line number Diff line number Diff line
@@ -62,4 +62,9 @@ int cnss_bus_call_driver_modem_status(struct cnss_plat_data *plat_priv,
int cnss_bus_update_status(struct cnss_plat_data *plat_priv,
			   enum cnss_driver_status status);
bool cnss_bus_req_mem_ind_valid(struct cnss_plat_data *plat_priv);
int cnss_get_msi_assignment(struct cnss_plat_data *plat_priv,
			    char *msi_name,
			    int *num_vectors,
			    u32 *user_base_data,
			    u32 *base_vector);
#endif /* _CNSS_BUS_H */
+13 −0
Original line number Diff line number Diff line
@@ -258,6 +258,9 @@ int cnss_wlan_enable(struct device *dev,
	if (mode == CNSS_WALTEST || mode == CNSS_CCPM)
		goto skip_cfg;

	if (plat_priv->device_id == QCN7605_DEVICE_ID)
		config->send_msi_ce = true;

	ret = cnss_wlfw_wlan_cfg_send_sync(plat_priv, config, host_version);
	if (ret)
		goto out;
@@ -367,11 +370,17 @@ static int cnss_fw_mem_ready_hdlr(struct cnss_plat_data *plat_priv)

	cnss_wlfw_bdf_dnld_send_sync(plat_priv, CNSS_BDF_REGDB);

	if (plat_priv->device_id == QCN7605_DEVICE_ID)
		plat_priv->ctrl_params.bdf_type = CNSS_BDF_BIN;

	ret = cnss_wlfw_bdf_dnld_send_sync(plat_priv,
					   plat_priv->ctrl_params.bdf_type);
	if (ret)
		goto out;

	if (plat_priv->device_id == QCN7605_DEVICE_ID)
		return 0;

	ret = cnss_bus_load_m3(plat_priv);
	if (ret)
		goto out;
@@ -1601,6 +1610,7 @@ int cnss_register_ramdump(struct cnss_plat_data *plat_priv)
		break;
	case QCA6290_DEVICE_ID:
	case QCA6390_DEVICE_ID:
	case QCN7605_DEVICE_ID:
		ret = cnss_register_ramdump_v2(plat_priv);
		break;
	case QCN7605_COMPOSITE_DEVICE_ID:
@@ -1622,6 +1632,7 @@ void cnss_unregister_ramdump(struct cnss_plat_data *plat_priv)
		break;
	case QCA6290_DEVICE_ID:
	case QCA6390_DEVICE_ID:
	case QCN7605_DEVICE_ID:
		cnss_unregister_ramdump_v2(plat_priv);
		break;
	case QCN7605_COMPOSITE_DEVICE_ID:
@@ -1695,6 +1706,7 @@ static ssize_t cnss_fs_ready_store(struct device *dev,
	switch (plat_priv->device_id) {
	case QCA6290_DEVICE_ID:
	case QCA6390_DEVICE_ID:
	case QCN7605_DEVICE_ID:
		break;
	default:
		cnss_pr_err("Not supported for device ID 0x%lx\n",
@@ -1832,6 +1844,7 @@ static const struct cnss_fw_path cnss_fw_path_table[] = {
	{ QCA6174_DEVICE_ID, "qca6174/" },
	{ QCA6290_DEVICE_ID, "qca6290/" },
	{ QCA6390_DEVICE_ID, "qca6390/" },
	{ QCN7605_DEVICE_ID, "qcn7605/" },
	{ 0, "" }
};

+10 −1
Original line number Diff line number Diff line
@@ -836,6 +836,7 @@ int cnss_pci_dev_powerup(struct cnss_pci_data *pci_priv)
		break;
	case QCA6290_DEVICE_ID:
	case QCA6390_DEVICE_ID:
	case QCN7605_DEVICE_ID:
		ret = cnss_qca6290_powerup(pci_priv);
		break;
	default:
@@ -862,6 +863,7 @@ int cnss_pci_dev_shutdown(struct cnss_pci_data *pci_priv)
		break;
	case QCA6290_DEVICE_ID:
	case QCA6390_DEVICE_ID:
	case QCN7605_DEVICE_ID:
		ret = cnss_qca6290_shutdown(pci_priv);
		break;
	default:
@@ -914,6 +916,7 @@ int cnss_pci_dev_ramdump(struct cnss_pci_data *pci_priv)
		break;
	case QCA6290_DEVICE_ID:
	case QCA6390_DEVICE_ID:
	case QCN7605_DEVICE_ID:
		ret = cnss_qca6290_ramdump(pci_priv);
		break;
	default:
@@ -2569,7 +2572,11 @@ static int cnss_pci_register_mhi(struct cnss_pci_data *pci_priv)
	mhi_ctrl->runtime_put = cnss_mhi_pm_runtime_put_noidle;

	mhi_ctrl->rddm_size = pci_priv->plat_priv->ramdump_info_v2.ramdump_size;
	if (pci_priv->device_id == QCN7605_DEVICE_ID)
		mhi_ctrl->sbl_size = SZ_256K;
	else
		mhi_ctrl->sbl_size = SZ_512K;

	mhi_ctrl->seg_len = SZ_512K;
	mhi_ctrl->fbc_download = true;

@@ -3023,6 +3030,7 @@ static int cnss_pci_probe(struct pci_dev *pci_dev,
		break;
	case QCA6290_DEVICE_ID:
	case QCA6390_DEVICE_ID:
	case QCN7605_DEVICE_ID:
		setup_timer(&pci_priv->dev_rddm_timer,
			    cnss_dev_rddm_timeout_hdlr,
			    (unsigned long)pci_priv);
@@ -3105,6 +3113,7 @@ static const struct pci_device_id cnss_pci_id_table[] = {
	{ QCA6174_VENDOR_ID, QCA6174_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID },
	{ QCA6290_VENDOR_ID, QCA6290_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID },
	{ QCA6390_VENDOR_ID, QCA6390_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID },
	{ QCN7605_VENDOR_ID, QCN7605_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID},
	{ 0 }
};
MODULE_DEVICE_TABLE(pci, cnss_pci_id_table);
+37 −1
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@
#define BIN_BDF_FILE_NAME_PREFIX	"bdwlan.b"
#define REGDB_FILE_NAME			"regdb.bin"
#define DUMMY_BDF_FILE_NAME		"bdwlan.dmy"
#define CE_MSI_NAME			"CE"

#define QMI_WLFW_TIMEOUT_MS		(plat_priv->ctrl_params.qmi_timeout)
#define QMI_WLFW_TIMEOUT_JF		msecs_to_jiffies(QMI_WLFW_TIMEOUT_MS)
@@ -749,7 +750,7 @@ int cnss_wlfw_wlan_cfg_send_sync(struct cnss_plat_data *plat_priv,
	struct wlfw_wlan_cfg_req_msg_v01 *req;
	struct wlfw_wlan_cfg_resp_msg_v01 *resp;
	struct qmi_txn txn;
	u32 i;
	u32 i, ce_id, num_vectors, user_base_data, base_vector;
	int ret = 0;

	cnss_pr_dbg("Sending WLAN config message, state: 0x%lx\n",
@@ -796,6 +797,17 @@ int cnss_wlfw_wlan_cfg_send_sync(struct cnss_plat_data *plat_priv,
		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)
@@ -806,6 +818,30 @@ int cnss_wlfw_wlan_cfg_send_sync(struct cnss_plat_data *plat_priv,
	memcpy(req->shadow_reg_v2, config->shadow_reg_v2_cfg,
	       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 (config->send_msi_ce) {
		ret = cnss_get_msi_assignment(plat_priv,
					      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 = qmi_txn_init(&plat_priv->qmi_wlfw, &txn,
			   wlfw_wlan_cfg_resp_msg_v01_ei, resp);
Loading