Re: [PATCH net-next 2/2] eth: fbnic: Add devlink dev flash support

From: Simon Horman
Date: Tue Oct 15 2024 - 06:44:05 EST


On Mon, Oct 14, 2024 at 12:18:36PM +0100, Vadim Fedorenko wrote:
> On 12/10/2024 03:34, Lee Trager wrote:
> > fbnic supports updating firmware using a PLDM image signed and distributed
> > by Meta. PLDM images are written into stored flashed. Flashing does not
> > interrupt operation.
> >
> > On host reboot the newly flashed UEFI driver will be used. To run new
> > control or cmrt firmware the NIC must be power cycled.
> >
> > Signed-off-by: Lee Trager <lee@xxxxxxxxx>

...

> > diff --git a/drivers/net/ethernet/meta/fbnic/fbnic_devlink.c b/drivers/net/ethernet/meta/fbnic/fbnic_devlink.c

...

> > +/**
> > + * fbnic_send_component_table - Send PLDM component table to the firmware
> > + * @context: PLDM FW update structure
> > + * @component: The component to send
> > + * @transfer_flag: Flag indication location in component tables
> > + *
> > + * Read relevant data from component table and forward it to the firmware.
> > + * Check response to verify if the firmware indicates that it wishes to
> > + * proceed with the update.
> > + *
> > + * Return: zero on success
> > + * negative error code on failure
> > + */
> > +static int fbnic_send_component_table(struct pldmfw *context,
> > + struct pldmfw_component *component,
> > + u8 transfer_flag)
> > +{
> > + struct device *dev = context->dev;
> > + u16 id = component->identifier;
> > + u8 test_string[80];
> > +
> > + switch (id) {
> > + case QSPI_SECTION_CMRT:
> > + case QSPI_SECTION_CONTROL_FW:
> > + case QSPI_SECTION_OPTION_ROM:
> > + break;
> > + default:
> > + dev_err(dev, "Unknown component ID %u\n", id);
> > + return -EINVAL;
> > + }
> > +
> > + dev_dbg(dev, "Sending PLDM component table to firmware\n");
> > +
> > + /* Temp placeholder */
> > + memcpy(test_string, component->version_string,
> > + min_t(u8, component->version_len, 79));
> > + test_string[min_t(u8, component->version_len, 79)] = 0;
>
> Looks like this construction can be replaced with strscpy().
> There were several patchsets in the tree to use strscpy(), let's follow
> the pattern.

While looking at these lines, I'm unsure why min_t() is being used
instead of min() here. As version_len is unsigned and 79 is a positive
constant, I believe min() should be fine here.

>
> > + dev_info(dev, "PLDMFW: Component ID: %u version %s\n",
> > + id, test_string);
> > +
> > + return 0;
> > +}