drm/nouveau/bios: require checksum to match for fast acpi shadow method
authorBen Skeggs <bskeggs@redhat.com>
Fri, 14 Oct 2016 03:16:36 +0000 (13:16 +1000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 9 Jan 2017 07:07:45 +0000 (08:07 +0100)
commit 5dc7f4aa9d84ea94b54a9bfcef095f0289f1ebda upstream.

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/gpu/drm/nouveau/nvkm/subdev/bios/priv.h
drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadow.c
drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadowacpi.c

index 212800ecdce99e4eb1a3a23ebdab9c207cd860da..7d1d3c6b4b728dec4711a75883df4d700a1a6290 100644 (file)
@@ -12,6 +12,7 @@ struct nvbios_source {
        bool rw;
        bool ignore_checksum;
        bool no_pcir;
        bool rw;
        bool ignore_checksum;
        bool no_pcir;
+       bool require_checksum;
 };
 
 int nvbios_extend(struct nvkm_bios *, u32 length);
 };
 
 int nvbios_extend(struct nvkm_bios *, u32 length);
index b2557e87afdd6d0e95910b3b4b91e37ce9a3e269..7deb81b6dbac6bc5a440da281eca94b51b632f83 100644 (file)
@@ -86,9 +86,12 @@ shadow_image(struct nvkm_bios *bios, int idx, u32 offset, struct shadow *mthd)
                    nvbios_checksum(&bios->data[image.base], image.size)) {
                        nvkm_debug(subdev, "%08x: checksum failed\n",
                                   image.base);
                    nvbios_checksum(&bios->data[image.base], image.size)) {
                        nvkm_debug(subdev, "%08x: checksum failed\n",
                                   image.base);
-                       if (mthd->func->rw)
+                       if (!mthd->func->require_checksum) {
+                               if (mthd->func->rw)
+                                       score += 1;
                                score += 1;
                                score += 1;
-                       score += 1;
+                       } else
+                               return 0;
                } else {
                        score += 3;
                }
                } else {
                        score += 3;
                }
index 8fecb5ff22a0efaaeaed9bc2b4939072fc6513bc..06572f8ce9148805ca37470c978af17f42e72827 100644 (file)
@@ -99,6 +99,7 @@ nvbios_acpi_fast = {
        .init = acpi_init,
        .read = acpi_read_fast,
        .rw = false,
        .init = acpi_init,
        .read = acpi_read_fast,
        .rw = false,
+       .require_checksum = true,
 };
 
 const struct nvbios_source
 };
 
 const struct nvbios_source