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

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

Merge "mhi: core: Notify controller for bootup timeouts"

parents 000b2a1d 34224179
Loading
Loading
Loading
Loading
+7 −0
Original line number Original line Diff line number Diff line
@@ -666,6 +666,8 @@ void mhi_fw_load_handler(struct mhi_controller *mhi_cntrl)


	if (!ret || MHI_PM_IN_ERROR_STATE(mhi_cntrl->pm_state)) {
	if (!ret || MHI_PM_IN_ERROR_STATE(mhi_cntrl->pm_state)) {
		MHI_CNTRL_ERR("MHI did not enter BHIE\n");
		MHI_CNTRL_ERR("MHI did not enter BHIE\n");
		mhi_cntrl->status_cb(mhi_cntrl, mhi_cntrl->priv_data,
				     MHI_CB_BOOTUP_TIMEOUT);
		goto error_read;
		goto error_read;
	}
	}


@@ -675,6 +677,11 @@ void mhi_fw_load_handler(struct mhi_controller *mhi_cntrl)
			       /* last entry is vec table */
			       /* last entry is vec table */
			       &image_info->mhi_buf[image_info->entries - 1]);
			       &image_info->mhi_buf[image_info->entries - 1]);


	if (ret) {
		mhi_cntrl->status_cb(mhi_cntrl, mhi_cntrl->priv_data,
				     MHI_CB_BOOTUP_TIMEOUT);
	}

	MHI_CNTRL_LOG("amss fw_load ret:%d\n", ret);
	MHI_CNTRL_LOG("amss fw_load ret:%d\n", ret);


	release_firmware(firmware);
	release_firmware(firmware);
+21 −7
Original line number Original line Diff line number Diff line
@@ -252,7 +252,7 @@ int mhi_ready_state_transition(struct mhi_controller *mhi_cntrl)
	u32 reset = 1, ready = 0;
	u32 reset = 1, ready = 0;
	struct mhi_event *mhi_event;
	struct mhi_event *mhi_event;
	enum MHI_PM_STATE cur_state;
	enum MHI_PM_STATE cur_state;
	int ret, i;
	int ret = -EIO, i;


	MHI_CNTRL_LOG("Waiting to enter READY state\n");
	MHI_CNTRL_LOG("Waiting to enter READY state\n");


@@ -270,11 +270,13 @@ int mhi_ready_state_transition(struct mhi_controller *mhi_cntrl)


	/* device enter into error state */
	/* device enter into error state */
	if (MHI_PM_IN_FATAL_STATE(mhi_cntrl->pm_state))
	if (MHI_PM_IN_FATAL_STATE(mhi_cntrl->pm_state))
		return -EIO;
		goto error_ready;


	/* device did not transition to ready state */
	/* device did not transition to ready state */
	if (reset || !ready)
	if (reset || !ready) {
		return -ETIMEDOUT;
		ret = -ETIMEDOUT;
		goto error_ready;
	}


	MHI_CNTRL_LOG("Device in READY State\n");
	MHI_CNTRL_LOG("Device in READY State\n");
	write_lock_irq(&mhi_cntrl->pm_lock);
	write_lock_irq(&mhi_cntrl->pm_lock);
@@ -286,7 +288,7 @@ int mhi_ready_state_transition(struct mhi_controller *mhi_cntrl)
		MHI_CNTRL_ERR("Error moving to state %s from %s\n",
		MHI_CNTRL_ERR("Error moving to state %s from %s\n",
				to_mhi_pm_state_str(MHI_PM_POR),
				to_mhi_pm_state_str(MHI_PM_POR),
				to_mhi_pm_state_str(cur_state));
				to_mhi_pm_state_str(cur_state));
		return -EIO;
		goto error_ready;
	}
	}
	read_lock_bh(&mhi_cntrl->pm_lock);
	read_lock_bh(&mhi_cntrl->pm_lock);
	if (!MHI_REG_ACCESS_VALID(mhi_cntrl->pm_state))
	if (!MHI_REG_ACCESS_VALID(mhi_cntrl->pm_state))
@@ -295,6 +297,7 @@ int mhi_ready_state_transition(struct mhi_controller *mhi_cntrl)
	ret = mhi_init_mmio(mhi_cntrl);
	ret = mhi_init_mmio(mhi_cntrl);
	if (ret) {
	if (ret) {
		MHI_CNTRL_ERR("Error programming mmio registers\n");
		MHI_CNTRL_ERR("Error programming mmio registers\n");
		ret = -EIO;
		goto error_mmio;
		goto error_mmio;
	}
	}


@@ -326,7 +329,11 @@ int mhi_ready_state_transition(struct mhi_controller *mhi_cntrl)
error_mmio:
error_mmio:
	read_unlock_bh(&mhi_cntrl->pm_lock);
	read_unlock_bh(&mhi_cntrl->pm_lock);


	return -EIO;
error_ready:
	mhi_cntrl->status_cb(mhi_cntrl, mhi_cntrl->priv_data,
			     MHI_CB_BOOTUP_TIMEOUT);

	return ret;
}
}


int mhi_pm_m0_transition(struct mhi_controller *mhi_cntrl)
int mhi_pm_m0_transition(struct mhi_controller *mhi_cntrl)
@@ -1137,7 +1144,14 @@ int mhi_sync_power_up(struct mhi_controller *mhi_cntrl)
			   MHI_PM_IN_ERROR_STATE(mhi_cntrl->pm_state),
			   MHI_PM_IN_ERROR_STATE(mhi_cntrl->pm_state),
			   msecs_to_jiffies(mhi_cntrl->timeout_ms));
			   msecs_to_jiffies(mhi_cntrl->timeout_ms));


	return (MHI_IN_MISSION_MODE(mhi_cntrl->ee)) ? 0 : -ETIMEDOUT;
	if (MHI_IN_MISSION_MODE(mhi_cntrl->ee))
		return 0;

	MHI_ERR("MHI did not reach mission mode within %d ms\n",
		mhi_cntrl->timeout_ms);
	mhi_cntrl->status_cb(mhi_cntrl, mhi_cntrl->priv_data,
			     MHI_CB_BOOTUP_TIMEOUT);
	return -ETIMEDOUT;
}
}
EXPORT_SYMBOL(mhi_sync_power_up);
EXPORT_SYMBOL(mhi_sync_power_up);


+2 −0
Original line number Original line Diff line number Diff line
@@ -27,6 +27,7 @@ struct mhi_sfr_info;
 * @MHI_CB_EE_MISSION_MODE: MHI device entered Mission Mode ee
 * @MHI_CB_EE_MISSION_MODE: MHI device entered Mission Mode ee
 * @MHI_CB_SYS_ERROR: MHI device enter error state (may recover)
 * @MHI_CB_SYS_ERROR: MHI device enter error state (may recover)
 * @MHI_CB_FATAL_ERROR: MHI device entered fatal error
 * @MHI_CB_FATAL_ERROR: MHI device entered fatal error
 * @MHI_CB_BOOTUP_TIMEOUT: MHI device did not get to a bootup state in time
 */
 */
enum MHI_CB {
enum MHI_CB {
	MHI_CB_IDLE,
	MHI_CB_IDLE,
@@ -39,6 +40,7 @@ enum MHI_CB {
	MHI_CB_SYS_ERROR,
	MHI_CB_SYS_ERROR,
	MHI_CB_FATAL_ERROR,
	MHI_CB_FATAL_ERROR,
	MHI_CB_FW_FALLBACK_IMG,
	MHI_CB_FW_FALLBACK_IMG,
	MHI_CB_BOOTUP_TIMEOUT,
};
};


/**
/**