Re: [PATCH] media: venus : hfi: add venus image info into smem

From: Stephen Boyd
Date: Wed Mar 24 2021 - 02:33:36 EST


Quoting Dikshita Agarwal (2021-03-23 22:40:57)
> fill fw version info into smem to be printed as part of

s/fill/Fill/

> soc info.
>
> Signed-off-by: Dikshita Agarwal <dikshita@xxxxxxxxxxxxxx>
> ---
> drivers/media/platform/qcom/venus/hfi_msgs.c | 36 ++++++++++++++++++++++++++--
> 1 file changed, 34 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/media/platform/qcom/venus/hfi_msgs.c b/drivers/media/platform/qcom/venus/hfi_msgs.c
> index 06a1908..0e94921 100644
> --- a/drivers/media/platform/qcom/venus/hfi_msgs.c
> +++ b/drivers/media/platform/qcom/venus/hfi_msgs.c
> @@ -239,15 +242,44 @@ static void
> sys_get_prop_image_version(struct device *dev,
> struct hfi_msg_sys_property_info_pkt *pkt)
> {
> + u32 i = 0;
> + size_t smem_block_size = 0;
> + u8 *smem_table_ptr;
> + char version[256];
> + const u32 version_string_size = 128;
> + const u32 smem_image_index_venus = 14 * 128;

Can these be #defines instead of local const variables?

> + u8 *str_image_version;
> int req_bytes;
>
> req_bytes = pkt->hdr.size - sizeof(*pkt);
>
> - if (req_bytes < 128 || !pkt->data[1] || pkt->num_properties > 1)
> + if (req_bytes < version_string_size || !pkt->data[1] || pkt->num_properties > 1)
> /* bad packet */
> return;
>
> - dev_dbg(dev, VDBGL "F/W version: %s\n", (u8 *)&pkt->data[1]);

Why is pkt->data not already a u8?

> + str_image_version = (u8 *)&pkt->data[1];
> +
> + /*
> + * The version string returned by firmware includes null
> + * characters at the start and in between. Replace the null
> + * characters with space, to print the version info.
> + */
> + for (i = 0; i < version_string_size; i++) {
> + if (str_image_version[i] != '\0')
> + version[i] = str_image_version[i];
> + else
> + version[i] = ' ';
> + }
> +
> + version[i] = '\0';
> + dev_dbg(dev, VDBGL "F/W version: %s\n", version);

Instead of replacing the string with spaces can we find the first
non-null character up to version_string_size and then stash a pointer to
that and print it out with dev_dbg()? That would save 256 bytes on the
stack for something that is presumably a string and will be NUL
terminated.

> +
> + smem_table_ptr = qcom_smem_get(QCOM_SMEM_HOST_ANY,
> + SMEM_IMAGE_VERSION_TABLE, &smem_block_size);
> + if ((smem_image_index_venus + version_string_size) <= smem_block_size &&
> + smem_table_ptr)
> + memcpy(smem_table_ptr + smem_image_index_venus,
> + str_image_version, version_string_size);

It would be nice to have shorter variable names so this was an

if (condition1 && condition2)
memcpy();