Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752829AbbKNDKa (ORCPT ); Fri, 13 Nov 2015 22:10:30 -0500 Received: from RELAY-04.ANDREW.CMU.EDU ([128.2.105.169]:60221 "EHLO relay.andrew.cmu.edu" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751437AbbKNDKZ (ORCPT ); Fri, 13 Nov 2015 22:10:25 -0500 From: "Gabriel L. Somlo" 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: kernelnewbies@kernelnewbies.org, qemu-devel@nongnu.org, matt.fleming@intel.com, jordan.l.justen@intel.com, mst@redhat.com, peter.maydell@linaro.org, leif.lindholm@linaro.org, ard.biesheuvel@linaro.org, pbonzini@redhat.com, kraxel@redhat.com, luto@amacapital.net, stefanha@gmail.com Subject: [PATCH v4 0/4] SysFS driver for QEMU fw_cfg device Date: Fri, 13 Nov 2015 22:03:51 -0500 Message-Id: <1447470235-13643-1-git-send-email-somlo@cmu.edu> X-Mailer: git-send-email 2.4.3 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 5708 Lines: 164 From: "Gabriel Somlo" 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 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 ), 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 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/