firmware: arm_scmi: Introduce get_max_msg_size() helper/accessor
authorPeng Fan <peng.fan@nxp.com>
Thu, 18 Apr 2024 01:32:28 +0000 (09:32 +0800)
committerSudeep Holla <sudeep.holla@arm.com>
Fri, 19 Apr 2024 14:17:37 +0000 (15:17 +0100)
When the agent is sending data to the SCMI platform, the drivers in the
agent could check the maximum message size supported to avoid potential
protocol buffer overflow.

Introduce the helper/accessor function get_max_msg_size() for the same.

Reviewed-by: Cristian Marussi <cristian.marussi@arm.com>
Reviewed-by: Dhruva Gole <d-gole@ti.com>
Signed-off-by: Peng Fan <peng.fan@nxp.com>
Link: https://lore.kernel.org/r/20240418-pinctrl-scmi-v11-1-499dca9864a7@nxp.com
Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
drivers/firmware/arm_scmi/driver.c
drivers/firmware/arm_scmi/protocols.h

index 36c4ff41dee11171f3fd4fbac0b5068e0e0ae926..ab5c138e0d0939cad2759d19d4ba46774f53a5ea 100644 (file)
@@ -1662,6 +1662,20 @@ out:
        return ret;
 }
 
+/**
+ * scmi_common_get_max_msg_size  - Get maximum message size
+ * @ph: A protocol handle reference.
+ *
+ * Return: Maximum message size for the current protocol.
+ */
+static int scmi_common_get_max_msg_size(const struct scmi_protocol_handle *ph)
+{
+       const struct scmi_protocol_instance *pi = ph_to_pi(ph);
+       struct scmi_info *info = handle_to_scmi_info(pi->handle);
+
+       return info->desc->max_msg_size;
+}
+
 /**
  * struct scmi_iterator  - Iterator descriptor
  * @msg: A reference to the message TX buffer; filled by @prepare_message with
@@ -1973,6 +1987,7 @@ static int scmi_protocol_msg_check(const struct scmi_protocol_handle *ph,
 
 static const struct scmi_proto_helpers_ops helpers_ops = {
        .extended_name_get = scmi_common_extended_name_get,
+       .get_max_msg_size = scmi_common_get_max_msg_size,
        .iter_response_init = scmi_iterator_init,
        .iter_response_run = scmi_iterator_run,
        .protocol_msg_check = scmi_protocol_msg_check,
index e17dbcfbf2993543c33630df0013dd9bf86da2bd..314371dc0f654fcdbca51abc58f7b79a80cab599 100644 (file)
@@ -260,6 +260,7 @@ struct scmi_fc_info {
  * @fastchannel_init: A common helper used to initialize FC descriptors by
  *                   gathering FC descriptions from the SCMI platform server.
  * @fastchannel_db_ring: A common helper to ring a FC doorbell.
+ * @get_max_msg_size: A common helper to get the maximum message size.
  */
 struct scmi_proto_helpers_ops {
        int (*extended_name_get)(const struct scmi_protocol_handle *ph,
@@ -279,6 +280,7 @@ struct scmi_proto_helpers_ops {
                                 struct scmi_fc_db_info **p_db,
                                 u32 *rate_limit);
        void (*fastchannel_db_ring)(struct scmi_fc_db_info *db);
+       int (*get_max_msg_size)(const struct scmi_protocol_handle *ph);
 };
 
 /**