ASoC: Intel: Use readq to read 64 bit registers
In order to fix issue described in: "ASoC: Intel: sst: ipc command timeout" https://patchwork.kernel.org/patch/11482829/ use readq function, which is meant to read 64 bit values from registers. On 32 bit platforms it falls back to two readl calls. Reported-by: Brent Lu <brent.lu@intel.com> Signed-off-by: Amadeusz Sławiński <amadeuszx.slawinski@linux.intel.com> Tested-by: Brent Lu <brent.lu@intel.com> Acked-by: Cezary Rojewski <cezary.rojewski@intel.com> Link: https://lore.kernel.org/r/20200507133405.32251-2-amadeuszx.slawinski@linux.intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
6a5d6fd332
commit
6c47660e3c
|
@ -10,7 +10,7 @@
|
|||
#include <linux/interrupt.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/io-64-nonatomic-lo-hi.h>
|
||||
#include <linux/delay.h>
|
||||
|
||||
#include "sst-dsp.h"
|
||||
|
@ -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);
|
||||
|
||||
|
|
Loading…
Reference in New Issue