Message ID | 20200507133405.32251-2-amadeuszx.slawinski@linux.intel.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 6c47660e3c3acad9401f8fe1d288d4234f05549c |
Headers | show |
Series | [1/2] ASoC: Intel: baytrail: Fix register access | expand |
On 2020-05-07 15:34, Amadeusz Sławiński wrote: > 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. > > Signed-off-by: Amadeusz Sławiński <amadeuszx.slawinski@linux.intel.com> > Reported-by: Brent Lu <brent.lu@intel.com> > --- > sound/soc/intel/common/sst-dsp.c | 9 +++------ > 1 file changed, 3 insertions(+), 6 deletions(-) > > diff --git a/sound/soc/intel/common/sst-dsp.c b/sound/soc/intel/common/sst-dsp.c > index ec66be269b69..36c077aa386e 100644 > --- a/sound/soc/intel/common/sst-dsp.c > +++ b/sound/soc/intel/common/sst-dsp.c > @@ -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); > > Looks good, thanks Amadeo. Acked-by: Cezary Rojewski <cezary.rojewski@intel.com>
> -----Original Message----- > From: Alsa-devel <alsa-devel-bounces@alsa-project.org> On Behalf Of > Amadeusz Slawinski > Sent: Thursday, May 7, 2020 9:34 PM > To: Rojewski, Cezary <cezary.rojewski@intel.com>; Pierre-Louis Bossart > <pierre-louis.bossart@linux.intel.com>; Liam Girdwood > <lgirdwood@gmail.com>; Jie Yang <yang.jie@linux.intel.com>; Mark Brown > <broonie@kernel.org>; Takashi Iwai <tiwai@suse.com> > Cc: alsa-devel@alsa-project.org; Amadeusz Sławiński > <amadeuszx.slawinski@linux.intel.com> > Subject: [PATCH 2/2] 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. > > Signed-off-by: Amadeusz Sławiński <amadeuszx.slawinski@linux.intel.com> > Reported-by: Brent Lu <brent.lu@intel.com> Tested-by: Brent Lu <brent.lu@intel.com> Regards, Brent > --- > sound/soc/intel/common/sst-dsp.c | 9 +++------ > 1 file changed, 3 insertions(+), 6 deletions(-) > > diff --git a/sound/soc/intel/common/sst-dsp.c > b/sound/soc/intel/common/sst-dsp.c > index ec66be269b69..36c077aa386e 100644 > --- a/sound/soc/intel/common/sst-dsp.c > +++ b/sound/soc/intel/common/sst-dsp.c > @@ -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); > > -- > 2.17.1
diff --git a/sound/soc/intel/common/sst-dsp.c b/sound/soc/intel/common/sst-dsp.c index ec66be269b69..36c077aa386e 100644 --- a/sound/soc/intel/common/sst-dsp.c +++ b/sound/soc/intel/common/sst-dsp.c @@ -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);
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. Signed-off-by: Amadeusz Sławiński <amadeuszx.slawinski@linux.intel.com> Reported-by: Brent Lu <brent.lu@intel.com> --- sound/soc/intel/common/sst-dsp.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-)