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: 10564931 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 9B43214C0 for ; Mon, 13 Aug 2018 22:39:26 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 81A1E293F7 for ; Mon, 13 Aug 2018 22:39:26 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 73991293FE; Mon, 13 Aug 2018 22:39:26 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED,DKIM_VALID,FREEMAIL_FROM,MAILING_LIST_MULTI autolearn=ham version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 2965D293F7 for ; Mon, 13 Aug 2018 22:39:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type: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=/Wg1/2Zop+YzKHuwgwMWXL96ctLQzuWG8/X6EBbgpOk=; b=XildVlh2F6g1ZNQ18b5J3mVzSV dcg172WjesAwygAprl4E8Yrrq9Qffd/U27NbIIrgYrCtoEiWOINfhGWxbzf685NdaZAGNLIjQcY2P CG+qYgbLptHUkAFEv9nN5qDjllWUO7V1/zaIcOlB5WUuK7hIfyqv6JQ47fJHl70W288ZGwu3bbYhA G8+Ejb7gZRHqs0QJcy8TAbZQItdiFiRw2nv4rbnnk3dODbVtQvQbcDbCdShsh9cnZe0pAj/zxXZNc TODiQ7lmOuDDB5dyr5tDGYvdv3VbgR5xwBOH+VGmjmtV8K5BZreQSWjj6oVY6PgwIIFcX/sw+dzhm qXvJ7wtw==; 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-0004mk-1N; 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-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: 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-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP 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: 10564925 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 0C22314C0 for ; Mon, 13 Aug 2018 22:36:04 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id EF0FB29353 for ; Mon, 13 Aug 2018 22:36:03 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id E2DAC29370; Mon, 13 Aug 2018 22:36:03 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED,DKIM_VALID,FREEMAIL_FROM,MAILING_LIST_MULTI autolearn=unavailable version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 5343D29353 for ; Mon, 13 Aug 2018 22:36:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type: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=tkq/zM0d5s4zvuGD4WFwjwwQRsoFujy+IizwtlOECpc=; b=QlRodsfkW1bnavzQ8MShoDMl6E +/Uz+TcajNbFwPzgNbtFLpDaOtv+S0sx6u3AdUkXaFEkHw3gFeVmjqin3LLtrW4ld3RW6G+ybOY5F dyMOhkz/7vqQ5EXAYAa9kxhcDbJUAIcln62H7useVtH7bA0idBpPKQsJdnvmAhXu4t3wQ4svlbS5R vWszUYRmLWdBI06u9IPG68QFPDIv65okVjwtQyAT01dG9dxrlrq2as+e463ru31BZBjQiLReNSu/a uALHYtwzQI2jktV+d11KDo9ZefCutV3YrjacPE4K4PoVBtaMMM3zDoWKN+JPvbSJlizaJgxgxiwgO WiBjPU4g==; 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 1fpLRN-00024B-6a; Mon, 13 Aug 2018 22:35:57 +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-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: 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-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP 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: 10564911 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id B3C2B14C0 for ; Mon, 13 Aug 2018 22:35:03 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A2A0C29353 for ; Mon, 13 Aug 2018 22:35:03 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 941CF29370; Mon, 13 Aug 2018 22:35:03 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED,DKIM_VALID,FREEMAIL_FROM,MAILING_LIST_MULTI autolearn=ham version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 34DA829353 for ; Mon, 13 Aug 2018 22:35:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type: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=Jt1CWmLVKt5teJ9I1jWfxRVkxMLxSGG6Z3AXGUf3Iz0=; b=GtOGy9AcBMn7wNA09OrCNIEzWh lfFZHQzo8u4aD8aKcLizSPsoGBMgYMviTs25ci3O67ZXCLqqzqExR0chTAlSLuDHBXhP8jEBhGruL e1mjFIOXh8dtolPcma7bJGdpJSH3SlNGMyJ6sRRVrNIqTNYmMtoC0TBDKxfVmhJkh0MiUDblDit4Y LrFBIlEerkwJCCm+PPkfibSAxAWdY2SlyH97FDk0bnqZQiVm+fcibwNngY/2t0zshc2+J2ipYEu2o D/sW1fvUoUpYfkyWN/mFXk0aHXk94JY05ucFoMwwyxJyODqFdESNlA8HXYh+m15d8sO6HUCRmzds2 Y5bVGAGA==; 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 1fpLQN-00005W-9F; Mon, 13 Aug 2018 22:34:55 +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-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: 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-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP 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: 10564933 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 3EAB71510 for ; Mon, 13 Aug 2018 22:39:37 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 2F1F7293F7 for ; Mon, 13 Aug 2018 22:39:37 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 22F4D293FE; Mon, 13 Aug 2018 22:39:37 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED,DKIM_VALID,FREEMAIL_FROM,MAILING_LIST_MULTI autolearn=ham version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id C457D293F7 for ; Mon, 13 Aug 2018 22:39:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type: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=3vLIDuBg1biOs08o/Wi5hZmS2P0oPYIt6oaToEP8I/o=; b=frFYRlL7eChgRYjd/jGkV9nMDC FdodDZmejoUOAJolaK6EW5FKBA5BZV9xbZE/MqNETZTcu3icJNxeRy5a7sg2IfZbYeqJM3cWpBcMk wTRQFCTx+rvHNnJJ68HjDOyFo6OvmYOKquKPZ5sxaxpQ9kTufJ5DKz8L9HEC1ec8UKgFrs8N/DcSk 9i9jIjpXY7z7yxva3XkjlhW0umWTgODylBTRip4oGACBzXgJ9Ure/LbwnNxVtR/4xaDa0HVpLO7oN Vd6ll7VjOkabLyzdbiMdSavqt0mabe2njLHfI73+jPb/j7oarRYU9/9+AwfjNbkcRfyRDynivwT7I lmo8zU6Q==; 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 1fpLUr-0004yJ-AL; Mon, 13 Aug 2018 22:39:33 +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-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: 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-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP 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: 10564935 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 247831510 for ; Mon, 13 Aug 2018 22:39:45 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1389A293F7 for ; Mon, 13 Aug 2018 22:39:45 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 063E2293FE; Mon, 13 Aug 2018 22:39:45 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED,DKIM_VALID,FREEMAIL_FROM,MAILING_LIST_MULTI autolearn=unavailable version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id A4660293F7 for ; Mon, 13 Aug 2018 22:39:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type: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=bI/htEoZXRx+X8lFKEtok6EnunNU1hqo2Sg0SC7vNfg=; b=bvNvd/3bxMt6VHhdJCc2uvI2Rp Bt2bmWNbHjHJgX+v89mvCzXEgl9rRKQjloiHDl6aOtTqLaOHJqrySLSOrBMwp2LlAzrqIZqi54AqP LAI8Qi/0r7tepHkM9zflMB/T0zXvScsbOnzWI6T5tZQt/vMgMAjUv/HtVcu/ekd4t7l5ZOD1bF2Gr CiIHFJS4lZf+6N5HTnwz0dPqP9k9dYPyckI5gQR7PseY4Q4fpFGKH9awKw0HyfXRGoYqvFGkVJlKD ie1zde6OLXt3AHTf7ZmfeRR9e8q4Qm+65HDuCGyHEIOF6FDyT7xq8rzEgXgxAVLgpeNh2inzD+XpD QcyL0q3w==; 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 1fpLV0-0005Bg-P6; Mon, 13 Aug 2018 22:39:42 +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-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: 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-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP 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: 10564937 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 2855E14C0 for ; Mon, 13 Aug 2018 22:39:48 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 17729293F7 for ; Mon, 13 Aug 2018 22:39:48 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 0B3B3293FE; Mon, 13 Aug 2018 22:39:48 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED,DKIM_VALID,FREEMAIL_FROM,MAILING_LIST_MULTI autolearn=unavailable version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id B06B5293F7 for ; Mon, 13 Aug 2018 22:39:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type: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=RQOLOPThdmxJc96nMBPrORmXomq2C1Qi3To8b1hv86I=; b=n79ZxwptLOkW2XJLYgyDAH82lO NJVUIW3dDfZTySA68VZAjVKrMYcEnhJpQB7tc5AOvTJRMr3ZsIUi46hqEdwV8CvudILPyrHDu4u81 EsnyTA8xsri/4lxVnuTfoCoAboQ0IZOiquLXwahxnxxiG2I0qfr9Nb6/pHS5j8j58HYdqB6kar3ah Te9QiqpYuiN9mtsTRS+Hz3fALqwOZ4FQvdMLARjcnZ6RTiamQJi3aLOm98SVPEpHoq0JyUaHcOSwz dqQJJh6r7fskhRMbkW0Mm6a02dJtEjK36YK5FKvGQR3kCDrUns69cfBX9SbGWUvDi4FrbCOzVMwXf +AdZQJjQ==; 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 1fpLV3-0005Dt-2T; Mon, 13 Aug 2018 22:39:45 +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-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: 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-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP 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: 10564929 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id E8E541510 for ; Mon, 13 Aug 2018 22:37:13 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D69C52936C for ; Mon, 13 Aug 2018 22:37:13 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id C8E3E29376; Mon, 13 Aug 2018 22:37:13 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED,DKIM_VALID,FREEMAIL_FROM,MAILING_LIST_MULTI autolearn=unavailable version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id E56F22936C for ; Mon, 13 Aug 2018 22:37:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type: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=sT8EaCaAF5RbtQMQ4DFk8AmjV5FUJQG04ibCUJzrhcs=; b=N8zyVTUyOsByBn9LSy8OXOvC+4 tG59fufWovNjgHg865vw5pCUcIOzgTTKZdoP73mmqXSnbrtLeP9Ek8NpVziI+RouHjPb0vXJVefQo YmO5KYz2NZBRM0FO0Ly5SWL+H+n39c6yOq02tX2spxcoO1dx+uk2sMZQNsoPu7Aa5XsKe1RPo0E57 djfNTnZlFcr1RaxFfka7m8kDAdQ4dvKoxZN2EgH/e200V1uOdrtL1K8mW0g5qCVDotWXOdT7E6FIi WmAsxdSZKQ2PDhExSKFQzP0r5vxwQRXgOpuPQ7K6ryyVp5S2Nw2DVwHjmDF92Y2m/LYwY34QcgHm4 h3JpWSRg==; 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 1fpLSX-00043B-9y; Mon, 13 Aug 2018 22:37:09 +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-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: 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-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP 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; }