From patchwork Mon Aug 6 22:29:07 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Janusz Krzysztofik X-Patchwork-Id: 954263 X-Patchwork-Delegate: miquel.raynal@bootlin.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.infradead.org (client-ip=2607:7c80:54:e::133; helo=bombadil.infradead.org; envelope-from=linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="ukqJ2jjh"; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="VVRKU1Fk"; dkim-atps=neutral Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:e::133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 41ksmL2Z9vz9s3x for ; Tue, 7 Aug 2018 08:30:26 +1000 (AEST) 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:MIME-Version:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:References: In-Reply-To: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:List-Owner; bh=CtC9pVAbziqKLbgvejGNkKRTkB8aOtDyCpP7NjEIz68=; b=ukqJ2jjh64abeoX9ksbUGV0viD H0e6UtckS26M4V6jTXW/7Y45PuDadJA7qoKC9Qu9RFtcCJhQyNiGPgzp/1Ay0FCg0XoQS9lmf+dY2 fiIPm5i0Qvkuk1c4C63z+HetwpNbAAu34GyANDl1VSExD/1v+oqjXeUAGkdGCviaFglaN6iB5H6aP Kr7mdY1bR3zDi3YmPoLK/xLduL9sneSac7O+rzOfJhCDs9kub5g7TKu/KK5sL3MmdBipPL+70goRB NvGhozzfQqX8iR5MtirZ1pspmukrAukHTM+35JWKRnv48dnBAmbFeazWZzIgaW3v9lqpBVnZJRfTf vs7+WkUw==; 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 1fmo15-0006NE-2F; Mon, 06 Aug 2018 22:30:19 +0000 Received: from mail-lj1-x243.google.com ([2a00:1450:4864:20::243]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1fmo0V-0005Qn-Nw; Mon, 06 Aug 2018 22:29:45 +0000 Received: by mail-lj1-x243.google.com with SMTP id v9-v6so11861857ljk.4; Mon, 06 Aug 2018 15:29:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=Y+2LyEwByW4zxwwsLlaC1XUGA47kDs2qqVs9Rm/IVKw=; b=VVRKU1FkDhRKCs/bp0gKnclYBzSXh+B6bnxWekrUKOTBVYmu0IRVRSNbSk39oBMtbX chWoCByBdLQ6EH+iBbMrgv4mdt28IbSSr4Xbprbu1/rT5k7GkpZI27jYQ1NcFEF5jHPw FlbKG+QOKca8kHcPqPtbLf7z+oxH766qCjcYF2H0mA/IBM270yEM2SXoicAVOr4+NV4A +Ht2oWIzrwitqQXgSCoZD1Zk5iY6TEAb0pWVLC4FkD0YJrvb49NXo/eMl2dSCL/1hMVI QI9B1X3A4X8WH1PIlrBqt2oCZjaV3rQsPbJWAPtoGjnoIJvBewGXctM9xz8tRyETC4h8 nuJw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=Y+2LyEwByW4zxwwsLlaC1XUGA47kDs2qqVs9Rm/IVKw=; b=WPnFQCj8hvnINSNYJW7aC0oTF/1b2KaNkvlEj8sSvAq6MM0Th4WYcbdzqZzQ+Ebz/A eZarM9z6mftPSvGAQk/I8oH8EOChAF+Gvw6Nr33lKp2mpiUJWLkVRDZJLQnvbN3HR4jF cpXEhyndefDJ2PatNW27Ze5zXOjZ6WEq+a1/UELOdtHLfhY1mMQolKmK1mJrXfaRVvXt Pmgf8ouCokv42QqZOUp9GKWnx6uS5sLjbDwMHeRW8vgmTxPoSoSyzurU6b3fpQaDtWuQ Zrkk76L/NRs6iWqxqWbGXl83s2kRZMdreCMQnbQ7lfWdSkssVMkT16Y6Lf2DQn2Lwti2 qSbg== X-Gm-Message-State: AOUpUlFnDsexTqPyDI+5B6zsGM9IZrQeFOOvivi/YsB1KRxPslnSyhZ6 93Xg8DIlXTvs9mEXLt7XAkI= X-Google-Smtp-Source: AAOMgpdFORBMvg9yWcrZM5IFEvZ3StNHD23q85ghgy1e+ZYuXriIDAmi9G3G2iV7WMKXEf0JQaoMIw== X-Received: by 2002:a2e:63c5:: with SMTP id s66-v6mr14441401lje.23.1533594568957; Mon, 06 Aug 2018 15:29:28 -0700 (PDT) Received: from z50.lan (93-181-165-181.internetia.net.pl. [93.181.165.181]) by smtp.gmail.com with ESMTPSA id o4-v6sm2438561ljc.67.2018.08.06.15.29.27 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 06 Aug 2018 15:29:28 -0700 (PDT) From: Janusz Krzysztofik To: Boris Brezillon , Linus Walleij Subject: [RFC PATCH v2 01/12] mtd: rawnand: ams-delta: Assign mtd->dev.parent, not mtd->owner Date: Tue, 7 Aug 2018 00:29:07 +0200 Message-Id: <20180806222918.12644-2-jmkrzyszt@gmail.com> X-Mailer: git-send-email 2.16.4 In-Reply-To: <20180806222918.12644-1-jmkrzyszt@gmail.com> References: <20180718235710.18242-1-jmkrzyszt@gmail.com> <20180806222918.12644-1-jmkrzyszt@gmail.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20180806_152943_782273_4540DF85 X-CRM114-Status: GOOD ( 14.31 ) X-Spam-Score: 0.5 (/) X-Spam-Report: SpamAssassin version 3.4.1 on bombadil.infradead.org summary: Content analysis details: (0.5 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at http://www.dnswl.org/, no trust [2a00:1450:4864:20:0:0:0:243 listed in] [list.dnswl.org] 0.6 HK_RANDOM_ENVFROM Envelope sender username looks random 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (jmkrzyszt[at]gmail.com) -0.0 SPF_PASS SPF: sender matches SPF record 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-omap@vger.kernel.org, Jonathan Corbet , Tony Lindgren , Richard Weinberger , linux-gpio@vger.kernel.org, Aaro Koskinen , linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Marek Vasut , Janusz Krzysztofik , linux-mtd@lists.infradead.org, Miquel Raynal , Brian Norris , David Woodhouse , linux-arm-kernel@lists.infradead.org MIME-Version: 1.0 Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org Fix missing mtd->dev.parent assignment and drop useless mtd->owner. Signed-off-by: Janusz Krzysztofik Reviewed-by: Boris Brezillon --- drivers/mtd/nand/raw/ams-delta.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/mtd/nand/raw/ams-delta.c b/drivers/mtd/nand/raw/ams-delta.c index 2a8872ebd14a..af313c620264 100644 --- a/drivers/mtd/nand/raw/ams-delta.c +++ b/drivers/mtd/nand/raw/ams-delta.c @@ -162,7 +162,7 @@ static int ams_delta_init(struct platform_device *pdev) } ams_delta_mtd = nand_to_mtd(this); - ams_delta_mtd->owner = THIS_MODULE; + ams_delta_mtd->dev.parent = &pdev->dev; /* * Don't try to request the memory region from here, From patchwork Mon Aug 6 22:29:08 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Janusz Krzysztofik X-Patchwork-Id: 954272 X-Patchwork-Delegate: miquel.raynal@bootlin.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.infradead.org (client-ip=2607:7c80:54:e::133; helo=bombadil.infradead.org; envelope-from=linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="FcxfEh2D"; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="lGp59bsY"; dkim-atps=neutral Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:e::133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 41ksn43WGQz9s4c for ; Tue, 7 Aug 2018 08:31:04 +1000 (AEST) 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:MIME-Version:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:References: In-Reply-To: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:List-Owner; bh=AQz+0//ws9MKYbrYH/YsEuDU75GWhQHcTJV/K9Z7U1I=; b=FcxfEh2D21tfhSsMfBjt+BDRpz yjXhQQK82oTPn5nhoypkaov3/9QwG5ZsF2HfvNLSwTjVAyQlCShotUPypcjxMqLMaTxumGdYTDn1z xX+g+XQz/GGdbPC2RUlUx3jzm6+7wcys9Op1NnUSVXnm9/oYBJ3OW1AaPOKVCbi2/JILsoGzhfxRa uE6HaL3WbAiM456KSkkFK7imAqgGNRi+OADDPcZceEK2bQpj/KezXYVwPDotaNiBEzqTJKtlji8qh K5JzQ7qUraby8deHIoi0o3Zm+KeWr25Tcu9C6052iYzUfQbOY+w7TbGjXpJlWVQGyogqPIsjP7mOe 4EwWyZEw==; 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 1fmo1e-0007M6-Nd; Mon, 06 Aug 2018 22:30:54 +0000 Received: from mail-lj1-x242.google.com ([2a00:1450:4864:20::242]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1fmo0X-0005Qo-Ms; Mon, 06 Aug 2018 22:29:50 +0000 Received: by mail-lj1-x242.google.com with SMTP id l15-v6so11850409lji.6; Mon, 06 Aug 2018 15:29:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=Zd3kEAiZ7mszPNOyJOnF5cmgoqqIeUq9AivweCn5fTk=; b=lGp59bsYE+aBAfOjWJbzm9g57ekVfHo8Nt5TvBLins74QYXQ0UA71Csg2UBADGrR7a qX0FQWrOtlD+S8o9gbSo1uKikoEvAWfcbMGrbnYopgYXfi3B8ptiH5fLyf4oRdEYujvB n8GK/Xc6FvWYDoB1kTfDdhfoN/BUraYQvRRxdwl8WVdqL6lqJwmxAtfuyXkz4KIKWJvq Aba9v2u2UpKY6hll1dnS00eq3Jmuo9Z1g0fTupqoIZjSCk8TWee93usrIzYqulSWsonl AgulUan/giffOhupMPchQGd01ect8sE2JijUzG63Bm4D6RQTmXpdif7tnBhT1vu4BmU+ D4rQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=Zd3kEAiZ7mszPNOyJOnF5cmgoqqIeUq9AivweCn5fTk=; b=mHABT9bLKfDjyoFOLuPKduQ9ZPC5vymQaukaffL+RrD6El9NVXS1Jgdskjutg4cISm hamQdle+CyCsoLiElvAezZfzjMuRp6e4dvVGkzfsHhwCXZbQgoHT2VcBX53PpURfXx5d UxUhj1xNImbLg6M6zVJ77d9ybPTZWGc9QcC3lAyBTseK4EFIuaBElzm3e7EbrUnbtFl/ sn71mhHEdbiDK3eUTmZho8aBXsPUr9jiNk2GpJarEMHTmGNYJDHVzXnHsABDnHTfWoN1 JTLUC3BQL/zM678qBr+oRBisGYiAi8rcb2lsH7VRbDC3g1A5EPaV7cZ8b9yrwVqXS0CP ybbw== X-Gm-Message-State: AOUpUlF9clQZsTdryNJTFbB+Th7kxhSjpgoSOyxrFCpDkqTTKBoFKbpS uLr9cNvwEpRQX9amTf/5fdY= X-Google-Smtp-Source: AAOMgpdIOVkqRRGOjgvjo7z5QXF/qtNzLpqiEZwK0pbgZl1Y+wmOaTTGjsiDN+rCuqwyw6DIxJ/2cA== X-Received: by 2002:a2e:4e02:: with SMTP id c2-v6mr13227006ljb.108.1533594570462; Mon, 06 Aug 2018 15:29:30 -0700 (PDT) Received: from z50.lan (93-181-165-181.internetia.net.pl. [93.181.165.181]) by smtp.gmail.com with ESMTPSA id o4-v6sm2438561ljc.67.2018.08.06.15.29.28 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 06 Aug 2018 15:29:29 -0700 (PDT) From: Janusz Krzysztofik To: Boris Brezillon , Linus Walleij Subject: [RFC PATCH v2 02/12] mtd: rawnand: ams-delta: Use private structure Date: Tue, 7 Aug 2018 00:29:08 +0200 Message-Id: <20180806222918.12644-3-jmkrzyszt@gmail.com> X-Mailer: git-send-email 2.16.4 In-Reply-To: <20180806222918.12644-1-jmkrzyszt@gmail.com> References: <20180718235710.18242-1-jmkrzyszt@gmail.com> <20180806222918.12644-1-jmkrzyszt@gmail.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20180806_152946_050672_ABEF67AE X-CRM114-Status: GOOD ( 18.55 ) X-Spam-Score: 0.5 (/) X-Spam-Report: SpamAssassin version 3.4.1 on bombadil.infradead.org summary: Content analysis details: (0.5 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at http://www.dnswl.org/, no trust [2a00:1450:4864:20:0:0:0:242 listed in] [list.dnswl.org] 0.6 HK_RANDOM_ENVFROM Envelope sender username looks random 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (jmkrzyszt[at]gmail.com) -0.0 SPF_PASS SPF: sender matches SPF record 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-omap@vger.kernel.org, Jonathan Corbet , Tony Lindgren , Richard Weinberger , linux-gpio@vger.kernel.org, Aaro Koskinen , linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Marek Vasut , Janusz Krzysztofik , linux-mtd@lists.infradead.org, Miquel Raynal , Brian Norris , David Woodhouse , linux-arm-kernel@lists.infradead.org MIME-Version: 1.0 Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org Introduce a driver private structure and allocate it on device probe. Use it for storing nand_chip structure, GPIO descriptors prevoiusly stored in static variables as well as io_base pointer previously passed as nand controller data or platform driver data. Subsequent patches may populate the structure with more members as needed. Signed-off-by: Janusz Krzysztofik Reviewed-by: Boris Brezillon --- drivers/mtd/nand/raw/ams-delta.c | 126 +++++++++++++++++++++------------------ 1 file changed, 69 insertions(+), 57 deletions(-) diff --git a/drivers/mtd/nand/raw/ams-delta.c b/drivers/mtd/nand/raw/ams-delta.c index af313c620264..48233d638d2a 100644 --- a/drivers/mtd/nand/raw/ams-delta.c +++ b/drivers/mtd/nand/raw/ams-delta.c @@ -34,14 +34,18 @@ /* * MTD structure for E3 (Delta) */ -static struct mtd_info *ams_delta_mtd = NULL; -static struct gpio_desc *gpiod_rdy; -static struct gpio_desc *gpiod_nce; -static struct gpio_desc *gpiod_nre; -static struct gpio_desc *gpiod_nwp; -static struct gpio_desc *gpiod_nwe; -static struct gpio_desc *gpiod_ale; -static struct gpio_desc *gpiod_cle; + +struct ams_delta_nand { + struct nand_chip nand_chip; + struct gpio_desc *gpiod_rdy; + struct gpio_desc *gpiod_nce; + struct gpio_desc *gpiod_nre; + struct gpio_desc *gpiod_nwp; + struct gpio_desc *gpiod_nwe; + struct gpio_desc *gpiod_ale; + struct gpio_desc *gpiod_cle; + void __iomem *io_base; +}; /* * Define partitions for flash devices @@ -71,26 +75,28 @@ static const struct mtd_partition partition_info[] = { static void ams_delta_write_byte(struct mtd_info *mtd, u_char byte) { struct nand_chip *this = mtd_to_nand(mtd); - void __iomem *io_base = (void __iomem *)nand_get_controller_data(this); + struct ams_delta_nand *priv = nand_get_controller_data(this); + void __iomem *io_base = priv->io_base; writew(0, io_base + OMAP_MPUIO_IO_CNTL); writew(byte, this->IO_ADDR_W); - gpiod_set_value(gpiod_nwe, 0); + gpiod_set_value(priv->gpiod_nwe, 0); ndelay(40); - gpiod_set_value(gpiod_nwe, 1); + gpiod_set_value(priv->gpiod_nwe, 1); } static u_char ams_delta_read_byte(struct mtd_info *mtd) { u_char res; struct nand_chip *this = mtd_to_nand(mtd); - void __iomem *io_base = (void __iomem *)nand_get_controller_data(this); + struct ams_delta_nand *priv = nand_get_controller_data(this); + void __iomem *io_base = priv->io_base; - gpiod_set_value(gpiod_nre, 0); + gpiod_set_value(priv->gpiod_nre, 0); ndelay(40); writew(~0, io_base + OMAP_MPUIO_IO_CNTL); res = readw(this->IO_ADDR_R); - gpiod_set_value(gpiod_nre, 1); + gpiod_set_value(priv->gpiod_nre, 1); return res; } @@ -123,11 +129,13 @@ static void ams_delta_read_buf(struct mtd_info *mtd, u_char *buf, int len) static void ams_delta_hwcontrol(struct mtd_info *mtd, int cmd, unsigned int ctrl) { + struct nand_chip *this = mtd_to_nand(mtd); + struct ams_delta_nand *priv = nand_get_controller_data(this); if (ctrl & NAND_CTRL_CHANGE) { - gpiod_set_value(gpiod_nce, !(ctrl & NAND_NCE)); - gpiod_set_value(gpiod_cle, !!(ctrl & NAND_CLE)); - gpiod_set_value(gpiod_ale, !!(ctrl & NAND_ALE)); + gpiod_set_value(priv->gpiod_nce, !(ctrl & NAND_NCE)); + gpiod_set_value(priv->gpiod_cle, !!(ctrl & NAND_CLE)); + gpiod_set_value(priv->gpiod_ale, !!(ctrl & NAND_ALE)); } if (cmd != NAND_CMD_NONE) @@ -136,7 +144,10 @@ static void ams_delta_hwcontrol(struct mtd_info *mtd, int cmd, static int ams_delta_nand_ready(struct mtd_info *mtd) { - return gpiod_get_value(gpiod_rdy); + struct nand_chip *this = mtd_to_nand(mtd); + struct ams_delta_nand *priv = nand_get_controller_data(this); + + return gpiod_get_value(priv->gpiod_rdy); } @@ -145,7 +156,9 @@ static int ams_delta_nand_ready(struct mtd_info *mtd) */ static int ams_delta_init(struct platform_device *pdev) { + struct ams_delta_nand *priv; struct nand_chip *this; + struct mtd_info *mtd; struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0); void __iomem *io_base; int err = 0; @@ -154,15 +167,16 @@ static int ams_delta_init(struct platform_device *pdev) return -ENXIO; /* Allocate memory for MTD device structure and private data */ - this = kzalloc(sizeof(struct nand_chip), GFP_KERNEL); - if (!this) { + priv = devm_kzalloc(&pdev->dev, sizeof(struct ams_delta_nand), + GFP_KERNEL); + if (!priv) { pr_warn("Unable to allocate E3 NAND MTD device structure.\n"); - err = -ENOMEM; - goto out; + return -ENOMEM; } + this = &priv->nand_chip; - ams_delta_mtd = nand_to_mtd(this); - ams_delta_mtd->dev.parent = &pdev->dev; + mtd = nand_to_mtd(this); + mtd->dev.parent = &pdev->dev; /* * Don't try to request the memory region from here, @@ -177,7 +191,8 @@ static int ams_delta_init(struct platform_device *pdev) goto out_free; } - nand_set_controller_data(this, (void *)io_base); + priv->io_base = io_base; + nand_set_controller_data(this, priv); /* Set address of NAND IO lines */ this->IO_ADDR_R = io_base + OMAP_MPUIO_INPUT_LATCH; @@ -187,14 +202,14 @@ static int ams_delta_init(struct platform_device *pdev) this->read_buf = ams_delta_read_buf; this->cmd_ctrl = ams_delta_hwcontrol; - gpiod_rdy = devm_gpiod_get_optional(&pdev->dev, "rdy", GPIOD_IN); - if (IS_ERR(gpiod_rdy)) { - err = PTR_ERR(gpiod_rdy); + priv->gpiod_rdy = devm_gpiod_get_optional(&pdev->dev, "rdy", GPIOD_IN); + if (IS_ERR(priv->gpiod_rdy)) { + err = PTR_ERR(priv->gpiod_rdy); dev_warn(&pdev->dev, "RDY GPIO request failed (%d)\n", err); goto out_mtd; } - if (gpiod_rdy) + if (priv->gpiod_rdy) this->dev_ready = ams_delta_nand_ready; /* 25 us command delay time */ @@ -202,66 +217,64 @@ static int ams_delta_init(struct platform_device *pdev) this->ecc.mode = NAND_ECC_SOFT; this->ecc.algo = NAND_ECC_HAMMING; - platform_set_drvdata(pdev, io_base); + platform_set_drvdata(pdev, priv); /* Set chip enabled, but */ - gpiod_nwp = devm_gpiod_get(&pdev->dev, "nwp", GPIOD_OUT_HIGH); - if (IS_ERR(gpiod_nwp)) { - err = PTR_ERR(gpiod_nwp); + priv->gpiod_nwp = devm_gpiod_get(&pdev->dev, "nwp", GPIOD_OUT_HIGH); + if (IS_ERR(priv->gpiod_nwp)) { + err = PTR_ERR(priv->gpiod_nwp); dev_err(&pdev->dev, "NWP GPIO request failed (%d)\n", err); goto out_mtd; } - gpiod_nce = devm_gpiod_get(&pdev->dev, "nce", GPIOD_OUT_HIGH); - if (IS_ERR(gpiod_nce)) { - err = PTR_ERR(gpiod_nce); + priv->gpiod_nce = devm_gpiod_get(&pdev->dev, "nce", GPIOD_OUT_HIGH); + if (IS_ERR(priv->gpiod_nce)) { + err = PTR_ERR(priv->gpiod_nce); dev_err(&pdev->dev, "NCE GPIO request failed (%d)\n", err); goto out_mtd; } - gpiod_nre = devm_gpiod_get(&pdev->dev, "nre", GPIOD_OUT_HIGH); - if (IS_ERR(gpiod_nre)) { - err = PTR_ERR(gpiod_nre); + priv->gpiod_nre = devm_gpiod_get(&pdev->dev, "nre", GPIOD_OUT_HIGH); + if (IS_ERR(priv->gpiod_nre)) { + err = PTR_ERR(priv->gpiod_nre); dev_err(&pdev->dev, "NRE GPIO request failed (%d)\n", err); goto out_mtd; } - gpiod_nwe = devm_gpiod_get(&pdev->dev, "nwe", GPIOD_OUT_HIGH); - if (IS_ERR(gpiod_nwe)) { - err = PTR_ERR(gpiod_nwe); + priv->gpiod_nwe = devm_gpiod_get(&pdev->dev, "nwe", GPIOD_OUT_HIGH); + if (IS_ERR(priv->gpiod_nwe)) { + err = PTR_ERR(priv->gpiod_nwe); dev_err(&pdev->dev, "NWE GPIO request failed (%d)\n", err); goto out_mtd; } - gpiod_ale = devm_gpiod_get(&pdev->dev, "ale", GPIOD_OUT_LOW); - if (IS_ERR(gpiod_ale)) { - err = PTR_ERR(gpiod_ale); + priv->gpiod_ale = devm_gpiod_get(&pdev->dev, "ale", GPIOD_OUT_LOW); + if (IS_ERR(priv->gpiod_ale)) { + err = PTR_ERR(priv->gpiod_ale); dev_err(&pdev->dev, "ALE GPIO request failed (%d)\n", err); goto out_mtd; } - gpiod_cle = devm_gpiod_get(&pdev->dev, "cle", GPIOD_OUT_LOW); - if (IS_ERR(gpiod_cle)) { - err = PTR_ERR(gpiod_cle); + priv->gpiod_cle = devm_gpiod_get(&pdev->dev, "cle", GPIOD_OUT_LOW); + if (IS_ERR(priv->gpiod_cle)) { + err = PTR_ERR(priv->gpiod_cle); dev_err(&pdev->dev, "CLE GPIO request failed (%d)\n", err); goto out_mtd; } /* Scan to find existence of the device */ - err = nand_scan(ams_delta_mtd, 1); + err = nand_scan(mtd, 1); if (err) goto out_mtd; /* Register the partitions */ - mtd_device_register(ams_delta_mtd, partition_info, - ARRAY_SIZE(partition_info)); + mtd_device_register(mtd, partition_info, ARRAY_SIZE(partition_info)); goto out; out_mtd: iounmap(io_base); out_free: - kfree(this); out: return err; } @@ -271,16 +284,15 @@ static int ams_delta_init(struct platform_device *pdev) */ static int ams_delta_cleanup(struct platform_device *pdev) { - void __iomem *io_base = platform_get_drvdata(pdev); + struct ams_delta_nand *priv = platform_get_drvdata(pdev); + struct mtd_info *mtd = nand_to_mtd(&priv->nand_chip); + void __iomem *io_base = priv->io_base; /* Release resources, unregister device */ - nand_release(ams_delta_mtd); + nand_release(mtd); iounmap(io_base); - /* Free the MTD device structure */ - kfree(mtd_to_nand(ams_delta_mtd)); - return 0; } From patchwork Mon Aug 6 22:29:09 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Janusz Krzysztofik X-Patchwork-Id: 954274 X-Patchwork-Delegate: miquel.raynal@bootlin.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.infradead.org (client-ip=2607:7c80:54:e::133; helo=bombadil.infradead.org; envelope-from=linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="aT7OashL"; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="UzmOCFOq"; dkim-atps=neutral Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:e::133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 41ksnj24M2z9s3x for ; Tue, 7 Aug 2018 08:31:37 +1000 (AEST) 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:MIME-Version:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:References: In-Reply-To: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:List-Owner; bh=xV5YDhEJPJdeCFyDqoyN363feihKKcHz4UsrKFzIPuU=; b=aT7OashLkN7slqi9Rhcxz1jQ5U ShRat5YZPOVjfADeXTYbrKh9oyXJ4nAKUSQAtF2P/XK2p8qroCvOPngSILMNm9TO15vYQMPHF7BK+ 5TQzowLZvPdzlJY3GlThKilszwhmHVMP+W3IwiVh23m5SGVw8n1I52XAwpJrCe3QkqOqMAdYCsyas aVUeJHBZY4vrSVB14oS/PSi3GaybqQynoECXiY0jsA0Z2BfUENO/G27z3rPGwxMdqUeJqREmOaDkG GUsncd08TWIOUAd/nEopBME9pHRpUCfE+MicdMJnnbcEa+qWW/XDbPFQt/T3sMYqao5oFrVv0ywME XxIUOceQ==; 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 1fmo2E-0008Rk-I9; Mon, 06 Aug 2018 22:31:30 +0000 Received: from mail-lf1-x144.google.com ([2a00:1450:4864:20::144]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1fmo0Y-0005Qq-9C; Mon, 06 Aug 2018 22:29:55 +0000 Received: by mail-lf1-x144.google.com with SMTP id u202-v6so10191460lff.9; Mon, 06 Aug 2018 15:29:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=qE651b7//Tbsbpcejonm6kJTFp1EXDTRFlY4lg7NZoU=; b=UzmOCFOqDbEGpqK5M4xDrxNAXdA3kP3pyZWsy3bzWt+QEaIOW0BJvYmUtU0eHMSfWa t5oVqRitJyP6DHIEZXrdHyovb1X2Z36+gu4NJLjnfQES3lDRH7S2v9e3yapUI7mhjh83 kn+SzD0tfX6JQV5IqXDNdFLEdYJPNEbuVpUZJV9TQSKe+hJ1bPnYIoOieYMLOVLTQzO7 SPikvaqzL/0F0YuqFhAOJeSD562MHRn2wn0OMrX6KZWDezmsDRvMLqGvOEHHqLslcPc4 nST822MJLIEu+ih9X92tJjWoNSpMGhYy1tVBsJtaY3+Y1cVLKcMuhduwqC/YOBJs3xxx wp1w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=qE651b7//Tbsbpcejonm6kJTFp1EXDTRFlY4lg7NZoU=; b=PtDsJ8eBtTNZRkQMvPeAZMTmiDAKz5Ved0sxj9L0a3Enhp0PqQklG92VEjUKIi63oz zIM/FEBYpIp8g78zjFNJ+vcqg2SkCbB7aE/V1szVqFZz0rKtOlF2I13FE2vDEceZ8nn/ Qenxw8r0JRlfJ/FCb4j/NUgAORRkebWT/MCMPKsYZD/hvVsBbh8K8Khwei6H4JVNilhr lzF/0cBgZz43sobaTPw622ECByrTxmXOqtjvFoABRsgmesM9Wt3VPPTwV2+r+O2cRgJ8 01B1ZRuvYFP1QMLKx6V1hlt5pXwUupbvGsJfNYPRUWh9AHz9t7KCoQ0QP1fvzx+/obLZ I1zg== X-Gm-Message-State: AOUpUlEwB7fOukjyuyunQfO+PMdrArPUp3eDJ3r9GWVQTYfT5EvT5QAn aqbaODyXAzqTRgk3deuKTpo= X-Google-Smtp-Source: AAOMgpfPA1GoyiViwrZ+zcc9ED1kWg0CchOueaRUSh+QIUJrLIOeXMRKB062ROUOwBPzBoziWlnPxg== X-Received: by 2002:a19:4e06:: with SMTP id c6-v6mr11876651lfb.30.1533594571832; Mon, 06 Aug 2018 15:29:31 -0700 (PDT) Received: from z50.lan (93-181-165-181.internetia.net.pl. [93.181.165.181]) by smtp.gmail.com with ESMTPSA id o4-v6sm2438561ljc.67.2018.08.06.15.29.30 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 06 Aug 2018 15:29:31 -0700 (PDT) From: Janusz Krzysztofik To: Boris Brezillon , Linus Walleij Subject: [RFC PATCH v2 03/12] ARM: OMAP1: ams-delta: Provide GPIO lookup table for NAND data port Date: Tue, 7 Aug 2018 00:29:09 +0200 Message-Id: <20180806222918.12644-4-jmkrzyszt@gmail.com> X-Mailer: git-send-email 2.16.4 In-Reply-To: <20180806222918.12644-1-jmkrzyszt@gmail.com> References: <20180718235710.18242-1-jmkrzyszt@gmail.com> <20180806222918.12644-1-jmkrzyszt@gmail.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20180806_152946_702378_C4B0C6E6 X-CRM114-Status: GOOD ( 14.28 ) X-Spam-Score: 0.5 (/) X-Spam-Report: SpamAssassin version 3.4.1 on bombadil.infradead.org summary: Content analysis details: (0.5 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at http://www.dnswl.org/, no trust [2a00:1450:4864:20:0:0:0:144 listed in] [list.dnswl.org] 0.6 HK_RANDOM_ENVFROM Envelope sender username looks random 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (jmkrzyszt[at]gmail.com) -0.0 SPF_PASS SPF: sender matches SPF record 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-omap@vger.kernel.org, Jonathan Corbet , Tony Lindgren , Richard Weinberger , linux-gpio@vger.kernel.org, Aaro Koskinen , linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Marek Vasut , Janusz Krzysztofik , linux-mtd@lists.infradead.org, Miquel Raynal , Brian Norris , David Woodhouse , linux-arm-kernel@lists.infradead.org MIME-Version: 1.0 Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org Data port used by Amstrad Delta NAND driver is actually an OMAP MPUIO device, already under control of gpio-omap driver. The NAND driver gets access to the port by ioremapping it and performs read/write operations. That is done without any proteciton from other users legally manipulating the port pins over GPIO API. The plan is to convert the driver to access the port over GPIO consumer API. Before that is implemented, the driver can already obtain exclusive access to the port by requesting an array of its GPIO descriptors. Add respective entries to the NAND GPIO lookup table. Signed-off-by: Janusz Krzysztofik Reviewed-by: Boris Brezillon Reviewed-by: Linus Walleij --- arch/arm/mach-omap1/board-ams-delta.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/arch/arm/mach-omap1/board-ams-delta.c b/arch/arm/mach-omap1/board-ams-delta.c index eedacdfe9725..16f7bbe47607 100644 --- a/arch/arm/mach-omap1/board-ams-delta.c +++ b/arch/arm/mach-omap1/board-ams-delta.c @@ -337,7 +337,8 @@ static struct platform_device ams_delta_nand_device = { .resource = ams_delta_nand_resources, }; -#define OMAP_GPIO_LABEL "gpio-0-15" +#define OMAP_GPIO_LABEL "gpio-0-15" +#define OMAP_MPUIO_LABEL "mpuio" static struct gpiod_lookup_table ams_delta_nand_gpio_table = { .table = { @@ -349,6 +350,14 @@ static struct gpiod_lookup_table ams_delta_nand_gpio_table = { GPIO_LOOKUP(LATCH2_LABEL, LATCH2_PIN_NAND_NWE, "nwe", 0), GPIO_LOOKUP(LATCH2_LABEL, LATCH2_PIN_NAND_ALE, "ale", 0), GPIO_LOOKUP(LATCH2_LABEL, LATCH2_PIN_NAND_CLE, "cle", 0), + GPIO_LOOKUP_IDX(OMAP_MPUIO_LABEL, 0, "data", 0, 0), + GPIO_LOOKUP_IDX(OMAP_MPUIO_LABEL, 1, "data", 1, 0), + GPIO_LOOKUP_IDX(OMAP_MPUIO_LABEL, 2, "data", 2, 0), + GPIO_LOOKUP_IDX(OMAP_MPUIO_LABEL, 3, "data", 3, 0), + GPIO_LOOKUP_IDX(OMAP_MPUIO_LABEL, 4, "data", 4, 0), + GPIO_LOOKUP_IDX(OMAP_MPUIO_LABEL, 5, "data", 5, 0), + GPIO_LOOKUP_IDX(OMAP_MPUIO_LABEL, 6, "data", 6, 0), + GPIO_LOOKUP_IDX(OMAP_MPUIO_LABEL, 7, "data", 7, 0), { }, }, }; From patchwork Mon Aug 6 22:29:10 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Janusz Krzysztofik X-Patchwork-Id: 954276 X-Patchwork-Delegate: miquel.raynal@bootlin.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.infradead.org (client-ip=2607:7c80:54:e::133; helo=bombadil.infradead.org; envelope-from=linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="UYP9Dp9H"; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="IcxD45QP"; dkim-atps=neutral Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:e::133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 41ksp7114qz9s3x for ; Tue, 7 Aug 2018 08:31:59 +1000 (AEST) 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:MIME-Version:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:References: In-Reply-To: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:List-Owner; bh=zs+RGURPLhooJDlhC/6RWmZCts6GBL3K5kiYoOu9vmw=; b=UYP9Dp9H/yFzQLGO42NnwKFR+y vQ0+FHUEM8AoMkTVJWKhWL/eEskH75ySqqM3jk8ZXo/b+m6AzEyUjSme9QxG00xlj4eUQmy6Fc0hU X8r6ff62or9lwABWyhaA/AfEh55LF4lCZHVkB9EP5DzYP6GSdMIsJUW0k3UFrcvQwSEIiMprv0woV 0B8acFXnJT5KMkGPHZpJ3Fh6bV1IPP7dE6k8GUSsa8Q5qZhCkl3xy7vqdq3rCQ8JlV5YCMtVvRxcy SuXvbTSxEwOhZQTO7wPqGi3w42DiM2GkVV9DhZo9tEDW6oz8BmT8S+Qhn9TI43qILcg0T/Dh+JMiP vodpVawg==; 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 1fmo2a-0000ff-H7; Mon, 06 Aug 2018 22:31:52 +0000 Received: from mail-lf1-x144.google.com ([2a00:1450:4864:20::144]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1fmo0Y-0005Qy-9A; Mon, 06 Aug 2018 22:29:55 +0000 Received: by mail-lf1-x144.google.com with SMTP id a4-v6so10208121lff.5; Mon, 06 Aug 2018 15:29:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=8Ttieek8EVt2mQNwFsLifOKl+ByDrQm129q1TWk/MX0=; b=IcxD45QPCPRzl8lvaY9qsjTGsRNs6gWfl2bUuk41J5q5nlNd/Fj4+pM9RgOb76Q+U2 QCaN54RsUEQdvWW5sJ6YABUFPk05R+SVe3un3mnPX5pEBfeyTIqCWgNFFhTv7DMayYO1 UWFExZhfYv+7AKsNAu2/dSz33ocTaOIo9k8JoVwPEmic4aEPZM5DcDJByX2djQxqgyex YQuNwHMaR9bdjr2mRGVeR2U+QzEyRM1W4ZNJ39DSnyZRikWRiSe7o8TAIECDNENqXRUR msBwhq4dzMfYMLobnm2H8/kTmAjU9b2SnxkUq/L3HdWgUfgClF1aUNt7fKU4pEJnT0Rs eRJw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=8Ttieek8EVt2mQNwFsLifOKl+ByDrQm129q1TWk/MX0=; b=M5FKNXCBEbTxB5EFlo6em60b97dWq8nGsQPWOYaKXI4Txqjy9XvQFCv7a3XngHSA9O E97WyoNwGraCoPv6MyN/K0dAMkpEzmQR9AFRi+gLE/4FprBa6Ech33JRpymq5DJ5fxMt ewJqJjWlWRlyO8plC4NgRgfyadLz+ylqZw59piXczrYv7pBSymAcgnqqt6nfG8PM9Lvj P7zM+GoHV/yxTIJu+G++OuxoL7VwampbkXynCqOfr/ZMgxoP1zlNLQY5VtoJObWHDGYY wS9jnqj4axOib7FgfYZHDrY/Gkm9XcLQwAE1cFoFGTdkuAL+gIkbcZS9UixDHDDXHfVl BG/A== X-Gm-Message-State: AOUpUlEJ8CdklA0fGasRtnnuymbinikEUluQyReJ1x7gOVXni39PPuw6 NzCnGHZJo/O7yoCbCZS+cFI= X-Google-Smtp-Source: AAOMgpelyUDqoYptEF511iNccJY2bUI4ITVIU7db9touIXSemg7s5zfKdMCLVZdy7hJLf7GIx+2KPA== X-Received: by 2002:a19:c64c:: with SMTP id w73-v6mr12902280lff.2.1533594573278; Mon, 06 Aug 2018 15:29:33 -0700 (PDT) Received: from z50.lan (93-181-165-181.internetia.net.pl. [93.181.165.181]) by smtp.gmail.com with ESMTPSA id o4-v6sm2438561ljc.67.2018.08.06.15.29.31 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 06 Aug 2018 15:29:32 -0700 (PDT) From: Janusz Krzysztofik To: Boris Brezillon , Linus Walleij Subject: [RFC PATCH v2 04/12] mtd: rawnand: ams-delta: request data port GPIO resource Date: Tue, 7 Aug 2018 00:29:10 +0200 Message-Id: <20180806222918.12644-5-jmkrzyszt@gmail.com> X-Mailer: git-send-email 2.16.4 In-Reply-To: <20180806222918.12644-1-jmkrzyszt@gmail.com> References: <20180718235710.18242-1-jmkrzyszt@gmail.com> <20180806222918.12644-1-jmkrzyszt@gmail.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20180806_152946_707177_4D57D748 X-CRM114-Status: GOOD ( 15.82 ) X-Spam-Score: 0.5 (/) X-Spam-Report: SpamAssassin version 3.4.1 on bombadil.infradead.org summary: Content analysis details: (0.5 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at http://www.dnswl.org/, no trust [2a00:1450:4864:20:0:0:0:144 listed in] [list.dnswl.org] 0.6 HK_RANDOM_ENVFROM Envelope sender username looks random 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (jmkrzyszt[at]gmail.com) -0.0 SPF_PASS SPF: sender matches SPF record 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-omap@vger.kernel.org, Jonathan Corbet , Tony Lindgren , Richard Weinberger , linux-gpio@vger.kernel.org, Aaro Koskinen , linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Marek Vasut , Janusz Krzysztofik , linux-mtd@lists.infradead.org, Miquel Raynal , Brian Norris , David Woodhouse , linux-arm-kernel@lists.infradead.org MIME-Version: 1.0 Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org Data port used by the driver is actually an OMAP MPUIO device, already under control of gpio-omap driver. For that reason we used to not request the memory region of the port as that would fail because the region is already busy. Despite that, we are still accessing the port by just ioremapping it and performing read/write operations. Moreover, we are doing that without any proteciton from other users legally manipulating the port pins over GPIO API. The plan is to convert the driver to access the port over functions exposed by the gpio-omap driver. Before that happens, already prevent from other users accessing the port pins by requesting an array of its GPIO descriptors. Signed-off-by: Janusz Krzysztofik Reviewed-by: Boris Brezillon Reviewed-by: Linus Walleij --- drivers/mtd/nand/raw/ams-delta.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/mtd/nand/raw/ams-delta.c b/drivers/mtd/nand/raw/ams-delta.c index 48233d638d2a..09d6901fc94d 100644 --- a/drivers/mtd/nand/raw/ams-delta.c +++ b/drivers/mtd/nand/raw/ams-delta.c @@ -161,6 +161,7 @@ static int ams_delta_init(struct platform_device *pdev) struct mtd_info *mtd; struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0); void __iomem *io_base; + struct gpio_descs *data_gpiods; int err = 0; if (!res) @@ -261,6 +262,13 @@ static int ams_delta_init(struct platform_device *pdev) dev_err(&pdev->dev, "CLE GPIO request failed (%d)\n", err); goto out_mtd; } + /* Request array of data pins, initialize them as input */ + data_gpiods = devm_gpiod_get_array(&pdev->dev, "data", GPIOD_IN); + if (IS_ERR(data_gpiods)) { + err = PTR_ERR(data_gpiods); + dev_err(&pdev->dev, "data GPIO request failed: %d\n", err); + goto out_mtd; + } /* Scan to find existence of the device */ err = nand_scan(mtd, 1); From patchwork Mon Aug 6 22:29:11 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Janusz Krzysztofik X-Patchwork-Id: 954283 X-Patchwork-Delegate: miquel.raynal@bootlin.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.infradead.org (client-ip=2607:7c80:54:e::133; helo=bombadil.infradead.org; envelope-from=linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="Q4j0lOeT"; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="nyFSQZIg"; dkim-atps=neutral Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:e::133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 41kt0W4pV5z9s3x for ; Tue, 7 Aug 2018 08:40:59 +1000 (AEST) 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:MIME-Version:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:References: In-Reply-To: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:List-Owner; bh=dkBX8sSrK0XE+8sD6bYMCis62U/9JP0qKMiCtCX2Pz4=; b=Q4j0lOeTg/S2jvY7sVNSm/74OJ GgWGdsUHBZ3m7XT6I6JZDImsF07GKiML2Q0dz/Y05NqypA9DP7zf7gf447JTXO1Wp4bn2kvJbzN5I Dw0HTMTsXzc1KXet/RQnoaotYiiocW22KGQ1z0HW7TeIqFKMpvr62Q56FFiwllKyyunm2w0XmkDm8 9dLVV0+AmMRgE7LOkiJkX6NnogpZVjGhMPn30e0hjnjIQeKuXV/GGy/z9NL0Ro9n3GgYrNfaVJhqX /9x9SHoFX/vGYaR/x3wDEN6ejvhxGY3TQ2V9arNh4HXY8ZBW74009ZMGFKvyRVDaiOX9qOP6X7j1g aMORxtEQ==; 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 1fmoBG-0001n3-Gy; Mon, 06 Aug 2018 22:40:50 +0000 Received: from mail-lf1-x142.google.com ([2a00:1450:4864:20::142]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1fmo0Y-0005Ra-Pf; Mon, 06 Aug 2018 22:29:58 +0000 Received: by mail-lf1-x142.google.com with SMTP id u202-v6so10191531lff.9; Mon, 06 Aug 2018 15:29:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=/bFrJqpkYAXIA89qeP/MiX5sn2g+I7ZzvqYqwTt5+3M=; b=nyFSQZIgFoC06japxmtl4hUOpncO2u0KUo72C9x12Wj9nY9UKs2lwF8+2azFrfK/8D nsIG6bGMySqPaXcAaj5WeoQVO3N//DzjMQLTujsoCeN/RFbjFRC56y5wyPg6eSaWg4TA H90b+u0D8IBv2Uk7XfANBJmMxgjNlUnZojwsCaQvNj7Zm8ygtr3gxx+TetQuZ6xQLSu9 yiX4iJBWYErE8x/Rh1/lnxZW3S8HT7Xnqi7d4HxvBReiluc90NfPKDRrfrcSBPssu37u K377uup2Tnz9YVF5ZfvyiU9eFIfu1uihH+pPJ91QwMIZe9y78xmTUp7oiiZP+q91Ki+O JNWQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=/bFrJqpkYAXIA89qeP/MiX5sn2g+I7ZzvqYqwTt5+3M=; b=O7/6S7Bzw8ympAui0aLxmE/pSl64XbLEq0tyKV5nw3EFHw3pZjEcXXM01CI82KPad1 o6FfxIXyJBrUx2rZW3s0lEN03BDdzDB9A4Pdgw9WR4DZ50wAL42xIiDn8yd794Y8b6So 1kb63oz/BqRxk5lm683pXjo1NLHxUMtjN5BhHctyN6bRNy9Jg0XmD2chvWo6sAFqWnn6 nUG7+hLZ7gEYT0HloubVcXz6n1kAHTHNlhFIpNA2ScI6uh+fvinNVNZNEtFp/c1jkNDJ Tbu1M16S6L3QVlev7USllHcef8FXHYcTA3opFvE9p4/WcNbRhH0bcCfXom9nqGMFj1c1 uLrQ== X-Gm-Message-State: AOUpUlGm347zneZhE5RlgwmWcRoTR3CtuVGnHs0daRX6UpQu7Ly4KqLB +yYbfw897PjjeKgJtK0YOvE= X-Google-Smtp-Source: AAOMgpeICtnonekoALrQpCgO/KhPn3gCvsWVa6RcYpMYX0ddp0xVRxdUrLc5QM6Ser8285T1uhYRog== X-Received: by 2002:ac2:428f:: with SMTP id m15-v6mr12815358lfh.52.1533594574784; Mon, 06 Aug 2018 15:29:34 -0700 (PDT) Received: from z50.lan (93-181-165-181.internetia.net.pl. [93.181.165.181]) by smtp.gmail.com with ESMTPSA id o4-v6sm2438561ljc.67.2018.08.06.15.29.33 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 06 Aug 2018 15:29:34 -0700 (PDT) From: Janusz Krzysztofik To: Boris Brezillon , Linus Walleij Subject: [RFC PATCH v2 05/12] mtd: rawnand: ams-delta: use GPIO API for data read/write Date: Tue, 7 Aug 2018 00:29:11 +0200 Message-Id: <20180806222918.12644-6-jmkrzyszt@gmail.com> X-Mailer: git-send-email 2.16.4 In-Reply-To: <20180806222918.12644-1-jmkrzyszt@gmail.com> References: <20180718235710.18242-1-jmkrzyszt@gmail.com> <20180806222918.12644-1-jmkrzyszt@gmail.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20180806_152947_169930_9FB877C4 X-CRM114-Status: GOOD ( 20.29 ) X-Spam-Score: 0.5 (/) X-Spam-Report: SpamAssassin version 3.4.1 on bombadil.infradead.org summary: Content analysis details: (0.5 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at http://www.dnswl.org/, no trust [2a00:1450:4864:20:0:0:0:142 listed in] [list.dnswl.org] 0.6 HK_RANDOM_ENVFROM Envelope sender username looks random 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (jmkrzyszt[at]gmail.com) -0.0 SPF_PASS SPF: sender matches SPF record 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-omap@vger.kernel.org, Jonathan Corbet , Tony Lindgren , Richard Weinberger , linux-gpio@vger.kernel.org, Aaro Koskinen , linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Marek Vasut , Janusz Krzysztofik , linux-mtd@lists.infradead.org, Miquel Raynal , Brian Norris , David Woodhouse , linux-arm-kernel@lists.infradead.org MIME-Version: 1.0 Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org Don't readw()/writew() data directly from/to GPIO port which is under control of gpio-omap driver, use GPIO API instead. Degrade of performance on Amstrad Delta is completely not acceptable. The driver should work with any 8+-bit bidirectional GPIO port, not only OMAP. Signed-off-by: Janusz Krzysztofik Reviewed-by: Linus Walleij --- drivers/mtd/nand/raw/ams-delta.c | 97 ++++++++++++++++------------------------ 1 file changed, 38 insertions(+), 59 deletions(-) diff --git a/drivers/mtd/nand/raw/ams-delta.c b/drivers/mtd/nand/raw/ams-delta.c index 09d6901fc94d..78996ddf82e0 100644 --- a/drivers/mtd/nand/raw/ams-delta.c +++ b/drivers/mtd/nand/raw/ams-delta.c @@ -24,13 +24,10 @@ #include #include #include -#include +#include -#include #include -#include - /* * MTD structure for E3 (Delta) */ @@ -44,7 +41,7 @@ struct ams_delta_nand { struct gpio_desc *gpiod_nwe; struct gpio_desc *gpiod_ale; struct gpio_desc *gpiod_cle; - void __iomem *io_base; + struct gpio_descs *data_gpiods; }; /* @@ -76,10 +73,14 @@ static void ams_delta_write_byte(struct mtd_info *mtd, u_char byte) { struct nand_chip *this = mtd_to_nand(mtd); struct ams_delta_nand *priv = nand_get_controller_data(this); - void __iomem *io_base = priv->io_base; + struct gpio_descs *data_gpiods = priv->data_gpiods; + unsigned long bits = byte; + int i; + + for (i = 0; i < data_gpiods->ndescs; i++) + gpiod_direction_output_raw(data_gpiods->desc[i], + test_bit(i, &bits)); - writew(0, io_base + OMAP_MPUIO_IO_CNTL); - writew(byte, this->IO_ADDR_W); gpiod_set_value(priv->gpiod_nwe, 0); ndelay(40); gpiod_set_value(priv->gpiod_nwe, 1); @@ -87,18 +88,28 @@ static void ams_delta_write_byte(struct mtd_info *mtd, u_char byte) static u_char ams_delta_read_byte(struct mtd_info *mtd) { - u_char res; struct nand_chip *this = mtd_to_nand(mtd); struct ams_delta_nand *priv = nand_get_controller_data(this); - void __iomem *io_base = priv->io_base; + struct gpio_descs *data_gpiods = priv->data_gpiods; + unsigned long bits = 0; + int i, value_array[data_gpiods->ndescs]; + + for (i = 0; i < data_gpiods->ndescs; i++) + gpiod_direction_input(data_gpiods->desc[i]); gpiod_set_value(priv->gpiod_nre, 0); ndelay(40); - writew(~0, io_base + OMAP_MPUIO_IO_CNTL); - res = readw(this->IO_ADDR_R); + + gpiod_get_raw_array_value(data_gpiods->ndescs, data_gpiods->desc, + value_array); + gpiod_set_value(priv->gpiod_nre, 1); - return res; + for (i = 0; i < data_gpiods->ndescs; i++) + if (value_array[i]) + __set_bit(i, &bits); + + return bits; } static void ams_delta_write_buf(struct mtd_info *mtd, const u_char *buf, @@ -159,14 +170,8 @@ static int ams_delta_init(struct platform_device *pdev) struct ams_delta_nand *priv; struct nand_chip *this; struct mtd_info *mtd; - struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0); - void __iomem *io_base; - struct gpio_descs *data_gpiods; int err = 0; - if (!res) - return -ENXIO; - /* Allocate memory for MTD device structure and private data */ priv = devm_kzalloc(&pdev->dev, sizeof(struct ams_delta_nand), GFP_KERNEL); @@ -179,25 +184,8 @@ static int ams_delta_init(struct platform_device *pdev) mtd = nand_to_mtd(this); mtd->dev.parent = &pdev->dev; - /* - * Don't try to request the memory region from here, - * it should have been already requested from the - * gpio-omap driver and requesting it again would fail. - */ - - io_base = ioremap(res->start, resource_size(res)); - if (io_base == NULL) { - dev_err(&pdev->dev, "ioremap failed\n"); - err = -EIO; - goto out_free; - } - - priv->io_base = io_base; nand_set_controller_data(this, priv); - /* Set address of NAND IO lines */ - this->IO_ADDR_R = io_base + OMAP_MPUIO_INPUT_LATCH; - this->IO_ADDR_W = io_base + OMAP_MPUIO_OUTPUT; this->read_byte = ams_delta_read_byte; this->write_buf = ams_delta_write_buf; this->read_buf = ams_delta_read_buf; @@ -207,7 +195,7 @@ static int ams_delta_init(struct platform_device *pdev) if (IS_ERR(priv->gpiod_rdy)) { err = PTR_ERR(priv->gpiod_rdy); dev_warn(&pdev->dev, "RDY GPIO request failed (%d)\n", err); - goto out_mtd; + return err; } if (priv->gpiod_rdy) @@ -225,66 +213,60 @@ static int ams_delta_init(struct platform_device *pdev) if (IS_ERR(priv->gpiod_nwp)) { err = PTR_ERR(priv->gpiod_nwp); dev_err(&pdev->dev, "NWP GPIO request failed (%d)\n", err); - goto out_mtd; + return err; } priv->gpiod_nce = devm_gpiod_get(&pdev->dev, "nce", GPIOD_OUT_HIGH); if (IS_ERR(priv->gpiod_nce)) { err = PTR_ERR(priv->gpiod_nce); dev_err(&pdev->dev, "NCE GPIO request failed (%d)\n", err); - goto out_mtd; + return err; } priv->gpiod_nre = devm_gpiod_get(&pdev->dev, "nre", GPIOD_OUT_HIGH); if (IS_ERR(priv->gpiod_nre)) { err = PTR_ERR(priv->gpiod_nre); dev_err(&pdev->dev, "NRE GPIO request failed (%d)\n", err); - goto out_mtd; + return err; } priv->gpiod_nwe = devm_gpiod_get(&pdev->dev, "nwe", GPIOD_OUT_HIGH); if (IS_ERR(priv->gpiod_nwe)) { err = PTR_ERR(priv->gpiod_nwe); dev_err(&pdev->dev, "NWE GPIO request failed (%d)\n", err); - goto out_mtd; + return err; } priv->gpiod_ale = devm_gpiod_get(&pdev->dev, "ale", GPIOD_OUT_LOW); if (IS_ERR(priv->gpiod_ale)) { err = PTR_ERR(priv->gpiod_ale); dev_err(&pdev->dev, "ALE GPIO request failed (%d)\n", err); - goto out_mtd; + return err; } priv->gpiod_cle = devm_gpiod_get(&pdev->dev, "cle", GPIOD_OUT_LOW); if (IS_ERR(priv->gpiod_cle)) { err = PTR_ERR(priv->gpiod_cle); dev_err(&pdev->dev, "CLE GPIO request failed (%d)\n", err); - goto out_mtd; + return err; } /* Request array of data pins, initialize them as input */ - data_gpiods = devm_gpiod_get_array(&pdev->dev, "data", GPIOD_IN); - if (IS_ERR(data_gpiods)) { - err = PTR_ERR(data_gpiods); + priv->data_gpiods = devm_gpiod_get_array(&pdev->dev, "data", GPIOD_IN); + if (IS_ERR(priv->data_gpiods)) { + err = PTR_ERR(priv->data_gpiods); dev_err(&pdev->dev, "data GPIO request failed: %d\n", err); - goto out_mtd; + return err; } /* Scan to find existence of the device */ err = nand_scan(mtd, 1); if (err) - goto out_mtd; + return err; /* Register the partitions */ mtd_device_register(mtd, partition_info, ARRAY_SIZE(partition_info)); - goto out; - - out_mtd: - iounmap(io_base); -out_free: - out: - return err; + return 0; } /* @@ -294,13 +276,10 @@ static int ams_delta_cleanup(struct platform_device *pdev) { struct ams_delta_nand *priv = platform_get_drvdata(pdev); struct mtd_info *mtd = nand_to_mtd(&priv->nand_chip); - void __iomem *io_base = priv->io_base; - /* Release resources, unregister device */ + /* Unregister device */ nand_release(mtd); - iounmap(io_base); - return 0; } From patchwork Mon Aug 6 22:29:12 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Janusz Krzysztofik X-Patchwork-Id: 954278 X-Patchwork-Delegate: miquel.raynal@bootlin.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.infradead.org (client-ip=2607:7c80:54:e::133; helo=bombadil.infradead.org; envelope-from=linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="YGdFCxCX"; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="DLvbaHVf"; dkim-atps=neutral Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:e::133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 41ksqL2d01z9s3x for ; Tue, 7 Aug 2018 08:33:02 +1000 (AEST) 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:MIME-Version:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:References: In-Reply-To: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:List-Owner; bh=xzPk4aQTetA5YzxkM6DIqJA+5n1dOMG1T7Rqh6z/S+w=; b=YGdFCxCX0UnbtP7U7Fkqxglc6U KPHW9+7b1tNrLt9Uo+Unb9QoF5cK/+0LkLMr7ZPVUumaBA42tolWtBDM6cxcUAzeiXMxIYYPZOsed YLkqJvuBiyVLG1KMSNS6cpjEgO3cp6HFF1Pd+jfby5SY5itPLGCj2t76NQUCVuRUibuZ8ra3US3q2 GC+FgE0p0tbisd/IspaY6+/sgGSLPP8B51E+r9M7y+x+1SCRZKc++RbT36Bbw4lRk+uEa11yT0gSf JN8N4f3zGmfWzXILdd37FW9JVGm/Q5du5i/YPKO5wcbX/cMnfP7ktkmmS4xw/GOM9K5xuJ+jQnbkl 1PUCp0Zw==; 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 1fmo3c-0002NP-Mu; Mon, 06 Aug 2018 22:32:56 +0000 Received: from mail-lf1-x141.google.com ([2a00:1450:4864:20::141]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1fmo0a-0005Rg-Ft; Mon, 06 Aug 2018 22:30:00 +0000 Received: by mail-lf1-x141.google.com with SMTP id a4-v6so10208190lff.5; Mon, 06 Aug 2018 15:29:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=SWahyGay3HwJh/h6LbGc9ebdup+F8+u0inyd1av1TUw=; b=DLvbaHVfIveNt1OnDBxk12VwUJvePDKmfiwXglM8Uv329JWmzCEgl669za2CUifPxP Hy/RM5Po8w2Rizm2UAqw925zl6afSZnTysAgUv4eTEgd0o9RULFOvaNWd685MERyVlno /3HKK3vEbIVySzzxS1MeAcU6cr4FOyLQd6a9bXNGZlLF7pwSoHWj4RA4Dij/Nt9i2Ax5 tKOgYi2oGqk90uBFRuoR+jeHRnty87f1pbB1vrr0aDx/G4GAOEvuDrMLsPOkfX3+9s2V XYhjsq5ipuSjpjvh4uvVPEUzW5NdTSWi1//1rNYc4xc/geueFlZk0u+Vkv1QPPSoq/jY dX/w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=SWahyGay3HwJh/h6LbGc9ebdup+F8+u0inyd1av1TUw=; b=mFz+K3xx37pnpv4lYXJeYV1+AIPZVneF//4IrBWIDHZ8QACcyZKmtRUVogXzi+gVQP d6w7aWoETr/IfuCoEiI/N0olHjarXhyM0wH5fW+6yr0sUYnfoXIhr8W92M43cJIaQq5/ 1IMPR0aE5ohY3BjqCpp746o6nX1n9XWjJpUIbYE2AM5u3vOaf1J35UkDSeF7dlgBg5aT dKOqAddf1SxZS3hiR5Sx4IVdPeuKhMGPnbc+8kHneKcA3Ie2V8D3lthYbGVjK47XSFIt 3Bk3Vvv2WenXnsX3Ep9RFTrToj603eElE7qh/QQiosMMylT+OR3t02kOvaqoeF3i3mGB eBfA== X-Gm-Message-State: AOUpUlGva+y1eA7yPcMhx6Pm9Jj2qJd6ZT6IJ3jff48KTfGRfZb0eKJw AeeD6NXnfH6xd8LawqDtBuA= X-Google-Smtp-Source: AAOMgpceb/pNRnyiT5iMuDkPQySRSy5cQViz00DEdxe0K16VqXpbOtlW/bnNiEeDAh+rdvIlKYft9g== X-Received: by 2002:a19:1dcf:: with SMTP id d198-v6mr11998875lfd.144.1533594576160; Mon, 06 Aug 2018 15:29:36 -0700 (PDT) Received: from z50.lan (93-181-165-181.internetia.net.pl. [93.181.165.181]) by smtp.gmail.com with ESMTPSA id o4-v6sm2438561ljc.67.2018.08.06.15.29.34 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 06 Aug 2018 15:29:35 -0700 (PDT) From: Janusz Krzysztofik To: Boris Brezillon , Linus Walleij Subject: [RFC PATCH v2 06/12] ARM: OMAP1: ams-delta: drop obsolete NAND resources Date: Tue, 7 Aug 2018 00:29:12 +0200 Message-Id: <20180806222918.12644-7-jmkrzyszt@gmail.com> X-Mailer: git-send-email 2.16.4 In-Reply-To: <20180806222918.12644-1-jmkrzyszt@gmail.com> References: <20180718235710.18242-1-jmkrzyszt@gmail.com> <20180806222918.12644-1-jmkrzyszt@gmail.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20180806_152949_033530_CAC6D447 X-CRM114-Status: GOOD ( 12.73 ) X-Spam-Score: 0.5 (/) X-Spam-Report: SpamAssassin version 3.4.1 on bombadil.infradead.org summary: Content analysis details: (0.5 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at http://www.dnswl.org/, no trust [2a00:1450:4864:20:0:0:0:141 listed in] [list.dnswl.org] 0.6 HK_RANDOM_ENVFROM Envelope sender username looks random 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (jmkrzyszt[at]gmail.com) -0.0 SPF_PASS SPF: sender matches SPF record 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-omap@vger.kernel.org, Jonathan Corbet , Tony Lindgren , Richard Weinberger , linux-gpio@vger.kernel.org, Aaro Koskinen , linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Marek Vasut , Janusz Krzysztofik , linux-mtd@lists.infradead.org, Miquel Raynal , Brian Norris , David Woodhouse , linux-arm-kernel@lists.infradead.org MIME-Version: 1.0 Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org Amstrad Delta NAND device now uses GPIO API for data I/O so there is no need to assign memory I/O resource to the device any longer. Drop it. Signed-off-by: Janusz Krzysztofik --- arch/arm/mach-omap1/board-ams-delta.c | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/arch/arm/mach-omap1/board-ams-delta.c b/arch/arm/mach-omap1/board-ams-delta.c index 16f7bbe47607..08e732bc1cd2 100644 --- a/arch/arm/mach-omap1/board-ams-delta.c +++ b/arch/arm/mach-omap1/board-ams-delta.c @@ -321,20 +321,9 @@ struct modem_private_data { static struct modem_private_data modem_priv; -static struct resource ams_delta_nand_resources[] = { - [0] = { - .start = OMAP1_MPUIO_BASE, - .end = OMAP1_MPUIO_BASE + - OMAP_MPUIO_IO_CNTL + sizeof(u32) - 1, - .flags = IORESOURCE_MEM, - }, -}; - static struct platform_device ams_delta_nand_device = { .name = "ams-delta-nand", .id = -1, - .num_resources = ARRAY_SIZE(ams_delta_nand_resources), - .resource = ams_delta_nand_resources, }; #define OMAP_GPIO_LABEL "gpio-0-15" From patchwork Mon Aug 6 22:29:13 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Janusz Krzysztofik X-Patchwork-Id: 954277 X-Patchwork-Delegate: miquel.raynal@bootlin.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.infradead.org (client-ip=2607:7c80:54:e::133; helo=bombadil.infradead.org; envelope-from=linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="c0suk99M"; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="aiaJY+wG"; dkim-atps=neutral Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:e::133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 41kspL05YHz9s3x for ; Tue, 7 Aug 2018 08:32:09 +1000 (AEST) 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:MIME-Version:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:References: In-Reply-To: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:List-Owner; bh=fa70gvsCM2c46tjOpX8vnqpnMKe4e3M7fGOI3d/jRgo=; b=c0suk99MWh/9lZRx9fmAnsySf0 LQfVQ1jrh8eDkXOUlnHGPMFLV5wvfOcPikMNY9cgLaouJLReD+PoWBtEAIp8/WkWuGG+XWS1QCQZw RnuFpqtDHCicGtC+CRGOxI71GUkRlxV9tlQaS72gGIym9AkS7IuZcR3tYrZMA3ybjmEbOtfJhRE6j PBYJMoRawOY1JmjHYstlXsjPYK0pER2/bMCj7PEYS8gQRec9yMERrCs9y6kogmAEHucvz4clMUKFb LrwaEefgQKaQYStCuaMpZC3WEpqTQIcuR41Vkof5GyzU0UWD3tmcWPKi1HGxE5iHFw/3kXeZS5MdY aFDqZCwg==; 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 1fmo2o-00016n-1O; Mon, 06 Aug 2018 22:32:06 +0000 Received: from mail-lf1-x142.google.com ([2a00:1450:4864:20::142]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1fmo0Y-0005S0-Pd; Mon, 06 Aug 2018 22:29:56 +0000 Received: by mail-lf1-x142.google.com with SMTP id a4-v6so10208222lff.5; Mon, 06 Aug 2018 15:29:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=kc0UzhE5a74AT1i79aXGGOwb60l9x1wE3g4xDA9GbLE=; b=aiaJY+wGP5udMA1gIXrJ03dzpSnoHmM17OF2+mZ0FFuAVAlc7ToGOCaJzEZqj0MzT5 6AI0KU5o+Jpgv+oI1FgxlZg7fc1Hz+RjG6elpcJ5rTa3vs2lLeCDDHxO0XTcREJ0HDiL W+SxYkqYP20qW2KvKNw67HV9tgYxKpIZRftHYwQlmYO9DSu4WOk95QakCnsgCQW7sLbb DqUiMvk0tnlS5Kt4WBTfxcdy+EnCR/iiXm9qZ5SkZns3SBmN4wD0luM2MM/8AYDGH0Qg AFRCUBUkqExs6vRPmWtIXiR1DGLuJGIfXX5mvArvNzgK/PUieR0B/7Mi5c3BEWCz7GRD XNhg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=kc0UzhE5a74AT1i79aXGGOwb60l9x1wE3g4xDA9GbLE=; b=T3s7IMFe2fINwprUfJM0m9whTcrOzndqItS7nycFJWhu5Jn7rvjelVFS2D1nzjDs8j TghuOOiR3paTo0OmQfnR3oi48nJwEhsnQ+Nv5mQtW+2OE/DmCCmHZ5ooJJuXEYV3+Wct JTKDp2cfY9fbP3FUEirmvY68niUb0umihOdsJeiOQBk4RZorMrITqajdBKwrOdIKly7Y UNyBLSoROC9LjE9qLRbOxBY4T8YsohBhA2FoWP7u0sfezEEMqq6reJSJ0965Moub6KiQ EHumV+9KwrJpuUYIlEKPZDF+KxLrj06h4aoMDKPXDizoql2dhxQ7WepsaKCwqoj3eJP4 eJow== X-Gm-Message-State: AOUpUlF4o7M5PingA+NhkLr1D7qd3p5rWktIJsF183J3tzzTjPc9qve8 PeoH556Jec1jPZsJhr8R9Qs= X-Google-Smtp-Source: AAOMgpftlgT2LBNt75HgnmEVXCUbyxfdlV1qSGS8i1KDsP4Pv+onp7UCIBniLpb4ZMscgW11lZsMRA== X-Received: by 2002:a19:2c4f:: with SMTP id s76-v6mr13073045lfs.25.1533594577560; Mon, 06 Aug 2018 15:29:37 -0700 (PDT) Received: from z50.lan (93-181-165-181.internetia.net.pl. [93.181.165.181]) by smtp.gmail.com with ESMTPSA id o4-v6sm2438561ljc.67.2018.08.06.15.29.36 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 06 Aug 2018 15:29:36 -0700 (PDT) From: Janusz Krzysztofik To: Boris Brezillon , Linus Walleij Subject: [RFC PATCH v2 07/12] mtd: rawnand: ams-delta: Set port direction once per transfer Date: Tue, 7 Aug 2018 00:29:13 +0200 Message-Id: <20180806222918.12644-8-jmkrzyszt@gmail.com> X-Mailer: git-send-email 2.16.4 In-Reply-To: <20180806222918.12644-1-jmkrzyszt@gmail.com> References: <20180718235710.18242-1-jmkrzyszt@gmail.com> <20180806222918.12644-1-jmkrzyszt@gmail.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20180806_152947_307918_0E18F142 X-CRM114-Status: GOOD ( 16.43 ) X-Spam-Score: 0.5 (/) X-Spam-Report: SpamAssassin version 3.4.1 on bombadil.infradead.org summary: Content analysis details: (0.5 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at http://www.dnswl.org/, no trust [2a00:1450:4864:20:0:0:0:142 listed in] [list.dnswl.org] 0.6 HK_RANDOM_ENVFROM Envelope sender username looks random 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (jmkrzyszt[at]gmail.com) -0.0 SPF_PASS SPF: sender matches SPF record 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-omap@vger.kernel.org, Jonathan Corbet , Tony Lindgren , Richard Weinberger , linux-gpio@vger.kernel.org, Aaro Koskinen , linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Marek Vasut , Janusz Krzysztofik , linux-mtd@lists.infradead.org, Miquel Raynal , Brian Norris , David Woodhouse , linux-arm-kernel@lists.infradead.org MIME-Version: 1.0 Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org In its current shape, the driver sets data port direction before each byte read/write operation, even during multi-byte transfers. Since performance of the driver is completely not acceptable on Amstrad Delta after it has been converted to GPIO bitbang, try to improve things a bit by setting the port direction only on first byte of each transfer. Resulting performance on Amstrad Delta is still far from acceptable. Signed-off-by: Janusz Krzysztofik --- drivers/mtd/nand/raw/ams-delta.c | 58 ++++++++++++++++++++++++++++++++-------- 1 file changed, 47 insertions(+), 11 deletions(-) diff --git a/drivers/mtd/nand/raw/ams-delta.c b/drivers/mtd/nand/raw/ams-delta.c index 78996ddf82e0..d02c48c013e8 100644 --- a/drivers/mtd/nand/raw/ams-delta.c +++ b/drivers/mtd/nand/raw/ams-delta.c @@ -69,6 +69,30 @@ static const struct mtd_partition partition_info[] = { .size = 3 * SZ_256K }, }; +static void ams_delta_write_commit(struct ams_delta_nand *priv) +{ + gpiod_set_value(priv->gpiod_nwe, 0); + ndelay(40); + gpiod_set_value(priv->gpiod_nwe, 1); +} + +static void ams_delta_write_next_byte(struct mtd_info *mtd, u_char byte) +{ + struct nand_chip *this = mtd_to_nand(mtd); + struct ams_delta_nand *priv = nand_get_controller_data(this); + struct gpio_descs *data_gpiods = priv->data_gpiods; + unsigned long bits = byte; + int i, value_array[data_gpiods->ndescs]; + + for (i = 0; i < data_gpiods->ndescs; i++) + value_array[i] = test_bit(i, &bits); + + gpiod_set_raw_array_value(data_gpiods->ndescs, data_gpiods->desc, + value_array); + + ams_delta_write_commit(priv); +} + static void ams_delta_write_byte(struct mtd_info *mtd, u_char byte) { struct nand_chip *this = mtd_to_nand(mtd); @@ -81,12 +105,10 @@ static void ams_delta_write_byte(struct mtd_info *mtd, u_char byte) gpiod_direction_output_raw(data_gpiods->desc[i], test_bit(i, &bits)); - gpiod_set_value(priv->gpiod_nwe, 0); - ndelay(40); - gpiod_set_value(priv->gpiod_nwe, 1); + ams_delta_write_commit(priv); } -static u_char ams_delta_read_byte(struct mtd_info *mtd) +static u_char ams_delta_read_next_byte(struct mtd_info *mtd) { struct nand_chip *this = mtd_to_nand(mtd); struct ams_delta_nand *priv = nand_get_controller_data(this); @@ -94,9 +116,6 @@ static u_char ams_delta_read_byte(struct mtd_info *mtd) unsigned long bits = 0; int i, value_array[data_gpiods->ndescs]; - for (i = 0; i < data_gpiods->ndescs; i++) - gpiod_direction_input(data_gpiods->desc[i]); - gpiod_set_value(priv->gpiod_nre, 0); ndelay(40); @@ -112,21 +131,38 @@ static u_char ams_delta_read_byte(struct mtd_info *mtd) return bits; } +static u_char ams_delta_read_byte(struct mtd_info *mtd) +{ + struct nand_chip *this = mtd_to_nand(mtd); + struct ams_delta_nand *priv = nand_get_controller_data(this); + struct gpio_descs *data_gpiods = priv->data_gpiods; + int i; + + for (i = 0; i < data_gpiods->ndescs; i++) + gpiod_direction_input(data_gpiods->desc[i]); + + return ams_delta_read_next_byte(mtd); +} + static void ams_delta_write_buf(struct mtd_info *mtd, const u_char *buf, int len) { int i; - for (i=0; i 0) + ams_delta_write_byte(mtd, buf[0]); + for (i = 1; i < len; i++) + ams_delta_write_next_byte(mtd, buf[i]); } static void ams_delta_read_buf(struct mtd_info *mtd, u_char *buf, int len) { int i; - for (i=0; i 0) + buf[0] = ams_delta_read_byte(mtd); + for (i = 1; i < len; i++) + buf[i] = ams_delta_read_next_byte(mtd); } /* From patchwork Mon Aug 6 22:29:14 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Janusz Krzysztofik X-Patchwork-Id: 954273 X-Patchwork-Delegate: miquel.raynal@bootlin.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.infradead.org (client-ip=2607:7c80:54:e::133; helo=bombadil.infradead.org; envelope-from=linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="NRq65iTD"; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="VSk24Lf1"; dkim-atps=neutral Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:e::133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 41ksnB58KJz9s3x for ; Tue, 7 Aug 2018 08:31:10 +1000 (AEST) 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:MIME-Version:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:References: In-Reply-To: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:List-Owner; bh=k7+NT2Je8DtU5Py3T9S9MXyyP4Oh1WHt4SUF8YVb5Hw=; b=NRq65iTDE9hCuCimmLWQ6868u8 quRzLPdYfmvJUTz66p9C3q8kvJAnM4biZ11SWbQRZkqi075kw3Emgf2U/hasZuZTPIGb/5jVno/L6 +Vl2/VQSIKeIWyM7+BeAUOnaoawZXaW8qhA+h8mFShFbmpgDLn6dHbvYUvol0T8Ibv5VL1qpF7kYf +Qpu5bqPUXdNmAbJ6X7pdV1tVvnyPLVQ6dn0+6UHc6KL3F3MkSjeH1BkmdDpZkWoAPe86IEG2x8v1 blBP/ljOp9Y+yWr5pWp0mshuLlx6Yd2wJEqu341PCKe8eT4QmCfT0mETlreCfqvtk5BUlOorlU3HN EXatm7gg==; 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 1fmo1q-0007hZ-AS; Mon, 06 Aug 2018 22:31:06 +0000 Received: from mail-lf1-x144.google.com ([2a00:1450:4864:20::144]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1fmo0Y-0005S2-99; Mon, 06 Aug 2018 22:29:50 +0000 Received: by mail-lf1-x144.google.com with SMTP id v22-v6so10200924lfe.8; Mon, 06 Aug 2018 15:29:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=4e/NwWX8gPdhcOi4ymtYKpIzD8tGLix7YzF3NFcH+jE=; b=VSk24Lf11fISUKBVBalTBrkygdyEiRw+2NBUCIf7HMFRpwZbhciE7EQse8VY8vAjmS JLJ2wZr7G+u30e0OlVgwZKVGYeHTHgnCPxYsuzl+tdcCZR4zj9zU/o4ndDnyr8PpN+E8 4KBvTZa3raeWY87i32JIiXzbyLYJTzgwSr1NsyCSuDIhxsgLjetfdxVuiK1Ij7xTOR3Q FzNKFaMgy6UteO25l/wkolUXbcDypWSnKLPjrLmv9lp30taqmNXt4V+X2mMPeDhq0OCC voBnXuZZeqt8pfgSN6BXAKm+iVXZNKmJw1dbj3UNoTculPG3y8i/zfRXLHK6u7Le8rQt VEDQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=4e/NwWX8gPdhcOi4ymtYKpIzD8tGLix7YzF3NFcH+jE=; b=YGxZFvNvwEmwWRs7HdOaEkKTV6W6d4QOQlr8wq86pVERP+EV5oVkgxPwk2Cc2vFN4j KggP5DGXnWtuyfoml77VMpZXDyb21Ff0D2mSYz17tEd7crAa0MK2ePBvW4Ff+ydmIUa8 k22I8R47pExr8VoED/LigN5y8FB++2HC38z4YvMpRumYwfsCJ0JR3PVXFxAKNAMZ9fpb VyVeKSnqirrBEx1sfXR9S85ciXeJB/p/Aq1pPLCVhpidzAJziyDfgvywHnxqrIoAWzBK YJlwnxq9QSmDGcURlNhuFrB85Aw3y8QJuR6jrTrHazQD2P6MhT5qO3iPyBQEa5YJVGlw B/6Q== X-Gm-Message-State: AOUpUlG3XCjADmSw6q2h8WmjZgYVUFCTI1J4BFS8M2jOITy/xn9begAj K4p4KhwTtbpRbUYvl4vsbRE= X-Google-Smtp-Source: AAOMgpddBt3OviQvsIPmqSEfWASOM2oWUiaQyCmIbh57aYMBUm8SYN9CxOmsoM9b9ESTsH3Foa+b3Q== X-Received: by 2002:a19:c3c7:: with SMTP id t190-v6mr11873113lff.108.1533594578952; Mon, 06 Aug 2018 15:29:38 -0700 (PDT) Received: from z50.lan (93-181-165-181.internetia.net.pl. [93.181.165.181]) by smtp.gmail.com with ESMTPSA id o4-v6sm2438561ljc.67.2018.08.06.15.29.37 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 06 Aug 2018 15:29:38 -0700 (PDT) From: Janusz Krzysztofik To: Boris Brezillon , Linus Walleij Subject: [RFC PATCH v2 08/12] mtd: rawnand: ams-delta: Simplify pointer resolution on read/write Date: Tue, 7 Aug 2018 00:29:14 +0200 Message-Id: <20180806222918.12644-9-jmkrzyszt@gmail.com> X-Mailer: git-send-email 2.16.4 In-Reply-To: <20180806222918.12644-1-jmkrzyszt@gmail.com> References: <20180718235710.18242-1-jmkrzyszt@gmail.com> <20180806222918.12644-1-jmkrzyszt@gmail.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20180806_152946_623964_9DBCD9F6 X-CRM114-Status: GOOD ( 13.83 ) X-Spam-Score: 0.5 (/) X-Spam-Report: SpamAssassin version 3.4.1 on bombadil.infradead.org summary: Content analysis details: (0.5 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at http://www.dnswl.org/, no trust [2a00:1450:4864:20:0:0:0:144 listed in] [list.dnswl.org] 0.6 HK_RANDOM_ENVFROM Envelope sender username looks random 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (jmkrzyszt[at]gmail.com) -0.0 SPF_PASS SPF: sender matches SPF record 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-omap@vger.kernel.org, Jonathan Corbet , Tony Lindgren , Richard Weinberger , linux-gpio@vger.kernel.org, Aaro Koskinen , linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Marek Vasut , Janusz Krzysztofik , linux-mtd@lists.infradead.org, Miquel Raynal , Brian Norris , David Woodhouse , linux-arm-kernel@lists.infradead.org MIME-Version: 1.0 Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org Simplify data read/write sub-functions by changing their APIs so they accept driver private structure pointer instead of mtd_info. Signed-off-by: Janusz Krzysztofik Reviewed-by: Boris Brezillon --- drivers/mtd/nand/raw/ams-delta.c | 40 ++++++++++++++++++++++------------------ 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/drivers/mtd/nand/raw/ams-delta.c b/drivers/mtd/nand/raw/ams-delta.c index d02c48c013e8..30c461138195 100644 --- a/drivers/mtd/nand/raw/ams-delta.c +++ b/drivers/mtd/nand/raw/ams-delta.c @@ -76,10 +76,8 @@ static void ams_delta_write_commit(struct ams_delta_nand *priv) gpiod_set_value(priv->gpiod_nwe, 1); } -static void ams_delta_write_next_byte(struct mtd_info *mtd, u_char byte) +static void ams_delta_write_next_byte(struct ams_delta_nand *priv, u_char byte) { - struct nand_chip *this = mtd_to_nand(mtd); - struct ams_delta_nand *priv = nand_get_controller_data(this); struct gpio_descs *data_gpiods = priv->data_gpiods; unsigned long bits = byte; int i, value_array[data_gpiods->ndescs]; @@ -93,10 +91,8 @@ static void ams_delta_write_next_byte(struct mtd_info *mtd, u_char byte) ams_delta_write_commit(priv); } -static void ams_delta_write_byte(struct mtd_info *mtd, u_char byte) +static void ams_delta_write_first_byte(struct ams_delta_nand *priv, u_char byte) { - struct nand_chip *this = mtd_to_nand(mtd); - struct ams_delta_nand *priv = nand_get_controller_data(this); struct gpio_descs *data_gpiods = priv->data_gpiods; unsigned long bits = byte; int i; @@ -108,10 +104,8 @@ static void ams_delta_write_byte(struct mtd_info *mtd, u_char byte) ams_delta_write_commit(priv); } -static u_char ams_delta_read_next_byte(struct mtd_info *mtd) +static u_char ams_delta_read_next_byte(struct ams_delta_nand *priv) { - struct nand_chip *this = mtd_to_nand(mtd); - struct ams_delta_nand *priv = nand_get_controller_data(this); struct gpio_descs *data_gpiods = priv->data_gpiods; unsigned long bits = 0; int i, value_array[data_gpiods->ndescs]; @@ -131,38 +125,48 @@ static u_char ams_delta_read_next_byte(struct mtd_info *mtd) return bits; } -static u_char ams_delta_read_byte(struct mtd_info *mtd) +static u_char ams_delta_read_first_byte(struct ams_delta_nand *priv) { - struct nand_chip *this = mtd_to_nand(mtd); - struct ams_delta_nand *priv = nand_get_controller_data(this); struct gpio_descs *data_gpiods = priv->data_gpiods; int i; for (i = 0; i < data_gpiods->ndescs; i++) gpiod_direction_input(data_gpiods->desc[i]); - return ams_delta_read_next_byte(mtd); + return ams_delta_read_next_byte(priv); +} + +static u_char ams_delta_read_byte(struct mtd_info *mtd) +{ + struct nand_chip *this = mtd_to_nand(mtd); + struct ams_delta_nand *priv = nand_get_controller_data(this); + + return ams_delta_read_first_byte(priv); } static void ams_delta_write_buf(struct mtd_info *mtd, const u_char *buf, int len) { + struct nand_chip *this = mtd_to_nand(mtd); + struct ams_delta_nand *priv = nand_get_controller_data(this); int i; if (len > 0) - ams_delta_write_byte(mtd, buf[0]); + ams_delta_write_first_byte(priv, buf[0]); for (i = 1; i < len; i++) - ams_delta_write_next_byte(mtd, buf[i]); + ams_delta_write_next_byte(priv, buf[i]); } static void ams_delta_read_buf(struct mtd_info *mtd, u_char *buf, int len) { + struct nand_chip *this = mtd_to_nand(mtd); + struct ams_delta_nand *priv = nand_get_controller_data(this); int i; if (len > 0) - buf[0] = ams_delta_read_byte(mtd); + buf[0] = ams_delta_read_first_byte(priv); for (i = 1; i < len; i++) - buf[i] = ams_delta_read_next_byte(mtd); + buf[i] = ams_delta_read_next_byte(priv); } /* @@ -186,7 +190,7 @@ static void ams_delta_hwcontrol(struct mtd_info *mtd, int cmd, } if (cmd != NAND_CMD_NONE) - ams_delta_write_byte(mtd, cmd); + ams_delta_write_first_byte(priv, cmd); } static int ams_delta_nand_ready(struct mtd_info *mtd) From patchwork Mon Aug 6 22:29:15 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Janusz Krzysztofik X-Patchwork-Id: 954284 X-Patchwork-Delegate: miquel.raynal@bootlin.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.infradead.org (client-ip=2607:7c80:54:e::133; helo=bombadil.infradead.org; envelope-from=linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="JD6YDYoc"; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="O4rnAwwU"; dkim-atps=neutral Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:e::133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 41kt0c12ldz9s3x for ; Tue, 7 Aug 2018 08:41:04 +1000 (AEST) 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:MIME-Version:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:References: In-Reply-To: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:List-Owner; bh=pE7RtW/K4gU59Lq0p1aAa8t17CwEDrFyjHvEGGBH1Cg=; b=JD6YDYocx8faL8/P5qRyVyd+s1 Mnmj2W7kn8uArH9iqOkIEx0pP44dXkEbKSo7Vfdd8PJHmuZfvgTP+ghdaq3m5nYEufn6ptNH3+PWZ 5HelAhvVoR9tJDiMLXwXQ3nuJyAopptGu5a0MKG1CoapAsbUI+sKKjr7VbBd8LWCxLBK8mj9FWLI4 8oXJ/WR9Pf4gF3zr5WNgLNJSMcC4i8ACFcjA6uOaMTkngUEYGZJA5ks8pBR4PXYKujnBQ0O0GX6KK zZgA1oyklpeKlSO/zXOQDZkHV51X7gMnE0Pu9tJG+5SWp8vamKGX3MbXGlgzPFxarNkbz5to98MzE acqSi2gg==; 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 1fmoBL-0001s6-Ba; Mon, 06 Aug 2018 22:40:55 +0000 Received: from mail-lf1-x141.google.com ([2a00:1450:4864:20::141]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1fmo0a-0005Sc-Fp; Mon, 06 Aug 2018 22:30:01 +0000 Received: by mail-lf1-x141.google.com with SMTP id v22-v6so10200956lfe.8; Mon, 06 Aug 2018 15:29:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=ddxbjKWbH/qs2/dbAkPSUgMcTxkDVe7XOShiS2ShNhg=; b=O4rnAwwU+E19y/dHgqfV5/LNr5ueAwgq1W7nBCLWP9ADhnJm3CbxcOA0zniiu5qIaB uMdeXG1Q0fL84RvXKIoJI12MkL7KR5sbIs/gEK2NUFnDr2nNHfKYnZharQuaiiuKFqC8 8RgIEEsCaErRxPzNN4yUOpduIm/yGT/ExpYhfRrzE/E9DEVPDnqyg7SxAAGs4+nYSoeY LVnc1S7SZeQOeDGnalM3AWlivmjquUd0keZr4mfAr6GXPsj+JMkcFaHaSIeveco+BJUJ MogHKF5Y2TLZGnBsmEwjw2scpufQ0GLAqf+kps9CmBrEz8DYUiN0iQEQDdZjIlILRTwa GNug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=ddxbjKWbH/qs2/dbAkPSUgMcTxkDVe7XOShiS2ShNhg=; b=U465vM1lNenRCJOwynaiTOyySAmZ6bL/n8/1WheALMSCF4JUQygn61RnHPNJl+pAWp 614H4qG0b9zJpWBix4DS2I7lomWUGNNqAQ34HErplySfppJsVZpB+/NGUmgb66Vpu5q0 ttqg7Cs/zI4dOwX3uiD71Cs2N1qnwAZsja2U8bCuVflzBlSl0Th01jAbOl7pK4ehKW5O QOb5x7LAcMy6Fal/GYZ9veyRv7NpGmSV+uWxElkecDftnK48vyWz7htnILhSydcvI90C ilODzfYBtEhUd5ZtMfUsQc0vX/4Q3VlFduqxlXH0/ZEtkr1FDFcdyVEW9gZ/22moAuXZ 9V5Q== X-Gm-Message-State: AOUpUlGDAaBC1Jifri2h3/ijH+1xUggq04iysQtSuCWaDjclYsxsdIEx V5psAtSA52zKqhEF9BWXF9c= X-Google-Smtp-Source: AAOMgpe1kBSzm5J6s2TGZ6xuh9XrZ36DhEPwqaDLXIoZov77FCx7o+JryEyDTjswU9SaAdSCixn93A== X-Received: by 2002:a19:14dc:: with SMTP id 89-v6mr11947557lfu.45.1533594580408; Mon, 06 Aug 2018 15:29:40 -0700 (PDT) Received: from z50.lan (93-181-165-181.internetia.net.pl. [93.181.165.181]) by smtp.gmail.com with ESMTPSA id o4-v6sm2438561ljc.67.2018.08.06.15.29.38 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 06 Aug 2018 15:29:39 -0700 (PDT) From: Janusz Krzysztofik To: Boris Brezillon , Linus Walleij Subject: [RFC PATCH v2 09/12] gpiolib: Identify GPIO descriptor arrays with direct mapping Date: Tue, 7 Aug 2018 00:29:15 +0200 Message-Id: <20180806222918.12644-10-jmkrzyszt@gmail.com> X-Mailer: git-send-email 2.16.4 In-Reply-To: <20180806222918.12644-1-jmkrzyszt@gmail.com> References: <20180718235710.18242-1-jmkrzyszt@gmail.com> <20180806222918.12644-1-jmkrzyszt@gmail.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20180806_152949_079748_02A3359D X-CRM114-Status: GOOD ( 16.92 ) X-Spam-Score: 0.5 (/) X-Spam-Report: SpamAssassin version 3.4.1 on bombadil.infradead.org summary: Content analysis details: (0.5 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at http://www.dnswl.org/, no trust [2a00:1450:4864:20:0:0:0:141 listed in] [list.dnswl.org] 0.6 HK_RANDOM_ENVFROM Envelope sender username looks random 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (jmkrzyszt[at]gmail.com) -0.0 SPF_PASS SPF: sender matches SPF record 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-omap@vger.kernel.org, Jonathan Corbet , Tony Lindgren , Richard Weinberger , linux-gpio@vger.kernel.org, Aaro Koskinen , linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Marek Vasut , Janusz Krzysztofik , linux-mtd@lists.infradead.org, Miquel Raynal , Brian Norris , David Woodhouse , linux-arm-kernel@lists.infradead.org MIME-Version: 1.0 Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org Certain GPIO array lookup results may map directly to GPIO pins of a single GPIO chip in hardware order. If that condition is recognized and handled efficiently, significant performance gain of get/set array functions may be possible. While processing a request for an array of GPIO descriptors, verify if the descriptors just collected represent consecutive pins of a single GPIO chip. Pass that information with the array to the caller so it can benefit from enhanced performance as soon as bitmap based get/set array functions which can make efficient use of that are available. Signed-off-by: Janusz Krzysztofik --- Documentation/driver-api/gpio/consumer.rst | 4 +++- drivers/gpio/gpiolib.c | 14 ++++++++++++++ include/linux/gpio/consumer.h | 1 + 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/Documentation/driver-api/gpio/consumer.rst b/Documentation/driver-api/gpio/consumer.rst index aa03f389d41d..38a990b5f3b6 100644 --- a/Documentation/driver-api/gpio/consumer.rst +++ b/Documentation/driver-api/gpio/consumer.rst @@ -109,11 +109,13 @@ For a function using multiple GPIOs all of those can be obtained with one call:: enum gpiod_flags flags) This function returns a struct gpio_descs which contains an array of -descriptors:: +descriptors. It may also contain a valid descriptor of a single GPIO chip in +case the array strictly matches pin hardware layout of the chip:: struct gpio_descs { unsigned int ndescs; struct gpio_desc *desc[]; + struct gpio_chip *chip; } The following function returns NULL instead of -ENOENT if no GPIOs have been diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c index bdbfc95793e7..c50bcec6e2d7 100644 --- a/drivers/gpio/gpiolib.c +++ b/drivers/gpio/gpiolib.c @@ -4161,6 +4161,7 @@ struct gpio_descs *__must_check gpiod_get_array(struct device *dev, { struct gpio_desc *desc; struct gpio_descs *descs; + struct gpio_chip *chip; int count; count = gpiod_count(dev, con_id); @@ -4177,6 +4178,19 @@ struct gpio_descs *__must_check gpiod_get_array(struct device *dev, gpiod_put_array(descs); return ERR_CAST(desc); } + + /* + * Verify if the array qualifies for fast bitmap operations + * (single chip, pins in hardware order starting from 0) + * and mark the array with the chip descriptor if true. + */ + chip = gpiod_to_chip(desc); + if (descs->chip == NULL) + descs->chip = chip; + if (!IS_ERR(descs->chip) && (chip != descs->chip || + gpio_chip_hwgpio(desc) != descs->ndescs)) + descs->chip = ERR_PTR(-EINVAL); + descs->desc[descs->ndescs] = desc; descs->ndescs++; } diff --git a/include/linux/gpio/consumer.h b/include/linux/gpio/consumer.h index 21ddbe440030..862ee027a02f 100644 --- a/include/linux/gpio/consumer.h +++ b/include/linux/gpio/consumer.h @@ -22,6 +22,7 @@ struct gpio_desc; * gpiod_get_array(). */ struct gpio_descs { + struct gpio_chip *chip; unsigned int ndescs; struct gpio_desc *desc[]; }; From patchwork Mon Aug 6 22:29:16 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Janusz Krzysztofik X-Patchwork-Id: 954280 X-Patchwork-Delegate: miquel.raynal@bootlin.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.infradead.org (client-ip=2607:7c80:54:e::133; helo=bombadil.infradead.org; envelope-from=linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="SRlyWbse"; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="WhVqN1At"; dkim-atps=neutral Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:e::133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 41ksrb0M1gz9s3x for ; Tue, 7 Aug 2018 08:34:07 +1000 (AEST) 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:MIME-Version:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:References: In-Reply-To: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:List-Owner; bh=BVVFiFWwi/kZFvRSWNrmscTSP7hWdZ4v78DpxvGBr8k=; b=SRlyWbsenAQQfXx6EYu9mvYl7E CejBKhMxwV64Rhh399ihWUWtUmDgfB7JAzkI1AUXYj33bi8eV7u34YbF19YmuJFouYnkGMzGpaZLy aum6vIJx5GwcpLkzym3mdFEeApg/sXPDABE+9W6+q4sBWy/Kl5sy+aMNMNDz2k94SRZbdae6xybfo kRnBc1BcgGvCLMGaVai8liZr5z89seUC+tuCf9w+zfeij/nsdu16qSgEiGpm3SLN8FRsT2nMkleFK W1Dzo18e9GD5CHQMYEH9RExxTuL0l6h5mQT2HZOrI3pw59FO28DcdhNGw2ejwx66+BQFZoFxs09XT gSru5r5A==; 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 1fmo4d-0003mm-Pr; Mon, 06 Aug 2018 22:33:59 +0000 Received: from mail-lf1-x141.google.com ([2a00:1450:4864:20::141]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1fmo0a-0005T1-G1; Mon, 06 Aug 2018 22:30:06 +0000 Received: by mail-lf1-x141.google.com with SMTP id j143-v6so10187991lfj.12; Mon, 06 Aug 2018 15:29:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=ebIIlYMRwOV2gYgWi7T9qT+QmjkOUcUsHwsxQZ0n6Tk=; b=WhVqN1At68jh0Y7HUfCj4y3WSZTCj9P89b9nXlw1PQ5rNy/IL1jpTWuCmtpfoPOY5v FuKeruPHb2LFCCkefM4a38qkltc7Z/OxFQreVur2EJFzQaUmhKykhcSJkIKsS5x/5WAL gmq4YoM86EfL7xH591j4hLOipTrI3ZvQ7uQ5my67n/bnsejrZftrqBD+P3aGYztAOxPJ aN/ePJL8CCYoSGIfda/+uHePDu23bZwMp3O6qFC2NIVz7GyR/y2wnBVWQHJ3qF1WDPGx gu08VrnAtUogqQWJSFijFjwBFj4Qz5qAyxt5H+BiuGLQ9ZKEjkwbJUcK8Bh452DMCNI5 0w6g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=ebIIlYMRwOV2gYgWi7T9qT+QmjkOUcUsHwsxQZ0n6Tk=; b=s2uSGccCRiVAADvJNPDIoQIichH7MwIRtxvGuMK5gSoOsMJPfehGQFZHC7oYpoiQiG 49jPgB5vEyHb4plpYRgOX24hR215Nz3qly3clZCpU8ayNRooNnVgrePYll5OOCG9RSv6 6kgo+hg9mp5OAYRohneNw7Vmw+/ICQVAhgW4+Tyez9GQN92cS4X1I6gMHq1sAeBhwPMF v2zJkQHKJc50A8Wwnc52VI1ClUMsAdAf+DKL2AzmoUlG7ydQGSZFUDg9vZTxBWFKGkas dnt0Z7TAv7ITAFmdmtXyTdOa1djUSl227NlFmssOWxydNQZJM12Aw6IO/ThIGGQk1g/I qesA== X-Gm-Message-State: AOUpUlHGDikgjv6h41pWgk6WyIghWB3D3Q2oy5HbgNd8f72bUYzCWfHy RBYDKH/qI9XM49q+TXSzqJU= X-Google-Smtp-Source: AAOMgpdN9LZehLcDgBA7w0nORZ3SY79wH/6RfscsmGRAExgcZ4fMvUNIaZmKPIAqkV0EoWG/wHvlrw== X-Received: by 2002:a19:7609:: with SMTP id c9-v6mr11952619lff.73.1533594581791; Mon, 06 Aug 2018 15:29:41 -0700 (PDT) Received: from z50.lan (93-181-165-181.internetia.net.pl. [93.181.165.181]) by smtp.gmail.com with ESMTPSA id o4-v6sm2438561ljc.67.2018.08.06.15.29.40 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 06 Aug 2018 15:29:41 -0700 (PDT) From: Janusz Krzysztofik To: Boris Brezillon , Linus Walleij Subject: [RFC PATCH v2 10/12] gpiolib: Introduce bitmap get/set array API extension Date: Tue, 7 Aug 2018 00:29:16 +0200 Message-Id: <20180806222918.12644-11-jmkrzyszt@gmail.com> X-Mailer: git-send-email 2.16.4 In-Reply-To: <20180806222918.12644-1-jmkrzyszt@gmail.com> References: <20180718235710.18242-1-jmkrzyszt@gmail.com> <20180806222918.12644-1-jmkrzyszt@gmail.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20180806_152948_988996_1FB1A8D8 X-CRM114-Status: GOOD ( 17.77 ) X-Spam-Score: 0.5 (/) X-Spam-Report: SpamAssassin version 3.4.1 on bombadil.infradead.org summary: Content analysis details: (0.5 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at http://www.dnswl.org/, no trust [2a00:1450:4864:20:0:0:0:141 listed in] [list.dnswl.org] 0.6 HK_RANDOM_ENVFROM Envelope sender username looks random 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (jmkrzyszt[at]gmail.com) -0.0 SPF_PASS SPF: sender matches SPF record 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-omap@vger.kernel.org, Jonathan Corbet , Tony Lindgren , Richard Weinberger , linux-gpio@vger.kernel.org, Aaro Koskinen , linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Marek Vasut , Janusz Krzysztofik , linux-mtd@lists.infradead.org, Miquel Raynal , Brian Norris , David Woodhouse , linux-arm-kernel@lists.infradead.org MIME-Version: 1.0 Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org Certain GPIO array lookups may return arrays marked as applicable for fast get/set array operations. In order to make use of that information, a new API extension which allows passing it to get/set functions is needed. Create a set of frontends to get/set array functions which accept strict descriptor array structures returned by gpiod_get_array() instead of arbitrary descriptor arrays. Since the intended purpose of the new API extension is to speed up get/set array operations, also replace array of integer values argument with their bitmap representation, ready for being passed directly to chip callback functions, without iterating them. Applicability of the new API is limited to arrays not exceeding bit length of type unsigned long (32 pins). Signed-off-by: Janusz Krzysztofik --- Documentation/driver-api/gpio/consumer.rst | 26 ++++ drivers/gpio/gpiolib.c | 209 +++++++++++++++++++++++++++++ include/linux/gpio/consumer.h | 14 ++ 3 files changed, 249 insertions(+) diff --git a/Documentation/driver-api/gpio/consumer.rst b/Documentation/driver-api/gpio/consumer.rst index 38a990b5f3b6..bec4eab3b87c 100644 --- a/Documentation/driver-api/gpio/consumer.rst +++ b/Documentation/driver-api/gpio/consumer.rst @@ -383,6 +383,32 @@ or negative on error. Note the difference to gpiod_get_value(), which returns 0 or 1 on success to convey the GPIO value. With the array functions, the GPIO values are stored in value_array rather than passed back as return value. +Additionally, the following variants of the above functions exist which operate +on bitmaps of values instead of arrays of values:: + + int gpiod_get_array_bitmap(struct gpio_descs *desc_array, + unsigned long *bits); + int gpiod_get_raw_array_bitmap(struct gpio_descs *desc_array, + unsigned long *bits); + int gpiod_get_array_bitmap_cansleep(struct gpio_desc *desc_array, + unsigned long *bits); + int gpiod_get_raw_array_bitmap_cansleep(struct gpio_desc **desc_array, + unsigned long *bits) + + void gpiod_set_array_bitmap(struct gpio_descs *desc_array, + unsigned long *bits) + void gpiod_set_raw_array_bitmap(struct gpio_descs *desc_array, + unsigned long *bitmap) + void gpiod_set_array_bitmap_cansleep(struct gpio_descs *desc_array, + unsigned long *bits) + void gpiod_set_raw_array_bitmap_cansleep(struct gpio_descs *desc_array, + unsigned long *bits) + +Unlike their counterparts, these functions don't accept arbitrary GPIO +descriptor arrays, only those of type struct gpio_descs returned by +gpiod_get_array() and its variants. Supported array size is limited to the size +of the bitmap, i.e., sizeof(unsigned long). + GPIOs mapped to IRQs -------------------- diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c index c50bcec6e2d7..5b541364dee0 100644 --- a/drivers/gpio/gpiolib.c +++ b/drivers/gpio/gpiolib.c @@ -2836,6 +2836,27 @@ int gpiod_get_array_value_complex(bool raw, bool can_sleep, return 0; } +int gpiod_get_array_bitmap_complex(bool raw, bool can_sleep, + struct gpio_descs *array, + unsigned long *bits) +{ + int value_array[sizeof(*bits)]; + int i; + + if (array->ndescs > sizeof(*bits)) + return -EINVAL; + + i = gpiod_get_array_value_complex(raw, can_sleep, array->ndescs, + array->desc, value_array); + if (i) + return i; + + for (i = 0; i < array->ndescs; i++) + __assign_bit(i, bits, value_array[i]); + + return 0; +} + /** * gpiod_get_raw_value() - return a gpio's raw value * @desc: gpio whose value will be returned @@ -2929,6 +2950,50 @@ int gpiod_get_array_value(unsigned int array_size, } EXPORT_SYMBOL_GPL(gpiod_get_array_value); +/** + * gpiod_get_raw_array_bitmap() - read raw values from an array of GPIOs + * @desc_array: array of GPIO descriptors whose values will be read, obtained + * with gpiod_get_array(), + * @bits: bitmap to store the read values + * + * Read the raw values of the GPIOs, i.e. the values of the physical lines + * without regard for their ACTIVE_LOW status. Return 0 in case of success, + * else an error code. + * + * This function should be called from contexts where we cannot sleep, + * and it will complain if the GPIO chip functions potentially sleep. + */ +int gpiod_get_raw_array_bitmap(struct gpio_descs *desc_array, + unsigned long *bits) +{ + if (!desc_array) + return -EINVAL; + return gpiod_get_array_bitmap_complex(true, false, desc_array, bits); +} +EXPORT_SYMBOL_GPL(gpiod_get_raw_array_bitmap); + +/** + * gpiod_get_array_bitmap() - read values from an array of GPIOs + * @desc_array: array of GPIO descriptors whose values will be read, obtained + * with gpiod_get_array(), + * @bits: bitmap to store the read values + * + * Read the logical values of the GPIOs, i.e. taking their ACTIVE_LOW status + * into account. Return 0 in case of success, else an error code. + * + * This function should be called from contexts where we cannot sleep, + * and it will complain if the GPIO chip functions potentially sleep. + */ + +int gpiod_get_array_bitmap(struct gpio_descs *desc_array, + unsigned long *bits) +{ + if (!desc_array) + return -EINVAL; + return gpiod_get_array_bitmap_complex(false, false, desc_array, bits); +} +EXPORT_SYMBOL_GPL(gpiod_get_raw_array_bitmap); + /* * gpio_set_open_drain_value_commit() - Set the open drain gpio's value. * @desc: gpio descriptor whose state need to be set. @@ -3081,6 +3146,23 @@ int gpiod_set_array_value_complex(bool raw, bool can_sleep, return 0; } +int gpiod_set_array_bitmap_complex(bool raw, bool can_sleep, + struct gpio_descs *array, + unsigned long *bits) +{ + int value_array[sizeof(*bits)]; + int i; + + if (array->ndescs > sizeof(*bits)) + return -EINVAL; + + for (i = 0; i < array->ndescs; i++) + value_array[i] = test_bit(i, bits); + + return gpiod_set_array_value_complex(raw, can_sleep, array->ndescs, + array->desc, value_array); +} + /** * gpiod_set_raw_value() - assign a gpio's raw value * @desc: gpio whose value will be assigned @@ -3185,6 +3267,48 @@ void gpiod_set_array_value(unsigned int array_size, } EXPORT_SYMBOL_GPL(gpiod_set_array_value); +/** + * gpiod_set_raw_array_bitmap() - assign values to an array of GPIOs + * @desc_array: array of GPIO descriptors whose values will be assigned, + * obtained with gpiod_get_array(), + * @bits: bitmap of values to assign + * + * Set the raw values of the GPIOs, i.e. the values of the physical lines + * without regard for their ACTIVE_LOW status. + * + * This function should be called from contexts where we cannot sleep, and will + * complain if the GPIO chip functions potentially sleep. + */ +int gpiod_set_raw_array_bitmap(struct gpio_descs *desc_array, + unsigned long *bits) +{ + if (!desc_array) + return -EINVAL; + return gpiod_set_array_bitmap_complex(true, false, desc_array, bits); +} +EXPORT_SYMBOL_GPL(gpiod_set_raw_array_bitmap); + +/** + * gpiod_set_array_bitmap() - assign values to an array of GPIOs + * @array_size: number of elements in the descriptor / value arrays + * @desc_array: array of GPIO descriptors whose values will be assigned + * @bits: bitmap of values to assign + * + * Set the logical values of the GPIOs, i.e. taking their ACTIVE_LOW status + * into account. + * + * This function should be called from contexts where we cannot sleep, and will + * complain if the GPIO chip functions potentially sleep. + */ +void gpiod_set_array_bitmap(struct gpio_descs *desc_array, + unsigned long *bits) +{ + if (!desc_array) + return; + gpiod_set_array_bitmap_complex(false, false, desc_array, bits); +} +EXPORT_SYMBOL_GPL(gpiod_set_array_bitmap); + /** * gpiod_cansleep() - report whether gpio value access may sleep * @desc: gpio to check @@ -3446,6 +3570,49 @@ int gpiod_get_array_value_cansleep(unsigned int array_size, } EXPORT_SYMBOL_GPL(gpiod_get_array_value_cansleep); +/** + * gpiod_get_raw_array_bitmap_cansleep() - read raw values from array of GPIOs + * @desc_array: array of GPIO descriptors whose values will be read, obtained + * with gpiod_get_array(), + * @bits: bitmap to store the read values + * + * Read the raw values of the GPIOs, i.e. the values of the physical lines + * without regard for their ACTIVE_LOW status. Return 0 in case of success, + * else an error code. + * + * This function is to be called from contexts that can sleep. + */ +int gpiod_get_raw_array_bitmap_cansleep(struct gpio_descs *desc_array, + unsigned long *bits) +{ + might_sleep_if(extra_checks); + if (!desc_array) + return -EINVAL; + return gpiod_get_array_bitmap_complex(true, true, desc_array, bits); +} +EXPORT_SYMBOL_GPL(gpiod_get_raw_array_bitmap_cansleep); + +/** + * gpiod_get_array_bitmap_cansleep() - read values from an array of GPIOs + * @desc_array: array of GPIO descriptors whose values will be read, obtained + * with gpiod_get_array(), + * @bits: bitmap to store the read values + * + * Read the logical values of the GPIOs, i.e. taking their ACTIVE_LOW status + * into account. Return 0 in case of success, else an error code. + * + * This function is to be called from contexts that can sleep. + */ +int gpiod_get_array_bitmap_cansleep(struct gpio_descs *desc_array, + unsigned long *bits) +{ + might_sleep_if(extra_checks); + if (!desc_array) + return -EINVAL; + return gpiod_get_array_bitmap_complex(false, true, desc_array, bits); +} +EXPORT_SYMBOL_GPL(gpiod_get_array_bitmap_cansleep); + /** * gpiod_set_raw_value_cansleep() - assign a gpio's raw value * @desc: gpio whose value will be assigned @@ -3545,6 +3712,48 @@ void gpiod_set_array_value_cansleep(unsigned int array_size, } EXPORT_SYMBOL_GPL(gpiod_set_array_value_cansleep); +/** + * gpiod_set_raw_array_bitmap_cansleep() - assign values to an array of GPIOs + * @desc_array: array of GPIO descriptors whose values will be assigned, + * obtained with gpiod_get_array(), + * @bits: bitmap of values to assign + * + * Set the raw values of the GPIOs, i.e. the values of the physical lines + * without regard for their ACTIVE_LOW status. + * + * This function is to be called from contexts that can sleep. + */ +int gpiod_set_raw_array_bitmap_cansleep(struct gpio_descs *desc_array, + unsigned long *bits) +{ + might_sleep_if(extra_checks); + if (!desc_array) + return -EINVAL; + return gpiod_set_array_bitmap_complex(true, true, desc_array, bits); +} +EXPORT_SYMBOL_GPL(gpiod_set_raw_array_bitmap_cansleep); + +/** + * gpiod_set_array_bitmap_cansleep() - assign values to an array of GPIOs + * @desc_array: array of GPIO descriptors whose values will be assigned, + * obtained with gpiod_get_array(), + * @bits: bitmap of values to assign + * + * Set the logical values of the GPIOs, i.e. taking their ACTIVE_LOW status + * into account. + * + * This function is to be called from contexts that can sleep. + */ +void gpiod_set_array_bitmap_cansleep(struct gpio_descs *desc_array, + unsigned long *bits) +{ + might_sleep_if(extra_checks); + if (!desc_array) + return; + gpiod_set_array_bitmap_complex(false, true, desc_array, bits); +} +EXPORT_SYMBOL_GPL(gpiod_set_array_bitmap_cansleep); + /** * gpiod_add_lookup_table() - register GPIO device consumers * @table: table of consumers to register diff --git a/include/linux/gpio/consumer.h b/include/linux/gpio/consumer.h index 862ee027a02f..1eabce4fc6c5 100644 --- a/include/linux/gpio/consumer.h +++ b/include/linux/gpio/consumer.h @@ -106,35 +106,49 @@ int gpiod_direction_output_raw(struct gpio_desc *desc, int value); int gpiod_get_value(const struct gpio_desc *desc); int gpiod_get_array_value(unsigned int array_size, struct gpio_desc **desc_array, int *value_array); +int gpiod_get_array_bitmap(struct gpio_descs *desc_array, unsigned long *bits); void gpiod_set_value(struct gpio_desc *desc, int value); void gpiod_set_array_value(unsigned int array_size, struct gpio_desc **desc_array, int *value_array); +void gpiod_set_array_bitmap(struct gpio_descs *desc_array, unsigned long *bits); int gpiod_get_raw_value(const struct gpio_desc *desc); int gpiod_get_raw_array_value(unsigned int array_size, struct gpio_desc **desc_array, int *value_array); +int gpiod_get_raw_array_bitmap(struct gpio_descs *desc_array, + unsigned long *bits); void gpiod_set_raw_value(struct gpio_desc *desc, int value); int gpiod_set_raw_array_value(unsigned int array_size, struct gpio_desc **desc_array, int *value_array); +int gpiod_set_raw_array_bitmap(struct gpio_descs *desc_array, + unsigned long *bits); /* Value get/set from sleeping context */ int gpiod_get_value_cansleep(const struct gpio_desc *desc); int gpiod_get_array_value_cansleep(unsigned int array_size, struct gpio_desc **desc_array, int *value_array); +int gpiod_get_array_bitmap_cansleep(struct gpio_descs *desc_array, + unsigned long *bits); void gpiod_set_value_cansleep(struct gpio_desc *desc, int value); void gpiod_set_array_value_cansleep(unsigned int array_size, struct gpio_desc **desc_array, int *value_array); +void gpiod_set_array_bitmap_cansleep(struct gpio_descs *desc_array, + unsigned long *bits); int gpiod_get_raw_value_cansleep(const struct gpio_desc *desc); int gpiod_get_raw_array_value_cansleep(unsigned int array_size, struct gpio_desc **desc_array, int *value_array); +int gpiod_get_raw_array_bitmap_cansleep(struct gpio_descs *desc_array, + unsigned long *bits); void gpiod_set_raw_value_cansleep(struct gpio_desc *desc, int value); int gpiod_set_raw_array_value_cansleep(unsigned int array_size, struct gpio_desc **desc_array, int *value_array); +int gpiod_set_raw_array_bitmap_cansleep(struct gpio_descs *desc_array, + unsigned long *bits); int gpiod_set_debounce(struct gpio_desc *desc, unsigned debounce); int gpiod_set_transitory(struct gpio_desc *desc, bool transitory); From patchwork Mon Aug 6 22:29:17 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Janusz Krzysztofik X-Patchwork-Id: 954279 X-Patchwork-Delegate: miquel.raynal@bootlin.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.infradead.org (client-ip=2607:7c80:54:e::133; helo=bombadil.infradead.org; envelope-from=linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="kQtU1cpT"; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="O2N6qSTD"; dkim-atps=neutral Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:e::133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 41ksql4TRkz9s3x for ; Tue, 7 Aug 2018 08:33:23 +1000 (AEST) 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:MIME-Version:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:References: In-Reply-To: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:List-Owner; bh=Tlo0C6PbfZi1XqERgcA5wB9HxyVHI8jpdPToMQi5jgg=; b=kQtU1cpTASeRhT/vvCv1FiaR/6 a6nIsl3yKOLLo2CJJW3MyUi9K/EYkC4Z7KsWIURYN8f3GqVgkwVMwuoD1Dc0ZqzDFrwJhWTuI2JQD 611Og1efQbcXd+lHSY7lr6rJ4BXveGtQxcRb98KZIxxtrdyxGEbUSup3GHMw4zdsT+nZ2YANts1Vs pZs5PA8yMcL11ooBWlT7e8vRBEFzdc9XzMNy7pvtiU+NTRGZldSrQZzOXXa0Br5Hb29GyMKrJjkRb DwKezxs0J9pb9YjU75DBK9LfCCeRe9oMYgTEIu2lYgHO5DqhGYURvd7HjaG2z2E4JKHjCRn5B/YB1 9n19oMfw==; 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 1fmo3x-0002pP-7r; Mon, 06 Aug 2018 22:33:17 +0000 Received: from mail-lf1-x141.google.com ([2a00:1450:4864:20::141]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1fmo0a-0005TF-GT; Mon, 06 Aug 2018 22:30:02 +0000 Received: by mail-lf1-x141.google.com with SMTP id f135-v6so10187075lfg.10; Mon, 06 Aug 2018 15:29:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=FDaMkIad0o9QzNTv2EARYdjQpGULA5HnpcmySlWm3i8=; b=O2N6qSTD6wcYUO5uf/sAtdsjHk+jMRgROxM64BeLFfqEax+Sd2rSsUJXBLoACFBcfU vpNekW03thHx+TO+4dBbmDjf2ARNzjZJ8OwQ2JmymgK+1PhoIzxi4XFh9k23tXNkeVvg R/uUcHgx02mbIEzP04Oerc0v2PIDWffK6wANRL7q1ngph2ViEoL9LEDoA7W496FeGGWy fDEOFe7qBJJOAxK5zUlkF+1u2agqRzLDQjvJ1yRepsL8yKJFWV99oaF+DF47sTpWYxgX BhOrFttIAwOnfZYjZuWzM/h2xNhw20WJknDy/Yd3cYox7qeKVDQ+D6qNwpfoF+0FY7d4 Dgug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=FDaMkIad0o9QzNTv2EARYdjQpGULA5HnpcmySlWm3i8=; b=ABJTfWoyWvSxjaj6VCgZ/tH8WhOPrX0kj3zyPN+Ng7xfajq4NjfK2lz088eZw6OVJi u5FRc4XYEBYh2SDaJ7MOK9eqOjltTn0fSv70YGJ0CFPzkANayqwt6ZbQ/+VoV4yiklmX AOsugpW5W4VMsCdbLJgYoGbDHjhpAlMyAk6JmoclGJMSnjE5nuovB6MaNqgXPMieZvAJ pprzlJEOgGFcgWLrem45yugmTFWzMXOemd3eADqyy0KpxXvKxgbSk5vVhdiGnfMnQegJ ijWerimbHwzYuDso0cTP6BeMYg5kO9WJIy7+kxQjeiMVTrzsWlA0eF5s5YnDBDhPyQbh 2WzA== X-Gm-Message-State: AOUpUlEG77Kzu7V+sAaRfgrHQjIuwR9RPH9aArn2V6Injn/mWlVO/Lum RwrK+yCuLVfuc8wIgllOZ8k= X-Google-Smtp-Source: AAOMgpciX3+0nE/8mArhut1MLp5m3pxfDitwVhtDsHuy0YeZFQlZ9DyC70LgedcTWPE5Cjl89pXqDA== X-Received: by 2002:a19:b24e:: with SMTP id b75-v6mr11741465lff.11.1533594583186; Mon, 06 Aug 2018 15:29:43 -0700 (PDT) Received: from z50.lan (93-181-165-181.internetia.net.pl. [93.181.165.181]) by smtp.gmail.com with ESMTPSA id o4-v6sm2438561ljc.67.2018.08.06.15.29.41 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 06 Aug 2018 15:29:42 -0700 (PDT) From: Janusz Krzysztofik To: Boris Brezillon , Linus Walleij Subject: [RFC PATCH v2 11/12] mtd: rawnand: ams-delta: Use GPIO API bitmap extension Date: Tue, 7 Aug 2018 00:29:17 +0200 Message-Id: <20180806222918.12644-12-jmkrzyszt@gmail.com> X-Mailer: git-send-email 2.16.4 In-Reply-To: <20180806222918.12644-1-jmkrzyszt@gmail.com> References: <20180718235710.18242-1-jmkrzyszt@gmail.com> <20180806222918.12644-1-jmkrzyszt@gmail.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20180806_152949_010493_9D250FA0 X-CRM114-Status: GOOD ( 13.75 ) X-Spam-Score: 0.5 (/) X-Spam-Report: SpamAssassin version 3.4.1 on bombadil.infradead.org summary: Content analysis details: (0.5 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at http://www.dnswl.org/, no trust [2a00:1450:4864:20:0:0:0:141 listed in] [list.dnswl.org] 0.6 HK_RANDOM_ENVFROM Envelope sender username looks random 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (jmkrzyszt[at]gmail.com) -0.0 SPF_PASS SPF: sender matches SPF record 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-omap@vger.kernel.org, Jonathan Corbet , Tony Lindgren , Richard Weinberger , linux-gpio@vger.kernel.org, Aaro Koskinen , linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Marek Vasut , Janusz Krzysztofik , linux-mtd@lists.infradead.org, Miquel Raynal , Brian Norris , David Woodhouse , linux-arm-kernel@lists.infradead.org MIME-Version: 1.0 Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org Try to address the driver performance issues by replacing traditional get/set array function calls with their bitmap based equivalents. As long as fast bitmap processing path is not implemented in the new API extension, performance of the driver remains unchanged. Signed-off-by: Janusz Krzysztofik --- drivers/mtd/nand/raw/ams-delta.c | 19 +++---------------- 1 file changed, 3 insertions(+), 16 deletions(-) diff --git a/drivers/mtd/nand/raw/ams-delta.c b/drivers/mtd/nand/raw/ams-delta.c index 30c461138195..7b08b2c441d3 100644 --- a/drivers/mtd/nand/raw/ams-delta.c +++ b/drivers/mtd/nand/raw/ams-delta.c @@ -78,15 +78,9 @@ static void ams_delta_write_commit(struct ams_delta_nand *priv) static void ams_delta_write_next_byte(struct ams_delta_nand *priv, u_char byte) { - struct gpio_descs *data_gpiods = priv->data_gpiods; unsigned long bits = byte; - int i, value_array[data_gpiods->ndescs]; - - for (i = 0; i < data_gpiods->ndescs; i++) - value_array[i] = test_bit(i, &bits); - gpiod_set_raw_array_value(data_gpiods->ndescs, data_gpiods->desc, - value_array); + gpiod_set_raw_array_bitmap(priv->data_gpiods, &bits); ams_delta_write_commit(priv); } @@ -106,22 +100,15 @@ static void ams_delta_write_first_byte(struct ams_delta_nand *priv, u_char byte) static u_char ams_delta_read_next_byte(struct ams_delta_nand *priv) { - struct gpio_descs *data_gpiods = priv->data_gpiods; - unsigned long bits = 0; - int i, value_array[data_gpiods->ndescs]; + unsigned long bits; gpiod_set_value(priv->gpiod_nre, 0); ndelay(40); - gpiod_get_raw_array_value(data_gpiods->ndescs, data_gpiods->desc, - value_array); + gpiod_get_raw_array_bitmap(priv->data_gpiods, &bits); gpiod_set_value(priv->gpiod_nre, 1); - for (i = 0; i < data_gpiods->ndescs; i++) - if (value_array[i]) - __set_bit(i, &bits); - return bits; } From patchwork Mon Aug 6 22:29:18 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Janusz Krzysztofik X-Patchwork-Id: 954275 X-Patchwork-Delegate: miquel.raynal@bootlin.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.infradead.org (client-ip=2607:7c80:54:e::133; helo=bombadil.infradead.org; envelope-from=linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="hfykbMdi"; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="f4TupVyG"; dkim-atps=neutral Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:e::133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 41ksnv2fZcz9s4c for ; Tue, 7 Aug 2018 08:31:47 +1000 (AEST) 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:MIME-Version:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:References: In-Reply-To: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:List-Owner; bh=DTZAhlKQC1Ili+l5ENvaZ+EY8EwhKXmRnZkTVZLOWEY=; b=hfykbMdit4VeW0Lh+pA3nobKnM 98wwCly99NiCIZt3Q799uezuB2odlqqFEZnrnpEA4McbFgdPEVDNAnDDplefLmSRsubtamvS9vByk iJX8DwI6hM5e2i0xCLVsM1FEw55t5JllnMomiUhYi/MaHa+ThLSjw7fqz64bSZ9/wcSz/AQK6tSp2 A6fSSx9dACQZO317VjGMhtU21O6oAZAMvwkzX8nCV8h7yPpztJ5BNmELY/RUhp3tJnQjLk0j/mlkx L1VckcbUnG9r5YbYyQLu9jNsfAzgTjqk3gnWPUMIvC4o9ujynikUaAec6gDtrp2ZAxFEtCxaj8viL eYvk4h2w==; 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 1fmo2P-0000Jm-NL; Mon, 06 Aug 2018 22:31:41 +0000 Received: from mail-lf1-x142.google.com ([2a00:1450:4864:20::142]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1fmo0Y-0005UC-Qu; Mon, 06 Aug 2018 22:29:55 +0000 Received: by mail-lf1-x142.google.com with SMTP id y200-v6so10196921lfd.7; Mon, 06 Aug 2018 15:29:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=UZjTLX7QnQr/t1695VcV1KTsYiUTLZK2WnrZPxW0nQ0=; b=f4TupVyGulWb3GeTA5wNIXDgA28jrcBpoND1Ko4n43chjDMerygFxt+GgpBmhCWCEh K/A8/d6es6eXkmxlKoHfZjx30fvveGPjnB182ekcFQetalYPOaF4T9hu0nUk85K7igRD pFaf34gyE0Zk2i1ShroXnPSN5wopTGpVpI1c/n9zik+LN0rqjfs7uR3Gro5ITP9UccJk gxvw9AxP+3OeRFlgDcpoSvLkaHLUAWI/ABqKHR/WspP52lLK5uBZn4q3a4MufOHAaCYx pZWK2+kUNIZ1qoXXJfb7/ohkBoX7If/OVQRjuGQrfmXfv5c61AbP5/BLb6/0Yc4wYlwU kEYA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=UZjTLX7QnQr/t1695VcV1KTsYiUTLZK2WnrZPxW0nQ0=; b=LSzeC+613z5xhRugtzI0fegvYRIPDJinO54GASqfKaJS7ZbsIzLNFq8aGxHuOqEXjt oOYSKgPUnCODYK8WKXCP7uTF+nyXU9tkgpNCjPm2HmpBit1t720G6+stYrH+QzeqS6SO P9qYM62RANX8sULuWi44pSXSBKErx6QIiHn8oG5LhWqqxdfqfFQMo4mbgkeErwy+743P XOqYSTFAGdvtugyw8u6XUb/DLB1bE/qYP5K2oh43+ZoYkxd56YtZdyo4U2p4juP8uYVB 6/sUEpl1kaVqXeibFWgPOTl0Ib/wmziK7EIWkjvwpKKApjPlc0JeR/OpNCDUwd8U8Cum Z4HQ== X-Gm-Message-State: AOUpUlElXPIKn3ZG4UAbONQ8V8zsQLIUjeEoqB07jYTWBr+beZEkd+cd f1XSPdvZkuy0pNVBKBMpiuA= X-Google-Smtp-Source: AAOMgpdOVignCZnEeCBAFO3oZT9ssWE7eymuQTN++pgaa4W5/B4vcnak1+wEbM2FXkRJkCqWvtg9Vw== X-Received: by 2002:a19:5a56:: with SMTP id o83-v6mr11909803lfb.50.1533594584634; Mon, 06 Aug 2018 15:29:44 -0700 (PDT) Received: from z50.lan (93-181-165-181.internetia.net.pl. [93.181.165.181]) by smtp.gmail.com with ESMTPSA id o4-v6sm2438561ljc.67.2018.08.06.15.29.43 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 06 Aug 2018 15:29:44 -0700 (PDT) From: Janusz Krzysztofik To: Boris Brezillon , Linus Walleij Subject: [RFC PATCH v2 12/12] gpiolib: Add fast processing path to bitmap API functions Date: Tue, 7 Aug 2018 00:29:18 +0200 Message-Id: <20180806222918.12644-13-jmkrzyszt@gmail.com> X-Mailer: git-send-email 2.16.4 In-Reply-To: <20180806222918.12644-1-jmkrzyszt@gmail.com> References: <20180718235710.18242-1-jmkrzyszt@gmail.com> <20180806222918.12644-1-jmkrzyszt@gmail.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20180806_152947_311908_253BDB98 X-CRM114-Status: GOOD ( 12.64 ) X-Spam-Score: 0.5 (/) X-Spam-Report: SpamAssassin version 3.4.1 on bombadil.infradead.org summary: Content analysis details: (0.5 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at http://www.dnswl.org/, no trust [2a00:1450:4864:20:0:0:0:142 listed in] [list.dnswl.org] 0.6 HK_RANDOM_ENVFROM Envelope sender username looks random 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (jmkrzyszt[at]gmail.com) -0.0 SPF_PASS SPF: sender matches SPF record 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-omap@vger.kernel.org, Jonathan Corbet , Tony Lindgren , Richard Weinberger , linux-gpio@vger.kernel.org, Aaro Koskinen , linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Marek Vasut , Janusz Krzysztofik , linux-mtd@lists.infradead.org, Miquel Raynal , Brian Norris , David Woodhouse , linux-arm-kernel@lists.infradead.org MIME-Version: 1.0 Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org Certain GPIO descriptor arrays returned by gpio_get_array() may contain information on a single GPIO chip driving array member pins in hardware order. In such cases, bitmaps of values can be passed directly to the chip callback functions without wasting time on iterations. Add respective code to gpiod_get/set_array_bitmap_complex() functions. Signed-off-by: Janusz Krzysztofik --- Documentation/driver-api/gpio/consumer.rst | 6 ++++++ drivers/gpio/gpiolib.c | 14 ++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/Documentation/driver-api/gpio/consumer.rst b/Documentation/driver-api/gpio/consumer.rst index bec4eab3b87c..b82f134dc352 100644 --- a/Documentation/driver-api/gpio/consumer.rst +++ b/Documentation/driver-api/gpio/consumer.rst @@ -409,6 +409,12 @@ descriptor arrays, only those of type struct gpio_descs returned by gpiod_get_array() and its variants. Supported array size is limited to the size of the bitmap, i.e., sizeof(unsigned long). +If the .chip member of the array structure, filled in by gpiod_get_array() in +certain circumstances, contains a valid GPIO chip descriptor, the raw variants +of the functions can take fast processing paths, passing bitmap arguments +directly to the chip callback functions. That allows for utilization of GPIO +banks as data I/O ports without much loss of performance. + GPIOs mapped to IRQs -------------------- diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c index 5b541364dee0..bf95f2964bc5 100644 --- a/drivers/gpio/gpiolib.c +++ b/drivers/gpio/gpiolib.c @@ -2846,6 +2846,12 @@ int gpiod_get_array_bitmap_complex(bool raw, bool can_sleep, if (array->ndescs > sizeof(*bits)) return -EINVAL; + if (raw && !IS_ERR_OR_NULL(array->chip)) { + unsigned long mask = (1ULL << array->ndescs) - 1; + + return gpio_chip_get_multiple(array->chip, &mask, bits); + } + i = gpiod_get_array_value_complex(raw, can_sleep, array->ndescs, array->desc, value_array); if (i) @@ -3156,6 +3162,14 @@ int gpiod_set_array_bitmap_complex(bool raw, bool can_sleep, if (array->ndescs > sizeof(*bits)) return -EINVAL; + if (raw && !IS_ERR_OR_NULL(array->chip)) { + unsigned long mask = (1ULL << array->ndescs) - 1; + + gpio_chip_set_multiple(array->chip, &mask, bits); + + return 0; + } + for (i = 0; i < array->ndescs; i++) value_array[i] = test_bit(i, bits);