Re: UEFI boot fail on higher resolutions (Re: Acer E3-112 and UEFI)

From: Jakob Alvermark <jakob_at_alvermark.net>
Date: Tue, 30 Jun 2015 20:52:36 +0200 (CEST)
On Wed, February 4, 2015 15:04, Jakob Alvermark wrote:
>

> On 31 dec 2014, at 16:24, Jakob Alvermark wrote:
>
>
>> On Tue, December 30, 2014 17:00, Nathan Whitehorn wrote:
>>
>>>
>>
>>> On 12/30/14 06:40, Jakob Alvermark wrote:
>>>
>>>
>>>> Hi,
>>>>
>>>>
>>>>
>>>> Have been playing with this machine for a while now.
>>>> It is a quad core Pentium N3540 (ValleyView/Bay Trail), 8 GB RAM. It
>>>>  came with a Broadcom WiFi card which I swapped for an Intel which
>>>> is supported by FreeBSD. Also swapped the hard drive for an SSD.
>>>>
>>>> When first trying to boot FreeBSD with UEFI it would not boot.
>>>> It stops after the loader is trying to start the kernel.
>>>> My workaround now is using refind, http://www.rodsbooks.com/refind/
>>>> to set the screen resolution to 800x600. (Native is 1366x768) Only
>>>> then will it boot using UEFI. I tried setting it to 1024x768, then
>>>> it crashes. If it helps I can get the backtrace.
>>>
>>> [Not sure what's going on here]
>>>
>>>
>
>
> A follow up on this:
>
>
> I tried this on my desktop machine (AMD FX-8350, Radeon HD 5450) to see
> if it has the issue, and it has! I went on to try it on my desktop machine
> at work (Core i3-4130, Radeon HD 4350) and it boots!
>
> On the Acer, resolution set to 1024x768:
>
>
>>> FreeBSD EFI boot block
>>>
> Loader path: /boot/loader.efi
> Consoles: EFI console
> Image base: 0x7502f000
> EFI version: 2.40
> EFI Firmware: INSYDE Corp. (rev 21522.39)
>
>
> ---
> Start _at_ 0xffffffff802e1000 ...
> EFI framebuffer information:
> addr, size          0x80000000, 0x300000 dimensions      1024 x 768 stride
> 1024
> masks               0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000
>
> ---
>
>
> kernel trap12 with interrupts disabled
>
>
> Fatal trap 12: page fault while in kernel mode
> cpuid = 0; apic id = 00 fault virtual address     = 0x13 fault code
> = supervisor read data, page not present
> instruction pointer       = 0x20:0xffffffff80a20834 stack pointer
> = 0x28:0xffffffff81604170
> frame pointer               = 0x28:0xffffffff81604290 code segment
> = base 0x0, limit 0xfffff, type 0x1b
> = DPL 0, pres 1, long 1, def32 0, gran 1
> processor eflags         = resume, IOPL = 0 current process           = 0
> ()
> [ thread pid 0 tid 0]
> Stopped at                  kvprintf+0xd4:    movzbl   (%r14),%eax
>
>
> ....
>
>
>
>
> On the home desktop resolution 1024x768:
>
>
>>> FreeBSD EFI boot block
>>>
> Loader path: /boot/loader.efi
> Consoles: EFI console
> Image base: 0xb08ac000
> EFI version: 2.31
> EFI Firmware: American Megatrends (rev 4.653)
>
>
> ---
> Start _at_ 0xffffffff802e1000 ...
> EFI framebuffer information:
> addr, size          0xc0000000, 0x300000 dimensions      1024 x 768 stride
> 1024
> masks               0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000
>
> ---
> kernel trap12 with interrupts disabled
>
>
> Fatal trap 12: page fault while in kernel mode
> cpuid = 0; apic id = 00 fault virtual address     = 0x13 fault code
> = supervisor read data, page not present
> instruction pointer       = 0x20:0xffffffff80a20654 stack pointer
> = 0x28:0xffffffff81603d70
> frame pointer               = 0x28:0xffffffff81603e90 code segment
> = base 0x0, limit 0xfffff, type 0x1b
> = DPL 0, pres 1, long 1, def32 0, gran 1
> processor eflags         = resume, IOPL = 0 current process           = 0
> ()
> [ thread pid 0 tid 0]
> Stopped at                  kvprintf+0xd4:    movzbl   (%r14),%eax
>
>
> ----
>
>
> On the work desktop:
>
>
>>> FreeBSD EFI boot block
>>>
> Loader path: /boot/loader.efi
> Consoles: EFI console
> Image base: 0xbb7aa000
> EFI version: 2.31
> EFI Firmware: American Megatrends (rev 4.654)
>
>
> ---
> Start _at_ 0xffffffff802e1000 ...
> EFI framebuffer information:
> addr, size          0xe0000000, 0x300000 dimensions      1024 x 768 stride
> 1024
> masks               0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000
>
> And then it boots normally.
>
>
>
> Does anyone have any clues on what's going on here?
>
>
> (This all typed manually from screenshots taken with my phone, there
> might be typos.)

Another update!

As I found out the EFI loader has the capability to change screen modes I
dumped refind and started playing with this again.
"mode 5" gives me 1024x768 and a panic:

---
kernel trap 12 with interrupts disabled


Fatal trap 12: page fault while in kernel mode
cpuid = 0; apic id = 00
fault virtual address	= 0x1f2d0ec
fault code		= supervisor read data, page not present
instruction pointer	= 0x20:0xffffffff8030003d
stack pointer	        = 0x28:0xffffffff81616f70
frame pointer	        = 0x28:0x0
code segment		= base 0x0, limit 0xfffff, type 0x1b
			= DPL 0, pres 1, long 1, def32 0, gran 1
processor eflags	= resume, IOPL = 0
current process		= 0 ()
---

What struck me then was this line:
instruction pointer	= 0x20:0xffffffff8030003d
and the fact that:
EFI framebuffer information:
addr, size          0x80000000, 0x300000

Coincidence? Maybe not.
In sys/dev/vt/hw/efifb/efifb.c I changed this line:

info->fb_vbase = PHYS_TO_DMAP(efifb->fb_addr);

Into this hack:

info->fb_vbase = PHYS_TO_DMAP(0x90000000);

Recompile kernel and now it boots at native resolution (1366x768)!

Any thoughts on this?

Thanks,

Jakob
Received on Tue Jun 30 2015 - 16:52:48 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:58 UTC