This is only the first part of the patch which does the correct types. The fix for dereferencing stuff was taking too long, so I've stopped. Signed-off-by: Ben Widawsky <benjamin.widawsky at intel.com> --- drivers/gpu/drm/i915/intel_bios.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/drivers/gpu/drm/i915/intel_bios.c b/drivers/gpu/drm/i915/intel_bios.c index 3534593..7233e72 100644 --- a/drivers/gpu/drm/i915/intel_bios.c +++ b/drivers/gpu/drm/i915/intel_bios.c @@ -697,24 +697,27 @@ intel_parse_bios(struct drm_device *dev) { struct drm_i915_private *dev_priv = dev->dev_private; struct pci_dev *pdev = dev->pdev; - struct bdb_header *bdb = NULL; + struct bdb_header __iomem *bdb = NULL; u8 __iomem *bios = NULL; init_vbt_defaults(dev_priv); /* XXX Should this validation be moved to intel_opregion.c? */ if (!dmi_check_system(intel_no_opregion_vbt) && dev_priv->opregion.vbt) { - struct vbt_header *vbt = dev_priv->opregion.vbt; - if (memcmp(vbt->signature, "$VBT", 4) == 0) { + char sig[20]; + struct vbt_header __iomem *vbt = dev_priv->opregion.vbt; + memcpy_fromio(sig, &vbt->signature, sizeof(sig)); + if (memcmp(sig, "$VBT", 4) == 0) { DRM_DEBUG_KMS("Using VBT from OpRegion: %20s\n", vbt->signature); - bdb = (struct bdb_header *)((char *)vbt + vbt->bdb_offset); + bdb = (struct bdb_header __iomem *)((char __iomem *)vbt + + ioread32(&vbt->bdb_offset)); } else dev_priv->opregion.vbt = NULL; } if (bdb == NULL) { - struct vbt_header *vbt = NULL; + struct vbt_header __iomem *vbt = NULL; size_t size; int i; @@ -724,8 +727,9 @@ intel_parse_bios(struct drm_device *dev) /* Scour memory looking for the VBT signature */ for (i = 0; i + 4 < size; i++) { - if (!memcmp(bios + i, "$VBT", 4)) { - vbt = (struct vbt_header *)(bios + i); + u32 temp = ioread32(bios + i); + if (!memcmp(&temp, "$VBT", 4)) { + vbt = (struct vbt_header __iomem *)(bios + i); break; } } @@ -736,7 +740,7 @@ intel_parse_bios(struct drm_device *dev) return -1; } - bdb = (struct bdb_header *)(bios + i + vbt->bdb_offset); + bdb = (struct bdb_header __iomem *)(bios + i + vbt->bdb_offset); } /* Grab useful general definitions */ -- 1.7.10