*     implementation version and (sub-)vendor identification.
  * @handle: Instance of SCMI handle to send to clients
  * @tx_minfo: Universal Transmit Message management info
+ * @rx_minfo: Universal Receive Message management info
  * @tx_idr: IDR object to map protocol id to Tx channel info pointer
  * @rx_idr: IDR object to map protocol id to Rx channel info pointer
  * @protocols_imp: List of protocols implemented, currently maximum of
        struct scmi_revision_info version;
        struct scmi_handle handle;
        struct scmi_xfers_info tx_minfo;
+       struct scmi_xfers_info rx_minfo;
        struct idr tx_idr;
        struct idr rx_idr;
        u8 *protocols_imp;
        return 0;
 }
 
-static int scmi_xfer_info_init(struct scmi_info *sinfo)
+static int __scmi_xfer_info_init(struct scmi_info *sinfo,
+                                struct scmi_xfers_info *info)
 {
        int i;
        struct scmi_xfer *xfer;
        struct device *dev = sinfo->dev;
        const struct scmi_desc *desc = sinfo->desc;
-       struct scmi_xfers_info *info = &sinfo->tx_minfo;
 
        /* Pre-allocated messages, no more than what hdr.seq can support */
        if (WARN_ON(desc->max_msg >= MSG_TOKEN_MAX)) {
        return 0;
 }
 
+static int scmi_xfer_info_init(struct scmi_info *sinfo)
+{
+       int ret = __scmi_xfer_info_init(sinfo, &sinfo->tx_minfo);
+
+       if (!ret && idr_find(&sinfo->rx_idr, SCMI_PROTOCOL_BASE))
+               ret = __scmi_xfer_info_init(sinfo, &sinfo->rx_minfo);
+
+       return ret;
+}
+
 static int scmi_chan_setup(struct scmi_info *info, struct device *dev,
                           int prot_id, bool tx)
 {
        info->desc = desc;
        INIT_LIST_HEAD(&info->node);
 
-       ret = scmi_xfer_info_init(info);
-       if (ret)
-               return ret;
-
        platform_set_drvdata(pdev, info);
        idr_init(&info->tx_idr);
        idr_init(&info->rx_idr);
        if (ret)
                return ret;
 
+       ret = scmi_xfer_info_init(info);
+       if (ret)
+               return ret;
+
        ret = scmi_base_protocol_init(handle);
        if (ret) {
                dev_err(dev, "unable to communicate with SCMI(%d)\n", ret);