mirror of
https://github.com/rd-stuffs/msm-4.14.git
synced 2025-02-20 11:45:48 +08:00
Merge "CNSS2: Add Genoa support for CNSS2"
This commit is contained in:
commit
f22cdd1c54
@ -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);
|
||||
}
|
||||
|
@ -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 */
|
||||
|
@ -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, "" }
|
||||
};
|
||||
|
||||
|
@ -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;
|
||||
mhi_ctrl->sbl_size = SZ_512K;
|
||||
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);
|
||||
|
@ -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);
|
||||
|
@ -147,6 +147,7 @@ struct cnss_wlan_enable_cfg {
|
||||
struct cnss_shadow_reg_v2_cfg *shadow_reg_v2_cfg;
|
||||
bool rri_over_ddr_cfg_valid;
|
||||
struct cnss_rri_over_ddr_cfg rri_over_ddr_cfg;
|
||||
bool send_msi_ce;
|
||||
};
|
||||
|
||||
enum cnss_driver_mode {
|
||||
|
Loading…
x
Reference in New Issue
Block a user