cnss2: Add wlan PCIe switch property

Add wlan dts property qcom,pcie_switch_type to mark the wlan chip
is attached on the PCIe switch NTN3. If it's PCIE_SWITCH_NTN3, cnss
driver will enable/disable accordingly PCIe switch dsp link when
power on and shutdown wlan chip.

Change-Id: I48bb56879d5c00f05d0b4e62888027c435f861ee
CRs-Fixed: 3878342
This commit is contained in:
Jiani Liu 2024-06-12 11:49:36 +08:00 committed by Ravindra Konda
parent f69aced6b8
commit b458d07087
3 changed files with 25 additions and 0 deletions

View File

@ -5598,6 +5598,7 @@ static int cnss_probe(struct platform_device *plat_dev)
cnss_get_pm_domain_info(plat_priv);
cnss_get_wlaon_pwr_ctrl_info(plat_priv);
cnss_power_misc_params_init(plat_priv);
cnss_pci_of_switch_type_init(plat_priv);
cnss_get_tcs_info(plat_priv);
cnss_get_cpr_info(plat_priv);
cnss_aop_interface_init(plat_priv);

View File

@ -118,6 +118,11 @@ enum cnss_vreg_type {
CNSS_VREG_PRIM,
};
enum cnss_pci_switch_type {
PCIE_DIRECT_ATTACH = 0,
PCIE_SWITCH_NTN3,
};
struct cnss_clk_cfg {
const char *name;
u32 freq;
@ -650,6 +655,7 @@ struct cnss_plat_data {
bool sleep_clk;
struct wlchip_serial_id_v01 serial_id;
bool ipa_shared_cb_enable;
u32 pcie_switch_type;
};
#if IS_ENABLED(CONFIG_ARCH_QCOM)
@ -741,6 +747,7 @@ void cnss_aop_interface_deinit(struct cnss_plat_data *plat_priv);
int cnss_aop_pdc_reconfig(struct cnss_plat_data *plat_priv);
int cnss_aop_send_msg(struct cnss_plat_data *plat_priv, char *msg);
void cnss_power_misc_params_init(struct cnss_plat_data *plat_priv);
void cnss_pci_of_switch_type_init(struct cnss_plat_data *plat_priv);
int cnss_aop_ol_cpr_cfg_setup(struct cnss_plat_data *plat_priv,
struct wlfw_pmu_cfg_v01 *fw_pmu_cfg);
int cnss_request_firmware_direct(struct cnss_plat_data *plat_priv,

View File

@ -7377,6 +7377,23 @@ static int cnss_try_suspend(struct cnss_plat_data *plat_priv)
}
#endif
void cnss_pci_of_switch_type_init(struct cnss_plat_data *plat_priv)
{
struct device *dev = &plat_priv->plat_dev->dev;
int ret;
if (dev && dev->of_node) {
ret = of_property_read_u32(dev->of_node,
"qcom,pcie-switch-type",
&plat_priv->pcie_switch_type);
if (ret)
plat_priv->pcie_switch_type = 0;
} else {
cnss_pr_err("device or node is not available.");
}
cnss_pr_dbg("pcie_switch_type is %d", plat_priv->pcie_switch_type);
}
/* Setting to use this cnss_pm_domain ops will let PM framework override the
* ops from dev->bus->pm which is pci_dev_pm_ops from pci-driver.c. This ops
* has to take care everything device driver needed which is currently done