From 8e94cf254f8ce49c054abb4e465b5e502d43cb92 Mon Sep 17 00:00:00 2001 From: Manikandan Mohan Date: Tue, 17 Dec 2019 15:23:25 -0800 Subject: [PATCH] net: cnss2: Remove unsupported symbol references Update cnss2 driver for unsupported function references on msm-5.4 kernel. Also revert pci device no_d3hot optimization. Change-Id: Id62cef36801cde43fc773fdc16d9f1ddca6b62f5 Signed-off-by: Manikandan Mohan --- drivers/net/wireless/cnss2/main.c | 62 ++++------------------------ drivers/net/wireless/cnss2/main.h | 9 +++- drivers/net/wireless/cnss2/pci.c | 68 ++++++++++++++++++++++++++++--- drivers/net/wireless/cnss2/pci.h | 1 - 4 files changed, 79 insertions(+), 61 deletions(-) diff --git a/drivers/net/wireless/cnss2/main.c b/drivers/net/wireless/cnss2/main.c index fef355672902..caa4058be40d 100644 --- a/drivers/net/wireless/cnss2/main.c +++ b/drivers/net/wireless/cnss2/main.c @@ -58,21 +58,6 @@ static struct cnss_fw_files FW_FILES_DEFAULT = { "utfbd.bin", "epping.bin", "evicted.bin" }; -static struct cnss_bus_bw_cfg cnss_bus_bw_table[] = { - /* no vote */ - {0, 0}, - /* idle: 0-18 Mbps, ddr freq: 100 MHz */ - {2250, 400000}, - /* low: 18-60 Mbps, ddr freq: 200 MHz*/ - {7500, 800000}, - /* medium: 60-240 Mbps, ddr freq: 451.2 MHz */ - {30000, 1804800}, - /* high: 240 - 800 Mbps, ddr freq: 451.2 MHz */ - {100000, 1804800}, - /* very high: 800 - 1400 Mbps, ddr freq: 1555.2 MHz */ - {175000, 6220800}, -}; - struct cnss_driver_event { struct list_head list; enum cnss_driver_event_type type; @@ -173,44 +158,6 @@ int cnss_get_fw_files_for_target(struct device *dev, } EXPORT_SYMBOL(cnss_get_fw_files_for_target); -int cnss_request_bus_bandwidth(struct device *dev, int bandwidth) -{ - int ret = 0; - struct cnss_plat_data *plat_priv = cnss_bus_dev_to_plat_priv(dev); - struct cnss_bus_bw_info *bus_bw_info; - - if (!plat_priv) - return -ENODEV; - - bus_bw_info = &plat_priv->bus_bw_info; - if (!bus_bw_info->cnss_path) - return -EINVAL; - - switch (bandwidth) { - case CNSS_BUS_WIDTH_NONE: - case CNSS_BUS_WIDTH_IDLE: - case CNSS_BUS_WIDTH_LOW: - case CNSS_BUS_WIDTH_MEDIUM: - case CNSS_BUS_WIDTH_HIGH: - case CNSS_BUS_WIDTH_VERY_HIGH: - ret = icc_set_bw(bus_bw_info->cnss_path, - bus_bw_table[bandwidth].ab, - bus_bw_table[bandwidth].ib); - if (!ret) - bus_bw_info->current_bw_vote = bandwidth; - else - cnss_pr_err("Could not set bus bandwidth: %d, err = %d\n", - bandwidth, ret); - break; - default: - cnss_pr_err("Invalid bus bandwidth: %d", bandwidth); - ret = -EINVAL; - } - - return ret; -} -EXPORT_SYMBOL(cnss_request_bus_bandwidth); - int cnss_get_platform_cap(struct device *dev, struct cnss_platform_cap *cap) { struct cnss_plat_data *plat_priv = cnss_bus_dev_to_plat_priv(dev); @@ -784,6 +731,7 @@ static void cnss_put_resources(struct cnss_plat_data *plat_priv) cnss_put_vreg_type(plat_priv, CNSS_VREG_PRIM); } +#ifdef CONFIG_ESOC static int cnss_modem_notifier_nb(struct notifier_block *nb, unsigned long code, void *ss_handle) @@ -882,6 +830,14 @@ static void cnss_unregister_esoc(struct cnss_plat_data *plat_priv) if (esoc_info->esoc_desc) devm_unregister_esoc_client(dev, esoc_info->esoc_desc); } +#else +static inline int cnss_register_esoc(struct cnss_plat_data *plat_priv) +{ + return 0; +} + +static inline void cnss_unregister_esoc(struct cnss_plat_data *plat_priv) {} +#endif static int cnss_subsys_powerup(const struct subsys_desc *subsys_desc) { diff --git a/drivers/net/wireless/cnss2/main.h b/drivers/net/wireless/cnss2/main.h index f64d04bcdaa0..eee1bee56262 100644 --- a/drivers/net/wireless/cnss2/main.h +++ b/drivers/net/wireless/cnss2/main.h @@ -5,10 +5,13 @@ #define _CNSS_MAIN_H #include +#ifdef CONFIG_ESOC #include +#endif #include #include #include +#include #include #include #include @@ -111,12 +114,14 @@ struct cnss_ramdump_info_v2 { struct cnss_dump_data dump_data; }; +#ifdef CONFIG_ESOC struct cnss_esoc_info { struct esoc_desc *esoc_desc; u8 notify_modem_status; void *modem_notify_handler; int modem_current_status; }; +#endif struct cnss_bus_bw_cfg { u32 ab; @@ -310,7 +315,9 @@ struct cnss_plat_data { struct cnss_subsys_info subsys_info; struct cnss_ramdump_info ramdump_info; struct cnss_ramdump_info_v2 ramdump_info_v2; +#ifdef CONFIG_ESOC struct cnss_esoc_info esoc_info; +#endif struct cnss_bus_bw_info bus_bw_info; struct notifier_block modem_nb; struct notifier_block reboot_nb; @@ -370,7 +377,7 @@ struct cnss_plat_data { #ifdef CONFIG_ARCH_QCOM static inline u64 cnss_get_host_timestamp(struct cnss_plat_data *plat_priv) { - u64 ticks = arch_counter_get_cntvct(); + u64 ticks = __arch_counter_get_cntvct(); do_div(ticks, TIME_CLOCK_FREQ_HZ / 100000); diff --git a/drivers/net/wireless/cnss2/pci.c b/drivers/net/wireless/cnss2/pci.c index 82dd066819cd..92ff60a8926c 100644 --- a/drivers/net/wireless/cnss2/pci.c +++ b/drivers/net/wireless/cnss2/pci.c @@ -348,6 +348,21 @@ static struct cnss_misc_reg wlaon_reg_access_seq[] = { {0, QCA6390_SYSPM_WCSSAON_SR_STATUS, 0}, }; +static struct cnss_bus_bw_cfg cnss_bus_bw_table[] = { + /* no vote */ + {0, 0}, + /* idle: 0-18 Mbps, ddr freq: 100 MHz */ + {2250, 400000}, + /* low: 18-60 Mbps, ddr freq: 200 MHz*/ + {7500, 800000}, + /* medium: 60-240 Mbps, ddr freq: 451.2 MHz */ + {30000, 1804800}, + /* high: 240 - 800 Mbps, ddr freq: 451.2 MHz */ + {100000, 1804800}, + /* very high: 800 - 1400 Mbps, ddr freq: 1555.2 MHz */ + {175000, 6220800}, +}; + #define WCSS_REG_SIZE ARRAY_SIZE(wcss_reg_access_seq) #define PCIE_REG_SIZE ARRAY_SIZE(pcie_reg_access_seq) #define WLAON_REG_SIZE ARRAY_SIZE(wlaon_reg_access_seq) @@ -484,6 +499,44 @@ static int cnss_pci_force_wake_put(struct cnss_pci_data *pci_priv) return ret; } +int cnss_request_bus_bandwidth(struct device *dev, int bandwidth) +{ + int ret = 0; + struct cnss_plat_data *plat_priv = cnss_bus_dev_to_plat_priv(dev); + struct cnss_bus_bw_info *bus_bw_info; + + if (!plat_priv) + return -ENODEV; + + bus_bw_info = &plat_priv->bus_bw_info; + if (!bus_bw_info->cnss_path) + return -EINVAL; + + switch (bandwidth) { + case CNSS_BUS_WIDTH_NONE: + case CNSS_BUS_WIDTH_IDLE: + case CNSS_BUS_WIDTH_LOW: + case CNSS_BUS_WIDTH_MEDIUM: + case CNSS_BUS_WIDTH_HIGH: + case CNSS_BUS_WIDTH_VERY_HIGH: + ret = icc_set_bw(bus_bw_info->cnss_path, + cnss_bus_bw_table[bandwidth].ab, + cnss_bus_bw_table[bandwidth].ib); + if (!ret) + bus_bw_info->current_bw_vote = bandwidth; + else + cnss_pr_err("Could not set bus bandwidth: %d, err = %d\n", + bandwidth, ret); + break; + default: + cnss_pr_err("Invalid bus bandwidth: %d", bandwidth); + ret = -EINVAL; + } + + return ret; +} +EXPORT_SYMBOL(cnss_request_bus_bandwidth); + int cnss_pci_debug_reg_read(struct cnss_pci_data *pci_priv, u32 offset, u32 *val) { @@ -2399,6 +2452,9 @@ static int cnss_pci_suspend_noirq(struct device *dev) if (driver_ops && driver_ops->suspend_noirq) ret = driver_ops->suspend_noirq(pci_dev); + if (pci_priv->disable_pc && !pci_dev->state_saved) + pci_save_state(pci_dev); + out: return ret; } @@ -2699,7 +2755,9 @@ int cnss_auto_suspend(struct device *dev) cnss_pci_set_monitor_wake_intr(pci_priv, true); - cnss_request_bus_bandwidth(dev, CNSS_BUS_WIDTH_NONE); + icc_set_bw(plat_priv->bus_bw_info.cnss_path, + cnss_bus_bw_table[CNSS_BUS_WIDTH_NONE].ab, + cnss_bus_bw_table[CNSS_BUS_WIDTH_NONE].ib); return 0; } @@ -2729,8 +2787,7 @@ int cnss_auto_resume(struct device *dev) cnss_pci_set_auto_suspended(pci_priv, 0); mutex_unlock(&pci_priv->bus_lock); - cnss_request_bus_bandwidth(dev, - plat_priv->bus_bw_info->current_bw_vote); + cnss_request_bus_bandwidth(dev, plat_priv->bus_bw_info.current_bw_vote); return 0; } @@ -3973,8 +4030,8 @@ static int cnss_pci_register_mhi(struct cnss_pci_data *pci_priv) mhi_ctrl->iova_stop = pci_priv->smmu_iova_start + pci_priv->smmu_iova_len; } else { - mhi_ctrl->iova_start = memblock_start_of_DRAM(); - mhi_ctrl->iova_stop = memblock_end_of_DRAM(); + mhi_ctrl->iova_start = 0; + mhi_ctrl->iova_stop = UINT_MAX; } mhi_ctrl->link_status = cnss_mhi_link_status; @@ -4069,7 +4126,6 @@ static int cnss_pci_probe(struct pci_dev *pci_dev, goto out; } - pci_dev->no_d3hot = true; pci_priv->pci_link_state = PCI_LINK_UP; pci_priv->plat_priv = plat_priv; pci_priv->pci_dev = pci_dev; diff --git a/drivers/net/wireless/cnss2/pci.h b/drivers/net/wireless/cnss2/pci.h index 31a91b4ce42e..8a6128900d13 100644 --- a/drivers/net/wireless/cnss2/pci.h +++ b/drivers/net/wireless/cnss2/pci.h @@ -4,7 +4,6 @@ #ifndef _CNSS_PCI_H #define _CNSS_PCI_H -#include #include #include #include