[PATCH 02/11] lib: utils/mpxy: Setup group early in fdt_mpxy_rpmi_init()

Anup Patel anup.patel at oss.qualcomm.com
Tue Sep 22 20:23:50 PDT 2026


Instead of setting group late in fdt_mpxy_rpmi_init(), it is better
to do it as early as possible right after requesting mailbox channel
so that we define new callback for channel attributes.

Signed-off-by: Anup Patel <anup.patel at oss.qualcomm.com>
---
 lib/utils/mpxy/fdt_mpxy_rpmi.c | 40 +++++++++++++++++-----------------
 1 file changed, 20 insertions(+), 20 deletions(-)

diff --git a/lib/utils/mpxy/fdt_mpxy_rpmi.c b/lib/utils/mpxy/fdt_mpxy_rpmi.c
index 9a37fbdc..bbeb7a79 100644
--- a/lib/utils/mpxy/fdt_mpxy_rpmi.c
+++ b/lib/utils/mpxy/fdt_mpxy_rpmi.c
@@ -235,47 +235,54 @@ int fdt_mpxy_rpmi_init(const void *fdt, int nodeoff, const struct fdt_match *mat
 		goto fail_free_chan;
 	}
 
+	/* Setup RPMI service group context */
+	if (data->setup_group) {
+		rc = data->setup_group(&rmb->group_context, chan, data);
+		if (rc)
+			goto fail_free_chan;
+	}
+
 	/* Get channel protocol version */
 	rc = mbox_chan_get_attribute(chan, RPMI_CHANNEL_ATTR_PROTOCOL_VERSION,
 				     &pro_ver);
 	if (rc)
-		goto fail_free_chan;
+		goto fail_cleanup_group;
 
 	/* Get channel maximum data length */
 	rc = mbox_chan_get_attribute(chan, RPMI_CHANNEL_ATTR_MAX_DATA_LEN,
 				     &max_data_len);
 	if (rc)
-		goto fail_free_chan;
+		goto fail_cleanup_group;
 
 	/* Get channel Tx timeout */
 	rc = mbox_chan_get_attribute(chan, RPMI_CHANNEL_ATTR_TX_TIMEOUT,
 				     &tx_tout);
 	if (rc)
-		goto fail_free_chan;
+		goto fail_cleanup_group;
 
 	/* Get channel Rx timeout */
 	rc = mbox_chan_get_attribute(chan, RPMI_CHANNEL_ATTR_RX_TIMEOUT,
 				     &rx_tout);
 	if (rc)
-		goto fail_free_chan;
+		goto fail_cleanup_group;
 
 	/* Get channel service group version */
 	rc = mbox_chan_get_attribute(chan, RPMI_CHANNEL_ATTR_SERVICEGROUP_VERSION,
 				     &servicegrp_ver);
 	if (rc)
-		goto fail_free_chan;
+		goto fail_cleanup_group;
 
 	/* Get channel implementation id */
 	rc = mbox_chan_get_attribute(chan, RPMI_CHANNEL_ATTR_IMPL_ID,
 				     &impl_id);
 	if (rc)
-		goto fail_free_chan;
+		goto fail_cleanup_group;
 
 	/* Get channel implementation version */
 	rc = mbox_chan_get_attribute(chan, RPMI_CHANNEL_ATTR_IMPL_VERSION,
 				     &impl_ver);
 	if (rc)
-		goto fail_free_chan;
+		goto fail_cleanup_group;
 
 	/*
 	 * The "riscv,sbi-mpxy-channel-id" DT property is mandatory
@@ -287,7 +294,7 @@ int fdt_mpxy_rpmi_init(const void *fdt, int nodeoff, const struct fdt_match *mat
 		channel_id = fdt32_to_cpu(*val);
 	} else {
 		rc = SBI_ENODEV;
-		goto fail_free_chan;
+		goto fail_cleanup_group;
 	}
 
 	/* Setup MPXY RPMI channel */
@@ -329,23 +336,16 @@ int fdt_mpxy_rpmi_init(const void *fdt, int nodeoff, const struct fdt_match *mat
 	rmb->data = data;
 	rmb->chan = chan;
 
-	/* Setup RPMI service group context */
-	if (data->setup_group) {
-		rc = data->setup_group(&rmb->group_context, chan, data);
-		if (rc)
-			goto fail_free_chan;
-	}
-
 	/* Register RPMI service group */
 	rc = sbi_mpxy_register_channel(&rmb->channel);
-	if (rc) {
-		if (data->cleanup_group)
-			data->cleanup_group(rmb->group_context);
-		goto fail_free_chan;
-	}
+	if (rc)
+		goto fail_cleanup_group;
 
 	return SBI_OK;
 
+fail_cleanup_group:
+	if (data->cleanup_group)
+		data->cleanup_group(rmb->group_context);
 fail_free_chan:
 	mbox_controller_free_chan(chan);
 fail_free_client:
-- 
2.43.0




More information about the opensbi mailing list