mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2025-01-09 15:24:32 +08:00
drm/nouveau/bios: attempt to fetch entire acpi rom image in one shot
v2: fdo#55948 - the _ROM method silently truncates size to 4KiB, perform a checksum test and fall back to slow _ROM access on failure. Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
This commit is contained in:
parent
28164fdad8
commit
de2b8b8bbb
@ -210,11 +210,19 @@ nouveau_bios_shadow_acpi(struct nouveau_bios *bios)
|
||||
return;
|
||||
|
||||
bios->data = kmalloc(bios->size, GFP_KERNEL);
|
||||
for (i = 0; bios->data && i < bios->size; i += cnt) {
|
||||
cnt = min((bios->size - i), (u32)4096);
|
||||
ret = nouveau_acpi_get_bios_chunk(bios->data, i, cnt);
|
||||
if (ret != cnt)
|
||||
break;
|
||||
if (bios->data) {
|
||||
/* disobey the acpi spec - much faster on at least w530 ... */
|
||||
ret = nouveau_acpi_get_bios_chunk(bios->data, 0, bios->size);
|
||||
if (ret != bios->size ||
|
||||
nvbios_checksum(bios->data, bios->size)) {
|
||||
/* ... that didn't work, ok, i'll be good now */
|
||||
for (i = 0; i < bios->size; i += cnt) {
|
||||
cnt = min((bios->size - i), (u32)4096);
|
||||
ret = nouveau_acpi_get_bios_chunk(bios->data, i, cnt);
|
||||
if (ret != cnt)
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user