From patchwork Sun May 12 20:59:54 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Uenal Mutlu X-Patchwork-Id: 412 Return-Path: X-Original-To: linux-amarula@patchwork.amarulasolutions.com Delivered-To: linux-amarula@patchwork.amarulasolutions.com Received: from mail-wm1-f71.google.com (mail-wm1-f71.google.com [209.85.128.71]) by ganimede.amarulasolutions.com (Postfix) with ESMTPS id 890B43F033 for ; Sun, 12 May 2019 23:00:28 +0200 (CEST) Received: by mail-wm1-f71.google.com with SMTP id d207sf1279832wmd.9 for ; Sun, 12 May 2019 14:00:28 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1557694828; cv=pass; d=google.com; s=arc-20160816; b=avbsePfT5yP+LZzFYwnfOCAMMdn3GrembddiCH5+3pRtO8FXcggz8dyamXBfRgZ3I2 pU8gGQPhKuebHlMIc55y3bVuZh9R72iWI6XX1RAciTI8Dj4snZKejDOGBlW3atlRNwE8 Sw35KGNVhyfbq8msAXAG1s32OBLF0YbfPPvu7ribaQ6LloZ2HldJIxtnuvLv1Wq2l4S1 5nqN2Lc/8eMWofvhZC9methoEjxxR7sS7DYEjrSOcF6xXDfejiAfiiv9m/p938myA2bP Ji++/K5Vai/J/AlYSH868b9prbo8i0tjxl25sMetIVhmQJBJkc/X5XQyLFZB0fjNBQCn gm6w== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-unsubscribe:list-archive:list-help:list-post:list-id :mailing-list:precedence:message-id:date:subject:cc:to:from :mime-version:sender:dkim-signature; bh=09y4tBL+0Bs7ZWyZu+dJS7rfvfDwNWtdFvnMLcLuRGg=; b=WgiNUkYQbGV3qi+oghatHQLopO89F/GRgcjEhUYo22oF9yqE6HQxWtKBYL409E3lPp EKb78R9Iry3BRzhiWgRuCVpfE8r6EqbUeX4jgE6JuvHwAwAyv1+Ln2WeNj5izNjIgSoR D69tRgeNBFyfW1h+D9dE6Te0p7OaVvFoWNwZtntfTICXjAm1byF4fFSNtz9N0fN4swZy GFTsuyg83+EuV9GruEvcPf6+/TMs3E2SrD0W1J6DZh6GWgX9WSEOtpQLSb0p84H5OBNw UM9DpEcyuI6KVlFUsDB7zpTKKjvdtnz3pb+WRf355aO74ZiJ85CJaeipfo5FKmYZefV6 hW1A== ARC-Authentication-Results: i=2; mx.google.com; spf=pass (google.com: domain of um@mutluit.com designates 82.211.8.197 as permitted sender) smtp.mailfrom=um@mutluit.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amarulasolutions.com; s=google; h=sender:mime-version:from:to:cc:subject:date:message-id :x-original-sender:x-original-authentication-results:precedence :mailing-list:list-id:list-post:list-help:list-archive :list-unsubscribe; bh=09y4tBL+0Bs7ZWyZu+dJS7rfvfDwNWtdFvnMLcLuRGg=; b=irQfyK0MCGc/5mPDkd0eIU3W56sVjNjSspfJ/8fRsG+oHc+hrlSu2QkvNDgLPYjIoE F/dNLTyK0sRispNhxomDmO4PjpJ8oBVLa9LLToPn+gFTWk6wYYnKJsd1T9Ap4fsiuEBp 1DoooQRU9h5uxGTxuDpDz/EK1P9wdJ5uINsCg= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=sender:x-gm-message-state:mime-version:from:to:cc:subject:date :message-id:x-original-sender:x-original-authentication-results :precedence:mailing-list:list-id:x-spam-checked-in-group:list-post :list-help:list-archive:list-unsubscribe; bh=09y4tBL+0Bs7ZWyZu+dJS7rfvfDwNWtdFvnMLcLuRGg=; b=Fc/G8CK1MZhwTvo3I1HPu4ecX2fSOEMRmn1V1Ium6Y2kedO8zli5kzdNZW3huxFBiC TiYWxgTwyY4Zymw5yQZzbbg6W0hmn5z1u6wa5wx0H2N9dAsKwaloBcgZzQpQAHc2TlNO U2vWyAWh+y1gCu4BmnCK14r6aaqTh0XR4vHNTUPWU6YhtRyAvX9y3a7m0syWglXuVs7G 8yc9LJR3y18Sw8gvpvfLsQLOaOtTXDKkBGsxLa4t63S54GVM4InHPgUcEhFlk7VhTNZl UGirn0nrthOUGzkKKoB9G0Zr0ZLwp3c/w3mnR66IrMaIneMhXYQBHK5STaBRqioObQQK FB3w== Sender: linux-amarula@amarulasolutions.com X-Gm-Message-State: APjAAAXlUTtLNxNzl4yJf5H6iglCad6aYHpKyi0jZWSsKnOdRYzDDHoJ lsdUZHXCj8rDToWIARJ/5A0tZuD0 X-Google-Smtp-Source: APXvYqyN+zF211AJXanRWN7pLck7I5VmxdxBI3CIHpQTloMa7JJ4PSZxCGUqITeLeuM/arXBemlWCg== X-Received: by 2002:a7b:c5c7:: with SMTP id n7mr14176725wmk.9.1557694828049; Sun, 12 May 2019 14:00:28 -0700 (PDT) MIME-Version: 1.0 X-BeenThere: linux-amarula@amarulasolutions.com Received: by 2002:a1c:c586:: with SMTP id v128ls86858wmf.1.gmail; Sun, 12 May 2019 14:00:27 -0700 (PDT) X-Received: by 2002:a1c:234c:: with SMTP id j73mr12447817wmj.111.1557694827440; Sun, 12 May 2019 14:00:27 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1557694827; cv=none; d=google.com; s=arc-20160816; b=IjC+V9T4sMXiBkBmwmsGV4cl2mOr91nPZbTHP2LAPGwQnJaGrS1SwQeyy1/LVvNVrx tMYarwf6EBojlBxSaVvwjRQWbWjFfmiU5yxKtaVJtsQaCWNuFl5LI4WnoUB3Wf/N3n3X 53YppULuhs84XPDZzo1F8hlsCRXJmO2fM0mjeIDwzMGVUm/MIS3YsGC3TV5gro+HesK+ fgHSkYnNv+mT1Nl/5V9iuUGAtJEAG5upxl1IwHxKgx9y0XGLQtsuaa3zMj5kk/Bx59hg yo+WC8QLUKGZcTwzVxYdRzK6pcCP+Z1MOvd22wt7NpaZBRoE9Kb30koX2f0VUMKi9Y7R WhDQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=message-id:date:subject:cc:to:from; bh=Pn5D+DtVHhlEmfd9A7Yuma5E+egARKzN260Ej/ljkkM=; b=Q3AOhYsP6eC23RFtf6c6q8XOT7+mlg1kWGp9MF9/97u5ESUbWNbH8dbd5rYKGbfTNW JRtrxQWIiekvyK/KYc6LGDAbYNj04Do8JCFFjmpujsVmQz9OoOHTjPmKzvJGhfMr1u1S Xx6/foi60PboBDN0HgdV4qJR3vW48/U91c5ChTmemFAXJ//s0edPSl11xPXoLhW4ndHw rPrO4H7PbCnnqwbsZWu60e/VphD5pzhCTsbAbhdrkJcrFWnZraUmraSa9OFnecGPsQCw WdRS340DugavJzT6a3dGtzqF8A+tBF2lYG3tb4DKJYAStvnvvRFFsqdItYCSv/KYRBCX AHDw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of um@mutluit.com designates 82.211.8.197 as permitted sender) smtp.mailfrom=um@mutluit.com Received: from mutluit.com (mutluit.com. [82.211.8.197]) by mx.google.com with ESMTP id c203si176137wme.21.2019.05.12.14.00.27 for ; Sun, 12 May 2019 14:00:27 -0700 (PDT) Received-SPF: pass (google.com: domain of um@mutluit.com designates 82.211.8.197 as permitted sender) client-ip=82.211.8.197; Received: from c22-local.mutluit.com (ip4d155212.dynamic.kabel-deutschland.de [77.21.82.18]:31290) by mutluit.com (s2.mutluit.com [82.211.8.197]:25) with ESMTP ([XMail 1.27 ESMTP Server]) id for from ; Sun, 12 May 2019 17:00:24 -0400 From: Uenal Mutlu To: Jens Axboe , Maxime Ripard , Chen-Yu Tsai , linux-ide@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Cc: Uenal Mutlu , linux-sunxi@googlegroups.com, linux-amarula@amarulasolutions.com, Jagan Teki , Pablo Greco , Mark Rutland , Oliver Schinagl , Linus Walleij , Hans de Goede , FUKAUMI Naoki , Andre Przywara , Stefan Monnier Subject: [RFC PATCH v2 RESEND] drivers: ata: ahci_sunxi: Increased SATA/AHCI DMA TX/RX FIFOs Date: Sun, 12 May 2019 22:59:54 +0200 Message-Id: <20190512205954.18435-1-um@mutluit.com> X-Mailer: git-send-email 2.11.0 X-Patchwork-Bot: notify X-Original-Sender: um@mutluit.com X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of um@mutluit.com designates 82.211.8.197 as permitted sender) smtp.mailfrom=um@mutluit.com Content-Type: text/plain; charset="UTF-8" Precedence: list Mailing-list: list linux-amarula@amarulasolutions.com; contact linux-amarula+owners@amarulasolutions.com List-ID: X-Spam-Checked-In-Group: linux-amarula@amarulasolutions.com X-Google-Group-Id: 476853432473 List-Post: , List-Help: , List-Archive: List-Unsubscribe: , Increasing the SATA/AHCI DMA TX/RX FIFOs (P0DMACR.TXTS and .RXTS, ie. TX_TRANSACTION_SIZE and RX_TRANSACTION_SIZE) from default 0x0 each to 0x3 each, gives a write performance boost of 120 MiB/s to 132 MiB/s from lame 36 MiB/s to 45 MiB/s previously. Read performance is about 200 MiB/s. [tested on SSD using dd bs=2K/4K/8K/12K/16K/24K/32K: peak-perf at 12K]. Tested on the Banana Pi R1 (aka Lamobo R1) and Banana Pi M1 SBCs with Allwinner A20 32bit-SoCs (ARMv7-a / arm-linux-gnueabihf). These devices are RaspberryPi-like small devices. This problem of slow SATA write-speed with these small devices lasts now for more than 5 years. Many commentators throughout the years wrongly assumed the slow write speed was a hardware limitation. This patch finally solves the problem, which in fact was just a hard-to-fix software problem (b/c of lack of documentation by the SoC-maker Allwinner Technology). RFC: Since more than about 25 similar SBC/SoC models do use the ahci_sunxi driver, users are encouraged to test it on all the affected boards and give feedback. Lists of the affected sunxi and other boards and SoCs with SATA using the ahci_sunxi driver: $ grep -i -e "^&ahci" arch/arm/boot/dts/sun*dts and http://linux-sunxi.org/SATA#Devices_with_SATA_ports See also http://linux-sunxi.org/Category:Devices_with_SATA_port Patch v2: - Commented the patch in-place in ahci_sunxi.c - With bs=12K and no conv=... passed to dd, the write performance rises further to 132 MiB/s - Changed MB/s to MiB/s - Posted the story behind the patch: http://lkml.iu.edu/hypermail/linux/kernel/1905.1/03506.html - Posted a dd test script to find optimal bs, and some results: https://bit.ly/2YoOzEM Patch v1: - States bs=4K for dd and a write performance of 120 MiB/s Signed-off-by: Uenal Mutlu Acked-by: Maxime Ripard Reviewed-by: Hans de Goede , above your S-o-b --- drivers/ata/ahci_sunxi.c | 47 +++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 45 insertions(+), 2 deletions(-) diff --git a/drivers/ata/ahci_sunxi.c b/drivers/ata/ahci_sunxi.c index 911710643305..ed19f19808c5 100644 --- a/drivers/ata/ahci_sunxi.c +++ b/drivers/ata/ahci_sunxi.c @@ -157,8 +157,51 @@ static void ahci_sunxi_start_engine(struct ata_port *ap) void __iomem *port_mmio = ahci_port_base(ap); struct ahci_host_priv *hpriv = ap->host->private_data; - /* Setup DMA before DMA start */ - sunxi_clrsetbits(hpriv->mmio + AHCI_P0DMACR, 0x0000ff00, 0x00004400); + /* Setup DMA before DMA start + * + * NOTE: A similar SoC with SATA/AHCI by Texas Instruments documents + * this Vendor Specific Port (P0DMACR, aka PxDMACR) in its + * User's Guide document (TMS320C674x/OMAP-L1x Processor + * Serial ATA (SATA) Controller, Literature Number: SPRUGJ8C, + * March 2011, Chapter 4.33 Port DMA Control Register (P0DMACR), + * p.68, https://www.ti.com/lit/ug/sprugj8c/sprugj8c.pdf) + * as equivalent to the following struct: + * + * struct AHCI_P0DMACR_t + * { + * unsigned TXTS : 4, + * RXTS : 4, + * TXABL : 4, + * RXABL : 4, + * Reserved : 16; + * }; + * + * TXTS: Transmit Transaction Size (TX_TRANSACTION_SIZE). + * This field defines the DMA transaction size in DWORDs for + * transmit (system bus read, device write) operation. [...] + * + * RXTS: Receive Transaction Size (RX_TRANSACTION_SIZE). + * This field defines the Port DMA transaction size in DWORDs + * for receive (system bus write, device read) operation. [...] + * + * TXABL: Transmit Burst Limit. + * This field allows software to limit the VBUSP master read + * burst size. [...] + * + * RXABL: Receive Burst Limit. + * Allows software to limit the VBUSP master write burst + * size. [...] + * + * Reserved: Reserved. + * + * + * NOTE: According to the above document, the following alternative + * to the code below could perhaps be a better option + * (or preparation) for possible further improvements later: + * sunxi_clrsetbits(hpriv->mmio + AHCI_P0DMACR, 0x0000ffff, + * 0x00000033); + */ + sunxi_clrsetbits(hpriv->mmio + AHCI_P0DMACR, 0x0000ffff, 0x00004433); /* Start DMA */ sunxi_setbits(port_mmio + PORT_CMD, PORT_CMD_START);