FROMGIT: firmware: arm_scmi: Introduce get_max_msg_size() helper/accessor

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>

Bug: 339841691
(cherry picked from commit 4869b5cc96
https://git.kernel.org/pub/scm/linux/kernel/git/sudeep.holla/linux.git for-linux-next)
Change-Id: I78ad2f56c2aae351d7f7761b37f10ad33e48caf1
Signed-off-by: Zhipeng Wang <zhipeng.wang_1@nxp.com>
This commit is contained in:
Peng Fan 2024-04-18 09:32:28 +08:00 committed by Carlos Llamas
parent ffb70eb8f5
commit 5ea96c252e
2 changed files with 17 additions and 0 deletions

View File

@ -1481,6 +1481,20 @@ out:
return ret; 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 * struct scmi_iterator - Iterator descriptor
* @msg: A reference to the message TX buffer; filled by @prepare_message with * @msg: A reference to the message TX buffer; filled by @prepare_message with
@ -1756,6 +1770,7 @@ static void scmi_common_fastchannel_db_ring(struct scmi_fc_db_info *db)
static const struct scmi_proto_helpers_ops helpers_ops = { static const struct scmi_proto_helpers_ops helpers_ops = {
.extended_name_get = scmi_common_extended_name_get, .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_init = scmi_iterator_init,
.iter_response_run = scmi_iterator_run, .iter_response_run = scmi_iterator_run,
.fastchannel_init = scmi_common_fastchannel_init, .fastchannel_init = scmi_common_fastchannel_init,

View File

@ -254,6 +254,7 @@ struct scmi_fc_info {
* @fastchannel_init: A common helper used to initialize FC descriptors by * @fastchannel_init: A common helper used to initialize FC descriptors by
* gathering FC descriptions from the SCMI platform server. * gathering FC descriptions from the SCMI platform server.
* @fastchannel_db_ring: A common helper to ring a FC doorbell. * @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 { struct scmi_proto_helpers_ops {
int (*extended_name_get)(const struct scmi_protocol_handle *ph, int (*extended_name_get)(const struct scmi_protocol_handle *ph,
@ -270,6 +271,7 @@ struct scmi_proto_helpers_ops {
void __iomem **p_addr, void __iomem **p_addr,
struct scmi_fc_db_info **p_db); struct scmi_fc_db_info **p_db);
void (*fastchannel_db_ring)(struct scmi_fc_db_info *db); void (*fastchannel_db_ring)(struct scmi_fc_db_info *db);
int (*get_max_msg_size)(const struct scmi_protocol_handle *ph);
}; };
/** /**