All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Zhang, Tianfei" <tianfei.zhang@intel.com>
To: "Weight, Russell H" <russell.h.weight@intel.com>,
	"mcgrof@kernel.org" <mcgrof@kernel.org>,
	"rafael@kernel.org" <rafael@kernel.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Cc: "trix@redhat.com" <trix@redhat.com>,
	"lgoncalv@redhat.com" <lgoncalv@redhat.com>,
	"Xu, Yilun" <yilun.xu@intel.com>, "Wu, Hao" <hao.wu@intel.com>,
	"matthew.gerlach@linux.intel.com"
	<matthew.gerlach@linux.intel.com>,
	"Muddebihal, Basheer Ahmed" <basheer.ahmed.muddebihal@intel.com>
Subject: RE: [PATCH v3 0/8] Extend FW framework for user FW uploads
Date: Tue, 19 Apr 2022 08:44:34 +0000	[thread overview]
Message-ID: <BN9PR11MB548384A9E1EE6B72FFEE5FFFE3F29@BN9PR11MB5483.namprd11.prod.outlook.com> (raw)
In-Reply-To: <20220418223753.639058-1-russell.h.weight@intel.com>



> -----Original Message-----
> From: Weight, Russell H <russell.h.weight@intel.com>
> Sent: Tuesday, April 19, 2022 6:38 AM
> To: mcgrof@kernel.org; rafael@kernel.org; linux-kernel@vger.kernel.org
> Cc: trix@redhat.com; lgoncalv@redhat.com; Xu, Yilun <yilun.xu@intel.com>;
> Wu, Hao <hao.wu@intel.com>; matthew.gerlach@linux.intel.com; Muddebihal,
> Basheer Ahmed <basheer.ahmed.muddebihal@intel.com>; Zhang, Tianfei
> <tianfei.zhang@intel.com>; Weight, Russell H <russell.h.weight@intel.com>
> Subject: [PATCH v3 0/8] Extend FW framework for user FW uploads
> 
> Extend the firmware loader subsystem to support a persistent sysfs interface
> that userspace may use to initiate a firmware update. For example, FPGA based
> PCIe cards automatically load firmware and FPGA images from local FLASH when
> the card boots. The images in FLASH may be updated with new images that are
> uploaded by the user.
> 
> A device driver may call firmware_upload_register() to expose persistent
> "loading" and "data" sysfs files at /sys/class/firmare/<NAME>/*. These files are
> used in the same way as the fallback sysfs "loading" and "data"
> files. However, when 0 is written to "loading" to complete the write of firmware
> data, the data is also transferred to the lower-level driver using pre-registered
> call-back functions. The data transfer is done in the context of a kernel worker
> thread.
> 
> Additional sysfs nodes are added in the same location as "loading" and "data" to
> monitor the transfer of the image data to the device using callback functions
> provided by the lower-level device driver and to allow the data transfer to be
> cancelled.
> 
> Example usage:
> 
> $ pwd
> /sys/class/firmware/secure-update.1
> $ ls
> cancel  device  loading  remaining_size  subsystem
> data    error   power    status          uevent
> $ echo 1 > loading
> $ cat /tmp/firmware.bin > data
> $ echo 0 > loading
> $ while :; do cat status; cat remaining_size ; sleep 3; done preparing
> 44590080
> <--snip-->
> transferring
> 44459008
> transferring
> 44311552
> <--snip-->
> transferring
> 173056
> <--snip-->
> programming
> 0
> <--snip-->
> idle
> 0
> ^C
> $ cat error
> 
> The first two patches in this set make minor changes to enable the fw_priv data
> structure and the sysfs interfaces to be used multiple times during the existence
> of the device driver instance. The third patch is mostly a reorganization of
> existing code in preparation for sharing common code with the firmware-upload
> support. The fourth and fifth patches provide the code for user-initiated
> firmware uploads. The final 3 patches extend selftest support to test firmware-
> upload functionality.
> 
> 
> Changelog v2 -> v3:
>   - Added Reviewed-by tag
>   - Added kdoc support for enum fw_upload_prog progress codes
> 
> Changelog v1 -> v2:
>   - Rebased to 5.18-rc2.
>   - It was discovered that the new function in v1, fw_state_is_done(), is
>     equivalent to the existing fw_sysfs_done() function. Renamed
>     fw_sysfs_done() and fw_sysfs_loading() to fw_state_is_done() and
>     fw_state_is_loading() respectively, and placed them along side companion
>     functions in drivers/base/firmware_loader/firmware.h.
>   - Removed the "if !fw_sysfs_done(fw_priv))" condition in switch case 1 of
>     firmware_loading_store(). It is rendered unnecessary by other changes
>     to the function.
>   - Updated documentation Date and KernelVersion fields to July 2022
>     and 5.19.
>   - Unconditionally set fw_priv->is_paged_buf to true in
>     firmware_upload_register();
> 
> Changelog RFC -> v1:
>   - Renamed files fw_sysfs.c and fw_sysfs.h to sysfs.c and sysfs.h
>   - Moved "MODULE_IMPORT_NS(FIRMWARE_LOADER_PRIVATE);" from sysfs.c
> to
>     sysfs.h to address an error identified by the kernel test robot
>     <lkp@intel.com>
>   - renamed fw_upload_register() and fw_upload_unregister() to
>     firmware_upload_register() and fw_upload_unregister().
>   - Moved ifdef'd section of code out of firmware_loading_store() in sysfs.c
>     into a new function, fw_upload_start(), in sysfs_upload.c.
>   - Changed #defines to enums for error codes and progress states
>   - Added additional kernel-doc supported symbols into the documentation.
>     Some rewording in documentation as well.
>   - Added module reference counting for the parent module in the
>     firmware_upload_register() and firmware_upload_unregister() functions
>     to fix problems found when testing with test_firmware module.
>   - Removed unnecessary module reference counting for THIS_MODULE.
>   - Added a new patch to modify the test_firmware module to support
>     testing of the firmware upload mechanism.
>   - Added a new patch to modify the test_firmware module to support
>     error injection for firmware upload.
>   - Added a new patch to extend the existing firmware selftests to cover
>     firmware upload.
> 
> Russ Weight (8):
>   firmware_loader: Clear data and size in fw_free_paged_buf
>   firmware_loader: Check fw_state_is_done in loading_store
>   firmware_loader: Split sysfs support from fallback
>   firmware_loader: Add firmware-upload support
>   firmware_loader: Add sysfs nodes to monitor fw_upload
>   test_firmware: Add test support for firmware upload
>   test_firmware: Error injection for firmware upload
>   selftests: firmware: Add firmware upload selftests
> 
>  .../ABI/testing/sysfs-class-firmware          |  77 ++++
>  .../driver-api/firmware/fw_upload.rst         | 126 +++++
>  Documentation/driver-api/firmware/index.rst   |   1 +
>  drivers/base/firmware_loader/Kconfig          |  18 +
>  drivers/base/firmware_loader/Makefile         |   2 +
>  drivers/base/firmware_loader/fallback.c       | 430 ------------------
>  drivers/base/firmware_loader/fallback.h       |  46 +-
>  drivers/base/firmware_loader/firmware.h       |  16 +
>  drivers/base/firmware_loader/main.c           |  18 +-
>  drivers/base/firmware_loader/sysfs.c          | 423 +++++++++++++++++
>  drivers/base/firmware_loader/sysfs.h          | 100 ++++
>  drivers/base/firmware_loader/sysfs_upload.c   | 397 ++++++++++++++++
>  drivers/base/firmware_loader/sysfs_upload.h   |  54 +++
>  include/linux/firmware.h                      |  82 ++++
>  lib/test_firmware.c                           | 378 +++++++++++++++
>  tools/testing/selftests/firmware/Makefile     |   2 +-
>  tools/testing/selftests/firmware/config       |   1 +
>  tools/testing/selftests/firmware/fw_lib.sh    |   7 +
>  .../selftests/firmware/fw_run_tests.sh        |   4 +
>  tools/testing/selftests/firmware/fw_upload.sh | 214 +++++++++
>  20 files changed, 1910 insertions(+), 486 deletions(-)  create mode 100644
> Documentation/ABI/testing/sysfs-class-firmware
>  create mode 100644 Documentation/driver-api/firmware/fw_upload.rst
>  create mode 100644 drivers/base/firmware_loader/sysfs.c
>  create mode 100644 drivers/base/firmware_loader/sysfs.h
>  create mode 100644 drivers/base/firmware_loader/sysfs_upload.c
>  create mode 100644 drivers/base/firmware_loader/sysfs_upload.h
>  create mode 100755 tools/testing/selftests/firmware/fw_upload.sh

Hi Russ,
I have tested and reviewed  this patchset, it looks good for me.

Reviewed-by: Tianfei zhang <tianfei.zhang@intel.com>
> 
> --
> 2.25.1


      parent reply	other threads:[~2022-04-19  8:44 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-04-18 22:37 [PATCH v3 0/8] Extend FW framework for user FW uploads Russ Weight
2022-04-18 22:37 ` [PATCH v3 1/8] firmware_loader: Clear data and size in fw_free_paged_buf Russ Weight
2022-04-18 22:37 ` [PATCH v3 2/8] firmware_loader: Check fw_state_is_done in loading_store Russ Weight
2022-04-18 22:37 ` [PATCH v3 3/8] firmware_loader: Split sysfs support from fallback Russ Weight
2022-04-19  0:41   ` kernel test robot
2022-04-18 22:37 ` [PATCH v3 4/8] firmware_loader: Add firmware-upload support Russ Weight
2022-04-19 15:23   ` kernel test robot
2022-04-18 22:37 ` [PATCH v3 5/8] firmware_loader: Add sysfs nodes to monitor fw_upload Russ Weight
2022-04-18 22:37 ` [PATCH v3 6/8] test_firmware: Add test support for firmware upload Russ Weight
2022-04-18 22:37 ` [PATCH v3 7/8] test_firmware: Error injection " Russ Weight
2022-04-18 22:37 ` [PATCH v3 8/8] selftests: firmware: Add firmware upload selftests Russ Weight
2022-04-19  8:44 ` Zhang, Tianfei [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=BN9PR11MB548384A9E1EE6B72FFEE5FFFE3F29@BN9PR11MB5483.namprd11.prod.outlook.com \
    --to=tianfei.zhang@intel.com \
    --cc=basheer.ahmed.muddebihal@intel.com \
    --cc=hao.wu@intel.com \
    --cc=lgoncalv@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=matthew.gerlach@linux.intel.com \
    --cc=mcgrof@kernel.org \
    --cc=rafael@kernel.org \
    --cc=russell.h.weight@intel.com \
    --cc=trix@redhat.com \
    --cc=yilun.xu@intel.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.