From patchwork Mon Aug 13 22:34:42 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Janusz Krzysztofik X-Patchwork-Id: 957308 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="TQvKE2Y8"; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="aqimPGdZ"; 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 41q9df6BMgz9s7Q for ; Tue, 14 Aug 2018 08:39:34 +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=PjY91yiZRXoF/4XPsse5/7VGUaoM66gHz2WXJ+x/tHs=; b=TQvKE2Y8CxQhhUd1kTacyue6dO RqTfbYD39f8dizHjKpaAzeMLXq25OjIh6w0FfZqvbgb+yJFKAEVc668c7E4bnGifGVLRqUcRnCPwt Cn/JBSGyL6deXIWpYpTOzLRCoWMW0VO3WMYxdbIxG2htySpPN8i1xRFJVHHOnemXGC42eN8xO3+YR 1cNaLXaE+By9h0StyMb4jwWEmfBiPFK8gE6GQZ1yHKYVzsSsgAN4UkyBNnaIkkOa6l3C99iFzGkWX 5b5Qvm910tKSDhelfaira+ZjxzkaPNUQ1m9RPRtAqIANehTTTqQkHpmU1b5KM6O9o85wuYXrxJmm+ fEbaUlZA==; 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 1fpLUj-0004nL-G6; Mon, 13 Aug 2018 22:39:25 +0000 Received: from mail-lj1-x241.google.com ([2a00:1450:4864:20::241]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1fpLQL-0008TG-1K; Mon, 13 Aug 2018 22:34:54 +0000 Received: by mail-lj1-x241.google.com with SMTP id y17-v6so13851260ljy.8; Mon, 13 Aug 2018 15:34:39 -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=6W0P52EAcGilRXYojwcSyj8nFtjmU04fBIXHBvFHfj8=; b=aqimPGdZuTLxFndzYNxVd24jETvtQP0QpScjaW9Uc42FCJOmSHSe0PI/Dr3YDYPCl8 UBpwjJnvPc8TCcRz4PcjSB49e692GAcO0pEVywiCg/cVfFhQc9ePv2RA+o8cN+sZzB+M tNN7TNcwau2t8PKxd3obXARgwWCNkfNPtL5ywDheJLdt5T2AlN5tOrzv31QpwzJkq6ut +4kItkLrUpvMOUd6NHlWmI9fcE3TrSbqwMFUXSqEi0MW8inEKPErpDT0Kkl7Vb07XhDL DkfJzISV+rNB663Adl9RtjdBByORfeKc+MTfGU02f+3eo7HtYrXXFzSRUwiZWbLvm9jY LfWA== 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=6W0P52EAcGilRXYojwcSyj8nFtjmU04fBIXHBvFHfj8=; b=FWldLli9o0AH7T00mhleq5x97m9ICbrdoAxdrpqCNG1G7FcvxYr3nfwRvJ1YL3GOjW fO119oCqPz4HuXrQjrJid74cWafZCYZnd73aTB2Xz2I4cO3r9VTnyJRa8sWKCmIgnUzy 8dn1X4hq4j3RmNIWfBLpfrPWDfJg1z1Hdk+duYJ3xHiTVvYzogCMfkqHQOW0IuVeVG3E anOuFUVm9GJrjk3B7L+mbaqtI+L8i1Lk5AnEklXHc5QvfeHm1Ezc8LK2qDgmp97vxRiB rlqvcm2m04ryS4xeu9ROyWC9N9lVyAZq49onjdyIeZaYvUkH4awfTXii0XvdGmKLfHLf 2iLA== X-Gm-Message-State: AOUpUlGeCPdQCFkJo+oSbOlTIFyU7Vaxm9zzcj+b83JqV/MfG10Odl7O Xz+rebYUHK8J77sZNptx21A= X-Google-Smtp-Source: AA+uWPzKLXtTdBazwq8WvAiVwUMDvBBsq+GPbp5/rtLb1cBD2xJ1s42rL3Q0MgsaIh2l0kGQjBccAA== X-Received: by 2002:a2e:8950:: with SMTP id b16-v6mr8208272ljk.111.1534199678368; Mon, 13 Aug 2018 15:34: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 f136-v6sm3572702lfe.71.2018.08.13.15.34.37 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 13 Aug 2018 15:34:37 -0700 (PDT) From: Janusz Krzysztofik To: Boris Brezillon , Miquel Raynal Subject: [PATCH v3 1/7] mtd: rawnand: ams-delta: show parent device in sysfs Date: Tue, 14 Aug 2018 00:34:42 +0200 Message-Id: <20180813223448.21316-2-jmkrzyszt@gmail.com> X-Mailer: git-send-email 2.16.4 In-Reply-To: <20180813223448.21316-1-jmkrzyszt@gmail.com> References: <20180806222918.12644-1-jmkrzyszt@gmail.com> <20180813223448.21316-1-jmkrzyszt@gmail.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20180813_153453_074489_1C88E53B X-CRM114-Status: GOOD ( 15.09 ) 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:241 listed in] [list.dnswl.org] 0.6 HK_RANDOM_ENVFROM Envelope sender username looks random -0.0 SPF_PASS SPF: sender matches SPF record 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (jmkrzyszt[at]gmail.com) 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, Aaro Koskinen , Tony Lindgren , Richard Weinberger , Linus Walleij , Janusz Krzysztofik , linux-kernel@vger.kernel.org, Marek Vasut , linux-mtd@lists.infradead.org, linux-gpio@vger.kernel.org, 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 a bug where parent device symlinks aren't shown in sysfs. While at it, make use of the default owner set by mtdcore. 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 13 22:34:43 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Janusz Krzysztofik X-Patchwork-Id: 957309 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="eZAYvLFf"; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="lQ4qiSHw"; 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 41q9f32wdkz9s7Q for ; Tue, 14 Aug 2018 08:39:55 +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=3kjIVQt0M7RBaBggyAMG+UsNEDOwWMOsRrO4YXV4jys=; b=eZAYvLFf/YiGCPRLz41BMkBfIm dgNcNbwnDHD3BnW+LFD5f3RHNcq183S+f/zTP7rHid9Qdz2lR51y3BjcTjR72ZIcW6Le4Esa92VXk EFo5+m9Ivxa/0K8WnH9RtIkx4Crvt/j1QfAq5rn8RnrMLz8c3Dbs29PMd8io13jVuJTBMAO1hasiF ztrXwgJqkMDo1oGkCVkxH0XtUpxVkPoYXGfkjmU6W8C/dtKmXjwgj/P+f01Drzst1ds9XRMy7HJRI D3lwA1IUfZrMIiCLom5CR4pOMoDSKet91wcKzLQ3ldnjmfiJEZ/oSLOC4+iASaP7oN3wTCAaBtBfb xams+sSw==; 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 1fpLUz-0005A2-9u; Mon, 13 Aug 2018 22:39:41 +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 1fpLQL-0008TR-TU; Mon, 13 Aug 2018 22:34:55 +0000 Received: by mail-lj1-x243.google.com with SMTP id s12-v6so13864385ljj.0; Mon, 13 Aug 2018 15:34: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=pms4MWTz19wBd4xO/2dAaw6IS8GuAFLCzmvRGwxMaRU=; b=lQ4qiSHwJfb243/hyHccvnAHF/HeXgF4rzj2Z2eRupaHcyi+3+slL1ZeiPMxUQNRFQ lXEKG7wZkgwB0eT5WzqLdI40PAm5qa6VuWJkW3HL0eA1pGfBK+JdSUR+4xDFrTaStHEP zouEkfO4P07MZvL3kkz5gKPP8cFL/U53IzCvw4HeNIbYn2Bs4PWNe7InodRX2N3qDYp/ LNfnZkhe1t7/1w2gCcqkd1jcIcQFUPtVYE49ohPv+pI9kNL8NTSI5yn9k13PH080lJAA wSbdeeT6Asdtpha1UKrM7AuNImZm3WJXzdNNu6pKAeGT82QLzoasF5OlJ14pqg7vEBWZ PIRQ== 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=pms4MWTz19wBd4xO/2dAaw6IS8GuAFLCzmvRGwxMaRU=; b=LCUVKYDzCj43ZmU3OqsNshMM5v7wdLwngv0As0MxwYMYRHgh3ciHMOFWHXENmP/Sd5 YZT+MOv07MfVUFb8bO3c1OwRYJ5TsZWuIpNdUHy2RM2RWNCY+sm1EBDH58iC1izkh8W4 C6JCrJ7RivXJFcdM9dfToNcwoj8D+PeHVAUiw7GQMzsvRdRbmIe7z5Ww7sohFl4TopYG 7V0I04QpHXpd5nhXZrDlif9GfWk0qkSUoZ2K02lbdfcax6WGvwzk4s+2wch9xJ9+Dz9I tiGrNXJyTgWsfZWCmx7e6MNeiWtkHWsyRN2AFjognZgZkPrS/OJo+geCqZa5/UiJKaOr NPcw== X-Gm-Message-State: AOUpUlFDPycMaKTaBm1u00Rzp8WiKQB4hYbfVxyQzzJwfYq4UlPL18jK BMcr2KcBPfG69OjWjqrg5tU= X-Google-Smtp-Source: AA+uWPwmh7d4q8zOLDS48u/ijxbw+3GQbvYam5v6aEfXg/44UD7dL9u4Ly2QUDymPZdwPS1K7PIUPw== X-Received: by 2002:a2e:9dc7:: with SMTP id x7-v6mr13016185ljj.142.1534199679937; Mon, 13 Aug 2018 15:34:39 -0700 (PDT) Received: from z50.lan (93-181-165-181.internetia.net.pl. [93.181.165.181]) by smtp.gmail.com with ESMTPSA id f136-v6sm3572702lfe.71.2018.08.13.15.34.38 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 13 Aug 2018 15:34:39 -0700 (PDT) From: Janusz Krzysztofik To: Boris Brezillon , Miquel Raynal Subject: [PATCH v3 2/7] mtd: rawnand: ams-delta: Use private structure Date: Tue, 14 Aug 2018 00:34:43 +0200 Message-Id: <20180813223448.21316-3-jmkrzyszt@gmail.com> X-Mailer: git-send-email 2.16.4 In-Reply-To: <20180813223448.21316-1-jmkrzyszt@gmail.com> References: <20180806222918.12644-1-jmkrzyszt@gmail.com> <20180813223448.21316-1-jmkrzyszt@gmail.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20180813_153453_951155_C1C21639 X-CRM114-Status: GOOD ( 19.49 ) 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 SPF_PASS SPF: sender matches SPF record 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (jmkrzyszt[at]gmail.com) 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, Aaro Koskinen , Tony Lindgren , Richard Weinberger , Linus Walleij , Janusz Krzysztofik , linux-kernel@vger.kernel.org, Marek Vasut , linux-mtd@lists.infradead.org, linux-gpio@vger.kernel.org, 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 13 22:34:44 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Janusz Krzysztofik X-Patchwork-Id: 957299 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="JlVp0Sly"; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="I63en7JU"; 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 41q9Xk0YtDz9s7c for ; Tue, 14 Aug 2018 08:35:18 +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=hfSN17K8xRmVZF9S16mIxFxJO1fC17KNn4BvLfjW4nA=; b=JlVp0SlyVqM7PuJCJ3dv4Q5z8D 6ZX8wL6kJzEbywCCRwRvxwZh6UvdV43Oczya2GtvetjJlJ8uY40JVGiwsRQoNN7JcDsxcm81yULJh 3Ija7OYj9l836M8eo7Zwqb4dNuEqQ4wxVT/TVBfgt4atAaWDBGZ9rAMWjpTbEHcyJ4RdWtyaIp5yN HHFuLkbGB0MZlLHVWPtnWts3yxztSeaGO5nBXcqrlqVz3xotoonuPGyeIWKK0j5X1iIse0S/iT53l vR7PHvPTM9dX6cgsxYTlOyhPKhmvkwsZvjNIqv+rsuO1OHHxzyEVDEpX7OAzdSEK0mweKXTTj0t1e 6mGQJUXA==; 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 1fpLQb-0000FO-QL; Mon, 13 Aug 2018 22:35:09 +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 1fpLQJ-0008TV-CO; Mon, 13 Aug 2018 22:34:53 +0000 Received: by mail-lj1-x242.google.com with SMTP id u7-v6so13873326lji.3; Mon, 13 Aug 2018 15:34:42 -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=b2SdvcCWvKUHXYoc18v3gflYdo3rK03xrds2t38Pw+o=; b=I63en7JUaNTgxV8FI2WFzD6wAlVmktuXrNtMgvRQOLakFX+2L/JsMaUQSa3ialIX8i t89YBkKNPnlPeCm+g9b08bYHVqXdurk8llgXfbGti//vodwCm5xp9sBs7iNy03Awxswg K9rM+C13Hi5bQyxMIjDKnNw7hrySQshX9doiA3Ug2fx5APA1JeDKSaKSz17Vr8KKB1pe kHrC1w+C1S+obq2jjmmE9YPwJAG0AuoAl0tSe/7ItMUeyaRTeC2zIvFjtF9PYY+TJJ0L EN0/bdkXbvjV8QTcLOnGJjpqGeM6YBfpDHp6495Dk8jZ6zQFPLUs6/gONG9vUgJNaiKB iJag== 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=b2SdvcCWvKUHXYoc18v3gflYdo3rK03xrds2t38Pw+o=; b=OBHuUzwngWOt+F+W5EzNJcbqowwWUp8aNTNs+5S3wQF7zVmji+5g8K49kkbveDvrmf MhylemYVQHjW5w2H83ACoCK6SZySRK9WHFh/BvDVpPLHcNXFhdA19UvxtXXD7Ho+H60L 0NIZHDuGwbJJ7pxStkJC58XG37z7cjcfGwA7lZm+xPbSpvkSlClP/OEUqUlBGebREGA9 7wdW7gxw9VYrkhZaHJTAqYKG/VD7Ewr8cHxkxMDN9nXdgnpO2bVDeHjbqthoB8d1fGUI VzWz/eW5JYdGy8lCRT6Sv6Tt299fSN+y5/yiEgnk8o31iGQ9uTHYivZqCSJCeVH/tGGN yjhg== X-Gm-Message-State: AOUpUlE6WndYSerBmsJDie3SrEVGwdo5eu1jU3XH6QhRySevX/2FTR1X HHbOwfNfZjw3Yci7zf3tAv4= X-Google-Smtp-Source: AA+uWPyp/o2aXnNMyr3Oy9nMJmN23OVRMJ1SZaWObPJc3Qf3fejcc1yO0vjS0rIftTYgjnCq0bG5DQ== X-Received: by 2002:a2e:9599:: with SMTP id w25-v6mr9877719ljh.6.1534199681289; Mon, 13 Aug 2018 15:34: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 f136-v6sm3572702lfe.71.2018.08.13.15.34.39 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 13 Aug 2018 15:34:40 -0700 (PDT) From: Janusz Krzysztofik To: Boris Brezillon , Miquel Raynal Subject: [PATCH v3 3/7] ARM: OMAP1: ams-delta: Provide GPIO lookup table for NAND data port Date: Tue, 14 Aug 2018 00:34:44 +0200 Message-Id: <20180813223448.21316-4-jmkrzyszt@gmail.com> X-Mailer: git-send-email 2.16.4 In-Reply-To: <20180813223448.21316-1-jmkrzyszt@gmail.com> References: <20180806222918.12644-1-jmkrzyszt@gmail.com> <20180813223448.21316-1-jmkrzyszt@gmail.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20180813_153451_419492_7D241EC8 X-CRM114-Status: GOOD ( 15.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.6 HK_RANDOM_ENVFROM Envelope sender username looks random -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.0 SPF_PASS SPF: sender matches SPF record 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (jmkrzyszt[at]gmail.com) 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, Aaro Koskinen , Tony Lindgren , Richard Weinberger , Linus Walleij , Janusz Krzysztofik , linux-kernel@vger.kernel.org, Marek Vasut , linux-mtd@lists.infradead.org, linux-gpio@vger.kernel.org, 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 13 22:34:45 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Janusz Krzysztofik X-Patchwork-Id: 957303 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="QCpqSRjb"; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="Sc/sO7oz"; 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 41q9Z124Gqz9s5b for ; Tue, 14 Aug 2018 08:36:25 +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=5S2vsR+w/MksKaqj/QB4GgmqjduGr+ftHJ42HS/h2Sc=; b=QCpqSRjbnPIvYgqGBnPdixd0XJ aOhflwf40rGpQ93PC4jbmLNhysT++0zZXWZ1757qwOaZ6TgrDQlPd5eN3X7v/lBkP+6N5kntokUBr BjOTzfHCwu8enhEAIY0dI+M+z8Yi8p0bsoP8iXqPgMQh4ljWoB81xhhdyfNZA0SjDRaKm06CJ+DJ9 GKTotPEHTZT4jZwIzDdDKR5pQxtv7aPqDFfqV7zOswAcJvfmjZxe1e6dE84H39fylsHVpH8NN9/h0 EMTd4U24DtTweD10poxiUfQk8sVJkokQFiolXjpyTcASFWqb4eFzHhMjMeX+iUbXRP4KmHKoBZlY+ FgEMtNJg==; 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 1fpLRi-0002la-QN; Mon, 13 Aug 2018 22:36:18 +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 1fpLQL-0008TW-Td; Mon, 13 Aug 2018 22:34:55 +0000 Received: by mail-lj1-x243.google.com with SMTP id l15-v6so13832541lji.6; Mon, 13 Aug 2018 15:34: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=vz9K13ZdWceVmktSg13RqIlA5y3YYBZB41889HPVjQw=; b=Sc/sO7ozOO7qtE4QOYuSezh34zlQZQF/CwIF+hc5XmTDozjQPbofdPDOH7wKsrAv09 rsP9q0XdHyaFxIYcARAwl9mUS5wf7EBxAphKJjTm27vPROwqTf9PhFfvqGZ4GPbU2ihq nYHVBrhaZ7RDGyUk1meSmPV5AE68QM2PUAv2Wh7OP37QfTZ9rSu4CyxdO77XqNb6y8Fk 2JMRGhdStE9Q8yVNIsVMsILg1X5Yi0UWf7Uj+HueCltF5LKXsDLE0Wi21lKB2AzES4wx iY0ybRv7kdeiTzOkKUqsjAcdZYWtv6abVoWdJ+wxA86hYQ13Pkk+/LgGpR1M/DeB/8DM KKBw== 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=vz9K13ZdWceVmktSg13RqIlA5y3YYBZB41889HPVjQw=; b=VaxRf2DfGE07o0DFZOynYRyim07erOPgt8amd23mTKLRTKSLmRiUrC0wXBMT7Xo/Sr EekFbkQQaui3G1NQkcFlECouUdhmmtDHE9Lal9S0MwJdHTTKjGLYbVFs3pc0xMmK6gBF NdBOx042tlufPdl+i8zmFB0NwKiRY8pr0qPYJS6lK9J2kEyaN7R5s/gIeMGsG6FzL5Rc jLRILfIZpBBB7stkaRbWkNwB0zl7dj9U2wJtiNaiD2jJbIkxJ10zLu5Yxtzrxyq77ynq S5SOzS2YZDpDAQgf4z1KsolSwOEfKyzFfzXdMKBrWWrfZBOO7N0eD8FrkTUi2alBPU3K FeBQ== X-Gm-Message-State: AOUpUlEpDh2KyVkGpTGWFQNYZz4iI3UuSuAYV3dmFKlSaTUTtyx4oye/ vFkKi65WDqsSlAnDwEELTtQ= X-Google-Smtp-Source: AA+uWPxJN79o1XPPqE854s9dxRpDUISzRyn0pzGpzAf8KYPCwk5o0DCn2KcOhBtvHMIoatz7sqmBdg== X-Received: by 2002:a2e:40c:: with SMTP id 12-v6mr14031781lje.146.1534199682700; Mon, 13 Aug 2018 15:34:42 -0700 (PDT) Received: from z50.lan (93-181-165-181.internetia.net.pl. [93.181.165.181]) by smtp.gmail.com with ESMTPSA id f136-v6sm3572702lfe.71.2018.08.13.15.34.41 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 13 Aug 2018 15:34:42 -0700 (PDT) From: Janusz Krzysztofik To: Boris Brezillon , Miquel Raynal Subject: [PATCH v3 4/7] mtd: rawnand: ams-delta: request data port GPIO resource Date: Tue, 14 Aug 2018 00:34:45 +0200 Message-Id: <20180813223448.21316-5-jmkrzyszt@gmail.com> X-Mailer: git-send-email 2.16.4 In-Reply-To: <20180813223448.21316-1-jmkrzyszt@gmail.com> References: <20180806222918.12644-1-jmkrzyszt@gmail.com> <20180813223448.21316-1-jmkrzyszt@gmail.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20180813_153453_956232_B4FA5F4D X-CRM114-Status: GOOD ( 16.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:243 listed in] [list.dnswl.org] 0.6 HK_RANDOM_ENVFROM Envelope sender username looks random -0.0 SPF_PASS SPF: sender matches SPF record 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (jmkrzyszt[at]gmail.com) 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, Aaro Koskinen , Tony Lindgren , Richard Weinberger , Linus Walleij , Janusz Krzysztofik , linux-kernel@vger.kernel.org, Marek Vasut , linux-mtd@lists.infradead.org, linux-gpio@vger.kernel.org, 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 13 22:34:46 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Janusz Krzysztofik X-Patchwork-Id: 957304 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="R5oScjte"; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="PF89NVC/"; 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 41q9ZC1Yxnz9s5b for ; Tue, 14 Aug 2018 08:36:35 +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=8NiSY7TSwC3kEgtZp9pKabCPfrHY89v50wOJV6Fz3WY=; b=R5oScjteLwW7NwcZGpd+6oXfw7 DXsKju8gZQL3XPOjZPFGWy5qas5n+3yGPL2weESRSh936ezIZoSHihSS52wXlAi+6FrZj/se6fPx0 wcO6/NpbbckZy/WTsz/4p7Swtyr3q09coHH8lxIBzqoMuKUXAmCvA4pQZrCt5jLMJ3TbddnHqOFHh 1I27P6m1XUFm1AHKve/WVTuI9HtLbjX1haTWngsptUy9mZX6zZKnorxTjBawqT+wKn2QqlPfyVX0W wIvxddEjrKzsUb0ahFsxCpUR0igx+TVJbcZQ+Io85hRn2HX7jrzHktAHC0jvvy+v5wf3FhhHwLB91 NzLQzLYA==; 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 1fpLRt-00034S-NA; Mon, 13 Aug 2018 22:36:29 +0000 Received: from mail-lf1-x143.google.com ([2a00:1450:4864:20::143]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1fpLQP-0008Tt-H8; Mon, 13 Aug 2018 22:35:00 +0000 Received: by mail-lf1-x143.google.com with SMTP id a4-v6so12400603lff.5; Mon, 13 Aug 2018 15:34:45 -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=B/J/zSnahygYuOd62zFWNAm0nwwi22qYKgimEpTrnhw=; b=PF89NVC/li8IpcQ0ErazLmmrEsPb7epnQb2xS8WZ+rfJAVRgwJilhhqpLwTCDxr6UK QPapuO/Ofrd6A37CTY4VwAvhuvg7zEV11vgne/2bMqvdBaz5HyH7PKyld1gh01DBRtzX u7EBsa35y72ExJYPs4tx1FOpLxtrjdL2RBZfdmLGhG8X4vPu42cOdCIxtKjKYLDnqaVG bk+VO2v4DLut3BUR1avPAQ50uh7GGhLtflUXAWI2edbtaiwKHF651E5CC6OJ37tcJVTx B7N+cVMy2pvs2XU+k4hC9+3N0QwRvyYkid01EQQa/+rU4YTNz3hGbZ5X22F+/ZqqOJ6l p2sg== 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=B/J/zSnahygYuOd62zFWNAm0nwwi22qYKgimEpTrnhw=; b=V66Vigla4OtEFnUqkeLRdAheobsDzPZCTfVhafxi8NXcEA2j/Y6d7brnQeWx99ksak SFd/j2wpHM4ekvAJ41+7donaMKhqE+gYBfMFcymveh6vAHIU0fmxB9QYwQwA8mnI8ACn cEvuj0xcro4n0pQtP3kN2cS+RZJyb+cc9Nu3wyI1B8P2uJwjMHMydmv8WVRjV4QcyDhC jloe3O0AUr7VdOmbMnr28AFW8R9p24ej+6I9V1VObwqHA2Bmh8tNM51CSQ8MaapZvtpi 0XwxEkhXk4C1zsHt+Vp/+uZwygsl79X2liCxKI3v4nHs1TCjtHWd5T9mA46HjplgIKnD H79Q== X-Gm-Message-State: AOUpUlGebb9t1dF/OuwWmr1SS2LgplBXN7gU+AAS+Llbj30uU8k9HRgC d2xb/oUZe5Z1sjoJksGzhhw= X-Google-Smtp-Source: AA+uWPytJeYZTjY+ej2+dRywqoOTtgJcDNqAk6qWN9h35iJgfGqb9Smkmz4BPnPJhV+n9m7BnIQe1g== X-Received: by 2002:a19:b24e:: with SMTP id b75-v6mr11539839lff.11.1534199684031; Mon, 13 Aug 2018 15:34: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 f136-v6sm3572702lfe.71.2018.08.13.15.34.42 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 13 Aug 2018 15:34:43 -0700 (PDT) From: Janusz Krzysztofik To: Boris Brezillon , Miquel Raynal Subject: [PATCH v3 5/7] mtd: rawnand: ams-delta: Set port direction when needed Date: Tue, 14 Aug 2018 00:34:46 +0200 Message-Id: <20180813223448.21316-6-jmkrzyszt@gmail.com> X-Mailer: git-send-email 2.16.4 In-Reply-To: <20180813223448.21316-1-jmkrzyszt@gmail.com> References: <20180806222918.12644-1-jmkrzyszt@gmail.com> <20180813223448.21316-1-jmkrzyszt@gmail.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20180813_153457_814636_1B19C5DD X-CRM114-Status: GOOD ( 17.84 ) 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:143 listed in] [list.dnswl.org] 0.6 HK_RANDOM_ENVFROM Envelope sender username looks random -0.0 SPF_PASS SPF: sender matches SPF record 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (jmkrzyszt[at]gmail.com) 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, Aaro Koskinen , Tony Lindgren , Richard Weinberger , Linus Walleij , Janusz Krzysztofik , linux-kernel@vger.kernel.org, Marek Vasut , linux-mtd@lists.infradead.org, linux-gpio@vger.kernel.org, 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. Improve performance of the driver by setting the port direction only when needed. This optimisation will become particularly important as soon as planned conversion of the driver to GPIO API for data I/O will be implemented. Signed-off-by: Janusz Krzysztofik --- drivers/mtd/nand/raw/ams-delta.c | 59 ++++++++++++++++++++++++++++++++-------- 1 file changed, 47 insertions(+), 12 deletions(-) diff --git a/drivers/mtd/nand/raw/ams-delta.c b/drivers/mtd/nand/raw/ams-delta.c index 09d6901fc94d..5f9180fe4f8b 100644 --- a/drivers/mtd/nand/raw/ams-delta.c +++ b/drivers/mtd/nand/raw/ams-delta.c @@ -45,6 +45,7 @@ struct ams_delta_nand { struct gpio_desc *gpiod_ale; struct gpio_desc *gpiod_cle; void __iomem *io_base; + bool data_in; }; /* @@ -72,50 +73,83 @@ static const struct mtd_partition partition_info[] = { .size = 3 * SZ_256K }, }; -static void ams_delta_write_byte(struct mtd_info *mtd, u_char byte) +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); - void __iomem *io_base = priv->io_base; - 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); } -static u_char ams_delta_read_byte(struct mtd_info *mtd) +static void ams_delta_write_byte(struct mtd_info *mtd, u_char byte) { - 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; + if (priv->data_in) { + writew(0, io_base + OMAP_MPUIO_IO_CNTL); + priv->data_in = false; + } + + ams_delta_write_next_byte(mtd, byte); +} + +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); + u_char res; + 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(priv->gpiod_nre, 1); return res; } +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); + void __iomem *io_base = priv->io_base; + + if (!priv->data_in) { + writew(~0, io_base + OMAP_MPUIO_IO_CNTL); + priv->data_in = true; + } + + 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; + int i = 0; + + if (len > 0) + ams_delta_write_byte(mtd, buf[i++]); - for (i=0; i 0) + buf[i++] = ams_delta_read_byte(mtd); - for (i=0; idev, "data GPIO request failed: %d\n", err); goto out_mtd; } + priv->data_in = true; /* Scan to find existence of the device */ err = nand_scan(mtd, 1); From patchwork Mon Aug 13 22:34:47 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Janusz Krzysztofik X-Patchwork-Id: 957305 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="Ys8p7w1n"; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="gPe45A5S"; 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 41q9ZQ0bmKz9s5b for ; Tue, 14 Aug 2018 08:36:46 +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=4GlS71Jc9qV0nxLfPDHmqF3nSPwLYKBrGFR03G3ze8Q=; b=Ys8p7w1nTAbjqMByv5WXjf3s9r tCBXcI8TxSi/QYYHs+4vmHA7TIZNehQCEA3Ml6/WocDyEG/GDDMqkCNgJ5LWZB94ejvFz3GRE24Ww bQO31cPQ68IpE2sIQfhxA1YR6qKbVG7kyb5m/AKifs5F3Gg+MMdIPUUvnU19pP4N0Fms5XUwJWanz v5GcSk+R/Ii43dmoAawOp/A6fELYEm8bCmHTrFIlX7WUYyxt1HQAJ7TKuNlw+Pki5bWXxtLWoSpS/ ndpVS8/0pNNBLWzL+/EOB3KPXQCQVD2ezXAsEaM42XfopRu3KkmUl4UtMe0Q7nVjMos9pQle2n8Pj A1YUu9fg==; 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 1fpLS5-0003P0-8n; Mon, 13 Aug 2018 22:36: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 1fpLQQ-0008UI-4X; Mon, 13 Aug 2018 22:35:01 +0000 Received: by mail-lf1-x142.google.com with SMTP id f18-v6so12416943lfc.2; Mon, 13 Aug 2018 15:34: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=z7PaRe0Kcvcx7hiv+aZ/0LG6vJqsdKc6trNkBzyVvLs=; b=gPe45A5SUYgSodBEwXYxl4cY6QCuG9T1pS4kZoMPmUX7HhqEw+TaCNXmA0Q8dEIAWk 1QJEDVSuGJjSYTNDXF9uxrf4IUE9RRLR40M8x8GIa3iVpy+0cDxzisccxsztC0wJkJvB cVjrhHA1ndYm/JZHNYaq2Nb9vdSA0ksIJc151Lqi3hoSJiet+sFDTzqMTvYybywgogjx 3EmcNhoCDCIXCSNVu944uGYBAU151rNOkiGxQfRhvKB9Gsd1QzcZnia34iMN3wr1aQHn nntPOTRVm27UhrOhzG+JZId9wb5eQTb8xThnhkgTLUFbEoGaSJ/LJoVB2pEsbPAJX+xQ MsmA== 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=z7PaRe0Kcvcx7hiv+aZ/0LG6vJqsdKc6trNkBzyVvLs=; b=RzMHcQsUYV0WG73y55wa3jAAc6hVfN6GOX5gp2RV4sFFT8MyguuzUgGpefs9jAZAMT ji3wJOC64DTOPJhvA3ZPuDZhCTTQismPxjexJCtDOJqy3xHCoQmAGEXGh9zugKa/Fsqm Pjp3jSepgdxxyU5rtZXC2v1aAMyzpSYMcatFz3T38l+tSOYj8c57oKCaFoTToWF3oKbT 96pZzQUcFclLUD/UQWVjrFjOC8BHDICA75+werT1PRg3opXVrfRGHJsjSoNSHCdGRJhT DSbctOvl3ygHU58m7JkkRaTwAYE44aUPy7UgRrHajKean79hpuU9KCx79iyLIp0i1O/V 9q3Q== X-Gm-Message-State: AOUpUlHbfCKlf5MOyO8KbIYi1MUIVM8ub9ZlGxSUCkgTB1L+HMbbbNTT R2Ql5V5IrYvv35+rIv8FqzE= X-Google-Smtp-Source: AA+uWPwavSaEse9bsLkIUaVrmEhHcahOk3am45tTQUsit/zyaY4SG1CIhgEph8o17Upefkm8zjFMJg== X-Received: by 2002:a19:e546:: with SMTP id c67-v6mr12608411lfh.135.1534199685420; Mon, 13 Aug 2018 15:34:45 -0700 (PDT) Received: from z50.lan (93-181-165-181.internetia.net.pl. [93.181.165.181]) by smtp.gmail.com with ESMTPSA id f136-v6sm3572702lfe.71.2018.08.13.15.34.44 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 13 Aug 2018 15:34:44 -0700 (PDT) From: Janusz Krzysztofik To: Boris Brezillon , Miquel Raynal Subject: [PATCH v3 6/7] mtd: rawnand: ams-delta: Simplify pointer resolution on read/write Date: Tue, 14 Aug 2018 00:34:47 +0200 Message-Id: <20180813223448.21316-7-jmkrzyszt@gmail.com> X-Mailer: git-send-email 2.16.4 In-Reply-To: <20180813223448.21316-1-jmkrzyszt@gmail.com> References: <20180806222918.12644-1-jmkrzyszt@gmail.com> <20180813223448.21316-1-jmkrzyszt@gmail.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20180813_153458_426099_2C4C0B1B X-CRM114-Status: GOOD ( 15.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 SPF_PASS SPF: sender matches SPF record 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (jmkrzyszt[at]gmail.com) 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, Aaro Koskinen , Tony Lindgren , Richard Weinberger , Linus Walleij , Janusz Krzysztofik , linux-kernel@vger.kernel.org, Marek Vasut , linux-mtd@lists.infradead.org, linux-gpio@vger.kernel.org, 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 making them accept private structure pointer instead of resolving it again from mtd_info. Signed-off-by: Janusz Krzysztofik Reviewed-by: Boris Brezillon --- drivers/mtd/nand/raw/ams-delta.c | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/drivers/mtd/nand/raw/ams-delta.c b/drivers/mtd/nand/raw/ams-delta.c index 5f9180fe4f8b..59fc417e8fa9 100644 --- a/drivers/mtd/nand/raw/ams-delta.c +++ b/drivers/mtd/nand/raw/ams-delta.c @@ -73,10 +73,9 @@ static const struct mtd_partition partition_info[] = { .size = 3 * SZ_256K }, }; -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 nand_chip *this = &priv->nand_chip; writew(byte, this->IO_ADDR_W); @@ -85,10 +84,8 @@ static void ams_delta_write_next_byte(struct mtd_info *mtd, u_char byte) gpiod_set_value(priv->gpiod_nwe, 1); } -static void ams_delta_write_byte(struct mtd_info *mtd, u_char byte) +static void ams_delta_write_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); void __iomem *io_base = priv->io_base; if (priv->data_in) { @@ -96,13 +93,12 @@ static void ams_delta_write_byte(struct mtd_info *mtd, u_char byte) priv->data_in = false; } - ams_delta_write_next_byte(mtd, byte); + ams_delta_write_next_byte(priv, byte); } -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 nand_chip *this = &priv->nand_chip; u_char res; gpiod_set_value(priv->gpiod_nre, 0); @@ -126,30 +122,34 @@ static u_char ams_delta_read_byte(struct mtd_info *mtd) priv->data_in = true; } - return ams_delta_read_next_byte(mtd); + return ams_delta_read_next_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 = 0; if (len > 0) - ams_delta_write_byte(mtd, buf[i++]); + ams_delta_write_byte(priv, buf[i++]); while (i < len) - 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 = 0; if (len > 0) buf[i++] = ams_delta_read_byte(mtd); while (i < len) - buf[i++] = ams_delta_read_next_byte(mtd); + buf[i++] = ams_delta_read_next_byte(priv); } /* @@ -173,7 +173,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_byte(priv, cmd); } static int ams_delta_nand_ready(struct mtd_info *mtd) From patchwork Mon Aug 13 22:34:48 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Janusz Krzysztofik X-Patchwork-Id: 957307 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="sF4Md8ES"; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="CIHvDjch"; 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 41q9bB3TBXz9s5b for ; Tue, 14 Aug 2018 08:37: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=Y8pgKtje/YxMEHyhHECUcFB3WYKKn3YP7sG56gMjzKc=; b=sF4Md8ESS7XTKCtrCmCxGKw/wQ jOV1I9dp4h7YhpLxGE6muccYQBo5y5efdTIihq9Dtyt61gkVweBCf6mwYoRHSQaSLJ60OMCkLe40N L8JC3EByeQuzd8odVe3wq5UZbBLdgmNl6H5gYtDNc/AwaVex/09idp/Fdp/yzUmdh+mEj7jYr7Oib QM4UUL4ZiqE9ugByTUPojkHXdt0FuI2SQPTqr+ARqBIDBiBbNePn+tUkJXvYSyDpPLnn6FcBNlRa2 XNDtDtQ76po8IX8MbyXbHtTqKSrGdmhQWBNDls9FLJCGQ6zVjX8dhQiu37BBEv3TsJVLpKq563dbT DNtmfZYg==; 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 1fpLSi-0004IC-CV; Mon, 13 Aug 2018 22:37:20 +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 1fpLQR-0008UV-2G; Mon, 13 Aug 2018 22:35:06 +0000 Received: by mail-lf1-x144.google.com with SMTP id u202-v6so12386952lff.9; Mon, 13 Aug 2018 15:34:48 -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=EM2ZsNGUnxUWdXWL+p9/kHNDMcMEp8SsKXGGE2JxC54=; b=CIHvDjchQn2g/jvU/KoCLHHAEu7t9yFgxCCketGgKY8H6jCqR3KoJDCVTvU1/TnNM7 5k41uZ2oRlUpNg3zEnn+9QclFgaUroNBkfnBw6BCPcPJCTIiClQzxFSebJkRm2cy6yWp V/IM+ICjT9Ekeb3E6z9EvdFdjgF7EPg/IT1K47s/a9OaT7zrYTtGHzRJFG899lkG/Nje Oc06K2r22v1BDeHEdoyOj9xUrsylVsVyfPSeV/7TUJjztRlX1HUGVXxM7MWXtEzon36Y dUaDodgi74oXTGsJyNMJ7CqnsaW1SnoCn3kf7gGWCu8jQDrorWWiFtcbDJ+P3y1SVNL5 jCUw== 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=EM2ZsNGUnxUWdXWL+p9/kHNDMcMEp8SsKXGGE2JxC54=; b=mFuSqIHqI9x6LZwSQOONPXF8tOs3Jlq2zD7o4uSQRJF79rzokC5QMc96yHnnkoT045 +s5xLAXF1noCEKd0uu+NT9D7hlFf5VnNxBJkRCpfdiwxpR9NGnnVZb44ok1+Ccizd14U re/Lk5oWLHZWbknVQ3zLllUMIINCcKlZdlCvzqizTAfX6V+sSvSip36laykfow21eR44 tTptvF5KypRe3PoRONECHiV5XS0lkwiF9lkRYAFwg9NbccY3/TA2ab6wd0Goarq/8+sX A9kz7GP0rVQA1vJVZN5KxgOPiBguXP5Zjxw0QjpgUHpK1rF4x3SUCXpziTVwFeEYI2M7 8wpw== X-Gm-Message-State: AOUpUlEBNtq64Q2R6/gzlSnfx+O/W+/4ok8j8/hEuKERJ/HmKrOl+Sx+ EdbVRldG9lN/k5HbPhU6Ync= X-Google-Smtp-Source: AA+uWPxxt4LIrmiKmlfyb//rqtd/PNqsXvJ96FZ5YV81tCqu+u2GE5NB+6b1vcf6NofWx+q2eOMrLg== X-Received: by 2002:a19:169f:: with SMTP id 31-v6mr11642723lfw.72.1534199686795; Mon, 13 Aug 2018 15:34:46 -0700 (PDT) Received: from z50.lan (93-181-165-181.internetia.net.pl. [93.181.165.181]) by smtp.gmail.com with ESMTPSA id f136-v6sm3572702lfe.71.2018.08.13.15.34.45 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 13 Aug 2018 15:34:46 -0700 (PDT) From: Janusz Krzysztofik To: Boris Brezillon , Miquel Raynal Subject: [PATCH v3 7/7] mtd: rawnand: ams-delta: use GPIO API for data I/O Date: Tue, 14 Aug 2018 00:34:48 +0200 Message-Id: <20180813223448.21316-8-jmkrzyszt@gmail.com> X-Mailer: git-send-email 2.16.4 In-Reply-To: <20180813223448.21316-1-jmkrzyszt@gmail.com> References: <20180806222918.12644-1-jmkrzyszt@gmail.com> <20180813223448.21316-1-jmkrzyszt@gmail.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20180813_153459_464459_5970E450 X-CRM114-Status: GOOD ( 22.67 ) 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 SPF_PASS SPF: sender matches SPF record 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (jmkrzyszt[at]gmail.com) 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, Aaro Koskinen , Tony Lindgren , Richard Weinberger , Linus Walleij , Janusz Krzysztofik , linux-kernel@vger.kernel.org, Marek Vasut , linux-mtd@lists.infradead.org, linux-gpio@vger.kernel.org, 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 significant, can be recognized as a regression, that's why I'm still submitting this patch as RFC. The driver should work with any 8+-bit bidirectional GPIO port, not only OMAP. Signed-off-by: Janusz Krzysztofik Reviewed-by: Linus Walleij --- Exceprts fro timestamped boot logs showing performance degrade. Before the change: [ 5.469426] Creating 6 MTD partitions on "ams-delta-nand": [ 5.480909] 0x000000000000-0x000000380000 : "Kernel" [ 5.502659] 0x000000380000-0x0000003c0000 : "u-boot" [ 5.523055] 0x0000003c0000-0x000000400000 : "u-boot params" [ 5.543612] 0x000000400000-0x000000440000 : "Amstrad LDR" [ 5.564607] 0x000000440000-0x000001f40000 : "File system" [ 5.601760] 0x000001f40000-0x000002000000 : "PBL reserved" [ 5.624369] usbcore: registered new interface driver dm9601 [ 5.636233] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver [ 5.649191] ohci-omap: OHCI OMAP driver [ 5.660713] ohci ohci: OMAP OHCI [ 5.671299] ohci ohci: new USB bus registered, assigned bus number 1 [ 5.686862] ohci ohci: irq 54, io mem 0xfffba000 [ 5.785897] hub 1-0:1.0: USB hub found [ 5.797856] hub 1-0:1.0: 3 ports detected [ 5.817576] usbcore: registered new interface driver usb-storage [ 5.832551] ams-delta-serio ams-delta-serio: incomplete constraints, dummy supplies not allowed [ 5.858588] ams-delta-serio ams-delta-serio: regulator request failed (-19) [ 5.879312] input: omap-keypad as /devices/platform/omap-keypad/input/input0 [ 5.902490] omap_rtc omap_rtc: already running [ 5.922929] omap_rtc omap_rtc: registered as rtc0 [ 5.945570] softdog: initialized. soft_noboot=0 soft_margin=60 sec soft_panic=0 (nowayout=0) [ 5.976712] usbcore: registered new interface driver btusb [ 6.007348] cx20442-codec cx20442-codec: incomplete constraints, dummy supplies not allowed [ 6.040575] cx20442-codec cx20442-codec: failed to get POR supply (-19) [ 6.060916] cx20442-codec cx20442-codec: ASoC: failed to probe component -517 [ 6.083486] ams-delta-audio ams-delta-audio: ASoC: failed to instantiate card -517 [ 6.121850] ams-delta-audio ams-delta-audio: snd_soc_register_card failed (-517) [ 6.163047] NET: Registered protocol family 17 [ 6.182770] Bluetooth: BNEP (Ethernet Emulation) ver 1.3 [ 6.203517] Bluetooth: BNEP socket layer initialized [ 6.283017] serial8250 serial8250.1: Linked as a consumer to regulator.1 [ 6.306113] usb 1-1: new full-speed USB device number 2 using ohci [ 6.328825] clock: disabling unused clocks to save power [ 6.350426] Skipping reset check for DSP domain clock "dsptim_ck" [ 6.372272] Skipping reset check for DSP domain clock "dspxor_ck" [ 6.393712] Skipping reset check for DSP domain clock "dspper_ck" [ 6.428311] ams-delta-serio ams-delta-serio: Linked as a consumer to regulator.2 [ 6.467801] serio serio0: AMS DELTA keyboard adapter [ 6.492511] cx20442-codec cx20442-codec: Linked as a consumer to regulator.1 [ 6.527382] ams-delta-audio ams-delta-audio: cx20442-voice <-> omap-mcbsp.1 mapping ok [ 6.577387] input: AMS_DELTA hook_switch as /devices/platform/ams-delta-audio/sound/card0/input1 [ 6.627497] input: AT Raw Set 2 keyboard as /devices/platform/ams-delta-serio/serio0/input/input2 [ 6.673663] omap_rtc omap_rtc: setting system clock to 2013-02-09 07:22:13 UTC (1360394533) [ 6.715895] modem_nreset: incomplete constraints, leaving on [ 6.738677] ALSA device list: [ 6.758398] #0: AMS_DELTA [ 7.036234] dm9601 1-1:1.0 eth0: register 'dm9601' at usb-ohci-1, Davicom DM96xx USB 10/100 Ethernet, 00:60:6e:00:00:11 [ 133.860599] random: crng init done [ 138.275853] VFS: Mounted root (jffs2 filesystem) on device 31:4. After the change: [ 6.261107] Creating 6 MTD partitions on "ams-delta-nand": [ 6.272046] 0x000000000000-0x000000380000 : "Kernel" [ 6.294436] 0x000000380000-0x0000003c0000 : "u-boot" [ 6.314454] 0x0000003c0000-0x000000400000 : "u-boot params" [ 6.335353] 0x000000400000-0x000000440000 : "Amstrad LDR" [ 6.356669] 0x000000440000-0x000001f40000 : "File system" [ 6.393713] 0x000001f40000-0x000002000000 : "PBL reserved" [ 6.416771] usbcore: registered new interface driver dm9601 [ 6.428631] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver [ 6.441533] ohci-omap: OHCI OMAP driver [ 6.452758] ohci ohci: OMAP OHCI [ 6.463300] ohci ohci: new USB bus registered, assigned bus number 1 [ 6.478817] ohci ohci: irq 54, io mem 0xfffba000 [ 6.580520] hub 1-0:1.0: USB hub found [ 6.592424] hub 1-0:1.0: 3 ports detected [ 6.612363] usbcore: registered new interface driver usb-storage [ 6.627358] ams-delta-serio ams-delta-serio: incomplete constraints, dummy supplies not allowed [ 6.653296] ams-delta-serio ams-delta-serio: regulator request failed (-19) [ 6.674219] input: omap-keypad as /devices/platform/omap-keypad/input/input0 [ 6.697910] omap_rtc omap_rtc: already running [ 6.718376] omap_rtc omap_rtc: registered as rtc0 [ 6.740942] softdog: initialized. soft_noboot=0 soft_margin=60 sec soft_panic=0 (nowayout=0) [ 6.772085] usbcore: registered new interface driver btusb [ 6.803187] cx20442-codec cx20442-codec: incomplete constraints, dummy supplies not allowed [ 6.836386] cx20442-codec cx20442-codec: failed to get POR supply (-19) [ 6.856730] cx20442-codec cx20442-codec: ASoC: failed to probe component -517 [ 6.879234] ams-delta-audio ams-delta-audio: ASoC: failed to instantiate card -517 [ 6.917325] ams-delta-audio ams-delta-audio: snd_soc_register_card failed (-517) [ 6.958519] NET: Registered protocol family 17 [ 6.978224] Bluetooth: BNEP (Ethernet Emulation) ver 1.3 [ 6.998989] Bluetooth: BNEP socket layer initialized [ 7.077593] serial8250 serial8250.1: Linked as a consumer to regulator.1 [ 7.100678] usb 1-1: new full-speed USB device number 2 using ohci [ 7.123429] clock: disabling unused clocks to save power [ 7.145074] Skipping reset check for DSP domain clock "dsptim_ck" [ 7.166983] Skipping reset check for DSP domain clock "dspxor_ck" [ 7.188434] Skipping reset check for DSP domain clock "dspper_ck" [ 7.223321] ams-delta-serio ams-delta-serio: Linked as a consumer to regulator.2 [ 7.262882] serio serio0: AMS DELTA keyboard adapter [ 7.287656] cx20442-codec cx20442-codec: Linked as a consumer to regulator.1 [ 7.322824] ams-delta-audio ams-delta-audio: cx20442-voice <-> omap-mcbsp.1 mapping ok [ 7.373165] input: AMS_DELTA hook_switch as /devices/platform/ams-delta-audio/sound/card0/input1 [ 7.423520] input: AT Raw Set 2 keyboard as /devices/platform/ams-delta-serio/serio0/input/input2 [ 7.469578] omap_rtc omap_rtc: setting system clock to 2013-02-09 07:34:10 UTC (1360395250) [ 7.511830] modem_nreset: incomplete constraints, leaving on [ 7.534812] ALSA device list: [ 7.554541] #0: AMS_DELTA [ 7.971899] dm9601 1-1:1.0 eth0: register 'dm9601' at usb-ohci-1, Davicom DM96xx USB 10/100 Ethernet, 00:60:6e:00:00:11 [ 133.935226] random: crng init done [ 320.764645] VFS: Mounted root (jffs2 filesystem) on device 31:4. I think most of the overhead is in iterations performed both inside and outside get/set array functions: - building a mask for get_multiple() and transfering results to value array in gpiod_get_array_value_complex(), then again from the array by a caller, - building a value array by the caller, the building a mask and tranferiing values from array to bitmap for .set_multiple() in gpiod_set_array_value_comples(). Thanks, Janusz drivers/mtd/nand/raw/ams-delta.c | 126 ++++++++++++++++++--------------------- 1 file changed, 59 insertions(+), 67 deletions(-) diff --git a/drivers/mtd/nand/raw/ams-delta.c b/drivers/mtd/nand/raw/ams-delta.c index 59fc417e8fa9..8bedcd7c7928 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; bool data_in; }; @@ -73,52 +70,79 @@ static const struct mtd_partition partition_info[] = { .size = 3 * SZ_256K }, }; -static void ams_delta_write_next_byte(struct ams_delta_nand *priv, u_char byte) +static void ams_delta_write_commit(struct ams_delta_nand *priv) { - struct nand_chip *this = &priv->nand_chip; - - writew(byte, this->IO_ADDR_W); - gpiod_set_value(priv->gpiod_nwe, 0); ndelay(40); gpiod_set_value(priv->gpiod_nwe, 1); } -static void ams_delta_write_byte(struct ams_delta_nand *priv, u_char byte) +static void ams_delta_write_next_byte(struct ams_delta_nand *priv, u_char byte) { - void __iomem *io_base = priv->io_base; + 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 ams_delta_nand *priv, u_char byte) +{ if (priv->data_in) { - writew(0, io_base + OMAP_MPUIO_IO_CNTL); + 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)); priv->data_in = false; - } - ams_delta_write_next_byte(priv, byte); + ams_delta_write_commit(priv); + } else { + ams_delta_write_next_byte(priv, byte); + } } static u_char ams_delta_read_next_byte(struct ams_delta_nand *priv) { - struct nand_chip *this = &priv->nand_chip; - u_char res; + struct gpio_descs *data_gpiods = priv->data_gpiods; + unsigned long bits = 0; + int i, value_array[data_gpiods->ndescs]; gpiod_set_value(priv->gpiod_nre, 0); ndelay(40); - 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 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); - void __iomem *io_base = priv->io_base; if (!priv->data_in) { - writew(~0, io_base + OMAP_MPUIO_IO_CNTL); + 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]); + priv->data_in = true; } @@ -193,14 +217,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); @@ -213,25 +231,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; @@ -241,7 +242,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) @@ -259,67 +260,61 @@ 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; } priv->data_in = true; /* 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; } /* @@ -329,13 +324,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; }