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

Commit 4aa821fb authored by Prasad Sodagudi's avatar Prasad Sodagudi
Browse files

Do not use __qcom_scm_is_call_available in atomic context



__qcom_scm_is_call_available() should be used in the non-atomic
context, so fix the couple of wrapper functions which are using
__qcom_scm_is_call_available in atomic context.

Change-Id: I2c205a68ed2d6c317ccb43b90dd4cbc821eeeab5
Signed-off-by: default avatarPrasad Sodagudi <psodagud@codeaurora.org>
parent b73840d2
Loading
Loading
Loading
Loading
+8 −2
Original line number Diff line number Diff line
@@ -1059,6 +1059,7 @@ int __qcom_scm_get_feat_version(struct device *dev, u64 feat_id, u64 *version)

void __qcom_scm_halt_spmi_pmic_arbiter(struct device *dev)
{
	int ret;
	struct qcom_scm_desc desc = {
		.svc = QCOM_SCM_SVC_PWR,
		.cmd = QCOM_SCM_PWR_IO_DISABLE_PMIC_ARBITER,
@@ -1068,11 +1069,14 @@ void __qcom_scm_halt_spmi_pmic_arbiter(struct device *dev)
	desc.args[0] = 0;
	desc.arginfo = QCOM_SCM_ARGS(1);

	qcom_scm_call_atomic(dev, &desc);
	ret = qcom_scm_call_atomic(dev, &desc);
	if (ret)
		pr_err("Failed to halt_spmi_pmic_arbiter=0x%x\n", ret);
}

void __qcom_scm_deassert_ps_hold(struct device *dev)
{
	int ret;
	struct qcom_scm_desc desc = {
		.svc = QCOM_SCM_SVC_PWR,
		.cmd = QCOM_SCM_PWR_IO_DEASSERT_PS_HOLD,
@@ -1082,7 +1086,9 @@ void __qcom_scm_deassert_ps_hold(struct device *dev)
	desc.args[0] = 0;
	desc.arginfo = QCOM_SCM_ARGS(1);

	qcom_scm_call_atomic(dev, &desc);
	ret = qcom_scm_call_atomic(dev, &desc);
	if (ret)
		pr_err("Failed to deassert_ps_hold=0x%x\n", ret);
}

void __qcom_scm_mmu_sync(struct device *dev, bool sync)
+5 −27
Original line number Diff line number Diff line
@@ -152,23 +152,15 @@ EXPORT_SYMBOL(qcom_scm_spin_cpu);
void qcom_scm_set_download_mode(enum qcom_download_mode mode,
				phys_addr_t tcsr_boot_misc)
{
	bool avail;
	int ret = 0;
	int ret = -EINVAL;
	struct device *dev = __scm ? __scm->dev : NULL;

	avail = __qcom_scm_is_call_available(dev,
					     QCOM_SCM_SVC_BOOT,
					     QCOM_SCM_BOOT_SET_DLOAD_MODE);
	if (avail) {
		ret = __qcom_scm_set_dload_mode(dev, mode);
	} else if (tcsr_boot_misc || (__scm && __scm->dload_mode_addr)) {
	if (tcsr_boot_misc || (__scm && __scm->dload_mode_addr)) {
		ret = __qcom_scm_io_writel(dev,
				tcsr_boot_misc ? : __scm->dload_mode_addr,
				mode);
	} else {
		dev_err(dev,
			"No available mechanism for setting download mode\n");
	}
	} else
		ret = __qcom_scm_set_dload_mode(dev, mode);

	if (ret)
		dev_err(dev, "failed to set download mode: %d\n", ret);
@@ -402,16 +394,8 @@ EXPORT_SYMBOL(qcom_scm_get_jtag_etm_feat_id);
 */
void qcom_scm_halt_spmi_pmic_arbiter(void)
{
	bool avail;
	struct device *dev = __scm ? __scm->dev : NULL;

	avail = __qcom_scm_is_call_available(dev,
					QCOM_SCM_SVC_PWR,
					QCOM_SCM_PWR_IO_DISABLE_PMIC_ARBITER);

	if (!avail)
		return;

	pr_crit("Calling SCM to disable SPMI PMIC arbiter\n");
	return __qcom_scm_halt_spmi_pmic_arbiter(dev);
}
@@ -426,14 +410,8 @@ EXPORT_SYMBOL(qcom_scm_halt_spmi_pmic_arbiter);
 */
void qcom_scm_deassert_ps_hold(void)
{
	bool avail;
	struct device *dev = __scm ? __scm->dev : NULL;

	avail = __qcom_scm_is_call_available(dev,
					     QCOM_SCM_SVC_PWR,
					     QCOM_SCM_PWR_IO_DEASSERT_PS_HOLD);

	if (avail)
	__qcom_scm_deassert_ps_hold(dev);
}
EXPORT_SYMBOL(qcom_scm_deassert_ps_hold);