Skip to content

Commit 3229e33

Browse files
cris-masudeep-holla
authored andcommitted
firmware: arm_scmi: Calculate virtio PDU max size dynamically
SCMI virtio transport maximum PDU size is currently hardcoded at build time; this will not play well with the possibile retrieval of a different size at run-time. Make the virtio transport derive the maximum PDU size from the max_msg_size provided by the SCMI core. No functional change. Reviewed-by: Florian Fainelli <[email protected]> Signed-off-by: Cristian Marussi <[email protected]> Message-Id: <[email protected]> Signed-off-by: Sudeep Holla <[email protected]>
1 parent 5c14f38 commit 3229e33

File tree

1 file changed

+8
-7
lines changed
  • drivers/firmware/arm_scmi/transports

1 file changed

+8
-7
lines changed

drivers/firmware/arm_scmi/transports/virtio.c

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@
3232

3333
#define VIRTIO_MAX_RX_TIMEOUT_MS 60000
3434
#define VIRTIO_SCMI_MAX_MSG_SIZE 128 /* Value may be increased. */
35-
#define VIRTIO_SCMI_MAX_PDU_SIZE \
36-
(VIRTIO_SCMI_MAX_MSG_SIZE + SCMI_MSG_MAX_PROT_OVERHEAD)
35+
#define VIRTIO_SCMI_MAX_PDU_SIZE(ci) \
36+
((ci)->max_msg_size + SCMI_MSG_MAX_PROT_OVERHEAD)
3737
#define DESCRIPTORS_PER_TX_MSG 2
3838

3939
/**
@@ -90,6 +90,7 @@ enum poll_states {
9090
* @input: SDU used for (delayed) responses and notifications
9191
* @list: List which scmi_vio_msg may be part of
9292
* @rx_len: Input SDU size in bytes, once input has been received
93+
* @max_len: Maximumm allowed SDU size in bytes
9394
* @poll_idx: Last used index registered for polling purposes if this message
9495
* transaction reply was configured for polling.
9596
* @poll_status: Polling state for this message.
@@ -102,6 +103,7 @@ struct scmi_vio_msg {
102103
struct scmi_msg_payld *input;
103104
struct list_head list;
104105
unsigned int rx_len;
106+
unsigned int max_len;
105107
unsigned int poll_idx;
106108
enum poll_states poll_status;
107109
/* Lock to protect access to poll_status */
@@ -234,7 +236,7 @@ static int scmi_vio_feed_vq_rx(struct scmi_vio_channel *vioch,
234236
unsigned long flags;
235237
struct device *dev = &vioch->vqueue->vdev->dev;
236238

237-
sg_init_one(&sg_in, msg->input, VIRTIO_SCMI_MAX_PDU_SIZE);
239+
sg_init_one(&sg_in, msg->input, msg->max_len);
238240

239241
spin_lock_irqsave(&vioch->lock, flags);
240242

@@ -439,18 +441,17 @@ static int virtio_chan_setup(struct scmi_chan_info *cinfo, struct device *dev,
439441
if (!msg)
440442
return -ENOMEM;
441443

444+
msg->max_len = VIRTIO_SCMI_MAX_PDU_SIZE(cinfo);
442445
if (tx) {
443-
msg->request = devm_kzalloc(dev,
444-
VIRTIO_SCMI_MAX_PDU_SIZE,
446+
msg->request = devm_kzalloc(dev, msg->max_len,
445447
GFP_KERNEL);
446448
if (!msg->request)
447449
return -ENOMEM;
448450
spin_lock_init(&msg->poll_lock);
449451
refcount_set(&msg->users, 1);
450452
}
451453

452-
msg->input = devm_kzalloc(dev, VIRTIO_SCMI_MAX_PDU_SIZE,
453-
GFP_KERNEL);
454+
msg->input = devm_kzalloc(dev, msg->max_len, GFP_KERNEL);
454455
if (!msg->input)
455456
return -ENOMEM;
456457

0 commit comments

Comments
 (0)