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: Prasad Sodagudi <psodagud@codeaurora.org>
This commit is contained in:
Prasad Sodagudi 2020-03-21 12:41:16 -07:00
commit 4aa821fbe9
2 changed files with 13 additions and 29 deletions

View file

@ -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)

View file

@ -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,15 +410,9 @@ 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);
__qcom_scm_deassert_ps_hold(dev);
}
EXPORT_SYMBOL(qcom_scm_deassert_ps_hold);