diff mbox

[U-Boot] gunzip: cache-align write buffer memory

Message ID 20160829151036.30210-1-clemens.gruber@pqgruber.com
State Accepted
Commit d025021e981fc2c06e95a3512f81f799f45d1f9c
Delegated to: Tom Rini
Headers show

Commit Message

Clemens Gruber Aug. 29, 2016, 3:10 p.m. UTC
When using gzwrite to eMMC on an i.MX6Q board, the following warning
occurs repeatedly:
CACHE: Misaligned operation at range [4fd63318, 4fe63318]

This patch cache-aligns the memory allocation for the gzwrite writebuf,
therefore avoiding the misaligned dcache flush and the warning from
check_cache_range.

Signed-off-by: Clemens Gruber <clemens.gruber@pqgruber.com>
---
 lib/gunzip.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Comments

Eric Nelson Aug. 29, 2016, 3:30 p.m. UTC | #1
Thanks Clemens,

On 08/29/2016 08:10 AM, Clemens Gruber wrote:
> When using gzwrite to eMMC on an i.MX6Q board, the following warning
> occurs repeatedly:
> CACHE: Misaligned operation at range [4fd63318, 4fe63318]
> 
> This patch cache-aligns the memory allocation for the gzwrite writebuf,
> therefore avoiding the misaligned dcache flush and the warning from
> check_cache_range.
> 
> Signed-off-by: Clemens Gruber <clemens.gruber@pqgruber.com>
> ---
>  lib/gunzip.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/lib/gunzip.c b/lib/gunzip.c
> index bc746d6..832b306 100644
> --- a/lib/gunzip.c
> +++ b/lib/gunzip.c
> @@ -11,6 +11,7 @@
>  #include <console.h>
>  #include <image.h>
>  #include <malloc.h>
> +#include <memalign.h>
>  #include <u-boot/zlib.h>
>  #include <div64.h>
>  
> @@ -193,7 +194,7 @@ int gzwrite(unsigned char *src, int len,
>  
>  	s.next_in = src + i;
>  	s.avail_in = payload_size+8;
> -	writebuf = (unsigned char *)malloc(szwritebuf);
> +	writebuf = (unsigned char *)malloc_cache_aligned(szwritebuf);
>  
>  	/* decompress until deflate stream ends or end of file */
>  	do {
> 

Reviewed-by: Eric Nelson <eric@nelint.com>
Stefan Agner Aug. 29, 2016, 8:43 p.m. UTC | #2
On 2016-08-29 08:10, Clemens Gruber wrote:
> When using gzwrite to eMMC on an i.MX6Q board, the following warning
> occurs repeatedly:
> CACHE: Misaligned operation at range [4fd63318, 4fe63318]
> 
> This patch cache-aligns the memory allocation for the gzwrite writebuf,
> therefore avoiding the misaligned dcache flush and the warning from
> check_cache_range.
> 
> Signed-off-by: Clemens Gruber <clemens.gruber@pqgruber.com>
> ---
>  lib/gunzip.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/lib/gunzip.c b/lib/gunzip.c
> index bc746d6..832b306 100644
> --- a/lib/gunzip.c
> +++ b/lib/gunzip.c
> @@ -11,6 +11,7 @@
>  #include <console.h>
>  #include <image.h>
>  #include <malloc.h>
> +#include <memalign.h>
>  #include <u-boot/zlib.h>
>  #include <div64.h>
>  
> @@ -193,7 +194,7 @@ int gzwrite(unsigned char *src, int len,
>  
>  	s.next_in = src + i;
>  	s.avail_in = payload_size+8;
> -	writebuf = (unsigned char *)malloc(szwritebuf);
> +	writebuf = (unsigned char *)malloc_cache_aligned(szwritebuf);
>  
>  	/* decompress until deflate stream ends or end of file */
>  	do {

I wondered about the length of the buffer, but szwritebuf is forced to
be a multiple of the device block size, which is typically quite a bit
bigger than a cache line, so I think we are fine there.

Reviewed-by: Stefan Agner <stefan.agner@toradex.com>

--
Stefan
Clemens Gruber Oct. 3, 2016, 5:53 p.m. UTC | #3
On Mon, Aug 29, 2016 at 05:10:36PM +0200, Clemens Gruber wrote:
> When using gzwrite to eMMC on an i.MX6Q board, the following warning
> occurs repeatedly:
> CACHE: Misaligned operation at range [4fd63318, 4fe63318]
> 
> This patch cache-aligns the memory allocation for the gzwrite writebuf,
> therefore avoiding the misaligned dcache flush and the warning from
> check_cache_range.
> 
> Signed-off-by: Clemens Gruber <clemens.gruber@pqgruber.com>
> ---
>  lib/gunzip.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/lib/gunzip.c b/lib/gunzip.c
> index bc746d6..832b306 100644
> --- a/lib/gunzip.c
> +++ b/lib/gunzip.c
> @@ -11,6 +11,7 @@
>  #include <console.h>
>  #include <image.h>
>  #include <malloc.h>
> +#include <memalign.h>
>  #include <u-boot/zlib.h>
>  #include <div64.h>
>  
> @@ -193,7 +194,7 @@ int gzwrite(unsigned char *src, int len,
>  
>  	s.next_in = src + i;
>  	s.avail_in = payload_size+8;
> -	writebuf = (unsigned char *)malloc(szwritebuf);
> +	writebuf = (unsigned char *)malloc_cache_aligned(szwritebuf);
>  
>  	/* decompress until deflate stream ends or end of file */
>  	do {
> -- 
> 2.9.3
> 

Hi,

are there any blockers for this patch to get merged?

Thanks,
Clemens
Simon Glass Oct. 3, 2016, 9:49 p.m. UTC | #4
+Tom

On 3 October 2016 at 11:53, Clemens Gruber <clemens.gruber@pqgruber.com> wrote:
>
> On Mon, Aug 29, 2016 at 05:10:36PM +0200, Clemens Gruber wrote:
> > When using gzwrite to eMMC on an i.MX6Q board, the following warning
> > occurs repeatedly:
> > CACHE: Misaligned operation at range [4fd63318, 4fe63318]
> >
> > This patch cache-aligns the memory allocation for the gzwrite writebuf,
> > therefore avoiding the misaligned dcache flush and the warning from
> > check_cache_range.
> >
> > Signed-off-by: Clemens Gruber <clemens.gruber@pqgruber.com>
> > ---
> >  lib/gunzip.c | 3 ++-
> >  1 file changed, 2 insertions(+), 1 deletion(-)
> >


[...]

>
>
> Hi,
>
> are there any blockers for this patch to get merged?
>
> Thanks,
> Clemens
Tom Rini Oct. 8, 2016, 5:04 p.m. UTC | #5
On Mon, Aug 29, 2016 at 05:10:36PM +0200, Clemens Gruber wrote:

> When using gzwrite to eMMC on an i.MX6Q board, the following warning
> occurs repeatedly:
> CACHE: Misaligned operation at range [4fd63318, 4fe63318]
> 
> This patch cache-aligns the memory allocation for the gzwrite writebuf,
> therefore avoiding the misaligned dcache flush and the warning from
> check_cache_range.
> 
> Signed-off-by: Clemens Gruber <clemens.gruber@pqgruber.com>
> Reviewed-by: Eric Nelson <eric@nelint.com>
> Reviewed-by: Stefan Agner <stefan.agner@toradex.com>

Applied to u-boot/master, thanks!
diff mbox

Patch

diff --git a/lib/gunzip.c b/lib/gunzip.c
index bc746d6..832b306 100644
--- a/lib/gunzip.c
+++ b/lib/gunzip.c
@@ -11,6 +11,7 @@ 
 #include <console.h>
 #include <image.h>
 #include <malloc.h>
+#include <memalign.h>
 #include <u-boot/zlib.h>
 #include <div64.h>
 
@@ -193,7 +194,7 @@  int gzwrite(unsigned char *src, int len,
 
 	s.next_in = src + i;
 	s.avail_in = payload_size+8;
-	writebuf = (unsigned char *)malloc(szwritebuf);
+	writebuf = (unsigned char *)malloc_cache_aligned(szwritebuf);
 
 	/* decompress until deflate stream ends or end of file */
 	do {