Skip to content

Commit 64ef323

Browse files
committed
drivers: firmware: scmi: add api to clear channel status
Add scmi_shmem_clear_channel_status() function that always sets channel to FREE state after message processing. It provides a standardized way for higher layer components (such as mailbox drivers) to explicitly clear the SCMI shared memory channel status, ensuring proper channel state management and avoiding potential race conditions in multi-layer SCMI implementations. Signed-off-by: Yongxu Wang <[email protected]>
1 parent 316c600 commit 64ef323

File tree

2 files changed

+18
-0
lines changed
  • drivers/firmware/scmi
  • include/zephyr/drivers/firmware/scmi

2 files changed

+18
-0
lines changed

drivers/firmware/scmi/shmem.c

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,17 @@ int scmi_shmem_get_channel_status(const struct device *dev, uint32_t *status)
3939
return 0;
4040
}
4141

42+
void scmi_shmem_clear_channel_status(const struct device *dev)
43+
{
44+
struct scmi_shmem_data *data;
45+
struct scmi_shmem_layout *layout;
46+
47+
data = dev->data;
48+
layout = (struct scmi_shmem_layout *)data->regmap;
49+
50+
layout->chan_status |= SCMI_SHMEM_CHAN_STATUS_FREE_BIT;
51+
}
52+
4253
static void scmi_shmem_memcpy(mm_reg_t dst, mm_reg_t src, uint32_t bytes)
4354
{
4455
int i;

include/zephyr/drivers/firmware/scmi/shmem.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,4 +93,11 @@ int scmi_shmem_vendor_write_message(struct scmi_shmem_layout *layout);
9393
*/
9494
int scmi_shmem_vendor_read_message(const struct scmi_shmem_layout *layout);
9595

96+
/**
97+
* @brief Clear a SHMEM area channel status
98+
*
99+
* @param dev pointer to shmem device
100+
*/
101+
void scmi_shmem_clear_channel_status(const struct device *dev);
102+
96103
#endif /* _INCLUDE_ZEPHYR_DRIVERS_FIRMWARE_SCMI_SHMEM_H_ */

0 commit comments

Comments
 (0)