mirror of
https://github.com/xcat2/xNBA.git
synced 2024-12-24 12:11:33 +00:00
[romprefix] Update ROM checksum even if PMM allocation fails
There are code paths other than PMM allocation that can result in our changing the ROM checksum. For example, we attempt to update our product string to incorporate the PCI bus:dev.fn number. In a system that does not support PMM, we could therefore end up with an incorrect checksum. Fix by attempting to update the checksum unconditionally.
This commit is contained in:
parent
79867d34ee
commit
f16668dd60
@ -345,20 +345,22 @@ got_pmm: /* PMM allocation succeeded */
|
||||
shll $9, %ecx
|
||||
addr32 rep movsb /* PMM presence implies flat real mode */
|
||||
movl %edi, decompress_to
|
||||
/* Shrink ROM and update checksum */
|
||||
/* Shrink ROM */
|
||||
movb $_prefix_memsz_sect, romheader_size
|
||||
pmm_fail:
|
||||
/* Restore upper register halves */
|
||||
popal
|
||||
no_pmm:
|
||||
|
||||
/* Update checksum */
|
||||
xorw %bx, %bx
|
||||
xorw %si, %si
|
||||
movw $_prefix_memsz_sect, %cx
|
||||
movb %cl, romheader_size
|
||||
movzbw romheader_size, %cx
|
||||
shlw $9, %cx
|
||||
1: lodsb
|
||||
addb %al, %bl
|
||||
loop 1b
|
||||
subb %bl, checksum
|
||||
pmm_fail:
|
||||
/* Restore upper register halves */
|
||||
popal
|
||||
no_pmm:
|
||||
|
||||
/* Copy self to option ROM space. Required for PCI3.0, which
|
||||
* loads us to a temporary location in low memory. Will be a
|
||||
|
Loading…
Reference in New Issue
Block a user