Merge tag 'scmi-updates-5.15' of git://git.kernel.org/pub/scm/linux/kernel/git/sudeep...
[linux-2.6-microblaze.git] / drivers / firmware / arm_scmi / shmem.c
index e1e816e..0e3eaea 100644 (file)
@@ -67,6 +67,21 @@ void shmem_fetch_response(struct scmi_shared_mem __iomem *shmem,
        memcpy_fromio(xfer->rx.buf, shmem->msg_payload + 4, xfer->rx.len);
 }
 
+void shmem_fetch_notification(struct scmi_shared_mem __iomem *shmem,
+                             size_t max_len, struct scmi_xfer *xfer)
+{
+       /* Skip only the length of header in shmem area i.e 4 bytes */
+       xfer->rx.len = min_t(size_t, max_len, ioread32(&shmem->length) - 4);
+
+       /* Take a copy to the rx buffer.. */
+       memcpy_fromio(xfer->rx.buf, shmem->msg_payload, xfer->rx.len);
+}
+
+void shmem_clear_channel(struct scmi_shared_mem __iomem *shmem)
+{
+       iowrite32(SCMI_SHMEM_CHAN_STAT_CHANNEL_FREE, &shmem->channel_status);
+}
+
 bool shmem_poll_done(struct scmi_shared_mem __iomem *shmem,
                     struct scmi_xfer *xfer)
 {