Linux-ARM-Kernel Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: "Michal Suchánek" <msuchanek@suse.de>
To: Andre Przywara <andre.przywara@arm.com>
Cc: Mark Rutland <mark.rutland@arm.com>,
	Lorenzo Pieralisi <lpieralisi@kernel.org>,
	Sudeep Holla <sudeep.holla@kernel.org>,
	Conor Dooley <conor+dt@kernel.org>,
	vsethi@nvidia.com, Salman Nabi <salman.nabi@arm.com>,
	Rob Herring <robh@kernel.org>,
	linux-kernel@vger.kernel.org, Varun Wadekar <vwadekar@nvidia.com>,
	Trilok Soni <trilokkumar.soni@oss.qualcomm.com>,
	devicetree@vger.kernel.org, Nirmoy Das <nirmoyd@nvidia.com>,
	Krzysztof Kozlowski <krzk+dt@kernel.org>,
	linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH v3 0/8] Arm Live Firmware Activation (LFA) support
Date: Mon, 13 Jul 2026 18:02:32 +0200	[thread overview]
Message-ID: <alUMGCJzVG6U3Ggm@kunlun.suse.cz> (raw)
In-Reply-To: <20260706134455.132091-1-andre.przywara@arm.com>

On Mon, Jul 06, 2026 at 03:44:40PM +0200, Andre Przywara wrote:
> Hi all,
> 
> this is version 3 of the Live Firmware Activation kernel support. The
> device part of the code now relies on Aneesh's SMCCC bus patches[1],
> which solves some problems rather nicely. I also added the formerly
> missing sysfs ABI documentation. Based on v7.2-rc1, plus the first
> two patches from Aneesh's series. More detailed changelog below.
> ==============================
> 
> This series implements the kernel side support of the Arm Live
> Firmware Activation (LFA) specification [2]. LFA enables the activation
> of updated firmware components without requiring a system reboot,
> reducing downtime and allowing quicker deployment of critical bug fixes
> in environments such as data centers and hyperscale systems.
> It requires explicit firmware support, both via an agent running in EL3
> (for instance in TF-A, already merged), but also in the firmware
> component to be activated. TF-RMM recently merged support for this.
> 
> Unlike the usual firmware update process (which may use tools like
> fwupd), LFA focuses solely on the activation of an already updated
> firmware component, called "pending activation" in LFA lingo. This works
> by signalling the LFA agent (part of the EL3 runtime firmware) via an
> SMC call, which then does the heavy lifting of the live update, in
> cooperation with the to-be-updated firmware component.
> 
> Key features of the driver:
> * Detects LFA support in system firmware (EL3).
> * Lists all firmware components that support live activation, identified
>   by their GUID.
> * Exposes component attributes (e.g., activation capability, and
>   activation pending) via sysfs under /sys/firmware/lfa/<GUID>/.
> * Provides interfaces to:
>   - Trigger activation of an updated firmware component.
>   - Cancel an ongoing activation if required.
> A more detailed list of features can be found in patch 2/8.
> Based on v7.2-rc1.
> 
> This work is conceptually similar to Intel’s Platform Firmware Runtime
> Update and telemetry (PFRUT) [3] and TDX module updates [4], but
> targets Arm platforms. The driver has been used to successfully activate
> a Realm Management Monitor (RMM) firmware image in a controlled test
> environment. RMM is analogous to Intel’s TDX module.
> 
> There is effort on similar work from the OCP [5]. Future work may
> include integration with utilities like fwupd to automatically select
> the appropriate driver, based on platform architecture, for Live/Runtime
> firmware updates.
> 
> Please have a look, test and comment!

Hello,

booting a kernel with v2 of this patchset applied the module does not
get autoloaded. Loading it manually I get

[ 1972.957282] [   T5195] Arm LFA: Live Firmware Activation: detected v1.0
[ 1972.958620] [   T5195] Arm LFA: registered LFA ACPI notification

Is this expected?

I would expect the driver to load automatically.

I do not see anything in the v3 changelog obviously addressing
autoloading but changing to using a bus might affect that.

I will try to update to v3 later.

Thanks

Michal


