[coreboot] v2: The elfboot process with 128MB RAM

Mats Erik Andersson mats.andersson at gisladisker.se
Fri Sep 5 00:24:41 CEST 2008


Hello all,

I could use some of your insight into the elfboot stage.
Appended to this message are two printouts of the elfboot
process for 128MB RAM (which comes to a halt), and for
64MB RAM (which succeeds). It is jmp_to_elf_entry() in

   src/arch/i386/boot/boot.c

that is unable to complete the set task for 128MB RAM.
I suspect that the problem lies in the value of
'bounce_buffer' that is determined in src/boot/elfboot.c,
but I fail to identify why a large value is causing
any problem at all. The informational "Candidate bounce_buffer"
is my addition at the loop end in get_bounce_buffer().

Since FILO never starts with 128MB, I cannot verify that the
linuxbios_table indeed gets the expected last entry

 "convert_memmap: 0x00000000100000 0x00000007f00000 1",

which the debugging output for FILO for 64MB would suggest.

A slightly provocative question:

Is the elfboot process implicitly hardcoded to depend on
no more than 64MB RAM? My setup makes sure that PAM#, RPS,
and PGPOL are correct (to my understanding) for distribution
of memory: 64MB, 64MB+64MB, 64MB+0MB+64MB, etc.

I will be much obliged for any pointers. They will all
help me to understand the code base better than presently.

Best regards,

Mats E Andersson


##
## 64MB + 64MB RAM
##

Moving GDT to 0x500...ok
Adjust low_table_end from 0x00000530 to 0x00001000
Adjust rom_table_end from 0x000f0400 to 0x00100000
Wrote coreboot table at: 00000530 - 00000734  checksum ed60

elfboot: Attempting to load payload.
rom_stream: 0xfffe0000 - 0xfffeffff
Found ELF candidate at offset 0
header_offset is 0
Try to load at offset 0x0
Candidate bounce_buffer: 0x0000054000.
Candidate bounce_buffer: 0x0007fb4000.
malloc Enter, size 32, free_mem_ptr 0002757c
malloc 0x0002757c
New segment addr 0x100000 size 0x36000 offset 0xc0 filesize 0xcb88
(cleaned up) New segment addr 0x100000 size 0x36000 offset 0xc0 filesize 0xcb88
lb: [0x0000000000004000, 0x000000000002a000)
malloc Enter, size 32, free_mem_ptr 0002759c
malloc 0x0002759c
New segment addr 0x136000 size 0x48 offset 0xcc60 filesize 0x48
(cleaned up) New segment addr 0x136000 size 0x48 offset 0xcc60 filesize 0x48
lb: [0x0000000000004000, 0x000000000002a000)
Dropping non PT_LOAD segment
Dropping non PT_LOAD segment
Loading Segment: addr: 0x0000000000100000 memsz: 0x0000000000036000 filesz: 0x000000000000cb88
[ 0x0000000000100000, 000000000010cb88, 0x0000000000136000) <- 00000000000000c0
Clearing Segment: addr: 0x000000000010cb88 memsz: 0x0000000000029478
Loading Segment: addr: 0x0000000000136000 memsz: 0x0000000000000048 filesz: 0x0000000000000048
[ 0x0000000000136000, 0000000000136048, 0x0000000000136048) <- 000000000000cc60
Loaded segments
verified segments
closed down stream
Jumping to boot code at 0x100078
entry    = 0x00100078
lb_start = 0x00004000
lb_size  = 0x00026000
buffer   = 0x07fb4000
adjust   = 0x07fd6000
     elf_boot_notes = 0x0001f640
adjusted_boot_notes = 0x07ff5640

## The system is stuck here!
##
## Next case:

##
## 64MB
##

Moving GDT to 0x500...ok
Adjust low_table_end from 0x00000530 to 0x00001000
Adjust rom_table_end from 0x000f0400 to 0x00100000
Wrote coreboot table at: 00000530 - 00000734  checksum ab60

elfboot: Attempting to load payload.
rom_stream: 0xfffe0000 - 0xfffeffff
Found ELF candidate at offset 0
header_offset is 0
Try to load at offset 0x0
Candidate bounce_buffer: 0x0000054000.
Candidate bounce_buffer: 0x0003fb4000.
malloc Enter, size 32, free_mem_ptr 0002757c
malloc 0x0002757c
New segment addr 0x100000 size 0x36000 offset 0xc0 filesize 0xcb88
(cleaned up) New segment addr 0x100000 size 0x36000 offset 0xc0 filesize 0xcb88
lb: [0x0000000000004000, 0x000000000002a000)
malloc Enter, size 32, free_mem_ptr 0002759c
malloc 0x0002759c
New segment addr 0x136000 size 0x48 offset 0xcc60 filesize 0x48
(cleaned up) New segment addr 0x136000 size 0x48 offset 0xcc60 filesize 0x48
lb: [0x0000000000004000, 0x000000000002a000)
Dropping non PT_LOAD segment
Dropping non PT_LOAD segment
Loading Segment: addr: 0x0000000000100000 memsz: 0x0000000000036000 filesz: 0x000000000000cb88
[ 0x0000000000100000, 000000000010cb88, 0x0000000000136000) <- 00000000000000c0
Clearing Segment: addr: 0x000000000010cb88 memsz: 0x0000000000029478
Loading Segment: addr: 0x0000000000136000 memsz: 0x0000000000000048 filesz: 0x0000000000000048
[ 0x0000000000136000, 0000000000136048, 0x0000000000136048) <- 000000000000cc60
Loaded segments
verified segments
closed down stream
Jumping to boot code at 0x100078
entry    = 0x00100078
lb_start = 0x00004000
lb_size  = 0x00026000
buffer   = 0x03fb4000
adjust   = 0x03fd6000
     elf_boot_notes = 0x0001f640
adjusted_boot_notes = 0x03ff5640
FILO version 0.5.6 (mats at asus) Thu Sep  4 22:51:36 CEST 2008
collect_linuxbios_info: Searching for LinuxBIOS tables...
find_lb_table: Found candidate at: 00000530
find_lb_table: header checksum o.k.
find_lb_table: table checksum o.k.
find_lb_table: record count o.k.
collect_linuxbios_info: Found LinuxBIOS table at: 00000530
convert_memmap: 0x00000000000000 0x00000000001000 16
convert_memmap: 0x00000000001000 0x0000000009f000 1
convert_memmap: 0x000000000c0000 0x00000000030000 1
convert_memmap: 0x000000000f0000 0x00000000010000 16
convert_memmap: 0x00000000100000 0x00000003f00000 1
Press <Enter> for default boot, or <Esc> for boot prompt... 2 1 timed out
boot: hda1:/vmlinuz root=/dev/hda1 console=tty0 console=ttyS0,115200 usr=flash
IDE time out
reset failed, but we may be on SATA
Drive 0 does not exist
boot: hda1:/vmlinuz root=/dev/hda1 console=tty0 console=ttyS0,115200 usr=flash




More information about the coreboot mailing list