From: Simon Horman <simon.horman@corigine.com>
To: Shannon Nelson <shannon.nelson@amd.com>
Cc: brett.creeley@amd.com, davem@davemloft.net,
netdev@vger.kernel.org, kuba@kernel.org, drivers@pensando.io,
leon@kernel.org, jiri@resnulli.us
Subject: Re: [PATCH v9 net-next 07/14] pds_core: add FW update feature to devlink
Date: Mon, 10 Apr 2023 17:44:04 +0200 [thread overview]
Message-ID: <ZDQuxBlfH5foSEFA@corigine.com> (raw)
In-Reply-To: <20230406234143.11318-8-shannon.nelson@amd.com>
On Thu, Apr 06, 2023 at 04:41:36PM -0700, Shannon Nelson wrote:
> Add in the support for doing firmware updates. Of the two
> main banks available, a and b, this updates the one not in
> use and then selects it for the next boot.
>
> Example:
> devlink dev flash pci/0000:b2:00.0 \
> file pensando/dsc_fw_1.63.0-22.tar
>
> Signed-off-by: Shannon Nelson <shannon.nelson@amd.com>
Hi Shannon,
some minor feedback from my side.
...
> diff --git a/Documentation/networking/device_drivers/ethernet/amd/pds_core.rst b/Documentation/networking/device_drivers/ethernet/amd/pds_core.rst
> index 265d948a8c02..6faf46390f5f 100644
> --- a/Documentation/networking/device_drivers/ethernet/amd/pds_core.rst
> +++ b/Documentation/networking/device_drivers/ethernet/amd/pds_core.rst
> @@ -73,6 +73,16 @@ The ``pds_core`` driver reports the following versions
> - fixed
> - The revision of the ASIC for this device
>
> +Firmware Management
> +===================
> +
> +The ``flash`` command can update a the DSC firmware. The downloaded firmware
> +will be saved into either of firmware bank 1 or bank 2, whichever is not
> +currrently in use, and that bank will used for the next boot::
nit: s/currrently/currently/
...
> diff --git a/drivers/net/ethernet/amd/pds_core/fw.c b/drivers/net/ethernet/amd/pds_core/fw.c
...
> +int pdsc_firmware_update(struct pdsc *pdsc, const struct firmware *fw,
> + struct netlink_ext_ack *extack)
> +{
> + u32 buf_sz, copy_sz, offset;
> + struct devlink *dl;
> + int next_interval;
> + u64 data_addr;
> + int err = 0;
> + u8 fw_slot;
> +
> + dev_info(pdsc->dev, "Installing firmware\n");
> +
> + dl = priv_to_devlink(pdsc);
> + devlink_flash_update_status_notify(dl, "Preparing to flash",
> + NULL, 0, 0);
> +
> + buf_sz = sizeof(pdsc->cmd_regs->data);
> +
> + dev_dbg(pdsc->dev,
> + "downloading firmware - size %d part_sz %d nparts %lu\n",
> + (int)fw->size, buf_sz, DIV_ROUND_UP(fw->size, buf_sz));
> +
> + offset = 0;
> + next_interval = 0;
> + data_addr = offsetof(struct pds_core_dev_cmd_regs, data);
> + while (offset < fw->size) {
> + if (offset >= next_interval) {
> + devlink_flash_update_status_notify(dl, "Downloading",
> + NULL, offset,
> + fw->size);
> + next_interval = offset +
> + (fw->size / PDSC_FW_INTERVAL_FRACTION);
> + }
> +
> + copy_sz = min_t(unsigned int, buf_sz, fw->size - offset);
> + mutex_lock(&pdsc->devcmd_lock);
> + memcpy_toio(&pdsc->cmd_regs->data, fw->data + offset, copy_sz);
> + err = pdsc_devcmd_fw_download_locked(pdsc, data_addr,
> + offset, copy_sz);
> + mutex_unlock(&pdsc->devcmd_lock);
> + if (err) {
> + dev_err(pdsc->dev,
> + "download failed offset 0x%x addr 0x%llx len 0x%x: %pe\n",
> + offset, data_addr, copy_sz, ERR_PTR(err));
> + NL_SET_ERR_MSG_MOD(extack, "Segment download failed");
> + goto err_out;
> + }
> + offset += copy_sz;
> + }
> + devlink_flash_update_status_notify(dl, "Downloading", NULL,
> + fw->size, fw->size);
> +
> + devlink_flash_update_timeout_notify(dl, "Installing", NULL,
> + PDSC_FW_INSTALL_TIMEOUT);
> +
> + fw_slot = pdsc_devcmd_fw_install(pdsc);
> + if (fw_slot < 0) {
The type of fs_slot is u8.
But the return type of pdsc_devcmd_fw_install is int,
(I think) it can return negative error values,
and that case is checked on the line above.
Perhaps the type of fw_slot should be int?
Flagged by Coccinelle as:
drivers/net/ethernet/amd/pds_core/fw.c:154:5-12: WARNING: Unsigned expression compared with zero: fw_slot < 0
And Smatch as:
drivers/net/ethernet/amd/pds_core/fw.c:154 pdsc_firmware_update() warn: impossible condition '(fw_slot < 0) => (0-255 < 0)'
> + err = fw_slot;
> + dev_err(pdsc->dev, "install failed: %pe\n", ERR_PTR(err));
> + NL_SET_ERR_MSG_MOD(extack, "Failed to start firmware install");
> + goto err_out;
> + }
...
next prev parent reply other threads:[~2023-04-10 15:44 UTC|newest]
Thread overview: 54+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-04-06 23:41 [PATCH v9 net-next 00/14] pds_core driver Shannon Nelson
2023-04-06 23:41 ` [PATCH v9 net-next 01/14] pds_core: initial framework for pds_core PF driver Shannon Nelson
2023-04-09 11:26 ` Leon Romanovsky
2023-04-10 18:41 ` Shannon Nelson
2023-04-06 23:41 ` [PATCH v9 net-next 02/14] pds_core: add devcmd device interfaces Shannon Nelson
2023-04-09 11:46 ` Leon Romanovsky
2023-04-10 19:05 ` Shannon Nelson
2023-04-13 8:33 ` Leon Romanovsky
2023-04-13 15:08 ` Jakub Kicinski
2023-04-14 0:00 ` Shannon Nelson
2023-04-06 23:41 ` [PATCH v9 net-next 03/14] pds_core: health timer and workqueue Shannon Nelson
2023-04-09 11:51 ` Leon Romanovsky
2023-04-10 19:12 ` Shannon Nelson
2023-04-06 23:41 ` [PATCH v9 net-next 04/14] pds_core: add devlink health facilities Shannon Nelson
2023-04-09 11:54 ` Leon Romanovsky
2023-04-10 19:18 ` Shannon Nelson
2023-04-06 23:41 ` [PATCH v9 net-next 05/14] pds_core: set up device and adminq Shannon Nelson
2023-04-09 12:03 ` Leon Romanovsky
2023-04-10 19:27 ` Shannon Nelson
2023-04-06 23:41 ` [PATCH v9 net-next 06/14] pds_core: Add adminq processing and commands Shannon Nelson
2023-04-06 23:41 ` [PATCH v9 net-next 07/14] pds_core: add FW update feature to devlink Shannon Nelson
2023-04-10 15:44 ` Simon Horman [this message]
2023-04-10 22:59 ` Shannon Nelson
2023-04-06 23:41 ` [PATCH v9 net-next 08/14] pds_core: set up the VIF definitions and defaults Shannon Nelson
2023-04-09 12:08 ` Leon Romanovsky
2023-04-10 19:36 ` Shannon Nelson
2023-04-13 8:36 ` Leon Romanovsky
2023-04-06 23:41 ` [PATCH v9 net-next 09/14] pds_core: add initial VF device handling Shannon Nelson
2023-04-06 23:41 ` [PATCH v9 net-next 10/14] pds_core: add auxiliary_bus devices Shannon Nelson
2023-04-09 12:23 ` Leon Romanovsky
2023-04-10 20:02 ` Shannon Nelson
2023-04-13 8:43 ` Leon Romanovsky
2023-04-06 23:41 ` [PATCH v9 net-next 11/14] pds_core: devlink params for enabling VIF support Shannon Nelson
2023-04-06 23:41 ` [PATCH v9 net-next 12/14] pds_core: add the aux client API Shannon Nelson
2023-04-09 17:07 ` Leon Romanovsky
2023-04-10 20:50 ` Shannon Nelson
2023-04-13 8:45 ` Leon Romanovsky
2023-04-06 23:41 ` [PATCH v9 net-next 13/14] pds_core: publish events to the clients Shannon Nelson
2023-04-09 17:11 ` Leon Romanovsky
2023-04-10 21:01 ` Shannon Nelson
2023-04-13 8:55 ` Leon Romanovsky
2023-04-13 15:14 ` Jakub Kicinski
2023-04-13 16:44 ` Leon Romanovsky
2023-04-13 16:55 ` Jakub Kicinski
2023-04-13 17:07 ` Leon Romanovsky
2023-04-13 17:10 ` Jakub Kicinski
2023-04-13 23:42 ` Shannon Nelson
2023-04-14 8:51 ` Leon Romanovsky
2023-04-06 23:41 ` [PATCH v9 net-next 14/14] pds_core: Kconfig and pds_core.rst Shannon Nelson
2023-04-09 17:17 ` Leon Romanovsky
2023-04-10 21:05 ` Shannon Nelson
2023-04-08 3:18 ` [PATCH v9 net-next 00/14] pds_core driver Jakub Kicinski
2023-04-10 20:00 ` Alex Williamson
2023-04-10 21:05 ` Shannon Nelson
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=ZDQuxBlfH5foSEFA@corigine.com \
--to=simon.horman@corigine.com \
--cc=brett.creeley@amd.com \
--cc=davem@davemloft.net \
--cc=drivers@pensando.io \
--cc=jiri@resnulli.us \
--cc=kuba@kernel.org \
--cc=leon@kernel.org \
--cc=netdev@vger.kernel.org \
--cc=shannon.nelson@amd.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).