libpayload/corebootfb: Keep local copy of framebuffer info

Keeping a local copy of the framebuffer info allows us to make changes,
e.g. add offsets. It also avoids trouble with relocation.

Change-Id: I852c4eb229dd0724114acb302ab2ed7164712b64
Signed-off-by: Nico Huber <nico.huber@secunet.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/38537
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Angel Pons <th3fanbus@gmail.com>
This commit is contained in:
Nico Huber 2020-01-16 13:08:18 +01:00 committed by Patrick Georgi
parent c97bf6fdb4
commit e612418221
1 changed files with 6 additions and 10 deletions

View File

@ -61,13 +61,12 @@ static const u32 vga_colors[] = {
(0xFF << 16) | (0xFF << 8) | 0xFF, (0xFF << 16) | (0xFF << 8) | 0xFF,
}; };
/* Addresses for the various components */ struct cb_framebuffer fbinfo;
static unsigned long fbinfo;
static unsigned long fbaddr;
static unsigned short *chars; static unsigned short *chars;
#define FI ((struct cb_framebuffer *) phys_to_virt(fbinfo)) /* Addresses for the various components */
#define FB ((unsigned char *) phys_to_virt(fbaddr)) #define FI (&fbinfo)
#define FB ((unsigned char *) phys_to_virt(FI->physical_address))
#define CHARS (chars) #define CHARS (chars)
static void corebootfb_scroll_up(void) static void corebootfb_scroll_up(void)
@ -230,12 +229,9 @@ static int corebootfb_init(void)
if (lib_sysinfo.framebuffer == NULL) if (lib_sysinfo.framebuffer == NULL)
return -1; return -1;
/* We might have been called before relocation (like FILO does). So fbinfo = *lib_sysinfo.framebuffer;
just keep the physical address which won't break on relocation. */
fbinfo = virt_to_phys(lib_sysinfo.framebuffer);
fbaddr = FI->physical_address; if (FI->physical_address == 0)
if (fbaddr == 0)
return -1; return -1;
font_init(FI->x_resolution); font_init(FI->x_resolution);