netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
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;
> +	}

...

  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).