18a597e07d0c0271ee81fc1dae7c131bc5001043
[openwrt/staging/jow.git] / target / linux / qualcommax / patches-6.1 / 0907-soc-qcom-fix-smp2p-ack-on-ipq6018.patch
1 From d93936f175bd914067df8f63f5fbe6e3b77bb4d2 Mon Sep 17 00:00:00 2001
2 From: Mantas Pucka <mantas@8devices.com>
3 Date: Tue, 23 May 2023 14:46:28 +0300
4 Subject: [PATCH 11/19] soc: qcom: fix smp2p ack on ipq6018
5
6 IPQ6018 seem to need different ack mechanism for smp2p messaging. This
7 fixes q6v5_wcss remoteproc firmware reloading. Without this first load
8 is OK, but subsequent loads would hang and fail to complete.
9
10 Signed-off-by: Mantas Pucka <mantas@8devices.com>
11 ---
12 arch/arm64/boot/dts/qcom/ipq6018.dtsi | 1 +
13 drivers/soc/qcom/smp2p.c | 6 +++++-
14 2 files changed, 6 insertions(+), 1 deletion(-)
15
16 --- a/arch/arm64/boot/dts/qcom/ipq6018.dtsi
17 +++ b/arch/arm64/boot/dts/qcom/ipq6018.dtsi
18 @@ -1056,6 +1056,7 @@
19
20 wcss_smp2p_out: master-kernel {
21 qcom,entry-name = "master-kernel";
22 + qcom,smp2p-feature-ssr-ack;
23 #qcom,smem-state-cells = <1>;
24 };
25
26 --- a/drivers/soc/qcom/smp2p.c
27 +++ b/drivers/soc/qcom/smp2p.c
28 @@ -158,6 +158,8 @@ struct qcom_smp2p {
29
30 struct list_head inbound;
31 struct list_head outbound;
32 +
33 + bool need_ssr_ack;
34 };
35
36 static void qcom_smp2p_kick(struct qcom_smp2p *smp2p)
37 @@ -306,7 +308,7 @@ static irqreturn_t qcom_smp2p_intr(int i
38 ack_restart = qcom_smp2p_check_ssr(smp2p);
39 qcom_smp2p_notify_in(smp2p);
40
41 - if (ack_restart)
42 + if (ack_restart || smp2p->need_ssr_ack)
43 qcom_smp2p_do_ssr_ack(smp2p);
44 }
45
46 @@ -427,6 +429,7 @@ static int qcom_smp2p_outbound_entry(str
47
48 /* Make the logical entry reference the physical value */
49 entry->value = &out->entries[out->valid_entries].value;
50 + smp2p->need_ssr_ack = of_property_read_bool(node, "qcom,smp2p-feature-ssr-ack");
51
52 out->valid_entries++;
53