Failing grub code ------------------------------------------ static void init_cbfsdisk (void) { grub_uint32_t ptr; struct cbfs_header *head;
ptr = *(grub_uint32_t *) 0xfffffffc; head = (struct cbfs_header *) (grub_addr_t) ptr; grub_dprintf ("cbfs", "head=%p\n", head);
/* coreboot current supports only ROMs <= 16 MiB. Bigger ROMs will have problems as RCBA is 18 MiB below end of 32-bit typically, so either memory map would have to be rearranged or we'd need to support reading ROMs through controller directly. */ if (ptr < 0xff000000 || 0xffffffff - ptr < (grub_uint32_t) sizeof (*head) + 0xf || !validate_head (head)) return; ------------------------------------------
On Sun, Mar 19, 2017 at 11:47 AM, Gailu Singh gailu96@gmail.com wrote:
Hi Experts,
On Intel Leafhill board grub fails to find cbfsdisk. We tried to debug and found that cbfs header address validation fails.
According to https://github.com/mrnuke/coreboot/blob/master/ documentation/cbfs.txt, "A pointer to the location of the header will be located at offset -4 from the end of the ROM. This translates to address 0xFFFFFFFC on a normal x86 system. The pointer will be to physical memory somewhere between - 0xFFFFB000 and 0xFFFFFFF0".
We checked the coreboot.rom in hex editor and address in last 4 bytes is all ones (FFFFFFFF) as a result grub is not able to find cbfs header.
We have earlier used coreboot on baytrail and in the coreboot.rom cbfs header address in last 4 byte was a valid pointer.
What is the location grub can find cbfs header on this board?