On Fri, 2018-06-22 at 10:14 -0400, Kevin O'Connor wrote:
On Fri, Jun 22, 2018 at 08:42:50AM +0200, Gerd Hoffmann wrote:
On Wed, Jun 20, 2018 at 08:00:28PM +0200, Patrick Rudolph wrote:
This commit breaks SeaBIOS' menu when used with coreboot's native graphic init in text mode. Payloads are not affacted (tested NTLDR and coreinfo). Everything works fine with native graphic init in high resolution framebuffer mode. I've got no debug log at hand, but I'll investigate asap. Tested on Lenovo T500 using libgfxinit with latest coreboot master.
Hmm, no clue what could cause this. But clearing the memory is only problematic for the framebuffer case, so maybe the patch below helps?
diff --git a/vgasrc/cbvga.c b/vgasrc/cbvga.c index f6ebe71242..a48f4dc885 100644 --- a/vgasrc/cbvga.c +++ b/vgasrc/cbvga.c @@ -201,18 +201,20 @@ cbvga_set_mode(struct vgamode_s *vmode_g, int flags) */ u8 extra_stack = GET_BDA_EXT(flags) & BF_EXTRA_STACK; MASK_BDA_EXT(flags, BF_EMULATE_TEXT, emul ? BF_EMULATE_TEXT : 0);
- if (!(flags & MF_NOCLEARMEM) && extra_stack) {
- if (!(flags & MF_NOCLEARMEM)) { if (GET_GLOBAL(CBmodeinfo.memmodel) == MM_TEXT) { memset16_far(SEG_CTEXT, (void*)0, 0x0720, 80*25*2); return 0; }
struct gfx_op op;
init_gfx_op(&op, &CBmodeinfo);
op.x = op.y = 0;
op.xlen = GET_GLOBAL(CBmodeinfo.width);
op.ylen = GET_GLOBAL(CBmodeinfo.height);
op.op = GO_MEMSET;
handle_gfx_op(&op);
if (extra_stack) {
I'm also not sure on the cause, but I think it should be safe to change this to:
if (extra_stack || flags & MF_LEGACY) {
Seems to be the correct solution, as BF_EXTRA_STACK is set after cbvga_set_mode and thus extra_stack is 0 on first cbvga_set_mode call.
because if this is a legacy call then it should be safe to write to highmem even if the last call was a vesa modeset.
-Kevin