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

Commit 97160593 authored by Bhaumik Bhatt's avatar Bhaumik Bhatt
Browse files

mhi: cntrl: qcom: remove boot monitor thread to use status cb



Remove the boot monitor thread and use the mission mode entry
callback instead to handle runtime pm enablement and boot
logger channel cleanup.

Change-Id: Ia018d51987d3201bc65223c3cdf7165d2f6da4ca
Signed-off-by: default avatarBhaumik Bhatt <bbhatt@codeaurora.org>
parent 35d006a5
Loading
Loading
Loading
Loading
+7 −41
Original line number Diff line number Diff line
@@ -27,7 +27,6 @@ struct arch_info {
	u32 bus_client;
	struct msm_pcie_register_event pcie_reg_event;
	struct pci_saved_state *pcie_state;
	async_cookie_t cookie;
	void *boot_ipc_log;
	void *tsync_ipc_log;
	struct mhi_device *boot_dev;
@@ -200,7 +199,7 @@ static int mhi_arch_esoc_ops_power_on(void *priv, unsigned int flags)
		return 0;
	}

	MHI_LOG("Enter\n");
	MHI_LOG("Enter: mdm_crashed:%d\n", flags & ESOC_HOOK_MDM_CRASH);

	/* reset rpm state */
	pm_runtime_set_active(&pci_dev->dev);
@@ -221,7 +220,6 @@ static int mhi_arch_esoc_ops_power_on(void *priv, unsigned int flags)
		return ret;
	}

	mhi_dev->mdm_state = (flags & ESOC_HOOK_MDM_CRASH);
	return mhi_pci_probe(pci_dev, NULL);
}

@@ -282,9 +280,6 @@ static void mhi_arch_esoc_ops_power_off(void *priv, unsigned int flags)
	mhi_deinit_pci_dev(mhi_cntrl);
	mhi_arch_link_off(mhi_cntrl);

	/* wait for boot monitor to exit */
	async_synchronize_cookie(arch_info->cookie + 1);

	mhi_arch_pcie_deinit(mhi_cntrl);
	mhi_cntrl->dev = NULL;

@@ -333,50 +328,21 @@ static void mhi_bl_remove(struct mhi_device *mhi_device)
		       HLOG "Received Remove notif.\n");
}

static void mhi_boot_monitor(void *data, async_cookie_t cookie)
{
	struct mhi_controller *mhi_cntrl = data;
	struct mhi_dev *mhi_dev = mhi_controller_get_devdata(mhi_cntrl);
	struct arch_info *arch_info = mhi_dev->arch_info;
	/* 15 sec timeout for booting device */
	const u32 timeout = msecs_to_jiffies(15000);

	/* wait for device to enter boot stage */
	wait_event_timeout(mhi_cntrl->state_event, mhi_cntrl->ee == MHI_EE_AMSS
			   || mhi_cntrl->ee == MHI_EE_DISABLE_TRANSITION
			   || mhi_cntrl->power_down,
			   timeout);

	ipc_log_string(arch_info->boot_ipc_log, HLOG "Device current ee = %s\n",
		       TO_MHI_EXEC_STR(mhi_cntrl->ee));

	/* if we successfully booted to amss, enable runtime pm */
	if (mhi_cntrl->ee == MHI_EE_AMSS)
		if (!mhi_dev->drv_supported || arch_info->drv_connected)
			pm_runtime_allow(&mhi_dev->pci_dev->dev);
}

int mhi_arch_power_up(struct mhi_controller *mhi_cntrl)
{
	struct mhi_dev *mhi_dev = mhi_controller_get_devdata(mhi_cntrl);
	struct arch_info *arch_info = mhi_dev->arch_info;

	/* start a boot monitor if not in crashed state */
	if (!mhi_dev->mdm_state)
		arch_info->cookie = async_schedule(mhi_boot_monitor, mhi_cntrl);

	return 0;
}

void mhi_arch_mission_mode_enter(struct mhi_controller *mhi_cntrl)
{
	struct mhi_dev *mhi_dev = mhi_controller_get_devdata(mhi_cntrl);
	struct arch_info *arch_info = mhi_dev->arch_info;
	struct mhi_device *boot_dev = arch_info->boot_dev;

	ipc_log_string(arch_info->boot_ipc_log,
		       HLOG "Device entered mission mode\n");

	/* disable boot logger channel */
	if (boot_dev)
		mhi_unprepare_from_transfer(boot_dev);

	if (!mhi_dev->drv_supported || arch_info->drv_connected)
		pm_runtime_allow(&mhi_dev->pci_dev->dev);
}

static  int mhi_arch_pcie_scale_bw(struct mhi_controller *mhi_cntrl,
+0 −4
Original line number Diff line number Diff line
@@ -576,10 +576,6 @@ static int mhi_qcom_power_up(struct mhi_controller *mhi_cntrl)
	mhi_cntrl->ee = 0;
	mhi_cntrl->power_down = false;

	ret = mhi_arch_power_up(mhi_cntrl);
	if (ret)
		return ret;

	ret = mhi_async_power_up(mhi_cntrl);

	/* Update modem serial Info */
+0 −7
Original line number Diff line number Diff line
@@ -50,7 +50,6 @@ struct mhi_dev {
	int resn;
	void *arch_info;
	bool powered_on;
	bool mdm_state;
	dma_addr_t iova_start;
	dma_addr_t iova_stop;
	enum mhi_suspend_mode suspend_mode;
@@ -72,7 +71,6 @@ void mhi_reg_write_work(struct work_struct *w);
#ifdef CONFIG_ARCH_QCOM

void mhi_arch_mission_mode_enter(struct mhi_controller *mhi_cntrl);
int mhi_arch_power_up(struct mhi_controller *mhi_cntrl);
int mhi_arch_pcie_init(struct mhi_controller *mhi_cntrl);
void mhi_arch_pcie_deinit(struct mhi_controller *mhi_cntrl);
int mhi_arch_link_suspend(struct mhi_controller *mhi_cntrl);
@@ -99,11 +97,6 @@ static inline int mhi_arch_link_resume(struct mhi_controller *mhi_cntrl)
	return 0;
}

static inline int mhi_arch_power_up(struct mhi_controller *mhi_cntrl)
{
	return 0;
}

static inline void mhi_arch_mission_mode_enter(struct mhi_controller *mhi_cntrl)
{
}