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@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