From patchwork Thu May 17 13:22:23 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sinan Kaya X-Patchwork-Id: 10406813 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id B330C60353 for ; Thu, 17 May 2018 13:22:50 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 9E48620408 for ; Thu, 17 May 2018 13:22:50 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 92D6B2040D; Thu, 17 May 2018 13:22:50 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI autolearn=unavailable version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 3A5E820499 for ; Thu, 17 May 2018 13:22:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:Message-Id:Date:Subject:To :From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References: List-Owner; bh=tM7xfHTl2uvcUFOdQP7ZkYD3uSjJ7RJqfBtDLz4IEf4=; b=O811zKIjR3atPK Q2NnlxkTPKpQaApuNFCbdh1ICTnGFrjDE4pWtgoVRGidxK0PJjgsPGj1b8xDXvJO6IpVR5HcnJ/J5 OH5iIJmdsXBaxtyiUbSb8cYlG6gSeaNWymp9uj0B9oX45PitGI47W/gtuclIBjO7ilWSyQsw1OH7G R0FNqRBV8XYzSeE86ZlID03V1F1GLRGxQPnTWhUtdMdTqSTXxjehm3baSlS+jsmaOWTbVaQ1CM/uW BaEAeSEnPv2OdVIQcNw+/oOYaPmzmAlDLVWh+vQmbCQyQo2x0eE/d/efaO0MHXyLrN3M+rsNDwj9t uvjm3/H3tuvv7kTlkNQg==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1fJIrk-0002y3-I5; Thu, 17 May 2018 13:22:44 +0000 Received: from smtp.codeaurora.org ([198.145.29.96]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1fJIrg-0002wV-1W for linux-arm-kernel@lists.infradead.org; Thu, 17 May 2018 13:22:42 +0000 Received: by smtp.codeaurora.org (Postfix, from userid 1000) id A5EFE60A4E; Thu, 17 May 2018 13:22:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1526563349; bh=AiMBoL3aNXek35Je6mKz2Ov00dSAMy1HjuXVxSGJj8Y=; h=From:To:Cc:Subject:Date:From; b=M/P6Afj4G/7hCOJHm82NJEzhME28HelqPGiyE7vuRM1dYh15QK51qbEe0TuAm8UmH SpV42AToU2W/QhCg1GMV0YsMQhkForjK6OxL3kwGLZEyt8GOYU13CV+8MjxlXSiMPR AfvGP1IRCtIK571woSdSM5uMKqhTo6T2s/DlaOM8= 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 4F378609D1; Thu, 17 May 2018 13:22:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1526563349; bh=AiMBoL3aNXek35Je6mKz2Ov00dSAMy1HjuXVxSGJj8Y=; h=From:To:Cc:Subject:Date:From; b=M/P6Afj4G/7hCOJHm82NJEzhME28HelqPGiyE7vuRM1dYh15QK51qbEe0TuAm8UmH SpV42AToU2W/QhCg1GMV0YsMQhkForjK6OxL3kwGLZEyt8GOYU13CV+8MjxlXSiMPR AfvGP1IRCtIK571woSdSM5uMKqhTo6T2s/DlaOM8= DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org 4F378609D1 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, ard.biesheuvel@linaro.org Subject: [PATCH] efi/fb: Convert PCI bus address to resource if translated by the bridge Date: Thu, 17 May 2018 09:22:23 -0400 Message-Id: <1526563343-28721-1-git-send-email-okaya@codeaurora.org> X-Mailer: git-send-email 2.7.4 MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20180517_062240_153466_2E86A084 X-CRM114-Status: GOOD ( 13.43 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "open list:EFIFB FRAMEBUFFER DRIVER" , Bartlomiej Zolnierkiewicz , linux-arm-msm@vger.kernel.org, open list , "open list:FRAMEBUFFER LAYER" , Sinan Kaya , Peter Jones , linux-arm-kernel@lists.infradead.org Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP 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 Signed-off-by: Peter Jones --- drivers/video/fbdev/efifb.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/drivers/video/fbdev/efifb.c b/drivers/video/fbdev/efifb.c index 46a4484..ea68d5c 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_bus_region region; + struct resource res; int i; if (efifb_pci_dev || screen_info.orig_video_isVGA != VIDEO_TYPE_EFI) @@ -439,6 +441,14 @@ static void efifb_fixup_resources(struct pci_dev *dev) if (!base) return; + region.start = base; + region.end = base + size - 1; + res.start = 0; + res.flags = IORESOURCE_MEM; + pcibios_bus_to_resource(dev->bus, &res, ®ion); + if (res.start) + base = res.start; + for (i = 0; i <= PCI_STD_RESOURCE_END; i++) { struct resource *res = &dev->resource[i];