On 8/10/2024 2:46 PM, Florian Fainelli wrote:
Some shared memory areas might only support a certain access width,
(e.g.: 32 bits accesses only). Update the shmem layer to support
reading from and writing to such shared memory area using the specified
I/O width in the Device Tree. The various transport layers making use of
the shmem.c code are updated accordingly to pass the I/O width to the
routines that need it.
Signed-off-by: Florian Fainelli <florian.fainelli@xxxxxxxxxxxx>
---
[snip]
static void shmem_fetch_response(struct scmi_shared_mem __iomem *shmem,
- struct scmi_xfer *xfer)
+ struct scmi_xfer *xfer,
+ u32 shmem_io_width)
{
size_t len = ioread32(&shmem->length);
@@ -90,20 +144,19 @@ static void shmem_fetch_response(struct scmi_shared_mem __iomem *shmem,
/* Skip the length of header and status in shmem area i.e 8 bytes */
xfer->rx.len = min_t(size_t, xfer->rx.len, len > 8 ? len - 8 : 0);
- /* Take a copy to the rx buffer.. */
- memcpy_fromio(xfer->rx.buf, shmem->msg_payload + 4, xfer->rx.len);
+ __shmem_fetch_resp_notif_data(xfer, shmem, shmem_io_width);
As Justin pointed out to me separately, the source pointer is different
for response and notifications, will fix that, too.
--
Florian