From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ben Widawsky Subject: [PATCH 9/9] drm/i915: [sparse] __iomem fixes for intel_bios Date: Mon, 16 Apr 2012 14:07:48 -0700 Message-ID: <1334610468-9274-10-git-send-email-ben@bwidawsk.net> References: <1334610468-9274-1-git-send-email-ben@bwidawsk.net> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Received: from cloud01.chad-versace.us (184-106-247-128.static.cloud-ips.com [184.106.247.128]) by gabe.freedesktop.org (Postfix) with ESMTP id 370389F6D8 for ; Mon, 16 Apr 2012 14:09:35 -0700 (PDT) In-Reply-To: <1334610468-9274-1-git-send-email-ben@bwidawsk.net> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: intel-gfx-bounces+gcfxdi-intel-gfx=m.gmane.org@lists.freedesktop.org Errors-To: intel-gfx-bounces+gcfxdi-intel-gfx=m.gmane.org@lists.freedesktop.org To: intel-gfx@lists.freedesktop.org Cc: Ben Widawsky , Ben Widawsky List-Id: intel-gfx@lists.freedesktop.org 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 --- 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