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,