]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[romprefix] Round up PMM allocation sizes to nearest 4kB
authorMichael Brown <mcb30@ipxe.org>
Wed, 25 Jul 2012 13:32:37 +0000 (14:32 +0100)
committerMichael Brown <mcb30@ipxe.org>
Wed, 25 Jul 2012 13:37:43 +0000 (14:37 +0100)
Some AMI BIOSes apparently break in exciting ways when asked for PMM
allocations for sizes that are not multiples of 4kB.

Fix by rounding up the image source area to the nearest 4kB.  (The
temporary decompression area is already rounded up to the nearest
128kB, to facilitate sharing between multiple iPXE ROMs.)

Reported-by: Itay Gazit <itayg@mellanox.com>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/arch/i386/prefix/romprefix.S

index 2b4c20b8e83725d93c27ad7114713ea65821bd55..35d037eff8b44a8775fe27118351191ccdc7e9d0 100644 (file)
@@ -352,9 +352,13 @@ pmm_scan:
        call    print_message
        /* We have PMM and so a 1kB stack: preserve whole registers */
        pushal
-       /* Allocate image source PMM block */
+       /* Allocate image source PMM block.  Round up the size to the
+        * nearest 4kB (8 512-byte sectors) to work around AMI BIOS bugs.
+        */
        movzbl  romheader_size, %ecx
        addw    extra_size, %cx
+       addw    $0x0007, %cx    /* Round up to multiple of 8 512-byte sectors */
+       andw    $0xfff8, %cx
        shll    $5, %ecx
        movl    $PMM_HANDLE_BASE_IMAGE_SOURCE, %ebx
        movw    $get_pmm_image_source, %bp