From: Jingyi Wang <jingyi.wang@oss.qualcomm.com>
To: Bjorn Andersson <andersson@kernel.org>,
Konrad Dybcio <konradybcio@kernel.org>
Cc: linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org,
Jingyi Wang <jingyi.wang@oss.qualcomm.com>,
Chris Lew <chris.lew@oss.qualcomm.com>
Subject: [PATCH 1/2] soc: qcom: smp2p: Add irqchip state support
Date: Tue, 23 Sep 2025 21:18:42 -0700 [thread overview]
Message-ID: <20250923-smp2p-v1-1-2c045af73dac@oss.qualcomm.com> (raw)
In-Reply-To: <20250923-smp2p-v1-0-2c045af73dac@oss.qualcomm.com>
From: Chris Lew <chris.lew@oss.qualcomm.com>
A remoteproc booted during earlier boot stages such as UEFI or the
bootloader, may need to be attached to without restarting the remoteproc
hardware. To do this the remoteproc will need to check the ready and
handover states in smp2p without an interrupt notification.
Add support for the .irq_get_irqchip_state callback so remoteproc can
read the current state of the fatal, ready and handover bits.
Signed-off-by: Chris Lew <chris.lew@oss.qualcomm.com>
Co-developed-by: Jingyi Wang <jingyi.wang@oss.qualcomm.com>
Signed-off-by: Jingyi Wang <jingyi.wang@oss.qualcomm.com>
---
drivers/soc/qcom/smp2p.c | 55 ++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 55 insertions(+)
diff --git a/drivers/soc/qcom/smp2p.c b/drivers/soc/qcom/smp2p.c
index cb515c2340c1..e2cfd9ec8875 100644
--- a/drivers/soc/qcom/smp2p.c
+++ b/drivers/soc/qcom/smp2p.c
@@ -222,6 +222,39 @@ static void qcom_smp2p_negotiate(struct qcom_smp2p *smp2p)
}
}
+static void qcom_smp2p_start_in(struct qcom_smp2p *smp2p)
+{
+ unsigned int smem_id = smp2p->smem_items[SMP2P_INBOUND];
+ unsigned int pid = smp2p->remote_pid;
+ char buf[SMP2P_MAX_ENTRY_NAME];
+ struct smp2p_smem_item *in;
+ struct smp2p_entry *entry;
+ size_t size;
+ int i;
+
+ in = qcom_smem_get(pid, smem_id, &size);
+ if (IS_ERR(in))
+ return;
+
+ smp2p->in = in;
+
+ /* Check if version is initialized and set to v2 */
+ if (in->version == 0)
+ return;
+
+ for (i = smp2p->valid_entries; i < in->valid_entries; i++) {
+ list_for_each_entry(entry, &smp2p->inbound, node) {
+ memcpy(buf, in->entries[i].name, sizeof(buf));
+ if (!strcmp(buf, entry->name)) {
+ entry->value = &in->entries[i].value;
+ entry->last_value = readl(entry->value);
+ break;
+ }
+ }
+ }
+ smp2p->valid_entries = i;
+}
+
static void qcom_smp2p_notify_in(struct qcom_smp2p *smp2p)
{
struct smp2p_smem_item *in;
@@ -368,12 +401,31 @@ static void smp2p_irq_print_chip(struct irq_data *irqd, struct seq_file *p)
seq_printf(p, "%8s", dev_name(entry->smp2p->dev));
}
+static int smp2p_irq_get_irqchip_state(struct irq_data *irqd, enum irqchip_irq_state which,
+ bool *state)
+{
+ struct smp2p_entry *entry = irq_data_get_irq_chip_data(irqd);
+ u32 val;
+
+ if (which != IRQCHIP_STATE_LINE_LEVEL)
+ return -EINVAL;
+
+ if (!entry->value)
+ return -ENODEV;
+
+ val = readl(entry->value);
+ *state = !!(val & BIT(irqd_to_hwirq(irqd)));
+
+ return 0;
+}
+
static struct irq_chip smp2p_irq_chip = {
.name = "smp2p",
.irq_mask = smp2p_mask_irq,
.irq_unmask = smp2p_unmask_irq,
.irq_set_type = smp2p_set_irq_type,
.irq_print_chip = smp2p_irq_print_chip,
+ .irq_get_irqchip_state = smp2p_irq_get_irqchip_state,
};
static int smp2p_irq_map(struct irq_domain *d,
@@ -618,6 +670,9 @@ static int qcom_smp2p_probe(struct platform_device *pdev)
}
}
+ /* Check inbound entries in the case of early boot processor */
+ qcom_smp2p_start_in(smp2p);
+
/* Kick the outgoing edge after allocating entries */
qcom_smp2p_kick(smp2p);
--
2.25.1
next prev parent reply other threads:[~2025-09-24 4:18 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-09-24 4:18 [PATCH 0/2] soc: qcom: smp2p: Add support for remoteproc early attach Jingyi Wang
2025-09-24 4:18 ` Jingyi Wang [this message]
2025-09-24 14:50 ` [PATCH 1/2] soc: qcom: smp2p: Add irqchip state support Konrad Dybcio
2025-10-21 8:12 ` Deepak Kumar Singh
2025-10-21 9:35 ` Konrad Dybcio
2025-10-22 10:57 ` Deepak Kumar Singh
2025-10-22 22:13 ` Bjorn Andersson
2025-10-23 1:05 ` Christopher Lew
2025-09-24 4:18 ` [PATCH 2/2] soc: qcom: smp2p: Add support for smp2p v2 Jingyi Wang
2025-09-24 14:57 ` Konrad Dybcio
2025-10-21 8:23 ` Deepak Kumar Singh
2025-10-21 9:39 ` Konrad Dybcio
2025-10-22 10:50 ` Deepak Kumar Singh
2025-10-29 0:35 ` Christopher Lew
2025-10-22 22:19 ` Bjorn Andersson
2025-10-23 2:14 ` Jingyi Wang
2025-10-29 0:44 ` Christopher Lew
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250923-smp2p-v1-1-2c045af73dac@oss.qualcomm.com \
--to=jingyi.wang@oss.qualcomm.com \
--cc=andersson@kernel.org \
--cc=chris.lew@oss.qualcomm.com \
--cc=konradybcio@kernel.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox