lkml.org 
[lkml]   [2020]   [Jun]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    SubjectRe: [PATCH v4 2/2] firmware: google: Expose coreboot tables over sysfs
    From
    Date
    Quoting patrick.rudolph@9elements.com (2020-04-07 01:29:07)
    > From: Patrick Rudolph <patrick.rudolph@9elements.com>
    >
    > Make all coreboot table entries available to userland. This is useful for
    > tools that are currently using /dev/mem.
    >
    > Besides the tag and size also expose the raw table data itself.
    >
    > Update the ABI documentation to explain the new sysfs interface.
    >
    > Tools can easily scan for the right coreboot table by reading
    > /sys/bus/coreboot/devices/coreboot*/attributes/id
    > The binary table data can then be read from
    > /sys/bus/coreboot/devices/coreboot*/attributes/data
    >
    > Signed-off-by: Patrick Rudolph <patrick.rudolph@9elements.com>
    > ---

    Reviewed-by: Stephen Boyd <swboyd@chromium.org>

    Minor nits below:

    > -v2:
    > - Add ABI documentation
    > - Add 0x prefix on hex values
    > - Remove wrong ioremap hint as found by CI
    > -v3:
    > - Use BIN_ATTR_RO
    > -v4:
    > - Updated ABI documentation
    > ---
    > Documentation/ABI/stable/sysfs-bus-coreboot | 30 +++++++++++
    > drivers/firmware/google/coreboot_table.c | 58 +++++++++++++++++++++
    > 2 files changed, 88 insertions(+)
    >
    > diff --git a/Documentation/ABI/stable/sysfs-bus-coreboot b/Documentation/ABI/stable/sysfs-bus-coreboot
    > index 6055906f41f2..328153a1b3f4 100644
    > --- a/Documentation/ABI/stable/sysfs-bus-coreboot
    > +++ b/Documentation/ABI/stable/sysfs-bus-coreboot
    > diff --git a/drivers/firmware/google/coreboot_table.c b/drivers/firmware/google/coreboot_table.c
    > index 0205987a4fd4..d0fc3eb93f4f 100644
    > --- a/drivers/firmware/google/coreboot_table.c
    > +++ b/drivers/firmware/google/coreboot_table.c
    > @@ -3,9 +3,11 @@
    > * coreboot_table.c
    > *
    > * Module providing coreboot table access.
    > + * Exports coreboot tables as attributes in sysfs.
    > *
    > * Copyright 2017 Google Inc.
    > * Copyright 2017 Samuel Holland <samuel@sholland.org>
    > + * Copyright 2019 9elements Agency GmbH
    > */
    >
    > #include <linux/acpi.h>
    > @@ -84,6 +86,60 @@ void coreboot_driver_unregister(struct coreboot_driver *driver)
    > }
    > EXPORT_SYMBOL(coreboot_driver_unregister);
    >
    > +static ssize_t id_show(struct device *dev,
    > + struct device_attribute *attr, char *buffer)
    > +{
    > + struct coreboot_device *device = CB_DEV(dev);

    Wouldn't hurt to throw const in front of these.

    > +
    > + return sprintf(buffer, "0x%08x\n", device->entry.tag);
    > +}
    > +
    > +static ssize_t size_show(struct device *dev,
    > + struct device_attribute *attr, char *buffer)
    > +{
    > + struct coreboot_device *device = CB_DEV(dev);

    And these. But the function is so short probably doesn't really matter.

    > +
    > + return sprintf(buffer, "%u\n", device->entry.size);
    > +}
    > +
    > +static DEVICE_ATTR_RO(id);
    > +static DEVICE_ATTR_RO(size);
    > +
    > +static struct attribute *cb_dev_attrs[] = {
    > + &dev_attr_id.attr,
    > + &dev_attr_size.attr,
    > + NULL
    > +};
    > +
    > +static ssize_t data_read(struct file *filp, struct kobject *kobj,
    > + struct bin_attribute *bin_attr,
    > + char *buffer, loff_t offset, size_t count)
    > +{
    > + struct device *dev = kobj_to_dev(kobj);
    > + struct coreboot_device *device = CB_DEV(dev);
    > +
    > + return memory_read_from_buffer(buffer, count, &offset,
    > + &device->entry, device->entry.size);
    > +}
    > +
    > +static BIN_ATTR_RO(data, 0);

    Still no way to figure out the actual size? Can we add the bin_attribute
    at runtime?

    > +
    > +static struct bin_attribute *cb_dev_bin_attrs[] = {
    > + &bin_attr_data,
    > + NULL
    > +};
    > +

    \
     
     \ /
      Last update: 2020-06-25 09:11    [W:2.583 / U:0.108 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site