Loading drivers/net/wireless/cnss2/Kconfig +3 −1 Original line number Diff line number Diff line config CNSS2 tristate "CNSS2 Platform Driver for Wi-Fi Module" depends on !CNSS && PCI_MSM depends on !CNSS && (PCI_MSM || PCI_HOST_GENERIC) select CNSS_UTILS ---help--- This module adds the support for Connectivity Subsystem (CNSS) used for PCIe based Wi-Fi devices with QCA6174/QCA6290 chipsets. This module in metal case depends on PCI_MSM, while in GVM case depends on PCI_HOST_GENERIC. This driver also adds support to integrate WLAN module to subsystem restart framework. Loading drivers/net/wireless/cnss2/main.h +14 −1 Original line number Diff line number Diff line /* Copyright (c) 2016-2017, The Linux Foundation. All rights reserved. /* Copyright (c) 2016-2018, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -213,8 +213,21 @@ int cnss_driver_event_post(struct cnss_plat_data *plat_priv, u32 flags, void *data); int cnss_get_vreg(struct cnss_plat_data *plat_priv); int cnss_get_pinctrl(struct cnss_plat_data *plat_priv); #ifndef CONFIG_MSM_GVM_QUIN int cnss_power_on_device(struct cnss_plat_data *plat_priv); void cnss_power_off_device(struct cnss_plat_data *plat_priv); #else /* CONFIG_MSM_GVM_QUIN */ static inline int cnss_power_on_device(struct cnss_plat_data *plat_priv) { return 0; } static inline void cnss_power_off_device(struct cnss_plat_data *plat_priv) { } #endif /* CONFIG_MSM_GVM_QUIN */ int cnss_register_subsys(struct cnss_plat_data *plat_priv); void cnss_unregister_subsys(struct cnss_plat_data *plat_priv); int cnss_register_ramdump(struct cnss_plat_data *plat_priv); Loading drivers/net/wireless/cnss2/pci.c +75 −14 Original line number Diff line number Diff line Loading @@ -44,7 +44,9 @@ #define MAX_M3_FILE_NAME_LENGTH 13 #define DEFAULT_M3_FILE_NAME "m3.bin" #ifdef CONFIG_PCI_MSM static DEFINE_SPINLOCK(pci_link_down_lock); #endif static unsigned int pci_link_down_panic; module_param(pci_link_down_panic, uint, 0600); Loading Loading @@ -91,6 +93,7 @@ static int cnss_set_pci_config_space(struct cnss_pci_data *pci_priv, bool save) return 0; } #ifdef CONFIG_PCI_MSM static int cnss_set_pci_link(struct cnss_pci_data *pci_priv, bool link_up) { int ret = 0; Loading Loading @@ -217,6 +220,13 @@ int cnss_pci_link_down(struct device *dev) } EXPORT_SYMBOL(cnss_pci_link_down); #else /* CONFIG_PCI_MSM */ static int cnss_set_pci_link(struct cnss_pci_data *pci_priv, bool link_up) { return 0; } #endif /* CONFIG_PCI_MSM */ static int cnss_pci_init_smmu(struct cnss_pci_data *pci_priv) { int ret = 0; Loading Loading @@ -277,6 +287,7 @@ static void cnss_pci_deinit_smmu(struct cnss_pci_data *pci_priv) pci_priv->smmu_mapping = NULL; } #ifdef CONFIG_PCI_MSM static void cnss_pci_event_cb(struct msm_pcie_notify *notify) { unsigned long flags; Loading Loading @@ -595,6 +606,17 @@ int cnss_wlan_pm_control(struct device *dev, bool vote) } EXPORT_SYMBOL(cnss_wlan_pm_control); #else /* CONFIG_PCI_MSM */ static int cnss_reg_pci_event(struct cnss_pci_data *pci_priv) { return 0; } static void cnss_dereg_pci_event(struct cnss_pci_data *pci_priv) { } #endif /* CONFIG_PCI_MSM */ int cnss_auto_suspend(struct device *dev) { int ret = 0; Loading Loading @@ -952,6 +974,31 @@ void cnss_get_msi_address(struct device *dev, u32 *msi_addr_low, } EXPORT_SYMBOL(cnss_get_msi_address); #ifdef CONFIG_PCI_MSM static inline int cnss_pci_set_dma_mask(struct pci_dev *pci_dev) { int ret; ret = pci_set_dma_mask(pci_dev, DMA_BIT_MASK(PCI_DMA_MASK)); if (ret) { cnss_pr_err("PCI DMA mask: %d, err: %d\n", PCI_DMA_MASK, ret); return ret; } ret = pci_set_consistent_dma_mask(pci_dev, DMA_BIT_MASK(PCI_DMA_MASK)); if (ret) cnss_pr_err("PCI consistent DMA mask: %d, err: %d\n", PCI_DMA_MASK, ret); return ret; } #else /* CONFIG_PCI_MSM */ static inline int cnss_pci_set_dma_mask(struct pci_dev *pci_dev) { return 0; } #endif /* CONFIG_PCI_MSM */ static int cnss_pci_enable_bus(struct cnss_pci_data *pci_priv) { int ret = 0; Loading Loading @@ -984,19 +1031,9 @@ static int cnss_pci_enable_bus(struct cnss_pci_data *pci_priv) goto disable_device; } ret = pci_set_dma_mask(pci_dev, DMA_BIT_MASK(PCI_DMA_MASK)); if (ret) { cnss_pr_err("Failed to set PCI DMA mask (%d), err = %d\n", ret, PCI_DMA_MASK); goto release_region; } ret = pci_set_consistent_dma_mask(pci_dev, DMA_BIT_MASK(PCI_DMA_MASK)); if (ret) { cnss_pr_err("Failed to set PCI consistent DMA mask (%d), err = %d\n", ret, PCI_DMA_MASK); ret = cnss_pci_set_dma_mask(pci_dev); if (ret) goto release_region; } pci_set_master(pci_dev); Loading Loading @@ -1565,6 +1602,7 @@ static const struct pci_device_id cnss_pci_id_table[] = { }; MODULE_DEVICE_TABLE(pci, cnss_pci_id_table); #ifdef CONFIG_PCI_MSM static const struct dev_pm_ops cnss_pm_ops = { SET_SYSTEM_SLEEP_PM_OPS(cnss_pci_suspend, cnss_pci_resume) SET_NOIRQ_SYSTEM_SLEEP_PM_OPS(cnss_pci_suspend_noirq, Loading @@ -1572,20 +1610,24 @@ static const struct dev_pm_ops cnss_pm_ops = { SET_RUNTIME_PM_OPS(cnss_pci_runtime_suspend, cnss_pci_runtime_resume, cnss_pci_runtime_idle) }; #endif struct pci_driver cnss_pci_driver = { .name = "cnss_pci", .id_table = cnss_pci_id_table, .probe = cnss_pci_probe, .remove = cnss_pci_remove, #ifdef CONFIG_PCI_MSM .driver = { .pm = &cnss_pm_ops, }, #endif }; int cnss_pci_init(struct cnss_plat_data *plat_priv) #ifdef CONFIG_PCI_MSM static inline int cnss_msm_pcie_enumerate(struct cnss_plat_data *plat_priv) { int ret = 0; int ret; struct device *dev = &plat_priv->plat_dev->dev; u32 rc_num; Loading @@ -1602,6 +1644,25 @@ int cnss_pci_init(struct cnss_plat_data *plat_priv) goto out; } return 0; out: return ret; } #else /* CONFIG_PCI_MSM */ static inline int cnss_msm_pcie_enumerate(struct cnss_plat_data *plat_priv) { return 0; } #endif /* CONFIG_PCI_MSM */ int cnss_pci_init(struct cnss_plat_data *plat_priv) { int ret; ret = cnss_msm_pcie_enumerate(plat_priv); if (ret) goto out; ret = pci_register_driver(&cnss_pci_driver); if (ret) { cnss_pr_err("Failed to register to PCI framework, err = %d\n", Loading drivers/net/wireless/cnss2/pci.h +14 −1 Original line number Diff line number Diff line /* Copyright (c) 2016-2017, The Linux Foundation. All rights reserved. /* Copyright (c) 2016-2018, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -124,8 +124,21 @@ static inline int cnss_pci_get_auto_suspended(void *bus_priv) return atomic_read(&pci_priv->auto_suspended); } #ifdef CONFIG_PCI_MSM int cnss_suspend_pci_link(struct cnss_pci_data *pci_priv); int cnss_resume_pci_link(struct cnss_pci_data *pci_priv); #else /* CONFIG_PCI_MSM */ static inline int cnss_suspend_pci_link(struct cnss_pci_data *pci_priv) { return 0; } static inline int cnss_resume_pci_link(struct cnss_pci_data *pci_priv) { return 0; } #endif /* CONFIG_PCI_MSM */ int cnss_pci_init(struct cnss_plat_data *plat_priv); void cnss_pci_deinit(struct cnss_plat_data *plat_priv); int cnss_pci_alloc_fw_mem(struct cnss_pci_data *pci_priv); Loading drivers/net/wireless/cnss2/power.c +5 −1 Original line number Diff line number Diff line /* Copyright (c) 2016-2017, The Linux Foundation. All rights reserved. /* Copyright (c) 2016-2018, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -110,6 +110,7 @@ out: return ret; } #ifndef CONFIG_MSM_GVM_QUIN static int cnss_vreg_on(struct cnss_plat_data *plat_priv) { int ret = 0; Loading Loading @@ -229,6 +230,7 @@ static int cnss_vreg_off(struct cnss_plat_data *plat_priv) return ret; } #endif /* CONFIG_MSM_GVM_QUIN */ int cnss_get_pinctrl(struct cnss_plat_data *plat_priv) { Loading Loading @@ -285,6 +287,7 @@ out: return ret; } #ifndef CONFIG_MSM_GVM_QUIN static int cnss_select_pinctrl_state(struct cnss_plat_data *plat_priv, bool state) { Loading Loading @@ -368,6 +371,7 @@ void cnss_power_off_device(struct cnss_plat_data *plat_priv) cnss_select_pinctrl_state(plat_priv, false); cnss_vreg_off(plat_priv); } #endif /* CONFIG_MSM_GVM_QUIN */ void cnss_set_pin_connect_status(struct cnss_plat_data *plat_priv) { Loading Loading
drivers/net/wireless/cnss2/Kconfig +3 −1 Original line number Diff line number Diff line config CNSS2 tristate "CNSS2 Platform Driver for Wi-Fi Module" depends on !CNSS && PCI_MSM depends on !CNSS && (PCI_MSM || PCI_HOST_GENERIC) select CNSS_UTILS ---help--- This module adds the support for Connectivity Subsystem (CNSS) used for PCIe based Wi-Fi devices with QCA6174/QCA6290 chipsets. This module in metal case depends on PCI_MSM, while in GVM case depends on PCI_HOST_GENERIC. This driver also adds support to integrate WLAN module to subsystem restart framework. Loading
drivers/net/wireless/cnss2/main.h +14 −1 Original line number Diff line number Diff line /* Copyright (c) 2016-2017, The Linux Foundation. All rights reserved. /* Copyright (c) 2016-2018, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -213,8 +213,21 @@ int cnss_driver_event_post(struct cnss_plat_data *plat_priv, u32 flags, void *data); int cnss_get_vreg(struct cnss_plat_data *plat_priv); int cnss_get_pinctrl(struct cnss_plat_data *plat_priv); #ifndef CONFIG_MSM_GVM_QUIN int cnss_power_on_device(struct cnss_plat_data *plat_priv); void cnss_power_off_device(struct cnss_plat_data *plat_priv); #else /* CONFIG_MSM_GVM_QUIN */ static inline int cnss_power_on_device(struct cnss_plat_data *plat_priv) { return 0; } static inline void cnss_power_off_device(struct cnss_plat_data *plat_priv) { } #endif /* CONFIG_MSM_GVM_QUIN */ int cnss_register_subsys(struct cnss_plat_data *plat_priv); void cnss_unregister_subsys(struct cnss_plat_data *plat_priv); int cnss_register_ramdump(struct cnss_plat_data *plat_priv); Loading
drivers/net/wireless/cnss2/pci.c +75 −14 Original line number Diff line number Diff line Loading @@ -44,7 +44,9 @@ #define MAX_M3_FILE_NAME_LENGTH 13 #define DEFAULT_M3_FILE_NAME "m3.bin" #ifdef CONFIG_PCI_MSM static DEFINE_SPINLOCK(pci_link_down_lock); #endif static unsigned int pci_link_down_panic; module_param(pci_link_down_panic, uint, 0600); Loading Loading @@ -91,6 +93,7 @@ static int cnss_set_pci_config_space(struct cnss_pci_data *pci_priv, bool save) return 0; } #ifdef CONFIG_PCI_MSM static int cnss_set_pci_link(struct cnss_pci_data *pci_priv, bool link_up) { int ret = 0; Loading Loading @@ -217,6 +220,13 @@ int cnss_pci_link_down(struct device *dev) } EXPORT_SYMBOL(cnss_pci_link_down); #else /* CONFIG_PCI_MSM */ static int cnss_set_pci_link(struct cnss_pci_data *pci_priv, bool link_up) { return 0; } #endif /* CONFIG_PCI_MSM */ static int cnss_pci_init_smmu(struct cnss_pci_data *pci_priv) { int ret = 0; Loading Loading @@ -277,6 +287,7 @@ static void cnss_pci_deinit_smmu(struct cnss_pci_data *pci_priv) pci_priv->smmu_mapping = NULL; } #ifdef CONFIG_PCI_MSM static void cnss_pci_event_cb(struct msm_pcie_notify *notify) { unsigned long flags; Loading Loading @@ -595,6 +606,17 @@ int cnss_wlan_pm_control(struct device *dev, bool vote) } EXPORT_SYMBOL(cnss_wlan_pm_control); #else /* CONFIG_PCI_MSM */ static int cnss_reg_pci_event(struct cnss_pci_data *pci_priv) { return 0; } static void cnss_dereg_pci_event(struct cnss_pci_data *pci_priv) { } #endif /* CONFIG_PCI_MSM */ int cnss_auto_suspend(struct device *dev) { int ret = 0; Loading Loading @@ -952,6 +974,31 @@ void cnss_get_msi_address(struct device *dev, u32 *msi_addr_low, } EXPORT_SYMBOL(cnss_get_msi_address); #ifdef CONFIG_PCI_MSM static inline int cnss_pci_set_dma_mask(struct pci_dev *pci_dev) { int ret; ret = pci_set_dma_mask(pci_dev, DMA_BIT_MASK(PCI_DMA_MASK)); if (ret) { cnss_pr_err("PCI DMA mask: %d, err: %d\n", PCI_DMA_MASK, ret); return ret; } ret = pci_set_consistent_dma_mask(pci_dev, DMA_BIT_MASK(PCI_DMA_MASK)); if (ret) cnss_pr_err("PCI consistent DMA mask: %d, err: %d\n", PCI_DMA_MASK, ret); return ret; } #else /* CONFIG_PCI_MSM */ static inline int cnss_pci_set_dma_mask(struct pci_dev *pci_dev) { return 0; } #endif /* CONFIG_PCI_MSM */ static int cnss_pci_enable_bus(struct cnss_pci_data *pci_priv) { int ret = 0; Loading Loading @@ -984,19 +1031,9 @@ static int cnss_pci_enable_bus(struct cnss_pci_data *pci_priv) goto disable_device; } ret = pci_set_dma_mask(pci_dev, DMA_BIT_MASK(PCI_DMA_MASK)); if (ret) { cnss_pr_err("Failed to set PCI DMA mask (%d), err = %d\n", ret, PCI_DMA_MASK); goto release_region; } ret = pci_set_consistent_dma_mask(pci_dev, DMA_BIT_MASK(PCI_DMA_MASK)); if (ret) { cnss_pr_err("Failed to set PCI consistent DMA mask (%d), err = %d\n", ret, PCI_DMA_MASK); ret = cnss_pci_set_dma_mask(pci_dev); if (ret) goto release_region; } pci_set_master(pci_dev); Loading Loading @@ -1565,6 +1602,7 @@ static const struct pci_device_id cnss_pci_id_table[] = { }; MODULE_DEVICE_TABLE(pci, cnss_pci_id_table); #ifdef CONFIG_PCI_MSM static const struct dev_pm_ops cnss_pm_ops = { SET_SYSTEM_SLEEP_PM_OPS(cnss_pci_suspend, cnss_pci_resume) SET_NOIRQ_SYSTEM_SLEEP_PM_OPS(cnss_pci_suspend_noirq, Loading @@ -1572,20 +1610,24 @@ static const struct dev_pm_ops cnss_pm_ops = { SET_RUNTIME_PM_OPS(cnss_pci_runtime_suspend, cnss_pci_runtime_resume, cnss_pci_runtime_idle) }; #endif struct pci_driver cnss_pci_driver = { .name = "cnss_pci", .id_table = cnss_pci_id_table, .probe = cnss_pci_probe, .remove = cnss_pci_remove, #ifdef CONFIG_PCI_MSM .driver = { .pm = &cnss_pm_ops, }, #endif }; int cnss_pci_init(struct cnss_plat_data *plat_priv) #ifdef CONFIG_PCI_MSM static inline int cnss_msm_pcie_enumerate(struct cnss_plat_data *plat_priv) { int ret = 0; int ret; struct device *dev = &plat_priv->plat_dev->dev; u32 rc_num; Loading @@ -1602,6 +1644,25 @@ int cnss_pci_init(struct cnss_plat_data *plat_priv) goto out; } return 0; out: return ret; } #else /* CONFIG_PCI_MSM */ static inline int cnss_msm_pcie_enumerate(struct cnss_plat_data *plat_priv) { return 0; } #endif /* CONFIG_PCI_MSM */ int cnss_pci_init(struct cnss_plat_data *plat_priv) { int ret; ret = cnss_msm_pcie_enumerate(plat_priv); if (ret) goto out; ret = pci_register_driver(&cnss_pci_driver); if (ret) { cnss_pr_err("Failed to register to PCI framework, err = %d\n", Loading
drivers/net/wireless/cnss2/pci.h +14 −1 Original line number Diff line number Diff line /* Copyright (c) 2016-2017, The Linux Foundation. All rights reserved. /* Copyright (c) 2016-2018, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -124,8 +124,21 @@ static inline int cnss_pci_get_auto_suspended(void *bus_priv) return atomic_read(&pci_priv->auto_suspended); } #ifdef CONFIG_PCI_MSM int cnss_suspend_pci_link(struct cnss_pci_data *pci_priv); int cnss_resume_pci_link(struct cnss_pci_data *pci_priv); #else /* CONFIG_PCI_MSM */ static inline int cnss_suspend_pci_link(struct cnss_pci_data *pci_priv) { return 0; } static inline int cnss_resume_pci_link(struct cnss_pci_data *pci_priv) { return 0; } #endif /* CONFIG_PCI_MSM */ int cnss_pci_init(struct cnss_plat_data *plat_priv); void cnss_pci_deinit(struct cnss_plat_data *plat_priv); int cnss_pci_alloc_fw_mem(struct cnss_pci_data *pci_priv); Loading
drivers/net/wireless/cnss2/power.c +5 −1 Original line number Diff line number Diff line /* Copyright (c) 2016-2017, The Linux Foundation. All rights reserved. /* Copyright (c) 2016-2018, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -110,6 +110,7 @@ out: return ret; } #ifndef CONFIG_MSM_GVM_QUIN static int cnss_vreg_on(struct cnss_plat_data *plat_priv) { int ret = 0; Loading Loading @@ -229,6 +230,7 @@ static int cnss_vreg_off(struct cnss_plat_data *plat_priv) return ret; } #endif /* CONFIG_MSM_GVM_QUIN */ int cnss_get_pinctrl(struct cnss_plat_data *plat_priv) { Loading Loading @@ -285,6 +287,7 @@ out: return ret; } #ifndef CONFIG_MSM_GVM_QUIN static int cnss_select_pinctrl_state(struct cnss_plat_data *plat_priv, bool state) { Loading Loading @@ -368,6 +371,7 @@ void cnss_power_off_device(struct cnss_plat_data *plat_priv) cnss_select_pinctrl_state(plat_priv, false); cnss_vreg_off(plat_priv); } #endif /* CONFIG_MSM_GVM_QUIN */ void cnss_set_pin_connect_status(struct cnss_plat_data *plat_priv) { Loading