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

Rahul Pathak rpathak at ventanamicro.com
Tue Jun 17 22:38:53 PDT 2025


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




More information about the opensbi mailing list