Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f367cb54 authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "cnss2: Add bus abstract API to check if device is down"

parents d303f923 2546998b
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
@@ -372,3 +372,18 @@ int cnss_bus_update_status(struct cnss_plat_data *plat_priv,
		return -EINVAL;
	}
}

int cnss_bus_is_device_down(struct cnss_plat_data *plat_priv)
{
	if (!plat_priv)
		return -ENODEV;

	switch (plat_priv->bus_type) {
	case CNSS_BUS_PCI:
		return cnss_pcie_is_device_down(plat_priv->bus_priv);
	default:
		cnss_pr_dbg("Unsupported bus type: %d\n",
			    plat_priv->bus_type);
		return 0;
	}
}
+1 −0
Original line number Diff line number Diff line
@@ -45,5 +45,6 @@ int cnss_bus_call_driver_modem_status(struct cnss_plat_data *plat_priv,
				      int modem_current_status);
int cnss_bus_update_status(struct cnss_plat_data *plat_priv,
			   enum cnss_driver_status status);
int cnss_bus_is_device_down(struct cnss_plat_data *plat_priv);

#endif /* _CNSS_BUS_H */
+2 −2
Original line number Diff line number Diff line
@@ -1137,7 +1137,7 @@ int cnss_force_fw_assert(struct device *dev)
		return -EOPNOTSUPP;
	}

	if (cnss_pci_is_device_down(dev)) {
	if (cnss_bus_is_device_down(plat_priv)) {
		cnss_pr_info("Device is already in bad state, ignore force assert\n");
		return 0;
	}
@@ -1173,7 +1173,7 @@ int cnss_force_collect_rddm(struct device *dev)
		return -EOPNOTSUPP;
	}

	if (cnss_pci_is_device_down(dev)) {
	if (cnss_bus_is_device_down(plat_priv)) {
		cnss_pr_info("Device is already in bad state, ignore force collect rddm\n");
		return 0;
	}
+14 −8
Original line number Diff line number Diff line
@@ -545,25 +545,31 @@ int cnss_pci_link_down(struct device *dev)
}
EXPORT_SYMBOL(cnss_pci_link_down);

int cnss_pci_is_device_down(struct device *dev)
int cnss_pcie_is_device_down(struct cnss_pci_data *pci_priv)
{
	struct cnss_plat_data *plat_priv = cnss_bus_dev_to_plat_priv(dev);
	struct cnss_pci_data *pci_priv;
	struct cnss_plat_data *plat_priv;

	if (!plat_priv) {
		cnss_pr_err("plat_priv is NULL\n");
	if (!pci_priv) {
		cnss_pr_err("pci_priv is NULL\n");
		return -ENODEV;
	}

	pci_priv = plat_priv->bus_priv;
	if (!pci_priv) {
		cnss_pr_err("pci_priv is NULL\n");
	plat_priv = pci_priv->plat_priv;
	if (!plat_priv) {
		cnss_pr_err("plat_priv is NULL\n");
		return -ENODEV;
	}

	return test_bit(CNSS_DEV_ERR_NOTIFY, &plat_priv->driver_state) |
		pci_priv->pci_link_down_ind;
}

int cnss_pci_is_device_down(struct device *dev)
{
	struct cnss_pci_data *pci_priv = cnss_get_pci_priv(to_pci_dev(dev));

	return cnss_pcie_is_device_down(pci_priv);
}
EXPORT_SYMBOL(cnss_pci_is_device_down);

static char *cnss_mhi_state_to_str(enum cnss_mhi_state mhi_state)
+1 −0
Original line number Diff line number Diff line
@@ -183,5 +183,6 @@ void cnss_pci_pm_runtime_put_noidle(struct cnss_pci_data *pci_priv);
void cnss_pci_pm_runtime_mark_last_busy(struct cnss_pci_data *pci_priv);
int cnss_pci_update_status(struct cnss_pci_data *pci_priv,
			   enum cnss_driver_status status);
int cnss_pcie_is_device_down(struct cnss_pci_data *pci_priv);

#endif /* _CNSS_PCI_H */