On Tue, 2021-05-11 at 15:20 +0000, Daniel Baluta wrote:
It looks like the uint64_t on the sof_ipc_stream_position are not aligned on 8 bytes (with the packing, there are 7 * uint32_t before them) and the ARM compiler is expecting a 8 byte alingment for uint64 ?
I'm not sure why this is showing up now as the "packed" attribute would force the uint64_t to be aligned on 4 bytes instead of 8 here.
Btw, have you tried setting aligned(8) here ? or tried removing the aligned(4) for stream_posn ?
I have tried setting aligned(4) on the Linux kernel header:
--- a/include/sound/sof/stream.h+++ b/include/sound/sof/stream.h @@ -143,6 +143,6 @@ struct sof_ipc_stream_posn { uint64_t timestamp; /**< system time stamp */ uint32_t xrun_comp_id; /**< comp ID of XRUN component */ int32_t xrun_size; /**< XRUN size in bytes */ -} __packed; +} __packed __aligned(4); It works fine with this.
Ok, this must be an ARM64 difference and I assume you have a kernel fix brewing ?.
Intention on FW side was to use only the L32 and S32 calls and not cater for any unaligned load/stores (with their extra baggage).
Liam
--------------------------------------------------------------------- Intel Corporation (UK) Limited Registered No. 1134945 (England) Registered Office: Pipers Way, Swindon SN3 1RJ VAT No: 860 2173 47
This e-mail and any attachments may contain confidential material for the sole use of the intended recipient(s). Any review or distribution by others is strictly prohibited. If you are not the intended recipient, please contact the sender and delete all copies.