RE: [PATCH] ASoC: Intel: sst: ipc command timeout
From: Lu, Brent
Date: Tue May 05 2020 - 21:38:19 EST
>
> Hi,
>
> That's why I would suggest trying with readq, it should also generate one
> instruction read x86_64 platforms, I looked a bit more and there is fallback to
> generate two 32 bit reads on 32bit platforms, so my previous concern about
> having to write separate handling for those platforms was unneeded. So I
> would recommend checking using it.
Hi,
The readq/writeq works. Code is optimized unlike memcpy_fromio/memcpy_toio
and the defect is not able to reproduce.
(gdb) disas sst_shim32_read64
Dump of assembler code for function sst_shim32_read64:
0x000000000000096c <+0>: call 0x971 <sst_shim32_read64+5>
0x0000000000000971 <+5>: push rbp
0x0000000000000972 <+6>: mov rbp,rsp
0x0000000000000975 <+9>: mov eax,esi
0x0000000000000977 <+11>: mov rax,QWORD PTR [rdi+rax*1]
0x000000000000097b <+15>: pop rbp
0x000000000000097c <+16>: ret
End of assembler dump.
(gdb) disas sst_shim32_write64
Dump of assembler code for function sst_shim32_write64:
0x000000000000095b <+0>: call 0x960 <sst_shim32_write64+5>
0x0000000000000960 <+5>: push rbp
0x0000000000000961 <+6>: mov rbp,rsp
0x0000000000000964 <+9>: mov eax,esi
0x0000000000000966 <+11>: mov QWORD PTR [rdi+rax*1],rdx
0x000000000000096a <+15>: pop rbp
0x000000000000096b <+16>: ret
End of assembler dump.
Regards,
Brent
>
> diff --git a/sound/soc/intel/common/sst-dsp.c
> b/sound/soc/intel/common/sst-dsp.c
> index ec66be269b69..e96f636387d9 100644
> --- a/sound/soc/intel/common/sst-dsp.c
> +++ b/sound/soc/intel/common/sst-dsp.c
> @@ -34,16 +34,13 @@ EXPORT_SYMBOL_GPL(sst_shim32_read);
>
> void sst_shim32_write64(void __iomem *addr, u32 offset, u64 value)
> {
> - memcpy_toio(addr + offset, &value, sizeof(value));
> + writeq(value, addr + offset);
> }
> EXPORT_SYMBOL_GPL(sst_shim32_write64);
>
> u64 sst_shim32_read64(void __iomem *addr, u32 offset)
> {
> - u64 val;
> -
> - memcpy_fromio(&val, addr + offset, sizeof(val));
> - return val;
> + return readq(addr + offset);
> }
> EXPORT_SYMBOL_GPL(sst_shim32_read64);
>
>
> Thanks,
> Amadeusz