* [PATCH v1] ACPI: FPDT: expose FBPT and S3PT subtables via sysfs
@ 2026-02-22 6:30 Nate DeSimone
2026-02-23 17:54 ` Luck, Tony
2026-03-10 4:34 ` [PATCH v2 0/2] " Nate DeSimone
0 siblings, 2 replies; 8+ messages in thread
From: Nate DeSimone @ 2026-02-22 6:30 UTC (permalink / raw)
To: linux-acpi; +Cc: Rafael J. Wysocki, Len Brown, tony.luck
Add sysfs attributes at /sys/firmware/acpi/fpdt/tables/FBPT and
/sys/firmware/acpi/fpdt/tables/S3PT that expose the raw contents of the
FPDT subtables. Note that /sys/firmware/acpi/tables/FPDT only provides
the top level table, not the subtables. Adding access to the subtables
enables a usage model similar to /sys/firmware/dmi/tables/DMI, allowing
userspace tools to interpret newer record types (e.g. String Event
Records, Microcontroller Boot Performance Data Records, etc.) defined
in recent ACPI specifications[1] without requiring kernel changes.
[1]
https://uefi.org/specs/ACPI/6.6/05_ACPI_Software_Programming_Model.html#performance-event-record-types
Signed-off-by: Nate DeSimone <nathaniel.l.desimone@intel.com>
---
drivers/acpi/acpi_fpdt.c | 38 ++++++++++++++++++++++++++++++++++++++
1 file changed, 38 insertions(+)
diff --git a/drivers/acpi/acpi_fpdt.c b/drivers/acpi/acpi_fpdt.c
index 271092f2700a..aa79b28f3c20 100644
--- a/drivers/acpi/acpi_fpdt.c
+++ b/drivers/acpi/acpi_fpdt.c
@@ -141,7 +141,11 @@ static const struct attribute_group boot_attr_group = {
.name = "boot",
};
+static BIN_ATTR(FBPT, 0444, sysfs_bin_attr_simple_read, NULL, 0);
+static BIN_ATTR(S3PT, 0444, sysfs_bin_attr_simple_read, NULL, 0);
+
static struct kobject *fpdt_kobj;
+static struct kobject *tables_kobj;
#if defined CONFIG_X86 && defined CONFIG_PHYS_ADDR_T_64BIT
#include <linux/processor.h>
@@ -254,9 +258,34 @@ static int fpdt_process_subtable(u64 address, u32 subtable_type)
break;
}
}
+
+ if (subtable_type == SUBTABLE_FBPT) {
+ bin_attr_FBPT.private = subtable_header;
+ bin_attr_FBPT.size = length;
+ result = sysfs_create_bin_file(tables_kobj, &bin_attr_FBPT);
+ if (result)
+ goto err;
+ } else if (subtable_type == SUBTABLE_S3PT) {
+ bin_attr_S3PT.private = subtable_header;
+ bin_attr_S3PT.size = length;
+ result = sysfs_create_bin_file(tables_kobj, &bin_attr_S3PT);
+ if (result)
+ goto err;
+ }
+
return 0;
err:
+ if (bin_attr_FBPT.private) {
+ sysfs_remove_bin_file(tables_kobj, &bin_attr_FBPT);
+ bin_attr_FBPT.private = NULL;
+ }
+
+ if (bin_attr_S3PT.private) {
+ sysfs_remove_bin_file(tables_kobj, &bin_attr_S3PT);
+ bin_attr_S3PT.private = NULL;
+ }
+
if (record_boot)
sysfs_remove_group(fpdt_kobj, &boot_attr_group);
@@ -288,6 +317,12 @@ static int __init acpi_init_fpdt(void)
goto err_nomem;
}
+ tables_kobj = kobject_create_and_add("tables", fpdt_kobj);
+ if (!tables_kobj) {
+ result = -ENOMEM;
+ goto err_tables;
+ }
+
while (offset < header->length) {
subtable = (void *)header + offset;
switch (subtable->type) {
@@ -306,6 +341,9 @@ static int __init acpi_init_fpdt(void)
}
return 0;
err_subtable:
+ kobject_put(tables_kobj);
+
+err_tables:
kobject_put(fpdt_kobj);
err_nomem:
base-commit: 8bf22c33e7a172fbc72464f4cc484d23a6b412ba
--
2.34.1
^ permalink raw reply related [flat|nested] 8+ messages in thread* RE: [PATCH v1] ACPI: FPDT: expose FBPT and S3PT subtables via sysfs
2026-02-22 6:30 [PATCH v1] ACPI: FPDT: expose FBPT and S3PT subtables via sysfs Nate DeSimone
@ 2026-02-23 17:54 ` Luck, Tony
2026-02-23 20:32 ` Nate DeSimone
2026-03-10 4:34 ` [PATCH v2 0/2] " Nate DeSimone
1 sibling, 1 reply; 8+ messages in thread
From: Luck, Tony @ 2026-02-23 17:54 UTC (permalink / raw)
To: Desimone, Nathaniel L, linux-acpi@vger.kernel.org
Cc: Rafael J. Wysocki, Len Brown
> Add sysfs attributes at /sys/firmware/acpi/fpdt/tables/FBPT and
> /sys/firmware/acpi/fpdt/tables/S3PT that expose the raw contents of the
> FPDT subtables. Note that /sys/firmware/acpi/tables/FPDT only provides
> the top level table, not the subtables. Adding access to the subtables
> enables a usage model similar to /sys/firmware/dmi/tables/DMI, allowing
> userspace tools to interpret newer record types (e.g. String Event
> Records, Microcontroller Boot Performance Data Records, etc.) defined
> in recent ACPI specifications[1] without requiring kernel changes.
Is the existing (for BERT) /sys/firmware/acpi/tables/data directory a more
appropriate spot for these? Naming the new subdirectory "tables" seems
misleading as there aren't a top-level ACPI "FBPT" or "S3PT" tables?
Once naming is resolved, needs update to Documentation/ABI/testing/sysfs-firmware-acpi
for whatever names are chosed for the new files.
Code looks good.
-Tony
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v1] ACPI: FPDT: expose FBPT and S3PT subtables via sysfs
2026-02-23 17:54 ` Luck, Tony
@ 2026-02-23 20:32 ` Nate DeSimone
0 siblings, 0 replies; 8+ messages in thread
From: Nate DeSimone @ 2026-02-23 20:32 UTC (permalink / raw)
To: tony.luck; +Cc: lenb, linux-acpi, nathaniel.l.desimone, rafael
> > Add sysfs attributes at /sys/firmware/acpi/fpdt/tables/FBPT and
> > /sys/firmware/acpi/fpdt/tables/S3PT that expose the raw contents of the
> > FPDT subtables. Note that /sys/firmware/acpi/tables/FPDT only provides
> > the top level table, not the subtables. Adding access to the subtables
> > enables a usage model similar to /sys/firmware/dmi/tables/DMI, allowing
> > userspace tools to interpret newer record types (e.g. String Event
> > Records, Microcontroller Boot Performance Data Records, etc.) defined
> > in recent ACPI specifications[1] without requiring kernel changes.
>
> Is the existing (for BERT) /sys/firmware/acpi/tables/data directory a more
> appropriate spot for these? Naming the new subdirectory "tables" seems
> misleading as there aren't a top-level ACPI "FBPT" or "S3PT" tables?
I'm not experienced with the organizational semantics of sysfs. I made a
best-guess when choosing /sys/firmware/acpi/fpdt/tables/FBPT. Should I do
something like /sys/firmware/acpi/tables/data/fpdt/FBPT? That way the data
source is explicit and there won't be name collisions with other data in the
future?
Wherever the kernel maintainers think is the best place to put these new sysfs
attributes I'm completely on-board with. Please let me know where in the
filesystem they should go and I'll get a v2 patch implemented!
> Once naming is resolved, needs update to Documentation/ABI/testing/sysfs-fi=
> rmware-acpi
> for whatever names are chosed for the new files.
I will happily add that as well in a v2 patch series.
>
> Code looks good.
>
> -Tony
Thank You!
-Nate
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v2 0/2] ACPI: FPDT: expose FBPT and S3PT subtables via sysfs
2026-02-22 6:30 [PATCH v1] ACPI: FPDT: expose FBPT and S3PT subtables via sysfs Nate DeSimone
2026-02-23 17:54 ` Luck, Tony
@ 2026-03-10 4:34 ` Nate DeSimone
2026-03-10 4:34 ` [PATCH v2 1/2] " Nate DeSimone
2026-03-10 4:34 ` [PATCH v2 2/2] Documentation: ABI: add FBPT and S3PT entries to sysfs-firmware-acpi Nate DeSimone
1 sibling, 2 replies; 8+ messages in thread
From: Nate DeSimone @ 2026-03-10 4:34 UTC (permalink / raw)
To: linux-acpi; +Cc: Rafael J. Wysocki, Len Brown, tony.luck
The ACPI Firmware Performance Data Table (FPDT) can contain two subtables:
1. Firmware Basic Boot Performance Table (FBPT)
2. S3 Performance Table (S3PT)
The existing /sys/firmware/acpi/tables/FPDT sysfs entry
only exposes the top-level FPDT header, not the subtables themselves.
This series adds sysfs attributes at /sys/firmware/acpi/fpdt/FBPT and
/sys/firmware/acpi/fpdt/S3PT that expose the raw contents of these
subtables. This mirrors the model used by /sys/firmware/dmi/tables/DMI
for DMI/SMBIOS data, and allows userspace tools to parse newer FPDT
record types defined in recent ACPI specifications[1] (e.g. String
Event Records, Microcontroller Boot Performance Data Records, etc.)
without requiring kernel changes for each new record type.
[1]
https://uefi.org/specs/ACPI/6.6/05_ACPI_Software_Programming_Model.html#performance-event-record-types
Nate DeSimone (2):
ACPI: FPDT: expose FBPT and S3PT subtables via sysfs
Documentation: ABI: add FBPT and S3PT entries to sysfs-firmware-acpi
Documentation/ABI/testing/sysfs-firmware-acpi | 6 ++++
drivers/acpi/acpi_fpdt.c | 28 +++++++++++++++++++
2 files changed, 34 insertions(+)
--
2.34.1
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v2 1/2] ACPI: FPDT: expose FBPT and S3PT subtables via sysfs
2026-03-10 4:34 ` [PATCH v2 0/2] " Nate DeSimone
@ 2026-03-10 4:34 ` Nate DeSimone
2026-03-11 13:18 ` Rafael J. Wysocki
2026-03-10 4:34 ` [PATCH v2 2/2] Documentation: ABI: add FBPT and S3PT entries to sysfs-firmware-acpi Nate DeSimone
1 sibling, 1 reply; 8+ messages in thread
From: Nate DeSimone @ 2026-03-10 4:34 UTC (permalink / raw)
To: linux-acpi; +Cc: Rafael J. Wysocki, Len Brown, tony.luck
Add sysfs files at /sys/firmware/acpi/fpdt/FBPT and
/sys/firmware/acpi/fpdt/S3PT that expose the raw contents of the
FPDT subtables. Note that /sys/firmware/acpi/tables/FPDT only provides
the top level table, not the subtables. Adding access to the subtables
enables a usage model similar to /sys/firmware/dmi/tables/DMI, allowing
userspace tools to interpret newer record types (e.g. String Event
Records, Microcontroller Boot Performance Data Records, etc.) defined
in recent ACPI specifications[1] without requiring kernel changes.
[1]
https://uefi.org/specs/ACPI/6.6/05_ACPI_Software_Programming_Model.html#performance-event-record-types
Signed-off-by: Nate DeSimone <nathaniel.l.desimone@intel.com>
---
drivers/acpi/acpi_fpdt.c | 28 ++++++++++++++++++++++++++++
1 file changed, 28 insertions(+)
diff --git a/drivers/acpi/acpi_fpdt.c b/drivers/acpi/acpi_fpdt.c
index 271092f2700a..35fe95acccab 100644
--- a/drivers/acpi/acpi_fpdt.c
+++ b/drivers/acpi/acpi_fpdt.c
@@ -141,6 +141,9 @@ static const struct attribute_group boot_attr_group = {
.name = "boot",
};
+static BIN_ATTR(FBPT, 0400, sysfs_bin_attr_simple_read, NULL, 0);
+static BIN_ATTR(S3PT, 0400, sysfs_bin_attr_simple_read, NULL, 0);
+
static struct kobject *fpdt_kobj;
#if defined CONFIG_X86 && defined CONFIG_PHYS_ADDR_T_64BIT
@@ -254,9 +257,34 @@ static int fpdt_process_subtable(u64 address, u32 subtable_type)
break;
}
}
+
+ if (subtable_type == SUBTABLE_FBPT) {
+ bin_attr_FBPT.private = subtable_header;
+ bin_attr_FBPT.size = length;
+ result = sysfs_create_bin_file(fpdt_kobj, &bin_attr_FBPT);
+ if (result)
+ goto err;
+ } else if (subtable_type == SUBTABLE_S3PT) {
+ bin_attr_S3PT.private = subtable_header;
+ bin_attr_S3PT.size = length;
+ result = sysfs_create_bin_file(fpdt_kobj, &bin_attr_S3PT);
+ if (result)
+ goto err;
+ }
+
return 0;
err:
+ if (bin_attr_FBPT.private) {
+ sysfs_remove_bin_file(fpdt_kobj, &bin_attr_FBPT);
+ bin_attr_FBPT.private = NULL;
+ }
+
+ if (bin_attr_S3PT.private) {
+ sysfs_remove_bin_file(fpdt_kobj, &bin_attr_S3PT);
+ bin_attr_S3PT.private = NULL;
+ }
+
if (record_boot)
sysfs_remove_group(fpdt_kobj, &boot_attr_group);
base-commit: 8bf22c33e7a172fbc72464f4cc484d23a6b412ba
--
2.34.1
^ permalink raw reply related [flat|nested] 8+ messages in thread* Re: [PATCH v2 1/2] ACPI: FPDT: expose FBPT and S3PT subtables via sysfs
2026-03-10 4:34 ` [PATCH v2 1/2] " Nate DeSimone
@ 2026-03-11 13:18 ` Rafael J. Wysocki
2026-03-24 23:20 ` Nate DeSimone
0 siblings, 1 reply; 8+ messages in thread
From: Rafael J. Wysocki @ 2026-03-11 13:18 UTC (permalink / raw)
To: Nate DeSimone; +Cc: linux-acpi, Rafael J. Wysocki, Len Brown, tony.luck
On Tue, Mar 10, 2026 at 5:35 AM Nate DeSimone
<nathaniel.l.desimone@intel.com> wrote:
>
> Add sysfs files at /sys/firmware/acpi/fpdt/FBPT and
> /sys/firmware/acpi/fpdt/S3PT that expose the raw contents of the
> FPDT subtables. Note that /sys/firmware/acpi/tables/FPDT only provides
> the top level table, not the subtables. Adding access to the subtables
> enables a usage model similar to /sys/firmware/dmi/tables/DMI, allowing
> userspace tools to interpret newer record types (e.g. String Event
> Records, Microcontroller Boot Performance Data Records, etc.) defined
> in recent ACPI specifications[1] without requiring kernel changes.
>
> [1]
> https://uefi.org/specs/ACPI/6.6/05_ACPI_Software_Programming_Model.html#performance-event-record-types
>
> Signed-off-by: Nate DeSimone <nathaniel.l.desimone@intel.com>
> ---
> drivers/acpi/acpi_fpdt.c | 28 ++++++++++++++++++++++++++++
> 1 file changed, 28 insertions(+)
>
> diff --git a/drivers/acpi/acpi_fpdt.c b/drivers/acpi/acpi_fpdt.c
> index 271092f2700a..35fe95acccab 100644
> --- a/drivers/acpi/acpi_fpdt.c
> +++ b/drivers/acpi/acpi_fpdt.c
> @@ -141,6 +141,9 @@ static const struct attribute_group boot_attr_group = {
> .name = "boot",
> };
>
> +static BIN_ATTR(FBPT, 0400, sysfs_bin_attr_simple_read, NULL, 0);
> +static BIN_ATTR(S3PT, 0400, sysfs_bin_attr_simple_read, NULL, 0);
> +
> static struct kobject *fpdt_kobj;
>
> #if defined CONFIG_X86 && defined CONFIG_PHYS_ADDR_T_64BIT
> @@ -254,9 +257,34 @@ static int fpdt_process_subtable(u64 address, u32 subtable_type)
> break;
> }
> }
> +
> + if (subtable_type == SUBTABLE_FBPT) {
> + bin_attr_FBPT.private = subtable_header;
> + bin_attr_FBPT.size = length;
> + result = sysfs_create_bin_file(fpdt_kobj, &bin_attr_FBPT);
> + if (result)
> + goto err;
Is failing the function the right thing to do here (and below).
A failure to create the sysfs attribute is not critical I suppose, so
would printing a message be sufficient?
> + } else if (subtable_type == SUBTABLE_S3PT) {
> + bin_attr_S3PT.private = subtable_header;
> + bin_attr_S3PT.size = length;
> + result = sysfs_create_bin_file(fpdt_kobj, &bin_attr_S3PT);
> + if (result)
> + goto err;
> + }
> +
> return 0;
>
> err:
> + if (bin_attr_FBPT.private) {
> + sysfs_remove_bin_file(fpdt_kobj, &bin_attr_FBPT);
> + bin_attr_FBPT.private = NULL;
> + }
> +
> + if (bin_attr_S3PT.private) {
> + sysfs_remove_bin_file(fpdt_kobj, &bin_attr_S3PT);
> + bin_attr_S3PT.private = NULL;
> + }
> +
> if (record_boot)
> sysfs_remove_group(fpdt_kobj, &boot_attr_group);
>
>
> base-commit: 8bf22c33e7a172fbc72464f4cc484d23a6b412ba
> --
^ permalink raw reply [flat|nested] 8+ messages in thread* Re: [PATCH v2 1/2] ACPI: FPDT: expose FBPT and S3PT subtables via sysfs
2026-03-11 13:18 ` Rafael J. Wysocki
@ 2026-03-24 23:20 ` Nate DeSimone
0 siblings, 0 replies; 8+ messages in thread
From: Nate DeSimone @ 2026-03-24 23:20 UTC (permalink / raw)
To: rafael; +Cc: lenb, linux-acpi, tony.luck
On Wed, 11 Mar 2026 14:18:13 +0100 Rafael J. Wysocki
<rafael@kernel.org> wrote:
> On Tue, Mar 10, 2026 at 5:35=E2=80=AFAM Nate DeSimone
> <nathaniel.l.desimone@intel.com> wrote:
> >
> > +static BIN_ATTR(FBPT, 0400, sysfs_bin_attr_simple_read, NULL, 0);
> > +static BIN_ATTR(S3PT, 0400, sysfs_bin_attr_simple_read, NULL, 0);
> > +
> > static struct kobject *fpdt_kobj;
> >
> > #if defined CONFIG_X86 && defined CONFIG_PHYS_ADDR_T_64BIT
> > @@ -254,9 +257,34 @@ static int fpdt_process_subtable(u64 address, u32 su=
> btable_type)
> > break;
> > }
> > }
> > +
> > + if (subtable_type =3D=3D SUBTABLE_FBPT) {
> > + bin_attr_FBPT.private =3D subtable_header;
> > + bin_attr_FBPT.size =3D length;
> > + result =3D sysfs_create_bin_file(fpdt_kobj, &bin_attr_FBP=
> T);
> > + if (result)
> > + goto err;
>
> Is failing the function the right thing to do here (and below).
>
> A failure to create the sysfs attribute is not critical I suppose, so
> would printing a message be sufficient?
Thank you for the feedback!
I have sent a new V3 patch series with the sysfs_create_bin_file() failure
handling changed from a hard error to a non-fatal warning.
> > + } else if (subtable_type =3D=3D SUBTABLE_S3PT) {
> > + bin_attr_S3PT.private =3D subtable_header;
> > + bin_attr_S3PT.size =3D length;
> > + result =3D sysfs_create_bin_file(fpdt_kobj, &bin_attr_S3P=
> T);
> > + if (result)
> > + goto err;
> > + }
> > +
> > return 0;
> >
> > err:
> > + if (bin_attr_FBPT.private) {
> > + sysfs_remove_bin_file(fpdt_kobj, &bin_attr_FBPT);
> > + bin_attr_FBPT.private =3D NULL;
> > + }
> > +
> > + if (bin_attr_S3PT.private) {
> > + sysfs_remove_bin_file(fpdt_kobj, &bin_attr_S3PT);
> > + bin_attr_S3PT.private =3D NULL;
> > + }
> > +
> > if (record_boot)
> > sysfs_remove_group(fpdt_kobj, &boot_attr_group);
> >
> >
> > base-commit: 8bf22c33e7a172fbc72464f4cc484d23a6b412ba
> > --
Best Regards,
-Nate
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v2 2/2] Documentation: ABI: add FBPT and S3PT entries to sysfs-firmware-acpi
2026-03-10 4:34 ` [PATCH v2 0/2] " Nate DeSimone
2026-03-10 4:34 ` [PATCH v2 1/2] " Nate DeSimone
@ 2026-03-10 4:34 ` Nate DeSimone
1 sibling, 0 replies; 8+ messages in thread
From: Nate DeSimone @ 2026-03-10 4:34 UTC (permalink / raw)
To: linux-acpi; +Cc: Rafael J. Wysocki, Len Brown, tony.luck
Document the FBPT and S3PT sysfs attributes under
/sys/firmware/acpi/fpdt/
Signed-off-by: Nate DeSimone <nathaniel.l.desimone@intel.com>
---
Documentation/ABI/testing/sysfs-firmware-acpi | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/Documentation/ABI/testing/sysfs-firmware-acpi b/Documentation/ABI/testing/sysfs-firmware-acpi
index 72e7c9161ce7..fa33dda331f2 100644
--- a/Documentation/ABI/testing/sysfs-firmware-acpi
+++ b/Documentation/ABI/testing/sysfs-firmware-acpi
@@ -41,6 +41,12 @@ Description:
platform runtime firmware S3 resume, just prior to
handoff to the OS waking vector. In nanoseconds.
+ FBPT: The raw binary contents of the Firmware Basic Boot
+ Performance Table (FBPT) subtable.
+
+ S3PT: The raw binary contents of the S3 Performance Table
+ (S3PT) subtable.
+
What: /sys/firmware/acpi/bgrt/
Date: January 2012
Contact: Matthew Garrett <mjg@redhat.com>
--
2.34.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
end of thread, other threads:[~2026-03-24 23:21 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-02-22 6:30 [PATCH v1] ACPI: FPDT: expose FBPT and S3PT subtables via sysfs Nate DeSimone
2026-02-23 17:54 ` Luck, Tony
2026-02-23 20:32 ` Nate DeSimone
2026-03-10 4:34 ` [PATCH v2 0/2] " Nate DeSimone
2026-03-10 4:34 ` [PATCH v2 1/2] " Nate DeSimone
2026-03-11 13:18 ` Rafael J. Wysocki
2026-03-24 23:20 ` Nate DeSimone
2026-03-10 4:34 ` [PATCH v2 2/2] Documentation: ABI: add FBPT and S3PT entries to sysfs-firmware-acpi Nate DeSimone
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox