[coreboot-gerrit] New patch to review for coreboot: libpayload/arm64: Mark existing framebuffer as DMAable

Patrick Georgi (pgeorgi@google.com) gerrit at coreboot.org
Sat May 7 07:31:38 CEST 2016


Patrick Georgi (pgeorgi at google.com) just uploaded a new patch set to gerrit, which you can find at https://review.coreboot.org/14685

-gerrit

commit db94ff3d9d6a56103cde890c821fbccbc64dae22
Author: Patrick Georgi <patrick at georgi-clan.de>
Date:   Thu Apr 28 06:03:57 2016 +0200

    libpayload/arm64: Mark existing framebuffer as DMAable
    
    If a framebuffer is already configured by coreboot, libpayload's
    MMU tables didn't mark its memory DMAable (unlike when libpayload
    set up its own framebuffer memory).
    
    BRANCH=none
    BUG=chrome-os-partner:52826
    TEST=depthcharge's recovery screen is not corrupted anymore on kevin
    
    Change-Id: I228a861b3fdcf1298a3cfa0a054214c78ed55e70
    Signed-off-by: Patrick Georgi <pgeorgi at chromium.org>
    Original-Commit-Id: 889e8358a0f2f504abd9910549aa68f3992bb4e8
    Original-Change-Id: I7ba79151ccc1eb605f82e1869a74b539a6be5e99
    Original-Signed-off-by: Patrick Georgi <patrick at georgi-clan.de>
    Original-Signed-off-by: Vadim Bendebury <vbendeb at chromium.org>
    Original-Reviewed-on: https://chromium-review.googlesource.com/341092
---
 payloads/libpayload/arch/arm64/mmu.c | 18 ++++++++++++------
 1 file changed, 12 insertions(+), 6 deletions(-)

diff --git a/payloads/libpayload/arch/arm64/mmu.c b/payloads/libpayload/arch/arm64/mmu.c
index 553b2d5..50e7f6c 100644
--- a/payloads/libpayload/arch/arm64/mmu.c
+++ b/payloads/libpayload/arch/arm64/mmu.c
@@ -655,18 +655,24 @@ static void mmu_add_fb_range(struct mmu_ranges *mmu_ranges)
 	struct cb_framebuffer *framebuffer = lib_sysinfo.framebuffer;
 	uint32_t fb_size;
 
-	/*
-	 * Check whether framebuffer is needed
-	 * or framebuffer address has been set already
-	 */
+	/* Check whether framebuffer is needed */
 	if (framebuffer == NULL)
 		return;
-	if (framebuffer->physical_address)
-		return;
+
 	fb_size = framebuffer->bytes_per_line * framebuffer->y_resolution;
 	if (!fb_size)
 		return;
 
+	/* framebuffer address has been set already, so just add it as DMA */
+	if (framebuffer->physical_address) {
+		if (mmu_add_memrange(mmu_ranges,
+		    framebuffer->physical_address,
+		    fb_size,
+		    TYPE_DMA_MEM) == NULL)
+			mmu_error();
+		return;
+	}
+
 	/* Allocate framebuffer */
 	fb_range = _mmu_add_fb_range(fb_size, mmu_ranges);
 	if (fb_range == NULL)



More information about the coreboot-gerrit mailing list