From: Andre Przywara <andre.przywara@arm.com>
To: Mark Rutland <mark.rutland@arm.com>,
Lorenzo Pieralisi <lpieralisi@kernel.org>,
Sudeep Holla <sudeep.holla@kernel.org>
Cc: Salman Nabi <salman.nabi@arm.com>,
Vedashree Vidwans <vvidwans@nvidia.com>,
Trilok Soni <trilokkumar.soni@oss.qualcomm.com>,
Nirmoy Das <nirmoyd@nvidia.com>,
vsethi@nvidia.com, Varun Wadekar <vwadekar@nvidia.com>,
linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org, Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>,
devicetree@vger.kernel.org
Subject: [PATCH v5 7/8] firmware: smccc: lfa: Register DT interrupt
Date: Fri, 16 Oct 2026 19:27:11 +0100 [thread overview]
Message-ID: <20261016182714.1835813-8-andre.przywara@arm.com> (raw)
In-Reply-To: <20261016182714.1835813-1-andre.przywara@arm.com>
The Arm Live Firmware Activation spec describes an asynchronous
notification mechanism, where the platform can notify the host OS about
newly pending image updates.
In the absence of the ACPI notification mechanism also a simple
devicetree node can describe an interrupt.
Add code to find the respective DT node and register the specified
interrupt, to trigger the activation if needed.
Signed-off-by: Andre Przywara <andre.przywara@arm.com>
---
drivers/firmware/smccc/lfa_fw.c | 33 +++++++++++++++++++++++++++++++++
1 file changed, 33 insertions(+)
diff --git a/drivers/firmware/smccc/lfa_fw.c b/drivers/firmware/smccc/lfa_fw.c
index 65f28ffc9d108..3ff368dca9497 100644
--- a/drivers/firmware/smccc/lfa_fw.c
+++ b/drivers/firmware/smccc/lfa_fw.c
@@ -46,6 +46,8 @@
#include <linux/list.h>
#include <linux/module.h>
#include <linux/nmi.h>
+#include <linux/of.h>
+#include <linux/of_irq.h>
#include <linux/psci.h>
#include <linux/rwsem.h>
#include <linux/stop_machine.h>
@@ -182,6 +184,7 @@ static struct kset *lfa_kset;
static struct workqueue_struct *fw_comps_update_wq;
static struct work_struct fw_comps_update_work;
static struct attribute *component_default_attrs[LFA_ATTR_NR_IMAGES + 1];
+static unsigned int lfa_irq;
/*
* A successful component activation might change the number of available
@@ -913,6 +916,31 @@ static void lfa_remove_acpi(struct device *dev)
}
#endif
+static irqreturn_t lfa_irq_handler_thread(int irq, void *dev_id)
+{
+ activate_pending_components();
+
+ return IRQ_HANDLED;
+}
+
+static int lfa_register_dt(struct device *dev)
+{
+ struct device_node *np;
+
+ np = of_find_compatible_node(NULL, NULL, "arm,lfa");
+ if (!np)
+ return -ENODEV;
+
+ lfa_irq = irq_of_parse_and_map(np, 0);
+ of_node_put(np);
+ if (!lfa_irq)
+ return -ENODEV;
+
+ return devm_request_threaded_irq(dev, lfa_irq, NULL,
+ lfa_irq_handler_thread, IRQF_COND_ONESHOT,
+ NULL, NULL);
+}
+
static bool lfa_smccc_has_all_functions(void)
{
struct arm_smccc_1_2_regs regs = { 0 }, res;
@@ -980,6 +1008,10 @@ static int lfa_smccc_probe(struct arm_smccc_device *sdev)
err = lfa_register_acpi(&sdev->dev);
if (!err)
pr_info("registered LFA ACPI notification\n");
+ } else {
+ err = lfa_register_dt(&sdev->dev);
+ if (!err)
+ pr_info("registered LFA DT notification interrupt\n");
}
/*
@@ -999,6 +1031,7 @@ static void lfa_smccc_remove(struct arm_smccc_device *sdev)
{
if (!acpi_disabled)
lfa_remove_acpi(&sdev->dev);
+ devm_free_irq(&sdev->dev, lfa_irq, NULL);
clean_fw_components_tree();
flush_workqueue(fw_comps_update_wq);
destroy_workqueue(fw_comps_update_wq);
--
2.43.0
next prev parent reply other threads:[~2026-10-16 18:27 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-16 18:27 [PATCH v5 0/8] Arm Live Firmware Activation (LFA) support Andre Przywara
2026-10-16 18:27 ` [PATCH v5 2/8] firmware: hwrng: arm_smccc_trng: Register as an SMCCC device Andre Przywara
2026-10-16 18:27 ` [PATCH v5 3/8] dt-bindings: arm: Add Live Firmware Activation Andre Przywara
2026-10-16 18:27 ` [PATCH v5 4/8] firmware: smccc: Add support for Live Firmware Activation (LFA) Andre Przywara
2026-10-16 18:27 ` [PATCH v5 5/8] firmware: smccc: lfa: Register ACPI notification Andre Przywara
2026-10-16 18:27 ` [PATCH v5 6/8] firmware: smccc: lfa: Add auto_activate sysfs file Andre Przywara
2026-10-16 18:27 ` Andre Przywara [this message]
2026-10-16 18:27 ` [PATCH v5 8/8] firmware: smccc: lfa: add sysfs ABI documentation Andre Przywara
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=20261016182714.1835813-8-andre.przywara@arm.com \
--to=andre.przywara@arm.com \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=krzk+dt@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lpieralisi@kernel.org \
--cc=mark.rutland@arm.com \
--cc=nirmoyd@nvidia.com \
--cc=robh@kernel.org \
--cc=salman.nabi@arm.com \
--cc=sudeep.holla@kernel.org \
--cc=trilokkumar.soni@oss.qualcomm.com \
--cc=vsethi@nvidia.com \
--cc=vvidwans@nvidia.com \
--cc=vwadekar@nvidia.com \
/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
all inboxes | Powered by JetHome®