Received: by 2002:ac0:a594:0:0:0:0:0 with SMTP id m20-v6csp2345632imm; Wed, 16 May 2018 11:24:34 -0700 (PDT) X-Google-Smtp-Source: AB8JxZr3jMbM283zovxp5OpMf/hEgpfMiV1Bb9jP6DelmtxRLbeq4OXmCWMNmnK/VcLYzmth2ovH X-Received: by 2002:a63:5f4f:: with SMTP id t76-v6mr1515897pgb.400.1526495074480; Wed, 16 May 2018 11:24:34 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1526495074; cv=none; d=google.com; s=arc-20160816; b=mN59M6geIn3KnKFJ2sEYLdP2wPAhGWnULlNtxzbGD/ad6ZW2sL4xtNjRN41jHat9JX Lb1uCF28rJCGUzZ/iTKA8kZAOieIhyxnUznzFN4Hvd4TIPGaCXNwgNUTfL07QRDT7E2A s6MvDNRsfRJP1+Lu/kTS3/OqIgcZvNEJ0g9a3dlhedWnpacCyUDrTwb5MsdaouiRtLue XuN0NInTUxPPkuRClJwCs8C9snrchE1Fpvskw2OYTL//jbd1evgzkryNuZUmP8+0BggC /SZexcvWkx92pqu0lByOt/EcExUZFLjvR6li1sLpajVr4u4TY1J0Yx0bFpdSEhfhXOtn Eevw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dmarc-filter:dkim-signature :dkim-signature:arc-authentication-results; bh=TS1qUEO40gTIlTmub7K07ZSM+tJy3NSTlldB80OtFPU=; b=eUuyh8qklKa447b/XN0KRveiQWbhwlEMLTZnVg69sSC0wbbu8FZHh0r/putDpciSCm qhXuQBWHrAqqcOpRX0QkREYYvuV9F82W+gKJv8u++FP8R20mAaRz0hsPG3HHLyks80nM F08srQrZAP7FBKU5GUTLXgqElp+UmaZRO8jtm6S21h2iyVvTz75tGkir4wrfjlSA2fCj BIK3bOLkuINL4GpPHx6XR4Jke3IOOM17wWGu5PiN8MHrnD+g1leqld09wBWiEMgCwJ+7 Rlf38Wp7uupusa7Ti8oXOROOCtFaJ970wmlpgQHajmYphrubWCBpgFINy8GG1mCDf5/w GHbg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@codeaurora.org header.s=default header.b=fxQxG1Cv; dkim=pass header.i=@codeaurora.org header.s=default header.b=MBmKoAUN; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id c30-v6si2438159pgn.553.2018.05.16.11.24.19; Wed, 16 May 2018 11:24:34 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@codeaurora.org header.s=default header.b=fxQxG1Cv; dkim=pass header.i=@codeaurora.org header.s=default header.b=MBmKoAUN; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752081AbeEPSYF (ORCPT + 99 others); Wed, 16 May 2018 14:24:05 -0400 Received: from smtp.codeaurora.org ([198.145.29.96]:56048 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751893AbeEPSYC (ORCPT ); Wed, 16 May 2018 14:24:02 -0400 Received: by smtp.codeaurora.org (Postfix, from userid 1000) id 5960D60558; Wed, 16 May 2018 18:24:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1526495041; bh=rvEfBnKpeAymFNS8nIqQEnrYberNfh11BH2n5nAtr2A=; h=From:To:Cc:Subject:Date:From; b=fxQxG1CvJH/cpxNXnyVl6lDQGnKNgwXWRvZ8YGe3onDMRp/YtR93m12SqansycgJJ Jw9YrkgeEX7sEgjwNG5Evk/gZrQANsiK9ZPAjq51ROUX+6DNdZni7UUjSyTwSTH1qz vhXnwjahNGBi4fPW+qMSBs4i+FkqfAIAHNA3E1R8= X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on pdx-caf-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.8 required=2.0 tests=ALL_TRUSTED,BAYES_00, DKIM_SIGNED,T_DKIM_INVALID autolearn=no autolearn_force=no version=3.4.0 Received: from drakthul.qualcomm.com (global_nat1_iad_fw.qualcomm.com [129.46.232.65]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: okaya@smtp.codeaurora.org) by smtp.codeaurora.org (Postfix) with ESMTPSA id 5BE8360558; Wed, 16 May 2018 18:23:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1526495040; bh=rvEfBnKpeAymFNS8nIqQEnrYberNfh11BH2n5nAtr2A=; h=From:To:Cc:Subject:Date:From; b=MBmKoAUNDyuMR8haPVEV0aQ/aqCxniPONOigaDOTZBbWai0jxMv53fe1ZD/TuH4st CJZX7MHcImwvKxUTmOkHREnsAOwSCWKjO5ZPnOqXpju7q0MuxBxWlEG8u5jDGcNr+1 jkqIOR/ZVnay6dYrs3z0BiS4RiWE9UqKJAGNvxp4= DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org 5BE8360558 Authentication-Results: pdx-caf-mail.web.codeaurora.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: pdx-caf-mail.web.codeaurora.org; spf=none smtp.mailfrom=okaya@codeaurora.org From: Sinan Kaya To: linux-pci@vger.kernel.org, timur@codeaurora.org Cc: linux-arm-msm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Sinan Kaya , Peter Jones , Bartlomiej Zolnierkiewicz , linux-fbdev@vger.kernel.org (open list:EFIFB FRAMEBUFFER DRIVER), dri-devel@lists.freedesktop.org (open list:FRAMEBUFFER LAYER), linux-kernel@vger.kernel.org (open list) Subject: [RFC PATCH] efi/fb: Convert PCI bus address to resource if translated by the bridge Date: Wed, 16 May 2018 14:23:49 -0400 Message-Id: <1526495029-25783-1-git-send-email-okaya@codeaurora.org> X-Mailer: git-send-email 2.7.4 MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org A host bridge is allowed to remap BAR addresses using _TRA attribute in _CRS windows. pci_bus 0000:00: root bus resource [mem 0x80100100000-0x8011fffffff window] (bus address [0x00100000-0x1fffffff]) pci 0000:02:00.0: reg 0x10: [mem 0x8011e000000-0x8011effffff] When a VGA device is behind such a host bridge and the resource is translated efifb driver is trying to do ioremap against bus address rather than the resource address and is failing to probe. efifb driver is having difficulty locating the base address from BAR address when efifb: probing for efifb efifb: cannot reserve video memory at 0x1e000000 efifb: framebuffer at 0x1e000000, using 1920k, total 1875k efifb: mode is 800x600x32, linelength=3200, pages=1 efifb: scrolling: redraw efifb: Truecolor: size=8:8:8:8, shift=24:16:8:0 Use the host bridge offset information to convert bus address to resource address in the fixup. Signed-off-by: Sinan Kaya --- drivers/video/fbdev/efifb.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/drivers/video/fbdev/efifb.c b/drivers/video/fbdev/efifb.c index 46a4484..feef02b 100644 --- a/drivers/video/fbdev/efifb.c +++ b/drivers/video/fbdev/efifb.c @@ -428,6 +428,8 @@ static void efifb_fixup_resources(struct pci_dev *dev) { u64 base = screen_info.lfb_base; u64 size = screen_info.lfb_size; + struct pci_host_bridge *bridge; + struct resource_entry *window; int i; if (efifb_pci_dev || screen_info.orig_video_isVGA != VIDEO_TYPE_EFI) @@ -439,6 +441,27 @@ static void efifb_fixup_resources(struct pci_dev *dev) if (!base) return; + bridge = pci_find_host_bridge(dev->bus); + if (!bridge) + return; + + resource_list_for_each_entry(window, &bridge->windows) { + phys_addr_t win_start; + phys_addr_t win_end; + size_t win_size; + + if (resource_type(window->res) != IORESOURCE_MEM) + continue; + + win_start = window->res->start - window->offset; + win_end = window->res->end - window->offset; + win_size = window->res->end - window->res->start + 1; + if (win_start <= base && win_end >= base + win_size - 1) { + base += window->offset; + break; + } + } + for (i = 0; i <= PCI_STD_RESOURCE_END; i++) { struct resource *res = &dev->resource[i]; -- 2.7.4