On Tue, May 11, 2021 at 6:23 PM Girdwood, Liam R liam.r.girdwood@intel.com wrote:
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).
Sure. Once, I understand what's exactly happening.