From 2d261deb02b6d2a41cd13efbbb24a48f22202ea1 Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Thu, 11 Oct 2012 22:45:15 -0400 Subject: [PATCH] --- yaml --- r: 345370 b: refs/heads/master c: de2b8b8bbb2f5ad713c7eecd88f78666a54dc438 h: refs/heads/master v: v3 --- [refs] | 2 +- .../gpu/drm/nouveau/core/subdev/bios/base.c | 18 +++++++++++++----- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/[refs] b/[refs] index a9e10c0cc889..b08a021c583e 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 28164fdad85ec806f30c76fe98ed0e3abc91d2d7 +refs/heads/master: de2b8b8bbb2f5ad713c7eecd88f78666a54dc438 diff --git a/trunk/drivers/gpu/drm/nouveau/core/subdev/bios/base.c b/trunk/drivers/gpu/drm/nouveau/core/subdev/bios/base.c index 70ca7d5a1aa1..1cf818d6d48e 100644 --- a/trunk/drivers/gpu/drm/nouveau/core/subdev/bios/base.c +++ b/trunk/drivers/gpu/drm/nouveau/core/subdev/bios/base.c @@ -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; + } + } } }