summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2012-09-06 16:57:07 -0700
committerShawn Nematbakhsh <shawnn@google.com>2012-10-17 16:51:59 -0700
commit9c17563a9ddc8fc1d05a485683bd1c4a5f795dff (patch)
tree0400a6de3511ffd0c57110d5712a19a9bdee2122
parent71bcbb3e25357947506513bb07e05e2957c61d19 (diff)
downloadvboot-9c17563a9ddc8fc1d05a485683bd1c4a5f795dff.tar.gz
BUTTERFLY-FIRMWARE: Cache GBB images to speed up display
Rather than read the images from slow flash every time we need them, cache them the first time and use that cache thereafter. BUG=none BRANCH=butterfly TEST=manual, test basic firmware functions. Change-Id: Ib699576dc873b7a489b34b921d624f77b4eb1740 Original-Change-Id: Ieb39c44bddeb6315da8983669f19f550888659bd Signed-off-by: Simon Glass <sjg@chromium.org> Reviewed-on: https://gerrit.chromium.org/gerrit/35782 Reviewed-by: Shawn Nematbakhsh <shawnn@google.com> Tested-by: Shawn Nematbakhsh <shawnn@google.com>
-rw-r--r--firmware/lib/vboot_display.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/firmware/lib/vboot_display.c b/firmware/lib/vboot_display.c
index 16b1ea1a..b15b5183 100644
--- a/firmware/lib/vboot_display.c
+++ b/firmware/lib/vboot_display.c
@@ -161,7 +161,7 @@ static void VbRenderTextAtPos(char *text, int right_to_left,
VbError_t VbDisplayScreenFromGBB(VbCommonParams* cparams, uint32_t screen,
VbNvContext *vncptr) {
GoogleBinaryBlockHeader* gbb = (GoogleBinaryBlockHeader*)cparams->gbb_data;
- uint8_t* bmpfv = NULL;
+ static uint8_t* bmpfv;
void* fullimage = NULL;
BmpBlockHeader* hdr;
ScreenLayout* layout;
@@ -187,8 +187,10 @@ VbError_t VbDisplayScreenFromGBB(VbCommonParams* cparams, uint32_t screen,
}
/* Copy bitmap data from GBB into RAM for speed */
- bmpfv = (uint8_t*)VbExMalloc(gbb->bmpfv_size);
- Memcpy(bmpfv, ((uint8_t*)gbb) + gbb->bmpfv_offset, gbb->bmpfv_size);
+ if (!bmpfv) {
+ bmpfv = (uint8_t*)VbExMalloc(gbb->bmpfv_size);
+ Memcpy(bmpfv, ((uint8_t*)gbb) + gbb->bmpfv_offset, gbb->bmpfv_size);
+ }
/* Sanity-check the bitmap block header */
hdr = (BmpBlockHeader *)bmpfv;
@@ -341,8 +343,6 @@ VbError_t VbDisplayScreenFromGBB(VbCommonParams* cparams, uint32_t screen,
VbDisplayScreenFromGBB_exit:
VBDEBUG(("leaving VbDisplayScreenFromGBB() with %d\n",retval));
- /* Free the bitmap data copy */
- VbExFree(bmpfv);
return retval;
}