> 
> Best regards,
> Salman and Andre
> 
> Changes in v3:
> - change node name in DT binding example
> - move SMCCC function identifiers into generic SMCCC header
> - rework to use the new SMCCC bus instead of a using a faux device
> - add missing workqueue cleanup in probe() routine
> - squash former patch v2 3/8 into base patch
> - use get_image_name() more consistently
> - also consider -LFA_BUSY return in activate call
> 
> Changes in v2:
> - restrict build to arm64 (the LFA spec only supports AArch64)
> - rename and extend central data structure to fw_image
> - use separate GPR register sets for some SMC calls
> - provide wrapper for error messages to prevent out-of-bound access
> - return GUID in the "name" sysfs file when image is unknown
> - fix wrong attribute in pending version number show function
> - add missing include files and order them properly
> - fix memory leaks in error cleanup paths
> - handle lifetime using embedded kobjects and a kset
> - drop global lfa_lock, use kset list lock and kobject refcount instead
> - add DT binding documentation
> - add timeout and watchdog re-arming (contributed by Veda)
> - relax timeout period and do not block while waiting
> - register ACPI notification (contributed by Veda) and DT interrupt 
> - refactor ACPI notification code to allow sharing with DT code
> - use faux device instead of platform driver
> - add auto_activate file to control automatic activation
> - introduce rwsem mutex to prevent using stale sequence ID
> - use labels and goto instead of infinite loop when retrying activation
> - initialise workqueue only once (thanks to Nirmoy)
> - various cleanups on reported messages and code formatting
> - rebase on top of v7.0-rc1
> 
> Changes in v1:
> - Updated SMCCC version 1.1 to 1.2 per the LFA specification requirement.
> - Changed "image_props" array to a linked list to support the dynamic
>   removal and addition of firmware images.
> - Added code to refresh firmware images following a successful activation.
> - Added a work_queue to handle the removal of firmware image attribute
>   from it's respective kobject "_store" handle.
> - Refactored prime and activate into separate functions.
> - Kernel config for LFA now defaults to "y" i.e. included by default.
> - Added individual kernel attribute files removal when removing the
>   respective kobjects using kobject_put().
> - mutex_lock added to activate_fw_image() and prime_fw_image() calls.
> - Renamed create_fw_inventory to update_fw_image_node.
> - Renamed create_fw_images_tree to update_fw_images_tree.
> - Added two more attributes due to specs update from bet0 to bet1:
>   current_version: For retrieval of the current firmware's version info.
>   pending_version: For retrieval of the pending firmware's version info.
> - Minor changes such as, improved firmware image names, and code comments.
> - do...while loops refactored to for(;;) loops.
> 
> [1] https://lore.kernel.org/linux-arm-kernel/20260611130429.295516-1-aneesh.kumar@kernel.org/
> [2] https://developer.arm.com/documentation/den0147/latest/
> [3] https://lore.kernel.org/all/cover.1631025237.git.yu.c.chen@intel.com/
> [4] https://lore.kernel.org/all/20250523095322.88774-1-chao.gao@intel.com/
> [5] https://www.opencompute.org/documents/hyperscale-cpu-impactless-firmware-updates-requirements-specification-v0-7-9-29-2025-pdf
> 
> Andre Przywara (5):
>   dt-bindings: arm: Add Live Firmware Activation
>   firmware: smccc: lfa: Add auto_activate sysfs file
>   firmware: smccc: lfa: Register DT interrupt
>   firmware: smccc: lfa: introduce SMC access lock
>   firmware: smccc: lfa: add sysfs ABI documentation
> 
> Salman Nabi (1):
>   firmware: smccc: Add support for Live Firmware Activation (LFA)
> 
> Vedashree Vidwans (2):
>   firmware: smccc: lfa: Add timeout and trigger watchdog
>   firmware: smccc: lfa: Register ACPI notification
> 
>  Documentation/ABI/testing/sysfs-firmware-lfa  | 106 ++
>  .../devicetree/bindings/arm/arm,lfa.yaml      |  45 +
>  drivers/firmware/smccc/Kconfig                |  10 +
>  drivers/firmware/smccc/Makefile               |   1 +
>  drivers/firmware/smccc/lfa_fw.c               | 988 ++++++++++++++++++
>  drivers/firmware/smccc/smccc.c                |   5 +
>  include/linux/arm-smccc.h                     |  15 +
>  7 files changed, 1170 insertions(+)
>  create mode 100644 Documentation/ABI/testing/sysfs-firmware-lfa
>  create mode 100644 Documentation/devicetree/bindings/arm/arm,lfa.yaml
>  create mode 100644 drivers/firmware/smccc/lfa_fw.c
> 
> 
> base-commit: dc59e4fea9d83f03bad6bddf3fa2e52491777482
> prerequisite-patch-id: 64fa2209c9eee2084861ba13f0bdfdac312b19b0
> prerequisite-patch-id: fe1ca1a9aeb94623c79bf66366c76bfb8645b581
> -- 
> 2.43.0
> 
> 


      parent reply	other threads:[~2026-07-13 16:02 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-07-06 13:44 [PATCH v3 0/8] Arm Live Firmware Activation (LFA) support Andre Przywara
2026-07-06 13:44 ` [PATCH v3 1/8] dt-bindings: arm: Add Live Firmware Activation Andre Przywara
2026-07-06 13:44 ` [PATCH v3 2/8] firmware: smccc: Add support for Live Firmware Activation (LFA) Andre Przywara
2026-07-10  9:30   ` Nirmoy Das
2026-07-06 13:44 ` [PATCH v3 3/8] firmware: smccc: lfa: Add timeout and trigger watchdog Andre Przywara
2026-07-10 10:08   ` Nirmoy Das
2026-07-06 13:44 ` [PATCH v3 4/8] firmware: smccc: lfa: Register ACPI notification Andre Przywara
2026-07-10 11:04   ` Nirmoy Das
2026-07-06 13:44 ` [PATCH v3 5/8] firmware: smccc: lfa: Add auto_activate sysfs file Andre Przywara
2026-07-10 14:07   ` Nirmoy Das
2026-07-06 13:44 ` [PATCH v3 6/8] firmware: smccc: lfa: Register DT interrupt Andre Przywara
2026-07-06 13:44 ` [PATCH v3 7/8] firmware: smccc: lfa: introduce SMC access lock Andre Przywara
2026-07-06 13:44 ` [PATCH v3 8/8] firmware: smccc: lfa: add sysfs ABI documentation Andre Przywara
2026-07-13 16:02 ` Michal Suchánek [this message]

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=alUMGCJzVG6U3Ggm@kunlun.suse.cz \
    --to=msuchanek@suse.de \
    --cc=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=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