From 245785dea6dd894af91167e04668471710cf7cfb Mon Sep 17 00:00:00 2001 From: Sibi Sankar Date: Wed, 11 Sep 2019 16:41:35 +0530 Subject: [PATCH] soc: qcom: Force sequential boot for MSA modem MSA boot of modem failed sporadically with parallel PIL loading of blobs. Fix this by forcing msa based modem to perform sequential loading of modem blobs. Change-Id: Ie473a51ccb9aaae5484c811c6b9c6a35144c7fa2 Signed-off-by: Sibi Sankar Signed-off-by: Sivasri Kumar Vanka Signed-off-by: Lijuan Gao --- drivers/soc/qcom/peripheral-loader.c | 4 ++-- drivers/soc/qcom/peripheral-loader.h | 3 ++- drivers/soc/qcom/pil-q6v5-mss.c | 2 ++ 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/drivers/soc/qcom/peripheral-loader.c b/drivers/soc/qcom/peripheral-loader.c index a236787fb99f..8849a650e2b5 100644 --- a/drivers/soc/qcom/peripheral-loader.c +++ b/drivers/soc/qcom/peripheral-loader.c @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-only /* - * Copyright (c) 2010-2020, The Linux Foundation. All rights reserved. + * Copyright (c) 2010-2021, The Linux Foundation. All rights reserved. */ #include @@ -1291,7 +1291,7 @@ int pil_boot(struct pil_desc *desc) * Fallback to serial loading of blobs if the * workqueue creatation failed during module init. */ - if (pil_wq) { + if (pil_wq && !(desc->sequential_loading)) { ret = pil_load_segs(desc); if (ret) goto err_deinit_image; diff --git a/drivers/soc/qcom/peripheral-loader.h b/drivers/soc/qcom/peripheral-loader.h index a5ddfb04c3af..b5ff71b2f9bb 100644 --- a/drivers/soc/qcom/peripheral-loader.h +++ b/drivers/soc/qcom/peripheral-loader.h @@ -1,6 +1,6 @@ /* SPDX-License-Identifier: GPL-2.0-only */ /* - * Copyright (c) 2010-2020, The Linux Foundation. All rights reserved. + * Copyright (c) 2010-2021, The Linux Foundation. All rights reserved. */ #ifndef __MSM_PERIPHERAL_LOADER_H #define __MSM_PERIPHERAL_LOADER_H @@ -91,6 +91,7 @@ struct pil_desc { bool shutdown_fail; bool modem_ssr; bool clear_fw_region; + bool sequential_loading; u32 subsys_vmid; bool signal_aop; struct mbox_client cl; diff --git a/drivers/soc/qcom/pil-q6v5-mss.c b/drivers/soc/qcom/pil-q6v5-mss.c index 276f9807b612..16d144f0696a 100644 --- a/drivers/soc/qcom/pil-q6v5-mss.c +++ b/drivers/soc/qcom/pil-q6v5-mss.c @@ -580,6 +580,8 @@ static int pil_mss_loadable_init(struct modem_data *drv, q6_desc->ops = &pil_msa_mss_ops; + q6_desc->sequential_loading = of_property_read_bool(pdev->dev.of_node, + "qcom,sequential-fw-load"); q6->reset_clk = of_property_read_bool(pdev->dev.of_node, "qcom,reset-clk"); q6->self_auth = of_property_read_bool(pdev->dev.of_node,