From patchwork Tue Feb 17 22:33:53 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ondrej Zary X-Patchwork-Id: 5841821 Return-Path: X-Original-To: patchwork-linux-fbdev@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id DF6FDBF440 for ; Tue, 17 Feb 2015 22:39:41 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 86176201F2 for ; Tue, 17 Feb 2015 22:39:39 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id A123E201DD for ; Tue, 17 Feb 2015 22:39:38 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753649AbbBQWeb (ORCPT ); Tue, 17 Feb 2015 17:34:31 -0500 Received: from ns.gsystem.sk ([62.176.172.50]:59160 "EHLO gsystem.sk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752307AbbBQWeJ (ORCPT ); Tue, 17 Feb 2015 17:34:09 -0500 Received: from stip-static-68.213-81-217.telecom.sk ([213.81.217.68] helo=gsql.ggedos.sk) by gsystem.sk with esmtpsa (TLS1.1:DHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.80) (envelope-from ) id 1YNqiR-0002TM-Jw; Tue, 17 Feb 2015 23:34:03 +0100 From: Ondrej Zary To: Paul Mackerras Cc: linux-fbdev@vger.kernel.org, Kernel development list Subject: [PATCH 4/5] gxt4500: Use write-combining for framebuffer (PAT and MTRR) Date: Tue, 17 Feb 2015 23:33:53 +0100 Message-Id: <1424212434-12614-4-git-send-email-linux@rainbow-software.org> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1424212434-12614-1-git-send-email-linux@rainbow-software.org> References: <1424212434-12614-1-git-send-email-linux@rainbow-software.org> Sender: linux-fbdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-fbdev@vger.kernel.org X-Spam-Status: No, score=-6.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, T_RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Use write-combining for framebuffer to greatly improve performance on x86. Add both ioremap_wc (for systems with PAT) and MTRR setup for non-PAT systems. Signed-off-by: Ondrej Zary --- drivers/video/fbdev/gxt4500.c | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/drivers/video/fbdev/gxt4500.c b/drivers/video/fbdev/gxt4500.c index 442b07c..f278c82 100644 --- a/drivers/video/fbdev/gxt4500.c +++ b/drivers/video/fbdev/gxt4500.c @@ -13,6 +13,9 @@ #include #include #include +#ifdef CONFIG_MTRR +#include +#endif #define PCI_DEVICE_ID_IBM_GXT4500P 0x21c #define PCI_DEVICE_ID_IBM_GXT6500P 0x21b @@ -142,7 +145,9 @@ static const unsigned char watfmt[] = { struct gxt4500_par { void __iomem *regs; - +#ifdef CONFIG_MTRR + int mtrr_reg; +#endif int pixfmt; /* pixel format, see DFA_PIX_* values */ /* PLL parameters */ @@ -158,6 +163,10 @@ struct gxt4500_par { /* mode requested by user */ static char *mode_option; +#ifdef CONFIG_MTRR +static int mtrr = 1; +#endif + /* default mode: 1280x1024 @ 60 Hz, 8 bpp */ static const struct fb_videomode defaultmode = { .refresh = 60, @@ -663,7 +672,7 @@ static int gxt4500_probe(struct pci_dev *pdev, const struct pci_device_id *ent) info->fix.smem_start = fb_phys; info->fix.smem_len = pci_resource_len(pdev, 1); - info->screen_base = pci_ioremap_bar(pdev, 1); + info->screen_base = ioremap_wc(fb_phys, info->fix.smem_len); if (!info->screen_base) { dev_err(&pdev->dev, "gxt4500: cannot map framebuffer\n"); goto err_unmap_regs; @@ -671,6 +680,14 @@ static int gxt4500_probe(struct pci_dev *pdev, const struct pci_device_id *ent) pci_set_drvdata(pdev, info); +#ifdef CONFIG_MTRR + if (mtrr) { + par->mtrr_reg = -1; + par->mtrr_reg = mtrr_add(info->fix.smem_start, + info->fix.smem_len, MTRR_TYPE_WRCOMB, 1); + } +#endif + #ifdef __BIG_ENDIAN /* Set byte-swapping for DFA aperture for all pixel sizes */ pci_write_config_dword(pdev, CFG_ENDIAN0, 0x333300); @@ -735,6 +752,12 @@ static void gxt4500_remove(struct pci_dev *pdev) return; par = info->par; unregister_framebuffer(info); +#ifdef CONFIG_MTRR + if (par->mtrr_reg >= 0) { + mtrr_del(par->mtrr_reg, 0, 0); + par->mtrr_reg = -1; + } +#endif fb_dealloc_cmap(&info->cmap); iounmap(par->regs); iounmap(info->screen_base); @@ -789,3 +812,8 @@ MODULE_DESCRIPTION("FBDev driver for IBM GXT4500P/6500P and GXT4000P/6000P"); MODULE_LICENSE("GPL"); module_param(mode_option, charp, 0); MODULE_PARM_DESC(mode_option, "Specify resolution as \"x[-][@]\""); + +#ifdef CONFIG_MTRR +module_param(mtrr, int, 0444); +MODULE_PARM_DESC(mtrr, "Enable write-combining with MTRR (1=enable, 0=disable, default=1)"); +#endif