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

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

Merge "cnss2: WAR to trigger self-recovery for link recover callback"

parents 50dd5917 ec8137ae
Loading
Loading
Loading
Loading
+23 −3
Original line number Original line Diff line number Diff line
@@ -1196,7 +1196,7 @@ static int cnss_pci_set_mhi_state(struct cnss_pci_data *pci_priv,
	cnss_pr_err("Failed to set MHI state: %s(%d) ret: %d\n",
	cnss_pr_err("Failed to set MHI state: %s(%d) ret: %d\n",
		    cnss_mhi_state_to_str(mhi_state), mhi_state, ret);
		    cnss_mhi_state_to_str(mhi_state), mhi_state, ret);


	if (mhi_state == CNSS_MHI_RESUME)
	if (mhi_state == CNSS_MHI_RESUME && ret != -ETIMEDOUT)
		cnss_force_fw_assert_async(&pci_priv->pci_dev->dev);
		cnss_force_fw_assert_async(&pci_priv->pci_dev->dev);


	return ret;
	return ret;
@@ -2458,6 +2458,8 @@ static void cnss_pci_event_cb(struct msm_pcie_notify *notify)
{
{
	struct pci_dev *pci_dev;
	struct pci_dev *pci_dev;
	struct cnss_pci_data *pci_priv;
	struct cnss_pci_data *pci_priv;
	struct cnss_plat_data *plat_priv = NULL;
	int ret = 0;


	if (!notify)
	if (!notify)
		return;
		return;
@@ -2471,6 +2473,23 @@ static void cnss_pci_event_cb(struct msm_pcie_notify *notify)
		return;
		return;


	switch (notify->event) {
	switch (notify->event) {
	case MSM_PCIE_EVENT_LINK_RECOVER:
		cnss_pr_dbg("PCI link recover callback\n");

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

		plat_priv->ctrl_params.quirks |= BIT(LINK_DOWN_SELF_RECOVERY);

		ret = msm_pcie_pm_control(MSM_PCIE_HANDLE_LINKDOWN,
					  pci_dev->bus->number, pci_dev, NULL,
					  PM_OPTIONS_DEFAULT);
		if (ret)
			cnss_pci_handle_linkdown(pci_priv);
		break;
	case MSM_PCIE_EVENT_LINKDOWN:
	case MSM_PCIE_EVENT_LINKDOWN:
		cnss_pr_dbg("PCI link down event callback\n");
		cnss_pr_dbg("PCI link down event callback\n");
		cnss_pci_handle_linkdown(pci_priv);
		cnss_pci_handle_linkdown(pci_priv);
@@ -2510,7 +2529,8 @@ static int cnss_reg_pci_event(struct cnss_pci_data *pci_priv)
	struct msm_pcie_register_event *pci_event;
	struct msm_pcie_register_event *pci_event;


	pci_event = &pci_priv->msm_pci_event;
	pci_event = &pci_priv->msm_pci_event;
	pci_event->events = MSM_PCIE_EVENT_LINKDOWN |
	pci_event->events = MSM_PCIE_EVENT_LINK_RECOVER |
			    MSM_PCIE_EVENT_LINKDOWN |
			    MSM_PCIE_EVENT_WAKEUP;
			    MSM_PCIE_EVENT_WAKEUP;


	if (cnss_pci_is_drv_supported(pci_priv))
	if (cnss_pci_is_drv_supported(pci_priv))