From 5d33cdfa531640c8563275b9268e7cf3d35966a4 Mon Sep 17 00:00:00 2001 From: Jayachandran Sreekumaran Date: Tue, 3 Jul 2018 18:54:07 +0530 Subject: [PATCH] cnss2: Add support for genoa pcie Add genoa pcie specific qmi and power up/down handling. Change-Id: I08e640f775de5436071b457225a8b61f13574d01 CRs-fixed: 2272303 Signed-off-by: Jayachandran Sreekumaran --- drivers/net/wireless/cnss2/bus.c | 1 + drivers/net/wireless/cnss2/bus.h | 2 ++ drivers/net/wireless/cnss2/main.c | 13 ++++++++++++- drivers/net/wireless/cnss2/pci.c | 5 +++++ 4 files changed, 20 insertions(+), 1 deletion(-) diff --git a/drivers/net/wireless/cnss2/bus.c b/drivers/net/wireless/cnss2/bus.c index 0d46b4f6b6a4..c0810df81bfc 100644 --- a/drivers/net/wireless/cnss2/bus.c +++ b/drivers/net/wireless/cnss2/bus.c @@ -34,6 +34,7 @@ enum cnss_dev_bus_type cnss_get_bus_type(unsigned long device_id) case QCA6174_DEVICE_ID: case QCA6290_EMULATION_DEVICE_ID: case QCA6290_DEVICE_ID: + case QCN7605_DEVICE_ID: return CNSS_BUS_PCI; default: cnss_pr_err("Unknown device_id: 0x%lx\n", device_id); diff --git a/drivers/net/wireless/cnss2/bus.h b/drivers/net/wireless/cnss2/bus.h index 4e3d1500bd76..bd32a94e5146 100644 --- a/drivers/net/wireless/cnss2/bus.h +++ b/drivers/net/wireless/cnss2/bus.h @@ -24,6 +24,8 @@ #define QCA6290_DEVICE_ID 0x1100 #define QCA6290_EMULATION_VENDOR_ID 0x168C #define QCA6290_EMULATION_DEVICE_ID 0xABCD +#define QCN7605_VENDOR_ID 0x17CB +#define QCN7605_DEVICE_ID 0x1102 enum cnss_dev_bus_type cnss_get_dev_bus_type(struct device *dev); enum cnss_dev_bus_type cnss_get_bus_type(unsigned long device_id); diff --git a/drivers/net/wireless/cnss2/main.c b/drivers/net/wireless/cnss2/main.c index acf65e4904d6..8aa9eabdc73f 100644 --- a/drivers/net/wireless/cnss2/main.c +++ b/drivers/net/wireless/cnss2/main.c @@ -461,6 +461,8 @@ static int cnss_fw_mem_ready_hdlr(struct cnss_plat_data *plat_priv) if (ret) goto out; + if (plat_priv->device_id == QCN7605_DEVICE_ID) + goto skip_m3_dnld; ret = cnss_bus_load_m3(plat_priv); if (ret) goto out; @@ -468,7 +470,7 @@ static int cnss_fw_mem_ready_hdlr(struct cnss_plat_data *plat_priv) ret = cnss_wlfw_m3_dnld_send_sync(plat_priv); if (ret) goto out; - +skip_m3_dnld: return 0; out: return ret; @@ -1103,7 +1105,10 @@ static int cnss_cold_boot_cal_done_hdlr(struct cnss_plat_data *plat_priv) { plat_priv->cal_done = true; cnss_wlfw_wlan_mode_send_sync(plat_priv, QMI_WLFW_OFF_V01); + if (plat_priv->device_id == QCN7605_DEVICE_ID) + goto skip_shutdown; cnss_bus_dev_shutdown(plat_priv); +skip_shutdown: clear_bit(CNSS_COLD_BOOT_CAL, &plat_priv->driver_state); return 0; @@ -1234,6 +1239,9 @@ int cnss_register_subsys(struct cnss_plat_data *plat_priv) case QCA6290_DEVICE_ID: subsys_info->subsys_desc.name = "QCA6290"; break; + case QCN7605_DEVICE_ID: + subsys_info->subsys_desc.name = "QCN7605"; + break; default: cnss_pr_err("Unknown device ID: 0x%lx\n", plat_priv->device_id); ret = -ENODEV; @@ -1449,6 +1457,7 @@ int cnss_register_ramdump(struct cnss_plat_data *plat_priv) break; case QCA6290_EMULATION_DEVICE_ID: case QCA6290_DEVICE_ID: + case QCN7605_DEVICE_ID: ret = cnss_register_ramdump_v2(plat_priv); break; default: @@ -1537,6 +1546,7 @@ static ssize_t cnss_fs_ready_store(struct device *dev, switch (plat_priv->device_id) { case QCA6290_EMULATION_DEVICE_ID: case QCA6290_DEVICE_ID: + case QCN7605_DEVICE_ID: break; default: cnss_pr_err("Not supported for device ID 0x%lx\n", @@ -1599,6 +1609,7 @@ static void cnss_event_work_deinit(struct cnss_plat_data *plat_priv) static const struct platform_device_id cnss_platform_id_table[] = { { .name = "qca6174", .driver_data = QCA6174_DEVICE_ID, }, { .name = "qca6290", .driver_data = QCA6290_DEVICE_ID, }, + { .name = "qcn7605", .driver_data = QCN7605_DEVICE_ID, }, }; static const struct of_device_id cnss_of_match_table[] = { diff --git a/drivers/net/wireless/cnss2/pci.c b/drivers/net/wireless/cnss2/pci.c index 8f9bc213cac3..1d4b5b9ea9c9 100644 --- a/drivers/net/wireless/cnss2/pci.c +++ b/drivers/net/wireless/cnss2/pci.c @@ -619,6 +619,7 @@ int cnss_pci_dev_powerup(struct cnss_pci_data *pci_priv) break; case QCA6290_EMULATION_DEVICE_ID: case QCA6290_DEVICE_ID: + case QCN7605_DEVICE_ID: ret = cnss_qca6290_powerup(pci_priv); break; default: @@ -645,6 +646,7 @@ int cnss_pci_dev_shutdown(struct cnss_pci_data *pci_priv) break; case QCA6290_EMULATION_DEVICE_ID: case QCA6290_DEVICE_ID: + case QCN7605_DEVICE_ID: ret = cnss_qca6290_shutdown(pci_priv); break; default: @@ -2162,6 +2164,7 @@ static int cnss_pci_probe(struct pci_dev *pci_dev, switch (pci_dev->device) { case QCA6290_EMULATION_DEVICE_ID: case QCA6290_DEVICE_ID: + case QCN7605_DEVICE_ID: if (!mhi_is_device_ready(&plat_priv->plat_dev->dev, MHI_NODE_NAME)) { cnss_pr_err("MHI driver is not ready, defer PCI probe!\n"); @@ -2249,6 +2252,7 @@ static int cnss_pci_probe(struct pci_dev *pci_dev, break; case QCA6290_EMULATION_DEVICE_ID: case QCA6290_DEVICE_ID: + case QCN7605_DEVICE_ID: ret = cnss_pci_enable_msi(pci_priv); if (ret) goto disable_bus; @@ -2324,6 +2328,7 @@ static const struct pci_device_id cnss_pci_id_table[] = { { QCA6290_EMULATION_VENDOR_ID, QCA6290_EMULATION_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID }, { QCA6290_VENDOR_ID, QCA6290_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);