diff mbox series

[2/2] ASoC: Intel: Use readq to read 64 bit registers

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

Commit Message

Amadeusz Sławiński May 7, 2020, 1:34 p.m. UTC
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(-)

Comments

Cezary Rojewski May 7, 2020, 3:21 p.m. UTC | #1
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>
Brent Lu May 12, 2020, 6:19 a.m. UTC | #2
> -----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 mbox series

Patch

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);