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

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

mhi: cntrl: qcom: disable boot logger after forced suspend



Prioritize handling of forced suspend/resume cycle at mission
mode entry and disable boot logger channel after the cycle has
completed to avoid race conditions.

Change-Id: Iddc3d560fa687399434cc8ad51c08509ddfadf70
Signed-off-by: default avatarBhaumik Bhatt <bbhatt@codeaurora.org>
parent 0b4c0d77
Loading
Loading
Loading
Loading
+13 −10
Original line number Diff line number Diff line
@@ -334,7 +334,6 @@ 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;
	struct mhi_device *boot_dev;
	/* 15 sec timeout for booting device */
	const u32 timeout = msecs_to_jiffies(15000);

@@ -346,15 +345,6 @@ static void mhi_boot_monitor(void *data, async_cookie_t cookie)

	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 disable boot log channel */
	if (mhi_cntrl->ee == MHI_EE_AMSS) {
		boot_dev = arch_info->boot_dev;
		if (boot_dev)
			mhi_unprepare_from_transfer(boot_dev);

		pm_runtime_allow(&mhi_dev->pci_dev->dev);
	}
}

int mhi_arch_power_up(struct mhi_controller *mhi_cntrl)
@@ -369,6 +359,19 @@ int mhi_arch_power_up(struct mhi_controller *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;

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

	pm_runtime_allow(&mhi_dev->pci_dev->dev);
}

static  int mhi_arch_pcie_scale_bw(struct mhi_controller *mhi_cntrl,
				   struct pci_dev *pci_dev,
				   struct mhi_link_info *link_info)
+2 −1
Original line number Diff line number Diff line
/* Copyright (c) 2018-2019, The Linux Foundation. All rights reserved.
/* Copyright (c) 2018-2020, The Linux Foundation. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 and
@@ -606,6 +606,7 @@ static void mhi_status_cb(struct mhi_controller *mhi_cntrl,
		if (!ret)
			mhi_runtime_resume(dev);
		pm_runtime_put(dev);
		mhi_arch_mission_mode_enter(mhi_cntrl);
		break;
	default:
		MHI_ERR("Unhandled cb:0x%x\n", reason);
+6 −1
Original line number Diff line number Diff line
/* Copyright (c) 2018-2019, The Linux Foundation. All rights reserved.
/* Copyright (c) 2018-2020, The Linux Foundation. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 and
@@ -73,6 +73,7 @@ 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);
@@ -120,6 +121,10 @@ 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)
{
}

#endif

#endif /* _MHI_QCOM_ */