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

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

Merge "cnss2: Avoid forcing firmware assert if MHI is starting to power off"

parents b775a871 afa7fca1
Loading
Loading
Loading
Loading
+12 −3
Original line number Original line Diff line number Diff line
@@ -811,6 +811,8 @@ static char *cnss_mhi_state_to_str(enum cnss_mhi_state mhi_state)
		return "DEINIT";
		return "DEINIT";
	case CNSS_MHI_POWER_ON:
	case CNSS_MHI_POWER_ON:
		return "POWER_ON";
		return "POWER_ON";
	case CNSS_MHI_POWERING_OFF:
		return "POWERING_OFF";
	case CNSS_MHI_POWER_OFF:
	case CNSS_MHI_POWER_OFF:
		return "POWER_OFF";
		return "POWER_OFF";
	case CNSS_MHI_FORCE_POWER_OFF:
	case CNSS_MHI_FORCE_POWER_OFF:
@@ -888,9 +890,13 @@ static void cnss_pci_set_mhi_state_bit(struct cnss_pci_data *pci_priv,
	case CNSS_MHI_POWER_ON:
	case CNSS_MHI_POWER_ON:
		set_bit(CNSS_MHI_POWER_ON, &pci_priv->mhi_state);
		set_bit(CNSS_MHI_POWER_ON, &pci_priv->mhi_state);
		break;
		break;
	case CNSS_MHI_POWERING_OFF:
		set_bit(CNSS_MHI_POWERING_OFF, &pci_priv->mhi_state);
		break;
	case CNSS_MHI_POWER_OFF:
	case CNSS_MHI_POWER_OFF:
	case CNSS_MHI_FORCE_POWER_OFF:
	case CNSS_MHI_FORCE_POWER_OFF:
		clear_bit(CNSS_MHI_POWER_ON, &pci_priv->mhi_state);
		clear_bit(CNSS_MHI_POWER_ON, &pci_priv->mhi_state);
		clear_bit(CNSS_MHI_POWERING_OFF, &pci_priv->mhi_state);
		clear_bit(CNSS_MHI_TRIGGER_RDDM, &pci_priv->mhi_state);
		clear_bit(CNSS_MHI_TRIGGER_RDDM, &pci_priv->mhi_state);
		clear_bit(CNSS_MHI_RDDM_DONE, &pci_priv->mhi_state);
		clear_bit(CNSS_MHI_RDDM_DONE, &pci_priv->mhi_state);
		break;
		break;
@@ -1025,6 +1031,7 @@ static void cnss_pci_power_off_mhi(struct cnss_pci_data *pci_priv)
		return;
		return;


	cnss_pci_set_mhi_state_bit(pci_priv, CNSS_MHI_RESUME);
	cnss_pci_set_mhi_state_bit(pci_priv, CNSS_MHI_RESUME);
	cnss_pci_set_mhi_state_bit(pci_priv, CNSS_MHI_POWERING_OFF);


	if (!pci_priv->pci_link_down_ind)
	if (!pci_priv->pci_link_down_ind)
		cnss_pci_set_mhi_state(pci_priv, CNSS_MHI_POWER_OFF);
		cnss_pci_set_mhi_state(pci_priv, CNSS_MHI_POWER_OFF);
@@ -3417,6 +3424,10 @@ int cnss_pci_force_fw_assert_hdlr(struct cnss_pci_data *pci_priv)
	if (!plat_priv)
	if (!plat_priv)
		return -ENODEV;
		return -ENODEV;


	if (!test_bit(CNSS_MHI_POWER_ON, &pci_priv->mhi_state) ||
	    test_bit(CNSS_MHI_POWERING_OFF, &pci_priv->mhi_state))
		return -EINVAL;

	cnss_auto_resume(&pci_priv->pci_dev->dev);
	cnss_auto_resume(&pci_priv->pci_dev->dev);
	cnss_pci_dump_misc_reg(pci_priv);
	cnss_pci_dump_misc_reg(pci_priv);
	cnss_pci_dump_shadow_reg(pci_priv);
	cnss_pci_dump_shadow_reg(pci_priv);
@@ -3424,9 +3435,7 @@ int cnss_pci_force_fw_assert_hdlr(struct cnss_pci_data *pci_priv)
	ret = cnss_pci_set_mhi_state(pci_priv, CNSS_MHI_TRIGGER_RDDM);
	ret = cnss_pci_set_mhi_state(pci_priv, CNSS_MHI_TRIGGER_RDDM);
	if (ret) {
	if (ret) {
		if (!test_bit(CNSS_MHI_POWER_ON, &pci_priv->mhi_state) ||
		if (!test_bit(CNSS_MHI_POWER_ON, &pci_priv->mhi_state) ||
		    test_bit(CNSS_DRIVER_UNLOADING, &plat_priv->driver_state) ||
		    test_bit(CNSS_MHI_POWERING_OFF, &pci_priv->mhi_state)) {
		    test_bit(CNSS_DRIVER_IDLE_SHUTDOWN,
			     &plat_priv->driver_state)) {
			cnss_pr_dbg("MHI is not powered on, ignore RDDM failure\n");
			cnss_pr_dbg("MHI is not powered on, ignore RDDM failure\n");
			return 0;
			return 0;
		}
		}
+1 −0
Original line number Original line Diff line number Diff line
@@ -16,6 +16,7 @@ enum cnss_mhi_state {
	CNSS_MHI_INIT,
	CNSS_MHI_INIT,
	CNSS_MHI_DEINIT,
	CNSS_MHI_DEINIT,
	CNSS_MHI_POWER_ON,
	CNSS_MHI_POWER_ON,
	CNSS_MHI_POWERING_OFF,
	CNSS_MHI_POWER_OFF,
	CNSS_MHI_POWER_OFF,
	CNSS_MHI_FORCE_POWER_OFF,
	CNSS_MHI_FORCE_POWER_OFF,
	CNSS_MHI_SUSPEND,
	CNSS_MHI_SUSPEND,