Skip to content

Commit e501bfd

Browse files
cris-masudeep-holla
authored andcommitted
firmware: arm_scmi: Allow transport properties for multiple instances
Default SCMI transport properties values can be overridden with devicetree provided descriptors; in order to support multiple SCMI instances, make the properties-update happen on a per-instance copy of the original transport descriptor. Signed-off-by: Cristian Marussi <cristian.marussi@arm.com> Message-Id: <20241203193544.3895173-1-cristian.marussi@arm.com> Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
1 parent 40384c8 commit e501bfd

2 files changed

Lines changed: 11 additions & 11 deletions

File tree

drivers/firmware/arm_scmi/common.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -442,7 +442,7 @@ struct scmi_transport_core_operations {
442442
*/
443443
struct scmi_transport {
444444
struct device *supplier;
445-
struct scmi_desc *desc;
445+
struct scmi_desc desc;
446446
struct scmi_transport_core_operations **core_ops;
447447
};
448448

@@ -468,7 +468,7 @@ static int __tag##_probe(struct platform_device *pdev) \
468468
device_set_of_node_from_dev(&spdev->dev, dev); \
469469
\
470470
strans.supplier = dev; \
471-
strans.desc = &(__desc); \
471+
memcpy(&strans.desc, &(__desc), sizeof(strans.desc)); \
472472
strans.core_ops = &(__core_ops); \
473473
\
474474
ret = platform_device_add_data(spdev, &strans, sizeof(strans)); \

drivers/firmware/arm_scmi/driver.c

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3028,7 +3028,7 @@ static const struct scmi_desc *scmi_transport_setup(struct device *dev)
30283028
int ret;
30293029

30303030
trans = dev_get_platdata(dev);
3031-
if (!trans || !trans->desc || !trans->supplier || !trans->core_ops)
3031+
if (!trans || !trans->supplier || !trans->core_ops)
30323032
return NULL;
30333033

30343034
if (!device_link_add(dev, trans->supplier, DL_FLAG_AUTOREMOVE_CONSUMER)) {
@@ -3043,33 +3043,33 @@ static const struct scmi_desc *scmi_transport_setup(struct device *dev)
30433043
dev_info(dev, "Using %s\n", dev_driver_string(trans->supplier));
30443044

30453045
ret = of_property_read_u32(dev->of_node, "arm,max-rx-timeout-ms",
3046-
&trans->desc->max_rx_timeout_ms);
3046+
&trans->desc.max_rx_timeout_ms);
30473047
if (ret && ret != -EINVAL)
30483048
dev_err(dev, "Malformed arm,max-rx-timeout-ms DT property.\n");
30493049

30503050
ret = of_property_read_u32(dev->of_node, "arm,max-msg-size",
3051-
&trans->desc->max_msg_size);
3051+
&trans->desc.max_msg_size);
30523052
if (ret && ret != -EINVAL)
30533053
dev_err(dev, "Malformed arm,max-msg-size DT property.\n");
30543054

30553055
ret = of_property_read_u32(dev->of_node, "arm,max-msg",
3056-
&trans->desc->max_msg);
3056+
&trans->desc.max_msg);
30573057
if (ret && ret != -EINVAL)
30583058
dev_err(dev, "Malformed arm,max-msg DT property.\n");
30593059

30603060
dev_info(dev,
30613061
"SCMI max-rx-timeout: %dms / max-msg-size: %dbytes / max-msg: %d\n",
3062-
trans->desc->max_rx_timeout_ms, trans->desc->max_msg_size,
3063-
trans->desc->max_msg);
3062+
trans->desc.max_rx_timeout_ms, trans->desc.max_msg_size,
3063+
trans->desc.max_msg);
30643064

30653065
/* System wide atomic threshold for atomic ops .. if any */
30663066
if (!of_property_read_u32(dev->of_node, "atomic-threshold-us",
3067-
&trans->desc->atomic_threshold))
3067+
&trans->desc.atomic_threshold))
30683068
dev_info(dev,
30693069
"SCMI System wide atomic threshold set to %u us\n",
3070-
trans->desc->atomic_threshold);
3070+
trans->desc.atomic_threshold);
30713071

3072-
return trans->desc;
3072+
return &trans->desc;
30733073
}
30743074

30753075
static int scmi_probe(struct platform_device *pdev)

0 commit comments

Comments
 (0)