From d8b782c3c70df485e80da4f03b0281e747cb7eb3 Mon Sep 17 00:00:00 2001 From: Stefan Reinauer Date: Mon, 20 May 2013 15:24:13 -0700 Subject: [PATCH] exynos5420: Clear the framebuffer before making it uncacheable If we clear the framebuffer and then flush it back to memory using cache operations, the writes are going to be full cachelines at a time. If we make it uncacheable first, the writes will be serialized writes of whatever sized chunks memset uses, probably 4 bytes or less. BUG=None TEST=None BRANCH=None Change-Id: I59d6699fcea1c5ca4402ae6cf45df9c14878943a Signed-off-by: Gabe Black Signed-off-by: Stefan Reinauer Reviewed-on: https://gerrit.chromium.org/gerrit/55837 Reviewed-by: Gabe Black Reviewed-by: David Hendricks Commit-Queue: Stefan Reinauer --- src/cpu/samsung/exynos5420/cpu.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/cpu/samsung/exynos5420/cpu.c b/src/cpu/samsung/exynos5420/cpu.c index 1d511743b2..6e360bf350 100644 --- a/src/cpu/samsung/exynos5420/cpu.c +++ b/src/cpu/samsung/exynos5420/cpu.c @@ -97,6 +97,8 @@ static void exynos_displayport_init(device_t dev) lcdbase = (uintptr_t)cbmem_add(CBMEM_ID_CONSOLE, fb_size); printk(BIOS_SPEW, "LCD framebuffer base is %p\n", (void *)(lcdbase)); + memset((void *)lcdbase, 0, fb_size); /* clear the framebuffer */ + /* * We need to clean and invalidate the framebuffer region and disable * caching as well. We assume that our dcache <--> memory address @@ -114,7 +116,6 @@ static void exynos_displayport_init(device_t dev) mmio_resource(dev, 1, lcdbase/KiB, (fb_size + KiB - 1)/KiB); printk(BIOS_DEBUG, "Initializing Exynos VGA, base %p\n", (void *)lcdbase); - memset((void *)lcdbase, 0, fb_size); /* clear the framebuffer */ ret = lcd_ctrl_init(fb_size, &panel, (void *)lcdbase); }