[PATCH 1/2] lib: utils: Add Implementation ID and Version as RPMI MPXY attributes

Anup Patel anup at brainfault.org
Tue Jun 17 23:31:28 PDT 2025


On Wed, Jun 18, 2025 at 11:09 AM Rahul Pathak <rpathak at ventanamicro.com> wrote:
>
> The latest frozen RPMI spec has added Implementation ID
> and Implementation Version as message protocol specific
> mpxy attributes. Add support for these.
>
> Signed-off-by: Rahul Pathak <rpathak at ventanamicro.com>

LGTM.

Reviewed-by: Anup Patel <anup at brainfault.org>

Regards,
Anup

> ---
>  include/sbi_utils/mailbox/rpmi_msgprot.h    |  2 ++
>  include/sbi_utils/mpxy/fdt_mpxy_rpmi_mbox.h |  8 +++++++-
>  lib/utils/mailbox/fdt_mailbox_rpmi_shmem.c  |  6 ++++++
>  lib/utils/mpxy/fdt_mpxy_rpmi_mbox.c         | 15 +++++++++++++++
>  4 files changed, 30 insertions(+), 1 deletion(-)
>
> diff --git a/include/sbi_utils/mailbox/rpmi_msgprot.h b/include/sbi_utils/mailbox/rpmi_msgprot.h
> index e317ba097c17..c79070a6f121 100644
> --- a/include/sbi_utils/mailbox/rpmi_msgprot.h
> +++ b/include/sbi_utils/mailbox/rpmi_msgprot.h
> @@ -198,6 +198,8 @@ enum rpmi_channel_attribute_id {
>         RPMI_CHANNEL_ATTR_RX_TIMEOUT,
>         RPMI_CHANNEL_ATTR_SERVICEGROUP_ID,
>         RPMI_CHANNEL_ATTR_SERVICEGROUP_VERSION,
> +       RPMI_CHANNEL_ATTR_IMPL_ID,
> +       RPMI_CHANNEL_ATTR_IMPL_VERSION,
>         RPMI_CHANNEL_ATTR_MAX,
>  };
>
> diff --git a/include/sbi_utils/mpxy/fdt_mpxy_rpmi_mbox.h b/include/sbi_utils/mpxy/fdt_mpxy_rpmi_mbox.h
> index 068a1a557fe2..3a1c11774851 100644
> --- a/include/sbi_utils/mpxy/fdt_mpxy_rpmi_mbox.h
> +++ b/include/sbi_utils/mpxy/fdt_mpxy_rpmi_mbox.h
> @@ -22,7 +22,9 @@
>  enum mpxy_msgprot_rpmi_attr_id {
>         MPXY_MSGPROT_RPMI_ATTR_SERVICEGROUP_ID = SBI_MPXY_ATTR_MSGPROTO_ATTR_START,
>         MPXY_MSGPROT_RPMI_ATTR_SERVICEGROUP_VERSION,
> -       MPXY_MSGPROT_RPMI_ATTR_MAX_ID,
> +       MPXY_MSGPROT_RPMI_ATTR_IMPL_ID,
> +       MPXY_MSGPROT_RPMI_ATTR_IMPL_VERSION,
> +       MPXY_MSGPROT_RPMI_ATTR_MAX_ID
>  };
>
>  /**
> @@ -33,6 +35,8 @@ enum mpxy_msgprot_rpmi_attr_id {
>  struct mpxy_rpmi_channel_attrs {
>         u32 servicegrp_id;
>         u32 servicegrp_ver;
> +       u32 impl_id;
> +       u32 impl_ver;
>  };
>
>  /** Make sure all attributes are packed for direct memcpy */
> @@ -45,6 +49,8 @@ struct mpxy_rpmi_channel_attrs {
>
>  assert_field_offset(servicegrp_id, MPXY_MSGPROT_RPMI_ATTR_SERVICEGROUP_ID);
>  assert_field_offset(servicegrp_ver, MPXY_MSGPROT_RPMI_ATTR_SERVICEGROUP_VERSION);
> +assert_field_offset(impl_id, MPXY_MSGPROT_RPMI_ATTR_IMPL_ID);
> +assert_field_offset(impl_ver, MPXY_MSGPROT_RPMI_ATTR_IMPL_VERSION);
>
>  /** MPXY RPMI service data for each service group */
>  struct mpxy_rpmi_service_data {
> diff --git a/lib/utils/mailbox/fdt_mailbox_rpmi_shmem.c b/lib/utils/mailbox/fdt_mailbox_rpmi_shmem.c
> index aad68b5a996b..fdb04915ba70 100644
> --- a/lib/utils/mailbox/fdt_mailbox_rpmi_shmem.c
> +++ b/lib/utils/mailbox/fdt_mailbox_rpmi_shmem.c
> @@ -523,6 +523,12 @@ static int rpmi_shmem_mbox_get_attribute(struct mbox_chan *chan,
>         case RPMI_CHANNEL_ATTR_SERVICEGROUP_VERSION:
>                 *((u32 *)out_value) = srvgrp_chan->servicegroup_version;
>                 break;
> +       case RPMI_CHANNEL_ATTR_IMPL_ID:
> +               *((u32 *)out_value) = mctl->impl_id;
> +               break;
> +       case RPMI_CHANNEL_ATTR_IMPL_VERSION:
> +               *((u32 *)out_value) = mctl->impl_version;
> +               break;
>         default:
>                 return SBI_ENOTSUPP;
>         }
> diff --git a/lib/utils/mpxy/fdt_mpxy_rpmi_mbox.c b/lib/utils/mpxy/fdt_mpxy_rpmi_mbox.c
> index 48dfe4762799..84b7a67dc7a4 100644
> --- a/lib/utils/mpxy/fdt_mpxy_rpmi_mbox.c
> +++ b/lib/utils/mpxy/fdt_mpxy_rpmi_mbox.c
> @@ -213,6 +213,7 @@ static int mpxy_mbox_send_message_withoutresp(struct sbi_mpxy_channel *channel,
>  int mpxy_rpmi_mbox_init(const void *fdt, int nodeoff, const struct fdt_match *match)
>  {
>         u32 channel_id, servicegrp_ver, pro_ver, max_data_len, tx_tout, rx_tout;
> +       u32 impl_id, impl_ver;
>         const struct mpxy_rpmi_mbox_data *data = match->data;
>         struct mpxy_rpmi_mbox *rmb;
>         struct mbox_chan *chan;
> @@ -270,6 +271,18 @@ int mpxy_rpmi_mbox_init(const void *fdt, int nodeoff, const struct fdt_match *ma
>         if (rc)
>                 goto fail_free_chan;
>
> +       /* Get channel implementation id */
> +       rc = mbox_chan_get_attribute(chan, RPMI_CHANNEL_ATTR_IMPL_ID,
> +                                    &impl_id);
> +       if (rc)
> +               goto fail_free_chan;
> +
> +       /* Get channel implementation version */
> +       rc = mbox_chan_get_attribute(chan, RPMI_CHANNEL_ATTR_IMPL_VERSION,
> +                                    &impl_ver);
> +       if (rc)
> +               goto fail_free_chan;
> +
>         /*
>          * The "riscv,sbi-mpxy-channel-id" DT property is mandatory
>          * for MPXY RPMI mailbox client driver so if this is not
> @@ -316,6 +329,8 @@ int mpxy_rpmi_mbox_init(const void *fdt, int nodeoff, const struct fdt_match *ma
>         /* RPMI service group attributes */
>         rmb->msgprot_attrs.servicegrp_id = data->servicegrp_id;
>         rmb->msgprot_attrs.servicegrp_ver = servicegrp_ver;
> +       rmb->msgprot_attrs.impl_id = impl_id;
> +       rmb->msgprot_attrs.impl_ver = impl_ver;
>
>         rmb->mbox_data = data;
>         rmb->chan = chan;
> --
> 2.48.1
>
>
> --
> opensbi mailing list
> opensbi at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/opensbi



More information about the opensbi mailing list