0907-soc-qcom-fix-smp2p-ack-on-ipq6018.patch 1.6 KB

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