Patchwork [U-Boot,1/2] video:cache:fix: Buffer alignment and dcache flush for lcd subsystem

login
register
mail settings
Submitter Łukasz Majewski
Date Aug. 8, 2012, 3:10 p.m.
Message ID <1344438635-31169-1-git-send-email-l.majewski@samsung.com>
Download mbox | patch
Permalink /patch/175938/
State Superseded
Delegated to: Anatolij Gustschin
Headers show

Comments

Łukasz Majewski - Aug. 8, 2012, 3:10 p.m.
This commit makes the video subsystem code cache aware.
Memory allocated for decompressed BMP memory is now cache line aligned.

Flushing of the dcache is also performed after copying BMP data to fb
address.

Signed-off-by: Lukasz Majewski <l.majewski@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
Cc: Anatolij Gustschin <agust@denx.de>
---
 common/cmd_bmp.c |    2 +-
 common/lcd.c     |    3 +++
 2 files changed, 4 insertions(+), 1 deletions(-)
Mike Frysinger - Aug. 8, 2012, 3:24 p.m.
On Wednesday 08 August 2012 11:10:34 Lukasz Majewski wrote:
> This commit makes the video subsystem code cache aware.
> Memory allocated for decompressed BMP memory is now cache line aligned.
> 
> Flushing of the dcache is also performed after copying BMP data to fb
> address.

i think this is a more comprehensive fix:
http://patchwork.ozlabs.org/patch/164722/

although your memalign() call might be useful to integrate into Simon's change
-mike
Łukasz Majewski - Aug. 9, 2012, 7:14 a.m.
Hi Mike,

> On Wednesday 08 August 2012 11:10:34 Lukasz Majewski wrote:
> > This commit makes the video subsystem code cache aware.
> > Memory allocated for decompressed BMP memory is now cache line
> > aligned.
> > 
> > Flushing of the dcache is also performed after copying BMP data to
> > fb address.
> 
> i think this is a more comprehensive fix:
> http://patchwork.ozlabs.org/patch/164722/

Yes, indeed. Thanks for pointing out.

> 
> although your memalign() call might be useful to integrate into
> Simon's change -mike

I will comment the v3 patch verison.

Patch

diff --git a/common/cmd_bmp.c b/common/cmd_bmp.c
index b8809e3..7d3f45a 100644
--- a/common/cmd_bmp.c
+++ b/common/cmd_bmp.c
@@ -54,7 +54,7 @@  bmp_image_t *gunzip_bmp(unsigned long addr, unsigned long *lenp)
 	 * Decompress bmp image
 	 */
 	len = CONFIG_SYS_VIDEO_LOGO_MAX_SIZE;
-	dst = malloc(CONFIG_SYS_VIDEO_LOGO_MAX_SIZE);
+	dst = memalign(CONFIG_SYS_CACHELINE_SIZE, len);
 	if (dst == NULL) {
 		puts("Error: malloc in gunzip failed!\n");
 		return NULL;
diff --git a/common/lcd.c b/common/lcd.c
index 506a138..b092a11 100644
--- a/common/lcd.c
+++ b/common/lcd.c
@@ -802,6 +802,9 @@  int lcd_display_bitmap(ulong bmp_image, int x, int y)
 			}
 			fb  -= (lcd_line_length + width * (bpix / 8));
 		}
+		flush_dcache_range((unsigned long) fb,
+				   (unsigned long) fb +
+				   (lcd_line_length * height));
 		break;
 #endif /* CONFIG_BMP_32BPP */
 	default: