[PATCH 4/6] firmware: ti_sci.c: Add a function to request DM metadata using ti_sci* calls
Neha Malcom Francis
n-francis at ti.com
Tue Jun 3 10:38:19 CEST 2025
On 28/05/25 13:35, Moteen Shah wrote:
> Add a function to retrieve information of the DM firmware's ABI versions,
> RM/PM HAL, firmware version, etc using TI_SCI protocol.
>
> Signed-off-by: Moteen Shah <m-shah at ti.com>
> ---
> drivers/firmware/ti_sci.c | 54 +++++++++++++++++++++++++++++++++++++++
> 1 file changed, 54 insertions(+)
>
> diff --git a/drivers/firmware/ti_sci.c b/drivers/firmware/ti_sci.c
> index bb9738efa81..8a8edc97e85 100644
> --- a/drivers/firmware/ti_sci.c
> +++ b/drivers/firmware/ti_sci.c
> @@ -320,6 +320,59 @@ static int ti_sci_cmd_query_dm_cap(struct ti_sci_handle *handle, u64 *fw_caps)
> return 0;
> }
>
> +/**
> + * ti_sci_cmd_get_dm_version() - command to get the DM version of the SCI
> + * entity
> + * @handle: Pointer to TI SCI handle
> + * @dm_info: Pointer to DM version information structure
> + *
> + * Return: 0 if all went fine, else return appropriate error.
> + */
> +
> +static int ti_sci_cmd_get_dm_version(struct ti_sci_handle *handle,
> + struct ti_sci_dm_version_info *dm_info)
> +{
> + struct ti_sci_msg_dm_resp_version *ver_info;
> + struct ti_sci_msg_hdr hdr;
> + struct ti_sci_info *info;
> + struct ti_sci_xfer *xfer;
> + int ret;
> +
> + if (IS_ERR(handle))
> + return PTR_ERR(handle);
> + if (!handle || !dm_info)
> + return -EINVAL;
> +
> + info = handle_to_ti_sci_info(handle);
> +
> + xfer = ti_sci_setup_one_xfer(info, TI_SCI_MSG_DM_VERSION,
> + TI_SCI_FLAG_REQ_ACK_ON_PROCESSED,
> + (u32 *)&hdr, sizeof(struct ti_sci_msg_hdr),
> + sizeof(*ver_info));
> + if (IS_ERR(xfer)) {
> + ret = PTR_ERR(xfer);
> + return ret;
> + }
> +
> + ret = ti_sci_do_xfer(info, xfer);
> + if (ret)
> + return ret;
> +
> + ver_info = (struct ti_sci_msg_dm_resp_version *)xfer->tx_message.buf;
> +
> + dm_info->abi_major = ver_info->abi_major;
> + dm_info->abi_minor = ver_info->abi_minor;
> + dm_info->dm_ver = ver_info->version;
> + dm_info->patch_ver = ver_info->patch_version;
> + dm_info->sub_ver = ver_info->sub_version;
> + strlcpy(dm_info->sci_server_version, ver_info->sci_server_version,
> + sizeof(ver_info->sci_server_version));
> + strlcpy(dm_info->rm_pm_hal_version, ver_info->rm_pm_hal_version,
> + sizeof(ver_info->rm_pm_hal_version));
> +
> + return 0;
> +}
> +
> /**
> * ti_sci_cmd_get_revision() - command to get the revision of the SCI entity
> * @handle: pointer to TI SCI handle
> @@ -2738,6 +2791,7 @@ static void ti_sci_setup_ops(struct ti_sci_info *info)
> fwl_ops->get_fwl_region = ti_sci_cmd_get_fwl_region;
> fwl_ops->change_fwl_owner = ti_sci_cmd_change_fwl_owner;
>
> + fw_ops->get_dm_version = ti_sci_cmd_get_dm_version;
> fw_ops->query_dm_cap = ti_sci_cmd_query_dm_cap;
> }
>
Reviewed-by: Neha Malcom Francis <n-francis at ti.com>
--
Thanking You
Neha Malcom Francis
More information about the U-Boot
mailing list