| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- From d93936f175bd914067df8f63f5fbe6e3b77bb4d2 Mon Sep 17 00:00:00 2001
- From: Mantas Pucka <[email protected]>
- Date: Tue, 23 May 2023 14:46:28 +0300
- Subject: [PATCH 11/19] soc: qcom: fix smp2p ack on ipq6018
- IPQ6018 seem to need different ack mechanism for smp2p messaging. This
- fixes q6v5_wcss remoteproc firmware reloading. Without this first load
- is OK, but subsequent loads would hang and fail to complete.
- Signed-off-by: Mantas Pucka <[email protected]>
- ---
- arch/arm64/boot/dts/qcom/ipq6018.dtsi | 1 +
- drivers/soc/qcom/smp2p.c | 6 +++++-
- 2 files changed, 6 insertions(+), 1 deletion(-)
- --- a/arch/arm64/boot/dts/qcom/ipq6018.dtsi
- +++ b/arch/arm64/boot/dts/qcom/ipq6018.dtsi
- @@ -1156,6 +1156,7 @@
-
- wcss_smp2p_out: master-kernel {
- qcom,entry-name = "master-kernel";
- + qcom,smp2p-feature-ssr-ack;
- #qcom,smem-state-cells = <1>;
- };
-
- --- a/drivers/soc/qcom/smp2p.c
- +++ b/drivers/soc/qcom/smp2p.c
- @@ -158,6 +158,8 @@ struct qcom_smp2p {
-
- struct list_head inbound;
- struct list_head outbound;
- +
- + bool need_ssr_ack;
- };
-
- static void qcom_smp2p_kick(struct qcom_smp2p *smp2p)
- @@ -306,7 +308,7 @@ static irqreturn_t qcom_smp2p_intr(int i
- ack_restart = qcom_smp2p_check_ssr(smp2p);
- qcom_smp2p_notify_in(smp2p);
-
- - if (ack_restart)
- + if (ack_restart || smp2p->need_ssr_ack)
- qcom_smp2p_do_ssr_ack(smp2p);
- }
-
- @@ -427,6 +429,7 @@ static int qcom_smp2p_outbound_entry(str
-
- /* Make the logical entry reference the physical value */
- entry->value = &out->entries[out->valid_entries].value;
- + smp2p->need_ssr_ack = of_property_read_bool(node, "qcom,smp2p-feature-ssr-ack");
-
- out->valid_entries++;
-
|