From: "Gabriel L. Somlo" <somlo@cmu.edu>
To: gregkh@linuxfoundation.org, robh+dt@kernel.org,
pawel.moll@arm.com, mark.rutland@arm.com,
ijc+devicetree@hellion.org.uk, galak@codeaurora.org,
arnd@arndb.de, lersek@redhat.com, ralf@linux-mips.org,
rmk+kernel@arm.linux.org.uk, eric@anholt.net,
hanjun.guo@linaro.org, zajec5@gmail.com, sudeep.holla@arm.com,
agross@codeaurora.org, linux-api@vger.kernel.org,
linux-kernel@vger.kernel.org, devicetree@vger.kernel.org
Cc: peter.maydell@linaro.org, matt.fleming@intel.com, mst@redhat.com,
jordan.l.justen@intel.com, kernelnewbies@kernelnewbies.org,
qemu-devel@nongnu.org, leif.lindholm@linaro.org,
luto@amacapital.net, ard.biesheuvel@linaro.org,
kraxel@redhat.com, stefanha@gmail.com, pbonzini@redhat.com
Subject: [Qemu-devel] [PATCH v4 0/4] SysFS driver for QEMU fw_cfg device
Date: Fri, 13 Nov 2015 22:03:51 -0500 [thread overview]
Message-ID: <1447470235-13643-1-git-send-email-somlo@cmu.edu> (raw)
From: "Gabriel Somlo" <somlo@cmu.edu>
Allow access to QEMU firmware blobs, passed into the guest VM via
the fw_cfg device, through SysFS entries. Blob meta-data (e.g. name,
size, and fw_cfg key), as well as the raw binary blob data may be
accessed.
The SysFS access location is /sys/firmware/qemu_fw_cfg/... and was
selected based on overall similarity to the type of information
exposed under /sys/firmware/dmi/entries/...
New (since v3):
Patch 1/4: Device probing now works with either ACPI, DT, or
optionally by manually specifying a base, size, and
register offsets on the command line. This way, all
architectures offering fw_cfg can be supported, although
x86 and ARM get *automatic* support via ACPI and/or DT.
HUGE thanks to Laszlo Ersek <lersek@redhat.com> for
pointing out drivers/virtio/virtio_mmio.c, as an example
on how to pull this off !!!
Stefan: I saw Marc's DMA patches to fw_cfg. Since only
x86 and ARM will support it starting with QEMU 2.5, and
since I expect to get lots of otherwise interesting (but
otherwise orthogonal) feedback on this series, I'd like
to stick with ioread8() across the board for now. We can
always patch in DMA support in a backward compatible way
later, once this series gets (hopefully) accepted :)
Patch 2/4: (was 3/4 in v3): unchanged. Exports kset_find_obj() so
modules can call it.
Patch 3/4: (was 4/4 in v3): rebased, but otherwise the same.
Essentially, creates a "human readable" directory
hierarchy from "path-like" tokens making up fw_cfg
blob names. I'm not really sure there's a way to make
this happen via udev rules, but I have at least one
potential use case for doing it *before* udev becomes
available (cc: Andy Lutomirski <luto@amacapital.net>),
so I'd be happy to leave this functionality in the
kernel module. See further below for an illustration
of this.
Patch 4/4: Updates the existing ARM DT documentation for fw_cfg,
mainly by pointing at the more comprehensive document
introduced with Patch 1/4 for details on the fw_cfg
device interface, leaving only the specific ARM/DT
address/size node information in place.
Thanks much,
--Gabriel
> In addition to the "by_key" blob listing, e.g.:
>
> $ tree /sys/firmware/qemu_fw_cfg/
> /sys/firmware/qemu_fw_cfg/
> |-- by_key
> | |-- 32
> | | |-- key
> | | |-- name ("etc/boot-fail-wait")
> | | |-- raw
> | | `-- size
> | |-- 33
> | | |-- key
> | | |-- name ("etc/smbios/smbios-tables")
> | | |-- raw
> | | `-- size
> | |-- 34
> | | |-- key
> | | |-- name ("etc/smbios/smbios-anchor")
> | | |-- raw
> | | `-- size
> | |-- 35
> | | |-- key
> | | |-- name ("etc/e820")
> | | |-- raw
> | | `-- size
> | |-- 36
> | | |-- key
> | | |-- name ("genroms/kvmvapic.bin")
> | | |-- raw
> | | `-- size
> | |-- 37
> | | |-- key
> | | |-- name ("etc/system-states")
> | | |-- raw
> | | `-- size
> | |-- 38
> | | |-- key
> | | |-- name ("etc/acpi/tables")
> | | |-- raw
> | | `-- size
> | |-- 39
> | | |-- key
> | | |-- name ("etc/table-loader")
> | | |-- raw
> | | `-- size
> | |-- 40
> | | |-- key
> | | |-- name ("etc/tpm/log")
> | | |-- raw
> | | `-- size
> | |-- 41
> | | |-- key
> | | |-- name ("etc/acpi/rsdp")
> | | |-- raw
> | | `-- size
> | `-- 42
> | |-- key
> | |-- name ("bootorder")
> | |-- raw
> | `-- size
> |
> ...
>
> Patch 3/4 also gets us a "human readable" "by_name" listing, like so:
>
> ...
> |-- by_name
> | |-- bootorder -> ../by_key/42
> | |-- etc
> | | |-- acpi
> | | | |-- rsdp -> ../../../by_key/41
> | | | `-- tables -> ../../../by_key/38
> | | |-- boot-fail-wait -> ../../by_key/32
> | | |-- e820 -> ../../by_key/35
> | | |-- smbios
> | | | |-- smbios-anchor -> ../../../by_key/34
> | | | `-- smbios-tables -> ../../../by_key/33
> | | |-- system-states -> ../../by_key/37
> | | |-- table-loader -> ../../by_key/39
> | | `-- tpm
> | | `-- log -> ../../../by_key/40
> | `-- genroms
> | `-- kvmvapic.bin -> ../../by_key/36
> `-- rev
Gabriel Somlo (4):
firmware: introduce sysfs driver for QEMU's fw_cfg device
kobject: export kset_find_obj() for module use
firmware: create directory hierarchy for sysfs fw_cfg entries
devicetree: update documentation for fw_cfg ARM bindings
.../ABI/testing/sysfs-firmware-qemu_fw_cfg | 240 +++++++
Documentation/devicetree/bindings/arm/fw-cfg.txt | 37 +-
drivers/firmware/Kconfig | 19 +
drivers/firmware/Makefile | 1 +
drivers/firmware/qemu_fw_cfg.c | 714 +++++++++++++++++++++
lib/kobject.c | 1 +
6 files changed, 977 insertions(+), 35 deletions(-)
create mode 100644 Documentation/ABI/testing/sysfs-firmware-qemu_fw_cfg
create mode 100644 drivers/firmware/qemu_fw_cfg.c
--
2.4.3
next reply other threads:[~2015-11-14 3:04 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-11-14 3:03 Gabriel L. Somlo [this message]
2015-11-14 3:03 ` [Qemu-devel] [PATCH v4 1/4] firmware: introduce sysfs driver for QEMU's fw_cfg device Gabriel L. Somlo
2015-11-14 3:03 ` [Qemu-devel] [PATCH v4 2/4] kobject: export kset_find_obj() for module use Gabriel L. Somlo
2015-11-14 3:03 ` [Qemu-devel] [PATCH v4 3/4] firmware: create directory hierarchy for sysfs fw_cfg entries Gabriel L. Somlo
2015-11-14 3:03 ` [Qemu-devel] [PATCH v4 4/4] devicetree: update documentation for fw_cfg ARM bindings Gabriel L. Somlo
2015-11-15 2:07 ` Rob Herring
2015-11-16 8:38 ` Paolo Bonzini
2015-11-16 13:51 ` Gabriel L. Somlo
2015-11-17 22:14 ` Rob Herring
2015-11-18 2:17 ` Gabriel L. Somlo
2015-11-18 13:04 ` François Revol
2015-11-18 20:54 ` Gabriel L. Somlo
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=1447470235-13643-1-git-send-email-somlo@cmu.edu \
--to=somlo@cmu.edu \
--cc=agross@codeaurora.org \
--cc=ard.biesheuvel@linaro.org \
--cc=arnd@arndb.de \
--cc=devicetree@vger.kernel.org \
--cc=eric@anholt.net \
--cc=galak@codeaurora.org \
--cc=gregkh@linuxfoundation.org \
--cc=hanjun.guo@linaro.org \
--cc=ijc+devicetree@hellion.org.uk \
--cc=jordan.l.justen@intel.com \
--cc=kernelnewbies@kernelnewbies.org \
--cc=kraxel@redhat.com \
--cc=leif.lindholm@linaro.org \
--cc=lersek@redhat.com \
--cc=linux-api@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=luto@amacapital.net \
--cc=mark.rutland@arm.com \
--cc=matt.fleming@intel.com \
--cc=mst@redhat.com \
--cc=pawel.moll@arm.com \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=ralf@linux-mips.org \
--cc=rmk+kernel@arm.linux.org.uk \
--cc=robh+dt@kernel.org \
--cc=stefanha@gmail.com \
--cc=sudeep.holla@arm.com \
--cc=zajec5@gmail.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;
as well as URLs for NNTP newsgroup(s).